From fe0c71a4ef2e4d4d649bf82e352b3f72e3725a6f Mon Sep 17 00:00:00 2001 From: ly <1649263696@qq.com> Date: Sat, 3 Oct 2020 20:05:57 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4\347\250\213\345\272\217\345\221\230.doc" | Bin 39936 -> 47616 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git "a/\351\241\271\347\233\256\347\253\213\351\241\271\350\257\264\346\230\216\344\271\246\342\200\224\347\250\213\345\272\217\345\221\230.doc" "b/\351\241\271\347\233\256\347\253\213\351\241\271\350\257\264\346\230\216\344\271\246\342\200\224\347\250\213\345\272\217\345\221\230.doc" index 662d199497870ec1f84220b40ea64cabc4a3c00b..63f92e1da383c794392cdad0714dfc943e0e8a50 100644 GIT binary patch literal 47616 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 literal 39936 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 Date: Sat, 3 Oct 2020 20:20:58 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4\347\250\213\345\272\217\345\221\230.doc" | Bin 47616 -> 39936 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git "a/\351\241\271\347\233\256\347\253\213\351\241\271\350\257\264\346\230\216\344\271\246\342\200\224\347\250\213\345\272\217\345\221\230.doc" "b/\351\241\271\347\233\256\347\253\213\351\241\271\350\257\264\346\230\216\344\271\246\342\200\224\347\250\213\345\272\217\345\221\230.doc" index 63f92e1da383c794392cdad0714dfc943e0e8a50..662d199497870ec1f84220b40ea64cabc4a3c00b 100644 GIT binary patch literal 39936 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 -- Gitee From 60c0143391035b6dc03d0601799103344d5bde12 Mon Sep 17 00:00:00 2001 From: yyx <1229119578@qq.com> Date: Sun, 4 Oct 2020 10:25:54 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4\347\250\213\345\272\217\345\221\230.doc" | Bin 39936 -> 40448 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git "a/\351\241\271\347\233\256\347\253\213\351\241\271\350\257\264\346\230\216\344\271\246\342\200\224\347\250\213\345\272\217\345\221\230.doc" "b/\351\241\271\347\233\256\347\253\213\351\241\271\350\257\264\346\230\216\344\271\246\342\200\224\347\250\213\345\272\217\345\221\230.doc" index 662d199497870ec1f84220b40ea64cabc4a3c00b..af09cccd42cc21bcda8fa7b81ffa068a0b86c542 100644 GIT binary patch delta 2760 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 Date: Sun, 4 Oct 2020 10:45:15 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4\347\250\213\345\272\217\345\221\230.doc" | Bin 40448 -> 40448 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git "a/\351\241\271\347\233\256\347\253\213\351\241\271\350\257\264\346\230\216\344\271\246\342\200\224\347\250\213\345\272\217\345\221\230.doc" "b/\351\241\271\347\233\256\347\253\213\351\241\271\350\257\264\346\230\216\344\271\246\342\200\224\347\250\213\345\272\217\345\221\230.doc" index af09cccd42cc21bcda8fa7b81ffa068a0b86c542..936e954dec33c9b0954d50b957abd78cfb332ea1 100644 GIT binary patch delta 3186 zcmc&$4Nz3q6+ZXv0t?E|{;=%A!m@yp=yur^G^k*=f@FgjU;$xjhQC0>L@l5OLkXZE zA|P1y0HyIKl#nz9HO8k&vDA{*8tO=FY-3H@rfX^q<6k3@)Mhf>p1X+F+Sp`*+9C1u%57yz&E5h zPJ_|~aUq{wKL76V!@WP)xvgfyngY8mk+1h;!*-L}9pG1(CQ1Q{X4=?02yKK8f+Idb zcjM9rqdyzy?cVu(O=a1t%#^zVxE=C+!!Z2U0G3krBok5yjzw1O#9z;iys`hK7ijG^ zJn>kj?aqHMums+{UiS^h>;nolWu%VaNU+NP_R*Q)H~06w(BAlL`4g+`4<}Nh7_iWy z`Wl=%ACUio_(nMAlIi1IPZgt_;IK{~=K`ue2?WQ|>Ej$DzH6K_dHOha%K>@`jue~n z-`8k06y&8ZTTC@YDIQGmWwe3s%{N*QWigf45`x2KRZM*R!Kt6W{-ZrRw{Cp0(7x=U zZvY-lQHgtPg$y5kgtmk{fQqn!;7GN}C$4?$eE-bJUk)8P(1XuctyzUdDRXiC@&NHz zs+Hj3~MdByver}{?*)br;4{I~Rus*%^_WQ7$2mBz&L5v-QF3y}`RbRhw_SZk9pU~Ar zshXd?!s@Oyj`Vn}&0L75(`I36=3(5MW2aQFq%)(MP(#>CaM-QN@yX~0_w8+eu4dCy zMc+>QCIuFPVd=?8Gom@`o!cIirw8Efj9>wjm|&+ulpTNT=M0N4cQ-%x%y&xjGm_@J zgL0%7lerVy$dR-xof?!4YJhEoe!>C5A%bJ2#^=+kV;{bMdgK_qE?QJZh6i#j%paY( zVOW`+CVb+M-9NRp|XSka{Esj-p z@z-@V+`HA;crp05r4l3q9EXlvanQlVchy6P&um;x&s3s?}IY5c9s z2>(nUcU=dxG#kAbOQu!UU`g{r-#GUNIg0~e;kdc!K`)#8jR7wXu58TO|}VO_5&lZlel3w>{Rd1ol|3ySB0=luT5Ns0Dxo zoTWE9JG$t4Lr&B->+xGH5h!obVoi&`A&;yX^s+p+_GBl4a5cQdn~aj3 zn%R@<1#baRQ<(F1MB<-YJnIC3l2JzG&aL4A&lHcXO(|N-^v~%*yv7slkmz60Dk=QQ<7(IYP0xtL>Vw)BuW-GRD9vAk|>b< zr@r4^TUT_o4@g+QIMA6T7+xYO4&FG;)ObqzpuRg+x+Z$ogQC4VL8u$)Jf+O*a4BbX bxH|t2WB;j%JL_F8`ombhODoRb^|tUYU0A8- delta 2883 zcmc&$dr(wm6hGhHi>$c7-G|FAF7EOWR5n0e4RxbCg3P)qZ-q2d3Cv0qHANW|Fh&tv zUq=~y6&b0M>8RK85u;!YDWmy_bSAZ-qQ)4-#GKKYrtRECd}Q{|Hq)K?edqhWd(Q8i zd*|HW{mL4+vIg!z0nhi}vFt9+=T|Y6^nia+;d6}vsByS5Gf@Qqg|zY~TS7K~Y$e%1 zvg^qTWNXQ4$kvh7l5HjX#D#$>BepA>gy5@D4Rz<4NcYOV7(^MHdY57xuaZQ+c;467 z=!rpfU@Xq?(MXK}ew@z~9e@tgeZtvXyemZYO79EM%xEJlBq#`AGG!_-0OV2VMY1-s zKE%VJ+AkWb)O9|)h+r?4tBy#&Xhg>BQd3`K((%4_g<=TU@PT2RY^AZr+Zvwl4X`mr zXYTyIwWaa1T{UZ0E?=DgT9#8B;i;@=z^2%jux+pok46XJVr!Um)2d}mgF=i6Z7~Mq zDt8<0J9QA)~M)#(|#@ zZdygGjE&?V2(58($PYDH?)`H4+!x0W?B0PZOXkm>mYMi;F@Og~hsaFBhtb%>+Wdl< zl0d2xAe}I8AS-YHzmPDO@D9QBiYf!FKCo@(Ri9DTD+u55RHZO?JXd9Q;jGZ?eys;5WJxoBN{u2;x{j8l0@T9H9$SV zn`)9B#yrxYS%k+l6;QHhPHqm)bVg%gnt+Xtfp{TJhwml-{B-YXQRxtk8WJ!)p{xDM znUkOH-nwSRlDDR%jvZ~oSF9n}FXjsPZiyVB{fV!XKTb4Zr_&^DcZw9KL)C;F7BS`A@4;ZgL_gCB2SS6;kuPJXu2 zj<2QJv20Qno=EwF13jwJMC3CBZCCqu7n)BV`e@sRRm&E?IW;Bu<#=40G6=1y0=8!c zV_lX>Doe9cCM^mX6qBXXQHE>hn-1@KzjkfKvU#~#6Xl@gDRorZKne*2re{ucB#i8l%x;SZvnOJ`!-R2@Mxc-yfGt^VX3!qi12hm$ z5Ka+J6IuxOI@{q2>GcMNx!FTP^^oY)z)S*Y2FbiHR(&O0I zb)^RIZ&m{5P|US}pYOk|g1bGBvj5Q25c2%=;1ev}d)>tz7JDmS!}aN|`|(t|mA^tw z4uwTQ&y0Enc>Lu%r6qcF7wvr3N4l}(n4IBh0=;yjxJKSCEs>+omGpbarRM@H(zy~X zN4q~P4|&dL>M7J!I+a}LRZH&D1-`5=E?70433zGMH_E{MqsALE&;SqybUKNPFNAMS*Dc0zF1>TrLX$7cw$0WcFrt{#MERwwv6JiF;Qd3B=F z>Y2}ExUbUcJD(*HSs1oej>PinFlN|TZNP@=k?5{6V!)apyj~T?f;U!2nKQsFGC0IC z0F)#%o{NJ;wY`e~qNtptHN*Xf!WQy5#fFlP7DZQ3tO-<)x^BD!Km-eUT#}D4O6o(p z;(Ey}!R4eH5Q2g$9G9+HqO?UbQ;tZ^=t+K zAjjjb;V`z^z(UbcJu)-_c8GV}VH_P9gdk5Q0Tj@d|NG`mHFUnAXFgG7&IKiD4`Dwc zl1?v|3G4kx*ZTl;5Nhc7CjbBBpO^gSk$)Sq=F5UDtF0`Rvf9borFkeS6?DXkpwCbK zEL-$An9G&6t?lH-SU{6En=ue0S+@MvscsK=Gt7)&iU`)d3Z)e&B0%|f|A433O>%G8 zt6){q-p!d@Xf{#FkT030XWnCbqq%mNG`ZH!l{RiZtIgTu)(+U@-uyqzdvzz4g0}t2 I(b1Lv3%BcW9{>OV -- Gitee From 52fe55df5a72495dba597e1d647b38a0fa292a5e Mon Sep 17 00:00:00 2001 From: yyx <1229119578@qq.com> Date: Mon, 26 Oct 2020 10:32:46 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E6=9D=A8=E4=BA=91=E7=86=99=20=E6=B7=98?= =?UTF-8?q?=E5=AE=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "\346\267\230\345\256\235/data/document.js" | 7 + "\346\267\230\345\256\235/data/styles.css" | 99 + .../data.js" | 7 + .../styles.css" | 442 + .../data.js" | 7 + .../styles.css" | 568 + .../data.js" | 7 + .../styles.css" | 513 + .../data.js" | 7 + .../styles.css" | 824 + .../data.js" | 7 + .../styles.css" | 945 ++ .../data.js" | 7 + .../styles.css" | 352 + .../data.js" | 7 + .../styles.css" | 310 + ...\273\264\347\240\201\357\274\201_u100.png" | Bin 0 -> 5570 bytes .../u118.png" | Bin 0 -> 177 bytes .../u125.png" | Bin 0 -> 2360 bytes .../u142.png" | Bin 0 -> 14526 bytes .../u144.png" | Bin 0 -> 1284 bytes ...\260\217\350\234\234\350\234\202_u120.png" | Bin 0 -> 19903 bytes ...\210\267\346\263\250\345\206\214_u116.png" | Bin 0 -> 7309 bytes .../_86_u179.png" | Bin 0 -> 1747 bytes .../u189.png" | Bin 0 -> 145 bytes .../__logo_u31.png" | Bin 0 -> 4754 bytes ...4\273\226\347\231\273\345\275\225_u33.png" | Bin 0 -> 2546 bytes ...5\257\206\347\240\201\345\233\276_u16.png" | Bin 0 -> 428 bytes .../\346\211\253\347\240\201_u28.png" | Bin 0 -> 2249 bytes ...0\277\233\345\273\272\350\256\256_u37.png" | Bin 0 -> 394 bytes .../\350\203\214\346\231\257_u0.jpg" | Bin 0 -> 185077 bytes ...0\264\246\346\210\267\345\233\276_u18.png" | Bin 0 -> 540 bytes .../\351\223\276\346\216\245_u35.png" | Bin 0 -> 128248 bytes .../_86_u57.png" | Bin 0 -> 751 bytes ...5\257\206\347\240\201\345\233\276_u59.png" | Bin 0 -> 528 bytes ...0\264\246\346\210\267\345\233\276_u61.png" | Bin 0 -> 387 bytes .../eye_u156.png" | Bin 0 -> 1471 bytes .../logo_u150.png" | Bin 0 -> 3476 bytes "\346\267\230\345\256\235/index.html" | 503 + .../plugins/debug/styles/debug.css" | 135 + .../plugins/debug/styles/images/reset.svg" | 11 + .../debug/styles/images/reset_hover.svg" | 11 + .../debug/styles/images/variables_hover.png" | Bin 0 -> 883 bytes .../debug/styles/images/variables_hover.svg" | 12 + .../debug/styles/images/variables_off.png" | Bin 0 -> 984 bytes .../debug/styles/images/variables_off.svg" | 12 + .../debug/styles/images/variables_on.png" | Bin 0 -> 628 bytes .../debug/styles/images/variables_on.svg" | 12 + .../page_notes/styles/images/back.png" | Bin 0 -> 310 bytes .../page_notes/styles/images/back.svg" | 12 + .../page_notes/styles/images/back_hover.png" | Bin 0 -> 331 bytes .../page_notes/styles/images/back_hover.svg" | 12 + .../page_notes/styles/images/footnotes.png" | Bin 0 -> 125 bytes .../page_notes/styles/images/footnotes.svg" | 15 + .../styles/images/footnotes_hover.png" | Bin 0 -> 128 bytes .../styles/images/footnotes_hover.svg" | 15 + .../styles/images/footnotes_on.png" | Bin 0 -> 128 bytes .../styles/images/footnotes_on.svg" | 15 + .../page_notes/styles/images/forward.png" | Bin 0 -> 331 bytes .../page_notes/styles/images/forward.svg" | 12 + .../styles/images/forward_hover.png" | Bin 0 -> 334 bytes .../styles/images/forward_hover.svg" | 12 + .../page_notes/styles/images/notes_hover.png" | Bin 0 -> 304 bytes .../page_notes/styles/images/notes_hover.svg" | 9 + .../page_notes/styles/images/notes_off.png" | Bin 0 -> 313 bytes .../page_notes/styles/images/notes_off.svg" | 9 + .../page_notes/styles/images/notes_on.png" | Bin 0 -> 284 bytes .../page_notes/styles/images/notes_on.svg" | 9 + .../plugins/page_notes/styles/page_notes.css" | 159 + .../plugins/recordplay/recordplay.js" | 479 + .../plugins/recordplay/styles/recordplay.css" | 89 + .../sitemap/styles/images/079_page_16.png" | Bin 0 -> 2890 bytes .../sitemap/styles/images/086_case_16.png" | Bin 0 -> 2889 bytes .../styles/images/225_responsive_16.png" | Bin 0 -> 2879 bytes .../styles/images/228_togglenotes_16.png" | Bin 0 -> 3829 bytes .../styles/images/229_variables_16.png" | Bin 0 -> 3829 bytes .../sitemap/styles/images/231_event_16.png" | Bin 0 -> 3829 bytes .../sitemap/styles/images/232_search_16.png" | Bin 0 -> 3829 bytes .../styles/images/233_hyperlink_16.png" | Bin 0 -> 3829 bytes .../styles/images/235_folderclosed_16.png" | Bin 0 -> 3829 bytes .../styles/images/236_folderopen_16.png" | Bin 0 -> 3829 bytes .../sitemap/styles/images/adaptivecheck.png" | Bin 0 -> 2917 bytes .../plugins/sitemap/styles/images/flow.png" | Bin 0 -> 391 bytes .../plugins/sitemap/styles/images/flow.svg" | 15 + .../sitemap/styles/images/folder_closed.png" | Bin 0 -> 154 bytes .../sitemap/styles/images/folder_closed.svg" | 8 + .../sitemap/styles/images/folder_open.png" | Bin 0 -> 218 bytes .../sitemap/styles/images/folder_open.svg" | 8 + .../sitemap/styles/images/hotspots.png" | Bin 0 -> 549 bytes .../sitemap/styles/images/hotspots.svg" | 12 + .../sitemap/styles/images/hotspots_hover.png" | Bin 0 -> 598 bytes .../sitemap/styles/images/hotspots_hover.svg" | 12 + .../sitemap/styles/images/hotspots_on.png" | Bin 0 -> 598 bytes .../sitemap/styles/images/hotspots_on.svg" | 12 + .../sitemap/styles/images/images.html" | 22 + .../plugins/sitemap/styles/images/minus.gif" | Bin 0 -> 830 bytes .../plugins/sitemap/styles/images/note.png" | Bin 0 -> 166 bytes .../plugins/sitemap/styles/images/note.svg" | 16 + .../plugins/sitemap/styles/images/page.png" | Bin 0 -> 205 bytes .../plugins/sitemap/styles/images/page.svg" | 8 + .../plugins/sitemap/styles/images/plus.gif" | Bin 0 -> 834 bytes .../plugins/sitemap/styles/images/share.png" | Bin 0 -> 425 bytes .../plugins/sitemap/styles/images/share.svg" | 19 + .../sitemap/styles/images/share_hover.png" | Bin 0 -> 457 bytes .../sitemap/styles/images/share_hover.svg" | 19 + .../sitemap/styles/images/share_on.png" | Bin 0 -> 457 bytes .../sitemap/styles/images/share_on.svg" | 19 + .../sitemap/styles/images/sitemap_hover.png" | Bin 0 -> 571 bytes .../sitemap/styles/images/sitemap_hover.svg" | 8 + .../sitemap/styles/images/sitemap_off.png" | Bin 0 -> 639 bytes .../sitemap/styles/images/sitemap_off.svg" | 8 + .../sitemap/styles/images/sitemap_on.png" | Bin 0 -> 445 bytes .../sitemap/styles/images/sitemap_on.svg" | 8 + .../plugins/sitemap/styles/images/views.png" | Bin 0 -> 209 bytes .../plugins/sitemap/styles/images/views.svg" | 12 + .../sitemap/styles/images/views_hover.png" | Bin 0 -> 216 bytes .../sitemap/styles/images/views_hover.svg" | 12 + .../sitemap/styles/images/views_on.png" | Bin 0 -> 216 bytes .../sitemap/styles/images/views_on.svg" | 12 + .../plugins/sitemap/styles/sitemap.css" | 399 + .../resources/Other.html" | 35 + .../resources/chrome/allow_access.gif" | Bin 0 -> 9726 bytes .../chrome/axure-chrome-extension.crx" | Bin 0 -> 31290 bytes .../resources/chrome/axure_logo.gif" | Bin 0 -> 3101 bytes .../resources/chrome/axure_logo.png" | Bin 0 -> 4026 bytes .../resources/chrome/chrome.html" | 175 + .../resources/chrome/extensions_menu.gif" | Bin 0 -> 9308 bytes .../resources/chrome/splitter.gif" | Bin 0 -> 1260 bytes .../resources/chrome/splitter.png" | Bin 0 -> 251 bytes .../resources/css/axure_rp_page.css" | 239 + .../resources/css/default.css" | 207 + .../resources/css/images/images.html" | 25 + .../resources/css/images/newwindow.gif" | Bin 0 -> 112 bytes .../resources/css/images/note.gif" | Bin 0 -> 98 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png" | Bin 0 -> 180 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png" | Bin 0 -> 120 bytes .../images/ui-bg_glass_65_ffffff_1x400.png" | Bin 0 -> 105 bytes .../images/ui-bg_glass_75_dadada_1x400.png" | Bin 0 -> 111 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png" | Bin 0 -> 110 bytes .../images/ui-bg_glass_75_ffffff_1x400.png" | Bin 0 -> 107 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png" | Bin 0 -> 101 bytes .../ui-bg_inset-soft_95_fef1ec_1x100.png" | Bin 0 -> 123 bytes .../css/images/ui-icons_222222_256x240.png" | Bin 0 -> 4369 bytes .../css/images/ui-icons_2e83ff_256x240.png" | Bin 0 -> 4369 bytes .../css/images/ui-icons_454545_256x240.png" | Bin 0 -> 4369 bytes .../css/images/ui-icons_888888_256x240.png" | Bin 0 -> 4369 bytes .../css/images/ui-icons_cd0a0a_256x240.png" | Bin 0 -> 4369 bytes .../resources/css/jquery-ui-themes.css" | 412 + .../resources/css/reset.css" | 24 + .../resources/expand.html" | 60 + .../images/259_close_12rollover1.png" | Bin 0 -> 3377 bytes .../images/259_close_12rollover2.png" | Bin 0 -> 3377 bytes .../images/260_collapse_12rollover1.png" | Bin 0 -> 2812 bytes .../images/260_collapse_12rollover2.png" | Bin 0 -> 2812 bytes .../images/261_expand_12rollover1.png" | Bin 0 -> 2835 bytes .../images/261_expand_12rollover2.png" | Bin 0 -> 2826 bytes .../resources/images/close.png" | Bin 0 -> 279 bytes .../resources/images/close.svg" | 8 + .../resources/images/close_hover.png" | Bin 0 -> 443 bytes .../resources/images/close_hover.svg" | 8 + .../resources/images/divider.png" | Bin 0 -> 110 bytes .../resources/images/divider.svg" | 13 + .../resources/images/expand.png" | Bin 0 -> 281 bytes .../resources/images/expand.svg" | 8 + .../resources/images/expand_hover.png" | Bin 0 -> 438 bytes .../resources/images/expand_hover.svg" | 8 + .../resources/images/images.html" | 17 + .../resources/images/transparent.gif" | Bin 0 -> 43 bytes .../resources/reload.html" | 24 + .../resources/scripts/jquery-1.7.1.min.js" | 4 + .../scripts/jquery-ui-1.8.10.custom.min.js" | 233 + .../resources/scripts/messagecenter.js" | 279 + .../resources/scripts/player/axplayer.js" | 206 + .../resources/scripts/player/splitter.js" | 218 + .../resources/scripts/prototypePost.js" | 13048 ++++++++++++++++ .../resources/scripts/prototypePre.js" | 2860 ++++ .../resources/scripts/startPost.js" | 818 + .../resources/scripts/startPre.js" | 952 ++ "\346\267\230\345\256\235/start.html" | 503 + "\346\267\230\345\256\235/start_c_1.html" | 12 + "\346\267\230\345\256\235/start_g_0.html" | 12 + ...\347\240\201\347\231\273\345\275\225.html" | 152 + ...\350\264\271\346\263\250\345\206\214.html" | 162 + ...50\264\271\346\263\250\345\206\214_1.html" | 173 + ...\347\240\201\347\231\273\345\275\225.html" | 210 + ...\344\277\241\347\231\273\345\275\225.html" | 237 + ...\350\257\201\347\231\273\345\275\225.html" | 118 + ...\350\256\244\347\231\273\345\275\225.html" | 113 + 188 files changed, 27854 insertions(+) create mode 100644 "\346\267\230\345\256\235/data/document.js" create mode 100644 "\346\267\230\345\256\235/data/styles.css" create mode 100644 "\346\267\230\345\256\235/files/\344\272\214\347\273\264\347\240\201\347\231\273\345\275\225/data.js" create mode 100644 "\346\267\230\345\256\235/files/\344\272\214\347\273\264\347\240\201\347\231\273\345\275\225/styles.css" create mode 100644 "\346\267\230\345\256\235/files/\345\205\215\350\264\271\346\263\250\345\206\214/data.js" create mode 100644 "\346\267\230\345\256\235/files/\345\205\215\350\264\271\346\263\250\345\206\214/styles.css" create mode 100644 "\346\267\230\345\256\235/files/\345\205\215\350\264\271\346\263\250\345\206\214_1/data.js" create mode 100644 "\346\267\230\345\256\235/files/\345\205\215\350\264\271\346\263\250\345\206\214_1/styles.css" create mode 100644 "\346\267\230\345\256\235/files/\345\257\206\347\240\201\347\231\273\345\275\225/data.js" create mode 100644 "\346\267\230\345\256\235/files/\345\257\206\347\240\201\347\231\273\345\275\225/styles.css" create mode 100644 "\346\267\230\345\256\235/files/\347\237\255\344\277\241\347\231\273\345\275\225/data.js" create mode 100644 "\346\267\230\345\256\235/files/\347\237\255\344\277\241\347\231\273\345\275\225/styles.css" create mode 100644 "\346\267\230\345\256\235/files/\347\237\255\344\277\241\351\252\214\350\257\201\347\231\273\345\275\225/data.js" create mode 100644 "\346\267\230\345\256\235/files/\347\237\255\344\277\241\351\252\214\350\257\201\347\231\273\345\275\225/styles.css" create mode 100644 "\346\267\230\345\256\235/files/\351\273\230\350\256\244\347\231\273\345\275\225/data.js" create mode 100644 "\346\267\230\345\256\235/files/\351\273\230\350\256\244\347\231\273\345\275\225/styles.css" create mode 100644 "\346\267\230\345\256\235/images/\344\272\214\347\273\264\347\240\201\347\231\273\345\275\225/\344\272\214\347\273\264\347\240\201\357\274\201_u100.png" create mode 100644 "\346\267\230\345\256\235/images/\345\205\215\350\264\271\346\263\250\345\206\214/u118.png" create mode 100644 "\346\267\230\345\256\235/images/\345\205\215\350\264\271\346\263\250\345\206\214/u125.png" create mode 100644 "\346\267\230\345\256\235/images/\345\205\215\350\264\271\346\263\250\345\206\214/u142.png" create mode 100644 "\346\267\230\345\256\235/images/\345\205\215\350\264\271\346\263\250\345\206\214/u144.png" create mode 100644 "\346\267\230\345\256\235/images/\345\205\215\350\264\271\346\263\250\345\206\214/\345\260\217\350\234\234\350\234\202_u120.png" create mode 100644 "\346\267\230\345\256\235/images/\345\205\215\350\264\271\346\263\250\345\206\214/\346\267\230\345\256\235\347\224\250\346\210\267\346\263\250\345\206\214_u116.png" create mode 100644 "\346\267\230\345\256\235/images/\345\205\215\350\264\271\346\263\250\345\206\214_1/_86_u179.png" create mode 100644 "\346\267\230\345\256\235/images/\345\205\215\350\264\271\346\263\250\345\206\214_1/u189.png" create mode 100644 "\346\267\230\345\256\235/images/\345\257\206\347\240\201\347\231\273\345\275\225/__logo_u31.png" create mode 100644 "\346\267\230\345\256\235/images/\345\257\206\347\240\201\347\231\273\345\275\225/\345\205\266\344\273\226\347\231\273\345\275\225_u33.png" create mode 100644 "\346\267\230\345\256\235/images/\345\257\206\347\240\201\347\231\273\345\275\225/\345\257\206\347\240\201\345\233\276_u16.png" create mode 100644 "\346\267\230\345\256\235/images/\345\257\206\347\240\201\347\231\273\345\275\225/\346\211\253\347\240\201_u28.png" create mode 100644 "\346\267\230\345\256\235/images/\345\257\206\347\240\201\347\231\273\345\275\225/\347\231\273\345\275\225\351\241\265\351\235\242\346\224\271\350\277\233\345\273\272\350\256\256_u37.png" create mode 100644 "\346\267\230\345\256\235/images/\345\257\206\347\240\201\347\231\273\345\275\225/\350\203\214\346\231\257_u0.jpg" create mode 100644 "\346\267\230\345\256\235/images/\345\257\206\347\240\201\347\231\273\345\275\225/\350\264\246\346\210\267\345\233\276_u18.png" create mode 100644 "\346\267\230\345\256\235/images/\345\257\206\347\240\201\347\231\273\345\275\225/\351\223\276\346\216\245_u35.png" create mode 100644 "\346\267\230\345\256\235/images/\347\237\255\344\277\241\347\231\273\345\275\225/_86_u57.png" create mode 100644 "\346\267\230\345\256\235/images/\347\237\255\344\277\241\347\231\273\345\275\225/\345\257\206\347\240\201\345\233\276_u59.png" create mode 100644 "\346\267\230\345\256\235/images/\347\237\255\344\277\241\347\231\273\345\275\225/\350\264\246\346\210\267\345\233\276_u61.png" create mode 100644 "\346\267\230\345\256\235/images/\351\273\230\350\256\244\347\231\273\345\275\225/eye_u156.png" create mode 100644 "\346\267\230\345\256\235/images/\351\273\230\350\256\244\347\231\273\345\275\225/logo_u150.png" create mode 100644 "\346\267\230\345\256\235/index.html" create mode 100644 "\346\267\230\345\256\235/plugins/debug/styles/debug.css" create mode 100644 "\346\267\230\345\256\235/plugins/debug/styles/images/reset.svg" create mode 100644 "\346\267\230\345\256\235/plugins/debug/styles/images/reset_hover.svg" create mode 100644 "\346\267\230\345\256\235/plugins/debug/styles/images/variables_hover.png" create mode 100644 "\346\267\230\345\256\235/plugins/debug/styles/images/variables_hover.svg" create mode 100644 "\346\267\230\345\256\235/plugins/debug/styles/images/variables_off.png" create mode 100644 "\346\267\230\345\256\235/plugins/debug/styles/images/variables_off.svg" create mode 100644 "\346\267\230\345\256\235/plugins/debug/styles/images/variables_on.png" create mode 100644 "\346\267\230\345\256\235/plugins/debug/styles/images/variables_on.svg" create mode 100644 "\346\267\230\345\256\235/plugins/page_notes/styles/images/back.png" create mode 100644 "\346\267\230\345\256\235/plugins/page_notes/styles/images/back.svg" create mode 100644 "\346\267\230\345\256\235/plugins/page_notes/styles/images/back_hover.png" create mode 100644 "\346\267\230\345\256\235/plugins/page_notes/styles/images/back_hover.svg" create mode 100644 "\346\267\230\345\256\235/plugins/page_notes/styles/images/footnotes.png" create mode 100644 "\346\267\230\345\256\235/plugins/page_notes/styles/images/footnotes.svg" create mode 100644 "\346\267\230\345\256\235/plugins/page_notes/styles/images/footnotes_hover.png" create mode 100644 "\346\267\230\345\256\235/plugins/page_notes/styles/images/footnotes_hover.svg" create mode 100644 "\346\267\230\345\256\235/plugins/page_notes/styles/images/footnotes_on.png" create mode 100644 "\346\267\230\345\256\235/plugins/page_notes/styles/images/footnotes_on.svg" create mode 100644 "\346\267\230\345\256\235/plugins/page_notes/styles/images/forward.png" create mode 100644 "\346\267\230\345\256\235/plugins/page_notes/styles/images/forward.svg" create mode 100644 "\346\267\230\345\256\235/plugins/page_notes/styles/images/forward_hover.png" create mode 100644 "\346\267\230\345\256\235/plugins/page_notes/styles/images/forward_hover.svg" create mode 100644 "\346\267\230\345\256\235/plugins/page_notes/styles/images/notes_hover.png" create mode 100644 "\346\267\230\345\256\235/plugins/page_notes/styles/images/notes_hover.svg" create mode 100644 "\346\267\230\345\256\235/plugins/page_notes/styles/images/notes_off.png" create mode 100644 "\346\267\230\345\256\235/plugins/page_notes/styles/images/notes_off.svg" create mode 100644 "\346\267\230\345\256\235/plugins/page_notes/styles/images/notes_on.png" create mode 100644 "\346\267\230\345\256\235/plugins/page_notes/styles/images/notes_on.svg" create mode 100644 "\346\267\230\345\256\235/plugins/page_notes/styles/page_notes.css" create mode 100644 "\346\267\230\345\256\235/plugins/recordplay/recordplay.js" create mode 100644 "\346\267\230\345\256\235/plugins/recordplay/styles/recordplay.css" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/079_page_16.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/086_case_16.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/225_responsive_16.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/228_togglenotes_16.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/229_variables_16.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/231_event_16.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/232_search_16.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/233_hyperlink_16.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/235_folderclosed_16.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/236_folderopen_16.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/adaptivecheck.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/flow.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/flow.svg" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/folder_closed.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/folder_closed.svg" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/folder_open.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/folder_open.svg" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/hotspots.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/hotspots.svg" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/hotspots_hover.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/hotspots_hover.svg" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/hotspots_on.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/hotspots_on.svg" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/images.html" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/minus.gif" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/note.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/note.svg" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/page.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/page.svg" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/plus.gif" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/share.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/share.svg" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/share_hover.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/share_hover.svg" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/share_on.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/share_on.svg" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/sitemap_hover.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/sitemap_hover.svg" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/sitemap_off.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/sitemap_off.svg" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/sitemap_on.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/sitemap_on.svg" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/views.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/views.svg" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/views_hover.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/views_hover.svg" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/views_on.png" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/images/views_on.svg" create mode 100644 "\346\267\230\345\256\235/plugins/sitemap/styles/sitemap.css" create mode 100644 "\346\267\230\345\256\235/resources/Other.html" create mode 100644 "\346\267\230\345\256\235/resources/chrome/allow_access.gif" create mode 100644 "\346\267\230\345\256\235/resources/chrome/axure-chrome-extension.crx" create mode 100644 "\346\267\230\345\256\235/resources/chrome/axure_logo.gif" create mode 100644 "\346\267\230\345\256\235/resources/chrome/axure_logo.png" create mode 100644 "\346\267\230\345\256\235/resources/chrome/chrome.html" create mode 100644 "\346\267\230\345\256\235/resources/chrome/extensions_menu.gif" create mode 100644 "\346\267\230\345\256\235/resources/chrome/splitter.gif" create mode 100644 "\346\267\230\345\256\235/resources/chrome/splitter.png" create mode 100644 "\346\267\230\345\256\235/resources/css/axure_rp_page.css" create mode 100644 "\346\267\230\345\256\235/resources/css/default.css" create mode 100644 "\346\267\230\345\256\235/resources/css/images/images.html" create mode 100644 "\346\267\230\345\256\235/resources/css/images/newwindow.gif" create mode 100644 "\346\267\230\345\256\235/resources/css/images/note.gif" create mode 100644 "\346\267\230\345\256\235/resources/css/images/ui-bg_flat_0_aaaaaa_40x100.png" create mode 100644 "\346\267\230\345\256\235/resources/css/images/ui-bg_glass_55_fbf9ee_1x400.png" create mode 100644 "\346\267\230\345\256\235/resources/css/images/ui-bg_glass_65_ffffff_1x400.png" create mode 100644 "\346\267\230\345\256\235/resources/css/images/ui-bg_glass_75_dadada_1x400.png" create mode 100644 "\346\267\230\345\256\235/resources/css/images/ui-bg_glass_75_e6e6e6_1x400.png" create mode 100644 "\346\267\230\345\256\235/resources/css/images/ui-bg_glass_75_ffffff_1x400.png" create mode 100644 "\346\267\230\345\256\235/resources/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png" create mode 100644 "\346\267\230\345\256\235/resources/css/images/ui-bg_inset-soft_95_fef1ec_1x100.png" create mode 100644 "\346\267\230\345\256\235/resources/css/images/ui-icons_222222_256x240.png" create mode 100644 "\346\267\230\345\256\235/resources/css/images/ui-icons_2e83ff_256x240.png" create mode 100644 "\346\267\230\345\256\235/resources/css/images/ui-icons_454545_256x240.png" create mode 100644 "\346\267\230\345\256\235/resources/css/images/ui-icons_888888_256x240.png" create mode 100644 "\346\267\230\345\256\235/resources/css/images/ui-icons_cd0a0a_256x240.png" create mode 100644 "\346\267\230\345\256\235/resources/css/jquery-ui-themes.css" create mode 100644 "\346\267\230\345\256\235/resources/css/reset.css" create mode 100644 "\346\267\230\345\256\235/resources/expand.html" create mode 100644 "\346\267\230\345\256\235/resources/images/259_close_12rollover1.png" create mode 100644 "\346\267\230\345\256\235/resources/images/259_close_12rollover2.png" create mode 100644 "\346\267\230\345\256\235/resources/images/260_collapse_12rollover1.png" create mode 100644 "\346\267\230\345\256\235/resources/images/260_collapse_12rollover2.png" create mode 100644 "\346\267\230\345\256\235/resources/images/261_expand_12rollover1.png" create mode 100644 "\346\267\230\345\256\235/resources/images/261_expand_12rollover2.png" create mode 100644 "\346\267\230\345\256\235/resources/images/close.png" create mode 100644 "\346\267\230\345\256\235/resources/images/close.svg" create mode 100644 "\346\267\230\345\256\235/resources/images/close_hover.png" create mode 100644 "\346\267\230\345\256\235/resources/images/close_hover.svg" create mode 100644 "\346\267\230\345\256\235/resources/images/divider.png" create mode 100644 "\346\267\230\345\256\235/resources/images/divider.svg" create mode 100644 "\346\267\230\345\256\235/resources/images/expand.png" create mode 100644 "\346\267\230\345\256\235/resources/images/expand.svg" create mode 100644 "\346\267\230\345\256\235/resources/images/expand_hover.png" create mode 100644 "\346\267\230\345\256\235/resources/images/expand_hover.svg" create mode 100644 "\346\267\230\345\256\235/resources/images/images.html" create mode 100644 "\346\267\230\345\256\235/resources/images/transparent.gif" create mode 100644 "\346\267\230\345\256\235/resources/reload.html" create mode 100644 "\346\267\230\345\256\235/resources/scripts/jquery-1.7.1.min.js" create mode 100644 "\346\267\230\345\256\235/resources/scripts/jquery-ui-1.8.10.custom.min.js" create mode 100644 "\346\267\230\345\256\235/resources/scripts/messagecenter.js" create mode 100644 "\346\267\230\345\256\235/resources/scripts/player/axplayer.js" create mode 100644 "\346\267\230\345\256\235/resources/scripts/player/splitter.js" create mode 100644 "\346\267\230\345\256\235/resources/scripts/prototypePost.js" create mode 100644 "\346\267\230\345\256\235/resources/scripts/prototypePre.js" create mode 100644 "\346\267\230\345\256\235/resources/scripts/startPost.js" create mode 100644 "\346\267\230\345\256\235/resources/scripts/startPre.js" create mode 100644 "\346\267\230\345\256\235/start.html" create mode 100644 "\346\267\230\345\256\235/start_c_1.html" create mode 100644 "\346\267\230\345\256\235/start_g_0.html" create mode 100644 "\346\267\230\345\256\235/\344\272\214\347\273\264\347\240\201\347\231\273\345\275\225.html" create mode 100644 "\346\267\230\345\256\235/\345\205\215\350\264\271\346\263\250\345\206\214.html" create mode 100644 "\346\267\230\345\256\235/\345\205\215\350\264\271\346\263\250\345\206\214_1.html" create mode 100644 "\346\267\230\345\256\235/\345\257\206\347\240\201\347\231\273\345\275\225.html" create mode 100644 "\346\267\230\345\256\235/\347\237\255\344\277\241\347\231\273\345\275\225.html" create mode 100644 "\346\267\230\345\256\235/\347\237\255\344\277\241\351\252\214\350\257\201\347\231\273\345\275\225.html" create mode 100644 "\346\267\230\345\256\235/\351\273\230\350\256\244\347\231\273\345\275\225.html" diff --git "a/\346\267\230\345\256\235/data/document.js" "b/\346\267\230\345\256\235/data/document.js" new file mode 100644 index 0000000..dab2ee6 --- /dev/null +++ "b/\346\267\230\345\256\235/data/document.js" @@ -0,0 +1,7 @@ +$axure.loadDocument( +(function() { + var _ = function() { var r={},a=arguments; for(var i=0; iOVUUz9OZF^f%i7p# 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 literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/images/\345\205\215\350\264\271\346\263\250\345\206\214/u118.png" "b/\346\267\230\345\256\235/images/\345\205\215\350\264\271\346\263\250\345\206\214/u118.png" new file mode 100644 index 0000000000000000000000000000000000000000..721e60c7f36109b8f4f7bc0bb295d5d4b93740e2 GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0y~yU|9oXvvRNj$&BA6H9(57ILO_JVcj{Imp~3nx}&cn z1H;CC?mvmFKt5-IM`SSr1K(i~W;~w1A_XYu=IP=XQW5v|h9fV70uRf>iF80M#>)ral|i-NddAffw+X~Sw3mX@1=U^SkuelF{r G5}E+t?kyky literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/images/\345\205\215\350\264\271\346\263\250\345\206\214/u125.png" "b/\346\267\230\345\256\235/images/\345\205\215\350\264\271\346\263\250\345\206\214/u125.png" new file mode 100644 index 0000000000000000000000000000000000000000..6d9f0ba6329d6c083af3fc0fbd558efbce23922a GIT binary patch literal 2360 zcmeAS@N?(olHy`uVBq!ia0y~yV7kn}z_^=(4Jg96TXHstDh_gYVpw-h<|UBBlJ4m1 z$iT3%pZiZDE0E7w;1OBOz`%DHgc*grD-x_4 z(o960w@AK7&{`mKR6u;Q;l0+?#bWR4WOMHQ&ibTZ oyMO}k_ay_{5FVdQ&MBb@0FCYkEC2ui literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/images/\345\205\215\350\264\271\346\263\250\345\206\214/u142.png" "b/\346\267\230\345\256\235/images/\345\205\215\350\264\271\346\263\250\345\206\214/u142.png" new file mode 100644 index 0000000000000000000000000000000000000000..f848eac1dfab9cb51f6a25459d9b7ccfd29e323d GIT binary patch literal 14526 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

MDY1T%z-Qx?6wKL2*2S4!U{ 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 literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/images/\345\205\215\350\264\271\346\263\250\345\206\214/\346\267\230\345\256\235\347\224\250\346\210\267\346\263\250\345\206\214_u116.png" "b/\346\267\230\345\256\235/images/\345\205\215\350\264\271\346\263\250\345\206\214/\346\267\230\345\256\235\347\224\250\346\210\267\346\263\250\345\206\214_u116.png" new file mode 100644 index 0000000000000000000000000000000000000000..cb06ad8f58cb173337096a556d5c9773bba6dffd GIT binary patch literal 7309 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 literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/images/\345\205\215\350\264\271\346\263\250\345\206\214_1/_86_u179.png" "b/\346\267\230\345\256\235/images/\345\205\215\350\264\271\346\263\250\345\206\214_1/_86_u179.png" new file mode 100644 index 0000000000000000000000000000000000000000..e8a0023f823958b9b351dd9803560ca665483e57 GIT binary patch literal 1747 zcmV;^1}yoBP)NkldnL z(VjbJYy0#j2bhP!;wm=oej_e?Whis@v>ph;w2fE(dDz{dpKggx&P?8rwN^H}qaUQD zBZ8wN`logEmwu{hW@0Xy5O&faC*LT*w`^jqTM;GlLLo4RRo~muai^xb^@&z%;!Ld? z;VB~4`T@X;CPB`+B*kNW@N3l<=`ff7>8X~cVUolKtPjig#mRSkaP)Y?xQ8Uc2Yh*~ z&$PFW6iGz#!lV2D)GUc_vnE-xIAR^vc6N`u8O1+tQ7IBaA&4#I$g|(yyOAq&w|DlL zAqX552to%R*WaqXRJ-%gzT$0rQ^Q_-h5pto8WA@(I#_@BkEXwy1}9>~3x#mnQOr$3 z5%E$Hm(K#(GMmAXge$~!m_%%tdujkStm`yBX_aJTXTO=KP>9$s*zvn!(TLybm5`lP(qBO^py zUv^$qXEvL4I-SvI^mryWpLd+WU;uj1>QzvmOBPuL(Fy6w-ag@1-`1>Gir5@wunz6J zeWB`6==Qu!RebQIW7dJEy}FUd?9|X;oN!r8*z{sx4v)=bvS1q3{kdheTCLG&*lc!I zRu-4brPJvE4UXgY?%i{_Trn{*N~O~0=p`cpL9(ROt-PCx$jW1--~2FYWQ1@yi8~II zZAxDgA3p7ydA!rY9fXt8m#NPmF0a1Zs-9|4et2wmUS{5Ep3gP-R7xb0y1KfWni|lW zmX;=!O2NJWI4UbEQ&LiZ#^)%YTnG`=Y0)&DID6M%>Ia9wX&HZJ>4mF=H(T1IAWndy zQsr*QErk-(?|0z@_DOS}azR$pnbFP%B0{V2oiko8YPB0<&Q_F*UD4uW7zn zd$qR7btr#(Mp|r02!y(39jB<;JFm^C29CtPf8e z_`ISK>tU=aN(%?Qys3-tB~590JYI5gGLy+HD=TYgXlQF|b2uC@4CmzJfb$X*6g21H zS$FXQ1Z=Fk<#^b^lV#;C79VDGH%^!A+@soZtc4s#z3qg9G+h6sDEp(FJ>NIuCcCHS zO7X#W)1#BhZy0Uk-d^C@S(X1uc1}{}>ANK9%leG2v#S_}wYRqy78WKXBoq`BfI5O8 zv%65Gh3t_zDf?(Jk7;d^E>=jM6kgYr}0A~_#Tu{TP*|$?(pZ=FN*X#>^ASP|L_D?41f|J z9}hwaI5MD4qs?<+Em}STvxSnx_twS5#Yub}bCG;`Bpd~)>&~}p$Fa%9IdSLE(~Gz6 z8`;S6HOeRs8>X{lD-|+soW1c{eOIpmok(ol7-VR_-Ky><8Bxh{5Pp4GpNEk^AP|ei zLZNV89KaBxw6t^{d#~2aVDUsTx$%l<#q-~6GY1MpLH1$1ulw5NaappEL3239w7UN0 zi(j8>4N8s7FDS|k<1-*SPsk>;tkLVIA3zcTlS6YNLp@_{zn!=?gf4$8uW;)-a?bxC zGSiXy>(s#FFPU)Jt%GeBe&5eeNsvfnph#tMx!~iI$N%a!*__1mFFnHTKu6V$H@;JB zUN4bO^peQL{Guc0uRgXS4$#Z*g$8DrAKN1JaG@g>ZTln$o%_aIBnKzVEGdyi^xJ=?7A>;+&&4IS93Vmk9v~7R pLM1?z1A8Pugi3%a2lfb+$iI&P1?15hPv!ss002ovPDHLkV1gj|Rw@7h literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/images/\345\205\215\350\264\271\346\263\250\345\206\214_1/u189.png" "b/\346\267\230\345\256\235/images/\345\205\215\350\264\271\346\263\250\345\206\214_1/u189.png" new file mode 100644 index 0000000000000000000000000000000000000000..6c4a1573cb9f2e280fae890898f35dc46355b9c8 GIT binary patch literal 145 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 IM6N<$f>g@rg#Z8m literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/images/\345\257\206\347\240\201\347\231\273\345\275\225/\345\257\206\347\240\201\345\233\276_u16.png" "b/\346\267\230\345\256\235/images/\345\257\206\347\240\201\347\231\273\345\275\225/\345\257\206\347\240\201\345\233\276_u16.png" new file mode 100644 index 0000000000000000000000000000000000000000..3b48a994aa2d7e2221c686ee351334688ee4c2f1 GIT binary patch literal 428 zcmV;d0aN~oP)0004VNkl3RB| zw6tg2Hq*w}Zv(nzcHm!2zKi$m)IJFM_a!2_+b5*5nL}DKr1@ zXiUERC)asf7E`d6>Qw8qD_Qfm3eY~ z>lKqfw}7a*ic__3-e&=|q)PzcedDG^9k{6^D}B1CDWX~>;m?UeE5^&qS zhes3-PXJqFm?Zjm0sOYotpUL4qx*d4gUX-~f$E^}14}zFII3fXUDU@W2wwmHqTT>S W^G+J-!mR%Q0000 zUu+ab9LIlKpamNd+RzY_diW=%+Hwz;k|43B2}zBLHHsuYv_439>Kmy9d9FwZZ}o*Y zsEHAk*i=ZHn3R-%3AH|)EfxdD+C-s-s}Kv6wyeLI*}a>a-PzmQKfV6>eUeLec4zix zJKz1yZ+J_dk_{iXs^wfwdRD%B1J3 zp7j)J+0YMIhtC3kzgs;@LZ6LTJQxN{zxxR`@FCn@UQO%EqCW9&ciiwdX`Rd^w!+*qbw27bg7x^t{aD`8#L@)C^zijo{>exAna@3h3fv!+ebVwX zM`8UJ`!Z?Or*)Lywi~A3JLsbxM@gtFnKjoh!@Bd`4mV(?;T_LGksvx3K#d+`>){ zgnw={g4xmlFnSyedz&)}#;F>BdmhzDj)B=&<@E545Z3P&v0b?}n??z=JZ5k70D*cpkr*z|1C|h?9V8p*z&GHR_zKg|7AHMoQ zpmJXERxhFzDzhd7wl%E4ZM1eML`MU&e0SvZAV7UqoZM=@U^f~HWhwz?m9@=;zXe5J z*$qZ2iRTxhH0zUS$=b74bvTg`zS9aTB#%i67c0-`>XZb{u1g44d+q^t{ZhKRKiA6g z|5XZLZ(3Yi?HFDgmbnw$vYOiuLiyFB{>5tX_{mDKHXvt!WnXRhI4X-0$TL}9`LxGE z*FvTi8xKGJyM6|WZy5iy$@{Qd*<>F^5ktaC2#d$WVWcomHSX%FkOYKc>H;AO$*Sg9 zVU-+L1_LaTfL$yfb*Ckf;=c9xr`{Hw z8j(*Y5fp#{aQbBRR z6k656Ns(q&4f>rTwdw#H$M`7Ql**g+z+6H9mQL0Lzm$< z%SV(W0LrYAh=pREcj4zp`}}H%O1+W9HNq7sj;h8=?Q3N>CimG3nE49O{l_KJHPG`PXzCZ3OZCNLNl~EX-ye(Q=~j8AzgzS`_awmL z^HGUF%%(@+eq7x>j|Oz`&A287^0B<0sU_mW5^J#@#U_hN_{S3KqnCEVs`Ou(-OSH) zn<7# z1irieoHub0D-1TdtB+zj-lQV!_mj`-yqOx%YbObR6jvrRm?9!a_ePX_c+E_aP>IOV zy%8lJUT;jH!4wfWnP;#fgoH{&&VyYaM?Ql^T|W^$%Gv<#drC7@x|uARnIaY*Nv!-` ztZuQt7fwav4(vHi$Ojr5icR$$Ra})l~^#u?_gaH^nO*c zsKkO{{|;7=$p8{6v2cV~d`&_n7M6fwB_EXth|iI~Yf<-Su)N;8NKc9oLpU!4|R%v}Ijrxhj z0b0|USKfsAsx7eg;@5mVD_hrULtQ@+kPxGO?J4y>D+!edNK781#%CoTl?X`8vO%Af zt-7)ow2+TV1SIBP{Zm$5kx&c9gyKFrT1p#FF5D X4kiLF&ENe500000NkvXXu0mjfkry${ literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/images/\345\257\206\347\240\201\347\231\273\345\275\225/\347\231\273\345\275\225\351\241\265\351\235\242\346\224\271\350\277\233\345\273\272\350\256\256_u37.png" "b/\346\267\230\345\256\235/images/\345\257\206\347\240\201\347\231\273\345\275\225/\347\231\273\345\275\225\351\241\265\351\235\242\346\224\271\350\277\233\345\273\272\350\256\256_u37.png" new file mode 100644 index 0000000000000000000000000000000000000000..4189828d5cdff0afcd56bb05be2121289a396314 GIT binary patch literal 394 zcmeAS@N?(olHy`uVBq!ia0vp^3P3E+!3HGT!p`>qDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(eheoCO|{#S9F5he4R}c>anMpaywQ7srqY_vAnPEIiB{GZuVlXbfcUu}U}~ z>kw!5r>L=U;l75(hpJQjxdi$X5;D#tBs^#=I9Yr^Y=NS1xRYf{!=L9oJa$3}YBK{r zFna~_o#1I?NZ`n6*${bFQliB|A*bfST}QUI`vGP_90myB z5X0YquL^s9T84c1|DTbc@sz9s--1=lGTWGWw=`_{*x1>`!^6HH=TtGHP{ntkJFGUu zD74&nyt=rNvA;<%N_>V2L$Li6U#)~*_E+uG7#$qqL=GI7%gVzuv(tgiKzka)&1)RZ z8<`Wzo;sf1q`*Fbcb@+L|M!jm{r`Xa{z9fD%%_|la2v22XdK8kD`H6HTfii-XlFxL k!WG8Fd=fAD5)v2~{MN_KGn%RW8yJ2Jp00i_>zopr0JEBpEdT%j literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/images/\345\257\206\347\240\201\347\231\273\345\275\225/\350\203\214\346\231\257_u0.jpg" "b/\346\267\230\345\256\235/images/\345\257\206\347\240\201\347\231\273\345\275\225/\350\203\214\346\231\257_u0.jpg" new file mode 100644 index 0000000000000000000000000000000000000000..7f2e2870242ac38f9af7ecbe5d7c10c1fa0e81cf GIT binary patch literal 185077 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 JUE^=}{|}Urt;PTV literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/images/\345\257\206\347\240\201\347\231\273\345\275\225/\350\264\246\346\210\267\345\233\276_u18.png" "b/\346\267\230\345\256\235/images/\345\257\206\347\240\201\347\231\273\345\275\225/\350\264\246\346\210\267\345\233\276_u18.png" new file mode 100644 index 0000000000000000000000000000000000000000..823b7c5447b23d22ff267d59db37f7870ae4abea GIT binary patch literal 540 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 literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/images/\347\237\255\344\277\241\347\231\273\345\275\225/_86_u57.png" "b/\346\267\230\345\256\235/images/\347\237\255\344\277\241\347\231\273\345\275\225/_86_u57.png" new file mode 100644 index 0000000000000000000000000000000000000000..8b6770d0fd9df43c85c95da5a1f3deebf8807246 GIT binary patch literal 751 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0)$CKK~z{r?U+Gp z8bKI_UrjH1QwZi}>N)gQu(Ihb7ZGxdm;QkS62xrVe^8`I5VS%6Knp$Y=8{WHg{II` zqBl>1v=E{>B&a0BuQNNNyKYPlrkm2uJ}~Tl-^}Hm`QDjfe8j*L!7sm00#B@4@x;0n zPpn(<#Qx9lJJQX~jf^IFkl4njWh^g`S_uuAH|auGEn`%jWt@WxJv%!?tyV+7-y$tm!lYB zfu|u#wRkK;J4V?upIX|utVewo4-1c*W&SU)i4_8^0<6sxUZ*0@Sv)x*#^zta<8N4Y zp2-E4gpvAKL(2H)o?S)jO${3_jD*R_A-*7u-F4HG;pBU~J6OfHpIxM0%H$()eSM8w zE{Ds@OPLXH?(O#tG|QM_KZot{--aJOo12@&gx`7e%y`an?Eb#J`3Qlde&>Xa z;FpTEwKZB;SRh^3Z(S-}_29;(@atlu(Lg*NM<5W8Jp$LgE^;~i+~u2-9q%dCt$1SH hiYL~scw*fN@CR}%m_U|sEsg*H002ovPDHLkV1jH|SN;G1 literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/images/\347\237\255\344\277\241\347\231\273\345\275\225/\345\257\206\347\240\201\345\233\276_u59.png" "b/\346\267\230\345\256\235/images/\347\237\255\344\277\241\347\231\273\345\275\225/\345\257\206\347\240\201\345\233\276_u59.png" new file mode 100644 index 0000000000000000000000000000000000000000..242aab3e76149f27850e1e0f7d8a264533c4e60f GIT binary patch literal 528 zcmV+r0`L8aP);hm-JeAd(opTJCSR{SB9DYMER7(4Bncn3KZ3&W}YHlW+*q` zHx-JMVtMsa?;XmKSTejslCPV06O5M*T=^66^$Z!s^mGg@TsX@yCU<;6L%9sI(Hz2W zZ6YNO(TNn~L4eR-ATKMpM<<95BvcU63>N=NPN8*1>(Biiaf1N&%__xW8N!nSu9DQ8 zVKiLeIN~qXzjMx!SUgP7JdN<+Eog^!yN5`=X>bd>y&Q?%-pt{3PY~RnnkBSem(ukS z7Ad%e-C9oHUZXe)AT~SJ!D>FG4O61jF}_pTxrMF&hIoW*b`Y%}OGWQ+{G@II!JAVQ zS&pL7#C48v?)9f?z6ZVHOm@fk#0FsrYVaVHD_*)FQ2|bd|Q^S#maH9a$Kw&7c0lb%5ia$INsY|{l5Sly_ZQ% SPC8-$0000Nkl2Wd5Qg8Fs9TD(XhVodtPEl%|`mDJdkC;x5w0XP`*4OFKXH4_DEK8 ziYRCk(2`VWNh-7?6KK_cTe#6jaFo~}Z*>v@4hU_83Y^Bz0eTSUna*gUsm-T_|1ekhb z_~&MO0I#rC=x-V%E4e^EFHvn<4q2D*Z?568mMNQ-cAkrDHKgy!TC}d27{5s`UO`%t h3N1;6mZYK=lJCYROz-~}7{_%V2noa?a~5pZF}4$@t?L|}PCL_1zgNCmUewJbnT8mHjj;_j27{462nikN z=n{tzro6%s`><(<~jSGMlz%`)Qj)ioj z%XUXnWJ!p|!=Z3A=%)yB?7#VCwi1pGskQyT%e(nAESJ){qEy(IV-M4-Yrkz}0whXd z<813#hN*S?-D>UN@T5|&c1I&B6-;gX`p5R2RA_;kPXH`F58){1{r1srp;B$RJ%?X^ zyb&f;y3lg6wY_Bk+^@_!$do6 zkwP>Z&8CxC6Eem6L7`kI70(W8wyonn^4kT3_c7D!e54TieI z`UAJGp1>)8K=%7aJxSLB6y(Pt7{@7;4WroFwrUkLwbraRIX|1@g0mT>FE#dPWJsO9 z=8$+enGymKKLG;#Dq(w`Yjq`EH}y!yN12$_uSqn@a6**9Z5y`VCJtZ@qd38*gCTx_ zF@}SIqUhHUfUc>Kp-4KIT#5y~&hX%`=SO0tJ9;-BhG3dPY^8hr=Z;Lqh*V~AlyA4J zsx0J|xLBB&SlYHBclVx__A1X>d^DZPWWtlK&(~8i0rDP#lcYB?AYJOnLshd32O}sP z$1xQ45ZEzvU28Q=4>LW43ix4b1e@j%q9}@F8636y^7-*;>Gf{$v}tpAX7m2~;$oBq zj=H8yK|lyb5`hFqI-Dogk4~DGgQkZ0863l47@QV99>9d%jworWNBcJ(#oRX8ukY4O z#7A>Mf-+k5QhxVkq1dJHZ#M4z{P=E+5$Gwsr+H@N2}3cIOR;fKEYS?7?@5qW`K?X{N0wI=Rd^8TSC2}>hYnVe-7CT*KWZFnDL?dj{7s+g{ zXA(TaUh9Q-g3N@NSUAo|SIPEdW0_$kN@}}(LY35XD|8-OIuqH zf4ZOXV}1-=h9=WoThE068`H7%fu^d8sv4$kTDE14Tp-oeyf8t~3>OVicGqlIi!bx% zCT~S@kAB%)0z3R>N=zlIPl3U;0>c?T2p(a4*&CmkBL}qJLO>{jq67|pv)}NOus-lA zQdO+Adn-K0M({Zyd9~hLh!3#F_ZAez!1KY!_f3-GlG(>0oOu>1SDLETA9xV^zWbWi zTz6bE_LHvhe``nYOPVs!nFI*n5PhSd_@WS>P~GsujeK^)x&E`+EyP5+TP1Flm?$u* Z{{aownSl|(Cu#ry002ovPDHLkV1hdQy(s_y literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/images/\351\273\230\350\256\244\347\231\273\345\275\225/logo_u150.png" "b/\346\267\230\345\256\235/images/\351\273\230\350\256\244\347\231\273\345\275\225/logo_u150.png" new file mode 100644 index 0000000000000000000000000000000000000000..fd01c31627588f9d44645740c866c8413b457c55 GIT binary patch literal 3476 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 + + + Untitled Document + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ +
+
+ +
+
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + CLOSE +
    +
    +
    +
    + +
    + +
    + +
    + +
    + + + diff --git "a/\346\267\230\345\256\235/plugins/debug/styles/debug.css" "b/\346\267\230\345\256\235/plugins/debug/styles/debug.css" new file mode 100644 index 0000000..2c3aa45 --- /dev/null +++ "b/\346\267\230\345\256\235/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/\346\267\230\345\256\235/plugins/debug/styles/images/reset.svg" "b/\346\267\230\345\256\235/plugins/debug/styles/images/reset.svg" new file mode 100644 index 0000000..f91f3d4 --- /dev/null +++ "b/\346\267\230\345\256\235/plugins/debug/styles/images/reset.svg" @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git "a/\346\267\230\345\256\235/plugins/debug/styles/images/reset_hover.svg" "b/\346\267\230\345\256\235/plugins/debug/styles/images/reset_hover.svg" new file mode 100644 index 0000000..98e02e5 --- /dev/null +++ "b/\346\267\230\345\256\235/plugins/debug/styles/images/reset_hover.svg" @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git "a/\346\267\230\345\256\235/plugins/debug/styles/images/variables_hover.png" "b/\346\267\230\345\256\235/plugins/debug/styles/images/variables_hover.png" new file mode 100644 index 0000000000000000000000000000000000000000..b7c9cbd84afecdc13e4d0667c31bb78dd8ca42c0 GIT binary patch literal 883 zcmV-(1C0EMP)2xgmet^y&-H=j~4BPgOC zda3B8d=cs)dg`H~jG`on)Q7M_Bk<3{91W>Glu;1N(olklZs@i?=g04kxfE89(S_g6 zx!?0W=iGD7y)&8q*)=pY)Hpaec3(M82KD@9~57~GglCZD55AUB)M=47@#AAMk8U_HDq94=5>TRWPmV0d_V z8^MDZ3!F}8>)!;I0|WwrANY=@pr~JRZ+9oTmovp^|$fyi!t9Vh5{dW~Xv|%4H8{iRKgs%*rX)3#I@Lm`)BZ#Lb09YqO-YOQHUWr_3X_^*RHn`HB6&H4=VVsr( zWwHVMZh*^*qN1X=%E0h;DLq#*A8B{3fk!pUnUW21(g2qg^YioaHuPR1-OG{y+Q>Y3eRFntkgzoEtp z3ky4?f<6HVu;g!pyWPZ9{1}Z!r?5%?&vS?#;o?)w{l89C_qoFI`t>F4!PY7pxTn2d z@1$n6TDt{ch-&h(6+%KJ4pQz_9#TIieFh#9oTPj4ZF9Tb-()X~giQ$P#zXiw1=D;! zUl`yeftK`@YuH7AD!v_%+l34-Ra{)Whxg*+4Q#KesgbLzFDhP3jLUF7@EupU-WHzy zZrag@!AanlGUh9#HJrW+{w5A^AiFBLrY5R*P4*7HllcZ!yhtRnnwQ&_yrNLcVk=by~6+i002ov JPDHLkV1n*4oJIfu literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/debug/styles/images/variables_hover.svg" "b/\346\267\230\345\256\235/plugins/debug/styles/images/variables_hover.svg" new file mode 100644 index 0000000..00e75d0 --- /dev/null +++ "b/\346\267\230\345\256\235/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/\346\267\230\345\256\235/plugins/debug/styles/images/variables_off.png" "b/\346\267\230\345\256\235/plugins/debug/styles/images/variables_off.png" new file mode 100644 index 0000000000000000000000000000000000000000..de5c50ee1ee628938dbec699b62e653f8bc77f7a GIT binary patch literal 984 zcmV;}11J26P)*1(oZ*BTvQdD!o%84Q!{FR!m33EyJjN#n<^b-Uf14j^TNYHMo? z%PVUx643@*fwDV0{x>^(xW%&4($ZwEMXflG#}h%sC%Ts0pV^?Uu5Ne| zshNN#0b(8V7q=#vx~lH7H#IfMrY)qP)M^_#!CS7iy281=*y!MEG=7LVFGhryLEp)1 z)`SYRx~!tI`X0-O2Jy(PJNGw`;E{TYIH{4Q()TqaS1Hgd(h6hOLe z1)93o>+J%h8!4OSB_VcBLO3dueKew6GO=iEwTTr{2eKPB!DNL`v`QE}UhN^@$u=YK zhd(~eGd|O1K8%gQT_JyCC=I)l4d+^Rz60SN!*_sF(|||WK&!2g+-llPVvDK&QKIfh z`@6&?+l0Xv{5kC$MC8B71Q2Fr^ejbH{ds)&g=u#?Qwbf0f$${@JHXVTw~QS|-z;Yj z2wDtXZkx}bk-~)%TvwRSc20AUPQPs+9$!(>m=EtG(Q%~pZDMYNJaJpOz&!DGdU|9< zlVT-dU*lzS4@%OCv>wNy@Q*I;uFlXzl3RBAcK8+AmHWEO|5O)_Ksru4s-EWR9K*zeuI_@r)w?;Z-cGCAwIcg zFjpz4(eT9;#!pm8S!wOc_!e;&kGX>|ev4J*TGYf + + + variables_on + Created with Sketch. + + + + + + + \ No newline at end of file diff --git "a/\346\267\230\345\256\235/plugins/debug/styles/images/variables_on.png" "b/\346\267\230\345\256\235/plugins/debug/styles/images/variables_on.png" new file mode 100644 index 0000000000000000000000000000000000000000..7b71df08d38cea64ce277477da9efc50a6d73e9c GIT binary patch literal 628 zcmV-)0*n2LP)Kx4y7>2iSD%F_MVCE@wC$?!^fCYFBClXDEh|Hab zZMYt@B3y=LSb~CB^OyzmlQ15QQJjH!P~43gISIW|hv2w#{$PC~&5N&=-;wbm?1G}hGes%-Iarf{_yEPQ2s@y77MV$? z9|Wp%?^SeJp+%n}G3dRJf%plda1TyH9mLLzx(5`C+Tcr&I=7N|WfSqVn@`L0L%jXw z-Ow3aGV|0yL-c07{zorQO3O{$)CR>?tR*=;ZQjePy*!q3=lKY?OkC9l8&<5_nzm$V zIBQ-@GojyrBI{3RgHn70;9-yOY8O{RrQy(K%W!#d>0ptv78 zv{E+*s&l_tx8OE3n5JbA#-J>mBhQBwP_zX)Np(;<_b@bSMboco7>`WLLzpp97rL4= z(`vm}zOIXXf{~a=fmQ`qe4SeF{!Ohp`dPGZpx?6a4E|aWYT(zthJS?va_01C^tk3A zdStN?8okgN6OT|ZQwZ-sXHu9tLQ{94Kbe!Mri2FmA!tcx{g;mR1pWZMIwU*~gajr4 O0000 + + + variables_off + Created with Sketch. + + + + + + + \ No newline at end of file diff --git "a/\346\267\230\345\256\235/plugins/page_notes/styles/images/back.png" "b/\346\267\230\345\256\235/plugins/page_notes/styles/images/back.png" new file mode 100644 index 0000000000000000000000000000000000000000..9c4a5946fc97ac590f718f72fa0facb4f064ef33 GIT binary patch literal 310 zcmV-60m=S}P){Q700004XF*Lt006O% z3;baP0002(NklW^>*KuHmx1DT#c$W*|+z%8J1LCBuTemKRDTD_U zE=6z!ARX8gp(sFC1Pl`kW|&Tb@08Er&-=D4MAOHXW07*qo IM6N<$f>ft`@Bjb+ literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/page_notes/styles/images/back.svg" "b/\346\267\230\345\256\235/plugins/page_notes/styles/images/back.svg" new file mode 100644 index 0000000..8c8b36c --- /dev/null +++ "b/\346\267\230\345\256\235/plugins/page_notes/styles/images/back.svg" @@ -0,0 +1,12 @@ + + + + back + Created with Sketch. + + + + + + + \ No newline at end of file diff --git "a/\346\267\230\345\256\235/plugins/page_notes/styles/images/back_hover.png" "b/\346\267\230\345\256\235/plugins/page_notes/styles/images/back_hover.png" new file mode 100644 index 0000000000000000000000000000000000000000..feebfbad47631f783ad5e947656aa863561d8f6a GIT binary patch literal 331 zcmV-R0kr;!P){Q700004XF*Lt006O% z3;baP00033NklE-%`D-{9ZBe+L==Gcxn>{+DJ! zRvJFwt?#yt&;jQ=nc{QuAB&&a^|0_eEuqJ8({(G`HhLAd9> z1|!4&{Xnb4n3x!ofR0=UQwR?zT#DcdKsvA~LQ#OOh=Jw51w15ScD^l9yz!rb(GkdB d%)!L|8~{Z^V#qg}?7{#5002ovPDHLkV1k*4l0yIh literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/page_notes/styles/images/back_hover.svg" "b/\346\267\230\345\256\235/plugins/page_notes/styles/images/back_hover.svg" new file mode 100644 index 0000000..9e86df2 --- /dev/null +++ "b/\346\267\230\345\256\235/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/\346\267\230\345\256\235/plugins/page_notes/styles/images/footnotes.png" "b/\346\267\230\345\256\235/plugins/page_notes/styles/images/footnotes.png" new file mode 100644 index 0000000000000000000000000000000000000000..be4ea25fb74062b9dbcaa746df7f6967b48b89c2 GIT binary patch literal 125 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4uAB#T}@sR2?f>5jgR3=A9lx&I`x0{JGME{-7@ zqRC%Aefo9YK`B8g&^E#{a#lowS?=9kqQ{PSR##UyKb3g-Y?T*C-MLQ literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/page_notes/styles/images/footnotes.svg" "b/\346\267\230\345\256\235/plugins/page_notes/styles/images/footnotes.svg" new file mode 100644 index 0000000..1651280 --- /dev/null +++ "b/\346\267\230\345\256\235/plugins/page_notes/styles/images/footnotes.svg" @@ -0,0 +1,15 @@ + + + + note + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git "a/\346\267\230\345\256\235/plugins/page_notes/styles/images/footnotes_hover.png" "b/\346\267\230\345\256\235/plugins/page_notes/styles/images/footnotes_hover.png" new file mode 100644 index 0000000000000000000000000000000000000000..11aedd4d57eb26473987a7edcbf2b334025973d0 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4uAB#T}@sR2?f>5jgR3=A9lx&I`x0{P~iE{-7@ zqRArfcK)8<=yJeiQPqZ`O(q);ud51YWu Y;Qw1dZku29JfIN_p00i_>zopr0OVXLsQ>@~ literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/page_notes/styles/images/footnotes_hover.svg" "b/\346\267\230\345\256\235/plugins/page_notes/styles/images/footnotes_hover.svg" new file mode 100644 index 0000000..1e22b69 --- /dev/null +++ "b/\346\267\230\345\256\235/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/\346\267\230\345\256\235/plugins/page_notes/styles/images/footnotes_on.png" "b/\346\267\230\345\256\235/plugins/page_notes/styles/images/footnotes_on.png" new file mode 100644 index 0000000000000000000000000000000000000000..11aedd4d57eb26473987a7edcbf2b334025973d0 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4uAB#T}@sR2?f>5jgR3=A9lx&I`x0{P~iE{-7@ zqRArfcK)8<=yJeiQPqZ`O(q);ud51YWu Y;Qw1dZku29JfIN_p00i_>zopr0OVXLsQ>@~ literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/page_notes/styles/images/footnotes_on.svg" "b/\346\267\230\345\256\235/plugins/page_notes/styles/images/footnotes_on.svg" new file mode 100644 index 0000000..378fcb6 --- /dev/null +++ "b/\346\267\230\345\256\235/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/\346\267\230\345\256\235/plugins/page_notes/styles/images/forward.png" "b/\346\267\230\345\256\235/plugins/page_notes/styles/images/forward.png" new file mode 100644 index 0000000000000000000000000000000000000000..d485dc9c7198edee925b5acde9f2e0eea275b591 GIT binary patch literal 331 zcmV-R0kr;!P){Q700004XF*Lt006O% z3;baP00033Nkle>eOGDLM9Mn%a$#bKxz?Ck;A=v_ZBxaG=RlH za$p7{BjbNFGqYqMy#uHy^z`Y|6G4(7zzm@n7!Djb@Xx}+V#D|E-(7)Xf$Hk&zi!>S zb%YV707i#~hKhds_U$y#Bzbmrc5%2}FavG<+`M`7IgqJf1-K-^3h+sS6o7(y3d~NJu^ + + + forward + Created with Sketch. + + + + + + + \ No newline at end of file diff --git "a/\346\267\230\345\256\235/plugins/page_notes/styles/images/forward_hover.png" "b/\346\267\230\345\256\235/plugins/page_notes/styles/images/forward_hover.png" new file mode 100644 index 0000000000000000000000000000000000000000..c6c914b1bbb6fff7926ee565b73033efb1689910 GIT binary patch literal 334 zcmV-U0kQsxP){Q700004XF*Lt006O% z3;baP00036NklAl;)@Sib|ftktUO`*bb1~kCL$iVREKf`}LhJXLIt4w;! zhbGU!^txDi9#B>1|NsB>Km7W*QDxG9c4S3NAkM2IrAh`y#zjDr96tQMzqsN5f3P@6 z4$NR=Wc;sdq?in(cK}Tao!obSB1jSh;3^L|GX7x}X{{2fJsSl@%dzyJTP1cu8O zMrJ0LH_4)(;Z|Ts7Al+rnF>~bOA@RApCm{D%fEmBrT`6s*a + + + forward_hover + Created with Sketch. + + + + + + + \ No newline at end of file diff --git "a/\346\267\230\345\256\235/plugins/page_notes/styles/images/notes_hover.png" "b/\346\267\230\345\256\235/plugins/page_notes/styles/images/notes_hover.png" new file mode 100644 index 0000000000000000000000000000000000000000..81afe8d0b2daa237be978028f4e789b19108bcc2 GIT binary patch literal 304 zcmV-00nh%4P)P0012b1^@s6UwFrL00001b5ch_0Itp) z=>Px#>PbXFR7eeDJap)g_y7O@XEHJ}N;6Oy0L^_0G%}5eRu+KV3w8J`CR+FaIY2<> zvmguD+1W87^C@8iqv1bHKNE~WOPVg0pad7pH$bnxgR!yEz+e>ui6aLIh>t6{v04ID zF9^~^Er8XMPoF-4T}o3+e0+S~Q_BL7IRhH;@HCFiN4O#wo7#c(39&9ERvlg9gf5m~ z%_rzN8CQg&i{lEuf%6G27ooeHSUz2RLKjO$Bc9ke2dkq?oY2J*MsjmEDd7e3$yHJ` zkfHV}%iq6$1DKeY@_{WqaWV|Rs|DBue);d;zli|Tjz4r=Vu70g0000;e} literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/page_notes/styles/images/notes_hover.svg" "b/\346\267\230\345\256\235/plugins/page_notes/styles/images/notes_hover.svg" new file mode 100644 index 0000000..88d93da --- /dev/null +++ "b/\346\267\230\345\256\235/plugins/page_notes/styles/images/notes_hover.svg" @@ -0,0 +1,9 @@ + + + + + + + + + diff --git "a/\346\267\230\345\256\235/plugins/page_notes/styles/images/notes_off.png" "b/\346\267\230\345\256\235/plugins/page_notes/styles/images/notes_off.png" new file mode 100644 index 0000000000000000000000000000000000000000..c572237b5f877cd07b6c90d8bb408b84482abd9f GIT binary patch literal 313 zcmV-90mlA`P)P0012b1^@s6UwFrL00001b5ch_0Itp) z=>Px#^GQTOR7eeDj8Dt-W@2ER$;iMc%|K=FpW*-0|Nj`%SZHMd$h}~PGyR{%L<=7v z2MEY~7G!~Wv!*g4^C@8`rDgwz>1Tp5Xi3w>5|rSA`6ekX>m7`Zjh;7anh;1FIY>Z! zT)~ai5@5Oz1Zkocz-q~lFaN+UrKu&$mQ8<8Eek;A3}nP3(l|CB;fi2vY6sRQ#JZGN zb##dnx>$lWpP=VtToH;cjw|>E&L_BBgzj=;`E>CKT`U=mcw*xmtd1^mLKjOI$<5uQ zgcsBQ|NpO&qJdPkAoE#%|6>SXW%{4b$jB&8ssV)511)$7G=Cxhfy_g#Vs&&800000 LNkvXXu0mjf2^@mO literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/page_notes/styles/images/notes_off.svg" "b/\346\267\230\345\256\235/plugins/page_notes/styles/images/notes_off.svg" new file mode 100644 index 0000000..63429a1 --- /dev/null +++ "b/\346\267\230\345\256\235/plugins/page_notes/styles/images/notes_off.svg" @@ -0,0 +1,9 @@ + + + + + + + + + diff --git "a/\346\267\230\345\256\235/plugins/page_notes/styles/images/notes_on.png" "b/\346\267\230\345\256\235/plugins/page_notes/styles/images/notes_on.png" new file mode 100644 index 0000000000000000000000000000000000000000..103d72c8f711f38fb0823c52d002c1ec676487b7 GIT binary patch literal 284 zcmV+%0ptFOP)P0012b1^@s6UwFrL00001b5ch_0Itp) z=>Px#)=5M`R7eeD`2YXEHxNGoVp;%@xn7Jw;t2x-gESD+3Oof_@}E|w!^~xYF+emU z5Fqm@VIw=9i4uc|)k_ykP=X8QGN4!A!PwYnV5ka##F2vp#K#rfSS + + + + + + + + diff --git "a/\346\267\230\345\256\235/plugins/page_notes/styles/page_notes.css" "b/\346\267\230\345\256\235/plugins/page_notes/styles/page_notes.css" new file mode 100644 index 0000000..92a7aa7 --- /dev/null +++ "b/\346\267\230\345\256\235/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/\346\267\230\345\256\235/plugins/recordplay/recordplay.js" "b/\346\267\230\345\256\235/plugins/recordplay/recordplay.js" new file mode 100644 index 0000000..9d39458 --- /dev/null +++ "b/\346\267\230\345\256\235/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/\346\267\230\345\256\235/plugins/recordplay/styles/recordplay.css" "b/\346\267\230\345\256\235/plugins/recordplay/styles/recordplay.css" new file mode 100644 index 0000000..b8eb689 --- /dev/null +++ "b/\346\267\230\345\256\235/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/\346\267\230\345\256\235/plugins/sitemap/styles/images/079_page_16.png" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/079_page_16.png" new file mode 100644 index 0000000000000000000000000000000000000000..2df83172f42607d792eb930da45e0031ac61876d GIT binary patch literal 2890 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 literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/225_responsive_16.png" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/225_responsive_16.png" new file mode 100644 index 0000000000000000000000000000000000000000..1ae8eddfbb064d4e30a26f9ab6fa8d1c2c7d6f13 GIT binary patch literal 2879 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 literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/228_togglenotes_16.png" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/228_togglenotes_16.png" new file mode 100644 index 0000000000000000000000000000000000000000..f0f5f0f85c1beaccabed5403824fa2f09d93c6b0 GIT binary patch literal 3829 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 DpUPl3 literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/229_variables_16.png" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/229_variables_16.png" new file mode 100644 index 0000000000000000000000000000000000000000..0d2198883491bda805cc77bc105c056f1486730b GIT binary patch literal 3829 zcmds)XH=6*x5p=f^d?e7!~=qWkzNlS5_%N~(k%3Vh!i=}1cONDfJhGpL8TWJG#Dw; zq)HHw-lU1Z0q&s)O39s^_ujkihqruqKiswMf34rM=b71iX3w5vt$E@vnH#V&on`_6 zuo@ZaT0zS}g@Fz}f7zlqL&NB2Xnz|3=95$q0RQ+D08AEMX!NB^p1y&;w>^FR1dY&W zLB9ZB53if<00fT{tg#sDWgd;)>1~ur94_6&*NU4#&@e)ntd(VG#?rHU;=O&@&| z152i%yrm+Jr4)7c#Fwa!w)WWtDeXum5kHuBjhoQzLtzBii%?g;c&>@Q5g>vGnHfNn zS#FcenOF+@3M%Ic0`~yX6qx#}2?LG`Xon`Fih#C00!PRewFddLz^TX8Wgc9T1Wsc2 zz77H$VJ{~P0UXnXxDolOK=7n{oG$QG0~LLj6ZC+c4B+xGX;T5Cl0e4D*256ItOZSE z4(4jWzyf3}oAziRz)T&B@@}MORl`9qnvYb znLk?WEBDg|U^XzK|42f*<}^-?4(D_9^!z%l=QZa1-*yu{s@b*Qfc)ig+but8ZS)Er zlE%gs7Zyg1+fa_q-L~OJ*p}-}wud)=M5rI^?tE#S6N!|&8fieg_oe0IwrSy+zDJA? zTqeJ!7#!3xQw{_M&$Su3knE6L^Ol_c$-4NYExE#T@u)`^KAaz*xXsN-?9*t@D1w(a zG!bE`k|kGNX}+6?ao7bm&FuoPS?AmQS)73e=NUEI7ev|6IyA^X4{#nvkNg3+rYj8{c0U;scjKN9&;hkv{IltdHVndak@&CCZ*N)J#XZ7nDc6q6h7On}pciu)+>nBJEH zNGIvf+5!qqmYy+ber!@LHgDN9{MdgwGvqak*GDqa>U1)kbQT(qL%1Z^2`4k~=0xua zH5<}$CW;7l#c^4lGf7o6l(kC02-+A5Y-$7?Q;EHz|1MRn6Uf~^h^aS_O^>X$)cDNu z22CnaKK(%dDf1_{Kv{eWPk!#FfY+xrl9URTK9zg2kEdv&J7k)^ouZd-yD1~p-imtl zs{~`3YtO556)ffLr(a&Kps9=BaqW8*M9Uee*Tkqq8-x;cKC5GBXKH6YYFHw8MnvJn zIHNKn%>&C8v2$r9Ca*=`o%qpq%0*5#*3M8uc$hQgq%=oZ9J)ja0@fevDRzA%b zJnhNrx$E`fTj0ABQyFK?vp(4l^eh{E%lbyM9mK*K!yVNThZX0`Jw<;C%NKO&MYd@X z-(VtN2S!F&b~Sq`hdsyF#tunD-sMj1X38+m5Y6C6N@GgPipr+Tm~FOfdN3)a*Q~>< z^ljv==SvwsXO`QP5iYG-^IKy})k+Q;hw*gwt){IO=;xOCuddJ6w+k}6 z^3?=O2zj%X$NUzl*e3d_ckJ#RWL@^5KwY9nS!sa^THaXRw#I5J-9w9hKHGoqaiBTl zl6Y~}Rz$)y*T#jp3;ab2rX*SSE8b<9S($d_hUJ#!2CEH9RcpnBq6WP>`~65ZoepEM zD`E!N6!LMxlJ%JNR54RAkC}$*PL))dcOid4oo>+kTgB_yd5za_d8WR_(;*E@KhK0q zA7T!DeirW-u-MVnu!zu2u#iuwe^B)IRTq%%nE2BYeYI5^UFe+QoHhF(mDI2PY)Joi zefA`;_AB!u^FHl9?axH%M1@36%vQ|S@m6M}q6rR}w1E57$-J6`v?3nWveT z=M7_9U;at#B9_+jy<8lno2VlC5W}6ZF1*;<4^^$}X$@)N@4|mS)SzdL9b+pOa1e;N z{W^e4^|I&Ta(+eRxA>%z$5n+M0h{V2G5|(zAPPMHZd0AT+RJQB9!K?XQGvLX*=DfP{wA{4)^^eL; zwVky+7OlQ{*Q009_k<~Klu$}PD8`*fU}@qbbs`;)?eB%&6?&hnr8?pMy?Sg-Cn=w# z!>yBYzw-WKbES}H=N}I%g?5*+$*E*7w&+U{--bWYJAZXfY>i+Mi;j)9jnPW>i?ci3 zFPo(p)IW*7J)`?mH&b^y7b|O_@C<2~X1b z&67drlbJ$V1X{4?r2Ccn<3`a}kY~*|4UuM{kN!xlR}2yPAYUl4NO~Yv`mo-V)pROX zHID~>N6<%3L$yIR>QU-Le^i-}SsD?$g8k}or>DX_y87tDt;AaCvl;YV-Zc*^j@wHz z5m80oFb?7)Ncw85yRFCj-uP~n%<{a8y=xz9x+fkgKi+skS>tTsoP9(rj4`p56tMf+ zP;o=0THQZnf@z-n_{EsZbQS7v6NpHkA&c@g+pMaH2GLM6@5pP--S?Z{AiP(ZZI~9L z!&fIq)~;IEN!!o7asC-Y;Me4iPpIOW;LYN`H!40EyvQHx+xC&tt%2 z`RlY~o+DdkS=QGqwp*-Y@2c4Z_B3$YaQT-)O&PSF0+%Yo9UzO(qK*+0B89eQ9e@eBK7 z1$Fxn<1I{=*ZA`N!8GhDdY8n!}xcR%dz%~yp{HVpv>cBnM>i(# z-DnER-|C+<*rkh(>N`r^NnuAHPsvH?iD8Xd&HGhTMP*Ja;Bfh%7~SXACz{85^z^8w zikC+^VsB`5gxsIqUy!w#mG<7}ZsFld(<qFYm842TcYEY&@G` zw^+C%XC6|3>Uzq5t<2AUr%g0$?t` zLmKgTJer!<|LP;bK0|8X-xIZdv~VC5;s8OxKu2gBAvg%UxB)N7KNT%p;SdJ8La$y( zGNcQ_3b_NvW~i%RvDklfREWQd2p#)jKoW!p0)Gym50V1;mqPrv2h2hqw&C6RF9pI$ zsdWL=3=oL_ar@ioe?9*iqqbo%HIsITGW8v59fE|DEdR4D^&_m=PQ;^RPYQGK4q5|5#D{6Ms)N>%rkOb&F2>A}%o)D_i;R5h` i?jP&_!Ji2pFohC*)4oijoZv>?sga(!ZWYSu{(k~8|Ap@W literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/231_event_16.png" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/231_event_16.png" new file mode 100644 index 0000000000000000000000000000000000000000..1d763a6e431b4665f4335a35a76628f6110fe995 GIT binary patch literal 3829 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 literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/232_search_16.png" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/232_search_16.png" new file mode 100644 index 0000000000000000000000000000000000000000..4fdfe787c8d1024a5ced57032a5eed8283134833 GIT binary patch literal 3829 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 literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/233_hyperlink_16.png" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/233_hyperlink_16.png" new file mode 100644 index 0000000000000000000000000000000000000000..bb8b282641e777c0f6e6a6323d3deeb3f5c49c15 GIT binary patch literal 3829 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 OS1~oTGAKv6-1;YOQetTU literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/235_folderclosed_16.png" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/235_folderclosed_16.png" new file mode 100644 index 0000000000000000000000000000000000000000..dd7d132dce2a9539a723bfaf6e8ff8b9350e58f8 GIT binary patch literal 3829 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 literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/236_folderopen_16.png" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/236_folderopen_16.png" new file mode 100644 index 0000000000000000000000000000000000000000..6e46b5855e4ece3557bba3aa445703b1fd51c7f6 GIT binary patch literal 3829 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 P00000NkvXXu0mjfEP851 literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/flow.png" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/flow.png" new file mode 100644 index 0000000000000000000000000000000000000000..54b9928d3bcd12e8659992319367d4b24208c4a7 GIT binary patch literal 391 zcmV;20eJq2P)Px$K}keGR45f=X21dx(=y|YjLeqn8ymm9aPG_%bR~?)0tpEj3XH7GvshS|Tn+T~ z7|vg~#PILm->rWb{$wqhHR};fEi;tCl$4U4&%n&IMpi~jqcAs%!NtjeL0?as;m*AW zYF|HpO*Jq!`+DK*>C-^<|G}CP)3RqVGBQ+2OG&U*SC%pe2?>JD65!`&u(C8~ICtR^ z+m|n2JPnOZrOux_y&0^D+1PN0*gxhUpTB&zzH;?Ci;A)$10NqB!=uMf7^X~{$?)Xq zv+s-y|LgAEzE=I1k%*^6wXaMrlMTWnB|L$V=^FMRmyy^F#USUAd z1QSe1%}!!sWSIMp;a~KES<{!n#0k<#Y1#jADT3RCPZ3P>yjfG>>cL`!G$G4_bs`I3 lm + + + + + + + + + + + + + + diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/folder_closed.png" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/folder_closed.png" new file mode 100644 index 0000000000000000000000000000000000000000..bb122c453ea9a5d476dc08788fbc05e1c766316d GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^{6NgZ!3HGvIz4{^q!^2X+?^QKos)S9 + + + + + + + diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/folder_open.png" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/folder_open.png" new file mode 100644 index 0000000000000000000000000000000000000000..3178cbae1b1e8162ca4e813bace5c05f24e0ecc8 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^{6NgZ!3HGvIz4{^q!^2X+?^QKos)S9hWbZ+c + + + + + + + diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/hotspots.png" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/hotspots.png" new file mode 100644 index 0000000000000000000000000000000000000000..19fd0047947553d8cfd41c7ddd9ffd725a794153 GIT binary patch literal 549 zcmV+=0^0qFP)5XMb%Q9~3gRD@t-6U0K0Xk%q1B?uv}LIlAs+yz9m4H~qu6Cs7c#NUc5OV|r&CuCum*_rvixtZB(Yipg> z1X>gL{}XUDYatSe^w#V3b!3t}Kf2^_I83+Oy_rg-9-3ig%(g%%6qP2>3E>{m^Lr6FFG(}#JL-Iy+c-5yZ0C=4w@#XuF zCerEjn*?PtnG5V0q_bA5tx3O~wksfJUiWxBTRLDqpTEKXgpBLrs?Sg_itWdKP9~GD z(iaQ{Z?P?>(|H^S1gGFR1h9c)lUJjFf03-NfogGFECE305(Q%Jm| z?P|4p-WU^i+y5XO4$lHUL_83`le>l8iCz^zd59J8A9%gqb9VM2{ZiW&5DBzDj1o_A z0x24XvB8(#V}BhMK9|jAkL6vbn- nyZ^cXBqxaF^ZCwngpIyWWJJ9EV|Ls@00000NkvXXu0mjfOy}=? literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/hotspots.svg" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/hotspots.svg" new file mode 100644 index 0000000..f35fe35 --- /dev/null +++ "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/hotspots.svg" @@ -0,0 +1,12 @@ + + + + hotspots + Created with Sketch. + + + + + + + \ No newline at end of file diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/hotspots_hover.png" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/hotspots_hover.png" new file mode 100644 index 0000000000000000000000000000000000000000..c50636aad9ed470c0157556336895eaa5fed7e7e GIT binary patch literal 598 zcmV-c0;&CpP)v+`~EF zcfNDKdje4TDh^Z}`2QWia#v_xJkYN2at4WB073^4ntVoF0_Tq=eO5WHtd$hd467ID z`ZEDM20)vE2|)4^K`kQw=KR=cKwp)ON}WPga3;?-M@=BS#RhkMGN|jxfZtsuu%DYB zBf)ZGDAB3n7w41$jxEmQJhgEW@J}U2yuT#r_>I0H1imDohZ)LD%Y3O*DUkIXsm@Ic zD&oncFUt8n{`IKp#W|%w_Caai9P^(`u*ZnUJd5#<9wX5=OC+#L4Ds8n%X+C(E#Pbm zKx5}us+L3q40AjTl-YbAGIzkH0Ve<3BRi|e&0I&j=76Gi!E+kCUB zW@EoKk1Yz6Yufa|e3HI`9}bQuAAj_qeeLIKNNFL{0)n<8em-Pegg5P3K9LKQ79CFL z2_PC}4BBL`oTbbQ?~*kGAU@r0z>qL+)nIR%@A;oKXTUOF(~|WxZQIi<=1jKbs&>t# zQ5q}XVzzUIO#JBk0+|8E6*pjY7MI9+EQbTiD%x(@Lyeo^#74I#8 kHDV1BzO~o-zT8FN25+*fF!1EBxc~qF07*qoM6N<$g8zF8IRF3v literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/hotspots_hover.svg" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/hotspots_hover.svg" new file mode 100644 index 0000000..45209d2 --- /dev/null +++ "b/\346\267\230\345\256\235/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/\346\267\230\345\256\235/plugins/sitemap/styles/images/hotspots_on.png" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/hotspots_on.png" new file mode 100644 index 0000000000000000000000000000000000000000..c50636aad9ed470c0157556336895eaa5fed7e7e GIT binary patch literal 598 zcmV-c0;&CpP)v+`~EF zcfNDKdje4TDh^Z}`2QWia#v_xJkYN2at4WB073^4ntVoF0_Tq=eO5WHtd$hd467ID z`ZEDM20)vE2|)4^K`kQw=KR=cKwp)ON}WPga3;?-M@=BS#RhkMGN|jxfZtsuu%DYB zBf)ZGDAB3n7w41$jxEmQJhgEW@J}U2yuT#r_>I0H1imDohZ)LD%Y3O*DUkIXsm@Ic zD&oncFUt8n{`IKp#W|%w_Caai9P^(`u*ZnUJd5#<9wX5=OC+#L4Ds8n%X+C(E#Pbm zKx5}us+L3q40AjTl-YbAGIzkH0Ve<3BRi|e&0I&j=76Gi!E+kCUB zW@EoKk1Yz6Yufa|e3HI`9}bQuAAj_qeeLIKNNFL{0)n<8em-Pegg5P3K9LKQ79CFL z2_PC}4BBL`oTbbQ?~*kGAU@r0z>qL+)nIR%@A;oKXTUOF(~|WxZQIi<=1jKbs&>t# zQ5q}XVzzUIO#JBk0+|8E6*pjY7MI9+EQbTiD%x(@Lyeo^#74I#8 kHDV1BzO~o-zT8FN25+*fF!1EBxc~qF07*qoM6N<$g8zF8IRF3v literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/hotspots_on.svg" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/hotspots_on.svg" new file mode 100644 index 0000000..73899eb --- /dev/null +++ "b/\346\267\230\345\256\235/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/\346\267\230\345\256\235/plugins/sitemap/styles/images/images.html" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/images.html" new file mode 100644 index 0000000..e4cf5e8 --- /dev/null +++ "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/images.html" @@ -0,0 +1,22 @@ + + + + + + +

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

    + + \ No newline at end of file diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/minus.gif" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/minus.gif" new file mode 100644 index 0000000000000000000000000000000000000000..3284f66d35a0cf19544b53b8f606b6294f9178aa GIT binary patch literal 830 zcmZ?wbhEHblpIdXyLqfe{x1ia%Kx85sUE=zx3<$`cG6(hUDOWjr=K cIKaRmtoCPl!NLP=tg>z<9vdI+Z(y(n06TROegFUf literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/note.png" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/note.png" new file mode 100644 index 0000000000000000000000000000000000000000..0a69ea731f5bb2bbbc6fa2d2defdf05978b015db GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^U^WLEkTt>lKP!-8EDmyaVpw-h<|UAm;OXKRq9K~> z<8$`bsS_t&9Bp9#^Z$Rnw6LP9!e0eb9fRg)XJ?(_NLIe=nR)ZSV~tvhV@=MEP6bzk zy9T@`wk^ + + + Note Copy + Created with sketchtool. + + + + + + + + + + + \ No newline at end of file diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/page.png" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/page.png" new file mode 100644 index 0000000000000000000000000000000000000000..a1bc017e40252de2125d73e75315dff1e58e225b GIT binary patch literal 205 zcmeAS@N?(olHy`uVBq!ia0vp^U^WLEkTt>lKP!-8EDmyaVpw-h<|UBR?&;zfq9K~> z<8$`bsS_t&9BttI_c!^6_{M~5U#==>s>yU6DDvUy@fM!6*~UTU*pe-8{wo~Y6B#V& zXu_kiB;~5Hp`n?9!Jq$ZBE{)Vo(nE>Kl91{^Z$Q5_XQoj1$V^ea5+jnKR+*y+puAx z{CcMjB@W9qB8Qk|ZnodJ;q(9h|NCveOp!cG*ccAXQLPfV9pD6X5`(9!pUXO@geCwn CeNAlu literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/page.svg" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/page.svg" new file mode 100644 index 0000000..c690652 --- /dev/null +++ "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/page.svg" @@ -0,0 +1,8 @@ + + + + + + + + diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/plus.gif" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/plus.gif" new file mode 100644 index 0000000000000000000000000000000000000000..373f06013556ec22a3008c4265beb71ae0a65461 GIT binary patch literal 834 zcmZ?wbhEHblpIdXyLqfe{x1ia%Kx85sUE=zx3<$`cG6@(lkuc@#Dz f9AseO<#So_LEfp2P2MTSVq((aE_P8i76xkoQ@;=$ literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/share.png" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/share.png" new file mode 100644 index 0000000000000000000000000000000000000000..88c746239e9fb5b7f99b11a58788a599b5aa5fc7 GIT binary patch literal 425 zcmV;a0apHrP)75{}JoS|J0=Oy1jhyYn`q(GY_Jg9HEH0j2K44*mnJ@Ce(sn-;!E({ybzne0_n_0+;y`GDfUah#(#j_(-AvdRisj-qI$ zD9X$7K4AB*>uzJh>t&96z34xqHnSU=^5+GFbt}NAw2+7(3JbXDkrey z&@|0s-2P%Zoqh<_K?*IR<~+}7e6r>Sf72CV5S}CXRLep-fv)Rw*ivYkb|w?!@zMiu z+fOuJhGF>56Oduj14sbApUQ-~c;Or1fqPvb%d#$g@gt+L>g?=E^txeBE$+5&z?o@T Ta0K=#00000NkvXXu0mjfJI})o literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/share.svg" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/share.svg" new file mode 100644 index 0000000..c628e6b --- /dev/null +++ "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/share.svg" @@ -0,0 +1,19 @@ + + + + share + Created with Sketch. + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/share_hover.png" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/share_hover.png" new file mode 100644 index 0000000000000000000000000000000000000000..d310eea789a5a50cfec073b3d3d7944171c65f7f GIT binary patch literal 457 zcmV;)0XF`LP)&7i2l#;UkXJW ziG$Yyn7S{2|Fr|z(qKL#!vdgB1Q`A^dT=nZE&z++A@BwfNT0+0|3F7D#)8<4ObkVD zi;|82@)ZDUy8$62}J!`ry{3ds4t8#SL`zj5kHf{UF0$ + + + share_hover + Created with Sketch. + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/share_on.png" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/share_on.png" new file mode 100644 index 0000000000000000000000000000000000000000..d310eea789a5a50cfec073b3d3d7944171c65f7f GIT binary patch literal 457 zcmV;)0XF`LP)&7i2l#;UkXJW ziG$Yyn7S{2|Fr|z(qKL#!vdgB1Q`A^dT=nZE&z++A@BwfNT0+0|3F7D#)8<4ObkVD zi;|82@)ZDUy8$62}J!`ry{3ds4t8#SL`zj5kHf{UF0$ + + + share_on + Created with Sketch. + + + + + + + + + + + + + + \ No newline at end of file diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/sitemap_hover.png" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/sitemap_hover.png" new file mode 100644 index 0000000000000000000000000000000000000000..3aa5667ae038186ba83e5af5beca42551c95bd40 GIT binary patch literal 571 zcmV-B0>u4^P)X1^@s6BEU{300001b5ch_0Itp) z=>Px$^+`lQR7ef&l|4%XK@f&>$t7ScR18WGR1__21>2Ype}J|4BW%Ssm0~GaSc-Pq zCov{qDK=uGh$%!tMQjxE=`-PWxrF2Hf+8tgSY~$KcV>2H=k|<%k5Mj{v(Pr(sI68j zn@A+K+&F>-y$BXQ=fyJ&W8RA+xZi|+V)^3yC-haOUP%2}Qd++0bqYTmiD7yL61>@L z?gWFuJJD(XC}KlšzM1gZE(rXxAgl;^a&yPkTkyo)-tJPR0lX>grxUKv14&8R# zE7nocQmM2}fOYOEVg+hB1QeeU%ltI!QN4&A>&I1}O7K^b^DD>ix;K!y$ zqY+Oglg|=JcPU*spd!<8OHA3F(-<~Q^IU*>y}r!hJ`{-)>59M!VZRj29$P0=P9pKU zN~KbDyG`lRrAlX0*KS?PZ>>$O)oQwuf8M1AJD%tG6O?9*c`RF^<}2uk#(g@Su86Hr zD9m!llbn7Cd1CQarKFU$!b$Hf-W2$Z=#=tIBtC1*CwPx0AMq77c|G*NAtwuh-6GmQ zRyK9PdR&uGRN` + + + + + + + diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/sitemap_off.png" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/sitemap_off.png" new file mode 100644 index 0000000000000000000000000000000000000000..02667b68963925347dd4d25a5166ae6926d9a1e1 GIT binary patch literal 639 zcmV-_0)YLAP)X1^@s6BEU{300001b5ch_0Itp) z=>Px%IY~r8R7ef&mA`8gK@`W|o0-+*L^K$bAS4nog{@$1lRv;x#S&ReL$|Ulr)ki5|Tm`R76BgF1z#c-fVX7&O3KE5JQR_+|BIw`ml+m62oK#5h`0sgyrUsH97Kb`0l>qFbWtDhwOla*%ncfubp6_2KFoO!{i~>~?&4RsY zxuhnb&Dq)K>!RI$Ffn8_4a?jBzLAl+JIs9o+WBYSs literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/sitemap_off.svg" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/sitemap_off.svg" new file mode 100644 index 0000000..0d562f4 --- /dev/null +++ "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/sitemap_off.svg" @@ -0,0 +1,8 @@ + + + + + + + + diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/sitemap_on.png" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/sitemap_on.png" new file mode 100644 index 0000000000000000000000000000000000000000..a40bb3507e84764aae510a40f8dfca1b516d6827 GIT binary patch literal 445 zcmV;u0Yd(XP)X1^@s6BEU{300001b5ch_0Itp) z=>Px$cS%G+R7ef&mA^^@K@i68Ob|>8m530;D2f)gg4hUo5g)>Lh?Qa)NRissNALw~ zErJA7hye?+2!asL-z0N!5Lf3gUX_7i{(bw+-rU|^6gebGl2i0IX*j5&IS&ZTjsv&r zz_=TFxLg?T6S~MepjkuDlrmwwBYk(UdN5JZK_rlK^iHuQ?1}mp*jM$h)K1s%^;gUd zP|3>f9cfnHAU^kovE2%zIwL+t=QW?$y85zaS^a0M92U!C{WoftaU7@b{1ZsC6^c*j ze@K<4eId4|bis5wz?a>9Crc!+wNS^ts4vD&q(FS5HOoCt@r3K<^x2K*nhDN*N)6vu zN|O7bDY6UskFBAr=`OH!@rp=%|8fW zfQF + + + + + + + diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/views.png" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/views.png" new file mode 100644 index 0000000000000000000000000000000000000000..8c2289413b6965ca0bdb7885471705801517b601 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEa{HEjtmSN`?>!lvI6-Xo-U3d z9=yp360D0A4WyVBD>@jkNNimB;nSyGoFd_e)!bWd{Lj6;&G6urgOUb}S(kNw@Pveg zJ)2=u`N_W~E1~HB|NrS}&(UN1#gUzKV3}BK z&oeuTtqis&41bvLE3Ns-a9A>cF=i!?3h$Yeh^-gzurs_X7SnVW|MeW`CI(MeKbLh* G2~7ayc1)B2 literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/views.svg" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/views.svg" new file mode 100644 index 0000000..04f1224 --- /dev/null +++ "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/views.svg" @@ -0,0 +1,12 @@ + + + + views + Created with Sketch. + + + + + + + \ No newline at end of file diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/views_hover.png" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/views_hover.png" new file mode 100644 index 0000000000000000000000000000000000000000..a97d9a62ec48d1ce69b40d83f39714691531ecfd GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEa{HEjtmSN`?>!lvI6=2o-U3d z9=yp360D0A4WyVBD>@jkNNijw@N#eY=l}ozXWe+h(Pe1#uReOs5td-~^aCs_d^bNZ z4w&HE`PfhHv42fgLXm^KF;ne7{$uSIBXlc**DT=+`XIKfi)q$AN0mFp-|fwg@6!!D zHcMi|N>}m4JNeyo9r%lQ?9MiGWZNAmU<+Xg*JAc$HkJ&_HTllSVAUwKQCYD)3g|Qj MPgg&ebxsLQ0Mye-8UO$Q literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/views_hover.svg" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/views_hover.svg" new file mode 100644 index 0000000..d3bf5f5 --- /dev/null +++ "b/\346\267\230\345\256\235/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/\346\267\230\345\256\235/plugins/sitemap/styles/images/views_on.png" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/views_on.png" new file mode 100644 index 0000000000000000000000000000000000000000..a97d9a62ec48d1ce69b40d83f39714691531ecfd GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEa{HEjtmSN`?>!lvI6=2o-U3d z9=yp360D0A4WyVBD>@jkNNijw@N#eY=l}ozXWe+h(Pe1#uReOs5td-~^aCs_d^bNZ z4w&HE`PfhHv42fgLXm^KF;ne7{$uSIBXlc**DT=+`XIKfi)q$AN0mFp-|fwg@6!!D zHcMi|N>}m4JNeyo9r%lQ?9MiGWZNAmU<+Xg*JAc$HkJ&_HTllSVAUwKQCYD)3g|Qj MPgg&ebxsLQ0Mye-8UO$Q literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/plugins/sitemap/styles/images/views_on.svg" "b/\346\267\230\345\256\235/plugins/sitemap/styles/images/views_on.svg" new file mode 100644 index 0000000..d23cb1d --- /dev/null +++ "b/\346\267\230\345\256\235/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/\346\267\230\345\256\235/plugins/sitemap/styles/sitemap.css" "b/\346\267\230\345\256\235/plugins/sitemap/styles/sitemap.css" new file mode 100644 index 0000000..d5401dd --- /dev/null +++ "b/\346\267\230\345\256\235/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/\346\267\230\345\256\235/resources/Other.html" "b/\346\267\230\345\256\235/resources/Other.html" new file mode 100644 index 0000000..d0fa808 --- /dev/null +++ "b/\346\267\230\345\256\235/resources/Other.html" @@ -0,0 +1,35 @@ + + + + + +
    +
    +
    +
    + +
    + + + + + + + \ No newline at end of file diff --git "a/\346\267\230\345\256\235/resources/chrome/allow_access.gif" "b/\346\267\230\345\256\235/resources/chrome/allow_access.gif" new file mode 100644 index 0000000000000000000000000000000000000000..11a608618774735a84ca8ddbbfab8f35ab5d0b4d GIT binary patch literal 9726 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
    mg6tGiOL#e1G174j(gNiN~_6XQ z^EvC6w`>!R2NXlvBYj4fWu))5Ys*I34v&RiU#s<_KrWU7>x3`O9AEj>>*Thp+fk!DkL@0f>1il$m|bc-gq#%i1!EuRWFO(tJfEsk#4t)N}dS%Zp?v?G*^#D z4)W%RrpeBR!kqD(m`nzID?^C%m}GsZ0lsm zw_&mMvM4p?w{xj0I1EIF?$QaSZ|CYBMV5{|OP8#1hsnG>#@zT-{mKB#Y>tJGU%gPr zqI9w>GT8QI?BfF(+?P!2coo}vHpxEMy^k%NWd{wc&}+-}AIuFTuVgaUknQtA4f8f+ zr#r*Sq8-4IZF{Yo@B@ryH)>6`r3l xsQ#Frzi%)F?XGB}(vPGKA8&>-jV9EYn`P-0(Dq9zSE{U7Coj|Kn$ literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/resources/chrome/axure-chrome-extension.crx" "b/\346\267\230\345\256\235/resources/chrome/axure-chrome-extension.crx" new file mode 100644 index 0000000000000000000000000000000000000000..fde774394302ac94ab1c2cda2ef0cd80e1a3af1c GIT binary patch literal 31290 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⪻NTY-riMV0K(teNT=Q0pk~@! zzm5E9|06lPE7sd~G#TkX5t;Z-pL@hO6+kQbQYBX){`I%SfXnhmGr#*Uz`z2)yQsHa z9(#88DU|bjlUd#0=o_U)+Z9+|qldSW1j%Uk;-HhROEr4j3W*eWYyAMUJT_-5 zo*z{SbwkUfMvQL~+w5%s3gi&d@LQ`Y^MfD1TM!ziC;KA-^>_Ry)tIpty?b*HYa0K- z9|z8|iDUS1*88ClKNO4imJT-VE?&+b_-s9$92-YCM<(i_I}IaBYN}{I2S*gLu-Ng~ z)37SPsjyd4vR@lUTSb#-u}5qbe=sf^h?yy#D-QK3{9teDW*wMss#l+!7cVVO`hz4O z(@yz{D^2#vGc2merAL2BOyEs_^Jv`rgS^=HjJHNNF za{otm%D2WYv(G33`N-}!zechrRi%oQ>IDFtl=6a$;z8R(74gi?u}4ijpYQ1*Ddm*e zfXWqZ*rfzyaCkx=SSL&_$-l8UMqNUmgh;EzW)>cQuRs&g=vH()4>$Vt%=ON{buyFkvUqV9lRYV*L`%9XO2# zAWg3NQ$sW|FP^rDZ%ZX3n4S|9nThGZ&|Wo&1E!tVvv^u#zbYU^NPUoD*JFvy&X(el zaJmx?6wba}$fYX0_}PWFDG^SDpKVjg8EfoE<%P4jn6N@Xpx;Y+u?;YiRY)zfX2j)< zuEFq^p)TY*$Qn+6S z%NXg3BiT#hZ7_6NwVRjtxqIu@a-g{JrWM`tbx#I8&O(xvAcVm;$<#uk`DJ&uMr}9+ z8NS@a0(lmx;nzLV&#amXB?(6t2Q%&a>?{}k%N1z&zepecfHS~l(gFpS_esWaOjU)x z#3y~c8yNT16n&VCBz6{j@}wpZA9C0X^4+u+9S~+@%5HQxytH6Z7c58u^LvUA)*j6- zb(YAJpR%O-Txs1Q&m+LV{Ir^D>3AofuBOb=}No84j@r0@mw<6L;^vcM<{f&|$Z z|D%Vc@Wl4x7+$FJ$vBz62-ZnCZ;J{56xF~zRgeca_X`Pc^j-=JZQzg?(dm8#StvLwc298TI5y1qx# ze1nFL2l&s~aUcGy|L61Xa^?P2;jhV8|5+XS&;tI&(eaYS0BlL3Pq^@8=?R4 znEb2EU-!iRDYItsuQLC4hwQI1e;pzIDMRW0FXP2uEC01)|7Yc#hsytGtsY^Wdr literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/resources/chrome/axure_logo.gif" "b/\346\267\230\345\256\235/resources/chrome/axure_logo.gif" new file mode 100644 index 0000000000000000000000000000000000000000..0e2357c66726dea238d7bcff4bf66a45be812ded GIT binary patch literal 3101 zcmaJ?dmxi-8-F&NjfE)hzkV$#x#H>R6;R%H=9pjEv#hqZ zHhzs$i$&Vt>8i}klW%VIR99Ee&dzPS7AKKN9FkimCnrDkjy)ai82UInGc!|OUS3!K zATBO$^wThfLXk9Hxb(CHmfQW@>=2X5%6Kx?JXBRsP!JFhQ1#+bSXj93rBbA{r-*uP zWMt$-vuJvL;r-ayzj|M6KUmY{Al!GG^Q&}+N%4y}F4^P$7w7suRMOeew_Tq;>_z20 z++2L3-LHUK?Yi)Jp3fJY+L0f3cl-S4r}-~mW)?pG6_Gx_Fh4uD_?%??1;^OAbBo`OgygcciJwaS9Z|~mF?ChN6_NM6C#Ny|ZQ-AgO`tEwgII}dn z7*^#qJ^gX|^FmWo)0^SxxKfw2w6w8-p~s#Hku^cB2dhd;OFvD|9J$PqmJ5c>Qx+#? zW+ukdNK(R_U96mwUR3UqK>~mzI_=O9-0#PBeuspv&%dn}s|&Ba9_L2ebCF zBkZx`HFvRSHq#!v%fg-D&U0dgvRw{DvAhm!_huXjW7sgUn;p=0LR%q+$6*QRXdx#& zf^RFd$I_YHV3w_Hz8uD5(cd6~FncU{`2l)4rxQ1dg|@&EOc(@9BHGd%M>HqcnA;em zO$kH-o@k0ESeXzBwiZ^l1S0zHft6*8VusjyQk?(JC0p5JLj?k!Egl~m8;grI!*Qeb z;)ymkHh6+5-qh4YhA`ppj}Xv>CJ}ty?+O$apAp683E12S^s*v7m>Vsy$I2@GPYWF0 z57`Jl?pr%J2A6{u(s_6yjTKv13?F=O``*{jF(R_Rnjv`l;UET;|VfvHmF+FDnMWytV(e z)!#!h|13{`7+1FVVSQGF%bvQB1Zq^F%Yo|=;U>#?MxM=(wyL<{&)kvwh$Cp>H)J9KXdi^&M42krS~cVK|OA8nVfkGGen$Iczw z-QBirb#>X|Ors#ayAPwq9+g~$5QSBB4f!XR-V_txr_V=$HK43|KOwM$*<3M@55Rh1;w zR^58h**)XaVEg91iW(YWfXiw#kF7b$;D_+GgW#p?3G)%yrCO=H>b^r7ldes7)XTd6 zh?aNVRT~Fe@~9<){cfnrr&{aRQXseHf(y}IPd0A3-FFmanw&jy1euK7(+VcNmu{r_ z==v@WJ05B98MH4v-6_dw;c8WW2%Ony){#O%7#V53g2IbfN!w~)b&2owJ$zeDXUIc< zm*t&b`T6a%MpdyOePiPTt^L_M-kMVnE*cKTXIbf*nARcuFo8&tP@OYy1d6#IN%Hh0 zlNwhjNF=IIv#u!#RDr_E(>?$UkRqnsh+@699cUGv!Tq2IhMzQdA>!wW2Av2@_(VSl zTY;=!U689(FXJx2W1qA&I0V#FwhdZa6tt_)1QvZ8<9BKWQg!_kIToBtKFJ&ns{R=_S&uddp#~#*vov()u zGQ^;fl`e=pMG4^D&&+tJqp5vLTq1ooge3Kv6G_sdtNsm;o?6AMD<^QBREi|9pK9$l z27X7;jCTS<6W+dq0jt+9z_da$ja<~WN{ipoqOE^FUeRN|wJTqfx2f^kKsq2o!40lV z)Q1z;5$Xx)JNLrFs}YV%Rp%AT>x)z=+fbUZVT{i3TdD1M+T< zLu5Vx(ik+Zzhe)_An!Kh*sWb&PA` zMtX#kLsxRog2hYs*caj|j|^UBlkK3%*Bi|uf-8~IcZ>7TuDXi6$u1jiqnJoY3FAz`+`UZ4k`rD2)^i>ilaNTiBR;AJg zr;apoU=Vo5u}&Gw-{^Rs9G8&t2CK0@*}(ce*RR7-IkpKL0A4Tmt1g7`j)2n4_L7gI z)f*xwn#wkq*?VYTKy^V|sBKZm9U{Oy00lddPfswp0ep~bIHo@vWW2Hwwyvx6k>y0) zxt6Rgu&6=+&LdmkYfqTZ#IzT51GHmJj`D<};|LlF@{$QrP$tMhX`}G>xBVSrvXqFG zb-;L5(#k1yXOy?8(QvQVOZg2g%&KzQwenT2H;a^@XaEx4?}%v37RyOFLH>bKk*}fb zKVUKhbAXqqBuha`YJg&Iy4d{%DG5{=4XBjvz6F*-^-?j2@If&ODHSO(qf7J#sBmB# l2+`<+c9;^wf9ZhYm?9`UC=YC~t*6=l^Y!dU&S(JG^lyWj82bPK literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/resources/chrome/axure_logo.png" "b/\346\267\230\345\256\235/resources/chrome/axure_logo.png" new file mode 100644 index 0000000000000000000000000000000000000000..cd6f7271eb887988be5dc9cf36d06c571a136dc3 GIT binary patch literal 4026 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 + + Install the Axure RP Chrome Extension + + + + + + diff --git "a/\346\267\230\345\256\235/resources/chrome/extensions_menu.gif" "b/\346\267\230\345\256\235/resources/chrome/extensions_menu.gif" new file mode 100644 index 0000000000000000000000000000000000000000..1c8b1a16edc16ba2d84f48876afcfbd5993514b3 GIT binary patch literal 9308 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 literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/resources/chrome/splitter.png" "b/\346\267\230\345\256\235/resources/chrome/splitter.png" new file mode 100644 index 0000000000000000000000000000000000000000..8e354e7644418791467ed34fc22271e0de87a9bf GIT binary patch literal 251 zcmeAS@N?(olHy`uVBq!ia0y~yU_Jn3GjXs1$?0-icLFKS0*}aI1_r*vAk26?e?Dn=C?|oIg-h z({8YxH7Z-gX~*1V1`Y=XCV>V9mO9pNwae!iPYrTlW(12_u&&vf(z8=#)0L?HDVLV| z=IhGw-`SR%Uh{r#QqPmU^{+jiI6<^3FfelXXelgR^3n0x9RFJd@1h>Rn-X+H;`i@G s=PZSsY%V!x`@Y`g_wWFVdQ&MBb@06a5ad;kCd literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/resources/css/axure_rp_page.css" "b/\346\267\230\345\256\235/resources/css/axure_rp_page.css" new file mode 100644 index 0000000..6d69647 --- /dev/null +++ "b/\346\267\230\345\256\235/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/\346\267\230\345\256\235/resources/css/default.css" "b/\346\267\230\345\256\235/resources/css/default.css" new file mode 100644 index 0000000..1c8fdc2 --- /dev/null +++ "b/\346\267\230\345\256\235/resources/css/default.css" @@ -0,0 +1,207 @@ +body { + 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/\346\267\230\345\256\235/resources/css/images/images.html" "b/\346\267\230\345\256\235/resources/css/images/images.html" new file mode 100644 index 0000000..335d9c9 --- /dev/null +++ "b/\346\267\230\345\256\235/resources/css/images/images.html" @@ -0,0 +1,25 @@ + + + + + + +

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

    + + \ No newline at end of file diff --git "a/\346\267\230\345\256\235/resources/css/images/newwindow.gif" "b/\346\267\230\345\256\235/resources/css/images/newwindow.gif" new file mode 100644 index 0000000000000000000000000000000000000000..7b14cb0a0a06418c1c1d826edf1845036a7bbcbc GIT binary patch literal 112 zcmZ?wbhEHb6krfwSi}GV|NsAIn0sr+j2R#X3@H9&VPs%nVbB2yfYdTDn|kcJ^UwE$ zr|TNiwzE4^oz%IUSGFt)=SzQ;tJAnE!)AHuYqp&|fg6q`hN1x91EQ4=4yQ7#`R^ z$vje}bP0l+XkK DSH>_4 literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/resources/css/images/ui-bg_glass_55_fbf9ee_1x400.png" "b/\346\267\230\345\256\235/resources/css/images/ui-bg_glass_55_fbf9ee_1x400.png" new file mode 100644 index 0000000000000000000000000000000000000000..ad3d6346e00f246102f72f2e026ed0491988b394 GIT binary patch literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnour0hLi978O6-<~(*I$*%ybaDOn z{W;e!B}_MSUQoPXhYd^Y6RUoS1yepnPx`2Kz)7OXQG!!=-jY=F+d2OOy?#DnJ32>z UEim$g7SJdLPgg&ebxsLQ09~*s;{X5v literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/resources/css/images/ui-bg_glass_65_ffffff_1x400.png" "b/\346\267\230\345\256\235/resources/css/images/ui-bg_glass_65_ffffff_1x400.png" new file mode 100644 index 0000000000000000000000000000000000000000..42ccba269b6e91bef12ad0fa18be651b5ef0ee68 GIT binary patch literal 105 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouqzpV=978O6-=0?FV^9z|eBtf= z|7WztIJ;WT>{+tN>ySr~=F{k$>;_x^_y?afmf9pRKH0)6?eSP?3s5hEr>mdKI;Vst E0O;M1& literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/resources/css/images/ui-bg_glass_75_dadada_1x400.png" "b/\346\267\230\345\256\235/resources/css/images/ui-bg_glass_75_dadada_1x400.png" new file mode 100644 index 0000000000000000000000000000000000000000..5a46b47cb16631068aee9e0bd61269fc4e95e5cd GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^j6gJjgAK^akKnouq|7{B978O6lPf+wIa#m9#>Unb zm^4K~wN3Zq+uPMaW978O6-<~?i$)F&>d~nX+ z>vO)oJQ&&FVaKefeOt$qOR>f~^ebnN_=~%qdHEaS{Ou}E*`%9 zKPdOkfrN+ZlHSt7(uY{3{#;wiJb&Ugx1>W4qtrSDm(4hFaaY-$3p3x|sIU3`%J?Qj YcLn#R=pC)AfTl5cy85}Sb4q9e0MP_2(*OVf literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/resources/css/images/ui-icons_222222_256x240.png" "b/\346\267\230\345\256\235/resources/css/images/ui-icons_222222_256x240.png" new file mode 100644 index 0000000000000000000000000000000000000000..b273ff111d219c9b9a8b96d57683d0075fb7871a GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/resources/css/images/ui-icons_2e83ff_256x240.png" "b/\346\267\230\345\256\235/resources/css/images/ui-icons_2e83ff_256x240.png" new file mode 100644 index 0000000000000000000000000000000000000000..09d1cdc856c292c4ab6dd818c7543ac0828bd616 GIT binary patch literal 4369 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 literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/resources/css/images/ui-icons_454545_256x240.png" "b/\346\267\230\345\256\235/resources/css/images/ui-icons_454545_256x240.png" new file mode 100644 index 0000000000000000000000000000000000000000..59bd45b907c4fd965697774ce8c5fc6b2fd9c105 GIT binary patch literal 4369 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 oBo%DI*Kv;w;*%(i9W@f3_WCF#rGn literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/resources/css/images/ui-icons_cd0a0a_256x240.png" "b/\346\267\230\345\256\235/resources/css/images/ui-icons_cd0a0a_256x240.png" new file mode 100644 index 0000000000000000000000000000000000000000..2ab019b73ec11a485fa09378f3a0e155194f6a5d GIT binary patch literal 4369 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 + + + + + + + + + +

    +
    +
    +
    + + \ No newline at end of file diff --git "a/\346\267\230\345\256\235/resources/images/259_close_12rollover1.png" "b/\346\267\230\345\256\235/resources/images/259_close_12rollover1.png" new file mode 100644 index 0000000000000000000000000000000000000000..a19bf8a54afc34ad87b967b536ef7af11e156f82 GIT binary patch literal 3377 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 literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/resources/images/259_close_12rollover2.png" "b/\346\267\230\345\256\235/resources/images/259_close_12rollover2.png" new file mode 100644 index 0000000000000000000000000000000000000000..2f57c5dce469cc89bae9dd0f3870b5c9d75f2e40 GIT binary patch literal 3377 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 literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/resources/images/260_collapse_12rollover1.png" "b/\346\267\230\345\256\235/resources/images/260_collapse_12rollover1.png" new file mode 100644 index 0000000000000000000000000000000000000000..426621fc526424af53898a078bf2b0dc1bcec61f GIT binary patch literal 2812 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 literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/resources/images/close.png" "b/\346\267\230\345\256\235/resources/images/close.png" new file mode 100644 index 0000000000000000000000000000000000000000..b34c4532cd43e23fe88e704b51e4d2f2963de191 GIT binary patch literal 279 zcmV+y0qFjTP)Px#(Md!>R45gd(J>1FaU90+|K;cynAl|XE@ZbEl{aAU3Y5XD3}#Wvs$^8kDywWV znoI`ed>`fR>drY&efYcI^ZQ4P>$*+Mkv4yZoi?WLH4Y0XYvhvNMYoG5&TtGbDNLa3 zQ22EjoxaNCh_ct`gM}fK14`a7aNxOmBPe?m17rWlpr-~oq2f=BzPXJVlr8eXdFV`` z1O4_3sw(jAU6h002ovPDHLkV1ibLcq;$^ literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/resources/images/close.svg" "b/\346\267\230\345\256\235/resources/images/close.svg" new file mode 100644 index 0000000..3c3231b --- /dev/null +++ "b/\346\267\230\345\256\235/resources/images/close.svg" @@ -0,0 +1,8 @@ + + + + + + + + diff --git "a/\346\267\230\345\256\235/resources/images/close_hover.png" "b/\346\267\230\345\256\235/resources/images/close_hover.png" new file mode 100644 index 0000000000000000000000000000000000000000..dcbd3b65bc3cbcc15b1bff5bcb6103a27debc087 GIT binary patch literal 443 zcmV;s0Yv_ZP)Px$bxA})R45glkugidP!PxOC8oA2)}bif99%kxxa;H~2wen0L2wX~3Qe`Kqeupe zm10tDw5Een1eXX3MNldoy7(akzlK&w&U?s{iWQ5uT<-pNzuetpKxRAD3-F@{R!ZR@G z*mA17e*sO~9vO~7gFy2Dc>dIST;)9k{j_4SGAf6qd&bx_VsK>WsVpfdbm8-*(pW@} zJW$;fZFFd)wVcqtU_4PMxY5uct1||(h*+aPu6v&6i{gE|GTyJq4QiSQ5O?TKd7*Lt z4aO6eWknz~bWOqnAl|-Ud%2v+v=8i)grf8{Xx2Ej>4vVJ^7>Bu0pp^0C4OAGWfKG3 zlO*tH=P1c*hOS+8Ld17h7#Hbbq-ZSe&=eayrnO%g!csP)-SN1a{R$JsmgD9LlJ + + + + + + + diff --git "a/\346\267\230\345\256\235/resources/images/divider.png" "b/\346\267\230\345\256\235/resources/images/divider.png" new file mode 100644 index 0000000000000000000000000000000000000000..f7b738ae3aa3929f75868f4987bde00ab77727f1 GIT binary patch literal 110 zcmeAS@N?(olHy`uVBq!ia0vp^RzS?e!3HEbC!K!*q*&4&eH|GXHuiJ>Nn{1`RXtrC zLnI`V@9ZpIF3ik)m`#DLk)gc&d#!+4lMG+h41s%+_jDNi<|r2amOEGv)WG2B>gTe~ HDWM4fExR0& literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/resources/images/divider.svg" "b/\346\267\230\345\256\235/resources/images/divider.svg" new file mode 100644 index 0000000..767941e --- /dev/null +++ "b/\346\267\230\345\256\235/resources/images/divider.svg" @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git "a/\346\267\230\345\256\235/resources/images/expand.png" "b/\346\267\230\345\256\235/resources/images/expand.png" new file mode 100644 index 0000000000000000000000000000000000000000..31f8f45a05efde7d1ca9c85a657c96234bec2382 GIT binary patch literal 281 zcmV+!0p|XRP)Px#(@8`@R45gNl1&Z)K@f!}#4OmbVlfLYz;(C*N8kp2PT=PP#sRQr&z2=8U@Psb zPBYV)o}Nm+shWE4b<#-(K|v{{<}fX=<;#T2u!dhP8A|yHhe9BP*qm^nAI-d_hmJ^g zg|P+_mXgEdP+@|En;|RW~4Yf_f^Nj0i2bg48Tg>B0;8&V*-4W&m&KX&Xbu fg?F87%L;YuK6000000NkvXXu0mjfO`>pZ literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/resources/images/expand.svg" "b/\346\267\230\345\256\235/resources/images/expand.svg" new file mode 100644 index 0000000..a6a8692 --- /dev/null +++ "b/\346\267\230\345\256\235/resources/images/expand.svg" @@ -0,0 +1,8 @@ + + + + + + + + diff --git "a/\346\267\230\345\256\235/resources/images/expand_hover.png" "b/\346\267\230\345\256\235/resources/images/expand_hover.png" new file mode 100644 index 0000000000000000000000000000000000000000..4fdca83edc53849e438a8e43b66073205c430ca1 GIT binary patch literal 438 zcmV;n0ZIOeP)Px$a7jc#R45glkUvPnKorK`OIy>a9n?jg>*65JRh)!^Lj?ynp+jk*f3U$lA_z*1 zdP$+_q9{()ML}E?L0sHjx;SYa?9jSs+uZX~$Y5-Xc*DKB_ulur?;XN`rD@iPPsR#> zy}6c6-wtR6sb6uMu?b0rdq9{6kghbtiudbv@;yPjrWqMR`2i6pIdP2;8a~7`-LzKw z!G3{u_KMR80pSG4Ikyu^HnmRBo&};81U%G@a=sVr2S_`xqW*yY4hh0G(Xx_DA2}i= zld1AnCkjASMA+9^X~PRcH=!Bjm;`h#8f|V + + + + + + + diff --git "a/\346\267\230\345\256\235/resources/images/images.html" "b/\346\267\230\345\256\235/resources/images/images.html" new file mode 100644 index 0000000..6b26a37 --- /dev/null +++ "b/\346\267\230\345\256\235/resources/images/images.html" @@ -0,0 +1,17 @@ + + + + + + +

    + + + + + + + +

    + + \ No newline at end of file diff --git "a/\346\267\230\345\256\235/resources/images/transparent.gif" "b/\346\267\230\345\256\235/resources/images/transparent.gif" new file mode 100644 index 0000000000000000000000000000000000000000..35d42e808f0a8017b8d52a06be2f8fec0b466a66 GIT binary patch literal 43 scmZ?wbhEHbWMp7uXkcLY|NlP&1B2pE7Dgb&paUX6G7L;iE{qJ;0LZEa`2YX_ literal 0 HcmV?d00001 diff --git "a/\346\267\230\345\256\235/resources/reload.html" "b/\346\267\230\345\256\235/resources/reload.html" new file mode 100644 index 0000000..5f99f0b --- /dev/null +++ "b/\346\267\230\345\256\235/resources/reload.html" @@ -0,0 +1,24 @@ + + + + + + + + + + \ No newline at end of file diff --git "a/\346\267\230\345\256\235/resources/scripts/jquery-1.7.1.min.js" "b/\346\267\230\345\256\235/resources/scripts/jquery-1.7.1.min.js" new file mode 100644 index 0000000..198b3ff --- /dev/null +++ "b/\346\267\230\345\256\235/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/\346\267\230\345\256\235/resources/scripts/jquery-ui-1.8.10.custom.min.js" "b/\346\267\230\345\256\235/resources/scripts/jquery-ui-1.8.10.custom.min.js" new file mode 100644 index 0000000..a7e1293 --- /dev/null +++ "b/\346\267\230\345\256\235/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); + ANDROID = useragent.match(/Android/i); + + MOBILE_DEVICE = ANDROID || IOS + || navigator.userAgent.match(/webOS/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) {} + }); + }; + + var _combineEventMessages = false; + var _compositeEventMessageData = []; + _messageCenter.startCombineEventMessages = function() { + _combineEventMessages = true; + } + + _messageCenter.endCombineEventMessages = function () { + _messageCenter.sendCompositeEventMessage(); + _combineEventMessages = false; + } + + _messageCenter.sendCompositeEventMessage = function () { + _messageCenter.postMessage('axCompositeEventMessage', _compositeEventMessageData); + _compositeEventMessageData = []; + } + + _messageCenter.postMessage = function (message, data) { + if(_combineEventMessages) { + if(message == 'axEvent' || message == 'axCase' || message == 'axAction' || message == 'axEventComplete') { + _compositeEventMessageData.push({ 'message': message, 'data': data }); + if(_compositeEventMessageData.length >= 10) _messageCenter.sendCompositeEventMessage(); + return; + } + } + + 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/\346\267\230\345\256\235/resources/scripts/player/axplayer.js" "b/\346\267\230\345\256\235/resources/scripts/player/axplayer.js" new file mode 100644 index 0000000..f9cb965 --- /dev/null +++ "b/\346\267\230\345\256\235/resources/scripts/player/axplayer.js" @@ -0,0 +1,206 @@ +if (!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/\346\267\230\345\256\235/resources/scripts/player/splitter.js" "b/\346\267\230\345\256\235/resources/scripts/player/splitter.js" new file mode 100644 index 0000000..9bda98a --- /dev/null +++ "b/\346\267\230\345\256\235/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/\346\267\230\345\256\235/resources/scripts/prototypePost.js" "b/\346\267\230\345\256\235/resources/scripts/prototypePost.js" new file mode 100644 index 0000000..25da7e4 --- /dev/null +++ "b/\346\267\230\345\256\235/resources/scripts/prototypePost.js" @@ -0,0 +1,13048 @@ +// 8.0.0.3333. Generated 3/30/2017 8:15:37 PM UTC + +//***** messagecenter.js *****// +if (typeof console == 'undefined') console = { + log: function () { } +}; + +// sniff chrome +var CHROME_5_LOCAL = false; +var CHROME = false; +var SAFARI = false; +var FIREFOX = false; +var WEBKIT = false; +var OS_MAC = false; +var IOS = false; +var ANDROID = false; +var MOBILE_DEVICE = false; + +var IE = false; +var IE_10_AND_BELOW = false; //ie 10 and lower +var IE_11_AND_ABOVE = false; //ie 11 and above +var BROWSER_VERSION = 5000; +(function () { + if(!window.$axure) window.$axure = function() {}; + var useragent = window.navigator.userAgent; + + var edgeRegex = /Edge\/([0-9]+)/g; + var edgeMatch = edgeRegex.exec(useragent); + $axure.browser = { isEdge: Boolean(edgeMatch) }; + + if(!$axure.browser.isEdge) { + var chromeRegex = /Chrome\/([0-9]+).([0-9]+)/g; + var chromeMatch = chromeRegex.exec(useragent); + CHROME = Boolean(chromeMatch); + CHROME_5_LOCAL = chromeMatch && + Number(chromeMatch[1]) >= 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); + ANDROID = useragent.match(/Android/i); + + MOBILE_DEVICE = ANDROID || IOS + || navigator.userAgent.match(/webOS/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) {} + }); + }; + + var _combineEventMessages = false; + var _compositeEventMessageData = []; + _messageCenter.startCombineEventMessages = function() { + _combineEventMessages = true; + } + + _messageCenter.endCombineEventMessages = function () { + _messageCenter.sendCompositeEventMessage(); + _combineEventMessages = false; + } + + _messageCenter.sendCompositeEventMessage = function () { + _messageCenter.postMessage('axCompositeEventMessage', _compositeEventMessageData); + _compositeEventMessageData = []; + } + + _messageCenter.postMessage = function (message, data) { + if(_combineEventMessages) { + if(message == 'axEvent' || message == 'axCase' || message == 'axAction' || message == 'axEventComplete') { + _compositeEventMessageData.push({ 'message': message, 'data': data }); + if(_compositeEventMessageData.length >= 10) _messageCenter.sendCompositeEventMessage(); + return; + } + } + + 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 + }; + }; + +})(); + +//***** events.js *****// +// ******* 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; + //for dp, if mouse entered without leaving, don't fire mouse enter again + var mouseEnterGuard = {}; + var _attachEvents = function (diagramObject, elementId, doMouseEnterGuard) { + + 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) { + if(e.type == 'mouseenter' && doMouseEnterGuard) { + if(mouseEnterGuard[elementId]) return; + else mouseEnterGuard[elementId] = true; + } + + $ax.setjBrowserEvent(e); + // console.log(axEventObject.description); + var eventInfo = $ax.getEventInfoFromEvent($ax.getjBrowserEvent(), false, elementId); + _handleEvent(elementId, eventInfo, axEventObject); + }; + })(diagramObject.interactionMap[eventName]) + ); + + if(jQueryEventName.toLowerCase() == 'mouseenter' && doMouseEnterGuard) { + $jobj(elementId).on('mouseleave touchend', function() { + mouseEnterGuard[elementId] = false; + }); + } + } + + }; + + var _descriptionToKey = { 'OnFocus': 'onFocus', 'OnLostFocus': 'onLostFocus' }; + var _createProxies = function(diagramObject, elementId) { + var createFocus = _needsProxy(diagramObject, elementId, 'onFocus'); + var createLostFocus = _needsProxy(diagramObject, 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 _suppressedEvents = {}; // Suppressed for next occurance. + var _blockedEvents = {}; // Blocked until unblocked. + _event.addSuppressedEvent = function(id, event) { + if(!_suppressedEvents[id]) _suppressedEvents[id] = []; + var events = _suppressedEvents[id]; + if(events.indexOf(event) != -1) return; + events.push(event); + } + + _event.blockEvent = function(id, event) { + if(!_blockedEvents[id]) _blockedEvents[id] = {}; + var events = _blockedEvents[id]; + if(events[event]) ++events[event]; + else events[event] = 1; + return function() { _unblockEvent(id, event); }; + } + + var _isSuppressedEvent = function(id, event) { + var suppressedEvents = _suppressedEvents[id]; + var blockedEvents = _blockedEvents[id]; + return (suppressedEvents && suppressedEvents.indexOf(event) != -1) || (blockedEvents && blockedEvents[event]); + } + + var _removeSuppressedEvent = function(id, event) { + var events = _suppressedEvents[id]; + if(!events) return; + if(events.length == 1) { + delete _suppressedEvents[id]; + } else { + var eventIndex = events.indexOf(event); + for(var i = eventIndex + 1; i < events.length; i++) events[i - 1] = events[i]; + events.pop(); + } + } + var _unblockEvent = function(id, event) { + var events = _blockedEvents[id]; + if(events) { + if(--events[event] > 0) return; + } + _removeSuppressedEvent(id, event); + } + + var _unblockEvent = function(id, event) { + var events = _blockedEvents[id]; + if(events) { + if(--events[event] > 0) return; + } + _removeSuppressedEvent(id, event); + } + + var eventNesting = 0; + var eventNestingTime = new Date().getTime(); + + var _handleEvent = $ax.event.handleEvent = function (elementId, eventInfo, axEventObject, skipShowDescriptions, synthetic) { + var eventDescription = axEventObject.description; + if(_enteredWidgets[elementId] && eventDescription == 'OnMouseEnter') return; // Suppress entering a widget when already in widget (ie only) + if(_isSuppressedEvent(elementId, eventDescription)) { + _removeSuppressedEvent(elementId, eventDescription); + return; + } + + if(axEventObject.proxy) { + var firingId = _widgetToFocusParent[elementId]; + if(firingId) { + var firingObj = $obj(firingId); + var nextEventObj = firingObj.interactionMap && firingObj.interactionMap[_descriptionToKey[eventDescription]]; + 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; + + 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); + $ax.action.flushAllResizeMoveActions(copy); + $('#' + 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(obj, id, proxyName) { + // 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; + }; + + var _enteredWidgets = {}; + + // 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 = {}; + + var initSuppressingEvents = function () { + 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 jEventName = AXURE_TO_JQUERY_EVENT_NAMES[key]; + if(!jEventName) continue; + $('body').bind(jEventName, function () { + suppressedEventStatus[cancelSuppressions[key]] = 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) { + 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) || + (dObj.tabbable && ($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); + var isDynamicPanel = $ax.public.fn.IsDynamicPanel(dObj.type); + if(dObj.interactionMap) { + _attachEvents(dObj, elementId, isDynamicPanel); + }; + + if (IE || $axure.browser.isEdge) { + $element.mouseenter(function() { + _enteredWidgets[elementId] = true; + }).mouseleave(function() { + _enteredWidgets[elementId] = false; + }); + } + + _attachIxStyleEvents(dObj, elementId, $element); + + var $axElement = undefined; + // Unless you are pre eval - don't allow item and have an item id - then set enabled/selected through js as usual + if(allowItem || !itemId) { + //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) || isDynamicPanel || $ax.public.fn.IsLayer(dObj.type)) && dObj.disabled) { + 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) || isDynamicPanel || $ax.public.fn.IsLayer(dObj.type)) && dObj.selected) { + if(!$axElement) $axElement = $ax('#' + elementId); + $axElement.selected(true); + } + } else { + // Otherwise everything should be set up correctly by pre-eval, except disabled is needed + if($element.hasClass('disabled')) { + $axElement = $ax('#' + elementId); + $axElement.enabled(false); + } + } + + 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 + var inputJobj = $jobj($ax.INPUT(elementId)); + inputJobj.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); + }); + + if(ANDROID) { + //input fires before keyup, to avoid flicker, supported in ie9 and above + inputJobj.bind('input', function() { + if(!dObj.HideHintOnFocused) { //hide on type + var id = this.id; + var inputIndex = id.indexOf('_input'); + if(inputIndex == -1) return; + var inputId = id.substring(0, inputIndex); + + if($ax.placeholderManager.isActive(inputId)) { + $ax.placeholderManager.updatePlaceholder(inputId, false, true); + } else if(!$jobj(id).val()) { + $ax.placeholderManager.updatePlaceholder(inputId, true, false); + $ax.placeholderManager.moveCaret(id, 0); + } + } + }); + } else { + inputJobj.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); + } + }); + } + + $ax.placeholderManager.registerPlaceholder(elementId, dObj.placeholderText, inputJobj.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 (isDynamicPanel) { + $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 (isDynamicPanel) { + $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 ((isDynamicPanel || $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); + }; + + //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 (isDynamicPanel && 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. + if($ax.event.HasKeyUpOrDown(dObj)) _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; + + $ax.event.updateIxStyleEvents = function(elementId) { + _dettachIxStyleEvents(elementId); + _attachIxStyleEvents($ax.getObjectFromElementId(elementId), elementId, $jobj(elementId), true); + } + + var _dettachIxStyleEvents = function(elementId) { + var $element = $jobj(elementId); + $element.off('mouseenter.ixStyle') + .off('mouseleave.ixStyle') + .off($ax.features.eventNames.mouseDownName + '.ixStyle') + .off($ax.features.eventNames.mouseUpName + '.ixStyle'); + } + + var _attachIxStyleEvents = function(dObj, elementId, $element, ignoreHasIxStyles) { + //attach button shape alternate styles + var isDynamicPanel = $ax.public.fn.IsDynamicPanel(dObj.type); + var needsMouseFilter = (ignoreHasIxStyles || $ax.event.HasIxStyles(dObj)) + && dObj.type != 'hyperlink' && !$ax.public.fn.IsLayer(dObj.type) && !isDynamicPanel && 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 () { + $element.on('mouseenter.ixStyle', 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 () { + }).on('mouseleave.ixStyle', 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 () { + $element.on($ax.features.eventNames.mouseDownName + '.ixStyle', 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 () { + }).on($ax.features.eventNames.mouseUpName + '.ixStyle', 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 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); + }; + + // 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)); + + initSuppressingEvents(); + + // 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.HasIxStyles = function(diagramObject) { + if(diagramObject.style.stateStyles) return true; + if(diagramObject.adaptiveStyles) { + for(var viewId in diagramObject.adaptiveStyles) { + if(diagramObject.adaptiveStyles[viewId].stateStyles) return true; + } + } + return false; + }; + + $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.HasKeyUpOrDown = function (diagramObject) { + if($ax.public.fn.IsTextBox(diagramObject.type) || $ax.public.fn.IsTextArea(diagramObject.type)) return true; + var map = diagramObject.interactionMap; + return map && (map.onKeyUp || map.onKeyDown); + }; + + $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 pageEvent = map && map[eventName]; + var scrolling = currentEvent && currentEvent.type === "scroll"; + if (scrolling && !pageEvent && map) pageEvent = map.onScrollUp || map.onScrollDown; + + if(pageEvent) { + var pageEventInfo = $ax.getEventInfoFromEvent(currentEvent, skipShowDescription, ''); + + pageEventInfo.label = $ax.pageData.page.name; + pageEventInfo.friendlyType = 'Page'; + + 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; + + +}); +//***** recording.js *****// +// ******* 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); + }; + +}); +//***** action.js *****// +$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.easing && options.easing != 'none' && 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.PrepareForMove(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 = Math.round(size.width - boundingRect.width) / boundingRect.width * ratio; + heightChangedPercent = Math.round(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 -= 2; + _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 = Math.round(newWidth - oldWidth) * ratio; + var deltaHeight = Math.round(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; + } else if(imgInfo.mouseOver && elementId == eventInfo.srcElement) { + img = evaluatedImgs.mouseOver; + } + + // $('#' + $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); + + if(evaluatedImgs.mouseOver || evaluatedImgs.mouseDown) $ax.event.updateIxStyleEvents(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][$ax.adaptive.getSketchKey()] || $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 thisWidget = eventInfo.thiswidget; + 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.thiswidget = $ax.getWidgetInfo(eventInfo.srcElement); + + 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.thiswidget = thisWidget; + + eventInfo.isMasterEvent = oldIsMasterEvent; + } + + _dispatchAction(eventInfo, actions, index + 1); + }; +}); + +//***** expr.js *****// +// ******* 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 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; + } + + var axObj = $ax('#' + elementId); + 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; + }; + + +}); +//***** geometry.js *****// +// ******* 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; +}); +//***** flyout.js *****// +// ******* 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; + + if(active) var value = info.text; + else if(!ANDROID) value = clearText ? '' : document.getElementById(inputId).value; + else { + var currentText = document.getElementById(inputId).value; + if(!clearText) value = currentText; + else if(currentText == info.text) value = ""; + else { + var lastIndex = currentText.lastIndexOf(info.text); + //here i am assuming the text is always inserted in front + value = currentText.substring(0, lastIndex); + } + } + + $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; +}); +//***** ie.js *****// + +// ******* 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(); + }); + + +}); + +//***** model.js *****// +// ******* 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.idsInRdoToHideOrLimbo = function(rdoId, scriptIds) { + var rdoScriptId = $ax.repeater.getScriptIdFromElementId(rdoId); + var path = $ax.getPathFromScriptId(rdoScriptId); + + if(!scriptIds) scriptIds = []; + + var rdo = $ax.getObjectFromElementId(rdoId); + var master = $ax.pageData.masters[rdo.masterId]; + var masterChildren = master.diagram.objects; + for(var i = 0; i < masterChildren.length; i++) { + var obj = masterChildren[i]; + var objScriptIds = obj.scriptIds; + for(var j = 0; j < objScriptIds.length; j++) { + var scriptId = objScriptIds[j]; + // Anything in a layer is already handled by the layer + if($ax.getLayerParentFromElementId(scriptId)) continue; + + // Make sure in same rdo + var elementPath = $ax.getPathFromScriptId(scriptId); + + // This is because last part of path is for the obj itself. + elementPath.pop(); + if(elementPath.length != path.length) continue; + var samePath = true; + for(var k = 0; k < path.length; k++) { + if(elementPath[k] != path[k]) { + samePath = false; + break; + } + } + if(!samePath) continue; + + if($ax.public.fn.IsReferenceDiagramObject(obj.type)) _model.idsInRdoToHideOrLimbo(scriptId, scriptIds); + else if(scriptIds.indexOf(scriptId) == -1) scriptIds.push(scriptId); + + break; + } + } + return scriptIds; + }; + +}); +//***** repeater.js *****// + +// ******* 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[repeaterId]; + //if(!states) return; // If there are no evaluated states the repeater id key could not be mapped to an array of states. + + //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 repeaterObj = $jobj(repeaterId); + 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'; + + //clean up old items as late as possible + removeItems(repeaterId); + resetItemSizes(repeaterId, offset, bounds, orderedIds, vertical, wrap); + + var i = 0; + var startTop = paddingTop; + var startLeft = paddingLeft; + if(repeaterObj.css('box-sizing') == 'border-box') { + startTop -= $ax.getNumFromPx(repeaterObj.css('border-top-width')) || 0; + startLeft -= $ax.getNumFromPx(repeaterObj.css('border-left-width')) || 0; + } + var top = startTop; + var left = startLeft; + 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)); + if(obj.repeaterPropMap.isolateRadio) { + var radioButtons = copy.find(':radio'); + for(var radioIndex = 0; radioIndex < radioButtons.length; radioIndex++) { + var radio = $(radioButtons[radioIndex]); + var oldName = radio.attr('name') || ''; + // Can't use create element id because there could be an underscore in name + if(oldName) radio.attr('name', oldName + '-' + itemId); + } + } + + + 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 = startTop; + left += xOffset; + } else { + left = startLeft; + 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; + } + repeaterObj.css(repeaterSize); + + // Had to move this here because it sets up cursor: pointer on inline links, + // but must be done before style cached when adaptive view is set. + // 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)); + + $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.isolateSelection && childJobj.attr('selectiongroup')) { + childJobj.attr('selectiongroup', _createElementId(childJobj.attr('selectiongroup'), childItemId)); + } + if ($ax.ieColorManager) $ax.ieColorManager.applyBackground($ax('#' + id)); + $ax.style.initializeObjectTextAlignment($ax('#' + id)); + $ax.applyHighlight($ax('#' + id), true); + } + + $ax.messageCenter.startCombineEventMessages(); + $ax.cacheRepeaterInfo(repeaterId, $ax.getWidgetInfo(repeaterId)); + + // 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); + } + + $ax.removeCachedRepeaterInfo(repeaterId); + $ax.messageCenter.endCombineEventMessages(); + + // Reshow repeater if it was originally shown (load is complete by now) + if(shown && !itemsPregen) document.getElementById(repeaterId).style.visibility = 'inherit'; + + $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; + if($ax.visibility.isElementIdLimboOrInLimboContainer(elementId)) 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, vert); + + 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, vert); + } + + // 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, vert); + } + + 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, vert) { + if (delta == 0) return; + var val = $ax.getNumFromPx(jobj.css(prop)) + delta; + var border = 0; + if(vert) border += $ax.getNumFromPx(jobj.css('border-top-width')) + $ax.getNumFromPx(jobj.css('border-bottom-width')); + else border += $ax.getNumFromPx(jobj.css('border-left-width')) + $ax.getNumFromPx(jobj.css('border-right-width')); + val += border; + 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. + switch(type) { + case 'data': return data.type == 'text' ? data.text : data + case 'img': return (data.img && data.img[$ax.adaptive.getSketchKey()]) || data.text; + default: return (type && data[type]) || data.text; + } + //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 + deleteDataMap.deletedIds.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)[0]; + 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 jpanel = $jobj(id); + return !jpanel.attr('data-notfit'); + }; + + //this function fit parent panel, also check for parent layer or repeaters + var _fitParentPanel = function (widgetId) { + + var parentLayer = getParentLayer(widgetId); + if(parentLayer) { + if(_updateLayerRectCache(parentLayer)) _fitParentPanel(parentLayer); + return; + } + + // 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)); + $ax.repeater.setItemSize(parentRepeaterId, itemId, size.width, size.height); + }; + _dynamicPanelManager.fitParentPanel = _fitParentPanel; + + _dynamicPanelManager.initialize = function() { + $axure.resize(_handleResize); + }; + + 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.updateParentsOfNonDefaultFitPanels = function () { + $ax('*').each(function (diagramObject, elementId) { + if(!$ax.public.fn.IsDynamicPanel(diagramObject.type) || !diagramObject.fitToContent) return; + if($ax.visibility.isElementIdLimboOrInLimboContainer(elementId)) return; + + var stateId = $ax.visibility.GetPanelState(elementId); + if(stateId != $ax.repeater.applySuffixToElementId(elementId, '_state0')) _fitParentPanel(elementId); + }); + }; + + //_dynamicPanelManager.updateAllFitPanelsAndLayerSizeCaches = function() { + // var fitToContent = []; + // var layers = []; + // $ax('*').each(function (obj, elementId) { + // var isFitPanel = $ax.public.fn.IsDynamicPanel(obj.type) && obj.fitToContent; + // var isLayer = $ax.public.fn.IsLayer(obj.type); + // if(!isFitPanel && !isLayer) return; + // if($ax.visibility.isElementIdLimboOrInLimboContainer(elementId)) return; + + // if(isFitPanel) { + // fitToContent[fitToContent.length] = elementId; + // } else if(isLayer) { + // layers[layers.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); + // } + // } + // for(var i = layers.length - 1; i >= 0; i--) { + // var layerId = layers[i]; + // _updateLayerSizeCache(layerId); + // } + //}; + + var _getCachedLayerRect = function (elementId) { + var element = document.getElementById(elementId); + var rect = {}; + rect.width = Number(element.getAttribute('data-width')); + rect.height = Number(element.getAttribute('data-height')); + rect.x = Number(element.getAttribute('data-left')); + rect.y = Number(element.getAttribute('data-top')); + return rect; + } + + var _updateLayerRectCache = function (elementId) { + var oldRect = _getCachedLayerRect(elementId); + + var axObj = $ax('#' + elementId); + var size = axObj.size(); + var loc = {}; + loc.x = axObj.locRelativeIgnoreLayer(false); + loc.y = axObj.locRelativeIgnoreLayer(true); + + var sizeChange = oldRect.width != size.width || oldRect.height != size.height; + var locChange = oldRect.x != loc.x || oldRect.y != loc.y; + if(sizeChange || locChange) { + var element = document.getElementById(elementId); + if(sizeChange) { + element.setAttribute('data-width', size.width); + element.setAttribute('data-height', size.height); + $ax.event.raiseSyntheticEvent(elementId, 'onResize'); + } + if(locChange) { + element.setAttribute('data-left', loc.x); + element.setAttribute('data-top', loc.y); + $ax.event.raiseSyntheticEvent(elementId, 'onMove'); + } + return true; + } + return false; + } + + _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', ''); + panel.removeAttr('data-notfit'); + 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 { + panel.attr('data-notfit', 'true'); + 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) + // finds the immediate parent panel and crawls up through masters but not repeaters + 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); + + //check if the master is in the same repeater as the widgetId widget + var parentMasterItemId = $ax.repeater.getItemIdFromElementId(parentMaster); + var widgetItemId = $ax.repeater.getItemIdFromElementId(widgetId); + if(parentMasterItemId != widgetItemId) return undefined; + + return getParentPanel(parentMaster, path, targetId || widgetId); + }; + + // finds the immediate parent layer and crawls up through masters but not repeaters or panels + var getParentLayer = function (widgetId, path) { + path = path || $ax.getPathFromScriptId($ax.repeater.getScriptIdFromElementId(widgetId)); + + //gets immediate parent layer only + var layerId = $ax.getLayerParentFromElementId(widgetId); + if(layerId) return layerId; + + if(path.length == 1) return undefined; + + path.pop(); + var parentMaster = $ax.getScriptIdFromPath(path); + if(!parentMaster) return undefined; + parentMaster = $ax.repeater.getElementId(parentMaster, widgetId); + + //check if the master is in the same panel as the widgetId widget + var widgetParentPanel = getParentPanel(widgetId); + if(widgetParentPanel) { + var parentMasterParentPanel = getParentPanel(parentMaster); + if(!parentMasterParentPanel || widgetParentPanel.parent != parentMasterParentPanel.parent) return undefined; + } + + //check if the master is in the same repeater as the widgetId widget + var parentMasterItemId = $ax.repeater.getItemIdFromElementId(parentMaster); + var widgetItemId = $ax.repeater.getItemIdFromElementId(widgetId); + if(parentMasterItemId != widgetItemId) return undefined; + + return getParentLayer(parentMaster, path); + }; + + // 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)); + // 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)); + } + + // 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; + } + + 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); + }; +}); + +//***** sto.js *****// + +$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('<', '<'); + }; +}); +//***** utils.temp.js *****// +// ******* 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 + }); + }); + } + }); + }); + +}); + +//***** variables.js *****// +// ******* 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(); +}); +//***** drag.js *****// +$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); + }; +}); +//***** move.js *****// +$axure.internal(function($ax) { + var _move = {}; + $ax.move = _move; + + var widgetMoveInfo = {}; + //register and return move info, also create container for rootlayer if needed + $ax.move.PrepareForMove = function (id, x, y, to, options, jobj, rootLayer, skipContainerForRootLayer) { + var fixedInfo = jobj ? {} : $ax.dynamicPanelManager.getFixedInfo(id); + + var widget = $jobj(id); + var query = $ax('#' + id); + var isLayer = $ax.getTypeFromElementId(id) == $ax.constants.LAYER_TYPE; + if(!rootLayer) { + rootLayer = _move.getRootLayer(id); + if (rootLayer && !skipContainerForRootLayer) { + $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, skipOnMoveEvent) { + var moveInfo = $ax.move.PrepareForMove(id, x, y, to, options, jobj); + $ax.drag.LogMovedWidgetForDrag(id, options.dragInfo); + + var object = $obj(id); + if(object && $ax.public.fn.IsLayer(object.type)) { + var childrenIds = $ax.public.fn.getLayerChildrenDeep(id, true); + //don't push container when register moveinfo for child + if(!skipOnMoveEvent) { + for(var i = 0; i < childrenIds.length; i++) $ax.move.PrepareForMove(childrenIds[i], x, y, to, options, null, moveInfo.rootLayer, true); + } + } + + //if(!moveInfo) moveInfo = _getMoveInfo(id, x, y, to, options, jobj); + + jobj = moveInfo.jobj; + + _moveElement(id, options, animationCompleteCallback, shouldFire, jobj, moveInfo); + + if(skipOnMoveEvent) return; + $ax.event.raiseSyntheticEvent(id, "onMove"); + if(childrenIds) { + 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(rootLayer) $ax.visibility.popContainer(rootLayer, false); + if(animationCompleteCallback) animationCompleteCallback(); + //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.PrepareForMove(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+')'; +// } +}); +//***** visibility.js *****// +$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) { + //not setting display to none to optimize measuring + if(visible) { + if($(element).hasClass(HIDDEN_CLASS)) $(element).removeClass(HIDDEN_CLASS); + if($(element).hasClass(UNPLACED_CLASS)) $(element).removeClass(UNPLACED_CLASS); + element.style.display = ''; + element.style.visibility = 'inherit'; + } 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(!options.noContainer && (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); + 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); + 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 if (childObj && childObj.generateCompound) { + var image = $jobj(childId + '_img'); + containerWidth = $ax.getNumFromPx(image.css('width')); + containerHeight = $ax.getNumFromPx(image.css('height')); + wrappedOffset.left = $ax.getNumFromPx(image.css('left')); + wrappedOffset.top = $ax.getNumFromPx(image.css('top')); + } 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 children 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(); + } + + if(childObj && $ax.public.fn.IsDynamicPanel(childObj.type) && window.modifiedDynamicPanleParentOverflowProp) { + child.css('overflow', 'hidden'); + window.modifiedDynamicPanleParentOverflowProp = false; + } + } + + if(options.value) _updateChildAlignment(childId); + + 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', 'inherit'); + 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 set display, fadeIn will handle that. + visibleWrapped.css('visibility', 'inherit'); + 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': 'inherit' + }); + + visibleWrapped.css({ + 'display': '', + 'visibility': 'inherit' + }); + + 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'); + // If showing size changes and need to update parent panels + $ax.dynamicPanelManager.fitParentPanel(id); + } + + $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, oldStateId); + + 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, oldStateId); + + 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 trapScroll = _trapScrollLoc(id); + 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(); + if(focus) $ax.event.addSuppressedEvent($ax.repeater.removeSuffixFromElementId(focus), 'OnLostFocus'); + + // 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); + } + trapScroll(); + } + }; + + var _popContainer = _visibility.popContainer = function (id, panel) { + var count = containerCount[id]; + if(!count) return; + count--; + containerCount[id] = count; + if(count != 0) return; + + var trapScroll = _trapScrollLoc(id); + + 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).size(); + container.css('width', size.width); + container.css('height', size.height); + var focus = _getCurrFocus(); + if(focus) $ax.event.addSuppressedEvent($ax.repeater.removeSuffixFromElementId(focus), 'OnLostFocus'); + 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(); + trapScroll(); + }; + + var _trapScrollLoc = function(id) { + var locs = {}; + var states = $jobj(id).find('.panel_state'); + for(var i = 0; i < states.length; i++) { + var state = $(states[i]); + locs[state.attr('id')] = { x: state.scrollLeft(), y: state.scrollTop() }; + } + return function() { + for(var key in locs) { + var state = $jobj(key); + state.scrollLeft(locs[key].x); + state.scrollTop(locs[key].y); + } + }; + } + + var _getCurrFocus = function () { + // Only care about focused a tags and inputs + var id = window.lastFocusedClickable && window.lastFocusedClickable.id; + + if(!id) return id; + var jobj = $(window.lastFocusedClickable); + return jobj.is('a') || jobj.is('input') ? id : ''; + } + + var _setCurrFocus = function(id) { + if(id) { + // This is really just needed for IE, so if this causes issues on other browsers, try adding that check here + var trap = $ax.event.blockEvent($ax.repeater.removeSuffixFromElementId(id), 'OnFocus'); + window.setTimeout(function () { + $jobj(id).focus(); + trap(); + }, 0); + } + } + + //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, true); + } else if(directionOut == "left") { + $ax.move.MoveWidget(stateId, -width, 0, options, false, onComplete, false, jobj, true); + } else if(directionOut == "up") { + $ax.move.MoveWidget(stateId, 0, -height, options, false, onComplete, false, jobj, true); + } else if(directionOut == "down") { + $ax.move.MoveWidget(stateId, 0, height, options, false, onComplete, false, jobj, true); + } + }; + + 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, true); + } else if(directionIn == "left") { + $ax.move.MoveWidget(stateId, -width, 0, options, false, onComplete, false, jobj, true); + } else if(directionIn == "up") { + $ax.move.MoveWidget(stateId, 0, -height, options, false, onComplete, false, jobj, true); + } else if(directionIn == "down") { + $ax.move.MoveWidget(stateId, 0, height, options, false, onComplete, false, jobj, true); + } + }; + + $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, oldStateId) { + 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) { + // Only need to do this if the currently focused widget is in the panel state that is being hidden. + if($jobj(oldStateId).find('#' + window.lastFocusedClickable.id.split('_')[0]).length) $(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.idsInRdoToHideOrLimbo(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.idsInRdoToHideOrLimbo(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 + query.each(function(diagramObject, elementId) { + // Rdos already handled, contained widgets are limboed by the parent, and sub menus should be ignored + if(diagramObject.isContained || $ax.public.fn.IsReferenceDiagramObject(diagramObject.type) || $ax.public.fn.IsTableCell(diagramObject.type) || $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 + if($ax.getParentRepeaterFromElementIdExcludeSelf(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, noContainer: true }); + } + }); + + _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.isElementIdLimboOrInLimboContainer = function (elementId) { + var parent = document.getElementById(elementId); + while(parent) { + var scriptId = $ax.repeater.getScriptIdFromElementId($(parent).attr('id')); + if(_limboIds[scriptId]) return true; + parent = parent.parentElement; + } + return false; + } + + $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'; + +}); +//***** style.js *****// +$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)) { + if(!value) $jobj(id).removeClass('selected'); + 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 : $.inArray(id, $ax.event.mouseOverIds) != -1 ? MOUSE_OVER : NORMAL; + //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'); // If images start being able to turn off borders on specific sides, need to update this. + 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. + + var current = document.getElementById(id); + if(!current) return undefined; + current = current.parentElement; + while(current && current.tagName != 'BODY') { + var currentId = current.id; + if(currentId && currentId != 'base') return $ax.visibility.getWidgetFromContainer(currentId); + current = current.parentElement; + } + + 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'); + if(event != 'normal') 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 += (Number(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 = {}; + + $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)) 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']; + + // smart shapes are 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 repeaterId = $ax.getParentRepeaterFromScriptId(shapeId); + if(repeaterId) continue; + var elementId = _getButtonShapeId(shapeId); + if(elementId) { + _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]; + } + } + } + }; +}); +//***** adaptive.js *****// +$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 inline positioning from move and rotate actions including size and transformation + $axure('*').each(function (diagramObject, elementId) { + if(diagramObject.isContained) return; + if($ax.getParentRepeaterFromElementIdExcludeSelf(elementId)) return; + + var element = document.getElementById(elementId); + if(element) { + var resetCss = { + top: "", left: "", width: "", height: "", opacity: "", + transform: "", webkitTransform: "", MozTransform: "", msTransform: "", OTransform: "" + }; + var query = $(element); + query.css(resetCss); + var isPanel = $ax.public.fn.IsDynamicPanel(diagramObject.type); + if(!isPanel || diagramObject.fitToContent) { //keeps size on the panel states when switching adaptive views to optimize fit to panel + if(diagramObject.fitToContent) $ax.dynamicPanelManager.setFitToContentCss(elementId, true); + var children = query.children(); + if(children.length) children.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) { + if($ax.getParentRepeaterFromElementIdExcludeSelf(elementId)) return; + + $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) { + if($ax.getParentRepeaterFromElementIdExcludeSelf(elementId)) return; + + $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~']); + } + } + + //align all text + 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.updateParentsOfNonDefaultFitPanels(); + $ax.dynamicPanelManager.updatePercentPanelCache($ax('*')); + } else { + $ax.visibility.clearLimboAndHidden(); + _applyView(viewId); + $ax.repeater.refreshAllRepeaters(); + $ax.dynamicPanelManager.updateParentsOfNonDefaultFitPanels(); + } + + $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.updateAllFitPanelsAndLayerSizeCaches(); + $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); + }; + + $ax.adaptive.getSketchKey = function() { + return $ax.pageData.sketchKeys[$ax.adaptive.currentViewId || '']; + } +}); +//***** tree.js *****// +// 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); + }; + +}); +//***** init.temp.js *****// +$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 = '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); + var $focusable = $('#' + focusableId); + $focusable.attr("tabIndex", 0); + if($focusable.is('div') || $focusable.is('img')) { + $focusable.bind($ax.features.eventNames.mouseDownName, function() { + shouldOutline = false; + }); + attachFocusAndBlur($focusable); + } + }); + + $(window.document).bind($ax.features.eventNames.mouseUpName, function() { + shouldOutline = true; + }); + + attachFocusAndBlur($(_lastFocusedClickableSelector)); + + function attachFocusAndBlur($query) { + $query.focus(function () { + if(shouldOutline) { + $(this).css('outline', ''); + } else { + $(this).css('outline', 'none'); + } + window.lastFocusedClickable = this; + }).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'); + }); + } + + $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); + } +})(); + +//***** legacy.js *****// +//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 $ax.dynamicPanelManager.getShownState(current.attr('id'))[0]; + } + 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; + }; + + + +}); +//***** viewer.js *****// +// ******* 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; + + 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); + } + }; +}); +//***** math.js *****// +$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/\346\267\230\345\256\235/resources/scripts/prototypePre.js" "b/\346\267\230\345\256\235/resources/scripts/prototypePre.js" new file mode 100644 index 0000000..7410bdb --- /dev/null +++ "b/\346\267\230\345\256\235/resources/scripts/prototypePre.js" @@ -0,0 +1,2860 @@ +// 8.0.0.3333. Generated 3/30/2017 8:15:37 PM UTC + +//***** axQuery.js *****// +$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); + + // Check repeater item before layer, because repeater item detects it's parent layer, but wants to go directly to it's repeater first. + // 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; + } + + // 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 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; + }; + +})(); +//***** globals.js *****// +$axure.internal(function($ax) { + var _globals = $ax.globals = {}; + + $ax.globals.MaxZIndex = 1000; + $ax.globals.MinZIndex = -1000; + +}); +//***** axutils.js *****// +/* + * + * + * + * + */ + + (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); + }; + + + })(); + +//***** annotation.js *****// +// ******* 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"); + } + } + } + } + }); + }); + +}); +//***** axQuery.std.js *****// +// ******* 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]; + + $ax.public.fn.IsResizable = function (type) { return $.inArray(type, RESIZABLE_TYPES) !== -1; } + var RESIZABLE_TYPES = [ + $ax.constants.BUTTON_TYPE, $ax.constants.DYNAMIC_PANEL_TYPE, $ax.constants.IMAGE_BOX_TYPE, $ax.constants.IMAGE_MAP_REGION_TYPE, + $ax.constants.INLINE_FRAME_TYPE, $ax.constants.LAYER_TYPE, $ax.constants.LIST_BOX_TYPE, $ax.constants.COMBO_BOX_TYPE, + $ax.constants.VECTOR_SHAPE_TYPE, $ax.constants.TEXT_AREA_TYPE, $ax.constants.TEXT_BOX_TYPE, $ax.constants.SNAPSHOT_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)) { + $ax.move.MoveWidget(elementId, x, y, options, moveTo, + function () { + if(options.onComplete) options.onComplete(); + $ax.dynamicPanelManager.fitParentPanel(elementId); + }, false); + } 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; + } + $ax.move.MoveWidget(elementId, xDelta, yDelta, options, false, + function () { $ax.dynamicPanelManager.fitParentPanel(elementId); }, true); + } + }; + + $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 () { + $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; + + var completeAndFire = function(moved, id) { + if(axShouldFire) { + $ax.action.fireAnimationFromQueue(id, $ax.action.queueTypes.resize); + if(moves) $ax.action.fireAnimationFromQueue(id, $ax.action.queueTypes.move); + } + + if(onCompletedFunc) onCompletedFunc(); + }; + + for(var index = 0; index < elementIds.length; index++) { + var elementId = elementIds[index]; + + var obj = $obj(elementId); + if(!$ax.public.fn.IsResizable(obj.type)) { + //$ax.dynamicPanelManager.fitParentPanel(elementId); + completeAndFire(moves, elementId); + continue; + } + + var oldSize = $ax('#' + elementId).size(); + var oldWidth = oldSize.width; + var oldHeight = oldSize.height; + var query = $jobj(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); + + completeAndFire(moves, elementId); + $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); + $ax.public.fn.displayHackEnd(display); + }; + } + + //get all the other children that matters + onComplete = function() { + $ax.dynamicPanelManager.fitParentPanel(elementId); + completeAndFire(moves, elementId); + + $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.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 }); + } else { + 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'; + + var htmlContent = $(this).html(); + if(isSoloBr(htmlContent)) return; // It has a solo br, then it was just put in for a newline, and paragraph already added the new line. + + //Replace line breaks (set in SetWidgetRichText) with newlines and nbsp's with regular spaces. + htmlContent = htmlContent.replace(/]*>/ig, '\n').replace(/ /ig, ' '); + textOut += $(htmlContent).text(); + }); + + return textOut; + } else { + var val = idQuery.val(); + return val == undefined ? '' : val; + } + }; + + var isSoloBr = function(html) { + html = $(html); + // Html needs one and only one span + var spanChildren = html.length == 1 && html.is('span') ? html.children() : false; + // Span children needs exactly one br and no text in the span + return spanChildren && spanChildren.length == 1 && spanChildren.is('br') && spanChildren.text().trim() == ''; + }; + + $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 = !vert && fixed.fullWidth ? 0 : 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 += obj[dim](); + + // Special Layer code + if ($ax.getTypeFromElementId(id) == 'layer') { + // If layer has a container, then use that. Otherwise must deal with children. Children can move in container after created, but ignoring for now. + var container = $ax.visibility.applyWidgetContainer(id, true, true); + if(container.length) loc += $ax.getNumFromPx(container.css(prop)); + else loc += (_getChildLoc($obj(id).objs, vert, high, dim, true, id) || 0); + } + + if(displaySet) obj.css('display', oldDisplay); + return loc; + }; + + var _getChildLoc = function (children, vert, high, dim, root, path, itemId) { + if (typeof (path) == 'string') { + itemId = $ax.repeater.getItemIdFromElementId(path); + path = $ax.getPathFromScriptId(path); + path.pop(); // Remove object id, only want rdo path. + } + var mathFunc = high ? 'max' : 'min'; + var childLoc = NaN; + for (var i = 0; i < children.length; i++) { + var childObj = children[i]; + var childId = $ax.getElementIdFromPath([childObj.id], { relativeTo: path }); + if (!childId) continue; + childId = $ax.repeater.createElementId(childId, itemId); + if($ax.public.fn.IsReferenceDiagramObject(childObj.type)) { + path.push(childObj.id); + var childProp = _getChildLoc($ax.pageData.masters[$obj(childId).masterId].diagram.objects, vert, high, dim, false, path, itemId); + path.pop(); + if(isNaN(childProp)) continue; + } else if($ax.public.fn.IsLayer(childObj.type)) { + childProp = _getChildLoc(childObj.objs, vert, high, dim, false, path, itemId); + } else { + if(!$ax.visibility.IsIdVisible(childId)) continue; + childProp = $ax('#' + childId).locRelativeIgnoreLayer(vert); + if(high) childProp += $jobj(childId)[dim](); + } + + if(isNaN(childLoc)) childLoc = childProp; + else if(!isNaN(childProp)) childLoc = Math[mathFunc](childLoc, childProp); + } + + return root && isNaN(childLoc) ? 0 : childLoc; + }; + + 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 ? 'Top' : 'Left'); + return { offset: $(window)[scrollKey]() + loc, valid: true, fullWidth: axObj.percentWidth == 1 }; + }; + + 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'); + } + }; + } +}); + +//***** doc.js *****// +$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; + + var body = $('body'); + if(body.css('position') == 'relative') { + _cursor.x -= (Number(body.css('left').replace('px', '')) + Math.max(0, ($(window).width() - body.width()) / 2)); + } + + 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 repeaterInfoCache = []; + $ax.cacheRepeaterInfo = function(repeaterId, repeaterInfo) { + repeaterInfoCache[repeaterId] = repeaterInfo; + } + $ax.removeCachedRepeaterInfo = function (repeaterId) { + repeaterInfoCache[repeaterId] = undefined; + } + + 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 = repeaterInfoCache[repeaterId] ? repeaterInfoCache[repeaterId] : _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.getParentRepeaterFromElementIdExcludeSelf = function (elementId) { + var repeaterId = $ax.getParentRepeaterFromElementId(elementId); + return repeaterId != elementId ? repeaterId : undefined; + }; + + $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, ""); + } else if(to.target == "popup") { + var features = _getPopupFeatures(to.popupOptions); + window.open(targetUrl, "", features); + } else { + var targetLocation = window.location; + if(to.target == "current") { + } else if(to.target == "parent") { + if(!top.opener) return; + 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/\346\267\230\345\256\235/resources/scripts/startPost.js" "b/\346\267\230\345\256\235/resources/scripts/startPost.js" new file mode 100644 index 0000000..4b50803 --- /dev/null +++ "b/\346\267\230\345\256\235/resources/scripts/startPost.js" @@ -0,0 +1,818 @@ +// 8.0.0.3333. Generated 3/30/2017 8:15:37 PM UTC + +//***** sitemap.js *****// +var 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); + } + + function expand_click(event) { + $(this) + .children('.sitemapPlus').removeClass('sitemapPlus').addClass('sitemapMinus').end() + .closest('li').children('ul').show(SHOW_HIDE_ANIMATION_DURATION); + } + + 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 += "
      "; + var rootNodes = $axure.document.sitemap.rootNodes; + for(var i = 0; i < rootNodes.length; i++) { + treeUl += generateNode(rootNodes[i], 0); + } + 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; + } +})(); + +//***** page_notes.js *****// +// 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'); + } + } + +})(); +//***** debug.js *****// +// 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 == 'axCompositeEventMessage') { + for(var i = 0; i < data.length; i++) { + processMessages(data[i].message, data[i].data); + } + } else processMessages(message, data); + }); + + var processMessages = function(message, data) { + if(message == 'globalVariableValues') { + $('#variablesDiv').empty(); + for(var key in data) { + var value = data[key] == '' ? '(blank)' : data[key]; + $('#variablesDiv').append('
    ' + key + '
    ' + value + '
    '); + } + } 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 = ""; + 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/\346\267\230\345\256\235/resources/scripts/startPre.js" "b/\346\267\230\345\256\235/resources/scripts/startPre.js" new file mode 100644 index 0000000..f420036 --- /dev/null +++ "b/\346\267\230\345\256\235/resources/scripts/startPre.js" @@ -0,0 +1,952 @@ +// 8.0.0.3333. Generated 3/30/2017 8:15:37 PM UTC + +//***** splitter.js *****// +/* +* 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); +//***** axutils.js *****// +/* + * + * + * + * + */ + + (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); + }; + + + })(); + +//***** axplayer.js *****// +if (!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 = {}; +} + +//***** messagecenter.js *****// +if (typeof console == 'undefined') console = { + log: function () { } +}; + +// sniff chrome +var CHROME_5_LOCAL = false; +var CHROME = false; +var SAFARI = false; +var FIREFOX = false; +var WEBKIT = false; +var OS_MAC = false; +var IOS = false; +var ANDROID = false; +var MOBILE_DEVICE = false; + +var IE = false; +var IE_10_AND_BELOW = false; //ie 10 and lower +var IE_11_AND_ABOVE = false; //ie 11 and above +var BROWSER_VERSION = 5000; +(function () { + if(!window.$axure) window.$axure = function() {}; + var useragent = window.navigator.userAgent; + + var edgeRegex = /Edge\/([0-9]+)/g; + var edgeMatch = edgeRegex.exec(useragent); + $axure.browser = { isEdge: Boolean(edgeMatch) }; + + if(!$axure.browser.isEdge) { + var chromeRegex = /Chrome\/([0-9]+).([0-9]+)/g; + var chromeMatch = chromeRegex.exec(useragent); + CHROME = Boolean(chromeMatch); + CHROME_5_LOCAL = chromeMatch && + Number(chromeMatch[1]) >= 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); + ANDROID = useragent.match(/Android/i); + + MOBILE_DEVICE = ANDROID || IOS + || navigator.userAgent.match(/webOS/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) {} + }); + }; + + var _combineEventMessages = false; + var _compositeEventMessageData = []; + _messageCenter.startCombineEventMessages = function() { + _combineEventMessages = true; + } + + _messageCenter.endCombineEventMessages = function () { + _messageCenter.sendCompositeEventMessage(); + _combineEventMessages = false; + } + + _messageCenter.sendCompositeEventMessage = function () { + _messageCenter.postMessage('axCompositeEventMessage', _compositeEventMessageData); + _compositeEventMessageData = []; + } + + _messageCenter.postMessage = function (message, data) { + if(_combineEventMessages) { + if(message == 'axEvent' || message == 'axCase' || message == 'axAction' || message == 'axEventComplete') { + _compositeEventMessageData.push({ 'message': message, 'data': data }); + if(_compositeEventMessageData.length >= 10) _messageCenter.sendCompositeEventMessage(); + return; + } + } + + 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/\346\267\230\345\256\235/start.html" "b/\346\267\230\345\256\235/start.html" new file mode 100644 index 0000000..e13795e --- /dev/null +++ "b/\346\267\230\345\256\235/start.html" @@ -0,0 +1,503 @@ + + + + Untitled Document + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    +
    +   +
    +
    +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      + CLOSE +
      +
      +
      +
      + +
      + +
      + +
      + +
      + + + diff --git "a/\346\267\230\345\256\235/start_c_1.html" "b/\346\267\230\345\256\235/start_c_1.html" new file mode 100644 index 0000000..82de5fd --- /dev/null +++ "b/\346\267\230\345\256\235/start_c_1.html" @@ -0,0 +1,12 @@ + + + + + + + + + + diff --git "a/\346\267\230\345\256\235/start_g_0.html" "b/\346\267\230\345\256\235/start_g_0.html" new file mode 100644 index 0000000..82aa640 --- /dev/null +++ "b/\346\267\230\345\256\235/start_g_0.html" @@ -0,0 +1,12 @@ + + + + + + + + + + diff --git "a/\346\267\230\345\256\235/\344\272\214\347\273\264\347\240\201\347\231\273\345\275\225.html" "b/\346\267\230\345\256\235/\344\272\214\347\273\264\347\240\201\347\231\273\345\275\225.html" new file mode 100644 index 0000000..847f438 --- /dev/null +++ "b/\346\267\230\345\256\235/\344\272\214\347\273\264\347\240\201\347\231\273\345\275\225.html" @@ -0,0 +1,152 @@ + + + + 二维码登录 + + + + + + + + + + + + + + + + +
      + + +
      + + + +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      登录

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

      手机扫码,安全登录

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

      免费注册

      +
      +
      + + +
      +
      + +
      +

      密码登录

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

      “登录页面”改进建议

      +
      +
      +
      +
      + + diff --git "a/\346\267\230\345\256\235/\345\205\215\350\264\271\346\263\250\345\206\214.html" "b/\346\267\230\345\256\235/\345\205\215\350\264\271\346\263\250\345\206\214.html" new file mode 100644 index 0000000..db721e3 --- /dev/null +++ "b/\346\267\230\345\256\235/\345\205\215\350\264\271\346\263\250\345\206\214.html" @@ -0,0 +1,162 @@ + + + + 免费注册 + + + + + + + + + + + + + + + + +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + + +
      + + +
      + + +
      +
      + + +
      + + +
      + + + +
      +
      + + +
      +
      + +
      +

      注册协议

      +
      +
      + + +
      +
      + +
      +

      【审慎阅读】您在申请注册流程中点击同意前,应当认真阅读以下协议。请您务必审慎阅读、充分理解协议中相关条款内容,其中包括:


      1、与您约定免除或限制责任的条款;


      2、与您约定法律适用和管辖的条款;


      3、其他以粗体下划线标识的重要条款。


      如您对协议有任何疑问,可向平台客服咨询。


      【特别提示】当您按照注册页面提示填写信息、阅读并同意协议且完成全部注册程序后,即表示您已充分阅读、理解并接受协议的全部内容。如您因平台服务与淘宝发生争议的,适用《淘宝平台服务协议》处理。如您在使用平台服务过程中与其他用户发生争议的,依您与其他用户达成的协议处理。


      阅读协议的过程中,如果您不同意相关协议或其中任何条款约定,您应立即停止注册程序。

      +
      +
      + + +
      +
      + +
      +

      同意协议

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

      淘宝平台服务协议




      +
      +
      + + +
      +
      + +
      +

      隐私权政策

      +
      +
      + + +
      +
      + +
      +

      法律声明

      +
      +
      + + +
      +
      + +
      +

      支付宝及客户端协议




      +
      +
      +
      + + +
      + + + +
      + + +
      + + + +
      +
      + + diff --git "a/\346\267\230\345\256\235/\345\205\215\350\264\271\346\263\250\345\206\214_1.html" "b/\346\267\230\345\256\235/\345\205\215\350\264\271\346\263\250\345\206\214_1.html" new file mode 100644 index 0000000..052d292 --- /dev/null +++ "b/\346\267\230\345\256\235/\345\205\215\350\264\271\346\263\250\345\206\214_1.html" @@ -0,0 +1,173 @@ + + + + 免费注册 + + + + + + + + + + + + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      淘宝账户登录

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

      登录

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

      获取验证码

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

      手机号注册

      +
      +
      + + +
      +
      + +
      +

      亲,  欢迎注册淘宝账户

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

      同意并注册

      +
      +
      + + +
      + + +
      +
      +
      + + diff --git "a/\346\267\230\345\256\235/\345\257\206\347\240\201\347\231\273\345\275\225.html" "b/\346\267\230\345\256\235/\345\257\206\347\240\201\347\231\273\345\275\225.html" new file mode 100644 index 0000000..da0b960 --- /dev/null +++ "b/\346\267\230\345\256\235/\345\257\206\347\240\201\347\231\273\345\275\225.html" @@ -0,0 +1,210 @@ + + + + 密码登录 + + + + + + + + + + + + + + + + +
      + + +
      + + + +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      登录

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

      短信登录

      +
      +
      + + +
      +
      + +
      +

      密码登录

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

      忘记密码

      +
      +
      + + +
      +
      + +
      +

      免费注册

      +
      +
      + + +
      +
      + +
      +

      忘记用户名

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

      “登录页面”改进建议

      +
      +
      +
      +
      + + diff --git "a/\346\267\230\345\256\235/\347\237\255\344\277\241\347\231\273\345\275\225.html" "b/\346\267\230\345\256\235/\347\237\255\344\277\241\347\231\273\345\275\225.html" new file mode 100644 index 0000000..a3fd276 --- /dev/null +++ "b/\346\267\230\345\256\235/\347\237\255\344\277\241\347\231\273\345\275\225.html" @@ -0,0 +1,237 @@ + + + + 短信登录 + + + + + + + + + + + + + + + + +
      + + +
      + + + +
      + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      登录

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

      密码登录

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

      获取验证码

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

      短信登录

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

      忘记密码

      +
      +
      + + +
      +
      + +
      +

      免费注册

      +
      +
      + + +
      +
      + +
      +

      忘记用户名

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

      “登录页面”改进建议

      +
      +
      +
      +
      + + diff --git "a/\346\267\230\345\256\235/\347\237\255\344\277\241\351\252\214\350\257\201\347\231\273\345\275\225.html" "b/\346\267\230\345\256\235/\347\237\255\344\277\241\351\252\214\350\257\201\347\231\273\345\275\225.html" new file mode 100644 index 0000000..007966f --- /dev/null +++ "b/\346\267\230\345\256\235/\347\237\255\344\277\241\351\252\214\350\257\201\347\231\273\345\275\225.html" @@ -0,0 +1,118 @@ + + + + 短信验证登录 + + + + + + + + + + + + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      淘宝账户登录

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

      获取验证码

      +
      +
      + + +
      +
      + +
      +

      账户密码登录

      +
      +
      + + +
      +
      + +
      +

      免费注册

      +
      +
      +
      + + +
      +
      + +
      +

      登录

      +
      +
      +
      +
      + + diff --git "a/\346\267\230\345\256\235/\351\273\230\350\256\244\347\231\273\345\275\225.html" "b/\346\267\230\345\256\235/\351\273\230\350\256\244\347\231\273\345\275\225.html" new file mode 100644 index 0000000..070adbe --- /dev/null +++ "b/\346\267\230\345\256\235/\351\273\230\350\256\244\347\231\273\345\275\225.html" @@ -0,0 +1,113 @@ + + + + 默认登录 + + + + + + + + + + + + + + + + +
      + + +
      +
      + + +
      + + +
      +
      + +
      +

      淘宝账户登录

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

      免费注册

      +
      +
      + + +
      +
      + +
      +

      短信验证登录

      +
      +
      +
      + + +
      +
      + +
      +

      登录

      +
      +
      +
      +
      + + -- Gitee From 84f93bcc3c955da9c20ddae4ebb93aef13525c12 Mon Sep 17 00:00:00 2001 From: yyx <1229119578@qq.com> Date: Sat, 14 Nov 2020 11:33:06 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E6=9C=BA=E7=A5=A8=E9=A2=84=E8=AE=A2?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...204\350\256\242\347\263\273\347\273\237.doc" | Bin 0 -> 41472 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "\346\234\272\347\245\250\351\242\204\350\256\242\347\263\273\347\273\237.doc" diff --git "a/\346\234\272\347\245\250\351\242\204\350\256\242\347\263\273\347\273\237.doc" "b/\346\234\272\347\245\250\351\242\204\350\256\242\347\263\273\347\273\237.doc" new file mode 100644 index 0000000000000000000000000000000000000000..9fd7d6ccfb2699ecb61d5600df3fad3390f0bcd9 GIT binary patch literal 41472 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 SBFuq*z)_HUxCY^n?f(O3W~~wc literal 0 HcmV?d00001 -- Gitee
    • +
      +
      + 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. +

      +
      +
      +