From f31afe38cc33d0372c1caaddebc00acd752cc9ed Mon Sep 17 00:00:00 2001 From: "xiajun@doweidu.com" Date: Wed, 24 Sep 2014 14:03:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E7=BD=91=E9=A1=B5=E5=8D=B3?= =?UTF-8?q?=E6=97=B6=E9=80=9A=E4=BF=A1flex=E6=8F=92=E4=BB=B6=20=E6=BA=90?= =?UTF-8?q?=E7=A0=81=E2=80=9C=20CIMWebBridge=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CIMWebBridge/.actionScriptProperties | 42 + CIMWebBridge/.project | 17 + .../org.eclipse.core.resources.prefs | 3 + CIMWebBridge/bin-debug/CIMBridge.html | 108 +++ CIMWebBridge/bin-debug/CIMBridge.swf | Bin 0 -> 11453 bytes CIMWebBridge/bin-debug/cim.html | 108 +++ CIMWebBridge/bin-debug/cim.swf | Bin 0 -> 11285 bytes CIMWebBridge/bin-debug/history/history.css | 6 + CIMWebBridge/bin-debug/history/history.js | 678 +++++++++++++++ .../bin-debug/history/historyFrame.html | 29 + .../bin-debug/playerProductInstall.swf | Bin 0 -> 657 bytes CIMWebBridge/bin-debug/swfobject.js | 777 ++++++++++++++++++ CIMWebBridge/bin-release/CIMBridge.html | 108 +++ CIMWebBridge/bin-release/CIMBridge.swf | Bin 0 -> 6662 bytes CIMWebBridge/bin-release/history/history.css | 6 + CIMWebBridge/bin-release/history/history.js | 678 +++++++++++++++ .../bin-release/history/historyFrame.html | 29 + .../bin-release/playerProductInstall.swf | Bin 0 -> 657 bytes CIMWebBridge/bin-release/swfobject.js | 777 ++++++++++++++++++ .../html-template/history/history.css | 6 + CIMWebBridge/html-template/history/history.js | 678 +++++++++++++++ .../html-template/history/historyFrame.html | 29 + .../html-template/index.template.html | 108 +++ .../html-template/playerProductInstall.swf | Bin 0 -> 657 bytes CIMWebBridge/html-template/swfobject.js | 777 ++++++++++++++++++ CIMWebBridge/libs/as3corelib.swc | Bin 0 -> 193727 bytes CIMWebBridge/src/CIMBridge.as | 185 +++++ .../webclient => CIMWebBridge/src}/Message.as | 2 +- .../src}/ReplyBody.as | 2 +- CIM服务端及辅助文档.doc | Bin 54272 -> 53760 bytes .../cim/nio/filter/ServerMessageDecoder.java | 21 +- .../WebRoot/console/session/manage.jsp | 5 +- .../WebRoot/console/webclient/CIMBridge.mxml | 177 ---- .../WebRoot/console/webclient/CIMBridge.swf | Bin 48379 -> 6662 bytes .../WebRoot/console/webclient/Message.as | 77 -- .../console/webclient/MessageDialog.jsp | 2 +- .../WebRoot/console/webclient/ReplyBody.as | 28 - .../WebRoot/console/webclient/main.jsp | 14 +- .../cim/nio/filter/ServerMessageDecoder.java | 13 +- .../WebRoot/console/session/manage.jsp | 5 +- .../WebRoot/console/webclient/CIMBridge.mxml | 177 ---- .../WebRoot/console/webclient/CIMBridge.swf | Bin 48379 -> 6662 bytes .../console/webclient/MessageDialog.jsp | 2 +- .../WebRoot/console/webclient/main.jsp | 14 +- 44 files changed, 5195 insertions(+), 493 deletions(-) create mode 100644 CIMWebBridge/.actionScriptProperties create mode 100644 CIMWebBridge/.project create mode 100644 CIMWebBridge/.settings/org.eclipse.core.resources.prefs create mode 100644 CIMWebBridge/bin-debug/CIMBridge.html create mode 100644 CIMWebBridge/bin-debug/CIMBridge.swf create mode 100644 CIMWebBridge/bin-debug/cim.html create mode 100644 CIMWebBridge/bin-debug/cim.swf create mode 100644 CIMWebBridge/bin-debug/history/history.css create mode 100644 CIMWebBridge/bin-debug/history/history.js create mode 100644 CIMWebBridge/bin-debug/history/historyFrame.html create mode 100644 CIMWebBridge/bin-debug/playerProductInstall.swf create mode 100644 CIMWebBridge/bin-debug/swfobject.js create mode 100644 CIMWebBridge/bin-release/CIMBridge.html create mode 100644 CIMWebBridge/bin-release/CIMBridge.swf create mode 100644 CIMWebBridge/bin-release/history/history.css create mode 100644 CIMWebBridge/bin-release/history/history.js create mode 100644 CIMWebBridge/bin-release/history/historyFrame.html create mode 100644 CIMWebBridge/bin-release/playerProductInstall.swf create mode 100644 CIMWebBridge/bin-release/swfobject.js create mode 100644 CIMWebBridge/html-template/history/history.css create mode 100644 CIMWebBridge/html-template/history/history.js create mode 100644 CIMWebBridge/html-template/history/historyFrame.html create mode 100644 CIMWebBridge/html-template/index.template.html create mode 100644 CIMWebBridge/html-template/playerProductInstall.swf create mode 100644 CIMWebBridge/html-template/swfobject.js create mode 100644 CIMWebBridge/libs/as3corelib.swc create mode 100644 CIMWebBridge/src/CIMBridge.as rename {cim_for_netty/ichat-server/WebRoot/console/webclient => CIMWebBridge/src}/Message.as (97%) rename {cim_for_netty/ichat-server/WebRoot/console/webclient => CIMWebBridge/src}/ReplyBody.as (93%) delete mode 100644 cim_for_mina/ichat-server/WebRoot/console/webclient/CIMBridge.mxml delete mode 100644 cim_for_mina/ichat-server/WebRoot/console/webclient/Message.as delete mode 100644 cim_for_mina/ichat-server/WebRoot/console/webclient/ReplyBody.as delete mode 100644 cim_for_netty/ichat-server/WebRoot/console/webclient/CIMBridge.mxml diff --git a/CIMWebBridge/.actionScriptProperties b/CIMWebBridge/.actionScriptProperties new file mode 100644 index 0000000..1e68ca0 --- /dev/null +++ b/CIMWebBridge/.actionScriptProperties @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CIMWebBridge/.project b/CIMWebBridge/.project new file mode 100644 index 0000000..f8982bb --- /dev/null +++ b/CIMWebBridge/.project @@ -0,0 +1,17 @@ + + + CIMBridge + + + + + + com.adobe.flexbuilder.project.flexbuilder + + + + + + com.adobe.flexbuilder.project.actionscriptnature + + diff --git a/CIMWebBridge/.settings/org.eclipse.core.resources.prefs b/CIMWebBridge/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..dde0dac --- /dev/null +++ b/CIMWebBridge/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +#Mon Sep 22 14:10:44 CST 2014 +eclipse.preferences.version=1 +encoding/=utf-8 diff --git a/CIMWebBridge/bin-debug/CIMBridge.html b/CIMWebBridge/bin-debug/CIMBridge.html new file mode 100644 index 0000000..5ba81ab --- /dev/null +++ b/CIMWebBridge/bin-debug/CIMBridge.html @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + +
+

+ To view this page ensure that Adobe Flash Player version + 11.4.0 or greater is installed. +

+ +
+ + + + diff --git a/CIMWebBridge/bin-debug/CIMBridge.swf b/CIMWebBridge/bin-debug/CIMBridge.swf new file mode 100644 index 0000000000000000000000000000000000000000..51a350e643fb3acb3b7dace9579cd1945000ab9a GIT binary patch literal 11453 zcmV;uEJD*mS5pzRR{#Kb0mXa^cw5JH=AHW*JV+3v_>f3FAc~Sq>52rvHziRbCBc#` zOSUAx35fs*h_FF`20%TWI-%_-ani;~>_oBCBxT-l{K&&;n&e9xH=9kGwA~QYCu!4e zpJ}_@HVv=4{kBOzTiE~1y&yoj5hZVTSD!F<=FH5QnKN@{&YW|GXC?KoCCT$SNm|LI zy|t?(NqWbMM`cOcvFq$)%6B@R%_TGGovncmf2(iTkZVVFJTZ85Z^(z-bZ!u-ovjo3 z{M2A)=b1BSI?i-;WU{9^0|NsCo&I2FFt`mRw&l*H^O3XL(zy+-LoOfw2`qc#xmY$i zl?Q$s+jwjd+0=A4B~XpWI^(JMWIUbEbp|>Dt#;8!u3R>q>xhhJqVbMcX0j6*ok4#f zXtyL<8;=bpGTF&Uekd|El}g4U)Mn?|ZMlg|?4dJ})A4PIR3taCqqAI4bhA`>yxh|v zQK%BIq+~vsPsN9ZsW-mi7&UWDjL|n-ZdhQj3NEQTH62YQa})9G&~*BtbmmN26f8rR z6pm%%k$h%p(GqM)!BixDYC3W%KD6(!z_*xQQffSsj}L)t-P;DX1-q>=5~y4VbR7hJ zr;@37)|ZY<#&@l}ueH2pf*pQZHPPv0YJ6vFS9kw_KiJx7uYgWkNEJ%}OG|*T zwuYoVak)wO1`&|lFr;eY>|L&-UZ~5O|@82ssq#wEV9JqZX zn;btCm%dZ~k5yKF8RnHbBzg9#OOoEhM)nMj-j&1h9-T;zS`!wcMc^Bu?qZDH9etyy zdQUuRVI0k6W81ecBI}6c)QLs`k~+xlB~4e2{_7{pNHj)&ss zhGMBC5+|d{^!ScW0_Z!iSR+Hu9d-+}aLUnAQ$ubnV!K&jicLg7yVTH`cyvc+DY0^g zRbnWb&78qfDAgF^h*2B(ik_$l$6dL2e%Kn+#>$?Zisw&e5{XnY9Y1MP#_DJ-a*kLT zw_6m`Q<+nl>AV)FNvhpj9!A`Yu#uH%GB)T$ZJ9K+c5ml{!X`OK6CTF1|- zL;__pcghnzmyhR$Pe+oeNHi6%!m=C3RE-dnIk+f%B(dH;1M;>0_$$iYAnv}?{B~sJ53H@XaEHHR38#Z>`N1yQ|XO7jy=KeRPO) z1eBh@fEMiP?&(!}dV@;OKsO)BWK!`+TIucSQTqHrH4y9>Py++OE;ZQI7f^$J{yw#< zx2I3-?hXdk?w)?XZmq29C5xiwnwhU&vPf#*w4@rBeI++3~V%)>P=SL(P{&$ULbt>mnkD=l29;mT^Rtl?}MS5|Pniz_{x z^>U?;vwqG8IN!;YU0m72mA%{%;*R}XIlz^J&f6GQj&tR%7JTn_jxx@}Tsgs&lbnrl zCBo}sd_|nAr?`^jN(Wc`TnTU`%C#Y`oaRa`ub)Ak#~H7G0>5|Scb?VI0nEHLH8Zk| zuw!Pe4=Ml5TFDy#e5H3L$h@nDX0{_?0sk)BsmTDem zOp@`l!>AeKA&1t3nA47T7!6}CJKkwDjk)c3z*sd_WyQzXShd+TJ|+*dkVkI66`fL4iRG>Stfl^} zlM(osWDXeX&tJJ{4jQeq^xbZ35Z@g}oA~ZDHWp@$O|v2~WNeLF`zTw)7=H4T<3~eh4h;g*CZ8Uoun!P-49-?OPz1`>(-^0`_(nl7XMdA*^ zjPIR<`Es~+-aKkyRx!1#nlOV#_l4>t8mcDC5^J-X3rf=13UkcxhU!`SSc4e}HA?Mf zbn}U(t&t{_)n#<8$11yBkOf_vu)3DCyY`^5L$vC1@Lc_az2r&*gcA6hF@#dYR~*?3eNW;5$zYE&KbnHSi*XM9(ps`(KXS}z$#U#P1S z#C?_-$HrQtYG?xs)ywTD@KI6V?icF%fL1j>&Ww8!ZN|MXAVwrHe~WDr^vBG6iW&Ef zZ4{NGs_{UgEwo7r)hjfOZUt2GSyUQ9OM1b45uKh5-GZ6a&6ioIT~M=1#v1Taxv?$g zE3A!$wlb<;4US{)Ab8k#jhPMG*g=DxXxJKQ2yY8_0McYk9PD5Rx3Lpjwnnzh9iWxc z0-p1PI>B=*%+*H6nBR`CG5lizJHFNkj0NrZIwLyPCE^XH&vCi`*s@*j^dISL&AJXUXhf^&RM{ zimVVM93)K~hv?)aSp<^rSflo}P@xvr1oAx6;=il>7Q1Eof@9+RU3Y&EasaR2x^w4s6Rz)48JoQUT6u zrgP@v%*`3(f@%^CSPf@h&T6@{jM69!ZjjXE5dam^oel22wO$CL4+Gcc#8g4o4I4FxIT0H% zyokBx%{_(|agSBan|njmI2on=I2cR(snA)X&-t+t*xV|61h;wxdrlA!f2aNraG2A- z#cM)|H+^qW4Y7!b)DThJJBT&Qw-8CeP1$D7Yi=@&HE)1DaWSu8y&Gn^o949t!&}4R zkm%MB@b@TzuHfR973lR_H`%~Ipu}FmzyrC=-^^asW%dFSEnzRG5W9)Dz)7`& znVLCU4OX+5$?5QxnTglQE9x5>Mc5?5RU&K=;TjRH72!I@AR{Uo*u`bB3qA~df{$Fa zTXI6?1oKpbTVy7rO|8TUy2S}Qui=EcMNU|;$O-j}oX}u#!k9j9HikI6q1EiHT+M62 zZ8)AJ?7p4ix(_W$#qQflyKg7$&!ttqdj0h_>OoQTSf|j&b;e?mbUqtTb>jL<3W8kc zsZ8cnDh|bNS1f~!WVDksao1~nJ7L6PU>P^X_K}7up1tmA;e@irx_95QY+pOAlf^zh zY&K&#os=7~yl8T7Tr}wb*1IFA>G%yG9T!zfx7tn1_kxC|TeW`G5hfVxCMnx_J<5t{ zB{sv^sCM}S0sE9ygF#%msYkeh4+J%hHR_ErObTu;Yh2-6!Nt|Z8R8bu>sw^qI=1JyuyP>zG%N_tLjCK0X@VGDDqPF2DJlpS}19VF+S*nt^S znQJeYLdG=>*pxXxwp}LUoNRhcF}Kh87nmw-H+P0v;UHrnS#06BV5n=5eT1^z(vbyL z#g3SFhPA@{K}`Y#%6rQ(UaFPX;wsp-5Ad=!sNT6Kjsx_en>u)8jnryaN1 zv&2w=8^%%M*(yX1mqwzA(UAq@R|=eBA1iePDoj!x4la_yxkyPC(T20x$T=bXmI+L9 zZuQXvx9&fFa^&dnp4;{v*Y+H_{r2JQhoEnTj?Ra+CnGsuBpdgoGoaG+)Kn%5LU#Ck z`vgs?(B|-F7+mtc1gQdj>J-$3%OCVD<@#Y?ChIdQP|!wub3+z$E=I^Q6>^BXJhpu| zIi^P|$D|)Se)PcMTS1&dM-F?5s^xXt)?YD{N3R`9V|kc^6(g*uLOVE!SSH|(w>El9 z`P@{o*m1k@WfIl`cMA$xWvo>$sO7FG?mDzDWUYgJRf|z93H|V0w~y>QsvbXj*FG&Y zeCXId_3&MX4k?F+55L8U63lts^W!G>ndQ%q@_bpxNLRmK4fJ>Qt35s4{c2ZFupfs= zSC1O>LvI@l1iBWFQMD@w^=?0kRGzYGptrZjg(HVI%8s?#ElqqSYi7+G6evg(l`cw% zY~)PiGHyx^PP#d9Us7-!L0>A4BesIe4P0sBbS|ypilt43u5}GpHgKhlE1S5onQmJh zoOKH2XOJsUuXdA$RS_Cis8r=!owv#kI=p1b;q=U?IN@-ZRn19N^eJeSbvpjBj5qr-X}u*4iHgj~{=OB3#bgCtayvOgdrKSlj& zl%~w7aP`4zX{P#;nYVgzW-j4Qc)~S_nuNC=61n+EVZZtIxdgjFor1EeyGR#dER==nfWe;+V2HeF;-Jv-7NLr`*vu|%x74E1{_*}0bQ^$Jo_dLzeyNA zUIDJHhd#!fwJUrEIqX7R6F{G@C}g$%JnDL(DKo!>EX7z??g12Un`$2^7R|3R9|)sC zh|!)>K$vep?dLmxd4a8$z76$pD|?lh-)7jC?13%1^Zac{LGZLXtkIlR!3Y;-tS zOQ2YE{QPS1U#}LW;*$TaVi9@f_XLG`Sqg6pw}tBy^?nLS3f};-TT-|Jir>&p)xIK@ zr0|o=OW~y&H+ecPe{Z!BLkhP<<{B7=;f4i)+Pa^*=z48MmzRreWI`^sFNkc)Fl#mGQzi@l-zy8BQ8np*N|L+T*z{AY(h!J(=4eYJe8l&=>jvHmq%OW z(NTFcDvu`Q(X>38l}Gc;$0y=v_dxByac|1p5gB(;X#${z->>-netC2nyYwh?;NIzC z)y%o`ru$hrAuPfS_5ceH-87aZwDT^dU7Me@c`Q?9xx7V%I=<4mKsazX;2|Wu-Pj;U zaq>TMoQ^;z1b-1nBo>1gLniBt#*Kys)^{rg5hV&}$VEC^0B*)-z~y> zM0lSF?-$_%A{-Ur3D)K&Nmhp>t1`(&A}rfLa;hxvhMtEhu$k-7?~tGixeP*U8wsuY z5}}n&TT|={k=P(ZBk-3D7V_Ha^Ut_3wn^p5R^Kc=o zB$QX`a4?y7&WXgkVP@ZN9xH^kg!W2ZD>Cj5>mv2;kS>gqg%Fp{d!dyw>dx;MXXL$w zup{AkMTmC~6i(N1G<&l)+{}|z*<;tfvuLO7uXu*%mQ1h zK4Qpb4l>u7LZW&)rkanmNx7KjeHKbI^U*?73whZ2E8d@wO!63;H`c>^Z9dMtQ%R)KKiytO& z8^Flb#0bC|ZUbcRod5(Ob=v^Ni<_0vWqzmxP`#Z1beqqX0Gb!B5=M{tu@XQpOF3Lf zIo#oBSy3$Vk6kUkbhY?L;TAn9a`>E+%ThA(Z?+yZCDE%0;Y=hCeD6jREtg)Z!qusOv7x@vkbH{27|O zXUkepb0<~F0VamZzOVm=E=HoIFYPccM z@CvO0^Stcch0l8lEQ`Uy`N;eYBndzxMmOGXC+7$enA+GgOHq|bAPT(Bf~r#c1O!mk zp?Ig^)$wr|y)rK#jA3jk<-W$VkH>hpDbZxeBMj{G0D2nbQGG+q5p`^dIaiw>k;5xP zD znFznpBD`@3R|gc4XN}vj{`57H>Xz2R8A)0vDRq($mtJYTq}NHUumwvM7lBRTjkI(6 zDWHo$8ji2>rQsk~~TE zlOo|?RxA=2gzzt7N)k@mM}%xlTDt42b*;M8TqiC9H&q^<(!vS+Mms1*L#?pWH&+D> zU01fd$thW0by=DcA=w4`0t0HWpR|{~1LSoI|I=V^piAuvbY1_}Q#J;W?y`%_WpZQ7 zN+vTH$;h39lTarMgBk2+vI?h8=W2$Hj`WH!mpzG+RaH`v* zz6YWiNnlVO3JDBSTZOF+YA9m2fF(x-NNpHE3SwArt^l=R7nFyx*?nt;AT|U+Y!?(9 zIARnT5?np%AEf%4bPxg=)jEXo=#Hf>yc^~3u>?1G>sjTaRK7-vnlY4@&2g01%bI}= zkXtM5bB@IgVf3ap1hUPDO~C_VLC$t5%-S8QAfVl{<;Hl4knp<>-*))OJ%=UBwo{?z zuQZP=QTe~gCIqv`wfcYCCSqF$$Qm&Ee`PbGAz(x5zwrT=Hy^4?8_;zb_9nZ1gA8kT zTQF@f(BBQqLJu6ogTY=fZ2+-AcNa_!J;;Ec7IMj(d;sp_f&L(wCVF9u=;}cb@CUA| z%~)#9D`_qQeSQ7J;!0ziVDUP*fD%s=XXEw;UKftt#O`#5BP+S=;c^X^>$tL!%bT1V z$-xQ#g>X&-={!WnXU z$n#ha=^hyta97CXQ55*1gsMEM!W2iy;nA=os3Fy(<5uPlxnb02x)#zr4h8<>A;sf_ zA2bUw4>-jshh&diVXo>>wWmsfpIV4};AdHd?XHG)l4^x^8TDx)&&pCe?u5k&2$3q= zdIEyigp3_Q-gZK1V-v~()0NH>YMVTvE-USJ;gt`k*l?ujbw zCso5Is@tk2s+ORj_^;1A1M-56^BFFohZ${)G z^Lk19_%ge}9Ys{SNtRh&0V&QnLS5+ypdXE&g89__!01`Of7|HUKqy>CFIKXd)E+3d za#nVQZc<5QVh*x?Q}zvR7}RKa!=ThPMtsW(Up_sr%Z%>aL&>QFr_yj58n1%CN-ha) z)Nv>dt4oOxDG(R44nx7{E@d5#9A3)I6+kBaNqcjGMpIdfrPVaXBrL?0*a^6# z++hX7rBkE10v$k=g`nye-6gv>ShD=Aq|Hc*qrt@1Y))lLC*ewq>I&cTw*qlWBTINlqtZ z`cFZXosFbQ2dedC%`=^@)U+UT#bC!SZ4>RH8$yL_KD32+AyZ{TviQs>}NV=-jev&MIepV-w8c5Sz{)+-_j zjBtb~wAifM8r?Xtssnm!;S*r#qz5aU5-NQdmN=bs`%uX@P74D5DTLoQI^DsNH6?D^ z4_!ELyOKG?#KKv>Pdq;b;UneB6@Dj!zQt#y^w@Eds+0B{r$#4EmMoiQ(Se&-R3#!= z#8cAKlX!nQ1xF;B^oZ4W=HD=E#e8r=Bp;jPqn7!aJEr#>k;Zc&_`< zF*tzx(((9s&KEyB1tjUbPh60$wYX@>9C*~0`MBLDk1v@M?m?)M9AE!dm#T$rd6$wm zFZ9xu@6Keg9`L;NP$uT2o%o&!uvQht_P~(|qslFBsdzK`ialLiG1-S>as6FSKJ2#Vm(B>_heeKKJ7ykW@lm=3j%!$z*qdjMNm!W?j znZUq&6?USx(yhv#uz}_M)!y8f($0=YU@Y=h)=!zqOHSAx^3uA4UWp5LzMh-lTj44t zYW;t>H`qcD-5az(Pfu?^gUzNJmwf!w0(4=Z3k|LXUARN|;lLE=@9QJ?BwQrA`urLc z1pQqI;n#$kz3^+olaDS1#;L`t!9X97cH<8tpaFmX0Ez|sgG)RQ)!;x^uq=yEpP)1d z4(LK@Q0o{GcZ&WB-zFG^gnN^9kAQmeg|iG{i(hi_ka(;!1PgAY(9hUXYunmi3DvFhHrRIf zshLBP^BinUk4RDnd~G_Oz=fpaJY1X{{7E*`kI#Fp&r|g2;2&f&??(|?TJbcKpJ5+n zA7U5SV)P^B=(FYMbLHr7mZKjlM?YSUexe-xt#Wj>9Q|ZD`l)jC)8**r%F)l4qhBaT zpD#yWC`VtyW7KXZ{F&>v4NDFtt)@q#tYxa<~4s%CC@hvDYcwOi`Oy-O$4ng=#F&T2N&b5w5+S>9@Kaq);p zsjRN1QprQUM!TRw30X>>5Gi>==FYh=OE80vkfrTbx+Cp}E=DmAK;xrAp@SQo1{W|m zRJWUl>Gq^>Rr?kPp5ww}$ueE3FkRsuS0mjG>zebRQ<`yJGVh;*7g)RZ8G66C0?TTF z)yp43*r0p{VWavr<}}BIwJcE;sWu}8qdDR+qgGpS?-2#YkA#(9gZxtkV-4~rto(<( zos^%l^1aBPEEwyMpSJQJ_SR5-*2=F%ey(7wM?U<`Xe?*E3o`Q0TKRRzKUXj|Apa37 z|55LcDgW(O{tD#3qhM@A{tVob2*G2_`w~hRn@qT$0Ww<-V32tiS;y+vLD&8yvryCn z#d}y`6Hvf0jZk>Wqv$C%XSC1Hh8kEqtZ?4@3FTJUr^?vMvGcHHz{q9@ywBQr8-e#Z zR@e-@AFaUq3E=IxXyN@N^Wxd66NV_btzFYqm=Zq+Q;p#lNWWksZ30qwvH5`Xi#Ad+ zslE)P!Ki9s{R;EG2)iGwX?EG@B=*x@}JUDlC6%%($Iq-cKRD z&V0yD%igDvUT;2ZrxowxNN+ID*lE?9MS7$8sGZh?HFA^r1Pq>{0bN)lx55F@25@1G z?1bgi1~`N@vI|dIZGcl)BZuJsX9HYiYouFPBi#GR?r*(b{FB#<|Mq&Z`HkY> z8^!zIDE`_T#UH;>+tUH%V7p=U z0}HdKWwI0|wA>}U0|ezwBot$)fLFq~OE3l&+N7E&S$X%!zd(h($}gGu3mC#4zXB(| zLL2)e*}1R_IbjsM_(4G5!1{UyK=a=S6CVDqV@7DjpTko6n0&EK{!E)x&oLoS$lf*h zJSi7mMbr2*KQI8!8Mg|~cuL+>n?r@CWqWtIY(68;lcgx(!^--wJdf3(pwk8XJ{ejs zhguod*>mz7Iy8$N?4xkcBd-0JJP!&$C!}gm=%B!7;oyhi>-cf}9QZl$gL3JR^jWB` zZf7qeJS=|+;SuG_2=7q8B9q%+LM4lx@Rm);1-yhlT}OR>0ewD7eTFIbWf?ocm!Jg8 zU4h#j8SGWK+7%LQWVsi#{cX8mgg_CH_KNvCpoUa)D{Ys@wO7&9UHb3K<~QZ}0*r-G zm4-#O-rpsn%@VFx5o5FHz4`lcA*zF}7=_nQPb%-`bF$O?zC3RXk@@`R#6mwnDnzNj zq|_fEbq}TH1$!ZNFQvXmsUIPAAEmyI6b3RUgEZzv7%kh>*{J5BfnLHu@27z-um>DJ zkI!XyKO}7=e~HQ`qArW+|3;2F5T_=9 z#Q8yBi8@774XS*(ZHp!vQ!sPukt2ac4f0Dh`)a?ayJ3`$qigk-r zlv1xz>NTWdl=>;9{u!wdJPimikN$jDj`En>7y`wjZhJTQFt|AcqS*lEeJ22&pqmYl z$%;>oMU$*aZ2VzI4Q3>J&X_QFhU{z5FB(0W0yU&>xGQNIqd zMYV><-zb__1utlds%r1ozzgre%PZfE^9rr~_d!=X!LBNp{P!v6FPR?zb78-&2Va{{ zD+Ra~0QihzG1W&DdvCrVSl~Hj&PWQj{e-CXVEtE6YgPeowotWC+SNW&swVdE&!N^s zRLlDgl>Q=Ws>1cVwAZJw*T<3b(juOhZ9HGK@N8stjmZDnV*YPi`C=>iCa_Nm?DSU? z%vZ@zAmoyD<-Y$Bn zRMeu&l@eVn)PJ^!`p@n1e_ARpQ2$h*&Imt*5)r0Agh$cT-=e7uHT8FP)xQ^oA6`Iv@Fy9jFPk%JxP3m< zPKUDC3d39GLtEgoU)N3tM2-A}YCZw?Ga(ROG2f|P6kGOIY}x14i}To_-=$uJqrN(4 zoPoc}S!+LdpX$RNtz%(o?O2u{QDHfJP8A#cmP-k3%d3|Q^AXJlp_YkvZ~Kd?*v zQ1$*1ExrF@<2g==i=yfbtKW=yx@?!cVz-KGmiZ?(>`ztiR;)>^1M{zJ(BFw-ay@bN z--CjWF~M^MbyMwU(C*Jv?@p>D(obo04e6Jj(##KP1>;>zEL|96+Y82h74ds2;`d@f!-j1>qix!6UeHQA z1jOie2qhsu+c*m}qR6vUacHL51($x;z`&Y;Zl3bArS z!V*#O4n6<-6WxxH<*_@07BbtE(5TML;VHy zRzED}{awA+wYzCTUAL&=>h15b{99HEMHS53`0ELl$FgPW7FKWtCh%2G2Q(Mfn{WjZ zw(5RTp=C|mgDz>frm5J_pzG1Ra_x$`dJ#5=uu+6fB5Yv}Ct0#pc{lypF7jw0EW*8o zJX&DE1{>nG=5@ame0 Xl81^12Zkgq{yjWtH&Xu_igYz*=Gs&P literal 0 HcmV?d00001 diff --git a/CIMWebBridge/bin-debug/cim.html b/CIMWebBridge/bin-debug/cim.html new file mode 100644 index 0000000..a521838 --- /dev/null +++ b/CIMWebBridge/bin-debug/cim.html @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + +
+

+ To view this page ensure that Adobe Flash Player version + 11.4.0 or greater is installed. +

+ +
+ + + + diff --git a/CIMWebBridge/bin-debug/cim.swf b/CIMWebBridge/bin-debug/cim.swf new file mode 100644 index 0000000000000000000000000000000000000000..cd66f492d13ec2770290ca42ce279d9443c65b70 GIT binary patch literal 11285 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 2 && hash.charAt(0) == "?") { + hash = hash.substring(1); + } + return hash; + } + + /* Get the current location hash excluding the '#' symbol. */ + function getHash() { + // It would be nice if we could use document.location.hash here, + // but it's faulty sometimes. + var idx = document.location.href.indexOf('#'); + return (idx >= 0) ? document.location.href.substr(idx+1) : ''; + } + + /* Get the current location hash excluding the '#' symbol. */ + function setHash(hash) { + // It would be nice if we could use document.location.hash here, + // but it's faulty sometimes. + if (hash == '') hash = '#' + document.location.hash = hash; + } + + function createState(baseUrl, newUrl, flexAppUrl) { + return { 'baseUrl': baseUrl, 'newUrl': newUrl, 'flexAppUrl': flexAppUrl, 'title': null }; + } + + /* Add a history entry to the browser. + * baseUrl: the portion of the location prior to the '#' + * newUrl: the entire new URL, including '#' and following fragment + * flexAppUrl: the portion of the location following the '#' only + */ + function addHistoryEntry(baseUrl, newUrl, flexAppUrl) { + + //delete all the history entries + forwardStack = []; + + if (browser.ie) { + //Check to see if we are being asked to do a navigate for the first + //history entry, and if so ignore, because it's coming from the creation + //of the history iframe + if (flexAppUrl == defaultHash && document.location.href == initialHref && window['_ie_firstload']) { + currentHref = initialHref; + return; + } + if ((!flexAppUrl || flexAppUrl == defaultHash) && window['_ie_firstload']) { + newUrl = baseUrl + '#' + defaultHash; + flexAppUrl = defaultHash; + } else { + // for IE, tell the history frame to go somewhere without a '#' + // in order to get this entry into the browser history. + getHistoryFrame().src = historyFrameSourcePrefix + flexAppUrl; + } + setHash(flexAppUrl); + } else { + + //ADR + if (backStack.length == 0 && initialState.flexAppUrl == flexAppUrl) { + initialState = createState(baseUrl, newUrl, flexAppUrl); + } else if(backStack.length > 0 && backStack[backStack.length - 1].flexAppUrl == flexAppUrl) { + backStack[backStack.length - 1] = createState(baseUrl, newUrl, flexAppUrl); + } + + if (browser.safari && !browserHasHashChange) { + // for Safari, submit a form whose action points to the desired URL + if (browser.version <= 419.3) { + var file = window.location.pathname.toString(); + file = file.substring(file.lastIndexOf("/")+1); + getFormElement().innerHTML = '
'; + //get the current elements and add them to the form + var qs = window.location.search.substring(1); + var qs_arr = qs.split("&"); + for (var i = 0; i < qs_arr.length; i++) { + var tmp = qs_arr[i].split("="); + var elem = document.createElement("input"); + elem.type = "hidden"; + elem.name = tmp[0]; + elem.value = tmp[1]; + document.forms.historyForm.appendChild(elem); + } + document.forms.historyForm.submit(); + } else { + top.location.hash = flexAppUrl; + } + // We also have to maintain the history by hand for Safari + historyHash[history.length] = flexAppUrl; + _storeStates(); + } else { + // Otherwise, just tell the browser to go there + setHash(flexAppUrl); + } + } + backStack.push(createState(baseUrl, newUrl, flexAppUrl)); + } + + function _storeStates() { + if (browser.safari) { + getRememberElement().value = historyHash.join(","); + } + } + + function handleBackButton() { + //The "current" page is always at the top of the history stack. + var current = backStack.pop(); + if (!current) { return; } + var last = backStack[backStack.length - 1]; + if (!last && backStack.length == 0){ + last = initialState; + } + forwardStack.push(current); + } + + function handleForwardButton() { + //summary: private method. Do not call this directly. + + var last = forwardStack.pop(); + if (!last) { return; } + backStack.push(last); + } + + function handleArbitraryUrl() { + //delete all the history entries + forwardStack = []; + } + + /* Called periodically to poll to see if we need to detect navigation that has occurred */ + function checkForUrlChange() { + + if (browser.ie) { + if (currentHref != document.location.href && currentHref + '#' != document.location.href) { + //This occurs when the user has navigated to a specific URL + //within the app, and didn't use browser back/forward + //IE seems to have a bug where it stops updating the URL it + //shows the end-user at this point, but programatically it + //appears to be correct. Do a full app reload to get around + //this issue. + if (browser.version < 7) { + currentHref = document.location.href; + document.location.reload(); + } else { + if (getHash() != getIframeHash()) { + // this.iframe.src = this.blankURL + hash; + var sourceToSet = historyFrameSourcePrefix + getHash(); + getHistoryFrame().src = sourceToSet; + currentHref = document.location.href; + } + } + } + } + + if (browser.safari && !browserHasHashChange) { + // For Safari, we have to check to see if history.length changed. + if (currentHistoryLength >= 0 && history.length != currentHistoryLength) { + //alert("did change: " + history.length + ", " + historyHash.length + "|" + historyHash[history.length] + "|>" + historyHash.join("|")); + var flexAppUrl = getHash(); + if (browser.version < 528.16 /* Anything earlier than Safari 4.0 */) + { + // If it did change and we're running Safari 3.x or earlier, + // then we have to look the old state up in our hand-maintained + // array since document.location.hash won't have changed, + // then call back into BrowserManager. + currentHistoryLength = history.length; + flexAppUrl = historyHash[currentHistoryLength]; + } + + //ADR: to fix multiple + if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) { + var pl = getPlayers(); + for (var i = 0; i < pl.length; i++) { + pl[i].browserURLChange(flexAppUrl); + } + } else { + getPlayer().browserURLChange(flexAppUrl); + } + _storeStates(); + } + } + if (browser.firefox && !browserHasHashChange) { + if (currentHref != document.location.href) { + var bsl = backStack.length; + + var urlActions = { + back: false, + forward: false, + set: false + } + + if ((window.location.hash == initialHash || window.location.href == initialHref) && (bsl == 1)) { + urlActions.back = true; + // FIXME: could this ever be a forward button? + // we can't clear it because we still need to check for forwards. Ugg. + // clearInterval(this.locationTimer); + handleBackButton(); + } + + // first check to see if we could have gone forward. We always halt on + // a no-hash item. + if (forwardStack.length > 0) { + if (forwardStack[forwardStack.length-1].flexAppUrl == getHash()) { + urlActions.forward = true; + handleForwardButton(); + } + } + + // ok, that didn't work, try someplace back in the history stack + if ((bsl >= 2) && (backStack[bsl - 2])) { + if (backStack[bsl - 2].flexAppUrl == getHash()) { + urlActions.back = true; + handleBackButton(); + } + } + + if (!urlActions.back && !urlActions.forward) { + var foundInStacks = { + back: -1, + forward: -1 + } + + for (var i = 0; i < backStack.length; i++) { + if (backStack[i].flexAppUrl == getHash() && i != (bsl - 2)) { + arbitraryUrl = true; + foundInStacks.back = i; + } + } + for (var i = 0; i < forwardStack.length; i++) { + if (forwardStack[i].flexAppUrl == getHash() && i != (bsl - 2)) { + arbitraryUrl = true; + foundInStacks.forward = i; + } + } + handleArbitraryUrl(); + } + + // Firefox changed; do a callback into BrowserManager to tell it. + currentHref = document.location.href; + var flexAppUrl = getHash(); + //ADR: to fix multiple + if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) { + var pl = getPlayers(); + for (var i = 0; i < pl.length; i++) { + pl[i].browserURLChange(flexAppUrl); + } + } else { + getPlayer().browserURLChange(flexAppUrl); + } + } + } + } + + var _initialize = function () { + + browserHasHashChange = ("onhashchange" in document.body); + + if (browser.ie) + { + var scripts = document.getElementsByTagName('script'); + for (var i = 0, s; s = scripts[i]; i++) { + if (s.src.indexOf("history.js") > -1) { + var iframe_location = (new String(s.src)).replace("history.js", "historyFrame.html"); + } + } + historyFrameSourcePrefix = iframe_location + "?"; + var src = historyFrameSourcePrefix; + + var iframe = document.createElement("iframe"); + iframe.id = 'ie_historyFrame'; + iframe.name = 'ie_historyFrame'; + iframe.src = 'javascript:false;'; + + try { + document.body.appendChild(iframe); + } catch(e) { + setTimeout(function() { + document.body.appendChild(iframe); + }, 0); + } + } + + if (browser.safari && !browserHasHashChange) + { + var rememberDiv = document.createElement("div"); + rememberDiv.id = 'safari_rememberDiv'; + document.body.appendChild(rememberDiv); + rememberDiv.innerHTML = ''; + + var formDiv = document.createElement("div"); + formDiv.id = 'safari_formDiv'; + document.body.appendChild(formDiv); + + var reloader_content = document.createElement('div'); + reloader_content.id = 'safarireloader'; + var scripts = document.getElementsByTagName('script'); + for (var i = 0, s; s = scripts[i]; i++) { + if (s.src.indexOf("history.js") > -1) { + html = (new String(s.src)).replace(".js", ".html"); + } + } + reloader_content.innerHTML = ''; + document.body.appendChild(reloader_content); + reloader_content.style.position = 'absolute'; + reloader_content.style.left = reloader_content.style.top = '-9999px'; + iframe = reloader_content.getElementsByTagName('iframe')[0]; + + if (document.getElementById("safari_remember_field").value != "" ) { + historyHash = document.getElementById("safari_remember_field").value.split(","); + } + } + + if (browserHasHashChange) + document.body.onhashchange = hashChangeHandler; + } + + return { + historyHash: historyHash, + backStack: function() { return backStack; }, + forwardStack: function() { return forwardStack }, + getPlayer: getPlayer, + initialize: function(src) { + _initialize(src); + }, + setURL: function(url) { + document.location.href = url; + }, + getURL: function() { + return document.location.href; + }, + getTitle: function() { + return document.title; + }, + setTitle: function(title) { + try { + backStack[backStack.length - 1].title = title; + } catch(e) { } + //if on safari, set the title to be the empty string. + if (browser.safari) { + if (title == "") { + try { + var tmp = window.location.href.toString(); + title = tmp.substring((tmp.lastIndexOf("/")+1), tmp.lastIndexOf("#")); + } catch(e) { + title = ""; + } + } + } + document.title = title; + }, + setDefaultURL: function(def) + { + defaultHash = def; + def = getHash(); + //trailing ? is important else an extra frame gets added to the history + //when navigating back to the first page. Alternatively could check + //in history frame navigation to compare # and ?. + if (browser.ie) + { + window['_ie_firstload'] = true; + var sourceToSet = historyFrameSourcePrefix + def; + var func = function() { + getHistoryFrame().src = sourceToSet; + window.location.replace("#" + def); + setInterval(checkForUrlChange, 50); + } + try { + func(); + } catch(e) { + window.setTimeout(function() { func(); }, 0); + } + } + + if (browser.safari) + { + currentHistoryLength = history.length; + if (historyHash.length == 0) { + historyHash[currentHistoryLength] = def; + var newloc = "#" + def; + window.location.replace(newloc); + } else { + //alert(historyHash[historyHash.length-1]); + } + setInterval(checkForUrlChange, 50); + } + + + if (browser.firefox || browser.opera) + { + var reg = new RegExp("#" + def + "$"); + if (window.location.toString().match(reg)) { + } else { + var newloc ="#" + def; + window.location.replace(newloc); + } + setInterval(checkForUrlChange, 50); + } + + }, + + /* Set the current browser URL; called from inside BrowserManager to propagate + * the application state out to the container. + */ + setBrowserURL: function(flexAppUrl, objectId) { + if (browser.ie && typeof objectId != "undefined") { + currentObjectId = objectId; + } + //fromIframe = fromIframe || false; + //fromFlex = fromFlex || false; + //alert("setBrowserURL: " + flexAppUrl); + //flexAppUrl = (flexAppUrl == "") ? defaultHash : flexAppUrl ; + + var pos = document.location.href.indexOf('#'); + var baseUrl = pos != -1 ? document.location.href.substr(0, pos) : document.location.href; + var newUrl = baseUrl + '#' + flexAppUrl; + + if (document.location.href != newUrl && document.location.href + '#' != newUrl) { + currentHref = newUrl; + addHistoryEntry(baseUrl, newUrl, flexAppUrl); + currentHistoryLength = history.length; + } + }, + + browserURLChange: function(flexAppUrl) { + var objectId = null; + if (browser.ie && currentObjectId != null) { + objectId = currentObjectId; + } + + if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) { + var pl = getPlayers(); + for (var i = 0; i < pl.length; i++) { + try { + pl[i].browserURLChange(flexAppUrl); + } catch(e) { } + } + } else { + try { + getPlayer(objectId).browserURLChange(flexAppUrl); + } catch(e) { } + } + + currentObjectId = null; + }, + getUserAgent: function() { + return navigator.userAgent; + }, + getPlatform: function() { + return navigator.platform; + } + + } + +})(); + +// Initialization + +// Automated unit testing and other diagnostics + +function setURL(url) +{ + document.location.href = url; +} + +function backButton() +{ + history.back(); +} + +function forwardButton() +{ + history.forward(); +} + +function goForwardOrBackInHistory(step) +{ + history.go(step); +} + +//BrowserHistoryUtils.addEvent(window, "load", function() { BrowserHistory.initialize(); }); +(function(i) { + var u =navigator.userAgent;var e=/*@cc_on!@*/false; + var st = setTimeout; + if(/webkit/i.test(u)){ + st(function(){ + var dr=document.readyState; + if(dr=="loaded"||dr=="complete"){i()} + else{st(arguments.callee,10);}},10); + } else if((/mozilla/i.test(u)&&!/(compati)/.test(u)) || (/opera/i.test(u))){ + document.addEventListener("DOMContentLoaded",i,false); + } else if(e){ + (function(){ + var t=document.createElement('doc:rdy'); + try{t.doScroll('left'); + i();t=null; + }catch(e){st(arguments.callee,0);}})(); + } else{ + window.onload=i; + } +})( function() {BrowserHistory.initialize();} ); diff --git a/CIMWebBridge/bin-debug/history/historyFrame.html b/CIMWebBridge/bin-debug/history/historyFrame.html new file mode 100644 index 0000000..07e3806 --- /dev/null +++ b/CIMWebBridge/bin-debug/history/historyFrame.html @@ -0,0 +1,29 @@ + + + + + + + + Hidden frame for Browser History support. + + diff --git a/CIMWebBridge/bin-debug/playerProductInstall.swf b/CIMWebBridge/bin-debug/playerProductInstall.swf new file mode 100644 index 0000000000000000000000000000000000000000..bdc3437856cb0ae54bb9423700ba6ec89f35282c GIT binary patch literal 657 zcmV;C0&e|7S5pT30{{ScoOM%8YZE~jel|&yP13aKhpyI8)Pu*a7cZru!IYFhQ!%kE z;zt>GCuViByG~|XgJ(bJp~q+`f){V4c=Tk!n-K9Tcv0|Qh}4-)Z5q%$%)ak4^FGh} zG4mKh>p=QFFsz{%nRVYDpaejJ54{eo7BqCbU1T$6A?_UfdU|tzr7->Edg5~QJ`!s!OO;20fpVHsv=YsdQ{lvI<6(v2yrdS7`6LQi8#uy`}SX?Ni6O)r6`%Pye4YxmY_|vs1r$ zYS62JJit*Qq5)1^TgC)o6KZQEG=%VHP4mC>rXSoh>x{G-y~501s42xbb%oj5teYed zUazfuM*8z%%PQW6Lm}m@hf8V%w#-l*H+45VumzOSNh6MI zfwTnD68J}cRU>5EordGe5i?c`=PYmF$$^*q^20~+G3o1>u%sdEL~sE;XrvE~96_TY z1oQ%v(6hbD$HElG!xl|cjZOyoWIw@E;qK|`oT|Xk&*+o6#W@8T{oeJ8I9m-_V~Lc) rrowHdr=QEu;UGRC%}bhmYZ>GFiMOQQ+m?EJQA~aL;e`Gll9T{P!97I~ literal 0 HcmV?d00001 diff --git a/CIMWebBridge/bin-debug/swfobject.js b/CIMWebBridge/bin-debug/swfobject.js new file mode 100644 index 0000000..bf35c07 --- /dev/null +++ b/CIMWebBridge/bin-debug/swfobject.js @@ -0,0 +1,777 @@ +/*! SWFObject v2.2 + is released under the MIT License +*/ + +var swfobject = function() { + + var UNDEF = "undefined", + OBJECT = "object", + SHOCKWAVE_FLASH = "Shockwave Flash", + SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash", + FLASH_MIME_TYPE = "application/x-shockwave-flash", + EXPRESS_INSTALL_ID = "SWFObjectExprInst", + ON_READY_STATE_CHANGE = "onreadystatechange", + + win = window, + doc = document, + nav = navigator, + + plugin = false, + domLoadFnArr = [main], + regObjArr = [], + objIdArr = [], + listenersArr = [], + storedAltContent, + storedAltContentId, + storedCallbackFn, + storedCallbackObj, + isDomLoaded = false, + isExpressInstallActive = false, + dynamicStylesheet, + dynamicStylesheetMedia, + autoHideShow = true, + + /* Centralized function for browser feature detection + - User agent string detection is only used when no good alternative is possible + - Is executed directly for optimal performance + */ + ua = function() { + var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF, + u = nav.userAgent.toLowerCase(), + p = nav.platform.toLowerCase(), + windows = p ? /win/.test(p) : /win/.test(u), + mac = p ? /mac/.test(p) : /mac/.test(u), + webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit + ie = !+"\v1", // feature detection based on Andrea Giammarchi's solution: http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html + playerVersion = [0,0,0], + d = null; + if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) { + d = nav.plugins[SHOCKWAVE_FLASH].description; + if (d && !(typeof nav.mimeTypes != UNDEF && nav.mimeTypes[FLASH_MIME_TYPE] && !nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) { // navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+ + plugin = true; + ie = false; // cascaded feature detection for Internet Explorer + d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1"); + playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10); + playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10); + playerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0; + } + } + else if (typeof win.ActiveXObject != UNDEF) { + try { + var a = new ActiveXObject(SHOCKWAVE_FLASH_AX); + if (a) { // a will return null when ActiveX is disabled + d = a.GetVariable("$version"); + if (d) { + ie = true; // cascaded feature detection for Internet Explorer + d = d.split(" ")[1].split(","); + playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)]; + } + } + } + catch(e) {} + } + return { w3:w3cdom, pv:playerVersion, wk:webkit, ie:ie, win:windows, mac:mac }; + }(), + + /* Cross-browser onDomLoad + - Will fire an event as soon as the DOM of a web page is loaded + - Internet Explorer workaround based on Diego Perini's solution: http://javascript.nwbox.com/IEContentLoaded/ + - Regular onload serves as fallback + */ + onDomLoad = function() { + if (!ua.w3) { return; } + if ((typeof doc.readyState != UNDEF && doc.readyState == "complete") || (typeof doc.readyState == UNDEF && (doc.getElementsByTagName("body")[0] || doc.body))) { // function is fired after onload, e.g. when script is inserted dynamically + callDomLoadFunctions(); + } + if (!isDomLoaded) { + if (typeof doc.addEventListener != UNDEF) { + doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, false); + } + if (ua.ie && ua.win) { + doc.attachEvent(ON_READY_STATE_CHANGE, function() { + if (doc.readyState == "complete") { + doc.detachEvent(ON_READY_STATE_CHANGE, arguments.callee); + callDomLoadFunctions(); + } + }); + if (win == top) { // if not inside an iframe + (function(){ + if (isDomLoaded) { return; } + try { + doc.documentElement.doScroll("left"); + } + catch(e) { + setTimeout(arguments.callee, 0); + return; + } + callDomLoadFunctions(); + })(); + } + } + if (ua.wk) { + (function(){ + if (isDomLoaded) { return; } + if (!/loaded|complete/.test(doc.readyState)) { + setTimeout(arguments.callee, 0); + return; + } + callDomLoadFunctions(); + })(); + } + addLoadEvent(callDomLoadFunctions); + } + }(); + + function callDomLoadFunctions() { + if (isDomLoaded) { return; } + try { // test if we can really add/remove elements to/from the DOM; we don't want to fire it too early + var t = doc.getElementsByTagName("body")[0].appendChild(createElement("span")); + t.parentNode.removeChild(t); + } + catch (e) { return; } + isDomLoaded = true; + var dl = domLoadFnArr.length; + for (var i = 0; i < dl; i++) { + domLoadFnArr[i](); + } + } + + function addDomLoadEvent(fn) { + if (isDomLoaded) { + fn(); + } + else { + domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+ + } + } + + /* Cross-browser onload + - Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/ + - Will fire an event as soon as a web page including all of its assets are loaded + */ + function addLoadEvent(fn) { + if (typeof win.addEventListener != UNDEF) { + win.addEventListener("load", fn, false); + } + else if (typeof doc.addEventListener != UNDEF) { + doc.addEventListener("load", fn, false); + } + else if (typeof win.attachEvent != UNDEF) { + addListener(win, "onload", fn); + } + else if (typeof win.onload == "function") { + var fnOld = win.onload; + win.onload = function() { + fnOld(); + fn(); + }; + } + else { + win.onload = fn; + } + } + + /* Main function + - Will preferably execute onDomLoad, otherwise onload (as a fallback) + */ + function main() { + if (plugin) { + testPlayerVersion(); + } + else { + matchVersions(); + } + } + + /* Detect the Flash Player version for non-Internet Explorer browsers + - Detecting the plug-in version via the object element is more precise than using the plugins collection item's description: + a. Both release and build numbers can be detected + b. Avoid wrong descriptions by corrupt installers provided by Adobe + c. Avoid wrong descriptions by multiple Flash Player entries in the plugin Array, caused by incorrect browser imports + - Disadvantage of this method is that it depends on the availability of the DOM, while the plugins collection is immediately available + */ + function testPlayerVersion() { + var b = doc.getElementsByTagName("body")[0]; + var o = createElement(OBJECT); + o.setAttribute("type", FLASH_MIME_TYPE); + var t = b.appendChild(o); + if (t) { + var counter = 0; + (function(){ + if (typeof t.GetVariable != UNDEF) { + var d = t.GetVariable("$version"); + if (d) { + d = d.split(" ")[1].split(","); + ua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)]; + } + } + else if (counter < 10) { + counter++; + setTimeout(arguments.callee, 10); + return; + } + b.removeChild(o); + t = null; + matchVersions(); + })(); + } + else { + matchVersions(); + } + } + + /* Perform Flash Player and SWF version matching; static publishing only + */ + function matchVersions() { + var rl = regObjArr.length; + if (rl > 0) { + for (var i = 0; i < rl; i++) { // for each registered object element + var id = regObjArr[i].id; + var cb = regObjArr[i].callbackFn; + var cbObj = {success:false, id:id}; + if (ua.pv[0] > 0) { + var obj = getElementById(id); + if (obj) { + if (hasPlayerVersion(regObjArr[i].swfVersion) && !(ua.wk && ua.wk < 312)) { // Flash Player version >= published SWF version: Houston, we have a match! + setVisibility(id, true); + if (cb) { + cbObj.success = true; + cbObj.ref = getObjectById(id); + cb(cbObj); + } + } + else if (regObjArr[i].expressInstall && canExpressInstall()) { // show the Adobe Express Install dialog if set by the web page author and if supported + var att = {}; + att.data = regObjArr[i].expressInstall; + att.width = obj.getAttribute("width") || "0"; + att.height = obj.getAttribute("height") || "0"; + if (obj.getAttribute("class")) { att.styleclass = obj.getAttribute("class"); } + if (obj.getAttribute("align")) { att.align = obj.getAttribute("align"); } + // parse HTML object param element's name-value pairs + var par = {}; + var p = obj.getElementsByTagName("param"); + var pl = p.length; + for (var j = 0; j < pl; j++) { + if (p[j].getAttribute("name").toLowerCase() != "movie") { + par[p[j].getAttribute("name")] = p[j].getAttribute("value"); + } + } + showExpressInstall(att, par, id, cb); + } + else { // Flash Player and SWF version mismatch or an older Webkit engine that ignores the HTML object element's nested param elements: display alternative content instead of SWF + displayAltContent(obj); + if (cb) { cb(cbObj); } + } + } + } + else { // if no Flash Player is installed or the fp version cannot be detected we let the HTML object element do its job (either show a SWF or alternative content) + setVisibility(id, true); + if (cb) { + var o = getObjectById(id); // test whether there is an HTML object element or not + if (o && typeof o.SetVariable != UNDEF) { + cbObj.success = true; + cbObj.ref = o; + } + cb(cbObj); + } + } + } + } + } + + function getObjectById(objectIdStr) { + var r = null; + var o = getElementById(objectIdStr); + if (o && o.nodeName == "OBJECT") { + if (typeof o.SetVariable != UNDEF) { + r = o; + } + else { + var n = o.getElementsByTagName(OBJECT)[0]; + if (n) { + r = n; + } + } + } + return r; + } + + /* Requirements for Adobe Express Install + - only one instance can be active at a time + - fp 6.0.65 or higher + - Win/Mac OS only + - no Webkit engines older than version 312 + */ + function canExpressInstall() { + return !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac) && !(ua.wk && ua.wk < 312); + } + + /* Show the Adobe Express Install dialog + - Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75 + */ + function showExpressInstall(att, par, replaceElemIdStr, callbackFn) { + isExpressInstallActive = true; + storedCallbackFn = callbackFn || null; + storedCallbackObj = {success:false, id:replaceElemIdStr}; + var obj = getElementById(replaceElemIdStr); + if (obj) { + if (obj.nodeName == "OBJECT") { // static publishing + storedAltContent = abstractAltContent(obj); + storedAltContentId = null; + } + else { // dynamic publishing + storedAltContent = obj; + storedAltContentId = replaceElemIdStr; + } + att.id = EXPRESS_INSTALL_ID; + if (typeof att.width == UNDEF || (!/%$/.test(att.width) && parseInt(att.width, 10) < 310)) { att.width = "310"; } + if (typeof att.height == UNDEF || (!/%$/.test(att.height) && parseInt(att.height, 10) < 137)) { att.height = "137"; } + doc.title = doc.title.slice(0, 47) + " - Flash Player Installation"; + var pt = ua.ie && ua.win ? "ActiveX" : "PlugIn", + fv = "MMredirectURL=" + encodeURI(window.location).toString().replace(/&/g,"%26") + "&MMplayerType=" + pt + "&MMdoctitle=" + doc.title; + if (typeof par.flashvars != UNDEF) { + par.flashvars += "&" + fv; + } + else { + par.flashvars = fv; + } + // IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it, + // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work + if (ua.ie && ua.win && obj.readyState != 4) { + var newObj = createElement("div"); + replaceElemIdStr += "SWFObjectNew"; + newObj.setAttribute("id", replaceElemIdStr); + obj.parentNode.insertBefore(newObj, obj); // insert placeholder div that will be replaced by the object element that loads expressinstall.swf + obj.style.display = "none"; + (function(){ + if (obj.readyState == 4) { + obj.parentNode.removeChild(obj); + } + else { + setTimeout(arguments.callee, 10); + } + })(); + } + createSWF(att, par, replaceElemIdStr); + } + } + + /* Functions to abstract and display alternative content + */ + function displayAltContent(obj) { + if (ua.ie && ua.win && obj.readyState != 4) { + // IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it, + // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work + var el = createElement("div"); + obj.parentNode.insertBefore(el, obj); // insert placeholder div that will be replaced by the alternative content + el.parentNode.replaceChild(abstractAltContent(obj), el); + obj.style.display = "none"; + (function(){ + if (obj.readyState == 4) { + obj.parentNode.removeChild(obj); + } + else { + setTimeout(arguments.callee, 10); + } + })(); + } + else { + obj.parentNode.replaceChild(abstractAltContent(obj), obj); + } + } + + function abstractAltContent(obj) { + var ac = createElement("div"); + if (ua.win && ua.ie) { + ac.innerHTML = obj.innerHTML; + } + else { + var nestedObj = obj.getElementsByTagName(OBJECT)[0]; + if (nestedObj) { + var c = nestedObj.childNodes; + if (c) { + var cl = c.length; + for (var i = 0; i < cl; i++) { + if (!(c[i].nodeType == 1 && c[i].nodeName == "PARAM") && !(c[i].nodeType == 8)) { + ac.appendChild(c[i].cloneNode(true)); + } + } + } + } + } + return ac; + } + + /* Cross-browser dynamic SWF creation + */ + function createSWF(attObj, parObj, id) { + var r, el = getElementById(id); + if (ua.wk && ua.wk < 312) { return r; } + if (el) { + if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content + attObj.id = id; + } + if (ua.ie && ua.win) { // Internet Explorer + the HTML object element + W3C DOM methods do not combine: fall back to outerHTML + var att = ""; + for (var i in attObj) { + if (attObj[i] != Object.prototype[i]) { // filter out prototype additions from other potential libraries + if (i.toLowerCase() == "data") { + parObj.movie = attObj[i]; + } + else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword + att += ' class="' + attObj[i] + '"'; + } + else if (i.toLowerCase() != "classid") { + att += ' ' + i + '="' + attObj[i] + '"'; + } + } + } + var par = ""; + for (var j in parObj) { + if (parObj[j] != Object.prototype[j]) { // filter out prototype additions from other potential libraries + par += ''; + } + } + el.outerHTML = '' + par + ''; + objIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only) + r = getElementById(attObj.id); + } + else { // well-behaving browsers + var o = createElement(OBJECT); + o.setAttribute("type", FLASH_MIME_TYPE); + for (var m in attObj) { + if (attObj[m] != Object.prototype[m]) { // filter out prototype additions from other potential libraries + if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword + o.setAttribute("class", attObj[m]); + } + else if (m.toLowerCase() != "classid") { // filter out IE specific attribute + o.setAttribute(m, attObj[m]); + } + } + } + for (var n in parObj) { + if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") { // filter out prototype additions from other potential libraries and IE specific param element + createObjParam(o, n, parObj[n]); + } + } + el.parentNode.replaceChild(o, el); + r = o; + } + } + return r; + } + + function createObjParam(el, pName, pValue) { + var p = createElement("param"); + p.setAttribute("name", pName); + p.setAttribute("value", pValue); + el.appendChild(p); + } + + /* Cross-browser SWF removal + - Especially needed to safely and completely remove a SWF in Internet Explorer + */ + function removeSWF(id) { + var obj = getElementById(id); + if (obj && obj.nodeName == "OBJECT") { + if (ua.ie && ua.win) { + obj.style.display = "none"; + (function(){ + if (obj.readyState == 4) { + removeObjectInIE(id); + } + else { + setTimeout(arguments.callee, 10); + } + })(); + } + else { + obj.parentNode.removeChild(obj); + } + } + } + + function removeObjectInIE(id) { + var obj = getElementById(id); + if (obj) { + for (var i in obj) { + if (typeof obj[i] == "function") { + obj[i] = null; + } + } + obj.parentNode.removeChild(obj); + } + } + + /* Functions to optimize JavaScript compression + */ + function getElementById(id) { + var el = null; + try { + el = doc.getElementById(id); + } + catch (e) {} + return el; + } + + function createElement(el) { + return doc.createElement(el); + } + + /* Updated attachEvent function for Internet Explorer + - Stores attachEvent information in an Array, so on unload the detachEvent functions can be called to avoid memory leaks + */ + function addListener(target, eventType, fn) { + target.attachEvent(eventType, fn); + listenersArr[listenersArr.length] = [target, eventType, fn]; + } + + /* Flash Player and SWF content version matching + */ + function hasPlayerVersion(rv) { + var pv = ua.pv, v = rv.split("."); + v[0] = parseInt(v[0], 10); + v[1] = parseInt(v[1], 10) || 0; // supports short notation, e.g. "9" instead of "9.0.0" + v[2] = parseInt(v[2], 10) || 0; + return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false; + } + + /* Cross-browser dynamic CSS creation + - Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php + */ + function createCSS(sel, decl, media, newStyle) { + if (ua.ie && ua.mac) { return; } + var h = doc.getElementsByTagName("head")[0]; + if (!h) { return; } // to also support badly authored HTML pages that lack a head element + var m = (media && typeof media == "string") ? media : "screen"; + if (newStyle) { + dynamicStylesheet = null; + dynamicStylesheetMedia = null; + } + if (!dynamicStylesheet || dynamicStylesheetMedia != m) { + // create dynamic stylesheet + get a global reference to it + var s = createElement("style"); + s.setAttribute("type", "text/css"); + s.setAttribute("media", m); + dynamicStylesheet = h.appendChild(s); + if (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) { + dynamicStylesheet = doc.styleSheets[doc.styleSheets.length - 1]; + } + dynamicStylesheetMedia = m; + } + // add style rule + if (ua.ie && ua.win) { + if (dynamicStylesheet && typeof dynamicStylesheet.addRule == OBJECT) { + dynamicStylesheet.addRule(sel, decl); + } + } + else { + if (dynamicStylesheet && typeof doc.createTextNode != UNDEF) { + dynamicStylesheet.appendChild(doc.createTextNode(sel + " {" + decl + "}")); + } + } + } + + function setVisibility(id, isVisible) { + if (!autoHideShow) { return; } + var v = isVisible ? "visible" : "hidden"; + if (isDomLoaded && getElementById(id)) { + getElementById(id).style.visibility = v; + } + else { + createCSS("#" + id, "visibility:" + v); + } + } + + /* Filter to avoid XSS attacks + */ + function urlEncodeIfNecessary(s) { + var regex = /[\\\"<>\.;]/; + var hasBadChars = regex.exec(s) != null; + return hasBadChars && typeof encodeURIComponent != UNDEF ? encodeURIComponent(s) : s; + } + + /* Release memory to avoid memory leaks caused by closures, fix hanging audio/video threads and force open sockets/NetConnections to disconnect (Internet Explorer only) + */ + var cleanup = function() { + if (ua.ie && ua.win) { + window.attachEvent("onunload", function() { + // remove listeners to avoid memory leaks + var ll = listenersArr.length; + for (var i = 0; i < ll; i++) { + listenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2]); + } + // cleanup dynamically embedded objects to fix audio/video threads and force open sockets and NetConnections to disconnect + var il = objIdArr.length; + for (var j = 0; j < il; j++) { + removeSWF(objIdArr[j]); + } + // cleanup library's main closures to avoid memory leaks + for (var k in ua) { + ua[k] = null; + } + ua = null; + for (var l in swfobject) { + swfobject[l] = null; + } + swfobject = null; + }); + } + }(); + + return { + /* Public API + - Reference: http://code.google.com/p/swfobject/wiki/documentation + */ + registerObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr, callbackFn) { + if (ua.w3 && objectIdStr && swfVersionStr) { + var regObj = {}; + regObj.id = objectIdStr; + regObj.swfVersion = swfVersionStr; + regObj.expressInstall = xiSwfUrlStr; + regObj.callbackFn = callbackFn; + regObjArr[regObjArr.length] = regObj; + setVisibility(objectIdStr, false); + } + else if (callbackFn) { + callbackFn({success:false, id:objectIdStr}); + } + }, + + getObjectById: function(objectIdStr) { + if (ua.w3) { + return getObjectById(objectIdStr); + } + }, + + embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj, callbackFn) { + var callbackObj = {success:false, id:replaceElemIdStr}; + if (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) { + setVisibility(replaceElemIdStr, false); + addDomLoadEvent(function() { + widthStr += ""; // auto-convert to string + heightStr += ""; + var att = {}; + if (attObj && typeof attObj === OBJECT) { + for (var i in attObj) { // copy object to avoid the use of references, because web authors often reuse attObj for multiple SWFs + att[i] = attObj[i]; + } + } + att.data = swfUrlStr; + att.width = widthStr; + att.height = heightStr; + var par = {}; + if (parObj && typeof parObj === OBJECT) { + for (var j in parObj) { // copy object to avoid the use of references, because web authors often reuse parObj for multiple SWFs + par[j] = parObj[j]; + } + } + if (flashvarsObj && typeof flashvarsObj === OBJECT) { + for (var k in flashvarsObj) { // copy object to avoid the use of references, because web authors often reuse flashvarsObj for multiple SWFs + if (typeof par.flashvars != UNDEF) { + par.flashvars += "&" + k + "=" + flashvarsObj[k]; + } + else { + par.flashvars = k + "=" + flashvarsObj[k]; + } + } + } + if (hasPlayerVersion(swfVersionStr)) { // create SWF + var obj = createSWF(att, par, replaceElemIdStr); + if (att.id == replaceElemIdStr) { + setVisibility(replaceElemIdStr, true); + } + callbackObj.success = true; + callbackObj.ref = obj; + } + else if (xiSwfUrlStr && canExpressInstall()) { // show Adobe Express Install + att.data = xiSwfUrlStr; + showExpressInstall(att, par, replaceElemIdStr, callbackFn); + return; + } + else { // show alternative content + setVisibility(replaceElemIdStr, true); + } + if (callbackFn) { callbackFn(callbackObj); } + }); + } + else if (callbackFn) { callbackFn(callbackObj); } + }, + + switchOffAutoHideShow: function() { + autoHideShow = false; + }, + + ua: ua, + + getFlashPlayerVersion: function() { + return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] }; + }, + + hasFlashPlayerVersion: hasPlayerVersion, + + createSWF: function(attObj, parObj, replaceElemIdStr) { + if (ua.w3) { + return createSWF(attObj, parObj, replaceElemIdStr); + } + else { + return undefined; + } + }, + + showExpressInstall: function(att, par, replaceElemIdStr, callbackFn) { + if (ua.w3 && canExpressInstall()) { + showExpressInstall(att, par, replaceElemIdStr, callbackFn); + } + }, + + removeSWF: function(objElemIdStr) { + if (ua.w3) { + removeSWF(objElemIdStr); + } + }, + + createCSS: function(selStr, declStr, mediaStr, newStyleBoolean) { + if (ua.w3) { + createCSS(selStr, declStr, mediaStr, newStyleBoolean); + } + }, + + addDomLoadEvent: addDomLoadEvent, + + addLoadEvent: addLoadEvent, + + getQueryParamValue: function(param) { + var q = doc.location.search || doc.location.hash; + if (q) { + if (/\?/.test(q)) { q = q.split("?")[1]; } // strip question mark + if (param == null) { + return urlEncodeIfNecessary(q); + } + var pairs = q.split("&"); + for (var i = 0; i < pairs.length; i++) { + if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) { + return urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf("=") + 1))); + } + } + } + return ""; + }, + + // For internal usage only + expressInstallCallback: function() { + if (isExpressInstallActive) { + var obj = getElementById(EXPRESS_INSTALL_ID); + if (obj && storedAltContent) { + obj.parentNode.replaceChild(storedAltContent, obj); + if (storedAltContentId) { + setVisibility(storedAltContentId, true); + if (ua.ie && ua.win) { storedAltContent.style.display = "block"; } + } + if (storedCallbackFn) { storedCallbackFn(storedCallbackObj); } + } + isExpressInstallActive = false; + } + } + }; +}(); diff --git a/CIMWebBridge/bin-release/CIMBridge.html b/CIMWebBridge/bin-release/CIMBridge.html new file mode 100644 index 0000000..5ba81ab --- /dev/null +++ b/CIMWebBridge/bin-release/CIMBridge.html @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + +
+

+ To view this page ensure that Adobe Flash Player version + 11.4.0 or greater is installed. +

+ +
+ + + + diff --git a/CIMWebBridge/bin-release/CIMBridge.swf b/CIMWebBridge/bin-release/CIMBridge.swf new file mode 100644 index 0000000000000000000000000000000000000000..f54bac6b38fd5b6268495945414368e6d2018cd1 GIT binary patch literal 6662 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 literal 0 HcmV?d00001 diff --git a/CIMWebBridge/bin-release/history/history.css b/CIMWebBridge/bin-release/history/history.css new file mode 100644 index 0000000..dbc47c6 --- /dev/null +++ b/CIMWebBridge/bin-release/history/history.css @@ -0,0 +1,6 @@ +/* This CSS stylesheet defines styles used by required elements in a flex application page that supports browser history */ + +#ie_historyFrame { width: 0px; height: 0px; display:none } +#firefox_anchorDiv { width: 0px; height: 0px; display:none } +#safari_formDiv { width: 0px; height: 0px; display:none } +#safari_rememberDiv { width: 0px; height: 0px; display:none } diff --git a/CIMWebBridge/bin-release/history/history.js b/CIMWebBridge/bin-release/history/history.js new file mode 100644 index 0000000..00a8bfe --- /dev/null +++ b/CIMWebBridge/bin-release/history/history.js @@ -0,0 +1,678 @@ +BrowserHistoryUtils = { + addEvent: function(elm, evType, fn, useCapture) { + useCapture = useCapture || false; + if (elm.addEventListener) { + elm.addEventListener(evType, fn, useCapture); + return true; + } + else if (elm.attachEvent) { + var r = elm.attachEvent('on' + evType, fn); + return r; + } + else { + elm['on' + evType] = fn; + } + } +} + +BrowserHistory = (function() { + // type of browser + var browser = { + ie: false, + ie8: false, + firefox: false, + safari: false, + opera: false, + version: -1 + }; + + // Default app state URL to use when no fragment ID present + var defaultHash = ''; + + // Last-known app state URL + var currentHref = document.location.href; + + // Initial URL (used only by IE) + var initialHref = document.location.href; + + // Initial URL (used only by IE) + var initialHash = document.location.hash; + + // History frame source URL prefix (used only by IE) + var historyFrameSourcePrefix = 'history/historyFrame.html?'; + + // History maintenance (used only by Safari) + var currentHistoryLength = -1; + + // Flag to denote the existence of onhashchange + var browserHasHashChange = false; + + var historyHash = []; + + var initialState = createState(initialHref, initialHref + '#' + initialHash, initialHash); + + var backStack = []; + var forwardStack = []; + + var currentObjectId = null; + + //UserAgent detection + var useragent = navigator.userAgent.toLowerCase(); + + if (useragent.indexOf("opera") != -1) { + browser.opera = true; + } else if (useragent.indexOf("msie") != -1) { + browser.ie = true; + browser.version = parseFloat(useragent.substring(useragent.indexOf('msie') + 4)); + if (browser.version == 8) + { + browser.ie = false; + browser.ie8 = true; + } + } else if (useragent.indexOf("safari") != -1) { + browser.safari = true; + browser.version = parseFloat(useragent.substring(useragent.indexOf('safari') + 7)); + } else if (useragent.indexOf("gecko") != -1) { + browser.firefox = true; + } + + if (browser.ie == true && browser.version == 7) { + window["_ie_firstload"] = false; + } + + function hashChangeHandler() + { + currentHref = document.location.href; + var flexAppUrl = getHash(); + //ADR: to fix multiple + if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) { + var pl = getPlayers(); + for (var i = 0; i < pl.length; i++) { + pl[i].browserURLChange(flexAppUrl); + } + } else { + getPlayer().browserURLChange(flexAppUrl); + } + } + + // Accessor functions for obtaining specific elements of the page. + function getHistoryFrame() + { + return document.getElementById('ie_historyFrame'); + } + + function getFormElement() + { + return document.getElementById('safari_formDiv'); + } + + function getRememberElement() + { + return document.getElementById("safari_remember_field"); + } + + // Get the Flash player object for performing ExternalInterface callbacks. + // Updated for changes to SWFObject2. + function getPlayer(id) { + var i; + + if (id && document.getElementById(id)) { + var r = document.getElementById(id); + if (typeof r.SetVariable != "undefined") { + return r; + } + else { + var o = r.getElementsByTagName("object"); + var e = r.getElementsByTagName("embed"); + for (i = 0; i < o.length; i++) { + if (typeof o[i].browserURLChange != "undefined") + return o[i]; + } + for (i = 0; i < e.length; i++) { + if (typeof e[i].browserURLChange != "undefined") + return e[i]; + } + } + } + else { + var o = document.getElementsByTagName("object"); + var e = document.getElementsByTagName("embed"); + for (i = 0; i < e.length; i++) { + if (typeof e[i].browserURLChange != "undefined") + { + return e[i]; + } + } + for (i = 0; i < o.length; i++) { + if (typeof o[i].browserURLChange != "undefined") + { + return o[i]; + } + } + } + return undefined; + } + + function getPlayers() { + var i; + var players = []; + if (players.length == 0) { + var tmp = document.getElementsByTagName('object'); + for (i = 0; i < tmp.length; i++) + { + if (typeof tmp[i].browserURLChange != "undefined") + players.push(tmp[i]); + } + } + if (players.length == 0 || players[0].object == null) { + var tmp = document.getElementsByTagName('embed'); + for (i = 0; i < tmp.length; i++) + { + if (typeof tmp[i].browserURLChange != "undefined") + players.push(tmp[i]); + } + } + return players; + } + + function getIframeHash() { + var doc = getHistoryFrame().contentWindow.document; + var hash = String(doc.location.search); + if (hash.length == 1 && hash.charAt(0) == "?") { + hash = ""; + } + else if (hash.length >= 2 && hash.charAt(0) == "?") { + hash = hash.substring(1); + } + return hash; + } + + /* Get the current location hash excluding the '#' symbol. */ + function getHash() { + // It would be nice if we could use document.location.hash here, + // but it's faulty sometimes. + var idx = document.location.href.indexOf('#'); + return (idx >= 0) ? document.location.href.substr(idx+1) : ''; + } + + /* Get the current location hash excluding the '#' symbol. */ + function setHash(hash) { + // It would be nice if we could use document.location.hash here, + // but it's faulty sometimes. + if (hash == '') hash = '#' + document.location.hash = hash; + } + + function createState(baseUrl, newUrl, flexAppUrl) { + return { 'baseUrl': baseUrl, 'newUrl': newUrl, 'flexAppUrl': flexAppUrl, 'title': null }; + } + + /* Add a history entry to the browser. + * baseUrl: the portion of the location prior to the '#' + * newUrl: the entire new URL, including '#' and following fragment + * flexAppUrl: the portion of the location following the '#' only + */ + function addHistoryEntry(baseUrl, newUrl, flexAppUrl) { + + //delete all the history entries + forwardStack = []; + + if (browser.ie) { + //Check to see if we are being asked to do a navigate for the first + //history entry, and if so ignore, because it's coming from the creation + //of the history iframe + if (flexAppUrl == defaultHash && document.location.href == initialHref && window['_ie_firstload']) { + currentHref = initialHref; + return; + } + if ((!flexAppUrl || flexAppUrl == defaultHash) && window['_ie_firstload']) { + newUrl = baseUrl + '#' + defaultHash; + flexAppUrl = defaultHash; + } else { + // for IE, tell the history frame to go somewhere without a '#' + // in order to get this entry into the browser history. + getHistoryFrame().src = historyFrameSourcePrefix + flexAppUrl; + } + setHash(flexAppUrl); + } else { + + //ADR + if (backStack.length == 0 && initialState.flexAppUrl == flexAppUrl) { + initialState = createState(baseUrl, newUrl, flexAppUrl); + } else if(backStack.length > 0 && backStack[backStack.length - 1].flexAppUrl == flexAppUrl) { + backStack[backStack.length - 1] = createState(baseUrl, newUrl, flexAppUrl); + } + + if (browser.safari && !browserHasHashChange) { + // for Safari, submit a form whose action points to the desired URL + if (browser.version <= 419.3) { + var file = window.location.pathname.toString(); + file = file.substring(file.lastIndexOf("/")+1); + getFormElement().innerHTML = '
'; + //get the current elements and add them to the form + var qs = window.location.search.substring(1); + var qs_arr = qs.split("&"); + for (var i = 0; i < qs_arr.length; i++) { + var tmp = qs_arr[i].split("="); + var elem = document.createElement("input"); + elem.type = "hidden"; + elem.name = tmp[0]; + elem.value = tmp[1]; + document.forms.historyForm.appendChild(elem); + } + document.forms.historyForm.submit(); + } else { + top.location.hash = flexAppUrl; + } + // We also have to maintain the history by hand for Safari + historyHash[history.length] = flexAppUrl; + _storeStates(); + } else { + // Otherwise, just tell the browser to go there + setHash(flexAppUrl); + } + } + backStack.push(createState(baseUrl, newUrl, flexAppUrl)); + } + + function _storeStates() { + if (browser.safari) { + getRememberElement().value = historyHash.join(","); + } + } + + function handleBackButton() { + //The "current" page is always at the top of the history stack. + var current = backStack.pop(); + if (!current) { return; } + var last = backStack[backStack.length - 1]; + if (!last && backStack.length == 0){ + last = initialState; + } + forwardStack.push(current); + } + + function handleForwardButton() { + //summary: private method. Do not call this directly. + + var last = forwardStack.pop(); + if (!last) { return; } + backStack.push(last); + } + + function handleArbitraryUrl() { + //delete all the history entries + forwardStack = []; + } + + /* Called periodically to poll to see if we need to detect navigation that has occurred */ + function checkForUrlChange() { + + if (browser.ie) { + if (currentHref != document.location.href && currentHref + '#' != document.location.href) { + //This occurs when the user has navigated to a specific URL + //within the app, and didn't use browser back/forward + //IE seems to have a bug where it stops updating the URL it + //shows the end-user at this point, but programatically it + //appears to be correct. Do a full app reload to get around + //this issue. + if (browser.version < 7) { + currentHref = document.location.href; + document.location.reload(); + } else { + if (getHash() != getIframeHash()) { + // this.iframe.src = this.blankURL + hash; + var sourceToSet = historyFrameSourcePrefix + getHash(); + getHistoryFrame().src = sourceToSet; + currentHref = document.location.href; + } + } + } + } + + if (browser.safari && !browserHasHashChange) { + // For Safari, we have to check to see if history.length changed. + if (currentHistoryLength >= 0 && history.length != currentHistoryLength) { + //alert("did change: " + history.length + ", " + historyHash.length + "|" + historyHash[history.length] + "|>" + historyHash.join("|")); + var flexAppUrl = getHash(); + if (browser.version < 528.16 /* Anything earlier than Safari 4.0 */) + { + // If it did change and we're running Safari 3.x or earlier, + // then we have to look the old state up in our hand-maintained + // array since document.location.hash won't have changed, + // then call back into BrowserManager. + currentHistoryLength = history.length; + flexAppUrl = historyHash[currentHistoryLength]; + } + + //ADR: to fix multiple + if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) { + var pl = getPlayers(); + for (var i = 0; i < pl.length; i++) { + pl[i].browserURLChange(flexAppUrl); + } + } else { + getPlayer().browserURLChange(flexAppUrl); + } + _storeStates(); + } + } + if (browser.firefox && !browserHasHashChange) { + if (currentHref != document.location.href) { + var bsl = backStack.length; + + var urlActions = { + back: false, + forward: false, + set: false + } + + if ((window.location.hash == initialHash || window.location.href == initialHref) && (bsl == 1)) { + urlActions.back = true; + // FIXME: could this ever be a forward button? + // we can't clear it because we still need to check for forwards. Ugg. + // clearInterval(this.locationTimer); + handleBackButton(); + } + + // first check to see if we could have gone forward. We always halt on + // a no-hash item. + if (forwardStack.length > 0) { + if (forwardStack[forwardStack.length-1].flexAppUrl == getHash()) { + urlActions.forward = true; + handleForwardButton(); + } + } + + // ok, that didn't work, try someplace back in the history stack + if ((bsl >= 2) && (backStack[bsl - 2])) { + if (backStack[bsl - 2].flexAppUrl == getHash()) { + urlActions.back = true; + handleBackButton(); + } + } + + if (!urlActions.back && !urlActions.forward) { + var foundInStacks = { + back: -1, + forward: -1 + } + + for (var i = 0; i < backStack.length; i++) { + if (backStack[i].flexAppUrl == getHash() && i != (bsl - 2)) { + arbitraryUrl = true; + foundInStacks.back = i; + } + } + for (var i = 0; i < forwardStack.length; i++) { + if (forwardStack[i].flexAppUrl == getHash() && i != (bsl - 2)) { + arbitraryUrl = true; + foundInStacks.forward = i; + } + } + handleArbitraryUrl(); + } + + // Firefox changed; do a callback into BrowserManager to tell it. + currentHref = document.location.href; + var flexAppUrl = getHash(); + //ADR: to fix multiple + if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) { + var pl = getPlayers(); + for (var i = 0; i < pl.length; i++) { + pl[i].browserURLChange(flexAppUrl); + } + } else { + getPlayer().browserURLChange(flexAppUrl); + } + } + } + } + + var _initialize = function () { + + browserHasHashChange = ("onhashchange" in document.body); + + if (browser.ie) + { + var scripts = document.getElementsByTagName('script'); + for (var i = 0, s; s = scripts[i]; i++) { + if (s.src.indexOf("history.js") > -1) { + var iframe_location = (new String(s.src)).replace("history.js", "historyFrame.html"); + } + } + historyFrameSourcePrefix = iframe_location + "?"; + var src = historyFrameSourcePrefix; + + var iframe = document.createElement("iframe"); + iframe.id = 'ie_historyFrame'; + iframe.name = 'ie_historyFrame'; + iframe.src = 'javascript:false;'; + + try { + document.body.appendChild(iframe); + } catch(e) { + setTimeout(function() { + document.body.appendChild(iframe); + }, 0); + } + } + + if (browser.safari && !browserHasHashChange) + { + var rememberDiv = document.createElement("div"); + rememberDiv.id = 'safari_rememberDiv'; + document.body.appendChild(rememberDiv); + rememberDiv.innerHTML = ''; + + var formDiv = document.createElement("div"); + formDiv.id = 'safari_formDiv'; + document.body.appendChild(formDiv); + + var reloader_content = document.createElement('div'); + reloader_content.id = 'safarireloader'; + var scripts = document.getElementsByTagName('script'); + for (var i = 0, s; s = scripts[i]; i++) { + if (s.src.indexOf("history.js") > -1) { + html = (new String(s.src)).replace(".js", ".html"); + } + } + reloader_content.innerHTML = ''; + document.body.appendChild(reloader_content); + reloader_content.style.position = 'absolute'; + reloader_content.style.left = reloader_content.style.top = '-9999px'; + iframe = reloader_content.getElementsByTagName('iframe')[0]; + + if (document.getElementById("safari_remember_field").value != "" ) { + historyHash = document.getElementById("safari_remember_field").value.split(","); + } + } + + if (browserHasHashChange) + document.body.onhashchange = hashChangeHandler; + } + + return { + historyHash: historyHash, + backStack: function() { return backStack; }, + forwardStack: function() { return forwardStack }, + getPlayer: getPlayer, + initialize: function(src) { + _initialize(src); + }, + setURL: function(url) { + document.location.href = url; + }, + getURL: function() { + return document.location.href; + }, + getTitle: function() { + return document.title; + }, + setTitle: function(title) { + try { + backStack[backStack.length - 1].title = title; + } catch(e) { } + //if on safari, set the title to be the empty string. + if (browser.safari) { + if (title == "") { + try { + var tmp = window.location.href.toString(); + title = tmp.substring((tmp.lastIndexOf("/")+1), tmp.lastIndexOf("#")); + } catch(e) { + title = ""; + } + } + } + document.title = title; + }, + setDefaultURL: function(def) + { + defaultHash = def; + def = getHash(); + //trailing ? is important else an extra frame gets added to the history + //when navigating back to the first page. Alternatively could check + //in history frame navigation to compare # and ?. + if (browser.ie) + { + window['_ie_firstload'] = true; + var sourceToSet = historyFrameSourcePrefix + def; + var func = function() { + getHistoryFrame().src = sourceToSet; + window.location.replace("#" + def); + setInterval(checkForUrlChange, 50); + } + try { + func(); + } catch(e) { + window.setTimeout(function() { func(); }, 0); + } + } + + if (browser.safari) + { + currentHistoryLength = history.length; + if (historyHash.length == 0) { + historyHash[currentHistoryLength] = def; + var newloc = "#" + def; + window.location.replace(newloc); + } else { + //alert(historyHash[historyHash.length-1]); + } + setInterval(checkForUrlChange, 50); + } + + + if (browser.firefox || browser.opera) + { + var reg = new RegExp("#" + def + "$"); + if (window.location.toString().match(reg)) { + } else { + var newloc ="#" + def; + window.location.replace(newloc); + } + setInterval(checkForUrlChange, 50); + } + + }, + + /* Set the current browser URL; called from inside BrowserManager to propagate + * the application state out to the container. + */ + setBrowserURL: function(flexAppUrl, objectId) { + if (browser.ie && typeof objectId != "undefined") { + currentObjectId = objectId; + } + //fromIframe = fromIframe || false; + //fromFlex = fromFlex || false; + //alert("setBrowserURL: " + flexAppUrl); + //flexAppUrl = (flexAppUrl == "") ? defaultHash : flexAppUrl ; + + var pos = document.location.href.indexOf('#'); + var baseUrl = pos != -1 ? document.location.href.substr(0, pos) : document.location.href; + var newUrl = baseUrl + '#' + flexAppUrl; + + if (document.location.href != newUrl && document.location.href + '#' != newUrl) { + currentHref = newUrl; + addHistoryEntry(baseUrl, newUrl, flexAppUrl); + currentHistoryLength = history.length; + } + }, + + browserURLChange: function(flexAppUrl) { + var objectId = null; + if (browser.ie && currentObjectId != null) { + objectId = currentObjectId; + } + + if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) { + var pl = getPlayers(); + for (var i = 0; i < pl.length; i++) { + try { + pl[i].browserURLChange(flexAppUrl); + } catch(e) { } + } + } else { + try { + getPlayer(objectId).browserURLChange(flexAppUrl); + } catch(e) { } + } + + currentObjectId = null; + }, + getUserAgent: function() { + return navigator.userAgent; + }, + getPlatform: function() { + return navigator.platform; + } + + } + +})(); + +// Initialization + +// Automated unit testing and other diagnostics + +function setURL(url) +{ + document.location.href = url; +} + +function backButton() +{ + history.back(); +} + +function forwardButton() +{ + history.forward(); +} + +function goForwardOrBackInHistory(step) +{ + history.go(step); +} + +//BrowserHistoryUtils.addEvent(window, "load", function() { BrowserHistory.initialize(); }); +(function(i) { + var u =navigator.userAgent;var e=/*@cc_on!@*/false; + var st = setTimeout; + if(/webkit/i.test(u)){ + st(function(){ + var dr=document.readyState; + if(dr=="loaded"||dr=="complete"){i()} + else{st(arguments.callee,10);}},10); + } else if((/mozilla/i.test(u)&&!/(compati)/.test(u)) || (/opera/i.test(u))){ + document.addEventListener("DOMContentLoaded",i,false); + } else if(e){ + (function(){ + var t=document.createElement('doc:rdy'); + try{t.doScroll('left'); + i();t=null; + }catch(e){st(arguments.callee,0);}})(); + } else{ + window.onload=i; + } +})( function() {BrowserHistory.initialize();} ); diff --git a/CIMWebBridge/bin-release/history/historyFrame.html b/CIMWebBridge/bin-release/history/historyFrame.html new file mode 100644 index 0000000..07e3806 --- /dev/null +++ b/CIMWebBridge/bin-release/history/historyFrame.html @@ -0,0 +1,29 @@ + + + + + + + + Hidden frame for Browser History support. + + diff --git a/CIMWebBridge/bin-release/playerProductInstall.swf b/CIMWebBridge/bin-release/playerProductInstall.swf new file mode 100644 index 0000000000000000000000000000000000000000..bdc3437856cb0ae54bb9423700ba6ec89f35282c GIT binary patch literal 657 zcmV;C0&e|7S5pT30{{ScoOM%8YZE~jel|&yP13aKhpyI8)Pu*a7cZru!IYFhQ!%kE z;zt>GCuViByG~|XgJ(bJp~q+`f){V4c=Tk!n-K9Tcv0|Qh}4-)Z5q%$%)ak4^FGh} zG4mKh>p=QFFsz{%nRVYDpaejJ54{eo7BqCbU1T$6A?_UfdU|tzr7->Edg5~QJ`!s!OO;20fpVHsv=YsdQ{lvI<6(v2yrdS7`6LQi8#uy`}SX?Ni6O)r6`%Pye4YxmY_|vs1r$ zYS62JJit*Qq5)1^TgC)o6KZQEG=%VHP4mC>rXSoh>x{G-y~501s42xbb%oj5teYed zUazfuM*8z%%PQW6Lm}m@hf8V%w#-l*H+45VumzOSNh6MI zfwTnD68J}cRU>5EordGe5i?c`=PYmF$$^*q^20~+G3o1>u%sdEL~sE;XrvE~96_TY z1oQ%v(6hbD$HElG!xl|cjZOyoWIw@E;qK|`oT|Xk&*+o6#W@8T{oeJ8I9m-_V~Lc) rrowHdr=QEu;UGRC%}bhmYZ>GFiMOQQ+m?EJQA~aL;e`Gll9T{P!97I~ literal 0 HcmV?d00001 diff --git a/CIMWebBridge/bin-release/swfobject.js b/CIMWebBridge/bin-release/swfobject.js new file mode 100644 index 0000000..bf35c07 --- /dev/null +++ b/CIMWebBridge/bin-release/swfobject.js @@ -0,0 +1,777 @@ +/*! SWFObject v2.2 + is released under the MIT License +*/ + +var swfobject = function() { + + var UNDEF = "undefined", + OBJECT = "object", + SHOCKWAVE_FLASH = "Shockwave Flash", + SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash", + FLASH_MIME_TYPE = "application/x-shockwave-flash", + EXPRESS_INSTALL_ID = "SWFObjectExprInst", + ON_READY_STATE_CHANGE = "onreadystatechange", + + win = window, + doc = document, + nav = navigator, + + plugin = false, + domLoadFnArr = [main], + regObjArr = [], + objIdArr = [], + listenersArr = [], + storedAltContent, + storedAltContentId, + storedCallbackFn, + storedCallbackObj, + isDomLoaded = false, + isExpressInstallActive = false, + dynamicStylesheet, + dynamicStylesheetMedia, + autoHideShow = true, + + /* Centralized function for browser feature detection + - User agent string detection is only used when no good alternative is possible + - Is executed directly for optimal performance + */ + ua = function() { + var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF, + u = nav.userAgent.toLowerCase(), + p = nav.platform.toLowerCase(), + windows = p ? /win/.test(p) : /win/.test(u), + mac = p ? /mac/.test(p) : /mac/.test(u), + webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit + ie = !+"\v1", // feature detection based on Andrea Giammarchi's solution: http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html + playerVersion = [0,0,0], + d = null; + if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) { + d = nav.plugins[SHOCKWAVE_FLASH].description; + if (d && !(typeof nav.mimeTypes != UNDEF && nav.mimeTypes[FLASH_MIME_TYPE] && !nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) { // navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+ + plugin = true; + ie = false; // cascaded feature detection for Internet Explorer + d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1"); + playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10); + playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10); + playerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0; + } + } + else if (typeof win.ActiveXObject != UNDEF) { + try { + var a = new ActiveXObject(SHOCKWAVE_FLASH_AX); + if (a) { // a will return null when ActiveX is disabled + d = a.GetVariable("$version"); + if (d) { + ie = true; // cascaded feature detection for Internet Explorer + d = d.split(" ")[1].split(","); + playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)]; + } + } + } + catch(e) {} + } + return { w3:w3cdom, pv:playerVersion, wk:webkit, ie:ie, win:windows, mac:mac }; + }(), + + /* Cross-browser onDomLoad + - Will fire an event as soon as the DOM of a web page is loaded + - Internet Explorer workaround based on Diego Perini's solution: http://javascript.nwbox.com/IEContentLoaded/ + - Regular onload serves as fallback + */ + onDomLoad = function() { + if (!ua.w3) { return; } + if ((typeof doc.readyState != UNDEF && doc.readyState == "complete") || (typeof doc.readyState == UNDEF && (doc.getElementsByTagName("body")[0] || doc.body))) { // function is fired after onload, e.g. when script is inserted dynamically + callDomLoadFunctions(); + } + if (!isDomLoaded) { + if (typeof doc.addEventListener != UNDEF) { + doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, false); + } + if (ua.ie && ua.win) { + doc.attachEvent(ON_READY_STATE_CHANGE, function() { + if (doc.readyState == "complete") { + doc.detachEvent(ON_READY_STATE_CHANGE, arguments.callee); + callDomLoadFunctions(); + } + }); + if (win == top) { // if not inside an iframe + (function(){ + if (isDomLoaded) { return; } + try { + doc.documentElement.doScroll("left"); + } + catch(e) { + setTimeout(arguments.callee, 0); + return; + } + callDomLoadFunctions(); + })(); + } + } + if (ua.wk) { + (function(){ + if (isDomLoaded) { return; } + if (!/loaded|complete/.test(doc.readyState)) { + setTimeout(arguments.callee, 0); + return; + } + callDomLoadFunctions(); + })(); + } + addLoadEvent(callDomLoadFunctions); + } + }(); + + function callDomLoadFunctions() { + if (isDomLoaded) { return; } + try { // test if we can really add/remove elements to/from the DOM; we don't want to fire it too early + var t = doc.getElementsByTagName("body")[0].appendChild(createElement("span")); + t.parentNode.removeChild(t); + } + catch (e) { return; } + isDomLoaded = true; + var dl = domLoadFnArr.length; + for (var i = 0; i < dl; i++) { + domLoadFnArr[i](); + } + } + + function addDomLoadEvent(fn) { + if (isDomLoaded) { + fn(); + } + else { + domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+ + } + } + + /* Cross-browser onload + - Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/ + - Will fire an event as soon as a web page including all of its assets are loaded + */ + function addLoadEvent(fn) { + if (typeof win.addEventListener != UNDEF) { + win.addEventListener("load", fn, false); + } + else if (typeof doc.addEventListener != UNDEF) { + doc.addEventListener("load", fn, false); + } + else if (typeof win.attachEvent != UNDEF) { + addListener(win, "onload", fn); + } + else if (typeof win.onload == "function") { + var fnOld = win.onload; + win.onload = function() { + fnOld(); + fn(); + }; + } + else { + win.onload = fn; + } + } + + /* Main function + - Will preferably execute onDomLoad, otherwise onload (as a fallback) + */ + function main() { + if (plugin) { + testPlayerVersion(); + } + else { + matchVersions(); + } + } + + /* Detect the Flash Player version for non-Internet Explorer browsers + - Detecting the plug-in version via the object element is more precise than using the plugins collection item's description: + a. Both release and build numbers can be detected + b. Avoid wrong descriptions by corrupt installers provided by Adobe + c. Avoid wrong descriptions by multiple Flash Player entries in the plugin Array, caused by incorrect browser imports + - Disadvantage of this method is that it depends on the availability of the DOM, while the plugins collection is immediately available + */ + function testPlayerVersion() { + var b = doc.getElementsByTagName("body")[0]; + var o = createElement(OBJECT); + o.setAttribute("type", FLASH_MIME_TYPE); + var t = b.appendChild(o); + if (t) { + var counter = 0; + (function(){ + if (typeof t.GetVariable != UNDEF) { + var d = t.GetVariable("$version"); + if (d) { + d = d.split(" ")[1].split(","); + ua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)]; + } + } + else if (counter < 10) { + counter++; + setTimeout(arguments.callee, 10); + return; + } + b.removeChild(o); + t = null; + matchVersions(); + })(); + } + else { + matchVersions(); + } + } + + /* Perform Flash Player and SWF version matching; static publishing only + */ + function matchVersions() { + var rl = regObjArr.length; + if (rl > 0) { + for (var i = 0; i < rl; i++) { // for each registered object element + var id = regObjArr[i].id; + var cb = regObjArr[i].callbackFn; + var cbObj = {success:false, id:id}; + if (ua.pv[0] > 0) { + var obj = getElementById(id); + if (obj) { + if (hasPlayerVersion(regObjArr[i].swfVersion) && !(ua.wk && ua.wk < 312)) { // Flash Player version >= published SWF version: Houston, we have a match! + setVisibility(id, true); + if (cb) { + cbObj.success = true; + cbObj.ref = getObjectById(id); + cb(cbObj); + } + } + else if (regObjArr[i].expressInstall && canExpressInstall()) { // show the Adobe Express Install dialog if set by the web page author and if supported + var att = {}; + att.data = regObjArr[i].expressInstall; + att.width = obj.getAttribute("width") || "0"; + att.height = obj.getAttribute("height") || "0"; + if (obj.getAttribute("class")) { att.styleclass = obj.getAttribute("class"); } + if (obj.getAttribute("align")) { att.align = obj.getAttribute("align"); } + // parse HTML object param element's name-value pairs + var par = {}; + var p = obj.getElementsByTagName("param"); + var pl = p.length; + for (var j = 0; j < pl; j++) { + if (p[j].getAttribute("name").toLowerCase() != "movie") { + par[p[j].getAttribute("name")] = p[j].getAttribute("value"); + } + } + showExpressInstall(att, par, id, cb); + } + else { // Flash Player and SWF version mismatch or an older Webkit engine that ignores the HTML object element's nested param elements: display alternative content instead of SWF + displayAltContent(obj); + if (cb) { cb(cbObj); } + } + } + } + else { // if no Flash Player is installed or the fp version cannot be detected we let the HTML object element do its job (either show a SWF or alternative content) + setVisibility(id, true); + if (cb) { + var o = getObjectById(id); // test whether there is an HTML object element or not + if (o && typeof o.SetVariable != UNDEF) { + cbObj.success = true; + cbObj.ref = o; + } + cb(cbObj); + } + } + } + } + } + + function getObjectById(objectIdStr) { + var r = null; + var o = getElementById(objectIdStr); + if (o && o.nodeName == "OBJECT") { + if (typeof o.SetVariable != UNDEF) { + r = o; + } + else { + var n = o.getElementsByTagName(OBJECT)[0]; + if (n) { + r = n; + } + } + } + return r; + } + + /* Requirements for Adobe Express Install + - only one instance can be active at a time + - fp 6.0.65 or higher + - Win/Mac OS only + - no Webkit engines older than version 312 + */ + function canExpressInstall() { + return !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac) && !(ua.wk && ua.wk < 312); + } + + /* Show the Adobe Express Install dialog + - Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75 + */ + function showExpressInstall(att, par, replaceElemIdStr, callbackFn) { + isExpressInstallActive = true; + storedCallbackFn = callbackFn || null; + storedCallbackObj = {success:false, id:replaceElemIdStr}; + var obj = getElementById(replaceElemIdStr); + if (obj) { + if (obj.nodeName == "OBJECT") { // static publishing + storedAltContent = abstractAltContent(obj); + storedAltContentId = null; + } + else { // dynamic publishing + storedAltContent = obj; + storedAltContentId = replaceElemIdStr; + } + att.id = EXPRESS_INSTALL_ID; + if (typeof att.width == UNDEF || (!/%$/.test(att.width) && parseInt(att.width, 10) < 310)) { att.width = "310"; } + if (typeof att.height == UNDEF || (!/%$/.test(att.height) && parseInt(att.height, 10) < 137)) { att.height = "137"; } + doc.title = doc.title.slice(0, 47) + " - Flash Player Installation"; + var pt = ua.ie && ua.win ? "ActiveX" : "PlugIn", + fv = "MMredirectURL=" + encodeURI(window.location).toString().replace(/&/g,"%26") + "&MMplayerType=" + pt + "&MMdoctitle=" + doc.title; + if (typeof par.flashvars != UNDEF) { + par.flashvars += "&" + fv; + } + else { + par.flashvars = fv; + } + // IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it, + // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work + if (ua.ie && ua.win && obj.readyState != 4) { + var newObj = createElement("div"); + replaceElemIdStr += "SWFObjectNew"; + newObj.setAttribute("id", replaceElemIdStr); + obj.parentNode.insertBefore(newObj, obj); // insert placeholder div that will be replaced by the object element that loads expressinstall.swf + obj.style.display = "none"; + (function(){ + if (obj.readyState == 4) { + obj.parentNode.removeChild(obj); + } + else { + setTimeout(arguments.callee, 10); + } + })(); + } + createSWF(att, par, replaceElemIdStr); + } + } + + /* Functions to abstract and display alternative content + */ + function displayAltContent(obj) { + if (ua.ie && ua.win && obj.readyState != 4) { + // IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it, + // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work + var el = createElement("div"); + obj.parentNode.insertBefore(el, obj); // insert placeholder div that will be replaced by the alternative content + el.parentNode.replaceChild(abstractAltContent(obj), el); + obj.style.display = "none"; + (function(){ + if (obj.readyState == 4) { + obj.parentNode.removeChild(obj); + } + else { + setTimeout(arguments.callee, 10); + } + })(); + } + else { + obj.parentNode.replaceChild(abstractAltContent(obj), obj); + } + } + + function abstractAltContent(obj) { + var ac = createElement("div"); + if (ua.win && ua.ie) { + ac.innerHTML = obj.innerHTML; + } + else { + var nestedObj = obj.getElementsByTagName(OBJECT)[0]; + if (nestedObj) { + var c = nestedObj.childNodes; + if (c) { + var cl = c.length; + for (var i = 0; i < cl; i++) { + if (!(c[i].nodeType == 1 && c[i].nodeName == "PARAM") && !(c[i].nodeType == 8)) { + ac.appendChild(c[i].cloneNode(true)); + } + } + } + } + } + return ac; + } + + /* Cross-browser dynamic SWF creation + */ + function createSWF(attObj, parObj, id) { + var r, el = getElementById(id); + if (ua.wk && ua.wk < 312) { return r; } + if (el) { + if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content + attObj.id = id; + } + if (ua.ie && ua.win) { // Internet Explorer + the HTML object element + W3C DOM methods do not combine: fall back to outerHTML + var att = ""; + for (var i in attObj) { + if (attObj[i] != Object.prototype[i]) { // filter out prototype additions from other potential libraries + if (i.toLowerCase() == "data") { + parObj.movie = attObj[i]; + } + else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword + att += ' class="' + attObj[i] + '"'; + } + else if (i.toLowerCase() != "classid") { + att += ' ' + i + '="' + attObj[i] + '"'; + } + } + } + var par = ""; + for (var j in parObj) { + if (parObj[j] != Object.prototype[j]) { // filter out prototype additions from other potential libraries + par += ''; + } + } + el.outerHTML = '' + par + ''; + objIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only) + r = getElementById(attObj.id); + } + else { // well-behaving browsers + var o = createElement(OBJECT); + o.setAttribute("type", FLASH_MIME_TYPE); + for (var m in attObj) { + if (attObj[m] != Object.prototype[m]) { // filter out prototype additions from other potential libraries + if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword + o.setAttribute("class", attObj[m]); + } + else if (m.toLowerCase() != "classid") { // filter out IE specific attribute + o.setAttribute(m, attObj[m]); + } + } + } + for (var n in parObj) { + if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") { // filter out prototype additions from other potential libraries and IE specific param element + createObjParam(o, n, parObj[n]); + } + } + el.parentNode.replaceChild(o, el); + r = o; + } + } + return r; + } + + function createObjParam(el, pName, pValue) { + var p = createElement("param"); + p.setAttribute("name", pName); + p.setAttribute("value", pValue); + el.appendChild(p); + } + + /* Cross-browser SWF removal + - Especially needed to safely and completely remove a SWF in Internet Explorer + */ + function removeSWF(id) { + var obj = getElementById(id); + if (obj && obj.nodeName == "OBJECT") { + if (ua.ie && ua.win) { + obj.style.display = "none"; + (function(){ + if (obj.readyState == 4) { + removeObjectInIE(id); + } + else { + setTimeout(arguments.callee, 10); + } + })(); + } + else { + obj.parentNode.removeChild(obj); + } + } + } + + function removeObjectInIE(id) { + var obj = getElementById(id); + if (obj) { + for (var i in obj) { + if (typeof obj[i] == "function") { + obj[i] = null; + } + } + obj.parentNode.removeChild(obj); + } + } + + /* Functions to optimize JavaScript compression + */ + function getElementById(id) { + var el = null; + try { + el = doc.getElementById(id); + } + catch (e) {} + return el; + } + + function createElement(el) { + return doc.createElement(el); + } + + /* Updated attachEvent function for Internet Explorer + - Stores attachEvent information in an Array, so on unload the detachEvent functions can be called to avoid memory leaks + */ + function addListener(target, eventType, fn) { + target.attachEvent(eventType, fn); + listenersArr[listenersArr.length] = [target, eventType, fn]; + } + + /* Flash Player and SWF content version matching + */ + function hasPlayerVersion(rv) { + var pv = ua.pv, v = rv.split("."); + v[0] = parseInt(v[0], 10); + v[1] = parseInt(v[1], 10) || 0; // supports short notation, e.g. "9" instead of "9.0.0" + v[2] = parseInt(v[2], 10) || 0; + return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false; + } + + /* Cross-browser dynamic CSS creation + - Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php + */ + function createCSS(sel, decl, media, newStyle) { + if (ua.ie && ua.mac) { return; } + var h = doc.getElementsByTagName("head")[0]; + if (!h) { return; } // to also support badly authored HTML pages that lack a head element + var m = (media && typeof media == "string") ? media : "screen"; + if (newStyle) { + dynamicStylesheet = null; + dynamicStylesheetMedia = null; + } + if (!dynamicStylesheet || dynamicStylesheetMedia != m) { + // create dynamic stylesheet + get a global reference to it + var s = createElement("style"); + s.setAttribute("type", "text/css"); + s.setAttribute("media", m); + dynamicStylesheet = h.appendChild(s); + if (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) { + dynamicStylesheet = doc.styleSheets[doc.styleSheets.length - 1]; + } + dynamicStylesheetMedia = m; + } + // add style rule + if (ua.ie && ua.win) { + if (dynamicStylesheet && typeof dynamicStylesheet.addRule == OBJECT) { + dynamicStylesheet.addRule(sel, decl); + } + } + else { + if (dynamicStylesheet && typeof doc.createTextNode != UNDEF) { + dynamicStylesheet.appendChild(doc.createTextNode(sel + " {" + decl + "}")); + } + } + } + + function setVisibility(id, isVisible) { + if (!autoHideShow) { return; } + var v = isVisible ? "visible" : "hidden"; + if (isDomLoaded && getElementById(id)) { + getElementById(id).style.visibility = v; + } + else { + createCSS("#" + id, "visibility:" + v); + } + } + + /* Filter to avoid XSS attacks + */ + function urlEncodeIfNecessary(s) { + var regex = /[\\\"<>\.;]/; + var hasBadChars = regex.exec(s) != null; + return hasBadChars && typeof encodeURIComponent != UNDEF ? encodeURIComponent(s) : s; + } + + /* Release memory to avoid memory leaks caused by closures, fix hanging audio/video threads and force open sockets/NetConnections to disconnect (Internet Explorer only) + */ + var cleanup = function() { + if (ua.ie && ua.win) { + window.attachEvent("onunload", function() { + // remove listeners to avoid memory leaks + var ll = listenersArr.length; + for (var i = 0; i < ll; i++) { + listenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2]); + } + // cleanup dynamically embedded objects to fix audio/video threads and force open sockets and NetConnections to disconnect + var il = objIdArr.length; + for (var j = 0; j < il; j++) { + removeSWF(objIdArr[j]); + } + // cleanup library's main closures to avoid memory leaks + for (var k in ua) { + ua[k] = null; + } + ua = null; + for (var l in swfobject) { + swfobject[l] = null; + } + swfobject = null; + }); + } + }(); + + return { + /* Public API + - Reference: http://code.google.com/p/swfobject/wiki/documentation + */ + registerObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr, callbackFn) { + if (ua.w3 && objectIdStr && swfVersionStr) { + var regObj = {}; + regObj.id = objectIdStr; + regObj.swfVersion = swfVersionStr; + regObj.expressInstall = xiSwfUrlStr; + regObj.callbackFn = callbackFn; + regObjArr[regObjArr.length] = regObj; + setVisibility(objectIdStr, false); + } + else if (callbackFn) { + callbackFn({success:false, id:objectIdStr}); + } + }, + + getObjectById: function(objectIdStr) { + if (ua.w3) { + return getObjectById(objectIdStr); + } + }, + + embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj, callbackFn) { + var callbackObj = {success:false, id:replaceElemIdStr}; + if (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) { + setVisibility(replaceElemIdStr, false); + addDomLoadEvent(function() { + widthStr += ""; // auto-convert to string + heightStr += ""; + var att = {}; + if (attObj && typeof attObj === OBJECT) { + for (var i in attObj) { // copy object to avoid the use of references, because web authors often reuse attObj for multiple SWFs + att[i] = attObj[i]; + } + } + att.data = swfUrlStr; + att.width = widthStr; + att.height = heightStr; + var par = {}; + if (parObj && typeof parObj === OBJECT) { + for (var j in parObj) { // copy object to avoid the use of references, because web authors often reuse parObj for multiple SWFs + par[j] = parObj[j]; + } + } + if (flashvarsObj && typeof flashvarsObj === OBJECT) { + for (var k in flashvarsObj) { // copy object to avoid the use of references, because web authors often reuse flashvarsObj for multiple SWFs + if (typeof par.flashvars != UNDEF) { + par.flashvars += "&" + k + "=" + flashvarsObj[k]; + } + else { + par.flashvars = k + "=" + flashvarsObj[k]; + } + } + } + if (hasPlayerVersion(swfVersionStr)) { // create SWF + var obj = createSWF(att, par, replaceElemIdStr); + if (att.id == replaceElemIdStr) { + setVisibility(replaceElemIdStr, true); + } + callbackObj.success = true; + callbackObj.ref = obj; + } + else if (xiSwfUrlStr && canExpressInstall()) { // show Adobe Express Install + att.data = xiSwfUrlStr; + showExpressInstall(att, par, replaceElemIdStr, callbackFn); + return; + } + else { // show alternative content + setVisibility(replaceElemIdStr, true); + } + if (callbackFn) { callbackFn(callbackObj); } + }); + } + else if (callbackFn) { callbackFn(callbackObj); } + }, + + switchOffAutoHideShow: function() { + autoHideShow = false; + }, + + ua: ua, + + getFlashPlayerVersion: function() { + return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] }; + }, + + hasFlashPlayerVersion: hasPlayerVersion, + + createSWF: function(attObj, parObj, replaceElemIdStr) { + if (ua.w3) { + return createSWF(attObj, parObj, replaceElemIdStr); + } + else { + return undefined; + } + }, + + showExpressInstall: function(att, par, replaceElemIdStr, callbackFn) { + if (ua.w3 && canExpressInstall()) { + showExpressInstall(att, par, replaceElemIdStr, callbackFn); + } + }, + + removeSWF: function(objElemIdStr) { + if (ua.w3) { + removeSWF(objElemIdStr); + } + }, + + createCSS: function(selStr, declStr, mediaStr, newStyleBoolean) { + if (ua.w3) { + createCSS(selStr, declStr, mediaStr, newStyleBoolean); + } + }, + + addDomLoadEvent: addDomLoadEvent, + + addLoadEvent: addLoadEvent, + + getQueryParamValue: function(param) { + var q = doc.location.search || doc.location.hash; + if (q) { + if (/\?/.test(q)) { q = q.split("?")[1]; } // strip question mark + if (param == null) { + return urlEncodeIfNecessary(q); + } + var pairs = q.split("&"); + for (var i = 0; i < pairs.length; i++) { + if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) { + return urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf("=") + 1))); + } + } + } + return ""; + }, + + // For internal usage only + expressInstallCallback: function() { + if (isExpressInstallActive) { + var obj = getElementById(EXPRESS_INSTALL_ID); + if (obj && storedAltContent) { + obj.parentNode.replaceChild(storedAltContent, obj); + if (storedAltContentId) { + setVisibility(storedAltContentId, true); + if (ua.ie && ua.win) { storedAltContent.style.display = "block"; } + } + if (storedCallbackFn) { storedCallbackFn(storedCallbackObj); } + } + isExpressInstallActive = false; + } + } + }; +}(); diff --git a/CIMWebBridge/html-template/history/history.css b/CIMWebBridge/html-template/history/history.css new file mode 100644 index 0000000..dbc47c6 --- /dev/null +++ b/CIMWebBridge/html-template/history/history.css @@ -0,0 +1,6 @@ +/* This CSS stylesheet defines styles used by required elements in a flex application page that supports browser history */ + +#ie_historyFrame { width: 0px; height: 0px; display:none } +#firefox_anchorDiv { width: 0px; height: 0px; display:none } +#safari_formDiv { width: 0px; height: 0px; display:none } +#safari_rememberDiv { width: 0px; height: 0px; display:none } diff --git a/CIMWebBridge/html-template/history/history.js b/CIMWebBridge/html-template/history/history.js new file mode 100644 index 0000000..00a8bfe --- /dev/null +++ b/CIMWebBridge/html-template/history/history.js @@ -0,0 +1,678 @@ +BrowserHistoryUtils = { + addEvent: function(elm, evType, fn, useCapture) { + useCapture = useCapture || false; + if (elm.addEventListener) { + elm.addEventListener(evType, fn, useCapture); + return true; + } + else if (elm.attachEvent) { + var r = elm.attachEvent('on' + evType, fn); + return r; + } + else { + elm['on' + evType] = fn; + } + } +} + +BrowserHistory = (function() { + // type of browser + var browser = { + ie: false, + ie8: false, + firefox: false, + safari: false, + opera: false, + version: -1 + }; + + // Default app state URL to use when no fragment ID present + var defaultHash = ''; + + // Last-known app state URL + var currentHref = document.location.href; + + // Initial URL (used only by IE) + var initialHref = document.location.href; + + // Initial URL (used only by IE) + var initialHash = document.location.hash; + + // History frame source URL prefix (used only by IE) + var historyFrameSourcePrefix = 'history/historyFrame.html?'; + + // History maintenance (used only by Safari) + var currentHistoryLength = -1; + + // Flag to denote the existence of onhashchange + var browserHasHashChange = false; + + var historyHash = []; + + var initialState = createState(initialHref, initialHref + '#' + initialHash, initialHash); + + var backStack = []; + var forwardStack = []; + + var currentObjectId = null; + + //UserAgent detection + var useragent = navigator.userAgent.toLowerCase(); + + if (useragent.indexOf("opera") != -1) { + browser.opera = true; + } else if (useragent.indexOf("msie") != -1) { + browser.ie = true; + browser.version = parseFloat(useragent.substring(useragent.indexOf('msie') + 4)); + if (browser.version == 8) + { + browser.ie = false; + browser.ie8 = true; + } + } else if (useragent.indexOf("safari") != -1) { + browser.safari = true; + browser.version = parseFloat(useragent.substring(useragent.indexOf('safari') + 7)); + } else if (useragent.indexOf("gecko") != -1) { + browser.firefox = true; + } + + if (browser.ie == true && browser.version == 7) { + window["_ie_firstload"] = false; + } + + function hashChangeHandler() + { + currentHref = document.location.href; + var flexAppUrl = getHash(); + //ADR: to fix multiple + if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) { + var pl = getPlayers(); + for (var i = 0; i < pl.length; i++) { + pl[i].browserURLChange(flexAppUrl); + } + } else { + getPlayer().browserURLChange(flexAppUrl); + } + } + + // Accessor functions for obtaining specific elements of the page. + function getHistoryFrame() + { + return document.getElementById('ie_historyFrame'); + } + + function getFormElement() + { + return document.getElementById('safari_formDiv'); + } + + function getRememberElement() + { + return document.getElementById("safari_remember_field"); + } + + // Get the Flash player object for performing ExternalInterface callbacks. + // Updated for changes to SWFObject2. + function getPlayer(id) { + var i; + + if (id && document.getElementById(id)) { + var r = document.getElementById(id); + if (typeof r.SetVariable != "undefined") { + return r; + } + else { + var o = r.getElementsByTagName("object"); + var e = r.getElementsByTagName("embed"); + for (i = 0; i < o.length; i++) { + if (typeof o[i].browserURLChange != "undefined") + return o[i]; + } + for (i = 0; i < e.length; i++) { + if (typeof e[i].browserURLChange != "undefined") + return e[i]; + } + } + } + else { + var o = document.getElementsByTagName("object"); + var e = document.getElementsByTagName("embed"); + for (i = 0; i < e.length; i++) { + if (typeof e[i].browserURLChange != "undefined") + { + return e[i]; + } + } + for (i = 0; i < o.length; i++) { + if (typeof o[i].browserURLChange != "undefined") + { + return o[i]; + } + } + } + return undefined; + } + + function getPlayers() { + var i; + var players = []; + if (players.length == 0) { + var tmp = document.getElementsByTagName('object'); + for (i = 0; i < tmp.length; i++) + { + if (typeof tmp[i].browserURLChange != "undefined") + players.push(tmp[i]); + } + } + if (players.length == 0 || players[0].object == null) { + var tmp = document.getElementsByTagName('embed'); + for (i = 0; i < tmp.length; i++) + { + if (typeof tmp[i].browserURLChange != "undefined") + players.push(tmp[i]); + } + } + return players; + } + + function getIframeHash() { + var doc = getHistoryFrame().contentWindow.document; + var hash = String(doc.location.search); + if (hash.length == 1 && hash.charAt(0) == "?") { + hash = ""; + } + else if (hash.length >= 2 && hash.charAt(0) == "?") { + hash = hash.substring(1); + } + return hash; + } + + /* Get the current location hash excluding the '#' symbol. */ + function getHash() { + // It would be nice if we could use document.location.hash here, + // but it's faulty sometimes. + var idx = document.location.href.indexOf('#'); + return (idx >= 0) ? document.location.href.substr(idx+1) : ''; + } + + /* Get the current location hash excluding the '#' symbol. */ + function setHash(hash) { + // It would be nice if we could use document.location.hash here, + // but it's faulty sometimes. + if (hash == '') hash = '#' + document.location.hash = hash; + } + + function createState(baseUrl, newUrl, flexAppUrl) { + return { 'baseUrl': baseUrl, 'newUrl': newUrl, 'flexAppUrl': flexAppUrl, 'title': null }; + } + + /* Add a history entry to the browser. + * baseUrl: the portion of the location prior to the '#' + * newUrl: the entire new URL, including '#' and following fragment + * flexAppUrl: the portion of the location following the '#' only + */ + function addHistoryEntry(baseUrl, newUrl, flexAppUrl) { + + //delete all the history entries + forwardStack = []; + + if (browser.ie) { + //Check to see if we are being asked to do a navigate for the first + //history entry, and if so ignore, because it's coming from the creation + //of the history iframe + if (flexAppUrl == defaultHash && document.location.href == initialHref && window['_ie_firstload']) { + currentHref = initialHref; + return; + } + if ((!flexAppUrl || flexAppUrl == defaultHash) && window['_ie_firstload']) { + newUrl = baseUrl + '#' + defaultHash; + flexAppUrl = defaultHash; + } else { + // for IE, tell the history frame to go somewhere without a '#' + // in order to get this entry into the browser history. + getHistoryFrame().src = historyFrameSourcePrefix + flexAppUrl; + } + setHash(flexAppUrl); + } else { + + //ADR + if (backStack.length == 0 && initialState.flexAppUrl == flexAppUrl) { + initialState = createState(baseUrl, newUrl, flexAppUrl); + } else if(backStack.length > 0 && backStack[backStack.length - 1].flexAppUrl == flexAppUrl) { + backStack[backStack.length - 1] = createState(baseUrl, newUrl, flexAppUrl); + } + + if (browser.safari && !browserHasHashChange) { + // for Safari, submit a form whose action points to the desired URL + if (browser.version <= 419.3) { + var file = window.location.pathname.toString(); + file = file.substring(file.lastIndexOf("/")+1); + getFormElement().innerHTML = '
'; + //get the current elements and add them to the form + var qs = window.location.search.substring(1); + var qs_arr = qs.split("&"); + for (var i = 0; i < qs_arr.length; i++) { + var tmp = qs_arr[i].split("="); + var elem = document.createElement("input"); + elem.type = "hidden"; + elem.name = tmp[0]; + elem.value = tmp[1]; + document.forms.historyForm.appendChild(elem); + } + document.forms.historyForm.submit(); + } else { + top.location.hash = flexAppUrl; + } + // We also have to maintain the history by hand for Safari + historyHash[history.length] = flexAppUrl; + _storeStates(); + } else { + // Otherwise, just tell the browser to go there + setHash(flexAppUrl); + } + } + backStack.push(createState(baseUrl, newUrl, flexAppUrl)); + } + + function _storeStates() { + if (browser.safari) { + getRememberElement().value = historyHash.join(","); + } + } + + function handleBackButton() { + //The "current" page is always at the top of the history stack. + var current = backStack.pop(); + if (!current) { return; } + var last = backStack[backStack.length - 1]; + if (!last && backStack.length == 0){ + last = initialState; + } + forwardStack.push(current); + } + + function handleForwardButton() { + //summary: private method. Do not call this directly. + + var last = forwardStack.pop(); + if (!last) { return; } + backStack.push(last); + } + + function handleArbitraryUrl() { + //delete all the history entries + forwardStack = []; + } + + /* Called periodically to poll to see if we need to detect navigation that has occurred */ + function checkForUrlChange() { + + if (browser.ie) { + if (currentHref != document.location.href && currentHref + '#' != document.location.href) { + //This occurs when the user has navigated to a specific URL + //within the app, and didn't use browser back/forward + //IE seems to have a bug where it stops updating the URL it + //shows the end-user at this point, but programatically it + //appears to be correct. Do a full app reload to get around + //this issue. + if (browser.version < 7) { + currentHref = document.location.href; + document.location.reload(); + } else { + if (getHash() != getIframeHash()) { + // this.iframe.src = this.blankURL + hash; + var sourceToSet = historyFrameSourcePrefix + getHash(); + getHistoryFrame().src = sourceToSet; + currentHref = document.location.href; + } + } + } + } + + if (browser.safari && !browserHasHashChange) { + // For Safari, we have to check to see if history.length changed. + if (currentHistoryLength >= 0 && history.length != currentHistoryLength) { + //alert("did change: " + history.length + ", " + historyHash.length + "|" + historyHash[history.length] + "|>" + historyHash.join("|")); + var flexAppUrl = getHash(); + if (browser.version < 528.16 /* Anything earlier than Safari 4.0 */) + { + // If it did change and we're running Safari 3.x or earlier, + // then we have to look the old state up in our hand-maintained + // array since document.location.hash won't have changed, + // then call back into BrowserManager. + currentHistoryLength = history.length; + flexAppUrl = historyHash[currentHistoryLength]; + } + + //ADR: to fix multiple + if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) { + var pl = getPlayers(); + for (var i = 0; i < pl.length; i++) { + pl[i].browserURLChange(flexAppUrl); + } + } else { + getPlayer().browserURLChange(flexAppUrl); + } + _storeStates(); + } + } + if (browser.firefox && !browserHasHashChange) { + if (currentHref != document.location.href) { + var bsl = backStack.length; + + var urlActions = { + back: false, + forward: false, + set: false + } + + if ((window.location.hash == initialHash || window.location.href == initialHref) && (bsl == 1)) { + urlActions.back = true; + // FIXME: could this ever be a forward button? + // we can't clear it because we still need to check for forwards. Ugg. + // clearInterval(this.locationTimer); + handleBackButton(); + } + + // first check to see if we could have gone forward. We always halt on + // a no-hash item. + if (forwardStack.length > 0) { + if (forwardStack[forwardStack.length-1].flexAppUrl == getHash()) { + urlActions.forward = true; + handleForwardButton(); + } + } + + // ok, that didn't work, try someplace back in the history stack + if ((bsl >= 2) && (backStack[bsl - 2])) { + if (backStack[bsl - 2].flexAppUrl == getHash()) { + urlActions.back = true; + handleBackButton(); + } + } + + if (!urlActions.back && !urlActions.forward) { + var foundInStacks = { + back: -1, + forward: -1 + } + + for (var i = 0; i < backStack.length; i++) { + if (backStack[i].flexAppUrl == getHash() && i != (bsl - 2)) { + arbitraryUrl = true; + foundInStacks.back = i; + } + } + for (var i = 0; i < forwardStack.length; i++) { + if (forwardStack[i].flexAppUrl == getHash() && i != (bsl - 2)) { + arbitraryUrl = true; + foundInStacks.forward = i; + } + } + handleArbitraryUrl(); + } + + // Firefox changed; do a callback into BrowserManager to tell it. + currentHref = document.location.href; + var flexAppUrl = getHash(); + //ADR: to fix multiple + if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) { + var pl = getPlayers(); + for (var i = 0; i < pl.length; i++) { + pl[i].browserURLChange(flexAppUrl); + } + } else { + getPlayer().browserURLChange(flexAppUrl); + } + } + } + } + + var _initialize = function () { + + browserHasHashChange = ("onhashchange" in document.body); + + if (browser.ie) + { + var scripts = document.getElementsByTagName('script'); + for (var i = 0, s; s = scripts[i]; i++) { + if (s.src.indexOf("history.js") > -1) { + var iframe_location = (new String(s.src)).replace("history.js", "historyFrame.html"); + } + } + historyFrameSourcePrefix = iframe_location + "?"; + var src = historyFrameSourcePrefix; + + var iframe = document.createElement("iframe"); + iframe.id = 'ie_historyFrame'; + iframe.name = 'ie_historyFrame'; + iframe.src = 'javascript:false;'; + + try { + document.body.appendChild(iframe); + } catch(e) { + setTimeout(function() { + document.body.appendChild(iframe); + }, 0); + } + } + + if (browser.safari && !browserHasHashChange) + { + var rememberDiv = document.createElement("div"); + rememberDiv.id = 'safari_rememberDiv'; + document.body.appendChild(rememberDiv); + rememberDiv.innerHTML = ''; + + var formDiv = document.createElement("div"); + formDiv.id = 'safari_formDiv'; + document.body.appendChild(formDiv); + + var reloader_content = document.createElement('div'); + reloader_content.id = 'safarireloader'; + var scripts = document.getElementsByTagName('script'); + for (var i = 0, s; s = scripts[i]; i++) { + if (s.src.indexOf("history.js") > -1) { + html = (new String(s.src)).replace(".js", ".html"); + } + } + reloader_content.innerHTML = ''; + document.body.appendChild(reloader_content); + reloader_content.style.position = 'absolute'; + reloader_content.style.left = reloader_content.style.top = '-9999px'; + iframe = reloader_content.getElementsByTagName('iframe')[0]; + + if (document.getElementById("safari_remember_field").value != "" ) { + historyHash = document.getElementById("safari_remember_field").value.split(","); + } + } + + if (browserHasHashChange) + document.body.onhashchange = hashChangeHandler; + } + + return { + historyHash: historyHash, + backStack: function() { return backStack; }, + forwardStack: function() { return forwardStack }, + getPlayer: getPlayer, + initialize: function(src) { + _initialize(src); + }, + setURL: function(url) { + document.location.href = url; + }, + getURL: function() { + return document.location.href; + }, + getTitle: function() { + return document.title; + }, + setTitle: function(title) { + try { + backStack[backStack.length - 1].title = title; + } catch(e) { } + //if on safari, set the title to be the empty string. + if (browser.safari) { + if (title == "") { + try { + var tmp = window.location.href.toString(); + title = tmp.substring((tmp.lastIndexOf("/")+1), tmp.lastIndexOf("#")); + } catch(e) { + title = ""; + } + } + } + document.title = title; + }, + setDefaultURL: function(def) + { + defaultHash = def; + def = getHash(); + //trailing ? is important else an extra frame gets added to the history + //when navigating back to the first page. Alternatively could check + //in history frame navigation to compare # and ?. + if (browser.ie) + { + window['_ie_firstload'] = true; + var sourceToSet = historyFrameSourcePrefix + def; + var func = function() { + getHistoryFrame().src = sourceToSet; + window.location.replace("#" + def); + setInterval(checkForUrlChange, 50); + } + try { + func(); + } catch(e) { + window.setTimeout(function() { func(); }, 0); + } + } + + if (browser.safari) + { + currentHistoryLength = history.length; + if (historyHash.length == 0) { + historyHash[currentHistoryLength] = def; + var newloc = "#" + def; + window.location.replace(newloc); + } else { + //alert(historyHash[historyHash.length-1]); + } + setInterval(checkForUrlChange, 50); + } + + + if (browser.firefox || browser.opera) + { + var reg = new RegExp("#" + def + "$"); + if (window.location.toString().match(reg)) { + } else { + var newloc ="#" + def; + window.location.replace(newloc); + } + setInterval(checkForUrlChange, 50); + } + + }, + + /* Set the current browser URL; called from inside BrowserManager to propagate + * the application state out to the container. + */ + setBrowserURL: function(flexAppUrl, objectId) { + if (browser.ie && typeof objectId != "undefined") { + currentObjectId = objectId; + } + //fromIframe = fromIframe || false; + //fromFlex = fromFlex || false; + //alert("setBrowserURL: " + flexAppUrl); + //flexAppUrl = (flexAppUrl == "") ? defaultHash : flexAppUrl ; + + var pos = document.location.href.indexOf('#'); + var baseUrl = pos != -1 ? document.location.href.substr(0, pos) : document.location.href; + var newUrl = baseUrl + '#' + flexAppUrl; + + if (document.location.href != newUrl && document.location.href + '#' != newUrl) { + currentHref = newUrl; + addHistoryEntry(baseUrl, newUrl, flexAppUrl); + currentHistoryLength = history.length; + } + }, + + browserURLChange: function(flexAppUrl) { + var objectId = null; + if (browser.ie && currentObjectId != null) { + objectId = currentObjectId; + } + + if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) { + var pl = getPlayers(); + for (var i = 0; i < pl.length; i++) { + try { + pl[i].browserURLChange(flexAppUrl); + } catch(e) { } + } + } else { + try { + getPlayer(objectId).browserURLChange(flexAppUrl); + } catch(e) { } + } + + currentObjectId = null; + }, + getUserAgent: function() { + return navigator.userAgent; + }, + getPlatform: function() { + return navigator.platform; + } + + } + +})(); + +// Initialization + +// Automated unit testing and other diagnostics + +function setURL(url) +{ + document.location.href = url; +} + +function backButton() +{ + history.back(); +} + +function forwardButton() +{ + history.forward(); +} + +function goForwardOrBackInHistory(step) +{ + history.go(step); +} + +//BrowserHistoryUtils.addEvent(window, "load", function() { BrowserHistory.initialize(); }); +(function(i) { + var u =navigator.userAgent;var e=/*@cc_on!@*/false; + var st = setTimeout; + if(/webkit/i.test(u)){ + st(function(){ + var dr=document.readyState; + if(dr=="loaded"||dr=="complete"){i()} + else{st(arguments.callee,10);}},10); + } else if((/mozilla/i.test(u)&&!/(compati)/.test(u)) || (/opera/i.test(u))){ + document.addEventListener("DOMContentLoaded",i,false); + } else if(e){ + (function(){ + var t=document.createElement('doc:rdy'); + try{t.doScroll('left'); + i();t=null; + }catch(e){st(arguments.callee,0);}})(); + } else{ + window.onload=i; + } +})( function() {BrowserHistory.initialize();} ); diff --git a/CIMWebBridge/html-template/history/historyFrame.html b/CIMWebBridge/html-template/history/historyFrame.html new file mode 100644 index 0000000..07e3806 --- /dev/null +++ b/CIMWebBridge/html-template/history/historyFrame.html @@ -0,0 +1,29 @@ + + + + + + + + Hidden frame for Browser History support. + + diff --git a/CIMWebBridge/html-template/index.template.html b/CIMWebBridge/html-template/index.template.html new file mode 100644 index 0000000..d327dad --- /dev/null +++ b/CIMWebBridge/html-template/index.template.html @@ -0,0 +1,108 @@ + + + + + + ${title} + + + + + + + + + + + + + +
+

+ To view this page ensure that Adobe Flash Player version + ${version_major}.${version_minor}.${version_revision} or greater is installed. +

+ +
+ + + + diff --git a/CIMWebBridge/html-template/playerProductInstall.swf b/CIMWebBridge/html-template/playerProductInstall.swf new file mode 100644 index 0000000000000000000000000000000000000000..bdc3437856cb0ae54bb9423700ba6ec89f35282c GIT binary patch literal 657 zcmV;C0&e|7S5pT30{{ScoOM%8YZE~jel|&yP13aKhpyI8)Pu*a7cZru!IYFhQ!%kE z;zt>GCuViByG~|XgJ(bJp~q+`f){V4c=Tk!n-K9Tcv0|Qh}4-)Z5q%$%)ak4^FGh} zG4mKh>p=QFFsz{%nRVYDpaejJ54{eo7BqCbU1T$6A?_UfdU|tzr7->Edg5~QJ`!s!OO;20fpVHsv=YsdQ{lvI<6(v2yrdS7`6LQi8#uy`}SX?Ni6O)r6`%Pye4YxmY_|vs1r$ zYS62JJit*Qq5)1^TgC)o6KZQEG=%VHP4mC>rXSoh>x{G-y~501s42xbb%oj5teYed zUazfuM*8z%%PQW6Lm}m@hf8V%w#-l*H+45VumzOSNh6MI zfwTnD68J}cRU>5EordGe5i?c`=PYmF$$^*q^20~+G3o1>u%sdEL~sE;XrvE~96_TY z1oQ%v(6hbD$HElG!xl|cjZOyoWIw@E;qK|`oT|Xk&*+o6#W@8T{oeJ8I9m-_V~Lc) rrowHdr=QEu;UGRC%}bhmYZ>GFiMOQQ+m?EJQA~aL;e`Gll9T{P!97I~ literal 0 HcmV?d00001 diff --git a/CIMWebBridge/html-template/swfobject.js b/CIMWebBridge/html-template/swfobject.js new file mode 100644 index 0000000..bf35c07 --- /dev/null +++ b/CIMWebBridge/html-template/swfobject.js @@ -0,0 +1,777 @@ +/*! SWFObject v2.2 + is released under the MIT License +*/ + +var swfobject = function() { + + var UNDEF = "undefined", + OBJECT = "object", + SHOCKWAVE_FLASH = "Shockwave Flash", + SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash", + FLASH_MIME_TYPE = "application/x-shockwave-flash", + EXPRESS_INSTALL_ID = "SWFObjectExprInst", + ON_READY_STATE_CHANGE = "onreadystatechange", + + win = window, + doc = document, + nav = navigator, + + plugin = false, + domLoadFnArr = [main], + regObjArr = [], + objIdArr = [], + listenersArr = [], + storedAltContent, + storedAltContentId, + storedCallbackFn, + storedCallbackObj, + isDomLoaded = false, + isExpressInstallActive = false, + dynamicStylesheet, + dynamicStylesheetMedia, + autoHideShow = true, + + /* Centralized function for browser feature detection + - User agent string detection is only used when no good alternative is possible + - Is executed directly for optimal performance + */ + ua = function() { + var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF, + u = nav.userAgent.toLowerCase(), + p = nav.platform.toLowerCase(), + windows = p ? /win/.test(p) : /win/.test(u), + mac = p ? /mac/.test(p) : /mac/.test(u), + webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit + ie = !+"\v1", // feature detection based on Andrea Giammarchi's solution: http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html + playerVersion = [0,0,0], + d = null; + if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) { + d = nav.plugins[SHOCKWAVE_FLASH].description; + if (d && !(typeof nav.mimeTypes != UNDEF && nav.mimeTypes[FLASH_MIME_TYPE] && !nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) { // navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+ + plugin = true; + ie = false; // cascaded feature detection for Internet Explorer + d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1"); + playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10); + playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10); + playerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0; + } + } + else if (typeof win.ActiveXObject != UNDEF) { + try { + var a = new ActiveXObject(SHOCKWAVE_FLASH_AX); + if (a) { // a will return null when ActiveX is disabled + d = a.GetVariable("$version"); + if (d) { + ie = true; // cascaded feature detection for Internet Explorer + d = d.split(" ")[1].split(","); + playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)]; + } + } + } + catch(e) {} + } + return { w3:w3cdom, pv:playerVersion, wk:webkit, ie:ie, win:windows, mac:mac }; + }(), + + /* Cross-browser onDomLoad + - Will fire an event as soon as the DOM of a web page is loaded + - Internet Explorer workaround based on Diego Perini's solution: http://javascript.nwbox.com/IEContentLoaded/ + - Regular onload serves as fallback + */ + onDomLoad = function() { + if (!ua.w3) { return; } + if ((typeof doc.readyState != UNDEF && doc.readyState == "complete") || (typeof doc.readyState == UNDEF && (doc.getElementsByTagName("body")[0] || doc.body))) { // function is fired after onload, e.g. when script is inserted dynamically + callDomLoadFunctions(); + } + if (!isDomLoaded) { + if (typeof doc.addEventListener != UNDEF) { + doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, false); + } + if (ua.ie && ua.win) { + doc.attachEvent(ON_READY_STATE_CHANGE, function() { + if (doc.readyState == "complete") { + doc.detachEvent(ON_READY_STATE_CHANGE, arguments.callee); + callDomLoadFunctions(); + } + }); + if (win == top) { // if not inside an iframe + (function(){ + if (isDomLoaded) { return; } + try { + doc.documentElement.doScroll("left"); + } + catch(e) { + setTimeout(arguments.callee, 0); + return; + } + callDomLoadFunctions(); + })(); + } + } + if (ua.wk) { + (function(){ + if (isDomLoaded) { return; } + if (!/loaded|complete/.test(doc.readyState)) { + setTimeout(arguments.callee, 0); + return; + } + callDomLoadFunctions(); + })(); + } + addLoadEvent(callDomLoadFunctions); + } + }(); + + function callDomLoadFunctions() { + if (isDomLoaded) { return; } + try { // test if we can really add/remove elements to/from the DOM; we don't want to fire it too early + var t = doc.getElementsByTagName("body")[0].appendChild(createElement("span")); + t.parentNode.removeChild(t); + } + catch (e) { return; } + isDomLoaded = true; + var dl = domLoadFnArr.length; + for (var i = 0; i < dl; i++) { + domLoadFnArr[i](); + } + } + + function addDomLoadEvent(fn) { + if (isDomLoaded) { + fn(); + } + else { + domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+ + } + } + + /* Cross-browser onload + - Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/ + - Will fire an event as soon as a web page including all of its assets are loaded + */ + function addLoadEvent(fn) { + if (typeof win.addEventListener != UNDEF) { + win.addEventListener("load", fn, false); + } + else if (typeof doc.addEventListener != UNDEF) { + doc.addEventListener("load", fn, false); + } + else if (typeof win.attachEvent != UNDEF) { + addListener(win, "onload", fn); + } + else if (typeof win.onload == "function") { + var fnOld = win.onload; + win.onload = function() { + fnOld(); + fn(); + }; + } + else { + win.onload = fn; + } + } + + /* Main function + - Will preferably execute onDomLoad, otherwise onload (as a fallback) + */ + function main() { + if (plugin) { + testPlayerVersion(); + } + else { + matchVersions(); + } + } + + /* Detect the Flash Player version for non-Internet Explorer browsers + - Detecting the plug-in version via the object element is more precise than using the plugins collection item's description: + a. Both release and build numbers can be detected + b. Avoid wrong descriptions by corrupt installers provided by Adobe + c. Avoid wrong descriptions by multiple Flash Player entries in the plugin Array, caused by incorrect browser imports + - Disadvantage of this method is that it depends on the availability of the DOM, while the plugins collection is immediately available + */ + function testPlayerVersion() { + var b = doc.getElementsByTagName("body")[0]; + var o = createElement(OBJECT); + o.setAttribute("type", FLASH_MIME_TYPE); + var t = b.appendChild(o); + if (t) { + var counter = 0; + (function(){ + if (typeof t.GetVariable != UNDEF) { + var d = t.GetVariable("$version"); + if (d) { + d = d.split(" ")[1].split(","); + ua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)]; + } + } + else if (counter < 10) { + counter++; + setTimeout(arguments.callee, 10); + return; + } + b.removeChild(o); + t = null; + matchVersions(); + })(); + } + else { + matchVersions(); + } + } + + /* Perform Flash Player and SWF version matching; static publishing only + */ + function matchVersions() { + var rl = regObjArr.length; + if (rl > 0) { + for (var i = 0; i < rl; i++) { // for each registered object element + var id = regObjArr[i].id; + var cb = regObjArr[i].callbackFn; + var cbObj = {success:false, id:id}; + if (ua.pv[0] > 0) { + var obj = getElementById(id); + if (obj) { + if (hasPlayerVersion(regObjArr[i].swfVersion) && !(ua.wk && ua.wk < 312)) { // Flash Player version >= published SWF version: Houston, we have a match! + setVisibility(id, true); + if (cb) { + cbObj.success = true; + cbObj.ref = getObjectById(id); + cb(cbObj); + } + } + else if (regObjArr[i].expressInstall && canExpressInstall()) { // show the Adobe Express Install dialog if set by the web page author and if supported + var att = {}; + att.data = regObjArr[i].expressInstall; + att.width = obj.getAttribute("width") || "0"; + att.height = obj.getAttribute("height") || "0"; + if (obj.getAttribute("class")) { att.styleclass = obj.getAttribute("class"); } + if (obj.getAttribute("align")) { att.align = obj.getAttribute("align"); } + // parse HTML object param element's name-value pairs + var par = {}; + var p = obj.getElementsByTagName("param"); + var pl = p.length; + for (var j = 0; j < pl; j++) { + if (p[j].getAttribute("name").toLowerCase() != "movie") { + par[p[j].getAttribute("name")] = p[j].getAttribute("value"); + } + } + showExpressInstall(att, par, id, cb); + } + else { // Flash Player and SWF version mismatch or an older Webkit engine that ignores the HTML object element's nested param elements: display alternative content instead of SWF + displayAltContent(obj); + if (cb) { cb(cbObj); } + } + } + } + else { // if no Flash Player is installed or the fp version cannot be detected we let the HTML object element do its job (either show a SWF or alternative content) + setVisibility(id, true); + if (cb) { + var o = getObjectById(id); // test whether there is an HTML object element or not + if (o && typeof o.SetVariable != UNDEF) { + cbObj.success = true; + cbObj.ref = o; + } + cb(cbObj); + } + } + } + } + } + + function getObjectById(objectIdStr) { + var r = null; + var o = getElementById(objectIdStr); + if (o && o.nodeName == "OBJECT") { + if (typeof o.SetVariable != UNDEF) { + r = o; + } + else { + var n = o.getElementsByTagName(OBJECT)[0]; + if (n) { + r = n; + } + } + } + return r; + } + + /* Requirements for Adobe Express Install + - only one instance can be active at a time + - fp 6.0.65 or higher + - Win/Mac OS only + - no Webkit engines older than version 312 + */ + function canExpressInstall() { + return !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac) && !(ua.wk && ua.wk < 312); + } + + /* Show the Adobe Express Install dialog + - Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75 + */ + function showExpressInstall(att, par, replaceElemIdStr, callbackFn) { + isExpressInstallActive = true; + storedCallbackFn = callbackFn || null; + storedCallbackObj = {success:false, id:replaceElemIdStr}; + var obj = getElementById(replaceElemIdStr); + if (obj) { + if (obj.nodeName == "OBJECT") { // static publishing + storedAltContent = abstractAltContent(obj); + storedAltContentId = null; + } + else { // dynamic publishing + storedAltContent = obj; + storedAltContentId = replaceElemIdStr; + } + att.id = EXPRESS_INSTALL_ID; + if (typeof att.width == UNDEF || (!/%$/.test(att.width) && parseInt(att.width, 10) < 310)) { att.width = "310"; } + if (typeof att.height == UNDEF || (!/%$/.test(att.height) && parseInt(att.height, 10) < 137)) { att.height = "137"; } + doc.title = doc.title.slice(0, 47) + " - Flash Player Installation"; + var pt = ua.ie && ua.win ? "ActiveX" : "PlugIn", + fv = "MMredirectURL=" + encodeURI(window.location).toString().replace(/&/g,"%26") + "&MMplayerType=" + pt + "&MMdoctitle=" + doc.title; + if (typeof par.flashvars != UNDEF) { + par.flashvars += "&" + fv; + } + else { + par.flashvars = fv; + } + // IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it, + // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work + if (ua.ie && ua.win && obj.readyState != 4) { + var newObj = createElement("div"); + replaceElemIdStr += "SWFObjectNew"; + newObj.setAttribute("id", replaceElemIdStr); + obj.parentNode.insertBefore(newObj, obj); // insert placeholder div that will be replaced by the object element that loads expressinstall.swf + obj.style.display = "none"; + (function(){ + if (obj.readyState == 4) { + obj.parentNode.removeChild(obj); + } + else { + setTimeout(arguments.callee, 10); + } + })(); + } + createSWF(att, par, replaceElemIdStr); + } + } + + /* Functions to abstract and display alternative content + */ + function displayAltContent(obj) { + if (ua.ie && ua.win && obj.readyState != 4) { + // IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it, + // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work + var el = createElement("div"); + obj.parentNode.insertBefore(el, obj); // insert placeholder div that will be replaced by the alternative content + el.parentNode.replaceChild(abstractAltContent(obj), el); + obj.style.display = "none"; + (function(){ + if (obj.readyState == 4) { + obj.parentNode.removeChild(obj); + } + else { + setTimeout(arguments.callee, 10); + } + })(); + } + else { + obj.parentNode.replaceChild(abstractAltContent(obj), obj); + } + } + + function abstractAltContent(obj) { + var ac = createElement("div"); + if (ua.win && ua.ie) { + ac.innerHTML = obj.innerHTML; + } + else { + var nestedObj = obj.getElementsByTagName(OBJECT)[0]; + if (nestedObj) { + var c = nestedObj.childNodes; + if (c) { + var cl = c.length; + for (var i = 0; i < cl; i++) { + if (!(c[i].nodeType == 1 && c[i].nodeName == "PARAM") && !(c[i].nodeType == 8)) { + ac.appendChild(c[i].cloneNode(true)); + } + } + } + } + } + return ac; + } + + /* Cross-browser dynamic SWF creation + */ + function createSWF(attObj, parObj, id) { + var r, el = getElementById(id); + if (ua.wk && ua.wk < 312) { return r; } + if (el) { + if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content + attObj.id = id; + } + if (ua.ie && ua.win) { // Internet Explorer + the HTML object element + W3C DOM methods do not combine: fall back to outerHTML + var att = ""; + for (var i in attObj) { + if (attObj[i] != Object.prototype[i]) { // filter out prototype additions from other potential libraries + if (i.toLowerCase() == "data") { + parObj.movie = attObj[i]; + } + else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword + att += ' class="' + attObj[i] + '"'; + } + else if (i.toLowerCase() != "classid") { + att += ' ' + i + '="' + attObj[i] + '"'; + } + } + } + var par = ""; + for (var j in parObj) { + if (parObj[j] != Object.prototype[j]) { // filter out prototype additions from other potential libraries + par += ''; + } + } + el.outerHTML = '' + par + ''; + objIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only) + r = getElementById(attObj.id); + } + else { // well-behaving browsers + var o = createElement(OBJECT); + o.setAttribute("type", FLASH_MIME_TYPE); + for (var m in attObj) { + if (attObj[m] != Object.prototype[m]) { // filter out prototype additions from other potential libraries + if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword + o.setAttribute("class", attObj[m]); + } + else if (m.toLowerCase() != "classid") { // filter out IE specific attribute + o.setAttribute(m, attObj[m]); + } + } + } + for (var n in parObj) { + if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") { // filter out prototype additions from other potential libraries and IE specific param element + createObjParam(o, n, parObj[n]); + } + } + el.parentNode.replaceChild(o, el); + r = o; + } + } + return r; + } + + function createObjParam(el, pName, pValue) { + var p = createElement("param"); + p.setAttribute("name", pName); + p.setAttribute("value", pValue); + el.appendChild(p); + } + + /* Cross-browser SWF removal + - Especially needed to safely and completely remove a SWF in Internet Explorer + */ + function removeSWF(id) { + var obj = getElementById(id); + if (obj && obj.nodeName == "OBJECT") { + if (ua.ie && ua.win) { + obj.style.display = "none"; + (function(){ + if (obj.readyState == 4) { + removeObjectInIE(id); + } + else { + setTimeout(arguments.callee, 10); + } + })(); + } + else { + obj.parentNode.removeChild(obj); + } + } + } + + function removeObjectInIE(id) { + var obj = getElementById(id); + if (obj) { + for (var i in obj) { + if (typeof obj[i] == "function") { + obj[i] = null; + } + } + obj.parentNode.removeChild(obj); + } + } + + /* Functions to optimize JavaScript compression + */ + function getElementById(id) { + var el = null; + try { + el = doc.getElementById(id); + } + catch (e) {} + return el; + } + + function createElement(el) { + return doc.createElement(el); + } + + /* Updated attachEvent function for Internet Explorer + - Stores attachEvent information in an Array, so on unload the detachEvent functions can be called to avoid memory leaks + */ + function addListener(target, eventType, fn) { + target.attachEvent(eventType, fn); + listenersArr[listenersArr.length] = [target, eventType, fn]; + } + + /* Flash Player and SWF content version matching + */ + function hasPlayerVersion(rv) { + var pv = ua.pv, v = rv.split("."); + v[0] = parseInt(v[0], 10); + v[1] = parseInt(v[1], 10) || 0; // supports short notation, e.g. "9" instead of "9.0.0" + v[2] = parseInt(v[2], 10) || 0; + return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false; + } + + /* Cross-browser dynamic CSS creation + - Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php + */ + function createCSS(sel, decl, media, newStyle) { + if (ua.ie && ua.mac) { return; } + var h = doc.getElementsByTagName("head")[0]; + if (!h) { return; } // to also support badly authored HTML pages that lack a head element + var m = (media && typeof media == "string") ? media : "screen"; + if (newStyle) { + dynamicStylesheet = null; + dynamicStylesheetMedia = null; + } + if (!dynamicStylesheet || dynamicStylesheetMedia != m) { + // create dynamic stylesheet + get a global reference to it + var s = createElement("style"); + s.setAttribute("type", "text/css"); + s.setAttribute("media", m); + dynamicStylesheet = h.appendChild(s); + if (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) { + dynamicStylesheet = doc.styleSheets[doc.styleSheets.length - 1]; + } + dynamicStylesheetMedia = m; + } + // add style rule + if (ua.ie && ua.win) { + if (dynamicStylesheet && typeof dynamicStylesheet.addRule == OBJECT) { + dynamicStylesheet.addRule(sel, decl); + } + } + else { + if (dynamicStylesheet && typeof doc.createTextNode != UNDEF) { + dynamicStylesheet.appendChild(doc.createTextNode(sel + " {" + decl + "}")); + } + } + } + + function setVisibility(id, isVisible) { + if (!autoHideShow) { return; } + var v = isVisible ? "visible" : "hidden"; + if (isDomLoaded && getElementById(id)) { + getElementById(id).style.visibility = v; + } + else { + createCSS("#" + id, "visibility:" + v); + } + } + + /* Filter to avoid XSS attacks + */ + function urlEncodeIfNecessary(s) { + var regex = /[\\\"<>\.;]/; + var hasBadChars = regex.exec(s) != null; + return hasBadChars && typeof encodeURIComponent != UNDEF ? encodeURIComponent(s) : s; + } + + /* Release memory to avoid memory leaks caused by closures, fix hanging audio/video threads and force open sockets/NetConnections to disconnect (Internet Explorer only) + */ + var cleanup = function() { + if (ua.ie && ua.win) { + window.attachEvent("onunload", function() { + // remove listeners to avoid memory leaks + var ll = listenersArr.length; + for (var i = 0; i < ll; i++) { + listenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2]); + } + // cleanup dynamically embedded objects to fix audio/video threads and force open sockets and NetConnections to disconnect + var il = objIdArr.length; + for (var j = 0; j < il; j++) { + removeSWF(objIdArr[j]); + } + // cleanup library's main closures to avoid memory leaks + for (var k in ua) { + ua[k] = null; + } + ua = null; + for (var l in swfobject) { + swfobject[l] = null; + } + swfobject = null; + }); + } + }(); + + return { + /* Public API + - Reference: http://code.google.com/p/swfobject/wiki/documentation + */ + registerObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr, callbackFn) { + if (ua.w3 && objectIdStr && swfVersionStr) { + var regObj = {}; + regObj.id = objectIdStr; + regObj.swfVersion = swfVersionStr; + regObj.expressInstall = xiSwfUrlStr; + regObj.callbackFn = callbackFn; + regObjArr[regObjArr.length] = regObj; + setVisibility(objectIdStr, false); + } + else if (callbackFn) { + callbackFn({success:false, id:objectIdStr}); + } + }, + + getObjectById: function(objectIdStr) { + if (ua.w3) { + return getObjectById(objectIdStr); + } + }, + + embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj, callbackFn) { + var callbackObj = {success:false, id:replaceElemIdStr}; + if (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) { + setVisibility(replaceElemIdStr, false); + addDomLoadEvent(function() { + widthStr += ""; // auto-convert to string + heightStr += ""; + var att = {}; + if (attObj && typeof attObj === OBJECT) { + for (var i in attObj) { // copy object to avoid the use of references, because web authors often reuse attObj for multiple SWFs + att[i] = attObj[i]; + } + } + att.data = swfUrlStr; + att.width = widthStr; + att.height = heightStr; + var par = {}; + if (parObj && typeof parObj === OBJECT) { + for (var j in parObj) { // copy object to avoid the use of references, because web authors often reuse parObj for multiple SWFs + par[j] = parObj[j]; + } + } + if (flashvarsObj && typeof flashvarsObj === OBJECT) { + for (var k in flashvarsObj) { // copy object to avoid the use of references, because web authors often reuse flashvarsObj for multiple SWFs + if (typeof par.flashvars != UNDEF) { + par.flashvars += "&" + k + "=" + flashvarsObj[k]; + } + else { + par.flashvars = k + "=" + flashvarsObj[k]; + } + } + } + if (hasPlayerVersion(swfVersionStr)) { // create SWF + var obj = createSWF(att, par, replaceElemIdStr); + if (att.id == replaceElemIdStr) { + setVisibility(replaceElemIdStr, true); + } + callbackObj.success = true; + callbackObj.ref = obj; + } + else if (xiSwfUrlStr && canExpressInstall()) { // show Adobe Express Install + att.data = xiSwfUrlStr; + showExpressInstall(att, par, replaceElemIdStr, callbackFn); + return; + } + else { // show alternative content + setVisibility(replaceElemIdStr, true); + } + if (callbackFn) { callbackFn(callbackObj); } + }); + } + else if (callbackFn) { callbackFn(callbackObj); } + }, + + switchOffAutoHideShow: function() { + autoHideShow = false; + }, + + ua: ua, + + getFlashPlayerVersion: function() { + return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] }; + }, + + hasFlashPlayerVersion: hasPlayerVersion, + + createSWF: function(attObj, parObj, replaceElemIdStr) { + if (ua.w3) { + return createSWF(attObj, parObj, replaceElemIdStr); + } + else { + return undefined; + } + }, + + showExpressInstall: function(att, par, replaceElemIdStr, callbackFn) { + if (ua.w3 && canExpressInstall()) { + showExpressInstall(att, par, replaceElemIdStr, callbackFn); + } + }, + + removeSWF: function(objElemIdStr) { + if (ua.w3) { + removeSWF(objElemIdStr); + } + }, + + createCSS: function(selStr, declStr, mediaStr, newStyleBoolean) { + if (ua.w3) { + createCSS(selStr, declStr, mediaStr, newStyleBoolean); + } + }, + + addDomLoadEvent: addDomLoadEvent, + + addLoadEvent: addLoadEvent, + + getQueryParamValue: function(param) { + var q = doc.location.search || doc.location.hash; + if (q) { + if (/\?/.test(q)) { q = q.split("?")[1]; } // strip question mark + if (param == null) { + return urlEncodeIfNecessary(q); + } + var pairs = q.split("&"); + for (var i = 0; i < pairs.length; i++) { + if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) { + return urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf("=") + 1))); + } + } + } + return ""; + }, + + // For internal usage only + expressInstallCallback: function() { + if (isExpressInstallActive) { + var obj = getElementById(EXPRESS_INSTALL_ID); + if (obj && storedAltContent) { + obj.parentNode.replaceChild(storedAltContent, obj); + if (storedAltContentId) { + setVisibility(storedAltContentId, true); + if (ua.ie && ua.win) { storedAltContent.style.display = "block"; } + } + if (storedCallbackFn) { storedCallbackFn(storedCallbackObj); } + } + isExpressInstallActive = false; + } + } + }; +}(); diff --git a/CIMWebBridge/libs/as3corelib.swc b/CIMWebBridge/libs/as3corelib.swc new file mode 100644 index 0000000000000000000000000000000000000000..f2cabc6481e416d9661d9b52241e40838c3a5a8e GIT binary patch literal 193727 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

n{E8H5_rD4^ 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"; + xml+=""; + xml+="client_bind"; + xml+=""; + xml+=""+account+""; + xml+=""+deviceId+""; + xml+="web"; + xml+="browser"; + xml+=""; + xml+=""; + + send(xml); + + } + + public function getOfflineMessage(account:String):void + { + + var xml:String=""; + xml+=""; + xml+="client_get_offline_message"; + xml+=""; + xml+=""+account+""; + xml+=""; + xml+=""; + send(xml); + + } + + public function logout():void + { + + socket.close(); + + } + + private function sessionCreated(event:Event):void + { + + ExternalInterface.call("sessionCreated"); + heartbeat_timer.start(); + froceOffline = false; + } + + + private function doSendHeartbeat(e:TimerEvent):void + { + var xml:String=""; + xml+=""; + xml+="client_heartbeat"; + xml+=""; + send(xml); + } + + private function sessionClosed(event:Event):void + { + ExternalInterface.call("sessionClosed"); + + if(!froceOffline) + { + connect(CIM_HOST); + } + heartbeat_timer.stop(); + } + private function exceptionCaught(event:Event):void{ + + //Alert.show("exceptionCaught","提示"); + } + + private function securityErrorFun(event:Event):void{ + + //Alert.show("securityErrorFun"+event.toString(),"提示"); + } + + + + /**接受服务器信息*/ + internal function messageReceived(event:ProgressEvent):void + { + var msg:String=""; + //循环读取数据 + while(socket.bytesAvailable) + { + msg+=socket.readUTFBytes(socket.bytesAvailable); + } + + var index:int = msg.indexOf("\b"); + if(msg.indexOf("\b")>=0) + { + msg = msg.substring(0,index); + } + + var xml:XML=XML(msg); + var data:Object = xml as Object; + if(xml.name()=="reply"){ + ExternalInterface.call("onReplyReceived",ReplyBody.mappingToJSON(xml)); + } + if(xml.name()=="message"){ + + + if(xml["type"]=="999") + { + froceOffline = true; + } + + ExternalInterface.call("onMessageReceived",Message.mappingToJSON(xml),xml["content"].toString()); + } + + } + + + /**发送数据到服务器*/ + internal function send(msg:String):void + { + //新建一个ByteArray来存放数据 + socket.writeUTFBytes(msg+"\b"); + //调用flush方法发送信息 + socket.flush(); + } + + public function playSound():void + { + _sound.play(1); + } + + + + } +} \ No newline at end of file diff --git a/cim_for_netty/ichat-server/WebRoot/console/webclient/Message.as b/CIMWebBridge/src/Message.as similarity index 97% rename from cim_for_netty/ichat-server/WebRoot/console/webclient/Message.as rename to CIMWebBridge/src/Message.as index aa27de8..ff2efc7 100644 --- a/cim_for_netty/ichat-server/WebRoot/console/webclient/Message.as +++ b/CIMWebBridge/src/Message.as @@ -1,5 +1,5 @@ -package com.farsunset.webcim.bean +package { import com.adobe.serialization.json.JSON; diff --git a/cim_for_netty/ichat-server/WebRoot/console/webclient/ReplyBody.as b/CIMWebBridge/src/ReplyBody.as similarity index 93% rename from cim_for_netty/ichat-server/WebRoot/console/webclient/ReplyBody.as rename to CIMWebBridge/src/ReplyBody.as index 0a4ae83..3010fc1 100644 --- a/cim_for_netty/ichat-server/WebRoot/console/webclient/ReplyBody.as +++ b/CIMWebBridge/src/ReplyBody.as @@ -1,5 +1,5 @@ -package com.farsunset.webcim.bean +package { import com.adobe.serialization.json.JSON; diff --git a/CIM服务端及辅助文档.doc b/CIM服务端及辅助文档.doc index 181a914df9ca72728fc67f36dff66a925817e269..6786432e0a7fd877b440ee4ac999dd03b79a6726 100644 GIT binary patch delta 5523 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 AIsgCw delta 6032 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 diff --git a/cim_for_mina/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageDecoder.java b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageDecoder.java index d8ae6e5..77246e7 100644 --- a/cim_for_mina/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageDecoder.java +++ b/cim_for_mina/cim-core/src/com/farsunset/cim/nio/filter/ServerMessageDecoder.java @@ -65,21 +65,20 @@ public class ServerMessageDecoder extends CumulativeProtocolDecoder { Document doc = builder.parse(new ByteArrayInputStream(bytes)); body.setKey(doc.getElementsByTagName("key").item(0).getTextContent()); - NodeList datas = doc.getElementsByTagName("data"); - if(datas!=null&&datas.getLength()>0) - { - NodeList items = datas.item(0).getChildNodes(); - for (int i = 0; i < items.getLength(); i++) { - Node node = items.item(i); - body.getData().put(node.getNodeName(), node.getTextContent()); - } - } + + NodeList dataNodeList = doc.getElementsByTagName("data"); + if(dataNodeList!=null && dataNodeList.getLength()>0) + { + NodeList items = dataNodeList.item(0).getChildNodes(); + for (int i = 0; i < items.getLength(); i++) { + Node node = items.item(i); + body.getData().put(node.getNodeName(), node.getTextContent()); + } + } out.write(body); }catch(Exception e){ - //e.printStackTrace(); logger.warn(e.getMessage()); - out.write(message); } } diff --git a/cim_for_mina/ichat-server/WebRoot/console/session/manage.jsp b/cim_for_mina/ichat-server/WebRoot/console/session/manage.jsp index 17e978c..4d8ba5a 100644 --- a/cim_for_mina/ichat-server/WebRoot/console/session/manage.jsp +++ b/cim_for_mina/ichat-server/WebRoot/console/session/manage.jsp @@ -60,10 +60,7 @@ } function openWebclient(){ - - var height = $(document).height(); - var width = $(document).width(); - window.open ("<%=basePath%>/console/webclient/main.jsp", "","height="+height+", width="+width+", top=0, left=0, toolbar=no,menubar=no, scrollbars=no, resizable=no,location=no, status=no"); + window.open ("<%=basePath%>/console/webclient/main.jsp", "","height="+800+", width="+600+", top=0, left=0, toolbar=no,menubar=no, scrollbars=no, resizable=no,location=no, status=no"); } diff --git a/cim_for_mina/ichat-server/WebRoot/console/webclient/CIMBridge.mxml b/cim_for_mina/ichat-server/WebRoot/console/webclient/CIMBridge.mxml deleted file mode 100644 index acd7893..0000000 --- a/cim_for_mina/ichat-server/WebRoot/console/webclient/CIMBridge.mxml +++ /dev/null @@ -1,177 +0,0 @@ - - - - "; - xml+=""; - xml+="client_bind"; - xml+=""; - xml+=""+account+""; - xml+=""+deviceId+""; - xml+="web"; - xml+="browser"; - xml+=""; - xml+=""; - - send(xml); - - } - - public function getOfflineMessage(account:String):void - { - - var xml:String=""; - xml+=""; - xml+="client_get_offline_message"; - xml+=""; - xml+=""+account+""; - xml+=""; - xml+=""; - send(xml); - - } - - public function logout():void - { - - socket.close(); - - } - - private function sessionCreated(event:Event):void - { - - ExternalInterface.call("sessionCreated"); - heartbeat_timer.start(); - froceOffline = false; - } - - - private function doSendHeartbeat(e:TimerEvent):void - { - var xml:String=""; - xml+=""; - xml+="client_heartbeat"; - xml+=""; - send(xml); - } - - private function sessionClosed(event:Event):void - { - ExternalInterface.call("sessionClosed"); - - if(!froceOffline) - { - connect(CIM_HOST); - } - //heartbeat_timer.stop(); - } - private function exceptionCaught(event:Event):void{ - - //Alert.show("exceptionCaught","提示"); - } - - private function securityErrorFun(event:Event):void{ - - //Alert.show("securityErrorFun"+event.toString(),"提示"); - } - - - - /**接受服务器信息*/ - internal function messageReceived(event:ProgressEvent):void - { - var msg:String=""; - //循环读取数据 - while(socket.bytesAvailable) - { - msg+=socket.readUTFBytes(socket.bytesAvailable); - } - - var index:int = msg.indexOf("\b"); - if(msg.indexOf("\b")>=0) - { - msg = msg.substring(0,index); - } - - var xml:XML=XML(msg); - var data:Object = xml as Object; - if(xml.name()=="reply"){ - ExternalInterface.call("onReplyReceived",ReplyBody.mappingToJSON(xml)); - } - if(xml.name()=="message"){ - - - if(xml["type"]=="999") - { - froceOffline = true; - } - - ExternalInterface.call("onMessageReceived",Message.mappingToJSON(xml),xml["content"].toString()); - } - - } - - - /**发送数据到服务器*/ - internal function send(msg:String):void - { - //新建一个ByteArray来存放数据 - socket.writeUTFBytes(msg+"\b"); - //调用flush方法发送信息 - socket.flush(); - } - - - - ]]> - - diff --git a/cim_for_mina/ichat-server/WebRoot/console/webclient/CIMBridge.swf b/cim_for_mina/ichat-server/WebRoot/console/webclient/CIMBridge.swf index 125b85eb67dd4f5949dad851c4c3268041227bee..f54bac6b38fd5b6268495945414368e6d2018cd1 100644 GIT binary patch literal 6662 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 literal 48379 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 >RAlttT2w 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 diff --git a/cim_for_mina/ichat-server/WebRoot/console/webclient/Message.as b/cim_for_mina/ichat-server/WebRoot/console/webclient/Message.as deleted file mode 100644 index aa27de8..0000000 --- a/cim_for_mina/ichat-server/WebRoot/console/webclient/Message.as +++ /dev/null @@ -1,77 +0,0 @@ - -package com.farsunset.webcim.bean -{ - import com.adobe.serialization.json.JSON; - - public class Message - { - - - /** - * 消息类型,用户自定义消息类别 - */ - public var mid:String; - - - /** - * 消息类型,用户自定义消息类别 - */ - public var type:String; - /** - * 消息标题 - */ - public var title:String; - /** - * 消息类容,于type 组合为任何类型消息,content 根据 format 可表示为 text,json ,xml数据格式 - */ - public var content:String = ""; - - - /** - * 消息发送者账号 - */ - public var sender:String; - /** - * 消息发送者接收者 - */ - public var receiver:String; - - /** - * 文件 url - */ - public var file:String; - /** - * 文件类型 - */ - public var fileType:String; - - /** - * content 内容格式 - */ - public var format:String = "txt"; - - - public var timestamp:Number; - - public static function mappingToJSON(xml:XML):Object - { - var message:Message = new Message(); - message.mid = xml["mid"]; - message.type = xml["type"]; - message.title = xml["title"]; - message.sender = xml["sender"]; - message.receiver = xml["receiver"]; - message.file = xml["file"]; - message.fileType = xml["fileType"]; - message.timestamp = xml["timestamp"]; - message.content = ""; - return com.adobe.serialization.json.JSON.encode(message).toString(); - } - - - - } - - - -} \ No newline at end of file diff --git a/cim_for_mina/ichat-server/WebRoot/console/webclient/MessageDialog.jsp b/cim_for_mina/ichat-server/WebRoot/console/webclient/MessageDialog.jsp index 78150f5..7119991 100644 --- a/cim_for_mina/ichat-server/WebRoot/console/webclient/MessageDialog.jsp +++ b/cim_for_mina/ichat-server/WebRoot/console/webclient/MessageDialog.jsp @@ -1,7 +1,7 @@ <%@ page language="java" pageEncoding="utf-8"%>