diff --git "a/js\346\217\222\344\273\266/3d_shangpinzhanshi/css/reset.css" "b/js\346\217\222\344\273\266/3d_shangpinzhanshi/css/reset.css" new file mode 100644 index 0000000..d7b815b --- /dev/null +++ "b/js\346\217\222\344\273\266/3d_shangpinzhanshi/css/reset.css" @@ -0,0 +1,25 @@ +html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend{ + margin: 0; + padding: 0; + font-size: 100%; + border: 0; + outline: 0; + background: transparent; + } + +ol, ul { + list-style: none; + } + +blockquote, q { + quotes: none; + } + +:focus { + outline: 0; + } + +table { + border-collapse: collapse; + border-spacing: 0; + } \ No newline at end of file diff --git "a/js\346\217\222\344\273\266/3d_shangpinzhanshi/images/a.png" "b/js\346\217\222\344\273\266/3d_shangpinzhanshi/images/a.png" new file mode 100644 index 0000000..dcfb374 Binary files /dev/null and "b/js\346\217\222\344\273\266/3d_shangpinzhanshi/images/a.png" differ diff --git "a/js\346\217\222\344\273\266/3d_shangpinzhanshi/images/b.jpeg" "b/js\346\217\222\344\273\266/3d_shangpinzhanshi/images/b.jpeg" new file mode 100644 index 0000000..3cfee21 Binary files /dev/null and "b/js\346\217\222\344\273\266/3d_shangpinzhanshi/images/b.jpeg" differ diff --git "a/js\346\217\222\344\273\266/3d_shangpinzhanshi/images/c.png" "b/js\346\217\222\344\273\266/3d_shangpinzhanshi/images/c.png" new file mode 100644 index 0000000..0a6f045 Binary files /dev/null and "b/js\346\217\222\344\273\266/3d_shangpinzhanshi/images/c.png" differ diff --git "a/js\346\217\222\344\273\266/3d_shangpinzhanshi/index.html" "b/js\346\217\222\344\273\266/3d_shangpinzhanshi/index.html" new file mode 100644 index 0000000..4f8a991 --- /dev/null +++ "b/js\346\217\222\344\273\266/3d_shangpinzhanshi/index.html" @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/js\346\217\222\344\273\266/3d_shangpinzhanshi/index1.html" "b/js\346\217\222\344\273\266/3d_shangpinzhanshi/index1.html" new file mode 100644 index 0000000..0118da4 --- /dev/null +++ "b/js\346\217\222\344\273\266/3d_shangpinzhanshi/index1.html" @@ -0,0 +1,109 @@ + + + + + + + + + + +
+
+
1
+
6
+
4
+
3
+
5
+
2
+
+
+ +
+
+
1
+
6
+
4
+
3
+
5
+
2
+
+
+ + + + \ No newline at end of file diff --git "a/js\346\217\222\344\273\266/3d_shangpinzhanshi/jquery\346\217\222\344\273\266\345\272\223.url" "b/js\346\217\222\344\273\266/3d_shangpinzhanshi/jquery\346\217\222\344\273\266\345\272\223.url" new file mode 100644 index 0000000..450631b --- /dev/null +++ "b/js\346\217\222\344\273\266/3d_shangpinzhanshi/jquery\346\217\222\344\273\266\345\272\223.url" @@ -0,0 +1,6 @@ +[{000214A0-0000-0000-C000-000000000046}] +Prop3=19,2 +[InternetShortcut] +URL=http://www.jq22.com/ +IDList= +HotKey=0 diff --git "a/js\346\217\222\344\273\266/3d_shangpinzhanshi/www.jq22.com.txt" "b/js\346\217\222\344\273\266/3d_shangpinzhanshi/www.jq22.com.txt" new file mode 100644 index 0000000..a5e3607 --- /dev/null +++ "b/js\346\217\222\344\273\266/3d_shangpinzhanshi/www.jq22.com.txt" @@ -0,0 +1,7 @@ + + jQuery插件库 + + http://www.jq22.com + + 找的更少,作的更多! jQuery插件库只为您提供最好的! + diff --git "a/js\346\217\222\344\273\266/css3\345\212\250\347\224\273\345\272\223/animate.min.css" "b/js\346\217\222\344\273\266/css3\345\212\250\347\224\273\345\272\223/animate.min.css" new file mode 100644 index 0000000..b84c3c1 --- /dev/null +++ "b/js\346\217\222\344\273\266/css3\345\212\250\347\224\273\345\272\223/animate.min.css" @@ -0,0 +1,6 @@ +@charset "UTF-8";/*! +Animate.css - http://daneden.me/animate +Licensed under the MIT license - http://opensource.org/licenses/MIT + +Copyright (c) 2013 Daniel Eden +*/.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}@-webkit-keyframes bounce{0%,100%,20%,53%,80%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-transition-timing-function:cubic-bezier(0.755,.050,.855,.060);transition-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-transition-timing-function:cubic-bezier(0.755,.050,.855,.060);transition-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{0%,100%,20%,53%,80%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-transition-timing-function:cubic-bezier(0.755,.050,.855,.060);transition-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-30px,0);-ms-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-transition-timing-function:cubic-bezier(0.755,.050,.855,.060);transition-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-15px,0);-ms-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);-ms-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;-ms-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{0%,100%,50%{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,100%,50%{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes pulse{0%{-webkit-transform:scale3d(1,1,1);-ms-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);-ms-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}100%{-webkit-transform:scale3d(1,1,1);-ms-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(0.75,1.25,1);transform:scale3d(0.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes rubberBand{0%{-webkit-transform:scale3d(1,1,1);-ms-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);-ms-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(0.75,1.25,1);-ms-transform:scale3d(0.75,1.25,1);transform:scale3d(0.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);-ms-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);-ms-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);-ms-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}100%{-webkit-transform:scale3d(1,1,1);-ms-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{0%,100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{0%,100%{-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);-ms-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);-ms-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}100%{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}@keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);-ms-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);-ms-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);-ms-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);-ms-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}100%{-webkit-transform:rotate3d(0,0,1,0deg);-ms-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}.swing{-webkit-transform-origin:top center;-ms-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes tada{0%{-webkit-transform:scale3d(1,1,1);-ms-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);-ms-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);-ms-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);-ms-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}100%{-webkit-transform:scale3d(1,1,1);-ms-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}100%{-webkit-transform:none;transform:none}}@keyframes wobble{0%{-webkit-transform:none;-ms-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);-ms-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);-ms-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);-ms-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);-ms-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);-ms-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}100%{-webkit-transform:none;-ms-transform:none;transform:none}}.wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes bounceIn{0%,100%,20%,40%,60%,80%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}100%{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes bounceIn{0%,100%,20%,40%,60%,80%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);-ms-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);-ms-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);-ms-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);-ms-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}100%{opacity:1;-webkit-transform:scale3d(1,1,1);-ms-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn;-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounceInDown{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInDown{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);-ms-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);-ms-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);-ms-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);-ms-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}100%{-webkit-transform:none;-ms-transform:none;transform:none}}.bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInLeft{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);-ms-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);-ms-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);-ms-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);-ms-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}100%{-webkit-transform:none;-ms-transform:none;transform:none}}.bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInRight{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);-ms-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);-ms-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);-ms-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);-ms-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}100%{-webkit-transform:none;-ms-transform:none;transform:none}}.bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInUp{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);-ms-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);-ms-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);-ms-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);-ms-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}100%{-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}100%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);-ms-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);-ms-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}100%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut;-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);-ms-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);-ms-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);-ms-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);-ms-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);-ms-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);-ms-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);-ms-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);-ms-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);-ms-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);-ms-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);-ms-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);-ms-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);-ms-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);-ms-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);-ms-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);-ms-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);-ms-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);-ms-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,100%,0);-ms-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);-ms-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-100%,0,0);-ms-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);-ms-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0);-ms-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);-ms-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-100%,0);-ms-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);-ms-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{0%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}100%{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{0%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);-ms-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-ms-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-ms-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);-ms-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}100%{-webkit-transform:perspective(400px);-ms-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;-ms-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);-ms-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);-ms-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);-ms-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);-ms-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}100%{-webkit-transform:perspective(400px);-ms-transform:perspective(400px);transform:perspective(400px)}}.flipInX{-webkit-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{0%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);-ms-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);-ms-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);-ms-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);-ms-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}100%{-webkit-transform:perspective(400px);-ms-transform:perspective(400px);transform:perspective(400px)}}.flipInY{-webkit-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}@keyframes flipOutX{0%{-webkit-transform:perspective(400px);-ms-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);-ms-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);-ms-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}.flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}@keyframes flipOutY{0%{-webkit-transform:perspective(400px);-ms-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);-ms-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);-ms-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}.flipOutY{-webkit-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY;-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes lightSpeedIn{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}100%{-webkit-transform:none;transform:none;opacity:1}}@keyframes lightSpeedIn{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);-ms-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);-ms-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);-ms-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}100%{-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}}.lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{0%{opacity:1}100%{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{0%{opacity:1}100%{-webkit-transform:translate3d(100%,0,0) skewX(30deg);-ms-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{0%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateIn{0%{-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);-ms-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}100%{-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}}.rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);-ms-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}100%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}}.rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);-ms-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}}.rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);-ms-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}}.rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);-ms-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}100%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}}.rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{0%{-webkit-transform-origin:center;transform-origin:center;opacity:1}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}@keyframes rotateOut{0%{-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;opacity:1}100%{-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);-ms-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}.rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0,0,1,45deg);transform:rotate(0,0,1,45deg);opacity:0}}@keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0,0,1,45deg);-ms-transform:rotate(0,0,1,45deg);transform:rotate(0,0,1,45deg);opacity:0}}.rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);-ms-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);-ms-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}@keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);-ms-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}.rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}100%{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;-ms-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);-ms-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;-ms-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);-ms-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;-ms-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}100%{-webkit-transform:translate3d(0,700px,0);-ms-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);-ms-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}@keyframes rollOut{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);-ms-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}.rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-ms-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-ms-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-ms-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-ms-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-ms-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-ms-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-ms-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-ms-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}100%{opacity:0}}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}100%{opacity:0}}.zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-ms-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-ms-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;-ms-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);-ms-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);-ms-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;-ms-transform-origin:left center;transform-origin:left center}}.zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);-ms-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);-ms-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;-ms-transform-origin:right center;transform-origin:right center}}.zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-ms-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-ms-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;-ms-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp} diff --git "a/js\346\217\222\344\273\266/css3\345\212\250\347\224\273\345\272\223/ddown.svg" "b/js\346\217\222\344\273\266/css3\345\212\250\347\224\273\345\272\223/ddown.svg" new file mode 100644 index 0000000..ef4ff34 --- /dev/null +++ "b/js\346\217\222\344\273\266/css3\345\212\250\347\224\273\345\272\223/ddown.svg" @@ -0,0 +1,7 @@ + + + + + + diff --git "a/js\346\217\222\344\273\266/css3\345\212\250\347\224\273\345\272\223/google-font.css" "b/js\346\217\222\344\273\266/css3\345\212\250\347\224\273\345\272\223/google-font.css" new file mode 100644 index 0000000..6c35d28 --- /dev/null +++ "b/js\346\217\222\344\273\266/css3\345\212\250\347\224\273\345\272\223/google-font.css" @@ -0,0 +1,280 @@ +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 100; + src: local('Roboto Thin'), local('Roboto-Thin'), url(http://fonts.gstatic.com/s/roboto/v14/ty9dfvLAziwdqQ2dHoyjphTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 100; + src: local('Roboto Thin'), local('Roboto-Thin'), url(http://fonts.gstatic.com/s/roboto/v14/frNV30OaYdlFRtH2VnZZdhTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 100; + src: local('Roboto Thin'), local('Roboto-Thin'), url(http://fonts.gstatic.com/s/roboto/v14/gwVJDERN2Amz39wrSoZ7FxTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 100; + src: local('Roboto Thin'), local('Roboto-Thin'), url(http://fonts.gstatic.com/s/roboto/v14/aZMswpodYeVhtRvuABJWvBTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 100; + src: local('Roboto Thin'), local('Roboto-Thin'), url(http://fonts.gstatic.com/s/roboto/v14/VvXUGKZXbHtX_S_VCTLpGhTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 100; + src: local('Roboto Thin'), local('Roboto-Thin'), url(http://fonts.gstatic.com/s/roboto/v14/e7MeVAyvogMqFwwl61PKhBTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 100; + src: local('Roboto Thin'), local('Roboto-Thin'), url(http://fonts.gstatic.com/s/roboto/v14/2tsd397wLxj96qwHyNIkxBTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: local('Roboto Regular'), local('Roboto-Regular'), url(http://fonts.gstatic.com/s/roboto/v14/ek4gzZ-GeXAPcSbHtCeQI_esZW2xOQ-xsNqO47m55DA.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: local('Roboto Regular'), local('Roboto-Regular'), url(http://fonts.gstatic.com/s/roboto/v14/mErvLBYg_cXG3rLvUsKT_fesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: local('Roboto Regular'), local('Roboto-Regular'), url(http://fonts.gstatic.com/s/roboto/v14/-2n2p-_Y08sg57CNWQfKNvesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: local('Roboto Regular'), local('Roboto-Regular'), url(http://fonts.gstatic.com/s/roboto/v14/u0TOpm082MNkS5K0Q4rhqvesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: local('Roboto Regular'), local('Roboto-Regular'), url(http://fonts.gstatic.com/s/roboto/v14/NdF9MtnOpLzo-noMoG0miPesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: local('Roboto Regular'), local('Roboto-Regular'), url(http://fonts.gstatic.com/s/roboto/v14/Fcx7Wwv8OzT71A3E1XOAjvesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 400; + src: local('Roboto Regular'), local('Roboto-Regular'), url(http://fonts.gstatic.com/s/roboto/v14/fg2nPs59wPnJ0blURyMU3PesZW2xOQ-xsNqO47m55DA.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: local('Roboto Bold'), local('Roboto-Bold'), url(http://fonts.gstatic.com/s/roboto/v14/77FXFjRbGzN4aCrSFhlh3hJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: local('Roboto Bold'), local('Roboto-Bold'), url(http://fonts.gstatic.com/s/roboto/v14/isZ-wbCXNKAbnjo6_TwHThJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: local('Roboto Bold'), local('Roboto-Bold'), url(http://fonts.gstatic.com/s/roboto/v14/UX6i4JxQDm3fVTc1CPuwqhJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: local('Roboto Bold'), local('Roboto-Bold'), url(http://fonts.gstatic.com/s/roboto/v14/jSN2CGVDbcVyCnfJfjSdfBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: local('Roboto Bold'), local('Roboto-Bold'), url(http://fonts.gstatic.com/s/roboto/v14/PwZc-YbIL414wB9rB1IAPRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: local('Roboto Bold'), local('Roboto-Bold'), url(http://fonts.gstatic.com/s/roboto/v14/97uahxiqZRoncBaCEI3aWxJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: normal; + font-weight: 700; + src: local('Roboto Bold'), local('Roboto-Bold'), url(http://fonts.gstatic.com/s/roboto/v14/d-6IYplOFocCacKzxwXSOBJtnKITppOI_IvcXXDNrsc.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 400; + src: local('Roboto Italic'), local('Roboto-Italic'), url(http://fonts.gstatic.com/s/roboto/v14/WxrXJa0C3KdtC7lMafG4dRTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 400; + src: local('Roboto Italic'), local('Roboto-Italic'), url(http://fonts.gstatic.com/s/roboto/v14/OpXUqTo0UgQQhGj_SFdLWBTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 400; + src: local('Roboto Italic'), local('Roboto-Italic'), url(http://fonts.gstatic.com/s/roboto/v14/1hZf02POANh32k2VkgEoUBTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 400; + src: local('Roboto Italic'), local('Roboto-Italic'), url(http://fonts.gstatic.com/s/roboto/v14/cDKhRaXnQTOVbaoxwdOr9xTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 400; + src: local('Roboto Italic'), local('Roboto-Italic'), url(http://fonts.gstatic.com/s/roboto/v14/K23cxWVTrIFD6DJsEVi07RTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 400; + src: local('Roboto Italic'), local('Roboto-Italic'), url(http://fonts.gstatic.com/s/roboto/v14/vSzulfKSK0LLjjfeaxcREhTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 400; + src: local('Roboto Italic'), local('Roboto-Italic'), url(http://fonts.gstatic.com/s/roboto/v14/vPcynSL0qHq_6dX7lKVByRTbgVql8nDJpwnrE27mub0.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; +} +/* cyrillic-ext */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 700; + src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'), url(http://fonts.gstatic.com/s/roboto/v14/t6Nd4cfPRhZP44Q5QAjcCzTOQ_MqJVwkKsUn0wKzc2I.woff2) format('woff2'); + unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; +} +/* cyrillic */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 700; + src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'), url(http://fonts.gstatic.com/s/roboto/v14/t6Nd4cfPRhZP44Q5QAjcCzUj_cnvWIuuBMVgbX098Mw.woff2) format('woff2'); + unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +/* greek-ext */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 700; + src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'), url(http://fonts.gstatic.com/s/roboto/v14/t6Nd4cfPRhZP44Q5QAjcC0bcKLIaa1LC45dFaAfauRA.woff2) format('woff2'); + unicode-range: U+1F00-1FFF; +} +/* greek */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 700; + src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'), url(http://fonts.gstatic.com/s/roboto/v14/t6Nd4cfPRhZP44Q5QAjcC2o_sUJ8uO4YLWRInS22T3Y.woff2) format('woff2'); + unicode-range: U+0370-03FF; +} +/* vietnamese */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 700; + src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'), url(http://fonts.gstatic.com/s/roboto/v14/t6Nd4cfPRhZP44Q5QAjcC76up8jxqWt8HVA3mDhkV_0.woff2) format('woff2'); + unicode-range: U+0102-0103, U+1EA0-1EF1, U+20AB; +} +/* latin-ext */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 700; + src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'), url(http://fonts.gstatic.com/s/roboto/v14/t6Nd4cfPRhZP44Q5QAjcCyYE0-AqJ3nfInTTiDXDjU4.woff2) format('woff2'); + unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; +} +/* latin */ +@font-face { + font-family: 'Roboto'; + font-style: italic; + font-weight: 700; + src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'), url(http://fonts.gstatic.com/s/roboto/v14/t6Nd4cfPRhZP44Q5QAjcC-L2WfuF7Qc3ANwCvwl0TnA.woff2) format('woff2'); + unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; +} diff --git "a/js\346\217\222\344\273\266/css3\345\212\250\347\224\273\345\272\223/index.html" "b/js\346\217\222\344\273\266/css3\345\212\250\347\224\273\345\272\223/index.html" new file mode 100644 index 0000000..41bbab1 --- /dev/null +++ "b/js\346\217\222\344\273\266/css3\345\212\250\347\224\273\345\272\223/index.html" @@ -0,0 +1,160 @@ + + + + + Animate.css + + + + + + + + + + +
+
+
+ + + +
+
+

Download Animate.css or View on GitHub

+

Another thing from Daniel Eden.

+
+
+ + + + + + diff --git "a/js\346\217\222\344\273\266/css3\345\212\250\347\224\273\345\272\223/jquery-1.10.2.min.js" "b/js\346\217\222\344\273\266/css3\345\212\250\347\224\273\345\272\223/jquery-1.10.2.min.js" new file mode 100644 index 0000000..da41706 --- /dev/null +++ "b/js\346\217\222\344\273\266/css3\345\212\250\347\224\273\345\272\223/jquery-1.10.2.min.js" @@ -0,0 +1,6 @@ +/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license +//@ sourceMappingURL=jquery-1.10.2.min.map +*/ +(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.2",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(z,"$1"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split("|"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ut(function(e){return e.className="i",!e.getAttribute("className")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML="
",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ut(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split("").sort(A).join("")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement("div"))}),ut(function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")})||ct("type|href|height|width",function(e,n,r){return r?t:e.getAttribute(n,"type"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||ct("value",function(e,n,r){return r||"input"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute("disabled")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="
a",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="
t
",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t +}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e;return"boolean"==typeof t&&"string"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/\s*$/g,At={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X
","
"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle); +u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x(" + + + + +
+ +
+ + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/debug.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/debug.js" new file mode 100644 index 0000000..e0e5d51 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/debug.js" @@ -0,0 +1,143 @@ +锘// use this to isolate the scope +(function () { + + if(!$axure.document.configuration.showConsole) { return; } + + $(document).ready(function () { + $axure.player.createPluginHost({ + id: 'debugHost', + context: 'interface', + title: 'CONSOLE', + gid: 3 + }); + + generateDebug(); + + $('#variablesClearLink').click(clearvars_click); + $('#traceClearLink').click(cleartrace_click); + + + $(document).on('ContainerHeightChange', function () { + updateContainerHeight(); + }); + + //$('#traceContainer').hide(); + //$('#debugTraceLink').click(function () { + // $('#variablesContainer').hide(); + // $('#traceContainer').show(); + //}); + //$('#debugVariablesLink').click(function () { + // $('#variablesContainer').show(); + // $('#traceContainer').hide(); + //}); + + var currentStack= []; + var finishedStack = []; + + $axure.messageCenter.addMessageListener(function (message, data) { + if(message == 'globalVariableValues') { + //If variables container isn't visible, then ignore + //if(!$('#variablesContainer').is(":visible")) { + // return; + //} + + $('#variablesDiv').empty(); + for(var key in data) { + var value = data[key] == '' ? '(blank)' : data[key]; + $('#variablesDiv').append('
' + key + '
' + value + '
'); + } + } if(message == 'setGlobalVar') { + //$('#variablesContainer').html(""); + //for (var variable in $axure.globalVariableProvider.getDefinedVariables) { + // $('#variablesContainer').append("
" + variable + "
"); + // $('#variablesContainer').append("
" + $axure.globalVariableProvider.getVariableValue(variable) + "
"); + //} + } else if(message == 'axEvent') { + var addToStack = "
"; + addToStack += "
" + new Date().toLocaleTimeString() + "
"; + addToStack += "
" + data.label + " (" + data.type + ")
"; + addToStack += "
" + data.event.description + "
"; + currentStack.push(addToStack); + } else if (message == 'axEventComplete') { + currentStack[currentStack.length - 1] += "
"; + finishedStack.push(currentStack.pop()); + if(currentStack.length == 0) { + $('#traceClearLinkContainer').show(); + $('#traceEmptyState').hide(); + + $('.lastAxEvent').removeClass('lastAxEvent'); + for(var i = finishedStack.length - 1; i >= 0; i--) { + if($('#traceDiv').children().length > 99) $('#traceDiv').children().last().remove(); + $('#traceDiv').prepend(finishedStack[i]); + if(i == finishedStack.length - 1) $('#traceDiv').children().first().addClass('lastAxEvent'); + } + finishedStack = []; + } + } else if (message == 'axCase') { + currentStack[currentStack.length - 1] += "
" + data.description + "
"; + } else if (message == 'axAction') { + currentStack[currentStack.length - 1] += "
" + data.description + "
"; + } + }); + + // bind to the page load + $axure.page.bind('load.debug', function () { + + $axure.messageCenter.postMessage('getGlobalVariables', ''); + + return false; + }); + + function clearvars_click(event) { + $axure.messageCenter.postMessage('resetGlobalVariables', ''); + } + + function cleartrace_click(event) { + $('#traceDiv').html(''); + $('#traceClearLinkContainer').hide(); + $('#traceEmptyState').show(); + } + }); + + function updateContainerHeight() { + $('#debugScrollContainer').height($('#debugHost').height() - $('#debugHeader').outerHeight()); + } + + function generateDebug() { + var pageNotesUi = "
"; + + pageNotesUi += "
"; + pageNotesUi += "
CONSOLE
"; + pageNotesUi += "
"; + + //pageNotesUi += "
"; + + //pageNotesUi += ""; + //pageNotesUi += ""; + //pageNotesUi += ""; + + //pageNotesUi += "
"; + pageNotesUi += "
"; + pageNotesUi += "
"; + + //var pageNotesUi = "
Variables | Trace
"; + pageNotesUi += "
"; + pageNotesUi += "
"; + pageNotesUi += "
"; + pageNotesUi += ""; + pageNotesUi += "
"; + pageNotesUi += "
"; + pageNotesUi += "
"; + pageNotesUi += ""; + pageNotesUi += "
No interactions in the trace.
Triggered interactions will appear here.
"; + pageNotesUi += "
"; + pageNotesUi += "
"; + + $('#debugHost').html(pageNotesUi); + updateContainerHeight(); + + $('#traceClearLinkContainer').hide(); + $('#traceEmptyState').show(); + } + +})(); \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/debug.css" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/debug.css" new file mode 100644 index 0000000..2c3aa45 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/debug.css" @@ -0,0 +1,135 @@ +锘#debugHost { + font-size: 12px; + color:#4a4a4a; + height: 100%; +} + +#debugHostBtn a { + background: url('images/variables_on.png'); + background: url('images/variables_on.svg'),linear-gradient(transparent, transparent); +} + +.hashover #debugHostBtn a:hover { + background: url('images/variables_hover.png'); + background: url('images/variables_hover.svg'),linear-gradient(transparent, transparent); +} + +#debugHostBtn a.selected, #debugHostBtn a.selected:hover { + background: url('images/variables_off.png'); + background: url('images/variables_off.svg'),linear-gradient(transparent, transparent); +} + +#debugHeader .pageNameHeader { + padding-right: 0px; +} + +#variablesClearLink { + display: inline-block; + margin-bottom: 15px; +} + +#variablesClearLink:hover { + color: #0a6cd6; +} + +#traceClearLink { + display: inline-block; + margin-bottom: 15px; +} + +#traceClearLink:hover { + color: #0a6cd6; +} + +#debugScrollContainer +{ + overflow: auto; + width: 100%; + height: 100%; + -webkit-overflow-scrolling: touch; +} + +#debugContainer { + padding: 10px 10px 10px 10px; +} + +.variableName +{ + font-weight: bold; +} + +.variableDiv +{ + margin-bottom: 20px; + line-height: 16px; + +} + +#variablesContainer { + padding-bottom: 5px; + /*overflow: auto;*/ +} + +#traceContainer { + padding-top: 15px; + /*padding: 0px 10px 10px 10px;*/ +} + +.debugToolbarButton +{ + font-size: 1em; + color: #069; +} + +.axEventBlock { + display: inline-block; + width: 100%; + margin: 5px 0px 5px 0px; + line-height: 21px; +} + +/*a.axEventBlock:hover { + background-color: #069; + color: white; +}*/ + +.axTime { + margin: 0px 0px 0px 0px; + font-size: 11px; + color: #b1b3b5; +} + +.axLabel { + margin: 0px 0px 5px 0px; + font-family: 'Trebuchet MS'; + font-size: 14px; + font-weight: bold; +} + +.lastAxEvent { + margin-bottom: 10px; + border-bottom: 1px solid #c2c2c2; + padding-bottom: 10px; +} + +.axEvent { + margin: 0px 0px 5px 0px; + font-weight: bold; +} + +.axCase { + margin: 0px 0px 5px 8px; + font-style: italic; +} + +.axAction { + margin: 0px 0px 5px 13px; +} + +#traceEmptyState.emptyStateContainer { + margin-top: 0px; +} + +.debugLinksContainer { + text-align: right; +} \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/images/reset.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/images/reset.svg" new file mode 100644 index 0000000..f91f3d4 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/images/reset.svg" @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/images/reset_hover.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/images/reset_hover.svg" new file mode 100644 index 0000000..98e02e5 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/images/reset_hover.svg" @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/images/variables_hover.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/images/variables_hover.png" new file mode 100644 index 0000000..b7c9cbd Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/images/variables_hover.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/images/variables_hover.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/images/variables_hover.svg" new file mode 100644 index 0000000..00e75d0 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/images/variables_hover.svg" @@ -0,0 +1,12 @@ + + + + variables_hover + Created with Sketch. + + + + + + + \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/images/variables_off.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/images/variables_off.png" new file mode 100644 index 0000000..de5c50e Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/images/variables_off.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/images/variables_off.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/images/variables_off.svg" new file mode 100644 index 0000000..09a82ea --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/images/variables_off.svg" @@ -0,0 +1,12 @@ + + + + variables_on + Created with Sketch. + + + + + + + \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/images/variables_on.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/images/variables_on.png" new file mode 100644 index 0000000..7b71df0 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/images/variables_on.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/images/variables_on.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/images/variables_on.svg" new file mode 100644 index 0000000..40526bf --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/debug/styles/images/variables_on.svg" @@ -0,0 +1,12 @@ + + + + variables_off + Created with Sketch. + + + + + + + \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/page_notes.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/page_notes.js" new file mode 100644 index 0000000..8f90d82 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/page_notes.js" @@ -0,0 +1,189 @@ +锘// use this to isolate the scope +(function () { + if(!$axure.document.configuration.showPageNotes && !$axure.document.configuration.showAnnotationsSidebar) { return; } + + $(window.document).ready(function () { + $axure.player.createPluginHost({ + id: 'pageNotesHost', + context: 'interface', + title: 'NOTES', + gid: 2 + }); + + generatePageNotes(); + + $(document).on('ContainerHeightChange', function () { + updateContainerHeight(); + }); + + $('#footnotesButton').click(footnotes_click).addClass('sitemapToolbarButtonSelected'); + $('#notesNextButton').click(notesNext_click); + $('#notesPreviousButton').click(notesPrevious_click); + + // bind to the page load + $axure.page.bind('load.page_notes', function () { + + var hasNotes = false; + + $('#pageNotesContent').html(""); + + if($axure.document.configuration.showPageNotes) { + //populate the notes + var notes = $axure.page.notes; + if(notes) { + var showNames = $axure.document.configuration.showPageNoteNames; + + for(var noteName in notes) { + var pageNoteUi = "
"; + if(showNames) { + pageNoteUi += "
" + noteName + "
"; + } + pageNoteUi += "
" + linkify(notes[noteName]) + "
"; + pageNoteUi += "
"; + pageNoteUi += "
"; + $('#pageNotesContent').append(pageNoteUi); + + hasNotes = true; + } + } + } + + if($axure.document.configuration.showAnnotationsSidebar) { + var widgetNotes = $axure.page.widgetNotes; + if(widgetNotes) { + for(var i = 0; i < widgetNotes.length; i++) { + var widgetNote = widgetNotes[i]; + var widgetNoteUi = "
"; + widgetNoteUi += "
"; + widgetNoteUi += "
" + widgetNote["label"] + "
"; + + for(var widgetNoteName in widgetNote) { + if(widgetNoteName != "label" && widgetNoteName != "id") { + widgetNoteUi += "
" + widgetNoteName + "
"; + widgetNoteUi += "
" + linkify(widgetNote[widgetNoteName]) + "
"; + widgetNoteUi += "
"; + } + } + widgetNoteUi += "
"; + widgetNoteUi += "
"; + $('#pageNotesContent').append(widgetNoteUi); + hasNotes = true; + } + $('.widgetNoteContainer').children(':last-child').remove(); + $('.widgetNoteFootnote').append("
"); + $('.widgetNoteContainer').click(function () { + var wasSelected = $(this).hasClass('widgetNoteContainerSelected'); + $('.widgetNoteContainerSelected').removeClass('widgetNoteContainerSelected'); + if(!wasSelected) $(this).addClass('widgetNoteContainerSelected'); + $axure.messageCenter.postMessage('toggleSelectWidgetNote', this.getAttribute('data-id')); + }); + } + } + + if(hasNotes) $('#pageNotesEmptyState').hide(); + else $('#pageNotesEmptyState').show(); + + //If footnotes enabled for this prototype... + if($axure.document.configuration.showAnnotations == true) { + //If the fn var is defined and set to 0, hide footnotes + //else if hide-footnotes button selected, hide them + var fnVal = getHashStringVar(FOOTNOTES_VAR_NAME); + if(fnVal.length > 0 && fnVal == 0) { + $('#footnotesButton').removeClass('sitemapToolbarButtonSelected'); + $axure.messageCenter.postMessage('annotationToggle', false); + } else if(!$('#footnotesButton').is('.sitemapToolbarButtonSelected')) { + //If the footnotes button isn't selected, hide them on this loaded page + $axure.messageCenter.postMessage('annotationToggle', false); + } + } + + + return false; + }); + + function linkify(text) { + var urlRegex = /(\b(((https?|ftp|file):\/\/)|(www\.))[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; + return text.replace(urlRegex, function(url, b, c) { + var url2 = (c == 'www.') ? 'http://' + url : url; + return '' + url + ''; + }); + } + }); + + function updateContainerHeight() { + $('#pageNotesScrollContainer').height($('#pageNotesHost').height() - $('#pageNotesHeader').outerHeight()); + } + + $(document).on('sidebarCollapse', function (event, data) { + clearSelection(); + }); + + $(document).on('pluginShown', function (event, data) { + if(data != 2) { + clearSelection(); + } + }); + + function clearSelection() { + $('.widgetNoteContainerSelected').removeClass('widgetNoteContainerSelected'); + $axure.messageCenter.postMessage('toggleSelectWidgetNote', ''); + } + + function footnotes_click(event) { + if($('#footnotesButton').is('.sitemapToolbarButtonSelected')) { + $('#footnotesButton').removeClass('sitemapToolbarButtonSelected'); + $axure.messageCenter.postMessage('annotationToggle', false); + //Add 'fn' hash string var so that footnotes stay hidden across reloads + setVarInCurrentUrlHash(FOOTNOTES_VAR_NAME, 0); + } else { + $('#footnotesButton').addClass('sitemapToolbarButtonSelected'); + $axure.messageCenter.postMessage('annotationToggle', true); + //Delete 'fn' hash string var if it exists since default is visible + deleteVarFromCurrentUrlHash(FOOTNOTES_VAR_NAME); + } + } + + function notesNext_click(event) { + openNextPage(); + } + + function notesPrevious_click(event) { + openPreviousPage(); + } + + function generatePageNotes() { + var pageNotesUi = "
"; + + pageNotesUi += "
"; + pageNotesUi += "
NOTES
"; + pageNotesUi += "
"; + + pageNotesUi += "
"; + + pageNotesUi += ""; + pageNotesUi += ""; + + if($axure.document.configuration.showAnnotations == true) { + pageNotesUi += ""; + } + + pageNotesUi += "
"; + pageNotesUi += "
"; + pageNotesUi += "
"; + + + pageNotesUi += "
"; + pageNotesUi += "
"; + pageNotesUi += "
No notes for this page.
Notes added in Axure RP will appear here.
"; + pageNotesUi += ""; + pageNotesUi += "
"; + + $('#pageNotesHost').html(pageNotesUi); + updateContainerHeight(); + + if(!$axure.document.configuration.showAnnotations) { + $('#pageNotesHost .pageNameHeader').css('padding-right', '55px'); + } + } + +})(); \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/back.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/back.png" new file mode 100644 index 0000000..9c4a594 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/back.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/back.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/back.svg" new file mode 100644 index 0000000..8c8b36c --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/back.svg" @@ -0,0 +1,12 @@ + + + + back + Created with Sketch. + + + + + + + \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/back_hover.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/back_hover.png" new file mode 100644 index 0000000..feebfba Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/back_hover.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/back_hover.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/back_hover.svg" new file mode 100644 index 0000000..9e86df2 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/back_hover.svg" @@ -0,0 +1,12 @@ + + + + back_hover + Created with Sketch. + + + + + + + \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/footnotes.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/footnotes.png" new file mode 100644 index 0000000..be4ea25 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/footnotes.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/footnotes.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/footnotes.svg" new file mode 100644 index 0000000..1651280 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/footnotes.svg" @@ -0,0 +1,15 @@ + + + + note + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/footnotes_hover.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/footnotes_hover.png" new file mode 100644 index 0000000..11aedd4 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/footnotes_hover.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/footnotes_hover.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/footnotes_hover.svg" new file mode 100644 index 0000000..1e22b69 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/footnotes_hover.svg" @@ -0,0 +1,15 @@ + + + + note_hover + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/footnotes_on.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/footnotes_on.png" new file mode 100644 index 0000000..11aedd4 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/footnotes_on.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/footnotes_on.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/footnotes_on.svg" new file mode 100644 index 0000000..378fcb6 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/footnotes_on.svg" @@ -0,0 +1,15 @@ + + + + note_on + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/forward.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/forward.png" new file mode 100644 index 0000000..d485dc9 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/forward.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/forward.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/forward.svg" new file mode 100644 index 0000000..9679f4b --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/forward.svg" @@ -0,0 +1,12 @@ + + + + forward + Created with Sketch. + + + + + + + \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/forward_hover.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/forward_hover.png" new file mode 100644 index 0000000..c6c914b Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/forward_hover.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/forward_hover.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/forward_hover.svg" new file mode 100644 index 0000000..cf438f5 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/forward_hover.svg" @@ -0,0 +1,12 @@ + + + + forward_hover + Created with Sketch. + + + + + + + \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/notes_hover.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/notes_hover.png" new file mode 100644 index 0000000..81afe8d Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/notes_hover.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/notes_hover.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/notes_hover.svg" new file mode 100644 index 0000000..88d93da --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/notes_hover.svg" @@ -0,0 +1,9 @@ + + + + + + + + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/notes_off.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/notes_off.png" new file mode 100644 index 0000000..c572237 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/notes_off.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/notes_off.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/notes_off.svg" new file mode 100644 index 0000000..63429a1 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/notes_off.svg" @@ -0,0 +1,9 @@ + + + + + + + + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/notes_on.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/notes_on.png" new file mode 100644 index 0000000..103d72c Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/notes_on.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/notes_on.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/notes_on.svg" new file mode 100644 index 0000000..83a4529 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/images/notes_on.svg" @@ -0,0 +1,9 @@ + + + + + + + + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/page_notes.css" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/page_notes.css" new file mode 100644 index 0000000..92a7aa7 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/page_notes/styles/page_notes.css" @@ -0,0 +1,159 @@ +锘#pageNotesHost { + font-size: 12px; + color:#4a4a4a; + height: 100%; +} + +#pageNotesHostBtn a { + background: url('images/notes_on.png'); + background: url('images/notes_on.svg'),linear-gradient(transparent, transparent); +} + +.hashover #pageNotesHostBtn a:hover { + background: url('images/notes_hover.png'); + background: url('images/notes_hover.svg'),linear-gradient(transparent, transparent); +} + +#pageNotesHostBtn a.selected, #pageNotesHostBtn a.selected:hover { + background: url('images/notes_off.png'); + background: url('images/notes_off.svg'),linear-gradient(transparent, transparent); +} + +#footnotesButton { + background: url('images/footnotes.png') no-repeat center center; + background: url('images/footnotes.svg') no-repeat center center,linear-gradient(transparent, transparent); +} + +#footnotesButton:hover { + background: url('images/footnotes_hover.png') no-repeat center center; + background: url('images/footnotes_hover.svg') no-repeat center center,linear-gradient(transparent, transparent); +} + +#footnotesButton.sitemapToolbarButtonSelected, #footnotesButton.sitemapToolbarButtonSelected:hover { + background: url('images/footnotes_on.png') no-repeat center center; + background: url('images/footnotes_on.svg') no-repeat center center,linear-gradient(transparent, transparent); +} + +.nextPageButton { + background: url('images/forward.png') no-repeat center center; + background: url('images/forward.svg') no-repeat center center,linear-gradient(transparent, transparent); +} + +.nextPageButton:hover { + background: url('images/forward_hover.png') no-repeat center center; + background: url('images/forward_hover.svg') no-repeat center center,linear-gradient(transparent, transparent); +} + +.prevPageButton { + background: url('images/back.png') no-repeat center center; + background: url('images/back.svg') no-repeat center center,linear-gradient(transparent, transparent); +} + +.prevPageButton:hover { + background: url('images/back_hover.png') no-repeat center center; + background: url('images/back_hover.svg') no-repeat center center,linear-gradient(transparent, transparent); +} + +#pageNotesScrollContainer +{ + overflow: auto; + width: 100%; + /*height: 100%;*/ + -webkit-overflow-scrolling: touch; +} + +#pageNotesContainer +{ + /*padding: 10px 10px 10px 12px;*/ +} + +#pageNotesContent +{ + overflow: visible; +} + +.pageNoteContainer +{ + padding: 10px; +} + +.pageNoteName +{ + font-family: 'Trebuchet MS'; + font-size: 14px; + font-weight: bold; + margin-bottom: 5px; + /*text-decoration: underline;*/ + white-space: nowrap; +} + +.pageNote +{ + line-height: 21px; + /*margin-bottom: 20px;*/ +} + +.widgetNoteContainer { + padding: 10px; + border-bottom: 1px solid transparent; + border-top: 1px solid transparent; + cursor: pointer; +} + +.widgetNoteContainerSelected { + background-color: white; + border-bottom: 1px solid #c2c2c2; + border-top: 1px solid #c2c2c2; +} + +/*.widgetNoteContainer:hover { + background-color: white; + //border-bottom: 1px solid #c2c2c2; + //border-top: 1px solid #c2c2c2; +}*/ + +.widgetNoteFootnote { + display: inline-block; + /*vertical-align: top; + margin: 2px 5px 10px 0px; + padding: 1px 6px; + font-size: 10px; + color: #ffffff; + background-color: #0a6cd6;*/ + width: 13px; + height: 12px; + padding-top: 1px; + text-align: center; + background-color: #138CDD; + /*-moz-box-shadow: 1px 1px 3px #aaa; + -webkit-box-shadow: 1px 1px 3px #aaa; + box-shadow: 1px 1px 3px #aaa;*/ + font-size: 0px; + margin-right: 8px; +} + +div.annnoteline { + display: inline-block; + width: 9px; + height: 1px; + border-bottom: 1px solid white; + margin-top: 1px; +} + +.widgetNoteLabel { + display: inline-block; + vertical-align: top; + font-family: 'Trebuchet MS'; + font-size: 14px; + font-weight: bold; + margin-bottom: 5px; +} + +.noteLink { + text-decoration: inherit; + color: inherit; +} + +.noteLink:hover { + background-color: white; +} \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/recordplay/recordplay.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/recordplay/recordplay.js" new file mode 100644 index 0000000..9d39458 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/recordplay/recordplay.js" @@ -0,0 +1,479 @@ +锘// use this to isolate the scope +(function() { + + if(!$axure.document.configuration.showRecordPlay) { return; } + + $(window.document).ready(function() { + $axure.player.createPluginHost({ + id: 'recordPlayHost', + context: 'interface', + title: 'Recording' + }); + _generateRecordPlay(); + + $('#recordButton').click(_recordClick); + $('#playButton').click(_playClick); + $('#stopButton').click(_stopClick); + $('#deleteButton').click(_deleteClick); + + // bind to the page load + + $axure.page.bind('load.page_notes', function() { + + $.ajax({ + type: "POST", + url: '/RecordController/ListRecordings', + success: function(response) { + + $('#recordNameHeader').html(""); + $('#recordPlayContent').html(""); + //populate the notes + + axRecordingList = []; + + if(!eventList) { + recordingIndex = 0; + eventList = []; + recordingStartTime = 0; + bulkEventElement = ""; + lastBulkEvent = {}; + } + + for(var idx in response.recordingList) { + getOneRecording(response.recordingList[idx]); + } + + return false; + }, + // dataType: 'json' + }); + }); + }); + + var nameMatcher = new RegExp("^axRecording[0-9]{4}$", "i"); + var indexMatcher = new RegExp("[0-9]{4}$", "i"); + + var convertFromJson = function(oneRecording) { + + if(nameMatcher.exec(oneRecording.recordingName)) { + var myArray = indexMatcher.exec(oneRecording.recordingName); + var currIdx = parseInt(myArray); + if(recordingIndex < currIdx) { + recordingIndex = currIdx; + } + } + + + for(var idx in oneRecording.eventList) { + var thisEvent = oneRecording.eventList[idx]; + thisEvent.eventInfo = {}; + thisEvent.eventInfo.srcElement = thisEvent.elementID; + // TODO: check that this is correct. + + if(isBulkMouse(thisEvent.eventType)) { + thisEvent.eventInfo.mousePositions = []; + thisEvent.eventInfo.mousePositions = thisEvent.mousePositions; + thisEvent.timeStamp = thisEvent.mousePositions[0].timeStamp; + } + if(isSingleMouse(thisEvent.eventType)) { + thisEvent.eventInfo.cursor = {}; + thisEvent.eventInfo.cursor = thisEvent.cursor; + + } + if(thisEvent.eventType === 'OnDrag') { + thisEvent.eventInfo.dragInfo = {}; + thisEvent.eventInfo.dragInfo = thisEvent.dragInfo; + thisEvent.timeStamp = thisEvent.dragInfo.startTime; + } + + } + return oneRecording; + }; + + var getOneRecording = function(recordingItem) { + $.ajax({ + type: "POST", + url: '/RecordController/GetRecording', + data: { 'recordingId': recordingItem.recordingId }, + success: function(response) { + axRecordingList[axRecordingList.length] = convertFromJson(response); + var axRecordingContainer = $('#recordingContainer').find('li').filter('.recordingRootNode'); + axRecordingContainer.append(_formAxRecordingBranch(response)); + _attachEventTriggers(response); + }, // dataType: 'json' + }); + + }; + + var axRecordingList; + var eventList; + var recordingIndex; + var recordingStartTime; + var recordingId; + var recordingName; + + + var leadingZeros = function(number, digits) { // because this thing doesn't have string.format (or does it?) + var recurseLeadingZeros = function(number, digitsLeft) { + if(digitsLeft > 0) { + return recurseLeadingZeros("0" + number, digitsLeft - 1); + } else { + return number; + } + }; + return recurseLeadingZeros(number, digits - String(number).length); + }; + + + var generateRecordingName = function() { + return "axRecording" + leadingZeros(recordingIndex, 4); + }; + + var isSingleMouse = function(eventType) { + return (eventType === 'OnClick' || + eventType === 'OnMouseUp' || + eventType === 'OnMouseDown' || + eventType === 'OnMouseOver' || + eventType === 'OnKeyUp' || + eventType === 'OnSelectedChange' || + eventType === 'OnSelect' || + eventType === 'OnUnselect' || + eventType === 'OnTextChange' || + eventType === 'OnMouseOut'); + }; + + var isBulkMouse = function(eventType) { + return (eventType === 'OnMouseHover' || + eventType === 'OnMouseMove'); + }; + + var bulkEventElement; + var lastBulkEvent; + + + $axure.messageCenter.addMessageListener(function(message, eventData) { + var lastEvent, lastBulkData; + + if(message === 'logEvent') { + + if(bulkEventElement !== eventData.elementID) { + lastBulkEvent = {}; + bulkEventElement = eventData.elementID; + } + + if(isBulkMouse(eventData.eventType)) { + lastEvent = lastBulkEvent[eventData.eventType]; + + if(lastEvent) { + // this is the second or third or whatever onmousemove in a row + lastBulkData = lastEvent.eventInfo.mousePositions; + lastBulkData[lastBulkData.length] = { + cursor: eventData.eventInfo.cursor, + timeStamp: eventData.timeStamp + }; + } else { + + eventData.eventInfo.mousePositions = []; + eventData.eventInfo.mousePositions[0] = { + cursor: eventData.eventInfo.cursor, + timeStamp: eventData.timeStamp + }; + eventList[eventList.length] = eventData; + lastBulkEvent[eventData.eventType] = eventData; + } + } else { + var z = true; + } + + if(isSingleMouse(eventData.eventType) ) { + eventList[eventList.length] = eventData; + lastBulkEvent = {}; + bulkEventElement = eventData.elementID; + } + + if(eventData.eventType === 'OnDrag') { + + lastEvent = lastBulkEvent[eventData.eventType]; + + if (lastEvent) { + // this is the second or third or whatever onmousemove in a row + lastBulkData = lastEvent.eventInfo.mousePositions; + lastBulkData[lastBulkData.length] = { + dragInfo: eventData.eventInfo.dragInfo, + timeStamp: eventData.timeStamp + }; + } else { + eventData.eventInfo.mousePositions = []; + eventData.eventInfo.mousePositions[0] = { + dragInfo: eventData.eventInfo.dragInfo, + timeStamp: eventData.timeStamp + }; + eventList[eventList.length] = eventData; + lastBulkEvent[eventData.eventType] = eventData; + } + } +// if(eventData.eventType === 'OnKeyUp') { +// transmissionFields.eventInfo = eventData.eventInfo; +// $.ajax({ +// type: "POST", +// url: '/RecordController/LogMouseClick', +// data: transmissionFields, +// }); +// } + } + + }); + + + var _recordClick = function(event) { + $('#recordButton').addClass('recordPlayButtonSelected'); + recordingIndex++; + // $axure.recording.startRecord(); + + recordingStartTime = new Date().getTime(); + + $.ajax({ + type: "POST", + url: '/RecordController/CreateRecording', + data: { + 'recordingName': generateRecordingName(), + timeStamp: recordingStartTime + }, + success: function(response) { + recordingId = response.recordingId; + recordingName = response.recordingName; + $axure.messageCenter.postMessage('startRecording', {'recordingId' : recordingId, 'recordingName': recordingName}); + }, + // dataType: 'json' + }); + + }; + + var _playClick = function(event) { + $('#playButton').addClass('recordPlayButtonSelected'); + }; + + var _stopClick = function(event) { + var axRecording, axObjectDictionary, axRecordingContainer, transmissionFields; + $('#sitemapLinksContainer').toggle(); + if($('#recordButton').is('.recordPlayButtonSelected')) { + $('#recordButton').removeClass('recordPlayButtonSelected'); + // $axure.recording.stopRecord(); + + axRecording = { + 'recordingId' : recordingId, + 'recordingName': recordingName, + 'eventList': eventList + }; + + axRecordingList[axRecordingList.length] = axRecording; + axRecordingContainer = $('#recordingContainer').find('li').filter('.recordingRootNode'); + axRecordingContainer.append(_formAxRecordingBranch(axRecording)); + _attachEventTriggers(axRecording); + + lastBulkEvent = {}; + + var recordingStepList = []; + + for(var eventListIdx in eventList) { + var eventListItem = eventList[eventListIdx]; + + if(eventListItem.eventType === 'OnDrag') { + var lastDrag = eventListItem.eventInfo.mousePositions[eventListItem.eventInfo.mousePositions.length - 1].dragInfo; + eventListItem.eventInfo.dragInfo.currentX = lastDrag.currentX; + eventListItem.eventInfo.dragInfo.currentY = lastDrag.currentY; + eventListItem.eventInfo.dragInfo.currentTime = lastDrag.currentTime; + eventListItem.eventInfo.dragInfo.xDelta = eventListItem.eventInfo.dragInfo.currentX - eventListItem.eventInfo.dragInfo.lastX; + eventListItem.eventInfo.dragInfo.yDelta = eventListItem.eventInfo.dragInfo.currentY - eventListItem.eventInfo.dragInfo.lastY; + transmissionFields = {}; + transmissionFields = tackItOn(transmissionFields, eventListItem, ['eventType', 'elementID', 'path']); + transmissionFields = tackItOn(transmissionFields, eventListItem.eventInfo, ['dragInfo']); + transmissionFields.recordingId = recordingId; + } + + if(isSingleMouse(eventListItem.eventType)) { + transmissionFields = {}; + transmissionFields = tackItOn(transmissionFields, eventListItem, ['timeStamp', 'eventType', 'elementID', 'path']); + transmissionFields = tackItOn(transmissionFields, eventListItem.eventInfo, ['cursor']); + transmissionFields.recordingId = recordingId; + } + + if(isBulkMouse(eventListItem.eventType)) { + transmissionFields = {}; + transmissionFields = tackItOn(transmissionFields, eventListItem, ['eventType', 'elementID', 'path']); + transmissionFields = tackItOn(transmissionFields, eventListItem.eventInfo, ['mousePositions']); + transmissionFields.recordingId = recordingId; + } + recordingStepList[recordingStepList.length] = transmissionFields; + } + + eventList = []; + $axure.messageCenter.postMessage('stopRecording', axObjectDictionary); + + var jsonText = { + 'recordingName': recordingName, + 'recordingId': recordingId, + recordingStart: new Date().getTime(), + recordingEnd: recordingStartTime, + 'eventList': recordingStepList + }; + + $.ajax({ + type: "POST", + url: '/RecordController/StopRecording', + data: { 'jsonText': JSON.stringify(jsonText) } + + }); + + } + + if($('#playButton').is('.recordPlayButtonSelected')) { + $('#playButton').removeClass('recordPlayButtonSelected'); + } + }; + + var _deleteClick = function(event) { + $.ajax({ + type: "POST", + url: '/RecordController/DeleteRecordings', + success: function(response) { + var x = true; + }, // dataType: 'json' + }); + }; + + var tackItOn = function(destination, source, fields) { + + for(var idx in fields) { + destination[fields[idx]] = source[fields[idx]]; + } + return destination; + }; + + var makeFirstLetterLower = function(eventName) { + return eventName.substr(0, 1).toLowerCase() + eventName.substr(1); + }; + + var _attachEventTriggers = function(axRecording) { + for(var eventIdx in axRecording.eventList) { + var eventObject = axRecording.eventList[eventIdx]; + var eventID = axRecording['recordingId'] + '_' + eventObject.timeStamp; + currentEvent = eventID; + $('#' + eventID).click(_triggerEvent(axRecording['recordingId'], eventObject.timeStamp)); + // $('#' + eventID).click(event.trigger); + } + }; + + var _formAxRecordingBranch = function(axRecording) { + var eventObject, eventID, RDOID; + var recordPlayUi = '"; + + return recordPlayUi; + }; + + var currentEvent = ''; + + var _triggerEvent = function(axRecording, timeStamp) { + // $axure.messageCenter.postMessage('triggerEvent', false); + + + for(var axRecordingIdx in axRecordingList) { + if(axRecordingList[axRecordingIdx].recordingId === axRecording) { + for(var eventIdx in axRecordingList[axRecordingIdx].eventList) { + if(axRecordingList[axRecordingIdx].eventList[eventIdx].timeStamp === timeStamp) { + + var thisEvent = axRecordingList[axRecordingIdx].eventList[eventIdx]; + // thisEvent.trigger(); + + var thisEventInfo, lowerEventType; + lowerEventType = thisEvent.eventType.toLowerCase(); + if(lowerEventType === 'onclick' || lowerEventType === 'onmousein') { + thisEventInfo = {}; + thisEventInfo = tackItOn(thisEventInfo, thisEvent.eventInfo, ['cursor', 'timeStamp', 'srcElement']); + if(thisEvent.eventInfo.inputType) { + thisEventInfo = tackItOn(thisEventInfo, thisEvent.eventInfo, ['inputType', 'inputValue']); + } + } else { + thisEventInfo = thisEvent.eventInfo; + } + + var thisParameters = { + 'element': thisEvent.elementID, + 'eventInfo': thisEventInfo, + // 'axEventObject': thisEvent.eventObject, + 'eventType': thisEvent.eventType + }; + + return function() { + $axure.messageCenter.postMessage('playEvent', thisParameters); + }; + + } + } + } + } + }; + + var _generateRecordPlay = function() { + var recordPlayUi = "
"; + + recordPlayUi += "
"; + + recordPlayUi += "
"; + + recordPlayUi += ""; + recordPlayUi += ""; + recordPlayUi += ""; + recordPlayUi += ""; + recordPlayUi += "
"; + + recordPlayUi += "
  • "; + recordPlayUi += "
    "; + + $('#recordPlayHost').html(recordPlayUi); + }; + +})(); \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/recordplay/styles/recordplay.css" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/recordplay/styles/recordplay.css" new file mode 100644 index 0000000..b8eb689 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/recordplay/styles/recordplay.css" @@ -0,0 +1,89 @@ +锘#recordPlayHost { + font-size: 12px; + color:#333; + height: 100%; +} + + +#recordPlayContainer +{ + overflow: auto; + width: 100%; + height: 100%; + padding: 10px 10px 10px 10px; +} + +#recordPlayToolbar +{ + margin: 5px 5px 5px 5px; + height: 22px; +} + +#recordPlayToolbar .recordPlayButton +{ + float: left; + width: 22px; + height: 22px; + border: 1px solid transparent; +} + +#recordPlayToolbar .recordPlayButton:hover +{ + border: 1px solid rgb(0,157,217); + background-color : rgb(166,221,242); +} + +#recordPlayToolbar .recordPlayButton:active +{ + border: 1px solid rgb(0,157,217); + background-color : rgb(204,235,248); +} + +#recordPlayToolbar .recordPlayButtonSelected { + border: 1px solid rgb(0,157,217); + background-color : rgb(204,235,248); +} + +#recordButton { + background: url('../../sitemap/styles/images/233_hyperlink_16.png') no-repeat center center; +} + +#playButton { + background: url('../../sitemap/styles/images/225_responsive_16.png') no-repeat center center; +} + +#stopButton { + background: url('../../sitemap/styles/images/228_togglenotes_16.png') no-repeat center center; +} + +#deleteButton { + background: url('../../sitemap/styles/images/231_event_16.png') no-repeat center center; +} + +#recordNameHeader +{ + /* yeah??*/ + font-size: 13px; + font-weight: bold; + height: 23px; + white-space: nowrap; +} + +#recordPlayContent +{ + /* yeah??*/ + overflow: visible; +} + +.recordPlayName +{ + font-size: 12px; + margin-bottom: 5px; + text-decoration: underline; + white-space: nowrap; +} + +.recordPlay +{ + margin-bottom: 10px; +} \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/sitemap.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/sitemap.js" new file mode 100644 index 0000000..d9aca9d --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/sitemap.js" @@ -0,0 +1,490 @@ +锘縱ar currentNodeUrl = ''; +var allNodeUrls = []; + +function openNextPage() { + var index = allNodeUrls.indexOf(currentNodeUrl) + 1; + if(index >= allNodeUrls.length) return; + var nextNodeUrl = allNodeUrls[index]; + $('.sitemapPageLink[nodeUrl="' + nextNodeUrl + '"]').click(); +} + +function openPreviousPage() { + var index = allNodeUrls.indexOf(currentNodeUrl) - 1; + if(index < 0) return; + var nextNodeUrl = allNodeUrls[index]; + $('.sitemapPageLink[nodeUrl="' + nextNodeUrl + '"]').click(); +} + +// use this to isolate the scope +(function() { + + var SHOW_HIDE_ANIMATION_DURATION = 0; + + var HIGHLIGHT_INTERACTIVE_VAR_NAME = 'hi'; + + var currentPageLoc = ''; + var currentPlayerLoc = ''; + var currentPageHashString = ''; + + $(window.document).ready(function() { + $axure.player.createPluginHost({ + id: 'sitemapHost', + context: 'interface', + title: 'PAGES', + gid: 1 + }); + + generateSitemap(); + + $('.sitemapPlusMinusLink').toggle(collapse_click, expand_click); + $('.sitemapPageLink').click(node_click); + + $('#sitemapLinksContainer').hide(); + $('#linksButton').click(links_click); + $('#adaptiveButton').click(adaptive_click); + $('#adaptiveViewsContainer').hide(); + + $('#highlightInteractiveButton').click(highlight_interactive); + $('#searchButton').click(search_click); + $('#searchBox').keyup(search_input_keyup); + $('.sitemapLinkField').click(function() { this.select(); }); + $('input[value="withoutmap"]').click(withoutSitemapRadio_click); + $('input[value="withmap"]').click(withSitemapRadio_click); + $('#minimizeBox, #collapseBox, #footnotesBox, #highlightBox').change(sitemapUrlOptions_change); + $('#viewSelect').change(sitemapUrlViewSelect_change); + + $(document).on('ContainerHeightChange', function() { + updateContainerHeight(); + }); + + // bind to the page load + $axure.page.bind('load.sitemap', function() { + currentPageLoc = $axure.page.location.split("#")[0]; + var decodedPageLoc = decodeURI(currentPageLoc); + currentNodeUrl = decodedPageLoc.substr(decodedPageLoc.lastIndexOf('/') ? decodedPageLoc.lastIndexOf('/') + 1 : 0); + currentPlayerLoc = $(location).attr('href').split("#")[0].split("?")[0]; + currentPageHashString = '#p=' + currentNodeUrl.substr(0, currentNodeUrl.lastIndexOf('.')); + + setVarInCurrentUrlHash('p', currentNodeUrl.substring(0, currentNodeUrl.lastIndexOf('.html'))); + + $('.sitemapPageLink').parent().parent().removeClass('sitemapHighlight'); + $('.sitemapPageLink[nodeUrl="' + currentNodeUrl + '"]').parent().parent().addClass('sitemapHighlight'); + + var pageName = $axure.page.pageName; + $('.pageNameHeader').html(pageName); + + $('#sitemapLinksPageName').html($('.sitemapHighlight > .sitemapPageLinkContainer > .sitemapPageLink > .sitemapPageName').html()); + + //Click the "Without sitemap" radio button so that it's selected by default + $('input[value="withoutmap"]').click(); + + //If highlight var is present and set to 1 or else if + //sitemap highlight button is selected then highlight interactive elements + var hiVal = getHashStringVar(HIGHLIGHT_INTERACTIVE_VAR_NAME); + if(hiVal.length > 0 && hiVal == 1) { + $('#highlightInteractiveButton').addClass('sitemapToolbarButtonSelected'); + $axure.messageCenter.postMessage('highlightInteractive', true); + } else if($('#highlightInteractiveButton').is('.sitemapToolbarButtonSelected')) { + $axure.messageCenter.postMessage('highlightInteractive', true); + } + + //Set the current view if it is defined in the hash string + //If the view is invalid, set it to 'auto' in the string + //ELSE set the view based on the currently selected view in the toolbar menu + var viewStr = getHashStringVar(ADAPTIVE_VIEW_VAR_NAME); + if(viewStr.length > 0) { + var $view = $('.adaptiveViewOption[val="' + viewStr + '"]'); + if($view.length > 0) $view.click(); + else $('.adaptiveViewOption[val="auto"]').click(); + } else if($('.checkedAdaptive').length > 0) { + var $viewOption = $('.checkedAdaptive').parents('.adaptiveViewOption'); + if($viewOption.attr('val') != 'auto') $viewOption.click(); + } + + $axure.messageCenter.postMessage('finishInit'); + + return false; + }); + + var $adaptiveViewsContainer = $('#adaptiveViewsContainer'); + var $viewSelect = $('#viewSelect'); + + //Fill out adaptive view container with prototype's defined adaptive views, as well as the default, and Auto + $adaptiveViewsContainer.append('
    Auto
    '); + $viewSelect.append(''); + if(typeof $axure.document.defaultAdaptiveView.name != 'undefined') { + //If the name is a blank string, make the view name the width if non-zero, else 'any' + var defaultViewName = $axure.document.defaultAdaptiveView.name; + $adaptiveViewsContainer.append('
    ' + defaultViewName + '
    '); + $viewSelect.append(''); + } + + var enabledViewIds = $axure.document.configuration.enabledViewIds; + for(var viewIndex = 0; viewIndex < $axure.document.adaptiveViews.length; viewIndex++) { + var currView = $axure.document.adaptiveViews[viewIndex]; + if(enabledViewIds.indexOf(currView.id) < 0) continue; + + var widthString = currView.size.width == 0 ? 'any' : currView.size.width; + var heightString = currView.size.height == 0 ? 'any' : currView.size.height; + var conditionString = ''; + if(currView.condition == '>' || currView.condition == '>=') { + conditionString = ' and above'; + } else if(currView.condition == '<' || currView.condition == '<=') { + conditionString = ' and below'; + } + + var viewString = currView.name + ' (' + widthString + ' x ' + heightString + conditionString + ')'; + $adaptiveViewsContainer.append('
    ' + viewString + '
    '); + $viewSelect.append(''); + } + + $('.adaptiveViewOption').click(adaptiveViewOption_click); + + $('.adaptiveViewOption').mouseup(function(event) { + event.stopPropagation(); + }); + + $('#searchBox').focusin(function() { + if($(this).is('.searchBoxHint')) { + $(this).val(''); + $(this).removeClass('searchBoxHint'); + } + }).focusout(function() { + if($(this).val() == '') { + $(this).addClass('searchBoxHint'); + $(this).val('Search'); + } + }); + + + $('#searchBox').focusout(); + }); + + function updateContainerHeight() { + $('#sitemapTreeContainer').height($('#sitemapHost').height() - $('#sitemapHeader').outerHeight()); + } + + function hideAllContainersExcept(exceptContainer) { + //1 - adaptive container, 3 - links container + if(exceptContainer != 1) { + $('#adaptiveViewsContainer').hide(); + $('#adaptiveButton').removeClass('sitemapToolbarButtonSelected'); + } + if(exceptContainer != 3) { + $('#sitemapLinksContainer').hide(); + $('#linksButton').removeClass('sitemapToolbarButtonSelected'); + } + } + + function collapse_click(event) { + $(this) + .children('.sitemapMinus').removeClass('sitemapMinus').addClass('sitemapPlus').end() + .closest('li').children('ul').hide(SHOW_HIDE_ANIMATION_DURATION); + + $(this).next('.sitemapFolderOpenIcon').removeClass('sitemapFolderOpenIcon').addClass('sitemapFolderIcon'); + } + + function expand_click(event) { + $(this) + .children('.sitemapPlus').removeClass('sitemapPlus').addClass('sitemapMinus').end() + .closest('li').children('ul').show(SHOW_HIDE_ANIMATION_DURATION); + + $(this).next('.sitemapFolderIcon').removeClass('sitemapFolderIcon').addClass('sitemapFolderOpenIcon'); + } + + function node_click(event) { + $axure.page.navigate(this.getAttribute('nodeUrl'), true); + } + + function links_click(event) { + hideAllContainersExcept(3); + $('#sitemapLinksContainer').toggle(); + updateContainerHeight(); + if($('#sitemapLinksContainer').is(":visible")) { + $('#linksButton').addClass('sitemapToolbarButtonSelected'); + } else { + $('#linksButton').removeClass('sitemapToolbarButtonSelected'); + } + } + + $axure.messageCenter.addMessageListener(function(message, data) { + if(message == 'adaptiveViewChange') { + $('.adaptiveViewOption').removeClass('currentAdaptiveView'); + if(data.viewId) {$('div[val="' + data.viewId + '"]').addClass('currentAdaptiveView');} + else $('div[val="default"]').addClass('currentAdaptiveView'); + + //when we set adaptive view through user event, we want to update the checkmark on sitemap + if(data.forceSwitchTo) { + $('.checkedAdaptive').removeClass('checkedAdaptive'); + $('div[val="' + data.forceSwitchTo + '"]').find('.adaptiveCheckboxDiv').addClass('checkedAdaptive'); + } + } + }); + + $(document).on('pluginShown', function (event, data) { + if(data == 1) { + hideAllContainersExcept(1); + updateContainerHeight(); + } + }); + + $(document).on('sidebarExpanded', function (event, data) { + hideAllContainersExcept(1); + updateContainerHeight(); + }); + + function highlight_interactive(event) { + if($('#highlightInteractiveButton').is('.sitemapToolbarButtonSelected')) { + $('#highlightInteractiveButton').removeClass('sitemapToolbarButtonSelected'); + $axure.messageCenter.postMessage('highlightInteractive', false); + //Delete 'hi' hash string var if it exists since default is unselected + deleteVarFromCurrentUrlHash(HIGHLIGHT_INTERACTIVE_VAR_NAME); + } else { + $('#highlightInteractiveButton').addClass('sitemapToolbarButtonSelected'); + $axure.messageCenter.postMessage('highlightInteractive', true); + //Add 'hi' hash string var so that stay highlighted across reloads + setVarInCurrentUrlHash(HIGHLIGHT_INTERACTIVE_VAR_NAME, 1); + } + } + + function adaptive_click(event) { + hideAllContainersExcept(1); + $('#adaptiveViewsContainer').toggle(); + updateContainerHeight(); + if(!$('#adaptiveViewsContainer').is(":visible")) { + $('#adaptiveButton').removeClass('sitemapToolbarButtonSelected'); + } else { + $('#adaptiveButton').addClass('sitemapToolbarButtonSelected'); + } + } + + function adaptiveViewOption_click(event) { + var currVal = $(this).attr('val'); + + $('.checkedAdaptive').removeClass('checkedAdaptive'); + $(this).find('.adaptiveCheckboxDiv').addClass('checkedAdaptive'); + + currentPageLoc = $axure.page.location.split("#")[0]; + var decodedPageLoc = decodeURI(currentPageLoc); + var nodeUrl = decodedPageLoc.substr(decodedPageLoc.lastIndexOf('/') ? decodedPageLoc.lastIndexOf('/') + 1 : 0); + var adaptiveData = { + src: nodeUrl + }; + + adaptiveData.view = currVal; + $axure.messageCenter.postMessage('switchAdaptiveView', adaptiveData); + + if(currVal == 'auto') { + //Remove view in hash string if one is set + deleteVarFromCurrentUrlHash(ADAPTIVE_VIEW_VAR_NAME); + } else { + //Set current view in hash string so that it can be maintained across reloads + setVarInCurrentUrlHash(ADAPTIVE_VIEW_VAR_NAME, currVal); + } + } + + function search_click(event) { + $('#searchDiv').toggle(); + if(!$('#searchDiv').is(":visible")) { + $('#searchButton').removeClass('sitemapToolbarButtonSelected'); + $('#searchBox').val(''); + $('#searchBox').keyup(); + //$('#sitemapToolbar').css('height', '22px'); + $('#sitemapTreeContainer').css('top', '31px'); + } else { + $('#searchButton').addClass('sitemapToolbarButtonSelected'); + $('#searchBox').focus(); + //$('#sitemapToolbar').css('height', '50px'); + $('#sitemapTreeContainer').css('top', '63px'); + } + } + + function search_input_keyup(event) { + var searchVal = $(this).val().toLowerCase(); + //If empty search field, show all nodes, else grey+hide all nodes and + //ungrey+unhide all matching nodes, as well as unhide their parent nodes + if(searchVal == '') { + $('.sitemapPageName').removeClass('sitemapGreyedName'); + $('.sitemapNode').show(); + } else { + $('.sitemapNode').hide(); + + $('.sitemapPageName').addClass('sitemapGreyedName').each(function() { + var nodeName = $(this).text().toLowerCase(); + if(nodeName.indexOf(searchVal) != -1) { + $(this).removeClass('sitemapGreyedName').parents('.sitemapNode:first').show().parents('.sitemapExpandableNode').show(); + } + }); + } + } + + function withoutSitemapRadio_click() { + $('#sitemapLinkWithPlayer').val(currentPageLoc); + $('#sitemapOptionsDiv').hide(); + $('#minimizeBox').attr('disabled', 'disabled'); + $('#collapseBox').attr('disabled', 'disabled'); + $('#footnotesBox').attr('disabled', 'disabled'); + $('#highlightBox').attr('disabled', 'disabled'); + $('#viewSelect').attr('disabled', 'disabled'); + $('input[value="withmap"]').parent().removeClass('sitemapRadioSelected'); + + updateContainerHeight(); + } + + function withSitemapRadio_click() { + $('#sitemapLinkWithPlayer').val(currentPlayerLoc + currentPageHashString); + $('#minimizeBox').removeAttr('disabled').change(); + $('#collapseBox').removeAttr('disabled').change(); + $('#footnotesBox').removeAttr('disabled').change(); + $('#highlightBox').removeAttr('disabled').change(); + $('#viewSelect').removeAttr('disabled').change(); + $('#sitemapOptionsDiv').show(); + $('input[value="withmap"]').parent().addClass('sitemapRadioSelected'); + + updateContainerHeight(); + } + + function sitemapUrlOptions_change() { + var currLinkHash = '#' + $('#sitemapLinkWithPlayer').val().split("#")[1]; + var newHash = null; + var varName = ''; + var defVal = 1; + if($(this).is('#minimizeBox')) { + varName = SITEMAP_COLLAPSE_VAR_NAME; + } else if($(this).is('#collapseBox')) { + varName = PLUGIN_VAR_NAME; + defVal = 0; + } else if($(this).is('#footnotesBox')) { + varName = FOOTNOTES_VAR_NAME; + defVal = 0; + } else if($(this).is('#highlightBox')) { + varName = HIGHLIGHT_INTERACTIVE_VAR_NAME; + } + + newHash = $(this).is(':checked') ? setHashStringVar(currLinkHash, varName, defVal) : deleteHashStringVar(currLinkHash, varName); + + if(newHash != null) { + $('#sitemapLinkWithPlayer').val(currentPlayerLoc + newHash); + } + } + + function sitemapUrlViewSelect_change() { + var currLinkHash = '#' + $('#sitemapLinkWithPlayer').val().split("#")[1]; + var newHash = null; + var $selectedOption = $(this).find('option:selected'); + if($selectedOption.length == 0) return; + var selectedVal = $selectedOption.attr('value'); + + newHash = selectedVal == 'auto' ? deleteHashStringVar(currLinkHash, ADAPTIVE_VIEW_VAR_NAME) : setHashStringVar(currLinkHash, ADAPTIVE_VIEW_VAR_NAME, selectedVal); + + if(newHash != null) { + $('#sitemapLinkWithPlayer').val(currentPlayerLoc + newHash); + } + } + + function generateSitemap() { + var treeUl = "
    "; + treeUl += "
    "; + treeUl += "
    PAGES
    "; + treeUl += "
    "; + + treeUl += "
    "; + + if($axure.document.configuration.enabledViewIds.length > 0) { + treeUl += ""; + } + + treeUl += ""; + treeUl += ""; + treeUl += "
    "; + + treeUl += "
    "; + + if($axure.document.adaptiveViews.length > 0) { + treeUl += "
    Adaptive Views
    "; + } + + //linkcontainer + treeUl += ""; + ///////////////// + + treeUl += "
    "; + + treeUl += "
    "; + + treeUl += '
    '; + + treeUl += "
    "; + + $('#sitemapHost').html(treeUl); + if($axure.document.adaptiveViews.length <= 0) { + $('#sitemapHost .pageNameHeader').css('padding-right', '55px'); + } + } + + function generateNode(node, level) { + var hasChildren = (node.children && node.children.length > 0); + var margin, returnVal; + if(hasChildren) { + margin = (9 + level * 17); + returnVal = "
  • "; + + if(hasChildren) { + returnVal += "
      "; + for(var i = 0; i < node.children.length; i++) { + var child = node.children[i]; + returnVal += generateNode(child, level + 1); + } + returnVal += "
    "; + } + returnVal += "
  • "; + return returnVal; + } +})(); diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/079_page_16.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/079_page_16.png" new file mode 100644 index 0000000..2df8317 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/079_page_16.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/086_case_16.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/086_case_16.png" new file mode 100644 index 0000000..6665ef4 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/086_case_16.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/225_responsive_16.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/225_responsive_16.png" new file mode 100644 index 0000000..1ae8edd Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/225_responsive_16.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/228_togglenotes_16.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/228_togglenotes_16.png" new file mode 100644 index 0000000..f0f5f0f Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/228_togglenotes_16.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/229_variables_16.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/229_variables_16.png" new file mode 100644 index 0000000..0d21988 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/229_variables_16.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/231_event_16.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/231_event_16.png" new file mode 100644 index 0000000..1d763a6 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/231_event_16.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/232_search_16.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/232_search_16.png" new file mode 100644 index 0000000..4fdfe78 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/232_search_16.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/233_hyperlink_16.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/233_hyperlink_16.png" new file mode 100644 index 0000000..bb8b282 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/233_hyperlink_16.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/235_folderclosed_16.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/235_folderclosed_16.png" new file mode 100644 index 0000000..dd7d132 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/235_folderclosed_16.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/236_folderopen_16.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/236_folderopen_16.png" new file mode 100644 index 0000000..6e46b58 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/236_folderopen_16.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/adaptivecheck.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/adaptivecheck.png" new file mode 100644 index 0000000..18914ae Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/adaptivecheck.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/flow.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/flow.png" new file mode 100644 index 0000000..54b9928 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/flow.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/flow.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/flow.svg" new file mode 100644 index 0000000..228330a --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/flow.svg" @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/folder_closed.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/folder_closed.png" new file mode 100644 index 0000000..bb122c4 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/folder_closed.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/folder_closed.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/folder_closed.svg" new file mode 100644 index 0000000..e73c069 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/folder_closed.svg" @@ -0,0 +1,8 @@ + + + + + + + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/folder_open.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/folder_open.png" new file mode 100644 index 0000000..3178cba Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/folder_open.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/folder_open.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/folder_open.svg" new file mode 100644 index 0000000..d921ccf --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/folder_open.svg" @@ -0,0 +1,8 @@ + + + + + + + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/hotspots.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/hotspots.png" new file mode 100644 index 0000000..19fd004 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/hotspots.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/hotspots.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/hotspots.svg" new file mode 100644 index 0000000..f35fe35 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/hotspots.svg" @@ -0,0 +1,12 @@ + + + + hotspots + Created with Sketch. + + + + + + + \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/hotspots_hover.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/hotspots_hover.png" new file mode 100644 index 0000000..c50636a Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/hotspots_hover.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/hotspots_hover.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/hotspots_hover.svg" new file mode 100644 index 0000000..45209d2 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/hotspots_hover.svg" @@ -0,0 +1,12 @@ + + + + hotspots_hover + Created with Sketch. + + + + + + + \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/hotspots_on.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/hotspots_on.png" new file mode 100644 index 0000000..c50636a Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/hotspots_on.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/hotspots_on.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/hotspots_on.svg" new file mode 100644 index 0000000..73899eb --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/hotspots_on.svg" @@ -0,0 +1,12 @@ + + + + hotspots_on + Created with Sketch. + + + + + + + \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/images.html" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/images.html" new file mode 100644 index 0000000..e4cf5e8 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/images.html" @@ -0,0 +1,22 @@ +锘 + + + + + +

    + + + + + + + + + + + + +

    + + \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/minus.gif" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/minus.gif" new file mode 100644 index 0000000..3284f66 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/minus.gif" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/note.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/note.png" new file mode 100644 index 0000000..0a69ea7 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/note.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/note.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/note.svg" new file mode 100644 index 0000000..ee5337f --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/note.svg" @@ -0,0 +1,16 @@ + + + + Note Copy + Created with sketchtool. + + + + + + + + + + + \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/page.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/page.png" new file mode 100644 index 0000000..a1bc017 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/page.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/page.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/page.svg" new file mode 100644 index 0000000..c690652 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/page.svg" @@ -0,0 +1,8 @@ + + + + + + + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/plus.gif" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/plus.gif" new file mode 100644 index 0000000..373f060 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/plus.gif" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/share.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/share.png" new file mode 100644 index 0000000..88c7462 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/share.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/share.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/share.svg" new file mode 100644 index 0000000..c628e6b --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/share.svg" @@ -0,0 +1,19 @@ + + + + share + Created with Sketch. + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/share_hover.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/share_hover.png" new file mode 100644 index 0000000..d310eea Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/share_hover.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/share_hover.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/share_hover.svg" new file mode 100644 index 0000000..e26aa4b --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/share_hover.svg" @@ -0,0 +1,19 @@ + + + + share_hover + Created with Sketch. + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/share_on.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/share_on.png" new file mode 100644 index 0000000..d310eea Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/share_on.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/share_on.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/share_on.svg" new file mode 100644 index 0000000..9007227 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/share_on.svg" @@ -0,0 +1,19 @@ + + + + share_on + Created with Sketch. + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/sitemap_hover.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/sitemap_hover.png" new file mode 100644 index 0000000..3aa5667 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/sitemap_hover.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/sitemap_hover.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/sitemap_hover.svg" new file mode 100644 index 0000000..aa1ad02 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/sitemap_hover.svg" @@ -0,0 +1,8 @@ + + + + + + + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/sitemap_off.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/sitemap_off.png" new file mode 100644 index 0000000..02667b6 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/sitemap_off.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/sitemap_off.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/sitemap_off.svg" new file mode 100644 index 0000000..0d562f4 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/sitemap_off.svg" @@ -0,0 +1,8 @@ + + + + + + + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/sitemap_on.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/sitemap_on.png" new file mode 100644 index 0000000..a40bb35 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/sitemap_on.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/sitemap_on.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/sitemap_on.svg" new file mode 100644 index 0000000..f72c23b --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/sitemap_on.svg" @@ -0,0 +1,8 @@ + + + + + + + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/views.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/views.png" new file mode 100644 index 0000000..8c22894 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/views.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/views.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/views.svg" new file mode 100644 index 0000000..04f1224 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/views.svg" @@ -0,0 +1,12 @@ + + + + views + Created with Sketch. + + + + + + + \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/views_hover.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/views_hover.png" new file mode 100644 index 0000000..a97d9a6 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/views_hover.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/views_hover.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/views_hover.svg" new file mode 100644 index 0000000..d3bf5f5 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/views_hover.svg" @@ -0,0 +1,12 @@ + + + + views_hover + Created with Sketch. + + + + + + + \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/views_on.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/views_on.png" new file mode 100644 index 0000000..a97d9a6 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/views_on.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/views_on.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/views_on.svg" new file mode 100644 index 0000000..d23cb1d --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/images/views_on.svg" @@ -0,0 +1,12 @@ + + + + views_on + Created with Sketch. + + + + + + + \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/sitemap.css" "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/sitemap.css" new file mode 100644 index 0000000..d5401dd --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/plugins/sitemap/styles/sitemap.css" @@ -0,0 +1,399 @@ +锘 +#sitemapHost { + font-size: 12px; + color:#4a4a4a; + height: 100%; +} + +#sitemapHostBtn a { + background: url('images/sitemap_on.png'); + background: url('images/sitemap_on.svg'),linear-gradient(transparent, transparent); +} + +.hashover #sitemapHostBtn a:hover { + background: url('images/sitemap_hover.png'); + background: url('images/sitemap_hover.svg'),linear-gradient(transparent, transparent); +} + +#sitemapHostBtn a.selected, #sitemapHostBtn a.selected:hover { + background: url('images/sitemap_off.png'); + background: url('images/sitemap_off.svg'),linear-gradient(transparent, transparent); +} + +#sitemapHost .pageButtonHeader { + top: -27px; +} + +#sitemapTreeContainer { + overflow: auto; + width: 100%; + height: 100%; + -webkit-overflow-scrolling: touch; +} + +.sitemapTree { + margin: 0px 0px 10px 0px; + overflow:visible; +} + +.sitemapTree ul { + list-style-type: none; + margin: 0px 0px 0px 0px; + padding-left: 0px; +} + +.sitemapPlusMinusLink +{ +} + +.sitemapMinus +{ + vertical-align:middle; + background: url('images/minus.gif'); + background-repeat: no-repeat; + margin-right: 3px; + margin-bottom: 1px; + height:9px; + width:9px; + display:inline-block; +} + +.sitemapPlus +{ + vertical-align:middle; + background: url('images/plus.gif'); + background-repeat: no-repeat; + margin-right: 3px; + margin-bottom: 1px; + height:9px; + width:9px; + display:inline-block; +} + +.sitemapPageLink +{ + margin-left: 0px; +} + +.sitemapPageIcon +{ + margin: 0px 0px -3px 4px; + width: 16px; + height: 16px; + display: inline-block; + background: url('images/page.png') no-repeat center center; + background: url('images/page.svg') no-repeat center center, linear-gradient(transparent,transparent); +} + +.sitemapFlowIcon +{ + background: url('images/flow.png') no-repeat center center; + background: url('images/flow.svg') no-repeat center center, linear-gradient(transparent,transparent); +} + +.sitemapFolderIcon +{ + background: url('images/folder_closed.png') no-repeat center center; + background: url('images/folder_closed.svg') no-repeat center center, linear-gradient(transparent,transparent); +} + +.sitemapFolderOpenIcon +{ + background: url('images/folder_open.png') no-repeat center center; + background: url('images/folder_open.svg') no-repeat center center, linear-gradient(transparent,transparent); +} + +.sitemapPageName +{ + margin-left: 7px; +} + +.sitemapNode +{ + /*margin:4px 0px 4px 0px;*/ + white-space:nowrap; +} + +.sitemapPageLinkContainer { + /*display: inline-block;*/ + margin-left: 0px; + padding: 4px 0px 4px 0px; +} +/* +.sitemapNode div +{ + padding-top: 1px; + padding-bottom: 3px; + padding-left: 20px; + height: 14px; +} +*/ + +.sitemapExpandableNode +{ + margin-left: 0px; +} + +.sitemapHighlight +{ + /*display: inline-block;*/ + background-color : #C8E0F0; + font-weight: bold; +} + +.sitemapGreyedName +{ + color: #AAA; +} + + +.pluginNameHeader +{ + font-family: 'Trebuchet MS'; + font-size: 12px; + letter-spacing: 1px; + /*font-weight: bold;*/ + white-space: nowrap; + margin-bottom: 5px; +} + +.pageNameHeader +{ + font-family: 'Trebuchet MS'; + /*display: inline-block;*/ + /*float: left;*/ + font-size: 15px; + font-weight: bold; + /*height: 23px;*/ + padding-right: 77px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.pageButtonHeader +{ + float: right; + position: relative; + /*width: 72px;*/ + height: 24px; + top: -22px; + margin-bottom: -24px; +} + +.sitemapHeader +{ + padding-top: 27px; + border-bottom: 1px solid #d9d9d9; + min-width: 110px; +} + +.sitemapToolbar { + margin: 0px 5px 14px 12px; +} + +.sitemapToolbarButton +{ + float: left; + width: 22px; + height: 22px; + border: 1px solid transparent; +} + +#linksButton { + background: url('images/share.png') no-repeat center center; + background: url('images/share.svg') no-repeat center center, linear-gradient(transparent,transparent); +} + +#linksButton:hover { + background: url('images/share_hover.png') no-repeat center center; + background: url('images/share_hover.svg') no-repeat center center, linear-gradient(transparent,transparent); +} + +#linksButton.sitemapToolbarButtonSelected, .hashover #linksButton.sitemapToolbarButtonSelected:hover { + background: url('images/share_on.png') no-repeat center center; + background: url('images/share_on.svg') no-repeat center center, linear-gradient(transparent,transparent); +} + +#adaptiveButton { + background: url('images/views.png') no-repeat center center; + background: url('images/views.svg') no-repeat center center, linear-gradient(transparent,transparent); +} + +#adaptiveButton:hover { + background: url('images/views_hover.png') no-repeat center center; + background: url('images/views_hover.svg') no-repeat center center, linear-gradient(transparent,transparent); +} + +#adaptiveButton.sitemapToolbarButtonSelected, #adaptiveButton.sitemapToolbarButtonSelected:hover { + background: url('images/views_on.png') no-repeat center center; + background: url('images/views_on.svg') no-repeat center center, linear-gradient(transparent,transparent); +} + +#highlightInteractiveButton { + background: url('images/hotspots.png') no-repeat center center; + background: url('images/hotspots.svg') no-repeat center center, linear-gradient(transparent,transparent); + margin-top: 1px; +} + +#highlightInteractiveButton:hover { + background: url('images/hotspots_hover.png') no-repeat center center; + background: url('images/hotspots_hover.svg') no-repeat center center, linear-gradient(transparent,transparent); +} + +#highlightInteractiveButton.sitemapToolbarButtonSelected, #highlightInteractiveButton.sitemapToolbarButtonSelected:hover { + background: url('images/hotspots_on.png') no-repeat center center; + background: url('images/hotspots_on.svg') no-repeat center center, linear-gradient(transparent,transparent); +} + +/*#variablesButton { + background: url('images/229_variables_16.png') no-repeat center center; +}*/ + +#searchButton { + background: url('images/232_search_16.png') no-repeat center center; +} + +.sitemapLinkContainer +{ + margin-top: 8px; + padding-right: 5px; + /*font-size: 12px;*/ +} + +.sitemapLinkField +{ + width: 100%; + font-size: 12px; + margin-top: 3px; + padding: 5px; +} + +.sitemapRadioSelected { + font-weight: bold; +} + +.sitemapOptionContainer +{ + margin-top: 8px; + padding-right: 5px; + /*font-size: 12px;*/ +} + +#sitemapOptionsDiv +{ + margin-top: 10px; + /*margin-left: 16px;*/ +} + +#viewSelectDiv +{ + padding: 2px 0px 0px 0px; + /*margin-left: 5px;*/ +} + +#viewSelect +{ + width: 70%; +} + +.sitemapUrlOption +{ + padding-bottom: 8px; +} + +.optionLabel +{ + font-size: 12px; +} + +.sitemapPopupContainer +{ + display: none; + position: absolute; + background-color: #F4F4F4; + border: 1px solid #B9B9B9; + padding: 5px 5px 5px 5px; + margin: 5px 0px 0px 5px; + z-index: 1; +} + +#sitemapLinksContainer { + border-top: 1px solid #d9d9d9; + padding: 10px; + margin-left: 0px; + /*line-height: 18px;*/ +} + +#adaptiveViewsContainer { + border-top: 1px solid #d9d9d9; + padding: 10px; + margin-left: 0px; + line-height: 18px; +} + +.adaptiveViewOption +{ + padding: 2px; +} + +.adaptiveViewOption:hover +{ + background-color: rgb(204,235,248); + cursor: pointer; +} + +.currentAdaptiveView { + font-weight: bold; +} + +.adaptiveCheckboxDiv { + height: 15px; + width: 15px; + float: left; +} + +.checkedAdaptive { + background: url('images/adaptivecheck.png') no-repeat center center; +} + +/*#variablesContainer +{ + max-height: 350px; + overflow: auto; +}*/ + +/*#variablesClearLink +{ + color: #069; + left: 5px; +}*/ + +#searchDiv { + padding: 8px 12px 11px 12px; +} + +#searchBox { + width: 100%; + border: none; + border-top: 1px solid #d9d9d9; + /*border-bottom: 1px solid #d9d9d9;*/ + padding: 5px; + font-size: 12px; +} + +.searchBoxHint +{ + color: #8f949a; + /*font-style: italic;*/ +} + +#sitemapLinksPageName +{ + font-weight: bold; +} + +#sitemapOptionsHeader +{ + font-weight: bold; +} \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/Other.html" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/Other.html" new file mode 100644 index 0000000..d0fa808 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/Other.html" @@ -0,0 +1,35 @@ + + + + + +
    +
    +
    +
    + +
    + + + + + + + \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/chrome/allow_access.gif" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/chrome/allow_access.gif" new file mode 100644 index 0000000..11a6086 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/chrome/allow_access.gif" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/chrome/axure-chrome-extension.crx" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/chrome/axure-chrome-extension.crx" new file mode 100644 index 0000000..fde7743 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/chrome/axure-chrome-extension.crx" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/chrome/axure_logo.gif" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/chrome/axure_logo.gif" new file mode 100644 index 0000000..0e2357c Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/chrome/axure_logo.gif" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/chrome/axure_logo.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/chrome/axure_logo.png" new file mode 100644 index 0000000..cd6f727 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/chrome/axure_logo.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/chrome/chrome.html" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/chrome/chrome.html" new file mode 100644 index 0000000..9df5cd6 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/chrome/chrome.html" @@ -0,0 +1,175 @@ + + + Install the Axure RP Chrome Extension + + + +
    +
    +
    + axure +
    +

    + AXURE RP EXTENSION
    + For Chrome

    +

    + Google Chrome requires an extension to view locally stored projects. Alternatively, + upload your RP file to AxShare or use a different + browser.

    +

    + VIEW LOCAL PROJECTS IN CHROME

    +
    +

    + 1. Install Extension from Chrome Store

    + +
    +
    +

    + 2. Open the Extensions Options

    + extensions +
    +
    +  
    +
    +

    + 3. Check "Allow access to file URLs"

    + allow access +
    +
    +

    + 4. Click the button below

    + +
    +
    +
    +

    + EXTENSION FAQ

    +

    + What is a Chrome Extension? Extensions are downloadable + plug-ins for Google Chrome that modify the browser
    + and allow you additional capabilities. +

    +

    + Why do I need to install the extension? Google requires + this extension to be installed to allow the viewing of local files in
    + Chrome +

    +

    + Why does this extension require a high access level? This + extension requires a high access level to allow the viewing of the file://
    + protocol. Axure does not track or access any of your information. +

    +

    + ROUND UP

    +

    + Chrome requires this extension to be installed to view local files.

    +

    + Need help or have any questions? Drop us a line at + support@axure.com. +

    +
    +
    +
    + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/chrome/extensions_menu.gif" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/chrome/extensions_menu.gif" new file mode 100644 index 0000000..1c8b1a1 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/chrome/extensions_menu.gif" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/chrome/splitter.gif" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/chrome/splitter.gif" new file mode 100644 index 0000000..3f8bca9 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/chrome/splitter.gif" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/chrome/splitter.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/chrome/splitter.png" new file mode 100644 index 0000000..8e354e7 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/chrome/splitter.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/axure_rp_page.css" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/axure_rp_page.css" new file mode 100644 index 0000000..6d69647 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/axure_rp_page.css" @@ -0,0 +1,239 @@ +锘/* so the window resize fires within a frame in IE7 */ +html, body { + height: 100%; +} + +a { + color: inherit; +} + +p { + margin: 0px; + text-rendering: optimizeLegibility; + font-feature-settings: "kern" 1; + -webkit-font-feature-settings: "kern"; + -moz-font-feature-settings: "kern"; + -moz-font-feature-settings: "kern=1"; + font-kerning: normal; +} + +iframe { + background: #FFFFFF; +} + +/* to match IE with C, FF */ +input { + padding: 1px 0px 1px 0px; + box-sizing: border-box; + -moz-box-sizing: border-box; +} + +textarea { + margin: 0px; + box-sizing: border-box; + -moz-box-sizing: border-box; +} + +div.intcases { + font-family: arial; + font-size: 12px; + text-align:left; + border:1px solid #AAA; + background:#FFF none repeat scroll 0% 0%; + z-index:9999; + visibility:hidden; + position:absolute; + padding: 0px; + border-radius: 3px; + white-space: nowrap; +} + +div.intcaselink { + cursor: pointer; + padding: 3px 8px 3px 8px; + margin: 5px; + background:#EEE none repeat scroll 0% 0%; + border:1px solid #AAA; + border-radius: 3px; +} + +div.refpageimage { + position: absolute; + left: 0px; + top: 0px; + font-size: 0px; + width: 16px; + height: 16px; + cursor: pointer; + background-image: url(images/newwindow.gif); + background-repeat: no-repeat; +} + +div.annnoteimage { + position: absolute; + left: 0px; + top: 0px; + font-size: 0px; + /*width: 16px; + height: 12px;*/ + cursor: help; + /*background-image: url(images/note.gif);*/ + /*background-repeat: no-repeat;*/ + width: 13px; + height: 12px; + padding-top: 1px; + text-align: center; + background-color: #138CDD; + -moz-box-shadow: 1px 1px 3px #aaa; + -webkit-box-shadow: 1px 1px 3px #aaa; + box-shadow: 1px 1px 3px #aaa; +} + +div.annnoteline { + display: inline-block; + width: 9px; + height: 1px; + border-bottom: 1px solid white; + margin-top: 1px; +} + +div.annnotelabel { + position: absolute; + left: 0px; + top: 0px; + font-family: Helvetica,Arial; + font-size: 10px; + /*border: 1px solid rgb(166,221,242);*/ + cursor: help; + /*background:rgb(0,157,217) none repeat scroll 0% 0%;*/ + padding: 1px 3px 1px 3px; + white-space: nowrap; + color: white; + + background-color: #138CDD; + -moz-box-shadow: 1px 1px 3px #aaa; + -webkit-box-shadow: 1px 1px 3px #aaa; + box-shadow: 1px 1px 3px #aaa; +} + +.annotation { + font-size: 12px; + padding-left: 2px; + margin-bottom: 5px; +} + +.annotationName { + /*font-size: 13px; + font-weight: bold; + margin-bottom: 3px; + white-space: nowrap;*/ + + font-family: 'Trebuchet MS'; + font-size: 14px; + font-weight: bold; + margin-bottom: 5px; + white-space: nowrap; +} + +.annotationValue { + font-family: Arial, Helvetica, Sans-Serif; + font-size: 12px; + color: #4a4a4a; + line-height: 21px; + margin-bottom: 20px; +} + +.noteLink { + text-decoration: inherit; + color: inherit; +} + +.noteLink:hover { + background-color: white; +} + +/* this is a fix for the issue where dialogs jump around and takes the text-align from the body */ +.dialogFix { + position:absolute; + text-align:left; + border: 1px solid #8f949a; +} + + +@keyframes pulsate { + from { + box-shadow: 0 0 10px #15d6ba; + } + to { + box-shadow: 0 0 20px #15d6ba; + } +} + +@-webkit-keyframes pulsate { + from { + -webkit-box-shadow: 0 0 10px #15d6ba; + box-shadow: 0 0 10px #15d6ba; + } + to { + -webkit-box-shadow: 0 0 20px #15d6ba; + box-shadow: 0 0 20px #15d6ba; + } +} + +@-moz-keyframes pulsate { + from { + -moz-box-shadow: 0 0 10px #15d6ba; + box-shadow: 0 0 10px #15d6ba; + } + to { + -moz-box-shadow: 0 0 20px #15d6ba; + box-shadow: 0 0 20px #15d6ba; + } +} + +.legacyPulsateBorder { + /*border: 5px solid #15d6ba; + margin: -5px;*/ + -moz-box-shadow: 0 0 10px 3px #15d6ba; + box-shadow: 0 0 10px 3px #15d6ba; +} + +.pulsateBorder { + animation-name: pulsate; + animation-timing-function: ease-in-out; + animation-duration: 0.9s; + animation-iteration-count: infinite; + animation-direction: alternate; + + -webkit-animation-name: pulsate; + -webkit-animation-timing-function: ease-in-out; + -webkit-animation-duration: 0.9s; + -webkit-animation-iteration-count: infinite; + -webkit-animation-direction: alternate; + + -moz-animation-name: pulsate; + -moz-animation-timing-function: ease-in-out; + -moz-animation-duration: 0.9s; + -moz-animation-iteration-count: infinite; + -moz-animation-direction: alternate; +} + +.ax_default_hidden, .ax_default_unplaced{ + display: none; + visibility: hidden; +} + +.widgetNoteSelected { + -moz-box-shadow: 0 0 10px 3px #138CDD; + box-shadow: 0 0 10px 3px #138CDD; + /*-moz-box-shadow: 0 0 20px #3915d6; + box-shadow: 0 0 20px #3915d6;*/ + /*border: 3px solid #3915d6;*/ + /*margin: -3px;*/ +} + + +.singleImg { + display: none; + visibility: hidden; +} \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/default.css" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/default.css" new file mode 100644 index 0000000..1c8fdc2 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/default.css" @@ -0,0 +1,207 @@ +锘縝ody { + font-family : Arial, Helvetica, Sans-Serif; + background-color: #8f949a; + overflow:hidden; +} +a { + cursor: pointer; +} + +input[type="radio"], input[type="checkbox"] { + margin: 0px 9px 0px 0px; + vertical-align: bottom; +} + +input { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +#maximizePanelContainer { + font-size: 4px; + position:absolute; + left: 0px; + top: 0px; + width: 55px; + height: 20px; + overflow: visible; + z-index: 1000; +} +#maximizePanelOver { + position: absolute; + left: 0px; + top: 0px; + width: 55px; + height: 20px; +} +.maximizePanel { + position: absolute; + left: 0px; + top: 0px; + width: 55px; + height: 20px; + background: #a2a2a2 url('../images/expand.png') no-repeat center center; + background: url('../images/expand.svg') no-repeat center center, linear-gradient(rgba(200,200,200,.5),rgba(200,200,200,.5)); + cursor: pointer; +} + +#interfaceControlFrameMinimizeContainer { + position:absolute; + top: 0px; + left: 0px; + font-size: 2px; /*for IE*/ + text-align: right; + z-index: 100; + height: 20px; + width: 55px; + background-color: #62666b; +} +#interfaceControlFrameMinimizeContainer a { + display: inline-block; + width: 55px; + height: 20px; + font-size: 2px; + background: url('../images/close.png') no-repeat center center; + background: url('../images/close.svg') no-repeat center center, linear-gradient(transparent,transparent); + text-decoration: none; +} + +.hashover #interfaceControlFrameMinimizeContainer a:hover { + background: url('../images/close_hover.png') no-repeat center center; + background: url('../images/close_hover.svg') no-repeat center center, linear-gradient(transparent,transparent); +} + +#interfaceControlFrame { + margin: 0px 0px 0px 55px; +} + +#interfaceControlFrameCloseContainer { + /*display: none;*/ + position:absolute; + bottom: 0px; + left: 0px; + font-size: 9px; + font-family: 'Trebuchet MS'; + font-weight: bold; + letter-spacing: 1px; + z-index: 100; + width: 55px; + background-color: #62666b; + text-align: center; +} +#interfaceControlFrameCloseContainer a { + display: inline-block; + width: 55px; + color: #ffffff; + padding: 5px 0px; +} + +#interfaceControlFrameHeader li a { + display: block; + width: 54px; + height: 78px; + text-align: center; + padding-top: 50px; + outline: none; + margin-right: 1px; + text-decoration: none; + color: #ffffff; + white-space: nowrap; + background-color: transparent; + background-repeat: no-repeat; + background-position: 50% 17px; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + border-left: 4px solid transparent; + border-right: 4px solid transparent; +} + +.hashover #interfaceControlFrameHeader li a:hover { + background-color: transparent; + background-repeat: no-repeat; + background-position: 50% 17px; + color: #c2c2c2; +} + +#interfaceControlFrameHeader li a.selected, #interfaceControlFrameHeader li a.selected:hover { + background-color: #f5f5f5; + background-repeat: no-repeat; + background-position: 50% 17px; + color: #62666b; + border-left: 5px solid #138CDD; +} + +#interfaceControlFrameHeaderContainer { + float: left; + overflow: visible; + width: 55px; + margin-left: -55px; + margin-top: 20px; +} + +#interfaceControlFrameHeader { + position: relative; + list-style: none; + font-size: 8px; + z-index: 50; + font-family: 'Trebuchet MS'; + font-weight: bold; + letter-spacing: 1px; +} + +#interfaceControlFrameContainer { + float: right; + background-color: #f5f5f5; + overflow: hidden; + width: 100%; +} + +#interfaceControlFrameLogoContainer { + background-color: White; + padding: 20px 10px 10px 10px; + overflow: hidden; +} + +#interfaceControlFrameLogoImageContainer { + text-align: center; +} + +#interfaceControlFrameLogoCaptionContainer { + text-align: center; + margin: 5px 10px 0px 10px; + font-size: 12px; + color: #4a4a4a; +} + +#logoImage { + width: 100%; +} + +.emptyStateContainer { + text-align: center; + padding: 0px 10px; + margin-top: 32px +} + +.emptyStateTitle { + margin: 0px 0px 9px 0px; + font-weight: bold; +} + +.emptyStateContent { + line-height: 16px; +} + +.dottedDivider { + height: 2px; + margin: 15px 0px 15px 0px; + background: url('../images/divider.png') no-repeat center center; + background: url('../images/divider.svg') no-repeat center center, linear-gradient(transparent,transparent); +} + +.nondottedDivider { + height: 2px; + margin: 9px 0px 9px 0px; +} \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/images.html" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/images.html" new file mode 100644 index 0000000..335d9c9 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/images.html" @@ -0,0 +1,25 @@ +锘 + + + + + +

    + + + + + + + + + + + + + + + +

    + + \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/newwindow.gif" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/newwindow.gif" new file mode 100644 index 0000000..7b14cb0 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/newwindow.gif" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/note.gif" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/note.gif" new file mode 100644 index 0000000..a8c2762 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/note.gif" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-bg_flat_0_aaaaaa_40x100.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-bg_flat_0_aaaaaa_40x100.png" new file mode 100644 index 0000000..5b5dab2 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-bg_flat_0_aaaaaa_40x100.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-bg_glass_55_fbf9ee_1x400.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-bg_glass_55_fbf9ee_1x400.png" new file mode 100644 index 0000000..ad3d634 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-bg_glass_55_fbf9ee_1x400.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-bg_glass_65_ffffff_1x400.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-bg_glass_65_ffffff_1x400.png" new file mode 100644 index 0000000..42ccba2 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-bg_glass_65_ffffff_1x400.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-bg_glass_75_dadada_1x400.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-bg_glass_75_dadada_1x400.png" new file mode 100644 index 0000000..5a46b47 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-bg_glass_75_dadada_1x400.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-bg_glass_75_e6e6e6_1x400.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-bg_glass_75_e6e6e6_1x400.png" new file mode 100644 index 0000000..86c2baa Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-bg_glass_75_e6e6e6_1x400.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-bg_glass_75_ffffff_1x400.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-bg_glass_75_ffffff_1x400.png" new file mode 100644 index 0000000..e65ca12 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-bg_glass_75_ffffff_1x400.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png" new file mode 100644 index 0000000..7c9fa6c Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-bg_inset-soft_95_fef1ec_1x100.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-bg_inset-soft_95_fef1ec_1x100.png" new file mode 100644 index 0000000..0e05810 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-bg_inset-soft_95_fef1ec_1x100.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-icons_222222_256x240.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-icons_222222_256x240.png" new file mode 100644 index 0000000..b273ff1 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-icons_222222_256x240.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-icons_2e83ff_256x240.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-icons_2e83ff_256x240.png" new file mode 100644 index 0000000..09d1cdc Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-icons_2e83ff_256x240.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-icons_454545_256x240.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-icons_454545_256x240.png" new file mode 100644 index 0000000..59bd45b Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-icons_454545_256x240.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-icons_888888_256x240.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-icons_888888_256x240.png" new file mode 100644 index 0000000..6d02426 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-icons_888888_256x240.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-icons_cd0a0a_256x240.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-icons_cd0a0a_256x240.png" new file mode 100644 index 0000000..2ab019b Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/images/ui-icons_cd0a0a_256x240.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/jquery-ui-themes.css" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/jquery-ui-themes.css" new file mode 100644 index 0000000..8afb633 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/jquery-ui-themes.css" @@ -0,0 +1,412 @@ +/* +* jQuery UI CSS Framework +* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +*/ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute; left: -99999999px; } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }/* Accordion +----------------------------------*/ +.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } +.ui-accordion .ui-accordion-li-fix { display: inline; } +.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } +.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em 2.2em; } +.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } +.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; } +.ui-accordion .ui-accordion-content-active { display: block; } + +/* Datepicker +----------------------------------*/ +.ui-datepicker { width: 17em; padding: .2em .2em 0; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } +.ui-datepicker .ui-datepicker-prev { left:2px; } +.ui-datepicker .ui-datepicker-next { right:2px; } +.ui-datepicker .ui-datepicker-prev-hover { left:1px; } +.ui-datepicker .ui-datepicker-next-hover { right:1px; } +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } +.ui-datepicker .ui-datepicker-title select { float:left; font-size:1em; margin:1px 0; } +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker .ui-datepicker-title select.ui-datepicker-year { float: right; } +.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } +.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } +.ui-datepicker td { border: 0; padding: 1px; } +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } +.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } +.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { width:auto; } +.ui-datepicker-multi .ui-datepicker-group { float:left; } +.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } +.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } +.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } +.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } +.ui-datepicker-row-break { clear:both; width:100%; } + +/* RTL support */ +.ui-datepicker-rtl { direction: rtl; } +.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +} + +/* Dialog +----------------------------------*/ +.ui-dialog { position: relative; padding: 0px; width: 300px;} +.ui-dialog .ui-dialog-titlebar { padding: .3em .3em .1em .8em; font-size:.7em; position: relative; background-image: none; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 0 .2em; + font-family: 'Trebuchet MS'; + font-size: 15px; + font-weight: normal; + color: #ffffff;} +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .1em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { /*padding: 0;*/ } +.ui-dialog .ui-dialog-content { border: 0; padding: .5em .2em; background: none; overflow: auto; zoom: 1; background-color: #ffffff;} +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } +.ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; background-color: #8f949a; border-bottom: 1px solid #d9d9d9;} + +/* Progressbar +----------------------------------*/ +.ui-progressbar { height:2em; text-align: left; } +.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable +----------------------------------*/ +.ui-resizable { position: relative;} +.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} +.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } +.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0px; } +.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0px; } +.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0px; height: 100%; } +.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0px; height: 100%; } +.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } +.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } +.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } +.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Slider +----------------------------------*/ +.ui-slider { position: relative; text-align: left; } +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; } + +.ui-slider-horizontal { height: .8em; } +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } +.ui-slider-horizontal .ui-slider-range-min { left: 0; } +.ui-slider-horizontal .ui-slider-range-max { right: 0; } + +.ui-slider-vertical { width: .8em; height: 100px; } +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } +.ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs +----------------------------------*/ +.ui-tabs { padding: .2em; zoom: 1; } +.ui-tabs .ui-tabs-nav { list-style: none; position: relative; padding: .2em .2em 0; } +.ui-tabs .ui-tabs-nav li { position: relative; float: left; border-bottom-width: 0 !important; margin: 0 .2em -1px 0; padding: 0; } +.ui-tabs .ui-tabs-nav li a { float: left; text-decoration: none; padding: .5em 1em; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { padding-bottom: 1px; border-bottom-width: 0; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } +.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { padding: 1em 1.4em; display: block; border-width: 0; background: none; } +.ui-tabs .ui-tabs-hide { display: none !important; } +/* +* jQuery UI CSS Framework +* Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about) +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +* To view and modify this theme, visit http://jqueryui.com/themeroller/ +*/ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1.1em/*{fsDefault}*/; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1em; } +.ui-widget-content { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_glass_75_ffffff_1x400.png)/*{bgImgUrlContent}*/ 0/*{bgContentXPos}*/ 0/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; } +.ui-widget-content a { /*color: #222222*//*{fcContent}*/; } +.ui-widget-header { border: none /*1px solid #aaaaaa*//*{borderColorHeader}*/; background: #D3D3D3/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 0/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; color: #000000/*{fcHeader}*/; font-weight: bold; } +.ui-widget-header a { color: #222222/*{fcHeader}*/; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default { border: none /*1px solid #d3d3d3*//*{borderColorDefault}*/; /*background: #e6e6e6*//*{bgColorDefault}*/ /*url(images/ui-bg_glass_75_e6e6e6_1x400.png)*//*{bgImgUrlDefault}*/ /*0*//*{bgDefaultXPos}*/ /*50%*//*{bgDefaultYPos}*/ /*repeat-x*//*{bgDefaultRepeat}*/ font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; outline: none; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555/*{fcDefault}*/; text-decoration: none; outline: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus { border: none /*1px solid #999999*//*{borderColorHover}*/; /*background: #dadada*//*{bgColorHover}*/ /*url(images/ui-bg_glass_75_dadada_1x400.png)*//*{bgImgUrlHover}*/ /*0*//*{bgHoverXPos}*/ /*50%*//*{bgHoverYPos}*/ /*repeat-x*//*{bgHoverRepeat}*/ font-weight: normal/*{fwDefault}*/; color: #212121/*{fcHover}*/; outline: none; } +.ui-state-hover a, .ui-state-hover a:hover { color: #212121/*{fcHover}*/; text-decoration: none; outline: none; } +.ui-state-active, .ui-widget-content .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 0/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; outline: none; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121/*{fcActive}*/; outline: none; text-decoration: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight {border: 1px solid #fcefa1/*{borderColorHighlight}*/; background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 0/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; color: #363636/*{fcHighlight}*/; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a { color: #363636/*{fcHighlight}*/; } +.ui-state-error, .ui-widget-content .ui-state-error {border: 1px solid #cd0a0a/*{borderColorError}*/; background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_inset-soft_95_fef1ec_1x100.png)/*{bgImgUrlError}*/ 0/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; color: #cd0a0a/*{fcError}*/; } +.ui-state-error a, .ui-widget-content .ui-state-error a { color: #363636/*{fcError}*/; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text { color: #cd0a0a/*{fcError}*/; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHeader}*/; } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHover}*/; } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-tl { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; } +.ui-corner-tr { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; } +.ui-corner-bl { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; } +.ui-corner-br { -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; } +.ui-corner-top { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; } +.ui-corner-bottom { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; } +.ui-corner-right { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; } +.ui-corner-left { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; } +.ui-corner-all { -moz-border-radius: 0px/*{cornerRadius}*/; -webkit-border-radius: 0px/*{cornerRadius}*/; } + +/* Overlays */ +.ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ none/*{bgImgUrlOverlay}*/ 0/*{bgOverlayXPos}*/ 0/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityOverlay}*/; } +.ui-widget-shadow { margin: -4px/*{offsetTopShadow}*/ 0 0 -4px/*{offsetLeftShadow}*/; padding: 4px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ none/*{bgImgUrlShadow}*/ 0/*{bgShadowXPos}*/ 0/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .35;filter:Alpha(Opacity=35)/*{opacityShadow}*/; -moz-border-radius: 4px/*{cornerRadiusShadow}*/; -webkit-border-radius: 4px/*{cornerRadiusShadow}*/; } \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/reset.css" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/reset.css" new file mode 100644 index 0000000..01a4271 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/css/reset.css" @@ -0,0 +1,24 @@ +锘縣tml,body,div,span, +applet,object,iframe, +h1,h2,h3,h4,h5,h6,p,blockquote,pre, +a,abbr,acronym,address,big,cite,code, +del,dfn,em,font,img,ins,kbd,q,s,samp, +small,strike,strong,sub,sup,tt,var, +dd,dl,dt,li,ol,ul, +fieldset,form,label,legend, +table,caption,tbody,tfoot,thead,tr,th,td { + margin: 0; + padding: 0; + border: 0; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +ol,ul { + list-style: none; +} +q:before,q:after, +blockquote:before,blockquote:after { + content: ""; +} \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/expand.html" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/expand.html" new file mode 100644 index 0000000..21df392 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/expand.html" @@ -0,0 +1,60 @@ +锘 + + + + + + + + + +
    +
    +
    +
    + + \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/259_close_12rollover1.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/259_close_12rollover1.png" new file mode 100644 index 0000000..a19bf8a Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/259_close_12rollover1.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/259_close_12rollover2.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/259_close_12rollover2.png" new file mode 100644 index 0000000..2f57c5d Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/259_close_12rollover2.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/260_collapse_12rollover1.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/260_collapse_12rollover1.png" new file mode 100644 index 0000000..426621f Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/260_collapse_12rollover1.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/260_collapse_12rollover2.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/260_collapse_12rollover2.png" new file mode 100644 index 0000000..8450723 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/260_collapse_12rollover2.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/261_expand_12rollover1.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/261_expand_12rollover1.png" new file mode 100644 index 0000000..5c7ec92 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/261_expand_12rollover1.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/261_expand_12rollover2.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/261_expand_12rollover2.png" new file mode 100644 index 0000000..81ce138 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/261_expand_12rollover2.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/close.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/close.png" new file mode 100644 index 0000000..b34c453 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/close.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/close.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/close.svg" new file mode 100644 index 0000000..3c3231b --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/close.svg" @@ -0,0 +1,8 @@ + + + + + + + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/close_hover.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/close_hover.png" new file mode 100644 index 0000000..dcbd3b6 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/close_hover.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/close_hover.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/close_hover.svg" new file mode 100644 index 0000000..c6aac2a --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/close_hover.svg" @@ -0,0 +1,8 @@ + + + + + + + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/divider.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/divider.png" new file mode 100644 index 0000000..f7b738a Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/divider.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/divider.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/divider.svg" new file mode 100644 index 0000000..767941e --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/divider.svg" @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/expand.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/expand.png" new file mode 100644 index 0000000..31f8f45 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/expand.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/expand.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/expand.svg" new file mode 100644 index 0000000..a6a8692 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/expand.svg" @@ -0,0 +1,8 @@ + + + + + + + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/expand_hover.png" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/expand_hover.png" new file mode 100644 index 0000000..4fdca83 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/expand_hover.png" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/expand_hover.svg" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/expand_hover.svg" new file mode 100644 index 0000000..958b481 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/expand_hover.svg" @@ -0,0 +1,8 @@ + + + + + + + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/images.html" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/images.html" new file mode 100644 index 0000000..6b26a37 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/images.html" @@ -0,0 +1,17 @@ +锘 + + + + + +

    + + + + + + + +

    + + \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/transparent.gif" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/transparent.gif" new file mode 100644 index 0000000..35d42e8 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/images/transparent.gif" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/reload.html" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/reload.html" new file mode 100644 index 0000000..5f99f0b --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/reload.html" @@ -0,0 +1,24 @@ +锘 + + + + + + + + + \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/action.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/action.js" new file mode 100644 index 0000000..747e91f --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/action.js" @@ -0,0 +1,2015 @@ +锘$axure.internal(function($ax) { + var _actionHandlers = {}; + var _action = $ax.action = {}; + + var queueTypes = _action.queueTypes = { + none: 0, + move: 1, + setState: 2, + fade: 3, + resize: 4, + rotate: 5 + }; + + var animationQueue = {}; + + // using array as the key doesn't play nice + var nextAnimationId = 1; + var animationsToCount = {}; + var actionToActionGroups = {}; + var getAnimation = function(id, type) { + return animationQueue[id] && animationQueue[id][type] && animationQueue[id][type][0]; + }; + + var _addAnimation = _action.addAnimation = function (id, type, func, suppressFire) { + + var wasEmpty = !getAnimation(id, type); + // Add the func to the queue. Create the queue if necessary. + var idQueue = animationQueue[id]; + if(!idQueue) animationQueue[id] = idQueue = {}; + + var queue = idQueue[type]; + if(!queue) idQueue[type] = queue = []; + + queue[queue.length] = func; + // If it was empty, there isn't a callback waiting to be called on this. You have to fire it manually. + // If this is waiting on something, suppress it, and it will fire when it's ready + if(wasEmpty && !suppressFire) func(); + }; + + var _addAnimations = function (animations) { + if(animations.length == 1) { + _addAnimation(animations[0].id, animations[0].type, animations[0].func); + return; + } + var allReady = true; + var readyCount = 0; + for(var i = 0; i < animations.length; i++) { + var animation = animations[i]; + var thisReady = !getAnimation(animation.id, animation.type); + allReady = allReady && thisReady; + if (thisReady) readyCount++; + else { + var typeToGroups = actionToActionGroups[animation.id]; + if (!typeToGroups) actionToActionGroups[animation.id] = typeToGroups = {}; + + var groups = typeToGroups[animation.type]; + if (!groups) typeToGroups[animation.type] = groups = []; + + groups[groups.length] = animations; + } + } + + for(i = 0; i < animations.length; i++) { + animation = animations[i]; + _addAnimation(animation.id, animation.type, animation.func, true); + } + + if (allReady) { + for (i = 0; i < animations.length; i++) animations[i].func(); + } else { + animations.id = nextAnimationId++; + animationsToCount[animations.id] = readyCount; + } + } + + var _fireAnimationFromQueue = _action.fireAnimationFromQueue = function (id, type) { + // Remove the function that was just fired + if (animationQueue[id] && animationQueue[id][type]) $ax.splice(animationQueue[id][type], 0, 1); + + // Fire the next func if there is one + var func = getAnimation(id, type); + if(func && !_checkFireActionGroup(id, type, func)) func(); + }; + + var _checkFireActionGroup = function(id, type, func) { + var group = actionToActionGroups[id]; + group = group && group[type]; + if (!group || group.length == 0) return false; + + var animations = group[0]; + var found = false; + for (var i = 0; i < animations.length; i++) { + var animation = animations[i]; + if (animation.id == id && animation.type == type) { + found = func == animation.func; + break; + } + } + + // if found then update this action group, otherwise, keep waiting for right action to fire + if(!found) return false; + $ax.splice(group, 0, 1); + var count = animationsToCount[animations.id] + 1; + if(count != animations.length) { + animationsToCount[animations.id] = count; + return true; + } + delete animationsToCount[animations.id]; + + // Funcs is needed because an earlier func can try to cascade right away (when no animation for example) and will kill this func and move on to the + // next one (which may not even exist). If we get all funcs before calling any, then we know they are all the func we want. + var funcs = []; + for(i = 0; i < animations.length; i++) { + animation = animations[i]; + funcs.push(getAnimation(animation.id, animation.type)); + } + for(i = 0; i < funcs.length; i++) { + funcs[i](); + } + + return true; + } + + var _refreshing = []; + _action.refreshStart = function(repeaterId) { _refreshing.push(repeaterId); }; + _action.refreshEnd = function() { _refreshing.pop(); }; + + // TODO: [ben] Consider moving this to repeater.js + var _repeatersToRefresh = _action.repeatersToRefresh = []; + var _ignoreAction = function(repeaterId) { + for(var i = 0; i < _refreshing.length; i++) if(_refreshing[i] == repeaterId) return true; + return false; + }; + + var _addRefresh = function(repeaterId) { + if(_repeatersToRefresh.indexOf(repeaterId) == -1) _repeatersToRefresh.push(repeaterId); + }; + + var _getIdToResizeMoveState = function(eventInfo) { + if(!eventInfo.idToResizeMoveState) eventInfo.idToResizeMoveState = {}; + return eventInfo.idToResizeMoveState; + } + + var _queueResizeMove = function (id, type, eventInfo, actionInfo) { + if (type == queueTypes.resize || type == queueTypes.rotate) $ax.public.fn.convertToSingleImage($jobj(id)); + + var idToResizeMoveState = _getIdToResizeMoveState(eventInfo); + if(!idToResizeMoveState[id]) { + idToResizeMoveState[id] = {}; + idToResizeMoveState[id][queueTypes.move] = { queue: [], used: 0 }; + idToResizeMoveState[id][queueTypes.resize] = { queue: [], used: 0 }; + idToResizeMoveState[id][queueTypes.rotate] = { queue: [], used: 0 }; + } + var state = idToResizeMoveState[id]; + + // If this is not a type being queued (no action of it's type waiting already) then if it is an instant, fire right away. + var myOptions = type == queueTypes.resize ? actionInfo : actionInfo.options; + if(!state[type].queue.length && (!myOptions.easing || myOptions.easing == 'none' || !myOptions.duration)) { + var func = type == queueTypes.resize ? _addResize : type == queueTypes.rotate ? _addRotate : _addMove; + func(id, eventInfo, actionInfo, { easing: 'none', duration: 0, stop: { instant: true } }); + return; + } + + // Check other 2 types to see if either is empty, if so, we can't do anything, so just queue it up + var otherType1 = type == queueTypes.move ? queueTypes.resize : queueTypes.move; + var otherType2 = type == queueTypes.rotate ? queueTypes.resize : queueTypes.rotate; + if (!state[otherType1].queue.length || !state[otherType2].queue.length) { + state[type].queue.push({ eventInfo: eventInfo, actionInfo: actionInfo }); + } else { + var duration = myOptions.duration; + var used1 = state[otherType1].used; + var used2 = state[otherType2].used; + + while(state[otherType1].queue.length && state[otherType2].queue.length && duration != 0) { + var other1 = state[otherType1].queue[0]; + var otherOptions1 = otherType1 == queueTypes.resize ? other1.actionInfo : other1.actionInfo.options; + // If queue up action is a non animation, then don't combo it, just queue it and move on + if(!otherOptions1.easing || otherOptions1.easing == 'none' || !otherOptions1.duration) { + func = otherType1 == queueTypes.resize ? _addResize : otherType1 == queueTypes.rotate ? _addRotate : _addMove; + func(id, eventInfo, actionInfo, { easing: 'none', duration: 0, stop: { instant: true } }); + continue; + } + var other2 = state[otherType2].queue[0]; + var otherOptions2 = otherType2 == queueTypes.resize ? other2.actionInfo : other2.actionInfo.options; + // If queue up action is a non animation, then don't combo it, just queue it and move on + if(!otherOptions2.easing || otherOptions2.easing == 'none' || !otherOptions2.duration) { + func = otherType2 == queueTypes.resize ? _addResize : otherType2 == queueTypes.rotate ? _addRotate : _addMove; + func(id, eventInfo, actionInfo, { easing: 'none', duration: 0, stop: { instant: true } }); + continue; + } + + // Other duration is what is left over. When in queue it may be partly finished already + var otherDuration1 = otherOptions1.duration - used1; + var otherDuration2 = otherOptions2.duration - used2; + + var resizeInfo = type == queueTypes.resize ? actionInfo : otherType1 == queueTypes.resize ? other1.actionInfo : other2.actionInfo; + var rotateInfo = type == queueTypes.rotate ? actionInfo : otherType1 == queueTypes.rotate ? other1.actionInfo : other2.actionInfo; + var moveInfo = type == queueTypes.move ? actionInfo : otherType1 == queueTypes.move ? other1.actionInfo : other2.actionInfo; + var options = { easing: moveInfo.options.easing, duration: Math.min(duration, otherDuration1, otherDuration2) }; + // Start for self is whole duration - duration left, end is start plus duration of combo to be queued, length is duration + var stop = { start: myOptions.duration - duration, len: myOptions.duration }; + stop.end = stop.start + options.duration; + // Start for other is used (will be 0 after 1st round), end is start plus length is duration of combo to be queued, length is other duration + var otherStop1 = { start: used1, end: options.duration + used1, len: otherOptions1.duration }; + var otherStop2 = { start: used2, end: options.duration + used2, len: otherOptions2.duration }; + options.stop = type == queueTypes.resize ? stop : otherType1 == queueTypes.resize ? otherStop1 : otherStop2; + options.moveStop = type == queueTypes.move ? stop : otherType1 == queueTypes.move ? otherStop1 : otherStop2; + options.rotateStop = type == queueTypes.rotate ? stop : otherType1 == queueTypes.rotate ? otherStop1 : otherStop2; + + _addResize(id, eventInfo, resizeInfo, options, moveInfo, rotateInfo); + + // Update duration for this animation + duration -= options.duration; + // For others update used and remove from queue if necessary + if(otherDuration1 == options.duration) { + $ax.splice(state[otherType1].queue, 0, 1); + used1 = 0; + } else used1 += options.duration; + + if(otherDuration2 == options.duration) { + $ax.splice(state[otherType2].queue, 0, 1); + used2 = 0; + } else used2 += options.duration; + } + + // Start queue for new type if necessary + if(duration) { + state[type].queue.push({ eventInfo: eventInfo, actionInfo: actionInfo }); + state[type].used = myOptions.duration - duration; + } + + // Update used for others + state[otherType1].used = used1; + state[otherType2].used = used2; + } + }; + + _action.flushAllResizeMoveActions = function (eventInfo) { + var idToResizeMoveState = _getIdToResizeMoveState(eventInfo); + for(var id in idToResizeMoveState) _flushResizeMoveActions(id, idToResizeMoveState); + }; + + var _flushResizeMoveActions = function(id, idToResizeMoveState) { + var state = idToResizeMoveState[id]; + var move = state[queueTypes.move]; + var moveInfo = move.queue[0]; + var resize = state[queueTypes.resize]; + var resizeInfo = resize.queue[0]; + var rotate = state[queueTypes.rotate]; + var rotateInfo = rotate.queue[0]; + while (moveInfo || resizeInfo || rotateInfo) { + var eventInfo = moveInfo ? moveInfo.eventInfo : resizeInfo ? resizeInfo.eventInfo : rotateInfo.eventInfo; + moveInfo = moveInfo && moveInfo.actionInfo; + resizeInfo = resizeInfo && resizeInfo.actionInfo; + rotateInfo = rotateInfo && rotateInfo.actionInfo; + + // Resize is used by default, then rotate + if(resizeInfo) { + // Check for instant resize + if(!resizeInfo.duration || resizeInfo.easing == 'none') { + _addResize(id, resize.queue[0].eventInfo, resizeInfo, { easing: 'none', duration: 0, stop: { instant: true } }); + _updateResizeMoveUsed(id, queueTypes.resize, 0, idToResizeMoveState); + resizeInfo = resize.queue[0]; + continue; + } + + var duration = resizeInfo.duration - resize.used; + if(moveInfo) duration = Math.min(duration, moveInfo.options.duration - move.used); + if(rotateInfo) duration = Math.min(duration, rotateInfo.options.duration - rotate.used); + + var baseOptions = moveInfo ? moveInfo.options : resizeInfo; + var options = { easing: baseOptions.easing, duration: duration }; + + options.stop = { start: resize.used, end: resize.used + duration, len: resizeInfo.duration }; + if(moveInfo) options.moveStop = { start: move.used, end: move.used + duration, len: moveInfo.options.duration }; + if(rotateInfo) options.rotateStop = { start: rotate.used, end: rotate.used + duration, len: rotateInfo.options.duration }; + + _addResize(id, eventInfo, resizeInfo, options, moveInfo, rotateInfo); + + _updateResizeMoveUsed(id, queueTypes.resize, duration, idToResizeMoveState); + resizeInfo = resize.queue[0]; + if(rotateInfo) { + _updateResizeMoveUsed(id, queueTypes.rotate, duration, idToResizeMoveState); + rotateInfo = rotate.queue[0]; + } + if(moveInfo) { + _updateResizeMoveUsed(id, queueTypes.move, duration, idToResizeMoveState); + moveInfo = move.queue[0]; + } + } else if (rotateInfo) { + // Check for instant rotate + if(!rotateInfo.options.duration || rotateInfo.options.easing == 'none') { + _addRotate(id, rotate.queue[0].eventInfo, rotateInfo, { easing: 'none', duration: 0, stop: { instant: true } }); + _updateResizeMoveUsed(id, queueTypes.rotate, 0, idToResizeMoveState); + rotateInfo = rotate.queue[0]; + continue; + } + + duration = rotateInfo.options.duration - rotate.used; + if(moveInfo) duration = Math.min(duration, moveInfo.options.duration - move.used); + + baseOptions = moveInfo ? moveInfo.options : rotateInfo.options; + options = { easing: baseOptions.easing, duration: duration }; + + options.stop = { start: rotate.used, end: rotate.used + duration, len: rotateInfo.options.duration }; + if(moveInfo) options.moveStop = { start: move.used, end: move.used + duration, len: moveInfo.options.duration }; + + _addRotate(id, eventInfo, rotateInfo, options, moveInfo); + + _updateResizeMoveUsed(id, queueTypes.rotate, duration, idToResizeMoveState); + rotateInfo = rotate.queue[0]; + if(moveInfo) { + _updateResizeMoveUsed(id, queueTypes.move, duration, idToResizeMoveState); + moveInfo = move.queue[0]; + } + } else { + if(!moveInfo.options.duration || moveInfo.options.easing == 'none') { + _addMove(id, eventInfo, moveInfo, { easing: 'none', duration: 0, stop: { instant: true } }); + _updateResizeMoveUsed(id, queueTypes.move, 0, idToResizeMoveState); + moveInfo = move.queue[0]; + continue; + } + + duration = moveInfo.options.duration - move.used; + options = { easing: moveInfo.options.easing, duration: duration }; + options.stop = { start: move.used, end: moveInfo.options.duration, len: moveInfo.options.duration }; + _addMove(id, eventInfo, moveInfo, options); + + _updateResizeMoveUsed(id, queueTypes.move, duration, idToResizeMoveState); + moveInfo = move.queue[0]; + } + } + }; + + var _updateResizeMoveUsed = function(id, type, duration, idToResizeMoveState) { + var state = idToResizeMoveState[id][type]; + state.used += duration; + var options = state.queue[0].actionInfo; + if(options.options) options = options.options; + var optionDur = options.duration || 0; + if(optionDur <= state.used) { + $ax.splice(state.queue, 0, 1); + state.used = 0; + } + } + + var _dispatchAction = $ax.action.dispatchAction = function(eventInfo, actions, currentIndex) { + currentIndex = currentIndex || 0; + //If no actions, you can bubble + if(currentIndex >= actions.length) return; + //actions are responsible for doing their own dispatching + _actionHandlers[actions[currentIndex].action](eventInfo, actions, currentIndex); + }; + + _actionHandlers.wait = function(eventInfo, actions, index) { + var action = actions[index]; + var infoCopy = $ax.eventCopy(eventInfo); + window.setTimeout(function() { + infoCopy.now = new Date(); + infoCopy.idToResizeMoveState = undefined; + _dispatchAction(infoCopy, actions, index + 1); + _action.flushAllResizeMoveActions(infoCopy); + }, action.waitTime); + }; + + _actionHandlers.expr = function(eventInfo, actions, index) { + var action = actions[index]; + + $ax.expr.evaluateExpr(action.expr, eventInfo); //this should be a block + + _dispatchAction(eventInfo, actions, index + 1); + }; + + _actionHandlers.setFunction = _actionHandlers.expr; + + _actionHandlers.linkWindow = function(eventInfo, actions, index) { + linkActionHelper(eventInfo, actions, index); + }; + + _actionHandlers.closeCurrent = function(eventInfo, actions, index) { + $ax.closeWindow(); + _dispatchAction(eventInfo, actions, index + 1); + }; + + _actionHandlers.linkFrame = function(eventInfo, actions, index) { + linkActionHelper(eventInfo, actions, index); + }; + + _actionHandlers.setAdaptiveView = function(eventInfo, actions, index) { + var action = actions[index]; + var view = action.setAdaptiveViewTo; + + if(view) $ax.adaptive.setAdaptiveView(view); + }; + + var linkActionHelper = function(eventInfo, actions, index) { + var action = actions[index]; + eventInfo.link = true; + + if(action.linkType != 'frame') { + var includeVars = _includeVars(action.target, eventInfo); + if(action.target.targetType == "reloadPage") { + $ax.reload(action.target.includeVariables); + } else if(action.target.targetType == "backUrl") { + $ax.back(); + } + + var url = action.target.url; + if(!url && action.target.urlLiteral) { + url = $ax.expr.evaluateExpr(action.target.urlLiteral, eventInfo, true); + } + + if(url) { + if(action.linkType == "popup") { + $ax.navigate({ + url: url, + target: action.linkType, + includeVariables: includeVars, + popupOptions: action.popup + }); + } else { + $ax.navigate({ + url: url, + target: action.linkType, + includeVariables: includeVars + }); + } + } + } else linkFrame(eventInfo, action); + eventInfo.link = false; + + _dispatchAction(eventInfo, actions, index + 1); + }; + + var _includeVars = function(target, eventInfo) { + if(target.includeVariables) return true; + // If it is a url literal, that is a string literal, that has only 1 sto, that is an item that is a page, include vars. + if(target.urlLiteral) { + var literal = target.urlLiteral; + var sto = literal.stos[0]; + if(literal.exprType == 'stringLiteral' && literal.value.indexOf('[[') == 0 && literal.value.indexOf(']]' == literal.value.length - 2) && literal.stos.length == 1 && sto.sto == 'item' && eventInfo.item) { + var data = $ax.repeater.getData(eventInfo, eventInfo.item.repeater.elementId, eventInfo.item.index, sto.name, 'data'); + if (data && $ax.public.fn.IsPage(data.type)) return true; + } + } + return false; + }; + + var linkFrame = function(eventInfo, action) { + for(var i = 0; i < action.framesToTargets.length; i++) { + var framePath = action.framesToTargets[i].framePath; + var target = action.framesToTargets[i].target; + var includeVars = _includeVars(target, eventInfo); + + var url = target.url; + if(!url && target.urlLiteral) { + url = $ax.expr.evaluateExpr(target.urlLiteral, eventInfo, true); + } + + var id = $ax.getElementIdsFromPath(framePath, eventInfo)[0]; + if(id) $ax('#' + $ax.INPUT(id)).openLink(url, includeVars); + } + }; + + var _repeatPanelMap = {}; + + _actionHandlers.setPanelState = function(eventInfo, actions, index) { + var action = actions[index]; + + for(var i = 0; i < action.panelsToStates.length; i++) { + var panelToState = action.panelsToStates[i]; + var stateInfo = panelToState.stateInfo; + var elementIds = $ax.getElementIdsFromPath(panelToState.panelPath, eventInfo); + + for(var j = 0; j < elementIds.length; j++) { + var elementId = elementIds[j]; + // Need new scope for elementId and info + (function(elementId, stateInfo) { + _addAnimation(elementId, queueTypes.setState, function() { + var stateNumber = stateInfo.stateNumber; + if(stateInfo.setStateType == "value") { + var oldTarget = eventInfo.targetElement; + eventInfo.targetElement = elementId; + var stateName = $ax.expr.evaluateExpr(stateInfo.stateValue, eventInfo); + eventInfo.targetElement = oldTarget; + + // Try for state name first + var states = $ax.getObjectFromElementId(elementId).diagrams; + var stateNameFound = false; + for(var k = 0; k < states.length; k++) { + if(states[k].label == stateName) { + stateNumber = k + 1; + stateNameFound = true; + } + } + + // Now check for index + if(!stateNameFound) { + stateNumber = Number(stateName); + var panelCount = $('#' + elementId).children().length; + + // Make sure number is not NaN, is in range, and is a whole number. + // Wasn't a state name or number, so return + if(isNaN(stateNumber) || stateNumber <= 0 || stateNumber > panelCount || Math.round(stateNumber) != stateNumber) return _fireAnimationFromQueue(elementId, queueTypes.setState); + } + } else if(stateInfo.setStateType == 'next' || stateInfo.setStateType == 'previous') { + var info = $ax.deepCopy(stateInfo); + var repeat = info.repeat; + + // Only map it, if repeat exists. + if(typeof (repeat) == 'number') _repeatPanelMap[elementId] = info; + return _progessPanelState(elementId, info, info.repeatSkipFirst); + } + delete _repeatPanelMap[elementId]; + + // If setting to current (to stop repeat) break here + if(stateInfo.setStateType == 'current') return _fireAnimationFromQueue(elementId, queueTypes.setState); + + $ax('#' + elementId).SetPanelState(stateNumber, stateInfo.options, stateInfo.showWhenSet); + }); + })(elementId, stateInfo); + } + } + + _dispatchAction(eventInfo, actions, index + 1); + }; + + var _progessPanelState = function(id, info, skipFirst) { + var direction = info.setStateType; + var loop = info.loop; + var repeat = info.repeat; + var options = info.options; + + var hasRepeat = typeof (repeat) == 'number'; + var currentStateId = $ax.visibility.GetPanelState(id); + var stateNumber = ''; + if(currentStateId != '') { + currentStateId = $ax.repeater.getScriptIdFromElementId(currentStateId); + var currentStateNumber = Number(currentStateId.substr(currentStateId.indexOf('state') + 5)); + if(direction == "next") { + stateNumber = currentStateNumber + 2; + + if(stateNumber > $ax.visibility.GetPanelStateCount(id)) { + if(loop) stateNumber = 1; + else { + delete _repeatPanelMap[id]; + return _fireAnimationFromQueue(id, queueTypes.setState); + } + } + } else if(direction == "previous") { + stateNumber = currentStateNumber; + if(stateNumber <= 0) { + if(loop) stateNumber = $ax.visibility.GetPanelStateCount(id); + else { + delete _repeatPanelMap[id]; + return _fireAnimationFromQueue(id, queueTypes.setState); + } + } + } + + if(hasRepeat && _repeatPanelMap[id] != info) return _fireAnimationFromQueue(id, queueTypes.setState); + + if (!skipFirst) $ax('#' + id).SetPanelState(stateNumber, options, info.showWhenSet); + else _fireAnimationFromQueue(id, queueTypes.setState); + + if(hasRepeat) { + var animate = options && options.animateIn; + if(animate && animate.easing && animate.easing != 'none' && animate.duration > repeat) repeat = animate.duration; + animate = options && options.animateOut; + if(animate && animate.easing && animate.easing != 'none' && animate.duration > repeat) repeat = animate.duration; + + window.setTimeout(function() { + // Either new repeat, or no repeat anymore. + if(_repeatPanelMap[id] != info) return; + _addAnimation(id, queueTypes.setState, function() { + _progessPanelState(id, info, false); + }); + }, repeat); + } else delete _repeatPanelMap[id]; + } + }; + + _actionHandlers.fadeWidget = function(eventInfo, actions, index) { + var action = actions[index]; + + for(var i = 0; i < action.objectsToFades.length; i++) { + var fadeInfo = action.objectsToFades[i].fadeInfo; + var elementIds = $ax.getElementIdsFromPath(action.objectsToFades[i].objectPath, eventInfo); + + for(var j = 0; j < elementIds.length; j++) { + var elementId = elementIds[j]; + // Need new scope for elementId and info + (function(elementId, fadeInfo) { + _addAnimation(elementId, queueTypes.fade, function() { + if(fadeInfo.fadeType == "hide") { + $ax('#' + elementId).hide(fadeInfo.options); + } else if(fadeInfo.fadeType == "show") { + $ax('#' + elementId).show(fadeInfo.options, eventInfo); + } else if(fadeInfo.fadeType == "toggle") { + $ax('#' + elementId).toggleVisibility(fadeInfo.options); + } + }); + })(elementId, fadeInfo); + } + } + + _dispatchAction(eventInfo, actions, index + 1); + }; + + _actionHandlers.setOpacity = function(eventInfo, actions, index) { + var action = actions[index]; + + for(var i = 0; i < action.objectsToSetOpacity.length; i++) { + var opacityInfo = action.objectsToSetOpacity[i].opacityInfo; + var elementIds = $ax.getElementIdsFromPath(action.objectsToSetOpacity[i].objectPath, eventInfo); + + for(var j = 0; j < elementIds.length; j++) { + var elementId = elementIds[j]; + + (function(elementId, opacityInfo) { + _addAnimation(elementId, queueTypes.fade, function () { + var oldTarget = eventInfo.targetElement; + eventInfo.targetElement = elementId; + var opacity = $ax.expr.evaluateExpr(opacityInfo.opacity, eventInfo); + eventInfo.targetElement = oldTarget; + opacity = Math.min(100, Math.max(0, opacity)); + $ax('#' + elementId).setOpacity(opacity/100, opacityInfo.easing, opacityInfo.duration); + }) + })(elementId, opacityInfo); + } + } + + _dispatchAction(eventInfo, actions, index + 1); + } + + _actionHandlers.moveWidget = function(eventInfo, actions, index) { + var action = actions[index]; + for(var i = 0; i < action.objectsToMoves.length; i++) { + var moveInfo = action.objectsToMoves[i].moveInfo; + var elementIds = $ax.getElementIdsFromPath(action.objectsToMoves[i].objectPath, eventInfo); + + for(var j = 0; j < elementIds.length; j++) { + var elementId = elementIds[j]; + _queueResizeMove(elementId, queueTypes.move, eventInfo, moveInfo); + //_addMove(eventInfo, elementId, moveInfo, eventInfo.dragInfo); + } + } + _dispatchAction(eventInfo, actions, index + 1); + }; + + var _compoundChildrenShallow = function (id) { + var deep = []; + var children = $ax('#' + id).getChildren()[0].children; + var piecePrefix = id + 'p'; + + for (var i = 0; i < children.length; i++) { + if(children[i].substring(0, id.length + 1) == piecePrefix) { + deep.push(children[i]); + } + } + return deep; + }; + + var _addMove = function (elementId, eventInfo, moveInfo, optionsOverride) { + var eventInfoCopy = $ax.eventCopy(eventInfo); + var idToResizeMoveState = _getIdToResizeMoveState(eventInfoCopy); + eventInfoCopy.targetElement = elementId; + + var options = $ax.deepCopy(moveInfo.options); + options.easing = optionsOverride.easing; + options.duration = optionsOverride.duration; + options.dragInfo = eventInfo.dragInfo; + + if($ax.public.fn.IsLayer($obj(elementId).type)) { + var childrenIds = $ax.public.fn.getLayerChildrenDeep(elementId, true); + if(childrenIds.length == 0) return; + + var animations = []; + + // Get move delta once, then apply to all children + animations.push({ + id: elementId, + type: queueTypes.move, + func: function() { + var layerInfo = $ax.public.fn.getWidgetBoundingRect(elementId); + var deltaLoc = _getMoveLoc(elementId, moveInfo, eventInfoCopy, optionsOverride.stop, idToResizeMoveState[elementId], options, layerInfo); +// $ax.event.raiseSyntheticEvent(elementId, "onMove"); + $ax.visibility.pushContainer(elementId, false); + + options.onComplete = function () { + _fireAnimationFromQueue(elementId, queueTypes.move); + $ax.visibility.popContainer(elementId, false); + }; + + $ax('#' + elementId).moveBy(deltaLoc.x, deltaLoc.y, options); + } + }); + + //for(var i = 0; i < childrenIds.length; i++) { + // (function(childId) { + // animations.push({ + // id: childId, + // type: queueTypes.move, + // func: function () { + // // Nop, while trying to move as container + // //$ax.event.raiseSyntheticEvent(childId, "onMove"); + // //if($ax.public.fn.IsLayer($obj(childId).type)) _fireAnimationFromQueue(childId, queueTypes.move); + // //else $ax('#' + childId).moveBy(deltaLoc.x, deltaLoc.y, moveInfo.options); + // } + // }); + // })(childrenIds[i]); + //} + _addAnimations(animations); + } else { + _addAnimation(elementId, queueTypes.move, function() { + var loc = _getMoveLoc(elementId, moveInfo, eventInfoCopy, optionsOverride.stop, idToResizeMoveState[elementId], options); + +// $ax.event.raiseSyntheticEvent(elementId, "onMove"); + if(loc.moveTo) $ax('#' + elementId).moveTo(loc.x, loc.y, options); + else $ax('#' + elementId).moveBy(loc.x, loc.y, options); + }); + } + }; + + var _moveSingleWidget = function (elementId, delta, options, onComplete) { + var fixedInfo = $ax.dynamicPanelManager.getFixedInfo(elementId); + var xProp = 'left'; + var xDiff = '+='; + if(fixedInfo) { + if(fixedInfo.horizontal == 'right') { + xProp = 'right'; + xDiff = '-='; + } else if(fixedInfo.horizontal == 'center') { + xProp = 'margin-left'; + } + } + var yProp = 'top'; + var yDiff = '+='; + if(fixedInfo) { + if(fixedInfo.vertical == 'bottom') { + yProp = 'bottom'; + yDiff = '-='; + } else if(fixedInfo.vertical == 'middle') { + yProp = 'margin-top'; + } + } + + var css = {}; + css[xProp] = xDiff + delta.x; + css[yProp] = yDiff + delta.y; + var moveInfo = $ax.move.RegisterMoveInfo(elementId, delta.x, delta.y,false, options); + $jobj(elementId).animate(css, { + duration: options.duration, + easing: options.easing, + queue: false, + complete: function () { + if(onComplete) onComplete(); + if(moveInfo.rootLayer) $ax.visibility.popContainer(moveInfo.rootLayer, false); + $ax.action.fireAnimationFromQueue(elementId, $ax.action.queueTypes.move); + } + }); + } + + var _getMoveLoc = function (elementId, moveInfo, eventInfoCopy, stopInfo, comboState, options, layerInfo) { + var moveTo = false; + var moveWithThis = false; + var xValue = 0; + var yValue = 0; + var moveResult = comboState.moveResult; + var widgetDragInfo = eventInfoCopy.dragInfo; + var jobj = $jobj(elementId); + + var startX; + var startY; + + switch(moveInfo.moveType) { + case "location": + // toRatio is ignoring anything before start since that has already taken effect we just know whe have from start to len to finish + // getting to the location we want to get to. + var toRatio = stopInfo.instant ? 1 : (stopInfo.end - stopInfo.start) / (stopInfo.len - stopInfo.start); + + // If result already caluculated, don't recalculate again, other calculate and save + if (moveResult) { + xValue = moveResult.x; + yValue = moveResult.y; + } else { + comboState.moveResult = moveResult = { x: $ax.expr.evaluateExpr(moveInfo.xValue, eventInfoCopy), y: $ax.expr.evaluateExpr(moveInfo.yValue, eventInfoCopy) }; + xValue = moveResult.x; + yValue = moveResult.y; + } + // If this is final stop for this move, then clear out the result so next move won't use it + if(stopInfo.instant || stopInfo.end == stopInfo.len) comboState.moveResult = undefined; + + if (layerInfo) { + startX = layerInfo.left; + startY = layerInfo.top; + //} else if ($ax.public.fn.isCompoundVectorHtml(jobj[0])) { + // var dimensions = $ax.public.fn.compoundWidgetDimensions(jobj); + // startX = dimensions.left; + // startY = dimensions.top; + } else { + startX = $ax('#' + elementId).locRelativeIgnoreLayer(false); + startY = $ax('#' + elementId).locRelativeIgnoreLayer(true); + if(jobj.css('position') == 'fixed') { + startX -= $(window).scrollLeft(); + startY -= $(window).scrollTop(); + } + } + + xValue = xValue == '' ? 0 : (xValue - startX) * toRatio; + yValue = yValue == '' ? 0 : (yValue - startY) * toRatio; + + break; + case "delta": + var ratio = stopInfo.instant ? 1 : (stopInfo.end - stopInfo.start) / stopInfo.len; + + // See case location above + if(moveResult) { + xValue = moveResult.x * ratio; + yValue = moveResult.y * ratio; + } else { + comboState.moveResult = moveResult = { x: $ax.expr.evaluateExpr(moveInfo.xValue, eventInfoCopy), y: $ax.expr.evaluateExpr(moveInfo.yValue, eventInfoCopy) }; + xValue = moveResult.x * ratio; + yValue = moveResult.y * ratio; + } + if (stopInfo.instant || stopInfo.end == stopInfo.len) comboState.moveResult = undefined; + + break; + case "drag": + xValue = widgetDragInfo.xDelta; + yValue = widgetDragInfo.yDelta; + break; + case "dragX": + xValue = widgetDragInfo.xDelta; + yValue = 0; + break; + case "dragY": + xValue = 0; + yValue = widgetDragInfo.yDelta; + break; + case "locationBeforeDrag": + var location = widgetDragInfo.movedWidgets[eventInfoCopy.targetElement]; + if (location) { + var axObj = $ax('#' + eventInfoCopy.targetElement); + xValue = location.x - axObj.left(); + yValue = location.y - axObj.top(); + } else { + _fireAnimationFromQueue(eventInfoCopy.srcElement, queueTypes.move); + return { x: 0, y: 0 }; + } + //moveTo = true; + break; + case "withThis": + moveWithThis = true; + var widgetMoveInfo = $ax.move.GetWidgetMoveInfo(); + var srcElementId = $ax.getElementIdsFromEventAndScriptId(eventInfoCopy, eventInfoCopy.srcElement)[0]; + var delta = widgetMoveInfo[srcElementId]; + options.easing = delta.options.easing; + options.duration = delta.options.duration; + xValue = delta.x; + yValue = delta.y; + break; + } + + if (options && options.boundaryExpr) { + //$ax.public.fn.removeCompound(jobj); + + if(jobj.css('position') == 'fixed') { + //swap page coordinates with fixed coordinates + options.boundaryExpr.leftExpr.value = options.boundaryExpr.leftExpr.value.replace('.top', '.topfixed').replace('.left', '.leftfixed').replace('.bottom', '.bottomfixed').replace('.right', '.rightfixed'); + options.boundaryExpr.leftExpr.stos[0].leftSTO.prop = options.boundaryExpr.leftExpr.stos[0].leftSTO.prop + 'fixed'; + options.boundaryStos.boundaryScope.direcval0.value = options.boundaryStos.boundaryScope.direcval0.value.replace('.top', '.topfixed').replace('.left', '.leftfixed').replace('.bottom', '.bottomfixed').replace('.right', '.rightfixed'); + options.boundaryStos.boundaryScope.direcval0.stos[0].leftSTO.prop = options.boundaryStos.boundaryScope.direcval0.stos[0].leftSTO.prop + 'fixed'; + } + + if(moveWithThis && (xValue || yValue)) { + _updateLeftExprVariable(options.boundaryExpr, xValue.toString(), yValue.toString()); + } + + if(!$ax.expr.evaluateExpr(options.boundaryExpr, eventInfoCopy)) { + var boundaryStoInfo = options.boundaryStos; + if(boundaryStoInfo) { + if(moveWithThis) { + var stoScopes = boundaryStoInfo.boundaryScope; + if(stoScopes) { + for(var s in stoScopes) { + var boundaryScope = stoScopes[s]; + if(!boundaryScope.localVariables) continue; + + if(boundaryScope.localVariables.withx) boundaryScope.localVariables.withx.value = xValue.toString(); + if(boundaryScope.localVariables.withy) boundaryScope.localVariables.withy.value = yValue.toString(); + } + } + } + + if(layerInfo) { + startX = layerInfo.left; + startY = layerInfo.top; + } else { + startX = $ax('#' + elementId).locRelativeIgnoreLayer(false); + startY = $ax('#' + elementId).locRelativeIgnoreLayer(true); + if(jobj.css('position') == 'fixed') { + startX -= $(window).scrollLeft(); + startY -= $(window).scrollTop(); + } + } + + if(boundaryStoInfo.ySto) { + var currentTop = layerInfo ? layerInfo.top : startY; + var newTop = $ax.evaluateSTO(boundaryStoInfo.ySto, boundaryStoInfo.boundaryScope, eventInfoCopy); + if(moveTo) yValue = newTop; + else yValue = newTop - currentTop; + } + + if(boundaryStoInfo.xSto) { + var currentLeft = layerInfo ? layerInfo.left : startX; + var newLeft = $ax.evaluateSTO(boundaryStoInfo.xSto, boundaryStoInfo.boundaryScope, eventInfoCopy); + if(moveTo) xValue = newLeft; + else xValue = newLeft - currentLeft; + } + } + } + + //$ax.public.fn.restoreCompound(jobj); + } + + return { x: Number(xValue), y: Number(yValue), moveTo: moveTo }; + }; + + //we will have something like [[Target.right + withX]] for leftExpr, and this function set the value of withX + var _updateLeftExprVariable = function (exprTree, xValue, yValue) { + if(exprTree.leftExpr && !exprTree.leftExpr.op) { + var localVars = exprTree.leftExpr.localVariables; + if(localVars) { + if(localVars.withx) localVars.withx.value = xValue; + if(localVars.withy) localVars.withy.value = yValue; + } + } + + //traversal + if(exprTree.op) { + if(exprTree.leftExpr) _updateLeftExprVariable(exprTree.leftExpr, xValue, yValue); + if(exprTree.rightExpr) _updateLeftExprVariable(exprTree.rightExpr, xValue, yValue); + } + } + + var widgetRotationFilter = [ + $ax.constants.IMAGE_BOX_TYPE, $ax.constants.IMAGE_MAP_REGION_TYPE, $ax.constants.DYNAMIC_PANEL_TYPE, + $ax.constants.VECTOR_SHAPE_TYPE, $ax.constants.VERTICAL_LINE_TYPE, $ax.constants.HORIZONTAL_LINE_TYPE + ]; + _actionHandlers.rotateWidget = function(eventInfo, actions, index) { + var action = actions[index]; + + for(var i = 0; i < action.objectsToRotate.length; i++) { + var rotateInfo = action.objectsToRotate[i].rotateInfo; + var elementIds = $ax.getElementIdsFromPath(action.objectsToRotate[i].objectPath, eventInfo); + + for(var j = 0; j < elementIds.length; j++) { + var elementId = elementIds[j]; + _queueResizeMove(elementId, queueTypes.rotate, eventInfo, rotateInfo); + } + } + + _dispatchAction(eventInfo, actions, index + 1); + }; + + var _addRotate = function (elementId, eventInfo, rotateInfo, options, moveInfo) { + var idToResizeMoveState = _getIdToResizeMoveState(eventInfo); + rotateInfo = $ax.deepCopy(rotateInfo); + rotateInfo.options.easing = options.easing; + rotateInfo.options.duration = options.duration; + + var eventInfoCopy = $ax.eventCopy(eventInfo); + eventInfoCopy.targetElement = elementId; + + //calculate degree value at start of animation + var rotateDegree; + var offset = {}; + var eval = function(boundingRect) { + rotateDegree = parseFloat($ax.expr.evaluateExpr(rotateInfo.degree, eventInfoCopy)); + offset.x = Number($ax.expr.evaluateExpr(rotateInfo.offsetX, eventInfoCopy)); + offset.y = Number($ax.expr.evaluateExpr(rotateInfo.offsetY, eventInfoCopy)); + if(!rotateInfo.options.clockwise) rotateDegree = -rotateDegree; + + _updateOffset(offset, rotateInfo.anchor, boundingRect); + } + + if(moveInfo) { + var moveOptions = { dragInfo: eventInfoCopy.dragInfo, duration: options.duration, easing: options.easing, boundaryExpr: moveInfo.options.boundaryExpr, boundaryStos: moveInfo.options.boundaryStos }; + } + + var obj = $obj(elementId); + + if($ax.public.fn.IsLayer(obj.type)) { + var childrenIds = $ax.public.fn.getLayerChildrenDeep(elementId, true, true); + if(childrenIds.length == 0) return; + + var animations = []; + //get center point of the group, and degree delta + var centerPoint, degreeDelta, moveDelta; + animations.push({ + id: elementId, + type: queueTypes.rotate, + func: function () { + var boundingRect = $axure.fn.getWidgetBoundingRect(elementId); + eval(boundingRect); + centerPoint = boundingRect.centerPoint; + centerPoint.x += offset.x; + centerPoint.y += offset.y; + degreeDelta = _initRotateLayer(elementId, rotateInfo, rotateDegree, options, options.stop); + _fireAnimationFromQueue(elementId, queueTypes.rotate); + + moveDelta = { x: 0, y: 0 }; + if (moveInfo) { + moveDelta = _getMoveLoc(elementId, moveInfo, eventInfoCopy, options.moveStop, idToResizeMoveState[elementId], moveOptions, boundingRect); + if (moveDelta.moveTo) { + moveDelta.x -= $ax.getNumFromPx($jobj(elementId).css('left')); + moveDelta.y -= $ax.getNumFromPx($jobj(elementId).css('top')); + } + $ax.event.raiseSyntheticEvent(elementId, 'onMove'); + } + } + }); + + for(var idIndex = 0; idIndex < childrenIds.length; idIndex++) { + var childId = childrenIds[idIndex]; + (function(id) { + var childObj = $obj(id); + var rotate = $.inArray(childObj.type, widgetRotationFilter) != -1; + + var isLayer = $ax.public.fn.IsLayer(childObj.type); + animations.push({ + id: id, + type: queueTypes.rotate, + func: function() { + $ax.event.raiseSyntheticEvent(id, "onRotate"); + if(isLayer) _fireAnimationFromQueue(id, queueTypes.rotate); + else $ax('#' + id).circularMoveAndRotate(degreeDelta, options, centerPoint.x, centerPoint.y, rotate, moveDelta); + } + }); + if(!isLayer) animations.push({ id: id, type: queueTypes.move, func: function() {} }); + })(childId); + } + + _addAnimations(animations); + } else { + animations = []; + animations.push({ + id: elementId, + type: queueTypes.rotate, + func: function () { + var jobj = $jobj(elementId); + var unrotatedDim = { width: $ax.getNumFromPx(jobj.css('width')), height: $ax.getNumFromPx(jobj.css('height')) }; + eval(unrotatedDim); + var delta = { x: 0, y: 0 }; + if(moveInfo) { + delta = _getMoveLoc(elementId, moveInfo, eventInfoCopy, options.moveStop, idToResizeMoveState[elementId], moveOptions); + if(delta.moveTo) { + delta.x -= $ax.getNumFromPx($jobj(elementId).css('left')); + delta.y -= $ax.getNumFromPx($jobj(elementId).css('top')); + } + } + + $ax.event.raiseSyntheticEvent(elementId, 'onRotate'); + if(offset.x == 0 && offset.y == 0) { + _rotateSingle(elementId, rotateDegree, rotateInfo.rotateType == 'location', delta, options, options.stop); + _fireAnimationFromQueue(elementId, queueTypes.move); + if(moveInfo) $ax.event.raiseSyntheticEvent(elementId, 'onMove'); + return; + } + _rotateSingleOffset(elementId, rotateDegree, rotateInfo.rotateType == 'location', delta, { x: offset.x, y: offset.y }, options, options.stop); + if(moveInfo) $ax.event.raiseSyntheticEvent(elementId, 'onMove'); + } + }); + animations.push({ id: elementId, type: queueTypes.move, func: function () { } }); + + _addAnimations(animations); + } + } + + var _updateOffset = function(offset, anchor, boundingRect) { + if (anchor.indexOf('left') != -1) offset.x -= boundingRect.width / 2; + if (anchor.indexOf('right') != -1) offset.x += boundingRect.width / 2; + if (anchor.indexOf('top') != -1) offset.y -= boundingRect.height / 2; + if (anchor.indexOf('bottom') != -1) offset.y += boundingRect.height / 2; + } + + var _rotateSingle = function(elementId, rotateDegree, rotateTo, delta, options, stop) { + var degreeDelta = _applyRotateStop(rotateDegree, $ax.move.getRotationDegree(elementId), rotateTo, stop); + $ax('#' + elementId).rotate(degreeDelta, options.easing, options.duration, false, true); + if(delta.x || delta.y) _moveSingleWidget(elementId, delta, options); + }; + + var _rotateSingleOffset = function (elementId, rotateDegree, rotateTo, delta, offset, options, stop, resizeOffset) { + var obj = $obj(elementId); + var currRotation = $ax.move.getRotationDegree(elementId); + + // Need to fix offset. Want to to stay same place on widget after rotation, so need to take the offset and rotate it to where it should be. + if(currRotation) { + offset = $axure.fn.getPointAfterRotate(currRotation, offset, { x: 0, y: 0 }); + } + + var degreeDelta = _applyRotateStop(rotateDegree, currRotation, rotateTo, stop); + var widgetCenter = $axure.fn.getWidgetBoundingRect(elementId).centerPoint; + + var rotate = $.inArray(obj.type, widgetRotationFilter) != -1; + $ax('#' + elementId).circularMoveAndRotate(degreeDelta, options, widgetCenter.x + offset.x, widgetCenter.y + offset.y, rotate, delta, resizeOffset); + } + + var _applyRotateStop = function(rotateDegree, currRotation, to, stop) { + var degreeDelta; + var ratio; + if(to) { + degreeDelta = rotateDegree - currRotation; + ratio = stop.instant ? 1 : (stop.end - stop.start) / (stop.len - stop.start); + } else { + degreeDelta = rotateDegree; + ratio = stop.instant ? 1 : (stop.end - stop.start) / stop.len; + } + + return degreeDelta * ratio; + } + + + var _initRotateLayer = function(elementId, rotateInfo, rotateDegree, options, stop) { + var layerDegree = $jobj(elementId).data('layerDegree'); + if (layerDegree === undefined) layerDegree = 0; + else layerDegree = parseFloat(layerDegree); + + var to = rotateInfo.rotateType == 'location'; + var newDegree = to ? rotateDegree : layerDegree + rotateDegree; + var degreeDelta = newDegree - layerDegree; + + var ratio = stop.instant ? 1 : (stop.end - stop.start) / (stop.len - stop.start); + degreeDelta *= ratio; + + $jobj(elementId).data('layerDegree', newDegree); + $ax.event.raiseSyntheticEvent(elementId, "onRotate"); + + return degreeDelta; + } + + _actionHandlers.setWidgetSize = function(eventInfo, actions, index) { + var action = actions[index]; + for(var i = 0; i < action.objectsToResize.length; i++) { + var resizeInfo = action.objectsToResize[i].sizeInfo; + var objPath = action.objectsToResize[i].objectPath; + if(objPath == 'thisItem') { + var thisId = eventInfo.srcElement; + var repeaterId = $ax.getParentRepeaterFromElementId(thisId); + var itemId = $ax.repeater.getItemIdFromElementId(thisId); + var currSize = $ax.repeater.getItemSize(repeaterId, itemId); + var newSize = _getSizeFromInfo(resizeInfo, eventInfo, currSize.width, currSize.height); + $ax.repeater.setItemSize(repeaterId, itemId, newSize.width, newSize.height); + + continue; + } + + var elementIds = $ax.getElementIdsFromPath(objPath, eventInfo); + + for(var j = 0; j < elementIds.length; j++) { + var elementId = elementIds[j]; + _queueResizeMove(elementId, queueTypes.resize, eventInfo, resizeInfo); + //_addResize(elementId, resizeInfo); + } + } + _dispatchAction(eventInfo, actions, index + 1); + }; + + // Move info undefined unless this move/resize actions are being merged + var _addResize = function(elementId, eventInfo, resizeInfo, options, moveInfo, rotateInfo) { + var axObject = $obj(elementId); + resizeInfo = $ax.deepCopy(resizeInfo); + resizeInfo.easing = options.easing; + resizeInfo.duration = options.duration; + + var eventInfoCopy = $ax.eventCopy(eventInfo); + eventInfoCopy.targetElement = elementId; + + var moves = moveInfo || resizeInfo.anchor != "top left" || ($ax.public.fn.IsDynamicPanel(axObject.type) && + ((axObject.fixedHorizontal && axObject.fixedHorizontal == 'center') || (axObject.fixedVertical && axObject.fixedVertical == 'middle'))) || + (rotateInfo && (rotateInfo.offsetX || rotateInfo.offsetY)); + + if(moveInfo) { + var moveOptions = { dragInfo: eventInfoCopy.dragInfo, duration: options.duration, easing: options.easing, boundaryExpr: moveInfo.options.boundaryExpr, boundaryStos: moveInfo.options.boundaryStos }; + } + + var idToResizeMoveState = _getIdToResizeMoveState(eventInfoCopy); + + var animations = []; + if($ax.public.fn.IsLayer(axObject.type)) { + moves = true; // Assume widgets will move will layer, even though not all widgets may move + var childrenIds = $ax.public.fn.getLayerChildrenDeep(elementId, true, true); + if(childrenIds.length === 0) return; + // Need to wait to calculate new size, until time to animate, but animates are in separate queues + // best option seems to be to calculate in a "animate" for the layer itself and all children will use that. + // May just have to be redundant if this doesn't work well. + + var boundingRect, widthChangedPercent, heightChangedPercent, unchanged, deltaLoc, degreeDelta, resizeOffset; + animations.push({ + id: elementId, + type: queueTypes.resize, + func: function () { + $ax.visibility.pushContainer(elementId, false); + boundingRect = $ax.public.fn.getWidgetBoundingRect(elementId); + var size = _getSizeFromInfo(resizeInfo, eventInfoCopy, boundingRect.width, boundingRect.height, elementId); + deltaLoc = { x: 0, y: 0 }; + + var stop = options.stop; + var ratio = stop.instant ? 1 : (stop.end - stop.start) / (stop.len - stop.start); + widthChangedPercent = (size.width - boundingRect.width) / boundingRect.width * ratio; + heightChangedPercent = (size.height - boundingRect.height) / boundingRect.height * ratio; + resizeOffset = _applyAnchorToResizeOffset(widthChangedPercent * boundingRect.width, heightChangedPercent * boundingRect.height, resizeInfo.anchor); + if(stop.instant || stop.end == stop.len) idToResizeMoveState[elementId].resizeResult = undefined; + + unchanged = widthChangedPercent === 0 && heightChangedPercent === 0; + $ax.event.raiseSyntheticEvent(elementId, 'onResize'); + _fireAnimationFromQueue(elementId, queueTypes.resize); + } + }); + + if(moveInfo) animations.push({ + id: elementId, + type: queueTypes.move, + func: function() { + deltaLoc = _getMoveLoc(elementId, moveInfo, eventInfoCopy, options.moveStop, idToResizeMoveState[elementId], moveOptions, boundingRect); + $ax.visibility.pushContainer(elementId, false); + _fireAnimationFromQueue(elementId, queueTypes.move); + $ax.event.raiseSyntheticEvent(elementId, 'onMove'); + } + }); + if (rotateInfo) animations.push({ + id: elementId, + type: queueTypes.rotate, + func: function () { + resizeOffset = _applyAnchorToResizeOffset(widthChangedPercent * boundingRect.width, heightChangedPercent * boundingRect.height, resizeInfo.anchor); + var rotateDegree = parseFloat($ax.expr.evaluateExpr(rotateInfo.degree, eventInfoCopy)); + degreeDelta = _initRotateLayer(elementId, rotateInfo, rotateDegree, options, options.rotateStop); + _fireAnimationFromQueue(elementId, queueTypes.rotate); + $ax.event.raiseSyntheticEvent(elementId, 'onRotate'); + } + }); + + var completeCount = childrenIds.length*2; // Because there is a resize and move complete, it needs to be doubled + for(var idIndex = 0; idIndex < childrenIds.length; idIndex++) { + // Need to use scoping trick here to make sure childId doesn't change on next loop + (function(childId) { + //use ax obj to get width and height, jquery css give us the value without border + var isLayer = $ax.public.fn.IsLayer($obj(childId).type); + var rotate = $.inArray($obj(childId).type, widgetRotationFilter) != -1; + animations.push({ + id: childId, + type: queueTypes.resize, + func: function() { + //$ax.event.raiseSyntheticEvent(childId, 'onResize'); + if(isLayer) { + completeCount--; + _fireAnimationFromQueue(childId, queueTypes.resize); + $ax.event.raiseSyntheticEvent(childId, 'onResize'); + } else { + var currDeltaLoc = { x: deltaLoc.x, y: deltaLoc.y }; + var resizeDeltaMove = { x: 0, y: 0 }; + var css = _getCssForResizingLayerChild(childId, resizeInfo.anchor, boundingRect, widthChangedPercent, heightChangedPercent, resizeDeltaMove); + var onComplete = function() { + if(--completeCount == 0) $ax.visibility.popContainer(elementId, false); + }; + $ax('#' + childId).resize(css, resizeInfo, true, moves, onComplete); + if(rotateInfo) { + var offset = { x: Number($ax.expr.evaluateExpr(rotateInfo.offsetX, eventInfoCopy)), y: Number($ax.expr.evaluateExpr(rotateInfo.offsetY, eventInfo)) }; + _updateOffset(offset, resizeInfo.anchor, boundingRect); + var centerPoint = { x: boundingRect.centerPoint.x + offset.x, y: boundingRect.centerPoint.y + offset.y }; + $ax('#' + childId).circularMoveAndRotate(degreeDelta, options, centerPoint.x, centerPoint.y, rotate, currDeltaLoc, resizeOffset, resizeDeltaMove, onComplete); + } else { + currDeltaLoc.x += resizeDeltaMove.x; + currDeltaLoc.y += resizeDeltaMove.y; + _moveSingleWidget(childId, currDeltaLoc, options, onComplete); + } + } + } + }); + if(!isLayer && moves) animations.push({ id: childId, type: queueTypes.move, func: function () {} }); + if(!isLayer && rotateInfo) animations.push({ id: childId, type: queueTypes.rotate, func: function () {} }); + })(childrenIds[idIndex]); + } + } else { + // Not func, obj with func + animations.push({ + id: elementId, + type: queueTypes.resize, + func: function() { + //textarea can be resized manully by the user, but doesn't update div size yet, so doing this for now. + //alternatively axquery get for size can account for this + + var sizeId = $ax.public.fn.IsTextArea(axObject.type) ? $jobj(elementId).children('textarea').attr('id') : elementId; + var oldSize = $ax('#' + sizeId).size(); + var oldWidth = oldSize.width; + var oldHeight = oldSize.height; + + var stop = options.stop; + var ratio = stop.instant ? 1 : (stop.end - stop.start) / (stop.len - stop.start); + + var size = _getSizeFromInfo(resizeInfo, eventInfoCopy, oldWidth, oldHeight, elementId); + var newWidth = size.width; + var newHeight = size.height; + var deltaWidth = (newWidth - oldWidth)*ratio; + var deltaHeight = (newHeight - oldHeight)*ratio; + newWidth = oldWidth + deltaWidth; + newHeight = oldHeight + deltaHeight; + + var delta = { x: 0, y: 0 }; + if(moveInfo) { + delta = _getMoveLoc(elementId, moveInfo, eventInfoCopy, options.moveStop, idToResizeMoveState[elementId], moveOptions); + if (delta.moveTo) { + delta.x -= $ax.getNumFromPx($jobj(elementId).css('left')); + delta.y -= $ax.getNumFromPx($jobj(elementId).css('top')); + } + } + + var rotateHandlesMove = false; + var offset = { x: 0, y: 0 }; + if(rotateInfo) { + offset.x = Number($ax.expr.evaluateExpr(rotateInfo.offsetX, eventInfoCopy)); + offset.y = Number($ax.expr.evaluateExpr(rotateInfo.offsetY, eventInfoCopy)); + _updateOffset(offset, rotateInfo.anchor, $axure.fn.getWidgetBoundingRect(elementId)); + rotateHandlesMove = Boolean(rotateInfo && (offset.x || offset.y || rotateInfo.anchor != 'center')); + $ax.event.raiseSyntheticEvent(elementId, 'onRotate'); + } + + var css = null; + var rootLayer = null; + if(deltaHeight != 0 || deltaWidth != 0) { + rootLayer = $ax.move.getRootLayer(elementId); + if(rootLayer) $ax.visibility.pushContainer(rootLayer, false); + css = _getCssForResizingWidget(elementId, eventInfoCopy, resizeInfo.anchor, newWidth, newHeight, oldWidth, oldHeight, delta, options.stop, !rotateHandlesMove); + idToResizeMoveState[elementId].resizeResult = undefined; + } + + if(rotateInfo) { + var rotateDegree = parseFloat($ax.expr.evaluateExpr(rotateInfo.degree, eventInfoCopy)); + + if(rotateHandlesMove) { + var resizeOffset = _applyAnchorToResizeOffset(deltaWidth, deltaHeight, rotateInfo.anchor); + _rotateSingleOffset(elementId, rotateDegree, rotateInfo.rotateType == 'location', delta, offset, options, options.rotateStop, resizeOffset); + } else { + // Not handling move so pass in nop delta + _rotateSingle(elementId, rotateDegree, rotateInfo.rotateType == 'location', { x: 0, y: 0 }, options, options.rotateStop); + } + } else _moveSingleWidget(elementId, delta, options); + + // Have to do it down here to make sure move info is registered + if(moveInfo) $ax.event.raiseSyntheticEvent(elementId, 'onMove'); + + //$ax.event.raiseSyntheticEvent(elementId, 'onResize'); + if (css) { + $ax('#' + elementId).resize(css, resizeInfo, true, moves, function () { + if(rootLayer) $ax.visibility.popContainer(rootLayer, false); + }); + } else { + _fireAnimationFromQueue(elementId, queueTypes.resize); + if(moves && !rotateHandlesMove) _fireAnimationFromQueue(elementId, queueTypes.move); + + $ax.event.raiseSyntheticEvent(elementId, 'onResize'); + } + } + }); + // Nop move (move handled by resize) + if(rotateInfo) animations.push({ id: elementId, type: queueTypes.rotate, func: function () { } }); + if(moves) animations.push({ id: elementId, type: queueTypes.move, func: function () { } }); + } + + _addAnimations(animations); + }; + + var _applyAnchorToResizeOffset = function (deltaWidth, deltaHeight, anchor) { + var offset = {}; + if (anchor.indexOf('left') != -1) offset.x = -deltaWidth / 2; + else if (anchor.indexOf('right') != -1) offset.x = deltaWidth / 2; + if (anchor.indexOf('top') != -1) offset.y = -deltaHeight / 2; + else if (anchor.indexOf('bottom') != -1) offset.y = deltaHeight / 2; + + return offset; + } + + //var _getOldAndNewSize = function (resizeInfo, eventInfo, targetElement) { + // var axObject = $obj(targetElement); + // var oldWidth, oldHeight; + // //textarea can be resized manully by the user, use the textarea child to get the current size + // //because this new size may not be reflected on its parents yet + // if ($ax.public.fn.IsTextArea(axObject.type)) { + // var jObject = $jobj(elementId); + // var textObj = $ax('#' + jObject.children('textarea').attr('id')); + // //maybe we shouldn't use ax obj to get width and height here anymore... + // oldWidth = textObj.width(); + // oldHeight = textObj.height(); + // } else { + // oldWidth = $ax('#' + elementId).width(); + // oldHeight = $ax('#' + elementId).height(); + // } + + // var size = _getSizeFromInfo(resizeInfo, eventInfo, oldHeight, oldWidth, elementId); + // return { oldWidth: oldWidth, oldHeight: oldHeight, newWidth: size.width, newHeight: size.height, change: oldWidth != size.width || oldHeight != size.height }; + //} + + var _getSizeFromInfo = function(resizeInfo, eventInfo, oldWidth, oldHeight, targetElement) { + var oldTarget = eventInfo.targetElement; + eventInfo.targetElement = targetElement; + + var state = _getIdToResizeMoveState(eventInfo)[targetElement]; + if(state && state.resizeResult) return state.resizeResult; + + var width = $ax.expr.evaluateExpr(resizeInfo.width, eventInfo); + var height = $ax.expr.evaluateExpr(resizeInfo.height, eventInfo); + eventInfo.targetElement = oldTarget; + + + // If either one is not a number, use the old value + width = width != "" ? Number(width) : oldWidth; + height = height != "" ? Number(height) : oldHeight; + + width = isNaN(width) ? oldWidth : width; + height = isNaN(height) ? oldHeight : height; + + // can't be negative + var result = { width: Math.max(width, 0), height: Math.max(height, 0) }; + if(state) state.resizeResult = result; + return result; + } + + //var _queueResize = function (elementId, css, resizeInfo) { + // var resizeFunc = function() { + // $ax('#' + elementId).resize(css, resizeInfo, true); + // //$ax.public.fn.resize(elementId, css, resizeInfo, true); + // }; + // var obj = $obj(elementId); + // var moves = resizeInfo.anchor != "top left" || ($ax.public.fn.IsDynamicPanel(obj.type) && ((obj.fixedHorizontal && obj.fixedHorizontal == 'center') || (obj.fixedVertical && obj.fixedVertical == 'middle'))) + // if(!moves) { + // _addAnimation(elementId, queueTypes.resize, resizeFunc); + // } else { + // var animations = []; + // animations[0] = { id: elementId, type: queueTypes.resize, func: resizeFunc }; + // animations[1] = { id: elementId, type: queueTypes.move, func: function() {}}; // Nop func - resize handles move and firing from queue + // _addAnimations(animations); + // } + //}; + + //should clean this function and + var _getCssForResizingWidget = function (elementId, eventInfo, anchor, newWidth, newHeight, oldWidth, oldHeight, delta, stop, handleMove) { + var ratio = stop.instant ? 1 : (stop.end - stop.start) / (stop.len - stop.start); + var deltaWidth = (newWidth - oldWidth) * ratio; + var deltaHeight = (newHeight - oldHeight) * ratio; + if(stop.instant || stop.end == stop.len) { + var idToResizeMoveState = _getIdToResizeMoveState(eventInfo); + if(idToResizeMoveState[elementId]) idToResizeMoveState[elementId].resizeResult = undefined; + } + + var css = {}; + css.height = oldHeight + deltaHeight; + + var obj = $obj(elementId); + //if it's 100% width, don't change its width + if($ax.dynamicPanelManager.isPercentWidthPanel(obj)) var is100Dp = true; + else css.width = oldWidth + deltaWidth; + + var jobj = $jobj(elementId); + //if this is pinned dp, we will mantain the pin, no matter how you resize it; so no need changes left or top + //NOTE: currently only pinned DP has position == fixed + if(jobj.css('position') == 'fixed') return css; + + //use position relative to parents + //var position = obj.generateCompound ? $ax.public.fn.getWidgetBoundingRect(elementId) : $ax.public.fn.getPositionRelativeToParent(elementId); + + + var locationShift; + switch(anchor) { + case "top left": + locationShift = { x: 0, y: 0 }; break; + case "top": + locationShift = { x: -deltaWidth / 2.0, y: 0.0 }; break; + case "top right": + locationShift = { x: -deltaWidth, y: 0.0 }; break; + case "left": + locationShift = { x: 0.0, y: -deltaHeight / 2.0 }; break; + case "center": + locationShift = { x: -deltaWidth / 2.0, y: -deltaHeight / 2.0 }; break; + case "right": + locationShift = { x: -deltaWidth, y: -deltaHeight / 2.0 }; break; + case "bottom left": + locationShift = { x: 0.0, y: -deltaHeight }; break; + case "bottom": + locationShift = { x: -deltaWidth/2.0, y: -deltaHeight }; break; + case "bottom right": + locationShift = { x: -deltaWidth, y: -deltaHeight }; break; + } + + if(handleMove) { + if(jobj.css('position') === 'absolute') { + css.left = $ax.getNumFromPx(jobj.css('left')) + locationShift.x + delta.x; + css.top = $ax.getNumFromPx(jobj.css('top')) + locationShift.y + delta.y; + } else { + var axQuery = $ax('#' + elementId); + css.left = axQuery.left(true) + locationShift.x + delta.x; + css.top = axQuery.top(true) + locationShift.y + delta.y; + } + } else { + delta.x += locationShift.x; + delta.y += locationShift.y; + } + + return css; + }; + + + var _getCssForResizingLayerChild = function (elementId, anchor, layerBoundingRect, widthChangedPercent, heightChangedPercent, deltaLoc) { + var boundingRect = $ax.public.fn.getWidgetBoundingRect(elementId); + var childCenterPoint = boundingRect.centerPoint; + + var currentSize = $ax('#' + elementId).size(); + var newWidth = currentSize.width + currentSize.width * widthChangedPercent; + var newHeight = currentSize.height + currentSize.height * heightChangedPercent; + + var css = {}; + css.height = newHeight; + + var obj = $obj(elementId); + //if it's 100% width, don't change its width and left + var changeLeft = true; + if($ax.dynamicPanelManager.isPercentWidthPanel(obj)) changeLeft = false; + else css.width = newWidth; + + + var jobj = $jobj(elementId); + //if this is pinned dp, we will mantain the pin, no matter how you resize it; so no need changes left or top + //NOTE: currently only pinned DP has position == fixed + if(jobj.css('position') == 'fixed') return css; + //use bounding rect position relative to parents to calculate delta + var axObj = $ax('#' + elementId); + // This will be absolute world coordinates, but we want body coordinates. + var currentLeft = axObj.locRelativeIgnoreLayer(false); + var currentTop = axObj.locRelativeIgnoreLayer(true); + + if(anchor.indexOf("center") > -1) { + var topDelta = (childCenterPoint.y - layerBoundingRect.centerPoint.y) * heightChangedPercent - currentSize.height * heightChangedPercent / 2; + if(changeLeft) var leftDelta = (childCenterPoint.x - layerBoundingRect.centerPoint.x) * widthChangedPercent - currentSize.width * widthChangedPercent / 2; + } else { + if(anchor.indexOf("top") > -1) { + topDelta = (currentTop - layerBoundingRect.top) * heightChangedPercent; + } else if(anchor.indexOf("bottom") > -1) { + topDelta = (currentTop - layerBoundingRect.bottom) * heightChangedPercent; + } else { + topDelta = (childCenterPoint.y - layerBoundingRect.centerPoint.y) * heightChangedPercent - currentSize.height * heightChangedPercent / 2; + } + + if(changeLeft) { + if(anchor.indexOf("left") > -1) { + leftDelta = (currentLeft - layerBoundingRect.left) * widthChangedPercent; + } else if(anchor.indexOf("right") > -1) { + leftDelta = (currentLeft - layerBoundingRect.right) * widthChangedPercent; + } else { + leftDelta = (childCenterPoint.x - layerBoundingRect.centerPoint.x) * widthChangedPercent - currentSize.width * widthChangedPercent / 2; + } + } + } + + if(topDelta) deltaLoc.y += topDelta; + if(leftDelta && changeLeft) deltaLoc.x += leftDelta; + + return css; + }; + + _actionHandlers.setPanelOrder = function(eventInfo, actions, index) { + var action = actions[index]; + for(var i = 0; i < action.panelPaths.length; i++) { + var func = action.panelPaths[i].setOrderInfo.bringToFront ? 'bringToFront' : 'sendToBack'; + var elementIds = $ax.getElementIdsFromPath(action.panelPaths[i].panelPath, eventInfo); + for(var j = 0; j < elementIds.length; j++) $ax('#' + elementIds[j])[func](); + } + + _dispatchAction(eventInfo, actions, index + 1); + }; + + _actionHandlers.modifyDataSetEditItems = function(eventInfo, actions, index) { + var action = actions[index]; + var add = action.repeatersToAddTo; + var repeaters = add || action.repeatersToRemoveFrom; + var itemId; + for(var i = 0; i < repeaters.length; i++) { + var data = repeaters[i]; + // Grab the first one because repeaters must have only element id, as they cannot be inside repeaters + // or none if unplaced + var id = $ax.getElementIdsFromPath(data.path, eventInfo)[0]; + if(!id) continue; + + if(data.addType == 'this') { + var scriptId = $ax.repeater.getScriptIdFromElementId(eventInfo.srcElement); + itemId = $ax.repeater.getItemIdFromElementId(eventInfo.srcElement); + var repeaterId = $ax.getParentRepeaterFromScriptId(scriptId); + if(add) $ax.repeater.addEditItems(repeaterId, [itemId]); + else $ax.repeater.removeEditItems(repeaterId, [itemId]); + } else if(data.addType == 'all') { + var allItems = $ax.repeater.getAllItemIds(id); + if(add) $ax.repeater.addEditItems(id, allItems); + else $ax.repeater.removeEditItems(id, allItems); + } else { + var oldTarget = eventInfo.targetElement; + var itemIds = $ax.repeater.getAllItemIds(id); + var itemIdsToAdd = []; + for(var j = 0; j < itemIds.length; j++) { + itemId = itemIds[j]; + eventInfo.targetElement = $ax.repeater.createElementId(id, itemId); + if($ax.expr.evaluateExpr(data.query, eventInfo) == "true") { + itemIdsToAdd[itemIdsToAdd.length] = String(itemId); + } + eventInfo.targetElement = oldTarget; + } + if(add) $ax.repeater.addEditItems(id, itemIdsToAdd); + else $ax.repeater.removeEditItems(id, itemIdsToAdd); + } + } + + _dispatchAction(eventInfo, actions, index + 1); + }; + + _action.repeaterInfoNames = { addItemsToDataSet: 'dataSetsToAddTo', deleteItemsFromDataSet: 'dataSetItemsToRemove', updateItemsInDataSet: 'dataSetsToUpdate', + addFilterToRepeater: 'repeatersToAddFilter', removeFilterFromRepeater: 'repeatersToRemoveFilter', + addSortToRepeater: 'repeaterToAddSort', removeSortFromRepeater: 'repeaterToRemoveSort', + setRepeaterToPage: 'repeatersToSetPage', setItemsPerRepeaterPage: 'repeatersToSetItemCount' + }; + + _actionHandlers.addItemsToDataSet = function(eventInfo, actions, index) { + var action = actions[index]; + for(var i = 0; i < action.dataSetsToAddTo.length; i++) { + var datasetInfo = action.dataSetsToAddTo[i]; + // Grab the first one because repeaters must have only element id, as they cannot be inside repeaters + // or none if unplaced + var id = $ax.getElementIdsFromPath(datasetInfo.path, eventInfo)[0]; + if(!id || _ignoreAction(id)) continue; + var dataset = datasetInfo.data; + + for(var j = 0; j < dataset.length; j++) $ax.repeater.addItem(id, $ax.deepCopy(dataset[j]), eventInfo); + if(dataset.length) _addRefresh(id); + } + + _dispatchAction(eventInfo, actions, index + 1); + }; + + _actionHandlers.deleteItemsFromDataSet = function(eventInfo, actions, index) { + var action = actions[index]; + for(var i = 0; i < action.dataSetItemsToRemove.length; i++) { + // Grab the first one because repeaters must have only element id, as they cannot be inside repeaters + // or none if unplaced + var deleteInfo = action.dataSetItemsToRemove[i]; + var id = $ax.getElementIdsFromPath(deleteInfo.path, eventInfo)[0]; + if(!id || _ignoreAction(id)) continue; + $ax.repeater.deleteItems(id, eventInfo, deleteInfo.type, deleteInfo.rule); + _addRefresh(id); + } + + _dispatchAction(eventInfo, actions, index + 1); + }; + + _actionHandlers.updateItemsInDataSet = function(eventInfo, actions, index) { + var action = actions[index]; + for(var i = 0; i < action.dataSetsToUpdate.length; i++) { + var dataSet = action.dataSetsToUpdate[i]; + // Grab the first one because repeaters must have only element id, as they cannot be inside repeaters + // or none if unplaced + var id = $ax.getElementIdsFromPath(dataSet.path, eventInfo)[0]; + if(!id || _ignoreAction(id)) continue; + + $ax.repeater.updateEditItems(id, dataSet.props, eventInfo, dataSet.type, dataSet.rule); + _addRefresh(id); + } + + _dispatchAction(eventInfo, actions, index + 1); + }; + + _actionHandlers.setRepeaterToDataSet = function(eventInfo, actions, index) { + var action = actions[index]; + + for(var i = 0; i < action.repeatersToSet.length; i++) { + var setRepeaterInfo = action.repeatersToSet[i]; + // Grab the first one because repeaters must have only element id, as they cannot be inside repeaters + // or none if unplaced + var id = $ax.getElementIdsFromPath(setRepeaterInfo.path, eventInfo)[0]; + if(!id) continue; + $ax.repeater.setDataSet(id, setRepeaterInfo.localDataSetId); + } + + _dispatchAction(eventInfo, actions, index + 1); + }; + + _actionHandlers.addFilterToRepeater = function(eventInfo, actions, index) { + var action = actions[index]; + + for(var i = 0; i < action.repeatersToAddFilter.length; i++) { + var addFilterInfo = action.repeatersToAddFilter[i]; + // Grab the first one because repeaters must have only element id, as they cannot be inside repeaters + // or none if unplaced + var id = $ax.getElementIdsFromPath(addFilterInfo.path, eventInfo)[0]; + if(!id || _ignoreAction(id)) continue; + + $ax.repeater.addFilter(id, addFilterInfo.removeOtherFilters, addFilterInfo.label, addFilterInfo.filter, eventInfo.srcElement); + _addRefresh(id); + } + + _dispatchAction(eventInfo, actions, index + 1); + }; + + _actionHandlers.removeFilterFromRepeater = function(eventInfo, actions, index) { + var action = actions[index]; + + for(var i = 0; i < action.repeatersToRemoveFilter.length; i++) { + var removeFilterInfo = action.repeatersToRemoveFilter[i]; + // Grab the first one because repeaters must have only element id, as they cannot be inside repeaters + // or none if unplaced + var id = $ax.getElementIdsFromPath(removeFilterInfo.path, eventInfo)[0]; + if(!id || _ignoreAction(id)) continue; + + if(removeFilterInfo.removeAll) $ax.repeater.removeFilter(id); + else if(removeFilterInfo.filterName != '') { + $ax.repeater.removeFilter(id, removeFilterInfo.filterName); + } + _addRefresh(id); + } + + _dispatchAction(eventInfo, actions, index + 1); + }; + + _actionHandlers.addSortToRepeater = function(eventInfo, actions, index) { + var action = actions[index]; + + for(var i = 0; i < action.repeatersToAddSort.length; i++) { + var addSortInfo = action.repeatersToAddSort[i]; + // Grab the first one because repeaters must have only element id, as they cannot be inside repeaters + // or none if unplaced + var id = $ax.getElementIdsFromPath(addSortInfo.path, eventInfo)[0]; + if(!id || _ignoreAction(id)) continue; + + $ax.repeater.addSort(id, addSortInfo.label, addSortInfo.columnName, addSortInfo.ascending, addSortInfo.toggle, addSortInfo.sortType); + _addRefresh(id); + } + + _dispatchAction(eventInfo, actions, index + 1); + }; + + _actionHandlers.removeSortFromRepeater = function(eventInfo, actions, index) { + var action = actions[index]; + + for(var i = 0; i < action.repeatersToRemoveSort.length; i++) { + var removeSortInfo = action.repeatersToRemoveSort[i]; + // Grab the first one because repeaters must have only element id, as they cannot be inside repeaters + // or none if unplaced + var id = $ax.getElementIdsFromPath(removeSortInfo.path, eventInfo)[0]; + if(!id || _ignoreAction(id)) continue; + + if(removeSortInfo.removeAll) $ax.repeater.removeSort(id); + else if(removeSortInfo.sortName != '') $ax.repeater.removeSort(id, removeSortInfo.sortName); + _addRefresh(id); + } + + _dispatchAction(eventInfo, actions, index + 1); + }; + + _actionHandlers.setRepeaterToPage = function(eventInfo, actions, index) { + var action = actions[index]; + + for(var i = 0; i < action.repeatersToSetPage.length; i++) { + var setPageInfo = action.repeatersToSetPage[i]; + // Grab the first one because repeaters must have only element id, as they cannot be inside repeaters + // or none if unplaced + var id = $ax.getElementIdsFromPath(setPageInfo.path, eventInfo)[0]; + if(!id || _ignoreAction(id)) continue; + + var oldTarget = eventInfo.targetElement; + eventInfo.targetElement = id; + $ax.repeater.setRepeaterToPage(id, setPageInfo.pageType, setPageInfo.pageValue, eventInfo); + eventInfo.targetElement = oldTarget; + _addRefresh(id); + } + + _dispatchAction(eventInfo, actions, index + 1); + }; + + _actionHandlers.setItemsPerRepeaterPage = function(eventInfo, actions, index) { + var action = actions[index]; + + for(var i = 0; i < action.repeatersToSetItemCount.length; i++) { + var setItemCountInfo = action.repeatersToSetItemCount[i]; + // Grab the first one because repeaters must have only element id, as they cannot be inside repeaters + // or none if unplaced + var id = $ax.getElementIdsFromPath(setItemCountInfo.path, eventInfo)[0]; + if(!id || _ignoreAction(id)) continue; + + if(setItemCountInfo.noLimit) $ax.repeater.setNoItemLimit(id); + else $ax.repeater.setItemLimit(id, setItemCountInfo.itemCountValue, eventInfo); + _addRefresh(id); + } + + _dispatchAction(eventInfo, actions, index + 1); + }; + + _actionHandlers.refreshRepeater = function(eventInfo, actions, index) { + // We use this as a psudo action now. + var action = actions[index]; + for (var i = 0; i < action.repeatersToRefresh.length; i++) { + // Grab the first one because repeaters must have only element id, as they cannot be inside repeaters + // or none if unplaced + var id = $ax.getElementIdsFromPath(action.repeatersToRefresh[i], eventInfo)[0]; + if(id) _tryRefreshRepeater(id, eventInfo); + } + + _dispatchAction(eventInfo, actions, index + 1); + }; + + var _tryRefreshRepeater = function(id, eventInfo) { + var idIndex = _repeatersToRefresh.indexOf(id); + if(idIndex == -1) return; + + $ax.splice(_repeatersToRefresh, idIndex, 1); + $ax.repeater.refreshRepeater(id, eventInfo); + }; + + _action.tryRefreshRepeaters = function(ids, eventInfo) { + for(var i = 0; i < ids.length; i++) _tryRefreshRepeater(ids[i], eventInfo); + }; + + _actionHandlers.scrollToWidget = function(eventInfo, actions, index) { + var action = actions[index]; + var elementIds = $ax.getElementIdsFromPath(action.objectPath, eventInfo); + if(elementIds.length > 0) $ax('#' + elementIds[0]).scroll(action.options); + + _dispatchAction(eventInfo, actions, index + 1); + }; + + + _actionHandlers.enableDisableWidgets = function(eventInfo, actions, index) { + var action = actions[index]; + for(var i = 0; i < action.pathToInfo.length; i++) { + var elementIds = $ax.getElementIdsFromPath(action.pathToInfo[i].objectPath, eventInfo); + var enable = action.pathToInfo[i].enableDisableInfo.enable; + for(var j = 0; j < elementIds.length; j++) $ax('#' + elementIds[j]).enabled(enable); + } + + _dispatchAction(eventInfo, actions, index + 1); + }; + + _actionHandlers.setImage = function(eventInfo, actions, index) { + var oldTarget = eventInfo.targetElement; + var action = actions[index]; + var view = $ax.adaptive.currentViewId; + + eventInfo.image = true; + for(var i = 0; i < action.imagesToSet.length; i++) { + var imgInfo = action.imagesToSet[i]; + imgInfo = view ? imgInfo.adaptive[view] : imgInfo.base; + var elementIds = $ax.getElementIdsFromPath(action.imagesToSet[i].objectPath, eventInfo); + + for(var j = 0; j < elementIds.length; j++) { + var elementId = elementIds[j]; + + eventInfo.targetElement = elementId; + var evaluatedImgs = _evaluateImages(imgInfo, eventInfo); + + var img = evaluatedImgs.normal; + if($ax.style.IsWidgetDisabled(elementId)) { + if(imgInfo.disabled) img = evaluatedImgs.disabled; + } else if($ax.style.IsWidgetSelected(elementId)) { + if(imgInfo.selected) img = evaluatedImgs.selected; + } else if($ax.event.mouseDownObjectId == elementId && imgInfo.mouseDown) img = evaluatedImgs.mouseDown; + else if($ax.event.mouseOverIds.indexOf(elementId) != -1 && imgInfo.mouseOver) { + img = evaluatedImgs.mouseOver; + //Update mouseOverObjectId + var currIndex = $ax.event.mouseOverIds.indexOf($ax.event.mouseOverObjectId); + var imgIndex = $ax.event.mouseOverIds.indexOf(elementId); + if(currIndex < imgIndex) $ax.event.mouseOverObjectId = elementId; + } + + // $('#' + $ax.repeater.applySuffixToElementId(elementId, '_img')).attr('src', img); + $jobj($ax.style.GetImageIdFromShape(elementId)).attr('src', img); + + //Set up overrides + $ax.style.mapElementIdToImageOverrides(elementId, evaluatedImgs); + $ax.style.updateElementIdImageStyle(elementId); + } + } + eventInfo.targetElement = oldTarget; + eventInfo.image = false; + + _dispatchAction(eventInfo, actions, index + 1); + }; + + var _evaluateImages = function(imgInfo, eventInfo) { + var retVal = {}; + for(var state in imgInfo) { + if(!imgInfo.hasOwnProperty(state)) continue; + var img = imgInfo[state].path || $ax.expr.evaluateExpr(imgInfo[state].literal, eventInfo); + if(!img) img = $axure.utils.getTransparentGifPath(); + retVal[state] = img; + } + return retVal; + }; + + $ax.clearRepeaterImageOverrides = function(repeaterId) { + var childIds = $ax.getChildElementIdsForRepeater(repeaterId); + for(var i = childIds; i < childIds.length; i++) $ax.style.deleteElementIdToImageOverride(childIds[i]); + }; + + _actionHandlers.setFocusOnWidget = function(eventInfo, actions, index) { + var action = actions[index]; + if(action.objectPaths.length > 0) { + var elementIds = $ax.getElementIdsFromPath(action.objectPaths[0], eventInfo); + if(elementIds.length > 0) { + $ax('#' + elementIds[0]).focus(); + //if select text and not in placeholder mode, then select all text + if(action.selectText && !$ax.placeholderManager.isActive(elementIds[0])) { + var elementChildren = document.getElementById(elementIds[0]).children; + //find the input or textarea element + for(var i = 0; i < elementChildren.length; i++) { + if (elementChildren[i].id.indexOf('_input') == -1) continue; + var elementTagName = elementChildren[i].tagName; + if(elementTagName && (elementTagName.toLowerCase() == "input" || elementTagName.toLowerCase() == "textarea")) { + elementChildren[i].select(); + } + } + } + } + } + + _dispatchAction(eventInfo, actions, index + 1); + }; + + _actionHandlers.expandCollapseTree = function(eventInfo, actions, index) { + var action = actions[index]; + for(var i = 0; i < action.pathToInfo.length; i++) { + var pair = action.pathToInfo[i]; + var elementIds = $ax.getElementIdsFromPath(pair.treeNodePath, eventInfo); + for(var j = 0; j < elementIds.length; j++) $ax('#' + elementIds[j]).expanded(pair.expandCollapseInfo.expand); + } + + _dispatchAction(eventInfo, actions, index + 1); + }; + + _actionHandlers.other = function(eventInfo, actions, index) { + var action = actions[index]; + $ax.navigate({ + url: $axure.utils.getOtherPath() + "#other=" + encodeURI(action.otherDescription), + target: "popup", + includeVariables: false, + popupOptions: action.popup + }); + + _dispatchAction(eventInfo, actions, index + 1); + }; + + _actionHandlers.fireEvents = function(eventInfo, actions, index) { + var action = actions[index]; + //look for the nearest element id + + var objId = eventInfo.srcElement; + var obj = $ax.getObjectFromElementId(objId); + var rdoId = obj ? $ax.getRdoParentFromElementId(objId) : ""; + var rdo = $ax.getObjectFromElementId(rdoId); + var page = rdo ? $ax.pageData.masters[rdo.masterId] : $ax.pageData.page; + + // Check if rdo should be this + var oldIsMasterEvent = eventInfo.isMasterEvent; + if (obj && $ax.public.fn.IsReferenceDiagramObject(obj.type) && eventInfo.isMasterEvent) { + rdoId = objId; + rdo = obj; + page = $ax.pageData.masters[rdo.masterId]; + } + + for(var i = 0; i < action.firedEvents.length; i++) { + var firedEvent = action.firedEvents[i]; + var isPage = firedEvent.objectPath.length == 0; + var targetObjIds = isPage ? [rdoId] : $ax.getElementIdsFromPath(firedEvent.objectPath, eventInfo); + for (var j = 0; j < targetObjIds.length; j++) { + var targetObjId = targetObjIds[j]; + var targetObj = isPage ? rdo : $ax.getObjectFromElementId(targetObjId); + + eventInfo.srcElement = targetObjId || ''; + + eventInfo.isMasterEvent = false; + var raisedEvents = firedEvent.raisedEventIds; + if(raisedEvents) { + for(var k = 0; k < raisedEvents.length; k++) { + var event = targetObj.interactionMap && targetObj.interactionMap.raised && targetObj.interactionMap.raised[raisedEvents[k]]; + if(event) $ax.event.handleEvent(targetObjId, eventInfo, event, false, true); + } + } + + if(isPage) { + eventInfo.isMasterEvent = true; + eventInfo.label = $ax.pageData.page.name; + eventInfo.friendlyType = 'Page'; + } + + var firedTarget = isPage ? page : targetObj; + var firedEventNames = firedEvent.firedEventNames; + if(firedEventNames) { + for(k = 0; k < firedEventNames.length; k++) { + event = firedTarget.interactionMap && firedTarget.interactionMap[firedEventNames[k]]; + if(event) $ax.event.handleEvent(isPage ? '' : targetObjId, eventInfo, event, false, true); + } + } + if(isPage) eventInfo.isMasterEvent = oldIsMasterEvent; + } + eventInfo.srcElement = objId; + + eventInfo.isMasterEvent = oldIsMasterEvent; + } + + _dispatchAction(eventInfo, actions, index + 1); + }; +}); diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/adaptive.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/adaptive.js" new file mode 100644 index 0000000..758467c --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/adaptive.js" @@ -0,0 +1,507 @@ +锘$axure.internal(function($ax) { + $ax.adaptive = {}; + + $axure.utils.makeBindable($ax.adaptive, ["viewChanged"]); + + var _auto = true; + var _autoIsHandledBySidebar = false; + + var _views; + var _idToView; + var _enabledViews = []; + + var _initialViewToLoad; + var _initialViewSizeToLoad; + + var _loadFinished = false; + $ax.adaptive.loadFinished = function() { + if(_loadFinished) return; + _loadFinished = true; + if($ax.adaptive.currentViewId) $ax.viewChangePageAndMasters(); + else $ax.postAdaptiveViewChanged(); + }; + + var _handleResize = function(forceSwitchTo) { + if(!_auto) return; + if(_auto && _autoIsHandledBySidebar && !forceSwitchTo) return; + + var $window = $(window); + var height = $window.height(); + var width = $window.width(); + + var toView = _getAdaptiveView(width, height); + var toViewId = toView && toView.id; + + _switchView(toViewId, forceSwitchTo); + }; + + var _setAuto = $ax.adaptive.setAuto = function(val) { + if(_auto != val) { + _auto = Boolean(val); + } + }; + + var _setLineImage = function(id, imageUrl) { + var imageQuery = $jobj(id).attr('src', imageUrl); + if(imageUrl.indexOf(".png") > -1) $ax.utils.fixPng(imageQuery[0]); + }; + + var _switchView = function (viewId, forceSwitchTo) { + if(!$ax.pageData.isAdaptiveEnabled) return; + + var previousViewId = $ax.adaptive.currentViewId; + if(typeof previousViewId == 'undefined') previousViewId = ''; + if(typeof viewId == 'undefined') viewId = ''; + if (viewId == previousViewId) { + if(forceSwitchTo) $ax.postAdaptiveViewChanged(forceSwitchTo); + return; + } + + $ax('*').each(function(obj, elementId) { + if (!$ax.public.fn.IsTreeNodeObject(obj.type)) return; + if(!obj.hasOwnProperty('isExpanded')) return; + + var query = $ax('#' + elementId); + var defaultExpanded = obj.isExpanded; + + query.expanded(defaultExpanded); + }); + + // reset all the positioning on the style tags, including size and transformation + $axure('*').each(function(diagramObject, elementId) { + var element = document.getElementById(elementId); + if(element && !diagramObject.isContained) { + var resetCss = { + top: "", left: "", width: "", height: "", opacity: "", + transform: "", webkitTransform: "", MozTransform: "", msTransform: "", OTransform: "" + }; + var query = $(element); + var children = query.children(); + var sketchyImage = $('#' + $ax.repeater.applySuffixToElementId(elementId, '_image_sketch')); + var textChildren = query.children('div.text'); + + query.css(resetCss); + if(children) children.css(resetCss); + if(sketchyImage) sketchyImage.css(resetCss); + if(textChildren) textChildren.css(resetCss); + + $ax.dynamicPanelManager.resetFixedPanel(diagramObject, element); + $ax.dynamicPanelManager.resetAdaptivePercentPanel(diagramObject, element); + } + }); + + $ax.adaptive.currentViewId = viewId; // we need to set this so the enabled and selected styles will apply properly + if(previousViewId) { + $ax.style.clearAdaptiveStyles(); + $('*').removeClass(previousViewId); + } else { + $ax.style.reselectElements(); + } + + $axure('*').each(function(obj, elementId) { + $ax.style.updateElementIdImageStyle(elementId); // When image override exists, fix styling/borders + }); + + // reset all the images only if we're going back to the default view + if(!viewId) { + _updateInputVisibility('', $axure('*')); + $axure('*').each(function(diagramObject, elementId) { + $ax.placeholderManager.refreshPlaceholder(elementId); + + var images = diagramObject.images; + if(diagramObject.type == 'horizontalLine' || diagramObject.type == 'verticalLine') { + var startImg = images['start~']; + _setLineImage(elementId + "_start", startImg); + var endImg = images['end~']; + _setLineImage(elementId + "_end", endImg); + var lineImg = images['line~']; + _setLineImage(elementId + "_line", lineImg); + } else if(diagramObject.type == $ax.constants.CONNECTOR_TYPE) { + _setAdaptiveConnectorImages(elementId, images, ''); + } else if(images) { + if (diagramObject.generateCompound) { + + if($ax.style.IsWidgetDisabled(elementId)) { + disabledImage = _getImageWithTag(images, 'disabled~'); + if(disabledImage) $ax.style.applyImage(elementId, disabledImage, 'disabled'); + return; + } + if($ax.style.IsWidgetSelected(elementId)) { + selectedImage = _getImageWithTag(images, 'selected~'); + if(selectedImage) $ax.style.applyImage(elementId, selectedImage, 'selected'); + return; + } + $ax.style.applyImage(elementId, _getImageWithTag(images, 'normal~')); + } else { + if ($ax.style.IsWidgetDisabled(elementId)) { + var disabledImage = $ax.style.getElementImageOverride(elementId, 'disabled') || images['disabled~']; + if (disabledImage) $ax.style.applyImage(elementId, disabledImage, 'disabled'); + return; + } + if ($ax.style.IsWidgetSelected(elementId)) { + var selectedImage = $ax.style.getElementImageOverride(elementId, 'selected') || images['selected~']; + if (selectedImage) $ax.style.applyImage(elementId, selectedImage, 'selected'); + return; + } + $ax.style.applyImage(elementId, $ax.style.getElementImageOverride(elementId, 'normal') || images['normal~']); + } + } + + var child = $jobj(elementId).children('.text'); + if(child.length) $ax.style.transformTextWithVerticalAlignment(child[0].id, function() { }); + }); + // we have to reset visibility if we aren't applying a new view + $ax.visibility.resetLimboAndHiddenToDefaults(); + $ax.repeater.refreshAllRepeaters(); + $ax.dynamicPanelManager.updateAllFitPanels(); + $ax.dynamicPanelManager.updatePercentPanelCache($ax('*')); + } else { + $ax.visibility.clearLimboAndHidden(); + _applyView(viewId); + $ax.repeater.refreshAllRepeaters(); + } + + $ax.adaptive.triggerEvent('viewChanged', {}); + if(_loadFinished) $ax.viewChangePageAndMasters(forceSwitchTo); + }; + + var _getImageWithTag = function(image, tag) { + var flattened = {}; + for (var component in image) { + var componentImage = image[component][tag]; + if(componentImage) flattened[component] = componentImage; + } + return flattened; + } + + // gets if input is hidden due to sketch + var BORDER_WIDTH = "borderWidth"; + var COLOR_STYLE = "colorStyle"; + var SKETCH_FACTOR = "sketchFactor"; + var _areInputsHidden = function(viewId) { + var chain = _getAdaptiveIdChain(viewId); + var page = $ax.pageData.page; + var adaptiveStyles = page.adaptiveStyles; + // keep track of props that are not sketchy, as you continue to climb up your parents; + var notSketch = []; + for(var i = chain.length - 1; i >= -1; i--) { + var style = i == -1 ? page.style : adaptiveStyles[chain[i]]; + if(notSketch.indexOf(BORDER_WIDTH) == -1 && style.hasOwnProperty(BORDER_WIDTH)) { + if(style[BORDER_WIDTH] != 0) return true; + notSketch.push(BORDER_WIDTH); + } + if(notSketch.indexOf(COLOR_STYLE) == -1 && style.hasOwnProperty(COLOR_STYLE)) { + if(style[COLOR_STYLE] != 'appliedColor') return true; + notSketch.push(COLOR_STYLE); + } + if(notSketch.indexOf(SKETCH_FACTOR) == -1 && style.hasOwnProperty(SKETCH_FACTOR)) { + if(style[SKETCH_FACTOR] != 0) return true; + notSketch.push(SKETCH_FACTOR); + } + } + return false; + }; + + var _updateInputVisibility = function(viewId, query) { + var func = _areInputsHidden(viewId) ? 'addClass' : 'removeClass'; + query.each(function(obj, elementId) { + var input = $jobj($ax.repeater.applySuffixToElementId(elementId, '_input')); + if(input.length == 0) return; + input[func]('form_sketch'); + }); + }; + + // gets the inheritance chain of a particular view. + var _getAdaptiveIdChain = $ax.adaptive.getAdaptiveIdChain = function(viewId) { + if(!viewId) return []; + var view = _idToView[viewId]; + var chain = []; + var current = view; + while(current) { + chain[chain.length] = current.id; + current = _idToView[current.baseViewId]; + } + return chain.reverse(); + }; + + var _getPageStyle = $ax.adaptive.getPageStyle = function() { + var currentViewId = $ax.adaptive.currentViewId; + var adaptiveChain = _getAdaptiveIdChain(currentViewId); + + var currentStyle = $.extend({}, $ax.pageData.page.style); + for(var i = 0; i < adaptiveChain.length; i++) { + var viewId = adaptiveChain[i]; + $.extend(currentStyle, $ax.pageData.page.adaptiveStyles[viewId]); + } + + return currentStyle; + }; + + var _setAdaptiveLineImages = function(elementId, images, viewIdChain) { + for(var i = viewIdChain.length - 1; i >= 0; i--) { + var viewId = viewIdChain[i]; + var startImg = images['start~' + viewId]; + if(startImg) { + _setLineImage(elementId + "_start", startImg); + var endImg = images['end~' + viewId]; + _setLineImage(elementId + "_end", endImg); + var lineImg = images['line~' + viewId]; + _setLineImage(elementId + "_line", lineImg); + break; + } + } + }; + + var _setAdaptiveConnectorImages = function (elementId, images, view) { + var conn = $jobj(elementId); + var count = conn.children().length-1; // -1 for rich text panel + for(var i = 0; i < count; i++) { + var img = images['' + i + '~' + view]; + $jobj(elementId + '_seg' + i).attr('src', img); + } + }; + + var _applyView = $ax.adaptive.applyView = function(viewId, query) { + var limboIds = {}; + var hiddenIds = {}; + + var jquery; + if(query) { + jquery = query.jQuery(); + jquery = jquery.add(jquery.find('*')); + var jqueryAnn = $ax.annotation.jQueryAnn(query); + jquery = jquery.add(jqueryAnn); + } else { + jquery = $('*'); + query = $ax('*'); + } + jquery.addClass(viewId); + _updateInputVisibility(viewId, query); + var viewIdChain = _getAdaptiveIdChain(viewId); + // this could be made more efficient by computing it only once per object + query.each(function(diagramObject, elementId) { + _applyAdaptiveViewOnObject(diagramObject, elementId, viewIdChain, viewId, limboIds, hiddenIds); + }); + + $ax.visibility.addLimboAndHiddenIds(limboIds, hiddenIds, query); + $ax.dynamicPanelManager.updateAllFitPanels(); + $ax.dynamicPanelManager.updatePercentPanelCache(query); + }; + + var _applyAdaptiveViewOnObject = function(diagramObject, elementId, viewIdChain, viewId, limboIds, hiddenIds) { + var adaptiveChain = []; + for(var i = 0; i < viewIdChain.length; i++) { + var viewId = viewIdChain[i]; + var viewStyle = diagramObject.adaptiveStyles[viewId]; + if(viewStyle) { + adaptiveChain[adaptiveChain.length] = viewStyle; + if (viewStyle.size) $ax.public.fn.convertToSingleImage($jobj(elementId)); + } + } + + var state = $ax.style.generateState(elementId); + + // set the image + var images = diagramObject.images; + if(images) { + if(diagramObject.type == 'horizontalLine' || diagramObject.type == 'verticalLine') { + _setAdaptiveLineImages(elementId, images, viewIdChain); + } else if (diagramObject.type == $ax.constants.CONNECTOR_TYPE) { + _setAdaptiveConnectorImages(elementId, images, viewId); + } else if (diagramObject.generateCompound) { + var compoundUrl = _matchImageCompound(diagramObject, elementId, viewIdChain, state); + if (compoundUrl) $ax.style.applyImage(elementId, compoundUrl, state); + }else { + var imgUrl = _matchImage(elementId, images, viewIdChain, state); + if(imgUrl) $ax.style.applyImage(elementId, imgUrl, state); + } + // for(var i = viewIdChain.length - 1; i >= 0; i--) { + // var viewId = viewIdChain[i]; + // var imgUrl = $ax.style.getElementImageOverride(elementId, state) || images[state + '~' + viewId] || images['normal~' + viewId]; + // if(imgUrl) { + // $ax.style.applyImage(elementId, imgUrl, state); + // break; + // } + // } + + // } + } + // addaptive override style (not including default style props) + var adaptiveStyle = $ax.style.computeAllOverrides(elementId, undefined, state, viewId); + + // this style INCLUDES the object's my style + var compoundStyle = $.extend({}, diagramObject.style, adaptiveStyle); + + //$ax.style.setAdaptiveStyle(elementId, adaptiveStyle); + if(!diagramObject.isContained) { + $ax.style.setAdaptiveStyle(elementId, adaptiveStyle); + } + + var scriptId = $ax.repeater.getScriptIdFromElementId(elementId); + if(compoundStyle.limbo && !diagramObject.isContained) limboIds[scriptId] = true; + // sigh, javascript. we need the === here because undefined means not overriden + if(compoundStyle.visible === false) hiddenIds[scriptId] = true; + }; + + var _matchImage = function(id, images, viewIdChain, state) { + var override = $ax.style.getElementImageOverride(id, state); + if(override) return override; + + if(!images) return undefined; + + // first check all the images for this state + for(var i = viewIdChain.length - 1; i >= 0; i--) { + var viewId = viewIdChain[i]; + var img = images[state + "~" + viewId]; + if(img) return img; + } + // check for the default state style + var defaultStateImage = images[state + '~']; + if(defaultStateImage) return defaultStateImage; + + state = $ax.style.progessState(state); + if(state) return _matchImage(id, images, viewIdChain, state); + + // SHOULD NOT REACH HERE! NORMAL SHOULD ALWAYS CATCH AT THE DEFAULT! + return images['normal~']; // this is the default + }; + + var _matchImageCompound = function(diagramObject, id, viewIdChain, state) { + var images = []; + for(var i = 0; i < diagramObject.compoundChildren.length; i++) { + var component = diagramObject.compoundChildren[i]; + images[component] = _matchImage(id, diagramObject.images[component], viewIdChain, state); + } + return images; + }; + + + + $ax.adaptive.getImageForStateAndView = function(id, state) { + var viewIdChain = _getAdaptiveIdChain($ax.adaptive.currentViewId); + var diagramObject = $ax.getObjectFromElementId(id); + if (diagramObject.generateCompound) return _matchImageCompound(diagramObject, id, viewIdChain, state); + else return _matchImage(id, diagramObject.images, viewIdChain, state); + }; + + var _getAdaptiveView = function(winWidth, winHeight) { + var _isViewOneGreaterThanTwo = function(view1, view2) { + return view1.size.width > view2.size.width || (view1.size.width == view2.size.width && view1.size.height > view2.size.height); + }; + + var _isViewOneLessThanTwo = function(view1, view2) { + var width2 = view2.size.width || 1000000; // artificially large number + var height2 = view2.size.height || 1000000; + + var width1 = view1.size.width || 1000000; + var height1 = view1.size.height || 1000000; + + return width1 < width2 || (width1 == width2 && height1 < height2); + }; + + var _isWindowGreaterThanView = function(view, width, height) { + return width >= view.size.width && height >= view.size.height; + }; + + var _isWindowLessThanView = function(view1, width, height) { + var viewWidth = view1.size.width || 1000000; + var viewHeight = view1.size.height || 1000000; + + return width <= viewWidth && height <= viewHeight; + }; + + var greater = undefined; + var less = undefined; + + for(var i = 0; i < _enabledViews.length; i++) { + var view = _enabledViews[i]; + if(view.condition == ">=") { + if(_isWindowGreaterThanView(view, winWidth, winHeight)) { + if(!greater || _isViewOneGreaterThanTwo(view, greater)) greater = view; + } + } else { + if(_isWindowLessThanView(view, winWidth, winHeight)) { + if(!less || _isViewOneLessThanTwo(view, less)) less = view; + } + } + } + return less || greater; + }; + + var _isAdaptiveInitialized = function() { + return typeof _idToView != 'undefined'; + }; + + $ax.messageCenter.addMessageListener(function(message, data) { + //If the adaptive plugin hasn't been initialized yet then + //save the view to load so that it can get set when initialize occurs + if(message == 'switchAdaptiveView') { + var href = window.location.href.split('#')[0]; + var lastSlash = href.lastIndexOf('/'); + href = href.substring(lastSlash + 1); + if(href != data.src) return; + + var view = data.view == 'auto' ? undefined : (data.view == 'default' ? '' : data.view); + + if(!_isAdaptiveInitialized()) { + _initialViewToLoad = view; + } else _handleLoadViewId(view); + } else if(message == 'setAdaptiveViewForSize') { + _autoIsHandledBySidebar = true; + if(!_isAdaptiveInitialized()) { + _initialViewSizeToLoad = data; + } else _handleSetViewForSize(data.width, data.height); + } + }); + + $ax.adaptive.setAdaptiveView = function(view) { + var viewIdForSitemapToUnderstand = view == 'auto' ? undefined : (view == 'default' ? '' : view); + + if(!_isAdaptiveInitialized()) { + _initialViewToLoad = viewIdForSitemapToUnderstand; + } else _handleLoadViewId(viewIdForSitemapToUnderstand); + }; + + $ax.adaptive.initialize = function() { + _views = $ax.document.adaptiveViews; + _idToView = {}; + + if(_views && _views.length > 0) { + for(var i = 0; i < _views.length; i++) { + var view = _views[i]; + _idToView[view.id] = view; + } + + var enabledViewIds = $ax.document.configuration.enabledViewIds; + for(var i = 0; i < enabledViewIds.length; i++) { + _enabledViews[_enabledViews.length] = _idToView[enabledViewIds[i]]; + } + + if(_autoIsHandledBySidebar && _initialViewSizeToLoad) _handleSetViewForSize(_initialViewSizeToLoad.width, _initialViewSizeToLoad.height); + else _handleLoadViewId(_initialViewToLoad); + } + + $axure.resize(function(e) { + _handleResize(); + $ax.postResize(e); //window resize fires after view changed + }); + }; + + var _handleLoadViewId = function (loadViewId, forceSwitchTo) { + if(typeof loadViewId != 'undefined') { + _setAuto(false); + _switchView(loadViewId != 'default' ? loadViewId : '', forceSwitchTo); + } else { + _setAuto(true); + _handleResize(forceSwitchTo); + } + }; + + var _handleSetViewForSize = function (width, height) { + if(!_auto) return; + + var toView = _getAdaptiveView(width, height); + var toViewId = toView && toView.id; + _switchView(toViewId); + }; +}); \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/annotation.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/annotation.js" new file mode 100644 index 0000000..d5f3b8c --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/annotation.js" @@ -0,0 +1,176 @@ +锘// ******* Annotation MANAGER ******** // +$axure.internal(function($ax) { + var NOTE_SIZE = 10; + + var _annotationManager = $ax.annotation = {}; + + var _updateLinkLocations = $ax.annotation.updateLinkLocations = function(textId) { + var diagramObject = $ax.getObjectFromElementId(textId); + var rotation = (diagramObject && diagramObject.style.rotation); + var shapeId = $ax.style.GetShapeIdFromText(textId); + + //we have to do this because webkit reports the post-transform position but when you set + //positions it's pre-transform + if(WEBKIT && rotation) { + //we can dynamiclly rotate a widget now, show need to remember the transform rather than just remove it + //here jquery.css will return 'none' if element is display none + var oldShapeTransform = document.getElementById(shapeId).style['-webkit-transform']; + var oldTextTransform = document.getElementById(textId).style['-webkit-transform']; + $('#' + shapeId).css('-webkit-transform', 'scale(1)'); + $('#' + textId).css('-webkit-transform', 'scale(1)'); + } + + $('#' + textId).find('span[id$="_ann"]').each(function(index, value) { + var elementId = value.id.replace('_ann', ''); + + var annPos = $(value).position(); + var left = annPos.left - NOTE_SIZE; + var top = annPos.top; + + $('#' + elementId + 'Note').css('left', left).css('top', top); + }); + + //undo the transform reset + if(WEBKIT && rotation) { + $('#' + shapeId).css('-webkit-transform', oldShapeTransform || ''); + $('#' + textId).css('-webkit-transform', oldTextTransform || ''); + } + }; + + var dialogs = {}; + $ax.annotation.ToggleWorkflow = function(event, id, width, height) { + + if(dialogs[id]) { + var $dialog = dialogs[id]; + // reset the dialog + dialogs[id] = undefined; + if($dialog.dialog("isOpen")) { + $dialog.dialog("close"); + return; + } + } + + // we'll need to save the scroll position just for stupid IE which will skip otherwise + var win = $(window); + var scrollY = win.scrollTop(); + var scrollX = win.scrollLeft(); + + var bufferH = 10; + var bufferV = 10; + var blnLeft = false; + var blnAbove = false; + var sourceTop = event.pageY - scrollY; + var sourceLeft = event.pageX - scrollX; + + if(sourceLeft > width + bufferH) { + blnLeft = true; + } + if(sourceTop > height + bufferV) { + blnAbove = true; + } + + var top = 0; + var left = 0; + if(blnAbove) top = sourceTop - height - 20; + else top = sourceTop + 10; + if(blnLeft) left = sourceLeft - width - 4; + else left = sourceLeft - 6; + + $ax.globals.MaxZIndex = $ax.globals.MaxZIndex + 1; + if(IE_10_AND_BELOW) height += 50; + + var dObj = $ax.getObjectFromElementId(id); + var ann = dObj.annotation; + var $dialog = $('
    ') + .appendTo('body') + .html($ax.legacy.GetAnnotationHtml(ann)) + .dialog({ + title: dObj.label, + width: width, + height: height, + minHeight: 150, + zIndex: $ax.globals.MaxZIndex, + position: [left, top], + dialogClass: 'dialogFix', + autoOpen: false + }); + $dialog.parent().appendTo('#base'); + $dialog.dialog('open'); + dialogs[id] = $dialog; + + // scroll ... just for IE + window.scrollTo(scrollX, scrollY); + }; + + $ax.annotation.InitializeAnnotations = function (query) { + if(!$ax.document.configuration.showAnnotations) return; + + query.each(function(dObj, elementId) { + if(!dObj.annotation) return; + + if(dObj.type == 'hyperlink') { + var textId = $ax.style.GetTextIdFromLink(elementId); + + var elementIdQuery = $('#' + elementId); + elementIdQuery.after(""); + + if($ax.document.configuration.useLabels) { + var label = $('#' + elementId).attr("data-label"); + if(!label || label == "") label = "?"; + $('#' + textId).append("
    " + label + "
    "); + } else { + $('#' + textId).append("
    "); + } + $('#' + elementId + 'Note').click(function(e) { + $ax.annotation.ToggleWorkflow(e, elementId, 300, 200, false); + return false; + }); + + _updateLinkLocations(textId); + } else { + if($ax.document.configuration.useLabels) { + var label = $('#' + elementId).attr("data-label"); + if(!label || label == "") label = "?"; + $('#' + elementId + "_ann").append("
    " + label + "
    "); + } else { + $('#' + elementId + "_ann").append("
    "); + } + $('#' + elementId + 'Note').click(function(e) { + $ax.annotation.ToggleWorkflow(e, elementId, 300, 200, false); + return false; + }); + } + + $('#' + elementId + 'Note.annnoteimage').append("
    "); + }); + }; + + $ax.annotation.jQueryAnn = function(query) { + var elementIds = []; + query.each(function(diagramObject, elementId) { + if(diagramObject.annotation) elementIds[elementIds.length] = elementId; + }); + var elementIdSelectors = jQuery.map(elementIds, function(elementId) { return '#' + elementId + '_ann'; }); + var jQuerySelectorText = (elementIdSelectors.length > 0) ? elementIdSelectors.join(', ') : ''; + return $(jQuerySelectorText); + }; + + $(window.document).ready(function() { + $ax.annotation.InitializeAnnotations($ax(function(dObj) { return dObj.annotation; })); + + $ax.messageCenter.addMessageListener(function(message, data) { + //If the annotations are being hidden via the Sitemap toggle button, hide any open dialogs + if(message == 'annotationToggle') { + if(data == false) { + for(var index in dialogs) { + var $dialog = dialogs[index]; + if($dialog.dialog("isOpen")) { + $dialog.dialog("close"); + } + } + } + } + }); + }); + +}); \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/axQuery.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/axQuery.js" new file mode 100644 index 0000000..f918843 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/axQuery.js" @@ -0,0 +1,367 @@ +锘$axure = function(query) { + return $axure.query(query); +}; + +// ******* AxQuery and Page metadata ******** // +(function() { + var $ax = function() { + var returnVal = $axure.apply(this, arguments); + var axFn = $ax.fn; + for (var key in axFn) { + returnVal[key] = axFn[key]; + } + + return returnVal; + }; + + $ax.public = $axure; + $ax.fn = {}; + + $axure.internal = function(initFunction) { + //Attach messagecenter to $ax object so that it can be used in viewer.js, etc in internal scope + if(!$ax.messageCenter) $ax.messageCenter = $axure.messageCenter; + + return initFunction($ax); + }; + + var _lastFiredResize = 0; + var _resizeFunctions = []; + var _lastTimeout; + var _fireResize = function() { + if (_lastTimeout) window.clearTimeout(_lastTimeout); + _lastTimeout = undefined; + _lastFiredResize = new Date().getTime(); + for(var i = 0; i < _resizeFunctions.length; i++) _resizeFunctions[i](); + }; + + $axure.resize = function(fn) { + if(fn) _resizeFunctions[_resizeFunctions.length] = fn; + else $(window).resize(); + }; + + $(window).resize(function() { + var THRESHOLD = 50; + var now = new Date().getTime(); + if(now - _lastFiredResize > THRESHOLD) { + _fireResize(); + } else if(!_lastTimeout) { + _lastTimeout = window.setTimeout(_fireResize, THRESHOLD); + } + }); + + window.$obj = function(id) { + return $ax.getObjectFromElementId(id); + }; + + window.$id = function(obj) { + return obj.scriptIds[0]; + }; + + window.$jobj = function(id) { + return $(document.getElementById(id)); + }; + + window.$jobjAll = function(id) { + return $addAll($jobj(id), id); + }; + + window.$addAll = function(jobj, id) { + return jobj.add($jobj(id + '_ann')).add($jobj(id + '_ref')); + }; + + $ax.INPUT = function(id) { return id + "_input"; }; + $ax.IsImageFocusable = function (type) { return $ax.public.fn.IsImageBox(type) || $ax.public.fn.IsVector(type) || $ax.public.fn.IsTreeNodeObject(type) || $ax.public.fn.IsTableCell(type); }; + $ax.IsTreeNodeObject = function (type) { return $ax.public.fn.IsTreeNodeObject(type); }; + $ax.IsSelectionButton = function (type) { return $ax.public.fn.IsCheckBox(type) || $ax.public.fn.IsRadioButton(type); }; + + var _fn = {}; + $axure.fn = _fn; + $axure.fn.jQuery = function() { + var elements = this.getElements(); + return $(elements); + }; + $axure.fn.$ = $axure.fn.jQuery; + + var _query = function(query, queryArg) { + var returnVal = {}; + var _axQueryObject = returnVal.query = { }; + _axQueryObject.filterFunctions = []; + + if (query == '*') { + _axQueryObject.filterFunctions[0] = function() { return true; }; + } else if (typeof(query) === 'function') { + _axQueryObject.filterFunctions[0] = query; + } else { + var firstString = $.trim(query.toString()); + if (firstString.charAt(0) == '@') { + _axQueryObject.filterFunctions[0] = function(diagramObject) { + return diagramObject.label == firstString.substring(1); + }; + } else if (firstString.charAt(0) == '#') { + _axQueryObject.elementId = firstString.substring(1); + } else { + if (firstString == 'label') { + _axQueryObject.filterFunctions[0] = function(diagramObject) { + return queryArg instanceof Array && queryArg.indexOf(diagramObject.label) > 0 || + queryArg instanceof RegExp && queryArg.test(diagramObject.label) || + diagramObject.label == queryArg; + }; + } else if(firstString == 'elementId') { + _axQueryObject.filterFunctions[0] = function(diagramObject, elementId) { + return queryArg instanceof Array && queryArg.indexOf(elementId) > 0 || + elementId == queryArg; + }; + } + } + } + + var axureFn = $axure.fn; + for (var key in axureFn) { + returnVal[key] = axureFn[key]; + } + return returnVal; + }; + $axure.query = _query; + + var _getFilterFnFromQuery = function(query) { + var filter = function(diagramObject, elementId) { + // Non diagram objects are allowed to be queryed, such as text inputs. + if (diagramObject && !$ax.public.fn.IsReferenceDiagramObject(diagramObject.type) && !document.getElementById(elementId)) return false; + var retVal = true; + for(var i = 0; i < query.filterFunctions.length && retVal; i++) { + retVal = query.filterFunctions[i](diagramObject, elementId); + } + return retVal; + }; + return filter; + }; + + $ax.public.fn.filter = function(query, queryArg) { + var returnVal = _query(query, queryArg); + + if(this.query.elementId) returnVal.query.elementId = this.query.elementId; + + //If there is already a function, offset by 1 when copying other functions over. + var offset = returnVal.query.filterFunctions[0] ? 1 : 0; + + //Copy all functions over to new array. + for(var i = 0; i < this.query.filterFunctions.length; i++) returnVal.query.filterFunctions[i+offset] = this.query.filterFunctions[i]; + + //Functions are in reverse order now + returnVal.query.filterFunctions.reverse(); + + return returnVal; + }; + + $ax.public.fn.each = function(fn) { + var filter = _getFilterFnFromQuery(this.query); + var elementIds = this.query.elementId ? [this.query.elementId] : $ax.getAllElementIds(); + for (var i = 0; i < elementIds.length; i++) { + var elementId = elementIds[i]; + var diagramObject = $ax.getObjectFromElementId(elementId); + if (filter(diagramObject, elementId)) { + fn.apply(diagramObject, [diagramObject, elementId]); + } + } + }; + + $ax.public.fn.getElements = function() { + var elements = []; + this.each(function(dObj, elementId) { + var elementById = document.getElementById(elementId); + if(elementById) elements[elements.length] = elementById; + }); + return elements; + }; + + $ax.public.fn.getElementIds = function() { + var elementIds = []; + this.each(function(dObj, elementId) { elementIds[elementIds.length] = elementId; }); + return elementIds; + }; + + // Deep means to keep getting parents parent until at the root parent. Parent is then an array instead of an id. + // Filter options: layer, rdo, repeater, item, dynamicPanel, state + $ax.public.fn.getParents = function (deep, filter) { + if(filter == '*') filter = ['layer', 'rdo', 'repeater', 'item', 'dynamicPanel', 'state']; + var elementIds = this.getElementIds(); + var parentIds = []; + + var getParent = function(elementId) { + var containerIndex = elementId.indexOf('_container'); + if(containerIndex != -1) elementId = elementId.substring(0, containerIndex); + + // Layer only references it if it is a direct layer to it + var parent = $ax.getLayerParentFromElementId(elementId); + // If layer is allowed we found parent, otherwise ignore and keep climbing + if (parent) return filter.indexOf('layer') != -1 ? parent : getParent(parent); + + // if repeater item, then just return repeater + var scriptId = $ax.repeater.getScriptIdFromElementId(elementId); + var itemNum = $ax.repeater.getItemIdFromElementId(elementId); + var parentRepeater = $ax.getParentRepeaterFromScriptId(scriptId); + + // scriptId is item or repeater itself + if (parentRepeater == scriptId) { + // If you are repeater item, return your repeater + if(itemNum) return filter.indexOf('repeater') != -1 ? scriptId : getParent(scriptId); + // Otherwise you are actually at repeater, clean parentRepeater, or else you loop + parentRepeater = undefined; + } + + // if state, then just return panel + if(scriptId.indexOf('_state') != -1) { + var panelId = $ax.repeater.createElementId(scriptId.split('_')[0], itemNum); + // If dynamic panel is allowed we found parent, otherwise ignore and keep climbing + return filter.indexOf('dynamicPanel') != -1 ? panelId : getParent(panelId); + } + + var parentType = ''; + if(parentRepeater) { + parentType = 'item'; + parent = $ax.repeater.createElementId(parentRepeater, itemNum); + } + + var masterPath = $ax.getPathFromScriptId($ax.repeater.getScriptIdFromElementId(elementId)); + masterPath.pop(); + if(masterPath.length > 0) { + var masterId = $ax.getElementIdFromPath(masterPath, { itemNum: itemNum }); + if(!masterId) return undefined; + var masterRepeater = $ax.getParentRepeaterFromElementId($ax.repeater.getScriptIdFromElementId(masterId)); + if(!parentRepeater || masterRepeater) { + parentType = 'rdo'; + parent = masterId; + } + } + + var obj = $obj(elementId); + var parentDynamicPanel = obj.parentDynamicPanel; + if(parentDynamicPanel) { + // Make sure the parent if not parentRepeater, or dynamic panel is also in that repeater + // If there is a parent master, the dynamic panel must be in it, otherwise parentDynamicPanel would be undefined. + var panelPath = masterPath; + panelPath[panelPath.length] = parentDynamicPanel; + panelId = $ax.getElementIdFromPath(panelPath, { itemNum: itemNum }); + if(!panelId) return undefined; + var panelRepeater = $ax.getParentRepeaterFromElementId(panelId); + if(!parentRepeater || panelRepeater) { + parentType = 'state'; + parent = panelId + '_state' + obj.panelIndex; + } + } + + // If at top or parent type is desired, then return parent, otherwise keep climbing + return !parent || filter.indexOf(parentType) != -1 ? parent : getParent(parent); + }; + + for(var i = 0; i < elementIds.length; i++) { + var parent = getParent(elementIds[i]); + if(deep) { + var parents = []; + while(parent) { + parents[parents.length] = parent; + // If id is not a valid object, you are either repeater item or dynamic panel state + //if(!$obj(parent)) parent = $ax.visibility.getWidgetFromContainer($jobj(parent).parent().attr('id')); + + parent = getParent(parent); + } + parent = parents; + } + parentIds[parentIds.length] = parent; + } + return parentIds; + }; + + // Get the path to the child, where non leaf nodes can be masters, layers, dynamic panels, and repeaters. + $ax.public.fn.getChildren = function(deep) { + var elementIds = this.getElementIds(); + var children = []; + + var getChildren = function(elementId) { + var obj = $obj(elementId); + if(!obj) return undefined; + + var isRepeater = obj.type == $ax.constants.REPEATER_TYPE; + var isDynamicPanel = obj.type == $ax.constants.DYNAMIC_PANEL_TYPE; + var isLayer = obj.type == $ax.constants.LAYER_TYPE; + var isMaster = obj.type == $ax.constants.MASTER_TYPE; + + var isMenu = obj.type == $ax.constants.MENU_OBJECT_TYPE; + var isTreeNode = obj.type == $ax.constants.TREE_NODE_OBJECT_TYPE; + var isTable = obj.type == $ax.constants.TABLE_TYPE; + //var isCompoundVector = obj.type == $ax.constants.VECTOR_SHAPE_TYPE && obj.generateCompound; + + if (isRepeater || isDynamicPanel || isLayer || isMaster || isMenu || isTreeNode || isTable) {// || isCompoundVector) { + // Find parent that children should be pulled from. Default is just the elementId query (used by table and master) + var parent = $jobj(elementId); + if(isRepeater) { + parent = $(); + var itemIds = $ax.getItemIdsForRepeater(elementId); + for(var itemIndex = 0; itemIndex < itemIds.length; itemIndex++) parent = parent.add($jobj($ax.repeater.createElementId(elementId, itemIds[itemIndex]))); + } else if(isDynamicPanel) { + // Really only need to do active state probably... + parent = $jobj(elementId).children(); + // Get through all containers + while ($(parent[0]).attr('id').indexOf('container') != -1) parent = parent.children(); + // Now at states, but want states content + parent = parent.children(); + } else if(isTreeNode) parent = $jobj($ax.repeater.applySuffixToElementId(elementId, '_children')); + + // Menu doesn't want all children, only tables and menus, so it must be handled specially + var children = isMenu ? parent.children('.ax_table').add(parent.children('.ax_menu')) : parent.children(); + children = $ax.visibility.getRealChildren(_fixForBasicLinks(children)); + + // For tree nodes you want the the button shape contained by the elementQuery too + if(isTreeNode) { + var treeNodeChildren = $jobj(elementId).children(); + for(var treeNodeIndex = 0; treeNodeIndex < treeNodeChildren.length; treeNodeIndex++) { + var treeNodeChild = $(treeNodeChildren[treeNodeIndex]); + var childObj = $obj(treeNodeChild.attr('id')); + if (childObj && $ax.public.fn.IsVector(childObj.type)) children = children.add(treeNodeChild); + } + } + + + var childrenIds = []; + for(var childIndex = 0; childIndex < children.length; childIndex++) { + var childObj = $(children[childIndex]); + var id = childObj.attr('id'); + if(typeof(id) == 'undefined' && childObj.is('a')) id = $(childObj.children()[0]).attr('id'); + // Ignore annotations and any other children that are not elements + if (id.split('_').length > 1) continue; + + childrenIds.push(id); + } + + if(deep) { + var childObjs = []; + for(var i = 0; i < childrenIds.length; i++) { + var childId = childrenIds[i]; + childObjs[i] = { id: childId, children: getChildren(childId) }; + } + childrenIds = childObjs; + } + + return childrenIds; + } + + return undefined; + }; + + for(var i = 0; i < elementIds.length; i++) { + children[children.length] = { id : elementIds[i], children : getChildren(elementIds[i])}; + } + return children; + }; + + var _fixForBasicLinks = function(query) { + var retval = $(); + for(var i = 0; i < query.length; i++) { + var child = $(query[i]); + if(child.hasClass('basiclink')) retval = retval.add(child.children()); + else retval = retval.add(child); + } + return retval; + }; + +})(); \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/axQuery.std.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/axQuery.std.js" new file mode 100644 index 0000000..90d8d5d --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/axQuery.std.js" @@ -0,0 +1,1269 @@ +锘// ******* AxQuery Plugins ******** // + +$axure.internal(function($ax) { + $ax.constants = {}; + + $ax.constants.TABLE_TYPE = 'table'; + $ax.constants.MENU_OBJECT_TYPE = 'menuObject'; + $ax.constants.MASTER_TYPE = 'master'; + $ax.constants.PAGE_TYPE = 'page'; + $ax.constants.REFERENCE_DIAGRAM_OBJECT_TYPE = 'referenceDiagramObject'; + $ax.constants.REPEATER_TYPE = 'repeater'; + $ax.constants.DYNAMIC_PANEL_TYPE = 'dynamicPanel'; + $ax.constants.LAYER_TYPE = 'layer'; + $ax.constants.TEXT_BOX_TYPE = 'textBox'; + $ax.constants.TEXT_AREA_TYPE = 'textArea'; + $ax.constants.LIST_BOX_TYPE = 'listBox'; + $ax.constants.COMBO_BOX_TYPE = 'comboBox'; + $ax.constants.CHECK_BOX_TYPE = 'checkbox'; + $ax.constants.RADIO_BUTTON_TYPE = 'radioButton'; + $ax.constants.BUTTON_TYPE = 'button'; //html button + $ax.constants.IMAGE_MAP_REGION_TYPE = 'imageMapRegion'; + $ax.constants.IMAGE_BOX_TYPE = 'imageBox'; + $ax.constants.VECTOR_SHAPE_TYPE = 'vectorShape'; + $ax.constants.SNAPSHOT_TYPE = 'screenshot'; + $ax.constants.TREE_NODE_OBJECT_TYPE = 'treeNodeObject'; + $ax.constants.TABLE_CELL_TYPE = 'tableCell'; + $ax.constants.VERTICAL_LINE_TYPE = 'verticalLine'; + $ax.constants.HORIZONTAL_LINE_TYPE = 'horizontalLine'; + $ax.constants.INLINE_FRAME_TYPE = 'inlineFrame'; + $ax.constants.CONNECTOR_TYPE = 'connector'; + $ax.constants.ALL_TYPE = '*'; + + $ax.public.fn.IsTable = function (type) { return type == $ax.constants.TABLE_TYPE; } + $ax.public.fn.IsMenuObject = function (type) { return type == $ax.constants.MENU_OBJECT_TYPE; } + $ax.public.fn.IsMaster = function (type) { return type == $ax.constants.MASTER_TYPE; } + $ax.public.fn.IsPage = function (type) { return type == $ax.constants.PAGE_TYPE; } + $ax.public.fn.IsReferenceDiagramObject = function (type) { return type == $ax.constants.REFERENCE_DIAGRAM_OBJECT_TYPE; } + $ax.public.fn.IsRepeater = function (type) { return type == $ax.constants.REPEATER_TYPE; } + $ax.public.fn.IsDynamicPanel = function (type) { return type == $ax.constants.DYNAMIC_PANEL_TYPE; } + $ax.public.fn.IsLayer = function (type) { return type == $ax.constants.LAYER_TYPE; } + $ax.public.fn.IsTextBox = function (type) { return type == $ax.constants.TEXT_BOX_TYPE; } + $ax.public.fn.IsTextArea = function (type) { return type == $ax.constants.TEXT_AREA_TYPE; } + $ax.public.fn.IsListBox = function (type) { return type == $ax.constants.LIST_BOX_TYPE; } + $ax.public.fn.IsComboBox = function (type) { return type == $ax.constants.COMBO_BOX_TYPE; } + $ax.public.fn.IsCheckBox = function (type) { return type == $ax.constants.CHECK_BOX_TYPE; } + $ax.public.fn.IsRadioButton = function (type) { return type == $ax.constants.RADIO_BUTTON_TYPE; } + $ax.public.fn.IsButton = function (type) { return type == $ax.constants.BUTTON_TYPE; } + $ax.public.fn.IsIamgeMapRegion = function (type) { return type == $ax.constants.IMAGE_MAP_REGION_TYPE; } + $ax.public.fn.IsImageBox = function (type) { return type == $ax.constants.IMAGE_BOX_TYPE; } + $ax.public.fn.IsVector = function (type) { return type == $ax.constants.VECTOR_SHAPE_TYPE; } + $ax.public.fn.IsSnapshot = function (type) { return type == $ax.constants.SNAPSHOT_TYPE; } + $ax.public.fn.IsTreeNodeObject = function (type) { return type == $ax.constants.TREE_NODE_OBJECT_TYPE; } + $ax.public.fn.IsTableCell = function (type) { return type == $ax.constants.TABLE_CELL_TYPE; } + $ax.public.fn.IsInlineFrame = function (type) { return type == $ax.constants.INLINE_FRAME_TYPE; } + $ax.public.fn.IsConnector = function (type) { return type == $ax.constants.CONNECTOR_TYPE; } + + var PLAIN_TEXT_TYPES = [$ax.constants.TEXT_BOX_TYPE, $ax.constants.TEXT_AREA_TYPE, $ax.constants.LIST_BOX_TYPE, + $ax.constants.COMBO_BOX_TYPE, $ax.constants.CHECK_BOX_TYPE, $ax.constants.RADIO_BUTTON_TYPE, $ax.constants.BUTTON_TYPE]; + + var _addJQueryFunction = function(name) { + $ax.public.fn[name] = function() { + var val = $.fn[name].apply(this.jQuery(), arguments); + return arguments[0] ? this : val; + }; + }; + var _jQueryFunctionsToAdd = ['text', 'val', 'css']; + for (var jqueryFunctionIndex = 0; jqueryFunctionIndex < _jQueryFunctionsToAdd.length; jqueryFunctionIndex++) _addJQueryFunction(_jQueryFunctionsToAdd[jqueryFunctionIndex]); + + + // var _addJQueryEventFunction = function(name) { + // $ax.public.fn[name] = function() { + // $.fn[name].apply(this.jQuery(), arguments); + // return this; + // }; + // }; + + // var _addJQueryEventFunction = function(name) { + // $ax.public.fn[name] = (function(nn) { + // return function() { + // $.fn[nn].apply(this.jQuery(), arguments); + // return this; + // }; + // })(name); + // }; + + var _addJQueryEventFunction = function(name) { + $ax.public.fn[name] = function() { + //With Martin - No idea why this is necessary. We tried encapsulating the function thinking it was related to closure (above), + //but that didn't fix the problem. If we don't add this Repeaters will give "Uncaught TypeError: Object # has no method 'apply'" + //here (but Indeterminately, often on larger/slower Repeaters) because it is Undefined. However it seems the catch is never hit + //if we surround the statement with the try/catch. Perhaps the try/catch block creates a scope or closure. + try { + $.fn[name].apply(this.jQuery(), arguments); + } catch(e) { + console.log("Couldn't find the event: " + name); + } + + return this; + }; + }; + var _jQueryEventFunctionsToAdd = ['click', 'mouseenter', 'mouseleave', 'bind']; + for(var jqueryEventIndex = 0; jqueryEventIndex < _jQueryEventFunctionsToAdd.length; jqueryEventIndex++) _addJQueryEventFunction(_jQueryEventFunctionsToAdd[jqueryEventIndex]); + + + $ax.public.fn.openLink = function(url, includeVariables) { + this.jQuery().each(function() { + if(!($(this).is('iframe'))) { + return; + } + + var objIframe = $(this).get(0); + + $ax.navigate({ + url: url, + target: "frame", + includeVariables: includeVariables, + frame: objIframe + }); + }); + + return this; + }; + + $ax.public.fn.SetPanelState = function(stateNumber, options, showWhenSet) { + + var animateInInfo = _getAnimateInfo(options && options.animateIn, 500); + var animateOutInfo = _getAnimateInfo(options && options.animateOut, 500); + + var elementIds = this.getElementIds(); + + for(var index = 0; index < elementIds.length; index++) { + var elementId = elementIds[index]; + if ($ax.public.fn.IsDynamicPanel($ax.getTypeFromElementId(elementId))) { + var stateName = $ax.visibility.GetPanelStateId(elementId, Number(stateNumber) - 1); + var wasVisible = $ax.visibility.IsIdVisible(elementId); + // If compressing because you are fit to content and the change of state may change size, must be before the change. + if(options.compress && $ax.dynamicPanelManager.isIdFitToContent(elementId) && wasVisible) { + $ax.dynamicPanelManager.compressDelta(elementId, $ax.visibility.GetPanelState(elementId), stateName, options.vertical, options.compressEasing, options.compressDuration); + } + $ax.visibility.SetPanelState(elementId, stateName, animateOutInfo.easingType, animateOutInfo.direction, animateOutInfo.duration, + animateInInfo.easingType, animateInInfo.direction, animateInInfo.duration, showWhenSet); + // If compressing because of a show, must be after state is set. + if(options.compress && !wasVisible && showWhenSet) { + $ax.dynamicPanelManager.compressToggle(elementId, options.vertical, true, options.compressEasing, options.compressDuration); + } + } + } + + return this; + }; + + $ax.public.fn.show = function(options, eventInfo) { + var elementIds = this.getElementIds(); + + for(var index = 0; index < elementIds.length; index++) { + var elementId = elementIds[index]; + + var lightboxId = $ax.repeater.applySuffixToElementId(elementId, '_lightbox'); + var lightbox = $jobj(lightboxId); + if(options && options.showType == 'lightbox') { + $ax.flyoutManager.unregisterPanel(elementId, true); + // Add lightbox if there isn't one + if(lightbox.length == 0) { + lightbox = $('
    '); + lightbox.attr('id', lightboxId); + var color = 'rgb(' + options.lightbox.r + ',' + options.lightbox.g + ',' + options.lightbox.b + ')'; + lightbox.css({ + position: 'fixed', + left: '0px', + top: '0px', + width: '10000px', + height: '10000px', + 'background-color': color, + opacity: options.lightbox.a / 255 + }); + + var parents = $ax('#' + elementId).getParents(true, ['dynamicPanel'])[0]; + var fixedParentPanelId = undefined; + for(var j = 0; j < parents.length; j++) { + var parentId = parents[j]; + if($jobj(parentId).css('z-index') != 'auto' || $ax.features.supports.mobile) { + fixedParentPanelId = parents[j]; + break; + } + } + + if(!fixedParentPanelId) $('#base').append(lightbox); + else $jobj(fixedParentPanelId).append(lightbox); + + var wasVisible = $ax.visibility.IsIdVisible(elementId); + + (function(lightbox, query) { + $ax.event.attachClick(lightbox, function() { + $ax.action.addAnimation(elementId, $ax.action.queueTypes.fade, function() { + if(!wasVisible) query.hide(); + else $ax.action.fireAnimationFromQueue(elementId, $ax.action.queueTypes.fade); + lightbox.remove(); + }); + }); + })(lightbox, this); + } + $ax.legacy.BringToFront(lightboxId, true); + $ax.legacy.BringToFront(elementId, true); + } else if(options && options.showType == 'flyout') { + // Remove lightbox if there is one + lightbox.remove(); + + var src = eventInfo.thiswidget; + var target = $ax.getWidgetInfo(elementId); + var rects = {}; + if(src.valid) rects.src = $ax.geometry.genRect(src, true); + if(target.valid) rects.target = $ax.geometry.genRect(target, true); + $ax.flyoutManager.registerFlyout(rects, elementId, eventInfo.srcElement); + //$ax.style.AddRolloverOverride(elementId); + $ax.legacy.BringToFront(elementId); + } else { + // Remove lightbox, unregister flyout + lightbox.remove(); + $ax.flyoutManager.unregisterPanel(elementId, true); + } + _setVisibility(elementId, true, options); + } + + return this; + }; + + var _getAnimateInfo = function (options, defaultDuration, useHide) { + var animateInfo = { + duration: options && (useHide ? options.durationHide : options.duration) || defaultDuration + }; + + var easing = options && (useHide ? options.easingHide : options.easing) || 'none'; + switch (easing) { + case 'fade': + animateInfo.easingType = 'fade'; + animateInfo.direction = ''; + break; + case 'slideLeft': + animateInfo.easingType = 'swing'; + animateInfo.direction = 'left'; + break; + case 'slideRight': + animateInfo.easingType = 'swing'; + animateInfo.direction = 'right'; + break; + case 'slideUp': + animateInfo.easingType = 'swing'; + animateInfo.direction = 'up'; + break; + case 'slideDown': + ; + animateInfo.easingType = 'swing'; + animateInfo.direction = 'down'; + break; + case 'flipLeft': + animateInfo.easingType = 'flip'; + animateInfo.direction = 'left'; + break; + case 'flipRight': + animateInfo.easingType = 'flip'; + animateInfo.direction = 'right'; + break; + case 'flipUp': + animateInfo.easingType = 'flip'; + animateInfo.direction = 'up'; + break; + case 'flipDown': + animateInfo.easingType = 'flip'; + animateInfo.direction = 'down'; + break; + default: + animateInfo.easingType = 'none'; + animateInfo.direction = ''; + } + + return animateInfo; + }; + + $ax.public.fn.hide = function(options) { + var elementIds = this.getElementIds(); + + for(var index = 0; index < elementIds.length; index++) { + var elementId = elementIds[index]; +// var wasShown = $ax.visibility.IsIdVisible(elementId); + _setVisibility(elementId, false, options); + } + + return this; + }; + + $ax.public.fn.toggleVisibility = function(options) { + var elementIds = this.getElementIds(); + + for (var index = 0; index < elementIds.length; index++) { + var elementId = elementIds[index]; + var show = !$ax.visibility.IsIdVisible(elementId); + _setVisibility(elementId, show, options, !show); + } + + return this; + }; + + var _setVisibility = function (elementId, value, options, useHide) { + var animateInfo = _getAnimateInfo(options, 0, useHide); + + var wasShown = $ax.visibility.IsIdVisible(elementId); + var compress = options && options.showType == 'compress' && wasShown != value; + + var compressed = false; + var onComplete = function() { + if(compress && !compressed) $ax.dynamicPanelManager.compressToggle(elementId, options.vertical, value, options.compressEasing, options.compressDuration); + compressed = true; + $ax.dynamicPanelManager.fitParentPanel(elementId); + }; + $ax.visibility.SetWidgetVisibility(elementId, { + value: value, + easing: animateInfo.easingType, + direction: animateInfo.direction, + duration: animateInfo.duration, + fire: true, + onComplete: onComplete + }); + if(compress && !compressed) $ax.dynamicPanelManager.compressToggle(elementId, options.vertical, value, options.compressEasing, options.compressDuration); + compressed = true; + + if(options && options.bringToFront) $ax.legacy.BringToFront(elementId); + }; + + $ax.public.fn.setOpacity = function(opacity, easing, duration) { + if(!easing || ! duration) { + easing = 'none'; + duration = 0; + } + + var elementIds = this.getElementIds(); + + for(var index = 0; index < elementIds.length; index++) { + var elementId = elementIds[index]; + var onComplete = function() { + $ax.action.fireAnimationFromQueue(elementId, $ax.action.queueTypes.fade); + }; + + var query = $jobj(elementId); + if(duration == 0 || easing == 'none') { + query.css('opacity', opacity); + onComplete(); + } else query.animate({ opacity: opacity }, { duration: duration, easing: easing, queue: false, complete: onComplete }); + } + } + + //move one widget. I didn't combine moveto and moveby, since this is in .public, and separate them maybe more clear for the user + var _move = function (elementId, x, y, options, moveTo) { + if(!options.easing) options.easing = 'none'; + if(!options.duration) options.duration = 500; + var obj = $obj(elementId); + + // Layer move using container now. + if($ax.public.fn.IsLayer(obj.type)) { + var moveInfo = $ax.move.RegisterMoveInfo(elementId, x, y, moveTo, options); + //$ax.event.raiseSyntheticEvent(elementId, "onMove"); + + //var childrenIds = $ax.public.fn.getLayerChildrenDeep(elementId, true); + //for(var i = 0; i < childrenIds.length; i++) $ax.event.raiseSyntheticEvent(childrenIds[i], 'onMove'); + + $ax.move.MoveWidget(elementId, x, y, options, moveTo, + function () { + if(options.onComplete) options.onComplete(); + $ax.dynamicPanelManager.fitParentPanel(elementId); + }, false, undefined, moveInfo); + //var childrenIds = $ax.public.fn.getLayerChildrenDeep(elementId); + //if(childrenIds.length == 0) return; + + //for(var i = 0; i < childrenIds.length - 1; i++) { + // $ax.move.MoveWidget(childrenIds[i], x, y, easing, duration, moveTo, + // function() { $ax.dynamicPanelManager.fitParentPanel(childrenIds[i]); }, false); + //} + + //$ax.move.MoveWidget(childrenIds[i], x, y, easing, duration, moveTo, + // function () { $ax.dynamicPanelManager.fitParentPanel(childrenIds[i]); }, true, null, elementId); + + } else { + var xDelta = x; + var yDelta = y; + if (moveTo) { + var jobj = $jobj(elementId); + + var left = Number(jobj.css('left').replace('px', '')); + var top = Number(jobj.css('top').replace('px', '')); + xDelta = x - left; + yDelta = y - top; + } + moveInfo = $ax.move.RegisterMoveInfo(elementId, xDelta, yDelta, false, options); + //$ax.event.raiseSyntheticEvent(elementId, "onMove"); + $ax.move.MoveWidget(elementId, xDelta, yDelta, options, false, + function () { $ax.dynamicPanelManager.fitParentPanel(elementId); }, true, undefined, moveInfo); + } + }; + + + $ax.public.fn.moveTo = function (x, y, options) { + var elementIds = this.getElementIds(); + for(var index = 0; index < elementIds.length; index++) { + _move(elementIds[index], x, y, options, true); + } + + return this; + }; + + $ax.public.fn.moveBy = function (x, y, options) { + var elementIds = this.getElementIds(); + + if(x == 0 && y == 0) { + for(var i = 0; i < elementIds.length; i++) { + var elementId = elementIds[i]; + $ax.move.nopMove(elementId, options); + + //$ax.event.raiseSyntheticEvent(elementId, "onMove"); + $ax.action.fireAnimationFromQueue(elementId, $ax.action.queueTypes.move); + + //if($axure.fn.IsLayer($obj(elementId).type)) { + // var childrenIds = $ax.public.fn.getLayerChildrenDeep(elementId, true); + // for(var j = 0; j < childrenIds.length; j++) $ax.event.raiseSyntheticEvent(childrenIds[j], 'onMove'); + //} + } + return this; + } + + for(var index = 0; index < elementIds.length; index++) { + _move(elementIds[index], x, y, options, false); + } + return this; + }; + + $ax.public.fn.circularMoveAndRotate = function(degreeChange, options, centerPointLeft, centerPointTop, doRotation, moveDelta, resizeOffset, rotatableMove, moveComplete) { + if(!rotatableMove) rotatableMove = { x: 0, y: 0 }; + var elementIds = this.getElementIds(); + + for(var index = 0; index < elementIds.length; index++) { + var elementId = elementIds[index]; + + var onComplete = function () { + if (doRotation) $ax.dynamicPanelManager.fitParentPanel(elementId); + if (moveComplete) moveComplete(); + } + + $ax.move.circularMove(elementId, degreeChange, { x: centerPointLeft, y: centerPointTop }, moveDelta, rotatableMove, resizeOffset, options, true, onComplete); + if(doRotation) $ax.move.rotate(elementId, degreeChange, options.easing, options.duration, false, true, function () { $ax.dynamicPanelManager.fitParentPanel(elementId); }); + else $ax.action.fireAnimationFromQueue(elementId, $ax.action.queueTypes.rotate); + } + }; + + $ax.public.fn.rotate = function (degree, easing, duration, to, axShouldFire) { + var elementIds = this.getElementIds(); + // this function will no longer handle compound vectors. + + for(var index = 0; index < elementIds.length; index++) { + var elementId = elementIds[index]; + degree = parseFloat(degree); + $ax.move.rotate(elementId, degree, easing, duration, to, axShouldFire, function () { $ax.dynamicPanelManager.fitParentPanel(elementId); }); + } + }; + + $ax.public.fn.resize = function(newLocationAndSizeCss, resizeInfo, axShouldFire, moves, onCompletedFunc) { + var elementIds = this.getElementIds(); + if(!elementIds) return; + + for(var index = 0; index < elementIds.length; index++) { + var elementId = elementIds[index]; + + var oldSize = $ax('#' + elementId).size(); + var oldWidth = oldSize.width; + var oldHeight = oldSize.height; + var query = $jobj(elementId); + + var obj = $obj(elementId); + var isDynamicPanel = $ax.public.fn.IsDynamicPanel(obj.type); + if(isDynamicPanel) { + // No longer fitToContent, calculate additional styling that needs to be done. + $ax.dynamicPanelManager.setFitToContentCss(elementId, false, oldWidth, oldHeight); + + if((obj.fixedHorizontal && obj.fixedHorizontal == 'center') || (obj.fixedVertical && obj.fixedVertical == 'middle')) { + moves = true; + var loc = $ax.dynamicPanelManager.getFixedPosition(elementId, oldWidth, oldHeight, newLocationAndSizeCss.width, newLocationAndSizeCss.height); + if(loc) { + if(loc[0] != 0 && !$ax.dynamicPanelManager.isPercentWidthPanel(obj)) newLocationAndSizeCss['margin-left'] = '+=' + loc[0]; + if(loc[1] != 0) newLocationAndSizeCss['margin-top'] = '+=' + loc[1]; + } + } + + var onComplete = function() { + $ax.flyoutManager.updateFlyout(elementId); + $ax.dynamicPanelManager.fitParentPanel(elementId); + $ax.dynamicPanelManager.updatePanelPercentWidth(elementId); + $ax.dynamicPanelManager.updatePanelContentPercentWidth(elementId); + if(axShouldFire) $ax.action.fireAnimationFromQueue(elementId, $ax.action.queueTypes.resize); + if(moves) { + if(axShouldFire) $ax.action.fireAnimationFromQueue(elementId, $ax.action.queueTypes.move); + } + if(onCompletedFunc) onCompletedFunc(); + $ax.event.raiseSyntheticEvent(elementId, 'onResize'); + }; + + } else { + //if contains text + var textChildren = query.children('div.text'); + if(textChildren && textChildren.length != 0) { + var textDivId = textChildren.attr('id'); + var textObj = $ax('#' + textDivId); + var leftPadding = textObj.left(); + var rightPadding = oldWidth - leftPadding - textObj.width(); + //greater or equal to 1px + var newTextWidth = Math.max(newLocationAndSizeCss.width - leftPadding - rightPadding, 1); + var textChildCss = { width: newTextWidth }; + + var textStepFunction = function() { + //change the width of the text div may effect the height + //var currentTextHeight = Number($(textChildren.children('p')[0]).css('height').replace('px', '')); + //textChildren.css('height', currentTextHeight); + var display = $ax.public.fn.displayHackStart(document.getElementById(textDivId)); + $ax.style.updateTextAlignmentForVisibility(textDivId, true); + $ax.public.fn.displayHackEnd(display); + }; + } + + //get all the other children that matters + onComplete = function() { + $ax.dynamicPanelManager.fitParentPanel(elementId); + if(axShouldFire) { + $ax.action.fireAnimationFromQueue(elementId, $ax.action.queueTypes.resize); + if(moves) $ax.action.fireAnimationFromQueue(elementId, $ax.action.queueTypes.move); + } + if(onCompletedFunc) onCompletedFunc(); + $ax.event.raiseSyntheticEvent(elementId, 'onResize'); + }; + } + + var children = query.children().not('div.text'); + while(children && children.length && $(children[0]).attr('id').indexOf('container') != -1) { + children = children.children().not('div.text'); + } + + if(children && children.length !== 0) { + var childAnimationArray = []; + var isConnector = $ax.public.fn.IsConnector($obj(elementId).type); + children.each(function (i, child) { + var childCss = { + width: newLocationAndSizeCss.width, + height: newLocationAndSizeCss.height + }; + + //$ax.size() use outerWidth/Height(false), which include padding and borders(no margins) + var childSizingObj = $ax('#' + child.id).size(); + var differentSizedImage = childSizingObj.width - oldWidth != 0 || childSizingObj.height - oldHeight != 0; + if ((differentSizedImage || isConnector) && child.tagName == 'IMG') { + //oldwidth is zero for connectors + var widthOffset = oldWidth ? (childSizingObj.width - oldWidth) * newLocationAndSizeCss.width / oldWidth : childSizingObj.width; + var heightOffset = oldHeight ? (childSizingObj.height - oldHeight) * newLocationAndSizeCss.height / oldHeight : childSizingObj.height; + + childCss.width += widthOffset; + childCss.height += heightOffset; + } + //there are elements like inputs, come with a padding and border, so need to use outerwidth for starting point, due to jquery 1.7 css() on width/height bugs + if($(child).css('position') === 'absolute') { + if(child.offsetLeft) { + childSizingObj.left = child.offsetLeft; + childCss.left = oldWidth ? child.offsetLeft * newLocationAndSizeCss.width / oldWidth : child.offsetLeft; //- transformedShift.x; + } + if(child.offsetTop) { + childSizingObj.top = child.offsetTop; + childCss.top = oldHeight ? child.offsetTop * newLocationAndSizeCss.height / oldHeight : child.offsetTop; //- transformedShift.y; + } + } + childAnimationArray.push({ obj: child, sizingObj: childSizingObj, sizingCss: childCss }); + }); + } + + if(!resizeInfo.easing || resizeInfo.easing == 'none') { + query.animate(newLocationAndSizeCss, 0); + if(childAnimationArray) { + $(childAnimationArray).each(function (i, animationObj) { + if(animationObj.resizeMatrixFunction) { + $(animationObj.obj).css($ax.public.fn.setTransformHowever(animationObj.resizeMatrixFunction(animationObj.width, animationObj.height))); + } else { + $(animationObj.obj).animate(animationObj.sizingCss, 0); + } + }); + } + //if(childCss) children.animate(childCss, 0); + //if(sketchyImage && sketchyImageCss) $(sketchyImage).animate(sketchyImageCss, 0); + if(textChildCss) { + textChildren.animate(textChildCss, { + duration: 0, + step: textStepFunction + }); + } + onComplete(); + } else { + if(childAnimationArray) { + $(childAnimationArray).each(function (i, animationObj) { + if(animationObj.resizeMatrixFunction) { + $(animationObj.sizingObj).animate(animationObj.sizingCss, { + queue: false, + duration: resizeInfo.duration, + easing: resizeInfo.easing, + step: function (now) { + var widthRatio = (animationObj.width - 1.0) * now + 1.0; + var heightRatio = (animationObj.height - 1.0) * now + 1.0; + $(animationObj.obj).css($ax.public.fn.setTransformHowever(animationObj.resizeMatrixFunction(widthRatio, heightRatio))); + } + }); + } else { + $(animationObj.sizingObj).animate(animationObj.sizingCss, { + queue: false, + duration: resizeInfo.duration, + easing: resizeInfo.easing, + step: function (now, tween) { + $(animationObj.obj).css(tween.prop, now); + } + }); + } + }); + } + + if(textChildCss) { + textChildren.animate(textChildCss, { + queue: false, + duration: resizeInfo.duration, + easing: resizeInfo.easing, + step: textStepFunction + }); + } + + if (isDynamicPanel) query.animate(newLocationAndSizeCss, { queue: false, duration: resizeInfo.duration, easing: resizeInfo.easing, complete: onComplete }); + + var locObj = { + left: $ax.public.fn.GetFieldFromStyle(query, 'left'), top: $ax.public.fn.GetFieldFromStyle(query, 'top'), + width: $ax.public.fn.GetFieldFromStyle(query, 'width'), height: $ax.public.fn.GetFieldFromStyle(query, 'height'), + }; + $(locObj).animate(newLocationAndSizeCss, { + queue: false, + duration: resizeInfo.duration, + easing: resizeInfo.easing, + step: function(now, tween) { + query.css(tween.prop, now); + }, + complete: onComplete + }); + } + } + }; + + $ax.public.fn.bringToFront = function() { + var elementIds = this.getElementIds(); + for(var index = 0; index < elementIds.length; index++) { $ax.legacy.BringToFront(elementIds[index]); } + return this; + }; + + $ax.public.fn.sendToBack = function() { + var elementIds = this.getElementIds(); + for(var index = 0; index < elementIds.length; index++) { $ax.legacy.SendToBack(elementIds[index]); } + return this; + }; + + $ax.public.fn.text = function() { + if(arguments[0] == undefined) { + var firstId = this.getElementIds()[0]; + + if(!firstId) { return undefined; } + + return getWidgetText(firstId); + } else { + var elementIds = this.getElementIds(); + + for(var index = 0; index < elementIds.length; index++) { + var currentItem = elementIds[index]; + + var widgetType = $ax.getTypeFromElementId(currentItem); + + if($ax.public.fn.IsTextBox(widgetType) || $ax.public.fn.IsTextArea(widgetType)) { //For non rtf + SetWidgetFormText(currentItem, arguments[0]); + } else { + var idRtf = '#' + currentItem; + if($(idRtf).length == 0) idRtf = '#u' + (Number(currentItem.substring(1)) + 1); + + if($(idRtf).length != 0) { + //If the richtext div already has some text in it, + //preserve only the first style and get rid of the rest + //If no pre-existing p-span tags, don't do anything + if($(idRtf).find('p').find('span').length > 0) { + $(idRtf).find('p:not(:first)').remove(); + $(idRtf).find('p').find('span:not(:first)').remove(); + + //Replace new-lines with NEWLINE token, then html encode the string, + //finally replace NEWLINE token with linebreak + var textWithLineBreaks = arguments[0].replace(/\n/g, '--NEWLINE--'); + var textHtml = $('
    ').text(textWithLineBreaks).html(); + $(idRtf).find('span').html(textHtml.replace(/--NEWLINE--/g, '
    ')); + } + } + } + } + + return this; + } + }; + + var getWidgetText = function(id) { + var idQuery = $jobj(id); + var inputQuery = $jobj($ax.INPUT(id)); + if(inputQuery.length) idQuery = inputQuery; + + if (idQuery.is('input') && ($ax.public.fn.IsCheckBox(idQuery.attr('type')) || idQuery.attr('type') == 'radio')) { + idQuery = idQuery.parent().find('label').find('div'); + } + + if(idQuery.is('div')) { + var $rtfObj = idQuery.hasClass('text') ? idQuery : idQuery.find('.text'); + if($rtfObj.length == 0) return undefined; + + var textOut = ''; + $rtfObj.children('p').each(function(index) { + if(index != 0) textOut += '\n'; + + //Replace line breaks (set in SetWidgetRichText) with newlines and nbsp's with regular spaces. + var htmlContent = $(this).html().replace(/]*>/ig, '\n').replace(/ /ig, ' '); + textOut += $(htmlContent).text(); + }); + + return textOut; + } else { + var val = idQuery.val(); + return val == undefined ? '' : val; + } + }; + + $ax.public.fn.setRichTextHtml = function() { + if(arguments[0] == undefined) { + //No getter function, so just return undefined + return undefined; + } else { + var elementIds = this.getElementIds(); + + for(var index = 0; index < elementIds.length; index++) { + var currentItem = elementIds[index]; + + var widgetType = $ax.getTypeFromElementId(currentItem); + if ($ax.public.fn.IsTextBox(widgetType) || $ax.public.fn.IsTextArea(widgetType)) { //Do nothing for non rtf + continue; + } else { + //TODO -- [mas] fix this! + var idRtf = '#' + currentItem; + if($(idRtf).length == 0) idRtf = '#u' + (parseInt(currentItem.substring(1)) + 1); + if($(idRtf).length != 0) SetWidgetRichText(idRtf, arguments[0]); + } + } + + return this; + } + }; + + $ax.public.fn.value = function() { + if(arguments[0] == undefined) { + var firstId = this.getElementIds()[0]; + + if(!firstId) { + return undefined; + } + + var widgetType = $ax.getTypeFromElementId(firstId); + + if ($ax.public.fn.IsComboBox(widgetType) || $ax.public.fn.IsListBox(widgetType)) { //for select lists and drop lists + return $('#' + firstId + ' :selected').text(); + } else if ($ax.public.fn.IsCheckBox(widgetType) || $ax.public.fn.IsRadioButton(widgetType)) { //for radio/checkboxes + return $('#' + firstId + '_input').is(':checked'); + } else if ($ax.public.fn.IsTextBox(widgetType)) { //for text box + return $('#' + firstId + '_input').val(); + } else { //for text based form elements + return this.jQuery().first().val(); + } + } else { + var elementIds = this.getElementIds(); + + for(var index = 0; index < elementIds.length; index++) { + var widgetType = $ax.getTypeFromElementId(elementIds[index]); + + var elementIdQuery = $('#' + elementIds[index]); + + if ($ax.public.fn.IsCheckBox(widgetType) || $ax.public.fn.IsRadioButton(widgetType)) { //for radio/checkboxes + if(arguments[0] == true) { + elementIdQuery.attr('checked', true); + } else if(arguments[0] == false) { + elementIdQuery.removeAttr('checked'); + } + } else { //For select lists, drop lists, text based form elements + elementIdQuery.val(arguments[0]); + } + } + + return this; + } + }; + + $ax.public.fn.checked = function() { + if(arguments[0] == undefined) { + return this.selected(); + } else { + this.selected(arguments[0]); + return this; + } + }; + + var _getRelativeLeft = function (id, parent) { + var currentNode = window.document.getElementById(id).offsetParent; + var left = $ax('#' + id).left(true); + while (currentNode != null && currentNode.tagName != "BODY" && currentNode != parent) { + left += currentNode.offsetLeft; + currentNode = currentNode.offsetParent; + } + return left; + }; + + var _getRelativeTop = function(id, parent) { + var currentNode = window.document.getElementById(id).offsetParent; + var top = $ax('#' + id).top(true); + while(currentNode != null && currentNode.tagName != "BODY" && currentNode != parent) { + top += currentNode.offsetTop; + currentNode = currentNode.offsetParent; + } + return top; + }; + + var _scrollHelper = function(id, scrollX, scrollY, easing, duration) { + var target = window.document.getElementById(id); + var scrollable = $ax.legacy.GetScrollable(target); + var targetLeft = _getRelativeLeft(id, scrollable); + var targetTop = _getRelativeTop(id, scrollable); + if(!scrollX) targetLeft = scrollable.scrollLeft; + if(!scrollY) targetTop = scrollable.scrollTop; + + var $scrollable = $(scrollable); + if($scrollable.is('body')) { + $scrollable = $('html,body'); + } + + if(easing == 'none') { + if(scrollY) $scrollable.scrollTop(targetTop); + if(scrollX) $scrollable.scrollLeft(targetLeft); + } else { + if(!scrollX) { + $scrollable.animate({ scrollTop: targetTop }, duration, easing); + } else if(!scrollY) { + $scrollable.animate({ scrollLeft: targetLeft }, duration, easing); + } else { + $scrollable.animate({ scrollTop: targetTop, scrollLeft: targetLeft }, duration, easing); + } + } + }; + + $ax.public.fn.scroll = function(scrollOption) { + var easing = 'none'; + var duration = 500; + + if(scrollOption && scrollOption.easing) { + easing = scrollOption.easing; + + if(scrollOption.duration) { + duration = scrollOption.duration; + } + } + + var scrollX = true; + var scrollY = true; + + if(scrollOption.direction == 'vertical') { + scrollX = false; + } else if(scrollOption.direction == 'horizontal') { + scrollY = false; + } + + var elementIds = this.getElementIds(); + for(var index = 0; index < elementIds.length; index++) { + // if($ax.getTypeFromElementId(elementIds[index]) == IMAGE_MAP_REGION_TYPE) { + _scrollHelper(elementIds[index], scrollX, scrollY, easing, duration); + // } + } + + return this; + }; + + $ax.public.fn.enabled = function() { + if(arguments[0] == undefined) { + var firstId = this.getElementIds()[0]; + if(!firstId) return undefined; + + var widgetType = $ax.getTypeFromElementId(firstId); + if ($ax.public.fn.IsImageBox(widgetType) || $ax.public.fn.IsVector(widgetType)) return !$ax.style.IsWidgetDisabled(firstId); + else return this.jQuery().first().not(':disabled').length > 0; + } else { + var elementIds = this.getElementIds(); + + for(var index = 0; index < elementIds.length; index++) { + var elementId = elementIds[index]; + var widgetType = $ax.getTypeFromElementId(elementId); + + var enabled = arguments[0]; + if ($ax.public.fn.IsImageBox(widgetType) || $ax.public.fn.IsVector(widgetType)) $ax.style.SetWidgetEnabled(elementId, enabled); + if ($ax.public.fn.IsDynamicPanel(widgetType) || $ax.public.fn.IsLayer(widgetType)) { + $ax.style.SetWidgetEnabled(elementId, enabled); + var children = this.getChildren()[index].children; + for(var i = 0; i < children.length; i++) { + $axure('#' + children[i]).enabled(enabled); + } + } + var obj = $obj(elementId); + var images = obj.images; + if(PLAIN_TEXT_TYPES.indexOf(widgetType) != -1 && images) { + var img = $jobj($ax.repeater.applySuffixToElementId(elementId, '_image_sketch')); + var key = (enabled ? 'normal~' : 'disabled~') + ($ax.adaptive.currentViewId || ''); + img.attr('src', images[key]); + + } + var jobj = $jobj(elementId); + var input = $jobj($ax.INPUT(elementId)); + if(input.length) jobj = input; + + if (OS_MAC && WEBKIT && $ax.public.fn.IsComboBox(widgetType)) jobj.css('color', enabled ? '' : 'grayText'); + + if(enabled) jobj.removeAttr('disabled'); + else jobj.attr('disabled', 'disabled'); + } + + return this; + } + }; + + $ax.public.fn.visible = function() { + var ids = this.getElementIds(); + for(var index = 0; index < ids.length; index++) $ax.visibility.SetIdVisible(ids[index], arguments[0]); + return this; + }; + + $ax.public.fn.selected = function() { + if(arguments[0] == undefined) { + var firstId = this.getElementIds()[0]; + if(!firstId) return undefined; + + var widgetType = $ax.getTypeFromElementId(firstId); + if ($ax.public.fn.IsTreeNodeObject(widgetType)) { + var treeNodeButtonShapeId = ''; + var allElementIds = $ax.getAllElementIds(); + for(var i = 0; i < allElementIds.length; i++) { + var elementId = allElementIds[i]; + var currObj = $ax.getObjectFromElementId(elementId); + + if ($ax.public.fn.IsVector(currObj.type) && currObj.parent && currObj.parent.scriptIds && currObj.parent.scriptIds[0] == firstId) { + treeNodeButtonShapeId = elementId; + break; + } + } + + if(treeNodeButtonShapeId == '') return undefined; + return $ax.style.IsWidgetSelected(treeNodeButtonShapeId); + } else if ($ax.public.fn.IsImageBox(widgetType) || $ax.public.fn.IsVector(widgetType) || $ax.public.fn.IsTableCell(widgetType) || $ax.public.fn.IsDynamicPanel(widgetType) || $ax.public.fn.IsLayer(widgetType)) { + return $ax.style.IsWidgetSelected(firstId); + } else if ($ax.public.fn.IsCheckBox(widgetType) || $ax.public.fn.IsRadioButton(widgetType)) { + return $jobj($ax.INPUT(firstId)).prop('checked'); + } + return this; + } + var elementIds = this.getElementIds(); + var func = typeof (arguments[0]) === 'function' ? arguments[0] : null; + var enabled = arguments[0]; // If this is a function it will be overridden with the return value; + + for(var index = 0; index < elementIds.length; index++) { + var elementId = elementIds[index]; + if(func) { + enabled = func($axure('#' + elementId)); + } + + var widgetType = $ax.getTypeFromElementId(elementId); + + if ($ax.public.fn.IsTreeNodeObject(widgetType)) { //for tree node + var treeRootId = $('#' + elementIds[index]).parents('.treeroot').attr('id'); + + var treeNodeButtonShapeId = ''; + var childElementIds = $jobj(elementId).children(); + for(var i = 0; i < childElementIds.length; i++) { + var elementId = childElementIds[i].id; + var currObj = $ax.getObjectFromElementId(elementId); + + if (currObj && currObj.type == $ax.constants.VECTOR_SHAPE_TYPE && currObj.parent && + currObj.parent.scriptIds && currObj.parent.scriptIds[0] == elementIds[index]) { + treeNodeButtonShapeId = elementId; + break; + } + } + + if(treeNodeButtonShapeId == '') continue; + + $ax.tree.SelectTreeNode(elementId, enabled); + } else if ($ax.public.fn.IsImageBox(widgetType) || $ax.public.fn.IsVector(widgetType) || $ax.public.fn.IsVector(widgetType) || $ax.public.fn.IsTableCell(widgetType) || $ax.public.fn.IsDynamicPanel(widgetType) || $ax.public.fn.IsLayer(widgetType)) { + $ax.style.SetWidgetSelected(elementIds[index], enabled); + } else if ($ax.public.fn.IsCheckBox(widgetType) || $ax.public.fn.IsRadioButton(widgetType)) { + var query = $jobj($ax.INPUT(elementId)); + var curr = query.prop('checked'); + //NOTE: won't fire onselect nore onunselect event if states didn't changes + if(curr != enabled) { + query.prop('checked', enabled); + $ax.event.TryFireCheckChanged(elementId, enabled); + } + } + } + return this; + }; + + $ax.public.fn.focus = function() { + var firstId = this.getElementIds()[0]; + var focusableId = $ax.event.getFocusableWidgetOrChildId(firstId); + $('#' + focusableId).focus(); + + return this; + }; + + $ax.public.fn.expanded = function() { + if(arguments[0] == undefined) { + var firstId = this.getElementIds()[0]; + return firstId && !$ax.public.fn.IsTreeNodeObject($ax.getTypeFromElementId(firstId)) && $ax.visibility.IsIdVisible(firstId + '_children'); + } else { + var elementIds = this.getElementIds(); + + for(var index = 0; index < elementIds.length; index++) { + if ($ax.public.fn.IsTreeNodeObject($ax.getTypeFromElementId(elementIds[index]))) { + var treeNodeId = elementIds[index]; + var childContainerId = treeNodeId + '_children'; + + var scriptId = $ax.repeater.getScriptIdFromElementId(treeNodeId); + var itemId = $ax.repeater.getItemIdFromElementId(treeNodeId); + var plusMinusId = 'u' + (parseInt(scriptId.substring(1)) + 1); + if(itemId) plusMinusId = $ax.repeater.createElementId(plusMinusId, itemId); + if($('#' + childContainerId).length == 0 || !$jobj(plusMinusId).children().first().is('img')) + plusMinusId = ''; + + if(arguments[0] == true) { + $ax.tree.ExpandNode(treeNodeId, childContainerId, plusMinusId); + } else if(arguments[0] == false) { + $ax.tree.CollapseNode(treeNodeId, childContainerId, plusMinusId); + } + } + } + + return this; + } + }; + + $ax.public.fn.size = function () { + var firstId = this.getElementIds()[0]; + if(!firstId) return undefined; + + var object = $ax.getObjectFromElementIdDisregardHex(firstId); + if(object && (object.type == 'layer' || object.generateCompound)) { + var boundingRect = $ax.public.fn.getWidgetBoundingRect(firstId); + return { width: boundingRect.width, height: boundingRect.height }; + } + + var firstIdObject = $jobj(firstId); + return { width: firstIdObject.outerWidth(), height: firstIdObject.outerHeight() }; + }; + + $ax.public.fn.width = function() { + var firstId = this.getElementIds()[0]; + if(!firstId) return undefined; + + var object = $ax.getObjectFromElementIdDisregardHex(firstId); + if (object && (object.type == 'layer' || object.generateCompound)) { + var boundingRect = $ax.public.fn.getWidgetBoundingRect(firstId); + return boundingRect.width; + } + + var firstIdObject = $jobj(firstId); + + return firstIdObject.outerWidth(); + }; + + $ax.public.fn.height = function() { + var firstId = this.getElementIds()[0]; + if(!firstId) return undefined; + + var object = $ax.getObjectFromElementIdDisregardHex(firstId); + if (object && (object.type == 'layer' || object.generateCompound)) { + var boundingRect = $ax.public.fn.getWidgetBoundingRect(firstId); + return boundingRect.height; + } + + var firstIdObject = $jobj(firstId); + + return firstIdObject.outerHeight(); + }; + + $ax.public.fn.readAttribute = function(object, attribute) { + if(object && object.hasAttribute(attribute)) { + return object.getAttribute(attribute); + } + return null; + }; + + $ax.public.fn.locRelativeIgnoreLayer = function (vert) { + var elementId = this.getElementIds()[0]; + if(!elementId) return undefined; + + var parents = this.getParents(true, '*')[0]; + + for(var i = 0; i < parents.length; i++) { + var type = $ax.getTypeFromElementId(parents[i]); + if(!$axure.fn.IsLayer(type) && !$axure.fn.IsReferenceDiagramObject(type)) { + var func = vert ? _getRelativeTop : _getRelativeLeft; + return func(elementId, $jobj(parents[i])[0]); + } + } + var axThis = $ax('#' + elementId); + return vert ? axThis.top() : _bodyToWorld(axThis.left(), true); + }; + + var _bodyToWorld = $axure.fn.bodyToWorld = function(x, from) { + var body = $('body'); + if (body.css('position') != 'relative') return x; + var offset = (Number(body.css('left').replace('px', '')) + Math.max(0, ($(window).width() - body.width()) / 2)); + if(from) offset *= -1; + return x + offset; + } + + $ax.public.fn.left = function (relative) { + var firstId = this.getElementIds()[0]; + if(!firstId) return undefined; + + var left = _getLoc(firstId, false, false, relative); + + // If you are absolute, unless your are a pinned panel... + if(relative || $obj(firstId).fixedVertical) return left; + + // ... or you are in one... + var parentPanels = $ax('#' + firstId).getParents(true, 'dynamicPanel')[0]; + for(var i = 0; i < parentPanels.length; i++) if ($obj(parentPanels[i]).fixedVertical) return left; + + // ... you must convert from body to world coordinates + return _bodyToWorld(left); + }; + + $ax.public.fn.top = function(relative) { + var firstId = this.getElementIds()[0]; + return firstId && _getLoc(firstId, true, false, relative); + }; + + var _getLoc = function(id, vert, high, relative) { + var mathFunc = high ? 'max' : 'min'; + var prop = vert ? 'top' : 'left'; + var dim = vert ? 'height' : 'width'; + + var obj = $jobj(id); + var oldDisplay = obj.css('display'); + var displaySet = false; + if(oldDisplay == 'none') { + obj.css('display', ''); + displaySet = true; + } + var loc = Math.NaN; + var rdo = $ax.getTypeFromElementId(id) == $ax.constants.REFERENCE_DIAGRAM_OBJECT_TYPE; + + if (!rdo) loc = $ax.getNumFromPx(obj.css(prop)); + + var fixed = _fixedOffset(id, vert); + if(fixed.valid) loc = fixed.offset; + else if (!relative) { + var parents = $ax('#' + id).getParents(true, ['item', 'repeater', 'dynamicPanel', 'layer'])[0]; + for(var i = 0; i < parents.length; i++) { + var parentId = $ax.visibility.getWidgetFromContainer(parents[i]); + var parent = $ax.visibility.applyWidgetContainer(parentId, true); + + + // Layer may not have container, and will be at 0,0 otherwise. + if (!parent.length) continue; + + fixed = _fixedOffset(parentId, vert); + if(fixed.valid) { + loc += fixed.offset; + break; // If fixed ignore any parents if there are any, they don't matter. + } else loc += $ax.getNumFromPx(parent.css(prop)); + } + } + + //if (high) loc += isCompound ? dimension[dim] : obj[dim](); + if (high) loc += obj[dim](); + + // Special Layer code + if ($ax.getTypeFromElementId(id) == 'layer') { + // If layer has a container, then use that. Otherwise must deal with children + var container = $ax.visibility.applyWidgetContainer(id, true, true); + if(container.length) loc = $ax.getNumFromPx(container.css(prop)); + else { + var first = true; + var children = $obj(id).objs; + for(var i = 0; i < children.length; i++) { + var childId = $ax.getElementIdFromPath([children[i].id], { relativeTo: id }); + if(!childId) continue; + var childProp = _getLoc(childId, vert, high, relative); + if(first) loc = childProp; + else loc = Math[mathFunc](loc, childProp); + first = false; + } + } + } + + if(displaySet) obj.css('display', oldDisplay); + + // var body = $('body'); + // if (body.css('position') == 'relative') loc -= (Number(body.css(loc).replace('px', '')) + Math.max(0, ($(window).width() - body.width()) / 2)); + return loc; + }; + + var _fixedOffset = function (id, vert) { + var axObj = $obj(id); + var dim = vert ? 'height' : 'width'; + var vertKey = (vert ? 'Vertical' : 'Horizontal'); + var key = 'fixed' + vertKey; + var alignment = axObj[key]; + if(!alignment) return { valid: false }; + var loc = 0; + + // TODO: This returns 0 for width/height it or any parent is display none. Similar issue when using axquery width/height + // TODO: Look into replacing this with axquery width/height and fixing that to use this hack. Potentially want to make js generic trapper. + var trap = _displayWidget(id); + var query = $jobj(id); + var objSize = query[dim](); + trap(); + + if(alignment == 'center' || alignment == 'middle') { + loc = $ax.getNumFromPx(query.css('margin-' + (vert ? 'top' : 'left'))); + loc += ($(window)[dim]()) / 2; + } else if(alignment == 'bottom' || alignment == 'right') { + loc = $ax.getNumFromPx(query.css(vert ? 'bottom' : 'right')); + loc = $(window)[dim]() - objSize - loc; // subract loc because margin here moves farther left/up as it gets bigger. + } else { + loc = $ax.getNumFromPx(query.css(vert ? 'top' : 'left')); + } + + var scrollKey = 'scroll' + (vert ? 'Y' : 'X'); + return { offset: window[scrollKey] + loc, valid: true }; + }; + + var _displayWidget = function(id) { + var parents = $ax('#' + id).getParents(true, '*')[0]; + parents.push(id); // also need to show self + + var displayed = []; + for(var i = 0; i < parents.length; i++) { + var currId = parents[i]; + var currObj = $jobj(currId); + if(currObj.css('display') == 'none') { + currObj.css('display', 'block'); + displayed.push(currId); + } + } + + return function() { + for(var i = 0; i < displayed.length; i++) { + $jobj(displayed[i]).css('display', 'none'); + } + }; + } +}); diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/doc.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/doc.js" new file mode 100644 index 0000000..c3866ba --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/doc.js" @@ -0,0 +1,745 @@ +锘$axure.internal(function($ax) { + var _pageData; + + + var _initializePageFragment = function(pageFragment, objIdToObject) { + var objectArrayHelper = function(objects, parent) { + for(var i = 0; i < objects.length; i++) { + diagramObjectHelper(objects[i], parent); + } + }; + + var diagramObjectHelper = function(diagramObject, parent) { + $ax.initializeObject('diagramObject', diagramObject); + objIdToObject[pageFragment.packageId + '~' + diagramObject.id] = diagramObject; + diagramObject.parent = parent; + diagramObject.owner = pageFragment; + diagramObject.scriptIds = []; + if(diagramObject.diagrams) { //dynamic panel + for(var i = 0; i < diagramObject.diagrams.length; i++) { + var diagram = diagramObject.diagrams[i]; + objectArrayHelper(diagram.objects, diagram); + } + } + if(diagramObject.objects) objectArrayHelper(diagramObject.objects, diagramObject); + }; + + objectArrayHelper(pageFragment.diagram.objects, pageFragment.diagram); + }; + + var _initalizeStylesheet = function(stylesheet) { + var stylesById = {}; + var customStyles = stylesheet.customStyles; + for(var key in customStyles) { + var style = customStyles[key]; + stylesById[style.id] = style; + } + var duplicateStyles = stylesheet.duplicateStyles; + for(var duplicateKey in duplicateStyles) { + stylesById[duplicateKey] = stylesById[duplicateStyles[duplicateKey]]; + } + + stylesheet.stylesById = stylesById; + }; + + + var _initializeDocumentData = function() { + _initalizeStylesheet($ax.document.stylesheet); + }; + + + var _initializePageData; + // ******* Dictionaries ******** // + (function () { + var scriptIdToParentLayer = {}; + var elementIdToObject = {}; + var scriptIdToObject = {}; + var scriptIdToRepeaterId = {}; + var repeaterIdToScriptIds = {}; + var repeaterIdToItemIds = {}; + var scriptIdToPath = {}; + var _scriptIds = []; + var elementIdToText = {}; + var radioGroupToSelectedElementId = {}; + _initializePageData = function() { + if(!_pageData || !_pageData.page || !_pageData.page.diagram) return; + + var objIdToObject = {}; + _initializePageFragment(_pageData.page, objIdToObject); + for(var masterId in _pageData.masters) { + var master = _pageData.masters[masterId]; + _initializePageFragment(master, objIdToObject); + } + + var _pathsToScriptIds = []; + _pathToScriptIdHelper(_pageData.objectPaths, [], _pathsToScriptIds, scriptIdToPath); + + for(var i = 0; i < _pathsToScriptIds.length; i++) { + var path = _pathsToScriptIds[i].idPath; + var scriptId = _pathsToScriptIds[i].scriptId; + + var packageId = _pageData.page.packageId; + if(path.length > 1) { + for(var j = 0; j < path.length - 1; j++) { + var rdoId = path[j]; + var rdo = objIdToObject[packageId + '~' + rdoId]; + packageId = rdo.masterId; + } + } + var diagramObject = objIdToObject[packageId + '~' + path[path.length - 1]]; + diagramObject.scriptIds[diagramObject.scriptIds.length] = scriptId; + + scriptIdToObject[scriptId] = diagramObject; + _scriptIds[_scriptIds.length] = scriptId; + } + + // Now map scriptIds to repeaters and layers + var mapScriptIdToRepeaterId = function(scriptId, repeaterId) { + scriptIdToRepeaterId[scriptId] = repeaterId; + var scriptIds = repeaterIdToScriptIds[repeaterId]; + if(scriptIds) scriptIds[scriptIds.length] = scriptId; + else repeaterIdToScriptIds[repeaterId] = [scriptId]; + }; + var mapScriptIdToLayerId = function (obj, layerId, path) { + var pathCopy = $ax.deepCopy(path); + pathCopy[path.length] = obj.id; + var scriptId = $ax.getScriptIdFromPath(pathCopy); + if ($ax.public.fn.IsLayer(obj.type)) { + for(var i = 0; i < obj.objs.length; i++) mapScriptIdToLayerId(obj.objs[i], scriptId, path); + } + scriptIdToParentLayer[scriptId] = layerId; + } + var mapIdsToRepeaterAndLayer = function(path, objs, repeaterId) { + var pathCopy = $ax.deepCopy(path); + + for(var i = 0; i < objs.length; i++) { + var obj = objs[i]; + pathCopy[path.length] = obj.id; + var scriptId = $ax.getScriptIdFromPath(pathCopy); + // Rdo have no element on page and are not mapped to the repeater + if(repeaterId) mapScriptIdToRepeaterId(scriptId, repeaterId); + + if ($ax.public.fn.IsDynamicPanel(obj.type)) { + for(var j = 0; j < obj.diagrams.length; j++) mapIdsToRepeaterAndLayer(path, obj.diagrams[j].objects, repeaterId); + } else if ($ax.public.fn.IsReferenceDiagramObject(obj.type)) { + mapIdsToRepeaterAndLayer(pathCopy, $ax.pageData.masters[obj.masterId].diagram.objects, repeaterId); + } else if ($ax.public.fn.IsRepeater(obj.type)) { + mapScriptIdToRepeaterId(scriptId, scriptId); + mapIdsToRepeaterAndLayer(path, obj.objects, scriptId); + } else if ($ax.public.fn.IsLayer(obj.type)) { + var layerObjs = obj.objs; + for(var j = 0; j < layerObjs.length; j++) { + mapScriptIdToLayerId(layerObjs[j], scriptId, path); + } + } else if(obj.objects && obj.objects.length) { + if(repeaterId) { + for(var j = 0; j < obj.objects.length; j++) { + mapIdsToRepeaterAndLayer(path, obj.objects, repeaterId); + } + } + } + } + }; + mapIdsToRepeaterAndLayer([], $ax.pageData.page.diagram.objects); + }; + + + + $ax.getPathFromScriptId = function(scriptId) { + var reversedPath = []; + var path = scriptIdToPath[scriptId]; + while(path && path.uniqueId) { + reversedPath[reversedPath.length] = path.uniqueId; + path = path.parent; + } + return reversedPath.reverse(); + }; + + var _getScriptIdFromFullPath = function(path) { + var current = $ax.pageData.objectPaths; + for(var i = 0; i < path.length; i++) { + current = current[path[i]]; + if(!current) return current; + } + return current && current.scriptId; + }; + + + var _getScriptIdFromPath = function(path, relativeTo) { + var relativePath = []; + var includeMasterInPath = false; + if(relativeTo) { + var relativeToScriptId; + if(relativeTo.srcElement) { //this is eventInfo + relativeToScriptId = $ax.repeater.getScriptIdFromElementId(relativeTo.srcElement); + includeMasterInPath = relativeTo.isMasterEvent; + } else if(typeof relativeTo === 'string') { //this is an element id + relativeToScriptId = relativeTo; + } + + if(relativeToScriptId) { + relativePath = $ax.getPathFromScriptId(relativeToScriptId); + if(!includeMasterInPath) relativePath = relativePath.slice(0, relativePath.length - 1); + } else if(relativeTo instanceof Array) { //this is a path + relativePath = relativeTo; + } + } + var fullPath = relativePath.concat(path); + var scriptId = _getScriptIdFromFullPath(fullPath); + return !$ax.visibility.isScriptIdLimbo(scriptId) && scriptId; + }; + $ax.getScriptIdFromPath = _getScriptIdFromPath; + + var _getElementIdsFromPath = function(path, eventInfo) { + var scriptId = _getScriptIdFromPath(path, eventInfo); + if (!scriptId) return []; + // Don't need placed check hear. If unplaced, scriptId will be undefined and exit out before here. + return $ax.getElementIdsFromEventAndScriptId(eventInfo, scriptId); + }; + $ax.getElementIdsFromPath = _getElementIdsFromPath; + + var _getElementIdFromPath = function (path, params) { + var scriptId = _getScriptIdFromPath(path, params.relativeTo); + if (!scriptId) return scriptId; + + var itemNum = params.itemNum; + if(params.relativeTo && typeof params.relativeTo === 'string') { + if($jobj(params.relativeTo)) itemNum = $ax.repeater.getItemIdFromElementId(params.relativeTo); + } + return $ax.repeater.createElementId(scriptId, itemNum); + }; + $ax.getElementIdFromPath = _getElementIdFromPath; + + var _getElementsIdFromEventAndScriptId = function(eventInfo, scriptId) { + var itemId = eventInfo && $ax.repeater.getItemIdFromElementId(eventInfo.srcElement); + var target = false; + // Try to get itemId from target if you can't get it from source. + if(!itemId) { + itemId = eventInfo && eventInfo.targetElement && $ax.repeater.getItemIdFromElementId(eventInfo.targetElement); + if(itemId) target = true; + } + + var parentRepeater = $ax.getParentRepeaterFromScriptId(scriptId); + if(parentRepeater && scriptId != parentRepeater) { + if(itemId && (!eventInfo || parentRepeater == $ax.getParentRepeaterFromScriptId($ax.repeater.getScriptIdFromElementId(target ? eventInfo.targetElement : eventInfo.srcElement)))) { + return [$ax.repeater.createElementId(scriptId, itemId)]; + } + var elementIds = []; + var itemIds = $ax.getItemIdsForRepeater(parentRepeater); + if(!itemIds) return []; + + for(var i = 0; i < itemIds.length; i++) elementIds[i] = $ax.repeater.createElementId(scriptId, itemIds[i]); + return elementIds; + } + return [scriptId]; + }; + $ax.getElementIdsFromEventAndScriptId = _getElementsIdFromEventAndScriptId; + + var _getSrcElementIdFromEvent = function(event) { + var currentQuery = $(event.srcElement || event.target); + while(currentQuery && currentQuery.length && (!$obj(currentQuery.attr('id')) || $jobj(currentQuery.attr('id')).hasClass('text'))) { + currentQuery = currentQuery.parent(); + }; + return currentQuery.attr('id'); + }; + $ax.getSrcElementIdFromEvent = _getSrcElementIdFromEvent; + + var _getEventInfoFromEvent = function(event, skipShowDescriptions, elementId) { + var eventInfo = {}; + eventInfo.srcElement = elementId; + eventInfo.now = new Date(); + + if(event != null) { + //elementId can be empty string, so can't simple use "or" assignment here. + eventInfo.srcElement = elementId || elementId == '' ? elementId : _getSrcElementIdFromEvent(event); + eventInfo.which = event.which; + + // When getting locations in mobile, need to extract the touch object to get the mouse location attributes + var mouseEvent = (event.originalEvent && event.originalEvent.changedTouches && event.originalEvent.changedTouches[0]) || event.originalEvent; + if(mouseEvent && !mouseEvent.type) mouseEvent.type = event.type; + + if(skipShowDescriptions) eventInfo.skipShowDescriptions = true; + + // Always update mouse location if possible + $ax.event.updateMouseLocation(mouseEvent); + } + + // Always set event info about cursor + var _cursor = eventInfo.cursor = {}; + _cursor.x = $ax.mouseLocation.x; + _cursor.y = $ax.mouseLocation.y; + + eventInfo.pageX = _cursor.x + 'px'; + eventInfo.pageY = _cursor.y + 'px'; + + // Do Keyboard Info + eventInfo.keyInfo = $ax.event.keyState(); + + eventInfo.window = _getWindowInfo(); + + eventInfo.thiswidget = _getWidgetInfo(eventInfo.srcElement); + eventInfo.item = _getItemInfo(eventInfo.srcElement); + eventInfo.dragInfo = $ax.drag.GetWidgetDragInfo(); + + return eventInfo; + }; + $ax.getEventInfoFromEvent = _getEventInfoFromEvent; + + var _getWindowInfo = function() { + var win = {}; + win.width = $(window).width(); + win.height = $(window).height(); + win.scrollx = $(window).scrollLeft(); + win.scrolly = $(window).scrollTop(); + return win; + }; + $ax.getWindowInfo = _getWindowInfo; + + var _getItemInfo = function(elementId) { + if(!elementId) return { valid: false }; + + elementId = _getParentElement(elementId); + + var index = $ax.repeater.getItemIdFromElementId(elementId); + if(!index) return { valid: false }; + + var item = { valid: true }; + + var scriptId = $ax.repeater.getScriptIdFromElementId(elementId); + var repeaterId = $ax.getParentRepeaterFromScriptId(scriptId); + item.repeater = _getWidgetInfo(repeaterId); + $ax.repeater.setDisplayProps(item, repeaterId, index); + item.ismarked = $ax.repeater.isEditItem(repeaterId, index); + item.isvisible = Boolean($jobj(elementId).length); + + return item; + }; + $ax.getItemInfo = _getItemInfo; + + var _getWidgetInfo = function(elementId) { + if(!elementId) return { valid: false }; + + elementId = _getParentElement(elementId); + + var elementAxQuery = $ax('#' + elementId); + var elementQuery = $jobj(elementId); + var obj = $obj(elementId); + var widget = { valid: true, isWidget: true }; + widget.elementId = elementId; + widget.name = widget.label = (elementQuery.data('label') ? elementQuery.data('label') : ''); + widget.text = $ax('#' + elementId).text(); + widget.opacity = Number(elementQuery.css('opacity')) * 100; + widget.rotation = $ax.move.getRotationDegree(widget.elementId); + var scriptId = $ax.repeater.getScriptIdFromElementId(elementId); + var repeaterId = $ax.getParentRepeaterFromScriptId(scriptId); + if (repeaterId) widget.repeater = $ax.public.fn.IsRepeater(obj.type) ? widget : _getWidgetInfo(repeaterId); + + if($ax.public.fn.IsLayer(obj.type)) { + var boundingRect = $ax.public.fn.getWidgetBoundingRect(elementId); + widget.x = boundingRect.left; + widget.y = boundingRect.top; + widget.width = boundingRect.width; + widget.height = boundingRect.height; + if(elementQuery.length != 0) { + widget.pagex = elementAxQuery.left(); + widget.pagey = elementAxQuery.top(); + } + } else { + var elementExists = elementQuery.length > 0; + var x = elementExists ? elementAxQuery.locRelativeIgnoreLayer(false) : 0; + var y = elementExists ? elementAxQuery.locRelativeIgnoreLayer(true) : 0; + + widget.x = x; + widget.y = y; + + if(elementExists) { + widget.pagex = elementAxQuery.left(); + widget.pagey = elementAxQuery.top(); + widget.width = elementAxQuery.width(); + widget.height = elementAxQuery.height(); + } + + //if (obj.generateCompound) { + // // assume this means that this is a compound vector. + // widget.x = boundingRect.left; + // widget.y = boundingRect.top; + + // //widget.pagex += boundingRect.left; + // //widget.pagey += boundingRect.top; + //} + + } + + + // Right now only dynamic panel can scroll + if ($ax.public.fn.IsDynamicPanel(obj.type)) { + var stateQuery = $('#' + $ax.visibility.GetPanelState(elementId)); + widget.scrollx = stateQuery.scrollLeft(); + widget.scrolly = stateQuery.scrollTop(); + + if($ax.dynamicPanelManager.isIdFitToContent(elementId)) { + widget.width = stateQuery.width(); + widget.height = stateQuery.height(); + } + } else { + widget.scrollx = 0; + widget.scrolly = 0; + } + + // repeater only props + if ($ax.public.fn.IsRepeater(obj.type)) { + widget.visibleitemcount = repeaterIdToItemIds[scriptId] ? repeaterIdToItemIds[scriptId].length : $ax.repeater.getVisibleDataCount(scriptId); + widget.itemcount = $ax.repeater.getFilteredDataCount(scriptId); + widget.datacount = $ax.repeater.getDataCount(scriptId); + widget.pagecount = $ax.repeater.getPageCount(scriptId); + widget.pageindex = $ax.repeater.getPageIndex(scriptId); + } + + widget.left = widget.leftfixed = widget.x; + widget.top = widget.topfixed = widget.y; + widget.right = widget.rightfixed = widget.x + widget.width; + widget.bottom = widget.bottomfixed = widget.y + widget.height; + + if(elementQuery.css('position') == 'fixed') { + var windowScrollLeft = $(window).scrollLeft(); + var windowScrollTop = $(window).scrollTop(); + widget.leftfixed = widget.left - windowScrollLeft; + widget.topfixed = widget.top - windowScrollTop; + widget.rightfixed = widget.right - windowScrollLeft; + widget.bottomfixed = widget.bottom - windowScrollTop; + } + return widget; + }; + $ax.getWidgetInfo = _getWidgetInfo; + + var _getParentElement = $ax.getParentElement = function(elementId) { + var obj = $obj(elementId); + while(obj.isContained) { + var path = $ax.getPathFromScriptId($ax.repeater.getScriptIdFromElementId(elementId)); + var itemId = $ax.repeater.getItemIdFromElementId(elementId); + path[path.length - 1] = obj.parent.id; + elementId = $ax.getElementIdFromPath(path, { itemNum: itemId }); + obj = $obj(elementId); + } + + return elementId; + }; + + $ax.addItemIdToRepeater = function(itemId, repeaterId) { + var itemIds = repeaterIdToItemIds[repeaterId]; + if(itemIds) itemIds[itemIds.length] = itemId; + else repeaterIdToItemIds[repeaterId] = [itemId]; + + var scriptIds = repeaterIdToScriptIds[repeaterId]; + for(var i = 0; i < scriptIds.length; i++) elementIdToObject[$ax.repeater.createElementId(scriptIds[i], itemId)] = $ax.getObjectFromScriptId(scriptIds[i]); + }; + + $ax.getAllElementIds = function() { + var elementIds = []; + for(var i = 0; i < _scriptIds.length; i++) { + var scriptId = _scriptIds[i]; + var repeaterId = scriptIdToRepeaterId[scriptId]; + if(repeaterId && repeaterId != scriptId) { + var itemIds = repeaterIdToItemIds[repeaterId] || []; + for(var j = 0; j < itemIds.length; j++) elementIds[elementIds.length] = $ax.repeater.createElementId(scriptId, itemIds[j]); + } else elementIds[elementIds.length] = scriptId; + } + return elementIds; + }; + + $ax.getAllScriptIds = function() { + return _scriptIds; + }; + + $ax.getObjectFromElementId = function(elementId) { + return $ax.getObjectFromScriptId($ax.repeater.getScriptIdFromElementId(elementId)); + }; + + $ax.getObjectFromScriptId = function(scriptId) { + return scriptIdToObject[scriptId]; + }; + + $ax.getParentRepeaterFromElementId = function(elementId) { + return $ax.getParentRepeaterFromScriptId($ax.repeater.getScriptIdFromElementId(elementId)); + }; + + $ax.getParentRepeaterFromScriptId = function(scriptId) { + return scriptIdToRepeaterId[scriptId]; + }; + + var _getChildScriptIdsForRepeater = function(repeaterId) { + return repeaterIdToScriptIds[repeaterId]; + }; + + var _getItemIdsForRepeater = function(repeaterId) { + return repeaterIdToItemIds[repeaterId] || []; + }; + $ax.getItemIdsForRepeater = _getItemIdsForRepeater; + + var _clearItemIdsForRepeater = function(repeaterId) { + repeaterIdToItemIds[repeaterId] = []; + }; + $ax.clearItemsForRepeater = _clearItemIdsForRepeater; + + $ax.getChildElementIdsForRepeater = function(repeaterId) { + var scriptIds = _getChildScriptIdsForRepeater(repeaterId); + var itemIds = _getItemIdsForRepeater(repeaterId); + + var retVal = []; + if(!itemIds || !scriptIds) return retVal; + + for(var i = 0; i < scriptIds.length; i++) { + for(var j = 0; j < itemIds.length; j++) { + retVal[retVal.length] = $ax.repeater.createElementId(scriptIds[i], itemIds[j]); + } + } + return retVal; + }; + + $ax.getRdoParentFromElementId = function(elementId) { + var scriptId = $ax.repeater.getScriptIdFromElementId(elementId); + var rdoId = scriptIdToPath[scriptId].parent.scriptId; + if($ax.getParentRepeaterFromScriptId(rdoId)) rdoId = $ax.repeater.createElementId(rdoId, $ax.repeater.getItemIdFromElementId(elementId)); + return rdoId; + }; + + $ax.getLayerParentFromElementId = function (elementId) { + var itemId = $ax.repeater.getItemIdFromElementId(elementId); + var scriptId = scriptIdToParentLayer[$ax.repeater.getScriptIdFromElementId(elementId)]; + return $ax.getParentRepeaterFromElementId(scriptId) ? $ax.repeater.createElementId(scriptId, itemId) : scriptId; + } + + $ax.updateElementText = function(elementId, text) { + elementIdToText[elementId] = text; + }; + + $ax.hasElementTextChanged = function(elementId, text) { + return elementIdToText[elementId] != text; + }; + + $ax.updateRadioButtonSelected = function(group, elementId) { + var old = radioGroupToSelectedElementId[group]; + radioGroupToSelectedElementId[group] = elementId; + return old; + }; + + $ax.hasRadioButtonSelectedChanged = function(group, elementId) { + return radioGroupToSelectedElementId[group] != elementId; + }; + })(); + + //Recursively populates fullPathArray with: + // [ { idPath, scriptId }, ... ] + //for every scriptId in the object + //also populates an object of scriptId -> path + var _pathToScriptIdHelper = function(currentPath, currentChain, fullPathArray, scriptIdToPath) { + for(var key in currentPath) { + if(key != "scriptId") { + var nextPath = currentPath[key]; + _pathToScriptIdHelper(nextPath, currentChain.concat(key), fullPathArray, scriptIdToPath); + nextPath.parent = currentPath; + nextPath.uniqueId = key; + } else { + fullPathArray[fullPathArray.length] = { idPath: currentChain, scriptId: currentPath.scriptId }; + scriptIdToPath[currentPath.scriptId] = currentPath; + } + } + }; + + $ax.public.loadCurrentPage = $ax.loadCurrentPage = function(pageData) { + $ax.pageData = _pageData = pageData; + _initializePageData(); + }; + + $ax.public.loadDocument = $ax.loadDocument = function(document) { + $ax.document = document; + _initializeDocumentData(); + }; + + + /** + Navigates to a page + + + */ + $ax.public.navigate = $ax.navigate = function(to) { //url, includeVariables, type) { + var targetUrl; + if(typeof (to) === 'object') { + includeVariables = to.includeVariables; + targetUrl = !includeVariables ? to.url : $ax.globalVariableProvider.getLinkUrl(to.url); + + if(to.target == "new") { + window.open(targetUrl, to.name); + } else if(to.target == "popup") { + var features = _getPopupFeatures(to.popupOptions); + window.open(targetUrl, to.name, features); + } else { + var targetLocation = window.location; + if(to.target == "current") { + } else if(to.target == "parent") { + targetLocation = top.opener.window.location; + } else if(to.target == "parentFrame") { + targetLocation = parent.location; + } else if(to.target == "frame") { + // targetLocation = to.frame.contentWindow.location; + $(to.frame).attr('src', targetUrl || 'about:blank'); + return; + } + + if (!_needsReload(targetLocation, to.url)) { + targetLocation.href = targetUrl || 'about:blank'; + } else { + targetLocation.href = $axure.utils.getReloadPath() + "#" + encodeURI(targetUrl); + } + } + } else { + $ax.navigate({ + url: to, + target: "current", + includeVariables: arguments[1] + }); + } + }; + + var _needsReload = function(oldLocation, newBaseUrl) { + var reload = false; + try { + var oldUrl = oldLocation.href; + var oldBaseUrl = oldUrl.split("#")[0]; + var lastslash = oldBaseUrl.lastIndexOf("/"); + if(lastslash > 0) { + oldBaseUrl = oldBaseUrl.substring(lastslash + 1, oldBaseUrl.length); + if(oldBaseUrl == encodeURI(newBaseUrl)) { + reload = true; + } + } + } catch(e) { + } + return reload; + }; + + var _getPopupFeatures = function(options) { + var defaultOptions = { + toolbar: true, + scrollbars: true, + location: true, + status: true, + menubar: true, + directories: true, + resizable: true, + centerwindow: true, + left: -1, + top: -1, + height: -1, + width: -1 + }; + + var selectedOptions = $.extend({}, defaultOptions, options); + + var optionsList = []; + optionsList.push('toolbar=' + (selectedOptions.toolbar ? 'yes' : 'no')); + optionsList.push('scrollbars=' + (selectedOptions.scrollbars ? 'yes' : 'no')); + optionsList.push('location=' + (selectedOptions.location ? 'yes' : 'no')); + optionsList.push('status=' + (selectedOptions.status ? 'yes' : 'no')); + optionsList.push('menubar=' + (selectedOptions.menubar ? 'yes' : 'no')); + optionsList.push('directories=' + (selectedOptions.directories ? 'yes' : 'no')); + optionsList.push('resizable=' + (selectedOptions.resizable ? 'yes' : 'no')); + + if(selectedOptions.centerwindow == false) { + if(selectedOptions.left > -1) { + optionsList.push('left=' + selectedOptions.left); + } + + if(selectedOptions.top > -1) { + optionsList.push('top=' + selectedOptions.top); + } + } + + var height = 0; + var width = 0; + if(selectedOptions.height > 0) { + optionsList.push('height=' + selectedOptions.height); + height = selectedOptions.height; + } + + if(selectedOptions.width > 0) { + optionsList.push('width=' + selectedOptions.width); + width = selectedOptions.width; + } + + var features = optionsList.join(','); + if(selectedOptions.centerwindow) { + var winl = (window.screen.width - width) / 2; + var wint = (window.screen.height - height) / 2; + features = features + ',left=' + winl + ',top=' + wint; + } + + return features; + }; + + /** + Closes a window + + + */ + $ax.public.closeWindow = $ax.closeWindow = function() { + parent.window.close(); + }; + + /** + Goes back + + + */ + $ax.public.back = $ax.back = function() { + window.history.go(-1); + }; + + /** + Reloads the current page. + # includeVariables: true if it should re-include the variables when the page is reloaded + */ + $ax.public.reload = $ax.reload = function(includeVariables) { + var targetUrl = (includeVariables === false) + ? $axure.utils.getReloadPath() + "#" + encodeURI($ax.pageData.url) + : $axure.utils.getReloadPath() + "#" + encodeURI($ax.globalVariableProvider.getLinkUrl($ax.pageData.url)); + window.location.href = targetUrl; + }; + + /** + Sets a variable. + # name: The name of the global variable to set + # value: The value that should be set + */ + $ax.public.setGlobalVariable = $ax.setGlobalVariable = function(name, value) { + if(!name || !value) { + return; + } + + $ax.globalVariableProvider.setVariableValue(name, value); + }; + + /** + Gets the value of a global variable + # name: The name of the global variable value to get + */ + $ax.public.getGlobalVariable = $ax.getGlobalVariable = function(name) { + $ax.globalVariableProvider.getVariableValue(name); + }; + + $ax.getObjectFromElementIdDisregardHex = function (elementId) { + var elementIdInput = elementId.charAt(0) == '#' ? elementId.substring(1) : elementId; + return this.getObjectFromElementId(elementIdInput); + } + + + $ax.getTypeFromElementId = function(elementId) { + var obj = this.getObjectFromElementIdDisregardHex(elementId); + return obj && obj.type; + }; + + $ax.getNumFromPx = function(pxNum) { + return Number(pxNum.replace('px', '')); + } + +}); \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/drag.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/drag.js" new file mode 100644 index 0000000..d649494 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/drag.js" @@ -0,0 +1,322 @@ +锘$axure.internal(function($ax) { + var widgetDragInfo = new Object(); + var _drag = {}; + $ax.drag = _drag; + + $ax.drag.GetWidgetDragInfo = function() { + return $.extend({}, widgetDragInfo); + }; + + $ax.drag.StartDragWidget = function(event, id) { + $ax.setjBrowserEvent(jQuery.Event(event)); + if(event.donotdrag) return; + + var x, y; + var tg; + if(IE_10_AND_BELOW) { + x = window.event.clientX + window.document.documentElement.scrollLeft + window.document.body.scrollLeft; + y = window.event.clientY + window.document.documentElement.scrollTop + window.document.body.scrollTop; + tg = window.event.srcElement; + } else { + if(event.changedTouches) { + x = event.changedTouches[0].pageX; + y = event.changedTouches[0].pageY; + } else { + x = event.pageX; + y = event.pageY; + event.preventDefault(); + } + tg = event.target; + } + + widgetDragInfo.hasStarted = false; + widgetDragInfo.widgetId = id; + widgetDragInfo.cursorStartX = x; + widgetDragInfo.cursorStartY = y; + widgetDragInfo.lastX = x; + widgetDragInfo.lastY = y; + widgetDragInfo.currentX = x; + widgetDragInfo.currentY = y; + + widgetDragInfo.movedWidgets = new Object(); + widgetDragInfo.startTime = (new Date()).getTime(); + widgetDragInfo.targetWidget = tg; + + var movedownName = IE_10_AND_BELOW && $ax.features.supports.windowsMobile ? + $ax.features.eventNames.mouseDownName : $ax.features.eventNames.mouseMoveName; + $ax.event.addEvent(document, movedownName, _dragWidget, true); + $ax.event.addEvent(document, $ax.features.eventNames.mouseUpName, _stopDragWidget, true); + +// if(IE && BROWSER_VERSION < 9) { +// if($ax.features.supports.windowsMobile) { +// window.document.attachEvent($ax.features.eventNames.mouseDownName, _dragWidget); +// window.document.attachEvent($ax.features.eventNames.mouseUpName, _stopDragWidget); +// } else { +// window.document.attachEvent('on' + $ax.features.eventNames.mouseMoveName, _dragWidget); +// window.document.attachEvent('on' + $ax.features.eventNames.mouseUpName, _stopDragWidget); +// } +// } else { +// window.document.addEventListener($ax.features.eventNames.mouseMoveName, _dragWidget, true); +// window.document.addEventListener($ax.features.eventNames.mouseUpName, _stopDragWidget, true); +// } + $ax.legacy.SuppressBubble(event); + }; + + var _dragWidget = function(event) { + $ax.setjBrowserEvent(jQuery.Event(event)); + + var x, y; + if(IE_10_AND_BELOW) { + x = window.event.clientX + window.document.documentElement.scrollLeft + window.document.body.scrollLeft; + y = window.event.clientY + window.document.documentElement.scrollTop + window.document.body.scrollTop; + } else { + if(event.changedTouches) { + x = event.changedTouches[0].pageX; + y = event.changedTouches[0].pageY; + //allow scroll (defaults) if only swipe events have cases and delta x is less than 5px and not blocking scrolling + var deltaX = x - widgetDragInfo.currentX; + var target = window.document.getElementById(widgetDragInfo.widgetId); + if($ax.event.hasSyntheticEvent(widgetDragInfo.widgetId, "onDrag") || $ax.event.hasSyntheticEvent(widgetDragInfo.widgetId, "onSwipeUp") || + $ax.event.hasSyntheticEvent(widgetDragInfo.widgetId, "onSwipeDown") || (deltaX * deltaX) > 25 + || ($ax.document.configuration.preventScroll && $ax.legacy.GetScrollable(target) == window.document.body)) { + event.preventDefault(); + } + } else { + x = event.pageX; + y = event.pageY; + } + } + widgetDragInfo.xDelta = x - widgetDragInfo.currentX; + widgetDragInfo.yDelta = y - widgetDragInfo.currentY; + widgetDragInfo.lastX = widgetDragInfo.currentX; + widgetDragInfo.lastY = widgetDragInfo.currentY; + widgetDragInfo.currentX = x; + widgetDragInfo.currentY = y; + + widgetDragInfo.currentTime = (new Date()).getTime(); + + $ax.legacy.SuppressBubble(event); + + if(!widgetDragInfo.hasStarted) { + widgetDragInfo.hasStarted = true; + $ax.event.raiseSyntheticEvent(widgetDragInfo.widgetId, "onDragStart"); + + widgetDragInfo.oldBodyCursor = window.document.body.style.cursor; + window.document.body.style.cursor = 'move'; + var widget = window.document.getElementById(widgetDragInfo.widgetId); + widgetDragInfo.oldCursor = widget.style.cursor; + widget.style.cursor = 'move'; + } + + $ax.event.raiseSyntheticEvent(widgetDragInfo.widgetId, "onDrag"); + }; + + var _suppressClickAfterDrag = function(event) { + _removeSuppressEvents(); + + $ax.legacy.SuppressBubble(event); + }; + + var _removeSuppressEvents = function () { + if(IE_10_AND_BELOW) { + $ax.event.removeEvent(event.srcElement, 'click', _suppressClickAfterDrag, undefined, true); + $ax.event.removeEvent(widgetDragInfo.targetWidget, 'mousemove', _removeSuppressEvents, undefined, true); + } else { + $ax.event.removeEvent(document, "click", _suppressClickAfterDrag, true); + $ax.event.removeEvent(document, 'mousemove', _removeSuppressEvents, true); + } + }; + + var _stopDragWidget = function(event) { + $ax.setjBrowserEvent(jQuery.Event(event)); + + var tg; + + + var movedownName = IE_10_AND_BELOW && $ax.features.supports.windowsMobile ? + $ax.features.eventNames.mouseDownName : $ax.features.eventNames.mouseMoveName; + $ax.event.removeEvent(document, movedownName, _dragWidget, true); + $ax.event.removeEvent(document, $ax.features.eventNames.mouseUpName, _stopDragWidget, true); + + tg = IE_10_AND_BELOW ? window.event.srcElement : event.target; +// +// +// if(OLD_IE && BROWSER_VERSION < 9) { +// if($ax.features.supports.windowsMobile) { +// window.document.detachEvent($ax.features.eventNames.mouseDownName, _dragWidget); +// window.document.detachEvent($ax.features.eventNames.mouseUpName, _stopDragWidget); +// +// } else { +// window.document.detachEvent('on' + $ax.features.eventNames.mouseMoveName, _dragWidget); +// window.document.detachEvent('on' + $ax.features.eventNames.mouseUpName, _stopDragWidget); +// } +// tg = window.event.srcElement; +// } else { +// window.document.removeEventListener($ax.features.eventNames.mouseMoveName, _dragWidget, true); +// window.document.removeEventListener($ax.features.eventNames.mouseUpName, _stopDragWidget, true); +// tg = event.target; +// } + + if(widgetDragInfo.hasStarted) { + widgetDragInfo.currentTime = (new Date()).getTime(); + $ax.event.raiseSyntheticEvent(widgetDragInfo.widgetId, "onDragDrop"); + + if($ax.globalVariableProvider.getVariableValue('totaldragx') < -30 && $ax.globalVariableProvider.getVariableValue('dragtime') < 1000) { + $ax.event.raiseSyntheticEvent(widgetDragInfo.widgetId, "onSwipeLeft"); + } + + if($ax.globalVariableProvider.getVariableValue('totaldragx') > 30 && $ax.globalVariableProvider.getVariableValue('dragtime') < 1000) { + $ax.event.raiseSyntheticEvent(widgetDragInfo.widgetId, "onSwipeRight"); + } + + var totalDragY = $ax.globalVariableProvider.getVariableValue('totaldragy'); + if(totalDragY < -30 && $ax.globalVariableProvider.getVariableValue('dragtime') < 1000) { + $ax.event.raiseSyntheticEvent(widgetDragInfo.widgetId, "onSwipeUp"); + } + + if(totalDragY > 30 && $ax.globalVariableProvider.getVariableValue('dragtime') < 1000) { + $ax.event.raiseSyntheticEvent(widgetDragInfo.widgetId, "onSwipeDown"); + } + + window.document.body.style.cursor = widgetDragInfo.oldBodyCursor; + var widget = window.document.getElementById(widgetDragInfo.widgetId); + // It may be null if OnDragDrop filtered out the widget + if(widget != null) widget.style.cursor = widgetDragInfo.oldCursor; + + if(widgetDragInfo.targetWidget == tg && !event.changedTouches) { + // suppress the click after the drag on desktop browsers + if(IE_10_AND_BELOW && widgetDragInfo.targetWidget) { + $ax.event.addEvent(widgetDragInfo.targetWidget, 'click', _suppressClickAfterDrag, true, true); + $ax.event.addEvent(widgetDragInfo.targetWidget, "onmousemove", _removeSuppressEvents, true, true); + } else { + $ax.event.addEvent(document, "click", _suppressClickAfterDrag, true); + $ax.event.addEvent(document, "mousemove", _removeSuppressEvents, true); + + } +// +// +// if(IE && BROWSER_VERSION < 9 && widgetDragInfo.targetWidget) { +// widgetDragInfo.targetWidget.attachEvent("onclick", _suppressClickAfterDrag); +// widgetDragInfo.targetWidget.attachEvent("onmousemove", _removeSuppressEvents); +// } else { +// window.document.addEventListener("click", _suppressClickAfterDrag, true); +// window.document.addEventListener("mousemove", _removeSuppressEvents, true); +// } + } + } + + widgetDragInfo.hasStarted = false; + widgetDragInfo.movedWidgets = new Object(); + + return false; + }; + + $ax.drag.GetDragX = function() { + if(widgetDragInfo.hasStarted) return widgetDragInfo.xDelta; + return 0; + }; + + $ax.drag.GetDragY = function() { + if(widgetDragInfo.hasStarted) return widgetDragInfo.yDelta; + return 0; + }; + + $ax.drag.GetTotalDragX = function() { + if(widgetDragInfo.hasStarted) return widgetDragInfo.currentX - widgetDragInfo.cursorStartX; + return 0; + }; + + $ax.drag.GetTotalDragY = function() { + if(widgetDragInfo.hasStarted) return widgetDragInfo.currentY - widgetDragInfo.cursorStartY; + return 0; + }; + + $ax.drag.GetDragTime = function() { + if(widgetDragInfo.hasStarted) return widgetDragInfo.currentTime - widgetDragInfo.startTime; + return 600000; + }; + + // $ax.drag.GetCursorRectangles = function() { + // var rects = new Object(); + // rects.lastRect = new rect($ax.lastMouseLocation.x, $ax.lastMouseLocation.y, 1, 1); + // rects.currentRect = new rect($ax.mouseLocation.x, $ax.mouseLocation.y, 1, 1); + // return rects; + // }; + + // $ax.drag.GetWidgetRectangles = function(id) { + // var widget = window.document.getElementById(id); + // var rects = new Object(); + // rects.lastRect = new rect($ax.legacy.getAbsoluteLeft(widget), $ax.legacy.getAbsoluteTop(widget), Number($('#' + id).css('width').replace("px", "")), Number($('#' + id).css('height').replace("px", ""))); + // rects.currentRect = rects.lastRect; + // return rects; + // }; + + // $ax.drag.IsEntering = function(movingRects, targetRects) { + // return !movingRects.lastRect.IntersectsWith(targetRects.currentRect) && movingRects.currentRect.IntersectsWith(targetRects.currentRect); + // }; + + // $ax.drag.IsLeaving = function(movingRects, targetRects) { + // return movingRects.lastRect.IntersectsWith(targetRects.currentRect) && !movingRects.currentRect.IntersectsWith(targetRects.currentRect); + // }; + + // function IsOver(movingRects, targetRects) { + // return movingRects.currentRect.IntersectsWith(targetRects.currentRect); + // } + + // function IsNotOver(movingRects, targetRects) { + // return !IsOver(movingRects, targetRects); + // } + + $ax.drag.LogMovedWidgetForDrag = function (id, dragInfo) { + dragInfo = dragInfo || widgetDragInfo; + if(dragInfo.hasStarted) { + var containerIndex = id.indexOf('_container'); + if(containerIndex != -1) id = id.substring(0, containerIndex); + + // If state or other non-widget id, this should not be dragged, and should exit out to avoid exceptions. + if(!$obj(id)) return; + + var query = $ax('#' + id); + var x = query.left(); + var y = query.top(); + + var movedWidgets = dragInfo.movedWidgets; + if(!movedWidgets[id]) { + movedWidgets[id] = new Location(x, y); + } + } + }; + + var Location = function(x, y) { + this.x = x; + this.y = y; + }; + $ax.drag.location = Location; + + var Rectangle = $ax.drag.Rectangle = function(x, y, width, height) { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + this.right = x + width; + this.bottom = y + height; + }; + + Rectangle.prototype.IntersectsWith = function(rect) { + if(this.Invalid()) return false; + if(rect.length) { + for(var i = 0; i < rect.length; i++) if(!rect[i].Invalid && this.IntersectsWith(rect[i])) return true; + return false; + } + if(rect.Invalid()) return false; + return this.x < rect.right && this.right > rect.x && this.y < rect.bottom && this.bottom > rect.y; + }; + + Rectangle.prototype.Invalid = function() { + return this.x == -1 && this.y == -1 && this.width == -1 && this.height == -1; + }; + + Rectangle.prototype.Move = function(x, y) { + return new Rectangle(x, y, this.width, this.height); + }; +}); \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/events.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/events.js" new file mode 100644 index 0000000..c8318fe --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/events.js" @@ -0,0 +1,1736 @@ +锘// ******* Features MANAGER ******** // + +$axure.internal(function($ax) { + var _features = $ax.features = {}; + var _supports = _features.supports = {}; + _supports.touchstart = typeof window.ontouchstart !== 'undefined'; + _supports.touchmove = typeof window.ontouchmove !== 'undefined'; + _supports.touchend = typeof window.ontouchend !== 'undefined'; + + _supports.mobile = _supports.touchstart && _supports.touchend && _supports.touchmove; + // Got this from http://stackoverflow.com/questions/11381673/javascript-solution-to-detect-mobile-browser + var check = navigator.userAgent.match(/Android/i) + || navigator.userAgent.match(/webOS/i) + || navigator.userAgent.match(/iPhone/i) + || navigator.userAgent.match(/iPad/i) + || navigator.userAgent.match(/iPod/i) + || navigator.userAgent.match(/BlackBerry/i) + || navigator.userAgent.match(/Tablet PC/i) + || navigator.userAgent.match(/Windows Phone/i); + + _supports.windowsMobile = navigator.userAgent.match(/Tablet PC/i) || navigator.userAgent.match(/Windows Phone/i); + + if(!check && _supports.mobile) { + _supports.touchstart = false; + _supports.touchmove = false; + _supports.touchend = false; + _supports.mobile = false; + } + + var _eventNames = _features.eventNames = {}; + _eventNames.mouseDownName = _supports.touchstart ? 'touchstart' : 'mousedown'; + _eventNames.mouseUpName = _supports.touchend ? 'touchend' : 'mouseup'; + _eventNames.mouseMoveName = _supports.touchmove ? 'touchmove' : 'mousemove'; +}); + +// ******* EVENT MANAGER ******** // +$axure.internal(function($ax) { + var _objectIdToEventHandlers = {}; + + var _jBrowserEvent = undefined; + $ax.setjBrowserEvent = function(event) { + _jBrowserEvent = event; + }; + + $ax.getjBrowserEvent = function() { + return _jBrowserEvent; + }; + + var _event = {}; + $ax.event = _event; + + //initilize state + _event.mouseOverObjectId = ''; + _event.mouseDownObjectId = ''; + _event.mouseOverIds = []; + + var EVENT_NAMES = ['mouseenter', 'mouseleave', 'contextmenu', 'change', 'focus', 'blur']; + + + // Tap, double tap, and touch move, or synthetic. + if(!$ax.features.supports.mobile) { + EVENT_NAMES[EVENT_NAMES.length] = 'click'; + EVENT_NAMES[EVENT_NAMES.length] = 'dblclick'; + EVENT_NAMES[EVENT_NAMES.length] = 'mousemove'; + } + + // add the event names for the touch events + EVENT_NAMES[EVENT_NAMES.length] = $ax.features.eventNames.mouseDownName; + EVENT_NAMES[EVENT_NAMES.length] = $ax.features.eventNames.mouseUpName; + + for(var i = 0; i < EVENT_NAMES.length; i++) { + var eventName = EVENT_NAMES[i]; + //we need the function here to circumvent closure modifying eventName + _event[eventName] = (function(event_Name) { + return function(elementId, fn) { + var elementIdQuery = $jobj(elementId); + var type = $ax.getTypeFromElementId(elementId); + + //we need specially track link events so we can enable and disable them along with + //their parent widgets + if(elementIdQuery.is('a')) _attachCustomObjectEvent(elementId, event_Name, fn); + //see notes below + else if($ax.IsTreeNodeObject(type)) _attachTreeNodeEvent(elementId, event_Name, fn); + else if ($ax.IsImageFocusable(type) && (event_Name == 'focus' || event_Name == 'blur')) { + var suitableChild; + var imgChild = $ax.repeater.applySuffixToElementId(elementId, '_img'); + var divChild = $ax.repeater.applySuffixToElementId(elementId, '_div'); + + for (var j = 0; j < elementIdQuery[0].children.length; j++) { + if (elementIdQuery[0].children[j].id == imgChild) suitableChild = imgChild; + if (!suitableChild && elementIdQuery[0].children[j].id == divChild) suitableChild = divChild; + } + if(!suitableChild) suitableChild = imgChild; + _attachDefaultObjectEvent($jobj(suitableChild), elementId, event_Name, fn); + } else { + var inputId = $ax.INPUT(elementId); + var isInput = $jobj(inputId).length != 0; + var id = isInput && (event_Name == 'focus' || event_Name == 'blur') ? inputId : elementId; + _attachDefaultObjectEvent($jobj(id), elementId, event_Name, fn); + } + }; + })(eventName); + } + + var AXURE_TO_JQUERY_EVENT_NAMES = { + 'onMouseOver': 'mouseenter', + 'onMouseOut': 'mouseleave', + 'onContextMenu': 'contextmenu', + 'onChange': 'change', + 'onFocus': 'focus', + 'onLostFocus': 'blur' + }; + + // Tap, double tap, and touch move, or synthetic. + if(!$ax.features.supports.mobile) { + AXURE_TO_JQUERY_EVENT_NAMES.onClick = 'click'; + AXURE_TO_JQUERY_EVENT_NAMES.onDoubleClick = 'dblclick'; + AXURE_TO_JQUERY_EVENT_NAMES.onMouseMove = 'mousemove'; + } + + AXURE_TO_JQUERY_EVENT_NAMES.onMouseDown = $ax.features.eventNames.mouseDownName; + AXURE_TO_JQUERY_EVENT_NAMES.onMouseUp = $ax.features.eventNames.mouseUpName; + + var _attachEvents = function (diagramObject, elementId) { + + var inputId = $ax.repeater.applySuffixToElementId(elementId, '_input'); + var id = $jobj(inputId).length ? inputId : elementId; + + for(var eventName in diagramObject.interactionMap) { + var jQueryEventName = AXURE_TO_JQUERY_EVENT_NAMES[eventName]; + if(!jQueryEventName) continue; + + _event[jQueryEventName](id, + //this is needed to escape closure + (function(axEventObject) { + return function(e) { + $ax.setjBrowserEvent(e); + // console.log(axEventObject.description); + var eventInfo = $ax.getEventInfoFromEvent($ax.getjBrowserEvent(), false, elementId); + _handleEvent(elementId, eventInfo, axEventObject); + }; + })(diagramObject.interactionMap[eventName]) + ); + } + + }; + + var _descriptionToKey = { 'OnFocus': 'onFocus', 'OnLostFocus': 'onLostFocus' }; + var _createProxies = function(diagramObject, elementId) { + var createFocus = _needsProxy(elementId, 'onFocus'); + var createLostFocus = _needsProxy(elementId, 'onLostFocus'); + + if(!createFocus && !createLostFocus) return; + + if(!diagramObject.interactionMap) diagramObject.interactionMap = {}; + if(createFocus) diagramObject.interactionMap.onFocus = { proxy: true, description: 'OnFocus' }; + if(createLostFocus) diagramObject.interactionMap.onLostFocus = { proxy: true, description: 'OnLostFocus' }; + } + + var preventDefaultEvents = ['OnContextMenu', 'OnKeyUp', 'OnKeyDown']; + var allowBubble = ['OnFocus', 'OnResize', 'OnMouseOut', 'OnMouseOver']; + + var _canClick = true; + var _startScroll = []; + var _setCanClick = function(canClick) { + _canClick = canClick; + if(_canClick) _startScroll = [$(window).scrollLeft(), $(window).scrollTop()]; + }; + + var _getCanClick = function() { + if(!$ax.features.supports.mobile) return true; + var endScroll = [$(window).scrollLeft(), $(window).scrollTop()]; + return _canClick && _startScroll[0] == endScroll[0] && _startScroll[1] == endScroll[1]; + }; + + //var _notAllowedInvisible = function (type) { + // $ax.getTypeFromElementId(elementId); + + // return !$ax.public.fn.IsReferenceDiagramObject(type) && !$ax.public.fn.IsLayer(type); + //} + + + var _notAllowedInvisible = function (id) { + var type = $ax.getTypeFromElementId(id); + if ($ax.public.fn.IsReferenceDiagramObject(type) || $ax.public.fn.IsLayer(type)) return false; + return !($ax.public.fn.IsVector(type) && _hasCompoundImage(id)); + } + + var _hasCompoundImage = function (id) { + var query = $jobj(id); + return $ax.public.fn.isCompoundVectorHtml(query[0]); + } + + var eventNesting = 0; + var eventNestingTime = new Date().getTime(); + + var _handleEvent = $ax.event.handleEvent = function(elementId, eventInfo, axEventObject, skipShowDescriptions, synthetic) { + if(axEventObject.proxy) { + var firingId = _widgetToFocusParent[elementId]; + if(firingId) { + var firingObj = $obj(firingId); + var nextEventObj = firingObj.interactionMap && firingObj.interactionMap[_descriptionToKey[axEventObject.description]]; + if(!nextEventObj) nextEventObj = axEventObject; + _handleEvent(firingId, eventInfo, nextEventObj, skipShowDescriptions, synthetic); + } + return; + } +// var x = JSON.stringify(eventInfo); +// var y = JSON.stringify(axEventObject); + + var fireTime = new Date().getTime(); + + if(fireTime - eventNestingTime > 100) { + eventNestingTime = fireTime; + eventNesting = 0; + } + + if(eventNesting === 0) { + $ax.recording.maybeRecordEvent(elementId, eventInfo, axEventObject, fireTime); + } + + eventNesting += 1; + + var eventDescription = axEventObject.description; + if(!_getCanClick() && (eventDescription == 'OnClick' || eventDescription == 'OnPageClick')) return; + // If you are supposed to suppress, do that right away. + if(suppressedEventStatus[eventDescription]) { + return; + } + + var currentEvent = $ax.getjBrowserEvent(); + if(!synthetic && currentEvent && currentEvent.originalEvent && currentEvent.originalEvent.handled && !eventInfo.isMasterEvent) return; + if(!synthetic && elementId && !$ax.style.getObjVisible(elementId) && _notAllowedInvisible(elementId)) return; + + //if debug + var axObj = $obj(elementId); + var axObjLabel = axObj ? axObj.label : eventInfo.label; + var axObjType = axObj ? axObj.friendlyType : eventInfo.friendlyType; + if(!skipShowDescriptions || eventDescription == 'OnPageLoad') $ax.messageCenter.postMessage('axEvent', { 'label': axObjLabel, 'type': axObjType, 'event': axEventObject }); + + var bubble = true; + var showCaseDescriptions = !skipShowDescriptions && _shouldShowCaseDescriptions(axEventObject); + if(!showCaseDescriptions) { + //handle case descriptions + var caseGroups = []; + var currentCaseGroup = []; + caseGroups[0] = currentCaseGroup; + + // Those refreshes not after a wait + var guaranteedRefreshes = {}; + + var caseGroupIndex = 0; + for(var i = 0; i < axEventObject.cases.length; i++) { + var currentCase = axEventObject.cases[i]; + if(currentCase.isNewIfGroup && i != 0) { + caseGroupIndex++; + currentCaseGroup = []; + caseGroups[caseGroups.length] = currentCaseGroup; + // Joon: Isn't caseGroups.length always equal to caseGroupIndex? + } + currentCaseGroup[currentCaseGroup.length] = currentCase; + + for(var j = 0; j < currentCase.actions.length; j++) { + var action = currentCase.actions[j]; + if(action.action == 'wait') break; + if(action.action != 'refreshRepeater') continue; + for(var k = 0; k < action.repeatersToRefresh.length; k++) { + var id = $ax.getElementIdsFromPath(action.repeatersToRefresh[k], eventInfo)[0]; + if(id) guaranteedRefreshes[id] = caseGroupIndex; + } + } + } + + for(var i = 0; i < caseGroups.length; i++) { + var groupRefreshes = []; + for(var key in guaranteedRefreshes) { + if(guaranteedRefreshes[key] == i) groupRefreshes[groupRefreshes.length] = key; + } + bubble = _handleCaseGroup(eventInfo, caseGroups[i], groupRefreshes) && bubble; + } + } else { + _showCaseDescriptions(elementId, eventInfo, axEventObject, synthetic); + bubble = false; + } + + // If not handled, synthetically bubble if you can + if(bubble && _widgetToFocusParent[elementId]) { + firingId = _widgetToFocusParent[elementId]; + if(firingId) { + firingObj = $obj(firingId); + nextEventObj = firingObj.interactionMap && firingObj.interactionMap[_descriptionToKey[axEventObject.description]]; + if(!nextEventObj) nextEventObj = axEventObject; + _handleEvent(firingId, eventInfo, nextEventObj, skipShowDescriptions, synthetic); + } + return; + } + + // Only trigger a supression if it handled this event + if(!bubble && suppressingEvents[eventDescription]) { + suppressedEventStatus[suppressingEvents[eventDescription]] = true; + } + + $ax.action.flushAllResizeMoveActions(eventInfo); + + // This should not be needed anymore. All refreshes should be inserted, or handled earlier. + var repeaters = $ax.deepCopy($ax.action.repeatersToRefresh); + while($ax.action.repeatersToRefresh.length) $ax.action.repeatersToRefresh.pop(); + for(i = 0; i < repeaters.length; i++) $ax.repeater.refreshRepeater(repeaters[i], eventInfo); + + if(currentEvent && currentEvent.originalEvent) { + currentEvent.originalEvent.handled = !synthetic && !bubble && allowBubble.indexOf(eventDescription) == -1; + //currentEvent.originalEvent.donotdrag = currentEvent.donotdrag || (!bubble && eventDescription == 'OnMouseDown'); + + // Prevent default if necessary + if(currentEvent.originalEvent.handled && preventDefaultEvents.indexOf(eventDescription) != -1) { + currentEvent.preventDefault(); + } + } + + eventNesting -= 1; + + if(!showCaseDescriptions) $ax.messageCenter.postMessage('axEventComplete'); + + }; + + var _showCaseDescriptions = function(elementId, eventInfo, axEventObject, synthetic) { + + if(axEventObject.cases.length == 0) return true; + + var linksId = elementId + "linkBox"; + $('#' + linksId).remove(); + + var $container = $("
    "); + + if(!_isEventSimulating(axEventObject)) { + var copy = $ax.eventCopy(eventInfo); + for(var i = 0; i < axEventObject.cases.length; i++) { + var $link = $(""); + $link.click(function(j) { + return function () { + var currentCase = axEventObject.cases[j]; + $ax.messageCenter.postMessage('axCase', { 'description': currentCase.description }); + for(var k = 0; k < currentCase.actions.length; k++) { + $ax.messageCenter.postMessage('axAction', { 'description': currentCase.actions[k].description }); + } + $ax.messageCenter.postMessage('axEventComplete'); + + var bubble = $ax.action.dispatchAction(copy, axEventObject.cases[j].actions); + $('#' + linksId).remove(); + return bubble; + }; + } (i) + ); + + $container.append($link); + } + } else { + var fullDescription = axEventObject.description + ":
    "; + for(var i = 0; i < axEventObject.cases.length; i++) { + var currentCase = axEventObject.cases[i]; + fullDescription += "  " + currentCase.description.replace(/
    /g, '
      ') + ":
    "; + for(var j = 0; j < currentCase.actions.length; j++) { + fullDescription += "    " + currentCase.actions[j].description.replace(/
    /g, '
          ') + "
    "; + } + } + fullDescription = fullDescription.substring(0, fullDescription.length - 4); + + var $link = $(""); + $link.click(function() { + _handleEvent(elementId, eventInfo, axEventObject, true, synthetic); + $ax.messageCenter.postMessage('axEventComplete'); + $('#' + linksId).remove(); + return; + }); + $container.append($link); + } + $container.mouseleave(function(e) { $ax.legacy.SuppressBubble(e); }); + $('body').append($container); + _showCaseLinks(eventInfo, linksId); + }; + + var _showCaseLinks = function(eventInfo, linksId) { + var links = window.document.getElementById(linksId); + + links.style.top = eventInfo.pageY; + + var left = eventInfo.pageX; + links.style.left = left; + $ax.visibility.SetVisible(links, true); + $ax.legacy.BringToFront(linksId, true); + // Switch to using jquery if this is still needed. Really old legacy code, likely for a browser no longer supported. + //$ax.legacy.RefreshScreen(); + }; + + + var _shouldShowCaseDescriptions = function(axEventObject) { + if($ax.document.configuration.linkStyle == "alwaysDisplayTargets") return true; + if($ax.document.configuration.linkStyle == "neverDisplayTargets") return false; + if(axEventObject.cases.length == 0) return false; + if(_isEventSimulating(axEventObject)) return false; + if(axEventObject.cases.length >= 2) return true; + return false; + }; + + var _isEventSimulating = function(axEventObject) { + for(var i = 0; i < axEventObject.cases.length; i++) { + if(axEventObject.cases[i].condition) return true; + } + return false; + }; + + var _handleCaseGroup = function(eventInfo, caseGroup, groupRefreshes) { + for(var i = 0; i < caseGroup.length; i++) { + var currentCase = caseGroup[i]; + if(!currentCase.condition || _processCondition(currentCase.condition, eventInfo)) { + $ax.messageCenter.postMessage('axCase', { 'description': currentCase.description }); + for(var j = 0; j < currentCase.actions.length; j++) { + if(currentCase.actions[j].action != 'refreshRepeater') $ax.messageCenter.postMessage('axAction', { 'description': currentCase.actions[j].description }); + } + + for(var j = 0; j < currentCase.actions.length; j++) { + var action = currentCase.actions[j]; + if(action.action == 'wait') break; + if(action.action != 'refreshRepeater') continue; + for(var k = 0; k < action.repeatersToRefresh.length; k++) { + var id = $ax.getElementIdsFromPath(action.repeatersToRefresh[i], eventInfo)[i]; + if(id) { + var index = groupRefreshes.indexOf(id); + if(index != -1) $ax.splice(groupRefreshes, index); + } + } + } + + // Any guaranteed refreshes that aren't accounted for must be run still. + $ax.action.tryRefreshRepeaters(groupRefreshes, eventInfo); + + $ax.action.dispatchAction(eventInfo, currentCase.actions); + return false; + } + } + + // Any guaranteed refreshes that aren't accounted for must be run still. + $ax.action.tryRefreshRepeaters(groupRefreshes, eventInfo); + return true; + }; + + var _processCondition = function(expr, eventInfo) { + return $ax.expr.evaluateExpr(expr, eventInfo); + }; + + var _attachTreeNodeEvent = function(elementId, eventName, fn) { + //we need to set the cursor here because we want to make sure that every tree node has the default + //cursor set and then it's overridden if it has a click + if(eventName == 'click') window.document.getElementById(elementId).style.cursor = 'pointer'; + + _attachCustomObjectEvent(elementId, eventName, fn); + }; + + var _attachDefaultObjectEvent = function(elementIdQuery, elementId, eventName, fn) { + var func = function() { + if(!$ax.style.IsWidgetDisabled(elementId)) return fn.apply(this, arguments); + return true; + }; + + var bind = !elementIdQuery[eventName]; + if(bind) elementIdQuery.bind(eventName, func); + else elementIdQuery[eventName](func); + }; + + var _attachCustomObjectEvent = function(elementId, eventName, fn) { + var handlers = _objectIdToEventHandlers[elementId]; + if(!handlers) _objectIdToEventHandlers[elementId] = handlers = {}; + + var fnList = handlers[eventName]; + if(!fnList) handlers[eventName] = fnList = []; + + fnList[fnList.length] = fn; + }; + + var _fireObjectEvent = function(elementId, event, originalArgs) { + var element = window.document.getElementById(elementId); + + var handlerList = _objectIdToEventHandlers[elementId] && _objectIdToEventHandlers[elementId][event]; + if(handlerList) { + for(var i = 0; i < handlerList.length; i++) handlerList[i].apply(element, originalArgs); + } + + eventNesting -= 1; + + }; + + var _layerToFocusableWidget = {}; + var _widgetToFocusParent = {}; + _event.layerMapFocus = function(layer, elementId) { + var mainObj = layer.objs[0]; + // If first child non existant return + if (!mainObj) return; + + var mainId = $ax.getElementIdFromPath([mainObj.id], { relativeTo: elementId }); + _widgetToFocusParent[mainId] = elementId; + + // If first child is a layer, call recursively + if ($ax.public.fn.IsLayer(mainObj.type)) { + _event.layerMapFocus(mainObj, mainId); + var baseId = _layerToFocusableWidget[mainId]; + if(baseId) _layerToFocusableWidget[elementId] = baseId; + return; + } + + _layerToFocusableWidget[elementId] = mainId; + } + + var _needsProxy = function(id, proxyName) { + var obj = $obj(id); + // layers don't need on focus ever, proxies will handle them + if ($ax.public.fn.IsLayer(obj.type)) return false; + // If you already focus you don't need to force yourself to proxy. + if(obj.interactionMap && obj.interactionMap[proxyName]) return false; + + var parentId = _widgetToFocusParent[id]; + if(parentId) return _needsProxyHelper(parentId, proxyName); + return false; + } + + var _needsProxyHelper = function(id, proxyName) { + var obj = $obj(id); + if(obj.interactionMap && obj.interactionMap[proxyName]) return true; + + var parentId = _widgetToFocusParent[id]; + if(parentId) return _needsProxyHelper(parentId, proxyName); + return false; + } + + //for button shapes and images the img is focusable instead of the div to get better outlines + // For layers, we remember who their proxy is. + $ax.event.getFocusableWidgetOrChildId = function (elementId) { + var mappedId = _layerToFocusableWidget[elementId]; + if (mappedId) elementId = mappedId; + + var inputId = $ax.repeater.applySuffixToElementId(elementId, '_input'); + var inputQuery = $jobj(inputId); + if(inputQuery.length > 0) return inputId; + + var imgId = $ax.repeater.applySuffixToElementId(elementId, '_img'); + var imgQuery = $jobj(imgId); + if (imgQuery.length > 0) return imgId; + + var divId = $ax.repeater.applySuffixToElementId(elementId, '_div'); + var divQuery = $jobj(divId); + if (divQuery.length > 0) return divId; + + return elementId; + }; + + // key is the suppressing event, and the value is the event that is supressed + var suppressingEvents = {}; + // key is the event that will cancel the suppression, and value is the event that was being suppressed + var cancelSuppressions = {}; + // suppressed event maps to true if it is supressed + var suppressedEventStatus = {}; + + // Attempt at a generic way to supress events + var initSuppressingEvents = function(query) { + suppressingEvents['OnLongClick'] = 'OnClick'; + cancelSuppressions['onMouseDown'] = 'OnClick'; + + // Have to cancel suppressed event here. Only works for non-synthetic events currently + for(var key in cancelSuppressions) { + var eventName = AXURE_TO_JQUERY_EVENT_NAMES[key]; + if(!eventName) continue; + (function(eventName, suppressed) { + query.bind(eventName, function() { + suppressedEventStatus[suppressed] = false; + }); + })(eventName, cancelSuppressions[key]); + } + + // Otherwise see if you have the chance to cancel a supression + // if(cancelSuppressions[eventDescription]) { + // suppressedEventStatus[cancelSuppressions[eventDescription]] = false; + // } + }; + + // TODO: It may be a good idea to split this into multiple functions, or at least pull out more similar functions into private methods + var _initializeObjectEvents = function(query, allowItem) { + // Must init the supressing eventing before the handlers, so that it has the ability to supress those events. + initSuppressingEvents(query); + + query.each(function(dObj, elementId) { + var $element = $jobj(elementId); + var itemId = $ax.repeater.getItemIdFromElementId(elementId); + + // Focus has to be done before on focus fires + // Set up focus + if ($ax.public.fn.IsTextArea(dObj.type) || $ax.public.fn.IsTextBox(dObj.type) || $ax.public.fn.IsCheckBox(dObj.type) || $ax.public.fn.IsRadioButton(dObj.type) || + $ax.public.fn.IsListBox(dObj.type) || $ax.public.fn.IsComboBox(dObj.type) || $ax.public.fn.IsButton(dObj.type) || $ax.public.fn.IsImageBox(dObj.type) || + $ax.public.fn.IsVector(dObj.type) || $ax.IsTreeNodeObject(dObj.type) || $ax.public.fn.IsTableCell(dObj.type)) { + var focusObj = $jobj($ax.event.getFocusableWidgetOrChildId(elementId)); + focusObj.focus(function() { + window.lastFocusedControl = elementId; + }); + } + + + // [MAS: Supressing events were here] + _createProxies(dObj, elementId); + if(dObj.interactionMap) { + _attachEvents(dObj, elementId); + }; + + + //attach button shape alternate styles + var needsMouseFilter = dObj.type != 'hyperlink' && !$ax.public.fn.IsLayer(dObj.type) && !$ax.public.fn.IsDynamicPanel(dObj.type) && dObj.type != 'richTextPanel' && + !$ax.public.fn.IsRepeater(dObj.type) && !$ax.public.fn.IsCheckBox(dObj.type) && !$ax.public.fn.IsRadioButton(dObj.type) && !$ax.public.fn.IsTreeNodeObject(dObj.type); + if(needsMouseFilter) { + $element.mouseenter(function() { + var elementId = this.id; + var parent = $ax.dynamicPanelManager.parentHandlesStyles(elementId); + if(parent && parent.direct) return; + if($.inArray(elementId, _event.mouseOverIds) != -1) return; + _event.mouseOverIds[_event.mouseOverIds.length] = elementId; + + if(elementId == _event.mouseOverObjectId) return; + _event.mouseOverObjectId = elementId; + $ax.style.SetWidgetHover(elementId, true); + var textId = $ax.style.GetTextIdFromShape(elementId); + if(textId) $ax.annotation.updateLinkLocations(textId); + }).mouseleave(function() { + var elementId = this.id; + var parent = $ax.dynamicPanelManager.parentHandlesStyles(elementId); + if(parent && parent.direct) return; + $ax.splice(_event.mouseOverIds, $.inArray(elementId, _event.mouseOverIds), 1); + + if(elementId == _event.mouseOverObjectId) { + _event.mouseOverObjectId = ''; + } + $ax.style.SetWidgetHover(elementId, false); + var textId = $ax.style.GetTextIdFromShape(elementId); + if(textId) $ax.annotation.updateLinkLocations(textId); + }); + + $element.bind($ax.features.eventNames.mouseDownName, function() { + var elementId = this.id; + var parent = $ax.dynamicPanelManager.parentHandlesStyles(elementId); + if(parent) { + dynamicPanelMouseDown(parent.id); + if(parent.direct) return; + } + _event.mouseDownObjectId = elementId; + + $ax.style.SetWidgetMouseDown(this.id, true); + $ax.annotation.updateLinkLocations($ax.style.GetTextIdFromShape(elementId)); + }).bind($ax.features.eventNames.mouseUpName, function() { + var elementId = this.id; + var parent = $ax.dynamicPanelManager.parentHandlesStyles(elementId); + if(parent) { + dynamicPanelMouseUp(parent.id); + if(parent.direct) return; + } + _event.mouseDownObjectId = ''; + if(!$ax.style.ObjHasMouseDown(elementId)) return; + + $ax.style.SetWidgetMouseDown(elementId, false); + $ax.annotation.updateLinkLocations($ax.style.GetTextIdFromShape(elementId)); + + //there used to be something we needed to make images click, because swapping out the images prevents the click + // this is a note that we can eventually delete. + }); + + } + + var $axElement = undefined; + var preeval = itemId && !allowItem; + + //initialize disabled elements, do this first before selected, cause if a widget is disabled, we don't want to apply selected style anymore + if (($ax.public.fn.IsVector(dObj.type) || $ax.public.fn.IsImageBox(dObj.type) || $ax.public.fn.IsDynamicPanel(dObj.type) || $ax.public.fn.IsLayer(dObj.type)) + && dObj.disabled && !preeval) { + if (!$axElement) $axElement = $ax('#' + elementId); + $axElement.enabled(false); + } + + // Initialize selected elements if not in repeater + if(($ax.public.fn.IsVector(dObj.type) || $ax.public.fn.IsImageBox(dObj.type) || $ax.public.fn.IsDynamicPanel(dObj.type) || $ax.public.fn.IsLayer(dObj.type)) + && dObj.selected && !preeval) { + if(!$axElement) $axElement = $ax('#' + elementId); + $axElement.selected(true); + } + + if(OS_MAC && WEBKIT) { + if ($ax.public.fn.IsComboBox(dObj.type) && dObj.disabled) { + $jobj($ax.INPUT(elementId)).css('color', 'grayText'); + } + }; + + // Initialize Placeholders. Right now this is text boxes and text areas. + // Also, the assuption is being made that these widgets with the placeholder, have no other styles (this may change...) + var hasPlaceholder = dObj.placeholderText == '' ? true : Boolean(dObj.placeholderText); + if (($ax.public.fn.IsTextArea(dObj.type) || $ax.public.fn.IsTextBox(dObj.type)) && hasPlaceholder) { + // This is needed to initialize the placeholder state + $jobj($ax.INPUT(elementId)).bind('keydown', function () { + if(!dObj.HideHintOnFocused) { + var id = this.id; + var inputIndex = id.indexOf('_input'); + if(inputIndex == -1) return; + var inputId = id.substring(0, inputIndex); + + if(!$ax.placeholderManager.isActive(inputId)) return; + $ax.placeholderManager.updatePlaceholder(inputId, false, true); + } + }).bind('keyup', function() { + var id = this.id; + var inputIndex = id.indexOf('_input'); + if(inputIndex == -1) return; + var inputId = id.substring(0, inputIndex); + + if($ax.placeholderManager.isActive(inputId)) return; + if(!dObj.HideHintOnFocused && !$jobj(id).val()) { + $ax.placeholderManager.updatePlaceholder(inputId, true); + $ax.placeholderManager.moveCaret(id, 0); + } + }).bind('focus', function () { + if(dObj.HideHintOnFocused) { + var id = this.id; + var inputIndex = id.indexOf('_input'); + if (inputIndex == -1) return; + var inputId = id.substring(0, inputIndex); + + if (!$ax.placeholderManager.isActive(inputId)) return; + $ax.placeholderManager.updatePlaceholder(inputId, false, true); + } + $ax.placeholderManager.moveCaret(this.id); + }).bind('mouseup', function() { + $ax.placeholderManager.moveCaret(this.id); + }).bind('blur', function() { + var id = this.id; + var inputIndex = id.indexOf('_input'); + if(inputIndex == -1) return; + var inputId = id.substring(0, inputIndex); + + if($jobj(id).val()) return; + $ax.placeholderManager.updatePlaceholder(inputId, true); + }); + + $ax.placeholderManager.registerPlaceholder(elementId, dObj.placeholderText, $jobj($ax.INPUT(elementId)).attr('type') == 'password'); + $ax.placeholderManager.updatePlaceholder(elementId, !($jobj($ax.repeater.applySuffixToElementId(elementId, '_input')).val())); + } + + // Initialize assigned submit buttons + if(dObj.submitButton) { + $element.keyup(function(e) { + if(e.keyCode == '13') { + var scriptId = $ax.repeater.getScriptIdFromElementId(elementId); + var path = $ax.deepCopy(dObj.submitButton.path); + path[path.length] = dObj.submitButton.id; + var itemNum = $ax.repeater.getItemIdFromElementId(elementId); + var submitId = $ax.getScriptIdFromPath(path, scriptId); + + if(itemNum && $ax.getParentRepeaterFromScriptId(submitId) == $ax.getParentRepeaterFromScriptId(scriptId)) { + submitId = $ax.repeater.createElementId(submitId, itemNum); + } + var inputId = $ax.INPUT(submitId); + if($jobj(inputId).length) submitId = inputId; + + $ax.setjBrowserEvent(e); + $ax.event.fireClick(submitId); + } + }).keydown(function(e) { + if(e.keyCode == '13') { + e.preventDefault(); + } + }); + } + + // Don't drag after mousing down on a plain text object + if ($ax.public.fn.IsTextArea(dObj.type) || $ax.public.fn.IsTextBox(dObj.type) || $ax.public.fn.IsListBox(dObj.type) || + $ax.public.fn.IsComboBox(dObj.type) || $ax.public.fn.IsCheckBox(dObj.type) || $ax.public.fn.IsRadioButton(dObj.type)) { + $element.bind($ax.features.eventNames.mouseDownName, function(event) { + event.originalEvent.donotdrag = true; + }); + } + + if($ax.features.supports.mobile) { + $element.bind($ax.features.eventNames.mouseDownName, function() { _setCanClick(true); }); + + if ($ax.public.fn.IsDynamicPanel(dObj.type)) { + $element.scroll(function() { _setCanClick(false); }); + } + } + + //initialize tree node cursors to default so they will override their parent + if ($ax.public.fn.IsTreeNodeObject(dObj.type) && !(dObj.interactionMap && dObj.interactionMap.onClick)) { + $element.css('cursor', 'default'); + } + + //initialize widgets that are clickable to have the pointer over them when hovering + if($ax.event.HasClick(dObj)) { + if($element) $element.css('cursor', 'pointer'); + } + + // TODO: not sure if we need this. It appears to be working without + //initialize panels for DynamicPanels + if ($ax.public.fn.IsDynamicPanel(dObj.type)) { + $element.children().each(function() { + var parts = this.id.split('_'); + var state = parts[parts.length - 1].substring(5); + if(state != 0) $ax.visibility.SetVisible(this, false); + }); + } + + //initialize TreeNodes + if ($ax.public.fn.IsTreeNodeObject(dObj.type)) { + if($element.hasClass('treeroot')) return; + + var childrenId = elementId + '_children'; + var children = $element.children('[id="' + childrenId + '"]:first'); + if(children.length > 0) { + var plusMinusId = 'u' + (parseInt($ax.repeater.getScriptIdFromElementId(elementId).substring(1)) + 1); + if(itemId) plusMinusId = $ax.repeater.createElementId(plusMinusId, itemId); + if(!$jobj(plusMinusId).children().first().is('img')) plusMinusId = ''; + $ax.tree.InitializeTreeNode(elementId, plusMinusId, childrenId); + } + $element.click(function() { $ax.tree.SelectTreeNode(elementId, true); }); + } + + //initialize submenus + if ($ax.public.fn.IsMenuObject(dObj.type)) { + if($element.hasClass('sub_menu')) { + var tableCellElementId = $ax.getElementIdFromPath([dObj.parentCellId], { relativeTo: elementId }); + $ax.menu.InitializeSubmenu(elementId, tableCellElementId); + } + } + + // Attach handles for dynamic panels that propagate styles to inner items. + if (($ax.public.fn.IsDynamicPanel(dObj.type) || $ax.public.fn.IsLayer(dObj.type)) && dObj.propagate) { + $element.mouseenter(function() { + dynamicPanelMouseOver(this.id); + }).mouseleave(function() { + dynamicPanelMouseLeave(this.id); + }).bind($ax.features.eventNames.mouseDownName, function() { + dynamicPanelMouseDown(this.id); + }).bind($ax.features.eventNames.mouseUpName, function() { + dynamicPanelMouseUp(this.id); + }); + } + + // These are the dynamic panel functions for propagating rollover styles and mouse down styles to inner objects + var dynamicPanelMouseOver = function(elementId, fromChild) { + var parent = $ax.dynamicPanelManager.parentHandlesStyles(elementId); + if(parent) { + dynamicPanelMouseOver(parent.id, true); + if(parent.direct) return; + } + if($.inArray(elementId, _event.mouseOverIds) != -1) return; + // If this event is coming from a child, don't mark that it's actually entered. + // Only mark that this has been entered if this event has naturally been triggered. (For reason see mouseleave) + if(!fromChild) _event.mouseOverIds[_event.mouseOverIds.length] = elementId; + if(elementId == _event.mouseOverObjectId) return; + _event.mouseOverObjectId = elementId; + $ax.dynamicPanelManager.propagateMouseOver(elementId, true); + }; + var dynamicPanelMouseLeave = function(elementId, fromChild) { + var parent = $ax.dynamicPanelManager.parentHandlesStyles(elementId); + if(parent) { + dynamicPanelMouseLeave(parent.id, true); + if(parent.direct) return; + } + var index = $.inArray(elementId, _event.mouseOverIds); + // If index != -1, this has been natuarally entered. If naturally entered, then leaving child should not trigger leaving, + // but instead wait for natural mouse leave. If natural mouse enter never triggered, natural mouse leave won't so do this now. + if((index != -1) && fromChild) return; + $ax.splice(_event.mouseOverIds, index, 1); + + if(elementId == _event.mouseOverObjectId) { + _event.mouseOverObjectId = ''; + } + $ax.dynamicPanelManager.propagateMouseOver(elementId, false); + }; + var dynamicPanelMouseDown = function(elementId) { + var parent = $ax.dynamicPanelManager.parentHandlesStyles(elementId); + if(parent) { + dynamicPanelMouseDown(parent.id); + if(parent.direct) return; + } + _event.mouseDownObjectId = elementId; + $ax.dynamicPanelManager.propagateMouseDown(elementId, true); + }; + var dynamicPanelMouseUp = function(elementId) { + var parent = $ax.dynamicPanelManager.parentHandlesStyles(elementId); + if(parent) { + dynamicPanelMouseUp(parent.id); + if(parent.direct) return; + } + _event.mouseDownObjectId = ''; + $ax.dynamicPanelManager.propagateMouseDown(elementId, false); + }; + + //attach handlers for button shape and tree node mouse over styles + // TODO: Can this really be removed? Trees seem to work with out (the generic hover case works for it). + // query.filter(function(obj) { + // return $ax.public.fn.IsVector(obj.type) && $ax.public.fn.IsTreeNodeObject(obj.parent.type) && + // obj.parent.style && obj.parent.style.stateStyles && + // obj.parent.style.stateStyles.mouseOver; + // }).mouseenter(function() { + // $ax.style.SetWidgetHover(this.id, true); + // }).mouseleave(function() { + // $ax.style.SetWidgetHover(this.id, false); + // }); + + //handle treeNodeObject events and prevent them from bubbling up. this is necessary because otherwise + //both a sub menu and it's parent would get a click + if ($ax.public.fn.IsTreeNodeObject(dObj.type)) { + $element.click(function() { + //todo -- this was bubbling, but then selecting a child tree node would bubble and select the parent (don't know if there is a better way) + _fireObjectEvent(this.id, 'click', arguments); + return false; + }).each(function() { + if(!this.style.cursor) { + this.style.cursor = 'default'; + } + }); + } + + // Synthetic events + + var map = dObj.interactionMap; + // Attach dynamic panel synthetic drag and swipe events + if(dObj.type == "dynamicPanel" && map && ( + map.onDragStart || map.onDrag || + map.onDragDrop || map.onSwipeLeft || map.onSwipeRight || map.onSwipeUp || map.onSwipeDown)) { + + $element.bind($ax.features.eventNames.mouseDownName, function(e) { $ax.drag.StartDragWidget(e.originalEvent, elementId); }); + } + + // Attach dynamic panel synthetic scroll event + if ($ax.public.fn.IsDynamicPanel(dObj.type) && map && (map.onScroll || map.onScrollUp || map.onScrollDown)) { + var diagrams = dObj.diagrams; + for(var i = 0; i < diagrams.length; i++) { + var panelId = $ax.repeater.applySuffixToElementId(elementId, '_state' + i); + (function(id) { + if ($('#' + id).data('lastScrollTop') == undefined) $('#' + id).data('lastScrollTop', '0'); + _attachDefaultObjectEvent($('#' + id), elementId, 'scroll', function(e) { + $ax.setjBrowserEvent(e); + var currentEvent = $ax.getjBrowserEvent(); + var eventInfoFromEvent = $ax.getEventInfoFromEvent($ax.getjBrowserEvent(), false, elementId); + if(map.onScroll) _handleEvent(elementId, eventInfoFromEvent, map.onScroll); + + var currentTop = $('#' + id).scrollTop(); + var wasHandled = currentEvent.originalEvent.handled; + if (map.onScrollUp && currentTop < $('#' + id).data('lastScrollTop')) { + currentEvent.originalEvent.handled = false; + _handleEvent(elementId, eventInfoFromEvent, map.onScrollUp); + } else if (map.onScrollDown && currentTop > $('#' + id).data('lastScrollTop')) { + currentEvent.originalEvent.handled = false; + _handleEvent(elementId, eventInfoFromEvent, map.onScrollDown); + } + currentEvent.originalEvent.handled |= wasHandled; + $('#' + id).data('lastScrollTop', currentTop); + }); + })(panelId); + } + } + + // Attach synthetic hover event + if (map && map.onMouseHover) { + var MIN_HOVER_HOLD_TIME = 1000; + + // So when the timeout fires, you know whether it is the same mouseenter that is active or not. + var hoverMouseCount = 0; + // Update eventInfo regularly, so position is accurate. + var hoverEventInfo; + + $element.mouseenter(function(e) { + $ax.setjBrowserEvent(e); + hoverEventInfo = $ax.getEventInfoFromEvent($ax.getjBrowserEvent(), false, elementId); + (function(currCount) { + window.setTimeout(function() { + if(currCount == hoverMouseCount) _raiseSyntheticEvent(elementId, 'onMouseHover', false, hoverEventInfo, true); + }, MIN_HOVER_HOLD_TIME); + })(hoverMouseCount); + }).mouseleave(function(e) { + $ax.setjBrowserEvent(e); + hoverMouseCount++; + }).mousemove(function(e) { + $ax.setjBrowserEvent(e); + hoverEventInfo = $ax.getEventInfoFromEvent($ax.getjBrowserEvent(), false, elementId); + }); + } + + // Attach synthetic tap and hold event. + if (map && map.onLongClick) { + var MIN_LONG_CLICK_HOLD_TIME = 750; + + // So when the timeout fires, you know whether it is the same mousedown that is active or not. + var longClickMouseCount = 0; + + $element.bind($ax.features.eventNames.mouseDownName, function(e) { + (function(currCount) { + $ax.setjBrowserEvent(e); + var eventInfo = $ax.getEventInfoFromEvent($ax.getjBrowserEvent(), false, elementId); + window.setTimeout(function() { + if(currCount == longClickMouseCount) _raiseSyntheticEvent(elementId, 'onLongClick', false, eventInfo, true); + }, MIN_LONG_CLICK_HOLD_TIME); + if(e.preventDefault) e.preventDefault(); + })(longClickMouseCount); + }).bind($ax.features.eventNames.mouseUpName, function(e) { + $ax.setjBrowserEvent(e); + longClickMouseCount++; + }); + }; + + + // Attach synthetic onSelectionChange event to droplist and listbox elements + if ($ax.event.HasSelectionChanged(dObj)) { + $element.bind('change', function(e) { + $ax.setjBrowserEvent(e); + _raiseSyntheticEvent(elementId, 'onSelectionChange'); + }); + }; + + // Highjack key up and key down to keep track of state of keyboard. + _event.initKeyEvents($element); + + // Attach synthetic onTextChange event to textbox and textarea elements + if ($ax.event.HasTextChanged(dObj)) { + var element = $jobj($ax.INPUT(elementId)); + $ax.updateElementText(elementId, element.val()); + //Key down needed because when holding a key down, key up only fires once, but keydown fires repeatedly. + //Key up because last mouse down will only show the state before the last character. + element.bind('keydown', function(e) { + $ax.setjBrowserEvent(e); + $ax.event.TryFireTextChanged(elementId); + }).bind('keyup', function(e) { + $ax.setjBrowserEvent(e); + $ax.event.TryFireTextChanged(elementId); + }); + }; + + // Attach synthetic onCheckedChange event to radiobutton and checkbox elements + if ($ax.public.fn.IsCheckBox(dObj.type) || $ax.public.fn.IsRadioButton(dObj.type)) { + var input = $jobj($ax.INPUT(elementId)); + if ($ax.public.fn.IsRadioButton(dObj.type) && input.prop('checked')) { + $ax.updateRadioButtonSelected(input.attr('name'), elementId); + } + + $element.bind('change', function(e) { + $ax.setjBrowserEvent(e); + var eTarget = e.target || e.srcElement; + _tryFireCheckedChanged(elementId, eTarget.checked); + }); + }; + + var hasTap = map && (map.onClick || map.onDoubleClick); + var hasMove = map && map.onMouseMove; + _event.initMobileEvents(hasTap ? $element : $(), + hasMove ? $element : $(), elementId); + + + //attach link alternate styles + if(dObj.type == 'hyperlink') { + $element.mouseenter(function() { + var elementId = this.id; + if(_event.mouseOverIds.indexOf(elementId) != -1) return true; + _event.mouseOverIds[_event.mouseOverIds.length] = elementId; + var mouseOverObjectId = _event.mouseOverObjectId; + if(mouseOverObjectId && $ax.style.IsWidgetDisabled(mouseOverObjectId)) return true; + + $ax.style.SetLinkHover(elementId); + + var bubble = _fireObjectEvent(elementId, 'mouseenter', arguments); + + $ax.annotation.updateLinkLocations($ax.style.GetTextIdFromLink(elementId)); + return bubble; + }).mouseleave(function() { + var elementId = this.id; + $ax.splice(_event.mouseOverIds, _event.mouseOverIds.indexOf(elementId), 1); + var mouseOverObjectId = _event.mouseOverObjectId; + if(mouseOverObjectId && $ax.style.IsWidgetDisabled(mouseOverObjectId)) return true; + + $ax.style.SetLinkNotHover(elementId); + + var bubble = _fireObjectEvent(elementId, 'mouseleave', arguments); + + $ax.annotation.updateLinkLocations($ax.style.GetTextIdFromLink(elementId)); + return bubble; + }).bind($ax.features.eventNames.mouseDownName, function() { + var elementId = this.id; + var mouseOverObjectId = _event.mouseOverObjectId; + if($ax.style.IsWidgetDisabled(mouseOverObjectId)) return undefined; + + if(mouseOverObjectId) $ax.style.SetWidgetMouseDown(mouseOverObjectId, true); + $ax.style.SetLinkMouseDown(elementId); + + $ax.annotation.updateLinkLocations($ax.style.GetTextIdFromLink(elementId)); + + return false; + }).bind($ax.features.eventNames.mouseUpName, function() { + var elementId = this.id; + var mouseOverObjectId = _event.mouseOverObjectId; + if(mouseOverObjectId && $ax.style.IsWidgetDisabled(mouseOverObjectId)) return; + + if(mouseOverObjectId) $ax.style.SetWidgetMouseDown(mouseOverObjectId, false); + $ax.style.SetLinkNotMouseDown(elementId); + + $ax.annotation.updateLinkLocations($ax.style.GetTextIdFromLink(elementId)); + + }).click(function() { + var elementId = this.id; + var mouseOverObjectId = _event.mouseOverObjectId; + if(mouseOverObjectId && $ax.style.IsWidgetDisabled(mouseOverObjectId)) return undefined; + + return _fireObjectEvent(elementId, 'click', arguments); + }); + } + + // Init inline frames + if (dObj.type == 'inlineFrame') { + var target = dObj.target; + var url = ''; + if(target.includeVariables && target.url) { + var origSrc = target.url; + url = origSrc.toLowerCase().indexOf('http://') == -1 ? $ax.globalVariableProvider.getLinkUrl(origSrc) : origSrc; + + } else if(target.urlLiteral) { + url = $ax.expr.evaluateExpr(target.urlLiteral, $ax.getEventInfoFromEvent(undefined, true, elementId), true); + } + if(url) $jobj($ax.INPUT(elementId)).attr('src', url); + }; + }); + } + $ax.initializeObjectEvents = _initializeObjectEvents; + + // Handle key up and key down events + (function() { + var _keyState = {}; + _keyState.ctrl = false; + _keyState.alt = false; + _keyState.shift = false; + _keyState.keyCode = 0; + $ax.event.keyState = function() { + return $ax.deepCopy(_keyState); + }; + + var modifierCodes = [16, 17, 18]; + var clearKeyCode = false; + $ax.event.initKeyEvents = function($query) { + $query.keydown(function (e) { + if(clearKeyCode) { + clearKeyCode = false; + _keyState.keyCode = 0; + } + var elementId = this.id; + + _keyState.ctrl = e.ctrlKey; + + _keyState.alt = e.altKey; + + _keyState.shift = e.shiftKey; + + // If a modifier was pressed, then don't set the keyCode; + if(modifierCodes.indexOf(e.keyCode) == -1) _keyState.keyCode = e.keyCode; + + $ax.setjBrowserEvent(e); + if (!elementId) fireEventThroughContainers('onKeyDown', undefined, false, [$ax.constants.PAGE_TYPE, $ax.constants.REFERENCE_DIAGRAM_OBJECT_TYPE, $ax.constants.DYNAMIC_PANEL_TYPE, $ax.constants.REPEATER], + [$ax.constants.PAGE_TYPE, $ax.constants.REFERENCE_DIAGRAM_OBJECT_TYPE, $ax.constants.LAYER_TYPE]); + else _raiseSyntheticEvent(elementId, 'onKeyDown', false, undefined, true); + }); + $query.keyup(function(e) { + var elementId = this.id; + + if (modifierCodes.indexOf(e.keyCode) == -1) clearKeyCode = true; + else if (clearKeyCode) { + clearKeyCode = false; + _keyState.keyCode = 0; + } + + $ax.setjBrowserEvent(e); + // Fire event before updating modifiers. + if (!elementId) fireEventThroughContainers('onKeyUp', undefined, false, [$ax.constants.PAGE_TYPE, $ax.constants.REFERENCE_DIAGRAM_OBJECT_TYPE, $ax.constants.DYNAMIC_PANEL_TYPE, $ax.constants.REPEATER], + [$ax.constants.PAGE_TYPE, $ax.constants.REFERENCE_DIAGRAM_OBJECT_TYPE, $ax.constants.LAYER_TYPE]); + else _raiseSyntheticEvent(elementId, 'onKeyUp', false, undefined, true); + + //_keyState.ctrl = e.ctrlKey; + + //_keyState.alt = e.altKey; + + //_keyState.shift = e.shiftKey; + + //// If a non-modifier was lifted, clear the keycode + ///if(modifierCodes.indexOf(e.keyCode) == -1) _keyState.keyCode = 0; + }); + }; + })(); + + // Handle adding mobile events + (function() { + // NOTE: Multi touch is NOT handled currently. + var CLICK_THRESHOLD_PX = 25; + var CLICK_THRESHOLD_PX_SQ = CLICK_THRESHOLD_PX * CLICK_THRESHOLD_PX; + var DBLCLICK_THRESHOLD_MS = 500; + + // Location in page cooridinates + var tapDownLoc; + var lastClickEventTime; + + _event.initMobileEvents = function($tapQuery, $moveQuery, elementId) { + if(!$ax.features.supports.mobile) return; + + // Handle touch start + $tapQuery.bind('touchstart', function(e) { + // We do NOT support multiple touches. This isn't necessarily the touch we want. + var touch = e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]; + if(!touch) return; + + tapDownLoc = [touch.pageX, touch.pageY]; + + var time = (new Date()).getTime(); + if(time - lastClickEventTime < DBLCLICK_THRESHOLD_MS) { + var dObj = elementId === '' ? $ax.pageData.page : $ax.getObjectFromElementId(elementId); + var axEventObject = dObj && dObj.interactionMap && dObj.interactionMap['onDoubleClick']; + if(axEventObject) e.preventDefault(); //for Chrome on Android + } + }).bind('touchend', function(e) { + var touch = e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]; + if(!touch || !tapDownLoc) return; + + var tapUpLoc = [touch.pageX, touch.pageY]; + var xDiff = tapUpLoc[0] - tapDownLoc[0]; + var yDiff = tapUpLoc[1] - tapDownLoc[1]; + + if((xDiff * xDiff + yDiff * yDiff) < CLICK_THRESHOLD_PX_SQ) { + $ax.setjBrowserEvent(e); + _raiseSyntheticEvent(elementId, 'onClick', false, undefined, true); + + var time = (new Date()).getTime(); + if(time - lastClickEventTime < DBLCLICK_THRESHOLD_MS) { + _raiseSyntheticEvent(elementId, 'onDoubleClick', false, undefined, true); + if(e.originalEvent && e.originalEvent.handled) e.preventDefault(); //for iOS + } + lastClickEventTime = time; + } + }); + + // Handles touch move + $moveQuery.bind('touchmove', function(e) { + $ax.setjBrowserEvent(e); + _raiseSyntheticEvent(elementId, 'onMouseMove', false, undefined, true); + if(e.originalEvent && e.originalEvent.handled) e.preventDefault(); + }); + }; + })(); + + // Handle adding device independent click events to non-widgets + (function() { + var CLICK_THRESHOLD_PX = 25; + var CLICK_THRESHOLD_PX_SQ = CLICK_THRESHOLD_PX * CLICK_THRESHOLD_PX; + + // Location in page cooridinates + var tapDownLoc; + + _event.attachClick = function(query, clickHandler) { + if(!$ax.features.supports.mobile) { + query.click(clickHandler); + return; + } + + $(query).bind('touchstart', function(e) { + // We do NOT support multiple touches. This isn't necessarily the touch we want. + var touch = e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]; + if(!touch) return; + + tapDownLoc = [touch.pageX, touch.pageY]; + }); + + $(query).bind('touchend', function(e) { + var touch = e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]; + if(!touch) return; + + var tapUpLoc = [touch.pageX, touch.pageY]; + var xDiff = tapUpLoc[0] - tapDownLoc[0]; + var yDiff = tapUpLoc[1] - tapDownLoc[1]; + + if((xDiff * xDiff + yDiff * yDiff) < CLICK_THRESHOLD_PX_SQ) { + clickHandler(); + } + }); + }; + })(); + + // Handle firing device independent click events on widgets + (function() { + _event.fireClick = function(elementId) { + if(!$ax.features.supports.mobile) { + $('#' + elementId).click(); + return; + } + _raiseSyntheticEvent(elementId, 'onClick', false, undefined, true); + }; + })(); + + var _mouseLocation = $ax.mouseLocation = { x: 0, y: 0 }; + var _lastmouseLocation = $ax.lastMouseLocation = { x: 0, y: 0 }; + + var _updateMouseLocation = function(e, end) { + if(!e) return; + + if(IE_10_AND_BELOW && typeof (e.type) == 'unknown') return; + if(e.type != 'mousemove' && e.type != 'touchstart' && e.type != 'touchmove' && e.type != 'touchend') return; + + var newX; + var newY; + if(IE_10_AND_BELOW) { + newX = e.clientX + $('html').scrollLeft(); + newY = e.clientY + $('html').scrollTop(); + } else { + newX = e.pageX; + newY = e.pageY; + } + //var body = $('body'); + //if(body.css('position') == 'relative') newX = Math.round(newX - Number(body.css('left').replace('px', '')) - Math.max(0, ($(window).width() - body.width()) / 2)); + + if(_mouseLocation.x == newX && _mouseLocation.y == newY) return; + + _lastmouseLocation.x = _mouseLocation.x; + _lastmouseLocation.y = _mouseLocation.y; + _mouseLocation.x = newX; + _mouseLocation.y = newY; + + $ax.geometry.tick(_mouseLocation.x, _mouseLocation.y, end); + }; + _event.updateMouseLocation = _updateMouseLocation; + + var _leavingState = function(stateId) { + var mouseOverIds = _event.mouseOverIds; + if(mouseOverIds.length == 0) return; + + var stateQuery = $jobj(stateId); + for(var i = mouseOverIds.length - 1; i >= 0; i--) { + var id = mouseOverIds[i]; + if(stateQuery.find('#' + id).length) { + $ax.splice(mouseOverIds, $.inArray(id, mouseOverIds), 1); + $ax.style.SetWidgetMouseDown(id, false); + $ax.style.SetWidgetHover(id, false); + } + } + + }; + _event.leavingState = _leavingState; + + var _raiseSelectedEvents = function(elementId, value) { + $ax.event.raiseSyntheticEvent(elementId, 'onSelectedChange'); + if(value) $ax.event.raiseSyntheticEvent(elementId, 'onSelect'); + else $ax.event.raiseSyntheticEvent(elementId, 'onUnselect'); + }; + $ax.event.raiseSelectedEvents = _raiseSelectedEvents; + + var _raiseSyntheticEvent = function(elementId, eventName, skipShowDescription, eventInfo, nonSynthetic) { + // Empty string used when this is an event directly on the page. + var dObj = elementId === '' ? $ax.pageData.page : $ax.getObjectFromElementId(elementId); + var axEventObject = dObj && dObj.interactionMap && dObj.interactionMap[eventName]; + if(!axEventObject) return; + + eventInfo = eventInfo || $ax.getEventInfoFromEvent($ax.getjBrowserEvent(), skipShowDescription, elementId); + // $ax.recording.maybeRecordEvent(elementId, eventInfo, axEventObject, new Date().getTime()); + _handleEvent(elementId, eventInfo, axEventObject, false, !nonSynthetic); + }; + $ax.event.raiseSyntheticEvent = _raiseSyntheticEvent; + + var _hasSyntheticEvent = function(scriptId, eventName) { + var dObj = $ax.getObjectFromScriptId(scriptId); + var axEventObject = dObj && dObj.interactionMap && dObj.interactionMap[eventName]; + return Boolean(axEventObject); + }; + $ax.event.hasSyntheticEvent = _hasSyntheticEvent; + + var _addEvent = function (target, eventType, handler, useCapture) { + //this return value is only for debug purpose + var succeed = undefined; + if(target.attachEvent) { + if($ax.features.supports.windowsMobile) { + succeed = target.attachEvent(eventType, handler); + } else { + succeed = target.attachEvent('on' + eventType, handler); + } + } else if(target.addEventListener) { + target.addEventListener(eventType, handler, useCapture); + succeed = true; + } + + return succeed; + } + $ax.event.addEvent = _addEvent; + + var _removeEvent = function(target, eventType, handler, useCapture, skipCheckingWindowsMobile) { + //this return value is only for debug purpose + var succeed = undefined; + + if(target.detachEvent) { + if(!skipCheckingWindowsMobile && $ax.features.supports.windowsMobile) { + succeed = target.detachEvent(eventType, handler); + } else { + succeed = target.detachEvent('on' + eventType, handler); + } + } else if(target.removeEventListener) { + target.removeEventListener(eventType, handler, useCapture); + succeed = true; + } + + return succeed; + } + $ax.event.removeEvent = _removeEvent; + + var _initialize = function() { + $ax.repeater.load(); + + // Make sure key events for page are initialized first. That way they will update the value of key pressed before any other events occur. + _event.initKeyEvents($(window)); + + // Anything with an item id is in a repeater and should be handled by that repeater. + _initializeObjectEvents($ax(function(obj, elementId) { return !$ax.repeater.getItemIdFromElementId(elementId); })); + + //finally, process the pageload + _pageLoad(); + // _loadDynamicPanelsAndMasters(); + // $ax.repeater.init(); + + // and wipe out the basic links. + $('.basiclink').click(function() { + return false; + }); + }; + _event.initialize = _initialize; + + $ax.event.HasTextChanged = function(diagramObject) { + if (!$ax.public.fn.IsTextBox(diagramObject.type) && !$ax.public.fn.IsTextArea(diagramObject.type)) return false; + var map = diagramObject.interactionMap; + return map && map.onTextChange; + }; + + $ax.event.TryFireTextChanged = function(elementId) { + var query = $jobj($ax.repeater.applySuffixToElementId(elementId, '_input')); + if(!$ax.hasElementTextChanged(elementId, query.val())) return; + $ax.updateElementText(elementId, query.val()); + + $ax.event.raiseSyntheticEvent(elementId, 'onTextChange'); + }; + + $ax.event.HasSelectionChanged = function(diagramObject) { + if (!$ax.public.fn.IsListBox(diagramObject.type) && !$ax.public.fn.IsComboBox(diagramObject.type)) return false; + var map = diagramObject.interactionMap; + return map && map.onSelectionChange; + }; + + $ax.event.HasCheckedChanged = function(diagramObject) { + if (!$ax.public.fn.IsCheckBox(diagramObject.type) && !$ax.public.fn.IsRadioButton(diagramObject.type)) return false; + var map = diagramObject.interactionMap; + return map && map.onSelectedChange; + }; + + $ax.event.HasClick = function (diagramObject) { + var map = diagramObject.interactionMap; + return map && map.onClick; + }; + + var _tryFireCheckedChanged = $ax.event.TryFireCheckChanged = function(elementId, value) { + var isRadio = $ax.public.fn.IsRadioButton($obj(elementId).type); + if(isRadio) { + if(!value) { + $ax.updateRadioButtonSelected($jobj($ax.INPUT(elementId)).attr('name'), undefined); + } else { + var last = $ax.updateRadioButtonSelected($jobj($ax.INPUT(elementId)).attr('name'), elementId); + + // If no change, this should not fire + if(last == elementId) return; + + // Initially selecting one, last may be undefined + if(last) { + //here last is the previouse selected elementid + $ax.event.raiseSelectedEvents(last, false); + } + } + } + + $ax.event.raiseSelectedEvents(elementId, value); + }; + + //onload everything now, not only dp and master + var _loadDynamicPanelsAndMasters = function(objects, path, itemId) { + fireEventThroughContainers('onLoad', objects, true, [$ax.constants.PAGE_TYPE, $ax.constants.REFERENCE_DIAGRAM_OBJECT_TYPE, $ax.constants.DYNAMIC_PANEL_TYPE], + [$ax.constants.ALL_TYPE], path, itemId); + }; + $ax.loadDynamicPanelsAndMasters = _loadDynamicPanelsAndMasters; + + var _viewChangePageAndMasters = function(forceSwitchTo) { + fireEventThroughContainers('onAdaptiveViewChange', undefined, true, [$ax.constants.PAGE_TYPE, $ax.constants.REFERENCE_DIAGRAM_OBJECT_TYPE, $ax.constants.DYNAMIC_PANEL_TYPE], + [$ax.constants.PAGE_TYPE, $ax.constants.REFERENCE_DIAGRAM_OBJECT_TYPE]); + _postAdaptiveViewChanged(forceSwitchTo); + }; + $ax.viewChangePageAndMasters = _viewChangePageAndMasters; + + //if forceSwitchTo is true, we will also update the checkmark in sitemap.js + var _postAdaptiveViewChanged = function(forceSwitchTo) { + //only trigger adaptive view changed if the window is on the mainframe. Also triggered on init, even if default. + try { + if(window.name == 'mainFrame' || + (!CHROME_5_LOCAL && window.parent.$ && window.parent.$('#mainFrame').length > 0)) { + var data = { + viewId: $ax.adaptive.currentViewId, + forceSwitchTo: forceSwitchTo + }; + $axure.messageCenter.postMessage('adaptiveViewChange', data); + } + } catch(e) { } + }; + $ax.postAdaptiveViewChanged = _postAdaptiveViewChanged; + + var _postResize = $ax.postResize = function(e) { + $ax.setjBrowserEvent(e); + return fireEventThroughContainers('onResize', undefined, false, [$ax.constants.PAGE_TYPE, $ax.constants.REFERENCE_DIAGRAM_OBJECT_TYPE, $ax.constants.DYNAMIC_PANEL_TYPE, $ax.constants.REPEATER], + [$ax.constants.PAGE_TYPE, $ax.constants.REFERENCE_DIAGRAM_OBJECT_TYPE]); + }; + + //fire events for table, menu and tree, including its sub items + var _fireEventsForTableMenuAndTree = function (object, event, skipShowDescription, eventInfo, path, synthetic) { + if (!path) path = []; + var pathCopy = path.slice(); + + pathCopy[path.length] = object.id; + var scriptId = $ax.getScriptIdFromPath(pathCopy); + $ax.event.raiseSyntheticEvent(scriptId, event, skipShowDescription, eventInfo, !synthetic); + + if(object.objects) { + for(var index = 0; index < object.objects.length; index++) { + var subObj = object.objects[index]; + if ($ax.public.fn.IsTableCell(subObj.type)) { + pathCopy[path.length] = subObj.id; + scriptId = $ax.getScriptIdFromPath(pathCopy); + $ax.event.raiseSyntheticEvent(scriptId, event, skipShowDescription, eventInfo, !synthetic); + } else if ($ax.public.fn.IsTable(object.type) || $ax.public.fn.IsMenuObject(object.type) || $ax.public.fn.IsTreeNodeObject(object.type)) { + _fireEventsForTableMenuAndTree(subObj, event, skipShowDescription, eventInfo, path, synthetic); + } + } + } + } + +// if ($('#' + id).data('lastScrollTop') == undefined) $('#' + id).data('lastScrollTop', '0'); +// _attachDefaultObjectEvent($('#' + id), elementId, 'scroll', function (e) { +// $ax.setjBrowserEvent(e); +// var currentEvent = $ax.getjBrowserEvent(); +// var eventInfoFromEvent = $ax.getEventInfoFromEvent($ax.getjBrowserEvent(), false, elementId); +// if (map.onScroll) _handleEvent(elementId, eventInfoFromEvent, map.onScroll); +// +// var currentTop = $('#' + id).scrollTop(); +// var wasHandled = currentEvent.originalEvent.handled; +// if (map.onScrollUp && currentTop < $('#' + id).data('lastScrollTop')) { +// currentEvent.originalEvent.handled = false; +// _handleEvent(elementId, eventInfoFromEvent, map.onScrollUp); +// } else if (map.onScrollDown && currentTop > $('#' + id).data('lastScrollTop')) { +// currentEvent.originalEvent.handled = false; +// _handleEvent(elementId, eventInfoFromEvent, map.onScrollDown); +// } +// currentEvent.originalEvent.handled |= wasHandled; +// $('#' + id).data('lastScrollTop', currentTop); +// }); + + //remember the scroll bar position, so we can detect scroll up/down + var lastScrollTop; + // Filters include page, referenceDiagramObject, dynamicPanel, and repeater. + var fireEventThroughContainers = function(eventName, objects, synthetic, searchFilter, callFilter, path, itemId) { + // TODO: may want to pass in this as a parameter. At that point, may want to convert some of them to an option parameter. For now this is the only case + var skipShowDescription = eventName == 'onLoad'; + + // If objects undefined, load page + if(!objects) { + if(_callFilterCheck(callFilter, $ax.constants.PAGE_TYPE)) { + var map = $ax.pageData.page.interactionMap; + var currentEvent = $ax.getjBrowserEvent(); + var pageEventInfo = $ax.getEventInfoFromEvent(currentEvent, skipShowDescription, ''); + + pageEventInfo.label = $ax.pageData.page.name; + pageEventInfo.friendlyType = 'Page'; + + var pageEvent = map && map[eventName]; + var scrolling = currentEvent && currentEvent.type === "scroll"; + if (scrolling && !pageEvent && map) pageEvent = map.onScrollUp || map.onScrollDown; + + if (pageEvent) { + if (!scrolling || map.onScroll) _handleEvent('', pageEventInfo, pageEvent, skipShowDescription, synthetic); + + if (scrolling) { + var wasHandled = currentEvent.originalEvent.handled; + var currentScrollTop = $(window).scrollTop(); + if(map.onScrollUp && currentScrollTop < lastScrollTop) { + currentEvent.originalEvent.handled = false; + _handleEvent('', pageEventInfo, map.onScrollUp, skipShowDescription, synthetic); + } else if (map.onScrollDown && currentScrollTop > lastScrollTop) { + currentEvent.originalEvent.handled = false; + _handleEvent('', pageEventInfo, map.onScrollDown, skipShowDescription, synthetic); + } + currentEvent.originalEvent.handled |= wasHandled; + lastScrollTop = currentScrollTop; + } + } + } + if (searchFilter.indexOf($ax.constants.PAGE_TYPE) != -1) fireEventThroughContainers(eventName, $ax.pageData.page.diagram.objects, synthetic, searchFilter, callFilter); + return; + } + + if(!path) path = []; + + var pathCopy = []; + for(var j = 0; j < path.length; j++) pathCopy[j] = path[j]; + + for(var i = 0; i < objects.length; i++) { + var obj = objects[i]; + pathCopy[path.length] = obj.id; + if (!$ax.public.fn.IsReferenceDiagramObject(obj.type) && !$ax.public.fn.IsDynamicPanel(obj.type) && !$ax.public.fn.IsRepeater(obj.type) && !$ax.public.fn.IsLayer(obj.type)) { + if(_callFilterCheck(callFilter)) { //fire current event for all types + if ($ax.public.fn.IsTable(obj.type) || $ax.public.fn.IsMenuObject(obj.type) || $ax.public.fn.IsTreeNodeObject(obj.type)) { + _fireEventsForTableMenuAndTree(obj, eventName, skipShowDescription, undefined, path, !synthetic); + } else { + var scriptId = $ax.getScriptIdFromPath(pathCopy); + if(scriptId && itemId) scriptId = $ax.repeater.createElementId(scriptId, itemId); + $ax.event.raiseSyntheticEvent(scriptId, eventName, skipShowDescription, undefined, !synthetic); + } + } + continue; + } + + var objId = $ax.getScriptIdFromPath(pathCopy); + // If limboed, move on to next item + if(!objId) continue; + if(itemId) objId = $ax.repeater.createElementId(objId, itemId); + + if($ax.public.fn.IsReferenceDiagramObject(obj.type)) { + if(_callFilterCheck(callFilter, $ax.constants.REFERENCE_DIAGRAM_OBJECT_TYPE)) { + var axEvent = $ax.pageData.masters[obj.masterId].interactionMap[eventName]; + if(axEvent) { + var eventInfo = $ax.getEventInfoFromEvent($ax.getjBrowserEvent(), skipShowDescription, objId); + eventInfo.isMasterEvent = true; + _handleEvent(objId, eventInfo, axEvent, skipShowDescription, synthetic); + } + } + if(searchFilter.indexOf($ax.constants.REFERENCE_DIAGRAM_OBJECT_TYPE) != -1) fireEventThroughContainers(eventName, $ax.pageData.masters[obj.masterId].diagram.objects, synthetic, searchFilter, callFilter, pathCopy, itemId); + } else if($ax.public.fn.IsDynamicPanel(obj.type)) { + if(_callFilterCheck(callFilter, $ax.constants.DYNAMIC_PANEL_TYPE)) $ax.event.raiseSyntheticEvent(objId, eventName, skipShowDescription, undefined, !synthetic); + + if(searchFilter.indexOf($ax.constants.DYNAMIC_PANEL_TYPE) != -1) { + var diagrams = obj.diagrams; + for(var j = 0; j < diagrams.length; j++) { + fireEventThroughContainers(eventName, diagrams[j].objects, synthetic, searchFilter, callFilter, path, itemId); + } + } + } else if($ax.public.fn.IsRepeater(obj.type)) { + // TODO: possible an option for repeater item? Now fires overall for the repeater + if(_callFilterCheck(callFilter, $ax.constants.REPEATER)) $ax.event.raiseSyntheticEvent(objId, eventName, skipShowDescription, undefined, !synthetic); + if(searchFilter.indexOf($ax.constants.REPEATER) != -1) { + var itemIds = $ax.getItemIdsForRepeater(objId); + for(var j = 0; j < itemIds.length; j++) { + fireEventThroughContainers(eventName, obj.objects, synthetic, searchFilter, callFilter, path, itemIds[j]); + } + } + } else if($ax.public.fn.IsLayer(obj.type)) { + if(_callFilterCheck(callFilter, $ax.constants.LAYER_TYPE)) $ax.event.raiseSyntheticEvent(objId, eventName, skipShowDescription, undefined, !synthetic); + } + } + + eventNesting -= 1; + + }; + + var _callFilterCheck = function(callFilter, type) { + for(var index = 0; index < callFilter.length; index++) { + var currentType = callFilter[index]; + if(currentType === $ax.constants.ALL_TYPE || currentType === type) return true; + } + return false; + }; + // FOCUS stuff + (function() { + + })(); + + + var _pageLoad = function() { + + // Map of axure event names to pair of what it should attach to, and what the jquery event name is. + var PAGE_AXURE_TO_JQUERY_EVENT_NAMES = { + 'onScroll': [window, 'scroll'], + 'onScrollUp': [window, 'scrollup'], + 'onScrollDown': [window, 'scrolldown'], + //'onResize': [window, 'resize'], + 'onContextMenu': [window, 'contextmenu'] + }; + + var $win = $(window); + if(!$ax.features.supports.mobile) { + PAGE_AXURE_TO_JQUERY_EVENT_NAMES.onClick = ['html', 'click']; + PAGE_AXURE_TO_JQUERY_EVENT_NAMES.onDoubleClick = ['html', 'dblclick']; + PAGE_AXURE_TO_JQUERY_EVENT_NAMES.onMouseMove = ['html', 'mousemove']; + } else { + _event.initMobileEvents($win, $win, ''); + + $win.bind($ax.features.eventNames.mouseDownName, _updateMouseLocation); + $win.bind($ax.features.eventNames.mouseUpName, function(e) { _updateMouseLocation(e, true); }); + + $win.scroll(function() { _setCanClick(false); }); + $win.bind($ax.features.eventNames.mouseDownName, (function() { + _setCanClick(true); + })); + } + $win.bind($ax.features.eventNames.mouseMoveName, _updateMouseLocation); + $win.scroll($ax.flyoutManager.reregisterAllFlyouts); + + for(key in PAGE_AXURE_TO_JQUERY_EVENT_NAMES) { + if(!PAGE_AXURE_TO_JQUERY_EVENT_NAMES.hasOwnProperty(key)) continue; + (function(axureName) { + var jqueryEventNamePair = PAGE_AXURE_TO_JQUERY_EVENT_NAMES[axureName]; + var actionName = jqueryEventNamePair[1]; + + if(actionName == "scrollup" || actionName == "scrolldown") return; + + $(jqueryEventNamePair[0])[actionName](function (e) { + $ax.setjBrowserEvent(e); + return fireEventThroughContainers(axureName, undefined, false, [$ax.constants.PAGE_TYPE, $ax.constants.REFERENCE_DIAGRAM_OBJECT_TYPE, $ax.constants.DYNAMIC_PANEL_TYPE, $ax.constants.REPEATER], + [$ax.constants.PAGE_TYPE, $ax.constants.REFERENCE_DIAGRAM_OBJECT_TYPE]); + }); + })(key); + } + + eventNesting -= 1; + lastScrollTop = 0; + }; + _event.pageLoad = _pageLoad; + + +}); \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/expr.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/expr.js" new file mode 100644 index 0000000..ea57b30 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/expr.js" @@ -0,0 +1,554 @@ +锘// ******* Expr MANAGER ******** // +$axure.internal(function($ax) { + var _expr = $ax.expr = {}; + var _binOpHandlers = { + '&&': function(left, right) { return _binOpOverride(left, right, function(left) { return $ax.getBool(left) && $ax.getBool(right()); }); }, + '||': function(left, right) { return _binOpOverride(left, right, function(left) { return $ax.getBool(left) || $ax.getBool(right()); }); }, + '==': function(left, right) { return isEqual(left, right, true); }, + '!=': function(left, right) { return !isEqual(left, right, true); }, + '>': function(left, right) { return _binOpNum(left, right, function(left, right) { return left > right; }); }, + '<': function(left, right) { return _binOpNum(left, right, function(left, right) { return left < right; }); }, + '>=': function(left, right) { return _binOpNum(left, right, function(left, right) { return left >= right; }); }, + '<=': function(left, right) { return _binOpNum(left, right, function(left, right) { return left <= right; }); } + }; + + var checkOps = function(left, right) { + return left == undefined || right == undefined; + }; + + var isEqual = function (left, right, isFunction) { + if (isFunction) { + //if left and right is function, then get the value + //otherwise left and right should be already the value we want + left = left(); + right = right(); + } + + if(checkOps(left, right)) return false; + + if(left instanceof Date && right instanceof Date) { + if(left.getMilliseconds() != right.getMilliseconds()) return false; + if(left.getSeconds() != right.getSeconds()) return false; + if(left.getMinutes() != right.getMinutes()) return false; + if(left.getHours() != right.getHours()) return false; + if(left.getDate() != right.getDate()) return false; + if(left.getMonth() != right.getMonth()) return false; + if(left.getYear() != right.getYear()) return false; + return true; + } + + if(left instanceof Object && right instanceof Object) { + var prop; + // Go through all of lefts properties and compare them to rights. + for(prop in left) { + if(!left.hasOwnProperty(prop)) continue; + // If left has a property that the right doesn't they are not equal. + if(!right.hasOwnProperty(prop)) return false; + // If any of their properties are not equal, they are not equal. + if(!isEqual(left[prop], right[prop], false)) return false; + } + + for(prop in right) { + // final check to make sure right doesn't have some extra properties that make them not equal. + if(left.hasOwnProperty(prop) != right.hasOwnProperty(prop)) return false; + } + + return true; + } + return $ax.getBool(left) == $ax.getBool(right); + }; + + var _binOpOverride = function(left, right, func) { + left = left(); + if(left == undefined) return false; + var res = func(left, right); + return res == undefined ? false : res; + }; + + var _binOpNum = function(left, right, func) { + var left = left(); + var right = right(); + if(checkOps(left, right)) return false; + + return func(left, Number(right)); + }; + + var _exprHandlers = {}; + _exprHandlers.array = function(expr, eventInfo) { + var returnVal = []; + for(var i = 0; i < expr.items.length; i++) { + returnVal[returnVal.length] = _evaluateExpr(expr.items[i], eventInfo); + } + return returnVal; + }; + + _exprHandlers.binaryOp = function(expr, eventInfo) { + var left = function() { return expr.leftExpr && _evaluateExpr(expr.leftExpr, eventInfo); }; + var right = function() { return expr.rightExpr && _evaluateExpr(expr.rightExpr, eventInfo); }; + + if(left == undefined || right == undefined) return false; + return _binOpHandlers[expr.op](left, right); + }; + + _exprHandlers.block = function(expr, eventInfo) { + var subExprs = expr.subExprs; + for(var i = 0; i < subExprs.length; i++) { + _evaluateExpr(subExprs[i], eventInfo); //ignore the result + } + }; + + _exprHandlers.booleanLiteral = function(expr) { + return expr.value; + }; + + _exprHandlers.nullLiteral = function() { return null; }; + + _exprHandlers.pathLiteral = function(expr, eventInfo) { + if(expr.isThis) return [eventInfo.srcElement]; + if(expr.isFocused && window.lastFocusedControl) { + $ax('#' + window.lastFocusedControl).focus(); + return [window.lastFocusedControl]; + } + if(expr.isTarget) return [eventInfo.targetElement]; + + return $ax.getElementIdsFromPath(expr.value, eventInfo); + }; + + _exprHandlers.panelDiagramLiteral = function(expr, eventInfo) { + var elementIds = $ax.getElementIdsFromPath(expr.panelPath, eventInfo); + var elementIdsWithSuffix = []; + var suffix = '_state' + expr.panelIndex; + for(var i = 0; i < elementIds.length; i++) { + elementIdsWithSuffix[i] = $ax.repeater.applySuffixToElementId(elementIds[i], suffix); + } + return String($jobj(elementIdsWithSuffix).data('label')); + }; + + _exprHandlers.fcall = function(expr, eventInfo) { + var oldTarget = eventInfo.targetElement; + var targets = []; + var fcallArgs = []; + var exprArgs = expr.arguments; + for(var i = 0; i < expr.arguments.length; i++) { + var exprArg = exprArgs[i]; + var fcallArg = ''; + if(targets.length) { + for(var j = 0; j < targets.length; j++) { + if(exprArg == null) { + fcallArgs[j][i] = null; + continue; + } + eventInfo.targetElement = targets[j]; + fcallArg = _evaluateExpr(exprArg, eventInfo); + if(typeof (fcallArg) == 'undefined') return ''; + fcallArgs[j][i] = fcallArg; + } + } else { + if(exprArg == null) { + fcallArgs[i] = null; + continue; + } + fcallArg = _evaluateExpr(exprArg, eventInfo); + if(typeof (fcallArg) == 'undefined') return ''; + fcallArgs[i] = fcallArg; + } + + // We do support null exprArgs... + // TODO: This makes 2 assumptions that may change in the future. 1. The pathLiteral is the always the first arg. 2. there is always only 1 pathLiteral + if(exprArg && exprArg.exprType == 'pathLiteral') { + targets = fcallArg; + + // fcallArgs is now an array of an array of args + for(j = 0; j < targets.length; j++) fcallArgs[j] = [[fcallArg[j]]]; + } + } + + // we want to preserve the target element from outside this function. + eventInfo.targetElement = oldTarget; + + var retval = ''; + if(targets.length) { + // Go backwards so retval is the first item. + for(i = targets.length - 1; i >= 0; i--) { + var args = fcallArgs[i]; + // Add event info to the end + args[args.length] = eventInfo; + retval = _exprFunctions[expr.functionName].apply(this, args); + } + } else fcallArgs[fcallArgs.length] = eventInfo; + return targets.length ? retval : _exprFunctions[expr.functionName].apply(this, fcallArgs); + }; + + _exprHandlers.globalVariableLiteral = function(expr) { + return expr.variableName; + }; + + _exprHandlers.keyPressLiteral = function(expr) { + var keyInfo = {}; + keyInfo.keyCode = expr.keyCode; + keyInfo.ctrl = expr.ctrl; + keyInfo.alt = expr.alt; + keyInfo.shift = expr.shift; + + return keyInfo; + }; + + _exprHandlers.adaptiveViewLiteral = function(expr) { + return expr.id; + }; + + _exprHandlers.optionLiteral = function(expr) { + return expr.value; + } + + var _substituteSTOs = function(expr, eventInfo) { + //first evaluate the local variables + var scope = {}; + for(var varName in expr.localVariables) { + scope[varName] = $ax.expr.evaluateExpr(expr.localVariables[varName], eventInfo); + } + + // TODO: [ben] Date and data object (obj with info for url or image) both need to return non-strings. + var i = 0; + var retval; + var retvalString = expr.value.replace(/\[\[(?!\[)(.*?)\]\](?=\]*)/g, function(match) { + var sto = expr.stos[i++]; + if(sto.sto == 'error') return match; + try { + var result = $ax.evaluateSTO(sto, scope, eventInfo); + } catch(e) { + return match; + } + + if((result instanceof Object) && i == 1 && expr.value.substring(0, 2) == '[[' && + expr.value.substring(expr.value.length - 2) == ']]') { + // If the result was an object, this was the first result, and the whole thing was this expresion. + retval = result; + } + return ((result instanceof Object) && (result.label || result.text)) || result; + }); + // If more than one group returned, the object is not valid + if(i != 1) retval = false; + return retval || retvalString; + }; + + _exprHandlers.htmlLiteral = function (expr, eventInfo) { + eventInfo.htmlLiteral = true; + var html = _substituteSTOs(expr, eventInfo); + eventInfo.htmlLiteral = false + return html; + }; + + _exprHandlers.stringLiteral = function(expr, eventInfo) { + return _substituteSTOs(expr, eventInfo); + }; + + var _exprFunctions = {}; + + _exprFunctions.SetCheckState = function(elementIds, value) { + var toggle = value == 'toggle'; + var boolValue = Boolean(value) && value != 'false'; + + for(var i = 0; i < elementIds.length; i++) { + var query = $ax('#' + elementIds[i]); + query.selected(toggle ? !query.selected() : boolValue); + } + }; + + _exprFunctions.SetSelectedOption = function(elementIds, value) { + for(var i = 0; i < elementIds.length; i++) { + var elementId = elementIds[i]; + var obj = $jobj($ax.INPUT(elementId)); + + if(obj.val() == value) return; + obj.val(value); + + if($ax.event.HasSelectionChanged($ax.getObjectFromElementId(elementId))) $ax.event.raiseSyntheticEvent(elementId, 'onSelectionChange'); + } + }; + + _exprFunctions.SetGlobalVariableValue = function(varName, value) { + $ax.globalVariableProvider.setVariableValue(varName, value); + }; + + _exprFunctions.SetWidgetFormText = function(elementIds, value) { + for(var i = 0; i < elementIds.length; i++) { + var elementId = elementIds[i]; + var inputId = $ax.repeater.applySuffixToElementId(elementId, '_input'); + + var obj = $jobj(inputId); + if(obj.val() == value || (value == '' && $ax.placeholderManager.isActive(elementId))) return; + obj.val(value); + $ax.placeholderManager.updatePlaceholder(elementId, !value); + if($ax.event.HasTextChanged($ax.getObjectFromElementId(elementId))) $ax.event.TryFireTextChanged(elementId); + } + }; + + _exprFunctions.SetFocusedWidgetText = function(elementId, value) { + if(window.lastFocusedControl) { + var elementId = window.lastFocusedControl; + var type = $obj(elementId).type; + if ($ax.public.fn.IsTextBox(type) || $ax.public.fn.IsTextArea(type)) _exprFunctions.SetWidgetFormText([elementId], value); + else _exprFunctions.SetWidgetRichText([elementId], value, true); + } + }; + + _exprFunctions.GetRtfElementHeight = function(rtfElement) { + if(rtfElement.innerHTML == '') rtfElement.innerHTML = ' '; + return rtfElement.offsetHeight; + }; + + _exprFunctions.SetWidgetRichText = function(ids, value, plain) { + // Converts dates, widgetinfo, and the like to strings. + value = _exprFunctions.ToString(value); + + //Replace any newlines with line breaks + var finalValue = value.replace(/\r\n/g, '
    ').replace(/\n/g, '
    '); + + for(var i = 0; i < ids.length; i++) { + var id = ids[i]; + + // If calling this on button shape, get the id of the rich text panel inside instead + var type = $obj(id).type; + if(type != 'richTextPanel' && type != 'hyperlink') { + id = $jobj(id).find('.text')[0].id; + } + + var element = window.document.getElementById(id); + $ax.visibility.SetVisible(element, value != ''); + + $ax.style.transformTextWithVerticalAlignment(id, function() { + var spans = $jobj(id).find('span'); + if(plain) { + // Wrap in span and p, style them accordingly. + var span = $(''); + if(spans.length > 0) { + span.attr('style', $(spans[0]).attr('style')); + span.attr('id', $(spans[0]).attr('id')); + } + + // Can't set value as text because '
    ' doesn't actually do a line break + // Can't set vaule as html because it doesn't like '<' and ignores all after it + // Create tags yourself + var lines = value.split(/\r\n|\n/); + if(lines.length == 1) span.text(value); + else { + for(var i = 0; i < lines.length; i++) { + if (i != 0) span.append($('
    ')); + var line = lines[i]; + if(line.length == 0) continue; + + var subSpan = $(''); + subSpan.text(line); + span.append(subSpan); + } + } + + var p = $('

    '); + var ps = $jobj(id).find('p'); + if(ps.length > 0) { + p.attr('style', $(ps[0]).attr('style')); + p.attr('id', $(ps[0]).attr('id')); + } + p.append(span); + finalValue = $('
    ').append(p).html(); + } + + element.innerHTML = finalValue; + }); + + if(!plain) $ax.style.CacheOriginalText(id, true); + } + }; + + _exprFunctions.GetCheckState = function(ids) { + return $ax('#' + ids[0]).selected(); + }; + + _exprFunctions.GetSelectedOption = function (ids) { + var inputs = $jobj($ax.INPUT(ids[0])); + return inputs.length ? inputs[0].value : ''; + }; + + _exprFunctions.GetNum = function(str) { + //Setting a GlobalVariable to some blank text then setting a widget to the value of that variable would result in 0 not "" + //I have fixed this another way so commenting this should be fine now + //if (!str) return ""; + return isNaN(str) ? str : Number(str); + }; + + _exprFunctions.GetGlobalVariableValue = function(id) { + return $ax.globalVariableProvider.getVariableValue(id); + }; + + _exprFunctions.GetGlobalVariableLength = function(id) { + return _exprFunctions.GetGlobalVariableValue(id).length; + }; + + _exprFunctions.GetWidgetText = function(ids) { + if($ax.placeholderManager.isActive(ids[0])) return ''; + var input = $ax.INPUT(ids[0]); + return $ax('#' + ($jobj(input).length ? input : ids[0])).text(); + }; + + _exprFunctions.GetFocusedWidgetText = function() { + if(window.lastFocusedControl) { + return $ax('#' + window.lastFocusedControl).text(); + } else { + return ""; + } + }; + + _exprFunctions.GetWidgetValueLength = function(ids) { + var id = ids[0]; + if(!id) return undefined; + if($ax.placeholderManager.isActive(id)) return 0; + var obj = $jobj($ax.INPUT(id)); + if(!obj.length) obj = $jobj(id); + var val = obj[0].value || _exprFunctions.GetWidgetText([id]); + return val.length; + }; + + _exprFunctions.GetPanelState = function(ids) { + var id = ids[0]; + if(!id) return undefined; + var stateId = $ax.visibility.GetPanelState(id); + return stateId && String($jobj(stateId).data('label')); + }; + + _exprFunctions.GetWidgetVisibility = function(ids) { + var id = ids[0]; + if(!id) return undefined; + return $ax.visibility.IsIdVisible(id); + }; + + // ***************** Validation Functions ***************** // + + _exprFunctions.IsValueAlpha = function(val) { + var isAlphaRegex = new RegExp("^[a-z\\s]+$", "gi"); + return isAlphaRegex.test(val); + }; + + _exprFunctions.IsValueNumeric = function(val) { + var isNumericRegex = new RegExp("^[0-9,\\.\\s]+$", "gi"); + return isNumericRegex.test(val); + }; + + _exprFunctions.IsValueAlphaNumeric = function(val) { + var isAlphaNumericRegex = new RegExp("^[0-9a-z\\s]+$", "gi"); + return isAlphaNumericRegex.test(val); + }; + + _exprFunctions.IsValueOneOf = function(val, values) { + for(var i = 0; i < values.length; i++) { + var option = values[i]; + if(val == option) return true; + } + //by default, return false + return false; + }; + + _exprFunctions.IsValueNotAlpha = function(val) { + return !_exprFunctions.IsValueAlpha(val); + }; + + _exprFunctions.IsValueNotNumeric = function(val) { + return !_exprFunctions.IsValueNumeric(val); + }; + + _exprFunctions.IsValueNotAlphaNumeric = function(val) { + return !_exprFunctions.IsValueAlphaNumeric(val); + }; + + _exprFunctions.IsValueNotOneOf = function(val, values) { + return !_exprFunctions.IsValueOneOf(val, values); + }; + + _exprFunctions.GetKeyPressed = function(eventInfo) { + return eventInfo.keyInfo; + }; + + _exprFunctions.GetCursorRectangles = function() { + var rects = new Object(); + rects.lastRect = new $ax.drag.Rectangle($ax.lastMouseLocation.x, $ax.lastMouseLocation.y, 1, 1); + rects.currentRect = new $ax.drag.Rectangle($ax.mouseLocation.x, $ax.mouseLocation.y, 1, 1); + return rects; + }; + + _exprFunctions.GetWidgetRectangles = function (elementIds, eventInfo) { + var elementId = elementIds[0]; + var rects = new Object(); + var jObj = $jobj(elementId); + var axObj = $ax('#' + elementId); + var invalid = jObj.length == 0; + var parent = jObj; + // Or are in valid if no obj can be found, or if it is not visible. + while(parent.length != 0 && !parent.is('body')) { + if(parent.css('display') == 'none') { + invalid = true; + break; + } + parent = parent.parent(); + } + if(invalid) { + rects.lastRect = rects.currentRect = new $ax.drag.Rectangle(-1, -1, -1, -1); + return rects; + } + + rects.lastRect = new $ax.drag.Rectangle( + axObj.left(), + axObj.top(), + axObj.width(), + axObj.height()); + + rects.currentRect = rects.lastRect; + return rects; + }; + + _exprFunctions.GetWidget = function(elementId) { + return $ax.getWidgetInfo(elementId[0]); + }; + + _exprFunctions.GetAdaptiveView = function() { + return $ax.adaptive.currentViewId || ''; + }; + + _exprFunctions.IsEntering = function(movingRects, targetRects) { + return !movingRects.lastRect.IntersectsWith(targetRects.currentRect) && movingRects.currentRect.IntersectsWith(targetRects.currentRect); + }; + + _exprFunctions.IsLeaving = function(movingRects, targetRects) { + return movingRects.lastRect.IntersectsWith(targetRects.currentRect) && !movingRects.currentRect.IntersectsWith(targetRects.currentRect); + }; + + var _IsOver = _exprFunctions.IsOver = function(movingRects, targetRects) { + return movingRects.currentRect.IntersectsWith(targetRects.currentRect); + }; + + _exprFunctions.IsNotOver = function(movingRects, targetRects) { + return !_IsOver(movingRects, targetRects); + }; + + _exprFunctions.ValueContains = function(inputString, value) { + return inputString.indexOf(value) > -1; + }; + + _exprFunctions.ValueNotContains = function(inputString, value) { + return !_exprFunctions.ValueContains(inputString, value); + }; + + _exprFunctions.ToString = function(value) { + if(value.isWidget) { + return value.text; + } + return String(value); + }; + + var _evaluateExpr = $ax.expr.evaluateExpr = function(expr, eventInfo, toString) { + if(expr === undefined || expr === null) return undefined; + var result = _exprHandlers[expr.exprType](expr, eventInfo); + return toString ? _exprFunctions.ToString(result) : result; + }; + + +}); \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/flyout.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/flyout.js" new file mode 100644 index 0000000..56f967e --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/flyout.js" @@ -0,0 +1,273 @@ +锘// ******* Flyout MANAGER ******** // +$axure.internal(function($ax) { + var _flyoutManager = $ax.flyoutManager = {}; + + var getFlyoutLabel = function(panelId) { + return panelId + '_flyout'; + }; + + var _unregisterPanel = function(panelId, keepShown) { + $ax.geometry.unregister(getFlyoutLabel(panelId)); + if(panelToSrc[panelId]) { + $ax.style.RemoveRolloverOverride(panelToSrc[panelId]); + delete panelToSrc[panelId]; + } + if(!keepShown) { + $ax.action.addAnimation(panelId, $ax.action.queueTypes.fade, function() { + $ax('#' + panelId).hide(); + }); + } + }; + _flyoutManager.unregisterPanel = _unregisterPanel; + + var genPoint = $ax.geometry.genPoint; + + var _updateFlyout = function(panelId) { + var label = getFlyoutLabel(panelId); + if(!$ax.geometry.polygonRegistered(label)) return; + var info = $ax.geometry.getPolygonInfo(label); + var rects = info && info.rects; + + var targetWidget = $ax.getWidgetInfo(panelId); + rects.target = $ax.geometry.genRect(targetWidget); + + // Src will stay the same, just updating + $ax.flyoutManager.registerFlyout(rects, panelId, panelToSrc[panelId]); + + if(!$ax.geometry.checkInsideRegion(label)) _unregisterPanel(panelId); + }; + _flyoutManager.updateFlyout = _updateFlyout; + + var panelToSrc = {}; + var _registerFlyout = function(rects, panelId, srcId) { + var label = _getFlyoutLabel(panelId); + var callback = function(info) { + // If leaving object or already outside it, then unregister, otherwise just return + if(!info.exiting && !info.outside) return; + _unregisterPanel(panelId); + }; + var points = []; + + var lastSrcId = panelToSrc[panelId]; + if(lastSrcId != srcId) { + if(lastSrcId) $ax.style.RemoveRolloverOverride(lastSrcId); + if(srcId) { + $ax.style.AddRolloverOverride(srcId); + panelToSrc[panelId] = srcId; + } else delete panelToSrc[panelId]; + } + + // rects should be one or two rectangles + if(!rects.src) { + var rect = rects.target; + points.push(genPoint(rect.Left(), rect.Top())); + points.push(genPoint(rect.Right(), rect.Top())); + points.push(genPoint(rect.Right(), rect.Bottom())); + points.push(genPoint(rect.Left(), rect.Bottom())); + } else { + var r0 = rects.src; + var r1 = rects.target; + + // Right left of right, left right of left, top below top, bottom above bottom + var rlr = r0.Right() <= r1.Right(); + var lrl = r0.Left() >= r1.Left(); + var tbt = r0.Top() >= r1.Top(); + var bab = r0.Bottom() <= r1.Bottom(); + + var info = { rlr: rlr, lrl: lrl, tbt: tbt, bab: bab }; + + if((rlr && lrl) || (tbt && bab)) { + points = getSmallPolygon(r0, r1, info); + } else { + points = getLargePolygon(r0, r1, info); + } + } + + $ax.geometry.registerPolygon(label, points, callback, { rects: rects }); + }; + _flyoutManager.registerFlyout = _registerFlyout; + + var _getFlyoutLabel = function(panelId) { + return panelId + '_flyout'; + }; + + var _reregisterAllFlyouts = function() { + for(var panelId in panelToSrc) _reregisterFlyout(panelId); + }; + _flyoutManager.reregisterAllFlyouts = _reregisterAllFlyouts; + + var _reregisterFlyout = function(panelId) { + var rects = $ax.geometry.getPolygonInfo(getFlyoutLabel(panelId)).rects; + _registerFlyout(rects, panelId, panelToSrc[panelId]); + }; + + // This is the reduced size polygon connecting r0 to r1 by means of horizontal or vertical lines. + var getSmallPolygon = function(r0, r1, info) { + var points = []; + + // NOTE: currently I make the assumption that if horizontal/vertical connecting lines from the src hit the target + // Meaning if horizontal, rlr and lrl are true, and if vertical, tbt and bab are true. + + var r0Left = r0.Left(); + var r0Right = r0.Right(); + var r0Top = r0.Top(); + var r0Bottom = r0.Bottom(); + var r1Left = r1.Left(); + var r1Right = r1.Right(); + var r1Top = r1.Top(); + var r1Bottom = r1.Bottom(); + + points.push(genPoint(r1Left, r1Top)); + + if(!info.tbt) { + points.push(genPoint(r0Left, r1Top)); + points.push(genPoint(r0Left, r0Top)); + points.push(genPoint(r0Right, r0Top)); + points.push(genPoint(r0Right, r1Top)); + } + + points.push(genPoint(r1Right, r1Top)); + + if(!info.rlr) { + points.push(genPoint(r1Right, r0Top)); + points.push(genPoint(r0Right, r0Top)); + points.push(genPoint(r0Right, r0Bottom)); + points.push(genPoint(r1Right, r0Bottom)); + } + + points.push(genPoint(r1Right, r1Bottom)); + + if(!info.bab) { + points.push(genPoint(r0Right, r1Bottom)); + points.push(genPoint(r0Right, r0Bottom)); + points.push(genPoint(r0Left, r0Bottom)); + points.push(genPoint(r0Left, r1Bottom)); + } + + points.push(genPoint(r1Left, r1Bottom)); + + if(!info.lrl) { + points.push(genPoint(r1Left, r0Bottom)); + points.push(genPoint(r0Left, r0Bottom)); + points.push(genPoint(r0Left, r0Top)); + points.push(genPoint(r1Left, r0Top)); + } + + return points; + }; + + // This is the original algorithm that connects the most extream corners to make polygon + var getLargePolygon = function(r0, r1, info) { + var points = []; + + var r0Left = r0.Left(); + var r0Right = r0.Right(); + var r0Top = r0.Top(); + var r0Bottom = r0.Bottom(); + var r1Left = r1.Left(); + var r1Right = r1.Right(); + var r1Top = r1.Top(); + var r1Bottom = r1.Bottom(); + + // Top lefts + if(info.tbt) { + if(!info.lrl) points.push(genPoint(r0Left, r0Top)); + points.push(genPoint(r1Left, r1Top)); + } else { + if(info.lrl) points.push(genPoint(r1Left, r1Top)); + points.push(genPoint(r0Left, r0Top)); + } + + // Top rights + if(info.tbt) { + points.push(genPoint(r1Right, r1Top)); + if(!info.rlr) points.push(genPoint(r0Right, r0Top)); + } else { + points.push(genPoint(r0Right, r0Top)); + if(info.rlr) points.push(genPoint(r1Right, r1Top)); + } + + // Bottom rights + if(info.bab) { + if(!info.rlr) points.push(genPoint(r0Right, r0Bottom)); + points.push(genPoint(r1Right, r1Bottom)); + } else { + if(info.rlr) points.push(genPoint(r1Right, r1Bottom)); + points.push(genPoint(r0Right, r0Bottom)); + } + + // Bottom Lefts + if(info.bab) { + points.push(genPoint(r1Left, r1Bottom)); + if(!info.lrl) points.push(genPoint(r0Left, r0Bottom)); + } else { + points.push(genPoint(r0Left, r0Bottom)); + if(info.lrl) points.push(genPoint(r1Left, r1Bottom)); + } + return points; + }; +}); + +// ******* Placeholder Manager ********* // + +$axure.internal(function($ax) { + var _placeholderManager = $ax.placeholderManager = {}; + var idToPlaceholderInfo = {}; + + var _registerPlaceholder = function(elementId, text, password) { + idToPlaceholderInfo[elementId] = { text: text, password: password, active: false }; + }; + _placeholderManager.registerPlaceholder = _registerPlaceholder; + + _placeholderManager.refreshPlaceholder = function (elementId) { + var info = idToPlaceholderInfo[elementId]; + if (!info || !info.active) return; + $ax.style.SetWidgetPlaceholder(elementId, true, info.text, info.password); + } + + var _updatePlaceholder = function(elementId, active, clearText) { + var inputId = $ax.repeater.applySuffixToElementId(elementId, '_input'); + + var info = idToPlaceholderInfo[elementId]; + if(!info || info.active == active) return; + info.active = active; + var value = active ? info.text : clearText ? '' : $jobj(inputId).val(); + $ax.style.SetWidgetPlaceholder(elementId, active, value, info.password); + }; + _placeholderManager.updatePlaceholder = _updatePlaceholder; + + var _isActive = function(elementId) { + var info = idToPlaceholderInfo[elementId]; + return Boolean(info && info.active); + }; + _placeholderManager.isActive = _isActive; + + var _selectRange = function(elementId, start, end) { + $jobj(elementId).each(function() { + if(this.setSelectionRange) { + var validTypes = ["text", "search", "url", "tel", "password"]; + if(this.tagName.toLowerCase() != "input" || validTypes.indexOf(this.type) > -1) { + this.focus(); + this.setSelectionRange(start, end); + } + } else if(this.createTextRange) { + var range = this.createTextRange(); + range.collapse(true); + range.moveEnd('character', end); + range.moveStart('character', start); + range.select(); + } + }); + }; + _placeholderManager.selectRange = _selectRange; + + var _moveCaret = function(id, index) { + var inputIndex = id.indexOf('_input'); + if(inputIndex == -1) return; + var inputId = id.substring(0, inputIndex); + + if(!_isActive(inputId)) return; + _selectRange(id, index, index); + }; + _placeholderManager.moveCaret = _moveCaret; +}); \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/geometry.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/geometry.js" new file mode 100644 index 0000000..a9809a7 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/geometry.js" @@ -0,0 +1,301 @@ +锘// ******* Region MANAGER ******** // +$axure.internal(function($ax) { + var _geometry = $ax.geometry = {}; + var regionMap = {}; + var regionList = []; + + var _unregister = function(label) { + var regionIndex = regionList.indexOf(label); + if(regionIndex != -1) { + var end = $ax.splice(regionList, regionIndex + 1); + $ax.splice(regionList, regionIndex, regionList.length - regionIndex); + regionList = regionList.concat(end); + } + delete regionMap[label]; + }; + _geometry.unregister = _unregister; + + var clear = function() { + regionMap = {}; + regionList = []; + }; + + var _polygonRegistered = function(label) { + return Boolean(regionMap[label]); + }; + _geometry.polygonRegistered = _polygonRegistered; + + // Must be counterclockwise, or enter/exit will be wrong + var _registerPolygon = function(label, points, callback, info) { + var regionIndex = regionList.indexOf(label); + if(regionIndex == -1) regionList.push(label); + regionMap[label] = { points: points, callback: callback, info: info }; + }; + _geometry.registerPolygon = _registerPolygon; + + var _getPolygonInfo = function(label) { + if(!_polygonRegistered(label)) return undefined; + return regionMap[label].info; + }; + _geometry.getPolygonInfo = _getPolygonInfo; + + + + var _genRect = function(info, roundHalfPixel) { + var x = info.pagex; + var y = info.pagey; + var w = info.width; + var h = info.height; + + if(roundHalfPixel) { + if(x % 1 != 0) { + x = Math.floor(x); + w++; + } + if(y % 1 != 0) { + y = Math.floor(y); + h++; + } + } + + var r = x + w; + var b = y + h; + + var rect = { + X: function() { return x; }, + Y: function() { return y; }, + Wigth: function() { return w; }, + Height: function() { return h; }, + Left: function() { return x; }, + Right: function() { return r; }, + Top: function() { return y; }, + Bottom: function() { return b; } + }; + return rect; + }; + _geometry.genRect = _genRect; + + var _genPoint = function(x, y) { + return { x: x, y: y }; + }; + _geometry.genPoint = _genPoint; + + var oldPoint = _genPoint(0, 0); + _geometry.tick = function(x, y, end) { + var lastPoint = oldPoint; + var nextPoint = oldPoint = _genPoint(x, y); + var line = { p1: lastPoint, p2: nextPoint }; + if(!regionList.length) return; + + for(var i = 0; i < regionList.length; i++) { + var region = regionMap[regionList[i]]; + var points = region.points; + if(!region.checked) { + if(!_checkInside(points, $ax.mouseLocation)) { + region.callback({ outside: true }); + continue; + } + region.checked = true; + } + for(var j = 0; j < points.length; j++) { + var startSegment = points[j]; + var endSegment = points[(j + 1) % points.length]; + var intersectInfo = linesIntersect(line, { p1: startSegment, p2: endSegment }); + if(intersectInfo) { + region.callback(intersectInfo); + break; + } + } + } + + if(end) clear(); + }; + + // Info if the one line touches the other (even barely), false otherwise + // Info includes point, if l1 is entering or exiting l2, and any ties that happened, or parallel info + var linesIntersect = function(l1, l2) { + var retval = {}; + var ties = {}; + + var l1p1 = l1.p1.x < l1.p2.x || (l1.p1.x == l1.p2.x && l1.p1.y < l1.p2.y) ? l1.p1 : l1.p2; + var l1p2 = l1.p1.x < l1.p2.x || (l1.p1.x == l1.p2.x && l1.p1.y < l1.p2.y) ? l1.p2 : l1.p1; + var m1 = (l1p2.y - l1p1.y) / (l1p2.x - l1p1.x); + + var l2p1 = l2.p1.x < l2.p2.x || (l2.p1.x == l2.p2.x && l2.p1.y < l2.p2.y) ? l2.p1 : l2.p2; + var l2p2 = l2.p1.x < l2.p2.x || (l2.p1.x == l2.p2.x && l2.p1.y < l2.p2.y) ? l2.p2 : l2.p1; + var m2 = (l2p2.y - l2p1.y) / (l2p2.x - l2p1.x); + + var l1Vert = l1.p1.x == l1.p2.x; + var l2Vert = l2.p1.x == l2.p2.x; + if(l1Vert || l2Vert) { + if(l1Vert && l2Vert) { + // If the lines don't follow the same path, return + if(l1p1.x != l2p1.x) return false; + // if they never meet, return + if(l1p2.y < l2p1.y || l1p1.y > l2p2.y) return false; + var firstVert = l1p1.y >= l2p1.y ? l1p1 : l2p1; + var secondVert = l1p2.y <= l2p2.y ? l1p2 : l2p2; + // First is from the perspective of l1 + retval.parallel = { + first: l1p1 == l1.p1 ? firstVert : secondVert, + second: l1p2 == l1.p2 ? secondVert : firstVert, + sameDirection: (l1p1 == l1.p1) == (l2p1 == l2.p1) + }; + + return retval; + } + + var x1 = l2Vert ? l1p1.x : l2p1.x; + var x2 = l2Vert ? l1p2.x : l2p2.x; + var xVert = l2Vert ? l2p1.x : l1p1.x; + + var y = l2Vert ? l1p1.y + (xVert - x1) * m1 : l2p1.y + (xVert - x1) * m2; + var y1 = l2Vert ? l2p1.y : l1p1.y; + var y2 = l2Vert ? l2p2.y : l1p2.y; + if(xVert >= x1 && xVert <= x2 && y >= y1 && y <= y2) { + retval.point = { x: xVert, y: y }; + retval.exiting = l2Vert == (y1 == (l2Vert ? l2.p1.y : l1.p1.y)) == (x1 == (l2Vert ? l1.p1.x : l2.p1.x)); + retval.entering = !retval.exiting; + + // Calculate ties + if(x1 == xVert) { + ties[l2Vert ? 'l1' : 'l2'] = (x1 == (l2Vert ? l1.p1.x : l2.p1.x)) ? 'start' : 'end'; + retval.ties = ties; + } else if(x2 == xVert) { + ties[l2Vert ? 'l1' : 'l2'] = (x2 == (l2Vert ? l1.p2.x : l2.p2.x)) ? 'end' : 'start'; + retval.ties = ties; + } + if(y1 == y) { + ties[l2Vert ? 'l2' : 'l1'] = (y1 == (l2Vert ? l2.p1.y : l1.p1.y)) ? 'start' : 'end'; + retval.ties = ties; + } else if(y2 == y) { + ties[l2Vert ? 'l2' : 'l1'] = (y2 == (l2Vert ? l2.p2.y : l1.p2.y)) ? 'end' : 'start'; + retval.ties = ties; + } + + return retval; + } + return false; + } + // If here, no vertical lines + + if(m1 == m2) { + // If the lines don't follow the same path, return + if(l1p1.y != (l2p1.y + (l1p1.x - l2p1.x) * m1)) return false; + // if they never meet, return + if(l1p2.x < l2p1.x || l1p1.x > l2p2.x) return false; + var first = l1p1.x >= l2p1.x ? l1p1 : l2p1; + var second = l1p2.x <= l2p2.x ? l1p2 : l2p2; + // First is from the perspective of l1 + retval.parallel = { + first: l1p1 == l1.p1 ? first : second, + second: l1p2 == l1.p2 ? second : first, + sameDirection: (l1p1 == l1.p1) == (l2p1 == l2.p1) + }; + + return retval; + } + + var x = (l2p1.y - l2p1.x * m2 - l1p1.y + l1p1.x * m1) / (m1 - m2); + + // Check if x is out of bounds + if(x >= l1p1.x && x <= l1p2.x && x >= l2p1.x && x <= l2p2.x) { + var y = l1p1.y + (x - l1p1.x) * m1; + retval.point = { x: x, y: y }; + retval.entering = m1 > m2 == (l1p1 == l1.p1) == (l2p1 == l2.p1); + retval.exiting = !retval.entering; + + // Calculate ties + if(l1.p1.x == x) { + ties.l1 = 'start'; + retval.ties = ties; + } else if(l1.p2.x == x) { + ties.l1 = 'end'; + retval.ties = ties; + } + if(l2.p1.x == x) { + ties.l2 = 'start'; + retval.ties = ties; + } else if(l2.p2.x == x) { + ties.l2 = 'end'; + retval.ties = ties; + } + + return retval; + } + return false; + }; + + var _checkInsideRegion = function(label, point) { + if(!_polygonRegistered(label)) return false; + + return _checkInside(regionMap[label].points, point || $ax.mouseLocation); + }; + _geometry.checkInsideRegion = _checkInsideRegion; + + // Returns true if point is inside the polygon, including ties + var _checkInside = function(polygon, point) { + // Make horizontal line wider than the polygon, with the y of point to test location + var firstX = polygon[0].x; + var secondX = firstX; + var i; + for(i = 1; i < polygon.length; i++) { + var polyX = polygon[i].x; + firstX = Math.min(firstX, polyX); + secondX = Math.max(secondX, polyX); + } + var line = { + p1: _genPoint(--firstX, point.y), + p2: _genPoint(++secondX, point.y) + }; + + // If entered true, with closest intersection says you are inside the polygon. + var entered = false; + // Closest is the closest intersection to the left of the point + var closest = line.p1.x; + // This is for if intersections hit the same point, to find out which is correct + var cos = -2; + + var getCos = function(line) { + var x = line.p2.x - line.p1.x; + var y = line.p2.y - line.p1.y; + return x / Math.sqrt(x * x + y * y); + }; + + for(i = 0; i < polygon.length; i++) { + var polyLine = { p1: polygon[i], p2: polygon[(i + 1) % polygon.length] }; + var intersectInfo = linesIntersect(line, polyLine); + if(!intersectInfo) continue; + + if(intersectInfo.parallel) { + // Only really care about this if it actually touches the point + if(intersectInfo.parallel.first.x <= point.x && intersectInfo.parallel.second.x >= point.x) return true; + continue; + } + + var intersectionX = intersectInfo.point.x; + if(intersectionX > point.x || intersectionX < closest) continue; + if(intersectionX == point.x) return true; + + // If closer than last time, reset cosine. + if(intersectionX != closest) cos = -2; + + // For getting cosine, need to possibly reverse the direction of polyLine. + if(intersectInfo.ties) { + // Tie must be on l2, if the ties is end, reverse so cosine indicates how close the angle is to that of 'point' from here. + if(intersectInfo.ties.l2 == 'end') polyLine = { p1: polyLine.p2, p2: polyLine.p1 }; + } else { + // It is on both side, so you can take the larger one + if(polyLine.p1.x > polyLine.p2.x) polyLine = { p1: polyLine.p2, p2: polyLine.p1 }; + } + var currCos = getCos(polyLine); + if(currCos > cos) { + cos = currCos; + closest = intersectionX; + entered = intersectInfo.entering; + } + } + return entered; + }; + _geometry.checkInside = _checkInside; +}); \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/globals.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/globals.js" new file mode 100644 index 0000000..0c5c4e8 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/globals.js" @@ -0,0 +1,7 @@ +锘$axure.internal(function($ax) { + var _globals = $ax.globals = {}; + + $ax.globals.MaxZIndex = 1000; + $ax.globals.MinZIndex = -1000; + +}); \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/ie.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/ie.js" new file mode 100644 index 0000000..a8553d9 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/ie.js" @@ -0,0 +1,344 @@ +锘 +// ******* Internet Explorer MANAGER ******** // +//this is to handle all the stupid IE Stuff +$axure.internal(function($ax) { + if(!IE_10_AND_BELOW) return; + + var _ieColorManager = {}; + if(Number(BROWSER_VERSION) < 9) $ax.ieColorManager = _ieColorManager; + + var _applyIEFixedPosition = function() { + if(Number(BROWSER_VERSION) >= 7) return; + + $axure(function(diagramObject) { return diagramObject.fixedVertical; }).$() + .appendTo($('body')) + .css('position', 'absolute').css('margin-left', 0 + 'px').css('margin-top', 0 + 'px'); + + var handleScroll = function() { + $axure(function(diagramObject) { return diagramObject.fixedVertical; }) + .each(function(diagramObject, elementId) { + var win = $(window); + var windowWidth = win.width(); + var windowHeight = win.height(); + var windowScrollLeft = win.scrollLeft(); + var windowScrollTop = win.scrollTop(); + + var newLeft = 0; + var newTop = 0; + var elementQuery = $('#' + elementId); + var elementAxQuery = $ax('#' + elementId); + var width = elementAxQuery.width(); + var height = elementAxQuery.height(); + + var horz = diagramObject.fixedHorizontal; + if(horz == 'left') { + newLeft = windowScrollLeft + diagramObject.fixedMarginHorizontal; + } else if(horz == 'center') { + newLeft = windowScrollLeft + ((windowWidth - width) / 2) + diagramObject.fixedMarginHorizontal; + } else if(horz == 'right') { + newLeft = windowScrollLeft + windowWidth - width - diagramObject.fixedMarginHorizontal; + } + + var vert = diagramObject.fixedVertical; + if(vert == 'top') { + newTop = windowScrollTop + diagramObject.fixedMarginVertical; + } else if(vert == 'middle') { + newTop = windowScrollTop + ((windowHeight - height) / 2) + diagramObject.fixedMarginVertical; + } else if(vert == 'bottom') { + newTop = windowScrollTop + windowHeight - height - diagramObject.fixedMarginVertical; + } + elementQuery.css('top', newTop + 'px').css('left', newLeft + 'px'); + }); + }; + + $(window).scroll(handleScroll); + $axure.resize(handleScroll); + handleScroll(); + }; + + var _applyBackground = function() { + if(Number(BROWSER_VERSION) >= 9) return; + + var styleChain = $ax.adaptive.getAdaptiveIdChain($ax.adaptive.currentViewId); + var argb = _getArgb($ax.pageData.page, styleChain); + var hexColor = _getHexColor(argb, false); + if(hexColor) $('body').css('background-color', hexColor); + + _applyBackgroundToQuery($ax('*')); + }; + + var _applyBackgroundToQuery = function(query) { + if(Number(BROWSER_VERSION) >= 9) return; + + var styleChain = $ax.adaptive.getAdaptiveIdChain($ax.adaptive.currentViewId); + query.each(function(obj, elementId) { + if ($ax.public.fn.IsDynamicPanel(obj.type)) { + var stateCount = obj.diagrams.length; + for(var j = 0; j < stateCount; j++) { + var stateId = $ax.repeater.applySuffixToElementId(elementId, '_state' + j); + var argb = _getArgb(obj.diagrams[j], styleChain); + var hexColor = _getHexColor(argb, true); + if(hexColor) $jobj(stateId).css('background-color', hexColor); + } + } else if ($ax.public.fn.IsRepeater(obj.type)) { + + } + }); + }; + _ieColorManager.applyBackground = _applyBackgroundToQuery; + + var _getArgb = function(diagram, styleChain) { + var argb = undefined; + for(var i = 0; i < styleChain.length && !argb; i++) { + var style = diagram.adaptiveStyles[styleChain[i]]; + argb = style.fill && style.fill.color; + } + if(!argb) argb = diagram.style.fill.color; + return argb; + }; + + var gMult = 256; + var rMult = gMult * 256; + var aMult = rMult * 256; + + var _getHexColor = function(argb, allowWhite) { + var a = Math.floor(argb / aMult); + argb -= a * aMult; + + var r = Math.floor(argb / rMult); + argb -= r * rMult; + + var g = Math.floor(argb / gMult); + var b = argb - g * gMult; + + return _getColorFromArgb(a, r, g, b, allowWhite); + }; + + var _getColorFromArgb = function(a, r, g, b, allowWhite) { + if(Number(BROWSER_VERSION) >= 9) return undefined; + + //convert the color with alpha to a color with no alpha (assuming white background) + r = Math.min((r * a) / 255 + 255 - a, 255); + g = Math.min((g * a) / 255 + 255 - a, 255); + b = Math.min((b * a) / 255 + 255 - a, 255); + + if(a == 0) return undefined; + if(!allowWhite && (r == 255 && g == 255 && b == 255)) return undefined; + + var color = '#'; + color += Math.floor(r / 16).toString(16); + color += Math.floor(r % 16).toString(16); + color += Math.floor(g / 16).toString(16); + color += Math.floor(g % 16).toString(16); + color += Math.floor(b / 16).toString(16); + color += Math.floor(b % 16).toString(16); + return color; + }; + _ieColorManager.getColorFromArgb = _getColorFromArgb; + + var getIEOffset = function(transform, rect) { + var translatedVertexes = [ + $axure.utils.Vector2D(0, 0), //we dont translate, so the orgin is fixed + transform.mul($axure.utils.Vector2D(0, rect.height)), + transform.mul($axure.utils.Vector2D(rect.width, 0)), + transform.mul($axure.utils.Vector2D(rect.width, rect.height))]; + + var minX = 0, minY = 0, maxX = 0, maxY = 0; + $.each(translatedVertexes, function(index, p) { + minX = Math.min(minX, p.x); + minY = Math.min(minY, p.y); + maxX = Math.max(maxX, p.x); + maxY = Math.max(maxY, p.y); + }); + + return $axure.utils.Vector2D( + (maxX - minX - rect.width) / 2, + (maxY - minY - rect.height) / 2); + }; + + var _filterFromTransform = function(transform) { + return "progid:DXImageTransform.Microsoft.Matrix(M11=" + transform.m11 + + ", M12=" + transform.m12 + ", M21=" + transform.m21 + + ", M22=" + transform.m22 + ", SizingMethod='auto expand')"; + }; + + var _applyIERotation = function() { + if(Number(BROWSER_VERSION) >= 9) return; + + $axure(function(diagramObject) { + return ((diagramObject.style.rotation && Math.abs(diagramObject.style.rotation) > 0.1) + || (diagramObject.style.textRotation && Math.abs(diagramObject.style.textRotation) > 0.1)) + && !diagramObject.isContained; + }).each(function(diagramObject, elementId) { + var rotation = diagramObject.style.rotation || 0; + var $element = $('#' + elementId); + var axElement = $ax('#' + elementId); + var width = axElement.width(); + var height = axElement.height(); + var originX = width / 2; + var originY = height / 2; + + var shapeIeOffset; + $element.children().each(function() { + var $child = $(this); + var axChild = $ax('#' + $child.attr('id')); + var childWidth = axChild.width(); + var childHeight = axChild.height() + $child.position().top; + var centerX = $child.position().left + (childWidth / 2); + var centerY = $child.position().top + (childHeight / 2); + var deltaX = centerX - originX; + var deltaY = centerY - originY; + + var effectiveRotation = rotation; + var textObject = $ax.getObjectFromElementId($child.attr('id')); + if(textObject) { + if(textObject.style.textRotation) effectiveRotation = textObject.style.textRotation; + else return; + } + + var transform = $ax.utils.Matrix2D.identity().rotate(effectiveRotation); + var filter = _filterFromTransform(transform); + + $child.css('filter', filter) + .width(childWidth + 1) + .height(childHeight + 1); + + var p = transform.mul($ax.utils.Vector2D(deltaX, deltaY)); + var ieOffset = getIEOffset(transform, { width: childWidth, height: childHeight }); + if(!textObject) { + shapeIeOffset = ieOffset; + } else { + // This is a close approximation, but not exact + if(diagramObject.style.verticalAlignment != 'top') ieOffset.y -= shapeIeOffset.y + Math.abs(shapeIeOffset.x); + } + + $child.css("margin-left", -ieOffset.x - deltaX + p.x).css("margin-top", -ieOffset.y - deltaY + p.y); + }); + }); + }; + + var _fixIEStretchBackground = function() { + if(Number(BROWSER_VERSION) >= 9) return; + var pageStyle = $ax.adaptive.getPageStyle(); + if(!pageStyle.imageRepeat || pageStyle.imageRepeat == 'auto') return; + + $('body').css('background-image', 'none'); + var viewId = $ax.adaptive.currentViewId; + var imageInfo = viewId ? $ax.pageData.viewIdToBackgroundImageInfo && $ax.pageData.viewIdToBackgroundImageInfo[viewId] : $ax.pageData.defaultBackgroundImageInfo; + if(imageInfo && imageInfo.path) { + if($('#bg_img').length == 0) $('body').append(''); + $('#bg_img').attr('src', imageInfo.path).css('position', 'fixed').css('z-index', '-10000'); + _resizeIEBackground(); + } else $('#bg_img').remove(); + }; + + var _resizeIEBackground = function() { + if(Number(BROWSER_VERSION) >= 9) return; + //var page = $ax.pageData.page; + var viewId = $ax.adaptive.currentViewId; + var pageStyle = $ax.adaptive.getPageStyle(); + if(!$ax.pageData.defaultBackgroundImageInfo && !$ax.pageData.viewIdToBackgroundImageInfo) return; + var imageInfo = viewId ? $ax.pageData.viewIdToBackgroundImageInfo[viewId] : $ax.pageData.defaultBackgroundImageInfo; + if(!imageInfo) return; + var imageWidth = imageInfo.width; + var imageHeight = imageInfo.height; + var windowWidth = $(window).width(); + var windowHeight = $(window).height(); + var isCover = pageStyle.imageRepeat == 'cover'; + + var wRatio = windowWidth / imageWidth; + var hRatio = windowHeight / imageHeight; + var ratio = wRatio; + if(isCover) { + if(hRatio > wRatio) ratio = hRatio; + } else { + if(hRatio < wRatio) ratio = hRatio; + } + var width = imageWidth * ratio; + var height = imageHeight * ratio; + + var left = '0px'; + if((isCover && width > windowWidth) || (!isCover && width < windowWidth)) { + if(pageStyle.imageHorizontalAlignment == 'center') { + left = ((windowWidth - width) / 2) + 'px'; + } else if(pageStyle.imageHorizontalAlignment == 'far') { + left = (windowWidth - width) + 'px'; + } + } + + var top = '0px'; + if((isCover && height > windowHeight) || (!isCover && height < windowHeight)) { + if(pageStyle.imageVerticalAlignment == 'center') { + top = ((windowHeight - height) / 2) + 'px'; + } else if(pageStyle.imageVerticalAlignment == 'far') { + top = (windowHeight - height) + 'px'; + } + } + + $('#bg_img').css('top', top).css('left', left).css('width', width).css('height', height); + }; + + var _fixAllPngs = function() { + if(!(/MSIE ((5\.5)|6)/.test(window.navigator.userAgent) && window.navigator.platform == "Win32")) return; + + $('img[src$=".png"]').each(function() { + if(!this.complete) { + this.onload = function() { $axure.utils.fixPng(this); }; + } else { + $axure.utils.fixPng(this); + } + }); + }; + + var _fixInputSize = function() { + if(Number(BROWSER_VERSION) >= 8 || window.navigator.userAgent.indexOf("Trident/4.0") > -1) return; + var inputs = $('input').not(':input[type=button], :input[type=submit], :input[type=radio], :input[type=checkbox]'); + inputs.each(function() { + var $input = $(this); + var axInput = $ax('#' + $input.attr('id')); + $input.css('height', (axInput.height() - 4 + 'px')).css('width', (axInput.width() - 2 + 'px')); + }); + + var textAreas = $($ax.constants.TEXT_AREA_TYPE); + textAreas.each(function() { + var $textArea = $(this); + var axText = $ax('#' + $textArea.attr('id')); + $textArea.css('height', (axText.height() - 6 + 'px')).css('width', (axText.width() - 6 + 'px')); + }); + }; + + var _fixInputBackground = function() { + var inputs = $('input').not(':input[type=button], :input[type=submit], :input[type=radio], :input[type=checkbox]'); + inputs = inputs.add($($ax.constants.TEXT_AREA_TYPE)); + inputs.each(function() { + var $input = $(this); + if($input.css('background-color') == 'transparent') { + $input.css('background-image', 'url(../../transparent.gif)'); + } else { + $input.css('background-image', ''); + } + }); + }; + + $(document).ready(function() { + _fixIEStretchBackground(); + _applyIEFixedPosition(); + $axure.resize(function() { + _resizeIEBackground(); + }); + $ax.adaptive.bind('viewChanged', function() { + _fixIEStretchBackground(); + _applyBackground(); + _fixInputBackground(); + }); + + + _fixAllPngs(); + _applyIERotation(); + _applyBackground(); + _fixInputSize(); + _fixInputBackground(); + }); + + +}); diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/init.temp.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/init.temp.js" new file mode 100644 index 0000000..0f3f409 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/init.temp.js" @@ -0,0 +1,224 @@ +锘$axure.internal(function($ax) { + + $(window.document).ready(function() { + var readyStart = (new Date()).getTime(); + + //this is because the page id is not formatted as a guid + var pageId = $ax.pageData.page.packageId; + + var pageData = { + id: pageId, + pageName: $ax.pageData.page.name, + location: window.location.toString(), + notes: $ax.pageData.page.notes + }; + + var anns = []; + $ax('*').each(function (dObj, elementId) { + pushAnnotation(dObj, elementId); + }); + + function pushAnnotation(dObj, elementId) { + var ann = dObj.annotation; + if(ann) { + ann["id"] = elementId; + ann["label"] = dObj.label + " (" + dObj.friendlyType + ")"; + anns.push(ann); + } + + if(dObj.type == 'repeater') { + if(dObj.objects) { + for(var i = 0, len = dObj.objects.length; i < len; i++) { + pushAnnotation(dObj.objects[i]); + } + } + } + } + + pageData.widgetNotes = anns; + + //only trigger the page.data setting if the window is on the mainframe + var isMainFrame = false; + try { + if(window.name == 'mainFrame' || + (!CHROME_5_LOCAL && window.parent.$ && window.parent.$('#mainFrame').length > 0)) { + isMainFrame = true; + + $ax.messageCenter.addMessageListener(function(message, data) { + if(message == 'finishInit') { + _processTempInit(); + } + }); + + $axure.messageCenter.setState('page.data', pageData); + window.focus(); + } + } catch(e) { } + + //attach here for chrome local + $(window).load(function() { + $ax.style.initializeObjectTextAlignment($ax('*')); + }); + + if(!isMainFrame) _processTempInit(); + }); + + + var _processTempInit = function() { + //var start = (new Date()).getTime(); + //var end = (new Date()).getTime(); + //window.alert('elapsed ' + (end - start)); + + $('iframe').each(function() { + var origSrc = $(this).attr('basesrc'); + + var $this = $(this); + if(origSrc) { + var newSrcUrl = origSrc.toLowerCase().indexOf('http://') == -1 ? $ax.globalVariableProvider.getLinkUrl(origSrc) : origSrc; + $this.attr('src', newSrcUrl); + } + + if(IOS) { + $this.parent().css('overflow', 'auto').css('-webkit-overflow-scrolling', 'touch').css('-ms-overflow-x', 'hidden').css('overflow-x', 'hidden'); + } + }); + + $axure.messageCenter.addMessageListener(function(message, data) { + if(message == 'setGlobalVar') { + $ax.globalVariableProvider.setVariableValue(data.globalVarName, data.globalVarValue, true); + } + }); + + window.lastFocusedClickable = null; + var _lastFocusedClickableSelector = 'div[tabIndex=0], img[tabIndex=0], input, a'; + var shouldOutline = true; + + $ax(function (dObj) { return dObj.tabbable; }).each(function (dObj, elementId) { + if ($ax.public.fn.IsLayer(dObj.type)) $ax.event.layerMapFocus(dObj, elementId); + var focusableId = $ax.event.getFocusableWidgetOrChildId(elementId); + $('#' + focusableId).attr("tabIndex", 0); + }); + + $('div[tabIndex=0], img[tabIndex=0]').bind($ax.features.eventNames.mouseDownName, function() { + shouldOutline = false; + }); + + $(window.document).bind($ax.features.eventNames.mouseUpName, function() { + shouldOutline = true; + }); + + $(_lastFocusedClickableSelector).focus(function () { + if(shouldOutline) { + $(this).css('outline', ''); + } else { + $(this).css('outline', 'none'); + } + + window.lastFocusedClickable = this; + }); + + $(_lastFocusedClickableSelector).blur(function () { + if(window.lastFocusedClickable == this) window.lastFocusedClickable = null; + }); + + $(window.document).bind('keyup', function(e) { + if(e.keyCode == '13' || e.keyCode == '32') { + if(window.lastFocusedClickable) $(window.lastFocusedClickable).click(); + } + }); + + if($ax.document.configuration.hideAddress) { + $(window).load(function() { + window.setTimeout(function() { + window.scrollTo(0, 0.9); + }, 0); + }); + } + + if($ax.document.configuration.preventScroll) { + $(window.document).bind('touchmove', function(e) { + var inScrollable = $ax.legacy.GetScrollable(e.target) != window.document.body; + if(!inScrollable) { + e.preventDefault(); + } + }); + + $ax(function(diagramObject) { + return $ax.public.fn.IsDynamicPanel(diagramObject.type) && diagramObject.scrollbars != 'none'; + }).$().children().bind('touchstart', function() { + var target = this; + var top = target.scrollTop; + if(top <= 0) target.scrollTop = 1; + if(top + target.offsetHeight >= target.scrollHeight) target.scrollTop = target.scrollHeight - target.offsetHeight - 1; + }); + } + + if(OS_MAC && WEBKIT) { + $ax(function(diagramObject) { + return $ax.public.fn.IsComboBox(diagramObject.type); + }).each(function(obj, id) { + $jobj($ax.INPUT(id)).css('-webkit-appearance', 'menulist-button').css('border-color', '#999999'); + }); + } + + $ax.legacy.BringFixedToFront(); + $ax.event.initialize(); + $ax.style.initialize(); + $ax.visibility.initialize(); + $ax.repeater.initialize(); + $ax.dynamicPanelManager.initialize(); //needs to be called after visibility is initialized + $ax.adaptive.initialize(); + $ax.loadDynamicPanelsAndMasters(); + $ax.adaptive.loadFinished(); + var start = (new Date()).getTime(); + $ax.repeater.initRefresh(); + var end = (new Date()).getTime(); + console.log('loadTime: ' + (end - start) / 1000); + $ax.style.prefetch(); + + $(window).resize(); + + //var readyEnd = (new Date()).getTime(); + //window.alert('elapsed ' + (readyEnd - readyStart)); + }; +}); + +/* extend canvas */ +var gv_hasCanvas = false; +(function() { + var _canvas = document.createElement('canvas'), proto, abbrev; + if(gv_hasCanvas = !!(_canvas.getContext && _canvas.getContext('2d')) && typeof (CanvasGradient) !== 'undefined') { + function chain(func) { + return function() { + return func.apply(this, arguments) || this; + }; + } + + with(proto = CanvasRenderingContext2D.prototype) for(var func in abbrev = { + a: arc, + b: beginPath, + n: clearRect, + c: clip, + p: closePath, + g: createLinearGradient, + f: fill, + j: fillRect, + z: function(s) { this.fillStyle = s; }, + l: lineTo, + w: function(w) { this.lineWidth = w; }, + m: moveTo, + q: quadraticCurveTo, + h: rect, + r: restore, + o: rotate, + s: save, + x: scale, + y: function(s) { this.strokeStyle = s; }, + u: setTransform, + k: stroke, + i: strokeRect, + t: translate + }) proto[func] = chain(abbrev[func]); + CanvasGradient.prototype.a = chain(CanvasGradient.prototype.addColorStop); + } +})(); diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/legacy.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/legacy.js" new file mode 100644 index 0000000..2f51310 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/legacy.js" @@ -0,0 +1,208 @@ +//stored on each browser event +var windowEvent; + +$axure.internal(function($ax) { + var _legacy = {}; + $ax.legacy = _legacy; + + + // ************************** GLOBAL VARS *********************************// + + // ************************************************************************// + //Check if IE + //var bIE = false; + //if ((index = navigator.userAgent.indexOf("MSIE")) >= 0) { + // bIE = true; + //} + + var Forms = window.document.getElementsByTagName("FORM"); + for(var i = 0; i < Forms.length; i++) { + var Form = Forms[i]; + Form.onclick = $ax.legacy.SuppressBubble; + } + + $ax.legacy.SuppressBubble = function(event) { + if(IE_10_AND_BELOW) { + window.event.cancelBubble = true; + window.event.returnValue = false; + } else { + if(event) { + event.stopPropagation(); + } + } + }; + + // function InsertAfterBegin(dom, html) { + // if(!IE) { + // var phtml; + // var range = dom.ownerDocument.createRange(); + // range.selectNodeContents(dom); + // range.collapse(true); + // phtml = range.createContextualFragment(html); + // dom.insertBefore(phtml, dom.firstChild); + // } else { + // dom.insertAdjacentHTML("afterBegin", html); + // } + // } + + // function InsertBeforeEnd(dom, html) { + // if(!IE) { + // var phtml; + // var range = dom.ownerDocument.createRange(); + // range.selectNodeContents(dom); + // range.collapse(dom); + // phtml = range.createContextualFragment(html); + // dom.appendChild(phtml); + // } else { + // dom.insertAdjacentHTML("beforeEnd", html); + // } + // } + + //Get the id of the Workflow Dialog belonging to element with id = id + + // function Workflow(id) { + // return id + 'WF'; + // } + + $ax.legacy.BringToFront = function(id, skipFixed) { + _bringToFrontHelper(id); + if(!skipFixed) $ax.legacy.BringFixedToFront(); + }; + + var _bringToFrontHelper = function(id) { + var target = window.document.getElementById(id); + if(target == null) return; + $ax.globals.MaxZIndex = $ax.globals.MaxZIndex + 1; + target.style.zIndex = $ax.globals.MaxZIndex; + }; + + $ax.legacy.BringFixedToFront = function() { + $ax(function(diagramObject) { return diagramObject.fixedKeepInFront; }).each(function(diagramObject, scriptId) { + _bringToFrontHelper(scriptId); + }); + }; + + $ax.legacy.SendToBack = function(id) { + var target = window.document.getElementById(id); + if(target == null) return; + target.style.zIndex = $ax.globals.MinZIndex = $ax.globals.MinZIndex - 1; + }; + + $ax.legacy.RefreshScreen = function() { + var oldColor = window.document.body.style.backgroundColor; + var setColor = (oldColor == "rgb(0,0,0)") ? "#FFFFFF" : "#000000"; + window.document.body.style.backgroundColor = setColor; + window.document.body.style.backgroundColor = oldColor; + }; + + $ax.legacy.getAbsoluteLeft = function(currentNode, elementId) { + var oldDisplay = currentNode.css('display'); + var displaySet = false; + if(oldDisplay == 'none') { + currentNode.css('display', ''); + displaySet = true; + } + var left = currentNode.offset().left; + + // Special Layer code + if($ax.getTypeFromElementId(elementId) == 'layer') { + var first = true; + var children = currentNode.children(); + for(var i = 0; i < children.length; i++) { + var child = $(children[i]); + var subDisplaySet = false; + if(child.css('display') == 'none') { + child.css('display', ''); + subDisplaySet = true; + } + if(first) left = child.offset().left; + else left = Math.min(child.offset().left, left); + first = false; + + if(subDisplaySet) child.css('display', 'none'); + } + } + + if (displaySet) currentNode.css('display', oldDisplay); + + return $axure.fn.bodyToWorld(left, true); + }; + + $ax.legacy.getAbsoluteTop = function(currentNode, elementId) { + var oldDisplay = currentNode.css('display'); + var displaySet = false; + if(oldDisplay == 'none') { + currentNode.css('display', ''); + displaySet = true; + } + var top = currentNode.offset().top; + + // Special Layer code + if ($ax.getTypeFromElementId(elementId) == 'layer') { + var first = true; + var children = currentNode.children(); + for (var i = 0; i < children.length; i++) { + var child = $(children[i]); + var subDisplaySet = false; + if (child.css('display') == 'none') { + child.css('display', ''); + subDisplaySet = true; + } + if (first) top = child.offset().top; + else top = Math.min(child.offset().top, top); + first = false; + + if (subDisplaySet) child.css('display', 'none'); + } + } + + if(displaySet) currentNode.css('display', oldDisplay); + return top; + }; + + // ****************** Annotation and Link Functions ****************** // + + $ax.legacy.GetAnnotationHtml = function(annJson) { + var retVal = ""; + for(var noteName in annJson) { + if(noteName != "label" && noteName != "id") { + retVal += "
    " + noteName + "
    "; + retVal += "
    " + linkify(annJson[noteName]) + "
    "; + } + } + return retVal; + + function linkify(text) { + var urlRegex = /(\b(((https?|ftp|file):\/\/)|(www\.))[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig; + return text.replace(urlRegex, function (url, b, c) { + var url2 = (c == 'www.') ? 'http://' + url : url; + return '' + url + ''; + }); + } + }; + + + $ax.legacy.GetScrollable = function(target) { + var $target = $(target); + var last = $target; + // Start past inital target. Can't scroll to target in itself, must be some ancestor. + var current = last.parent(); + + while(!current.is('body') && !current.is('html')) { + var elementId = current.attr('id'); + var diagramObject = elementId && $ax.getObjectFromElementId(elementId); + if (diagramObject && $ax.public.fn.IsDynamicPanel(diagramObject.type) && diagramObject.scrollbars != 'none') { + //returns the panel diagram div which handles scrolling + return window.document.getElementById(last.attr('id')); + } + last = current; + current = current.parent(); + } + // Need to do this because of ie + if(IE_10_AND_BELOW) return window.document.documentElement; + else return window.document.body; + }; + + + +}); \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/math.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/math.js" new file mode 100644 index 0000000..049e99b --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/math.js" @@ -0,0 +1,364 @@ +锘$axure.internal(function($ax) { + $ax.public.fn.matrixMultiply = function(matrix, vector) { + if(!matrix.tx) matrix.tx = 0; + if(!matrix.ty) matrix.ty = 0; + var outX = matrix.m11 * vector.x + matrix.m12 * vector.y + matrix.tx; + var outY = matrix.m21 * vector.x + matrix.m22 * vector.y + matrix.ty; + return { x: outX, y: outY }; + } + + $ax.public.fn.matrixInverse = function(matrix) { + if(!matrix.tx) matrix.tx = 0; + if(!matrix.ty) matrix.ty = 0; + + var determinant = matrix.m11*matrix.m22 - matrix.m12*matrix.m21; + //var threshold = (M11 * M11 + M22 *M22 + M12 *M12+ M21 *M21) / 100000; + //if(determinant.DeltaEquals(0, threshold) && determinant < 0.01) { + // return Invalid; + //} + return { + m11 : matrix.m22/determinant, + m12 : -matrix.m12/determinant, + tx : (matrix.ty*matrix.m12 - matrix.tx*matrix.m22)/determinant, + m21: -matrix.m21 / determinant, + m22: matrix.m11 / determinant, + ty: (matrix.tx * matrix.m21 - matrix.ty * matrix.m11) / determinant + }; + } + + + $ax.public.fn.matrixMultiplyMatrix = function (matrix1, matrix2) { + if (!matrix1.tx) matrix1.tx = 0; + if (!matrix1.ty) matrix1.ty = 0; + if (!matrix2.tx) matrix2.tx = 0; + if (!matrix2.ty) matrix2.ty = 0; + + return { + m11: matrix1.m12*matrix2.m21 + matrix1.m11*matrix2.m11, + m12: matrix1.m12*matrix2.m22 + matrix1.m11*matrix2.m12, + tx: matrix1.m12 * matrix2.ty + matrix1.m11 * matrix2.tx + matrix1.tx, + m21: matrix1.m22 * matrix2.m21 + matrix1.m21 * matrix2.m11, + m22: matrix1.m22 * matrix2.m22 + matrix1.m21 * matrix2.m12, + ty: matrix1.m22 * matrix2.ty + matrix1.m21 * matrix2.tx + matrix1.ty, + }; + } + + + $ax.public.fn.transformFromElement = function (element) { + var st = window.getComputedStyle(element, null); + + var tr = st.getPropertyValue("-webkit-transform") || + st.getPropertyValue("-moz-transform") || + st.getPropertyValue("-ms-transform") || + st.getPropertyValue("-o-transform") || + st.getPropertyValue("transform"); + + if (tr.indexOf('none') < 0) { + var matrix = tr.split('(')[1]; + matrix = matrix.split(')')[0]; + matrix = matrix.split(','); + for (var l = 0; l < matrix.length; l++) { + matrix[l] = Number(matrix[l]); + } + + } else { matrix = [1.0, 0.0, 0.0, 1.0, 0.0, 0.0]; } + + return matrix; + // matrix[0] = cosine, matrix[1] = sine. + // Assuming the element is still orthogonal. + } + + $ax.public.fn.vectorMinus = function(vector1, vector2) { return { x: vector1.x - vector2.x, y: vector1.y - vector2.y }; } + + $ax.public.fn.vectorPlus = function (vector1, vector2) { return { x: vector1.x + vector2.x, y: vector1.y + vector2.y }; } + + $ax.public.fn.vectorMidpoint = function (vector1, vector2) { return { x: (vector1.x + vector2.x) / 2.0, y: (vector1.y + vector2.y) / 2.0 }; } + + $ax.public.fn.fourCornersToBasis = function (fourCorners) { + return { + widthVector: $ax.public.fn.vectorMinus(fourCorners.widgetTopRight, fourCorners.widgetTopLeft), + heightVector: $ax.public.fn.vectorMinus(fourCorners.widgetBottomLeft, fourCorners.widgetTopLeft) + }; + } + + $ax.public.fn.matrixString = function(m11, m21, m12, m22, tx, ty) { + return "Matrix(" + m11 + "," + m21 + "," + m12 + "," + m22 + ", " + tx + ", " + ty + ")"; + } + + $ax.public.fn.getWidgetBoundingRect = function (widgetId) { + var emptyRect = { left: 0, top: 0, centerPoint: { x: 0, y: 0 }, width: 0, height: 0 }; + var element = document.getElementById(widgetId); + if (!element) return emptyRect; + + var object = $obj(widgetId); + if (object && object.type && $ax.public.fn.IsLayer(object.type)) { + var layerChildren = _getLayerChildrenDeep(widgetId); + if (!layerChildren) return emptyRect; + else return _getBoundingRectForMultipleWidgets(layerChildren); + } + return _getBoundingRectForSingleWidget(widgetId); + }; + + var _getLayerChildrenDeep = $ax.public.fn.getLayerChildrenDeep = function (layerId, includeLayers, includeHidden) { + var deep = []; + var children = $ax('#' + layerId).getChildren()[0].children; + for (var index = 0; index < children.length; index++) { + var childId = children[index]; + if(!includeHidden && !$ax.visibility.IsIdVisible(childId)) continue; + if ($ax.public.fn.IsLayer($obj(childId).type)) { + if (includeLayers) deep.push(childId); + var recursiveChildren = _getLayerChildrenDeep(childId, includeLayers, includeHidden); + for (var j = 0; j < recursiveChildren.length; j++) deep.push(recursiveChildren[j]); + } else deep.push(childId); + } + return deep; + }; + + var _getBoundingRectForMultipleWidgets = function (widgetsIdArray, relativeToPage) { + if (!widgetsIdArray || widgetsIdArray.constructor !== Array) return undefined; + if (widgetsIdArray.length == 0) return { left: 0, top: 0, centerPoint: { x: 0, y: 0 }, width: 0, height: 0 }; + var widgetRect = _getBoundingRectForSingleWidget(widgetsIdArray[0], relativeToPage, true); + var boundingRect = { left: widgetRect.left, right: widgetRect.right, top: widgetRect.top, bottom: widgetRect.bottom }; + + for (var index = 1; index < widgetsIdArray.length; index++) { + widgetRect = _getBoundingRectForSingleWidget(widgetsIdArray[index], relativeToPage); + boundingRect.left = Math.min(boundingRect.left, widgetRect.left); + boundingRect.top = Math.min(boundingRect.top, widgetRect.top); + boundingRect.right = Math.max(boundingRect.right, widgetRect.right); + boundingRect.bottom = Math.max(boundingRect.bottom, widgetRect.bottom); + } + + boundingRect.centerPoint = { x: (boundingRect.right + boundingRect.left) / 2.0, y: (boundingRect.bottom + boundingRect.top) / 2.0 }; + boundingRect.width = boundingRect.right - boundingRect.left; + boundingRect.height = boundingRect.bottom - boundingRect.top; + return boundingRect; + }; + + var _getBoundingRectForSingleWidget = function (widgetId, relativeToPage, justSides) { + var element = document.getElementById(widgetId); + var boundingRect, tempBoundingRect, position; + var displayChanged = _displayHackStart(element); + + if (_isCompoundVectorHtml(element)) { + //tempBoundingRect = _getCompoundImageBoundingClientSize(widgetId); + //position = { left: tempBoundingRect.left, top: tempBoundingRect.top }; + position = $(element).position(); + tempBoundingRect = {}; + tempBoundingRect.left = position.left; //= _getCompoundImageBoundingClientSize(widgetId); + tempBoundingRect.top = position.top; + tempBoundingRect.width = Number(element.getAttribute('WidgetWidth')); + tempBoundingRect.height = Number(element.getAttribute('WidgetHeight')); + } else { + tempBoundingRect = element.getBoundingClientRect(); + var jElement = $(element); + position = jElement.position(); + if(jElement.css('position') == 'fixed') { + position.left += Number(jElement.css('margin-left').replace("px", "")); + position.top += Number(jElement.css('margin-top').replace("px", "")); + } + } + + var layers = $ax('#' + widgetId).getParents(true, ['layer'])[0]; + var flip = ''; + var mirrorWidth = 0; + var mirrorHeight = 0; + for (var i = 0; i < layers.length; i++) { + + //should always be 0,0 + var layerPos = $jobj(layers[i]).position(); + position.left += layerPos.left; + position.top += layerPos.top; + + var outer = $ax.visibility.applyWidgetContainer(layers[i], true, true); + if (outer.length) { + var outerPos = outer.position(); + position.left += outerPos.left; + position.top += outerPos.top; + } + + //when a group is flipped we find the unflipped position + var inner = $jobj(layers[i] + '_container_inner'); + var taggedFlip = inner.data('flip'); + if (inner.length && taggedFlip) { + //only account for flip if transform is applied + var matrix = taggedFlip && (inner.css("-webkit-transform") || inner.css("-moz-transform") || + inner.css("-ms-transform") || inner.css("-o-transform") || inner.css("transform")); + if (matrix !== 'none') { + flip = taggedFlip; + mirrorWidth = $ax.getNumFromPx(inner.css('width')); + mirrorHeight = $ax.getNumFromPx(inner.css('height')); + } + } + } + //Now account for flip + if (flip == 'x') position.top = mirrorHeight - position.top - element.getBoundingClientRect().height; + else if (flip == 'y') position.left = mirrorWidth - position.left - element.getBoundingClientRect().width; + + boundingRect = { + left: position.left, + right: position.left + tempBoundingRect.width, + top: position.top, + bottom: position.top + tempBoundingRect.height + }; + + _displayHackEnd(displayChanged); + if (justSides) return boundingRect; + + boundingRect.width = boundingRect.right - boundingRect.left; + boundingRect.height = boundingRect.bottom - boundingRect.top; + + boundingRect.centerPoint = { + x: boundingRect.width / 2 + boundingRect.left, + y: boundingRect.height / 2 + boundingRect.top + }; + + return boundingRect; + }; + + var _getPointAfterRotate = $ax.public.fn.getPointAfterRotate = function (angleInDegrees, pointToRotate, centerPoint) { + var displacement = $ax.public.fn.vectorMinus(pointToRotate, centerPoint); + var rotationMatrix = $ax.public.fn.rotationMatrix(angleInDegrees); + rotationMatrix.tx = centerPoint.x; + rotationMatrix.ty = centerPoint.y; + return $ax.public.fn.matrixMultiply(rotationMatrix, displacement); + }; + + $ax.public.fn.getBoundingSizeForRotate = function(width, height, rotation) { + // point to rotate around doesn't matter since we just care about size, if location matter we need more args and location matters. + + var origin = { x: 0, y: 0 }; + + var corner1 = { x: width, y: 0 }; + var corner2 = { x: 0, y: height }; + var corner3 = { x: width, y: height }; + + corner1 = _getPointAfterRotate(rotation, corner1, origin); + corner2 = _getPointAfterRotate(rotation, corner2, origin); + corner3 = _getPointAfterRotate(rotation, corner3, origin); + + var left = Math.min(0, corner1.x, corner2.x, corner3.x); + var right = Math.max(0, corner1.x, corner2.x, corner3.x); + var top = Math.min(0, corner1.y, corner2.y, corner3.y); + var bottom = Math.max(0, corner1.y, corner2.y, corner3.y); + + return { width: right - left, height: bottom - top }; + } + + $ax.public.fn.getPositionRelativeToParent = function (elementId) { + var element = document.getElementById(elementId); + var list = _displayHackStart(element); + var position = $(element).position(); + _displayHackEnd(list); + return position; + }; + + var _displayHackStart = $ax.public.fn.displayHackStart = function (element) { + // TODO: Options: 1) stop setting display none. Big change for this late in the game. 2) Implement our own bounding. + // TODO: 3) Current method is look for any parents that are set to none, and and temporarily unblock. Don't like it, but it works. + var parent = element; + var displays = []; + while (parent) { + if (parent.style.display == 'none') { + displays.push(parent); + //use block to overwrites default hidden objects' display + parent.style.display = 'block'; + } + parent = parent.parentElement; + } + + return displays; + }; + + var _displayHackEnd = $ax.public.fn.displayHackEnd = function (displayChangedList) { + for (var i = 0; i < displayChangedList.length; i++) displayChangedList[i].style.display = 'none'; + }; + + + var _isCompoundVectorHtml = $ax.public.fn.isCompoundVectorHtml = function(hElement) { + return hElement.hasAttribute('compoundmode') && hElement.getAttribute('compoundmode') == "true"; + } + + $ax.public.fn.removeCompound = function (jobj) { if(_isCompoundVectorHtml(jobj[0])) jobj.removeClass('compound'); } + $ax.public.fn.restoreCompound = function (jobj) { if (_isCompoundVectorHtml(jobj[0])) jobj.addClass('compound'); } + + $ax.public.fn.compoundIdFromComponent = function(id) { + + var pPos = id.indexOf('p'); + var dashPos = id.indexOf('-'); + if (pPos < 1) return id; + else if (dashPos < 0) return id.substring(0, pPos); + else return id.substring(0, pPos) + id.substring(dashPos); + } + + $ax.public.fn.l2 = function (x, y) { return Math.sqrt(x * x + y * y); } + + $ax.public.fn.convertToSingleImage = function (jobj) { + if(!jobj[0]) return; + + var widgetId = jobj[0].id; + var object = $obj(widgetId); + + if ($ax.public.fn.IsLayer(object.type)) { + var recursiveChildren = _getLayerChildrenDeep(widgetId, true); + for (var j = 0; j < recursiveChildren.length; j++) + $ax.public.fn.convertToSingleImage($jobj(recursiveChildren[j])); + return; + } + + //var layer = + + if(!_isCompoundVectorHtml(jobj[0])) return; + + + $('#' + widgetId).removeClass("compound"); + $('#' + widgetId + '_img').removeClass("singleImg"); + jobj[0].setAttribute('compoundmode', 'false'); + + var components = object.compoundChildren; + delete object.generateCompound; + for (var i = 0; i < components.length; i++) { + var componentJobj = $jobj($ax.public.fn.getComponentId(widgetId, components[i])); + componentJobj.css('display', 'none'); + componentJobj.css('visibility', 'hidden'); + } + } + + + $ax.public.fn.getContainerDimensions = function(query) { + // returns undefined if no containers found. + var containerDimensions; + for (var i = 0; i < query[0].children.length; i++) { + var node = query[0].children[i]; + if (node.id.indexOf(query[0].id) >= 0 && node.id.indexOf('container') >= 0) { + containerDimensions = node.style; + } + } + return containerDimensions; + } + + + $ax.public.fn.rotationMatrix = function (angleInDegrees) { + var angleInRadians = angleInDegrees * (Math.PI / 180); + var cosTheta = Math.cos(angleInRadians); + var sinTheta = Math.sin(angleInRadians); + + return { m11: cosTheta, m12: -sinTheta, m21: sinTheta, m22: cosTheta, tx: 0.0, ty: 0.0 }; + } + + $ax.public.fn.GetFieldFromStyle = function (query, field) { + var raw = query[0].style[field]; + if (!raw) raw = query.css(field); + return Number(raw.replace('px', '')); + } + + + $ax.public.fn.setTransformHowever = function (transformString) { + return { + '-webkit-transform': transformString, + '-moz-transform': transformString, + '-ms-transform': transformString, + '-o-transform': transformString, + 'transform': transformString + }; + } +}); \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/model.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/model.js" new file mode 100644 index 0000000..587c679 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/model.js" @@ -0,0 +1,44 @@ +锘// ******* Object Model ******** // +$axure.internal(function($ax) { + var _implementations = {}; + + var _initializeObject = function(type, obj) { + $.extend(obj, _implementations[type]); + }; + $ax.initializeObject = _initializeObject; + + var _model = $ax.model = {}; + + _model.idsInRdo = function(rdoId, scriptIds) { + var rdoScriptId = $ax.repeater.getScriptIdFromElementId(rdoId); + var path = $ax.getPathFromScriptId(rdoScriptId); + var rdoRepeater = $ax.getParentRepeaterFromScriptId(rdoScriptId); + + if(!scriptIds) scriptIds = []; + $ax('*').each(function(obj, elementId) { + // Make sure in same rdo + var scriptId = $ax.repeater.getScriptIdFromElementId(elementId); + var elementPath = $ax.getPathFromScriptId(scriptId); + // This is because last part of path is for the obj itself. + elementPath.pop(); + if(elementPath.length != path.length) return; + for(var i = 0; i < path.length; i++) if(elementPath[i] != path[i]) return; + + // If object is in a panel, the panel will be hidden, so the obj doesn't have to be. + if(obj.parentDynamicPanel) return; + + var repeater = $ax.getParentRepeaterFromScriptId(scriptId); + if(repeater != rdoRepeater) return; + + if($ax.public.fn.IsReferenceDiagramObject(obj.type)) _model.idsInRdo(scriptId, scriptIds); + else if(scriptIds.indexOf(scriptId) != -1) return; + // Kind of complicated, but returning for isContained objects, hyperlinks, tabel cell, non-root tree nodes, and images in the tree. + else if (obj.isContained || obj.type == 'hyperlink' || $ax.public.fn.IsTableCell(obj.type) || + ($ax.public.fn.IsTreeNodeObject(obj.type) && !$jobj(elementId).hasClass('treeroot')) || + ($ax.public.fn.IsImageBox(obj.type) && $ax.public.fn.IsTreeNodeObject(obj.parent.type))) return; + else scriptIds.push(scriptId); + }); + return scriptIds; + }; + +}); \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/move.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/move.js" new file mode 100644 index 0000000..ca49ab4 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/move.js" @@ -0,0 +1,424 @@ +锘$axure.internal(function($ax) { + var _move = {}; + $ax.move = _move; + + var widgetMoveInfo = {}; + var _getMoveInfo = $ax.move.RegisterMoveInfo = function (id, x, y, to, options, jobj) { + var fixedInfo = jobj ? {} : $ax.dynamicPanelManager.getFixedInfo(id); + + var widget = $jobj(id); + var query = $ax('#' + id); + var isLayer = $ax.getTypeFromElementId(id) == $ax.constants.LAYER_TYPE; + var rootLayer = _move.getRootLayer(id); + + if(rootLayer) { + $ax.visibility.pushContainer(rootLayer, false); + if(isLayer) widget = $ax.visibility.applyWidgetContainer(id, true); + } + if (!jobj) jobj = widget; + + var horzProp = 'left'; + var vertProp = 'top'; + var horzX = to ? x - query.locRelativeIgnoreLayer(false) : x; + var vertY = to ? y - query.locRelativeIgnoreLayer(true) : y; + + if (fixedInfo.horizontal == 'right') { + horzProp = 'right'; + horzX = to ? $(window).width() - x - Number(jobj.css('right').replace('px', '')) - query.width() : -x; + } else if(fixedInfo.horizontal == 'center') { + horzProp = 'margin-left'; + if (to) horzX = x - $(window).width() / 2; + } + + if (fixedInfo.vertical == 'bottom') { + vertProp = 'bottom'; + vertY = to ? $(window).height() - y - Number(jobj.css('bottom').replace('px', '')) - query.height() : -y; + } else if (fixedInfo.vertical == 'middle') { + vertProp = 'margin-top'; + if (to) vertY = y - $(window).height() / 2; + } + + //todo currently this always save the info, which is not needed for compound vector children and maybe some other cases + //let's optimize it later, only register if registerid is valid.. + widgetMoveInfo[id] = { + x: horzX, + y: vertY, + options: options + }; + + return { + horzX: horzX, + vertY: vertY, + horzProp: horzProp, + vertProp: vertProp, + rootLayer: rootLayer, + jobj: jobj + }; + }; + $ax.move.GetWidgetMoveInfo = function() { + return $.extend({}, widgetMoveInfo); + }; + + _move.getRootLayer = function (id) { + var isLayer = $ax.getTypeFromElementId(id) == $ax.constants.LAYER_TYPE; + var rootLayer = isLayer ? id : ''; + + var parentIds = $ax('#' + id).getParents(true, '*')[0]; + for(var i = 0; i < parentIds.length; i++) { + var parentId = parentIds[i]; + // Keep climbing up layers until you hit a non-layer. At that point you have your root layer + if($ax.public.fn.IsLayer($ax.getTypeFromElementId(parentId))) rootLayer = parentId; + else break; + } + + return rootLayer; + }; + + $ax.move.MoveWidget = function (id, x, y, options, to, animationCompleteCallback, shouldFire, jobj, moveInfo) { + $ax.drag.LogMovedWidgetForDrag(id, options.dragInfo); + + if(!moveInfo) moveInfo = _getMoveInfo(id, x, y, to, options, jobj); + + jobj = moveInfo.jobj; + + _moveElement(id, options, animationCompleteCallback, shouldFire, jobj, moveInfo); + + $ax.event.raiseSyntheticEvent(id, "onMove"); + var object = $obj(id); + if(object && $ax.public.fn.IsLayer(object.type)) { + var childrenIds = $ax.public.fn.getLayerChildrenDeep(id, true); + for(var i = 0; i < childrenIds.length; i++) $ax.event.raiseSyntheticEvent(childrenIds[i], 'onMove'); + } + }; + + var _moveElement = function (id, options, animationCompleteCallback, shouldFire, jobj, moveInfo){ + var cssStyles = {}; + + if(!$ax.dynamicPanelManager.isPercentWidthPanel($obj(id))) cssStyles[moveInfo.horzProp] = '+=' + moveInfo.horzX; + cssStyles[moveInfo.vertProp] = '+=' + moveInfo.vertY; + + // I don't think root layer is necessary anymore after changes to layer container structure. + // Wait to try removing it until more stable. + var rootLayer = moveInfo.rootLayer; + + var query = $addAll(jobj, id); + if(options.easing == 'none') { + query.animate(cssStyles, { duration: 0, queue: false }); + + if(animationCompleteCallback) animationCompleteCallback(); + if(rootLayer) $ax.visibility.popContainer(rootLayer, false); + //if this widget is inside a layer, we should just remove the layer from the queue + if(shouldFire) $ax.action.fireAnimationFromQueue(id, $ax.action.queueTypes.move); + } else { + var completeCount = query.length; + query.animate(cssStyles, { + duration: options.duration, easing: options.easing, queue: false, complete: function () { + if (animationCompleteCallback) animationCompleteCallback(); + completeCount--; + if(completeCount == 0 && rootLayer) $ax.visibility.popContainer(rootLayer, false); + if(shouldFire) $ax.action.fireAnimationFromQueue(id, $ax.action.queueTypes.move); + }}); + } + + // //moveinfo is used for moving 'with this' + // var moveInfo = new Object(); + // moveInfo.x = horzX; + // moveInfo.y = vertY; + // moveInfo.options = options; + // widgetMoveInfo[id] = moveInfo; + + + }; + + _move.nopMove = function(id, options) { + var moveInfo = new Object(); + moveInfo.x = 0; + moveInfo.y = 0; + moveInfo.options = {}; + moveInfo.options.easing = 'none'; + moveInfo.options.duration = 0; + widgetMoveInfo[id] = moveInfo; + + // Layer move using container now. + var obj = $obj(id); + if($ax.public.fn.IsLayer(obj.type)) if(options.onComplete) options.onComplete(); + + $ax.event.raiseSyntheticEvent(id, "onMove"); + }; + + //rotationDegree: total degree to rotate + //centerPoint: the center of the circular path + + + var _noRotateOnlyMove = function (id, moveDelta, rotatableMove, fireAnimationQueue, easing, duration, completionCallback) { + moveDelta.x += rotatableMove.x; + moveDelta.y += rotatableMove.y; + if (moveDelta.x == 0 && moveDelta.y == 0) { + if(fireAnimationQueue) { + $ax.action.fireAnimationFromQueue(id, $ax.action.queueTypes.rotate); + $ax.action.fireAnimationFromQueue(id, $ax.action.queueTypes.move); + } + } else { + $jobj(id).animate({ top: '+=' + moveDelta.y, left: '+=' + moveDelta.x }, { + duration: duration, + easing: easing, + queue: false, + complete: function () { + if(fireAnimationQueue) { + $ax.action.fireAnimationFromQueue(id, $ax.action.queueTypes.move); + $ax.action.fireAnimationFromQueue(id, $ax.action.queueTypes.rotate); + } + if (completionCallback) completionCallback(); + } + }); + } + } + + + _move.circularMove = function (id, degreeDelta, centerPoint, moveDelta, rotatableMove, resizeOffset, options, fireAnimationQueue, completionCallback) { + var elem = $jobj(id); + var moveInfo = $ax.move.RegisterMoveInfo(id, moveDelta.x, moveDelta.y, false, options); + // If not rotating, still need to check moveDelta and may need to handle that. + if (degreeDelta === 0) { + _noRotateOnlyMove(id, moveDelta, rotatableMove, fireAnimationQueue, options.easing, options.duration, completionCallback); + return; + } + + var stepFunc = function(newDegree) { + var deg = newDegree - rotation.degree; + var widgetCenter = $ax.public.fn.getWidgetBoundingRect(id).centerPoint; + //console.log("widget center of " + id + " x " + widgetCenter.x + " y " + widgetCenter.y); + var widgetNewCenter = $axure.fn.getPointAfterRotate(deg, widgetCenter, centerPoint); + + // Start by getting the move not related to rotation, and make sure to update center point to move with it. + var ratio = deg / degreeDelta; + + var xdelta = (moveDelta.x + rotatableMove.x) * ratio; + var ydelta = (moveDelta.y + rotatableMove.y) * ratio; + if(resizeOffset) { + var resizeShift = {}; + resizeShift.x = resizeOffset.x * ratio; + resizeShift.y = resizeOffset.y * ratio; + $axure.fn.getPointAfterRotate(rotation.degree, resizeShift, { x: 0, y: 0 }); + xdelta += resizeShift.x; + ydelta += resizeShift.y; + } + centerPoint.x += xdelta; + centerPoint.y += ydelta; + + // Now for the move that is rotatable, it must be rotated + rotatableMove = $axure.fn.getPointAfterRotate(deg, rotatableMove, { x: 0, y: 0 }); + + // Now add in circular move to the mix. + xdelta += widgetNewCenter.x - widgetCenter.x; + ydelta += widgetNewCenter.y - widgetCenter.y; + + if(xdelta < 0) elem.css('left', '-=' + -xdelta); + else if(xdelta > 0) elem.css('left', '+=' + xdelta); + + if(ydelta < 0) elem.css('top', '-=' + -ydelta); + else if(ydelta > 0) elem.css('top', '+=' + ydelta); + }; + + var onComplete = function() { + if(fireAnimationQueue) $ax.action.fireAnimationFromQueue(id, $ax.action.queueTypes.move); + if(completionCallback) completionCallback(); + if(moveInfo.rootLayer) $ax.visibility.popContainer(moveInfo.rootLayer, false); + var isPercentWidthPanel = $ax.dynamicPanelManager.isPercentWidthPanel($obj(id)); + if(isPercentWidthPanel) { + $ax.dynamicPanelManager.updatePanelPercentWidth(id); + $ax.dynamicPanelManager.updatePanelContentPercentWidth(id); + } + if(elem.css('position') == 'fixed') { + if(!isPercentWidthPanel) elem.css('left', ''); + elem.css('top', ''); + } + }; + + var rotation = { degree: 0 }; + + if(!options.easing || options.easing === 'none' || options.duration <= 0) { + stepFunc(degreeDelta); + onComplete(); + } else { + $(rotation).animate({ degree: degreeDelta }, { + duration: options.duration, + easing: options.easing, + queue: false, + step: stepFunc, + complete: onComplete + }); + } + }; + + //rotate a widget by degree, center is 50% 50% + _move.rotate = function (id, degree, easing, duration, to, shouldFire, completionCallback) { + var currentDegree = _getRotationDegree(id); + if(to) degree = degree - currentDegree; + + if(degree === 0) { + if (shouldFire) $ax.action.fireAnimationFromQueue(id, $ax.action.queueTypes.rotate); + return; + } + + var query = $jobj(id).add($jobj(id + '_ann')).add($jobj(id + '_ref')); + + var stepFunc = function(now) { + var degreeDelta = now - rotation.degree; + var newDegree = currentDegree + degreeDelta; + query.css($ax.public.fn.setTransformHowever("rotate(" + newDegree + "deg)")); + currentDegree = newDegree; + }; + + var onComplete = function() { + if(shouldFire) { + $ax.action.fireAnimationFromQueue($ax.public.fn.compoundIdFromComponent(id), $ax.action.queueTypes.rotate); + } + if(completionCallback) completionCallback(); + }; + + var rotation = { degree: 0 }; + + + //if no animation, setting duration to 1, to prevent RangeError in rotation loops without animation + if(!easing || easing === 'none' || duration <= 0) { + stepFunc(degree); + onComplete(); + } else { + $(rotation).animate({ degree: degree }, { + duration: duration, + easing: easing, + queue: false, + step: stepFunc, + complete: onComplete + + }); + } + }; + + _move.compoundRotateAround = function (id, degreeDelta, centerPoint, moveDelta, rotatableMove, resizeOffset, easing, duration, fireAnimationQueue, completionCallback) { + if (degreeDelta === 0) { + _noRotateOnlyMove($ax.public.fn.compoundIdFromComponent(id), moveDelta, rotatableMove, fireAnimationQueue, easing, duration, completionCallback, $ax.action.queueTypes.rotate); + return; + } + var elem = $jobj(id); + var rotation = { degree: 0 }; + + if (!easing || easing === 'none' || duration <= 0) { + duration = 1; + easing = 'linear'; //it doesn't matter anymore here... + } + + var originalWidth = Number(elem.css('width').replace('px', '')); + var originalHeight = Number(elem.css('height').replace('px', '')); + var originalLeft = Number(elem.css('left').replace('px', '')); + var originalTop = Number(elem.css('top').replace('px', '')); + + $(rotation).animate({ degree: degreeDelta }, { + duration: duration, + easing: easing, + queue: false, + step: function (newDegree) { + var transform = $ax.public.fn.transformFromElement(elem[0]); + var originalCenter = { x: originalLeft + 0.5 * originalWidth, y: originalTop + 0.5 * originalHeight}; + var componentCenter = { x: originalCenter.x + transform[4], y: originalCenter.y + transform[5] }; + var deg = newDegree - rotation.degree; + var ratio = deg / degreeDelta; + var xdelta = (moveDelta.x + rotatableMove.x) * ratio; + var ydelta = (moveDelta.y + rotatableMove.y) * ratio; + if (resizeOffset) { + var resizeShift = {}; + resizeShift.x = resizeOffset.x * ratio; + resizeShift.y = resizeOffset.y * ratio; + $axure.fn.getPointAfterRotate(rotation.degree, resizeShift, { x: 0, y: 0 }); + xdelta += resizeShift.x; + ydelta += resizeShift.y; + } + + var rotationMatrix = $ax.public.fn.rotationMatrix(deg); + var compositionTransform = $ax.public.fn.matrixMultiplyMatrix(rotationMatrix, + { m11: transform[0], m21: transform[1], m12: transform[2], m22: transform[3] }); + + //console.log("widget center of " + id + " x " + widgetCenter.x + " y " + widgetCenter.y); + var widgetNewCenter = $axure.fn.getPointAfterRotate(deg, componentCenter, centerPoint); + var newMatrix = $ax.public.fn.matrixString(compositionTransform.m11, compositionTransform.m21, compositionTransform.m12, compositionTransform.m22, + widgetNewCenter.x - originalCenter.x + xdelta, widgetNewCenter.y - originalCenter.y + ydelta); + elem.css($ax.public.fn.setTransformHowever(newMatrix)); + }, + complete: function () { + if (fireAnimationQueue) { + $ax.action.fireAnimationFromQueue(elem.parent()[0].id, $ax.action.queueTypes.rotate); + } + + if(completionCallback) completionCallback(); + } + }); + }; + + var _getRotationDegree = _move.getRotationDegree = function(elementId) { + if($ax.public.fn.IsLayer($obj(elementId).type)) { + return $jobj(elementId).data('layerDegree'); + } + + var element = document.getElementById(elementId); + if(element == null) return NaN; + //var transformString = element.style.transform || + // element.style.OTransform || + // element.style.msTransform || + // element.style.MozTransform || + // element.style.webkitTransform; + + var transformString = element.style['transform'] || + element.style['-o-transform'] || + element.style['-ms-transform'] || + element.style['-moz-transform'] || + element.style['-webkit-transform']; + + if(transformString) { + var rotateRegex = /rotate\(([-?0-9]+)deg\)/; + var degreeMatch = rotateRegex.exec(transformString); + if(degreeMatch && degreeMatch[1]) return parseFloat(degreeMatch[1]); + } + + if(window.getComputedStyle) { + var st = window.getComputedStyle(element, null); + } else { + console.log('rotation is not supported for ie 8 and below in this version of axure rp'); + return 0; + } + + var tr = st.getPropertyValue("transform") || + st.getPropertyValue("-o-transform") || + st.getPropertyValue("-ms-transform") || + st.getPropertyValue("-moz-transform") || + st.getPropertyValue("-webkit-transform"); + + + if(!tr || tr === 'none') return 0; + var values = tr.split('(')[1]; + values = values.split(')')[0], + values = values.split(','); + + var a = values[0]; + var b = values[1]; + + var radians = Math.atan2(b, a); + if(radians < 0) { + radians += (2 * Math.PI); + } + + var angle = Math.round(radians * (180 / Math.PI)); + + return angle; + }; + +// var generateFilter = function(deg) { +// var rot, cos, sin, matrix; +// +// rot=deg>=0 ? Math.PI*deg/180 : Math.PI*(360+deg)/180; +// cos=Math.cos(rot); +// sin=Math.sin(rot); +// matrix='M11='+cos+',M12='+(-sin)+',M21='+sin+',M22='+cos+',SizingMethod="auto expand"'; +// return 'progid:DXImageTransform.Microsoft.Matrix('+matrix+')'; +// } +}); \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/recording.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/recording.js" new file mode 100644 index 0000000..f5fb140 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/recording.js" @@ -0,0 +1,94 @@ +锘// ******* Recording MANAGER ******** // + +$axure.internal(function($ax) { + var _recording = $ax.recording = {}; + + $ax.recording.recordEvent = function(element, eventInfo, axEventObject, timeStamp) { + + var elementHtml = $jobj(element); + var className = elementHtml.attr('class'); + var inputValue; + + if(className === 'ax_checkbox') { + inputValue = elementHtml.find('#' + element + '_input')[0].checked; + eventInfo.inputType = className; + eventInfo.inputValue = inputValue; + } + + if(className === 'ax_text_field') { + inputValue = elementHtml.find('#' + element + '_input').val(); + eventInfo.inputType = className; + eventInfo.inputValue = inputValue; + } + + + var scriptId = $ax.repeater.getScriptIdFromElementId(element); + var diagramObjectPath = $ax.getPathFromScriptId(scriptId); + var form = { + recordingId: $ax.recording.recordingId, + elementID: element, + eventType: axEventObject.description, + 'eventInfo': eventInfo, + // eventObject: axEventObject, + 'timeStamp': timeStamp, + 'path': diagramObjectPath +// , +// 'trigger': function() { +// $ax.event.handleEvent(element, eventInfo, axEventObject); +// return false; +// } + }; + + $ax.messageCenter.postMessage('logEvent', form); + }; + + + $ax.recording.maybeRecordEvent = function(element, eventInfo, axEventObject, timeStamp) { + }; + + + $ax.recording.recordingId = ""; + $ax.recording.recordingName = ""; + + $ax.messageCenter.addMessageListener(function(message, data) { + if(message === 'startRecording') { + $ax.recording.maybeRecordEvent = $ax.recording.recordEvent; + $ax.recording.recordingId = data.recordingId; + $ax.recording.recordingName = data.recordingName; + } else if(message === 'stopRecording') { + $ax.recording.maybeRecordEvent = function(element, eventInfo, axEventObject, timeStamp) { + }; + + } + else if(message === 'playEvent') { + + var eventType = makeFirstLetterLower(data.eventType); + var inputElement; + + var dObj = data.element === '' ? $ax.pageData.page : $ax.getObjectFromElementId(data.element); + if(!data.axEventObject) { + data.axEventObject = dObj && dObj.interactionMap && dObj.interactionMap[eventType]; + } + + data.eventInfo.thiswidget = $ax.getWidgetInfo(data.element); + data.eventInfo.item = $ax.getItemInfo(data.element); + + if(data.eventInfo.inputType && data.eventInfo.inputType === 'ax_checkbox') { + inputElement = $jobj(data.element + '_input'); + inputElement[0].checked = data.eventInfo.inputValue; + } + + if(data.eventInfo.inputType && data.eventInfo.inputType === 'ax_text_field') { + inputElement = $jobj(data.element + '_input'); + inputElement.val(data.eventInfo.inputValue); + } + + $ax.event.handleEvent(data.element, data.eventInfo, data.axEventObject, false, true); + } + }); + + var makeFirstLetterLower = function(eventName) { + return eventName.substr(0, 1).toLowerCase() + eventName.substr(1); + }; + +}); \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/repeater.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/repeater.js" new file mode 100644 index 0000000..0075e59 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/repeater.js" @@ -0,0 +1,2037 @@ +锘 +// ******* Repeater MANAGER ******** // +$axure.internal(function($ax) { + var _repeaterManager = {}; + $ax.repeater = _repeaterManager; + + //This is a mapping of current editItems + var repeaterToEditItems = {}; + //This is a mapping of current filters + var repeaterToFilters = {}; + // This is a mapping of current sorts + var repeaterToSorts = {}; + // This is a mapping of repeater page info + var repeaterToPageInfo = {}; + + //Hopefully this can be simplified, but for now I think 3 are needed. + //This is the data set that is owned by this repeater. The repeater may or may not reference this data set, and others can reference it. + var repeaterToLocalDataSet = {}; + //This is the data set referenced by the repeater. It is not a copy of the local data set, but a reference to a local data set (or eventually a global data set could be referenced). + var repeaterToCurrentDataSet = {}; + //This is a copy of the current data set, that is replaced whenever a set or refresh is done. + var repeaterToActiveDataSet = {}; + var _loadRepeaters = function() { + $ax(function(obj) { + return $ax.public.fn.IsRepeater(obj.type); + }).each(function(obj, repeaterId) { + repeaterToLocalDataSet[repeaterId] = $ax.deepCopy(obj.data); + repeaterToLocalDataSet[repeaterId].props = obj.dataProps; + repeaterToEditItems[repeaterId] = []; + + _initPageInfo(obj, repeaterId); + + _setRepeaterDataSet(repeaterId, repeaterId); + var initialItemIds = obj.repeaterPropMap.itemIds; + for (var i = 0; i < initialItemIds.length; i++) $ax.addItemIdToRepeater(initialItemIds[i], repeaterId); + $ax.visibility.initRepeater(repeaterId); + }); + }; + _repeaterManager.load = _loadRepeaters; + + var _loaded = {}; + var _initRepeaters = function() { + $ax(function(obj, repeaterId) { + return $ax.public.fn.IsRepeater(obj.type) && !_loaded[repeaterId]; + }).each(function(obj, repeaterId) { + _refreshRepeater(repeaterId, undefined, true); + // Fix selected and default if necessary + var states = obj.evaluatedStates; + for(var i = 0; i < states.length; i++) { + var state = states[i]; + + $ax.style.SetWidgetEnabled(state.id, true); // So selected will take place. If disabled, selected wouldn't happen. + $ax.style.SetWidgetSelected(state.id, state.selected); + $ax.style.SetWidgetEnabled(state.id, !state.disabled); + } + }); + }; + _repeaterManager.initRefresh = _initRepeaters; + + var repeatersHaveNewDataSet = []; + var _setRepeaterDataSet = function(repeaterId, dataSetId) { + //TODO: No idea about how global data sets will be handled... + repeaterToCurrentDataSet[repeaterId] = repeaterToLocalDataSet[dataSetId]; + repeaterToActiveDataSet[repeaterId] = getActiveDataSet(repeaterId); + repeaterToFilters[repeaterId] = []; + repeaterToSorts[repeaterId] = []; + + + // Not using this currently + // if(repeatersHaveNewDataSet.indexOf(repeaterId) == -1) repeatersHaveNewDataSet[repeatersHaveNewDataSet.length] = repeaterId; + }; + _repeaterManager.setDataSet = _setRepeaterDataSet; + + var _refreshRepeater = function(repeaterId, eventInfo, itemsPregen) { + // Don't show if you have a parent rdos thats limboed. + var rdoPath = $ax.getPathFromScriptId(repeaterId); + // Check each parent rdo through appropriate views to see if you are limboed + while (rdoPath.length > 0) { + if(!$ax.getScriptIdFromPath(rdoPath)) { + removeItems(repeaterId); + return; + } + + $ax.splice(rdoPath, rdoPath.length - 1, 1); + } + + _loaded[repeaterId] = true; + $ax.action.refreshStart(repeaterId); + $ax.style.ClearCacheForRepeater(repeaterId); + + if($ax.visibility.limboIds[repeaterId]) { + removeItems(repeaterId); + $ax.dynamicPanelManager.fitParentPanel(repeaterId); + return; + } + + // Remove delete map if there is one at this point + if(eventInfo && eventInfo.repeaterDeleteMap) delete eventInfo.repeaterDeleteMap[repeaterId]; + var path = $ax.getPathFromScriptId(repeaterId); + path.pop(); + + if(eventInfo) { + eventInfo = $ax.eventCopy(eventInfo); + } + + var obj = $ax.getObjectFromScriptId(repeaterId); + var propMap = obj.repeaterPropMap; + + //If there is no wrap, then set it to be above the number of rows + var viewId = $ax.adaptive.currentViewId || ''; + var wrap = _getAdaptiveProp(propMap, 'wrap', viewId); + var vertical = _getAdaptiveProp(propMap, 'vertical', viewId); + var offset = propMap[viewId]; + + // Right now pregen only works for default adaptive view + if(viewId) itemsPregen = false; + var orderedIds = []; + if(itemsPregen) { + var repeaterChildren = $jobj(repeaterId).children(); + // Start at 1 to skip script div child + for(var i = 1; i < repeaterChildren.length; i++) { + orderedIds.push(_getItemIdFromElementId($(repeaterChildren[i]).attr('id'))); + } + } else orderedIds = getOrderedIds(repeaterId, eventInfo); + var ids = []; + var background = _getAdaptiveProp(propMap, 'backColor', viewId); + var hasAltColor = _getAdaptiveProp(propMap, 'hasAltColor', viewId); + var altColor = hasAltColor ? _getAdaptiveProp(propMap, 'altColor', viewId) : undefined; + var useAlt = false; + + if(itemsPregen) { + var start = 0; + var end = orderedIds.length; + } else { + var bounds = _getVisibleDataBounds(repeaterToPageInfo[repeaterId], itemsPregen ? obj.data.length : orderedIds.length); + start = bounds[0]; + end = bounds[1]; + } + + var preevalMap = {}; + if(itemsPregen) { + var templateIds = [repeaterId]; + var processScriptIds = function (full, prop, id) { + if(id.indexOf('_') <= 0 && id.indexOf('p') == -1) templateIds.push('u' + id); + }; + $('#' + repeaterId + '_script').html().replace(/(id|for)="?u([0-9]+(p([0-9]){3})?(_[_a-z0-9]*)?)"?/g, processScriptIds); + for(var i = 0; i < templateIds.length; i++) { + for(var j = 0; j < orderedIds.length; j++) { + ids.push(_createElementId(templateIds[i], orderedIds[j])); + } + } + + for(var pos = start; pos < end; pos++) { + var itemId = orderedIds[pos]; + itemElementId = _createElementId(repeaterId, itemId); + var jobj = $jobj(itemElementId); + var preeval = jobj.hasClass('preeval'); + for(var i = 0; i < templateIds.length; i++) $ax.initializeObjectEvents($ax('#' + _createElementId(templateIds[i], itemId)), !preeval); + if(preeval) { + preevalMap[itemId] = true; + jobj.removeClass('preeval'); + } + } + } else { + var html = $('#' + repeaterId + '_script').html(); + // var container = $('
    '); + // container.html(html); + // container.attr('id', '' + repeaterId + '_container'); + // container.css({ position: 'absolute' }); + // container.offset({ left: -obj.x, top: -obj.y }); + + var div = $('
    '); + div.html(html); + div.find('.' + $ax.visibility.HIDDEN_CLASS).removeClass($ax.visibility.HIDDEN_CLASS); + div.find('.' + $ax.visibility.UNPLACED_CLASS).removeClass($ax.visibility.UNPLACED_CLASS); + + var paddingTop = _getAdaptiveProp(propMap, 'paddingTop', viewId); + var paddingLeft = _getAdaptiveProp(propMap, 'paddingLeft', viewId); + var paddingY = paddingTop + _getAdaptiveProp(propMap, 'paddingBottom', viewId); + var paddingX = paddingLeft + _getAdaptiveProp(propMap, 'paddingRight', viewId); + + var spacingX = _getAdaptiveProp(propMap, 'horizontalSpacing', viewId); + var xOffset = offset.width + spacingX; + var spacingY = _getAdaptiveProp(propMap, 'verticalSpacing', viewId); + var yOffset = offset.height + spacingY; + div.css({ + width: offset.width, + height: offset.height + }); + + _applyColorCss(background, div); + var altDiv = div; + if(hasAltColor) altDiv = _applyColorCss(altColor, div.clone()); + + // Hide repeater, if shown, while updating. + var shown = $ax.visibility.IsIdVisible(repeaterId); + if(shown) document.getElementById(repeaterId).style.visibility = 'hidden'; + + + var resized = $ax.getItemIdsForRepeater(repeaterId).length != (end - start) || + (repeaterSizes[repeaterId] && repeaterSizes[repeaterId].resized); + + //clean up old items as late as possible + removeItems(repeaterId); + resetItemSizes(repeaterId, offset, bounds, orderedIds, vertical, wrap); + + var i = 0; + var top = paddingTop; + var left = paddingLeft; + for(pos = start; pos < end; pos++) { + itemId = orderedIds[pos]; + + var itemElementId = _createElementId(repeaterId, itemId); + $ax.addItemIdToRepeater(itemId, repeaterId); + + ids.push(itemElementId); + var processId = function(full, prop, id) { + var elementId = _createElementId('u' + id, itemId); + //If there is a suffix (ex. _img), then don't push the id. + if (id.indexOf('_') <= 0 && id.indexOf('p') == -1) ids.push(elementId); + return prop + '="' + elementId + '"'; + }; + + var copy = (useAlt ? altDiv : div).clone(); + useAlt = !useAlt; + copy.attr('id', itemElementId); + copy.html(div.html().replace(/(id|for)="?u([0-9]+(p([0-9]){3})?(_[_a-z0-9]*)?)"?/g, processId)); + + copy.css({ + 'position': 'absolute', + 'top': top + 'px', + 'left': left + 'px', + 'width': obj.width + 'px', + 'height': obj.height + 'px' + }); + $('#' + repeaterId).append(copy); + + i++; + if(wrap != -1 && i % wrap == 0) { + if(vertical) { + top = paddingTop; + left += xOffset; + } else { + left = paddingLeft; + top += yOffset; + } + } else if (vertical) top += yOffset; + else left += xOffset; + } + + var shownCount = end - start; + var repeaterSize = { width: paddingX, height: paddingY}; + if(shownCount > 0) { + var primaryCount = wrap == -1 ? shownCount : Math.min(shownCount, wrap); + var secondaryCount = wrap == -1 ? 1 : Math.ceil(shownCount / wrap); + + var widthCount = vertical ? secondaryCount : primaryCount; + var heightCount = vertical ? primaryCount : secondaryCount; + repeaterSize.width += offset.width + (widthCount - 1) * xOffset; + repeaterSize.height += offset.height + (heightCount - 1) * yOffset; + } + var borderWidth = $ax.getNumFromPx($jobj(repeaterId).css('border-width')) || 0; + repeaterSize.width += borderWidth * 2; + repeaterSize.height += borderWidth * 2; + $jobj(repeaterId).css(repeaterSize); + + // TODO: Should be able to combine this with initialization done in pregen items. Just need to have ids and template ids be the same. + for(var i = 0; i < ids.length; i++) $ax.initializeObjectEvents($ax('#' + ids[i]), true); + } + + var query = _getItemQuery(repeaterId); + if(viewId) $ax.adaptive.applyView(viewId, query); + else $ax.visibility.resetLimboAndHiddenToDefaults(_getItemQuery(repeaterId, preevalMap)); +// else { +// var limbo = {}; +// var hidden = {}; +// query.each(function(diagramObject, elementId) { +// // sigh, javascript. we need the === here because undefined means not overriden +//// var visible = diagramObject.style.visible; +// var visible = $ax.visibility.IsIdVisible(elementId); +// if (visible === false) hidden[elementId] = true; +// //todo: **mas** check if the limboed widgets are hidden by default by the generator +// if(diagramObject.style.limbo) limbo[elementId] = true; +// }); +// $ax.visibility.addLimboAndHiddenIds(limbo, hidden, query); +// $ax.dynamicPanelManager.updatePercentPanelCache(query); +// } + $ax.annotation.InitializeAnnotations(query); + + for(var index = 0; index < ids.length; index++) { + var id = ids[index]; + var childObj = $obj(id); + var childJobj = $jobj(id); + var childItemId = _getItemIdFromElementId(id); + if (obj.repeaterPropMap.isolateRadio && $ax.public.fn.IsRadioButton(childObj.type)) { + var input = $jobj(_applySuffixToElementId(id, '_input')); + input.attr('name', _createElementId(input.attr('name'), childItemId)); + if($ax.ieColorManager) $ax.ieColorManager.applyBackground($ax('#' + id)); + } + if(obj.repeaterPropMap.isolateSelection && childJobj.attr('selectiongroup')) { + childJobj.attr('selectiongroup', _createElementId(childJobj.attr('selectiongroup'), childItemId)); + } + // Had to move this earlier, because it sets up cursor: pointer on inline links, + // but must be done before style cached when adaptive view is set. + //$ax.initializeObjectEvents($ax('#' + id)); + $ax.dynamicPanelManager.initFitPanels($ax('#' + id)); + $ax.style.initializeObjectTextAlignment($ax('#' + id)); + $ax.applyHighlight($ax('#' + id), true); + } + + //$ax.event.raiseSyntheticEvent(itemElementId, 'onLoad', true); + //$ax.loadDynamicPanelsAndMasters(obj.objects, path, itemId); + + // Now load + for(pos = start; pos < end; pos++) { + itemId = orderedIds[pos]; + itemElementId = _createElementId(repeaterId, itemId); + if(!preevalMap[orderedIds[pos]]) $ax.event.raiseSyntheticEvent(itemElementId, 'onItemLoad', true); + $ax.loadDynamicPanelsAndMasters(obj.objects, path, itemId); + } + + // Reshow repeater if it was originally shown (load is complete by now) + if(shown && !itemsPregen) document.getElementById(repeaterId).style.visibility = 'visible'; + + $ax.dynamicPanelManager.fitParentPanel(repeaterId); + + // Right now we assume only one refresh at a time. If we can manually trigger refreshes, that may possibly change. + $ax.action.refreshEnd(); + }; + _repeaterManager.refreshRepeater = _refreshRepeater; + + var _getItemQuery = function(repeaterId, preevalMap) { + var query = $ax(function (diagramObject, elementId) { + // Also need to check that this in not preeval + if(preevalMap) { + var itemId = _getItemIdFromElementId(elementId); + if(preevalMap[itemId]) return false; + } + + // All objects with the repeater as their parent, except the repeater itself. + var scriptId = _getScriptIdFromElementId(elementId); + return $ax.getParentRepeaterFromScriptId(scriptId) == repeaterId && scriptId != repeaterId; + }); + + return query; + } + + _repeaterManager.refreshAllRepeaters = function() { + $ax('*').each(function(diagramObject, elementId) { + if (!$ax.public.fn.IsRepeater(diagramObject.type)) return; + + _initPageInfo(diagramObject, elementId); + _refreshRepeater(elementId, $ax.getEventInfoFromEvent($ax.getjBrowserEvent())); + }); + }; + + _repeaterManager.refreshRepeaters = function(ids, eventInfo) { + for(var i = 0; i < ids.length; i++) _refreshRepeater(ids[i], eventInfo); + }; + + var _initPageInfo = function(obj, elementId) { + var pageInfo = {}; + var map = obj.repeaterPropMap; + + var currentViewId = $ax.adaptive.currentViewId || ''; + var itemsPerPage = _getAdaptiveProp(map, 'itemsPerPage', currentViewId); + if(itemsPerPage == -1) pageInfo.noLimit = true; + else { + pageInfo.itemsPerPage = itemsPerPage; + pageInfo.currPage = _getAdaptiveProp(map, 'currPage', currentViewId); + } + repeaterToPageInfo[elementId] = pageInfo; + }; + + _repeaterManager.initialize = function() { + $ax(function (obj) { + return $ax.public.fn.IsRepeater(obj.type); + }).each(function (obj, repeaterId) { + _initPregen(repeaterId); + }); + } + + var _initPregen = function(repeaterId) { + var obj = $ax.getObjectFromScriptId(repeaterId); + var propMap = obj.repeaterPropMap; + + //If there is no wrap, then set it to be above the number of rows + var viewId = $ax.adaptive.currentViewId || ''; + var wrap = _getAdaptiveProp(propMap, 'wrap', viewId); + var vertical = _getAdaptiveProp(propMap, 'vertical', viewId); + + var orderedIds = []; + var ids = []; + var background = _getAdaptiveProp(propMap, 'backColor', viewId); + var hasAltColor = _getAdaptiveProp(propMap, 'hasAltColor', viewId); + var altColor = hasAltColor ? _getAdaptiveProp(propMap, 'altColor', viewId) : undefined; + var useAlt = false; + + var bounds = _getVisibleDataBounds(repeaterToPageInfo[repeaterId], obj.data.length); + var start = bounds[0]; + var end = bounds[1]; + + // Starts empty + if(start == end) { + $ax.action.refreshEnd(repeaterId); + return; + } + var unprocessedBaseIds = $jobj($ax.repeater.createElementId(repeaterId, start + 1)).html().match(/(id|for)="?u([0-9]+)/g); + var baseIds = []; + if(unprocessedBaseIds) { + for(var i = 0; i < unprocessedBaseIds.length; i++) { + var val = unprocessedBaseIds[i].split('=')[1].substr(1); + if(baseIds.indexOf(val) == -1) baseIds.push(val); + } + } + + for(var itemNum = start; itemNum < end; itemNum++) { + ids.push($ax.repeater.createElementId(repeaterId, itemNum + 1)); + for(i = 0; i < baseIds.length; i++) ids.push($ax.repeater.createElementId(baseIds[i], itemNum + 1)); + var itemId = itemNum + 1; + orderedIds[itemNum] = itemId; + + var itemDiv = $jobj($ax.repeater.createElementId(repeaterId, itemNum + 1)); + _applyColorCss(useAlt ? altColor : background, itemDiv); + if(hasAltColor) useAlt = !useAlt; + } + + resetItemSizes(repeaterId, undefined, bounds, orderedIds, vertical, wrap); + }; + + var _applyColorCss = function(json, div) { + var args = json.r + ', ' + json.g + ', ' + json.b; + var background = json.a == 0 ? '' : json.a == 1 ? 'rgb(' + args + ')' : 'rgba(' + args + ', ' + json.a + ')'; + if($ax.ieColorManager && json.a != 0 && json.a != 1) { + var ieColor = $ax.ieColorManager.getColorFromArgb(json.a * 255, json.r, json.g, json.b, true); + if(ieColor) background = ieColor; + } + div.css('background-color', background); + return div; + }; + + var _getAdaptiveProp = _repeaterManager.getAdaptiveProp = function(map, prop, viewId) { + var viewChain = $ax.adaptive.getAdaptiveIdChain(viewId); + for(var i = viewChain.length - 1; i >= 0; i--) { + viewId = viewChain[i]; + var viewProps = map[viewId]; + if(viewProps.hasOwnProperty(prop)) return viewProps[prop]; + } + + var base = map['']; + if(base.hasOwnProperty(prop)) return base[prop]; + return map['default'][prop]; + }; + + _repeaterManager.getItemCount = function(repeaterId) { + var data = repeaterToActiveDataSet[repeaterId].length; + var info = repeaterToPageInfo[repeaterId]; + if(!info.noLimit) { + var start = Math.min(data, info.itemsPerPage * info.currPage); + var end = Math.min(data, start + info.itemsPerPage); + data = end - start; + } + return data; + }; + + _repeaterManager.setDisplayProps = function(obj, repeaterId, itemIndex) { + var data = repeaterToActiveDataSet[repeaterId]; + var info = repeaterToPageInfo[repeaterId]; + var start = 0; + var end = data.length; + if(!info.noLimit) { + start = Math.min(end, info.itemsPerPage * (info.currPage - 1)); + end = Math.min(end, start + info.itemsPerPage); + } + var count = end - start; + var index = -1; + for(var i = 0; i < count; i++) { + if(data[start + i].index == itemIndex) index = i + 1; + } + if(index == -1) return; + obj.index = index; + obj.isfirst = index == 1; + obj.islast = index == end - start; + obj.iseven = index % 2 == 0; + obj.isodd = index % 2 == 1; + }; + + var _getVisibleDataBounds = function(pageInfo, count) { + var retval = [0, count]; + if(!pageInfo.noLimit) { + var end = pageInfo.itemsPerPage * pageInfo.currPage; + var start = end - pageInfo.itemsPerPage; + + // If past the end, move to last page + if(start >= count) { + pageInfo.currPage = Math.floor((count - 1) / pageInfo.itemsPerPage) + 1; + if(pageInfo.currPage <= 0) pageInfo.currPage = 1; + + end = pageInfo.itemsPerPage * pageInfo.currPage; + start = end - pageInfo.itemsPerPage; + } + end = Math.min(end, count); + retval[0] = start; + retval[1] = end; + } + return retval; + }; + + _repeaterManager.getVisibleDataCount = function(repeaterId) { + var bounds = _getVisibleDataBounds(repeaterToPageInfo[repeaterId], repeaterToActiveDataSet[repeaterId].length); + return bounds[1] - bounds[0]; + }; + + _repeaterManager.getDataCount = function(repeaterId) { + return repeaterToCurrentDataSet[repeaterId].length; + }; + + var _getFilteredDataCount = _repeaterManager.getFilteredDataCount = function(repeaterId) { + return repeaterToActiveDataSet[repeaterId].length; + }; + + _repeaterManager.getPageCount = function(repeaterId) { + var info = repeaterToPageInfo[repeaterId]; + return info.noLimit ? 1 : Math.ceil(_getFilteredDataCount(repeaterId) / info.itemsPerPage); + }; + + _repeaterManager.getPageIndex = function(repeaterId) { + var info = repeaterToPageInfo[repeaterId]; + return info.noLimit ? 1 : info.currPage; + }; + + var getActiveDataSet = function(repeaterId) { + var active = $ax.deepCopy(repeaterToCurrentDataSet[repeaterId]); + // Set up 1 indexing each item. + for(var i = 0; i < active.length; i++) active[i].index = i + 1; + return active; + }; + + var getOrderedIds = function(repeaterId, eventInfo) { + var data = repeaterToActiveDataSet[repeaterId] = getActiveDataSet(repeaterId); + + // Filter first so less to sort + applyFilter(repeaterId, data, eventInfo); + + // Sort next + var sorts = repeaterToSorts[repeaterId] || []; + if(sorts.length != 0 && data.length > 1) { + // TODO: Make this generic and factor out if we want to use it elsewhere... + // Compare is a function that takes 2 arguments, and returns a number. A high number means the second should go first + // Otherwise the first stays first. + var mergesort = function(list, start, end, compare) { + var middle = Math.floor((start + end) / 2); + if(middle - start > 1) mergesort(list, start, middle, compare); + if(end - middle > 1) mergesort(list, middle, end, compare); + var index1 = start; + var index2 = middle; + var tempList = []; + while(index1 < middle && index2 < end) { + tempList[tempList.length] = list[compare(list[index1], list[index2]) > 0 ? index2++ : index1++]; + } + while(index1 < middle) tempList[tempList.length] = list[index1++]; + while(index2 < end) tempList[tempList.length] = list[index2++]; + + // transfer from temp list to the real list. + for(var i = 0; i < tempList.length; i++) list[start + i] = tempList[i]; + }; + // Compare is the tie breaking function to us if necessary. + var getComparator = function(columnName, ascending, type, compare) { + // If this needs to be sped up, break up into several smaller functions conditioned off of type + return function(row1, row2) { + // If column undefined, no way to measure this, so call it a tie. + if(row1[columnName] === undefined || row2[columnName] === undefined) return 0; + + var text1 = row1[columnName].text; + var text2 = row2[columnName].text; + + // This means we are case insensitive, so lowercase everything to kill casing + if(type == 'Text') { + text1 = text1.toLowerCase(); + text2 = text2.toLowerCase(); + } + + //If tied, go to tie breaker + if(text1 == text2) { + if(compare) return compare(row1, row2); + // Actually a tie. + return 0; + } + if(type == 'Text' || type == 'Text (Case Sensitive)') { + if(text1 < text2 ^ ascending) return 1; + else return -1; + } else if(type == 'Number') { + var num1 = Number(text1); + var num2 = Number(text2); + + if(isNaN(num1) && isNaN(num2)) return 0; + if(isNaN(num1) || isNaN(num2)) return isNaN(num1) ? 1 : -1; + if(num1 < num2 ^ ascending) return 1; + else return -1; + } else if(type == 'Date - YYYY-MM-DD' || type == 'Date - MM/DD/YYYY') { + var func = type == 'Date - YYYY-MM-DD' ? getDate1 : getDate2; + var date1 = func(text1); + var date2 = func(text2); + if(!date1.valid && !date2.valid) return 0; + if(!date1.valid || !date2.valid) return date1.valid ? -1 : 1; + var diff = date2.year - date1.year; + if(diff == 0) diff = date2.month - date1.month; + if(diff == 0) diff = date2.day - date1.day; + if(diff == 0) return 0; + return diff > 0 ^ ascending ? 1 : -1; + } + console.log('unhandled sort type'); + return 0; + }; + }; + var compareFunc = null; + for(var i = 0; i < sorts.length; i++) compareFunc = getComparator(sorts[i].columnName, sorts[i].ascending, sorts[i].sortType, compareFunc); + + mergesort(data, 0, data.length, compareFunc); + } + + var ids = []; + for(i = 0; i < data.length; i++) ids[i] = data[i].index; + + return ids; + }; + + var getDate1 = function(text) { + var date = { valid: false }; + var sections = text.split('-'); + if(sections.length == 1) sections = text.split('/'); + if(sections.length != 3) return date; + date.year = Number(sections[0]); + date.month = Number(sections[1]); + date.day = Number(sections[2]); + date.valid = !isNaN(date.year); + date.valid &= !isNaN(date.month) && date.month > 0 && date.month <= 12; + date.valid &= !isNaN(date.day) && date.day > 0 && date.day <= daysPerMonth(date.month, date.year); + return date; + }; + + var getDate2 = function(text) { + var date = { valid: false }; + var sections = text.split('-'); + if(sections.length == 1) sections = text.split('/'); + if(sections.length != 3) return date; + date.month = Number(sections[0]); + date.day = Number(sections[1]); + date.year = Number(sections[2]); + date.valid = !isNaN(date.year); + date.valid &= !isNaN(date.month) && date.month > 0 && date.month <= 12; + date.valid &= !isNaN(date.day) && date.day > 0 && date.day <= daysPerMonth(date.month, date.year); + return date; + }; + + var daysPerMonth = function(month, year) { + if(month == 9 || month == 4 || month == 6 || month == 11) return 30; + if(month != 2) return 31; + + if(year % 4 != 0) return 28; + if(year % 100 != 0) return 29; + return year % 400 == 0 ? 29 : 28; + }; + + var applyFilter = function(repeaterId, data, eventInfo) { + var dataFiltered = []; + var filters = repeaterToFilters[repeaterId] || []; + if (filters.length != 0) { + var oldTarget = eventInfo.targetElement; + var oldSrc = eventInfo.srcElement; + var oldThis = eventInfo.thiswidget; + var oldItem = eventInfo.item; + + var idToWidgetInfo = {}; + + outer: + for(var i = 1; i <= data.length; i++) { + for(var j = 0; j < filters.length; j++) { + eventInfo.targetElement = _createElementId(repeaterId, i); + eventInfo.srcElement = filters[j].thisId; + if(!idToWidgetInfo[eventInfo.srcElement]) idToWidgetInfo[eventInfo.srcElement] = $ax.getWidgetInfo(eventInfo.srcElement); + eventInfo.thiswidget = idToWidgetInfo[eventInfo.srcElement]; + eventInfo.item = $ax.getItemInfo(eventInfo.srcElement); + + if($ax.expr.evaluateExpr(filters[j].filter, eventInfo) != 'true') continue outer; + } + dataFiltered[dataFiltered.length] = data[i - 1]; + } + + for(i = 0; i < dataFiltered.length; i++) data[i] = dataFiltered[i]; + while(data.length > dataFiltered.length) data.pop(); + + eventInfo.targetElement = oldTarget; + eventInfo.srcElement = oldSrc; + eventInfo.thiswidget = oldThis; + eventInfo.item = oldItem; + } + }; + + var _addFilter = function(repeaterId, removeOtherFilters, label, filter, thisId) { + if(removeOtherFilters) _removeFilter(repeaterId); + + var filterList = repeaterToFilters[repeaterId]; + if(!filterList) repeaterToFilters[repeaterId] = filterList = []; + + var filterObj = { filter: filter, thisId: thisId }; + if(label) filterObj.label = label; + filterList[filterList.length] = filterObj; + }; + _repeaterManager.addFilter = _addFilter; + + var _removeFilter = function(repeaterId, label) { + var filterList = repeaterToFilters[repeaterId]; + // If no list, nothing to remove + if(!filterList) return; + + // If no label, remove everything + if(!label) { + repeaterToFilters[repeaterId] = []; + return; + } + + for(var i = filterList.length - 1; i >= 0; i--) { + var filterObj = filterList[i]; + if(filterObj.label && filterObj.label == label) $ax.splice(filterList, i, 1); + } + }; + _repeaterManager.removeFilter = _removeFilter; + + var _addSort = function(repeaterId, label, columnName, ascending, toggle, sortType) { + var sortList = repeaterToSorts[repeaterId]; + if(!sortList) repeaterToSorts[repeaterId] = sortList = []; + + for(var i = 0; i < sortList.length; i++) { + if(columnName == sortList[i].columnName) { + var lastSortObj = $ax.splice(sortList, i, 1)[0]; + if(toggle) ascending = !lastSortObj.ascending; + break; + } + } + + var sortObj = { columnName: columnName, ascending: ascending, sortType: sortType }; + + if(label) sortObj.label = label; + sortList[sortList.length] = sortObj; + }; + _repeaterManager.addSort = _addSort; + + var _removeSort = function(repeaterId, label) { + var sortList = repeaterToSorts[repeaterId]; + // If no list, nothing to remove + if(!sortList) return; + + // If no label, remove everything + if(!label) { + repeaterToSorts[repeaterId] = []; + return; + } + + for(var i = sortList.length - 1; i >= 0; i--) { + var sortObj = sortList[i]; + if(sortObj.label && sortObj.label == label) $ax.splice(sortList, i, 1); + } + }; + _repeaterManager.removeSort = _removeSort; + + var _setRepeaterToPage = function(repeaterId, type, value, eventInfo) { + var pageInfo = repeaterToPageInfo[repeaterId]; + // page doesn't matter if there is no limit. + if(pageInfo.noLimit) return; + + var dataSet = repeaterToActiveDataSet[repeaterId]; + if(!dataSet) dataSet = repeaterToCurrentDataSet[repeaterId]; + var lastPage = Math.max(1, Math.ceil(dataSet.length / pageInfo.itemsPerPage)); + + if(type == 'Value') { + var val = Number($ax.expr.evaluateExpr(value, eventInfo)); + // if invalid, default to 1, otherwise, clamp the value + if(isNaN(val)) val = 1; + else if(val < 1) val = 1; + else if(val > lastPage) val = lastPage; + + pageInfo.currPage = val; + } else if(type == 'Previous') { + if(pageInfo.currPage > 1) pageInfo.currPage--; + } else if(type == 'Next') { + if(pageInfo.currPage < lastPage) pageInfo.currPage++; + } else if(type == 'Last') { + pageInfo.currPage = lastPage; + } else { + console.log('Unknown type'); + } + }; + _repeaterManager.setRepeaterToPage = _setRepeaterToPage; + + var _setNoItemLimit = function(repeaterId) { + var pageInfo = repeaterToPageInfo[repeaterId]; + delete pageInfo.currPage; + delete pageInfo.itemsPerPage; + pageInfo.noLimit = true; + }; + _repeaterManager.setNoItemLimit = _setNoItemLimit; + + var _setItemLimit = function(repeaterId, value, eventInfo) { + var pageInfo = repeaterToPageInfo[repeaterId]; + + if(pageInfo.noLimit) { + pageInfo.noLimit = false; + pageInfo.currPage = 1; + } + + var oldTarget = eventInfo.targetElement; + eventInfo.targetElement = repeaterId; + var itemLimit = Number($ax.expr.evaluateExpr(value, eventInfo)); + eventInfo.targetElement = oldTarget; + if(isNaN(itemLimit)) itemLimit = 20; + else if(itemLimit < 1) itemLimit = 1; + pageInfo.itemsPerPage = itemLimit; + }; + _repeaterManager.setItemLimit = _setItemLimit; + + var removeItems = function(repeaterId) { + var elementIds = $ax.getChildElementIdsForRepeater(repeaterId); + var itemId = $ax.getItemIdsForRepeater(repeaterId); + for(var i = 0; i < itemId.length; i++) $jobj(_createElementId(repeaterId, itemId[i])).remove(); + $ax.visibility.clearLimboAndHiddenIds(elementIds); + $ax.clearItemsForRepeater(repeaterId); + }; + + var repeaterSizes = {}; + var resetItemSizes = function (repeaterId, itemSize, bounds, ids, vertical, wrap) { + var calcItem = !itemSize; + if(calcItem) itemSize = {}; + + var repeaterMap = {}; + repeaterMap.vert = vertical; + var sizesMap = {}; + var sizes = []; + var currSizes = wrap == -1 ? sizes : []; + for(var i = 0; i + bounds[0] < bounds[1]; i++) { + var itemId = ids[i + bounds[0]]; + if(calcItem) { + var itemJobj = $jobj(_createElementId(repeaterId, itemId)); + itemSize.width = $ax.getNumFromPx(itemJobj.css('width')); + itemSize.height = $ax.getNumFromPx(itemJobj.css('height')); + } + + var size = { itemId: itemId, width: itemSize.width, height: itemSize.height }; + currSizes.push(size); + sizesMap[size.itemId] = size; + if(currSizes.length == wrap) { + sizes.push(currSizes); + currSizes = []; + } + } + if (wrap != -1 && currSizes.length > 0) sizes.push(currSizes); + repeaterMap.sizes = sizes; + repeaterMap.sizesMap = sizesMap; + repeaterSizes[repeaterId] = repeaterMap; + }; + + _repeaterManager.getItemSize = function(repeaterId, itemId) { + var repeaterSize = repeaterSizes[repeaterId]; + if (!repeaterSize) return false; + return repeaterSize.sizesMap[itemId]; + } + + _repeaterManager.setItemSize = function (repeaterId, itemId, width, height) { + var repeaterSize = repeaterSizes[repeaterId]; + if(!repeaterSize) return false; + var size = repeaterSize.sizesMap[itemId]; + var deltaX = width - size.width; + var deltaY = height - size.height; + if(!deltaX && !deltaY) return false; + + repeaterSize.resized = true; + + if(deltaX) _pushItems(repeaterId, itemId, deltaX, false, true); + if(deltaY) _pushItems(repeaterId, itemId, deltaY, true, true); + + if(deltaX || deltaY) $ax.event.raiseSyntheticEvent(_createElementId(repeaterId, itemId), 'onItemResize'); + + return true; + } + + var _pushItems = _repeaterManager.pushItems = function (repeaterId, itemId, delta, vertical, suppressFire) { + if(delta == 0) return; + + // Update repeater item size + var prop = vertical ? 'height' : 'width'; + var itemObj = $jobj(_createElementId(repeaterId, itemId)); + itemObj.css(prop, $ax.getNumFromPx(itemObj.css(prop)) + delta); + + var repeaterObj = $jobj(repeaterId); + var repeaterMap = repeaterSizes[repeaterId]; + var sizes = repeaterMap.sizes; + var wrap = sizes[0].length != undefined; + var vert = repeaterMap.vert; + + // Not wrapping, has to push in primary direction + if (!wrap && vert != vertical) { + var before = 0; + var after = 0; + var limit = 0; + for(var i = 0; i < sizes.length; i++) { + var size = sizes[i]; + if(size.itemId == itemId) { + before = size[prop]; + size[prop] += delta; + after = size[prop]; + } else { + limit = limit ? Math.max(limit, size[prop]) : size[prop]; + } + } + + // Repeater delta is because an item can increase secondary direction, but if another item is already larger, then repeater size isn't effected. + var repeaterDelta = delta; + if(sizes.length != 1) { + if(after >= limit) repeaterDelta = after - Math.max(limit, before); + else if(before > limit) repeaterDelta = limit - before; + else repeaterDelta = 0; + } + + _updateRepeaterSize(prop, repeaterObj, repeaterDelta); + + if(!suppressFire) $ax.event.raiseSyntheticEvent(_createElementId(repeaterId, itemId), 'onItemResize'); + return; + } + + var index = 0; + var index2 = 0; + // Get the indices first + if(wrap) { + outer: + for(; index < sizes.length; index++) { + var innerSizes = sizes[index]; + for(index2 = 0; index2 < innerSizes.length; index2++) if(innerSizes[index2].itemId == itemId) break outer; + } + } else { + for(; index < sizes.length; index++) if(sizes[index].itemId == itemId) break; + } + // Find out who is being pushed + var itemIdsEffected = []; + if (vert == vertical) { + // To check for repeater resize, non-wrap is easy, for wrap you have to see if your new size is enough to effect the size given other col/row sizes. + repeaterDelta = delta; + if(wrap && sizes.length > 1) { + var viewId = $ax.adaptive.currentViewId || ''; + var spacing = _getAdaptiveProp($obj(repeaterId).repeaterPropMap, (vert ? 'vertical' : 'horizontal') + 'Spacing', viewId); + for(i = 0; i < sizes.length; i++) { + var rowColSize = 0; + var rowCol = sizes[i]; + for(var j = 0; j < rowCol.length; j++) { + if(j != 0) rowColSize += spacing; + rowColSize += rowCol[j][prop]; + } + + if(i == index) { + before = rowColSize; + after = before + delta; + } else { + limit = limit ? Math.max(limit, rowColSize) : rowColSize; + } + } + + if(after >= limit) repeaterDelta = after - Math.max(limit, before); + else if (before > limit) repeaterDelta = limit - before; + else repeaterDelta = 0; + } + + if (repeaterDelta) { + _updateRepeaterSize(prop, repeaterObj, repeaterDelta); + } + + // Done the hard part, calculating/updating new repeater size. Now just resize items and find what to push. + var array = wrap ? sizes[index] : sizes; + i = wrap ? index2 : index; + array[i][prop] += delta; + + for(i++; i < array.length; i++) itemIdsEffected.push(array[i].itemId); + } else { + // Secondary push is more interesting. See how much your primary row/column is already pushing, if that changes + // then effect all rows/columns after it + + // Get the biggest one in the current row/column, ignoring the one we're changing + var biggest = 0; + var currSizes = sizes[index]; + for(i = 0; i < currSizes.length; i++) { + if (i == index2) continue; + + biggest = Math.max(biggest, currSizes[i][prop]); + } + + var beforeSize = Math.max(biggest, currSizes[index2][prop]); + currSizes[index2][prop] += delta; + var afterSize = Math.max(biggest, currSizes[index2][prop]); + + // Nothing pushed/pulled + if (afterSize == beforeSize) return; + + for(i = index + 1; i < sizes.length; i++) { + currSizes = sizes[i]; + for(j = 0; j < currSizes.length; j++) itemIdsEffected.push(currSizes[j].itemId); + } + + // Delta is only how much the whole row/column changed + delta = afterSize - beforeSize; + + // Repeater resize secondary is determined by the effective delta. + _updateRepeaterSize(prop, repeaterObj, delta); + } + + for(i = 0; i < itemIdsEffected.length; i++) { + var currItemId = itemIdsEffected[i]; + var elementId = _createElementId(repeaterId, currItemId); + var loc = vertical ? 'top' : 'left'; + var jobj = $jobj(elementId); + var currVal = Number(jobj.css(loc).replace('px', '')); + jobj.css(loc, currVal + delta); + } + + if(!suppressFire) $ax.event.raiseSyntheticEvent(_createElementId(repeaterId, itemId), 'onItemResize'); + } + + var _updateRepeaterSize = function(prop, jobj, delta) { + if (delta == 0) return; + var val = $ax.getNumFromPx(jobj.css(prop)) + delta; + var border = $ax.getNumFromPx(jobj.css('border-width')) || 0; + val += border * 2; + jobj.css(prop, val); + $ax.dynamicPanelManager.fitParentPanel(jobj.attr('id')); + } + + var _getDataFromDataSet = function (eventInfo, repeaterId, itemId, propName, type) { + var row = undefined; + var deleteMap = eventInfo && eventInfo.repeaterDeleteMap && eventInfo.repeaterDeleteMap[repeaterId]; + if(deleteMap) row = deleteMap.idToRow[itemId]; + + if(!row) { + var itemNum = _getRealItemId(eventInfo, repeaterId, Number(itemId)); + row = repeaterToCurrentDataSet[repeaterId][itemNum]; + } + // Default to obj with text as empty string, as we don't generate the data for empty props + var data = row[propName] || { text: '' }; + //For now text is always the default. May change this to depend on context. + return type == 'data' && data.type != 'text' ? data : (type && data[type]) || data['text']; + }; + _repeaterManager.getData = _getDataFromDataSet; + + _repeaterManager.hasData = function(id, propName) { + if(!_getItemIdFromElementId(id)) return false; + var repeaterId = $ax.getParentRepeaterFromScriptId(_getScriptIdFromElementId(id)); + return Boolean(repeaterToCurrentDataSet[repeaterId] && repeaterToCurrentDataSet[repeaterId].props.indexOf(propName) != -1); + }; + + var _getEventDeleteData = function(eventInfo, repeaterId) { + var repeaterDeleteMap = eventInfo.repeaterDeleteMap; + if(!repeaterDeleteMap) repeaterDeleteMap = eventInfo.repeaterDeleteMap = {}; + + var myDeleteMap = repeaterDeleteMap[repeaterId]; + if(!myDeleteMap) { + myDeleteMap = repeaterDeleteMap[repeaterId] = {}; + myDeleteMap.deletedIds = []; + myDeleteMap.idToRow = {}; + } + + return myDeleteMap; + }; + + var _getRealItemId = function(eventInfo, repeaterId, itemId) { + var deletedBefore = 0; + var map = eventInfo.repeaterDeleteMap && eventInfo.repeaterDeleteMap[repeaterId]; + var deletedIds = map && map.deletedIds; + if(!deletedIds) return itemId - 1; + + for(var i = 0; i < deletedIds.length; i++) if (deletedIds[i] < itemId) deletedBefore++; + return itemId - deletedBefore - 1; + } + + var _addItemToDataSet = function(repeaterId, row, itemEventInfo) { + itemEventInfo.data = true; + var oldTarget = itemEventInfo.targetElement; + itemEventInfo.targetElement = repeaterId; + var dataSet = repeaterToLocalDataSet[repeaterId]; + + for(var propName in row) { + if(!row.hasOwnProperty(propName)) continue; + var prop = row[propName]; + if(prop.type == 'literal') { + var retval = $ax.expr.evaluateExpr(prop.literal, itemEventInfo); + if(typeof (retval) == 'string' || retval instanceof Date) retval = { type: 'text', text: retval }; + row[propName] = retval; + } + } + + itemEventInfo.targetElement = oldTarget; + dataSet[dataSet.length] = row; + itemEventInfo.data = false; + }; + _repeaterManager.addItem = _addItemToDataSet; + + var _deleteItemsFromDataSet = function(repeaterId, eventInfo, type, rule) { + var dataSet = repeaterToCurrentDataSet[repeaterId]; + var deleteDataMap = _getEventDeleteData(eventInfo, repeaterId); + var items; + + // Should always be this, marked, or rule. + if(type == 'this') items = [_getItemIdFromElementId(eventInfo.srcElement)]; + else if(type == 'marked') items = $ax.deepCopy(repeaterToEditItems[repeaterId]); + else { + // This should be rule + var visibleData = repeaterToCurrentDataSet[repeaterId]; + items = []; + var oldTarget = eventInfo.targetElement; + for(var i = 0; i < visibleData.length; i++) { + var index = i + 1; + if(deleteDataMap.deletedIds.indexOf(index) != -1) continue; + + eventInfo.targetElement = _createElementId(repeaterId, index); + if($ax.expr.evaluateExpr(rule, eventInfo).toLowerCase() != 'true') continue; + items.push(index); + } + eventInfo.targetElement = oldTarget; + } + // Want them decending + items.sort(function(a, b) { return b - a; }); + var editItems = repeaterToEditItems[repeaterId]; + + for(i = 0; i < items.length; i++) { + var itemId = items[i]; + + // Don't delete already deletedItem + if(deleteDataMap.deletedIds.indexOf(itemId) != -1) continue; + + var deletedRow = $ax.splice(dataSet, _getRealItemId(eventInfo, repeaterId, itemId), 1)[0]; + deleteDataMap.deletedIds.push(itemId); + deleteDataMap.idToRow[itemId] = deletedRow; + for(var j = editItems.length - 1; j >= 0; j--) { + var editItem = editItems[j]; + if(editItem == itemId) $ax.splice(editItems, j, 1); + else if(editItem > itemId) editItems[j] = editItem - 1; + } + } + }; + _repeaterManager.deleteItems = _deleteItemsFromDataSet; + + var _updateEditItemsInDataSet = function(repeaterId, propMap, eventInfo, type, rule) { + var oldTarget = eventInfo.targetElement; + var dataSet = repeaterToCurrentDataSet[repeaterId]; + var items; + + // Should always be this, marked, or rule. + if(type == 'this') items = [_getItemIdFromElementId(eventInfo.srcElement)]; + else if(type == 'marked') items = repeaterToEditItems[repeaterId]; + else { + // This should be rule + var currData = repeaterToCurrentDataSet[repeaterId]; + items = []; + oldTarget = eventInfo.targetElement; + for(var i = 0; i < currData.length; i++) { + var index = i + 1; + eventInfo.targetElement = _createElementId(repeaterId, index); + if($ax.expr.evaluateExpr(rule, eventInfo).toLowerCase() != 'true') continue; + items.push(index); + } + eventInfo.targetElement = oldTarget; + } + + eventInfo.data = true; + for(var prop in propMap) { + if(!propMap.hasOwnProperty(prop)) continue; + for(i = 0; i < items.length; i++) { + var data = propMap[prop]; + var item = items[i]; + if(data.type == 'literal') { + eventInfo.targetElement = _createElementId(repeaterId, item); + data = $ax.expr.evaluateExpr(data.literal, eventInfo); + if(typeof (data) == 'object' && data.isWidget) data = data.text; + if(typeof (data) == 'string') data = { type: 'text', text: data }; + } + dataSet[_getRealItemId(eventInfo, repeaterId, item)][prop] = data; + } + } + eventInfo.targetElement = oldTarget; + eventInfo.data = false; + }; + _repeaterManager.updateEditItems = _updateEditItemsInDataSet; + + var _getAllItemIds = function(repeaterId) { + var retval = []; + var currDataSet = repeaterToCurrentDataSet[repeaterId]; + for(var i = 0; i < currDataSet.length; i++) retval.push(i + 1); + return retval; + }; + _repeaterManager.getAllItemIds = _getAllItemIds; + + var _addEditItemToRepeater = function(repeaterId, itemIds) { + for(var i = 0; i < itemIds.length; i++) { + var itemId = Number(itemIds[i]); + var items = repeaterToEditItems[repeaterId]; + if(items.indexOf(itemId) == -1) items[items.length] = itemId; + } + }; + _repeaterManager.addEditItems = _addEditItemToRepeater; + + var _removeEditItemFromRepeater = function(repeaterId, itemIds) { + for(var i = 0; i < itemIds.length; i++) { + var itemId = itemIds[i]; + var items = repeaterToEditItems[repeaterId]; + var index = items.indexOf(Number(itemId)); + if(index != -1) $ax.splice(items, index, 1); + } + }; + _repeaterManager.removeEditItems = _removeEditItemFromRepeater; + + _repeaterManager.isEditItem = function(repeaterId, itemId) { + var items = repeaterToEditItems[repeaterId]; + return items.indexOf(Number(itemId)) != -1; + }; + + var _createElementId = function(scriptId, itemId) { + if(!itemId) return scriptId; + var i = scriptId.indexOf('_'); + var sections = i > -1 ? [scriptId.substring(0, i), scriptId.substring(i + 1)] : [scriptId]; + var retval = sections[0] + '-' + itemId; + return sections.length > 1 ? retval + '_' + sections[1] : retval; + }; + _repeaterManager.createElementId = _createElementId; + + var _getElementId = function(scriptId, childId) { + var elementId = scriptId; + if($ax.getParentRepeaterFromScriptId(scriptId)) { + // Must be in the same item as the child + var itemId = $ax.repeater.getItemIdFromElementId(childId); + elementId = $ax.repeater.createElementId(scriptId, itemId); + } + return elementId; + }; + _repeaterManager.getElementId = _getElementId; + + var _getScriptIdFromElementId = function(elementId) { + if(!elementId) return elementId; + var sections = elementId.split('-'); + var retval = sections[0]; + if(sections.length <= 1) return retval; + sections = sections[1].split('_'); + return sections.length > 1 ? retval + '_' + sections[1] : retval; + }; + _repeaterManager.getScriptIdFromElementId = _getScriptIdFromElementId; + + var _getItemIdFromElementId = function(elementId) { + var sections = elementId.split('-'); + if(sections.length < 2) return ''; + sections = sections[1].split('_'); + return sections[0]; + }; + _repeaterManager.getItemIdFromElementId = _getItemIdFromElementId; + + // TODO: Just inline this if we keep it this way. + var _applySuffixToElementId = function(id, suffix) { + return id + suffix; + // return _createElementId(_getScriptIdFromElementId(id) + suffix, _getItemIdFromElementId(id)); + }; + _repeaterManager.applySuffixToElementId = _applySuffixToElementId; + + var _removeSuffixFromElementId = function(id) { + if (id.indexOf('_') != -1) return id.split('_', 1); + return [id]; + } + _repeaterManager.removeSuffixFromElementId = _removeSuffixFromElementId; + + // var _getRepeaterSize = function(repeaterId) { + // var itemCount = ($ax.getItemIdsForRepeater(repeaterId) || []).length; + // if(itemCount == 0) return { width: 0, height: 0 }; + + // var repeater = $obj(repeaterId); + // // Width and height per item; + // var width = repeater.width; + // var height = repeater.height; + + // var viewId = $ax.adaptive.currentViewId || ''; + // var widthIncrement = width + _getAdaptiveProp(repeater.repeaterPropMap, 'horizontalSpacing', viewId); + // var heightIncrement = height + _getAdaptiveProp(repeater.repeaterPropMap, 'verticalSpacing', viewId); + + // var wrap = _getAdaptiveProp(repeater.repeaterPropMap, 'wrap', viewId); + // var vertical = _getAdaptiveProp(repeater.repeaterPropMap, 'vertical', viewId); + + // if(wrap == -1 || itemCount <= wrap) { + // if(vertical) height += heightIncrement * (itemCount - 1); + // else width += widthIncrement * (itemCount - 1); + // } else { + // var primaryDim = wrap; + // var secondaryDim = Math.ceil(itemCount / primaryDim); + + // if(vertical) { + // height += heightIncrement * (primaryDim - 1); + // width += widthIncrement * (secondaryDim - 1); + // } else { + // width += widthIncrement * (primaryDim - 1); + // height += heightIncrement * (secondaryDim - 1); + // } + // } + // return { width: width, height: height }; + // }; + // _repeaterManager.getRepeaterSize = _getRepeaterSize; + +}); + +// ******* Dynamic Panel Manager ******** // +$axure.internal(function($ax) { + // TODO: Probably a lot of the dynamic panel functions from pagescript should be moved here at some point... + var _dynamicPanelManager = $ax.dynamicPanelManager = {}; + + var _isIdFitToContent = _dynamicPanelManager.isIdFitToContent = function(id) { + var obj = $obj(id); + if (!obj || !$ax.public.fn.IsDynamicPanel(obj.type) || !obj.fitToContent) return false; + + var jobj = $jobj($ax.visibility.GetPanelState(id)); + return jobj.css('position') == 'relative'; + }; + + var _fitParentPanel = function(widgetId) { + // Find parent panel if there is one. + var parentPanelInfo = getParentPanel(widgetId); + if(parentPanelInfo) { + var parentId = parentPanelInfo.parent; + if(_updateFitPanel(parentId, parentPanelInfo.state)) _fitParentPanel(parentId); + return; + } + + // Otherwise, try to get parent repeater + var parentRepeaterId = $ax.getParentRepeaterFromElementId(widgetId); + var repeaterObj = $obj(parentRepeaterId); + if(!repeaterObj || widgetId == parentRepeaterId || !repeaterObj.repeaterPropMap.fitToContent) return; + var itemId = $ax.repeater.getItemIdFromElementId(widgetId); + var size = getContainerSize($ax.repeater.createElementId(parentRepeaterId, itemId)); + if($ax.repeater.setItemSize(parentRepeaterId, itemId, size.width, size.height)) _fitParentPanel(parentRepeaterId); + }; + _dynamicPanelManager.fitParentPanel = _fitParentPanel; + + _dynamicPanelManager.initialize = function() { + _dynamicPanelManager.initFitPanels($ax('*')); + + $axure.resize(_handleResize); + }; + + _dynamicPanelManager.initFitPanels = function(query) { + var fitToContent = []; + query.each(function (obj, elementId) { + var scriptId = $ax.repeater.getScriptIdFromElementId(elementId); + if($ax.public.fn.IsDynamicPanel(obj.type) && obj.fitToContent && !$ax.visibility.isScriptIdLimbo(scriptId)) { + fitToContent[fitToContent.length] = elementId; + } + }); + for(var i = fitToContent.length - 1; i >= 0; i--) { + var panelId = fitToContent[i]; + var stateCount = $obj(panelId).diagrams.length; + for(var j = 0; j < stateCount; j++) { + // Traverse through children to find what size it should be. + var stateId = $ax.repeater.applySuffixToElementId(panelId, '_state' + j); + var stateContentId = stateId + '_content'; + var stateQuery = $jobj(stateId); + var size = getContainerSize(stateContentId); + if(!$obj(panelId).percentWidth) stateQuery.width(size.width); + stateQuery.height(size.height); + } + } + }; + + var percentPanelToLeftCache = []; + var percentPanelsInitialized = false; + var _handleResize = function() { + if(percentPanelsInitialized) { + for(var key in percentPanelToLeftCache) { + //could optimize to only update non-contained panels + _updatePanelPercentWidth(key); + } + } else { + $ax('*').each(function(obj, elementId) { + if(_isPercentWidthPanel(obj)) _updatePanelPercentWidth(elementId); + }); + percentPanelsInitialized = true; + } + }; + + var _isPercentWidthPanel = _dynamicPanelManager.isPercentWidthPanel = function(obj) { + return obj && $ax.public.fn.IsDynamicPanel(obj.type) && obj.percentWidth; + }; + + _dynamicPanelManager.updatePanelContentPercentWidth = function(elementId) { + // if(_isPercentWidthPanel($obj(elementId))) return; + var stateChildrenQuery = $jobj(elementId).children('.panel_state'); + stateChildrenQuery.children('.panel_state_content').each( + function() { + $(this).children('.ax_dynamic_panel').each( + function() { _updatePanelPercentWidth(this.id); } + ); + } + ); + }; + + _dynamicPanelManager.updatePercentPanelCache = function(query) { + query.each(function(obj, elementId) { + if(_isPercentWidthPanel(obj)) { + if(_updatePercentPanelToLeftCache(obj, elementId, true)) { + _updatePanelPercentWidth(elementId); + } + } + }); + }; + + _dynamicPanelManager.resetFixedPanel = function(obj, domElement) { + if(obj.fixedHorizontal == 'center') domElement.style.marginLeft = ""; + if(obj.fixedVertical == 'middle') domElement.style.marginTop = ""; + }; + + _dynamicPanelManager.resetAdaptivePercentPanel = function(obj, domElement) { + if(!_isPercentWidthPanel(obj)) return; + + if(obj.fixedHorizontal == 'center') domElement.style.marginLeft = ""; + else if(obj.fixedHorizontal == 'right') domElement.style.width = ""; + }; + + var _updatePercentPanelToLeftCache = function(obj, elementId, overwrite) { + var wasUpdated = false; + var jObj = $jobj(elementId); + var axObj = $ax('#' + elementId); + if(percentPanelToLeftCache[elementId] == undefined || overwrite) { + if(obj.fixedHorizontal == 'center') percentPanelToLeftCache[elementId] = Number(jObj.css('margin-left').replace("px", "")); + else if(obj.fixedHorizontal == 'right') percentPanelToLeftCache[elementId] = axObj.width() + Number(jObj.css('right').replace("px", "")); + else percentPanelToLeftCache[elementId] = Number(jObj.css('left').replace("px", "")); + wasUpdated = true; + } + + if(obj.fixedHorizontal == 'right' && _isIdFitToContent(elementId)) { + var fitWidth = getContainerSize($ax.visibility.GetPanelState(elementId) + '_content').width; + percentPanelToLeftCache[elementId] = fitWidth + Number(jObj.css('right').replace("px", "")); + wasUpdated = true; + } + return wasUpdated; + }; + + var _updatePanelPercentWidth = _dynamicPanelManager.updatePanelPercentWidth = function(elementId) { + var obj = $obj(elementId); + if(!_isPercentWidthPanel(obj)) return; + + _updatePercentPanelToLeftCache(obj, elementId, false); + + var width; + var x; + + if(obj.fixedHorizontal) { + x = 0; + width = $(window).width(); + } else { + var parentPanelInfo = getParentPanel(elementId); + if(parentPanelInfo) { + var parentId = parentPanelInfo.parent; + width = $ax('#' + parentId).width(); + var parentObj = $obj(parentId); + if(parentObj.percentWidth) { + var stateId = $ax.repeater.applySuffixToElementId(parentId, '_state' + parentPanelInfo.state); + var stateContentId = stateId + '_content'; + x = -Number($jobj(stateContentId).css('margin-left').replace("px", "")); + } else x = 0; + } else { + var parentRepeater = $ax.getParentRepeaterFromScriptId($ax.repeater.getScriptIdFromElementId(elementId)); + if(parentRepeater) { + var itemId = $ax.repeater.getItemIdFromElementId(elementId); + var itemContainerId = $ax.repeater.createElementId(parentRepeater, itemId); + x = 0; + width = $ax('#' + itemContainerId).width(); + } else { + var $window = $(window); + width = $window.width(); + var bodyLeft = Number($('body').css('left').replace("px", "")); + var bodyWidth = Number($('body').css('width').replace("px", "")); + var isCenter = $ax.adaptive.getPageStyle().pageAlignment == 'center'; + width = Math.max(width, bodyWidth); + x = isCenter ? -(width - bodyWidth) / 2 - bodyLeft : 0; + } + } + } + + var jObj = $jobj(elementId); + if(obj.fixedHorizontal == 'left') jObj.css('left', x + 'px'); + else if(obj.fixedHorizontal == 'center') { + jObj.css('left', x + 'px'); + jObj.css('margin-left', 0 + 'px'); + } else jObj.css('left', x + 'px'); + + jObj.css('width', width + 'px'); + + var panelLeft = percentPanelToLeftCache[elementId]; + var stateParent = jObj; + while(stateParent.children()[0].id.indexOf($ax.visibility.CONTAINER_SUFFIX) != -1) stateParent = stateParent.children(); + var stateChildrenQuery = stateParent.children('.panel_state'); + stateChildrenQuery.css('width', width + 'px'); + + if(obj.fixedHorizontal == 'center') + stateChildrenQuery.children('.panel_state_content').css('left', '50%').css('margin-left', panelLeft + 'px'); + else if(obj.fixedHorizontal == 'right') + stateChildrenQuery.children('.panel_state_content').css('left', width - panelLeft + 'px'); + else stateChildrenQuery.children('.panel_state_content').css('margin-left', panelLeft - x + 'px'); + }; + + _dynamicPanelManager.updateAllFitPanels = function() { + var fitToContent = []; + $ax('*').each(function (obj, elementId) { + var scriptId = $ax.repeater.getScriptIdFromElementId(elementId); + if($ax.public.fn.IsDynamicPanel(obj.type) && obj.fitToContent && !$ax.visibility.isScriptIdLimbo(scriptId)) { + fitToContent[fitToContent.length] = elementId; + } + }); + for(var i = fitToContent.length - 1; i >= 0; i--) { + var panelId = fitToContent[i]; + var stateCount = $obj(panelId).diagrams.length; + for(var j = 0; j < stateCount; j++) { + $ax.dynamicPanelManager.setFitToContentCss(panelId, true); + _updateFitPanel(panelId, j, true); + } + } + }; + + _dynamicPanelManager.setFitToContentCss = function(elementId, fitToContent, oldWidth, oldHeight) { + + if($ax.dynamicPanelManager.isIdFitToContent(elementId) == fitToContent) return; + + var panel = $jobj(elementId); + var stateCss; + var scrollbars = $obj(elementId).scrollbars; + + if(fitToContent) { + panel.attr('style', ''); + stateCss = {}; + stateCss.position = 'relative'; + if(scrollbars != 'none') { + stateCss.overflow = 'visible'; + stateCss['-webkit-overflow-scrolling'] = 'visible'; + } + if(scrollbars == 'verticalAsNeeded') { + stateCss['overflow-x'] = 'visible'; + stateCss['-ms-overflow-x'] = 'visible'; + } else if(scrollbars == 'horizontalAsNeeded') { + stateCss['overflow-y'] = 'visible'; + stateCss['-ms-overflow-y'] = 'visible'; + } + panel.children().css(stateCss); + } else { + var panelCss = { width: oldWidth, height: oldHeight }; + stateCss = { width: oldWidth, height: oldHeight }; + panelCss.overflow = 'hidden'; + stateCss.position = 'absolute'; + if(scrollbars != 'none') { + stateCss.overflow = 'auto'; + stateCss['-webkit-overflow-scrolling'] = 'touch'; + } + if(scrollbars == 'verticalAsNeeded') { + stateCss['overflow-x'] = 'hidden'; + stateCss['-ms-overflow-x'] = 'hidden'; + } else if(scrollbars == 'horizontalAsNeeded') { + stateCss['overflow-y'] = 'hidden'; + stateCss['-ms-overflow-y'] = 'hidden'; + } + panel.css(panelCss); + panel.children().css(stateCss); + } + }; + + var _getShownStateId = function (id) { + var obj = $obj(id); + if (!obj || !$ax.public.fn.IsDynamicPanel(obj.type)) return id; + + var children = $ax.visibility.applyWidgetContainer(id, true).children(); + for (var i = 0; i < children.length; i++) { + var child = children[i]; + while ($ax.visibility.isContainer(child.id)) child = $(child).children()[0]; + if (child && child.style && child.style.display != 'none') return child.id; + } + return id; + }; + + var _getShownStateObj = function(id) { return $ax('#' + _getShownStateId(id));} + + _dynamicPanelManager.getShownState = function (id) { return $jobj(_getShownStateId(id)); }; + + var _getClamp = function(id) { + var obj = $obj(id); + if(!obj) return $ax('#' + id); + if ($ax.public.fn.IsDynamicPanel(obj.type)) return _getShownStateObj(id); + return $ax('#' + id); + }; + + var _updateFitPanel = function(panelId, stateIndex, initializingView) { + if(!panelId) return false; + + // Only fit if fitToContent is true + if(!$ax.dynamicPanelManager.isIdFitToContent(panelId)) return false; + + // Traverse through children to find what size it should be. + var stateId = $ax.repeater.applySuffixToElementId(panelId, '_state' + stateIndex); + var stateContentId = stateId + '_content'; + var stateQuery = $jobj(stateId); + var size = getContainerSize(stateContentId); + + // Skip if size hasn't changed + var oldWidth = stateQuery.width(); + var oldHeight = stateQuery.height(); + if(oldWidth == size.width && oldHeight == size.height) return false; + + if(!$obj(panelId).percentWidth) stateQuery.width(size.width); + stateQuery.height(size.height); + + //updatePercentWidth on all child panels + $jobj(stateContentId).children('.ax_dynamic_panel').each( + function() { _updatePanelPercentWidth(this.id); } + ); + + //do the following only if it is the current state + if(stateId != $ax.visibility.GetPanelState(panelId)) return false; + + if(!initializingView) _adjustFixed(panelId, oldWidth, oldHeight, size.width, size.height); + else if(stateIndex != 0) { + var state0 = $jobj($ax.repeater.applySuffixToElementId(panelId, '_state0')); + _adjustFixed(panelId, state0.width(), state0.height(), size.width, size.height); + } + + $ax.event.raiseSyntheticEvent(panelId, 'onResize'); + $ax.flyoutManager.updateFlyout(panelId); + + return true; + }; + + // widgetId is the one that crawls up masters until it finds a parent panel, targetId is the original widgetId (not the crawling master) + var getParentPanel = function(widgetId, path, targetId) { + path = path || $ax.getPathFromScriptId($ax.repeater.getScriptIdFromElementId(widgetId)); + + var obj = $obj(widgetId); + if(obj.parentDynamicPanel) { + path[path.length - 1] = obj.parentDynamicPanel; + var parentId = $ax.getScriptIdFromPath(path); + if(!parentId) return undefined; + parentId = $ax.repeater.getElementId(parentId, widgetId); + var parentObj = $obj(parentId); + var retVal = { parent: parentId }; + for(var i = 0; i < parentObj.diagrams.length; i++) { + var stateId = $ax.repeater.applySuffixToElementId(parentId, '_state' + i); + var stateQuery = $jobj(stateId); + if(stateQuery.find('#' + (targetId || widgetId)).length != 0) { + retVal.state = i; + break; + } + } + return retVal; + } + + if(path.length == 1) return undefined; + + path.pop(); + var parentMaster = $ax.getScriptIdFromPath(path); + if(!parentMaster) return undefined; + parentMaster = $ax.repeater.getElementId(parentMaster, widgetId); + + return getParentPanel(parentMaster, path, targetId || widgetId); + }; + + // TODO: May be a better location for this. Used currently for rdo and panel state containers + var getContainerSize = function(containerId) { + var containerQuery = containerId ? $jobj(containerId) : $('#base'); + var children = containerQuery.children(); + // Default size + var size = { width: 0, height: 0 }; + for(var i = 0; i < children.length; i++) { + var child = $(children[i]); + var childId = child.attr('id'); + //var axChild = $ax('#' + childId).width(); + + var childObj = $obj(childId); + if(!childObj) { + // On the body there are some children that should be ignored, as they are not objects. + if(!child.hasClass('basiclink') || child.get(0).tagName.toLowerCase() != 'a') continue; + + // Otherwise it should be a basic link + var linkChildren = child.children(); + if(!linkChildren.length) continue; + child = $(linkChildren[0]); + childId = child.attr('id'); + childObj = $obj(childId); + } + + // Ignore fixed + if(!childId || $ax.visibility.limboIds[childId] || !$ax.visibility.IsIdVisible(childId) + || $ax.public.fn.IsDynamicPanel(childObj.type) && childObj.fixedHorizontal) continue; + + var boundingRect = $ax.public.fn.getWidgetBoundingRect(childId); + var position = { left: boundingRect.left, top: boundingRect.top }; + var width = boundingRect.width; + var height = boundingRect.height; + + if($ax.public.fn.IsMaster(childObj.type)) { + var masterSize = getContainerSize(childId); + width = masterSize.width; + height = masterSize.height; + // } else if($ax.public.fn.IsRepeater(childObj.type)) { + // var repeaterSize = $ax.repeater.getRepeaterSize(childId); + // width = repeaterSize.width; + // height = repeaterSize.height; + + // if(width == 0 && height == 0) continue; + + // position.left += childObj.x; + // position.top += childObj.y; + } else if ($ax.public.fn.IsDynamicPanel(childObj.type)) { + if($ax.dynamicPanelManager.isIdFitToContent(childId)) { + var stateQuery = $jobj($ax.visibility.GetPanelState(childId)); + width = stateQuery.width(); + height = stateQuery.height(); + } + } + + size.width = Math.max(size.width, position.left + width); + size.height = Math.max(size.height, position.top + height); + } + + return size; + }; + + var _adjustFixed = _dynamicPanelManager.adjustFixed = function(panelId, oldWidth, oldHeight, width, height) { + var loc = _getFixedPosition(panelId, oldWidth, oldHeight, width, height); + if(loc) { + $ax.action.addAnimation(panelId, $ax.action.queueTypes.move, function() { + $ax.move.MoveWidget(panelId, loc[0], loc[1], { easing: 'none', duration: 0 }, false, null, true); + }); + } + }; + + var _getFixedPosition = _dynamicPanelManager.getFixedPosition = function(panelId, oldWidth, oldHeight, width, height) { + var panelObj = $obj(panelId); + var x = 0; + var y = 0; + if(panelObj.fixedHorizontal == 'center') { + x = (oldWidth - width) / 2; + } + if(panelObj.fixedVertical == 'middle') { + y = (oldHeight - height) / 2; + } + return x == 0 && y == 0 ? undefined : [x, y]; + }; + + _dynamicPanelManager.getFixedInfo = function(panelId) { + var panelObj = $obj(panelId); + if (!panelObj || !$ax.public.fn.IsDynamicPanel(panelObj.type)) return {}; + var jobj = $jobj(panelId); + if(jobj.css('position') == 'absolute') return {}; + + var info = {}; + var horizontal = panelObj.fixedHorizontal; + if(!horizontal) return info; + + info.fixed = true; + info.horizontal = horizontal; + info.vertical = panelObj.fixedVertical; + + if(info.horizontal == 'left') info.x = Number(jobj.css('left').replace('px', '')); + else if(info.horizontal == 'center') info.x = Number(jobj.css('margin-left').replace('px', '')); + else if(info.horizontal == 'right') info.x = Number(jobj.css('right').replace('px', '')); + + if(info.vertical == 'top') info.y = Number(jobj.css('top').replace('px', '')); + else if(info.vertical == 'middle') info.y = Number(jobj.css('margin-top').replace('px', '')); + else if(info.vertical == 'bottom') info.y = Number(jobj.css('bottom').replace('px', '')); + + return info; + }; + + // Show isn't necessary if this is always done before toggling (which is currently true), but I don't want that + // change (if it happened) to break this. + var _compressToggle = function (id, vert, show, easing, duration) { + var layer = $ax.getTypeFromElementId(id) == $ax.constants.LAYER_TYPE; + var locProp = vert ? 'top' : 'left'; + var dimProp = vert ? 'height' : 'width'; + + var threshold; + var delta; + + threshold = $ax('#' + id)[locProp](true); + delta = layer ? $ax('#' + id)[dimProp]() : _getShownStateObj(id)[dimProp](); + + if(!show) { + // Need to make threshold bottom/right + threshold += delta; + // Delta is in the opposite direction + delta *= -1; + } + + _compress(id, vert, threshold, delta, easing, duration); + }; + _dynamicPanelManager.compressToggle = _compressToggle; + + // Used when setting state of dynamic panel + var _compressDelta = function(id, oldState, newState, vert, easing, duration) { + var oldQuery = $jobj(oldState); + var newQuery = $jobj(newState); + + var thresholdProp = vert ? 'top' : 'left'; + var thresholdOffset = vert ? 'height' : 'width'; + var threshold = $ax('#' + id)[thresholdProp](true); + threshold += oldQuery[thresholdOffset](); + + var delta = newQuery[thresholdOffset]() - oldQuery[thresholdOffset](); + + var clampOffset = vert ? 'width' : 'height'; + var clampWidth = Math.max(oldQuery[clampOffset](), newQuery[clampOffset]()); + + _compress(id, vert, threshold, delta, easing, duration, clampWidth); + }; + _dynamicPanelManager.compressDelta = _compressDelta; + + var _compress = function (id, vert, threshold, delta, easing, duration, clampWidth) { + // If below, a horizantal clamp, otherwise a vertical clamp + var clamp = { + prop: vert ? 'left' : 'top', + offset: vert ? 'width' : 'height' + }; + + // Get clamp in coords relative to parent. Account for layers farther down + if($ax.getTypeFromElementId(id) == $ax.constants.LAYER_TYPE) { + clamp.start = $ax('#' + id)[clamp.prop](true); + clamp.end = clamp.start + $ax('#' + id)[clamp.offset](); + } else { + var clampLoc = $jobj(id); + if(typeof clampWidth == 'undefined') clampWidth = _getClamp(id)[clamp.offset](); + + clamp.start = Number(clampLoc.css(clamp.prop).replace('px', '')); + + clamp.end = clamp.start + clampWidth; + } + + // If clamps, threshold, or delta is not a number, can't compress. + if (isNaN(clamp.start) || isNaN(clamp.end) || isNaN(threshold) || isNaN(delta)) return; + + // Update clamp if fixed, to account for body position (only necessary when page centered) + if($jobj(id).css('position') == 'fixed') { + var clampDelta = $('#base').position().left; + clamp.start -= clampDelta; + clamp.end -= clampDelta; + } + + if(!easing) { + easing = 'none'; + duration = 0; + } + var parent = $ax('#' + id).getParents(false, ['item', 'state', 'layer'])[0]; + var obj = parent && $ax.getObjectFromElementId($ax.repeater.removeSuffixFromElementId(parent)[0]); + // Go until you hit a parent item or state, or a layer that is hidden to use as parent. + // Account for layer container positions as you go. + while(obj && $ax.public.fn.IsLayer(obj.type) && $ax.visibility.IsIdVisible(parent)) { + var container = $ax.visibility.applyWidgetContainer(parent, true, true); + // If layer is using container, offset is going to be necessary + if(container.length) { + var offsetX = $ax.getNumFromPx(container.css('left')); + var offsetY = $ax.getNumFromPx(container.css('top')); + var clampProp = clamp.prop == 'left' ? offsetX : offsetY; + var threshProp = clamp.prop == 'left' ? offsetY : offsetX; + threshold += threshProp; + clamp.start += clampProp; + clamp.end += clampProp; + } + + parent = $ax('#' + parent).getParents(false, ['item', 'state', 'layer'])[0]; + obj = parent && $ax.getObjectFromElementId($ax.repeater.removeSuffixFromElementId(parent)[0]); + } + + // Add container mid push causes strange behavior because we take container into account as we go down, but if after we accounted for it, + // a container is added, that container is not accounted for with threshold and clamp values. + var layer = obj && $ax.public.fn.IsLayer(obj.type) && parent; + if(layer) { + // If your parent layer is invisible, you want to be relative to it's container. That is true already if it has a container, + // but if you are just adding one now, then you need to offset your values + var needsOffset = !$jobj(layer + '_container').length && !$ax.visibility.IsIdVisible(layer); + $ax.visibility.pushContainer(layer, false); + if(needsOffset) { + container = $jobj(layer + '_container'); + offsetX = $ax.getNumFromPx(container.css('left')); + offsetY = $ax.getNumFromPx(container.css('top')); + clampProp = clamp.prop == 'left' ? offsetX : offsetY; + threshProp = clamp.prop == 'left' ? offsetY : offsetX; + threshold -= threshProp; + clamp.start -= clampProp; + clamp.end -= clampProp; + } + } + + // Note: If parent is body, some of these aren't widgets + if(parent && $jobj(parent + '_content').length > 0) parent = parent + '_content'; + if(parent && $jobj(parent + '_container').length > 0) parent = parent + '_container'; + _compressChildrenHelper(id, $(parent ? '#' + parent : '#base').children(), vert, threshold, delta, clamp, easing, duration); + + if(layer) $ax.visibility.popContainer(layer, false); + + // Do item push + var itemId = $ax.repeater.getItemIdFromElementId(id); + if(!itemId) return; + + var repeaterId = $ax.getParentRepeaterFromElementId(id); + // Only need to push when parent is an item directly. + if(parent != $ax.repeater.createElementId(repeaterId, itemId)) return; + + // If repeater is fit to content, then don't worry about it, it'll be handled elsewhere + if(!obj.repeaterPropMap.fitToContent) $ax.repeater.pushItems(repeaterId, itemId, delta, vert); + }; + + var _compressChildrenHelper = function (id, children, vert, threshold, delta, clamp, easing, duration, parentLayer) { + var toMove = []; + var allMove = true; + for (var i = 0; i < children.length; i++) { + var child = $(children[i]); + + //don't move fixed + if(child.css('position') == 'fixed') continue; + + // Check for basic links + if(child[0] && child[0].tagName == 'A' && child.hasClass('basiclink')) child = child.children(); + var childId = child.attr('id'); + + // Don't move self, and check id to make sure it is a widget. + if(childId == id || !childId || childId[0] != 'u') { + allMove = false; + continue; + } + + if ($ax.getTypeFromElementId(childId) == $ax.constants.LAYER_TYPE) { + $ax.visibility.pushContainer(childId, false); + var addSelf; + var container = $ax.visibility.applyWidgetContainer(childId, true, true); + var layerChildren = $ax.visibility.getRealChildren(child.children()); + //if(container.length) { + var offsetX = -$ax.getNumFromPx(container.css('left')); + var offsetY = -$ax.getNumFromPx(container.css('top')); + var clampProp = clamp.prop == 'left' ? offsetX : offsetY; + var threshProp = clamp.prop == 'left' ? offsetY : offsetX; + var layerClamp = { prop: clamp.prop, offset: clamp.offset, start: clamp.start + clampProp, end: clamp.end + clampProp }; + addSelf = _compressChildrenHelper(id, layerChildren, vert, threshold + threshProp, delta, layerClamp, easing, duration, childId); + //} else addSelf = _compressChildrenHelper(id, layerChildren, vert, threshold, delta, clamp, easing, duration, childId); + + if(addSelf) toMove.push(childId); + else allMove = false; + $ax.visibility.popContainer(childId, false); + continue; + } + + var numbers = childId.substring(1).split('-'); + if(numbers.length < 1 || isNaN(Number(numbers[0])) || (numbers.length == 2 && isNaN(Number(numbers[1]))) || numbers.length > 2) continue; + + var marker, childClamp; + + var axChild = $ax('#' + childId); + var markerProp = vert ? 'top' : 'left'; + marker = Number(axChild[markerProp](true)); + childClamp = [Number(axChild[clamp.prop](true))]; + // Dynamic panels are not reporting correct size sometimes, so pull it from the state. Get shown state just returns the widget if it is not a dynamic panel. + var sizeChild = _getShownStateObj(childId); + childClamp[1] = childClamp[0] + sizeChild[clamp.offset](); + + if(isNaN(marker) || isNaN(childClamp[0]) || isNaN(childClamp[1]) || + marker < threshold || childClamp[1] <= clamp.start || childClamp[0] >= clamp.end) { + allMove = false; + continue; + } + + if (allMove && parentLayer) { + //should i nopmove here? + //$ax.move.nopMove(childId); + $ax.event.raiseSyntheticEvent(childId, "onMove"); + } + toMove.push(childId); + } + + if (allMove && parentLayer) { + return true; + } else { + for(var i = 0; i < toMove.length; i++) { + $ax('#' + toMove[i]).moveBy(vert ? 0 : delta, vert ? delta : 0, easing == 'none' ? {} : { duration: duration, easing: easing }); + } + } + return false; + }; + + var _parentHandlesStyles = function(id) { + var parents = $ax('#' + id).getParents(true, ['dynamicPanel', 'layer'])[0]; + if(!parents) return false; + var directParent = true; + for(var i = 0; i < parents.length; i++) { + var parentId = parents[i]; + var parentObj = $obj(parentId); + if(!parentObj.propagate) { + directParent = false; + continue; + } + return { id: parentId, direct: directParent }; + } + return false; + }; + _dynamicPanelManager.parentHandlesStyles = _parentHandlesStyles; + + var _propagateMouseOver = function(id, value) { + propagate(id, true, value); + }; + _dynamicPanelManager.propagateMouseOver = _propagateMouseOver; + + var _propagateMouseDown = function(id, value) { + propagate(id, false, value); + }; + _dynamicPanelManager.propagateMouseDown = _propagateMouseDown; + + var propagate = function(id, hover, value) { + var hoverChildren = function(children) { + if(!children) return; + for(var i = 0; i < children.length; i++) { + var elementId = children[i].id; + var obj = $obj(elementId); + if(obj == null) { + elementId = elementId.split('_')[0]; + obj = $obj(elementId); + } + if(obj == null) continue; + if (($ax.public.fn.IsDynamicPanel(obj.type) || $ax.public.fn.IsLayer(obj.type)) && !obj.propagate) continue; + + if(hover) $ax.style.SetWidgetHover(elementId, value); + else $ax.style.SetWidgetMouseDown(elementId, value); + $ax.annotation.updateLinkLocations($ax.style.GetTextIdFromShape(elementId)); + + hoverChildren(children[i].children); + } + }; + hoverChildren($ax('#' + id).getChildren(true)[0].children); + }; +}); diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/sto.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/sto.js" new file mode 100644 index 0000000..5f5cd20 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/sto.js" @@ -0,0 +1,230 @@ +锘 +$axure.internal(function($ax) { + var funcs = {}; + + var weekday = new Array(7); + weekday[0] = "Sunday"; + weekday[1] = "Monday"; + weekday[2] = "Tuesday"; + weekday[3] = "Wednesday"; + weekday[4] = "Thursday"; + weekday[5] = "Friday"; + weekday[6] = "Saturday"; + + funcs.getDayOfWeek = function() { + return _getDayOfWeek(this.getDay()); + }; + + var _getDayOfWeek = $ax.getDayOfWeek = function(day) { + return weekday[day]; + }; + + var month = new Array(12); + month[0] = "January"; + month[1] = "February"; + month[2] = "March"; + month[3] = "April"; + month[4] = "May"; + month[5] = "June"; + month[6] = "July"; + month[7] = "August"; + month[8] = "September"; + month[9] = "October"; + month[10] = "November"; + month[11] = "December"; + + funcs.getMonthName = function() { + return _getMonthName(this.getMonth()); + }; + + var _getMonthName = $ax.getMonthName = function(monthNum) { + return month[monthNum]; + }; + + funcs.getMonth = function() { + return this.getMonth() + 1; + }; + + funcs.addYears = function(years) { + var retVal = new Date(this.valueOf()); + retVal.setFullYear(this.getFullYear() + Number(years)); + return retVal; + }; + + funcs.addMonths = function(months) { + var retVal = new Date(this.valueOf()); + retVal.setMonth(this.getMonth() + Number(months)); + return retVal; + }; + + funcs.addDays = function(days) { + var retVal = new Date(this.valueOf()); + retVal.setDate(this.getDate() + Number(days)); + return retVal; + }; + + funcs.addHours = function(hours) { + var retVal = new Date(this.valueOf()); + retVal.setHours(this.getHours() + Number(hours)); + return retVal; + }; + + funcs.addMinutes = function(minutes) { + var retVal = new Date(this.valueOf()); + retVal.setMinutes(this.getMinutes() + Number(minutes)); + return retVal; + }; + + funcs.addSeconds = function(seconds) { + var retVal = new Date(this.valueOf()); + retVal.setSeconds(this.getSeconds() + Number(seconds)); + return retVal; + }; + + funcs.addMilliseconds = function(milliseconds) { + var retVal = new Date(this.valueOf()); + retVal.setMilliseconds(this.getMilliseconds() + Number(milliseconds)); + return retVal; + }; + + var _stoHandlers = {}; + + _stoHandlers.literal = function(sto, scope, eventInfo) { + return sto.value; + }; + + //need angle bracket syntax because var is a reserved word + _stoHandlers['var'] = function(sto, scope, eventInfo) { + // Can't us 'A || B' here, because the first value can be false, true, or empty string and still be valid. + var retVal = scope.hasOwnProperty(sto.name) ? scope[sto.name] : $ax.globalVariableProvider.getVariableValue(sto.name, eventInfo); + // Handle desired type here? + + if(retVal && retVal.exprType) { + retVal = $ax.expr.evaluateExpr(retVal, eventInfo); + } + + if((sto.desiredType == 'int' || sto.desiredType == 'float')) { + var num = new Number(retVal); + retVal = isNaN(num.valueOf()) ? retVal : num; + } + + + return retVal; + }; + + //TODO: Perhaps repeaterId can be detirmined at generation, and stored in the sto info. + _stoHandlers.item = function(sto, scope, eventInfo, prop) { + prop = prop || (eventInfo.data ? 'data' : eventInfo.link ? 'url' : eventInfo.image ? 'img' : 'text'); + var id = sto.isTarget || !$ax.repeater.hasData(eventInfo.srcElement, sto.name) ? eventInfo.targetElement : eventInfo.srcElement; + return getData(eventInfo, id, sto.name, prop); + }; + + var getData = function(eventInfo, id, name, prop) { + var repeaterId = $ax.getParentRepeaterFromScriptId($ax.repeater.getScriptIdFromElementId(id)); + var itemId = $ax.repeater.getItemIdFromElementId(id); + return $ax.repeater.getData(eventInfo, repeaterId, itemId, name, prop); + }; + + _stoHandlers.paren = function(sto, scope, eventInfo) { + return _evaluateSTO(sto.innerSTO, scope, eventInfo); + }; + + _stoHandlers.fCall = function(sto, scope, eventInfo) { + //TODO: [mas] handle required type + var thisObj = _evaluateSTO(sto.thisSTO, scope, eventInfo); + if(sto.thisSTO.desiredType == 'string' && sto.thisSTO.computedType != 'string') thisObj = thisObj.toString(); + + var args = []; + for(var i = 0; i < sto.arguments.length; i++) { + args[i] = _evaluateSTO(sto.arguments[i], scope, eventInfo); + } + var fn = (funcs.hasOwnProperty(sto.func) && funcs[sto.func]) || thisObj[sto.func]; + return fn.apply(thisObj, args); + }; + + _stoHandlers.propCall = function(sto, scope, eventInfo) { + //TODO: [mas] handle required type + if((sto.prop == 'url' || sto.prop == 'img') && sto.thisSTO.sto == 'item') return _stoHandlers.item(sto.thisSTO, scope, eventInfo, sto.prop); + var thisObj = _evaluateSTO(sto.thisSTO, scope, eventInfo); + return thisObj[sto.prop]; + }; + + var _binOps = {}; + _binOps['+'] = function(left, right) { + if(left instanceof Date) return addDayToDate(left, right); + if(right instanceof Date) return addDayToDate(right, left); + + var num = Number(left) + Number(right); + return isNaN(num) ? (String(left) + String(right)) : num; + }; + _binOps['-'] = function(left, right) { + if(left instanceof Date) return addDayToDate(left, -right); + return left - right; + }; + _binOps['*'] = function(left, right) { return Number(left) * Number(right); }; + _binOps['/'] = function(left, right) { return Number(left) / Number(right); }; + _binOps['%'] = function(left, right) { return Number(left) % Number(right); }; + _binOps['=='] = function(left, right) { return _getBool(left) == _getBool(right); }; + _binOps['!='] = function(left, right) { return _getBool(left) != _getBool(right); }; + _binOps['<'] = function(left, right) { return Number(left) < Number(right); }; + _binOps['<='] = function(left, right) { return Number(left) <= Number(right); }; + _binOps['>'] = function(left, right) { return Number(left) > Number(right); }; + _binOps['>='] = function(left, right) { return Number(left) >= Number(right); }; + _binOps['&&'] = function(left, right) { return _getBool(left) && _getBool(right); }; + _binOps['||'] = function(left, right) { return _getBool(left) || _getBool(right); }; + + // TODO: Move this to generic place to be used. + var addDayToDate = function(date, days) { + var retVal = new Date(date.valueOf()); + retVal.setDate(date.getDate() + days); + return retVal; + }; + + var _unOps = {}; + _unOps['+'] = function(arg) { return +arg; }; + _unOps['-'] = function(arg) { return -arg; }; + _unOps['!'] = function(arg) { return !_getBool(arg); }; + + _stoHandlers.binOp = function(sto, scope, eventInfo) { + var left = _evaluateSTO(sto.leftSTO, scope, eventInfo); + var right = _evaluateSTO(sto.rightSTO, scope, eventInfo); + return _binOps[sto.op](left, right); + }; + + _stoHandlers.unOp = function(sto, scope, eventInfo) { + var input = _evaluateSTO(sto.inputSTO, scope, eventInfo); + return _unOps[sto.op](input); + }; + + var _getBool = function(val) { + var lowerVal = val.toLowerCase ? val.toLowerCase() : val; + return lowerVal == "false" ? false : lowerVal == "true" ? true : val; + }; + $ax.getBool = _getBool; + + var _evaluateSTO = function(sto, scope, eventInfo) { + if(sto.sto == 'error') return undefined; + return _tryEscapeRichText(castSto(_stoHandlers[sto.sto](sto, scope, eventInfo), sto), eventInfo); + }; + $ax.evaluateSTO = _evaluateSTO; + + var castSto = function(val, sto) { + var type = sto.computedType || sto.desiredType; + if(type == 'string') val = String(val); + else if(type == 'date' && !(val instanceof Date)) val = new Date(val); + else if(type == 'int' || type == 'float') val = Number(val); + else if(type == 'bool') val = Boolean(val); + + return val; + }; + + var _tryEscapeRichText = function(text, eventInfo) { + return eventInfo.htmlLiteral ? _escapeRichText(text) : text; + }; + + var _escapeRichText = function(text) { + if(typeof (text) != 'string') return text; + + return text.replace('<', '<'); + }; +}); \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/style.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/style.js" new file mode 100644 index 0000000..9bb2f98 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/style.js" @@ -0,0 +1,1150 @@ +锘$axure.internal(function($ax) { + var _style = {}; + $ax.style = _style; + + var _disabledWidgets = {}; + var _selectedWidgets = {}; + + // A table to cache the outerHTML of the _rtf elements before the rollover state is applied. + var _originalTextCache = {}; + // A table to exclude the normal style from adaptive overrides + var _shapesWithSetRichText = {}; + + // just a listing of shape ids + var _adaptiveStyledWidgets = {}; + + var _setLinkStyle = function(id, styleName) { + var textId = $ax.style.GetTextIdFromLink(id); + var style = _computeAllOverrides(id, textId, styleName, $ax.adaptive.currentViewId); + if(!_originalTextCache[textId]) { + $ax.style.CacheOriginalText(textId); + } + if($.isEmptyObject(style)) return; + + var parentObjectCache = _originalTextCache[textId].styleCache; + + _transformTextWithVerticalAlignment(textId, function() { + var cssProps = _getCssStyleProperties(style); + $('#' + id).find('*').andSelf().each(function(index, element) { + element.setAttribute('style', parentObjectCache[element.id]); + _applyCssProps(element, cssProps); + }); + }); + }; + + var _resetLinkStyle = function(id) { + var textId = $ax.style.GetTextIdFromLink(id); + var parentObjectCache = _originalTextCache[textId].styleCache; + + _transformTextWithVerticalAlignment(textId, function() { + $('#' + id).find('*').andSelf().each(function(index, element) { + element.style.cssText = parentObjectCache[element.id]; + }); + }); + if($ax.event.mouseDownObjectId) { + $ax.style.SetWidgetMouseDown($ax.event.mouseDownObjectId, true); + } else if($ax.event.mouseOverObjectId) { + $ax.style.SetWidgetHover($ax.event.mouseOverObjectId, true); + } + }; + + $ax.style.SetLinkHover = function(id) { + _setLinkStyle(id, MOUSE_OVER); + }; + + $ax.style.SetLinkNotHover = function(id) { + _resetLinkStyle(id); + }; + + $ax.style.SetLinkMouseDown = function(id) { + _setLinkStyle(id, MOUSE_DOWN); + }; + + $ax.style.SetLinkNotMouseDown = function(id) { + _resetLinkStyle(id); + var style = _computeAllOverrides(id, $ax.event.mouseOverObjectId, MOUSE_OVER, $ax.adaptive.currentViewId); + + if(!$.isEmptyObject(style)) $ax.style.SetLinkHover(id); + //we dont do anything here because the widget not mouse down has taken over here + }; + + var _widgetHasState = function(id, state) { + if($ax.style.getElementImageOverride(id, state)) return true; + var diagramObject = $ax.getObjectFromElementId(id); + + var adaptiveIdChain = $ax.adaptive.getAdaptiveIdChain($ax.adaptive.currentViewId); + + for(var i = 0; i < adaptiveIdChain.length; i++) { + var viewId = adaptiveIdChain[i]; + var adaptiveStyle = diagramObject.adaptiveStyles[viewId]; + if(adaptiveStyle && adaptiveStyle.stateStyles && adaptiveStyle.stateStyles[state]) return true; + } + + if(diagramObject.style.stateStyles) return diagramObject.style.stateStyles[state]; + + return false; + }; + + // Returns what overrides the hover, or false if nothing. + var _hoverOverride = function(id) { + if($ax.style.IsWidgetDisabled(id)) return DISABLED; + if($ax.style.IsWidgetSelected(id)) return SELECTED; + var obj = $ax.getObjectFromElementId(id); + if(!obj.isContained) return false; + var path = $ax.getPathFromScriptId($ax.repeater.getScriptIdFromElementId(id)); + path[path.length - 1] = obj.parent.id; + var itemId = $ax.repeater.getItemIdFromElementId(id); + return _hoverOverride($ax.getElementIdFromPath(path, { itemNum: itemId })); + }; + + $ax.style.SetWidgetHover = function(id, value) { + var override = _hoverOverride(id); + if(override == DISABLED) return; + if(!_widgetHasState(id, MOUSE_OVER)) return; + + var valToSet = value || _isRolloverOverride(id); + var state = _generateMouseState(id, valToSet ? MOUSE_OVER : NORMAL, override == SELECTED); + _applyImageAndTextJson(id, state); + _updateElementIdImageStyle(id, state); + }; + + var _rolloverOverrides = []; + var _isRolloverOverride = function(id) { + return _rolloverOverrides.indexOf(id) != -1; + }; + + $ax.style.AddRolloverOverride = function(id) { + if(_isRolloverOverride(id)) return; + _rolloverOverrides[_rolloverOverrides.length] = id; + if($ax.event.mouseOverIds.indexOf(id) == -1) $ax.style.SetWidgetHover(id, true); + }; + + $ax.style.RemoveRolloverOverride = function(id) { + var index = _rolloverOverrides.indexOf(id); + if(index == -1) return; + $ax.splice(_rolloverOverrides, index, 1); + if($ax.event.mouseOverIds.indexOf(id) == -1) $ax.style.SetWidgetHover(id, false); + }; + + // function GetWidgetCurrentState(id) { + // if($ax.style.IsWidgetDisabled(id)) return "disabled"; + // if($ax.style.IsWidgetSelected(id)) return "selected"; + // if($ax.event.mouseOverObjectId == id) return "mouseOver"; + // if($ax.event.mouseDownObjectId == id) return "mouseDown"; + + // return "normal"; + // } + + $ax.style.ObjHasMouseDown = function(id) { + var obj = $obj(id); + if($ax.style.getElementImageOverride(id, 'mouseDown') || obj.style && obj.style.stateStyles && obj.style.stateStyles.mouseDown) return true; + + var chain = $ax.adaptive.getAdaptiveIdChain($ax.adaptive.currentViewId); + for(var i = 0; i < chain.length; i++) { + var style = obj.adaptiveStyles[chain[i]]; + if(style && style.stateStyles && style.stateStyles.mouseDown) return true; + } + return false; + }; + + $ax.style.SetWidgetMouseDown = function(id, value) { + if($ax.style.IsWidgetDisabled(id)) return; + if(!_widgetHasState(id, MOUSE_DOWN)) return; + + // ApplyImageAndTextJson(id, value ? 'mouseDown' : !$.isEmptyObject(GetStyleForState(id, null, 'mouseOver')) ? 'mouseOver' : 'normal'); + var state = _generateMouseState(id, value ? MOUSE_DOWN : MOUSE_OVER, $ax.style.IsWidgetSelected(id)); + _applyImageAndTextJson(id, state); + _updateElementIdImageStyle(id, state); + }; + + var _generateMouseState = function(id, mouseState, selected) { + if (selected) { + if (_style.getElementImageOverride(id, SELECTED)) return SELECTED; + + var viewChain = $ax.adaptive.getAdaptiveIdChain($ax.adaptive.currentViewId); + viewChain[viewChain.length] = ''; + var obj = $obj(id); + if(obj.type == "dynamicPanel") return SELECTED; + + var any = function(dict) { + for(var key in dict) return true; + return false; + }; + + for(var i = 0; i < viewChain.length; i++) { + var viewId = viewChain[i]; + // Need to check seperately for images. + if(obj.adaptiveStyles && obj.adaptiveStyles[viewId] && any(obj.adaptiveStyles[viewId]) + || obj.images && obj.images['selected~' + viewId]) return SELECTED; + } + var selectedStyle = obj.style && obj.style.stateStyles && obj.style.stateStyles.selected; + if(selectedStyle && any(selectedStyle)) return SELECTED; + } + + // Not using selected + return mouseState; + }; + + $ax.style.SetWidgetSelected = function(id, value, alwaysApply) { + if(_isWidgetDisabled(id)) return; + //NOTE: not firing select events if state didn't change + var raiseSelectedEvents = $ax.style.IsWidgetSelected(id) != value; + + if(value) { + var group = $('#' + id).attr('selectiongroup'); + if(group) { + $("[selectiongroup='" + group + "']").each(function() { + var otherId = this.id; + if(otherId == id) return; + if ($ax.visibility.isScriptIdLimbo($ax.repeater.getScriptIdFromElementId(otherId))) return; + + $ax.style.SetWidgetSelected(otherId, false); + }); + } + } + var obj = $obj(id); + if(obj) { + var actionId = id; + if ($ax.public.fn.IsDynamicPanel(obj.type) || $ax.public.fn.IsLayer(obj.type)) { + var children = $axure('#' + id).getChildren()[0].children; + for(var i = 0; i < children.length; i++) { + var childId = children[i]; + // Special case for trees + var childObj = $jobj(childId); + if(childObj.hasClass('treeroot')) { + var treenodes = childObj.find('.treenode'); + for(var j = 0; j < treenodes.length; j++) { + $axure('#' + treenodes[j].id).selected(value); + } + } else $axure('#' + childId).selected(value); + } + } else { + var widgetHasSelectedState = _widgetHasState(id, SELECTED); + while(obj.isContained && !widgetHasSelectedState) obj = obj.parent; + var itemId = $ax.repeater.getItemIdFromElementId(id); + var path = $ax.getPathFromScriptId($ax.repeater.getScriptIdFromElementId(id)); + path[path.length - 1] = obj.id; + actionId = $ax.getElementIdFromPath(path, { itemNum: itemId }); + if(alwaysApply || widgetHasSelectedState) { + var state = _generateSelectedState(actionId, value); + _applyImageAndTextJson(actionId, state); + _updateElementIdImageStyle(actionId, state); + } + //added actionId and this hacky logic because we set style state on child, but interaction on parent + //then the id saved in _selectedWidgets would be depended on widgetHasSelectedState... more see case 1818143 + while(obj.isContained && !$ax.getObjectFromElementId(id).interactionMap) obj = obj.parent; + path = $ax.getPathFromScriptId($ax.repeater.getScriptIdFromElementId(id)); + path[path.length - 1] = obj.id; + actionId = $ax.getElementIdFromPath(path, { itemNum: itemId }); + } + } + + // ApplyImageAndTextJson(id, value ? 'selected' : 'normal'); + _selectedWidgets[id] = value; + if(raiseSelectedEvents) $ax.event.raiseSelectedEvents(actionId, value); + }; + + var _generateSelectedState = function(id, selected) { + var mouseState = $ax.event.mouseDownObjectId == id ? MOUSE_DOWN : $ax.event.mouseOverIds.indexOf(id) != -1 ? MOUSE_OVER : NORMAL; + return _generateMouseState(id, mouseState, selected); + }; + + $ax.style.IsWidgetSelected = function(id) { + return Boolean(_selectedWidgets[id]) || $('#'+id).hasClass('selected'); + }; + + $ax.style.SetWidgetEnabled = function(id, value) { + _disabledWidgets[id] = !value; + $('#' + id).find('a').css('cursor', value ? 'pointer' : 'default'); + + if(!_widgetHasState(id, DISABLED)) return; + if(!value) { + _applyImageAndTextJson(id, DISABLED); + _updateElementIdImageStyle(id, DISABLED); + } else $ax.style.SetWidgetSelected(id, $ax.style.IsWidgetSelected(id), true); + }; + + $ax.style.SetWidgetPlaceholder = function(id, value, text, password) { + var inputId = $ax.repeater.applySuffixToElementId(id, '_input'); + + // Right now this is the only style on the widget. If other styles (ex. Rollover), are allowed + // on TextBox/TextArea, or Placeholder is applied to more widgets, this may need to do more. + var obj = $jobj(inputId); + + var height = document.getElementById(inputId).style['height']; + var width = document.getElementById(inputId).style['width']; + obj.attr('style', ''); + //removing all styles, but now we can change the size, so we should add them back + //this is more like a quick hack + if (height) obj.css('height', height); + if (width) obj.css('width', width); + + if(!value) { + try { //ie8 and below error + if(password) document.getElementById(inputId).type = 'password'; + } catch(e) { } + } else { + var element = $('#' + inputId)[0]; + var style = _computeAllOverrides(id, undefined, HINT, $ax.adaptive.currentViewId); + var styleProperties = _getCssStyleProperties(style); + + //moved this out of GetCssStyleProperties for now because it was breaking un/rollovers with gradient fills + if(style.fill) styleProperties.allProps.backgroundColor = _getColorFromFill(style.fill); + + _applyCssProps(element, styleProperties, true); + try { //ie8 and below error + if(password) document.getElementById(inputId).type = 'text'; + } catch(e) { } + } + obj.val(text); + }; + + var _isWidgetDisabled = $ax.style.IsWidgetDisabled = function(id) { + return Boolean(_disabledWidgets[id]); + }; + + var _elementIdsToImageOverrides = {}; + $ax.style.mapElementIdToImageOverrides = function (elementId, override) { + for(var key in override) _addImageOverride(elementId, key, override[key]); + }; + + var _addImageOverride = function (elementId, state, val) { + if (!_elementIdsToImageOverrides[elementId]) _elementIdsToImageOverrides[elementId] = {}; + _elementIdsToImageOverrides[elementId][state] = val; + } + + $ax.style.deleteElementIdToImageOverride = function(elementId) { + delete _elementIdsToImageOverrides[elementId]; + }; + + $ax.style.getElementImageOverride = function(elementId, state) { + var url = _elementIdsToImageOverrides[elementId] && _elementIdsToImageOverrides[elementId][state]; + return url; + }; + + $ax.style.elementHasAnyImageOverride = function(elementId) { + return Boolean(_elementIdsToImageOverrides[elementId]); + }; + + var NORMAL = 'normal'; + var MOUSE_OVER = 'mouseOver'; + var MOUSE_DOWN = 'mouseDown'; + var SELECTED = 'selected'; + var DISABLED = 'disabled'; + var HINT = 'hint'; + + var _generateState = _style.generateState = function(id) { + return $ax.placeholderManager.isActive(id) ? HINT : _style.IsWidgetDisabled(id) ? DISABLED : _generateSelectedState(id, _style.IsWidgetSelected(id)); + }; + + var _progressState = _style.progessState = function(state) { + if(state == NORMAL) return false; + if(state == MOUSE_DOWN) return MOUSE_OVER; + return NORMAL; + }; + + var _unprogressState = function(state, goal) { + state = state || NORMAL; + if(state == goal) return undefined; + if(state == NORMAL && goal == MOUSE_DOWN) return MOUSE_OVER; + return goal; + }; + + var _updateElementIdImageStyle = _style.updateElementIdImageStyle = function(elementId, state) { + if(!_style.elementHasAnyImageOverride(elementId)) return; + + if(!state) state = _generateState(elementId); + + var style = _computeFullStyle(elementId, state, $ax.adaptive.currentViewId); + + var query = $jobj($ax.repeater.applySuffixToElementId(elementId, '_img')); + style.size.width = query.width(); + style.size.height = query.height(); + var borderId = $ax.repeater.applySuffixToElementId(elementId, '_border'); + var borderQuery = $jobj(borderId); + if(!borderQuery.length) { + borderQuery = $('
    '); + borderQuery.attr('id', borderId); + query.after(borderQuery); + } + + borderQuery.attr('style', ''); + borderQuery.css('position', 'absolute'); + query.attr('style', ''); + + var borderWidth = Number(style.borderWidth); + var hasBorderWidth = borderWidth > 0; + if(hasBorderWidth) { + borderQuery.css('border-style', 'solid'); + borderQuery.css('border-width', borderWidth + 'px'); + borderQuery.css('width', style.size.width - borderWidth * 2); + borderQuery.css('height', style.size.height - borderWidth * 2); + } + + var linePattern = style.linePattern; + if(hasBorderWidth && linePattern) borderQuery.css('border-style', linePattern); + + var borderFill = style.borderFill; + if(hasBorderWidth && borderFill) { + var color = borderFill.fillType == 'solid' ? borderFill.color : + borderFill.fillType == 'linearGradient' ? borderFill.colors[0].color : 0; + + var alpha = Math.floor(color / 256 / 256 / 256); + color -= alpha * 256 * 256 * 256; + alpha = alpha / 255; + + var red = Math.floor(color / 256 / 256); + color -= red * 256 * 256; + var green = Math.floor(color / 256); + var blue = color - green * 256; + + borderQuery.css('border-color', _rgbaToFunc(red, green, blue, alpha)); + } + + var cornerRadiusTopLeft = style.cornerRadius; + if(cornerRadiusTopLeft) { + query.css('border-radius', cornerRadiusTopLeft + 'px'); + borderQuery.css('border-radius', cornerRadiusTopLeft + 'px'); + } + + var outerShadow = style.outerShadow; + if(outerShadow && outerShadow.on) { + var arg = ''; + arg += outerShadow.offsetX + 'px' + ' ' + outerShadow.offsetY + 'px' + ' '; + var rgba = outerShadow.color; + arg += outerShadow.blurRadius + 'px' + ' 0px ' + _rgbaToFunc(rgba.r, rgba.g, rgba.b, rgba.a); + query.css('-moz-box-shadow', arg); + query.css('-wibkit-box-shadow', arg); + query.css('box-shadow', arg); + query.css('left', '0px'); + query.css('top', '0px'); + } + + query.css({ width: style.size.width, height: style.size.height }); + }; + + var _rgbaToFunc = function(red, green, blue, alpha) { + return 'rgba(' + red + ',' + green + ',' + blue + ',' + alpha + ')'; + }; + + //function $ax.style.GetTextIdFromShape(id) { + // return $.grep( + // $('#' + id).children().map(function (i, obj) { return obj.id; }), // all the child ids + // function (item) { return item.indexOf(id) < 0; })[0]; // that are not similar to the parent + //} + + var _getButtonShapeId = function(id) { + var obj = $obj(id); + return $ax.public.fn.IsTreeNodeObject(obj.type) ? $ax.getElementIdFromPath([obj.buttonShapeId], { relativeTo: id }) : id; + }; + + var _getButtonShape = function(id) { + var obj = $obj(id); + + // some treeNodeObjects don't have button shapes + return $jobj($ax.public.fn.IsTreeNodeObject(obj.type) && obj.buttonShapeId ? $ax.getElementIdFromPath([obj.buttonShapeId], { relativeTo: id }) : id); + }; + + var _getTextIdFromShape = $ax.style.GetTextIdFromShape = function(id) { + return _getButtonShape(id).find('.text').attr('id'); + }; + + $ax.style.GetTextIdFromLink = function(id) { + return $jobj(id).parentsUntil('.text').parent().attr('id'); + }; + + var _getShapeIdFromText = $ax.style.GetShapeIdFromText = function(id) { + if(!id) return undefined; // this is to prevent an infinite loop. + //return $jobj(id).parent().attr('id'); + var current = $jobj(id).parent(); + while(!current.is("body")) { + var currentId = current.attr('id'); + if(currentId && currentId != 'base') return $ax.visibility.getWidgetFromContainer(currentId); + current = current.parent(); + } + + return undefined; + }; + + $ax.style.GetImageIdFromShape = function(id) { + var image = _getButtonShape(id).find('img[id$=img]'); + if(!image.length) image = $jobj(id).find('img[id$=image_sketch]'); + return image.attr('id'); + }; + + var _applyImageAndTextJson = function(id, event) { + var textId = $ax.style.GetTextIdFromShape(id); + _resetTextJson(id, textId); + + // This should never be the case + //if(event != '') { + var imgQuery = $jobj($ax.style.GetImageIdFromShape(id)); + var e = imgQuery.data('events'); + if(e && e[event]) imgQuery.trigger(event); + + var imageUrl = $ax.adaptive.getImageForStateAndView(id, event); + if(imageUrl) _applyImage(id, imageUrl, event); + + var style = _computeAllOverrides(id, undefined, event, $ax.adaptive.currentViewId); + if(!$.isEmptyObject(style)) { + _applyTextStyle(textId, style); + } + + _updateStateClasses(id, event); + _updateStateClasses($ax.repeater.applySuffixToElementId(id, '_div'), event); + }; + + var _updateStateClasses = function(id, event) { + var jobj = $jobj(id); + + //if(jobj[0] && jobj[0].hasAttribute('widgetwidth')) { + // for (var x = 0; x < jobj[0].children.length; x++) { + // var childId = jobj[0].children[x].id; + // if (childId.indexOf('p') < 0) continue; + + // _updateStateClasses(childId, event) ; + // } + //} else { + for (var i = 0; i < ALL_STATES.length; i++) jobj.removeClass(ALL_STATES[i]); + if (event == 'mouseDown') jobj.addClass('mouseOver'); + jobj.addClass(event); + //} + } + + /* ------------------- + + here's the algorithm in a nutshell: + [DOWN] -- refers to navigation down the view inheritance heirarchy (default to most specific) + [UP] -- navigate up the heirarchy + + ComputeAllOverrides (object): + All view styles [DOWN] + If hyperlink + - DO ComputeStateStyle for parent object + - if (MouseOver || MouseDown) + - linkMouseOver Style + - if (MouseDown) + - linkMouseDown style + - ComputeStateStyleForViewChain (parent, STATE) + + if (MouseDown) DO ComputeStateStyleForViewChain for object, mouseOver + DO ComputeStateStyleForViewChain for object, style + + + ComputeStateStyleForViewChain (object, STATE) + FIRST STATE state style [UP] the chain OR default object STATE style + + ------------------- */ + + var FONT_PROPS = { + 'typeface': true, + 'fontName': true, + 'fontWeight': true, + 'fontStyle': true, + 'fontStretch': true, + 'fontSize': true, + 'underline': true, + 'foreGroundFill': true, + 'horizontalAlignment': true + }; + + var _computeAllOverrides = $ax.style.computeAllOverrides = function(id, parentId, state, currentViewId) { + var computedStyle = {}; + if(parentId) computedStyle = _computeAllOverrides(parentId, null, state, currentViewId); + + var diagramObject = $ax.getObjectFromElementId(id); + var viewIdChain = $ax.adaptive.getAdaptiveIdChain(currentViewId); + + var excludeFont = _shapesWithSetRichText[id]; + for(var i = 0; i < viewIdChain.length; i++) { + var viewId = viewIdChain[i]; + var style = diagramObject.adaptiveStyles[viewId]; + if(style) { + // we want to exclude the normal font style for shapes where the rich text has been set with an interaction + // so we copy the style so we don't modify the original, then delete all the font props. + if(excludeFont) { + style = $ax.deepCopy(style); + for(var prop in FONT_PROPS) delete style[prop]; + } + + if(style) { + var customStyle = style.baseStyle && $ax.document.stylesheet.stylesById[style.baseStyle]; + //make sure not to extend the customStyle this can mutate it for future use + $.extend(computedStyle, customStyle); + } + $.extend(computedStyle, style); + } + } + + var currState = NORMAL; + while(currState) { + $.extend(computedStyle, _computeStateStyleForViewChain(diagramObject, currState, viewIdChain, true)); + currState = _unprogressState(currState, state); + } + + return _removeUnsupportedProperties(computedStyle, diagramObject.type); + }; + + var _computeStateStyleForViewChain = function(diagramObject, state, viewIdChain, excludeNormal) { + var styleObject = diagramObject; + while(styleObject.isContained) styleObject = styleObject.parent; + + var adaptiveStyles = styleObject.adaptiveStyles; + + for(var i = viewIdChain.length - 1; i >= 0; i--) { + var viewId = viewIdChain[i]; + var viewStyle = adaptiveStyles[viewId]; + var stateStyle = viewStyle && _getFullStateStyle(viewStyle, state, excludeNormal); + if(stateStyle) return $.extend({}, stateStyle); + } + + // we dont want to actually include the object style because those are not overrides, hence the true for "excludeNormal" and not passing the val through + var stateStyleFromDefault = _getFullStateStyle(styleObject.style, state, true); + return $.extend({}, stateStyleFromDefault); + }; + + // returns the full effective style for an object in a state state and view + var _computeFullStyle = function(id, state, currentViewId) { + var obj = $obj(id); + var overrides = _computeAllOverrides(id, undefined, state, currentViewId); + // todo: account for image box + var objStyle = obj.style; + var customStyle = objStyle.baseStyle && $ax.document.stylesheet.stylesById[objStyle.baseStyle]; + var returnVal = $.extend({}, $ax.document.stylesheet.defaultStyle, customStyle, objStyle, overrides); + return _removeUnsupportedProperties(returnVal, obj.type); + }; + + var _removeUnsupportedProperties = function(style, objectType) { + // for now all we need to do is remove padding from checkboxes and radio buttons + if ($ax.public.fn.IsRadioButton(objectType) || $ax.public.fn.IsCheckBox(objectType)) { + style.paddingTop = 0; + style.paddingLeft = 0; + style.paddingRight = 0; + style.paddingBottom = 0; + } + return style; + }; + + var _getFullStateStyle = function(style, state, excludeNormal) { + //'normal' is needed because now DiagramObjects get their image from the Style and unapplying a rollover needs the image + var stateStyle = state == 'normal' && !excludeNormal ? style : style && style.stateStyles && style.stateStyles[state]; + if(stateStyle) { + var customStyle = stateStyle.baseStyle && $ax.document.stylesheet.stylesById[stateStyle.baseStyle]; + //make sure not to extend the customStyle this can mutate it for future use + return $.extend({}, customStyle, stateStyle); + } + return undefined; + }; + + // commented this out for now... we actually will probably need it for ie + var _applyOpacityFromStyle = $ax.style.applyOpacityFromStyle = function(id, style) { + return; + var opacity = style.opacity || ''; + $jobj(id).children().css('opacity', opacity); + }; + + var _initialize = function() { + //being handled at on window.load + //$ax.style.initializeObjectTextAlignment($ax('*')); + }; + $ax.style.initialize = _initialize; + + var _initTextAlignment = function(elementId) { + var textId = _getTextIdFromShape(elementId); + _storeIdToAlignProps(textId); + // now handle vertical alignment + if(_getObjVisible(textId)) { + _setTextAlignment(textId, _idToAlignProps[textId], false); + } + }; + + $ax.style.initializeObjectTextAlignment = function(query) { + query.filter(function(diagramObject) { + return $ax.public.fn.IsVector(diagramObject.type) || $ax.public.fn.IsImageBox(diagramObject.type); + }).each(function(diagramObject, elementId) { + if($jobj(elementId).length == 0) return; + _initTextAlignment(elementId); + }); + }; + + var _storeIdToAlignProps = function(textId) { + var shapeId = _getShapeIdFromText(textId); + var shapeObj = $obj(shapeId); + var state = _generateState(shapeId); + + var style = _computeFullStyle(shapeId, state, $ax.adaptive.currentViewId); + var vAlign = style.verticalAlignment || 'middle'; + var paddingLeft = Number(style.paddingLeft || 0); + paddingLeft += shapeObj && shapeObj.extraLeft || 0; + var paddingTop = style.paddingTop || 0; + var paddingRight = style.paddingRight || 0; + var paddingBottom = style.paddingBottom || 0; + _idToAlignProps[textId] = { vAlign: vAlign, paddingLeft: paddingLeft, paddingTop: paddingTop, paddingRight: paddingRight, paddingBottom: paddingBottom }; + }; + + var ALL_STATES = ['mouseOver', 'mouseDown', 'selected', 'disabled']; + var _applyImage = $ax.style.applyImage = function (id, imgUrl, state) { + var object = $obj(id); + if (object.generateCompound) { + for (var i = 0; i < object.compoundChildren.length; i++) { + var componentId = object.compoundChildren[i]; + var childId = $ax.public.fn.getComponentId(id, componentId); + var childImgQuery = $jobj(childId + '_img'); + var childQuery = $jobj(childId); + childImgQuery.attr('src', imgUrl[componentId]); + for (var j = 0; j < ALL_STATES.length; j++) { + childImgQuery.removeClass(ALL_STATES[j]); + childQuery.removeClass(ALL_STATES[j]); + } + if (state != 'normal') { + childImgQuery.addClass(state); + childQuery.addClass(state); + } + } + } else { + var imgQuery = $jobj($ax.style.GetImageIdFromShape(id)); + var idQuery = $jobj(id); + //it is hard to tell if setting the image or the class first causing less flashing when adding shadows. + imgQuery.attr('src', imgUrl); + for (var i = 0; i < ALL_STATES.length; i++) { + idQuery.removeClass(ALL_STATES[i]); + imgQuery.removeClass(ALL_STATES[i]); + } + if (state != 'normal') { + idQuery.addClass(state); + imgQuery.addClass(state); + } + if (imgQuery.parents('a.basiclink').length > 0) imgQuery.css('border', 'none'); + if (imgUrl.indexOf(".png") > -1) $ax.utils.fixPng(imgQuery[0]); + } + + }; + + $ax.public.fn.getComponentId = function (id, componentId) { + var idParts = id.split('-'); + idParts[0] = idParts[0] + componentId; + return idParts.join('-'); + } + + var _resetTextJson = function(id, textid) { + // reset the opacity + $jobj(id).children().css('opacity', ''); + + var cacheObject = _originalTextCache[textid]; + if(cacheObject) { + _transformTextWithVerticalAlignment(textid, function() { + var styleCache = cacheObject.styleCache; + var textQuery = $('#' + textid); + textQuery.find('*').each(function(index, element) { + element.style.cssText = styleCache[element.id]; + }); + }); + } + }; + + // Preserves the alingment for the element textid after executing transformFn + + var _getRtfElementHeight = function(rtfElement) { + if(rtfElement.innerHTML == '') rtfElement.innerHTML = ' '; + + // To handle render text as image + var images = $(rtfElement).children('img'); + if(images.length) return images.height(); + return rtfElement.offsetHeight; + }; + + // why microsoft decided to default to round to even is beyond me... + var _roundToEven = function(number) { + var numString = number.toString(); + var parts = numString.split('.'); + if(parts.length == 1) return number; + if(parts[1].length == 1 && parts[1] == '5') { + var wholePart = Number(parts[0]); + return wholePart % 2 == 0 ? wholePart : wholePart + 1; + } else return Math.round(number); + }; + + var _transformTextWithVerticalAlignment = $ax.style.transformTextWithVerticalAlignment = function(textId, transformFn) { + if(!_originalTextCache[textId]) { + $ax.style.CacheOriginalText(textId); + } + + var rtfElement = window.document.getElementById(textId); + if(!rtfElement) return; + + transformFn(); + + _storeIdToAlignProps(textId); + + $ax.style.updateTextAlignmentForVisibility(textId); + }; + + // this is for vertical alignments set on hidden objects + var _idToAlignProps = {}; + + _style.checkAlignmentQueue = function (id) { + var index = queuedTextToAlign.indexOf(id); + if (index != -1) { + $ax.splice(queuedTextToAlign, index, 1); + _style.updateTextAlignmentForVisibility(id); + } + } + + var queuedTextToAlign = []; + $ax.style.updateTextAlignmentForVisibility = function (textId) { + var textObj = $jobj(textId); + // must check if parent id exists. Doesn't exist for text objs in check boxes, and potentially elsewhere. + var parentId = textObj.parent().attr('id'); + if (parentId && $ax.visibility.isContainer(parentId)) { + if (queuedTextToAlign.indexOf(textId) == -1) queuedTextToAlign.push(textId); + return; + } + + var alignProps = _idToAlignProps[textId]; + if(!alignProps || !_getObjVisible(textId)) return; + + _setTextAlignment(textId, alignProps); + }; + + var _getObjVisible = _style.getObjVisible = function(id) { + var element = document.getElementById(id); + return element && (element.offsetWidth || element.offsetHeight); + }; + + var _setTextAlignment = function (textId, alignProps, updateProps) { + if(updateProps) { + _storeIdToAlignProps(textId); + } + if(!alignProps) return; + + var vAlign = alignProps.vAlign; + var paddingTop = Number(alignProps.paddingTop); + var paddingBottom = Number(alignProps.paddingBottom); + var paddingLeft = Number(alignProps.paddingLeft); + var paddingRight = Number(alignProps.paddingRight); + + var topParam = 0.0; + var bottomParam = 1.0; + var leftParam = 0.0; + var rightParam = 1.0; + + var textObj = $jobj(textId); + var textHeight = _getRtfElementHeight(textObj[0]); + var textObjParent = textObj.offsetParent(); + var parentId = textObjParent.attr('id'); + var isConnector = false; + if(parentId) { + parentId = $ax.visibility.getWidgetFromContainer(textObjParent.attr('id')); + textObjParent = $jobj(parentId); + var parentObj = $obj(parentId); + if (parentObj['bottomTextPadding']) bottomParam = parentObj['bottomTextPadding']; + if (parentObj['topTextPadding']) topParam = parentObj['topTextPadding']; + if (parentObj['leftTextPadding']) leftParam = parentObj['leftTextPadding']; + if (parentObj['rightTextPadding']) rightParam = parentObj['rightTextPadding']; + + // for now all this smart shapes weird shit is mutually exclusive from compound vectors. + + isConnector = parentObj.type == $ax.constants.CONNECTOR_TYPE; + } + if (isConnector) return; + + var axTextObjectParent = $ax('#' + textObjParent.attr('id')); + + var oldWidth = $ax.getNumFromPx(textObj.css('width')); + var oldLeft = $ax.getNumFromPx(textObj.css('left')); + var oldTop = $ax.getNumFromPx(textObj.css('top')); + + var newTop = 0; + var newLeft = 0.0; + + var width = axTextObjectParent.width(); + var height = axTextObjectParent.height(); + + // If text rotated need to handle getting the correct width for text based on bounding rect of rotated parent. + var boundingRotation = -$ax.move.getRotationDegree(textId); + var boundingParent = $axure.fn.getBoundingSizeForRotate(width, height, boundingRotation); + var extraLeftPadding = (width - boundingParent.width) / 2; + width = boundingParent.width; + var relativeTop = 0.0; + relativeTop = height * topParam; + var containerHeight = height * bottomParam - relativeTop; + + if (vAlign == "middle") newTop = _roundToEven(relativeTop + (containerHeight - textHeight + paddingTop - paddingBottom) / 2); + else if (vAlign == "bottom") newTop = _roundToEven(relativeTop + containerHeight - textHeight - paddingBottom); + else newTop = _roundToEven(paddingTop + relativeTop); + + newLeft = paddingLeft + extraLeftPadding + width * leftParam; + + var newWidth = width * (rightParam - leftParam) - paddingLeft - paddingRight; + var vertChange = oldTop != newTop; + if (vertChange) textObj.css('top', newTop + 'px'); + + var horizChange = newWidth != oldWidth || newLeft != oldLeft; + if (horizChange) { + textObj.css('left', newLeft); + textObj.width(newWidth); + } + if ((vertChange || horizChange)) _updateTransformOrigin(textId); + }; + + var _updateTransformOrigin = function(textId) { + var textObj = $jobj(textId); + var transformOrigin = textObj.css('-webkit-transform-origin') || + textObj.css('-moz-transform-origin') || + textObj.css('-ms-transform-origin') || + textObj.css('transform-origin'); + if(transformOrigin) { + var textObjParent = $ax('#' + textObj.parent().attr('id')); + var newX = (textObjParent.width() / 2 - textObj.css('left').replace('px', '')); + var newY = (textObjParent.height() / 2 - textObj.css('top').replace('px', '')); + var newOrigin = newX + 'px ' + newY + 'px'; + textObj.css('-webkit-transform-origin', newOrigin); + textObj.css('-moz-transform-origin', newOrigin); + textObj.css('-ms-transform-origin', newOrigin); + textObj.css('transform-origin', newOrigin); + } + }; + + $ax.style.reselectElements = function() { + for(var id in _selectedWidgets) { + // Only looking for the selected widgets that don't have their class set + if(!_selectedWidgets[id] || $jobj(id).hasClass('selected')) continue; + + $jobj(id).addClass('selected'); + _applyImageAndTextJson(id, $ax.style.generateState(id)); + } + + for(id in _disabledWidgets) { + // Only looking for the disabled widgets that don't have their class yet + if (!_disabledWidgets[id] || $jobj(id).hasClass('disabled')) continue; + + $jobj(id).addClass('disabled'); + _applyImageAndTextJson(id, $ax.style.generateState(id)); + } + } + + $ax.style.clearAdaptiveStyles = function() { + for(var shapeId in _adaptiveStyledWidgets) { + var elementIds = [shapeId]; + var repeaterId = $ax.getParentRepeaterFromScriptId(shapeId); + if(repeaterId) { + var itemIds = $ax.getItemIdsForRepeater(repeaterId); + elementIds = []; + for(var i = 0; i < itemIds; i++) elementIds.push($ax.repeater.createElementId(shapeId, itemIds[i])); + } + for(var index = 0; index < elementIds.length; index++) { + var elementId = _getButtonShapeId(elementIds[index]); + if(elementId) { + var textId = $ax.style.GetTextIdFromShape(elementId); + _resetTextJson(elementId, textId); + _applyImageAndTextJson(elementId, $ax.style.generateState(elementId)); + } + } + } + + _adaptiveStyledWidgets = {}; + }; + + $ax.style.setAdaptiveStyle = function(shapeId, style) { + _adaptiveStyledWidgets[$ax.repeater.getScriptIdFromElementId(shapeId)] = style; + + var textId = $ax.style.GetTextIdFromShape(shapeId); + if(textId) _applyTextStyle(textId, style); + + $ax.placeholderManager.refreshPlaceholder(shapeId); + + // removing this for now + // if(style.location) { + // $jobj(shapeId).css('top', style.location.x + "px") + // .css('left', style.location.y + "px"); + // } + }; + + //------------------------------------------------------------------------- + // _applyTextStyle + // + // Applies a rollover style to a text element. + // id : the id of the text object to set. + // styleProperties : an object mapping style properties to values. eg: + // { 'fontWeight' : 'bold', + // 'fontStyle' : 'italic' } + //------------------------------------------------------------------------- + var _applyTextStyle = function(id, style) { + _transformTextWithVerticalAlignment(id, function() { + var styleProperties = _getCssStyleProperties(style); + $('#' + id).find('*').each(function(index, element) { + _applyCssProps(element, styleProperties); + }); + }); + }; + + var _applyCssProps = function(element, styleProperties, applyAllStyle) { + if(applyAllStyle) { + var allProps = styleProperties.allProps; + for(var prop in allProps) element.style[prop] = allProps[prop]; + } else { + var nodeName = element.nodeName.toLowerCase(); + if(nodeName == 'p') { + var parProps = styleProperties.parProps; + for(prop in parProps) element.style[prop] = parProps[prop]; + } else if(nodeName != 'a') { + var runProps = styleProperties.runProps; + for(prop in runProps) element.style[prop] = runProps[prop]; + } + } + }; + + var _getCssShadow = function(shadow) { + return !shadow.on ? "none" + : shadow.offsetX + "px " + shadow.offsetY + "px " + shadow.blurRadius + "px " + _getCssColor(shadow.color); + }; + + var _getCssStyleProperties = function(style) { + var toApply = {}; + toApply.runProps = {}; + toApply.parProps = {}; + toApply.allProps = {}; + + if(style.fontName) toApply.allProps.fontFamily = toApply.runProps.fontFamily = style.fontName; + // we need to set font size on both runs and pars because otherwise it well mess up the measure and thereby vertical alignment + if(style.fontSize) toApply.allProps.fontSize = toApply.runProps.fontSize = toApply.parProps.fontSize = style.fontSize; + if(style.fontWeight !== undefined) toApply.allProps.fontWeight = toApply.runProps.fontWeight = style.fontWeight; + if(style.fontStyle !== undefined) toApply.allProps.fontStyle = toApply.runProps.fontStyle = style.fontStyle; + if(style.underline !== undefined) toApply.allProps.textDecoration = toApply.runProps.textDecoration = style.underline ? 'underline' : 'none'; + if(style.foreGroundFill) { + toApply.allProps.color = toApply.runProps.color = _getColorFromFill(style.foreGroundFill); + //if(style.foreGroundFill.opacity) toApply.allProps.opacity = toApply.runProps.opacity = style.foreGroundFill.opacity; + } + if(style.horizontalAlignment) toApply.allProps.textAlign = toApply.parProps.textAlign = toApply.runProps.textAlign = style.horizontalAlignment; + if(style.lineSpacing) toApply.allProps.lineHeight = toApply.parProps.lineHeight = style.lineSpacing; + if(style.textShadow) toApply.allProps.textShadow = toApply.parProps.textShadow = _getCssShadow(style.textShadow); + + return toApply; + }; + + var _getColorFromFill = function(fill) { + //var fillString = '00000' + fill.color.toString(16); + //return '#' + fillString.substring(fillString.length - 6); + var val = fill.color; + var color = {}; + color.b = val % 256; + val = Math.floor(val / 256); + color.g = val % 256; + val = Math.floor(val / 256); + color.r = val % 256; + color.a = typeof (fill.opacity) == 'number' ? fill.opacity : 1; + return _getCssColor(color); + }; + + var _getCssColor = function(rgbaObj) { + return "rgba(" + rgbaObj.r + ", " + rgbaObj.g + ", " + rgbaObj.b + ", " + rgbaObj.a + ")"; + }; + + // //-------------------------------------------------------------------------- + // // ApplyStyleRecursive + // // + // // Applies a style recursively to all span and div tags including elementNode + // // and all of its children. + // // + // // element : the element to apply the style to + // // styleName : the name of the style property to set (eg. 'font-weight') + // // styleValue : the value of the style to set (eg. 'bold') + // //-------------------------------------------------------------------------- + // function ApplyStyleRecursive(element, styleName, styleValue) { + // var nodeName = element.nodeName.toLowerCase(); + + // if (nodeName == 'div' || nodeName == 'span' || nodeName == 'p') { + // element.style[styleName] = styleValue; + // } + + // for (var i = 0; i < element.childNodes.length; i++) { + // ApplyStyleRecursive(element.childNodes[i], styleName, styleValue); + // } + // } + + // //--------------------------------------------------------------------------- + // // ApplyTextProperty + // // + // // Applies a text property to rtfElement. + // // + // // rtfElement : the the root text element of the rtf object (this is the + // // element named _rtf + // // prop : the style property to set. + // // value : the style value to set. + // //--------------------------------------------------------------------------- + // function ApplyTextProperty(rtfElement, prop, value) { + // /* + // var oldHtml = rtfElement.innerHTML; + // if (prop == 'fontWeight') { + // rtfElement.innerHTML = oldHtml.replace(/< *b *\/?>/gi, ""); + // } else if (prop == 'fontStyle') { + // rtfElement.innerHTML = oldHtml.replace(/< *i *\/?>/gi, ""); + // } else if (prop == 'textDecoration') { + // rtfElement.innerHTML = oldHtml.replace(/< *u *\/?>/gi, ""); + // } + // */ + + // for (var i = 0; i < rtfElement.childNodes.length; i++) { + // ApplyStyleRecursive(rtfElement.childNodes[i], prop, value); + // } + // } + //} + + //--------------------------------------------------------------------------- + // GetAndCacheOriginalText + // + // Gets the html for the pre-rollover state and returns the Html representing + // the Rich text. + //--------------------------------------------------------------------------- + var CACHE_COUNTER = 0; + + $ax.style.CacheOriginalText = function(textId, hasRichTextBeenSet) { + var rtfQuery = $('#' + textId); + if(rtfQuery.length > 0) { + + var styleCache = {}; + rtfQuery.find('*').each(function(index, element) { + var elementId = element.id; + if(!elementId) element.id = elementId = 'cache' + CACHE_COUNTER++; + styleCache[elementId] = element.style.cssText; + }); + + _originalTextCache[textId] = { + styleCache: styleCache + }; + if(hasRichTextBeenSet) { + var shapeId = _getShapeIdFromText(textId); + _shapesWithSetRichText[shapeId] = true; + } + } + }; + + $ax.style.ClearCacheForRepeater = function(repeaterId) { + for(var elementId in _originalTextCache) { + var scriptId = $ax.repeater.getScriptIdFromElementId(elementId); + if($ax.getParentRepeaterFromScriptId(scriptId) == repeaterId) delete _originalTextCache[elementId]; + } + }; + + + + $ax.style.prefetch = function() { + var scriptIds = $ax.getAllScriptIds(); + var image = new Image(); + for(var i = 0; i < scriptIds.length; i++) { + var obj = $obj(scriptIds[i]); + if (!$ax.public.fn.IsImageBox(obj.type)) continue; + var images = obj.images; + for (var key in images) image.src = images[key]; + + var imageOverrides = obj.imageOverrides; + for(var elementId in imageOverrides) { + var override = imageOverrides[elementId]; + for (var state in override) { + _addImageOverride(elementId, state, override[state]); + image.src = override[state]; + } + } + } + }; +}); \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/tree.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/tree.js" new file mode 100644 index 0000000..5646d0a --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/tree.js" @@ -0,0 +1,186 @@ +锘// This is actually for BOTH trees and menus +$axure.internal(function($ax) { + var _tree = $ax.tree = {}; + var _menu = $ax.menu = {}; + + $ax.menu.InitializeSubmenu = function(subMenuId, cellId) { + var $submenudiv = $('#' + subMenuId); + + //mouseenter and leave for parent table cell + $('#' + cellId).mouseenter(function(e) { + //show current submenu +// var submenuElement = document.getElementById(subMenuId); +// if($ax.visibility.IsVisible(submenuElement) && submenuElement.style.display !== 'none') return; + $ax.visibility.SetIdVisible(subMenuId, true); + $ax.legacy.BringToFront(subMenuId); + _fireEventForSubmenu(subMenuId, "onShow"); + + }).mouseleave(function (e) { + var offset = $submenudiv.offset(); + var subcontwidth = $submenudiv.width(); + var subcontheight = $submenudiv.height(); + //If mouse is not within the submenu (added 3 pixel margin to top and left calculations), then close the submenu... + if(e.pageX + 3 < offset.left || e.pageX > offset.left + subcontwidth || e.pageY + 3 < offset.top || e.pageY > offset.top + subcontheight) { + $submenudiv.find('.sub_menu').andSelf().each(function () { +// if(!$ax.visibility.IsVisible(this)) return; + $ax.visibility.SetVisible(this, false); + _fireEventForSubmenu(subMenuId, "onHide"); + }); + $ax.style.SetWidgetHover(cellId, false); + } + }); + + $submenudiv.css('display', 'none'); + + //mouseleave for submenu + $submenudiv.mouseleave(function(e) { + //close this menu and all menus below it + $(this).find('.sub_menu').andSelf().css({ 'visibility': 'hidden', 'display': 'none' }).each(function () { +// if(!$ax.visibility.IsVisible(this)) return; + _fireEventForSubmenu(this.id, "onHide"); + }); + $ax.style.SetWidgetHover(cellId, false); + }); + }; + + var _fireEventForSubmenu = function(targetId, eventName) { + var diagramObject = $ax.getObjectFromElementId(targetId); + var event = diagramObject.interactionMap && diagramObject.interactionMap[eventName]; + if(event) { + var eventInfo = $ax.getEventInfoFromEvent($ax.getjBrowserEvent(), false, targetId); + $ax.event.handleEvent(targetId, eventInfo, event, false, true); + } + } + + function IsNodeVisible(nodeId) { + var current = window.document.getElementById(nodeId); + var parent = current.parentNode; + + //move all the parent's children that are below the node and their annotations + while(!$(current).hasClass("treeroot")) { + if(!$ax.visibility.IsVisible(parent)) return false; + current = parent; + parent = parent.parentNode; + } + return true; + } + + $ax.tree.ExpandNode = function(nodeId, childContainerId, plusMinusId) { + var container = window.document.getElementById(childContainerId); + if(!container || $ax.visibility.IsVisible(container)) return; + $ax.visibility.SetVisible(container, true); + + if(plusMinusId != '') $ax.style.SetWidgetSelected(plusMinusId, true); + + var delta = _getExpandCollapseDelta(nodeId, childContainerId); + + var isVisible = IsNodeVisible(nodeId); + var current = window.document.getElementById(nodeId); + var parent = current.parentNode; + + //move all the parent's children that are below the node and their annotations + while(!$(current).hasClass("treeroot")) { + var after = false; + var i = 0; + for(i = 0; i < parent.childNodes.length; i++) { + var child = parent.childNodes[i]; + if(after && child.id && $(child).hasClass("treenode")) { + var elementId = child.id; + child.style.top = Number($(child).css('top').replace("px", "")) + delta + 'px'; + var ann = window.document.getElementById(elementId + "_ann"); + if(ann) ann.style.top = Number($(ann).css('top').replace("px", "")) + delta + 'px'; + } + if(child == current) after = true; + } + current = parent; + parent = parent.parentNode; + if(!isVisible && $ax.visibility.IsVisible(parent)) break; + } + }; + + $ax.tree.CollapseNode = function(nodeId, childContainerId, plusMinusId) { + var container = window.document.getElementById(childContainerId); + if(!container || !$ax.visibility.IsVisible(container)) return; + + if(plusMinusId != '') $ax.style.SetWidgetSelected(plusMinusId, false); + + var delta = _getExpandCollapseDelta(nodeId, childContainerId); + + //hide it after getting the delta, otherwise the delta can't be calculated (offsetParent is null) + $ax.visibility.SetVisible(container, false); + + var isVisible = IsNodeVisible(nodeId); + var current = window.document.getElementById(nodeId); + var parent = current.parentNode; + + //move all the parent's children that are below the node and their annotations + while(!$(current).hasClass("treeroot")) { + var after = false; + var i = 0; + for(i = 0; i < parent.childNodes.length; i++) { + var child = parent.childNodes[i]; + if(after && child.id && $(child).hasClass("treenode")) { + var elementId = child.id; + child.style.top = Number($(child).css('top').replace("px", "")) - delta + 'px'; + var ann = window.document.getElementById(elementId + "_ann"); + if(ann) ann.style.top = Number($(ann).css('top').replace("px", "")) - delta + 'px'; + } + if(child == current) after = true; + } + current = parent; + parent = current.parentNode; + if(!isVisible && $ax.visibility.IsVisible(parent)) break; + } + }; + + var _getExpandCollapseDelta = function(nodeId, childContainerId) { + return _getChildContainerHeightHelper(childContainerId); + }; + + var _getChildContainerHeightHelper = function(childContainerId) { + var height = 0; + $('#' + childContainerId).children().each(function() { + if($(this).hasClass("treenode")) { + height += $(this).height(); + var subContainer = window.document.getElementById(this.id + '_children'); + if(subContainer && $ax.visibility.IsVisible(subContainer)) { + height += _getChildContainerHeightHelper(subContainer.id); + } + } + }); + return height; + }; + + $ax.tree.InitializeTreeNode = function(nodeId, plusminusid, childContainerId, selectText) { + var childContainer = window.document.getElementById(childContainerId); + if(childContainer) { + //relying on the html generator to put this inline so we know to collapse by default + var isCollapsed = childContainer.style.visibility == "hidden"; + if(isCollapsed) $ax.visibility.SetVisible(childContainer, false); + + if(!isCollapsed && plusminusid != '') $ax.style.SetWidgetSelected(plusminusid, true); + } + + if(plusminusid != '') { + $jobj(plusminusid).click(function() { + var visibleSet = $ax.visibility.IsIdVisible(childContainerId); + + if(visibleSet) $ax.tree.CollapseNode(nodeId, childContainerId, plusminusid); + else $ax.tree.ExpandNode(nodeId, childContainerId, plusminusid); + $ax.tree.SelectTreeNode(nodeId, true); + + return false; + }).css('cursor', 'default'); + } + }; + + var _getButtonShapeId = function(id) { + var obj = $obj(id); + return $ax.public.fn.IsTreeNodeObject(obj.type) ? $ax.getElementIdFromPath([obj.buttonShapeId], { relativeTo: id }) : id; + }; + + $ax.tree.SelectTreeNode = function(id, selected) { + $ax.style.SetWidgetSelected(_getButtonShapeId(id), selected); + }; + +}); \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/utils.temp.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/utils.temp.js" new file mode 100644 index 0000000..4bdb50a --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/utils.temp.js" @@ -0,0 +1,100 @@ +锘// ******* Deep Copy ******** // +$axure.internal(function($ax) { + // TODO: [ben] Ah, infinite loops cause major issues here. Tried saving objects we've already hit, but that didn't seem to work (at least at my first shot). + var _deepCopy = function(original, trackCopies) { + if(trackCopies) { + var index = _getCopyIndex(original); + if(index != -1) return _originalToCopy[index][1]; + } + var isArray = original instanceof Array; + var isObject = !(original instanceof Function) && !(original instanceof Date) && (original instanceof Object); + if(!isArray && !isObject) return original; + var copy = isArray ? [] : { }; + if(trackCopies) _originalToCopy.push([original, copy]); + isArray ? deepCopyArray(original, trackCopies, copy) : deepCopyObject(original, trackCopies, copy); + return copy; + }; + $ax.deepCopy = _deepCopy; + + // Hacky way to copy event info. Copying dragInfo causes major issues due to infinite loops + // Hashmap doesn't map objects well. It just toStrings them, making them all the same key. This has to be slow... + var _originalToCopy = []; + var _getCopyIndex = function(original) { + for(var i = 0; i < _originalToCopy.length; i++) if(original === _originalToCopy[i][0]) return i; + return -1; + }; + + $ax.eventCopy = function(eventInfo) { + var dragInfo = eventInfo.dragInfo; + delete eventInfo.dragInfo; + var copy = _deepCopy(eventInfo, true); + copy.dragInfo = dragInfo; + eventInfo.dragInfo = dragInfo; + // reset the map. + _originalToCopy = []; + + return copy; + }; + + var deepCopyArray = function(original, trackCopies, copy) { + for(var i = 0; i < original.length; i++) { + copy[i] = _deepCopy(original[i], trackCopies); + } + }; + + var deepCopyObject = function(original, trackCopies, copy) { + for(var key in original) { + if(!original.hasOwnProperty(key)) continue; + copy[key] = _deepCopy(original[key], trackCopies); + } + }; + + // Our implementation of splice because it is broken in IE8... + $ax.splice = function(array, startIndex, count) { + var retval = []; + if(startIndex >= array.length || startIndex < 0 || count == 0) return retval; + if(!count || startIndex + count > array.length) count = array.length - startIndex; + for(var i = 0; i < count; i++) retval[i] = array[startIndex + i]; + for(i = startIndex + count; i < array.length; i++) array[i - count] = array[i]; + for(i = 0; i < count; i++) array.pop(); + return retval; + }; +}); + + + +// ******* Flow Shape Links ******** // +$axure.internal(function($ax) { + + if(!$ax.document.configuration.linkFlowsToPages && !$ax.document.configuration.linkFlowsToPagesNewWindow) return; + + $(window.document).ready(function() { + $ax(function (dObj) { return ($ax.public.fn.IsVector(dObj.type) || $ax.public.fn.IsSnapshot(dObj.type)) && dObj.referencePageUrl; }).each(function (dObj, elementId) { + + var elementIdQuery = $('#' + elementId); + + if($ax.document.configuration.linkFlowsToPages && !$ax.event.HasClick(dObj)) { + elementIdQuery.css("cursor", "pointer"); + elementIdQuery.click(function() { + $ax.navigate({ + url: dObj.referencePageUrl, + target: "current", + includeVariables: true + }); + }); + } + + if($ax.document.configuration.linkFlowsToPagesNewWindow) { + $('#' + elementId + "_ref").append("
    "); + $('#' + elementId + "PagePopup").click(function() { + $ax.navigate({ + url: dObj.referencePageUrl, + target: "new", + includeVariables: true + }); + }); + } + }); + }); + +}); diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/variables.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/variables.js" new file mode 100644 index 0000000..19a26f8 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/variables.js" @@ -0,0 +1,151 @@ +锘// ******* GLOBAL VARIABLE PROVIDER ******** // +$axure.internal(function($ax) { + var _globalVariableValues = {}; + + var _globalVariableProvider = {}; + $ax.globalVariableProvider = _globalVariableProvider; + + var setVariableValue = function(variable, value, suppressBroadcast) { + if(!(value instanceof Object)) value = value.toString(); + + variable = variable.toLowerCase(); + _globalVariableValues[variable] = value; + + if(suppressBroadcast !== true) { + var varData = { + globalVarName: variable, + globalVarValue: value.toString() + }; + + $axure.messageCenter.postMessage('setGlobalVar', varData); + } + + //Post global var values only if pageData is loaded (suppresses exception which occurs when page loads) + if($ax.pageData) { + _postGlobalVarVals(); + } + }; + _globalVariableProvider.setVariableValue = setVariableValue; + + var getVariableValue = function(variable, eventInfo, ignoreDefaultsForLinkUrl) { + variable = variable.toLowerCase(); + if(_globalVariableValues[variable] !== undefined) { + //If this is for the GetLinkUrl function and + //the current value of the global variable is the same as the default defined in the document, don't return it + if(ignoreDefaultsForLinkUrl == true && $ax.document.globalVariables[variable] == _globalVariableValues[variable]) { + return null; + } + + return _globalVariableValues[variable]; + } + if($ax.document.globalVariables[variable] !== undefined) return ignoreDefaultsForLinkUrl == true ? null : $ax.document.globalVariables[variable]; + switch(variable) { + case "pagename": return $ax.pageData.page.name; + + case "now": return eventInfo.now; + case "gendate": return $ax.pageData.generationDate; + + case "dragx": return $ax.drag.GetDragX(); + case "dragy": return $ax.drag.GetDragY(); + case "totaldragx": return $ax.drag.GetTotalDragX(); + case "totaldragy": return $ax.drag.GetTotalDragY(); + case "dragtime": return $ax.drag.GetDragTime(); + + case "math": return Math; + case "date": return Date; + + case "window": return eventInfo && eventInfo.window; + case "this": return eventInfo && eventInfo.thiswidget && $ax.getWidgetInfo(eventInfo.thiswidget.elementId); + case "item": return (eventInfo && eventInfo.item && eventInfo.item.valid && eventInfo.item) || getVariableValue('targetitem', eventInfo, ignoreDefaultsForLinkUrl); + case "targetitem": return eventInfo && eventInfo.targetElement && $ax.getItemInfo(eventInfo.targetElement); + case "repeater": return eventInfo && eventInfo.repeater; + case "target": return eventInfo && eventInfo.targetElement && $ax.getWidgetInfo(eventInfo.targetElement); + case "cursor": return eventInfo && eventInfo.cursor; + default: + var gen = variable.substr(0, 3) == "gen"; + var date = gen ? $ax.pageData.generationDate : new Date(); + var prop = gen ? variable.substr(3) : variable; + switch(prop) { + case "day": return date.getDate(); + case "month": return date.getMonth() + 1; + case "monthname": return $ax.getMonthName(date.getMonth()); + case "dayofweek": return $ax.getDayOfWeek(date.getDay()); + case "year": return date.getFullYear(); + case "time": return date.toLocaleTimeString(); + case "hours": return date.getHours(); + case "minutes": return date.getMinutes(); + case "seconds": return date.getSeconds(); + default: return ''; + } + } + }; + _globalVariableProvider.getVariableValue = getVariableValue; + + var load = function() { + var csum = false; + + var query = (window.location.href.split("#")[1] || ''); //hash.substring(1); Firefox decodes this so & in variables breaks + if(query.length > 0) { + var vars = query.split("&"); + for(var i = 0; i < vars.length; i++) { + var pair = vars[i].split("="); + var varName = pair[0]; + var varValue = pair[1]; + if(varName) { + if(varName == 'CSUM') { + csum = true; + } else setVariableValue(varName, decodeURIComponent(varValue), true); + } + } + + if(!csum && query.length > 250) { + window.alert('Axure Warning: The variable values were too long to pass to this page.\n\nIf you are using IE, using Chrome or Firefox will support more data.'); + } + } + }; + + var getLinkUrl = function(baseUrl) { + var toAdd = ''; + var definedVariables = _getDefinedVariables(); + for(var i = 0; i < definedVariables.length; i++) { + var key = definedVariables[i]; + var val = getVariableValue(key, undefined, true); + if(val != null) { + if(toAdd.length > 0) toAdd += '&'; + toAdd += key + '=' + encodeURIComponent(val); + } + } + return toAdd.length > 0 ? baseUrl + ($axure.shouldSendVarsToServer() ? '?' : '#') + toAdd + "&CSUM=1" : baseUrl; + }; + _globalVariableProvider.getLinkUrl = getLinkUrl; + + var _getDefinedVariables = function() { + return $ax.pageData.variables; + }; + _globalVariableProvider.getDefinedVariables = _getDefinedVariables; + + var _postGlobalVarVals = function() { + var retVal = {}; + var definedVariables = _getDefinedVariables(); + for(var i = 0; i < definedVariables.length; i++) { + var key = definedVariables[i]; + var val = getVariableValue(key); + if(val != null) { + retVal[key] = val; + } + } + + $ax.messageCenter.postMessage('globalVariableValues', retVal); + }; + + $ax.messageCenter.addMessageListener(function(message, data) { + if(message == 'getGlobalVariables') { + _postGlobalVarVals(); + } else if(message == 'resetGlobalVariables') { + _globalVariableValues = {}; + _postGlobalVarVals(); + } + }); + + load(); +}); \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/viewer.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/viewer.js" new file mode 100644 index 0000000..df653aa --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/viewer.js" @@ -0,0 +1,80 @@ +锘// ******* SITEMAP TOOLBAR VIEWER ACTIONS ******** // +$axure.internal(function ($ax) { + var userTriggeredEventNames = ['onClick', 'onDoubleClick', 'onMouseOver', 'onMouseMove', 'onMouseOut', 'onMouseDown', 'onMouseUp', + 'onKeyDown', 'onKeyUp', 'onFocus', 'onLostFocus', 'onTextChange', 'onSelectionChange', 'onSelectedChange', 'onSelect', 'onUnselect', + 'onSwipeLeft', 'onSwipeRight', 'onSwipeUp', 'onSwipeDown', 'onDragStart', 'onDrag', 'onDragDrop', 'onScroll', 'onContextMenu', 'onMouseHover', 'onLongClick']; + + $ax.messageCenter.addMessageListener(function(message, data) { + //If annotation toggle message received from sitemap, toggle footnotes + if(message == 'annotationToggle') { + if(data == true) { + $('div.annotation').show(); + $('div.annnotelabel').show(); + $('div.annnoteimage').show(); + } else { + $('div.annotation').hide(); + $('div.annnotelabel').hide(); + $('div.annnoteimage').hide(); + } + } + }); + + var lastSelectedWidgetNote; + $ax.messageCenter.addMessageListener(function (message, data) { + //If annotation toggle message received from sitemap, toggle footnotes + if(message == 'toggleSelectWidgetNote') { + if(lastSelectedWidgetNote == data) { + $('#' + lastSelectedWidgetNote).removeClass('widgetNoteSelected'); + lastSelectedWidgetNote = null; + return; + } + + if(lastSelectedWidgetNote) $('#' + lastSelectedWidgetNote).removeClass('widgetNoteSelected'); + $('#' + data).addClass('widgetNoteSelected'); + lastSelectedWidgetNote = data; + } + }); + + var highlightEnabled = false; + $ax.messageCenter.addMessageListener(function(message, data) { + if(message == 'highlightInteractive') { + highlightEnabled = data == true; + _applyHighlight($ax('*')); + } + }); + + var _applyHighlight = $ax.applyHighlight = function(query, ignoreUnset) { + if(ignoreUnset && !highlightEnabled) return; + + //Do condition to check if legacy browser (all IE, except 10) and select appropriate pulsate css class name + var userAgentString = navigator.userAgent.toLowerCase(); + + var isIEpre10 = userAgentString.indexOf('msie 9.') != -1 || + userAgentString.indexOf('msie 8.') != -1 || + userAgentString.indexOf('msie 7.') != -1 || + userAgentString.indexOf('msie 6.') != -1; + + var pulsateClassName = 'legacyPulsateBorder'; + + //Find all widgets with a defined userTriggeredEventName specified in the array above + var $matchingElements = query.filter(function(obj) { + if(obj.interactionMap) { + for(var index in userTriggeredEventNames) { + if(obj.interactionMap[userTriggeredEventNames[index]]) return true; + } + } else if ($ax.public.fn.IsVector(obj.type) && obj.referencePageUrl) { + return true; + } + return false; + }).$(); + + var isHighlighted = $matchingElements.is('.' + pulsateClassName); + + //Toggle the pulsate class on the matched elements + if(highlightEnabled && !isHighlighted) { + $matchingElements.addClass(pulsateClassName); + } else if(!highlightEnabled && isHighlighted) { + $matchingElements.removeClass(pulsateClassName); + } + }; +}); \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/visibility.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/visibility.js" new file mode 100644 index 0000000..97379ac --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axure/visibility.js" @@ -0,0 +1,1103 @@ +锘$axure.internal(function($ax) { + var document = window.document; + var _visibility = {}; + $ax.visibility = _visibility; + + var _defaultHidden = {}; + var _defaultLimbo = {}; + + // ****************** Visibility and State Functions ****************** // + + var _isIdVisible = $ax.visibility.IsIdVisible = function(id) { + return $ax.visibility.IsVisible(window.document.getElementById(id)); + }; + + $ax.visibility.IsVisible = function(element) { + //cannot use css('visibility') because that gets the effective visiblity + //e.g. won't be able to set visibility on panels inside hidden panels + return element.style.visibility != 'hidden'; + }; + + $ax.visibility.SetIdVisible = function(id, visible) { + $ax.visibility.SetVisible(window.document.getElementById(id), visible); + // Hide lightbox if necessary + if(!visible) { + $jobj($ax.repeater.applySuffixToElementId(id, '_lightbox')).remove(); + $ax.flyoutManager.unregisterPanel(id, true); + } + }; + + var _setAllVisible = function(query, visible) { + for(var i = 0; i < query.length; i++) _visibility.SetVisible(query[i], visible); + } + + $ax.visibility.SetVisible = function(element, visible) { + //todo -- ahhhh! I really don't want to add this, I don't know why it is necessary (right now sliding panel state out then in then out breaks + //and doesn't go hidden on the second out if we do not set display here. + if(visible) { + //hmmm i will need to remove the class here cause display will not be overwriten by set to '' + if($(element).hasClass(HIDDEN_CLASS)) $(element).removeClass(HIDDEN_CLASS); + if($(element).hasClass(UNPLACED_CLASS)) $(element).removeClass(UNPLACED_CLASS); + element.style.display = ''; + element.style.visibility = 'visible'; + } else { + element.style.display = 'none'; + element.style.visibility = 'hidden'; + } + }; + + var _setWidgetVisibility = $ax.visibility.SetWidgetVisibility = function (elementId, options) { + var visible = $ax.visibility.IsIdVisible(elementId); + // If limboed, just fire the next action then leave. + if(visible == options.value || _limboIds[elementId]) { + if(!_limboIds[elementId]) options.onComplete && options.onComplete(); + $ax.action.fireAnimationFromQueue(elementId, $ax.action.queueTypes.fade); + return; + } + + options.containInner = true; + var query = $jobj(elementId); + var parentId = query.parent().attr('id'); + var axObj = $obj(elementId); + var preserveScroll = false; + var isPanel = $ax.public.fn.IsDynamicPanel(axObj.type); + var isLayer = $ax.public.fn.IsLayer(axObj.type); + if(isPanel || isLayer) { + //if dp has scrollbar, save its scroll position + if(isPanel && axObj.scrollbars != 'none') { + var shownState = $ax.dynamicPanelManager.getShownState(elementId); + preserveScroll = true; + //before hiding, try to save scroll location + if(!options.value && shownState) { + DPStateAndScroll[elementId] = { + shownId: shownState.attr('id'), + left: shownState.scrollLeft(), + top: shownState.scrollTop() + } + } + } + + _pushContainer(elementId, isPanel); + if(isPanel && !options.value) _tryResumeScrollForDP(elementId); + var complete = options.onComplete; + options.onComplete = function () { + if(complete) complete(); + _popContainer(elementId, isPanel); + //after showing dp, restore the scoll position + if(isPanel && options.value) _tryResumeScrollForDP(elementId, true); + } + options.containerExists = true; + } + _setVisibility(parentId, elementId, options, preserveScroll); + + //set the visibility of the annotation box as well if it exists + var ann = document.getElementById(elementId + "_ann"); + if(ann) _visibility.SetVisible(ann, options.value); + + //set ref visibility for ref of flow shape, if that exists + var ref = document.getElementById(elementId + '_ref'); + if(ref) _visibility.SetVisible(ref, options.value); + }; + + var _setVisibility = function(parentId, childId, options, preserveScroll) { + var wrapped = $jobj(childId); + + + + //easing: easingOut + + + var completeTotal = 1; + var visible = $ax.visibility.IsIdVisible(childId); + + if(visible == options.value) { + options.onComplete && options.onComplete(); + $ax.action.fireAnimationFromQueue(childId, $ax.action.queueTypes.fade); + return; + } + + var child = $jobj(childId); + var size = options.size || (options.containerExists ? $(child.children()[0]) : child); + + var isIdFitToContent = $ax.dynamicPanelManager.isIdFitToContent(parentId); + //fade and resize won't work together when there is a container... but we still needs the container for fit to content DPs + var needContainer = options.easing && options.easing != 'none' && (options.easing != 'fade' || isIdFitToContent); + var cullPosition = options.cull ? options.cull.css('position') : ''; + var containerExists = options.containerExists; + + var isFullWidth = $ax.dynamicPanelManager.isPercentWidthPanel($obj(childId)); + + // If fixed fit to content panel, then we must set size on it. It will be size of 0 otherwise, because container in it is absolute position. + var needSetSize = false; + var sizeObj = {}; + if(needContainer) { + var sizeId = ''; + if($ax.dynamicPanelManager.isIdFitToContent(childId)) sizeId = childId; + else { + var panelId = $ax.repeater.removeSuffixFromElementId(childId)[0]; + if($ax.dynamicPanelManager.isIdFitToContent(panelId)) sizeId = panelId; + } + + if (sizeId) { + needSetSize = true; + + sizeObj = $jobj(sizeId); + var newSize = options.cull || sizeObj; + var newAxSize = $ax('#' + newSize.attr('id')); + sizeObj.width(newAxSize.width()); + sizeObj.height(newAxSize.height()); + } + } + + var wrappedOffset = { left: 0, top: 0 }; + var visibleWrapped = wrapped; + if(needContainer) { + var childObj = $obj(childId); + if (options.cull) { + var axCull = $ax('#' + options.cull.attr('id')); + var containerWidth = axCull.width(); + var containerHeight = axCull.height(); + } else { + if(childObj && ($ax.public.fn.IsLayer(childObj.type))) {// || childObj.generateCompound)) { + var boundingRectangle = $ax.public.fn.getWidgetBoundingRect(childId); + wrappedOffset.left = boundingRectangle.left; + wrappedOffset.top = boundingRectangle.top; + containerWidth = boundingRectangle.width; + containerHeight = boundingRectangle.height; + } else { + containerWidth = $ax('#' + childId).width(); + containerHeight = $ax('#' + childId).height(); + } + } + + var containerId = $ax.visibility.applyWidgetContainer(childId); +// var container = _makeContainer(containerId, options.cull || boundingRectangle, isFullWidth, options.easing == 'flip', wrappedOffset, options.containerExists); + var container = _makeContainer(containerId, containerWidth, containerHeight, isFullWidth, options.easing == 'flip', wrappedOffset, options.containerExists); + + if(options.containInner) { + wrapped = _wrappedChildren(containerExists ? $(child.children()[0]) : child); + + // Filter for visibile wrapped children + visibleWrapped = []; + for (var i = 0; i < wrapped.length; i++) if($ax.visibility.IsVisible(wrapped[i])) visibleWrapped.push(wrapped[i]); + visibleWrapped = $(visibleWrapped); + + completeTotal = visibleWrapped.length; + if(!containerExists) container.prependTo(child); + + // Offset items if necessary + if(!containerExists && (wrappedOffset.left != 0 || wrappedOffset.top != 0)) { + for(var i = 0; i < wrapped.length; i++) { + var inner = $(wrapped[i]); + inner.css('left', $ax.getNumFromPx(inner.css('left')) - wrappedOffset.left); + inner.css('top', $ax.getNumFromPx(inner.css('top')) - wrappedOffset.top); + // Parent layer is now size 0, so have to have to use conatiner since it's the real size. + // Should we use container all the time? This may make things easier for fit panels too. + size = container; + } + } + } else if(!containerExists) container.insertBefore(child); + if(!containerExists) wrapped.appendTo(container); + + if (options.value && options.containInner) { + //has to set children first because flip to show needs childerns invisible + _setAllVisible(visibleWrapped, false); + _updateChildAlignment(childId); + _setAllVisible(child, true); + } + } + + var completeCount = 0; + var onComplete = function () { + completeCount++; + if (needContainer && completeCount == completeTotal) { + if ($ax.public.fn.isCompoundVectorHtml(container.parent()[0])) { + wrappedOffset.left = $ax.getNumFromPx(container.css('left')); + wrappedOffset.top = $ax.getNumFromPx(container.css('top')); + } + + if (options.containInner && !containerExists && (wrappedOffset.left != 0 || wrappedOffset.top != 0)) { + for (i = 0; i < wrapped.length; i++) { + inner = $(wrapped[i]); + //if ($ax.public.fn.isCompoundVectorComponentHtml(inner[0])) break; + inner.css('left', $ax.getNumFromPx(inner.css('left')) + wrappedOffset.left); + inner.css('top', $ax.getNumFromPx(inner.css('top')) + wrappedOffset.top); + } + } + + if(options.containInner && !options.value) { + _setAllVisible(child, false); + _setAllVisible(visibleWrapped, true); + } + + if(containerExists) { + if(!options.settingChild) container.css('position', 'relative;'); + } else { + wrapped.insertBefore(container); + container.remove(); + } + //child.css(css); + + // Any text set or other things that triggered alignment updating during animation can happen now. + if(options.containInner) { + for(i = 0; i < wrapped.length; i++) $ax.style.checkAlignmentQueue($(wrapped[i]).attr('id')); + } + + if(childObj && $ax.public.fn.IsDynamicPanel(childObj.type) && window.modifiedDynamicPanleParentOverflowProp) { + child.css('overflow', 'hidden'); + window.modifiedDynamicPanleParentOverflowProp = false; + } + } + + if(!needContainer || completeTotal == completeCount) { + if(options.cull) options.cull.css('position', cullPosition); + if(needSetSize) { + sizeObj.css('width', 'auto'); + sizeObj.css('height', 'auto'); + } + options.onComplete && options.onComplete(); + + if(options.fire) { + $ax.event.raiseSyntheticEvent(childId, options.value ? 'onShow' : 'onHide'); + $ax.action.fireAnimationFromQueue(childId, $ax.action.queueTypes.fade); + } + } + }; + + // Nothing actually being animated, all wrapped elements invisible + if(!visibleWrapped.length) { + if(!options.easing || options.easing == 'none') { + $ax.visibility.SetIdVisible(childId, options.value); + completeTotal = 1; + onComplete(); + } else { + window.setTimeout(function() { + completeCount = completeTotal - 1; + onComplete(); + },options.duration); + } + + return; + } + + if(!options.easing || options.easing == 'none') { + $ax.visibility.SetIdVisible(childId, options.value); + completeTotal = 1; + onComplete(); + } else if(options.easing == 'fade') { + if(options.value) { + if(preserveScroll) { + visibleWrapped.css('opacity', 0); + visibleWrapped.css('visibility', 'visible'); + visibleWrapped.css('display', 'block'); + //was hoping we could just use fadein here, but need to set display before set scroll position + _tryResumeScrollForDP(childId); + visibleWrapped.animate({ opacity: 1 }, { + duration: options.duration, + easing: 'swing', + queue: false, + complete: function() { + $ax.visibility.SetIdVisible(childId, true); + visibleWrapped.css('opacity', ''); + onComplete(); + } + }); + } else { + // Can't use $ax.visibility.SetIdVisible, because we only want to set visible, we don't want to display, fadeIn will handle that. + visibleWrapped.css('visibility', 'visible'); + visibleWrapped.fadeIn({ + queue: false, + duration: options.duration, + complete: onComplete + }); + } + } else { + // Fading here is being strange... + visibleWrapped.animate({ opacity: 0 }, { duration: options.duration, easing: 'swing', queue: false, complete: function() { + $ax.visibility.SetIdVisible(childId, false); + visibleWrapped.css('opacity', ''); + + onComplete(); + }}); + } + } else if (options.easing == 'flip') { + //this container will hold + var innerContainer = $('
    '); + innerContainer.attr('id', containerId + "_inner"); + innerContainer.data('flip', options.direction == 'left' || options.direction == 'right' ? 'y' : 'x'); + innerContainer.css({ + position: 'relative', + 'width': containerWidth, + 'height': containerHeight + }); + + innerContainer.appendTo(container); + wrapped.appendTo(innerContainer); + + if(childObj && $ax.public.fn.IsDynamicPanel(childObj.type)) var containerDiv = child; + else containerDiv = parentId ? $jobj(parentId) : child.parent(); + + completeTotal = 1; + var flipdegree; + var requestAnimFrame = window.requestAnimationFrame || + window.webkitRequestAnimationFrame || + window.mozRequestAnimationFrame || window.msRequestAnimationFrame || + function (callback) { + window.setTimeout(callback, 1000 / 60); + }; + + var originForUpOrDown = '100% ' + containerHeight / 2 + 'px'; + if(options.value) { + //options.value == true means in or show, note to get here, the element must be currently hidden + //to show, we need to first flip it 180deg without animation + switch(options.direction) { + case 'right': + case 'left': + _setRotateTransformation(innerContainer, 'rotateY(180deg)'); + flipdegree = options.direction === 'right' ? 'rotateY(360deg)' : 'rotateY(0deg)'; + break; + case 'up': + case 'down': + innerContainer.css({ + '-webkit-transform-origin': originForUpOrDown, + '-ms-transform-origin': originForUpOrDown, + 'transform-origin': originForUpOrDown, + }); + _setRotateTransformation(innerContainer, 'rotateX(180deg)'); + flipdegree = options.direction === 'up' ? 'rotateX(360deg)' : 'rotateX(0deg)'; + break; + } + + var onFlipShowComplete = function() { + $ax.visibility.SetIdVisible(childId, true); + + wrapped.insertBefore(innerContainer); + innerContainer.remove(); + + onComplete(); + }; + + innerContainer.css({ + '-webkit-backface-visibility': 'hidden', + 'backface-visibility': 'hidden' + }); + + child.css({ + 'display': '', + 'visibility': 'visible' + }); + + visibleWrapped.css({ + 'display': '', + 'visibility': 'visible' + }); + + innerContainer.css({ + '-webkit-transition-duration': options.duration + 'ms', + 'transition-duration': options.duration + 'ms' + }); + + if(preserveScroll) _tryResumeScrollForDP(childId); + requestAnimFrame(function () { + _setRotateTransformation(innerContainer, flipdegree, containerDiv, onFlipShowComplete, options.duration); + }); + } else { //hide or out + switch(options.direction) { + case 'right': + case 'left': + flipdegree = options.direction === 'right' ? 'rotateY(180deg)' : 'rotateY(-180deg)'; + break; + case 'up': + case 'down': + //_setRotateTransformation(wrapped, 'rotateX(0deg)'); + innerContainer.css({ + '-webkit-transform-origin': originForUpOrDown, + '-ms-transform-origin': originForUpOrDown, + 'transform-origin': originForUpOrDown, + }); + flipdegree = options.direction === 'up' ? 'rotateX(180deg)' : 'rotateX(-180deg)'; + break; + } + + var onFlipHideComplete = function() { + wrapped.insertBefore(innerContainer); + $ax.visibility.SetIdVisible(childId, false); + + innerContainer.remove(); + + onComplete(); + }; + + innerContainer.css({ + '-webkit-backface-visibility': 'hidden', + 'backface-visibility': 'hidden', + '-webkit-transition-duration': options.duration + 'ms', + 'transition-duration': options.duration + 'ms' + }); + + if(preserveScroll) _tryResumeScrollForDP(childId); + requestAnimFrame(function () { + _setRotateTransformation(innerContainer, flipdegree, containerDiv, onFlipHideComplete, options.duration); + }); + } + } else { + // Because the move is gonna fire on annotation and ref too, need to update complete total + completeTotal = $addAll(visibleWrapped, childId).length; + if(options.value) { + _slideStateIn(childId, childId, options, size, false, onComplete, visibleWrapped, preserveScroll); + } else { + var tops = []; + var lefts = []; + for(var i = 0; i < visibleWrapped.length; i++) { + var currWrapped = $(visibleWrapped[i]); + tops.push(currWrapped.css('top')); + lefts.push(currWrapped.css('left')); + } + + var onOutComplete = function () { + //bring back SetIdVisible on childId for hiding lightbox + $ax.visibility.SetIdVisible(childId, false); + for(i = 0; i < visibleWrapped.length; i++) { + currWrapped = $(visibleWrapped[i]); + $ax.visibility.SetIdVisible(currWrapped.attr('id'), false); + currWrapped.css('top', tops[i]); + currWrapped.css('left', lefts[i]); + } + onComplete(); + }; + _slideStateOut(size, childId, options, onOutComplete, visibleWrapped); + } + } + // If showing, go through all rich text objects inside you, and try to redo alignment of them + if(options.value && !options.containInner) { + _updateChildAlignment(childId); + } + }; + + var _updateChildAlignment = function(childId) { + var descendants = $jobj(childId).find('*'); + for(var i = 0; i < descendants.length; i++) { + var decendantId = descendants[i].id; + // This check is probably redundant? UpdateTextAlignment should ignore any text objects that haven't set the vAlign yet. + if($ax.getTypeFromElementId(decendantId) != 'richTextPanel') continue; + $ax.style.updateTextAlignmentForVisibility(decendantId); + } + }; + + var _wrappedChildren = function (child) { + return child.children(); + //var children = child.children(); + //var valid = []; + //for(var i = 0; i < children.length; i++) if($ax.visibility.IsVisible(children[i])) valid.push(children[i]); + //return $(valid); + }; + + var _setRotateTransformation = function(elementsToSet, transformValue, elementParent, flipCompleteCallback, flipDurationMs) { + if(flipCompleteCallback) { + //here we didn't use 'transitionend' event to fire callback + //when show/hide on one element, changing transition property will stop the event from firing + window.setTimeout(flipCompleteCallback, flipDurationMs); + } + + elementsToSet.css({ + '-webkit-transform': transformValue, + '-moz-transform': transformValue, + '-ms-transform': transformValue, + '-o-transform': transformValue, + 'transform': transformValue + }); + + //when deal with dynamic panel, we need to set it's parent's overflow to visible to have the 3d effect + //NOTE: we need to set this back when both flips finishes in DP, to prevents one animation finished first and set this back + if(elementParent && elementParent.css('overflow') === 'hidden') { + elementParent.css('overflow', 'visible'); + window.modifiedDynamicPanleParentOverflowProp = true; + } + }; + + $ax.visibility.GetPanelState = function(id) { + var children = $ax.visibility.getRealChildren($jobj(id).children()); + for(var i = 0; i < children.length; i++) { + if(children[i].style && $ax.visibility.IsVisible(children[i])) return children[i].id; + } + return ''; + }; + + var containerCount = {}; + $ax.visibility.SetPanelState = function(id, stateId, easingOut, directionOut, durationOut, easingIn, directionIn, durationIn, showWhenSet) { + var show = !$ax.visibility.IsIdVisible(id) && showWhenSet; + if(show) $ax.visibility.SetIdVisible(id, true); + + // Exit here if already at desired state. + if($ax.visibility.IsIdVisible(stateId)) { + if(show) $ax.event.raiseSyntheticEvent(id, 'onShow'); + $ax.action.fireAnimationFromQueue(id, $ax.action.queueTypes.setState); + return; + } + + _pushContainer(id, true); + + var state = $jobj(stateId); + var oldStateId = $ax.visibility.GetPanelState(id); + var oldState = $jobj(oldStateId); + //pin to browser + $ax.dynamicPanelManager.adjustFixed(id, oldState.width(), oldState.height(), state.width(), state.height()); + + _bringPanelStateToFront(id, stateId); + + var fitToContent = $ax.dynamicPanelManager.isIdFitToContent(id); + var resized = false; + if(fitToContent) { + // Set resized + resized = state.width() != oldState.width() || state.height() != oldState.height(); + } + + //edge case for sliding + var movement = (directionOut == 'left' || directionOut == 'up' || state.children().length == 0) && oldState.children().length != 0 ? oldState : state; + var onCompleteCount = 0; + var onComplete = function () { + //move this call from _setVisibility() for animate out. + //Because this will make the order of dp divs consistence: the showing panel is always in front after both animation finished + //tested in the cases where one panel is out/show slower/faster/same time/instantly. + _bringPanelStateToFront(id, stateId); + + if (window.modifiedDynamicPanleParentOverflowProp) { + var parent = id ? $jobj(id) : child.parent(); + parent.css('overflow', 'hidden'); + window.modifiedDynamicPanleParentOverflowProp = false; + } + + $ax.dynamicPanelManager.fitParentPanel(id); + $ax.dynamicPanelManager.updatePanelPercentWidth(id); + $ax.dynamicPanelManager.updatePanelContentPercentWidth(id); + $ax.action.fireAnimationFromQueue(id, $ax.action.queueTypes.setState); + $ax.event.raiseSyntheticEvent(id, "onPanelStateChange"); + $ax.event.leavingState(oldStateId); + _popContainer(id, true); + }; + // Must do state out first, so if we cull by new state, location is correct + _setVisibility(id, oldStateId, { + value: false, + easing: easingOut, + direction: directionOut, + duration: durationOut, + containerExists: true, + onComplete: function() { +// if(easingIn !== 'flip') _bringPanelStateToFront(id, stateId); + if (++onCompleteCount == 2) onComplete(); + }, + settingChild: true, + size: movement, + //cull for + cull: easingOut == 'none' || state.children().length == 0 ? oldState : state + }); + + _setVisibility(id, stateId, { + value: true, + easing: easingIn, + direction: directionIn, + duration: durationIn, + containerExists: true, + onComplete: function () { +// if (easingIn === 'flip') _bringPanelStateToFront(id, stateId); + if (++onCompleteCount == 2) onComplete(); + }, + settingChild: true, + //size for offset + size: movement + }); + + if(show) $ax.event.raiseSyntheticEvent(id, 'onShow'); + if(resized) $ax.event.raiseSyntheticEvent(id, 'onResize'); + }; + + var containedFixed = {}; + var _pushContainer = _visibility.pushContainer = function(id, panel) { + var count = containerCount[id]; + if(count) containerCount[id] = count + 1; + else { + var jobj = $jobj(id); + var children = jobj.children(); + var css = { + position: 'relative', + top: 0, + left: 0 + }; + + if(!panel) { + var boundingRect = $axure.fn.getWidgetBoundingRect(id); + css.top = boundingRect.top; + css.left = boundingRect.left; + } + + var container = $('
    '); + container.attr('id', $ax.visibility.applyWidgetContainer(id)); + container.css(css); + //container.append(jobj.children()); + jobj.append(container); + containerCount[id] = 1; + + // Panel needs to wrap children + if(panel) { + for(var i = 0; i < children.length; i++) { + var child = $(children[i]); + var childContainer = $('
    '); + childContainer.attr('id', $ax.visibility.applyWidgetContainer(child.attr('id'))); + childContainer.css(css); + child.after(childContainer); + childContainer.append(child); + container.append(childContainer); + } + } else { + var focus = _getCurrFocus(); + + // Layer needs to fix top left + var childIds = $ax('#' + id).getChildren()[0].children; + for(var i = 0; i < childIds.length; i++) { + var childId = childIds[i]; + var childObj = $jobj(childId); + var fixedInfo = $ax.dynamicPanelManager.getFixedInfo(childId); + if(fixedInfo.fixed) { + var axObj = $ax('#' + childId); + var left = axObj.left(); + var top = axObj.top(); + containedFixed[childId] = { left: left, top: top, fixed: fixedInfo }; + childObj.css('left', left); + childObj.css('top', top); + childObj.css('margin-left', 0); + childObj.css('margin-top', 0); + childObj.css('right', 'auto'); + childObj.css('bottom', 'auto'); + childObj.css('position', 'absolute'); + } + var cssChange = { + left: '-=' + css.left, + top: '-=' + css.top + }; + if($ax.getTypeFromElementId(childId) == $ax.constants.LAYER_TYPE) { + _pushContainer(childId, false); + $ax.visibility.applyWidgetContainer(childId, true).css(cssChange); + } else { + //if ($ax.public.fn.isCompoundVectorHtml(jobj[0])) { + // var grandChildren = jobj[0].children; + // //while (grandChildren.length > 0 && grandChildren[0].id.indexOf('container') >= 0) grandChildren = grandChildren[0].children; + + // for (var j = 0; j < grandChildren.length; j++) { + // var grandChildId = grandChildren[j].id; + // if (grandChildId.indexOf(childId + 'p') >= 0 || grandChildId.indexOf('_container') >= 0) $jobj(grandChildId).css(cssChange); + // } + //} else + // Need to include ann and ref in move. + childObj = $addAll(childObj, childId); + childObj.css(cssChange); + } + + container.append(childObj); + } + _setCurrFocus(focus); + } + } + }; + + var _popContainer = _visibility.popContainer = function(id, panel) { + var count = containerCount[id]; + if(!count) return; + count--; + containerCount[id] = count; + if(count != 0) return; + + var jobj = $jobj(id); + var container = $ax.visibility.applyWidgetContainer(id, true); + + // If layer is at bottom or right of page, unwrapping could change scroll by temporarily reducting page size. + // To avoid this, we let container persist on page, with the size it is at this point, and don't remove container completely + // until the children are back to their proper locations. + var size = $ax('#' + id); + container.css('width', size.width()); + container.css('height', size.height()); + var focus = _getCurrFocus(); + jobj.append(container.children()); + _setCurrFocus(focus); + $('body').append(container); + + // Layer doesn't have children containers to clean up + if(panel) { + var children = jobj.children(); + for(var i = 0; i < children.length; i++) { + var childContainer = $(children[i]); + var child = $(childContainer.children()[0]); + childContainer.after(child); + childContainer.remove(); + } + } else { + var left = container.css('left'); + var top = container.css('top'); + var childIds = $ax('#' + id).getChildren()[0].children; + for (var i = 0; i < childIds.length; i++) { + var childId = childIds[i]; + var cssChange = { + left: '+=' + left, + top: '+=' + top + }; + if($ax.getTypeFromElementId(childId) == $ax.constants.LAYER_TYPE) { + $ax.visibility.applyWidgetContainer(childId, true).css(cssChange); + _popContainer(childId, false); + } else { + var childObj = $jobj(childId); + // if ($ax.public.fn.isCompoundVectorHtml(jobj[0])) { + // var grandChildren = jobj[0].children; + // //while (grandChildren.length > 0 && grandChildren[0].id.indexOf('container') >= 0) grandChildren = grandChildren[0].children; + // for (var j = 0; j < grandChildren.length; j++) { + // var grandChildId = grandChildren[j].id; + // if (grandChildId.indexOf(childId + 'p') >= 0 || grandChildId.indexOf('_container') >= 0) $jobj(grandChildId).css(cssChange); + // } + //} else + var allObjs = $addAll(childObj, childId); // Just include other objects for initial css. Fixed panels need to be dealt with separately. + allObjs.css(cssChange); + + var fixedInfo = containedFixed[childId]; + if(fixedInfo) { + delete containedFixed[childId]; + + childObj.css('position', 'fixed'); + var deltaX = $ax.getNumFromPx(childObj.css('left')) - fixedInfo.left; + var deltaY = $ax.getNumFromPx(childObj.css('top')) - fixedInfo.top; + + fixedInfo = fixedInfo.fixed; + if(fixedInfo.horizontal == 'left') childObj.css('left', fixedInfo.x + deltaX); + else if(fixedInfo.horizontal == 'center') { + childObj.css('left', '50%'); + childObj.css('margin-left', fixedInfo.x + deltaX); + } else { + childObj.css('left', 'auto'); + childObj.css('right', fixedInfo.x - deltaX); + } + + if(fixedInfo.vertical == 'top') childObj.css('top', fixedInfo.y + deltaY); + else if(fixedInfo.vertical == 'middle') { + childObj.css('top', '50%'); + childObj.css('margin-top', fixedInfo.y + deltaY); + } else { + childObj.css('top', 'auto'); + childObj.css('bottom', fixedInfo.y - deltaY); + } + + $ax.dynamicPanelManager.updatePanelPercentWidth(childId); + $ax.dynamicPanelManager.updatePanelContentPercentWidth(childId); + + } + } + } + } + container.remove(); + }; + + var _getCurrFocus = function() { + return window.lastFocusedClickable && window.lastFocusedClickable.id; + } + + var _setCurrFocus = function(id) { + if(id) { + $jobj(id).focus(); + } + } + + //use this to save & restore DP's scroll position when show/hide + //key => dp's id (not state's id, because it seems we can change state while hiding) + //value => first state's id & scroll position + //we only need to store one scroll position for one DP, and remove the key after shown. + var DPStateAndScroll = {} + var _tryResumeScrollForDP = function (dpId, deleteId) { + var scrollObj = DPStateAndScroll[dpId]; + if(scrollObj) { + var shownState = document.getElementById(scrollObj.shownId); + if(scrollObj.left) shownState.scrollLeft = scrollObj.left; + if(scrollObj.top) shownState.scrollTop = scrollObj.top; + if(deleteId) delete DPStateAndScroll[dpId]; + } + }; +// var _makeContainer = function (containerId, rect, isFullWidth, isFlip, offset, containerExists) { + var _makeContainer = function (containerId, width, height, isFullWidth, isFlip, offset, containerExists) { + if(containerExists) var container = $jobj(containerId); + else { + container = $('
    '); + container.attr('id', containerId); + } + var css = { + position: 'absolute', + width: width, + height: height, + }; + + if(!containerExists) { + // If container exists, may be busy updating location. Will init and update it correctly. + css.top = offset.top; + css.left = offset.left; + } + + + if(isFlip) { + css.perspective = '800px'; + css.webkitPerspective = "800px"; + css.mozPerspective = "800px"; + } else css.overflow = 'hidden'; + + //perspective on container will give us 3d effect when flip + //if(!isFlip) css.overflow = 'hidden'; + + // Rect should be a jquery not axquery obj + //_getFixedCss(css, rect.$ ? rect.$() : rect, fixedInfo, isFullWidth); + + container.css(css); + return container; + }; + + var CONTAINER_SUFFIX = _visibility.CONTAINER_SUFFIX = '_container'; + var CONTAINER_INNER = CONTAINER_SUFFIX + '_inner'; + _visibility.getWidgetFromContainer = function(id) { + var containerIndex = id.indexOf(CONTAINER_SUFFIX); + if(containerIndex == -1) return id; + return id.substr(0, containerIndex) + id.substr(containerIndex + CONTAINER_SUFFIX.length); + }; + + // Apply container to widget id if necessary. + // returnJobj: True if you want the jquery object rather than id returned + // skipCheck: True if you want the query returned reguardless of container existing + // checkInner: True if inner container should be checked + _visibility.applyWidgetContainer = function (id, returnJobj, skipCheck, checkInner) { + // If container exists, just return (return query if requested) + if(id.indexOf(CONTAINER_SUFFIX) != -1) return returnJobj ? $jobj(id) : id; + + // Get desired id, and return it if query is not desired + var containerId = $ax.repeater.applySuffixToElementId(id, checkInner ? CONTAINER_INNER : CONTAINER_SUFFIX); + if(!returnJobj) return containerId; + + // If skipping check or container exists, just return innermost container requested + var container = $jobj(containerId); + if(skipCheck || container.length) return container; + // If inner container was not checked, then no more to check, return query for widget + if(!checkInner) return $jobj(id); + + // If inner container was checked, check for regular container still + container = $jobj($ax.repeater.applySuffixToElementId(id, CONTAINER_SUFFIX)); + return container.length ? container : $jobj(id); + }; + + _visibility.isContainer = function(id) { + return id.indexOf(CONTAINER_SUFFIX) != -1; + }; + + _visibility.getRealChildren = function(query) { + while(query.length && $(query[0]).attr('id').indexOf(CONTAINER_SUFFIX) != -1) query = query.children(); + return query; + }; + + var _getFixedCss = function(css, rect, fixedInfo, isFullWidth) { + // todo: **mas** make sure this is ok + if(fixedInfo.fixed) { + css.position = 'fixed'; + + if(fixedInfo.horizontal == 'left') css.left = fixedInfo.x; + else if(fixedInfo.horizontal == 'center') { + css.left = isFullWidth ? '0px' : '50%'; + css['margin-left'] = fixedInfo.x; + } else if(fixedInfo.horizontal == 'right') { + css.left = 'auto'; + css.right = fixedInfo.x; + } + + if(fixedInfo.vertical == 'top') css.top = fixedInfo.y; + else if(fixedInfo.vertical == 'middle') { + css.top = '50%'; + css['margin-top'] = fixedInfo.y; + } else if(fixedInfo.vertical == 'bottom') { + css.top = 'auto'; + css.bottom = fixedInfo.y; + } + } else { + css.left = Number(rect.css('left').replace('px', '')) || 0; + css.top = Number(rect.css('top').replace('px', '')) || 0; + } + }; + + var _slideStateOut = function (container, stateId, options, onComplete, jobj) { + var directionOut = options.direction; + var axObject = $ax('#' + container.attr('id')); + var width = axObject.width(); + var height = axObject.height(); + + if(directionOut == "right") { + $ax.move.MoveWidget(stateId, width, 0, options, false, onComplete, false, jobj); + } else if(directionOut == "left") { + $ax.move.MoveWidget(stateId, -width, 0, options, false, onComplete, false, jobj); + } else if(directionOut == "up") { + $ax.move.MoveWidget(stateId, 0, -height, options, false, onComplete, false, jobj); + } else if(directionOut == "down") { + $ax.move.MoveWidget(stateId, 0, height, options, false, onComplete, false, jobj); + } + }; + + var _slideStateIn = function (id, stateId, options, container, makePanelVisible, onComplete, jobj, preserveScroll) { + var directionIn = options.direction; + var axObject = $ax('#' +container.attr('id')); + var width = axObject.width(); + var height = axObject.height(); + + for(var i = 0; i < jobj.length; i++) { + var child = $(jobj[i]); + var oldTop = $ax.getNumFromPx(child.css('top')); + var oldLeft = $ax.getNumFromPx(child.css('left')); + if (directionIn == "right") { + child.css('left', oldLeft - width + 'px'); + } else if(directionIn == "left") { + child.css('left', oldLeft + width + 'px'); + } else if(directionIn == "up") { + child.css('top', oldTop + height + 'px'); + } else if(directionIn == "down") { + child.css('top', oldTop - height + 'px'); + } + } + + if (makePanelVisible) $ax.visibility.SetIdVisible(id, true); + for(i = 0; i < jobj.length; i++) $ax.visibility.SetIdVisible($(jobj[i]).attr('id'), true); + + if(preserveScroll) _tryResumeScrollForDP(id); + if(directionIn == "right") { + $ax.move.MoveWidget(stateId, width, 0, options, false, onComplete, false, jobj); + } else if(directionIn == "left") { + $ax.move.MoveWidget(stateId, -width, 0, options, false, onComplete, false, jobj); + } else if(directionIn == "up") { + $ax.move.MoveWidget(stateId, 0, -height, options, false, onComplete, false, jobj); + } else if(directionIn == "down") { + $ax.move.MoveWidget(stateId, 0, height, options, false, onComplete, false, jobj); + } + }; + + $ax.visibility.GetPanelStateId = function(dpId, index) { + var itemNum = $ax.repeater.getItemIdFromElementId(dpId); + var panelStateId = $ax.repeater.getScriptIdFromElementId(dpId) + '_state' + index; + return $ax.repeater.createElementId(panelStateId, itemNum); + }; + + $ax.visibility.GetPanelStateCount = function(id) { + return $ax.visibility.getRealChildren($jobj(id).children()).length; + }; + + var _bringPanelStateToFront = function (dpId, stateid) { + var panel = $jobj(dpId); + if(containerCount[dpId]) { + stateid = $ax.visibility.applyWidgetContainer(stateid); + panel = $ax.visibility.applyWidgetContainer(dpId, true, false, true); + } + $jobj(stateid).appendTo(panel); + //when bring a panel to front, it will be focused, and the previous front panel should fire blur event if it's lastFocusedClickableSelector + //ie(currently 11) and firefox(currently 34) doesn't fire blur event, this is the hack to fire it manually + if((IE || FIREFOX) && window.lastFocusedClickable && $ax.event.getFocusableWidgetOrChildId(window.lastFocusedControl) == window.lastFocusedClickable.id) { + $(window.lastFocusedClickable).triggerHandler('blur'); + } + }; + + var _limboIds = _visibility.limboIds = {}; + // limboId's is a dictionary of id->true, essentially a set. + var _addLimboAndHiddenIds = $ax.visibility.addLimboAndHiddenIds = function(newLimboIds, newHiddenIds, query, skipRepeater) { + var limboedByMaster = {}; + for(var key in newLimboIds) { + if (!$ax.public.fn.IsReferenceDiagramObject($ax.getObjectFromElementId(key).type)) continue; + var ids = $ax.model.idsInRdo(key); + for(var i = 0; i < ids.length; i++) limboedByMaster[ids[i]] = true; + } + + var hiddenByMaster = {}; + for(key in newHiddenIds) { + if (!$ax.public.fn.IsReferenceDiagramObject($ax.getObjectFromElementId(key).type)) continue; + ids = $ax.model.idsInRdo(key); + for(i = 0; i < ids.length; i++) hiddenByMaster[ids[i]] = true; + } + + // Extend with children of rdos + newLimboIds = $.extend(newLimboIds, limboedByMaster); + newHiddenIds = $.extend(newHiddenIds, hiddenByMaster); + + // something is only visible if it's not hidden and limboed + + //if(!skipSetting) { + query.each(function(diagramObject, elementId) { + // Rdos already handled, contained widgets are limboed by the parent, and sub menus should be ignored + if($ax.public.fn.IsReferenceDiagramObject(diagramObject.type) || $ax.public.fn.IsTableCell(diagramObject.type) || diagramObject.isContained || $jobj(elementId).hasClass('sub_menu')) return; + if(diagramObject.type == 'table' && $jobj(elementId).parent().hasClass('ax_menu')) return; + if(skipRepeater) { + // Any item in a repeater should return + var repeater = $ax.getParentRepeaterFromElementId(elementId); + if (repeater && repeater != elementId) return; + } + + var scriptId = $ax.repeater.getScriptIdFromElementId(elementId); + var shouldBeVisible = Boolean(!newLimboIds[scriptId] && !newHiddenIds[scriptId]); + var isVisible = Boolean(_isIdVisible(elementId)); + if(shouldBeVisible != isVisible) { + _setWidgetVisibility(elementId, { value: shouldBeVisible }); + } + }); + //} + + _limboIds = _visibility.limboIds = $.extend(_limboIds, newLimboIds); + + }; + + var _clearLimboAndHidden = $ax.visibility.clearLimboAndHidden = function(ids) { + _limboIds = _visibility.limboIds = {}; + }; + + $ax.visibility.clearLimboAndHiddenIds = function(ids) { + for(var i = 0; i < ids.length; i++) { + var scriptId = $ax.repeater.getScriptIdFromElementId(ids[i]); + delete _limboIds[scriptId]; + } + }; + + $ax.visibility.resetLimboAndHiddenToDefaults = function (query) { + if(!query) query = $ax('*'); + _clearLimboAndHidden(); + _addLimboAndHiddenIds(_defaultLimbo, _defaultHidden, query); + }; + + $ax.visibility.isScriptIdLimbo = function(scriptId) { + if(_limboIds[scriptId]) return true; + + var repeater = $ax.getParentRepeaterFromScriptId(scriptId); + if(!repeater) return false; + + var itemId = $ax.getItemIdsForRepeater(repeater)[0]; + return _limboIds[$ax.repeater.createElementId(scriptId, itemId)]; + } + + $ax.visibility.initialize = function() { + // initialize initial visible states + $('.' + HIDDEN_CLASS).each(function (index, diagramObject) { + _defaultHidden[$ax.repeater.getScriptIdFromElementId(diagramObject.id)] = true; + }); + + $('.' + UNPLACED_CLASS).each(function (index, diagramObject) { + _defaultLimbo[$ax.repeater.getScriptIdFromElementId(diagramObject.id)] = true; + }); + + _addLimboAndHiddenIds(_defaultLimbo, _defaultHidden, $ax('*'), true); + }; + + _visibility.initRepeater = function(repeaterId) { + var html = $('
    '); + html.append($jobj(repeaterId + '_script').html()); + + html.find('.' + HIDDEN_CLASS).each(function (index, element) { + _defaultHidden[$ax.repeater.getScriptIdFromElementId(element.id)] = true; + }); + + html.find('.' + UNPLACED_CLASS).each(function (index, element) { + _defaultLimbo[$ax.repeater.getScriptIdFromElementId(element.id)] = true; + }); + } + + var HIDDEN_CLASS = _visibility.HIDDEN_CLASS = 'ax_default_hidden'; + var UNPLACED_CLASS = _visibility.UNPLACED_CLASS = 'ax_default_unplaced'; + +}); \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axutils.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axutils.js" new file mode 100644 index 0000000..8daf740 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/axutils.js" @@ -0,0 +1,241 @@ +锘/* + * + * + * + * + */ + + (function() { + // define the root namespace object + if(!window.$axure) window.$axure = {}; + + $axure.utils = {}; + + // ------------------------------------------------------------------------ + // Makes an object bindable + // ------------------------------------------------------------------------ + $axure.utils.makeBindable = function(obj, events) { + if(obj.registeredBindings != null) return; + + // copy the events + obj.bindableEvents = events.slice(); + obj.registeredBindings = {}; + + obj.bind = function(eventName, fn) { + var binding = {}; + binding.eventName = eventName; + binding.action = fn; + + var bindingList = this.registeredBindings[eventName]; + if(bindingList == null) { + bindingList = []; + this.registeredBindings[eventName] = bindingList; + } + bindingList[bindingList.length] = binding; + }; + + obj.unbind = function(eventName) { + if(eventName.indexOf('.') >= 0) { + this.registeredBindings[eventName] = null; + } else { + var event = eventName.split('.')[0]; + for(var bindingKey in this.registeredBindings) { + if(bindingKey.split('.')[0] == event) { + this.registeredBindings[bindingKey] = null; + } + } + } + }; + + obj.triggerEvent = function(eventName, arg) { + for(var bindingKey in this.registeredBindings) { + if(bindingKey.split('.')[0] == eventName) { + var bindings = this.registeredBindings[bindingKey]; + for(var i = 0; i < bindings.length; i++) { + if(arg == null) { + bindings[i].action(); + } else { + bindings[i].action(arg); + } + } + } + } + }; + }; + + + $axure.utils.loadCSS = function(url) { + $('head').append(''); + }; + + $axure.utils.loadJS = function(url) { + $('head').append(''); + }; + + $axure.utils.curry = function(fn) { + var curriedArgs = Array.prototype.slice.call(arguments, [1]); + return function() { + fn.apply(this, curriedArgs.concat(Array.prototype.slice.call(arguments))); + }; + }; + + $axure.utils.succeeded = function(result) { + return result && result.success; + }; + + $axure.utils.createUniqueTag = function() { + return Math.random().toString().substring(2) + + Math.random().toString().substring(2) + + Math.random().toString().substring(2) + + Math.random().toString().substring(2); + }; + + $axure.utils.formatDate = function(date) { + var months = [ + "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; + var hours = date.getHours(); + var amPm = (hours > 11 ? 'PM' : 'AM'); + hours = hours % 12; + if(hours == '0') hours = '12'; + var minutes = date.getMinutes() + ''; + if(minutes.length == 1) { + minutes = '0' + minutes; + } + return [ + months[date.getMonth()], ' ', date.getDate(), ' ', date.getFullYear(), ' ', + hours, ':', minutes, ' ', amPm].join(''); + + }; + + $axure.utils.quickObject = function() { + var returnVal = {}; + for(var i = 0; i < arguments.length; i += 2) { + returnVal[arguments[i]] = arguments[i + 1]; + } + return returnVal; + }; + + var matrixBase = { + mul: function(val) { + if(val.x !== undefined) { + return $axure.utils.Vector2D( + this.m11 * val.x + this.m12 * val.y + this.tx, + this.m21 * val.x + this.m22 * val.y + this.ty); + } else if(val.m11) { + return $axure.utils.Matrix2D( + this.m11 * val.m11 + this.m12 * val.m21, + this.m11 * val.m12 + this.m12 * val.m22, + this.m21 * val.m11 + this.m22 * val.m21, + this.m21 * val.m12 + this.m22 * val.m22, + val.tx + this.tx * val.m11 + this.ty * val.m21, + val.ty + this.tx * val.m12 + this.ty * val.m22 + ); + } else if(Number(val)) { + var num = Number(val); + return $axure.utils.Matrix2D(this.m11 * num, this.m12 * num, + this.m21 * num, this.m22 * num, + this.tx * num, this.ty * num); + } else return undefined; + }, + rotate: function(angle) { + var angleRad = angle * Math.PI / 180; + var c = Math.cos(angleRad); + var s = Math.sin(angleRad); + + return this.mul($axure.utils.Matrix2D(c, -s, s, c)); + }, + translate: function(tx, ty) { + return this.mul($axure.utils.Matrix2D(1, 0, 0, 1, tx, ty)); + } + }; + + $axure.utils.Matrix2D = function(m11, m12, m21, m22, tx, ty) { + return $.extend({ + m11: m11 || 0, + m12: m12 || 0, + m21: m21 || 0, + m22: m22 || 0, + tx: tx || 0, + ty: ty || 0 + }, matrixBase); + }; + + $axure.utils.Vector2D = function(x, y) { + return { x: x || 0, y: y || 0 }; + }; + + $axure.utils.Matrix2D.identity = function() { + return $axure.utils.Matrix2D(1, 0, 0, 1, 0, 0); + }; + + $axure.utils.fixPng = function(png) { + if(!(/MSIE ((5\.5)|6)/.test(navigator.userAgent) && navigator.platform == "Win32")) return; + + var src = png.src; + if(!png.style.width) { png.style.width = $(png).width(); } + if(!png.style.height) { png.style.height = $(png).height(); } + png.onload = function() { }; + png.src = $axure.utils.getTransparentGifPath(); + png.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "',sizingMethod='scale')"; + }; + })(); + + // TODO: [mas] simplify this + if(window.$axure && window.$axure.internal) { + $axure.internal(function($ax) { $ax.utils = $axure.utils; }); + } + + // Its too much of a pain to escape everything and use regular expresions, just replace manually + (function () { + var original = String.prototype.replace; + // TODO: maybe use flags or object instead to pass options in + String.prototype.replace = function (search, newVal, replaceFirst, ignoreCase) { + // Use original is some cases + if (search instanceof RegExp) return original.apply(this, arguments); + + search = String(search); + var searchCompare = ignoreCase ? this.toLowerCase() : this; + if (ignoreCase) search = search.toLowerCase(); + + var searchLength = search.length; + var thisLength = this.length; + + var index = 0; + var retVal = ''; + while (index != -1) { + var nextIndex = searchCompare.indexOf(search, index); + if (nextIndex != -1) { + retVal += this.substring(index, nextIndex) + newVal; + index = nextIndex + searchLength; + if (index >= thisLength) index = -1; + } else { + retVal += this.substring(index); + index = -1; + } + if (replaceFirst) break; + } + + return retVal; + }; + + if (!Array.prototype.indexOf) { + Array.prototype.indexOf = function (elt /*, from*/) { + var len = this.length >>> 0; + + var from = trunc(Number(arguments[1]) || 0); + if(from < 0) from += len; + + for(; from < len; from++) { + if(from in this && this[from] === elt) return from; + } + return -1; + }; + } + + var trunc = function(num) { + return num < 0 ? Math.ceil(num) : Math.floor(num); + }; + + + })(); diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/jquery-1.7.1.min.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/jquery-1.7.1.min.js" new file mode 100644 index 0000000..198b3ff --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/jquery-1.7.1.min.js" @@ -0,0 +1,4 @@ +/*! jQuery v1.7.1 jquery.com | jquery.org/license */ +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
    a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
    "+""+"
    ",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
    t
    ",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
    ",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; +f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

    ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
    ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
    ","
    "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() +{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
    ").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/jquery-ui-1.8.10.custom.min.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/jquery-ui-1.8.10.custom.min.js" new file mode 100644 index 0000000..a7e1293 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/jquery-ui-1.8.10.custom.min.js" @@ -0,0 +1,233 @@ +/*! + * jQuery UI 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.10",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106, +NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this, +"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position"); +if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,l,m){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(l)g-=parseFloat(c.curCSS(f, +"border"+this+"Width",true))||0;if(m)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h, +d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){var b=a.nodeName.toLowerCase(),d=c.attr(a,"tabindex");if("area"===b){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&k(a)}return(/input|select|textarea|button|object/.test(b)?!a.disabled:"a"==b?a.href||!isNaN(d):!isNaN(d))&&k(a)},tabbable:function(a){var b=c.attr(a,"tabindex");return(isNaN(b)||b>=0)&&c(a).is(":focusable")}}); +c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a); +return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;a.target==this._mouseDownEvent.target&&c.data(a.target,this.widgetName+".preventClickEvent", +true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery); +;/* + * jQuery UI Position 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Position + */ +(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY, +left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+= +k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-= +m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left= +d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+= +a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b), +g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery); +;/* + * jQuery UI Draggable 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Draggables + * + * Depends: + * jquery.ui.core.js + * jquery.ui.mouse.js + * jquery.ui.widget.js + */ +(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper== +"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b= +this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;return true},_mouseStart:function(a){var b=this.options;this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top- +this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions(); +d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);return true},_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis|| +this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&& +this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this== +a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone():this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]|| +0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0], +this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top- +(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment== +"parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[(a.containment=="document"?0:d(window).scrollLeft())-this.offset.relative.left-this.offset.parent.left,(a.containment=="document"?0:d(window).scrollTop())-this.offset.relative.top-this.offset.parent.top,(a.containment=="document"?0:d(window).scrollLeft())+d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"? +0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){var b=d(a.containment)[0];if(b){a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"), +10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}}else if(a.containment.constructor== +Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop(): +f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,g=a.pageY; +if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.leftthis.containment[2])e=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-this.originalPageY)/ +b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.topthis.containment[3])?g:!(g-this.offset.click.topthis.containment[2])?e:!(e-this.offset.click.left
    ').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")})}, +stop:function(){d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("opacity"))b._opacity=a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!= +document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){if(!c.axis||c.axis!="x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY=0;h--){var i=c.snapElements[h].left,k=i+c.snapElements[h].width,j=c.snapElements[h].top,l=j+c.snapElements[h].height;if(i-e').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(), +top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle= +this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne", +nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor== +String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),k=0;k=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,k);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection(); +this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){e(this).removeClass("ui-resizable-autohide");b._handles.show()},function(){if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()}; +if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(), +d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"});this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset= +this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio: +this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis];if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize", +b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height; +f=f?0:c.sizeDiff.width;f={width:c.helper.width()-f,height:c.helper.height()-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f,{top:g,left:d}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing"); +this._propagate("stop",b);this._helper&&this.helper.remove();return false},_updateCache:function(b){this.offset=this.helper.offset();if(l(b.left))this.position.left=b.left;if(l(b.top))this.position.top=b.top;if(l(b.height))this.size.height=b.height;if(l(b.width))this.size.width=b.width},_updateRatio:function(b){var a=this.position,c=this.size,d=this.axis;if(b.height)b.width=c.height*this.aspectRatio;else if(b.width)b.height=c.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top= +null}if(d=="nw"){b.top=a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this.options,c=this.axis,d=l(b.width)&&a.maxWidth&&a.maxWidthb.width,h=l(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+ +this.size.height,k=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&k)b.left=i-a.minWidth;if(d&&k)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b, +a){return{width:this.originalSize.width+a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a, +c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize, +originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,{version:"1.8.10"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize= +b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var k=e(this),q=e(this).data("resizable-alsoresize"),p={},r=j&&j.length?j:k.parents(a.originalElement[0]).length?["width","height"]:["width", +"height","top","left"];e.each(r,function(n,o){if((n=(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(k.css("position"))){c._revertToRelativePosition=true;k.css({position:"absolute",top:"auto",left:"auto"})}k.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})}; +if(b._revertToRelativePosition){b._revertToRelativePosition=false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height- +g};g=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing,step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width, +height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d= +e(a),f=[];e(["Top","Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset;var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options, +d=a.containerOffset,f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left:a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper? +d.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top-d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height= +a.size.width/a.aspectRatio}if(d+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition,f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&& +/static/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable"); +b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b=e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/ +(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,10)||0},l=function(b){return!isNaN(parseInt(b,10))}})(jQuery); +;/* + * jQuery UI Dialog 1.8.10 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.button.js + * jquery.ui.draggable.js + * jquery.ui.mouse.js + * jquery.ui.position.js + * jquery.ui.resizable.js + */ +(function(c,j){var k={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},l={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true};c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:{my:"center",at:"center",collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&& +c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var a=this,b=a.options,d=b.title||" ",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("
    ")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex", +-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("
    ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),h=c('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role", +"button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("").addClass("ui-dialog-title").attr("id",e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose= +b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");a.uiDialog.remove();a.originalTitle&& +a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d,e;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==b.uiDialog[0]){e=c(this).css("z-index"); +isNaN(e)||(d=Math.max(d,e))}});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index",c.ui.dialog.maxZ); +d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target===f[0]&&e.shiftKey){g.focus(1);return false}}}); +c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._isOpen=true;a._trigger("open");return a}},_createButtons:function(a){var b=this,d=false,e=c("
    ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("
    ").addClass("ui-dialog-buttonset").appendTo(e);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a,function(f, +h){h=c.isFunction(h)?{click:h,text:f}:h;f=c('').attr(h,true).unbind("click").click(function(){h.click.apply(b.element[0],arguments)}).appendTo(g);c.fn.button&&f.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g= +d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition,originalSize:f.originalSize, +position:f.position,size:f.size}}a=a===j?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize",f,b(h))},stop:function(f, +h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop",f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0],e;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length=== +1)b[1]=b[0];c.each(["left","top"],function(g,f){if(+b[g]===b[g]){d[g]=b[g];b[g]=f}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(e=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(c.extend({of:window},a));e||this.uiDialog.hide()},_setOptions:function(a){var b=this,d={},e=false;c.each(a,function(g,f){b._setOption(g,f);if(g in k)e=true;if(g in +l)d[g]=f});e&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",d)},_setOption:function(a,b){var d=this,e=d.uiDialog;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"):e.removeClass("ui-dialog-disabled"); +break;case "draggable":var g=e.is(":data(draggable)");g&&!b&&e.draggable("destroy");!g&&b&&d._makeDraggable();break;case "position":d._position(b);break;case "resizable":(g=e.is(":data(resizable)"))&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||" "));break}c.Widget.prototype._setOption.apply(d,arguments)},_size:function(){var a=this.options,b,d,e= +this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();d=Math.max(0,a.minHeight-b);if(a.height==="auto")if(c.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();a=this.element.css("height","auto").height();e||this.uiDialog.hide();this.element.height(Math.max(a,d))}else this.element.height(Math.max(a.height-b,0));this.uiDialog.is(":data(resizable)")&& +this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.10",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(a){if(this.instances.length=== +0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){if(c(d.target).zIndex()").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(), +height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){var b=c.inArray(a,this.instances);b!=-1&&this.oldInstances.push(this.instances.splice(b,1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var d=0;c.each(this.instances,function(){d=Math.max(d,this.css("z-index"))});this.maxZ=d},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight); +b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent", +border:"none",margin:0,padding:0});c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c); +return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});return d.call(this,b)},_show:f.fn.show,show:function(c){if(m(c))return this._show.apply(this,arguments); +else{var a=k.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(m(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(m(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c), +b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c, +a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c, +a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a== +e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h= 5 && + location.href.indexOf('file://') >= 0; + } + + var safariRegex = /Safari\/([0-9]+)/g; + var safariMatch = safariRegex.exec(useragent); + SAFARI = Boolean(safariMatch) && !CHROME; //because chrome also inserts safari string into user agent + + var webkitRegex = /WebKit\//g ; + WEBKIT = Boolean(webkitRegex.exec(useragent)); + + FIREFOX = useragent.toLowerCase().indexOf('firefox') > -1; + + var macRegex = /Mac/g ; + OS_MAC = Boolean(macRegex.exec(window.navigator.platform)); + + IOS = useragent.match(/iPhone/i) || useragent.match(/iPad/i) || useragent.match(/iPod/i); + + MOBILE_DEVICE = navigator.userAgent.match(/Android/i) + || navigator.userAgent.match(/webOS/i) + || navigator.userAgent.match(/iPhone/i) + || navigator.userAgent.match(/iPad/i) + || navigator.userAgent.match(/iPod/i) + || navigator.userAgent.match(/BlackBerry/i) + || navigator.userAgent.match(/Tablet PC/i) + || navigator.userAgent.match(/Windows Phone/i); + + if($.browser) { + if($.browser.msie) IE_10_AND_BELOW = true; + else IE_11_AND_ABOVE = useragent.toLowerCase().indexOf('trident') > -1; + + BROWSER_VERSION = $.browser.version; + } + + IE = IE_10_AND_BELOW || IE_11_AND_ABOVE; + + //Used by sitemap and variables.js getLinkUrl functions so that they know + //whether to embed global variables in URL as query string or hash string + //_shouldSendVars persists the value for sitemap instead of re-checking every time + var _shouldSendVars; + var _shouldSendVarsToServer = function(url) { + if(typeof _shouldSendVars != 'undefined') { + return _shouldSendVars; + } + + if(SAFARI || (IE_10_AND_BELOW && BROWSER_VERSION < 10)) { + var urlToCheck = typeof url != 'undefined' ? url : window.location.href; + var serverRegex = /http:\/\/127\.0\.0\.1:[0-9]{5}/g; + var serverMatch = serverRegex.exec(urlToCheck); + var previewRegex = /[0-9]{2}\.[0-9]{2}\.[0-9]{2}/g; + var previewMatch = previewRegex.exec(urlToCheck); + if(Boolean(serverMatch) && Boolean(previewMatch)) { + _shouldSendVars = true; + return _shouldSendVars; + } + } + + _shouldSendVars = false; + return _shouldSendVars; + }; + $axure.shouldSendVarsToServer = _shouldSendVarsToServer; +})(); + +(function() { + var _topMessageCenter; + var _messageCenter = {}; + var _listeners = []; + var _stateListeners = []; + var _state = {}; + var _eventObject = null; + + var _queuedMessages = []; + var _initialized = false; + + // this is for the non Chrome 5 local scenarios. The "top" message center will dispatch to all the bottom ones + var _childrenMessageCenters = []; + + // create $axure if it hasn't been created + if (!window.$axure) window.$axure = function() {}; + $axure.messageCenter = _messageCenter; + + // isolate scope, and initialize _topMessageCenter. + (function() { + if (!CHROME_5_LOCAL) { + var topAxureWindow = window; + try { + while(topAxureWindow.parent && topAxureWindow.parent !== topAxureWindow + && topAxureWindow.parent.$axure) topAxureWindow = topAxureWindow.parent; + } catch(e) {} + _topMessageCenter = topAxureWindow.$axure.messageCenter; + } + })(); + + $(window.document).ready(function() { + if (CHROME_5_LOCAL) { + $('body').append("" + + ""); + + _eventObject = window.document.createEvent('Event'); + _eventObject.initEvent('axureMessageSenderEvent', true, true); + + $('#axureEventReceiverDiv').bind('axureMessageReceiverEvent', function () { + var request = JSON.parse($(this).text()); + _handleRequest(request); + }); + } else { + if (_topMessageCenter != _messageCenter) { + _topMessageCenter.addChildMessageCenter(_messageCenter); + console.log('adding from ' + window.location.toString()); + } + } + }); + + var _handleRequest = function (request) { + // route the request to all the listeners + for(var i = 0; i < _listeners.length; i++) _listeners[i](request.message, request.data); + + // now handle the queued messages if we're initializing + if (request.message == 'initialize') { + _initialized = true; + // send all the queued messages and return + for (var i = 0; i < _queuedMessages.length; i++) { + var qRequest = _queuedMessages[i]; + _messageCenter.postMessage(qRequest.message, qRequest.data); + } + _queuedMessages = []; + } + + // and then handle the set state messages, if necessary + if (request.message == 'setState') { + _state[request.data.key] = request.data.value; + for (var i = 0; i < _stateListeners.length; i++) { + var keyListener = _stateListeners[i]; + // if thep passed a null or empty value, always post the message + if (!keyListener.key || keyListener.key == request.data.key) { + keyListener.listener(request.data.key, request.data.value); + } + } + } + + }; + + // ----------------------------------------------------------------------------------------- + // This method allows for dispatching messages in the non-chromelocal scenario. + // Each child calls this on _topMessageCenter + // ----------------------------------------------------------------------------------------- + _messageCenter.addChildMessageCenter = function(messageCenter) { + _childrenMessageCenters[_childrenMessageCenters.length] = messageCenter; + }; + + // ----------------------------------------------------------------------------------------- + // This method allows for dispatching messages in the non-chromelocal scenario. + // Each child calls this on _topMessageCenter + // ----------------------------------------------------------------------------------------- + _messageCenter.dispatchMessage = function(message, data) { + _handleRequest({ + message: message, + data: data + }); + }; + + // ----------------------------------------------------------------------------------------- + // ----------------------------------------------------------------------------------------- + _messageCenter.dispatchMessageRecursively = function(message, data) { + console.log("dispatched to " + window.location.toString()); + + // dispatch to the top center first + _messageCenter.dispatchMessage(message, data); + + $('iframe').each(function(index, frame) { + //try,catch to handle permissions error in FF when loading pages from another domain + try { + if (frame.contentWindow.$axure && frame.contentWindow.$axure.messageCenter) { + frame.contentWindow.$axure.messageCenter.dispatchMessageRecursively(message, data); + } + }catch(e) {} + }); + }; + + _messageCenter.postMessage = function(message, data) { + if(!CHROME_5_LOCAL) { + _topMessageCenter.dispatchMessageRecursively(message, data); + } else { + var request = { + message: message, + data: data + }; + + if(_initialized) { + var senderDiv = window.document.getElementById('axureEventSenderDiv'); + var messageText = JSON.stringify(request); + // console.log('sending event: ' + messageText); + senderDiv.innerText = messageText; + senderDiv.dispatchEvent(_eventObject); + // console.log('event sent'); + } else { + _queuedMessages[_queuedMessages.length] = request; + } + } + }; + + _messageCenter.setState = function(key, value) { + var data = { + key: key, + value: value + }; + _messageCenter.postMessage('setState', data); + }; + + _messageCenter.getState = function(key) { + return _state[key]; + }; + + _messageCenter.addMessageListener = function(listener) { + _listeners[_listeners.length] = listener; + }; + + _messageCenter.addStateListener = function(key, listener) { + _stateListeners[_stateListeners.length] = { + key: key, + listener: listener + }; + }; + +})(); diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/player/axplayer.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/player/axplayer.js" new file mode 100644 index 0000000..f9cb965 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/player/axplayer.js" @@ -0,0 +1,206 @@ +锘縤f (!window.$axure) window.$axure = function () { }; +if (typeof console == 'undefined') console = { + log: function () { } +}; +if(window._axUtils) $axure.utils = _axUtils; + +$axure.loadDocument = function(document) { + $axure.document = document; +}; + +function setUpController() { + + //$axure.utils = _axUtils; + + var _page = {}; + $axure.page = _page; + + $axure.utils.makeBindable(_page, ['load']); + + var _player = function() { + }; + $axure.player = _player; + + //----------------------------------------- + //Global Var array, getLinkUrl function and setGlobalVar listener are + //for use in setting global vars in page url string when clicking a + //page in the sitemap + //----------------------------------------- + var _globalVars = {}; + + //----------------------------------------- + //Used by getLinkUrl below to check if local server is running + //in order to send back the global variables as a query string + //in the page url + //----------------------------------------- + var _shouldSendVarsToServer = function () { + //If exception occurs (due to page in content frame being from a different domain, etc) + //then run the check without the url (which will end up checking against sitemap url) + try { + var mainFrame = document.getElementById("mainFrame"); + return $axure.shouldSendVarsToServer(mainFrame.contentWindow.location.href); + } catch (e) { + return $axure.shouldSendVarsToServer(); + } + }; + + var _getLinkUrl = function (baseUrl) { + var toAdd = ''; + for(var globalVarName in _globalVars) { + var val = _globalVars[globalVarName]; + if(val != null) { + if(toAdd.length > 0) toAdd += '&'; + toAdd += globalVarName + '=' + encodeURIComponent(val); + } + } + return toAdd.length > 0 ? baseUrl + (_shouldSendVarsToServer() ? '?' : '#') + toAdd + "&CSUM=1" : baseUrl; + }; + $axure.getLinkUrlWithVars = _getLinkUrl; + + $axure.messageCenter.addMessageListener(function(message, data) { + if (message == 'setGlobalVar'){ + _globalVars[data.globalVarName] = data.globalVarValue; + } + }); + + $axure.messageCenter.addStateListener('page.data', function (key, value) { + for (var subKey in value) { + _page[subKey] = value[subKey]; + } + $axure.page.triggerEvent('load'); + }); + + // --------------------------------------------- + // Navigates the main frame (setting the currently visible page). If the link is relative, + // this method should test if it is actually a axure rp page being loaded and properly set + // up all the controller for the page if it is + // --------------------------------------------- + _page.navigate = function (url, includeVariables) { + var mainFrame = document.getElementById("mainFrame"); + //var mainFrame = window.parent.mainFrame; + // if this is a relative url... + var urlToLoad; + if (url.indexOf(':') < 0 || url[0] == '/') { + var winHref = window.location.href; + var page = winHref.substring(0, winHref.lastIndexOf('/') + 1) + url; + urlToLoad = page; + } else { + urlToLoad = url; + } + if (!includeVariables) { + mainFrame.contentWindow.location.href = urlToLoad; + return; + } + var urlWithVars = $axure.getLinkUrlWithVars(urlToLoad); + var currentData = $axure.messageCenter.getState('page.data'); + var currentUrl = currentData && currentData.location; + if(currentUrl && currentUrl.indexOf('#') != -1) currentUrl = currentUrl.substring(0, currentUrl.indexOf('#')) + + // this is so we can make sure the current frame reloads if the variables have changed + // by default, if the location is the same but the hash code is different, the browser will not + // trigger a reload + mainFrame.contentWindow.location.href = + currentUrl && urlToLoad.toLowerCase() != currentUrl.toLowerCase() + ? urlWithVars + : 'resources/reload.html#' + encodeURI(urlWithVars); + + }; + + var pluginIds = []; + var plugins = {}; + var currentVisibleHostId = null; + // --------------------------------------------- + // Adds a tool box frame from a url to the interface. This is useful for loading plugins + // settings is an object that supports the following properties: + // - id : the id of the element for the plugin + // - context : the context to create the plugin host for + // - title : the user-visible caption for the plugin + // --------------------------------------------- + _player.createPluginHost = function (settings) { + // right now we only understand an interface context + if (!(!settings.context || settings.context === 'interface')) { + throw ('unknown context type'); + } + if (!settings.id) throw ('each plugin host needs an id'); + + var host = $('
    ') + .appendTo('#interfaceControlFrameHostContainer'); + + host.hide(); + + var headerLink = $('' + settings.title.toUpperCase() + ''); + + headerLink + .click($axure.utils.curry(interfaceControlHeaderButton_click, settings.id)).wrap('
  • '); + + if((settings.id == 'feedbackHost' || settings.id == 'feedbackContainer') && pluginIds[pluginIds.length - 1] == 'debugHost') headerLink.parent().insertBefore('#debugHostBtn'); + else headerLink.parent().appendTo('#interfaceControlFrameHeader'); + + pluginIds[pluginIds.length] = settings.id; + plugins[settings.id] = settings; + + $(document).trigger('pluginCreated', [settings.gid]); + }; + + // private methods + var interfaceControlHeaderButton_click = function (id) { + var clickedPlugin = $('#interfaceControlFrameHeader a[pluginId=' + id + ']'); + if(clickedPlugin.hasClass('selected')) { + clickedPlugin.removeClass('selected'); + $('#' + id).hide(); + _player.collapseToBar(); + + $(document).trigger('pluginShown',['']); + } else { + $('#interfaceControlFrameHeader a').removeClass('selected'); + clickedPlugin.addClass('selected'); + + $('#' + currentVisibleHostId).hide(); + $('#' + id).show(); + currentVisibleHostId = id; + _player.expandFromBar(); + + $(document).trigger('pluginShown', [plugins[id].gid]); + } + + $(document).trigger('ContainerHeightChange'); + }; + + $axure.player.showPlugin = function(gid) { + for(var id in plugins) { + if(plugins[id].gid == gid) { + $('a[pluginId="' + id + '"]').click(); + break; + } + } + }; +} + +function setUpDocumentStateManager() { + var mgr = $axure.prototype.documentStateManager = {}; + $axure.utils.makeBindable(mgr, ['globalVariableChanged']); + + mgr.globalVariableValues = {}; + + mgr.setGlobalVariable = function(varname, value, source) { + var arg = {}; + arg.variableName = varname; + arg.newValue = value; + arg.oldValue = this.getGlobalVariable(varname); + arg.source = source; + + mgr.globalVariableValues[varname] = value; + this.triggerEvent('globalVariableChanged', arg); + }; + + mgr.getGlobalVariable = function(varname) { + return mgr.globalVariableValues[varname]; + }; +} + + +function setUpPageStateManager() { + var mgr = $axure.prototype.pageStateManager = {}; + + mgr.panelToStateIds = {}; +} diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/player/splitter.js" "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/player/splitter.js" new file mode 100644 index 0000000..9bda98a --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/resources/scripts/player/splitter.js" @@ -0,0 +1,218 @@ +/* +* jQuery.splitter.js - two-pane splitter window plugin +* +* version 1.51 (2009/01/09) +* +* Dual licensed under the MIT and GPL licenses: +* http://www.opensource.org/licenses/mit-license.php +* http://www.gnu.org/licenses/gpl.html +*/ + +/** +* The splitter() plugin implements a two-pane resizable splitter window. +* The selected elements in the jQuery object are converted to a splitter; +* each selected element should have two child elements, used for the panes +* of the splitter. The plugin adds a third child element for the splitbar. +* +* For more details see: http://methvin.com/splitter/ +* +* +* @example $('#MySplitter').splitter(); +* @desc Create a vertical splitter with default settings +* +* @example $('#MySplitter').splitter({type: 'h', accessKey: 'M'}); +* @desc Create a horizontal splitter resizable via Alt+Shift+M +* +* @name splitter +* @type jQuery +* @param Object options Options for the splitter (not required) +* @cat Plugins/Splitter +* @return jQuery +* @author Dave Methvin (dave.methvin@gmail.com) +*/ +;(function($){ + +$.fn.splitter = function(args){ + args = args || {}; + return this.each(function() { + var zombie; // left-behind splitbar for outline resizes + function startSplitMouse(evt) { + if ( opts.outline ) + zombie = zombie || bar.clone(false).insertAfter(A); + panes.css("-webkit-user-select", "none"); // Safari selects A/B text on a move + bar.addClass(opts.activeClass); + $('
    ').insertAfter(bar); + A._posSplit = A[0][opts.pxSplit] - evt[opts.eventPos]; + $(document) + .bind("mousemove", doSplitMouse) + .bind("mouseup", endSplitMouse); + } + function doSplitMouse(evt) { + var newPos = A._posSplit+evt[opts.eventPos]; + if ( opts.outline ) { + newPos = Math.max(0, Math.min(newPos, splitter._DA - bar._DA)); + bar.css(opts.origin, newPos); + } else + resplit(newPos); + } + function endSplitMouse(evt) { + $('div.splitterMask').remove(); + bar.removeClass(opts.activeClass); + var newPos = A._posSplit+evt[opts.eventPos]; + if ( opts.outline ) { + zombie.remove(); zombie = null; + resplit(newPos); + } + panes.css("-webkit-user-select", "text"); // let Safari select text again + $(document) + .unbind("mousemove", doSplitMouse) + .unbind("mouseup", endSplitMouse); + } + function resplit(newPos) { + // Constrain new splitbar position to fit pane size limits + newPos = Math.max(A._min, splitter._DA - B._max, + Math.min(newPos, A._max, splitter._DA - bar._DA - B._min)); + // Resize/position the two panes + bar._DA = bar[0][opts.pxSplit]; // bar size may change during dock + + var posOffset = bar.is(':visible') ? bar._DA - 1 : 0; + + bar.css(opts.origin, newPos - posOffset).css(opts.fixed, splitter._DF); + A.css(opts.origin, 0).css(opts.split, newPos).css(opts.fixed, splitter._DF); + B.css(opts.origin, newPos + bar._DA - posOffset) + .css(opts.split, splitter._DA-bar._DA-newPos).css(opts.fixed, splitter._DF); + // IE fires resize for us; all others pay cash + if ( !IE_10_AND_BELOW ) + panes.trigger("resize"); + } + function dimSum(jq, dims) { + // Opera returns -1 for missing min/max width, turn into 0 + var sum = 0; + for ( var i=1; i < arguments.length; i++ ) + sum += Math.max(parseInt(jq.css(arguments[i])) || 0, 0); + return sum; + } + + // Determine settings based on incoming opts, element classes, and defaults + var vh = (args.splitHorizontal? 'h' : args.splitVertical? 'v' : args.type) || 'v'; + var opts = $.extend({ + activeClass: 'active', // class name for active splitter + pxPerKey: 8, // splitter px moved per keypress + tabIndex: 0, // tab order indicator + accessKey: '' // accessKey for splitbar + },{ + v: { // Vertical splitters: + keyLeft: 39, keyRight: 37, cursor: "col-resize", + splitbarClass: "vsplitbar", outlineClass: "voutline", + type: 'v', eventPos: "pageX", origin: "left", + split: "width", pxSplit: "offsetWidth", side1: "Left", side2: "Right", + fixed: "height", pxFixed: "offsetHeight", side3: "Top", side4: "Bottom" + }, + h: { // Horizontal splitters: + keyTop: 40, keyBottom: 38, cursor: "row-resize", + splitbarClass: "hsplitbar", outlineClass: "houtline", + type: 'h', eventPos: "pageY", origin: "top", + split: "height", pxSplit: "offsetHeight", side1: "Top", side2: "Bottom", + fixed: "width", pxFixed: "offsetWidth", side3: "Left", side4: "Right" + } + }[vh], args); + + // Create jQuery object closures for splitter and both panes + var splitter = $(this).css({position: "relative"}); + var panes = $(">*", splitter[0]).css({ + position: "absolute", // positioned inside splitter container + "z-index": "1", // splitbar is positioned above + "-moz-outline-style": "none" // don't show dotted outline + }); + var A = $(panes[0]); // left or top + var B = $(panes[1]); // right or bottom + + // Focuser element, provides keyboard support; title is shown by Opera accessKeys + var focuser = $('') + .attr({accessKey: opts.accessKey, tabIndex: opts.tabIndex, title: opts.splitbarClass}) + .bind($.browser.opera?"click":"focus", function(){ this.focus(); bar.addClass(opts.activeClass) }) + .bind("keydown", function(e){ + var key = e.which || e.keyCode; + var dir = key==opts["key"+opts.side1]? 1 : key==opts["key"+opts.side2]? -1 : 0; + if ( dir ) + resplit(A[0][opts.pxSplit]+dir*opts.pxPerKey, false); + }) + .bind("blur", function(){ bar.removeClass(opts.activeClass) }); + + // Splitbar element, can be already in the doc or we create one + var bar = $(panes[2] || '
    ') + .insertAfter(A).css("z-index", "100").append(focuser) + .attr({"class": opts.splitbarClass, unselectable: "on"}) + .css({position: "absolute", "user-select": "none", "-webkit-user-select": "none", + "-khtml-user-select": "none", "-moz-user-select": "none", "top": "0px"}) + .bind("mousedown", startSplitMouse); + // Use our cursor unless the style specifies a non-default cursor + if ( /^(auto|default|)$/.test(bar.css("cursor")) ) + bar.css("cursor", opts.cursor); + + // Cache several dimensions for speed, rather than re-querying constantly + bar._DA = bar[0][opts.pxSplit]; + splitter._PBF = $.boxModel? dimSum(splitter, "border"+opts.side3+"Width", "border"+opts.side4+"Width") : 0; + splitter._PBA = $.boxModel? dimSum(splitter, "border"+opts.side1+"Width", "border"+opts.side2+"Width") : 0; + A._pane = opts.side1; + B._pane = opts.side2; + $.each([A,B], function(){ + this._min = opts["min"+this._pane] || dimSum(this, "min-"+opts.split); + this._max = opts["max"+this._pane] || dimSum(this, "max-"+opts.split) || 9999; + this._init = opts["size"+this._pane]===true ? + parseInt($.curCSS(this[0],opts.split)) : opts["size"+this._pane]; + }); + + // Determine initial position, get from cookie if specified + var initPos = A._init; + if ( !isNaN(B._init) ) // recalc initial B size as an offset from the top or left side + initPos = splitter[0][opts.pxSplit] - splitter._PBA - B._init - bar._DA; + if ( opts.cookie ) { + if ( !$.cookie ) + alert('jQuery.splitter(): jQuery cookie plugin required'); + var ckpos = parseInt($.cookie(opts.cookie)); + if ( !isNaN(ckpos) ) + initPos = ckpos; + $(window).bind("unload", function(){ + var state = String(bar.css(opts.origin)); // current location of splitbar + $.cookie(opts.cookie, state, {expires: opts.cookieExpires || 365, + path: opts.cookiePath || document.location.pathname}); + }); + } + if ( isNaN(initPos) ) // King Solomon's algorithm + initPos = Math.round((splitter[0][opts.pxSplit] - splitter._PBA - bar._DA)/2); + + // Resize event propagation and splitter sizing + if ( opts.anchorToWindow ) { + // Account for margin or border on the splitter container and enforce min height + splitter._hadjust = dimSum(splitter, "borderTopWidth", "borderBottomWidth", "marginBottom"); + splitter._hmin = Math.max(dimSum(splitter, "minHeight"), 20); + $(window).bind("resize", function(){ + var top = splitter.offset().top; + var wh = $(window).height(); + splitter.css("height", Math.max(wh-top-splitter._hadjust, splitter._hmin)+"px"); + if ( !IE_10_AND_BELOW ) splitter.trigger("resize"); + }).trigger("resize"); + } + else if ( opts.resizeToWidth && !IE_10_AND_BELOW ) + $(window).bind("resize", function(){ + splitter.trigger("resize"); + }); + + // Resize event handler; triggered immediately to set initial position + splitter.bind("resize", function(e, size){ + // Custom events bubble in jQuery 1.3; don't Yo Dawg + if ( e.target != this ) return; + // Determine new width/height of splitter container + splitter._DF = splitter[0][opts.pxFixed] - splitter._PBF; + splitter._DA = splitter[0][opts.pxSplit] - splitter._PBA; + // Bail if splitter isn't visible or content isn't there yet + if ( splitter._DF <= 0 || splitter._DA <= 0 ) return; + // Re-divvy the adjustable dimension; maintain size of the preferred pane + resplit(!isNaN(size)? size : (!(opts.sizeRight||opts.sizeBottom)? A[0][opts.pxSplit] : + splitter._DA-B[0][opts.pxSplit]-bar._DA)); + }).trigger("resize" , [initPos]); + }); +}; + +})(jQuery); \ No newline at end of file diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/start.html" "b/\347\225\214\351\235\242\350\256\276\350\256\241/start.html" new file mode 100644 index 0000000..5851bf2 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/start.html" @@ -0,0 +1,503 @@ +锘 + + + Untitled Document + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    +
    +   +
    +
    +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      + CLOSE +
      +
      +
      +
      + +
      + +
      + +
      + +
      + + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/start_c_1.html" "b/\347\225\214\351\235\242\350\256\276\350\256\241/start_c_1.html" new file mode 100644 index 0000000..82de5fd --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/start_c_1.html" @@ -0,0 +1,12 @@ +锘 + + + + + + + + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/start_g_0.html" "b/\347\225\214\351\235\242\350\256\276\350\256\241/start_g_0.html" new file mode 100644 index 0000000..82aa640 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/start_g_0.html" @@ -0,0 +1,12 @@ +锘 + + + + + + + + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/\345\234\237\345\234\260\347\247\237\350\265\201.html" "b/\347\225\214\351\235\242\350\256\276\350\256\241/\345\234\237\345\234\260\347\247\237\350\265\201.html" new file mode 100644 index 0000000..fee6b13 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/\345\234\237\345\234\260\347\247\237\350\265\201.html" @@ -0,0 +1,2505 @@ +锘 + + + 鍦熷湴绉熻祦 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + +
      +
      + + +
      + + +
      + + + +
      + + +
      +
      + +
      +

      婀栧崡鍐滀笟澶у

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴绠$悊绯荤粺

      +
      +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鏇存敼瀵嗙爜

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      閫鍑

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      绔欏唴浣嶇疆锛氬湡鍦扮璧

      +
      +
      + + +
      +
      + +
      +

      鍩哄湴鍚嶏細

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      #1

      +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      #2

      +
      +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鐢宠绉熻祦

      +
      +
      + + +
      + + +
      +
      + +
      +

      鍩哄湴鍚嶏細

      +
      +
      + + +
      +
      + +
      +

      鑰曞洯绉戞暀缁煎悎鍩哄湴

      +
      +
      + + +
      +
      + +
      +

      鍦熷湴鍚嶏細鑰曞洯姘旇薄绔

      +
      +
      + + +
      +
      + +
      +

      鍦熷湴缂栧彿锛#1

      +
      +
      + + +
      +
      + +
      +

      鎵灞炲闄細鍐滃闄

      +
      +
      + + +
      +
      + +
      +

      闈㈠悜涓撲笟锛氳尪瀛

      +
      +
      + + +
      +
      + +
      +

      鍦熷湴闈㈢Н锛12骞虫柟绫

      +
      +
      + + +
      +
      + +
      +

      寤虹瓚闈㈢Н锛10骞虫柟绫

      +
      +
      + + +
      +
      + +
      +

      鍙壙鎷呬汉鏁帮細70浜

      +
      +
      + + +
      +
      + +
      +

      閫傚疁浠庝簨鍐呭锛氱帀绫

      +
      +
      + + +
      +
      + +
      +

      澶囨敞锛氭鍦熷湴甯稿勾鐢ㄦ潵绉

                妞嶇帀绫筹紝鍦熷湴鍛堝急

                纰辨э紝鍦熻川鏉捐蒋銆

      +
      +
      +
      + + + + + +
      +
      + +
      +

      绛涢夛細

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      鍦熷湴甯冨眬鍥

      +
      +
      + + + + + +
      +
      + +
      +

      鍩烘湰淇℃伅

      +
      +
      + + +
      +
      + +
      +

      绉熻祦淇℃伅

      +
      +
      + + + + + + + + + + + +
      +
      + +
      +

      鎶ヤ慨鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑宸ヤ綔

      +
      +
      + + + + + +
      +
      + +
      +

      +
      +
      +
      + + +
      +
      +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑绉熻祦

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑瀹炰範

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鍩哄湴

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鎶ヤ慨

      +
      +
      +
      +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      浜嬪姟瀹℃壒

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鏁版嵁绠$悊

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      缁熻鍒嗘瀽

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      +
      + +
      +

      鍦熷湴绉熻祦

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鐢宠

      +
      +
      + + +
      +
      + +
      +

      棣   椤

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      涓荤晫闈

      +
      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      +
      + +
      +

      +
      +
      +
      + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/\345\234\237\345\234\260\347\247\237\350\265\201\345\256\241\346\211\271.html" "b/\347\225\214\351\235\242\350\256\276\350\256\241/\345\234\237\345\234\260\347\247\237\350\265\201\345\256\241\346\211\271.html" new file mode 100644 index 0000000..0be3f39 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/\345\234\237\345\234\260\347\247\237\350\265\201\345\256\241\346\211\271.html" @@ -0,0 +1,4175 @@ +锘 + + + 鍦熷湴绉熻祦瀹℃壒 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + +
      + + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎷掔粷鐢宠

      +
      +
      + + +
      +
      + +
      +

      鍚屾剰鐢宠

      +
      +
      + + +
      + +
      + + +
      + + +
      + + +
      +
      + +
      +

      搴忓彿

      +
      +
      + + +
      +
      + +
      +

      寮濮嬫棩鏈

      +
      +
      + + +
      +
      + +
      +

      缁撴潫鏃ユ湡

      +
      +
      + + +
      +
      + +
      +

      鍩哄湴鍚嶇О

      +
      +
      + + +
      +
      + +
      +

      鍦熷湴缂栧彿

      +
      +
      + + +
      +
      + +
      +

      鐢宠浜

      +
      +
      + + +
      +
      + +
      +

      瀛﹂櫌

      +
      +
      + + +
      +
      + +
      +

      娆℃暟

      +
      +
      + + +
      +
      + +
      +

      绉嶆鍐呭

      +
      +
      + + +
      + + + +
      +
      +
      + + +
      + + +
      + + +
      +
      + +
      +

      搴忓彿

      +
      +
      + + +
      +
      + +
      +

      寮濮嬫棩鏈

      +
      +
      + + +
      +
      + +
      +

      缁撴潫鏃ユ湡

      +
      +
      + + +
      +
      + +
      +

      鍩哄湴鍚嶇О

      +
      +
      + + +
      +
      + +
      +

      鍦熷湴缂栧彿

      +
      +
      + + +
      +
      + +
      +

      鐢宠浜

      +
      +
      + + +
      +
      + +
      +

      瀛﹂櫌

      +
      +
      + + +
      +
      + +
      +

      娆℃暟

      +
      +
      + + +
      +
      + +
      +

      绉嶆鍐呭

      +
      +
      + + +
      + + + +
      +
      +
      + + +
      + + +
      + + +
      +
      + +
      +

      搴忓彿

      +
      +
      + + +
      +
      + +
      +

      寮濮嬫棩鏈

      +
      +
      + + +
      +
      + +
      +

      缁撴潫鏃ユ湡

      +
      +
      + + +
      +
      + +
      +

      鍩哄湴鍚嶇О

      +
      +
      + + +
      +
      + +
      +

      鍦熷湴缂栧彿

      +
      +
      + + +
      +
      + +
      +

      鐢宠浜

      +
      +
      + + +
      +
      + +
      +

      瀛﹂櫌

      +
      +
      + + +
      +
      + +
      +

      娆℃暟

      +
      +
      + + +
      +
      + +
      +

      绉嶆鍐呭

      +
      +
      + + +
      + + + +
      +
      +
      + + +
      + + +
      + + +
      +
      + +
      +

      搴忓彿

      +
      +
      + + +
      +
      + +
      +

      寮濮嬫棩鏈

      +
      +
      + + +
      +
      + +
      +

      缁撴潫鏃ユ湡

      +
      +
      + + +
      +
      + +
      +

      鍩哄湴鍚嶇О

      +
      +
      + + +
      +
      + +
      +

      鍦熷湴缂栧彿

      +
      +
      + + +
      +
      + +
      +

      鐢宠浜

      +
      +
      + + +
      +
      + +
      +

      瀛﹂櫌

      +
      +
      + + +
      +
      + +
      +

      娆℃暟

      +
      +
      + + +
      +
      + +
      +

      绉嶆鍐呭

      +
      +
      + + +
      + + + +
      +
      +
      + + +
      + + +
      + + +
      +
      + +
      +

      搴忓彿

      +
      +
      + + +
      +
      + +
      +

      寮濮嬫棩鏈

      +
      +
      + + +
      +
      + +
      +

      缁撴潫鏃ユ湡

      +
      +
      + + +
      +
      + +
      +

      鍩哄湴鍚嶇О

      +
      +
      + + +
      +
      + +
      +

      鍦熷湴缂栧彿

      +
      +
      + + +
      +
      + +
      +

      鐢宠浜

      +
      +
      + + +
      +
      + +
      +

      瀛﹂櫌

      +
      +
      + + +
      +
      + +
      +

      娆℃暟

      +
      +
      + + +
      +
      + +
      +

      绉嶆鍐呭

      +
      +
      + + +
      + + + +
      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      婀栧崡鍐滀笟澶у

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴绠$悊绯荤粺

      +
      +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鏇存敼瀵嗙爜

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      閫鍑

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      + + +
      + + +
      +

      搴忓彿

      +
      +
      + + +
      + + +
      +

      寮濮嬫棩鏈

      +
      +
      + + +
      + + +
      +

      缁撴潫鏃ユ湡

      +
      +
      + + +
      + + +
      +

      鍩哄湴鍚

      +
      +
      + + +
      + + +
      +

      鍦熷湴缂栧彿

      +
      +
      + + +
      + + +
      +

      鐢宠浜

      +
      +
      + + +
      + + +
      +

      鐢宠浜烘墍灞炲闄

      +
      +
      + + +
      + + +
      +

      宸茬鐢ㄦ鏁

      +
      +
      + + +
      + + +
      +

      璁″垝浠庝簨鍐呭

      +
      +
      + + +
      + + +
      +

      璇︽儏

      +
      +
      +
      + + +
      +
      + +
      +

      鏈鏍

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      浜よ垂涓

      +
      +
      + + + + + +
      +
      + +
      +

      绔欏唴浣嶇疆锛氫簨鍔″鎵>  鍦熷湴绉熻祦瀹℃壒

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      鎼滅储

      +
      +
      + + + + + +
      +
      + +
      +

      绗1椤

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鍏1椤/5鏉¤褰

      +
      +
      + + +
      +
      + +
      +

      姣忛〉

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      鏉¤褰

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      +
      +
      + + + + + + + + + + + + + + + + + +
      + + +
      + + +
      + + +
      + +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎺掑簭

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +
      + +
      +

      绛涢

      +
      +
      + + +
      +
      + +
      +

      +
      +
      +
      + + + + + + + + + + + + + + +
      + + + +
      + + +
      + + + +
      + + + + + + + + +
      +
      + +
      +

      鎶ヤ慨鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑宸ヤ綔

      +
      +
      + + + + + +
      +
      + +
      +

      +
      +
      +
      + + +
      +
      +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑绉熻祦

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑瀹炰範

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鍩哄湴

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鎶ヤ慨

      +
      +
      +
      +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      浜嬪姟瀹℃壒

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鏁版嵁绠$悊

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      缁熻鍒嗘瀽

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      +
      + +
      +

      鍦熷湴绉熻祦

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鐢宠

      +
      +
      + + +
      +
      + +
      +

      棣   椤

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      涓荤晫闈

      +
      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      瀵煎嚭

      +
      +
      +
      + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/\345\234\237\345\234\260\347\247\237\350\265\201\347\273\264\346\212\244.html" "b/\347\225\214\351\235\242\350\256\276\350\256\241/\345\234\237\345\234\260\347\247\237\350\265\201\347\273\264\346\212\244.html" new file mode 100644 index 0000000..892d2d6 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/\345\234\237\345\234\260\347\247\237\350\265\201\347\273\264\346\212\244.html" @@ -0,0 +1,3815 @@ +锘 + + + 鍦熷湴绉熻祦缁存姢 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + +
      + + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      + +
      + + +
      + + +
      + + +
      +
      + +
      +

      搴忓彿

      +
      +
      + + +
      +
      + +
      +

      寮濮嬫棩鏈

      +
      +
      + + +
      +
      + +
      +

      缁撴潫鏃ユ湡

      +
      +
      + + +
      +
      + +
      +

      鍩哄湴鍚嶇О

      +
      +
      + + +
      +
      + +
      +

      鍦熷湴缂栧彿

      +
      +
      + + +
      +
      + +
      +

      鐢宠浜

      +
      +
      + + +
      +
      + +
      +

      瀛﹂櫌

      +
      +
      + + +
      +
      + +
      +

      娆℃暟

      +
      +
      + + +
      +
      + +
      +

      绉嶆鍐呭

      +
      +
      +
      +
      + + +
      + + +
      + + +
      +
      + +
      +

      搴忓彿

      +
      +
      + + +
      +
      + +
      +

      寮濮嬫棩鏈

      +
      +
      + + +
      +
      + +
      +

      缁撴潫鏃ユ湡

      +
      +
      + + +
      +
      + +
      +

      鍩哄湴鍚嶇О

      +
      +
      + + +
      +
      + +
      +

      鍦熷湴缂栧彿

      +
      +
      + + +
      +
      + +
      +

      鐢宠浜

      +
      +
      + + +
      +
      + +
      +

      瀛﹂櫌

      +
      +
      + + +
      +
      + +
      +

      娆℃暟

      +
      +
      + + +
      +
      + +
      +

      绉嶆鍐呭

      +
      +
      +
      +
      + + +
      + + +
      + + +
      +
      + +
      +

      搴忓彿

      +
      +
      + + +
      +
      + +
      +

      寮濮嬫棩鏈

      +
      +
      + + +
      +
      + +
      +

      缁撴潫鏃ユ湡

      +
      +
      + + +
      +
      + +
      +

      鍩哄湴鍚嶇О

      +
      +
      + + +
      +
      + +
      +

      鍦熷湴缂栧彿

      +
      +
      + + +
      +
      + +
      +

      鐢宠浜

      +
      +
      + + +
      +
      + +
      +

      瀛﹂櫌

      +
      +
      + + +
      +
      + +
      +

      娆℃暟

      +
      +
      + + +
      +
      + +
      +

      绉嶆鍐呭

      +
      +
      +
      +
      + + +
      + + +
      + + +
      +
      + +
      +

      搴忓彿

      +
      +
      + + +
      +
      + +
      +

      寮濮嬫棩鏈

      +
      +
      + + +
      +
      + +
      +

      缁撴潫鏃ユ湡

      +
      +
      + + +
      +
      + +
      +

      鍩哄湴鍚嶇О

      +
      +
      + + +
      +
      + +
      +

      鍦熷湴缂栧彿

      +
      +
      + + +
      +
      + +
      +

      鐢宠浜

      +
      +
      + + +
      +
      + +
      +

      瀛﹂櫌

      +
      +
      + + +
      +
      + +
      +

      娆℃暟

      +
      +
      + + +
      +
      + +
      +

      绉嶆鍐呭

      +
      +
      +
      +
      + + +
      + + +
      + + +
      +
      + +
      +

      搴忓彿

      +
      +
      + + +
      +
      + +
      +

      寮濮嬫棩鏈

      +
      +
      + + +
      +
      + +
      +

      缁撴潫鏃ユ湡

      +
      +
      + + +
      +
      + +
      +

      鍩哄湴鍚嶇О

      +
      +
      + + +
      +
      + +
      +

      鍦熷湴缂栧彿

      +
      +
      + + +
      +
      + +
      +

      鐢宠浜

      +
      +
      + + +
      +
      + +
      +

      瀛﹂櫌

      +
      +
      + + +
      +
      + +
      +

      娆℃暟

      +
      +
      + + +
      +
      + +
      +

      绉嶆鍐呭

      +
      +
      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      婀栧崡鍐滀笟澶у

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴绠$悊绯荤粺

      +
      +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鏇存敼瀵嗙爜

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      閫鍑

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      + + +
      + + +
      +

      搴忓彿

      +
      +
      + + +
      + + +
      +

      寮濮嬫棩鏈

      +
      +
      + + +
      + + +
      +

      缁撴潫鏃ユ湡

      +
      +
      + + +
      + + +
      +

      鍩哄湴鍚

      +
      +
      + + +
      + + +
      +

      鍦熷湴缂栧彿

      +
      +
      + + +
      + + +
      +

      绉熻祦浜

      +
      +
      + + +
      + + +
      +

      绉熻祦浜烘墍灞炲闄

      +
      +
      + + +
      + + +
      +

      宸茬鐢ㄦ鏁

      +
      +
      + + +
      + + +
      +

      浠庝簨鍐呭

      +
      +
      + + +
      + + +
      +

      淇敼

      +
      +
      +
      + + +
      +
      + +
      +

      绔欏唴浣嶇疆锛氭暟鎹鐞>  鍦熷湴绉熻祦缁存姢

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      绗1椤

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鍏1椤/5鏉¤褰

      +
      +
      + + +
      +
      + +
      +

      姣忛〉

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      鏉¤褰

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      +
      +
      + + + + + + + + + + + + + + + + + +
      + + +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎺掑簭

      +
      +
      + + +
      + + +
      +
      + +
      +

      绛涢

      +
      +
      + + +
      +
      + +
      +

      +
      +
      +
      + + +
      +
      + +
      +

      鍒犻櫎

      +
      +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎶ヤ慨鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + + + + + + + + + + + + + + + +
      + + + +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑宸ヤ綔

      +
      +
      + + + + + +
      +
      + +
      +

      +
      +
      +
      + + +
      +
      +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑绉熻祦

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑瀹炰範

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鍩哄湴

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鎶ヤ慨

      +
      +
      +
      +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      浜嬪姟瀹℃壒

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鏁版嵁绠$悊

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      缁熻鍒嗘瀽

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      +
      + +
      +

      鍦熷湴绉熻祦

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鐢宠

      +
      +
      + + +
      +
      + +
      +

      棣   椤

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      涓荤晫闈

      +
      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      瀵煎嚭

      +
      +
      + + + +
      + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/\345\237\272\345\234\260\347\256\241\347\220\206\346\234\200\346\226\2602.rp" "b/\347\225\214\351\235\242\350\256\276\350\256\241/\345\237\272\345\234\260\347\256\241\347\220\206\346\234\200\346\226\2602.rp" new file mode 100644 index 0000000..d9ceed5 Binary files /dev/null and "b/\347\225\214\351\235\242\350\256\276\350\256\241/\345\237\272\345\234\260\347\256\241\347\220\206\346\234\200\346\226\2602.rp" differ diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/\345\256\236\344\271\240\345\237\272\345\234\260\345\256\241\346\211\271.html" "b/\347\225\214\351\235\242\350\256\276\350\256\241/\345\256\236\344\271\240\345\237\272\345\234\260\345\256\241\346\211\271.html" new file mode 100644 index 0000000..a784d09 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/\345\256\236\344\271\240\345\237\272\345\234\260\345\256\241\346\211\271.html" @@ -0,0 +1,1753 @@ +锘 + + + 瀹炰範鍩哄湴瀹℃壒 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + +
      + + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎷掔粷鐢宠

      +
      +
      + + +
      +
      + +
      +

      鍚屾剰鐢宠

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      婀栧崡鍐滀笟澶у

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴绠$悊绯荤粺

      +
      +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鏇存敼瀵嗙爜

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      閫鍑

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      + + +
      + + + +
      + + +
      + + +
      +

      搴忓彿

      +
      +
      + + +
      + + +
      +

      鍩哄湴鍚嶇О

      +
      +
      + + +
      + + +
      +

      鍩哄湴绫诲瀷

      +
      +
      + + +
      + + +
      +

      鐢虫姤閮ㄩ棬

      +
      +
      + + +
      + + +
      +

      涓娆℃у彲鎵挎媴瀹炰範瀛︾敓浜烘暟

      +
      +
      + + +
      + + +
      +

      鍦熷湴闈㈢Н/浜

      +
      +
      + + +
      + + +
      +

      寤虹瓚闈㈢Н/m虏

      +
      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      绔欏唴浣嶇疆锛氫簨鍔″鎵>  瀹炰範鍩哄湴瀹℃壒

      +
      +
      + + +
      +
      + +
      +

      鎼滅储

      +
      +
      + + +
      +
      + +
      +

      绗1椤

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鍏1椤/5鏉¤褰

      +
      +
      + + +
      +
      + +
      +

      姣忛〉

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      鏉¤褰

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      +
      +
      + + + + + + + + + + + + + + + + + +
      + + +
      + +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +
      + +
      +

      绛涢

      +
      +
      + + +
      +
      + +
      +

      +
      +
      +
      + + +
      +
      + +
      +

      鎶ヤ慨鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + + +
      + + + +
      + + +
      + + +
      +

      1

      +
      +
      + + +
      + + +
      +

      鑰樺洯姘旇薄绔

      +
      +
      + + +
      + + +
      +

      鏍″唴鍩哄湴

      +
      +
      + + +
      + + +
      +

      淇℃伅绉戝鎶鏈闄

      +
      +
      + + +
      + + +
      +

      30

      +
      +
      + + +
      + + +
      +

      1.5

      +
      +
      + + +
      + + +
      +

      1000

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      2

      +
      +
      + + +
      + + +
      +

      鑰樺洯鐢熺瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      鏍″唴鍩哄湴

      +
      +
      + + +
      + + +
      +

      鍐滃闄

      +
      +
      + + +
      + + +
      +

      70

      +
      +
      + + +
      + + +
      +

      1.8

      +
      +
      + + +
      + + +
      +

      1500

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      3

      +
      +
      + + +
      + + +
      +

      鑰樺洯鏍囨湰鍥

      +
      +
      + + +
      + + +
      +

      鏍″鍩哄湴

      +
      +
      + + +
      + + +
      +

      鏁欏姟澶

      +
      +
      + + +
      + + +
      +

      30

      +
      +
      + + +
      + + +
      +

      12

      +
      +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + +
      +

      4

      +
      +
      + + +
      + + +
      +

      浣崇瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      鏍″唴鍩哄湴

      +
      +
      + + +
      + + +
      +

      鍐滃闄

      +
      +
      + + +
      + + +
      +

      120

      +
      +
      + + +
      + + +
      +

      0

      +
      +
      + + +
      + + +
      +

      2000

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      5

      +
      +
      + + +
      + + +
      +

      鑰樺洯璧勭幆瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      鏍″鍩哄湴

      +
      +
      + + +
      + + +
      +

      璧勭幆闄

      +
      +
      + + +
      + + +
      +

      70

      +
      +
      + + +
      + + +
      +

       

      +
      +
      + + +
      + + + +
      +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + + + + + + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑宸ヤ綔

      +
      +
      + + + + + +
      +
      + +
      +

      +
      +
      +
      + + +
      +
      +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑绉熻祦

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑瀹炰範

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鍩哄湴

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鎶ヤ慨

      +
      +
      +
      +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      浜嬪姟瀹℃壒

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鏁版嵁绠$悊

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      缁熻鍒嗘瀽

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      +
      + +
      +

      鍦熷湴绉熻祦

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鐢宠

      +
      +
      + + +
      +
      + +
      +

      棣   椤

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      涓荤晫闈

      +
      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      瀵煎嚭

      +
      +
      +
      + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/\345\256\236\344\271\240\345\237\272\345\234\260\347\224\263\350\257\267.html" "b/\347\225\214\351\235\242\350\256\276\350\256\241/\345\256\236\344\271\240\345\237\272\345\234\260\347\224\263\350\257\267.html" new file mode 100644 index 0000000..af0ea87 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/\345\256\236\344\271\240\345\237\272\345\234\260\347\224\263\350\257\267.html" @@ -0,0 +1,1132 @@ +锘 + + + 瀹炰範鍩哄湴鐢宠 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      +
      + +
      +

      婀栧崡鍐滀笟澶у

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴绠$悊绯荤粺

      +
      +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鏇存敼瀵嗙爜

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      閫鍑

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      鎶ヤ慨鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      绔欏唴浣嶇疆锛氬疄涔犲熀鍦扮敵璇

      +
      +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鍩哄湴鍚嶇О锛

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      鐢虫姤閮ㄩ棬锛

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      鍩哄湴绫诲瀷锛

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      涓娆℃у彲鎵挎媴瀹炰範瀛︾敓浜烘暟锛

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      鍦熷湴闈㈢Н锛

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      寤虹瓚闈㈢Н锛

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      m虏

      +
      +
      + + +
      +
      + +
      +

      鏆傚瓨

      +
      +
      + + +
      +
      + +
      +

      鎻愪氦

      +
      +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑宸ヤ綔

      +
      +
      + + + + + +
      +
      + +
      +

      +
      +
      +
      + + +
      +
      +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑绉熻祦

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑瀹炰範

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鍩哄湴

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鎶ヤ慨

      +
      +
      +
      +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      浜嬪姟瀹℃壒

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鏁版嵁绠$悊

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      缁熻鍒嗘瀽

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      +
      + +
      +

      鍦熷湴绉熻祦

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鐢宠

      +
      +
      + + +
      +
      + +
      +

      棣   椤

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      涓荤晫闈

      +
      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      鍩哄湴鍦板潃锛

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴鐢宠琛

      +
      +
      + + +
      +
      + +
      +

      鐢虫姤閮ㄩ棬绫诲瀷锛

      +
      +
      + + +
      + + +
      + + +
      + + +
      + + +
      +
      + +
      +

      //姝ら夐」鏍规嵁鐢虫姤绫诲瀷鑱斿姩鍙樺寲

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鐢宠鏉愭枡锛

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      娴忚

      +
      +
      + + +
      +
      + +
      +

      涓婁紶

      +
      +
      +
      + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/\345\256\236\344\271\240\345\237\272\345\234\260\347\273\264\346\212\244.html" "b/\347\225\214\351\235\242\350\256\276\350\256\241/\345\256\236\344\271\240\345\237\272\345\234\260\347\273\264\346\212\244.html" new file mode 100644 index 0000000..c5c7ece --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/\345\256\236\344\271\240\345\237\272\345\234\260\347\273\264\346\212\244.html" @@ -0,0 +1,2558 @@ +锘 + + + 瀹炰範鍩哄湴缁存姢 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + +
      + + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      + + + +
      + + +
      +
      + +
      +

      婀栧崡鍐滀笟澶у

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴绠$悊绯荤粺

      +
      +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鏇存敼瀵嗙爜

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      閫鍑

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      + + +
      + + + +
      + + +
      + + +
      +

      搴忓彿

      +
      +
      + + +
      + + +
      +

      鍩哄湴鍚嶇О

      +
      +
      + + +
      + + +
      +

      鍩哄湴绫诲瀷

      +
      +
      + + +
      + + +
      +

      鐢虫姤閮ㄩ棬

      +
      +
      + + +
      + + +
      +

      涓娆℃у彲鎵挎媴瀹炰範瀛︾敓浜烘暟

      +
      +
      + + +
      + + +
      +

      鍦熷湴闈㈢Н/浜

      +
      +
      + + +
      + + +
      +

      寤虹瓚闈㈢Н/m虏

      +
      +
      + + +
      + + +
      +

      鏄熺骇

      +
      +
      + + +
      + + +
      +

      淇敼

      +
      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      绔欏唴浣嶇疆锛氭暟鎹鐞>  瀹炰範鍩哄湴缁存姢

      +
      +
      + + +
      +
      + +
      +

      鎼滅储

      +
      +
      + + +
      +
      + +
      +

      绗1椤

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鍏1椤/5鏉¤褰

      +
      +
      + + +
      +
      + +
      +

      姣忛〉

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      鏉¤褰

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      +
      +
      + + + + + + + + + + + + + + + + + +
      + + +
      + +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +
      + +
      +

      绛涢

      +
      +
      + + +
      +
      + +
      +

      +
      +
      +
      + + +
      +
      + +
      +

      鎶ヤ慨鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + + +
      + + + +
      + + +
      + + +
      +

      1

      +
      +
      + + +
      + + +
      +

      鑰樺洯姘旇薄绔

      +
      +
      + + +
      + + +
      +

      鏍″唴鍩哄湴

      +
      +
      + + +
      + + +
      +

      淇℃伅绉戝鎶鏈闄

      +
      +
      + + +
      + + +
      +

      30

      +
      +
      + + +
      + + +
      +

      1.5

      +
      +
      + + +
      + + +
      +

      1000

      +
      +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + +
      +

      2

      +
      +
      + + +
      + + +
      +

      鑰樺洯鐢熺瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      鏍″唴鍩哄湴

      +
      +
      + + +
      + + +
      +

      鍐滃闄

      +
      +
      + + +
      + + +
      +

      70

      +
      +
      + + +
      + + +
      +

      1.8

      +
      +
      + + +
      + + +
      +

      1500

      +
      +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + +
      +

      3

      +
      +
      + + +
      + + +
      +

      鑰樺洯鏍囨湰鍥

      +
      +
      + + +
      + + +
      +

      鏍″鍩哄湴

      +
      +
      + + +
      + + +
      +

      鏁欏姟澶

      +
      +
      + + +
      + + +
      +

      30

      +
      +
      + + +
      + + +
      +

      12

      +
      +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + +
      +

      4

      +
      +
      + + +
      + + +
      +

      浣崇瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      鏍″唴鍩哄湴

      +
      +
      + + +
      + + +
      +

      鍐滃闄

      +
      +
      + + +
      + + +
      +

      120

      +
      +
      + + +
      + + +
      +

      0

      +
      +
      + + +
      + + +
      +

      2000

      +
      +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + +
      +

      5

      +
      +
      + + +
      + + +
      +

      鑰樺洯璧勭幆瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      鏍″鍩哄湴

      +
      +
      + + +
      + + +
      +

      璧勭幆闄

      +
      +
      + + +
      + + +
      +

      70

      +
      +
      + + +
      + + +
      +

       

      +
      +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + + +
      +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + + + + + + + + + + +
      +
      + +
      +

      鍒犻櫎

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + + + + + + +
      +
      + +
      +

      鎵归噺澧炲姞

      +
      +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑宸ヤ綔

      +
      +
      + + + + + +
      +
      + +
      +

      +
      +
      +
      + + +
      +
      +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑绉熻祦

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑瀹炰範

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鍩哄湴

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鎶ヤ慨

      +
      +
      +
      +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      浜嬪姟瀹℃壒

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鏁版嵁绠$悊

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      缁熻鍒嗘瀽

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      +
      + +
      +

      鍦熷湴绉熻祦

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鐢宠

      +
      +
      + + +
      +
      + +
      +

      棣   椤

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      涓荤晫闈

      +
      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      瀵煎嚭

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      +
      + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/\345\256\236\344\271\240\347\224\263\350\257\267.html" "b/\347\225\214\351\235\242\350\256\276\350\256\241/\345\256\236\344\271\240\347\224\263\350\257\267.html" new file mode 100644 index 0000000..0653d44 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/\345\256\236\344\271\240\347\224\263\350\257\267.html" @@ -0,0 +1,3061 @@ +锘 + + + 瀹炰範鐢宠 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      +
      + +
      +

      婀栧崡鍐滀笟澶у

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴绠$悊绯荤粺

      +
      +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鏇存敼瀵嗙爜

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      閫鍑

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      鎶ヤ慨鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      绔欏唴浣嶇疆锛氬疄涔犵敵璇

      +
      +
      + + +
      + + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      + + +
      + + +
      +

      搴忓彿

      +
      +
      + + +
      + + +
      +

      鍩哄湴鍚嶇О

      +
      +
      + + +
      + + +
      +

      鐢虫姤閮ㄩ棬

      +
      +
      + + +
      + + +
      +

      鍩哄湴绫诲瀷

      +
      +
      + + +
      + + +
      +

      涓娆℃у彲鎵挎媴            瀹炰範瀛︾敓浜烘暟

      +
      +
      + + +
      + + +
      +

      鍦熷湴闈㈢Н/浜

      +
      +
      + + +
      + + +
      +

      寤虹瓚闈㈢Н/m虏

      +
      +
      + + +
      + + +
      +

      鐢宠瀹炰範

      +
      +
      +
      + + +
      +
      + +
      +

      绗1椤

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鍏1椤/5鏉¤褰

      +
      +
      + + +
      +
      + +
      +

      姣忛〉

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      鏉¤褰

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      +
      +
      + + + + + + + + + + + + + + + + + +
      + + +
      + + + +
      + + +
      + + +
      +

      閲戝伐瀹炰範鍘

      +
      +
      + + +
      + + +
      +

      宸ュ闄

      +
      +
      + + +
      + + +
      +

      鏍″唴鍩哄湴

      +
      +
      + + +
      + + +
      +

      70

      +
      +
      + + +
      + + +
      +

      1.8

      +
      +
      + + +
      + + +
      +

      1200

      +
      +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + +
      +

      瀹炰範鑼跺巶

      +
      +
      + + +
      + + +
      +

      鍥壓鍥灄

      +
      +
      + + +
      + + +
      +

      鏍″唴鍩哄湴

      +
      +
      + + +
      + + +
      +

      30

      +
      +
      + + +
      + + +
      +

      1.8

      +
      +
      + + +
      + + +
      +

      1200

      +
      +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + +
      +

      椋熷搧璐ㄩ噺涓庡畨鍏ㄥ疄涔犲熀鍦

      +
      +
      + + +
      + + +
      +

      椋熺闄

      +
      +
      + + +
      + + +
      +

      鏍″鍩哄湴

      +
      +
      + + +
      + + +
      +

      30

      +
      +
      + + +
      + + +
      +

      1

      +
      +
      + + +
      + + +
      +

      400

      +
      +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + +
      +

      鍘熷潧鍧涢瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      椋熺闄

      +
      +
      + + +
      + + +
      +

      鏍″唴鍩哄湴

      +
      +
      + + +
      + + +
      +

      30

      +
      +
      + + +
      + + +
      +

      1.5

      +
      +
      + + +
      + + +
      +

      1000

      +
      +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + +
      +

      鍔ㄥ尰缁煎悎瀹炶鍩哄湴

      +
      +
      + + +
      + + +
      +

      鍔ㄧ闄

      +
      +
      + + +
      + + +
      +

      鏍″鍩哄湴

      +
      +
      + + +
      + + +
      +

      120

      +
      +
      + + +
      + + +
      +

      4.2

      +
      +
      + + +
      + + +
      +

      2800

      +
      +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + +
      +

      鑺卞崏鍩哄湴

      +
      +
      + + +
      + + +
      +

      鍥壓鍥灄

      +
      +
      + + +
      + + +
      +

      鏍″唴鍩哄湴

      +
      +
      + + +
      + + +
      +

      90

      +
      +
      + + +
      + + +
      +

      15

      +
      +
      + + +
      + + +
      +

      10000

      +
      +
      + + +
      + + + +
      +
      + + +
      + + +
      +
      + +
      +

      绛涢

      +
      +
      + + +
      +
      + +
      +

      +
      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鐢宠瀹炰範

      +
      +
      + + +
      +
      + +
      +

      鐢宠瀹炰範

      +
      +
      + + +
      +
      + +
      +

      鐢宠瀹炰範

      +
      +
      + + +
      +
      + +
      +

      鐢宠瀹炰範

      +
      +
      + + +
      +
      + +
      +

      鐢宠瀹炰範

      +
      +
      + + +
      +
      + +
      +

      鐢宠瀹炰範

      +
      +
      + + +
      +
      + +
      +

      1

      +
      +
      + + +
      +
      + +
      +

      2

      +
      +
      + + +
      +
      + +
      +

      3

      +
      +
      + + +
      +
      + +
      +

      4

      +
      +
      + + +
      +
      + +
      +

      5

      +
      +
      + + +
      +
      + +
      +

      6

      +
      +
      + + +
      +
      + +
      +

      鎼滅储

      +
      +
      + + +
      + + +
      + +
      +
      + + + + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑宸ヤ綔

      +
      +
      + + + + + +
      +
      + +
      +

      +
      +
      +
      + + +
      +
      +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑绉熻祦

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑瀹炰範

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鍩哄湴

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鎶ヤ慨

      +
      +
      +
      +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      浜嬪姟瀹℃壒

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鏁版嵁绠$悊

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      缁熻鍒嗘瀽

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      +
      + +
      +

      鍦熷湴绉熻祦

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鐢宠

      +
      +
      + + +
      +
      + +
      +

      棣   椤

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      涓荤晫闈

      +
      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + + + + +
      + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/\345\256\236\344\271\240\350\256\241\345\210\222\345\256\241\346\211\271.html" "b/\347\225\214\351\235\242\350\256\276\350\256\241/\345\256\236\344\271\240\350\256\241\345\210\222\345\256\241\346\211\271.html" new file mode 100644 index 0000000..050e0a3 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/\345\256\236\344\271\240\350\256\241\345\210\222\345\256\241\346\211\271.html" @@ -0,0 +1,2187 @@ +锘 + + + 瀹炰範璁″垝瀹℃壒 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + +
      + + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎷掔粷鐢宠

      +
      +
      + + +
      +
      + +
      +

      鍚屾剰鐢宠

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      婀栧崡鍐滀笟澶у

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴绠$悊绯荤粺

      +
      +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鏇存敼瀵嗙爜

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      閫鍑

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      + + +
      + + + +
      + + +
      + + +
      +

      搴忓彿

      +
      +
      + + +
      + + +
      +

      瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      鑱旂郴鐢佃瘽

      +
      +
      + + +
      + + +
      +

      寮濮嬫棩鏈

      +
      +
      + + +
      + + +
      +

      缁撴潫鏃ユ湡

      +
      +
      + + +
      + + +
      +

      瀹炰範绫诲瀷

      +
      +
      + + +
      + + +
      +

      瀛﹂櫌

      +
      +
      + + +
      + + +
      +

      骞寸骇涓撲笟鐝骇

      +
      +
      + + +
      + + +
      +

      瀹炰範鍦扮偣

      +
      +
      + + +
      + + +
      +

      鎸囧鑰佸笀

      +
      +
      + + +
      + + +
      +

      璇︾粏鍐呭鍙婅繘绋

      +
      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      绔欏唴浣嶇疆锛氫簨鍔″鎵>  瀹炰範璁″垝瀹℃壒

      +
      +
      + + +
      +
      + +
      +

      鎼滅储

      +
      +
      + + +
      +
      + +
      +

      绗1椤

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鍏1椤/5鏉¤褰

      +
      +
      + + +
      +
      + +
      +

      姣忛〉

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      鏉¤褰

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      +
      +
      + + + + + + + + + + + + + + + + + +
      + + +
      + +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +
      + +
      +

      绛涢

      +
      +
      + + +
      +
      + +
      +

      +
      +
      +
      + + +
      +
      + +
      +

      鎶ヤ慨鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + + +
      + + + +
      + + +
      + + +
      +

      1

      +
      +
      + + +
      + + +
      +

      鑰樺洯姘旇薄绔

      +
      +
      + + +
      + + +
      +

      18293748629

      +
      +
      + + +
      + + +
      +

      2016.12

      +
      +
      + + +
      + + +
      +

      2017.1

      +
      +
      + + +
      + + +
      +

      鏁欏瀹炰範

      +
      +
      + + +
      + + +
      +

      淇℃伅绉戝鎶鏈      瀛﹂櫌

      +
      +
      + + +
      + + +
      +

      14绾ц绠楁満1鐝13绾х數鍟嗕竴鐝13绾т俊宸1鐝

      +
      +
      + + +
      + + +
      +

      姘旇薄绔

      +
      +
      + + +
      + + +
      +

      寮犱笁     鏉庡洓

      +
      +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + +
      +

      2

      +
      +
      + + +
      + + +
      +

      鑰樺洯鐢熺瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      13198374027

      +
      +
      + + +
      + + +
      +

      2017.1

      +
      +
      + + +
      + + +
      +

      2017.2

      +
      +
      + + +
      + + +
      +

      鐢熶骇瀹炰範

      +
      +
      + + +
      + + +
      +

      鍐滃闄

      +
      +
      + + +
      + + +
      +

       13鍐滃鏁欒偛1鐝14绾у啘瀛︽暀鑲1鐝

      +
      +
      + + +
      + + +
      +

      鐢熺瀹炰範

      +
      +
      + + +
      + + +
      +

      鐜嬩簲

      +
      +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + +
      +

      3

      +
      +
      + + +
      + + +
      +

      鑰樺洯鏍囨湰鍥

      +
      +
      + + +
      + + +
      +

      13029784765

      +
      +
      + + +
      + + +
      +

      2017.1

      +
      +
      + + +
      + + +
      +

      2017.3

      +
      +
      + + +
      + + +
      +

      姣曚笟瀹炰範

      +
      +
      + + +
      + + +
      +

      璧勭幆闄

      +
      +
      + + +
      + + +
      +

       14绾х敓鎬佸1鐝

      +
      +
      + + +
      + + +
      +

      鏍囨湰鍥

      +
      +
      + + +
      + + +
      +

      璧靛叚

      +
      +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + +
      +

      4

      +
      +
      + + +
      + + +
      +

      浣崇瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      13197678397

      +
      +
      + + +
      + + +
      +

      2017.2

      +
      +
      + + +
      + + +
      +

      2017.4

      +
      +
      + + +
      + + +
      +

      涓撲笟鍔冲姩

      +
      +
      + + +
      + + +
      +

      鍐滃闄

      +
      +
      + + +
      + + +
      +

       13绾ц崏涓氱瀛

      +
      +
      + + +
      + + +
      +

      浣崇瀹炰範

      +
      +
      + + +
      + + +
      +

      寮犲洓    鐜嬩笁

      +
      +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + +
      +

      5

      +
      +
      + + +
      + + +
      +

      鑰樺洯璧勭幆瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      18208786738

      +
      +
      + + +
      + + +
      +

      2017.3

      +
      +
      + + +
      + + +
      +

      2017.5

      +
      +
      + + +
      + + +
      +

      缁煎悎瀹炰範

      +
      +
      + + +
      + + +
      +

      璧勭幆闄

      +
      +
      + + +
      + + +
      +

       13绾у湡鍦拌祫婧愮鐞

      +
      +
      + + +
      + + +
      +

      璧勭幆瀹炰範

      +
      +
      + + +
      + + +
      +

      瀛欏叚

      +
      +
      + + +
      + + + +
      +
      + + +
      +
      + +
      +

      鏌ョ湅璇︽儏

      +
      +
      + + +
      +
      + +
      +

      鏌ョ湅璇︽儏

      +
      +
      + + +
      +
      + +
      +

      鏌ョ湅璇︽儏

      +
      +
      + + +
      +
      + +
      +

      鏌ョ湅璇︽儏

      +
      +
      + + +
      +
      + +
      +

      鏌ョ湅璇︽儏

      +
      +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + + + + + + + + + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑宸ヤ綔

      +
      +
      + + + + + +
      +
      + +
      +

      +
      +
      +
      + + +
      +
      +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑绉熻祦

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑瀹炰範

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鍩哄湴

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鎶ヤ慨

      +
      +
      +
      +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      浜嬪姟瀹℃壒

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鏁版嵁绠$悊

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      缁熻鍒嗘瀽

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      +
      + +
      +

      鍦熷湴绉熻祦

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鐢宠

      +
      +
      + + +
      +
      + +
      +

      棣   椤

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      涓荤晫闈

      +
      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      瀵煎嚭

      +
      +
      +
      + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/\345\256\236\344\271\240\350\256\241\345\210\222\347\273\264\346\212\244.html" "b/\347\225\214\351\235\242\350\256\276\350\256\241/\345\256\236\344\271\240\350\256\241\345\210\222\347\273\264\346\212\244.html" new file mode 100644 index 0000000..d3b95a3 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/\345\256\236\344\271\240\350\256\241\345\210\222\347\273\264\346\212\244.html" @@ -0,0 +1,3606 @@ +锘 + + + 瀹炰範璁″垝缁存姢 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + +
      + + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      + + + +
      + + +
      +
      + +
      +

      婀栧崡鍐滀笟澶у

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴绠$悊绯荤粺

      +
      +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鏇存敼瀵嗙爜

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      閫鍑

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      + + +
      + + + +
      + + +
      + + +
      +

      搴忓彿

      +
      +
      + + +
      + + +
      +

      瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      鑱旂郴鐢佃瘽

      +
      +
      + + +
      + + +
      +

      寮濮嬫棩鏈

      +
      +
      + + +
      + + +
      +

      缁撴潫鏃ユ湡

      +
      +
      + + +
      + + +
      +

      瀹炰範绫诲瀷

      +
      +
      + + +
      + + +
      +

      瀛﹂櫌

      +
      +
      + + +
      + + +
      +

      瀹炰範鍦扮偣

      +
      +
      + + +
      + + +
      +

      鎸囧鑰佸笀

      +
      +
      + + +
      + + +
      +

      璇︽儏鍙   淇敼

      +
      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      绔欏唴浣嶇疆锛氭暟鎹鐞>  瀹炰範璁″垝缁存姢

      +
      +
      + + +
      +
      + +
      +

      鎼滅储

      +
      +
      + + +
      +
      + +
      +

      绗1椤

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鍏1椤/5鏉¤褰

      +
      +
      + + +
      +
      + +
      +

      姣忛〉

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      鏉¤褰

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      +
      +
      + + + + + + + + + + + + + + + + + +
      + + +
      + +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +
      + +
      +

      绛涢

      +
      +
      + + +
      +
      + +
      +

      +
      +
      +
      + + +
      +
      + +
      +

      鎶ヤ慨鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + + +
      + + + +
      + + +
      + + +
      +

      1

      +
      +
      + + +
      + + +
      +

      鑰樺洯姘旇薄绔

      +
      +
      + + +
      + + +
      +

      15337904657

      +
      +
      + + +
      + + +
      +

      2016.12

      +
      +
      + + +
      + + +
      +

      2017.1

      +
      +
      + + +
      + + +
      +

      鏁欏瀹炰範

      +
      +
      + + +
      + + +
      +

      淇℃伅绉戝鎶鏈      瀛﹂櫌

      +
      +
      + + +
      + + +
      +

      鑺欒搲鍖烘祻闃虫渤

      +
      +
      + + +
      + + +
      +

      寮犱笁     鏉庡洓

      +
      +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + +
      +

      2

      +
      +
      + + +
      + + +
      +

      鑰樺洯鐢熺瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      18235679857

      +
      +
      + + +
      + + +
      +

      2017.1

      +
      +
      + + +
      + + +
      +

      2017.2

      +
      +
      + + +
      + + +
      +

      鐢熶骇瀹炰範

      +
      +
      + + +
      + + +
      +

      鍐滃闄

      +
      +
      + + +
      + + +
      +

      鑺欒搲鍖烘祻闃虫渤

      +
      +
      + + +
      + + +
      +

      鐜嬩簲

      +
      +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + +
      +

      3

      +
      +
      + + +
      + + +
      +

      鑰樺洯鏍囨湰鍥

      +
      +
      + + +
      + + +
      +

      13124657896

      +
      +
      + + +
      + + +
      +

      2017.1

      +
      +
      + + +
      + + +
      +

      2017.3

      +
      +
      + + +
      + + +
      +

      姣曚笟瀹炰範

      +
      +
      + + +
      + + +
      +

      璧勭幆闄

      +
      +
      + + +
      + + +
      +

      鑺欒搲鍖烘祻闃虫渤

      +
      +
      + + +
      + + +
      +

      璧靛叚

      +
      +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + +
      +

      4

      +
      +
      + + +
      + + +
      +

      浣崇瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      18396780678

      +
      +
      + + +
      + + +
      +

      2017.2

      +
      +
      + + +
      + + +
      +

      2017.4

      +
      +
      + + +
      + + +
      +

      涓撲笟鍔冲姩

      +
      +
      + + +
      + + +
      +

      鍐滃闄

      +
      +
      + + +
      + + +
      +

      鑺欒搲鍖烘祻闃虫渤

      +
      +
      + + +
      + + +
      +

      寮犲洓    鐜嬩笁

      +
      +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + +
      +

      5

      +
      +
      + + +
      + + +
      +

      鑰樺洯璧勭幆瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      18876465890

      +
      +
      + + +
      + + +
      +

      2017.3

      +
      +
      + + +
      + + +
      +

      2017.5

      +
      +
      + + +
      + + +
      +

      缁煎悎瀹炰範

      +
      +
      + + +
      + + +
      +

      璧勭幆闄

      +
      +
      + + +
      + + +
      +

      鑺欒搲鍖烘祻闃虫渤

      +
      +
      + + +
      + + +
      +

      瀛欏叚

      +
      +
      + + +
      + + + +
      +
      + + +
      +
      + +
      +

      淇敼

      +
      +
      + + +
      +
      + +
      +

      淇敼

      +
      +
      + + +
      +
      + +
      +

      淇敼

      +
      +
      + + +
      +
      + +
      +

      淇敼

      +
      +
      + + +
      +
      + +
      +

      淇敼

      +
      +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + + + + +
      +
      + +
      +

      鍒犻櫎

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + + + +
      + + + + + + + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑宸ヤ綔

      +
      +
      + + + + + +
      +
      + +
      +

      +
      +
      +
      + + +
      +
      +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑绉熻祦

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑瀹炰範

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鍩哄湴

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鎶ヤ慨

      +
      +
      +
      +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      浜嬪姟瀹℃壒

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鏁版嵁绠$悊

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      缁熻鍒嗘瀽

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      +
      + +
      +

      鍦熷湴绉熻祦

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鐢宠

      +
      +
      + + +
      +
      + +
      +

      棣   椤

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      涓荤晫闈

      +
      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      瀵煎嚭

      +
      +
      + + + + + + + + + +
      + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/\346\210\221\347\232\204\345\237\272\345\234\260.html" "b/\347\225\214\351\235\242\350\256\276\350\256\241/\346\210\221\347\232\204\345\237\272\345\234\260.html" new file mode 100644 index 0000000..c59d93c --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/\346\210\221\347\232\204\345\237\272\345\234\260.html" @@ -0,0 +1,3058 @@ +锘 + + + 鎴戠殑鍩哄湴 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      +
      + +
      +

      婀栧崡鍐滀笟澶у

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴绠$悊绯荤粺

      +
      +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鏇存敼瀵嗙爜

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      閫鍑

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      绉熻祦鍘嗗彶

      +
      +
      + + +
      + + +
      + + +
      +

      搴忓彿

      +
      +
      + + +
      + + +
      +

      鍩哄湴鍚嶇О

      +
      +
      + + +
      + + +
      +

      鍩哄湴绫诲瀷

      +
      +
      + + +
      + + +
      +

      鐢虫姤閮ㄩ棬

      +
      +
      + + +
      + + +
      +

      涓娆℃у彲鎵挎媴瀹炰範瀛︾敓浜烘暟

      +
      +
      + + +
      + + +
      +

      鍦熷湴闈㈢Н/浜

      +
      +
      + + +
      + + +
      +

      寤虹瓚闈㈢Н/m虏

      +
      +
      + + +
      + + +
      +

      鐢宠缁撴灉

      +
      +
      + + +
      + + +
      +

      璇︽儏鏌ョ湅

      +
      +
      + + +
      + + +
      +

      1

      +
      +
      + + +
      + + +
      +

      鑰樺洯姘旇薄绔

      +
      +
      + + +
      + + +
      +

      鏍″唴鍩哄湴

      +
      +
      + + +
      + + +
      +

      淇℃伅绉戝鎶鏈闄

      +
      +
      + + +
      + + +
      +

      30

      +
      +
      + + +
      + + +
      +

      1.5

      +
      +
      + + +
      + + +
      +

      1000

      +
      +
      + + +
      + + +
      +

      鐢宠鎴愬姛

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      2

      +
      +
      + + +
      + + +
      +

      鑰樺洯鐢熺瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      鏍″唴鍩哄湴

      +
      +
      + + +
      + + +
      +

      鍐滃闄

      +
      +
      + + +
      + + +
      +

      70

      +
      +
      + + +
      + + +
      +

      1.8

      +
      +
      + + +
      + + +
      +

      1500

      +
      +
      + + +
      + + +
      +

      鐢宠澶辫触

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      3

      +
      +
      + + +
      + + +
      +

      鑰樺洯鏍囨湰鍥

      +
      +
      + + +
      + + +
      +

      鏍″鍩哄湴

      +
      +
      + + +
      + + +
      +

      鏁欏姟澶

      +
      +
      + + +
      + + +
      +

      30

      +
      +
      + + +
      + + +
      +

      12

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      鐢宠澶辫触

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      4

      +
      +
      + + +
      + + +
      +

      浣崇瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      鏍″唴鍩哄湴

      +
      +
      + + +
      + + +
      +

      鍐滃闄

      +
      +
      + + +
      + + +
      +

      120

      +
      +
      + + +
      + + +
      +

      0

      +
      +
      + + +
      + + +
      +

      2000

      +
      +
      + + +
      + + +
      +

      鐢宠鎴愬姛

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      5

      +
      +
      + + +
      + + +
      +

      鑰樺洯璧勭幆瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      鏍″鍩哄湴

      +
      +
      + + +
      + + +
      +

      璧勭幆闄

      +
      +
      + + +
      + + +
      +

      70

      +
      +
      + + +
      + + +
      +

       

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      鐢宠澶辫触

      +
      +
      + + +
      + + + +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      绔欏唴浣嶇疆锛氭垜鐨勫伐浣  >  鎴戠殑鍩哄湴

      +
      +
      + + +
      + + +
      +
      + +
      +

      绛涢

      +
      +
      + + +
      +
      + +
      +

      +
      +
      +
      + + + + + +
      + + + +
      + + +
      +
      + +
      +

      绗1椤

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鍏1椤/5鏉¤褰

      +
      +
      + + +
      +
      + +
      +

      姣忛〉

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      鏉¤褰

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      +
      +
      + + + + + + + + + + + + + + + + + +
      +
      + +
      +

      绗1椤

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鍏1椤/2鏉¤褰

      +
      +
      + + +
      +
      + +
      +

      姣忛〉

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      鏉¤褰

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      +
      +
      + + + + + + + + + + + + + + + + + +
      + + + +
      + + +
      + + +
      + + +
      +

      搴忓彿

      +
      +
      + + +
      + + +
      +

      鍩哄湴鍚嶇О

      +
      +
      + + +
      + + +
      +

      鍩哄湴绫诲瀷

      +
      +
      + + +
      + + +
      +

      鐢虫姤閮ㄩ棬

      +
      +
      + + +
      + + +
      +

      涓娆℃у彲鎵挎媴瀹炰範瀛︾敓浜烘暟

      +
      +
      + + +
      + + +
      +

      鍦熷湴闈㈢Н/浜

      +
      +
      + + +
      + + +
      +

      寤虹瓚闈㈢Н/m虏

      +
      +
      + + +
      + + +
      +

      鐢宠鐘舵

      +
      +
      + + +
      + + +
      +

      鎿嶄綔

      +
      +
      + + +
      + + +
      +

      1

      +
      +
      + + +
      + + +
      +

      鑰樺洯姘旇薄绔

      +
      +
      + + +
      + + +
      +

      鏍″唴鍩哄湴

      +
      +
      + + +
      + + +
      +

      淇℃伅绉戝鎶鏈闄

      +
      +
      + + +
      + + +
      +

      30

      +
      +
      + + +
      + + +
      +

      1.5

      +
      +
      + + +
      + + +
      +

      1000

      +
      +
      + + +
      + + +
      +

      缂栬緫涓

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      2

      +
      +
      + + +
      + + +
      +

      鑰樺洯鐢熺瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      鏍″唴鍩哄湴

      +
      +
      + + +
      + + +
      +

      鍐滃闄

      +
      +
      + + +
      + + +
      +

      70

      +
      +
      + + +
      + + +
      +

      1.8

      +
      +
      + + +
      + + +
      +

      1500

      +
      +
      + + +
      + + +
      +

      寰呭鏍

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      3

      +
      +
      + + +
      + + +
      +

      鑰樺洯鏍囨湰鍥

      +
      +
      + + +
      + + +
      +

      鏍″鍩哄湴

      +
      +
      + + +
      + + +
      +

      鏁欏姟澶

      +
      +
      + + +
      + + +
      +

      30

      +
      +
      + + +
      + + +
      +

      12

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      寰呭鏍

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      4

      +
      +
      + + +
      + + +
      +

      浣崇瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      鏍″唴鍩哄湴

      +
      +
      + + +
      + + +
      +

      鍐滃闄

      +
      +
      + + +
      + + +
      +

      120

      +
      +
      + + +
      + + +
      +

      0

      +
      +
      + + +
      + + +
      +

      2000

      +
      +
      + + +
      + + +
      +

      鐢宠鎴愬姛

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      5

      +
      +
      + + +
      + + +
      +

      鑰樺洯璧勭幆瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      鏍″鍩哄湴

      +
      +
      + + +
      + + +
      +

      璧勭幆闄

      +
      +
      + + +
      + + +
      +

      70

      +
      +
      + + +
      + + +
      +

       

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      鐢宠澶辫触

      +
      +
      + + +
      + + + +
      +
      + + +
      +
      + +
      +

      鎶ヤ慨鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      淇敼

      +
      +
      + + +
      +
      + +
      +

      鍒犻櫎

      +
      +
      + + +
      +
      + +
      +

      鎻愪氦

      +
      +
      + + +
      +
      + +
      +

      鏌ョ湅

      +
      +
      + + +
      +
      + +
      +

      鎾ゅ洖

      +
      +
      + + +
      +
      + +
      +

      鏌ョ湅

      +
      +
      + + +
      +
      + +
      +

      鎾ゅ洖

      +
      +
      + + +
      +
      + +
      +

      鏌ョ湅

      +
      +
      + + +
      +
      + +
      +

      鏌ョ湅

      +
      +
      + + + + + + + + + + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑宸ヤ綔

      +
      +
      + + + + + +
      +
      + +
      +

      +
      +
      +
      + + +
      +
      +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑绉熻祦

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑瀹炰範

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鍩哄湴

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鎶ヤ慨

      +
      +
      +
      +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      浜嬪姟瀹℃壒

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鏁版嵁绠$悊

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      缁熻鍒嗘瀽

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      +
      + +
      +

      鍦熷湴绉熻祦

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鐢宠

      +
      +
      + + +
      +
      + +
      +

      棣   椤

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      涓荤晫闈

      +
      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      瀵煎嚭

      +
      +
      + + +
      +
      + +
      +

      瀵煎嚭

      +
      +
      +
      + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/\346\210\221\347\232\204\345\256\236\344\271\240.html" "b/\347\225\214\351\235\242\350\256\276\350\256\241/\346\210\221\347\232\204\345\256\236\344\271\240.html" new file mode 100644 index 0000000..37391e3 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/\346\210\221\347\232\204\345\256\236\344\271\240.html" @@ -0,0 +1,4616 @@ +锘 + + + 鎴戠殑瀹炰範 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      +
      + +
      +

      婀栧崡鍐滀笟澶у

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴绠$悊绯荤粺

      +
      +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鏇存敼瀵嗙爜

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      閫鍑

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鐢宠鍘嗗彶

      +
      +
      + + +
      + + +
      + + +
      +

      搴忓彿

      +
      +
      + + +
      + + +
      +

      瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      鑱旂郴鐢佃瘽

      +
      +
      + + +
      + + +
      +

      寮濮嬫棩鏈

      +
      +
      + + +
      + + +
      +

      缁撴潫鏃ユ湡

      +
      +
      + + +
      + + +
      +

      瀹炰範绫诲瀷

      +
      +
      + + +
      + + +
      +

      瀛﹂櫌

      +
      +
      + + +
      + + +
      +

      骞寸骇涓撲笟鐝骇

      +
      +
      + + +
      + + +
      +

      瀹炰範鍦扮偣

      +
      +
      + + +
      + + +
      +

      鎸囧鑰佸笀

      +
      +
      + + +
      + + +
      +

      鏈缁堢姸鎬

      +
      +
      + + +
      + + +
      +

      璇︽儏

      +
      +
      + + +
      + + +
      +

      1

      +
      +
      + + +
      + + +
      +

      鑰曞洯姘旇薄绔

      +
      +
      + + +
      + + +
      +

      15337904657

      +
      +
      + + +
      + + +
      +

      2013.5

      +
      +
      + + +
      + + +
      +

      2014.5

      +
      +
      + + +
      + + +
      +

      鏁欏瀹炰範

      +
      +
      + + +
      + + +
      +

      淇℃伅绉戝鎶鏈闄

      +
      +
      + + +
      + + +
      +

      14绾ц绠楁満1鐝13绾х數鍟嗕竴鐝

      +
      +
      + + +
      + + +
      +

      姘旇薄绔

      +
      +
      + + +
      + + +
      +

      寮犱笁銆佹潕鍥

      +
      +
      + + +
      + + +
      +

      鐢宠鎴愬姛

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      2

      +
      +
      + + +
      + + +
      +

      鑰曞洯鐢熺瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      18235679857

      +
      +
      + + +
      + + +
      +

      2013.6

      +
      +
      + + +
      + + +
      +

      2014.6

      +
      +
      + + +
      + + +
      +

      鐢熶骇瀹炰範

      +
      +
      + + +
      + + +
      +

      鍐滃闄

      +
      +
      + + +
      + + +
      +

       13鍐滃鏁欒偛1鐝14绾у啘瀛︽暀鑲1鐝

      +
      +
      + + +
      + + +
      +

      鐢熺瀹炰範

      +
      +
      + + +
      + + +
      +

      鐜嬩簲

      +
      +
      + + +
      + + +
      +

      鐢宠澶辫触

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      3

      +
      +
      + + +
      + + +
      +

      鑰曞洯鏍囨湰鍥

      +
      +
      + + +
      + + +
      +

      13124657896

      +
      +
      + + +
      + + +
      +

      2013.7

      +
      +
      + + +
      + + +
      +

      2014.6

      +
      +
      + + +
      + + +
      +

      姣曚笟瀹炰範

      +
      +
      + + +
      + + +
      +

      璧勭幆闄

      +
      +
      + + +
      + + +
      +

       14绾х敓鎬佸1鐝

      +
      +
      + + +
      + + +
      +

      鏍囨湰鍥

      +
      +
      + + +
      + + +
      +

      璧靛叚

      +
      +
      + + +
      + + +
      +

      鐢宠澶辫触

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      4

      +
      +
      + + +
      + + +
      +

      浣崇瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      18396780678

      +
      +
      + + +
      + + +
      +

      2014.6

      +
      +
      + + +
      + + +
      +

      2015.6

      +
      +
      + + +
      + + +
      +

      涓撲笟鍔冲姩

      +
      +
      + + +
      + + +
      +

      鍐滃闄

      +
      +
      + + +
      + + +
      +

       13绾ц崏涓氱瀛

      +
      +
      + + +
      + + +
      +

      浣崇瀹炰範

      +
      +
      + + +
      + + +
      +

      寮犲洓銆佺帇涓

      +
      +
      + + +
      + + +
      +

      鐢宠鎴愬姛

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      5

      +
      +
      + + +
      + + +
      +

      鑰曞洯璧勭幆瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      18876465890

      +
      +
      + + +
      + + +
      +

      2015.5

      +
      +
      + + +
      + + +
      +

      2015.6

      +
      +
      + + +
      + + +
      +

      缁煎悎瀹炰範

      +
      +
      + + +
      + + +
      +

      璧勭幆闄

      +
      +
      + + +
      + + +
      +

       13绾у湡鍦拌祫婧愮鐞

      +
      +
      + + +
      + + +
      +

      璧勭幆瀹炰範

      +
      +
      + + +
      + + +
      +

      瀛欏叚

      +
      +
      + + +
      + + +
      +

      鐢宠澶辫触

      +
      +
      + + +
      + + + +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      绔欏唴浣嶇疆锛氭垜鐨勫伐浣  >  鎴戠殑瀹炰範

      +
      +
      + + +
      + + +
      +
      + +
      +

      绛涢

      +
      +
      + + +
      +
      + +
      +

      +
      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      绗1椤

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鍏1椤/5鏉¤褰

      +
      +
      + + +
      +
      + +
      +

      姣忛〉

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      鏉¤褰

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      +
      +
      + + + + + + + + + + + + + + + + + +
      +
      + +
      +

      绗1椤

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鍏1椤/2鏉¤褰

      +
      +
      + + +
      +
      + +
      +

      姣忛〉

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      鏉¤褰

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      +
      +
      + + + + + + + + + + + + + + + + + +
      + + + +
      + + +
      + + +
      + + +
      +

      搴忓彿

      +
      +
      + + +
      + + +
      +

      瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      鑱旂郴鐢佃瘽

      +
      +
      + + +
      + + +
      +

      寮濮嬫棩鏈

      +
      +
      + + +
      + + +
      +

      缁撴潫鏃ユ湡

      +
      +
      + + +
      + + +
      +

      瀹炰範绫诲瀷

      +
      +
      + + +
      + + +
      +

      瀛﹂櫌

      +
      +
      + + +
      + + +
      +

      骞寸骇涓撲笟鐝骇

      +
      +
      + + +
      + + +
      +

      瀹炰範鍦扮偣

      +
      +
      + + +
      + + +
      +

      鎸囧鑰佸笀

      +
      +
      + + +
      + + +
      +

      鐢宠鐘舵

      +
      +
      + + +
      + + +
      +

      鎿嶄綔

      +
      +
      + + +
      + + +
      +

      1

      +
      +
      + + +
      + + +
      +

      鑰曞洯姘旇薄绔

      +
      +
      + + +
      + + +
      +

      15337904657

      +
      +
      + + +
      + + +
      +

      2016.10

      +
      +
      + + +
      + + +
      +

      2017.3

      +
      +
      + + +
      + + +
      +

      鏁欏瀹炰範

      +
      +
      + + +
      + + +
      +

      淇℃伅绉戝鎶鏈闄

      +
      +
      + + +
      + + +
      +

      14绾ц绠楁満1鐝

      +
      +
      + + +
      + + +
      +

      姘旇薄绔

      +
      +
      + + +
      + + +
      +

      寮犱笁銆佹潕鍥

      +
      +
      + + +
      + + +
      +

      缂栬緫涓

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      2

      +
      +
      + + +
      + + +
      +

      鑰曞洯鐢熺瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      18235679857

      +
      +
      + + +
      + + +
      +

      2016.9

      +
      +
      + + +
      + + +
      +

      2017.2

      +
      +
      + + +
      + + +
      +

      鐢熶骇瀹炰範

      +
      +
      + + +
      + + +
      +

      鍐滃闄

      +
      +
      + + +
      + + +
      +

       13鍐滃鏁欒偛1鐝14绾у啘瀛︽暀鑲1鐝

      +
      +
      + + +
      + + +
      +

      鐢熺   瀹炰範

      +
      +
      + + +
      + + +
      +

      鐜嬩簲

      +
      +
      + + +
      + + +
      +

      寰呭鏍

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      3

      +
      +
      + + +
      + + +
      +

      鑰曞洯鏍囨湰鍥

      +
      +
      + + +
      + + +
      +

      13124657896

      +
      +
      + + +
      + + +
      +

      2017.3

      +
      +
      + + +
      + + +
      +

      2017.4

      +
      +
      + + +
      + + +
      +

      姣曚笟瀹炰範

      +
      +
      + + +
      + + +
      +

      璧勭幆闄

      +
      +
      + + +
      + + +
      +

       14绾х敓鎬佸1鐝

      +
      +
      + + +
      + + +
      +

      鏍囨湰鍥

      +
      +
      + + +
      + + +
      +

      璧靛叚

      +
      +
      + + +
      + + +
      +

      寰呭鏍

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      4

      +
      +
      + + +
      + + +
      +

      浣崇瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      18396780678

      +
      +
      + + +
      + + +
      +

      2017.2

      +
      +
      + + +
      + + +
      +

      2017.3

      +
      +
      + + +
      + + +
      +

      涓撲笟鍔冲姩

      +
      +
      + + +
      + + +
      +

      鍐滃闄

      +
      +
      + + +
      + + +
      +

       13绾ц崏涓氱瀛

      +
      +
      + + +
      + + +
      +

      浣崇   瀹炰範

      +
      +
      + + +
      + + +
      +

      寮犲洓銆佺帇涓

      +
      +
      + + +
      + + +
      +

      鐢宠    鎴愬姛

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      5

      +
      +
      + + +
      + + +
      +

      鑰曞洯璧勭幆瀹炰範鍩哄湴

      +
      +
      + + +
      + + +
      +

      18876465890

      +
      +
      + + +
      + + +
      +

      2017.5

      +
      +
      + + +
      + + +
      +

      2017.6

      +
      +
      + + +
      + + +
      +

      缁煎悎瀹炰範

      +
      +
      + + +
      + + +
      +

      璧勭幆闄

      +
      +
      + + +
      + + +
      +

       13绾у湡鍦拌祫婧愮鐞

      +
      +
      + + +
      + + +
      +

      璧勭幆   瀹炰範

      +
      +
      + + +
      + + +
      +

      瀛欏叚

      +
      +
      + + +
      + + +
      +

      鐢宠    澶辫触

      +
      +
      + + +
      + + + +
      +
      + + +
      +
      + +
      +

      鎶ヤ慨鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      淇敼

      +
      +
      + + +
      +
      + +
      +

      鍒犻櫎

      +
      +
      + + +
      +
      + +
      +

      鎻愪氦

      +
      +
      + + +
      +
      + +
      +

      鏌ョ湅

      +
      +
      + + +
      +
      + +
      +

      鎾ゅ洖

      +
      +
      + + +
      +
      + +
      +

      鏌ョ湅

      +
      +
      + + +
      +
      + +
      +

      鎾ゅ洖

      +
      +
      + + +
      +
      + +
      +

      鏌ョ湅

      +
      +
      + + +
      +
      + +
      +

      鏌ョ湅

      +
      +
      + + + + + + + + + + + + + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑宸ヤ綔

      +
      +
      + + + + + +
      +
      + +
      +

      +
      +
      +
      + + +
      +
      +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑绉熻祦

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑瀹炰範

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鍩哄湴

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鎶ヤ慨

      +
      +
      +
      +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      浜嬪姟瀹℃壒

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鏁版嵁绠$悊

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      缁熻鍒嗘瀽

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      +
      + +
      +

      鍦熷湴绉熻祦

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鐢宠

      +
      +
      + + +
      +
      + +
      +

      棣   椤

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      涓荤晫闈

      +
      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      瀵煎嚭

      +
      +
      + + +
      +
      + +
      +

      瀵煎嚭

      +
      +
      + + + + + + +
      + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/\346\210\221\347\232\204\347\247\237\350\265\201.html" "b/\347\225\214\351\235\242\350\256\276\350\256\241/\346\210\221\347\232\204\347\247\237\350\265\201.html" new file mode 100644 index 0000000..f7f1457 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/\346\210\221\347\232\204\347\247\237\350\265\201.html" @@ -0,0 +1,3289 @@ +锘 + + + 鎴戠殑绉熻祦 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      +
      + +
      +

      婀栧崡鍐滀笟澶у

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴绠$悊绯荤粺

      +
      +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鏇存敼瀵嗙爜

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      閫鍑

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      绉熻祦鍘嗗彶

      +
      +
      + + +
      + + +
      + + +
      +

      搴忓彿

      +
      +
      + + +
      + + +
      +

      寮濮嬫棩鏈

      +
      +
      + + +
      + + +
      +

      缁撴潫鏃ユ湡

      +
      +
      + + +
      + + +
      +

      鍩哄湴鍚

      +
      +
      + + +
      + + +
      +

      鍦熷湴缂栧彿

      +
      +
      + + +
      + + +
      +

      鏈缁堢姸鎬

      +
      +
      + + +
      + + +
      +

      璇︽儏

      +
      +
      + + +
      + + +
      +

      1

      +
      +
      + + +
      + + +
      +

      2013.5

      +
      +
      + + +
      + + +
      +

      2014.5

      +
      +
      + + +
      + + +
      +

      鑰樺洯绉戞暀缁煎悎鍩哄湴

      +
      +
      + + +
      + + +
      +

      #21

      +
      +
      + + +
      + + +
      +

      鐢宠鎴愬姛

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      2

      +
      +
      + + +
      + + +
      +

      2013.6

      +
      +
      + + +
      + + +
      +

      2014.6

      +
      +
      + + +
      + + +
      +

      瑗垮崡瑙掑啘瀛﹀熀鍦

      +
      +
      + + +
      + + +
      +

      #22

      +
      +
      + + +
      + + +
      +

      鐢宠澶辫触

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      3

      +
      +
      + + +
      + + +
      +

      2013.7

      +
      +
      + + +
      + + +
      +

      2014.6

      +
      +
      + + +
      + + +
      +

      绱笢璺洯鏋楀洯鑹哄熀鍦

      +
      +
      + + +
      + + +
      +

      #23

      +
      +
      + + +
      + + +
      +

      鐢宠澶辫触

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      4

      +
      +
      + + +
      + + +
      +

      2014.6

      +
      +
      + + +
      + + +
      +

      2015.6

      +
      +
      + + +
      + + +
      +

      闀垮畨鍩哄湴

      +
      +
      + + +
      + + +
      +

      #25

      +
      +
      + + +
      + + +
      +

      鐢宠鎴愬姛

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      5

      +
      +
      + + +
      + + +
      +

      2015.5

      +
      +
      + + +
      + + +
      +

      2015.6

      +
      +
      + + +
      + + +
      +

      娴忛槼鍩哄湴

      +
      +
      + + +
      + + +
      +

      #26

      +
      +
      + + +
      + + +
      +

      鐢宠澶辫触

      +
      +
      + + +
      + + + +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      绔欏唴浣嶇疆锛氭垜鐨勫伐浣  >  鎴戠殑绉熻祦

      +
      +
      + + +
      + + +
      +
      + +
      +

      绛涢

      +
      +
      + + +
      +
      + +
      +

      +
      +
      +
      + + + + + +
      + + + +
      + + +
      +
      + +
      +

      绗1椤

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鍏1椤/5鏉¤褰

      +
      +
      + + +
      +
      + +
      +

      姣忛〉

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      鏉¤褰

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      +
      +
      + + + + + + + + + + + + + + + + + +
      +
      + +
      +

      绗1椤

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鍏1椤/2鏉¤褰

      +
      +
      + + +
      +
      + +
      +

      姣忛〉

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      鏉¤褰

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      +
      +
      + + + + + + + + + + + + + + + + + +
      + + + +
      + + +
      + + +
      + + +
      +

      搴忓彿

      +
      +
      + + +
      + + +
      +

      寮濮嬫棩鏈

      +
      +
      + + +
      + + +
      +

      缁撴潫鏃ユ湡

      +
      +
      + + +
      + + +
      +

      鍩哄湴鍚

      +
      +
      + + +
      + + +
      +

      鍦熷湴缂栧彿

      +
      +
      + + +
      + + +
      +

      绉熻祦鐘舵

      +
      +
      + + +
      + + +
      +

      鎿嶄綔

      +
      +
      + + +
      + + +
      +

      1

      +
      +
      + + +
      + + +
      +

      2016.10

      +
      +
      + + +
      + + +
      +

      2017.3

      +
      +
      + + +
      + + +
      +

      闀垮畨鍩哄湴

      +
      +
      + + +
      + + +
      +

      #123

      +
      +
      + + +
      + + +
      +

      缂栬緫涓

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      2

      +
      +
      + + +
      + + +
      +

      2016.9

      +
      +
      + + +
      + + +
      +

      2017.2

      +
      +
      + + +
      + + +
      +

      鑰樺洯绉戞暀缁煎悎鍩哄湴

      +
      +
      + + +
      + + +
      +

      #124

      +
      +
      + + +
      + + +
      +

      寰呭鏍

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      3

      +
      +
      + + +
      + + +
      +

      2017.3

      +
      +
      + + +
      + + +
      +

      2017.4

      +
      +
      + + +
      + + +
      +

      瑗垮崡瑙掑啘瀛﹀熀鍦

      +
      +
      + + +
      + + +
      +

      #23

      +
      +
      + + +
      + + +
      +

      寰呬氦璐

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      4

      +
      +
      + + +
      + + +
      +

      2017.2

      +
      +
      + + +
      + + +
      +

      2017.3

      +
      +
      + + +
      + + +
      +

      绱笢璺洯鏋楀洯鑹哄熀鍦

      +
      +
      + + +
      + + +
      +

      #23

      +
      +
      + + +
      + + +
      +

      鐢宠鎴愬姛

      +
      +
      + + +
      + + + +
      + + +
      + + +
      +

      5

      +
      +
      + + +
      + + +
      +

      2017.5

      +
      +
      + + +
      + + +
      +

      2017.6

      +
      +
      + + +
      + + +
      +

      娴忛槼鍩哄湴

      +
      +
      + + +
      + + +
      +

      #26

      +
      +
      + + +
      + + +
      +

      鐢宠澶辫触

      +
      +
      + + +
      + + + +
      +
      + + +
      +
      + +
      +

      鎶ヤ慨鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      淇敼

      +
      +
      + + +
      +
      + +
      +

      鍒犻櫎

      +
      +
      + + +
      +
      + +
      +

      鎻愪氦

      +
      +
      + + +
      +
      + +
      +

      鏌ョ湅

      +
      +
      + + +
      +
      + +
      +

      鎾ゅ洖

      +
      +
      + + +
      +
      + +
      +

      鏌ョ湅

      +
      +
      + + +
      +
      + +
      +

      鎾ゅ洖

      +
      +
      + + +
      +
      + +
      +

      鏌ョ湅

      +
      +
      + + +
      +
      + +
      +

      鏌ョ湅

      +
      +
      + + + + + + + + + + + + + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑宸ヤ綔

      +
      +
      + + + + + +
      +
      + +
      +

      +
      +
      +
      + + +
      +
      +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑绉熻祦

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑瀹炰範

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鍩哄湴

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鎶ヤ慨

      +
      +
      +
      +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      浜嬪姟瀹℃壒

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鏁版嵁绠$悊

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      缁熻鍒嗘瀽

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      +
      + +
      +

      鍦熷湴绉熻祦

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鐢宠

      +
      +
      + + +
      +
      + +
      +

      棣   椤

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      涓荤晫闈

      +
      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      瀵煎嚭

      +
      +
      + + +
      +
      + +
      +

      瀵煎嚭

      +
      +
      +
      + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/\347\224\250\346\210\267\351\246\226\351\241\265.html" "b/\347\225\214\351\235\242\350\256\276\350\256\241/\347\224\250\346\210\267\351\246\226\351\241\265.html" new file mode 100644 index 0000000..1e2780f --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/\347\224\250\346\210\267\351\246\226\351\241\265.html" @@ -0,0 +1,1199 @@ +锘 + + + 鐢ㄦ埛棣栭〉 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      +
      + +
      +

      婀栧崡鍐滀笟澶у

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴绠$悊绯荤粺

      +
      +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鏇存敼瀵嗙爜

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      閫鍑

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      閫氱煡鍏憡

      +
      +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

            瀹炰範鍩哄湴绠$悊绯荤粺1.0鐗堟湰姝e紡涓婄嚎锛屾湰绯荤粺鐨勫畻鏃ㄦ槸鎼烘墜瀛︽牎鍩哄湴绉戯紝涓哄叏浣撲竴绾挎暀甯堟湇鍔★紝涓昏浣撶幇鍦ㄦ牎鍐呮暀瀛﹀熀鍦板湡鍦扮殑绉熻祦銆佹牎鍐呭瀹炰範椤圭洰鐨勫紑灞曞拰鏁欏鍩哄湴璁惧鐨勫強鏃剁淮淇

      +
      +
      + + +
      +
      + +
      +

      涓汉娑堟伅鎻愮ず

      +
      +
      + + +
      + + +
      +
      + +
      +

      瀹炰範鐢宠閫氳繃                      

      +
      +
      + + +
      +
      + +
      +

      2016--8-10

      +
      +
      + + +
      + + + +
      +
      + + +
      + + + +
      + + +
      + + +
      +
      + +
      +

      绉熻祦鐢宠閫鍥

      +
      +
      + + +
      +
      + +
      +

      2016--8-10

      +
      +
      + + +
      + + + +
      +
      + + +
      + + +
      +
      + +
      +

      淇悊瀹屾垚

      +
      +
      + + +
      +
      + +
      +

      2016--8-10

      +
      +
      + + +
      + + + +
      +
      + + +
      +
      + +
      +

      绉熻祦鎴愬姛锛岃缂磋垂

      +
      +
      + + +
      +
      + +
      +

      2016--8-10

      +
      +
      + + +
      +
      + +
      +

      鏇村

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑淇℃伅

      +
      +
      + + +
      +
      + +
      +

      1287

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑绉熻祦

      +
      +
      + + +
      +
      + +
      +

      32

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑瀹炰範

      +
      +
      + + +
      +
      + +
      +

      56

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鎶ヤ慨

      +
      +
      + + +
      +
      + +
      +

      0

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      浠婃棩寰呭姙

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      鎶ヤ慨鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑宸ヤ綔

      +
      +
      + + + + + +
      +
      + +
      +

      +
      +
      +
      + + +
      +
      +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑绉熻祦

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑瀹炰範

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鍩哄湴

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鎶ヤ慨

      +
      +
      +
      +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      浜嬪姟瀹℃壒

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鏁版嵁绠$悊

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      缁熻鍒嗘瀽

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      +
      + +
      +

      鍦熷湴绉熻祦

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鐢宠

      +
      +
      + + +
      +
      + +
      +

      棣   椤

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      涓荤晫闈

      +
      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      +
      + +
      +

      +
      +
      +
      + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/\347\256\241\347\220\206\345\221\230\351\246\226\351\241\265.html" "b/\347\225\214\351\235\242\350\256\276\350\256\241/\347\256\241\347\220\206\345\221\230\351\246\226\351\241\265.html" new file mode 100644 index 0000000..f3065e8 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/\347\256\241\347\220\206\345\221\230\351\246\226\351\241\265.html" @@ -0,0 +1,1199 @@ +锘 + + + 绠$悊鍛橀椤 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      +
      + +
      +

      婀栧崡鍐滀笟澶у

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴绠$悊绯荤粺

      +
      +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鏇存敼瀵嗙爜

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      閫鍑

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑宸ヤ綔

      +
      +
      + + + + + +
      +
      + +
      +

      +
      +
      +
      + + +
      +
      +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑绉熻祦

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑瀹炰範

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鍩哄湴

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鎶ヤ慨

      +
      +
      +
      +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      浜嬪姟瀹℃壒

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鏁版嵁绠$悊

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      缁熻鍒嗘瀽

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      +
      + + +
      + + +
      +
      + +
      +

      閫氱煡鍏憡

      +
      +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鍦熷湴绉熻祦

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鐢宠

      +
      +
      + + +
      +
      + +
      +

      鎶ヤ慨鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

            瀹炰範鍩哄湴绠$悊绯荤粺1.0鐗堟湰姝e紡涓婄嚎锛屾湰绯荤粺鐨勫畻鏃ㄦ槸鎼烘墜瀛︽牎鍩哄湴绉戯紝涓哄叏浣撲竴绾挎暀甯堟湇鍔★紝涓昏浣撶幇鍦ㄦ牎鍐呮暀瀛﹀熀鍦板湡鍦扮殑绉熻祦銆佹牎鍐呭瀹炰範椤圭洰鐨勫紑灞曞拰鏁欏鍩哄湴璁惧鐨勫強鏃剁淮淇

      +
      +
      + + +
      +
      + +
      +

      涓汉娑堟伅鎻愮ず

      +
      +
      + + +
      + + +
      +
      + +
      +

      瀹炰範鐢宠閫氳繃                      

      +
      +
      + + +
      +
      + +
      +

      2016--8-10

      +
      +
      + + +
      + + + +
      +
      + + +
      + + + +
      + + +
      + + +
      +
      + +
      +

      绉熻祦鐢宠閫鍥

      +
      +
      + + +
      +
      + +
      +

      2016--8-10

      +
      +
      + + +
      + + + +
      +
      + + +
      + + +
      +
      + +
      +

      淇悊瀹屾垚

      +
      +
      + + +
      +
      + +
      +

      2016--8-10

      +
      +
      + + +
      + + + +
      +
      + + +
      +
      + +
      +

      绉熻祦鎴愬姛锛岃缂磋垂

      +
      +
      + + +
      +
      + +
      +

      2016--8-10

      +
      +
      + + +
      +
      + +
      +

      鏇村

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鐢ㄦ埛鏁

      +
      +
      + + +
      +
      + +
      +

      1287

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      绉熻祦鐢宠

      +
      +
      + + +
      +
      + +
      +

      32

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      瀹炰範鐢宠

      +
      +
      + + +
      +
      + +
      +

      56

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      缁翠慨鐢宠

      +
      +
      + + +
      +
      + +
      +

      0

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      浠婃棩寰呭姙

      +
      +
      + + +
      +
      + +
      +

      棣   椤

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      涓荤晫闈

      +
      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      +
      + +
      +

      +
      +
      +
      + + diff --git "a/\347\225\214\351\235\242\350\256\276\350\256\241/\347\263\273\347\273\237\347\224\250\346\210\267\347\273\264\346\212\244.html" "b/\347\225\214\351\235\242\350\256\276\350\256\241/\347\263\273\347\273\237\347\224\250\346\210\267\347\273\264\346\212\244.html" new file mode 100644 index 0000000..752c653 --- /dev/null +++ "b/\347\225\214\351\235\242\350\256\276\350\256\241/\347\263\273\347\273\237\347\224\250\346\210\267\347\273\264\346\212\244.html" @@ -0,0 +1,2850 @@ +锘 + + + 绯荤粺鐢ㄦ埛缁存姢 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      + + +
      + + + +
      + + +
      +
      + +
      +

      婀栧崡鍐滀笟澶у

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴绠$悊绯荤粺

      +
      +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鏇存敼瀵嗙爜

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      閫鍑

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + + +
      +

      +
      +
      + + +
      +
      + +
      +

      绔欏唴浣嶇疆锛氭暟鎹淮鎶>  浜哄憳淇℃伅缁存姢

      +
      +
      + + +
      + + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + + +
      + + +
      + + +
      + + +
      +

      搴忓彿

      +
      +
      + + +
      + + +
      +

      鍛樺伐缂栧彿

      +
      +
      + + +
      + + +
      +

      韬唤灞炴

      +
      +
      + + +
      + + +
      +

      濮撳悕

      +
      +
      + + +
      + + +
      +

      鎬у埆

      +
      +
      + + +
      + + +
      +

      鍛樺伐绫诲埆

      +
      +
      + + +
      + + +
      +

      鍑虹敓鏃ユ湡

      +
      +
      + + +
      + + +
      +

      韬唤璇佸彿鐮

      +
      +
      + + +
      + + +
      +

      鑱旂郴鐢佃瘽

      +
      +
      + + +
      + + +
      +

      閮ㄩ棬

      +
      +
      + + +
      + + +
      +

      璇︽儏     鍙婁慨鏀

      +
      +
      +
      + + +
      + + +
      + + +
      +
      + +
      +

      绗1椤

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鍏1椤/5鏉¤褰

      +
      +
      + + +
      +
      + +
      +

      姣忛〉

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      鏉¤褰

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + +
      + + +
      +
      + +
      +

      +
      +
      + + + + + + + + + + + + + + + + + +
      +
      + +
      +

      鍒犻櫎

      +
      +
      + + +
      +
      + +
      +

      澧炲姞

      +
      +
      + + +
      +
      + +
      +

      绔欏唴浣嶇疆锛氭暟鎹鐞>绯荤粺鏁版嵁缁存姢

      +
      +
      + + +
      + + +
      + + + +
      + + +
      + + +
      +

      100059

      +
      +
      + + +
      + + +
      +

      绠$悊鍛

      +
      +
      + + +
      + + +
      +

      寮犱笁

      +
      +
      + + +
      + + +
      +

      +
      +
      + + +
      + + +
      +

      鍦ㄨ亴浜哄憳

      +
      +
      + + +
      + + +
      +

      1975-10-20

      +
      +
      + + +
      + + +
      +

      43011119751020043X

      +
      +
      + + +
      + + +
      +

      18219723489

      +
      +
      + + +
      + + +
      +

      鏁欏姟澶

      +
      +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + +
      +

      100060

      +
      +
      + + +
      + + +
      +

      鍩哄湴绠$悊鍛

      +
      +
      + + +
      + + +
      +

      鏉庡洓

      +
      +
      + + +
      + + +
      +

      +
      +
      + + +
      + + +
      +

      鍦ㄨ亴浜哄憳

      +
      +
      + + +
      + + +
      +

      1960-8-7

      +
      +
      + + +
      + + +
      +

      432302196008072120

      +
      +
      + + +
      + + +
      +

      13507495185

      +
      +
      + + +
      + + +
      +

      鏁欏姟澶

      +
      +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + +
      +

      100061

      +
      +
      + + +
      + + +
      +

      涓存椂宸

      +
      +
      + + +
      + + +
      +

      鐜嬩簲

      +
      +
      + + +
      + + +
      +

      +
      +
      + + +
      + + +
      +

      鍦ㄨ亴浜哄憳

      +
      +
      + + +
      + + +
      +

      1980-4-10

      +
      +
      + + +
      + + +
      +

      430921198004104833

      +
      +
      + + +
      + + +
      +

      13124083923

      +
      +
      + + +
      + + +
      +

      鏁欏姟澶

      +
      +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + +
      +

      100062

      +
      +
      + + +
      + + +
      +

      鏁欏笀

      +
      +
      + + +
      + + +
      +

      璧靛叚

      +
      +
      + + +
      + + +
      +

      +
      +
      + + +
      + + +
      +

      鍦ㄨ亴浜哄憳

      +
      +
      + + +
      + + +
      +

      1963-7-9

      +
      +
      + + +
      + + +
      +

      430121196307093622

      +
      +
      + + +
      + + +
      +

      18219723421

      +
      +
      + + +
      + + +
      +

      鏁欏姟澶

      +
      +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + +
      +

      100063

      +
      +
      + + +
      + + +
      +

      鏁欏笀

      +
      +
      + + +
      + + +
      +

      瀛欎竷

      +
      +
      + + +
      + + +
      +

      +
      +
      + + +
      + + +
      +

      鍦ㄨ亴浜哄憳

      +
      +
      + + +
      + + +
      +

      1963-11-9

      +
      +
      + + +
      + + +
      +

      430121196311095377

      +
      +
      + + +
      + + +
      +

      13197238638

      +
      +
      + + +
      + + +
      +

      鏁欏姟澶

      +
      +
      + + +
      + + + +
      +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      + + +
      +
      + +
      +

      绛涢

      +
      +
      + + +
      +
      + +
      +

      +
      +
      +
      + + + + + +
      + + + +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + + + + + + + + + + + + +
      +
      + +
      +

      鎶ヤ慨鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑宸ヤ綔

      +
      +
      + + + + + +
      +
      + +
      +

      +
      +
      +
      + + +
      +
      +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鎴戠殑绉熻祦

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑瀹炰範

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鍩哄湴

      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      鎴戠殑鎶ヤ慨

      +
      +
      +
      +
      +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      浜嬪姟瀹℃壒

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      鏁版嵁绠$悊

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      缁熻鍒嗘瀽

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + + +
      + + + + + +
      +
      + +
      +

      鍦熷湴绉熻祦

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鐢宠

      +
      +
      + + +
      +
      + +
      +

      棣   椤

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      瀹炰範鍩哄湴鐢宠

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + + +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      涓荤晫闈

      +
      +
      +
      + + +
      + + + +
      + + +
      +
      + +
      +

      寮犱笁

      +
      +
      + + +
      +
      + +
      +

      +
      +
      + + +
      +
      + +
      +

      瀵煎嚭

      +
      +
      +
      + + diff --git "a/\350\257\246\347\273\206\350\256\276\350\256\241/README.md" "b/\350\257\246\347\273\206\350\256\276\350\256\241/README.md" new file mode 100644 index 0000000..de47f8c --- /dev/null +++ "b/\350\257\246\347\273\206\350\256\276\350\256\241/README.md" @@ -0,0 +1,2 @@ +# PB_Management +鏁欏鍩哄湴绠$悊绯荤粺 diff --git "a/\350\257\246\347\273\206\350\256\276\350\256\241/images/all.jpg" "b/\350\257\246\347\273\206\350\256\276\350\256\241/images/all.jpg" new file mode 100644 index 0000000..9faaf27 Binary files /dev/null and "b/\350\257\246\347\273\206\350\256\276\350\256\241/images/all.jpg" differ diff --git "a/\350\257\246\347\273\206\350\256\276\350\256\241/images/all2.jpg" "b/\350\257\246\347\273\206\350\256\276\350\256\241/images/all2.jpg" new file mode 100644 index 0000000..93f6610 Binary files /dev/null and "b/\350\257\246\347\273\206\350\256\276\350\256\241/images/all2.jpg" differ diff --git "a/\350\257\246\347\273\206\350\256\276\350\256\241/images/apply.jpg" "b/\350\257\246\347\273\206\350\256\276\350\256\241/images/apply.jpg" new file mode 100644 index 0000000..b21b2a5 Binary files /dev/null and "b/\350\257\246\347\273\206\350\256\276\350\256\241/images/apply.jpg" differ diff --git "a/\350\257\246\347\273\206\350\256\276\350\256\241/images/check.jpg" "b/\350\257\246\347\273\206\350\256\276\350\256\241/images/check.jpg" new file mode 100644 index 0000000..0318779 Binary files /dev/null and "b/\350\257\246\347\273\206\350\256\276\350\256\241/images/check.jpg" differ diff --git "a/\350\257\246\347\273\206\350\256\276\350\256\241/images/check2.jpg" "b/\350\257\246\347\273\206\350\256\276\350\256\241/images/check2.jpg" new file mode 100644 index 0000000..53fdf50 Binary files /dev/null and "b/\350\257\246\347\273\206\350\256\276\350\256\241/images/check2.jpg" differ diff --git "a/\350\257\246\347\273\206\350\256\276\350\256\241/images/check2.png" "b/\350\257\246\347\273\206\350\256\276\350\256\241/images/check2.png" new file mode 100644 index 0000000..8ca9b57 Binary files /dev/null and "b/\350\257\246\347\273\206\350\256\276\350\256\241/images/check2.png" differ diff --git "a/\350\257\246\347\273\206\350\256\276\350\256\241/images/design.jpg" "b/\350\257\246\347\273\206\350\256\276\350\256\241/images/design.jpg" new file mode 100644 index 0000000..34460ed Binary files /dev/null and "b/\350\257\246\347\273\206\350\256\276\350\256\241/images/design.jpg" differ diff --git "a/\350\257\246\347\273\206\350\256\276\350\256\241/images/interact.jpg" "b/\350\257\246\347\273\206\350\256\276\350\256\241/images/interact.jpg" new file mode 100644 index 0000000..da01e89 Binary files /dev/null and "b/\350\257\246\347\273\206\350\256\276\350\256\241/images/interact.jpg" differ diff --git "a/\350\257\246\347\273\206\350\256\276\350\256\241/images/interact.png" "b/\350\257\246\347\273\206\350\256\276\350\256\241/images/interact.png" new file mode 100644 index 0000000..aafebd4 Binary files /dev/null and "b/\350\257\246\347\273\206\350\256\276\350\256\241/images/interact.png" differ diff --git "a/\350\257\246\347\273\206\350\256\276\350\256\241/images/phone.jpg" "b/\350\257\246\347\273\206\350\256\276\350\256\241/images/phone.jpg" new file mode 100644 index 0000000..a76cf93 Binary files /dev/null and "b/\350\257\246\347\273\206\350\256\276\350\256\241/images/phone.jpg" differ diff --git "a/\350\257\246\347\273\206\350\256\276\350\256\241/images/use1.jpg" "b/\350\257\246\347\273\206\350\256\276\350\256\241/images/use1.jpg" new file mode 100644 index 0000000..2b89eaf Binary files /dev/null and "b/\350\257\246\347\273\206\350\256\276\350\256\241/images/use1.jpg" differ diff --git "a/\350\257\246\347\273\206\350\256\276\350\256\241/images/use2.jpg" "b/\350\257\246\347\273\206\350\256\276\350\256\241/images/use2.jpg" new file mode 100644 index 0000000..82989d7 Binary files /dev/null and "b/\350\257\246\347\273\206\350\256\276\350\256\241/images/use2.jpg" differ diff --git "a/\350\257\246\347\273\206\350\256\276\350\256\241/\345\234\237\345\234\260\347\247\237\350\265\201.md" "b/\350\257\246\347\273\206\350\256\276\350\256\241/\345\234\237\345\234\260\347\247\237\350\265\201.md" new file mode 100644 index 0000000..cb78b35 --- /dev/null +++ "b/\350\257\246\347\273\206\350\256\276\350\256\241/\345\234\237\345\234\260\347\247\237\350\265\201.md" @@ -0,0 +1,634 @@ +# 鍦熷湴绉熻祦妯″潡璁捐鏂囨。 +### 涓锛庡湡鍦扮璧佹杩 +鍦熷湴绉熻祦妯″潡涓昏鐢ㄤ簬鏁欏笀瀵规牎鍐6澶у熀鍦颁腑鐨勫湡鍦拌繘琛岀璧併傛垜浠礋璐e皢绻佺粫澶嶆潅鐨勫伐搴忕畝鍗曞寲锛屽悎鐞嗗寲锛屽鏍峰寲銆傞鍏堬紝鐢ㄦ埛鍙互閫氳繃涓ょ鏂瑰紡鏌ョ湅鐩稿簲鍦熷湴鐨勪俊鎭紝濡傛灉鏄冻涓嶅嚭鎴风殑鐢ㄦ埛鍙互閫夋嫨鐧诲綍缃戠珯鏉ヤ簡瑙f瘡涓鍧楀湡鍦扮殑淇℃伅锛屽鏋滄槸浜蹭复鐜板満鑰冨療鐨勭敤鎴峰彲浠ユ壂鎻忓湡鍦颁笂鎵鏍囪瘑鐨勪簩缁寸爜杩涜鏌ョ湅銆傚浜庢渶涓洪噸瑕佺殑鍦熷湴绉熻祦娴佺▼锛岀敤鎴锋寜鐓х綉绔欐彁绀鸿繘琛岀璧佺敵璇凤紝绠$悊鍛樿繘琛屽鏍革紝鎴戜滑灏嗙鐞嗗憳鐨勭鐞嗕笌鏁欏笀鐢ㄦ埛鐨勭敵璇疯繘琛屽悎鐞嗙殑鍒掑垎锛屼娇鍙屾柟鍙互杩涜鏈夋晥鐨勶紝绱у瘑鐨勶紝瀹炴椂鐨勪氦浜掋 +### 浜.娴佺▼鍥 +#### (1).鎬讳笟鍔℃祦绋嬪浘 +![](images/all.jpg) +#### (2). 鍒嗕笟鍔℃祦绋嬪浘 +#### 1锛 鍦熷湴甯冨眬娴佺▼鍥 +![](images/design.jpg) +#### 2锛 鍦熷湴绉熻祦娴佺▼鍥 +![](images/apply.jpg) +#### 3锛 鐢ㄦ埛鐢宠浜や簰娴佺▼鍥 +![](images/interact.jpg) +#### 4锛 鍦熷湴鐢宠瀹℃牳鍥 +![](images/check.jpg) + +涓嬪浘瀵瑰簲涓婂浘涓殑鏍囪1澶勶紝涓哄湡鍦扮敵璇疯褰曞悇绉嶇姸鎬佽浆鎹㈢殑閫昏緫銆備负浜嗘祦绋嬬殑绠鍗曟槗鐞嗚В锛屽湪姝ゅ鎴戝皢涓夌敤鎴锋彁浜ょ殑绉熻祦鐢宠璁惧畾涓篈锛孊锛孋锛岀敵璇风殑鍏鐘舵佸垎鍒负锛1.鐢宠涓 2.浜よ垂涓 3.閿佸畾 4.鏈氦璐 5.鐢宠澶辫触 6.鐢宠鎴愬姛 +![](images/check2.jpg) +#### 5.鐢ㄦ埛鎵嬫満鎿嶄綔娴佺▼鍥 +![](images/phone.jpg) +#### 6锛 鍦熷湴浣跨敤淇℃伅娴佺▼鍥 +![](images/use1.jpg) +![](images/use2.jpg) +### 涓夛紟 琛ㄧ殑鍒涘缓 +#### 1锛 鍩哄湴淇℃伅琛╞aseInfo + +| Attribute name | Key Type | Null/Unique | Default | Data Type | Sample Data | +| --------------- | -------- | ----------- | ------- | --------- | ----------- | +| bid(鍩哄湴缂栧彿) | P | not null | | int | 鑷 | +| bname(鍩哄湴鍚嶇О) | | not null | | varchar | "闀垮畨鍩哄湴" | +| btype(鍩哄湴绫诲瀷) | | not null | | int | 1鎴2鎴3 | +娉細鍩哄湴淇℃伅琛ㄤ腑鐨刡type瀛楁涓鍏卞彲鍙栦笁涓硷細1.浠h〃鍦熷湴 2.浠h〃鏍″唴 3.浠h〃鏍″ + +#### 2.鍦熷湴淇℃伅琛╨andInfo + +| Attribute name | Key Type | Null/Unique | Default | Data Type | Sample Data | +| ----------------------------- | -------- | ----------- | ------- | --------- | -------------- | +| Lid锛堝湡鍦扮紪鍙凤級 | P | not null | | int | 鑷 | +| lname (鍦熷湴鍚嶇О) | | not null | | varchar | "鑰曞洯鏋滆敩鍩哄湴" | +| College (鎵灞炲闄) | | null | | varchar | "鐢熺闄" | +| Major_oriented (闈㈠悜涓撲笟) | | null | | varchar | "鍔ㄧ墿绉戝" | +| plantingContent 锛堟帹鑽愮妞嶅唴瀹癸級 | | null | | varchar | "鐜夌背" | +| landArea (鍦熷湴闈㈢Н/浜) | | not null | | int | 8 | +| Afford(鍙壙鎷呬汉鏁/浜) | | null | | int | 70 | +| buildingArea(寤虹瓚闈㈢Н) | | null | | int | 70 | +| bid(鍩哄湴缂栧彿) | F | not null | | int | 鍙傜収鍩哄湴淇℃伅琛ㄤ腑鐨勪富閿 | + + + +#### 3锛 鍦熷湴甯冨眬琛╨andLayout + +| Attribute name | Key Type | Null/Unique | Default | Data Type | Sample Data | +| --------------------- | -------- | ----------- | ------- | --------- | -------------------- | +| id (搴忓彿) | P | not null | | int | 1 | +| x_axis (x鍧愭爣) | | not null | | int | 100 | +| y_axis (y鍧愭爣) | | not null | | int | 100 | +| width (瀹藉害/px) | | not null | | int | 20 | +| height 锛堥珮搴/px锛 | | not null | | int | 40 | +| lid (鍦熷湴缂栧彿) | F | not null | | int | 鍙傜収鍦熷湴淇℃伅琛ㄧ殑涓婚敭 | +| bid (鍩哄湴缂栧彿) | F | not null | | int | 鍙傜収鍩哄湴淇℃伅琛ㄧ殑涓婚敭 | + + +#### 4锛 鍦熷湴鐢宠琛╨andApply + +| Attribute name | Key Type | Null/Unique | Default | Data Type | Sample Data | +| ------------------------- | -------- | ----------- | ------- | --------- | ------------------ | +| la_id锛堝簭鍙凤級 | P | not null | | int | 鑷 | +| Lid锛堝湡鍦扮紪鍙凤級 | F | not null | | int | 鍙傜収鍦熷湴淇℃伅琛ㄤ腑鐨勪富閿 | +| startTime锛堣捣濮嬫棩鏈燂級 | | not null | | varchar | "2016-11-20" | +| endTime锛堢粨鏉熸棩鏈燂級 | | not null | |varchar | "2017-11-20" | +| planting锛堢妞嶅唴瀹癸級 | | null | | varchar |"澶ц眴" | +| applicantId锛堢敵璇蜂汉锛 | F | not null | | int | 鍙傜収鏁欏笀琛ㄤ腑鐨勪富閿 | +| Status锛堢敵璇风姸鎬侊級 | | not null | | int | 1鎴2鎴3...鎴7 | +| startTime锛堝紑濮嬩氦璐规椂闂达級 | | null | | varchar | "2016-11-20" | +娉ㄦ剰锛氬湡鍦扮敵璇疯〃涓殑status瀛楁涓鍏辨湁涓冪鍊间緵閫夋嫨锛1.浜よ垂涓 2.鐢宠涓 3.鏈氦璐 4.閿佸畾 5.绔炰簤澶辫触 6.鐢宠鎴愬姛 + 7.澶辨晥锛堢敤鎴疯嚜琛屽彇娑堢敵璇凤級 8.绠$悊鍛樻嫆缁 + + +#### 5锛 鍦熷湴浣跨敤琛 + +| Attribute name | Key Type | Null/Unique | Default | Data Type | Sample Data | +| ----------------------- | -------- | ----------- | ------- | --------- | ------------------ | +| lr_id锛堝簭鍙凤級 | P | not null | | int | 鑷 | +| Lid锛堝湡鍦扮紪鍙凤級 | | not null | | int | 2 | +| startTime锛堣捣濮嬫棩鏈燂級 | | not null | | date | "2016-11-20" | +| endTime锛堢粨鏉熸棩鏈燂級 | | not null | | date | "2017-11-20" | +| planting锛堢妞嶅唴瀹癸級 | | null | | varchar | "澶ц眴" | +| userId锛堜娇鐢ㄤ汉锛 | | not null | | int | 鍙傜収鏁欏笀琛ㄤ腑鐨勪富閿 | +| rentMoney 锛堢粡璐癸級 | | not null | | int | 1000 | +| chargeDate(鏀惰垂鏃ユ湡) | | not null | | varchar | "2016-11-20" | + + + +### 鍥涳紟 浠g爜璁捐 + +鏈郴缁熼噰鐢⊿SH妗嗘灦瀹炵幇锛屼竴鍏辨秹鍙婂洓灞傚垎甯冿細 + + action灞:鎺у埗灞傦紝涓昏瀹炵幇椤甸潰鐨勮姹備笌鍝嶅簲,鎺у埗鍚勪釜椤甸潰涔嬮棿鐨勮烦杞 ; + + service灞傦細涓氬姟閫昏緫灞傦紝涓昏瀹炵幇浠g爜鍐呴儴閫昏緫鍔熻兘锛 + + dao灞傦細鏁版嵁搴撹繛鎺ュ眰锛屼富瑕佷笌鏁版嵁搴撹繘琛岀洿鎺ヤ氦浜掕繛鎺ワ紱 + + po灞傦細瀹炰綋灞傦紝姣忎竴涓疄浣撶被瀵瑰簲鏁版嵁搴撲腑鐨勪竴寮犺〃銆 + +涓嬭堪涓洪拡瀵硅妯″潡鎵璁捐鐨刟ction灞傦紝service灞傚強瀵瑰簲dao灞傜殑鐩稿叧鎺ュ彛锛 + +Action灞: + + 1.鐢宠鎺у埗锛歀andApplyController + + 2.瀹℃牳鎺у埗锛欳heckController + + 3.浜よ垂鎺у埗: PayForController + + 4.鍦熷湴淇℃伅绠$悊鎺у埗锛歀andInfoController + + 5.鍦熷湴绉熻祦绠$悊鎺у埗:LandRentController + +Service灞傦細 + + 1.鐢宠閫昏緫锛歀andApplyService + + 2.瀹℃牳閫昏緫锛欳heckService + + 3.浜よ垂閫昏緫: PayForService + + 4.鍦熷湴淇℃伅绠$悊閫昏緫锛歀andInfoService + + 5.鍦熷湴绉熻祦绠$悊閫昏緫:LandRentService + +Dao灞傦細 + + 1.鍩哄湴淇℃伅鏁版嵁浜や簰锛欱aseInfoDao + + 2.鍦熷湴淇℃伅鏁版嵁浜や簰锛歀andInfoDao + + 3.鍦熷湴甯冨眬鏁版嵁浜や簰锛歀andLayoutDao + + 4.鍦熷湴鐢宠鏁版嵁浜や簰锛歀andApplyDao + + 5.鍦熷湴浣跨敤鏁版嵁浜や簰锛歀andRentDao + + +Action灞: + +//鐢宠妯″潡鐨勬帶鍒跺眰 + +@Controller("landApplyController") + +public class LandApplyController { + + //鍩哄湴鏌ヨ + @RequestMapping("/baseInfo.do") + public String selectBase(ModelMap map) + { + return null; + } + + //鍦熷湴甯冨眬鏌ヨ + @RequestMapping("/layout.do") + public String selectLandLayout(HttpServletRequest request,ModelMap map) + { + return null; + } + + //鍦熷湴淇℃伅鏌ヨ + @RequestMapping("/landInfo.do") + public String selectLandInfo(HttpServletRequest request,ModelMap map) + { + return null; + } + + //鏈堜唤绌洪棽鏌ヨ + @RequestMapping("/timeSpare.do") + public String timeSpare(HttpServletRequest request,ModelMap map) + { + return null; + } + + + //鑾峰彇鐢宠淇℃伅(鐐瑰嚮绉熻祦鎸夐挳锛岃幏鍙栨暀甯+鍦熷湴+涓汉淇℃伅) + @RequestMapping("/AllApplyInfo.do") + public String getAllApplyInfo(HttpServletRequest request,ModelMap map) + { + return null; + } + + //鎻愪氦鐢宠 + @RequestMapping("/submitApply.do") + public String submitApply(HttpServletRequest request,ModelMap map) + { + return null; + } + + //淇敼鐢宠 + @RequestMapping("/updateApply.do") + public String updateApply(HttpServletRequest request,ModelMap map) + { + return null; + } + + //鏌ョ湅鐢宠 + @RequestMapping("/checkApply.do") + public String checkApply(ModelMap map) + { + return null; + } + + //鍙栨秷鐢宠 + @RequestMapping("/cancelApply.do") + public String cancelApply(HttpServletRequest request,ModelMap map) + { + return null; + } +} + + +//瀹℃牳妯″潡鐨刢ontroller绫 + +public class CheckController { + + //鏌ヨ鎵鏈夌敵璇疯褰 + @RequestMapping("/checkApplyRecord.do") + public String checkApply(ModelMap map) + { + return null; + } + + //鍚屾剰鐢宠 + @RequestMapping("/agreeApply.do") + public String agreeApply(HttpServletRequest request,ModelMap map) + { + return null; + } + + //鎷掔粷浠栦汉鐢宠 + @RequestMapping("/refuseApply.do") + public String refuseApply(HttpServletRequest request,ModelMap map) + { + return null; + } + + + +} + +//浜よ垂妯″潡鐨刢ontroller绫 + +public class PayForController { + + //鎷掔粷浜よ垂 + @RequestMapping("/refusePay.do") + public String refusePay(ModelMap map) + { + return null; + } + + //浜よ垂鎴愬姛 + @RequestMapping("/paySuccess.do") + public String paySuccess(ModelMap map) + { + return null; + } +} + +//鍦熷湴甯冨眬妯″潡鐨刢ontroller绫 + +public class LayoutController { + + //鍦熷湴甯冨眬鎻愪氦 + @RequestMapping("/submitLayout.do") + public String submitLayout(HttpServletRequest request,ModelMap map) + { + return null; + } + + //淇敼鍦熷湴甯冨眬 + @RequestMapping("/updateLayout.do") + public String updateLayout(HttpServletRequest request,ModelMap map) + { + return null; + } + + //鍒犻櫎鍦熷湴 + @RequestMapping("/deleteLayout.do") + public String deleteLayout(HttpServletRequest request,ModelMap map) + { + return null; + } + +} + +//浣跨敤妯″潡鐨勬帶鍒跺眰 + +public class LandUseController { + + //鍦熷湴浣跨敤鎯呭喌鏌ヨ + @RequestMapping("/landUseInfo.do") + public String selectBase(ModelMap map) + { + return null; + } +} + + +Service灞傦細 + +//鍦熷湴鐢宠琛ㄧ殑涓氬姟閫昏緫灞傛帴鍙 + +public interface LandApplyService { + + /* + 鍙傛暟璇存槑锛歜aseType,鏁村瀷锛岃〃绀哄熀鍦扮被鍨嬶紝鍙彇涓変釜鍊硷細1(鍦熷湴)锛2(鏍″唴)锛3(鏍″) + 杩斿洖鍊硷細 List,涓哄熀鍦颁俊鎭疊aseInfo瀵硅薄鐨勯泦鍚 + 鍑芥暟鍔熻兘锛氭煡璇㈠叚澶у熀鍦扮殑淇℃伅 + */ + public List getBaseInfos(int baseType); + + /* + 鍙傛暟璇存槑锛歜id,鏁村瀷锛岃〃绀哄熀鍦扮紪鍙 + 杩斿洖鍊硷細 List,涓哄湡鍦扮鐞哃andInfo瀵硅薄鐨勯泦鍚 + 鍑芥暟鍔熻兘锛氭煡璇㈠湡鍦板竷灞淇℃伅 + */ + public List getLandLayout(int bid); + + /* + 鍙傛暟璇存槑锛歭id,鏁村瀷锛岃〃绀哄湡鍦扮紪鍙 + 杩斿洖鍊硷細 LandInfo,涓哄湡鍦扮鐞哃andInfo瀵硅薄 + 鍑芥暟鍔熻兘锛氭煡璇㈠湡鍦颁俊鎭 + */ + public LandInfo getLandInfo(int lid); + + /* + 鍙傛暟璇存槑锛歭a,涓哄湡鍦扮敵璇稬andApply瀵硅薄 + 杩斿洖鍊硷細 鏃犺繑鍥炲 + 鍑芥暟鍔熻兘锛氭彁浜ゅ湡鍦扮敵璇蜂俊鎭 + */ + public void addLandApply(LandApply la); + + /* + 鍙傛暟璇存槑锛歛pplicantId,瀛楃涓插瀷锛屼负鐢宠浜虹殑Id + status,鏁村瀷锛屼负鐢宠璁板綍鐘舵 + 杩斿洖鍊硷細 List,涓哄湡鍦扮敵璇稬andApply瀵硅薄鐨勯泦鍚 + 鍑芥暟鍔熻兘锛氭煡璇㈢敤鎴蜂釜浜虹殑涓嶅悓鐘舵佺殑鍦熷湴鐢宠璁板綍 + */ + public List getUserApplys(String applicantId锛宨nt status); + + /* + 鍙傛暟璇存槑锛歛pplicantId,瀛楃涓插瀷锛屼负鐢宠浜虹殑Id + 杩斿洖鍊硷細 鏃犺繑鍥炲 + 鍑芥暟鍔熻兘锛氫慨鏀瑰湡鍦扮敵璇蜂俊鎭 + */ + public void updateUserApply(LandApply la); + + + /* + 鍙傛暟璇存槑锛歭id,鏁村瀷锛岃〃绀哄湡鍦扮紪鍙 + 杩斿洖鍊硷細 鏁村瀷锛岃繑鍥炵殑鏄湡鍦扮┖闂插 + 鍑芥暟鍔熻兘锛氭牴鎹湡鍦扮紪鍙锋煡璇㈣鍦熷湴鐨勫湡鍦扮┖闂插硷紝浠ユ鍦ㄥ墠鍙板垽鏂湀浠芥槸鍚︽湁鏁 + 娉細 鐢变簬鐢ㄦ埛閫夋嫨鐨勬湀浠藉彲鑳芥槸涓嶈繛缁殑锛屽洜姝ゅ瓨鏃堕棿娈典笉鏄撹幏鍙栨湁鏁 + 绌洪棽鐨勬椂闂存湀浠斤紝姝ゅ閲囩敤鍦熷湴绌洪棽鍊肩殑鏂规硶. + 璁$畻鍘熺悊锛1.鍦熷湴绌洪棽鍊肩殑鍒濆榛樿鍊间负2^1+2^2+2^3+...+2^12(浠h〃12涓湀鍧囨湁鏁) + 2.褰撶敤鎴风璧佷簡3锛4锛5涓変釜鏈堜唤鐨勬煇涓鍦熷湴鏃讹紝璇ュ湡鍦扮殑鍊间负 + 2^1+2^2+...+2^12-2^3-2^4-2^5 + 3.鍒ゆ柇鏌愪竴鏈堜唤鏄惁绌洪棽锛歴pareValue涓2^(鏈堜唤鍊)鐩镐笌锛屽间负2^(鏈堜唤鍊),鍒 + 璇ユ湀浠界┖闂 + */ + public int getSpareValue(int lid); + + /* + 鍙傛暟璇存槑锛歭a_id,鏁村瀷锛屼负鐢宠璁板綍缂栧彿 + 杩斿洖鍊硷細 鏃犺繑鍥炲 + 鍑芥暟鍔熻兘锛氬彇娑堢敵璇 + */ + public void cancelApply(int la_id); + +} + +//瀹℃牳妯″潡涓氬姟閫昏緫灞傛帴鍙 + +public interface checkService { + + /* + 鍙傛暟璇存槑锛歞ate,瀛楃涓插瀷锛屼负骞翠唤 + 杩斿洖鍊硷細 List,涓哄湡鍦扮敵璇稬andApply瀵硅薄鐨勯泦鍚 + 鍑芥暟鍔熻兘锛氭煡璇㈡墍鏈夊湡鍦扮敵璇疯褰 + */ + public List getLandApplys(String date); + + /* + 鍙傛暟璇存槑锛歭a_id,鏁村瀷锛屼负鐢宠璁板綍缂栧彿锛沴id,鏁村瀷锛屼负鍦熷湴缂栧彿 + 杩斿洖鍊硷細 鏃犺繑鍥炲 + 鍑芥暟鍔熻兘锛 鍚屾剰鐢宠 + */ + public void agreeApply(int la_id,int lid); + + /* + 鍙傛暟璇存槑锛歭a_id,鏁村瀷锛屼负鐢宠璁板綍缂栧彿锛沴id,鏁村瀷锛屼负鍦熷湴缂栧彿 + 杩斿洖鍊硷細 鏃犺繑鍥炲 + 鍑芥暟鍔熻兘锛 鎷掔粷浠栦汉 + */ + public void refuseOthers(int la_id,int lid); + + +} + +//浜よ垂妯″潡鐨勪笟鍔¢昏緫灞傛帴鍙 + +public interface PayForService { + + /* + 鍙傛暟璇存槑锛歭a_id,鏁村瀷锛屼负鐢宠璁板綍缂栧彿锛沴id,鏁村瀷锛屼负鍦熷湴缂栧彿 + 杩斿洖鍊硷細 鏃犺繑鍥炲 + 鍑芥暟鍔熻兘锛 鎷掔粷浜よ垂 + */ + public void refusePay(int la_id,int lid); + + /* + 鍙傛暟璇存槑锛歭a_id,鏁村瀷锛屼负鐢宠璁板綍缂栧彿锛沴id,鏁村瀷锛屼负鍦熷湴缂栧彿 + 杩斿洖鍊硷細 鏃犺繑鍥炲 + 鍑芥暟鍔熻兘锛 浜よ垂鎴愬姛 + */ + public void paySuccess(int la_id,int lid); +} + +//鍦熷湴甯冨眬绠$悊琛ㄧ殑涓氬姟閫昏緫灞傛帴鍙 + +public interface LandLayoutService { + + /* + 鍙傛暟璇存槑锛歭ist,LandLayout瀵硅薄鐨勯泦鍚堬紝琛ㄧず鎵鏈夌殑鍦熷湴甯冨眬瀵硅薄 + 杩斿洖鍊硷細 鏃犺繑鍥炲 + 鍑芥暟鍔熻兘锛氬瓨鍌ㄥ湡鍦板竷灞 + */ + public void addLandLayout(List list); + + /* + 鍙傛暟璇存槑锛歭ist,LandLayout瀵硅薄鐨勯泦鍚堬紝琛ㄧず鎵鏈夌殑鍦熷湴甯冨眬瀵硅薄 + 杩斿洖鍊硷細 鏃犺繑鍥炲 + 鍑芥暟鍔熻兘锛氫慨鏀瑰湡鍦板竷灞 + */ + public void updateLandLayout(List list); + + /* + 鍙傛暟璇存槑锛歩d,鏁村瀷锛岃〃绀哄湡鍦板竷灞璁板綍鐨勭紪鍙 + 杩斿洖鍊硷細 鏃犺繑鍥炲 + 鍑芥暟鍔熻兘锛氬垹闄ゅ湡鍦 + */ + public void deleteLandLayout(int id); + + + + +} + +//鍦熷湴浣跨敤淇℃伅琛ㄧ殑涓氬姟閫昏緫灞傛帴鍙 + +public interface LandRentService { + + /* + 鍙傛暟璇存槑锛歭r锛屼负鍦熷湴浣跨敤LandRentInfo瀵硅薄瀹炰緥 + 杩斿洖鍊硷細 鏃犺繑鍥炲 + 鍑芥暟鍔熻兘锛1.鍚戝湡鍦颁娇鐢ㄨ〃涓彃鍏ヤ竴鏉℃柊绾綍 + 2.灏嗗湡鍦扮紪鍙蜂负 lr.getLid()涓旂姸鎬佷负閿佸畾鐨勫湡鍦扮敵璇疯褰曠殑鐘舵佸兼敼涓虹敵璇峰け璐 + 灏嗙敵璇风紪鍙蜂负lr.getLa_id()鐨勫湡鍦扮敵璇疯褰曠殑鐘舵佸兼敼涓虹敵璇锋垚鍔 + */ + public void addLandRent(LandRentInfo lr); + + /* + 鍙傛暟璇存槑锛歶serId,瀛楃涓插瀷锛屼负鍦熷湴鐨勪娇鐢ㄤ汉缂栧彿 + 杩斿洖鍊硷細 List锛屼负鍦熷湴浣跨敤瀵硅薄LandRentInfo鐨勯泦鍚 + 鍑芥暟鍔熻兘锛氭煡璇㈢敤鎴蜂釜浜虹殑鍦熷湴浣跨敤鎯呭喌 + */ + public List getUserRentInfos(String userId); + + /* + 鍙傛暟璇存槑锛氭棤鍙 + 杩斿洖鍊硷細 List锛屼负鍦熷湴浣跨敤瀵硅薄LandRentInfo鐨勯泦鍚 + 鍑芥暟鍔熻兘锛氭煡璇㈡墍鏈夊湡鍦颁娇鐢ㄦ儏鍐 + */ + public List getLandRentInfos(); +} + + +Dao灞: + +//鍩哄湴淇℃伅琛ㄧ殑鏁版嵁搴撹繛鎺ュ眰鎺ュ彛 + +public interface BaseInfoDao { + + /* + 鍙傛暟璇存槑锛歜aseType,鏁村瀷锛岃〃绀哄熀鍦扮被鍨 + 杩斿洖鍊硷細 List,涓哄熀鍦颁俊鎭疊aseInfo瀵硅薄鐨勯泦鍚 + 鍑芥暟鍔熻兘锛氭牴鎹熀鍦扮被鍨嬭幏寰楃浉搴斿熀鍦扮殑淇℃伅 + */ + public List getBaseInfos(int baseType); + +} + +//鍦熷湴甯冨眬绠$悊琛ㄧ殑鏁版嵁搴撹繛鎺ュ眰鎺ュ彛 + +public interface LandInfoDao { + + /* + 鍙傛暟璇存槑锛歴pareValue,鏁村瀷 + 杩斿洖鍊硷細 鏃犺繑鍥炲 + 鍑芥暟鍔熻兘锛氭洿鏀瑰湡鍦扮┖闂插 + */ + public void updateSpareValue(int spareValue); + + /* + 鍙傛暟璇存槑锛歭id,鏁村瀷锛岃〃绀哄湡鍦扮紪鍙 + 杩斿洖鍊硷細 LandInfo,涓哄湡鍦扮鐞哃andInfo瀵硅薄 + 鍑芥暟鍔熻兘锛氭牴鎹湡鍦扮紪鍙疯幏鍙栬鍦熷湴甯冨眬绠$悊淇℃伅 + */ + public LandInfo getLandInfo(int lid); + + /* + 鍙傛暟璇存槑锛歜id,鏁村瀷锛岃〃绀哄熀鍦扮紪鍙 + 杩斿洖鍊硷細 List,涓哄湡鍦扮鐞哃andInfo瀵硅薄鐨勯泦鍚 + 鍑芥暟鍔熻兘锛氭牴鎹熀鍦扮紪鍙疯幏寰楄鍩哄湴涓殑鎵鏈夊湡鍦板竷灞绠$悊淇℃伅 + */ + public List getLandInfos(int bid); +} + +//鍦熷湴甯冨眬绠$悊琛ㄧ殑鏁版嵁搴撹繛鎺ュ眰鎺ュ彛 + +public interface LandLayoutDao { + + /* + 鍙傛暟璇存槑锛歭ayout,涓哄湡鍦板竷灞LandLayout瀵硅薄 + 杩斿洖鍊硷細 鏃犺繑鍥炲 + 鍑芥暟鍔熻兘锛氬悜鍦熷湴甯冨眬绠$悊琛ㄤ腑鎻掑叆涓鏉¤褰 + */ + public void doLandLayout(LandLayout layout); + + /* + 鍙傛暟璇存槑锛歭ayout,涓哄湡鍦板竷灞LandLayout瀵硅薄 + 杩斿洖鍊硷細 鏃犺繑鍥炲 + 鍑芥暟鍔熻兘锛氭洿鏂板湡鍦板竷灞绠$悊琛ㄤ腑鐨勪竴鏉¤褰 + */ + public void updateLandLayout(LandLayout layout); + + /* + 鍙傛暟璇存槑锛歩d,鏁村瀷锛岃〃绀哄湡鍦板竷灞璁板綍鐨勭紪鍙 + 杩斿洖鍊硷細 鏃犺繑鍥炲 + 鍑芥暟鍔熻兘锛氬垹闄ゅ湡鍦板竷灞绠$悊琛ㄤ腑鐨勪竴鏉¤褰 + */ + public void delLandLayout(int id); +} + +//鍦熷湴鐢宠琛ㄧ殑鏁版嵁搴撹繛鎺ュ眰鎺ュ彛 + +public interface LandApplyDao { + + /* + 鍙傛暟璇存槑锛歭a,涓哄湡鍦扮敵璇稬andApply瀵硅薄 + 杩斿洖鍊硷細 鏃犺繑鍥炲 + 鍑芥暟鍔熻兘锛氬悜鍦熷湴鐢宠琛ㄤ腑鎻掑叆涓鏉℃柊绾綍 + */ + public void doLandApply(LandApply la); + + /* + 鍙傛暟璇存槑锛歭a_id,鏁村瀷锛屼负鍦熷湴鐢宠璁板綍缂栧彿锛泂tatus锛屾暣鍨嬶紝涓虹敵璇风姸鎬佸 + 杩斿洖鍊硷細 鏃犺繑鍥炲 + 鍑芥暟鍔熻兘锛氭牴鎹湡鍦扮敵璇疯褰曠紪鍙锋敼鍙樿璁板綍鐨勭姸鎬佸间负鎸囧畾鐨剆tatus + */ + public void updateStatus(int la_id,int status); + + /* + 鍙傛暟璇存槑锛歭id,鏁村瀷锛屼负鍦熷湴缂栧彿锛沠ormerStatus,鏁村瀷锛屼负鍘熷厛鐘舵佸硷紱status锛屾暣鍨嬶紝涓虹幇鐢宠鐘舵佸 + 杩斿洖鍊硷細 鏃犺繑鍥炲 + 鍑芥暟鍔熻兘锛氬皢鍦熷湴缂栧彿涓簂id涓旂姸鎬佸间负formerStatus鐨勮褰曠殑鐘舵佸兼敼涓簊tatus + */ + public void updateStatus(int lid,int formerStatus,int status); + + /* + 鍙傛暟璇存槑锛歛pplicantId,瀛楃涓插瀷锛屼负鐢宠浜虹殑Id + 杩斿洖鍊硷細 List,涓哄湡鍦扮敵璇稬andApply瀵硅薄鐨勯泦鍚 + 鍑芥暟鍔熻兘锛氭牴鎹產pplicantId(鐢宠浜篒d)鏌ヨ鍦熷湴鐢宠璁板綍 + */ + public List getUserApplys(String applicantId); + + /* + 鍙傛暟璇存槑锛氭棤鍙 + 杩斿洖鍊硷細 List,涓哄湡鍦扮敵璇稬andApply瀵硅薄鐨勯泦鍚 + 鍑芥暟鍔熻兘锛氭煡璇㈡墍鏈夊湡鍦扮敵璇疯褰 + */ + public List getLandApplys(); + + + /* + 鍙傛暟璇存槑锛歭a_id,鏁村瀷锛屼负鐢宠璁板綍缂栧彿锛沴id,鏁村瀷锛屼负鍦熷湴缂栧彿 + 杩斿洖鍊硷細 鏃犺繑鍥炲 + 鍑芥暟鍔熻兘锛 灏嗙敵璇峰湡鍦扮紪鍙蜂负lid浣嗕笉涓烘la_id鐨勮褰曟嫆缁(鍗崇敵璇峰け璐) + */ + public void updateOthers(int la_id,int lid); + +} + +//鍦熷湴浣跨敤琛ㄧ殑鏁版嵁搴撹繛鎺ュ眰鎺ュ彛 + +public interface LandRentInfoDao { + + /* + 鍙傛暟璇存槑锛歭r锛屼负鍦熷湴浣跨敤LandRentInfo瀵硅薄瀹炰緥 + 杩斿洖鍊硷細 鏃犺繑鍥炲 + 鍑芥暟鍔熻兘锛氬悜鍦熷湴浣跨敤琛ㄤ腑鎻掑叆涓鏉℃柊绾綍 + */ + public void doLandRentInfo(LandRentInfo lr); + + /* + 鍙傛暟璇存槑锛歶serId,瀛楃涓插瀷锛屼负鍦熷湴鐨勪娇鐢ㄤ汉缂栧彿 + 杩斿洖鍊硷細 List锛屼负鍦熷湴浣跨敤瀵硅薄LandRentInfo鐨勯泦鍚 + 鍑芥暟鍔熻兘锛氭牴鎹湡鍦颁娇鐢ㄤ汉缂栧彿鏌ヨ鍦熷湴浣跨敤璁板綍 + */ + public List getLandRentInfo(String userId); + + /* + 鍙傛暟璇存槑锛氭棤鍙 + 杩斿洖鍊硷細 List锛屼负鍦熷湴浣跨敤瀵硅薄LandRentInfo鐨勯泦鍚 + 鍑芥暟鍔熻兘锛氳幏鍙栨墍鏈夊湡鍦颁娇鐢ㄦ儏鍐 + */ + public List getLandRentInfos(); +} + + + + + + + + diff --git "a/\351\234\200\346\261\202/\345\237\272\345\234\260\345\234\237\345\234\260\347\256\241\347\220\206\347\263\273\347\273\237\351\234\200\346\261\202\345\210\206\346\236\220.md" "b/\351\234\200\346\261\202/\345\237\272\345\234\260\345\234\237\345\234\260\347\256\241\347\220\206\347\263\273\347\273\237\351\234\200\346\261\202\345\210\206\346\236\220.md" index 4abe9f2..b03fe1b 100644 --- "a/\351\234\200\346\261\202/\345\237\272\345\234\260\345\234\237\345\234\260\347\256\241\347\220\206\347\263\273\347\273\237\351\234\200\346\261\202\345\210\206\346\236\220.md" +++ "b/\351\234\200\346\261\202/\345\237\272\345\234\260\345\234\237\345\234\260\347\256\241\347\220\206\347\263\273\347\273\237\351\234\200\346\261\202\345\210\206\346\236\220.md" @@ -9,10 +9,10 @@ #### 1锛 缂栧啓鐩殑 1锛変娇鍩哄湴绉戠鐞嗕汉鍛樺厖鍒嗕簡瑙e埌鏁欏瀹炰範鍩哄湴绠$悊绯荤粺闇姹傜殑鍏蜂綋璁捐鏂规銆 2锛変负杞欢璁捐浜哄憳鏄庣‘鏁欏瀹炰範鍩哄湴绠$悊绯荤粺鐨勯渶姹傘佸畨鎺掗」鐩鍒掍笌杩涘害銆佺粍缁囩郴缁熺殑寮鍙戜笌娴嬭瘯銆 -#### 2锛 椤圭洰鑳屾櫙 - 椤圭洰鐨勫鎵樺崟浣嶃锛 婀栧崡鍐滀笟澶у鍩哄湴绉 - 寮銆鍙戙鍗曘浣嶃锛 婀栧崡鍐滀笟澶у鎬濆崥璇惧洟闃 - 涓庡叾浠栫郴缁熺殑鍏崇郴锛 璇ユ暀瀛﹀疄涔犲熀鍦扮鐞嗙郴缁熷皢鏋惰鍒版箹鍗楀啘涓氬ぇ瀛︽暀鍔″绯荤粺涓 +#### 2锛 椤圭洰鑳屾櫙 +椤圭洰鐨勫鎵樺崟浣嶃锛 婀栧崡鍐滀笟澶у鍩哄湴绉 +寮銆鍙戙鍗曘浣嶃锛 婀栧崡鍐滀笟澶у鎬濆崥璇惧洟闃 +涓庡叾浠栫郴缁熺殑鍏崇郴锛 璇ユ暀瀛﹀疄涔犲熀鍦扮鐞嗙郴缁熷皢鏋惰鍒版箹鍗楀啘涓氬ぇ瀛︽暀鍔″绯荤粺涓 #### 3锛 瀹氫箟锛堝垪鍑烘枃妗d腑鐢ㄥ埌鐨勪笓闂ㄦ湳璇畾涔夊拰缂╁啓璇嶇殑鍘熸枃銆備互琛ㄦ牸褰㈠紡锛 #### 4锛 浜や簰娴佺▼ ![](images/1.jpg) @@ -26,98 +26,98 @@ 鍥犳湰绯荤粺閲囩敤HTML5鎶鏈紝鎵浠ヤ笉鏀寔IE8浠ヤ笅鐨勬祻瑙堝櫒銆 ### 涓夛紟鍔熻兘闇姹 #### 1锛庡姛鑳界粨鏋 -銆銆銆銆鍥1锛氱郴缁熸讳綋鏋舵瀯鍥 +銆銆銆銆鍥1.1锛氱郴缁熸讳綋鏋舵瀯鍥 ![](images/2.jpg) -銆銆銆銆鍥2锛 鍔熻兘妯″潡1 鈥斺 鍩哄湴鍦熷湴绠$悊 +銆銆銆銆鍥1.2锛 鍔熻兘妯″潡1 鈥斺 鍩哄湴鍦熷湴绠$悊 ![](images/3.jpg) -銆銆銆銆鍥3锛氬姛鑳芥ā鍧2 鈥斺 鍩哄湴杩愯绠$悊 +銆銆銆銆鍥1.3锛氬姛鑳芥ā鍧2 鈥斺 鍩哄湴杩愯绠$悊 ![](images/4.jpg) -銆銆銆銆鍥4锛氬姛鑳芥ā鍧3 鈥斺 鍩哄湴瀹炰範绠$悊 +銆銆銆銆鍥1.4锛氬姛鑳芥ā鍧3 鈥斺 鍩哄湴瀹炰範绠$悊 ![](images/5.jpg) #### 2锛庡姛鑳芥弿杩 -銆銆绯荤粺鎬讳綋鏋舵瀯锛堣鍥1锛夊垎涓哄洓灞傦紝鍖呮嫭IT鍩虹璁炬柦銆佹暟鎹祫婧愩佹妧鏈敮鎾戝钩鍙般佺郴缁熷姛鑳介泦鎴愩侷T鍩虹璁炬柦灞傜殑瑕佹眰骞朵笉楂橈紝涓昏鏄疻EB鏈嶅姟鍣ㄥ拰鏁版嵁搴撴湇鍔″櫒锛屾暟鎹祫婧愬眰浠ユ暟鎹簱鎿嶄綔涓轰富锛岃屾妧鏈敮鎾戝钩鍙颁互鍙鍖栨妧鏈拰瀛樺偍鎶鏈负鏍稿績锛屽叾涓垜浠富瑕佸仛鐨勶紝涔熸槸鏈閲嶈鐨勪竴灞傛槸绯荤粺鍔熻兘闆嗘垚灞傦紝瀹冨垎涓哄熀鍦板湡鍦扮鐞嗐佸熀鍦拌繍琛岀鐞嗐佸熀鍦板疄涔犵鐞嗕笁涓姛鑳芥ā鍧楋紝绯荤粺鐢卞熀鍦拌礋璐d汉銆佸熀鍦扮鍜岃秴绾х鐞嗗憳鍏ㄧ▼鍙備笌锛岃嚧鍔涗簬涓烘暀甯堢敤鎴锋湇鍔° - 銆銆绗竴涓姛鑳芥ā鍧楁槸鍩哄湴鍦熷湴绠$悊锛堣鍥2锛夛紝瀹冨張鍒嗕负鍦熷湴璁剧疆銆佸湡鍦拌鎯呫佸湡鍦扮敵璇疯繖涓変釜瀛愬姛鑳斤紝鑰屾垜浠殑涓澶т寒鐐瑰氨鏄鍦熷湴鎺掑竷鑷畾涔夎繘琛屽彲瑙嗗寲鐨勫竷灞锛堣鍥2.1锛夛紝鍏朵腑姣忎竴鍧楃豢鑹查儴鍒嗗氨鏄竴鍧楃敯鍦帮紝绠$悊鍛樺彲鏍规嵁鍦熷湴鐨勫疄闄呮儏鍐碉紝瀵圭豢鑹查儴鍒嗙殑闈㈢Н鍜岀浉瀵逛綅缃繘琛岃皟鏁村拰璁剧疆锛岀劧鍚庝繚瀛樹笅鏉ワ紝杩欐牱鐨勬柟寮忔瘮璧风函鏂囨湰鐨勮缃樉寰楁洿涓哄弸濂姐傚浜庡湡鍦拌鎯呯殑鍩烘湰鎿嶄綔锛堣鍥2.2锛夊垯鏄湪宸茶嚜瀹氫箟濂界殑鐢板湴涓婅繘琛岀偣鍑伙紝绠$悊鍛樹究鍙湪寮瑰嚭绐楀彛涓繘琛屽湡鍦拌鎯呯殑璁剧疆锛屽苟淇濆瓨锛屽悗鏈熷鎯充慨鏀癸紝鍦ㄥ脊鍑虹獥鍙d腑鐐瑰嚮淇敼鎸夐挳鍗冲彲銆傝岀敤鎴疯繕鏈変竴涓洿涓哄疄鏃剁殑璇︽儏鏌ョ湅鏂瑰紡锛堣鍥2.3锛夛紝鎴戜滑灏嗕細鍦ㄦ瘡涓鍧楃敯鍦颁笂绔栦竴鍧楄创鏈夊寘鍚浉搴旂敯鍦颁俊鎭殑浜岀淮鐮侊紝鐢ㄦ埛鍙疄鍦版壂鎻忥紝鏌ョ湅鑷繁鎯宠鐨勪俊鎭傚湡鍦扮敵璇峰瓙鍔熻兘锛堣鍥2.6锛夛紝鍏锋湁涓涓爣鍑嗙殑娴佺▼锛岄鍏堟暀甯堢敤鎴峰~鍐欐暀瀛︾鐮旂敤鍦板崗璁拰鍦熷湴鏈夊伩浣跨敤鍗忚锛岀劧鍚庢彁浜ゅ湡鍦扮敵璇风粰绠$悊鍛橈紝杩欐椂绯荤粺浼氫粠鏃堕棿銆佺敤鎴峰拰璧勬簮杩欎笁涓淮搴﹁繘琛屽啿绐佹娴嬶紝鍐嶄氦鐢辩鐞嗗憳瀹℃牳锛屽緟瀹℃牳鎴愬姛锛岀鐞嗗憳灏嗙粨鏋滃弽棣堢粰鏁欏笀鐢ㄦ埛锛屾暀甯堢敤鎴峰氨鍙湪绾夸笅杩涜缂磋垂锛岀鐞嗗憳鍐嶅皢缂磋垂淇℃伅鐧昏鍏ュ簱锛堣鍥2.4锛夈傜郴缁熷悗鏈熷皢浼氬鍦熷湴绉熻祦淇℃伅杩涜鍒嗘瀽缁熻锛屽弽棣堢粰绠$悊鍛樹竴寮犺褰曠潃姣忔湀绉熻祦浜烘暟鍙婂闀跨巼鐨勬姌绾垮浘锛堣鍥2.5锛夛紝浠ヤ究绠$悊鍛樹箣鍚庡绉熻祦璁″垝杩涜璋冩暣銆 - 銆銆绗簩涓姛鑳芥ā鍧楁槸鍩哄湴杩愯绠$悊锛堣鍥3锛夛紝瀹冨垎涓轰汉鍛樼鐞嗐佸熀鍦扮鐞嗗拰缁存姢绠$悊涓変釜瀛愬姛鑳斤紝浜哄憳绠$悊鎸夌収浜哄憳绫诲瀷鍙堝垎涓虹鐞嗕汉鍛樿祫浜х櫥璁帮紙瑙佸浘3.1锛夊拰涓存椂宸ヤ俊鎭鐞嗭紙瑙佸浘3.2锛夛紝鍩哄湴绠$悊瀛愬姛鑳藉垯鍙寘鍚24涓牎鍐呭熀鍦板拰167涓牎澶栧熀鍦帮紝绯荤粺鍚屾牱浼氬鍏跺熀鍦颁俊鎭鐞嗭紙瑙佸浘3.3锛夎繘琛屾暟鎹殑缁熻鍒嗘瀽锛岀敓鎴愬闄㈠熀鍦伴潰绉紙瑙佸浘3.5锛夊拰鍩哄湴鎵挎媴瀹炰範瀛︾敓浜烘暟锛堣鍥3.6锛夌粺璁″浘锛屼究浜庣鐞嗗憳瀵瑰熀鍦板悗鏈熷喅绛栥傝繕鍙偣鍑绘煡鐪嬭鎯咃紝杩涗竴姝ユ煡鐪嬫墍闈㈠悜鐨勪笓涓氬拰涓娆℃у彲鎵挎媴鐨勫鐢熶汉鏁帮紙瑙佸浘3.4锛夈傜淮鎶ょ鐞嗗姛鑳藉垯鍖呭惈鎶ヤ慨鐨勬祦绋嬪拰缁存姢淇℃伅鐨勭鐞嗭紝鑰屾姤淇殑鍏蜂綋娴佺▼锛堣鍥3.9锛夊垯鏄熀鍦拌礋璐d汉鍦ㄧ嚎鎶ヤ慨淇℃伅锛岀瓑寰呯淮淇畬鎴愶紝绠$悊鍛樺湪绾跨櫥璁扮淮淇俊鎭紝骞惰繘琛屼繚瀛橈紝浠ヤ究浠ュ悗鐨勬煡鐪嬪拰浼樺寲銆傜淮鎶や俊鎭殑绠$悊鍒欏~鍐欏湪鐩稿簲鐨勭淮鎶や俊鎭綉椤佃〃鏍间笂锛堣鍥3.7锛夛紝绯荤粺浼氭牴鎹琛ㄦ牸缁熻鍒嗘瀽鍑虹淮鎶ゆ儏鍐佃蛋鍔垮浘锛堣鍥3.8锛夛紝渚夸簬绠$悊鍛樼殑鍐崇瓥銆 - 銆銆 绗笁涓姛鑳芥ā鍧楁槸鍩哄湴瀹炰範绠$悊锛堣鍥4锛夛紝瀹冨垎涓哄疄涔犺鍒掔敵璇峰拰瀹炰範璁″垝绠$悊涓ら儴鍒嗭紝鍦ㄥ疄涔犺鍒掔敵璇烽儴鍒嗭紙瑙佸浘4.3锛夛紝鏁欏笀鍙湪鍦熷湴鍩哄湴銆24涓牎鍐呭熀鍦板拰167涓牎澶栧熀鍦颁腑鎷╁叾涓锛岀偣鍑荤敯鍦板彸涓婅鐨勭敵璇峰疄涔犳寜閽紙瑙佸浘4.1锛夎繘琛屽疄涔犺鍒掔殑濉啓鍜屾彁浜わ紝绯荤粺杩涜鍐茬獊妫娴嬶紝鍐嶄氦鐢辩鐞嗗憳瀹℃牳锛屾垚鍔熷悗灏嗙粨鏋滃弽棣堢粰鐢ㄦ埛锛岄偅涔堟暣涓疄涔犺鍒掔殑鐢宠娴佺▼灏卞畬鎴愪簡锛岃屾暣涓疄涔犱俊鎭~鍐欏埌瀹炰範淇℃伅绠$悊鐨勭綉椤佃〃鏍间笂锛堣鍥4.2锛夈 +銆銆绯荤粺鎬讳綋鏋舵瀯锛堣鍥1.1锛夊垎涓哄洓灞傦紝鍖呮嫭IT鍩虹璁炬柦銆佹暟鎹祫婧愩佹妧鏈敮鎾戝钩鍙般佺郴缁熷姛鑳介泦鎴愩侷T鍩虹璁炬柦灞傜殑瑕佹眰骞朵笉楂橈紝涓昏鏄疻EB鏈嶅姟鍣ㄥ拰鏁版嵁搴撴湇鍔″櫒锛屾暟鎹祫婧愬眰浠ユ暟鎹簱鎿嶄綔涓轰富锛岃屾妧鏈敮鎾戝钩鍙颁互鍙鍖栨妧鏈拰瀛樺偍鎶鏈负鏍稿績锛屽叾涓垜浠富瑕佸仛鐨勶紝涔熸槸鏈閲嶈鐨勪竴灞傛槸绯荤粺鍔熻兘闆嗘垚灞傦紝瀹冨垎涓哄熀鍦板湡鍦扮鐞嗐佸熀鍦拌繍琛岀鐞嗐佸熀鍦板疄涔犵鐞嗕笁涓姛鑳芥ā鍧楋紝绯荤粺鐢卞熀鍦拌礋璐d汉銆佸熀鍦扮鍜岃秴绾х鐞嗗憳鍏ㄧ▼鍙備笌锛岃嚧鍔涗簬涓烘暀甯堢敤鎴锋湇鍔° +銆銆绗竴涓姛鑳芥ā鍧楁槸鍩哄湴鍦熷湴绠$悊锛堣鍥1.2锛夛紝瀹冨張鍒嗕负鍦熷湴璁剧疆銆佸湡鍦拌鎯呫佸湡鍦扮敵璇疯繖涓変釜瀛愬姛鑳斤紝鑰屾垜浠殑涓澶т寒鐐瑰氨鏄鍦熷湴鎺掑竷鑷畾涔夎繘琛屽彲瑙嗗寲鐨勫竷灞锛堣鍥3.1锛夛紝鍏朵腑姣忎竴鍧楃豢鑹查儴鍒嗗氨鏄竴鍧楃敯鍦帮紝绠$悊鍛樺彲鏍规嵁鍦熷湴鐨勫疄闄呮儏鍐碉紝瀵圭豢鑹查儴鍒嗙殑闈㈢Н鍜岀浉瀵逛綅缃繘琛岃皟鏁村拰璁剧疆锛岀劧鍚庝繚瀛樹笅鏉ワ紝杩欐牱鐨勬柟寮忔瘮璧风函鏂囨湰鐨勮缃樉寰楁洿涓哄弸濂姐傚浜庡湡鍦拌鎯呯殑鍩烘湰鎿嶄綔锛堣鍥3.2锛夊垯鏄湪宸茶嚜瀹氫箟濂界殑鐢板湴涓婅繘琛岀偣鍑伙紝绠$悊鍛樹究鍙湪寮瑰嚭绐楀彛涓繘琛屽湡鍦拌鎯呯殑璁剧疆锛屽苟淇濆瓨锛屽悗鏈熷鎯充慨鏀癸紝鍦ㄥ脊鍑虹獥鍙d腑鐐瑰嚮淇敼鎸夐挳鍗冲彲銆傝岀敤鎴疯繕鏈変竴涓洿涓哄疄鏃剁殑璇︽儏鏌ョ湅鏂瑰紡锛堣鍥3.3锛夛紝鎴戜滑灏嗕細鍦ㄦ瘡涓鍧楃敯鍦颁笂绔栦竴鍧楄创鏈夊寘鍚浉搴旂敯鍦颁俊鎭殑浜岀淮鐮侊紝鐢ㄦ埛鍙疄鍦版壂鎻忥紝鏌ョ湅鑷繁鎯宠鐨勪俊鎭傚湡鍦扮敵璇峰瓙鍔熻兘锛堣鍥5.1锛夛紝鍏锋湁涓涓爣鍑嗙殑娴佺▼锛岄鍏堟暀甯堢敤鎴峰~鍐欐暀瀛︾鐮旂敤鍦板崗璁拰鍦熷湴鏈夊伩浣跨敤鍗忚锛岀劧鍚庢彁浜ゅ湡鍦扮敵璇风粰绠$悊鍛橈紝杩欐椂绯荤粺浼氫粠鏃堕棿銆佺敤鎴峰拰璧勬簮杩欎笁涓淮搴﹁繘琛屽啿绐佹娴嬶紝鍐嶄氦鐢辩鐞嗗憳瀹℃牳锛屽緟瀹℃牳鎴愬姛锛岀鐞嗗憳灏嗙粨鏋滃弽棣堢粰鏁欏笀鐢ㄦ埛锛屾暀甯堢敤鎴峰氨鍙湪绾夸笅杩涜缂磋垂锛岀鐞嗗憳鍐嶅皢缂磋垂淇℃伅鐧昏鍏ュ簱銆傜郴缁熷悗鏈熷皢浼氬鍦熷湴绉熻祦淇℃伅杩涜鍒嗘瀽缁熻锛屽弽棣堢粰绠$悊鍛樹竴寮犺褰曠潃姣忔湀绉熻祦浜烘暟鍙婂闀跨巼鐨勬姌绾垮浘锛堣鍥3.5锛夛紝浠ヤ究绠$悊鍛樹箣鍚庡绉熻祦璁″垝杩涜璋冩暣銆 +銆銆绗簩涓姛鑳芥ā鍧楁槸鍩哄湴杩愯绠$悊锛堣鍥1.3锛夛紝瀹冨垎涓轰汉鍛樼鐞嗐佸熀鍦扮鐞嗗拰缁存姢绠$悊涓変釜瀛愬姛鑳斤紝浜哄憳绠$悊鎸夌収浜哄憳绫诲瀷鍙堝垎涓虹鐞嗕汉鍛樿祫浜х櫥璁帮紙瑙佸浘3.6锛夊拰涓存椂宸ヤ俊鎭鐞嗭紙瑙佸浘3.7锛夛紝鍩哄湴绠$悊瀛愬姛鑳藉垯鍙寘鍚24涓牎鍐呭熀鍦板拰167涓牎澶栧熀鍦帮紝绯荤粺鍚屾牱浼氬鍏跺熀鍦颁俊鎭鐞嗭紙瑙佸浘3.8锛夎繘琛屾暟鎹殑缁熻鍒嗘瀽锛岀敓鎴愬闄㈠熀鍦伴潰绉紙瑙佸浘3.10锛夊拰鍩哄湴鎵挎媴瀹炰範瀛︾敓浜烘暟锛堣鍥3.11锛夌粺璁″浘锛屼究浜庣鐞嗗憳瀵瑰熀鍦板悗鏈熷喅绛栥傝繕鍙偣鍑绘煡鐪嬭鎯咃紝杩涗竴姝ユ煡鐪嬫墍闈㈠悜鐨勪笓涓氬拰涓娆℃у彲鎵挎媴鐨勫鐢熶汉鏁般傜淮鎶ょ鐞嗗姛鑳藉垯鍖呭惈鎶ヤ慨鐨勬祦绋嬪拰缁存姢淇℃伅鐨勭鐞嗭紝鑰屾姤淇殑鍏蜂綋娴佺▼锛堣鍥5.2锛夊垯鏄熀鍦拌礋璐d汉鍦ㄧ嚎鎶ヤ慨淇℃伅锛岀瓑寰呯淮淇畬鎴愶紝绠$悊鍛樺湪绾跨櫥璁扮淮淇俊鎭紝骞惰繘琛屼繚瀛橈紝浠ヤ究浠ュ悗鐨勬煡鐪嬪拰浼樺寲銆傜淮鎶や俊鎭殑绠$悊鍒欏~鍐欏湪鐩稿簲鐨勭淮鎶や俊鎭綉椤佃〃鏍间笂锛堣鍥3.12锛夛紝绯荤粺浼氭牴鎹琛ㄦ牸缁熻鍒嗘瀽鍑虹淮鎶ゆ儏鍐佃蛋鍔垮浘锛堣鍥3.13锛夛紝渚夸簬绠$悊鍛樼殑鍐崇瓥銆 +銆銆绗笁涓姛鑳芥ā鍧楁槸鍩哄湴瀹炰範绠$悊锛堣鍥1.4锛夛紝瀹冨垎涓哄疄涔犺鍒掔敵璇峰拰瀹炰範璁″垝绠$悊涓ら儴鍒嗭紝鍦ㄥ疄涔犺鍒掔敵璇烽儴鍒嗭紙瑙佸浘5.3锛夛紝鏁欏笀鍙湪鍦熷湴鍩哄湴銆24涓牎鍐呭熀鍦板拰167涓牎澶栧熀鍦颁腑鎷╁叾涓锛岀偣鍑荤敯鍦板彸涓婅鐨勭敵璇峰疄涔犳寜閽紙瑙佸浘3.14锛夎繘琛屽疄涔犺鍒掔殑濉啓鍜屾彁浜わ紝绯荤粺杩涜鍐茬獊妫娴嬶紝鍐嶄氦鐢辩鐞嗗憳瀹℃牳锛屾垚鍔熷悗灏嗙粨鏋滃弽棣堢粰鐢ㄦ埛锛岄偅涔堟暣涓疄涔犺鍒掔殑鐢宠娴佺▼灏卞畬鎴愪簡锛岃屾暣涓疄涔犱俊鎭~鍐欏埌瀹炰範淇℃伅绠$悊鐨勭綉椤佃〃鏍间笂锛堣鍥3.15锛夈 #### 锛. 鐢ㄦ埛鐣岄潰 -銆銆 鍥2.1锛氬湡鍦版帓甯冭嚜瀹氫箟缃戦〉鍘熷瀷 +銆銆 鍥3.1锛氬湡鍦版帓甯冭嚜瀹氫箟缃戦〉鍘熷瀷 ![](images/6.jpg) -銆銆鍥2.2锛氬湡鍦拌鎯呭~鍐欑晫闈紙璁剧疆+鏌ョ湅+淇敼锛 +銆銆鍥3.2锛氬湡鍦拌鎯呭~鍐欑晫闈紙璁剧疆+鏌ョ湅+淇敼锛 ![](images/7.jpg) -銆銆鍥2.3锛氬湡鍦拌鎯呮煡鐪嬧斺旀暀甯堢敤鎴峰疄鍦颁簩缁寸爜鎵弿 +銆銆鍥3.3锛氬湡鍦拌鎯呮煡鐪嬧斺旀暀甯堢敤鎴峰疄鍦颁簩缁寸爜鎵弿 ![](images/8.jpg) -銆銆鍥2.4锛氬湡鍦扮璧佷俊鎭櫥璁板弬鑰冪綉椤 +銆銆鍥3.4锛氬湡鍦扮璧佷俊鎭櫥璁板弬鑰冪綉椤 ![](images/9.jpg) -銆銆鍥2.5锛氬湡鍦扮璧佷俊鎭秼鍔垮浘 +銆銆鍥3.5锛氬湡鍦扮璧佷俊鎭秼鍔垮浘 ![](images/10.jpg) -銆銆鍥3.1锛氱鐞嗕汉鍛樿祫浜х櫥璁扮晫闈 +銆銆鍥3.6锛氱鐞嗕汉鍛樿祫浜х櫥璁扮晫闈 ![](images/11.jpg) -銆銆鍥3.2锛氫复鏃跺伐淇℃伅绠$悊鐣岄潰 +銆銆鍥3.7锛氫复鏃跺伐淇℃伅绠$悊鐣岄潰 ![](images/12.jpg) -銆銆鍥3.3锛氬熀鍦颁俊鎭鐞嗙晫闈 +銆銆鍥3.8锛氬熀鍦颁俊鎭鐞嗙晫闈 ![](images/13.jpg) -銆銆鍥3.4锛氬熀鍦拌鎯呬俊鎭鐞嗙晫闈 +銆銆鍥3.9锛氬熀鍦拌鎯呬俊鎭鐞嗙晫闈 ![](images/14.jpg) -銆銆鍥3.5锛氬闄㈠熀鍦伴潰绉粺璁″浘 +銆銆鍥3.10锛氬闄㈠熀鍦伴潰绉粺璁″浘 ![](images/15.jpg) -銆銆鍥3.6锛氬熀鍦版壙鎷呭疄涔犲鐢熶汉鏁扮粺璁″浘 +銆銆鍥3.11锛氬熀鍦版壙鎷呭疄涔犲鐢熶汉鏁扮粺璁″浘 ![](images/16.jpg) -銆銆鍥3.7锛氱淮鎶や俊鎭~鍐欑晫闈 +銆銆鍥3.12锛氱淮鎶や俊鎭~鍐欑晫闈 ![](images/17.jpg) -銆銆鍥3.8锛氱淮鎶ゆ儏鍐佃蛋鍔垮浘 +銆銆鍥3.13锛氱淮鎶ゆ儏鍐佃蛋鍔垮浘 ![](images/18.jpg) -銆銆鍥4.1锛氱敤鎴峰疄涔犵敵璇风晫闈 +銆銆鍥3.14锛氱敤鎴峰疄涔犵敵璇风晫闈 ![](images/19.jpg) -銆銆 鍥4.2锛氬疄涔犱俊鎭鐞嗙晫闈 +銆銆鍥3.15锛氬疄涔犱俊鎭鐞嗙晫闈 ![](images/20.jpg) ### 浜旓紟涓氬姟娴佺▼ -銆銆鍥2.6锛氬湡鍦扮璧佺敵璇锋祦绋嬪浘 +銆銆鍥5.1锛氬湡鍦扮璧佺敵璇锋祦绋嬪浘 ![](images/21.jpg) -銆銆鍥3.9锛氭姤淇祦绋嬪浘 +銆銆鍥5.2锛氭姤淇祦绋嬪浘 ![](images/22.jpg) -銆銆鍥4.3锛氬疄涔犺鍒掔敵璇锋祦绋嬪浘 +銆銆鍥5.3锛氬疄涔犺鍒掔敵璇锋祦绋嬪浘 ![](images/23.jpg) - \ No newline at end of file +