From 14c7f5971e32bd83de028c3e321d3632f130deca Mon Sep 17 00:00:00 2001 From: Cameron Date: Wed, 28 Sep 2016 10:44:28 -0700 Subject: [PATCH] Issue #1886 - plupload updated to v2.1.9 --- e107_web/js/plupload/Moxie.swf | Bin 29349 -> 29903 bytes e107_web/js/plupload/Moxie.xap | Bin 62643 -> 63118 bytes e107_web/js/plupload/i18n/en.js | 2 + .../jquery.plupload.queue.js | 429 +- .../jquery.plupload.queue.min.js | 1 + .../css/jquery.ui.plupload.css | 9 +- .../jquery.ui.plupload/jquery.ui.plupload.js | 1344 +++++- e107_web/js/plupload/moxie.js | 3892 +++++++++-------- e107_web/js/plupload/moxie.min.js | 11 +- e107_web/js/plupload/plupload.dev.js | 394 +- e107_web/js/plupload/plupload.full.min.js | 29 + e107_web/js/plupload/plupload.min.js | 13 + 12 files changed, 4221 insertions(+), 1903 deletions(-) create mode 100644 e107_web/js/plupload/i18n/en.js create mode 100644 e107_web/js/plupload/jquery.plupload.queue/jquery.plupload.queue.min.js create mode 100644 e107_web/js/plupload/plupload.full.min.js create mode 100644 e107_web/js/plupload/plupload.min.js diff --git a/e107_web/js/plupload/Moxie.swf b/e107_web/js/plupload/Moxie.swf index da9914bb84f173d6c803e7c1a5373dd9eba1fbc2..937085f26254e5e726416046f111db21aa79ffb5 100644 GIT binary patch literal 29903 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%0A$@@UB>FVcP*R>4w3$7blrs`6LurF!a z>r^((`4!eV_-pPKhkS#`687?6+^yw*%ia3$@3`9-@jZ7t4*fTGn}_|t-OiE!;qJ6i zV~u_2Ybrm|noRwP))eZ0Y0WJ4XIj&x{z7Xy)n94NGN5TuJ@X*wySRScJ=^c=OAEKcc|xc_Sw1;#;uFt9&bXu?JGC ze881ah~*J7r?Wx04P~*hLgBg0BNX)@HW_#OG3-d8Xr=5Zq3CniB1FVhtQHrPAj=Sn z+02&Vn!J>qC6u(kur;{Arz7rIi#+2dhCo6nnYS@GaD@2xGk9*HxE^Nk!h*TsoOhz0 z{WN1wAs+yfvkUn^IKStS4}#0vjXb9t7i*ymh8ubT)m-?UJ;;Zg%UL(_yo)&7hkWRI z&d%XNIp}iE&P6^925=SfgYV|-Zsdo+JncZ9|0HL5LK*&d&V~wQM1r#yfjtyz{1Wnl z_c{9+vmN#kXZb=I`7x)9oayYCxcD7D%J&YRNw;F|Ff%(Q*4?Cf{;4LsH>-r@&|Bw- zj)@&*O5HX!8+VBg@1cq-Ls4o@spG+0)Vf<$?)t-D(d-lGQZRacnZc6o=oYHye4OSSYqmBkuFy(s9p{fe>K zgW%BW?pHnkQfIKPdQtj-%1R%E6lKFd&aBhxj_mZD6?{l7{hBjhpwqKYEqz#JOM1us zgmHwXJ{Y$o8+Y~&8xa~oyPeb#Ebu;}aw<>m2p%TOdX1;tqxk;GJL>dc!1J@Z$vcW+ zn?g67SzlqB3&u8R69X*K%mS>lnFm-`vl?LaqFDr3-H`znW<=5|YQ_xzQyx?S>9&0r1jEs@)1uOQFHphfpu84sz|HsB^C_eN5%ETzS|EjrRPiZt`qko?|@4 zbz_4c^J?xL#a*Rnomj6;JXsmrppTt+cr&XR)u(sO<7$9|CRhmK(+V+zd06QaD)$r< zKKP_6ry1tZXR_nAFoeN7RqZL2jQcM6TKTl9sH*Y|JvXGMKdaJ%iN+u<4hWGRe233c z6c|3!`2@ICt*kH`M5kwp+!ijeox$hSb{AYmetUa^=0f0N){D;I^Qv#RN`)6x-;1gX z7Xq_0_>xLpYEX79q>(SH4SJn3_&%@K^K?ZiP+a2`rEX9!g1LqPF**2U62V>RisGV@ zN^2IV4t?l-Jw59Bo*w+WrKbm#dXeaw&pj83(!Z(9_p;hiFX}Zg0Ecb}VWtn4y3r9F zk?4eSsIE+6FL=9GvUZq5oymA+Hkd^3Bg`=hn(%kE&YV~`Wn$ec>cqMZKmsrv{}w94 z?UWLj_!-!*(@90>_X}FL$|UdQ}p{C)PRfZy_TJ z24QFhXF@v`6nw-BSm-0Z_+wsRhCb$tKj8%;^a)@5DKF4MpYp|@@q)C_XMFMJydXXF zIbZw*FBly9f~d+=;lfN%tEYwchtBx6oT@IiQ!}?5x zGpBN}+mf_V?dUX6z?Wy%y{6VZr6%fLSG^-??m;T_`k)14_f8Bbq|pjAy6#yupoH1< zf!;UB6!JHv=)W#SKSvmvv6)LNAYcXZSCQK1uXsx(1x8H|u;J~^#&7I{=Q2Ucyb1m5 z{-FlnCY=_g{{*qmld9LeVCK+Z%M(p%5cj zAH7~X7>iFIDWJIg?!9pU2}K$^f+{fMk;>|RKDgtYBWmUv&<^-%(h2{_kF|; z!Ew?w9q?qRg*w6#;)v=shc=7!Om_NMc2bPjz%^ZYN^)(NG#DSiV5rK6uorJhcIv7E z<6$VcQbG#TaDLTFXdE04&LtN@q(atfK9WLYE>wqwJirg3uIUiiFS+MBHS{G3T%J%h zJp;o#Lr0KWl+nQsRhdNAOs;F{2p&;BnXJ-5Nzwc`sSbRhfM`y}fMFb>2_hDM!wVGO zH#G6VDp$qmj)@7kswf^dD?z;5m@=1C+mxzd`a=Zz4?=%x*(^LaiWxlBm@jlyoY66{ zK-pU}pnQN*`iZI(oRv_qr1zaC|%h@6(v!xm40PO z3W`=A-tc1iV-O==-)cY$%9J4CzZPO*tJa+B;FhG=CDp`OXUypZkJMVqDQ z-#~X9%D;qBd$wIgRiiW2P&!evUA z+I4Vy_o!Kuh3ftWhXENNOF2q2RIw3U%3tB$3uqAJpSx>*P!pv;SmD3}w%k4_NN`u} zNq8O-rTP_+k$?mK>5@DT! z9;IJ#CM(RYKw|2(^_Z<*tJeqJ-_z3xI!8lKHC;xZ(8DoFWAKx0476dPBY_{AhF zeCUBY)9bA+9bK!&y0b`0pB5=)-?S=pT<7JUXGGp4#3&R1c2Zc_-Gx|}6uPr+*$!L% z5Tup#2HmHbu~iGQ!FlJ*}Hh|+U~;yXvkAT#tQ5>(qX zP?0uqd-mz6Kvp^mif~C?)a=PtaH@umrBv=J!y2ikHs-YZ$i2Dpr3=g|&r&Rc!UWvA zN-(J@qP>}S1djy;@I+%ef`0;mo)^US>@&&F9~(SRkakkE&y{yyP$jh8r(Dy5MLQp&r-pd3D(UBUqbCA_GNa|T4*r_IhU26Ft)$Vf?=TbV+Ct;(e zP>8sN5zR%!?V8JR6h+?41sG6RpbSKK-f`G&7AowJG7y?>?P4rl7se!Tb&w*HMFdYz z1g{Vz7_LF7eMw;oPD7*jN=%suUL|Nd;K(oFNOB+Rll!nF$*>N+E@OwqiDO4WKtSu! zv_)*cqvmQ5={@XwSjMY`8Y)8DpJ;2iJ7bA!M5qv$V+b=?9!7E>m#NrC!t14tPo<4d zlLLN3(`0Fo$|wI1XgZdrX{NY>j-w+un{+!N?OR81PT$I0t3tc&2+p%A*NWhEv=ytC z7Q7ynldMX5@CH;Wtjb0a+=N;s)v)MsnxX0Ea*|zFw{#Wr75IP}SGh|8rn7Fd2;L}s zTSTWN#l9UXg{Cly6qZgTAB3RvP#V}(vsFm*-=mgp6%0;dlZ9b6W)s;^icw#%V${wq zayoPy!#$@ou7su$=YF!~JGnb(HdRymv+GGt*wy5Q?P_w%b~UwWs(WWEw9e1gI@s6o zqr5i>vaiQ;TpqIPW=JigbFRBtcuyqXbi(hpOyf+~$5M5%l5BS-+vyTnvrV89+{|Wg z6Ko7dOh*XgXiA#s{1qD+S=3(ZT(gmtZ)A#%hiM%Ye2-5*-g^qSYwz>vC-l}n;M1p} zmSP>YM=fO1z1tb&Q@v3BUSJ#SR;F?@%oZjuB&r83zQyuezFS1yw7Oe`_cp1>Gw2R= zY~6O@eT*rTEmjuaZuh($c8sBGaCGnvQFprt-YM#Cp>(siUF9|N65e?&n$;Dz`9Qj=)F#1{~bY_f8=(-2bU#sG`^BE#k%g8Rt^7VqWAtmN>{wH$XUkfAwi=@ZBpLxDeEndRo+|QVO3=p5B7TMB7hG%*q zNt3OB(`VRosgia&bnl~#QLwkaj*?mhr%7)KF-mIKOhvzl9%$3kZ-xB1l>F0?^?W57gy(C~pxH45?lv|zzY(5) ziLOmaX2L=_q=hnF^qYcuv)(}#3ilt#$)bB0QY3iN|x}vCpta*L|3)yeSrLHXBXWw=bl1u zPh|qb%IH=bZxHz_OgI2*f;im(M&;Sl;4<)_kgZfMVBUuy7q~GzjERDeQ1Ymldn#Gl zaupNS+7qI8@G*hAfvXUwl}Jv6VTj-|DN;_M9!a87m`6p|_H0CA^~Lf|Wfsv9G*^$eg8=0bvCTrv>Oc3Zce zV4xG>Y^N2@RwZ93pGY!l5&kW7&}U8eVpw;fM7Om!qE&@@5Qq?X>H`UC9Yw?VYg3aO%e8 zDqZsTN`;WuZW6N=NCds%Bnh*Hn5Pq#&-0P! z0@=`F7($47gld~Y5!c6x(p8uBhr@RD8@5XhyPJj~RIMea3);GZPtz_)TS<|q3PpTI zV1Hv99KmPB`UaTWdeir;Aj{cDClgSmU`z04mBx6V6aA?5e{mM_Lv|Lc5cESxcFxF8ls+eZN5X5(G~M`2`Y*GaI7QYT ze2I;vx0EpjN^EZe?nNRrX~2T9Sc6CuaNt&1ojhz+gGOTw3c?#4u)vvgk;<5_)N9Z! z`5t2u6X`|9>1rTL7Hp|EF$Grb1P?li2Uxs|BxO@3iQmyMjt;P|(_$a>fVVL=gNJpW zsWhlwl)fam#Y{O46p+-`n>ajjpUy#-_w-P{eXJWsU<^75`Ak=nfwPvRxlWN!j42vu z4(gVkM$327)Fd$bQvxC+1?ahXvqgbxh&=G*uKEyheNRvCf{3w6tLdU98A5M}KEfdC zB->w4MwK3ON@I$3t89@6LW=mZn3az%4Gwg{Mb~pyM=;=7p~+8yXLke}AsZdRrfT}O z;^(lyo@cvgWkDBnJK731rTKNo)E_KWl1|HO)YKBeB74SBG^ScZlWQ>EymGl%NT6Gj;~V3(^S=P zzy5 zKICYu_XD~TBx`ls)ZmAL(vO7qVgV;T zzqVif_5JE^BS$2~1r=$LzMg0shsZ&x)j% zCcmkFCw}jndYb)B{Va4}*87EdIah^7PkD*bi*U8g>P9HsS$Y>|p!`ft7uq&vIc59S zxHlnR=hN)h`2;;_?@3%?Ikp5s9Te$_E>ZfuP?peTqh>d&+s%R(spY$|EaEYd2>x5p zZx&7|;7sO3VoB&93H3WwVeU$mnTHKHr6zg)7z8P-d96zy&B#u z6uyyumrr-CpG9#x>zH+D>lqF$dAt08mk&x_!&WhaI~?8w z{q8AIw?+$IsMQTyosYkf-W6Q0xq>C=WL-J?J;QyPe1@yLn91{5qj@hvc9F2|qUSMz z%f{6Ge&2!l*J|?88&JYLc(LX^mDgO)2)|CI>)G^G%zHgkvD-^Dg>hw_rf|2inlT)@ zk(&N|rU@hc1KxY)nbvEjX+38C#H`oM4EyVI-3#)#OE;)2do?&yW7W%FU@UYon1@ZQ z*XVo9#jNyFO(BsEUdlY5ar>ujrsV6TEVw~il08E{;bqwM;ANV;YkQto?b~*$nH!vI3(X?8ofx?-OW=}4IrwldimX)sB-;*Y$6Vmv|g?$Uc@(+u;&i#I4^)!ElcX8!PO_T42_Ota> znxdM@8ch*c4U(y4C>OAFM7gknR>ZztN~Py^MiObo?{?&Phh%RxJ*ur?hUReGqUNtS zxO?>8(G6np)mqIpTHUo;-E|}tTk5WtrS)vf>}xdcL+ioi2P^2^S$DODf8HB3ZgoZF z#Ovh7n5{FZ z3@CdyYs%v5w1n?En>=)`yHUH#dI7VRCe#+~u58?GYqs|3mTa88RpVn^_u=?&v|H~O z>z3a>x7a(qBRks~iw;{ftN*#^e+iT8U&7E0I$w8_297?j4m=KR8)8EPHV-x13h_xv6iF7fRJ0-e0w$ z#q`rHQtRn!k{W!iM!%-GUZY=AT*PqyGOrVF~p-$2R5!!(M9l=Xj=@`YDC~Wa*yY)F-YW72#t=X=mX5XTD z9@fZuFUii83Vy3*mxQ%PU>$z@8-+=7Zrgg3B)yQg$uB2*0fT7i);D~yB-?&B{LP^x ze=$Q7(XbmyfF%t{{QAClZha0Ra<*$0IrcAZ>^bP|q0jInT^5?#ogm6IcpG-WOQpS>9re?kbXFaNeUz}{TU=&kVD zzF}8K=`}1F5y{>O`mHcoD>lR-3#(l8JGAFj`cV$_trW+wig%W;;*ds)YvmK~#l4Q= zVsbb;vgyadD0g}9(jbr<*OG26U9}sa^yF2;0Wf z%JR8vJ)`HDDa1C|4TnW4`F3I+X%6LNfI9NY`0UWU_rc*?8O*|^GA_%aZ>#rf!M9T1 zRyRnz6Zrfj>N14XhIvZwZ#h@&WBq>)BQ?EdA1mL7?eDWaS>0fAW0xkK7OIGoHuUvj zBuFE@lVE#9UrB<)QZtqNAxQh^ze=QEp5Dvpr9zsC@^0Kwx>>jD&-6n;&-vW@4$S8d zva*^Vb{|8XyFQZj3#`W1`&6h?!O61EE_;k!-O*>hKIrR`y>6COx>dT)hb-(Z;9d4L z?qvGGbeDaFn}bwz**~hL-=S(&MRgs4RJSU^H4>>|RW!O>7C5Ymp1K1X@(yS?)S>Ho zdW^iDo>4tLNB8s;_w=07({ox+&&r-2G<163WxYq;iIc=>cY2r58DAkqB;C3!UTWVH zuVnQ0H3a;8K-AFI`H?rX4n#`WiwuElBQBPQ?C$-HXT5B6GxqL?NOsTZ8nxWH9MTz#00iIgMLYtlp`rsiQv;x#QGo8CBJ`6in5sr z1X-`Zw2kg2uh2UqO-3K6Or>{X$>nD>nLVp*ZtJFo;By-J4;$%wUhATREKoYVyEV0g zcGkHmw3T(xTlp5Y(|#()acT}Bw}x{@15Q@{GO#}?dDyPoND(lL#f!XaVW5t(J^|lq z=|t#OW_?QW-pgo~+a%f+seI_QtAxzvbeiWD)*xU6Qg2{b7fSyJFJLe9^zf^DdbaoU zykNbs^}7@wh_N@yyY@KxAy`U;UeHp%_qyAzrNjrdne<<{>o|_5DAZUbKTFb?^!b{I z?a(iENv_8YjHe#MY<%Bt1qx2W6(YwWTVK>NWhfzw@op+~*=JO*b#B6_x~Etd1r)3H zNbV&zfoEM{UhfxXdL+ApJ_^)pahLpBAFmgQ@GUw zIm!HsaQHa{FfWT(3-GHBf?ujlZt6P4tZ(I z`H5C$XZ`io;k5Y@Ykk3BX>+afTtZKr5a@tG6JXXLE$HZ;Ta+RjAJ@DhS@W)PskqNu zBVR07BZD{<@583QpSjLeb2V$L7MqKc>H((f%D*p}N|R^RHkz@J4DD&IKwBEX{vdM< zo-X%!o>i5A_)$c>ow>eM^EBX~=OLCItl&iBA?6-wykw{&jjH2x zT6m%6i_O>C7ieu)Y2mBjWdWjlgz0`wf1QqFBf@RNl;mhu*Mol~?~&T=y;AR!+L}&y z_hksI-Hyf<5VG~&nGqxS3$!##1AiEO*^t4tUNEqBgB#uu5gqe2Tga+)7&C6IdMjNg zFIum1ZBP*5LIN&?ULk+V7Ok&9XWB;1V)Q_jtolOW4$}}j)5XpUuxsn3zShAmFF=g) zf*hhCnjz|vS6_-)Jdz2aM{aQeLVX0e73(Em>yVp|JVhIS3Qq&WuaeaNDAS8IeW6CD z-_VkH^o7>n*!b}Cqp4;98+B&HpVuLgfEy^Xi;`rN?)S7p)Sv-Q?#k$euZn<8VH7T=ylYbXF&x_<4@=SS_JX@Y4zbVg^=gIS7 zR2QZNzFBgqN!?X<$|6}TOJu1mljX8P24$tJl4E4GtdX^HtQ;rD7v!XbESUQU$9 z%LX|~o*++@QkrtIJV`dnlVy`UMOrc>zag9Dsq!>AMV_9^z3gw)0RNx-gK?5&I6ejn z7wX;KLj8ubP>-pP?ZSn656d0BKSo;#8YxHjuzzzMkM=N-o2!%;6^3KGff3n_>&fF( zh+n0L_r3Hk)w^N@%+#5jimk}hpqvT#GyKwOack*brljwD#*@2aH{(wJ(Ng7F(>f zFVUnCTY?yqY`ABC$}8h7!*lJgg)*MNGSVK^OEqhc7F(*JllEhdllC(s_=rKK10R8I zont$$=y==cc*kfNt3e+Oxx7T%ySb{2g<{4+t_-mQ$fR7aS$nnE^@!?OTKvvToN8v7 z`7E2kyDNuqw^}wcgNhT_&!g`dDf}~roRHJIG9ajqdp(;)r`SU@ekLmW?foP-wAHoL z`C#iKr>XV#FlktI`@#Oh}w^P#?HAB$eEP1mN4f;FP2aLexnJSp63 zYv*LMXuNoYX#w51m(CU@45DQb8s;nOeEcKuj~^X>GYRXE5l%AZv{%)Cf|N0#Wr7d# zL4iJKurO4<>T9W!cZZa!-;cmvrgL61=Nhf<-jPNSwm z<2I9TIJ6O@`z17QX#7THPMZqVZ6wPZTXhqr!TgvslL}4nP#m{e85Hkl)^i5hD_YMR zDcI0^tQ1RH+x4{df_D-5>F%F{{YxPGMJAX2Kb-=Ww9ngo=*o7A3I96U_ znqN1TLo-vkDO~G|F&mk@L8qsv^>aF`{mgM$|1k}v{j9LakRq6Xs*O88G=@Q-)jQue zT$gq1p$f;8-=j~|^pd*jWsvQ3WEn8Dm%|&WBL_ zc$kiDr&uo=EvGPzmIGS}6%;+O9}ie1^2Ry>dPrRd^U^6a<+SW%HB_Z9rJ4)+4#sFY z)2@J8q#JO5yFqJTj{Dnk z+#KF0WMF>hA^F%rGQK`Gh)CYdV_@E*OmwHr5$C}42%8f`Mk0Ec%?W>EAm{Nmb8nu3 zog>2%q%VxUKwC&Me6lZg81cS?mv0;2!(-G}nGa1g5>ZGTeU?eq1Cl7dS+5vLYk{7c zPHt+6=!=Y)7CHoL%0SYcFd1QCeU_o=C?I{8X+R(vV<)1A2wCeJ3>6*Eve=;wUgau z2IDK0fBs=SSBFxQAg7V@G1duZn1Sii(a#JBF1KDasCmy4A}KFW^`cAI63N$4a47}RE(c?i=DlnU+Aw@!^tB$v6Lv30E`yUE zFn>t>)}Sy0qs>r_oS(<%B>bo#AtZGZN}q$&N%%4FgU(O|Y8*6cQcfaLQ$wmx7~`(5 z->201<#^V!pGR-gT0bHN=d%LvEiU-aIq(4@MeO^R24?xv_tVYbRk&s_V7l^ZLJ#qob zWnF`q*!@Mf7;VR3!E9gQat@La*Vj~Rmw)Eh>5aYJ4XXHewDWeW3+ zOc2rOJaL{#!7mLzm{s#c_<*i=MT}9S`VEK@6g3~B=0ntcjGFJ{@{bxtxdKRy?O$RW zWcOwVY=3W8gl-amXK`CCdi%80^6uJ5iCv$3N$eB0Og}alh{x;nVbzl52%eHw+NG)J643_|yaF>U7(fq|u> zb14Muz!JMi4d0+$Y6p5dR%jJK5Kpfc`Mk;Lh2fdJp9%GfnyBuYTTl39oy zbh5xofIgZy|MBp0nGkjnP}Vb(9PP?#j-t9z0cco2;?kN|0a$^$5xWAXAdL!`QdhyI zFG`kqXIeCaCgW+;K_Csr>NQ6ApuwWg(Mkxj2FV?xDnk8-H8{$UV&p0dEP^j*C;f_! zkj9ezRm)g9KdKLCgxHw`i73p1pK@SFKBKv#SSpyB7qj5sU5xX9-yqPsdpXPl-FG$5 zyZUAm_0?t^CYbVh)7^Ard*U;<#RQTy9=la>liO1IvmX|7V8 zRPe#8hyhoLlF=JQ<@t1Jpr1JNr0utj@J)gP4Yu9}EO^LRF9T~~tK1Ma7~&s*d5LA$ zB(hnw(4@SLUfxwB^4da|zi|itS<?O2It3W3gBgzI5yc60P|Rc_7= zV?c&dSD)!1w_v4{(Y*#pG|3e8Ps132hcGD2s0fj?(T1g2BSN7y@jDo829^^@hHn+V zJKGHC0H9@k^cF#s1@g$nCZ!#)=80?;W1(JJE;?xoK%TS%SU8NdCA>i1S?cYBw>kUZ zarLpe$P!-f?Src{E1|_!;W%B!QM*{_Y8RDWj`Vdm(DVS20S$kzz$-@Qk;mn7Zz`-7 zp1KYX73X0gD|k+*TFIvt>Be@QPK_Efw6z3fi7bY{<7A^eU0xtdn`F5hBkSb3@_czV zgv*@BZ_4k;bKt#F*2;QF`eXS6d7-R=HxuB0FMlO}E-!(UCqk~N@=_U-|0;hfPlNFH zA??rQzsujs%jGnH{Y=_2E-wREWX4pK#L)>ejE6~Y(+#veBH1UW^vKK9t$&%cWTgQ# z;_1rZ$Vo$2mBUH`k1pVzt_0R&0moeF&K@zqQ*vs}Rv0UIG%-##%Scm`j6k>s>hx{r zZ5)KpQQ;;?;(-6EA5m`PQ*QjVlrQ`e%2~5$_BX@qXfA3lZZ4S-fRY5A^TE*lHI#-O z7yKCsSyw?Wmfr~QAJ3)W(Fe}}K4qY94HS@wUab-@{0kBf@PPnMgPNOQ8G-Q+p#`K< zxsjuC^FQgF*YBJ>wpF%N`lvZrLx-&Dui>a+|=4Lj_ z@IDx7%~j5;TeTbnYokML3LseB0WF=vE>1050$5xA2e77=rF#_Ou&=<^(v^Z$Wrzc%Q%^jci~(6a!V=QfU@M07Pr z=!V#BJiRMJwtlPmF2~kyHCMKNtAU3uJsp{b+kh%ojr;>VTYEW6z#a$>ybqI*DwsdE znxonRkV@aU|042k;i$(U70InUi5n-H!g7>4>+r-v2JQfy>j^>94WX?l7vrGcKx!bL zp~i^O7!i#Te`6%j7%6Iu6gNgn8Y88Rk+Q}}d1IuaF%oQyR5nJc8Y5#GBh`(O8W_H{ z@EeQI;Oz`ISqNjxV!)4qp03PDAWB2{!d$3ONpVXW4n+wHU$_f3oV3PBD5MSGi{?Ug zC#@I>g|z;(jgckrfVXn&8F($lC%l&_y6qCXw5QX}h;O|(6U*%Kp61fNu1JL<132dj zH<_R}O6Io%SORjTgc<}uc$NX0vfk!0$UdgI*e>a_#{e|g?6=EQu*xnaoRtA9U9Xn8K*TQP_567}zzuh*x-_9AW z-_FVJw}1;hHNW2qp>DqgU1(!|zZF8=ejDdP8}j?D5c=Qgw}vn4w_riPo%*-!x5k2g z8&}Y8fr5TJ$LqHNx5xgOdaRaQ^pkciDk1DzT*Bxt`6OX-Ogxn?T84#wHL*yS!x|8p z*xHB7M^HUl)M64=kM9<|`P73IJUn1u-ouv{hc?(~h++H!ORG@{D%B%E=~DEPR3NPY zdu2f(ya4DV(MAH%R+|<%x^HVR5t4-4oR?1?M4*=xT18*Ulh9HK9AHUkq_?tJ2UA|6 zg(DN8=`u%!>RsF^$W#UOX~PN{qi`(cNwtQ#Xo59wAp7kVa(zJ|CACCJa2S?lUx(#} zd@N=!t9`SeLJpecUx#MJXv92{L1k}5h&_z0BO%KKVT~CNB1ru3fL{h2i6f6v4MCxV&PDB zf(OneWZ|ab1rnHmu%&xvMvA?+t_;XrzG`&$rL!-ne-CWfr_j60n!viDI5dn)xZH<= zB1m2oDM7_akzKM2wSv-jm+N7}8*KoJ7GH|W29ZtKnE zcA&4h!Y=CTX%5=OeLZG3>m`nHBgR%@Y!$_h!B~pfgfU|$e#7AQQ&jHCE3@yRX_6se$xYVVe1jITJ37e!Q1F{qZukmuCJXxM1i$JzS zA?$b%A1!$%$eCj#Y-RE!8Iotnvt%_0kCWtN`3(>!&jxX`MxFq|WV4(C!r6Hsi=wp{ z+J&Kg+J*9>8B=2mc%rRRPHm}Vu`6@Ig}LBWx!~2vW;PMY3`92k`P|=(%Ggq#_%Z{x z8Ktr7Rb~zev?i*kCXFVkHz}0=8xVk0;biwgbS0pug4&!WzXhnqfB@VH2u}bZxLQsz zXESptgGB{OI8lDv+``OV466G>Gs$3PLp4tanfTY{97Y7Vwsds`wsM8`dVdEZ_jhDi zUJN4jcV&zGk^BcaUCsbe`yb^$$$thR_c9Q-qab9*G?`P%%%-qJz2bsB@nFGw+&CET_e2kfoGjlI9 zpJ3)bX6|QZikWFzACmHp-lxINIr3p3k#z1Za{7?4(9QObE5crDz|LV@a5!Zmw7+eEZ<$^coR)!6^ zV1F*SF&Es#(Uej8%5+lR3?}7ecwwKstP3xVOUfywLA)H&TzFD)4Q?<)c<&s%KY`Xw zeZ2%qwBE#hiPl@-Ppb7A+UwVG5zviIj*)x=?dHmn>Q+Z2cEsaQJ@FW=w@Oti(zOEtoW#AXl^AXUN^ILbz!S6REl60r-W{%!_P-#>gC8F0t;5r_@ zlN((_3EVeON0d%P7eQdLf@c!AYakpsg1iW{$0mskHV#ra-$drp2yxZU{|6Zlq^81x z=0Sx9R@wFwko9yv&+%ek=WXq>&KJ0|ktafR)Bw?2QNg+1)1a<#G^i8nWAjmOvw`Os zBPJbV#5;LF*Yv50Q(-vEAIR^+6e)wrRVRy4lQ!Hg@ph5IKcm?t_LEj(oVxv0StM?O z`fuT`MdC&-blsSqyKodFh44L`(M5u5g*8`HpMfr?cZgX-bPdWDo(gZ{>Mj%rgEZch znKhISXat?jI_~Dm+7Ru!Hjy6Lz)yI=+h!i{lWamBg!2oms(>OyfF6JlM63}pYtR+} zA@%Tf&gW+efON4hBuw>Cu83i6*YVQLw3TAEZq0*%LKiIF#XSq4EnHau-R*V7I;Sg+ zuaDi0U9rVeX5Xw?X)Sg$cEvp)bvQ<+j+yLM?mDk*`e&i=7 zyWgY=N*|)Y+dwyo$^CeMrjpG^dpU)9KA=XQ8*b=^cppEq=NuZ5F=YE*L*|szY^C z6c6EsX@Cr0@Fqj7b4D`v3IV(hfV)=+jL+RCF!H->+Jqh1tTrW^y(F9cmuz;2@>+V3 z8XP(t>w{IfRp5aM#B3iPvsr{UQ_K#IA4oaLi@_O(C+=-`iSS*JqHU!}sfw!ulZS?5 zx?6Sj;Pr z^xBuR4$VnJw?f?`!uJUVq~Ud!OU1X=f^tF^DC4 zzrdR>9fJw2lkl=>?6gZRJ!Pe#KOpd1E!zZsm+V1--zD3Qh7Z0y)JRtsHWJl-`6w;2 z+-s2?e@Tn17||jRQH#`gA6-L;wNiv17Oe9jhvJFnUI-MkM~LFbh`#Gaq3G05mlB^dE{Dvpp5MjLpVP{xdhmB+^ypN-u|6UrV^dX}i9L+z`mxI>lpn|!Esr?YK z55LPRZXxq0q6hD7N8(_fU@CLp^{l`3UQQDRZMsH|)7@iRJ zqMlCZ)P$4F?cm3#6=M%^oK4nks<9_w+tAGLusy`1j|;*8!CyQsPNwv$3)3$zNWV9i zey=#$YwRaPUXUtK+Sh|->$J(H=#nc!_L+x z&54xIjnbv`oz60^Ii1YGO&V}1veedzfTl<}o`;tQ;8C2y#C9>JhNha2d>CD7K1=hd z7&k*PW>6jr{?THH2?zjG?*Wh^Cpd-EQNCVY<8#nqI;Xyvj_QR5Mn!h1ZKx!u(zu^9 zXbjK9I8gI^HXB^Y=`s4gFi&3!+Fz!e@~X}<<1>OXW`{V z&KrH9Ru(yL0@aLRU5$_}d=CbS(SpW7(&VWyfW+ zU8q8otRHXVu}gskxkt>QJ1Av zi&TVNg3aQ1AEax(_eIt&gT>$g*UAj>Hp81?oOOU~kKiqUt{>F=e!2+%J2)O6Q6FUl z+$u6sVi(VWsaUW2r)1(BoTYXE5~S(^=#V;R2sza$r6qKyacQ6g`<9Scy`l%JhZHr` zc`S{st98Io<~ye9YW1)@JrM9o23^HO*t8Hsqq@0>T#4#xIZ=CJzHt=l-q1@KAQ zQ;OC8p=5@q_!$6NgshqpqF`yw@m>jQn_*thQ z&2j5a5jr()^^4GHaciRpO^I8ZMCkOmwONGDh+B7w(3x@TZV@^wZfy~vv*Xr1B6LpN z+A2cdj9d4L(7AEzJ`p-EZrv|J=f|xF#Pk~L2()1w7z@eb);1xr2106aYdZ*CachT| zZdh+~b2fxm33CoSZWhz|bUpS6RQV3d^^iae4+9ve!QdkVew2{yBxJh?*?^En+}bUq zh+BJvnT14;iRl5L9@9Tg>Gx9lCn)`0LKelXebB^lYrl{saqEDPrE%*?A{Q$m)< zt%E{V#I2`=tc+U;A*un+bDQ>+ZWLw;NSID2mt@p(ATIez) z8{oDDqQ^{0x!Yp9lUk zfj>v^1EZ(jCaf=nbyQf#gq6i2w+pM=Z_V~wbNtp^KlFcT>`|^HmV=(evM*=BcmhZ) z6VRKK7c))&0SG>~X!01jVrM0D6p%BDVz+4Rw`%l;zb~Ap4`OcB+Hcb+IsOdii7~gK z{GBK?PD^_7{C-ECKe0ZxpL|Vu9Z;|c7O(cz8e(W_g05G{RHzAqD%3=USI1Us?LAs^ zZS&aXaR40|aJ1)`v`1_2)tbjQ*ELVT6vs8!H&4XC@y!j*lk$=}ff?gty-0tWSC?!0 zVj!!zwri+)Y*(gvTo){^EZLjtOXAr)2Gf0Az;8hS_@*vkx+t~_7%z&$WJO+Vu^U_B z<}7vMl5}29_W}S7c#w{#WleYxZ0FCJ#z9`qHC+P7NVQF>p2R1mNfsm?D(t?D*L??^?vwSg1K54f=9&E+;+}JN z8pYAW9JLt@O0SiSJ;@WP*i$@_jwLvL+C0S*t%DrVA0eGilXu-y8e)b}_n5&y&*Gm$ z_~$VGIYL>U9$7$aDq0LBsK0n%RPgWUQ0m-G!v z&FtoV4y`r%vp)6(#=Mp{@?I|-u5WPnL&680Oq1(l4G>X`xBB@m S`Cq@i;&R_q2>oB$djp)*BSd=u literal 29349 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 kiF8|T7j7aSrj^YhCCQ{e7D0AN4!#frxUMF0Q* diff --git a/e107_web/js/plupload/Moxie.xap b/e107_web/js/plupload/Moxie.xap index aabc9f7c88653d6bc81d92be2a889e6b35d47a16..fc7fbfe4b24cfbb901d5f05f760b0996493207a5 100644 GIT binary patch delta 58720 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 delta 58242 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%0DaHoxi>&m%4}oVq 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 bb*)5|4$6TH;Q#;t@{?QkEe0|300000$pzdB diff --git a/e107_web/js/plupload/i18n/en.js b/e107_web/js/plupload/i18n/en.js new file mode 100644 index 000000000..a0a20425a --- /dev/null +++ b/e107_web/js/plupload/i18n/en.js @@ -0,0 +1,2 @@ +// English (en) +plupload.addI18n({"Stop Upload":"Stop Upload","Upload URL might be wrong or doesn't exist.":"Upload URL might be wrong or doesn't exist.","tb":"tb","Size":"Size","Close":"Close","You must specify either browse_button or drop_element.":"You must specify either browse_button or drop_element.","Init error.":"Init error.","Add files to the upload queue and click the start button.":"Add files to the upload queue and click the start button.","List":"List","Filename":"Filename","%s specified, but cannot be found.":"%s specified, but cannot be found.","Image format either wrong or not supported.":"Image format either wrong or not supported.","Status":"Status","HTTP Error.":"HTTP Error.","Start Upload":"Start Upload","Error: File too large:":"Error: File too large:","kb":"kb","Duplicate file error.":"Duplicate file error.","File size error.":"File size error.","N/A":"N/A","gb":"gb","Error: Invalid file extension:":"Error: Invalid file extension:","Select files":"Select files","%s already present in the queue.":"%s already present in the queue.","Resoultion out of boundaries! %s runtime supports images only up to %wx%hpx.":"Resoultion out of boundaries! %s runtime supports images only up to %wx%hpx.","File: %s":"File: %s","b":"b","Uploaded %d/%d files":"Uploaded %d/%d files","Upload element accepts only %d file(s) at a time. Extra files were stripped.":"Upload element accepts only %d file(s) at a time. Extra files were stripped.","%d files queued":"%d files queued","File: %s, size: %d, max file size: %d":"File: %s, size: %d, max file size: %d","Thumbnails":"Thumbnails","Drag files here.":"Drag files here.","Runtime ran out of available memory.":"Runtime ran out of available memory.","File count error.":"File count error.","File extension error.":"File extension error.","mb":"mb","Add Files":"Add Files"}); \ No newline at end of file diff --git a/e107_web/js/plupload/jquery.plupload.queue/jquery.plupload.queue.js b/e107_web/js/plupload/jquery.plupload.queue/jquery.plupload.queue.js index d7f7b9636..6894ecde9 100644 --- a/e107_web/js/plupload/jquery.plupload.queue/jquery.plupload.queue.js +++ b/e107_web/js/plupload/jquery.plupload.queue/jquery.plupload.queue.js @@ -1 +1,428 @@ -;(function(e,t){function r(e){return plupload.translate(e)||e}function i(t,n){n.contents().each(function(t,n){n=e(n),n.is(".plupload")||n.remove()}),n.prepend('
'+'
'+'
'+'
'+'
'+r("Select files")+"
"+'
'+r("Add files to the upload queue and click the start button.")+"
"+"
"+"
"+'
'+'
'+'
'+r("Filename")+"
"+'
 
'+'
'+r("Status")+"
"+'
'+r("Size")+"
"+'
 
'+"
"+'
    '+'"+"
    "+"
    "+"
    "+''+"
    ")}var n={};e.fn.pluploadQueue=function(s){return s?(this.each(function(){function c(t){var n;t.status==plupload.DONE&&(n="plupload_done"),t.status==plupload.FAILED&&(n="plupload_failed"),t.status==plupload.QUEUED&&(n="plupload_delete"),t.status==plupload.UPLOADING&&(n="plupload_uploading");var r=e("#"+t.id).attr("class",n).find("a").css("display","block");t.hint&&r.attr("title",t.hint)}function h(){e("span.plupload_total_status",a).html(u.total.percent+"%"),e("div.plupload_progress_bar",a).css("width",u.total.percent+"%"),e("span.plupload_upload_status",a).html(t.sprintf(r("Uploaded %d/%d files"),u.total.uploaded,u.files.length))}function p(){var n=e("ul.plupload_filelist",a).html(""),i=0,s;e.each(u.files,function(t,r){s="",r.status==plupload.DONE&&(r.target_name&&(s+=''),s+='',s+='',i++,e("#"+f+"_count").val(i)),n.append('
  • '+'
    '+r.name+"
    "+'
    '+'
    '+r.percent+"%
    "+'
    '+plupload.formatSize(r.size)+"
    "+'
     
    '+s+"
  • "),c(r),e("#"+r.id+".plupload_delete a").click(function(t){e("#"+r.id).remove(),u.removeFile(r),t.preventDefault()})}),e("span.plupload_total_file_size",a).html(plupload.formatSize(u.total.size)),u.total.queued===0?e("span.plupload_add_text",a).html(r("Add Files")):e("span.plupload_add_text",a).html(t.sprintf(r("%d files queued"),u.total.queued)),e("a.plupload_start",a).toggleClass("plupload_disabled",u.files.length==u.total.uploaded+u.total.failed),n[0].scrollTop=n[0].scrollHeight,h(),!u.files.length&&u.features.dragdrop&&u.settings.dragdrop&&e("#"+f+"_filelist").append('
  • '+r("Drag files here.")+"
  • ")}function d(){delete n[f],u.destroy(),a.html(l),u=a=l=null}var u,a,f,l;a=e(this),f=a.attr("id"),f||(f=plupload.guid(),a.attr("id",f)),l=a.html(),i(f,a),s=e.extend({dragdrop:!0,browse_button:f+"_browse",container:f},s),s.dragdrop&&(s.drop_element=f+"_filelist"),u=new plupload.Uploader(s),n[f]=u,u.bind("UploadFile",function(t,n){e("#"+n.id).addClass("plupload_current_file")}),u.bind("Init",function(t,n){!s.unique_names&&s.rename&&a.on("click","#"+f+"_filelist div.plupload_file_name span",function(n){var r=e(n.target),i,s,o,u="";i=t.getFile(r.parents("li")[0].id),o=i.name,s=/^(.+)(\.[^.]+)$/.exec(o),s&&(o=s[1],u=s[2]),r.hide().after(''),r.next().val(o).focus().blur(function(){r.show().next().remove()}).keydown(function(t){var n=e(this);t.keyCode==13&&(t.preventDefault(),i.name=n.val()+u,r.html(i.name),n.blur())})}),e("#"+f+"_container").attr("title","Using runtime: "+n.runtime),e("a.plupload_start",a).click(function(t){e(this).hasClass("plupload_disabled")||u.start(),t.preventDefault()}),e("a.plupload_stop",a).click(function(e){e.preventDefault(),u.stop()}),e("a.plupload_start",a).addClass("plupload_disabled")}),u.bind("Error",function(t,n){var i=n.file,s;i&&(s=n.message,n.details&&(s+=" ("+n.details+")"),n.code==plupload.FILE_SIZE_ERROR&&alert(r("Error: File too large:")+" "+i.name),n.code==plupload.FILE_EXTENSION_ERROR&&alert(r("Error: Invalid file extension:")+" "+i.name),i.hint=s,e("#"+i.id).attr("class","plupload_failed").find("a").css("display","block").attr("title",s)),n.code===plupload.INIT_ERROR&&setTimeout(function(){d()},1)}),u.bind("PostInit",function(t){t.settings.dragdrop&&t.features.dragdrop&&e("#"+f+"_filelist").append('
  • '+r("Drag files here.")+"
  • ")}),u.init(),u.bind("StateChanged",function(){u.state===plupload.STARTED?(e("li.plupload_delete a,div.plupload_buttons",a).hide(),u.disableBrowse(!0),e("span.plupload_upload_status,div.plupload_progress,a.plupload_stop",a).css("display","block"),e("span.plupload_upload_status",a).html("Uploaded "+u.total.uploaded+"/"+u.files.length+" files"),s.multiple_queues&&e("span.plupload_total_status,span.plupload_total_file_size",a).show()):(p(),e("a.plupload_stop,div.plupload_progress",a).hide(),e("a.plupload_delete",a).css("display","block"),s.multiple_queues&&u.total.uploaded+u.total.failed==u.files.length&&(e(".plupload_buttons,.plupload_upload_status",a).css("display","inline"),u.disableBrowse(!1),e(".plupload_start",a).addClass("plupload_disabled"),e("span.plupload_total_status,span.plupload_total_file_size",a).hide()))}),u.bind("FilesAdded",p),u.bind("FilesRemoved",function(){var t=e("#"+f+"_filelist").scrollTop();p(),e("#"+f+"_filelist").scrollTop(t)}),u.bind("FileUploaded",function(e,t){c(t)}),u.bind("UploadProgress",function(t,n){e("#"+n.id+" div.plupload_file_status",a).html(n.percent+"%"),c(n),h()}),s.setup&&s.setup(u)}),this):n[e(this[0]).attr("id")]}})(jQuery,mOxie); \ No newline at end of file +/** + * jquery.plupload.queue.js + * + * Copyright 2009, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/* global jQuery:true, alert:true */ + +/** +jQuery based implementation of the Plupload API - multi-runtime file uploading API. + +To use the widget you must include _jQuery_. It is not meant to be extended in any way and is provided to be +used as it is. + +@example + +
    +

    Your browser doesn't have Flash, Silverlight or HTML5 support.

    +
    + + + +@example + // Retrieving a reference to plupload.Uploader object + var uploader = $('#uploader').pluploadQueue(); + + uploader.bind('FilesAdded', function() { + + // Autostart + setTimeout(uploader.start, 1); // "detach" from the main thread + }); + +@class pluploadQueue +@constructor +@param {Object} settings For detailed information about each option check documentation. + @param {String} settings.url URL of the server-side upload handler. + @param {Number|String} [settings.chunk_size=0] Chunk size in bytes to slice the file into. Shorcuts with b, kb, mb, gb, tb suffixes also supported. `e.g. 204800 or "204800b" or "200kb"`. By default - disabled. + @param {String} [settings.file_data_name="file"] Name for the file field in Multipart formated message. + @param {Array} [settings.filters=[]] Set of file type filters, each one defined by hash of title and extensions. `e.g. {title : "Image files", extensions : "jpg,jpeg,gif,png"}`. Dispatches `plupload.FILE_EXTENSION_ERROR` + @param {String} [settings.flash_swf_url] URL of the Flash swf. + @param {Object} [settings.headers] Custom headers to send with the upload. Hash of name/value pairs. + @param {Number|String} [settings.max_file_size] Maximum file size that the user can pick, in bytes. Optionally supports b, kb, mb, gb, tb suffixes. `e.g. "10mb" or "1gb"`. By default - not set. Dispatches `plupload.FILE_SIZE_ERROR`. + @param {Number} [settings.max_retries=0] How many times to retry the chunk or file, before triggering Error event. + @param {Boolean} [settings.multipart=true] Whether to send file and additional parameters as Multipart formated message. + @param {Object} [settings.multipart_params] Hash of key/value pairs to send with every file upload. + @param {Boolean} [settings.multi_selection=true] Enable ability to select multiple files at once in file dialog. + @param {Boolean} [settings.prevent_duplicates=false] Do not let duplicates into the queue. Dispatches `plupload.FILE_DUPLICATE_ERROR`. + @param {String|Object} [settings.required_features] Either comma-separated list or hash of required features that chosen runtime should absolutely possess. + @param {Object} [settings.resize] Enable resizng of images on client-side. Applies to `image/jpeg` and `image/png` only. `e.g. {width : 200, height : 200, quality : 90, crop: true}` + @param {Number} [settings.resize.width] If image is bigger, it will be resized. + @param {Number} [settings.resize.height] If image is bigger, it will be resized. + @param {Number} [settings.resize.quality=90] Compression quality for jpegs (1-100). + @param {Boolean} [settings.resize.crop=false] Whether to crop images to exact dimensions. By default they will be resized proportionally. + @param {String} [settings.runtimes="html5,flash,silverlight,html4"] Comma separated list of runtimes, that Plupload will try in turn, moving to the next if previous fails. + @param {String} [settings.silverlight_xap_url] URL of the Silverlight xap. + @param {Boolean} [settings.unique_names=false] If true will generate unique filenames for uploaded files. + + @param {Boolean} [settings.dragdrop=true] Enable ability to add file to the queue by drag'n'dropping them from the desktop. + @param {Boolean} [settings.rename=false] Enable ability to rename files in the queue. + @param {Boolean} [settings.multiple_queues=true] Re-activate the widget after each upload procedure. +*/ +;(function($, o) { + var uploaders = {}; + + function _(str) { + return plupload.translate(str) || str; + } + + function renderUI(id, target) { + // Remove all existing non plupload items + target.contents().each(function(i, node) { + node = $(node); + + if (!node.is('.plupload')) { + node.remove(); + } + }); + + target.prepend( + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + _('Select files') + '
    ' + + '
    ' + _('Add files to the upload queue and click the start button.') + '
    ' + + '
    ' + + '
    ' + + + '
    ' + + '
    ' + + '
    ' + _('Filename') + '
    ' + + '
     
    ' + + '
    ' + _('Status') + '
    ' + + '
    ' + _('Size') + '
    ' + + '
     
    ' + + '
    ' + + + '
      ' + + + '' + + '
      ' + + '
      ' + + '
      ' + + '' + + '
      ' + ); + } + + $.fn.pluploadQueue = function(settings) { + if (settings) { + this.each(function() { + var uploader, target, id, contents_bak; + + target = $(this); + id = target.attr('id'); + + if (!id) { + id = plupload.guid(); + target.attr('id', id); + } + + contents_bak = target.html(); + renderUI(id, target); + + settings = $.extend({ + dragdrop : true, + browse_button : id + '_browse', + container : id + }, settings); + + // Enable drag/drop (see PostInit handler as well) + if (settings.dragdrop) { + settings.drop_element = id + '_filelist'; + } + + uploader = new plupload.Uploader(settings); + + uploaders[id] = uploader; + + function handleStatus(file) { + var actionClass; + + if (file.status == plupload.DONE) { + actionClass = 'plupload_done'; + } + + if (file.status == plupload.FAILED) { + actionClass = 'plupload_failed'; + } + + if (file.status == plupload.QUEUED) { + actionClass = 'plupload_delete'; + } + + if (file.status == plupload.UPLOADING) { + actionClass = 'plupload_uploading'; + } + + var icon = $('#' + file.id).attr('class', actionClass).find('a').css('display', 'block'); + if (file.hint) { + icon.attr('title', file.hint); + } + } + + function updateTotalProgress() { + $('span.plupload_total_status', target).html(uploader.total.percent + '%'); + $('div.plupload_progress_bar', target).css('width', uploader.total.percent + '%'); + $('span.plupload_upload_status', target).html( + o.sprintf(_('Uploaded %d/%d files'), uploader.total.uploaded, uploader.files.length) + ); + } + + function updateList() { + var fileList = $('ul.plupload_filelist', target).html(''), inputCount = 0, inputHTML; + + $.each(uploader.files, function(i, file) { + inputHTML = ''; + + if (file.status == plupload.DONE) { + if (file.target_name) { + inputHTML += ''; + } + + inputHTML += ''; + inputHTML += ''; + + inputCount++; + + $('#' + id + '_count').val(inputCount); + } + + fileList.append( + '
    • ' + + '
      ' + file.name + '
      ' + + '
      ' + + '
      ' + file.percent + '%
      ' + + '
      ' + plupload.formatSize(file.size) + '
      ' + + '
       
      ' + + inputHTML + + '
    • ' + ); + + handleStatus(file); + + $('#' + file.id + '.plupload_delete a').click(function(e) { + $('#' + file.id).remove(); + uploader.removeFile(file); + + e.preventDefault(); + }); + }); + + $('span.plupload_total_file_size', target).html(plupload.formatSize(uploader.total.size)); + + if (uploader.total.queued === 0) { + $('span.plupload_add_text', target).html(_('Add Files')); + } else { + $('span.plupload_add_text', target).html(o.sprintf(_('%d files queued'), uploader.total.queued)); + } + + $('a.plupload_start', target).toggleClass('plupload_disabled', uploader.files.length == (uploader.total.uploaded + uploader.total.failed)); + + // Scroll to end of file list + fileList[0].scrollTop = fileList[0].scrollHeight; + + updateTotalProgress(); + + // Re-add drag message if there is no files + if (!uploader.files.length && uploader.features.dragdrop && uploader.settings.dragdrop) { + $('#' + id + '_filelist').append('
    • ' + _("Drag files here.") + '
    • '); + } + } + + function destroy() { + delete uploaders[id]; + uploader.destroy(); + target.html(contents_bak); + uploader = target = contents_bak = null; + } + + uploader.bind("UploadFile", function(up, file) { + $('#' + file.id).addClass('plupload_current_file'); + }); + + uploader.bind('Init', function(up, res) { + // Enable rename support + if (!settings.unique_names && settings.rename) { + target.on('click', '#' + id + '_filelist div.plupload_file_name span', function(e) { + var targetSpan = $(e.target), file, parts, name, ext = ""; + + // Get file name and split out name and extension + file = up.getFile(targetSpan.parents('li')[0].id); + name = file.name; + parts = /^(.+)(\.[^.]+)$/.exec(name); + if (parts) { + name = parts[1]; + ext = parts[2]; + } + + // Display input element + targetSpan.hide().after(''); + targetSpan.next().val(name).focus().blur(function() { + targetSpan.show().next().remove(); + }).keydown(function(e) { + var targetInput = $(this); + + if (e.keyCode == 13) { + e.preventDefault(); + + // Rename file and glue extension back on + file.name = targetInput.val() + ext; + targetSpan.html(file.name); + targetInput.blur(); + } + }); + }); + } + + $('#' + id + '_container').attr('title', 'Using runtime: ' + res.runtime); + + $('a.plupload_start', target).click(function(e) { + if (!$(this).hasClass('plupload_disabled')) { + uploader.start(); + } + + e.preventDefault(); + }); + + $('a.plupload_stop', target).click(function(e) { + e.preventDefault(); + uploader.stop(); + }); + + $('a.plupload_start', target).addClass('plupload_disabled'); + }); + + uploader.bind("Error", function(up, err) { + var file = err.file, message; + + if (file) { + message = err.message; + + if (err.details) { + message += " (" + err.details + ")"; + } + + if (err.code == plupload.FILE_SIZE_ERROR) { + alert(_("Error: File too large:") + " " + file.name); + } + + if (err.code == plupload.FILE_EXTENSION_ERROR) { + alert(_("Error: Invalid file extension:") + " " + file.name); + } + + file.hint = message; + $('#' + file.id).attr('class', 'plupload_failed').find('a').css('display', 'block').attr('title', message); + } + + if (err.code === plupload.INIT_ERROR) { + setTimeout(function() { + destroy(); + }, 1); + } + }); + + uploader.bind("PostInit", function(up) { + // features are populated only after input components are fully instantiated + if (up.settings.dragdrop && up.features.dragdrop) { + $('#' + id + '_filelist').append('
    • ' + _("Drag files here.") + '
    • '); + } + }); + + uploader.init(); + + uploader.bind('StateChanged', function() { + if (uploader.state === plupload.STARTED) { + $('li.plupload_delete a,div.plupload_buttons', target).hide(); + uploader.disableBrowse(true); + + $('span.plupload_upload_status,div.plupload_progress,a.plupload_stop', target).css('display', 'block'); + $('span.plupload_upload_status', target).html('Uploaded ' + uploader.total.uploaded + '/' + uploader.files.length + ' files'); + + if (settings.multiple_queues) { + $('span.plupload_total_status,span.plupload_total_file_size', target).show(); + } + } else { + updateList(); + $('a.plupload_stop,div.plupload_progress', target).hide(); + $('a.plupload_delete', target).css('display', 'block'); + + if (settings.multiple_queues && uploader.total.uploaded + uploader.total.failed == uploader.files.length) { + $(".plupload_buttons,.plupload_upload_status", target).css("display", "inline"); + uploader.disableBrowse(false); + + $(".plupload_start", target).addClass("plupload_disabled"); + $('span.plupload_total_status,span.plupload_total_file_size', target).hide(); + } + } + }); + + uploader.bind('FilesAdded', updateList); + + uploader.bind('FilesRemoved', function() { + // since the whole file list is redrawn for every change in the queue + // we need to scroll back to the file removal point to avoid annoying + // scrolling to the bottom bug (see #926) + var scrollTop = $('#' + id + '_filelist').scrollTop(); + updateList(); + $('#' + id + '_filelist').scrollTop(scrollTop); + }); + + uploader.bind('FileUploaded', function(up, file) { + handleStatus(file); + }); + + uploader.bind("UploadProgress", function(up, file) { + // Set file specific progress + $('#' + file.id + ' div.plupload_file_status', target).html(file.percent + '%'); + + handleStatus(file); + updateTotalProgress(); + }); + + // Call setup function + if (settings.setup) { + settings.setup(uploader); + } + }); + + return this; + } else { + // Get uploader instance for specified element + return uploaders[$(this[0]).attr('id')]; + } + }; +})(jQuery, mOxie); diff --git a/e107_web/js/plupload/jquery.plupload.queue/jquery.plupload.queue.min.js b/e107_web/js/plupload/jquery.plupload.queue/jquery.plupload.queue.min.js new file mode 100644 index 000000000..d7f7b9636 --- /dev/null +++ b/e107_web/js/plupload/jquery.plupload.queue/jquery.plupload.queue.min.js @@ -0,0 +1 @@ +;(function(e,t){function r(e){return plupload.translate(e)||e}function i(t,n){n.contents().each(function(t,n){n=e(n),n.is(".plupload")||n.remove()}),n.prepend('
      '+'
      '+'
      '+'
      '+'
      '+r("Select files")+"
      "+'
      '+r("Add files to the upload queue and click the start button.")+"
      "+"
      "+"
      "+'
      '+'
      '+'
      '+r("Filename")+"
      "+'
       
      '+'
      '+r("Status")+"
      "+'
      '+r("Size")+"
      "+'
       
      '+"
      "+'
        '+'"+"
        "+"
        "+"
        "+''+"
        ")}var n={};e.fn.pluploadQueue=function(s){return s?(this.each(function(){function c(t){var n;t.status==plupload.DONE&&(n="plupload_done"),t.status==plupload.FAILED&&(n="plupload_failed"),t.status==plupload.QUEUED&&(n="plupload_delete"),t.status==plupload.UPLOADING&&(n="plupload_uploading");var r=e("#"+t.id).attr("class",n).find("a").css("display","block");t.hint&&r.attr("title",t.hint)}function h(){e("span.plupload_total_status",a).html(u.total.percent+"%"),e("div.plupload_progress_bar",a).css("width",u.total.percent+"%"),e("span.plupload_upload_status",a).html(t.sprintf(r("Uploaded %d/%d files"),u.total.uploaded,u.files.length))}function p(){var n=e("ul.plupload_filelist",a).html(""),i=0,s;e.each(u.files,function(t,r){s="",r.status==plupload.DONE&&(r.target_name&&(s+=''),s+='',s+='',i++,e("#"+f+"_count").val(i)),n.append('
      • '+'
        '+r.name+"
        "+'
        '+'
        '+r.percent+"%
        "+'
        '+plupload.formatSize(r.size)+"
        "+'
         
        '+s+"
      • "),c(r),e("#"+r.id+".plupload_delete a").click(function(t){e("#"+r.id).remove(),u.removeFile(r),t.preventDefault()})}),e("span.plupload_total_file_size",a).html(plupload.formatSize(u.total.size)),u.total.queued===0?e("span.plupload_add_text",a).html(r("Add Files")):e("span.plupload_add_text",a).html(t.sprintf(r("%d files queued"),u.total.queued)),e("a.plupload_start",a).toggleClass("plupload_disabled",u.files.length==u.total.uploaded+u.total.failed),n[0].scrollTop=n[0].scrollHeight,h(),!u.files.length&&u.features.dragdrop&&u.settings.dragdrop&&e("#"+f+"_filelist").append('
      • '+r("Drag files here.")+"
      • ")}function d(){delete n[f],u.destroy(),a.html(l),u=a=l=null}var u,a,f,l;a=e(this),f=a.attr("id"),f||(f=plupload.guid(),a.attr("id",f)),l=a.html(),i(f,a),s=e.extend({dragdrop:!0,browse_button:f+"_browse",container:f},s),s.dragdrop&&(s.drop_element=f+"_filelist"),u=new plupload.Uploader(s),n[f]=u,u.bind("UploadFile",function(t,n){e("#"+n.id).addClass("plupload_current_file")}),u.bind("Init",function(t,n){!s.unique_names&&s.rename&&a.on("click","#"+f+"_filelist div.plupload_file_name span",function(n){var r=e(n.target),i,s,o,u="";i=t.getFile(r.parents("li")[0].id),o=i.name,s=/^(.+)(\.[^.]+)$/.exec(o),s&&(o=s[1],u=s[2]),r.hide().after(''),r.next().val(o).focus().blur(function(){r.show().next().remove()}).keydown(function(t){var n=e(this);t.keyCode==13&&(t.preventDefault(),i.name=n.val()+u,r.html(i.name),n.blur())})}),e("#"+f+"_container").attr("title","Using runtime: "+n.runtime),e("a.plupload_start",a).click(function(t){e(this).hasClass("plupload_disabled")||u.start(),t.preventDefault()}),e("a.plupload_stop",a).click(function(e){e.preventDefault(),u.stop()}),e("a.plupload_start",a).addClass("plupload_disabled")}),u.bind("Error",function(t,n){var i=n.file,s;i&&(s=n.message,n.details&&(s+=" ("+n.details+")"),n.code==plupload.FILE_SIZE_ERROR&&alert(r("Error: File too large:")+" "+i.name),n.code==plupload.FILE_EXTENSION_ERROR&&alert(r("Error: Invalid file extension:")+" "+i.name),i.hint=s,e("#"+i.id).attr("class","plupload_failed").find("a").css("display","block").attr("title",s)),n.code===plupload.INIT_ERROR&&setTimeout(function(){d()},1)}),u.bind("PostInit",function(t){t.settings.dragdrop&&t.features.dragdrop&&e("#"+f+"_filelist").append('
      • '+r("Drag files here.")+"
      • ")}),u.init(),u.bind("StateChanged",function(){u.state===plupload.STARTED?(e("li.plupload_delete a,div.plupload_buttons",a).hide(),u.disableBrowse(!0),e("span.plupload_upload_status,div.plupload_progress,a.plupload_stop",a).css("display","block"),e("span.plupload_upload_status",a).html("Uploaded "+u.total.uploaded+"/"+u.files.length+" files"),s.multiple_queues&&e("span.plupload_total_status,span.plupload_total_file_size",a).show()):(p(),e("a.plupload_stop,div.plupload_progress",a).hide(),e("a.plupload_delete",a).css("display","block"),s.multiple_queues&&u.total.uploaded+u.total.failed==u.files.length&&(e(".plupload_buttons,.plupload_upload_status",a).css("display","inline"),u.disableBrowse(!1),e(".plupload_start",a).addClass("plupload_disabled"),e("span.plupload_total_status,span.plupload_total_file_size",a).hide()))}),u.bind("FilesAdded",p),u.bind("FilesRemoved",function(){var t=e("#"+f+"_filelist").scrollTop();p(),e("#"+f+"_filelist").scrollTop(t)}),u.bind("FileUploaded",function(e,t){c(t)}),u.bind("UploadProgress",function(t,n){e("#"+n.id+" div.plupload_file_status",a).html(n.percent+"%"),c(n),h()}),s.setup&&s.setup(u)}),this):n[e(this[0]).attr("id")]}})(jQuery,mOxie); \ No newline at end of file diff --git a/e107_web/js/plupload/jquery.ui.plupload/css/jquery.ui.plupload.css b/e107_web/js/plupload/jquery.ui.plupload/css/jquery.ui.plupload.css index a5a82e2e1..e46a3f172 100644 --- a/e107_web/js/plupload/jquery.ui.plupload/css/jquery.ui.plupload.css +++ b/e107_web/js/plupload/jquery.ui.plupload/css/jquery.ui.plupload.css @@ -118,10 +118,15 @@ background-color: #eee; } -.plupload_file_loading .plupload_file_thumb { +.plupload_thumb_loading { background: #eee url(../img/loading.gif) center no-repeat; } +.plupload_thumb_loading .plupload_file_dummy, +.plupload_thumb_embedded .plupload_file_dummy { + display: none; +} + .plupload_file_name { overflow: hidden; text-overflow: ellipsis; @@ -344,7 +349,7 @@ font-weight: bold; } -plupload_message i { +.plupload_message i { font-style: italic; } diff --git a/e107_web/js/plupload/jquery.ui.plupload/jquery.ui.plupload.js b/e107_web/js/plupload/jquery.ui.plupload/jquery.ui.plupload.js index c276ad3fc..20a24d9b1 100644 --- a/e107_web/js/plupload/jquery.ui.plupload/jquery.ui.plupload.js +++ b/e107_web/js/plupload/jquery.ui.plupload/jquery.ui.plupload.js @@ -1 +1,1343 @@ -;(function(e,t,n,r,i){function o(e){return n.translate(e)||e}function u(e){e.id=e.attr("id"),e.html('
        '+o("Select files")+"
        "+'
        '+o("Add files to the upload queue and click the start button.")+"
        "+'
        '+'"+'"+"
        "+"
        "+"
        "+''+""+'"+'"+'"+''+""+"
        '+o("Filename")+"'+o("Status")+"'+o("Size")+" 
        "+'
        '+'
        '+o("Drag files here.")+"
        "+'
        '+'
         
        '+"
        "+''+""+'"+''+''+''+""+""+"
        "+''+"
        ")}var s={};i.widget("ui.plupload",{widgetEventPrefix:"",contents_bak:"",options:{browse_button_hover:"ui-state-hover",browse_button_active:"ui-state-active",filters:{},buttons:{browse:!0,start:!0,stop:!0},views:{list:!0,thumbs:!1,active:"list",remember:!0},thumb_width:100,thumb_height:60,multiple_queues:!0,dragdrop:!0,autostart:!1,sortable:!1,rename:!1},FILE_COUNT_ERROR:-9001,_create:function(){var e=this.element.attr("id");e||(e=n.guid(),this.element.attr("id",e)),this.id=e,this.contents_bak=this.element.html(),u(this.element),this.container=i(".plupload_container",this.element).attr("id",e+"_container"),this.content=i(".plupload_content",this.element),i.fn.resizable&&this.container.resizable({handles:"s",minHeight:300}),this.filelist=i(".plupload_filelist_content",this.container).attr({id:e+"_filelist",unselectable:"on"}),this.browse_button=i(".plupload_add",this.container).attr("id",e+"_browse"),this.start_button=i(".plupload_start",this.container).attr("id",e+"_start"),this.stop_button=i(".plupload_stop",this.container).attr("id",e+"_stop"),this.thumbs_switcher=i("#"+e+"_view_thumbs"),this.list_switcher=i("#"+e+"_view_list"),i.ui.button&&(this.browse_button.button({icons:{primary:"ui-icon-circle-plus"},disabled:!0}),this.start_button.button({icons:{primary:"ui-icon-circle-arrow-e"},disabled:!0}),this.stop_button.button({icons:{primary:"ui-icon-circle-close"}}),this.list_switcher.button({text:!1,icons:{secondary:"ui-icon-grip-dotted-horizontal"}}),this.thumbs_switcher.button({text:!1,icons:{secondary:"ui-icon-image"}})),this.progressbar=i(".plupload_progress_container",this.container),i.ui.progressbar&&this.progressbar.progressbar(),this.counter=i(".plupload_count",this.element).attr({id:e+"_count",name:e+"_count"}),this._initUploader()},_initUploader:function(){var e=this,t=this.id,u,a={container:t+"_buttons",browse_button:t+"_browse"};i(".plupload_buttons",this.element).attr("id",t+"_buttons"),e.options.dragdrop&&(this.filelist.parent().attr("id",this.id+"_dropbox"),a.drop_element=this.id+"_dropbox"),this.filelist.on("click",function(t){i(t.target).hasClass("plupload_action_icon")&&(e.removeFile(i(t.target).closest(".plupload_file").attr("id")),t.preventDefault())}),u=this.uploader=s[t]=new n.Uploader(i.extend(this.options,a)),e.options.views.thumbs&&(u.settings.required_features.display_media=!0),e.options.max_file_count&&n.extend(u.getOption("filters"),{max_file_count:e.options.max_file_count}),n.addFileFilter("max_file_count",function(t,n,r){t<=this.files.length-(this.total.uploaded+this.total.failed)?(e.browse_button.button("disable"),this.disableBrowse(),this.trigger("Error",{code:e.FILE_COUNT_ERROR,message:o("File count error."),file:n}),r(!1)):r(!0)}),u.bind("Error",function(t,i){var s,u="";s=""+i.message+"";switch(i.code){case n.FILE_EXTENSION_ERROR:u=r.sprintf(o("File: %s"),i.file.name);break;case n.FILE_SIZE_ERROR:u=r.sprintf(o("File: %s, size: %d, max file size: %d"),i.file.name,n.formatSize(i.file.size),n.formatSize(n.parseSize(t.getOption("filters").max_file_size)));break;case n.FILE_DUPLICATE_ERROR:u=r.sprintf(o("%s already present in the queue."),i.file.name);break;case e.FILE_COUNT_ERROR:u=r.sprintf(o("Upload element accepts only %d file(s) at a time. Extra files were stripped."),t.getOption("filters").max_file_count||0);break;case n.IMAGE_FORMAT_ERROR:u=o("Image format either wrong or not supported.");break;case n.IMAGE_MEMORY_ERROR:u=o("Runtime ran out of available memory.");break;case n.HTTP_ERROR:u=o("Upload URL might be wrong or doesn't exist.")}s+="
        "+u+"",e._trigger("error",null,{up:t,error:i}),i.code===n.INIT_ERROR?setTimeout(function(){e.destroy()},1):e.notify("error",s)}),u.bind("PostInit",function(t){e.options.buttons.browse?e.browse_button.button("enable"):(e.browse_button.button("disable").hide(),t.disableBrowse(!0)),e.options.buttons.start||e.start_button.button("disable").hide(),e.options.buttons.stop||e.stop_button.button("disable").hide(),!e.options.unique_names&&e.options.rename&&e._enableRenaming(),e.options.dragdrop&&t.features.dragdrop&&e.filelist.parent().addClass("plupload_dropbox"),e._enableViewSwitcher(),e.start_button.click(function(t){i(this).button("option","disabled")||e.start(),t.preventDefault()}),e.stop_button.click(function(t){e.stop(),t.preventDefault()}),e._trigger("ready",null,{up:t})}),u.init(),u.bind("FileFiltered",function(t,n){e._addFiles(n)}),u.bind("FilesAdded",function(t,n){e._trigger("selected",null,{up:t,files:n}),e.options.sortable&&i.ui.sortable&&e._enableSortingList(),e._trigger("updatelist",null,{filelist:e.filelist}),e.options.autostart&&setTimeout(function(){e.start()},10)}),u.bind("FilesRemoved",function(t,n){i.ui.sortable&&e.options.sortable&&i("tbody",e.filelist).sortable("destroy"),i.each(n,function(e,t){i("#"+t.id).toggle("highlight",function(){i(this).remove()})}),t.files.length&&e.options.sortable&&i.ui.sortable&&e._enableSortingList(),e._trigger("updatelist",null,{filelist:e.filelist}),e._trigger("removed",null,{up:t,files:n})}),u.bind("QueueChanged StateChanged",function(){e._handleState()}),u.bind("UploadFile",function(t,n){e._handleFileStatus(n)}),u.bind("FileUploaded",function(t,n){e._handleFileStatus(n),e._trigger("uploaded",null,{up:t,file:n})}),u.bind("UploadProgress",function(t,n){e._handleFileStatus(n),e._updateTotalProgress(),e._trigger("progress",null,{up:t,file:n})}),u.bind("UploadComplete",function(t,n){e._addFormFields(),e._trigger("complete",null,{up:t,files:n})})},_setOption:function(e,t){var n=this;e=="buttons"&&typeof t=="object"&&(t=i.extend(n.options.buttons,t),t.browse?(n.browse_button.button("enable").show(),n.uploader.disableBrowse(!1)):(n.browse_button.button("disable").hide(),n.uploader.disableBrowse(!0)),t.start?n.start_button.button("enable").show():n.start_button.button("disable").hide(),t.stop?n.start_button.button("enable").show():n.stop_button.button("disable").hide()),n.uploader.settings[e]=t},start:function(){this.uploader.start(),this._trigger("start",null,{up:this.uploader})},stop:function(){this.uploader.stop(),this._trigger("stop",null,{up:this.uploader})},enable:function(){this.browse_button.button("enable"),this.uploader.disableBrowse(!1)},disable:function(){this.browse_button.button("disable"),this.uploader.disableBrowse(!0)},getFile:function(e){var t;return typeof e=="number"?t=this.uploader.files[e]:t=this.uploader.getFile(e),t},getFiles:function(){return this.uploader.files},removeFile:function(e){n.typeOf(e)==="string"&&(e=this.getFile(e)),this.uploader.removeFile(e)},clearQueue:function(){this.uploader.splice()},getUploader:function(){return this.uploader},refresh:function(){this.uploader.refresh()},notify:function(e,t){var n=i('
        '+'

        '+t+"

        "+"
        ");n.addClass("ui-state-"+(e==="error"?"error":"highlight")).find("p .ui-icon").addClass("ui-icon-"+(e==="error"?"alert":"info")).end().find(".plupload_message_close").click(function(){n.remove()}).end(),i(".plupload_header",this.container).append(n)},destroy:function(){this.uploader.destroy(),i(".plupload_button",this.element).unbind(),i.ui.button&&i(".plupload_add, .plupload_start, .plupload_stop",this.container).button("destroy"),i.ui.progressbar&&this.progressbar.progressbar("destroy"),i.ui.sortable&&this.options.sortable&&i("tbody",this.filelist).sortable("destroy"),this.element.empty().html(this.contents_bak),this.contents_bak="",i.Widget.prototype.destroy.apply(this)},_handleState:function(){var e=this.uploader,t=e.files.length-(e.total.uploaded+e.total.failed),s=e.getOption("filters").max_file_count||0;n.STARTED===e.state?(i([]).add(this.stop_button).add(".plupload_started").removeClass("plupload_hidden"),this.start_button.button("disable"),this.options.multiple_queues||(this.browse_button.button("disable"),e.disableBrowse()),i(".plupload_upload_status",this.element).html(r.sprintf(o("Uploaded %d/%d files"),e.total.uploaded,e.files.length)),i(".plupload_header_content",this.element).addClass("plupload_header_content_bw")):n.STOPPED===e.state&&(i([]).add(this.stop_button).add(".plupload_started").addClass("plupload_hidden"),t?this.start_button.button("enable"):this.start_button.button("disable"),this.options.multiple_queues&&i(".plupload_header_content",this.element).removeClass("plupload_header_content_bw"),this.options.multiple_queues&&s&&s>t&&(this.browse_button.button("enable"),e.disableBrowse(!1)),this._updateTotalProgress()),e.total.queued===0?i(".ui-button-text",this.browse_button).html(o("Add Files")):i(".ui-button-text",this.browse_button).html(r.sprintf(o("%d files queued"),e.total.queued)),e.refresh()},_handleFileStatus:function(e){var t=i("#"+e.id),r,s;if(!t.length)return;switch(e.status){case n.DONE:r="plupload_done",s="plupload_action_icon ui-icon ui-icon-circle-check";break;case n.FAILED:r="ui-state-error plupload_failed",s="plupload_action_icon ui-icon ui-icon-alert";break;case n.QUEUED:r="plupload_delete",s="plupload_action_icon ui-icon ui-icon-circle-minus";break;case n.UPLOADING:r="ui-state-highlight plupload_uploading",s="plupload_action_icon ui-icon ui-icon-circle-arrow-w";var o=i(".plupload_scroll",this.container),u=o.scrollTop(),a=o.height(),f=t.position().top+t.height();a
        %ext%
        %percent%
        %name%
        %size%
        ',n.typeOf(e)!=="array"&&(e=[e]),i.each(e,function(e,i){var u=r.Mime.getFileExtension(i.name)||"none";o+=s.replace(/%(\w+)%/g,function(e,r){switch(r){case"thumb_width":case"thumb_height":return t.options[r];case"size":return n.formatSize(i.size);case"ext":return u;default:return i[r]||""}})}),t.filelist.append(o)},_addFormFields:function(){var e=this;i(".plupload_file_fields",this.filelist).html(""),n.each(this.uploader.files,function(t,r){var s="",o=e.id+"_"+r;t.target_name&&(s+=''),s+='',s+='',i("#"+t.id).find(".plupload_file_fields").html(s)}),this.counter.val(this.uploader.files.length)},_viewChanged:function(e){this.options.views.remember&&i.cookie&&i.cookie("plupload_ui_view",e,{expires:7,path:"/"}),r.Env.browser==="IE"&&r.Env.version<7&&this.content.attr("style",'height:expression(document.getElementById("'+this.id+"_container"+'").clientHeight - '+(e==="list"?132:102)+")"),this.container.removeClass("plupload_view_list plupload_view_thumbs").addClass("plupload_view_"+e),this.view_mode=e,this._trigger("viewchanged",null,{view:e})},_enableViewSwitcher:function(){var e=this,t,r=i(".plupload_view_switch",this.container),s,o;n.each(["list","thumbs"],function(t){e.options.views[t]||r.find('[for="'+e.id+"_view_"+t+'"], #'+e.id+"_view_"+t).remove()}),s=r.find(".plupload_button"),s.length===1?(r.hide(),t=s.eq(0).data("view"),this._viewChanged(t)):i.ui.button&&s.length>1?(this.options.views.remember&&i.cookie&&(t=i.cookie("plupload_ui_view")),~n.inArray(t,["list","thumbs"])||(t=this.options.views.active),r.show().buttonset().find(".ui-button").click(function(n){t=i(this).data("view"),e._viewChanged(t),n.preventDefault()}),o=r.find('[for="'+e.id+"_view_"+t+'"]'),o.length&&o.trigger("click")):(r.show(),this._viewChanged(this.options.views.active)),this.options.views.thumbs&&this._displayThumbs()},_enableRenaming:function(){var e=this;this.filelist.dblclick(function(t){var n=i(t.target),r,s,o,u,a="";if(!n.hasClass("plupload_file_name_wrapper"))return;s=e.uploader.getFile(n.closest(".plupload_file")[0].id),u=s.name,o=/^(.+)(\.[^.]+)$/.exec(u),o&&(u=o[1],a=o[2]),r=i('').width(n.width()).insertAfter(n.hide()),r.val(u).blur(function(){n.show().parent().scrollLeft(0).end().next().remove()}).keydown(function(e){var t=i(this);i.inArray(e.keyCode,[13,27])!==-1&&(e.preventDefault(),e.keyCode===13&&(s.name=t.val()+a,n.html(s.name)),t.blur())})[0].focus()})},_enableSortingList:function(){var e=this;if(i(".plupload_file",this.filelist).length<2)return;i("tbody",this.filelist).sortable("destroy"),this.filelist.sortable({items:".plupload_delete",cancel:"object, .plupload_clearer",stop:function(){var t=[];i.each(i(this).sortable("toArray"),function(n,r){t[t.length]=e.uploader.getFile(r)}),t.unshift(t.length),t.unshift(0),Array.prototype.splice.apply(e.uploader.files,t)}})}})})(window,document,plupload,mOxie,jQuery); \ No newline at end of file +/** + * jquery.ui.plupload.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.button.js + * jquery.ui.progressbar.js + * + * Optionally: + * jquery.ui.sortable.js + */ + + /* global jQuery:true */ + +/** +jQuery UI based implementation of the Plupload API - multi-runtime file uploading API. + +To use the widget you must include _jQuery_ and _jQuery UI_ bundle (including `ui.core`, `ui.widget`, `ui.button`, +`ui.progressbar` and `ui.sortable`). + +In general the widget is designed the way that you do not usually need to do anything to it after you instantiate it. +But! You still can intervenue, to some extent, in case you need to. Although, due to the fact that widget is based on +_jQuery UI_ widget factory, there are some specifics. See examples below for more details. + +@example + +
        +

        Your browser doesn't have Flash, Silverlight or HTML5 support.

        +
        + + + +@example + // Invoking methods: + $('#uploader').plupload(options); + + // Display welcome message in the notification area + $('#uploader').plupload('notify', 'info', "This might be obvious, but you need to click 'Add Files' to add some files."); + +@example + // Subscribing to the events... + // ... on initialization: + $('#uploader').plupload({ + ... + viewchanged: function(event, args) { + // stuff ... + } + }); + // ... or after initialization + $('#uploader').on("viewchanged", function(event, args) { + // stuff ... + }); + +@class UI.Plupload +@constructor +@param {Object} settings For detailed information about each option check documentation. + @param {String} settings.url URL of the server-side upload handler. + @param {Number|String} [settings.chunk_size=0] Chunk size in bytes to slice the file into. Shorcuts with b, kb, mb, gb, tb suffixes also supported. `e.g. 204800 or "204800b" or "200kb"`. By default - disabled. + @param {String} [settings.file_data_name="file"] Name for the file field in Multipart formated message. + @param {Object} [settings.filters={}] Set of file type filters. + @param {Array} [settings.filters.mime_types=[]] List of file types to accept, each one defined by title and list of extensions. `e.g. {title : "Image files", extensions : "jpg,jpeg,gif,png"}`. Dispatches `plupload.FILE_EXTENSION_ERROR` + @param {String|Number} [settings.filters.max_file_size=0] Maximum file size that the user can pick, in bytes. Optionally supports b, kb, mb, gb, tb suffixes. `e.g. "10mb" or "1gb"`. By default - not set. Dispatches `plupload.FILE_SIZE_ERROR`. + @param {Boolean} [settings.filters.prevent_duplicates=false] Do not let duplicates into the queue. Dispatches `plupload.FILE_DUPLICATE_ERROR`. + @param {Number} [settings.filters.max_file_count=0] Limit the number of files that can reside in the queue at the same time (default is 0 - no limit). + @param {String} [settings.flash_swf_url] URL of the Flash swf. + @param {Object} [settings.headers] Custom headers to send with the upload. Hash of name/value pairs. + @param {Number|String} [settings.max_file_size] Maximum file size that the user can pick, in bytes. Optionally supports b, kb, mb, gb, tb suffixes. `e.g. "10mb" or "1gb"`. By default - not set. Dispatches `plupload.FILE_SIZE_ERROR`. + @param {Number} [settings.max_retries=0] How many times to retry the chunk or file, before triggering Error event. + @param {Boolean} [settings.multipart=true] Whether to send file and additional parameters as Multipart formated message. + @param {Object} [settings.multipart_params] Hash of key/value pairs to send with every file upload. + @param {Boolean} [settings.multi_selection=true] Enable ability to select multiple files at once in file dialog. + @param {Boolean} [settings.prevent_duplicates=false] Do not let duplicates into the queue. Dispatches `plupload.FILE_DUPLICATE_ERROR`. + @param {String|Object} [settings.required_features] Either comma-separated list or hash of required features that chosen runtime should absolutely possess. + @param {Object} [settings.resize] Enable resizng of images on client-side. Applies to `image/jpeg` and `image/png` only. `e.g. {width : 200, height : 200, quality : 90, crop: true}` + @param {Number} [settings.resize.width] If image is bigger, it will be resized. + @param {Number} [settings.resize.height] If image is bigger, it will be resized. + @param {Number} [settings.resize.quality=90] Compression quality for jpegs (1-100). + @param {Boolean} [settings.resize.crop=false] Whether to crop images to exact dimensions. By default they will be resized proportionally. + @param {String} [settings.runtimes="html5,flash,silverlight,html4"] Comma separated list of runtimes, that Plupload will try in turn, moving to the next if previous fails. + @param {String} [settings.silverlight_xap_url] URL of the Silverlight xap. + @param {Boolean} [settings.unique_names=false] If true will generate unique filenames for uploaded files. + + @param {Boolean} [settings.autostart=false] Whether to auto start uploading right after file selection. + @param {Boolean} [settings.dragdrop=true] Enable ability to add file to the queue by drag'n'dropping them from the desktop. + @param {Boolean} [settings.rename=false] Enable ability to rename files in the queue. + @param {Boolean} [settings.sortable=false] Enable ability to sort files in the queue, changing their uploading priority. + @param {Object} [settings.buttons] Control the visibility of functional buttons. + @param {Boolean} [settings.buttons.browse=true] Display browse button. + @param {Boolean} [settings.buttons.start=true] Display start button. + @param {Boolean} [settings.buttons.stop=true] Display stop button. + @param {Object} [settings.views] Control various views of the file queue. + @param {Boolean} [settings.views.list=true] Enable list view. + @param {Boolean} [settings.views.thumbs=false] Enable thumbs view. + @param {String} [settings.views.default='list'] Default view. + @param {Boolean} [settings.views.remember=true] Whether to remember the current view (requires jQuery Cookie plugin). + @param {Boolean} [settings.multiple_queues=true] Re-activate the widget after each upload procedure. +*/ +;(function(window, document, plupload, o, $) { + +/** +Dispatched when the widget is initialized and ready. + +@event ready +@param {plupload.Uploader} uploader Uploader instance sending the event. +*/ + +/** +Dispatched when file dialog is closed. + +@event selected +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {Array} files Array of selected files represented by plupload.File objects +*/ + +/** +Dispatched when file dialog is closed. + +@event removed +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {Array} files Array of removed files represented by plupload.File objects +*/ + +/** +Dispatched when upload is started. + +@event started +@param {plupload.Uploader} uploader Uploader instance sending the event. +*/ + +/** +Dispatched when upload is stopped. + +@event stopped +@param {plupload.Uploader} uploader Uploader instance sending the event. +*/ + +/** +Dispatched during the upload process. + +@event progress +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {plupload.File} file File that is being uploaded (includes loaded and percent properties among others). + @param {Number} size Total file size in bytes. + @param {Number} loaded Number of bytes uploaded of the files total size. + @param {Number} percent Number of percentage uploaded of the file. +*/ + +/** +Dispatched when file is uploaded. + +@event uploaded +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {plupload.File} file File that was uploaded. + @param {Enum} status Status constant matching the plupload states QUEUED, UPLOADING, FAILED, DONE. +*/ + +/** +Dispatched when upload of the whole queue is complete. + +@event complete +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {Array} files Array of uploaded files represented by plupload.File objects +*/ + +/** +Dispatched when the view is changed, e.g. from `list` to `thumbs` or vice versa. + +@event viewchanged +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {String} type Current view type. +*/ + +/** +Dispatched when error of some kind is detected. + +@event error +@param {plupload.Uploader} uploader Uploader instance sending the event. +@param {String} error Error message. +@param {plupload.File} file File that was uploaded. + @param {Enum} status Status constant matching the plupload states QUEUED, UPLOADING, FAILED, DONE. +*/ + +var uploaders = {}; + +function _(str) { + return plupload.translate(str) || str; +} + +function renderUI(obj) { + obj.id = obj.attr('id'); + + obj.html( + '
        ' + + '
        ' + + '
        ' + + '
        ' + + '' + + '
        ' + _("Select files") + '
        ' + + '
        ' + _("Add files to the upload queue and click the start button.") + '
        ' + + '
        ' + + '' + + '' + + '
        ' + + '
        ' + + '
        ' + + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '
        ' + _('Filename') + '' + _('Status') + '' + _('Size') + ' 
        ' + + + '
        ' + + '
        ' + _("Drag files here.") + '
        ' + + '
        ' + + '
         
        ' + + '
        ' + + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + + '
        ' + + '' + + '
        ' + ); +} + + +$.widget("ui.plupload", { + + widgetEventPrefix: '', + + contents_bak: '', + + options: { + browse_button_hover: 'ui-state-hover', + browse_button_active: 'ui-state-active', + + filters: {}, + + // widget specific + buttons: { + browse: true, + start: true, + stop: true + }, + + views: { + list: true, + thumbs: false, + active: 'list', + remember: true // requires: https://github.com/carhartl/jquery-cookie, otherwise disabled even if set to true + }, + + thumb_width: 100, + thumb_height: 60, + + multiple_queues: true, // re-use widget by default + dragdrop : true, + autostart: false, + sortable: false, + rename: false + }, + + FILE_COUNT_ERROR: -9001, + + _create: function() { + var id = this.element.attr('id'); + if (!id) { + id = plupload.guid(); + this.element.attr('id', id); + } + this.id = id; + + // backup the elements initial state + this.contents_bak = this.element.html(); + renderUI(this.element); + + // container, just in case + this.container = $('.plupload_container', this.element).attr('id', id + '_container'); + + this.content = $('.plupload_content', this.element); + + if ($.fn.resizable) { + this.container.resizable({ + handles: 's', + minHeight: 300 + }); + } + + // list of files, may become sortable + this.filelist = $('.plupload_filelist_content', this.container) + .attr({ + id: id + '_filelist', + unselectable: 'on' + }); + + + // buttons + this.browse_button = $('.plupload_add', this.container).attr('id', id + '_browse'); + this.start_button = $('.plupload_start', this.container).attr('id', id + '_start'); + this.stop_button = $('.plupload_stop', this.container).attr('id', id + '_stop'); + this.thumbs_switcher = $('#' + id + '_view_thumbs'); + this.list_switcher = $('#' + id + '_view_list'); + + if ($.ui.button) { + this.browse_button.button({ + icons: { primary: 'ui-icon-circle-plus' }, + disabled: true + }); + + this.start_button.button({ + icons: { primary: 'ui-icon-circle-arrow-e' }, + disabled: true + }); + + this.stop_button.button({ + icons: { primary: 'ui-icon-circle-close' } + }); + + this.list_switcher.button({ + text: false, + icons: { secondary: "ui-icon-grip-dotted-horizontal" } + }); + + this.thumbs_switcher.button({ + text: false, + icons: { secondary: "ui-icon-image" } + }); + } + + // progressbar + this.progressbar = $('.plupload_progress_container', this.container); + + if ($.ui.progressbar) { + this.progressbar.progressbar(); + } + + // counter + this.counter = $('.plupload_count', this.element) + .attr({ + id: id + '_count', + name: id + '_count' + }); + + // initialize uploader instance + this._initUploader(); + }, + + _initUploader: function() { + var self = this + , id = this.id + , uploader + , options = { + container: id + '_buttons', + browse_button: id + '_browse' + } + ; + + $('.plupload_buttons', this.element).attr('id', id + '_buttons'); + + if (self.options.dragdrop) { + this.filelist.parent().attr('id', this.id + '_dropbox'); + options.drop_element = this.id + '_dropbox'; + } + + this.filelist.on('click', function(e) { + if ($(e.target).hasClass('plupload_action_icon')) { + self.removeFile($(e.target).closest('.plupload_file').attr('id')); + e.preventDefault(); + } + }); + + uploader = this.uploader = uploaders[id] = new plupload.Uploader($.extend(this.options, options)); + + // retrieve full normalized set of options + this.options = uploader.getOption(); + + if (self.options.views.thumbs) { + uploader.settings.required_features.display_media = true; + } + + // for backward compatibility + if (self.options.max_file_count) { + plupload.extend(uploader.getOption('filters'), { + max_file_count: self.options.max_file_count + }); + } + + plupload.addFileFilter('max_file_count', function(maxCount, file, cb) { + if (maxCount <= this.files.length - (this.total.uploaded + this.total.failed)) { + self.browse_button.button('disable'); + this.disableBrowse(); + + this.trigger('Error', { + code : self.FILE_COUNT_ERROR, + message : _("File count error."), + file : file + }); + cb(false); + } else { + cb(true); + } + }); + + + uploader.bind('Error', function(up, err) { + var message, details = ""; + + message = '' + err.message + ''; + + switch (err.code) { + case plupload.FILE_EXTENSION_ERROR: + details = o.sprintf(_("File: %s"), err.file.name); + break; + + case plupload.FILE_SIZE_ERROR: + details = o.sprintf(_("File: %s, size: %d, max file size: %d"), err.file.name, plupload.formatSize(err.file.size), plupload.formatSize(plupload.parseSize(up.getOption('filters').max_file_size))); + break; + + case plupload.FILE_DUPLICATE_ERROR: + details = o.sprintf(_("%s already present in the queue."), err.file.name); + break; + + case self.FILE_COUNT_ERROR: + details = o.sprintf(_("Upload element accepts only %d file(s) at a time. Extra files were stripped."), up.getOption('filters').max_file_count || 0); + break; + + case plupload.IMAGE_FORMAT_ERROR : + details = _("Image format either wrong or not supported."); + break; + + case plupload.IMAGE_MEMORY_ERROR : + details = _("Runtime ran out of available memory."); + break; + + /* // This needs a review + case plupload.IMAGE_DIMENSIONS_ERROR : + details = o.sprintf(_('Resoultion out of boundaries! %s runtime supports images only up to %wx%hpx.'), up.runtime, up.features.maxWidth, up.features.maxHeight); + break; */ + + case plupload.HTTP_ERROR: + details = _("Upload URL might be wrong or doesn't exist."); + break; + } + + message += "
        " + details + ""; + + self._trigger('error', null, { up: up, error: err } ); + + // do not show UI if no runtime can be initialized + if (err.code === plupload.INIT_ERROR) { + setTimeout(function() { + self.destroy(); + }, 1); + } else { + self.notify('error', message); + } + }); + + + uploader.bind('PostInit', function(up) { + // all buttons are optional, so they can be disabled and hidden + if (!self.options.buttons.browse) { + self.browse_button.button('disable').hide(); + up.disableBrowse(true); + } else { + self.browse_button.button('enable'); + } + + if (!self.options.buttons.start) { + self.start_button.button('disable').hide(); + } + + if (!self.options.buttons.stop) { + self.stop_button.button('disable').hide(); + } + + if (!self.options.unique_names && self.options.rename) { + self._enableRenaming(); + } + + if (self.options.dragdrop && up.features.dragdrop) { + self.filelist.parent().addClass('plupload_dropbox'); + } + + self._enableViewSwitcher(); + + self.start_button.click(function(e) { + if (!$(this).button('option', 'disabled')) { + self.start(); + } + e.preventDefault(); + }); + + self.stop_button.click(function(e) { + self.stop(); + e.preventDefault(); + }); + + self._trigger('ready', null, { up: up }); + }); + + // uploader internal events must run first + uploader.init(); + + uploader.bind('FileFiltered', function(up, file) { + self._addFiles(file); + }); + + uploader.bind('FilesAdded', function(up, files) { + self._trigger('selected', null, { up: up, files: files } ); + + // re-enable sortable + if (self.options.sortable && $.ui.sortable) { + self._enableSortingList(); + } + + self._trigger('updatelist', null, { filelist: self.filelist }); + + if (self.options.autostart) { + // set a little delay to make sure that QueueChanged triggered by the core has time to complete + setTimeout(function() { + self.start(); + }, 10); + } + }); + + uploader.bind('FilesRemoved', function(up, files) { + // destroy sortable if enabled + if ($.ui.sortable && self.options.sortable) { + $('tbody', self.filelist).sortable('destroy'); + } + + $.each(files, function(i, file) { + $('#' + file.id).toggle("highlight", function() { + $(this).remove(); + }); + }); + + if (up.files.length) { + // re-initialize sortable + if (self.options.sortable && $.ui.sortable) { + self._enableSortingList(); + } + } + + self._trigger('updatelist', null, { filelist: self.filelist }); + self._trigger('removed', null, { up: up, files: files } ); + }); + + uploader.bind('QueueChanged', function() { + self._handleState(); + }); + + uploader.bind('StateChanged', function(up) { + self._handleState(); + if (plupload.STARTED === up.state) { + self._trigger('started', null, { up: this.uploader }); + } else if (plupload.STOPPED === up.state) { + self._trigger('stopped', null, { up: this.uploader }); + } + }); + + uploader.bind('UploadFile', function(up, file) { + self._handleFileStatus(file); + }); + + uploader.bind('FileUploaded', function(up, file, result) { + self._handleFileStatus(file); + self._trigger('uploaded', null, { up: up, file: file, result: result } ); + }); + + uploader.bind('UploadProgress', function(up, file) { + self._handleFileStatus(file); + self._updateTotalProgress(); + self._trigger('progress', null, { up: up, file: file } ); + }); + + uploader.bind('UploadComplete', function(up, files) { + self._addFormFields(); + self._trigger('complete', null, { up: up, files: files } ); + }); + }, + + + _setOption: function(key, value) { + var self = this; + + if (key == 'buttons' && typeof(value) == 'object') { + value = $.extend(self.options.buttons, value); + + if (!value.browse) { + self.browse_button.button('disable').hide(); + self.uploader.disableBrowse(true); + } else { + self.browse_button.button('enable').show(); + self.uploader.disableBrowse(false); + } + + if (!value.start) { + self.start_button.button('disable').hide(); + } else { + self.start_button.button('enable').show(); + } + + if (!value.stop) { + self.stop_button.button('disable').hide(); + } else { + self.start_button.button('enable').show(); + } + } + + self.uploader.setOption(key, value); + }, + + + /** + Start upload. Triggers `start` event. + + @method start + */ + start: function() { + this.uploader.start(); + }, + + + /** + Stop upload. Triggers `stop` event. + + @method stop + */ + stop: function() { + this.uploader.stop(); + }, + + + /** + Enable browse button. + + @method enable + */ + enable: function() { + this.browse_button.button('enable'); + this.uploader.disableBrowse(false); + }, + + + /** + Disable browse button. + + @method disable + */ + disable: function() { + this.browse_button.button('disable'); + this.uploader.disableBrowse(true); + }, + + + /** + Retrieve file by its unique id. + + @method getFile + @param {String} id Unique id of the file + @return {plupload.File} + */ + getFile: function(id) { + var file; + + if (typeof id === 'number') { + file = this.uploader.files[id]; + } else { + file = this.uploader.getFile(id); + } + return file; + }, + + /** + Return array of files currently in the queue. + + @method getFiles + @return {Array} Array of files in the queue represented by plupload.File objects + */ + getFiles: function() { + return this.uploader.files; + }, + + + /** + Remove the file from the queue. + + @method removeFile + @param {plupload.File|String} file File to remove, might be specified directly or by its unique id + */ + removeFile: function(file) { + if (plupload.typeOf(file) === 'string') { + file = this.getFile(file); + } + this.uploader.removeFile(file); + }, + + + /** + Clear the file queue. + + @method clearQueue + */ + clearQueue: function() { + this.uploader.splice(); + }, + + + /** + Retrieve internal plupload.Uploader object (usually not required). + + @method getUploader + @return {plupload.Uploader} + */ + getUploader: function() { + return this.uploader; + }, + + + /** + Trigger refresh procedure, specifically browse_button re-measure and re-position operations. + Might get handy, when UI Widget is placed within the popup, that is constantly hidden and shown + again - without calling this method after each show operation, dialog trigger might get displaced + and disfunctional. + + @method refresh + */ + refresh: function() { + this.uploader.refresh(); + }, + + + /** + Display a message in notification area. + + @method notify + @param {Enum} type Type of the message, either `error` or `info` + @param {String} message The text message to display. + */ + notify: function(type, message) { + var popup = $( + '
        ' + + '' + + '

        ' + message + '

        ' + + '
        ' + ); + + popup + .addClass('ui-state-' + (type === 'error' ? 'error' : 'highlight')) + .find('p .ui-icon') + .addClass('ui-icon-' + (type === 'error' ? 'alert' : 'info')) + .end() + .find('.plupload_message_close') + .click(function() { + popup.remove(); + }) + .end(); + + $('.plupload_header', this.container).append(popup); + }, + + + /** + Destroy the widget, the uploader, free associated resources and bring back original html. + + @method destroy + */ + destroy: function() { + // destroy uploader instance + this.uploader.destroy(); + + // unbind all button events + $('.plupload_button', this.element).unbind(); + + // destroy buttons + if ($.ui.button) { + $('.plupload_add, .plupload_start, .plupload_stop', this.container) + .button('destroy'); + } + + // destroy progressbar + if ($.ui.progressbar) { + this.progressbar.progressbar('destroy'); + } + + // destroy sortable behavior + if ($.ui.sortable && this.options.sortable) { + $('tbody', this.filelist).sortable('destroy'); + } + + // restore the elements initial state + this.element + .empty() + .html(this.contents_bak); + this.contents_bak = ''; + + $.Widget.prototype.destroy.apply(this); + }, + + + _handleState: function() { + var up = this.uploader + , filesPending = up.files.length - (up.total.uploaded + up.total.failed) + , maxCount = up.getOption('filters').max_file_count || 0 + ; + + if (plupload.STARTED === up.state) { + $([]) + .add(this.stop_button) + .add('.plupload_started') + .removeClass('plupload_hidden'); + + this.start_button.button('disable'); + + if (!this.options.multiple_queues) { + this.browse_button.button('disable'); + up.disableBrowse(); + } + + $('.plupload_upload_status', this.element).html(o.sprintf(_('Uploaded %d/%d files'), up.total.uploaded, up.files.length)); + $('.plupload_header_content', this.element).addClass('plupload_header_content_bw'); + } + else if (plupload.STOPPED === up.state) { + $([]) + .add(this.stop_button) + .add('.plupload_started') + .addClass('plupload_hidden'); + + if (filesPending) { + this.start_button.button('enable'); + } else { + this.start_button.button('disable'); + } + + if (this.options.multiple_queues) { + $('.plupload_header_content', this.element).removeClass('plupload_header_content_bw'); + } + + // if max_file_count defined, only that many files can be queued at once + if (this.options.multiple_queues && maxCount && maxCount > filesPending) { + this.browse_button.button('enable'); + up.disableBrowse(false); + } + + this._updateTotalProgress(); + } + + if (up.total.queued === 0) { + $('.ui-button-text', this.browse_button).html(_('Add Files')); + } else { + $('.ui-button-text', this.browse_button).html(o.sprintf(_('%d files queued'), up.total.queued)); + } + + up.refresh(); + }, + + + _handleFileStatus: function(file) { + var $file = $('#' + file.id), actionClass, iconClass; + + // since this method might be called asynchronously, file row might not yet be rendered + if (!$file.length) { + return; + } + + switch (file.status) { + case plupload.DONE: + actionClass = 'plupload_done'; + iconClass = 'plupload_action_icon ui-icon ui-icon-circle-check'; + break; + + case plupload.FAILED: + actionClass = 'ui-state-error plupload_failed'; + iconClass = 'plupload_action_icon ui-icon ui-icon-alert'; + break; + + case plupload.QUEUED: + actionClass = 'plupload_delete'; + iconClass = 'plupload_action_icon ui-icon ui-icon-circle-minus'; + break; + + case plupload.UPLOADING: + actionClass = 'ui-state-highlight plupload_uploading'; + iconClass = 'plupload_action_icon ui-icon ui-icon-circle-arrow-w'; + + // scroll uploading file into the view if its bottom boundary is out of it + var scroller = $('.plupload_scroll', this.container) + , scrollTop = scroller.scrollTop() + , scrollerHeight = scroller.height() + , rowOffset = $file.position().top + $file.height() + ; + + if (scrollerHeight < rowOffset) { + scroller.scrollTop(scrollTop + rowOffset - scrollerHeight); + } + + // Set file specific progress + $file + .find('.plupload_file_percent') + .html(file.percent + '%') + .end() + .find('.plupload_file_progress') + .css('width', file.percent + '%') + .end() + .find('.plupload_file_size') + .html(plupload.formatSize(file.size)); + break; + } + actionClass += ' ui-state-default plupload_file'; + + $file + .attr('class', actionClass) + .find('.plupload_action_icon') + .attr('class', iconClass); + }, + + + _updateTotalProgress: function() { + var up = this.uploader; + + // Scroll to end of file list + this.filelist[0].scrollTop = this.filelist[0].scrollHeight; + + this.progressbar.progressbar('value', up.total.percent); + + this.element + .find('.plupload_total_status') + .html(up.total.percent + '%') + .end() + .find('.plupload_total_file_size') + .html(plupload.formatSize(up.total.size)) + .end() + .find('.plupload_upload_status') + .html(o.sprintf(_('Uploaded %d/%d files'), up.total.uploaded, up.files.length)); + }, + + + _displayThumbs: function() { + var self = this + , tw, th // thumb width/height + , cols + , num = 0 // number of simultaneously visible thumbs + , thumbs = [] // array of thumbs to preload at any given moment + , loading = false + ; + + if (!this.options.views.thumbs) { + return; + } + + + function onLast(el, eventName, cb) { + var timer; + + el.on(eventName, function() { + clearTimeout(timer); + timer = setTimeout(function() { + clearTimeout(timer); + cb(); + }, 300); + }); + } + + + // calculate number of simultaneously visible thumbs + function measure() { + if (!tw || !th) { + var wrapper = $('.plupload_file:eq(0)', self.filelist); + tw = wrapper.outerWidth(true); + th = wrapper.outerHeight(true); + } + + var aw = self.content.width(), ah = self.content.height(); + cols = Math.floor(aw / tw); + num = cols * (Math.ceil(ah / th) + 1); + } + + + function pickThumbsToLoad() { + // calculate index of virst visible thumb + var startIdx = Math.floor(self.content.scrollTop() / th) * cols; + // get potentially visible thumbs that are not yet visible + thumbs = $('.plupload_file .plupload_file_thumb', self.filelist) + .slice(startIdx, startIdx + num) + .filter('.plupload_thumb_toload') + .get(); + } + + + function init() { + function mpl() { // measure, pick, load + if (self.view_mode !== 'thumbs') { + return; + } + measure(); + pickThumbsToLoad(); + lazyLoad(); + } + + if ($.fn.resizable) { + onLast(self.container, 'resize', mpl); + } + + onLast(self.window, 'resize', mpl); + onLast(self.content, 'scroll', mpl); + + self.element.on('viewchanged selected', mpl); + + mpl(); + } + + + function preloadThumb(file, cb) { + var img = new o.Image(); + + img.onload = function() { + var thumb = $('#' + file.id + ' .plupload_file_thumb', self.filelist); + this.embed(thumb[0], { + width: self.options.thumb_width, + height: self.options.thumb_height, + crop: true, + preserveHeaders: false, + swf_url: o.resolveUrl(self.options.flash_swf_url), + xap_url: o.resolveUrl(self.options.silverlight_xap_url) + }); + }; + + img.bind("embedded error", function(e) { + $('#' + file.id, self.filelist) + .find('.plupload_file_thumb') + .removeClass('plupload_thumb_loading') + .addClass('plupload_thumb_' + e.type) + ; + this.destroy(); + setTimeout(cb, 1); // detach, otherwise ui might hang (in SilverLight for example) + }); + + $('#' + file.id, self.filelist) + .find('.plupload_file_thumb') + .removeClass('plupload_thumb_toload') + .addClass('plupload_thumb_loading') + ; + img.load(file.getSource()); + } + + + function lazyLoad() { + if (self.view_mode !== 'thumbs' || loading) { + return; + } + + pickThumbsToLoad(); + if (!thumbs.length) { + return; + } + + loading = true; + + preloadThumb(self.getFile($(thumbs.shift()).closest('.plupload_file').attr('id')), function() { + loading = false; + lazyLoad(); + }); + } + + // this has to run only once to measure structures and bind listeners + this.element.on('selected', function onselected() { + self.element.off('selected', onselected); + init(); + }); + }, + + + _addFiles: function(files) { + var self = this, file_html, html = ''; + + file_html = '
      • ' + + '
        ' + + '
        {ext}
        ' + + '
        ' + + '
        ' + + '
        ' + + '{percent} ' + + '
        ' + + '
        ' + + '{name} ' + + '
        ' + + '
        ' + + '
        ' + + '
        ' + + '
        {size}
        ' + + '
        ' + + '
      • '; + + if (plupload.typeOf(files) !== 'array') { + files = [files]; + } + + $.each(files, function(i, file) { + var ext = o.Mime.getFileExtension(file.name) || 'none'; + + html += file_html.replace(/\{(\w+)\}/g, function($0, $1) { + switch ($1) { + case 'thumb_width': + case 'thumb_height': + return self.options[$1]; + + case 'size': + return plupload.formatSize(file.size); + + case 'ext': + return ext; + + default: + return file[$1] || ''; + } + }); + }); + + self.filelist.append(html); + }, + + + _addFormFields: function() { + var self = this; + + // re-add from fresh + $('.plupload_file_fields', this.filelist).html(''); + + plupload.each(this.uploader.files, function(file, count) { + var fields = '' + , id = self.id + '_' + count + ; + + if (file.target_name) { + fields += ''; + } + fields += ''; + fields += ''; + + $('#' + file.id).find('.plupload_file_fields').html(fields); + }); + + this.counter.val(this.uploader.files.length); + }, + + + _viewChanged: function(view) { + // update or write a new cookie + if (this.options.views.remember && $.cookie) { + $.cookie('plupload_ui_view', view, { expires: 7, path: '/' }); + } + + // ugly fix for IE6 - make content area stretchable + if (o.Env.browser === 'IE' && o.Env.version < 7) { + this.content.attr('style', 'height:expression(document.getElementById("' + this.id + '_container' + '").clientHeight - ' + (view === 'list' ? 132 : 102) + ')'); + } + + this.container.removeClass('plupload_view_list plupload_view_thumbs').addClass('plupload_view_' + view); + this.view_mode = view; + this._trigger('viewchanged', null, { view: view }); + }, + + + _enableViewSwitcher: function() { + var self = this + , view + , switcher = $('.plupload_view_switch', this.container) + , buttons + , button + ; + + plupload.each(['list', 'thumbs'], function(view) { + if (!self.options.views[view]) { + switcher.find('[for="' + self.id + '_view_' + view + '"], #'+ self.id +'_view_' + view).remove(); + } + }); + + // check if any visible left + buttons = switcher.find('.plupload_button'); + + if (buttons.length === 1) { + switcher.hide(); + view = buttons.eq(0).data('view'); + this._viewChanged(view); + } else if ($.ui.button && buttons.length > 1) { + if (this.options.views.remember && $.cookie) { + view = $.cookie('plupload_ui_view'); + } + + // if wierd case, bail out to default + if (!~plupload.inArray(view, ['list', 'thumbs'])) { + view = this.options.views.active; + } + + switcher + .show() + .buttonset() + .find('.ui-button') + .click(function(e) { + view = $(this).data('view'); + self._viewChanged(view); + e.preventDefault(); // avoid auto scrolling to widget in IE and FF (see #850) + }); + + // if view not active - happens when switcher wasn't clicked manually + button = switcher.find('[for="' + self.id + '_view_'+view+'"]'); + if (button.length) { + button.trigger('click'); + } + } else { + switcher.show(); + this._viewChanged(this.options.views.active); + } + + // initialize thumb viewer if requested + if (this.options.views.thumbs) { + this._displayThumbs(); + } + }, + + + _enableRenaming: function() { + var self = this; + + this.filelist.dblclick(function(e) { + var nameSpan = $(e.target), nameInput, file, parts, name, ext = ""; + + if (!nameSpan.hasClass('plupload_file_name_wrapper')) { + return; + } + + // Get file name and split out name and extension + file = self.uploader.getFile(nameSpan.closest('.plupload_file')[0].id); + name = file.name; + parts = /^(.+)(\.[^.]+)$/.exec(name); + if (parts) { + name = parts[1]; + ext = parts[2]; + } + + // Display input element + nameInput = $('').width(nameSpan.width()).insertAfter(nameSpan.hide()); + nameInput.val(name).blur(function() { + nameSpan.show().parent().scrollLeft(0).end().next().remove(); + }).keydown(function(e) { + var nameInput = $(this); + + if ($.inArray(e.keyCode, [13, 27]) !== -1) { + e.preventDefault(); + + // Rename file and glue extension back on + if (e.keyCode === 13) { + file.name = nameInput.val() + ext; + nameSpan.html(file.name); + } + nameInput.blur(); + } + })[0].focus(); + }); + }, + + + _enableSortingList: function() { + var self = this; + + if ($('.plupload_file', this.filelist).length < 2) { + return; + } + + // destroy sortable if enabled + $('tbody', this.filelist).sortable('destroy'); + + // enable + this.filelist.sortable({ + items: '.plupload_delete', + + cancel: 'object, .plupload_clearer', + + stop: function() { + var files = []; + + $.each($(this).sortable('toArray'), function(i, id) { + files[files.length] = self.uploader.getFile(id); + }); + + files.unshift(files.length); + files.unshift(0); + + // re-populate files array + Array.prototype.splice.apply(self.uploader.files, files); + } + }); + } +}); + +} (window, document, plupload, mOxie, jQuery)); diff --git a/e107_web/js/plupload/moxie.js b/e107_web/js/plupload/moxie.js index 51c72cb5a..f9fe69f39 100644 --- a/e107_web/js/plupload/moxie.js +++ b/e107_web/js/plupload/moxie.js @@ -1,6 +1,7 @@ +;var MXI_DEBUG = true; /** * mOxie - multi-runtime File API & XMLHttpRequest L2 Polyfill - * v1.2.1 + * v1.3.5 * * Copyright 2013, Moxiecode Systems AB * Released under GPL License. @@ -8,7 +9,7 @@ * License: http://www.plupload.com/license * Contributing: http://www.plupload.com/contributing * - * Date: 2014-05-14 + * Date: 2016-05-15 */ /** * Compiled inline version. (Library mode) @@ -171,13 +172,14 @@ define('moxie/core/utils/Basic', [], function() { var length, key, i, undef; if (obj) { - try { - length = obj.length; - } catch(ex) { - length = undef; - } - - if (length === undef) { + if (typeOf(obj.length) === 'number') { // it might be Array, FileList or even arguments object + // Loop array items + for (i = 0, length = obj.length; i < length; i++) { + if (callback(obj[i], i) === false) { + return; + } + } + } else if (typeOf(obj) === 'object') { // Loop object items for (key in obj) { if (obj.hasOwnProperty(key)) { @@ -186,13 +188,6 @@ define('moxie/core/utils/Basic', [], function() { } } } - } else { - // Loop array items - for (i = 0; i < length; i++) { - if (callback(obj[i], i) === false) { - return; - } - } } } }; @@ -264,7 +259,7 @@ define('moxie/core/utils/Basic', [], function() { @method inParallel @static @param {Array} queue Array of functions to call in sequence - @param {Function} cb Main callback that is called in the end, or in case of erro + @param {Function} cb Main callback that is called in the end, or in case of error */ var inParallel = function(queue, cb) { var count = 0, num = queue.length, cbArgs = new Array(num); @@ -384,10 +379,10 @@ define('moxie/core/utils/Basic', [], function() { /** - Generates an unique ID. This is 99.99% unique since it takes the current time and 5 random numbers. - The only way a user would be able to get the same ID is if the two persons at the same exact milisecond manages - to get 5 the same random numbers between 0-65535 it also uses a counter so each call will be guaranteed to be page unique. - It's more probable for the earth to be hit with an ansteriod. Y + Generates an unique ID. The only way a user would be able to get the same ID is if the two persons + at the same exact millisecond manage to get the same 5 random numbers between 0-65535; it also uses + a counter so each ID is guaranteed to be unique for the given page. It is more probable for the earth + to be hit with an asteroid. @method guid @static @@ -447,14 +442,31 @@ define('moxie/core/utils/Basic', [], function() { }, mul; - size = /^([0-9]+)([mgk]?)$/.exec(size.toLowerCase().replace(/[^0-9mkg]/g, '')); + + size = /^([0-9\.]+)([tmgk]?)$/.exec(size.toLowerCase().replace(/[^0-9\.tmkg]/g, '')); mul = size[2]; size = +size[1]; if (muls.hasOwnProperty(mul)) { size *= muls[mul]; } - return size; + return Math.floor(size); + }; + + + /** + * Pseudo sprintf implementation - simple way to replace tokens with specified values. + * + * @param {String} str String with tokens + * @return {String} String with replaced tokens + */ + var sprintf = function(str) { + var args = [].slice.call(arguments, 1); + + return str.replace(/%[a-z]/g, function() { + var value = args.shift(); + return typeOf(value) !== 'undefined' ? value : ''; + }); }; @@ -471,268 +483,11 @@ define('moxie/core/utils/Basic', [], function() { arrayIntersect: arrayIntersect, toArray: toArray, trim: trim, + sprintf: sprintf, parseSizeStr: parseSizeStr }; }); -// Included from: src/javascript/core/I18n.js - -/** - * I18n.js - * - * Copyright 2013, Moxiecode Systems AB - * Released under GPL License. - * - * License: http://www.plupload.com/license - * Contributing: http://www.plupload.com/contributing - */ - -define("moxie/core/I18n", [ - "moxie/core/utils/Basic" -], function(Basic) { - var i18n = {}; - - return { - /** - * Extends the language pack object with new items. - * - * @param {Object} pack Language pack items to add. - * @return {Object} Extended language pack object. - */ - addI18n: function(pack) { - return Basic.extend(i18n, pack); - }, - - /** - * Translates the specified string by checking for the english string in the language pack lookup. - * - * @param {String} str String to look for. - * @return {String} Translated string or the input string if it wasn't found. - */ - translate: function(str) { - return i18n[str] || str; - }, - - /** - * Shortcut for translate function - * - * @param {String} str String to look for. - * @return {String} Translated string or the input string if it wasn't found. - */ - _: function(str) { - return this.translate(str); - }, - - /** - * Pseudo sprintf implementation - simple way to replace tokens with specified values. - * - * @param {String} str String with tokens - * @return {String} String with replaced tokens - */ - sprintf: function(str) { - var args = [].slice.call(arguments, 1); - - return str.replace(/%[a-z]/g, function() { - var value = args.shift(); - return Basic.typeOf(value) !== 'undefined' ? value : ''; - }); - } - }; -}); - -// Included from: src/javascript/core/utils/Mime.js - -/** - * Mime.js - * - * Copyright 2013, Moxiecode Systems AB - * Released under GPL License. - * - * License: http://www.plupload.com/license - * Contributing: http://www.plupload.com/contributing - */ - -define("moxie/core/utils/Mime", [ - "moxie/core/utils/Basic", - "moxie/core/I18n" -], function(Basic, I18n) { - - var mimeData = "" + - "application/msword,doc dot," + - "application/pdf,pdf," + - "application/pgp-signature,pgp," + - "application/postscript,ps ai eps," + - "application/rtf,rtf," + - "application/vnd.ms-excel,xls xlb," + - "application/vnd.ms-powerpoint,ppt pps pot," + - "application/zip,zip," + - "application/x-shockwave-flash,swf swfl," + - "application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx," + - "application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx," + - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx," + - "application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx," + - "application/vnd.openxmlformats-officedocument.presentationml.template,potx," + - "application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx," + - "application/x-javascript,js," + - "application/json,json," + - "audio/mpeg,mp3 mpga mpega mp2," + - "audio/x-wav,wav," + - "audio/x-m4a,m4a," + - "audio/ogg,oga ogg," + - "audio/aiff,aiff aif," + - "audio/flac,flac," + - "audio/aac,aac," + - "audio/ac3,ac3," + - "audio/x-ms-wma,wma," + - "image/bmp,bmp," + - "image/gif,gif," + - "image/jpeg,jpg jpeg jpe," + - "image/photoshop,psd," + - "image/png,png," + - "image/svg+xml,svg svgz," + - "image/tiff,tiff tif," + - "text/plain,asc txt text diff log," + - "text/html,htm html xhtml," + - "text/css,css," + - "text/csv,csv," + - "text/rtf,rtf," + - "video/mpeg,mpeg mpg mpe m2v," + - "video/quicktime,qt mov," + - "video/mp4,mp4," + - "video/x-m4v,m4v," + - "video/x-flv,flv," + - "video/x-ms-wmv,wmv," + - "video/avi,avi," + - "video/webm,webm," + - "video/3gpp,3gpp 3gp," + - "video/3gpp2,3g2," + - "video/vnd.rn-realvideo,rv," + - "video/ogg,ogv," + - "video/x-matroska,mkv," + - "application/vnd.oasis.opendocument.formula-template,otf," + - "application/octet-stream,exe"; - - - var Mime = { - - mimes: {}, - - extensions: {}, - - // Parses the default mime types string into a mimes and extensions lookup maps - addMimeType: function (mimeData) { - var items = mimeData.split(/,/), i, ii, ext; - - for (i = 0; i < items.length; i += 2) { - ext = items[i + 1].split(/ /); - - // extension to mime lookup - for (ii = 0; ii < ext.length; ii++) { - this.mimes[ext[ii]] = items[i]; - } - // mime to extension lookup - this.extensions[items[i]] = ext; - } - }, - - - extList2mimes: function (filters, addMissingExtensions) { - var self = this, ext, i, ii, type, mimes = []; - - // convert extensions to mime types list - for (i = 0; i < filters.length; i++) { - ext = filters[i].extensions.split(/\s*,\s*/); - - for (ii = 0; ii < ext.length; ii++) { - - // if there's an asterisk in the list, then accept attribute is not required - if (ext[ii] === '*') { - return []; - } - - type = self.mimes[ext[ii]]; - if (!type) { - if (addMissingExtensions && /^\w+$/.test(ext[ii])) { - mimes.push('.' + ext[ii]); - } else { - return []; // accept all - } - } else if (Basic.inArray(type, mimes) === -1) { - mimes.push(type); - } - } - } - return mimes; - }, - - - mimes2exts: function(mimes) { - var self = this, exts = []; - - Basic.each(mimes, function(mime) { - if (mime === '*') { - exts = []; - return false; - } - - // check if this thing looks like mime type - var m = mime.match(/^(\w+)\/(\*|\w+)$/); - if (m) { - if (m[2] === '*') { - // wildcard mime type detected - Basic.each(self.extensions, function(arr, mime) { - if ((new RegExp('^' + m[1] + '/')).test(mime)) { - [].push.apply(exts, self.extensions[mime]); - } - }); - } else if (self.extensions[mime]) { - [].push.apply(exts, self.extensions[mime]); - } - } - }); - return exts; - }, - - - mimes2extList: function(mimes) { - var accept = [], exts = []; - - if (Basic.typeOf(mimes) === 'string') { - mimes = Basic.trim(mimes).split(/\s*,\s*/); - } - - exts = this.mimes2exts(mimes); - - accept.push({ - title: I18n.translate('Files'), - extensions: exts.length ? exts.join(',') : '*' - }); - - // save original mimes string - accept.mimes = mimes; - - return accept; - }, - - - getFileExtension: function(fileName) { - var matches = fileName && fileName.match(/\.([^.]+)$/); - if (matches) { - return matches[1].toLowerCase(); - } - return ''; - }, - - getFileMime: function(fileName) { - return this.mimes[this.getFileExtension(fileName)] || ''; - } - }; - - Mime.addMimeType(mimeData); - - return Mime; -}); - // Included from: src/javascript/core/utils/Env.js /** @@ -749,13 +504,14 @@ define("moxie/core/utils/Env", [ "moxie/core/utils/Basic" ], function(Basic) { - // UAParser.js v0.6.2 - // Lightweight JavaScript-based User-Agent string parser - // https://github.com/faisalman/ua-parser-js - // - // Copyright © 2012-2013 Faisalman - // Dual licensed under GPLv2 & MIT - + /** + * UAParser.js v0.7.7 + * Lightweight JavaScript-based User-Agent string parser + * https://github.com/faisalman/ua-parser-js + * + * Copyright © 2012-2015 Faisal Salman + * Dual licensed under GPLv2 & MIT + */ var UAParser = (function (undefined) { ////////////// @@ -950,91 +706,105 @@ define("moxie/core/utils/Env", [ var regexes = { browser : [[ - + // Presto based - /(opera\smini)\/((\d+)?[\w\.-]+)/i, // Opera Mini - /(opera\s[mobiletab]+).+version\/((\d+)?[\w\.-]+)/i, // Opera Mobi/Tablet - /(opera).+version\/((\d+)?[\w\.]+)/i, // Opera > 9.80 - /(opera)[\/\s]+((\d+)?[\w\.]+)/i // Opera < 9.80 - - ], [NAME, VERSION, MAJOR], [ + /(opera\smini)\/([\w\.-]+)/i, // Opera Mini + /(opera\s[mobiletab]+).+version\/([\w\.-]+)/i, // Opera Mobi/Tablet + /(opera).+version\/([\w\.]+)/i, // Opera > 9.80 + /(opera)[\/\s]+([\w\.]+)/i // Opera < 9.80 - /\s(opr)\/((\d+)?[\w\.]+)/i // Opera Webkit - ], [[NAME, 'Opera'], VERSION, MAJOR], [ + ], [NAME, VERSION], [ + + /\s(opr)\/([\w\.]+)/i // Opera Webkit + ], [[NAME, 'Opera'], VERSION], [ // Mixed - /(kindle)\/((\d+)?[\w\.]+)/i, // Kindle - /(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?((\d+)?[\w\.]+)*/i, + /(kindle)\/([\w\.]+)/i, // Kindle + /(lunascape|maxthon|netfront|jasmine|blazer)[\/\s]?([\w\.]+)*/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer // Trident based - /(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?((\d+)?[\w\.]*)/i, + /(avant\s|iemobile|slim|baidu)(?:browser)?[\/\s]?([\w\.]*)/i, // Avant/IEMobile/SlimBrowser/Baidu - /(?:ms|\()(ie)\s((\d+)?[\w\.]+)/i, // Internet Explorer + /(?:ms|\()(ie)\s([\w\.]+)/i, // Internet Explorer // Webkit/KHTML based - /(rekonq)((?:\/)[\w\.]+)*/i, // Rekonq - /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron)\/((\d+)?[\w\.-]+)/i + /(rekonq)\/([\w\.]+)*/i, // Rekonq + /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi)\/([\w\.-]+)/i // Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron - ], [NAME, VERSION, MAJOR], [ + ], [NAME, VERSION], [ - /(trident).+rv[:\s]((\d+)?[\w\.]+).+like\sgecko/i // IE11 - ], [[NAME, 'IE'], VERSION, MAJOR], [ + /(trident).+rv[:\s]([\w\.]+).+like\sgecko/i // IE11 + ], [[NAME, 'IE'], VERSION], [ - /(yabrowser)\/((\d+)?[\w\.]+)/i // Yandex - ], [[NAME, 'Yandex'], VERSION, MAJOR], [ + /(edge)\/((\d+)?[\w\.]+)/i // Microsoft Edge + ], [NAME, VERSION], [ - /(comodo_dragon)\/((\d+)?[\w\.]+)/i // Comodo Dragon - ], [[NAME, /_/g, ' '], VERSION, MAJOR], [ + /(yabrowser)\/([\w\.]+)/i // Yandex + ], [[NAME, 'Yandex'], VERSION], [ - /(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?((\d+)?[\w\.]+)/i + /(comodo_dragon)\/([\w\.]+)/i // Comodo Dragon + ], [[NAME, /_/g, ' '], VERSION], [ + + /(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i, // Chrome/OmniWeb/Arora/Tizen/Nokia - ], [NAME, VERSION, MAJOR], [ + /(uc\s?browser|qqbrowser)[\/\s]?([\w\.]+)/i + // UCBrowser/QQBrowser + ], [NAME, VERSION], [ - /(dolfin)\/((\d+)?[\w\.]+)/i // Dolphin - ], [[NAME, 'Dolphin'], VERSION, MAJOR], [ + /(dolfin)\/([\w\.]+)/i // Dolphin + ], [[NAME, 'Dolphin'], VERSION], [ - /((?:android.+)crmo|crios)\/((\d+)?[\w\.]+)/i // Chrome for Android/iOS - ], [[NAME, 'Chrome'], VERSION, MAJOR], [ + /((?:android.+)crmo|crios)\/([\w\.]+)/i // Chrome for Android/iOS + ], [[NAME, 'Chrome'], VERSION], [ - /((?:android.+))version\/((\d+)?[\w\.]+)\smobile\ssafari/i // Android Browser - ], [[NAME, 'Android Browser'], VERSION, MAJOR], [ + /XiaoMi\/MiuiBrowser\/([\w\.]+)/i // MIUI Browser + ], [VERSION, [NAME, 'MIUI Browser']], [ - /version\/((\d+)?[\w\.]+).+?mobile\/\w+\s(safari)/i // Mobile Safari - ], [VERSION, MAJOR, [NAME, 'Mobile Safari']], [ + /android.+version\/([\w\.]+)\s+(?:mobile\s?safari|safari)/i // Android Browser + ], [VERSION, [NAME, 'Android Browser']], [ - /version\/((\d+)?[\w\.]+).+?(mobile\s?safari|safari)/i // Safari & Safari Mobile - ], [VERSION, MAJOR, NAME], [ + /FBAV\/([\w\.]+);/i // Facebook App for iOS + ], [VERSION, [NAME, 'Facebook']], [ - /webkit.+?(mobile\s?safari|safari)((\/[\w\.]+))/i // Safari < 3.0 - ], [NAME, [MAJOR, mapper.str, maps.browser.oldsafari.major], [VERSION, mapper.str, maps.browser.oldsafari.version]], [ + /version\/([\w\.]+).+?mobile\/\w+\s(safari)/i // Mobile Safari + ], [VERSION, [NAME, 'Mobile Safari']], [ - /(konqueror)\/((\d+)?[\w\.]+)/i, // Konqueror - /(webkit|khtml)\/((\d+)?[\w\.]+)/i - ], [NAME, VERSION, MAJOR], [ + /version\/([\w\.]+).+?(mobile\s?safari|safari)/i // Safari & Safari Mobile + ], [VERSION, NAME], [ + + /webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i // Safari < 3.0 + ], [NAME, [VERSION, mapper.str, maps.browser.oldsafari.version]], [ + + /(konqueror)\/([\w\.]+)/i, // Konqueror + /(webkit|khtml)\/([\w\.]+)/i + ], [NAME, VERSION], [ // Gecko based - /(navigator|netscape)\/((\d+)?[\w\.-]+)/i // Netscape - ], [[NAME, 'Netscape'], VERSION, MAJOR], [ + /(navigator|netscape)\/([\w\.-]+)/i // Netscape + ], [[NAME, 'Netscape'], VERSION], [ /(swiftfox)/i, // Swiftfox - /(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?((\d+)?[\w\.\+]+)/i, + /(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i, // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror - /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/((\d+)?[\w\.-]+)/i, + /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix)\/([\w\.-]+)/i, // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix - /(mozilla)\/((\d+)?[\w\.]+).+rv\:.+gecko\/\d+/i, // Mozilla + /(mozilla)\/([\w\.]+).+rv\:.+gecko\/\d+/i, // Mozilla // Other - /(uc\s?browser|polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|qqbrowser)[\/\s]?((\d+)?[\w\.]+)/i, - // UCBrowser/Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/QQBrowser - /(links)\s\(((\d+)?[\w\.]+)/i, // Links - /(gobrowser)\/?((\d+)?[\w\.]+)*/i, // GoBrowser - /(ice\s?browser)\/v?((\d+)?[\w\._]+)/i, // ICE Browser - /(mosaic)[\/\s]((\d+)?[\w\.]+)/i // Mosaic - ], [NAME, VERSION, MAJOR] + /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf)[\/\s]?([\w\.]+)/i, + // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf + /(links)\s\(([\w\.]+)/i, // Links + /(gobrowser)\/?([\w\.]+)*/i, // GoBrowser + /(ice\s?browser)\/v?([\w\._]+)/i, // ICE Browser + /(mosaic)[\/\s]([\w\.]+)/i // Mosaic + ], [NAME, VERSION] ], engine : [[ + /windows.+\sedge\/([\w\.]+)/i // EdgeHTML + ], [VERSION, [NAME, 'EdgeHTML']], [ + /(presto)\/([\w\.]+)/i, // Presto /(webkit|trident|netfront|netsurf|amaya|lynx|w3m)\/([\w\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m /(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i, // KHTML/Tasman/Links @@ -1048,6 +818,8 @@ define("moxie/core/utils/Env", [ os : [[ // Windows based + /microsoft\s(windows)\s(vista|xp)/i // Windows (iTunes) + ], [NAME, VERSION], [ /(windows)\snt\s6\.2;\s(arm)/i, // Windows RT /(windows\sphone(?:\sos)*|windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)/i ], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [ @@ -1058,12 +830,15 @@ define("moxie/core/utils/Env", [ /\((bb)(10);/i // BlackBerry 10 ], [[NAME, 'BlackBerry'], VERSION], [ /(blackberry)\w*\/?([\w\.]+)*/i, // Blackberry - /(tizen)\/([\w\.]+)/i, // Tizen - /(android|webos|palm\os|qnx|bada|rim\stablet\sos|meego)[\/\s-]?([\w\.]+)*/i - // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo + /(tizen)[\/\s]([\w\.]+)/i, // Tizen + /(android|webos|palm\os|qnx|bada|rim\stablet\sos|meego|contiki)[\/\s-]?([\w\.]+)*/i, + // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki + /linux;.+(sailfish);/i // Sailfish OS ], [NAME, VERSION], [ /(symbian\s?os|symbos|s60(?=;))[\/\s-]?([\w\.]+)*/i // Symbian - ], [[NAME, 'Symbian'], VERSION],[ + ], [[NAME, 'Symbian'], VERSION], [ + /\((series40);/i // Series 40 + ], [NAME], [ /mozilla.+\(mobile;.+gecko.+firefox/i // Firefox OS ], [[NAME, 'Firefox OS'], VERSION], [ @@ -1072,9 +847,10 @@ define("moxie/core/utils/Env", [ // GNU/Linux based /(mint)[\/\s\(]?(\w+)*/i, // Mint - /(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk)[\/\s-]?([\w\.-]+)*/i, + /(mageia|vectorlinux)[;\s]/i, // Mageia/VectorLinux + /(joli|[kxln]?ubuntu|debian|[open]*suse|gentoo|arch|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus)[\/\s-]?([\w\.-]+)*/i, // Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware - // Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk + // Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus /(hurd|linux)\s?([\w\.]+)*/i, // Hurd/Linux /(gnu)\s?([\w\.]+)*/i // GNU ], [NAME, VERSION], [ @@ -1093,14 +869,16 @@ define("moxie/core/utils/Env", [ /(ip[honead]+)(?:.*os\s*([\w]+)*\slike\smac|;\sopera)/i // iOS ], [[NAME, 'iOS'], [VERSION, /_/g, '.']], [ - /(mac\sos\sx)\s?([\w\s\.]+\w)*/i // Mac OS - ], [NAME, [VERSION, /_/g, '.']], [ + /(mac\sos\sx)\s?([\w\s\.]+\w)*/i, + /(macintosh|mac(?=_powerpc)\s)/i // Mac OS + ], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [ // Other + /((?:open)?solaris)[\/\s-]?([\w\.]+)*/i, // Solaris /(haiku)\s(\w+)/i, // Haiku /(aix)\s((\d)(?=\.|\)|\s)[\w\.]*)*/i, // AIX - /(macintosh|mac(?=_powerpc)|plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos)/i, - // Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS + /(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms)/i, + // Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS /(unix)\s?([\w\.]+)*/i // UNIX ], [NAME, VERSION] ] @@ -1143,7 +921,7 @@ define("moxie/core/utils/Env", [ this.setUA(ua); }; - return new UAParser().getResult(); + return UAParser; })(); @@ -1333,6 +1111,10 @@ define("moxie/core/utils/Env", [ }, use_fileinput: function() { + if (navigator.userAgent.match(/(Android (1.0|1.1|1.5|1.6|2.0|2.1))|(Windows Phone (OS 7|8.0))|(XBLWP)|(ZuneWP)|(w(eb)?OSBrowser)|(webOS)|(Kindle\/(1.0|2.0|2.5|3.0))/)) { + return false; + } + var el = document.createElement('input'); el.setAttribute('type', 'file'); return !el.disabled; @@ -1347,13 +1129,18 @@ define("moxie/core/utils/Env", [ }()); + var uaResult = new UAParser().getResult(); + + var Env = { can: can, + + uaParser: UAParser, - browser: UAParser.browser.name, - version: parseFloat(UAParser.browser.major), - os: UAParser.os.name, // everybody intuitively types it in a lowercase for some reason - osVersion: UAParser.os.version, + browser: uaResult.browser.name, + version: uaResult.browser.version, + os: uaResult.os.name, // everybody intuitively types it in a lowercase for some reason + osVersion: uaResult.os.version, verComp: version_compare, @@ -1366,9 +1153,308 @@ define("moxie/core/utils/Env", [ // @deprecated Use `Env.os` instead Env.OS = Env.os; + if (MXI_DEBUG) { + Env.debug = { + runtime: true, + events: false + }; + + Env.log = function() { + + function logObj(data) { + // TODO: this should recursively print out the object in a pretty way + console.appendChild(document.createTextNode(data + "\n")); + } + + var data = arguments[0]; + + if (Basic.typeOf(data) === 'string') { + data = Basic.sprintf.apply(this, arguments); + } + + if (window && window.console && window.console.log) { + window.console.log(data); + } else if (document) { + var console = document.getElementById('moxie-console'); + if (!console) { + console = document.createElement('pre'); + console.id = 'moxie-console'; + //console.style.display = 'none'; + document.body.appendChild(console); + } + + if (Basic.inArray(Basic.typeOf(data), ['object', 'array']) !== -1) { + logObj(data); + } else { + console.appendChild(document.createTextNode(data + "\n")); + } + } + }; + } + return Env; }); +// Included from: src/javascript/core/I18n.js + +/** + * I18n.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define("moxie/core/I18n", [ + "moxie/core/utils/Basic" +], function(Basic) { + var i18n = {}; + + return { + /** + * Extends the language pack object with new items. + * + * @param {Object} pack Language pack items to add. + * @return {Object} Extended language pack object. + */ + addI18n: function(pack) { + return Basic.extend(i18n, pack); + }, + + /** + * Translates the specified string by checking for the english string in the language pack lookup. + * + * @param {String} str String to look for. + * @return {String} Translated string or the input string if it wasn't found. + */ + translate: function(str) { + return i18n[str] || str; + }, + + /** + * Shortcut for translate function + * + * @param {String} str String to look for. + * @return {String} Translated string or the input string if it wasn't found. + */ + _: function(str) { + return this.translate(str); + }, + + /** + * Pseudo sprintf implementation - simple way to replace tokens with specified values. + * + * @param {String} str String with tokens + * @return {String} String with replaced tokens + */ + sprintf: function(str) { + var args = [].slice.call(arguments, 1); + + return str.replace(/%[a-z]/g, function() { + var value = args.shift(); + return Basic.typeOf(value) !== 'undefined' ? value : ''; + }); + } + }; +}); + +// Included from: src/javascript/core/utils/Mime.js + +/** + * Mime.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define("moxie/core/utils/Mime", [ + "moxie/core/utils/Basic", + "moxie/core/I18n" +], function(Basic, I18n) { + + var mimeData = "" + + "application/msword,doc dot," + + "application/pdf,pdf," + + "application/pgp-signature,pgp," + + "application/postscript,ps ai eps," + + "application/rtf,rtf," + + "application/vnd.ms-excel,xls xlb," + + "application/vnd.ms-powerpoint,ppt pps pot," + + "application/zip,zip," + + "application/x-shockwave-flash,swf swfl," + + "application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx," + + "application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx," + + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx," + + "application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx," + + "application/vnd.openxmlformats-officedocument.presentationml.template,potx," + + "application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx," + + "application/x-javascript,js," + + "application/json,json," + + "audio/mpeg,mp3 mpga mpega mp2," + + "audio/x-wav,wav," + + "audio/x-m4a,m4a," + + "audio/ogg,oga ogg," + + "audio/aiff,aiff aif," + + "audio/flac,flac," + + "audio/aac,aac," + + "audio/ac3,ac3," + + "audio/x-ms-wma,wma," + + "image/bmp,bmp," + + "image/gif,gif," + + "image/jpeg,jpg jpeg jpe," + + "image/photoshop,psd," + + "image/png,png," + + "image/svg+xml,svg svgz," + + "image/tiff,tiff tif," + + "text/plain,asc txt text diff log," + + "text/html,htm html xhtml," + + "text/css,css," + + "text/csv,csv," + + "text/rtf,rtf," + + "video/mpeg,mpeg mpg mpe m2v," + + "video/quicktime,qt mov," + + "video/mp4,mp4," + + "video/x-m4v,m4v," + + "video/x-flv,flv," + + "video/x-ms-wmv,wmv," + + "video/avi,avi," + + "video/webm,webm," + + "video/3gpp,3gpp 3gp," + + "video/3gpp2,3g2," + + "video/vnd.rn-realvideo,rv," + + "video/ogg,ogv," + + "video/x-matroska,mkv," + + "application/vnd.oasis.opendocument.formula-template,otf," + + "application/octet-stream,exe"; + + + var Mime = { + + mimes: {}, + + extensions: {}, + + // Parses the default mime types string into a mimes and extensions lookup maps + addMimeType: function (mimeData) { + var items = mimeData.split(/,/), i, ii, ext; + + for (i = 0; i < items.length; i += 2) { + ext = items[i + 1].split(/ /); + + // extension to mime lookup + for (ii = 0; ii < ext.length; ii++) { + this.mimes[ext[ii]] = items[i]; + } + // mime to extension lookup + this.extensions[items[i]] = ext; + } + }, + + + extList2mimes: function (filters, addMissingExtensions) { + var self = this, ext, i, ii, type, mimes = []; + + // convert extensions to mime types list + for (i = 0; i < filters.length; i++) { + ext = filters[i].extensions.split(/\s*,\s*/); + + for (ii = 0; ii < ext.length; ii++) { + + // if there's an asterisk in the list, then accept attribute is not required + if (ext[ii] === '*') { + return []; + } + + type = self.mimes[ext[ii]]; + if (type && Basic.inArray(type, mimes) === -1) { + mimes.push(type); + } + + // future browsers should filter by extension, finally + if (addMissingExtensions && /^\w+$/.test(ext[ii])) { + mimes.push('.' + ext[ii]); + } else if (!type) { + // if we have no type in our map, then accept all + return []; + } + } + } + return mimes; + }, + + + mimes2exts: function(mimes) { + var self = this, exts = []; + + Basic.each(mimes, function(mime) { + if (mime === '*') { + exts = []; + return false; + } + + // check if this thing looks like mime type + var m = mime.match(/^(\w+)\/(\*|\w+)$/); + if (m) { + if (m[2] === '*') { + // wildcard mime type detected + Basic.each(self.extensions, function(arr, mime) { + if ((new RegExp('^' + m[1] + '/')).test(mime)) { + [].push.apply(exts, self.extensions[mime]); + } + }); + } else if (self.extensions[mime]) { + [].push.apply(exts, self.extensions[mime]); + } + } + }); + return exts; + }, + + + mimes2extList: function(mimes) { + var accept = [], exts = []; + + if (Basic.typeOf(mimes) === 'string') { + mimes = Basic.trim(mimes).split(/\s*,\s*/); + } + + exts = this.mimes2exts(mimes); + + accept.push({ + title: I18n.translate('Files'), + extensions: exts.length ? exts.join(',') : '*' + }); + + // save original mimes string + accept.mimes = mimes; + + return accept; + }, + + + getFileExtension: function(fileName) { + var matches = fileName && fileName.match(/\.([^.]+)$/); + if (matches) { + return matches[1].toLowerCase(); + } + return ''; + }, + + getFileMime: function(fileName) { + return this.mimes[this.getFileExtension(fileName)] || ''; + } + }; + + Mime.addMimeType(mimeData); + + return Mime; +}); + // Included from: src/javascript/core/utils/Dom.js /** @@ -1615,7 +1701,8 @@ define('moxie/core/Exceptions', [ ImageError: (function() { var namecodes = { WRONG_FORMAT: 1, - MAX_RESOLUTION_ERR: 2 + MAX_RESOLUTION_ERR: 2, + INVALID_META_ERR: 3 }; function ImageError(code) { @@ -1723,9 +1810,10 @@ define('moxie/core/Exceptions', [ */ define('moxie/core/EventTarget', [ + 'moxie/core/utils/Env', 'moxie/core/Exceptions', 'moxie/core/utils/Basic' -], function(x, Basic) { +], function(Env, x, Basic) { /** Parent object for all event dispatching components and objects @@ -1768,6 +1856,11 @@ define('moxie/core/EventTarget', [ */ addEventListener: function(type, fn, priority, scope) { var self = this, list; + + // without uid no event handlers can be added, so make sure we got one + if (!this.hasOwnProperty('uid')) { + this.uid = Basic.guid('uid_'); + } type = Basic.trim(type); @@ -1799,7 +1892,8 @@ define('moxie/core/EventTarget', [ @return {Mixed} Returns a handler if it was found and false, if - not */ hasEventListener: function(type) { - return type ? !!(eventpool[this.uid] && eventpool[this.uid][type]) : !!eventpool[this.uid]; + var list = type ? eventpool[this.uid] && eventpool[this.uid][type] : eventpool[this.uid]; + return list ? list : false; }, /** @@ -1902,6 +1996,10 @@ define('moxie/core/EventTarget', [ evt.type = type; args.unshift(evt); + if (MXI_DEBUG && Env.debug.events) { + Env.log("Event '%s' fired on %u", evt.type, uid); + } + // Dispatch event to all listeners var queue = []; Basic.each(list, function(handler) { @@ -1969,30 +2067,30 @@ define('moxie/core/EventTarget', [ return this.dispatchEvent.apply(this, arguments); }, - - /** - Converts properties of on[event] type to corresponding event handlers, - is used to avoid extra hassle around the process of calling them back - @method convertEventPropsToHandlers + /** + Handle properties of on[event] type. + + @method handleEventProps @private */ - convertEventPropsToHandlers: function(handlers) { - var h; - - if (Basic.typeOf(handlers) !== 'array') { - handlers = [handlers]; - } + handleEventProps: function(dispatches) { + var self = this; - for (var i = 0; i < handlers.length; i++) { - h = 'on' + handlers[i]; - - if (Basic.typeOf(this[h]) === 'function') { - this.addEventListener(handlers[i], this[h]); - } else if (Basic.typeOf(this[h]) === 'undefined') { - this[h] = null; // object must have defined event properties, even if it doesn't make use of them + this.bind(dispatches.join(' '), function(e) { + var prop = 'on' + e.type.toLowerCase(); + if (Basic.typeOf(this[prop]) === 'function') { + this[prop].apply(this, arguments); } - } + }); + + // object must have defined event properties, even if it doesn't make use of them + Basic.each(dispatches, function(prop) { + prop = 'on' + prop.toLowerCase(prop); + if (Basic.typeOf(self[prop]) === 'undefined') { + self[prop] = null; + } + }); } }); @@ -2003,186 +2101,6 @@ define('moxie/core/EventTarget', [ return EventTarget; }); -// Included from: src/javascript/core/utils/Encode.js - -/** - * Encode.js - * - * Copyright 2013, Moxiecode Systems AB - * Released under GPL License. - * - * License: http://www.plupload.com/license - * Contributing: http://www.plupload.com/contributing - */ - -define('moxie/core/utils/Encode', [], function() { - - /** - Encode string with UTF-8 - - @method utf8_encode - @for Utils - @static - @param {String} str String to encode - @return {String} UTF-8 encoded string - */ - var utf8_encode = function(str) { - return unescape(encodeURIComponent(str)); - }; - - /** - Decode UTF-8 encoded string - - @method utf8_decode - @static - @param {String} str String to decode - @return {String} Decoded string - */ - var utf8_decode = function(str_data) { - return decodeURIComponent(escape(str_data)); - }; - - /** - Decode Base64 encoded string (uses browser's default method if available), - from: https://raw.github.com/kvz/phpjs/master/functions/url/base64_decode.js - - @method atob - @static - @param {String} data String to decode - @return {String} Decoded string - */ - var atob = function(data, utf8) { - if (typeof(window.atob) === 'function') { - return utf8 ? utf8_decode(window.atob(data)) : window.atob(data); - } - - // http://kevin.vanzonneveld.net - // + original by: Tyler Akins (http://rumkin.com) - // + improved by: Thunder.m - // + input by: Aman Gupta - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + bugfixed by: Onno Marsman - // + bugfixed by: Pellentesque Malesuada - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + input by: Brett Zamir (http://brett-zamir.me) - // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // * example 1: base64_decode('S2V2aW4gdmFuIFpvbm5ldmVsZA=='); - // * returns 1: 'Kevin van Zonneveld' - // mozilla has this native - // - but breaks in 2.0.0.12! - //if (typeof this.window.atob == 'function') { - // return atob(data); - //} - var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, - ac = 0, - dec = "", - tmp_arr = []; - - if (!data) { - return data; - } - - data += ''; - - do { // unpack four hexets into three octets using index points in b64 - h1 = b64.indexOf(data.charAt(i++)); - h2 = b64.indexOf(data.charAt(i++)); - h3 = b64.indexOf(data.charAt(i++)); - h4 = b64.indexOf(data.charAt(i++)); - - bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; - - o1 = bits >> 16 & 0xff; - o2 = bits >> 8 & 0xff; - o3 = bits & 0xff; - - if (h3 == 64) { - tmp_arr[ac++] = String.fromCharCode(o1); - } else if (h4 == 64) { - tmp_arr[ac++] = String.fromCharCode(o1, o2); - } else { - tmp_arr[ac++] = String.fromCharCode(o1, o2, o3); - } - } while (i < data.length); - - dec = tmp_arr.join(''); - - return utf8 ? utf8_decode(dec) : dec; - }; - - /** - Base64 encode string (uses browser's default method if available), - from: https://raw.github.com/kvz/phpjs/master/functions/url/base64_encode.js - - @method btoa - @static - @param {String} data String to encode - @return {String} Base64 encoded string - */ - var btoa = function(data, utf8) { - if (utf8) { - utf8_encode(data); - } - - if (typeof(window.btoa) === 'function') { - return window.btoa(data); - } - - // http://kevin.vanzonneveld.net - // + original by: Tyler Akins (http://rumkin.com) - // + improved by: Bayron Guevara - // + improved by: Thunder.m - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + bugfixed by: Pellentesque Malesuada - // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) - // + improved by: RafaÅ‚ Kukawski (http://kukawski.pl) - // * example 1: base64_encode('Kevin van Zonneveld'); - // * returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA==' - // mozilla has this native - // - but breaks in 2.0.0.12! - var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, - ac = 0, - enc = "", - tmp_arr = []; - - if (!data) { - return data; - } - - do { // pack three octets into four hexets - o1 = data.charCodeAt(i++); - o2 = data.charCodeAt(i++); - o3 = data.charCodeAt(i++); - - bits = o1 << 16 | o2 << 8 | o3; - - h1 = bits >> 18 & 0x3f; - h2 = bits >> 12 & 0x3f; - h3 = bits >> 6 & 0x3f; - h4 = bits & 0x3f; - - // use hexets to index into b64, and append result to encoded string - tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4); - } while (i < data.length); - - enc = tmp_arr.join(''); - - var r = data.length % 3; - - return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3); - }; - - - return { - utf8_encode: utf8_encode, - utf8_decode: utf8_decode, - atob: atob, - btoa: btoa - }; -}); - // Included from: src/javascript/runtime/Runtime.js /** @@ -2196,10 +2114,11 @@ define('moxie/core/utils/Encode', [], function() { */ define('moxie/runtime/Runtime', [ + "moxie/core/utils/Env", "moxie/core/utils/Basic", "moxie/core/utils/Dom", "moxie/core/EventTarget" -], function(Basic, Dom, EventTarget) { +], function(Env, Basic, Dom, EventTarget) { var runtimeConstructors = {}, runtimes = {}; /** @@ -2304,6 +2223,10 @@ define('moxie/runtime/Runtime', [ if (options.preferred_caps) { defaultMode = Runtime.getMode(modeCaps, options.preferred_caps, defaultMode); } + + if (MXI_DEBUG && Env.debug.runtime) { + Env.log("\tdefault mode: %s", defaultMode); + } // small extension factory here (is meant to be extended with actual extensions constructors) _shim = (function() { @@ -2715,11 +2638,20 @@ define('moxie/runtime/Runtime', [ } if (!mode) { - mode = capMode; + mode = capMode; } else if (!(mode = Basic.arrayIntersect(mode, capMode))) { // if cap requires conflicting mode - runtime cannot fulfill required caps + + if (MXI_DEBUG && Env.debug.runtime) { + Env.log("\t\t%c: %v (conflicting mode requested: %s)", cap, value, capMode); + } + return (mode = false); - } + } + } + + if (MXI_DEBUG && Env.debug.runtime) { + Env.log("\t\t%c: %v (compatible modes: %s)", cap, value, mode); } }); @@ -2785,10 +2717,11 @@ define('moxie/runtime/Runtime', [ */ define('moxie/runtime/RuntimeClient', [ + 'moxie/core/utils/Env', 'moxie/core/Exceptions', 'moxie/core/utils/Basic', 'moxie/runtime/Runtime' -], function(x, Basic, Runtime) { +], function(Env, x, Basic, Runtime) { /** Set of methods and properties, required by a component to acquire ability to connect to a runtime @@ -2802,6 +2735,7 @@ define('moxie/runtime/RuntimeClient', [ Connects to the runtime specified by the options. Will either connect to existing runtime or create a new one. Increments number of clients connected to the specified runtime. + @private @method connectRuntime @param {Mixed} options Can be a runtme uid or a set of key-value pairs defining requirements and pre-requisites */ @@ -2818,13 +2752,18 @@ define('moxie/runtime/RuntimeClient', [ return; } - type = items.shift(); + type = items.shift().toLowerCase(); constructor = Runtime.getConstructor(type); if (!constructor) { initialize(items); return; } + if (MXI_DEBUG && Env.debug.runtime) { + Env.log("Trying runtime: %s", type); + Env.log(options); + } + // try initializing the runtime runtime = new constructor(options); @@ -2832,6 +2771,10 @@ define('moxie/runtime/RuntimeClient', [ // mark runtime as initialized runtime.initialized = true; + if (MXI_DEBUG && Env.debug.runtime) { + Env.log("Runtime '%s' initialized", runtime.type); + } + // jailbreak ... setTimeout(function() { runtime.clients++; @@ -2841,12 +2784,20 @@ define('moxie/runtime/RuntimeClient', [ }); runtime.bind('Error', function() { + if (MXI_DEBUG && Env.debug.runtime) { + Env.log("Runtime '%s' failed to initialize", runtime.type); + } + runtime.destroy(); // runtime cannot destroy itself from inside at a right moment, thus we do it here initialize(items); }); /*runtime.bind('Exception', function() { });*/ + if (MXI_DEBUG && Env.debug.runtime) { + Env.log("\tselected mode: %s", runtime.mode); + } + // check if runtime managed to pick-up operational mode if (!runtime.mode) { runtime.trigger('Error'); @@ -2878,6 +2829,23 @@ define('moxie/runtime/RuntimeClient', [ initialize((options.runtime_order || Runtime.order).split(/\s*,\s*/)); }, + + /** + Disconnects from the runtime. Decrements number of clients connected to the specified runtime. + + @private + @method disconnectRuntime + */ + disconnectRuntime: function() { + if (runtime && --runtime.clients <= 0) { + runtime.destroy(); + } + + // once the component is disconnected, it shouldn't have access to the runtime + runtime = null; + }, + + /** Returns the runtime to which the client is currently connected. @@ -2888,20 +2856,22 @@ define('moxie/runtime/RuntimeClient', [ if (runtime && runtime.uid) { return runtime; } - runtime = null; // make sure we do not leave zombies rambling around - return null; + return runtime = null; // make sure we do not leave zombies rambling around }, - /** - Disconnects from the runtime. Decrements number of clients connected to the specified runtime. - @method disconnectRuntime + /** + Handy shortcut to safely invoke runtime extension methods. + + @private + @method exec + @return {Mixed} Whatever runtime extension method returns */ - disconnectRuntime: function() { - if (runtime && --runtime.clients <= 0) { - runtime.destroy(); - runtime = null; + exec: function() { + if (runtime) { + return runtime.exec.apply(this, arguments); } + return null; } }); @@ -2910,6 +2880,515 @@ define('moxie/runtime/RuntimeClient', [ }); +// Included from: src/javascript/file/FileInput.js + +/** + * FileInput.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/file/FileInput', [ + 'moxie/core/utils/Basic', + 'moxie/core/utils/Env', + 'moxie/core/utils/Mime', + 'moxie/core/utils/Dom', + 'moxie/core/Exceptions', + 'moxie/core/EventTarget', + 'moxie/core/I18n', + 'moxie/runtime/Runtime', + 'moxie/runtime/RuntimeClient' +], function(Basic, Env, Mime, Dom, x, EventTarget, I18n, Runtime, RuntimeClient) { + /** + Provides a convenient way to create cross-browser file-picker. Generates file selection dialog on click, + converts selected files to _File_ objects, to be used in conjunction with _Image_, preloaded in memory + with _FileReader_ or uploaded to a server through _XMLHttpRequest_. + + @class FileInput + @constructor + @extends EventTarget + @uses RuntimeClient + @param {Object|String|DOMElement} options If options is string or node, argument is considered as _browse\_button_. + @param {String|DOMElement} options.browse_button DOM Element to turn into file picker. + @param {Array} [options.accept] Array of mime types to accept. By default accepts all. + @param {String} [options.file='file'] Name of the file field (not the filename). + @param {Boolean} [options.multiple=false] Enable selection of multiple files. + @param {Boolean} [options.directory=false] Turn file input into the folder input (cannot be both at the same time). + @param {String|DOMElement} [options.container] DOM Element to use as a container for file-picker. Defaults to parentNode + for _browse\_button_. + @param {Object|String} [options.required_caps] Set of required capabilities, that chosen runtime must support. + + @example +
        + Browse... +
        + + + */ + var dispatches = [ + /** + Dispatched when runtime is connected and file-picker is ready to be used. + + @event ready + @param {Object} event + */ + 'ready', + + /** + Dispatched right after [ready](#event_ready) event, and whenever [refresh()](#method_refresh) is invoked. + Check [corresponding documentation entry](#method_refresh) for more info. + + @event refresh + @param {Object} event + */ + + /** + Dispatched when selection of files in the dialog is complete. + + @event change + @param {Object} event + */ + 'change', + + 'cancel', // TODO: might be useful + + /** + Dispatched when mouse cursor enters file-picker area. Can be used to style element + accordingly. + + @event mouseenter + @param {Object} event + */ + 'mouseenter', + + /** + Dispatched when mouse cursor leaves file-picker area. Can be used to style element + accordingly. + + @event mouseleave + @param {Object} event + */ + 'mouseleave', + + /** + Dispatched when functional mouse button is pressed on top of file-picker area. + + @event mousedown + @param {Object} event + */ + 'mousedown', + + /** + Dispatched when functional mouse button is released on top of file-picker area. + + @event mouseup + @param {Object} event + */ + 'mouseup' + ]; + + function FileInput(options) { + if (MXI_DEBUG) { + Env.log("Instantiating FileInput..."); + } + + var self = this, + container, browseButton, defaults; + + // if flat argument passed it should be browse_button id + if (Basic.inArray(Basic.typeOf(options), ['string', 'node']) !== -1) { + options = { browse_button : options }; + } + + // this will help us to find proper default container + browseButton = Dom.get(options.browse_button); + if (!browseButton) { + // browse button is required + throw new x.DOMException(x.DOMException.NOT_FOUND_ERR); + } + + // figure out the options + defaults = { + accept: [{ + title: I18n.translate('All Files'), + extensions: '*' + }], + name: 'file', + multiple: false, + required_caps: false, + container: browseButton.parentNode || document.body + }; + + options = Basic.extend({}, defaults, options); + + // convert to object representation + if (typeof(options.required_caps) === 'string') { + options.required_caps = Runtime.parseCaps(options.required_caps); + } + + // normalize accept option (could be list of mime types or array of title/extensions pairs) + if (typeof(options.accept) === 'string') { + options.accept = Mime.mimes2extList(options.accept); + } + + container = Dom.get(options.container); + // make sure we have container + if (!container) { + container = document.body; + } + + // make container relative, if it's not + if (Dom.getStyle(container, 'position') === 'static') { + container.style.position = 'relative'; + } + + container = browseButton = null; // IE + + RuntimeClient.call(self); + + Basic.extend(self, { + /** + Unique id of the component + + @property uid + @protected + @readOnly + @type {String} + @default UID + */ + uid: Basic.guid('uid_'), + + /** + Unique id of the connected runtime, if any. + + @property ruid + @protected + @type {String} + */ + ruid: null, + + /** + Unique id of the runtime container. Useful to get hold of it for various manipulations. + + @property shimid + @protected + @type {String} + */ + shimid: null, + + /** + Array of selected mOxie.File objects + + @property files + @type {Array} + @default null + */ + files: null, + + /** + Initializes the file-picker, connects it to runtime and dispatches event ready when done. + + @method init + */ + init: function() { + self.bind('RuntimeInit', function(e, runtime) { + self.ruid = runtime.uid; + self.shimid = runtime.shimid; + + self.bind("Ready", function() { + self.trigger("Refresh"); + }, 999); + + // re-position and resize shim container + self.bind('Refresh', function() { + var pos, size, browseButton, shimContainer; + + browseButton = Dom.get(options.browse_button); + shimContainer = Dom.get(runtime.shimid); // do not use runtime.getShimContainer(), since it will create container if it doesn't exist + + if (browseButton) { + pos = Dom.getPos(browseButton, Dom.get(options.container)); + size = Dom.getSize(browseButton); + + if (shimContainer) { + Basic.extend(shimContainer.style, { + top : pos.y + 'px', + left : pos.x + 'px', + width : size.w + 'px', + height : size.h + 'px' + }); + } + } + shimContainer = browseButton = null; + }); + + runtime.exec.call(self, 'FileInput', 'init', options); + }); + + // runtime needs: options.required_features, options.runtime_order and options.container + self.connectRuntime(Basic.extend({}, options, { + required_caps: { + select_file: true + } + })); + }, + + /** + Disables file-picker element, so that it doesn't react to mouse clicks. + + @method disable + @param {Boolean} [state=true] Disable component if - true, enable if - false + */ + disable: function(state) { + var runtime = this.getRuntime(); + if (runtime) { + runtime.exec.call(this, 'FileInput', 'disable', Basic.typeOf(state) === 'undefined' ? true : state); + } + }, + + + /** + Reposition and resize dialog trigger to match the position and size of browse_button element. + + @method refresh + */ + refresh: function() { + self.trigger("Refresh"); + }, + + + /** + Destroy component. + + @method destroy + */ + destroy: function() { + var runtime = this.getRuntime(); + if (runtime) { + runtime.exec.call(this, 'FileInput', 'destroy'); + this.disconnectRuntime(); + } + + if (Basic.typeOf(this.files) === 'array') { + // no sense in leaving associated files behind + Basic.each(this.files, function(file) { + file.destroy(); + }); + } + this.files = null; + + this.unbindAll(); + } + }); + + this.handleEventProps(dispatches); + } + + FileInput.prototype = EventTarget.instance; + + return FileInput; +}); + +// Included from: src/javascript/core/utils/Encode.js + +/** + * Encode.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/core/utils/Encode', [], function() { + + /** + Encode string with UTF-8 + + @method utf8_encode + @for Utils + @static + @param {String} str String to encode + @return {String} UTF-8 encoded string + */ + var utf8_encode = function(str) { + return unescape(encodeURIComponent(str)); + }; + + /** + Decode UTF-8 encoded string + + @method utf8_decode + @static + @param {String} str String to decode + @return {String} Decoded string + */ + var utf8_decode = function(str_data) { + return decodeURIComponent(escape(str_data)); + }; + + /** + Decode Base64 encoded string (uses browser's default method if available), + from: https://raw.github.com/kvz/phpjs/master/functions/url/base64_decode.js + + @method atob + @static + @param {String} data String to decode + @return {String} Decoded string + */ + var atob = function(data, utf8) { + if (typeof(window.atob) === 'function') { + return utf8 ? utf8_decode(window.atob(data)) : window.atob(data); + } + + // http://kevin.vanzonneveld.net + // + original by: Tyler Akins (http://rumkin.com) + // + improved by: Thunder.m + // + input by: Aman Gupta + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + bugfixed by: Onno Marsman + // + bugfixed by: Pellentesque Malesuada + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + input by: Brett Zamir (http://brett-zamir.me) + // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // * example 1: base64_decode('S2V2aW4gdmFuIFpvbm5ldmVsZA=='); + // * returns 1: 'Kevin van Zonneveld' + // mozilla has this native + // - but breaks in 2.0.0.12! + //if (typeof this.window.atob == 'function') { + // return atob(data); + //} + var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, + ac = 0, + dec = "", + tmp_arr = []; + + if (!data) { + return data; + } + + data += ''; + + do { // unpack four hexets into three octets using index points in b64 + h1 = b64.indexOf(data.charAt(i++)); + h2 = b64.indexOf(data.charAt(i++)); + h3 = b64.indexOf(data.charAt(i++)); + h4 = b64.indexOf(data.charAt(i++)); + + bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; + + o1 = bits >> 16 & 0xff; + o2 = bits >> 8 & 0xff; + o3 = bits & 0xff; + + if (h3 == 64) { + tmp_arr[ac++] = String.fromCharCode(o1); + } else if (h4 == 64) { + tmp_arr[ac++] = String.fromCharCode(o1, o2); + } else { + tmp_arr[ac++] = String.fromCharCode(o1, o2, o3); + } + } while (i < data.length); + + dec = tmp_arr.join(''); + + return utf8 ? utf8_decode(dec) : dec; + }; + + /** + Base64 encode string (uses browser's default method if available), + from: https://raw.github.com/kvz/phpjs/master/functions/url/base64_encode.js + + @method btoa + @static + @param {String} data String to encode + @return {String} Base64 encoded string + */ + var btoa = function(data, utf8) { + if (utf8) { + data = utf8_encode(data); + } + + if (typeof(window.btoa) === 'function') { + return window.btoa(data); + } + + // http://kevin.vanzonneveld.net + // + original by: Tyler Akins (http://rumkin.com) + // + improved by: Bayron Guevara + // + improved by: Thunder.m + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + bugfixed by: Pellentesque Malesuada + // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) + // + improved by: Rafał Kukawski (http://kukawski.pl) + // * example 1: base64_encode('Kevin van Zonneveld'); + // * returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA==' + // mozilla has this native + // - but breaks in 2.0.0.12! + var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, + ac = 0, + enc = "", + tmp_arr = []; + + if (!data) { + return data; + } + + do { // pack three octets into four hexets + o1 = data.charCodeAt(i++); + o2 = data.charCodeAt(i++); + o3 = data.charCodeAt(i++); + + bits = o1 << 16 | o2 << 8 | o3; + + h1 = bits >> 18 & 0x3f; + h2 = bits >> 12 & 0x3f; + h3 = bits >> 6 & 0x3f; + h4 = bits & 0x3f; + + // use hexets to index into b64, and append result to encoded string + tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4); + } while (i < data.length); + + enc = tmp_arr.join(''); + + var r = data.length % 3; + + return (r ? enc.slice(0, r - 3) : enc) + '==='.slice(r || 3); + }; + + + return { + utf8_encode: utf8_encode, + utf8_decode: utf8_decode, + atob: atob, + btoa: btoa + }; +}); + // Included from: src/javascript/file/Blob.js /** @@ -3044,10 +3523,10 @@ define('moxie/file/Blob', [ data = data || ''; // if dataUrl, convert to binary string - var matches = data.match(/^data:([^;]*);base64,/); - if (matches) { - this.type = matches[1]; - data = Encode.atob(data.substring(data.indexOf('base64,') + 7)); + if (data.substr(0, 5) == 'data:') { + var base64Offset = data.indexOf(';base64,'); + this.type = data.substring(5, base64Offset); + data = Encode.atob(data.substring(base64Offset + 8)); } this.size = data.length; @@ -3113,44 +3592,32 @@ define('moxie/file/File', [ @param {Object} file Object "Native" file object, as it is represented in the runtime */ function File(ruid, file) { - var name, type; - if (!file) { // avoid extra errors in case we overlooked something file = {}; } - // figure out the type - if (file.type && file.type !== '') { - type = file.type; - } else { - type = Mime.getFileMime(file.name); + Blob.apply(this, arguments); + + if (!this.type) { + this.type = Mime.getFileMime(file.name); } // sanitize file name or generate new one + var name; if (file.name) { name = file.name.replace(/\\/g, '/'); name = name.substr(name.lastIndexOf('/') + 1); - } else { - var prefix = type.split('/')[0]; + } else if (this.type) { + var prefix = this.type.split('/')[0]; name = Basic.guid((prefix !== '' ? prefix : 'file') + '_'); - if (Mime.extensions[type]) { - name += '.' + Mime.extensions[type][0]; // append proper extension if possible + if (Mime.extensions[this.type]) { + name += '.' + Mime.extensions[this.type][0]; // append proper extension if possible } } - - Blob.apply(this, arguments); + Basic.extend(this, { - /** - File mime type - - @property type - @type {String} - @default '' - */ - type: type || '', - /** File name @@ -3159,6 +3626,15 @@ define('moxie/file/File', [ @default UID */ name: name || Basic.guid('file_'), + + /** + Relative path to the file inside a directory + + @property relativePath + @type {String} + @default '' + */ + relativePath: '', /** Date of last modification @@ -3176,343 +3652,6 @@ define('moxie/file/File', [ return File; }); -// Included from: src/javascript/file/FileInput.js - -/** - * FileInput.js - * - * Copyright 2013, Moxiecode Systems AB - * Released under GPL License. - * - * License: http://www.plupload.com/license - * Contributing: http://www.plupload.com/contributing - */ - -define('moxie/file/FileInput', [ - 'moxie/core/utils/Basic', - 'moxie/core/utils/Mime', - 'moxie/core/utils/Dom', - 'moxie/core/Exceptions', - 'moxie/core/EventTarget', - 'moxie/core/I18n', - 'moxie/file/File', - 'moxie/runtime/Runtime', - 'moxie/runtime/RuntimeClient' -], function(Basic, Mime, Dom, x, EventTarget, I18n, File, Runtime, RuntimeClient) { - /** - Provides a convenient way to create cross-browser file-picker. Generates file selection dialog on click, - converts selected files to _File_ objects, to be used in conjunction with _Image_, preloaded in memory - with _FileReader_ or uploaded to a server through _XMLHttpRequest_. - - @class FileInput - @constructor - @extends EventTarget - @uses RuntimeClient - @param {Object|String|DOMElement} options If options is string or node, argument is considered as _browse\_button_. - @param {String|DOMElement} options.browse_button DOM Element to turn into file picker. - @param {Array} [options.accept] Array of mime types to accept. By default accepts all. - @param {String} [options.file='file'] Name of the file field (not the filename). - @param {Boolean} [options.multiple=false] Enable selection of multiple files. - @param {Boolean} [options.directory=false] Turn file input into the folder input (cannot be both at the same time). - @param {String|DOMElement} [options.container] DOM Element to use as a container for file-picker. Defaults to parentNode - for _browse\_button_. - @param {Object|String} [options.required_caps] Set of required capabilities, that chosen runtime must support. - - @example -
        - Browse... -
        - - - */ - var dispatches = [ - /** - Dispatched when runtime is connected and file-picker is ready to be used. - - @event ready - @param {Object} event - */ - 'ready', - - /** - Dispatched right after [ready](#event_ready) event, and whenever [refresh()](#method_refresh) is invoked. - Check [corresponding documentation entry](#method_refresh) for more info. - - @event refresh - @param {Object} event - */ - - /** - Dispatched when selection of files in the dialog is complete. - - @event change - @param {Object} event - */ - 'change', - - 'cancel', // TODO: might be useful - - /** - Dispatched when mouse cursor enters file-picker area. Can be used to style element - accordingly. - - @event mouseenter - @param {Object} event - */ - 'mouseenter', - - /** - Dispatched when mouse cursor leaves file-picker area. Can be used to style element - accordingly. - - @event mouseleave - @param {Object} event - */ - 'mouseleave', - - /** - Dispatched when functional mouse button is pressed on top of file-picker area. - - @event mousedown - @param {Object} event - */ - 'mousedown', - - /** - Dispatched when functional mouse button is released on top of file-picker area. - - @event mouseup - @param {Object} event - */ - 'mouseup' - ]; - - function FileInput(options) { - var self = this, - container, browseButton, defaults; - - // if flat argument passed it should be browse_button id - if (Basic.inArray(Basic.typeOf(options), ['string', 'node']) !== -1) { - options = { browse_button : options }; - } - - // this will help us to find proper default container - browseButton = Dom.get(options.browse_button); - if (!browseButton) { - // browse button is required - throw new x.DOMException(x.DOMException.NOT_FOUND_ERR); - } - - // figure out the options - defaults = { - accept: [{ - title: I18n.translate('All Files'), - extensions: '*' - }], - name: 'file', - multiple: false, - required_caps: false, - container: browseButton.parentNode || document.body - }; - - options = Basic.extend({}, defaults, options); - - // convert to object representation - if (typeof(options.required_caps) === 'string') { - options.required_caps = Runtime.parseCaps(options.required_caps); - } - - // normalize accept option (could be list of mime types or array of title/extensions pairs) - if (typeof(options.accept) === 'string') { - options.accept = Mime.mimes2extList(options.accept); - } - - container = Dom.get(options.container); - // make sure we have container - if (!container) { - container = document.body; - } - - // make container relative, if it's not - if (Dom.getStyle(container, 'position') === 'static') { - container.style.position = 'relative'; - } - - container = browseButton = null; // IE - - RuntimeClient.call(self); - - Basic.extend(self, { - /** - Unique id of the component - - @property uid - @protected - @readOnly - @type {String} - @default UID - */ - uid: Basic.guid('uid_'), - - /** - Unique id of the connected runtime, if any. - - @property ruid - @protected - @type {String} - */ - ruid: null, - - /** - Unique id of the runtime container. Useful to get hold of it for various manipulations. - - @property shimid - @protected - @type {String} - */ - shimid: null, - - /** - Array of selected mOxie.File objects - - @property files - @type {Array} - @default null - */ - files: null, - - /** - Initializes the file-picker, connects it to runtime and dispatches event ready when done. - - @method init - */ - init: function() { - self.convertEventPropsToHandlers(dispatches); - - self.bind('RuntimeInit', function(e, runtime) { - self.ruid = runtime.uid; - self.shimid = runtime.shimid; - - self.bind("Ready", function() { - self.trigger("Refresh"); - }, 999); - - self.bind("Change", function() { - var files = runtime.exec.call(self, 'FileInput', 'getFiles'); - - self.files = []; - - Basic.each(files, function(file) { - // ignore empty files (IE10 for example hangs if you try to send them via XHR) - if (file.size === 0) { - return true; - } - self.files.push(new File(self.ruid, file)); - }); - }, 999); - - // re-position and resize shim container - self.bind('Refresh', function() { - var pos, size, browseButton, shimContainer; - - browseButton = Dom.get(options.browse_button); - shimContainer = Dom.get(runtime.shimid); // do not use runtime.getShimContainer(), since it will create container if it doesn't exist - - if (browseButton) { - pos = Dom.getPos(browseButton, Dom.get(options.container)); - size = Dom.getSize(browseButton); - - if (shimContainer) { - Basic.extend(shimContainer.style, { - top : pos.y + 'px', - left : pos.x + 'px', - width : size.w + 'px', - height : size.h + 'px' - }); - } - } - shimContainer = browseButton = null; - }); - - runtime.exec.call(self, 'FileInput', 'init', options); - }); - - // runtime needs: options.required_features, options.runtime_order and options.container - self.connectRuntime(Basic.extend({}, options, { - required_caps: { - select_file: true - } - })); - }, - - /** - Disables file-picker element, so that it doesn't react to mouse clicks. - - @method disable - @param {Boolean} [state=true] Disable component if - true, enable if - false - */ - disable: function(state) { - var runtime = this.getRuntime(); - if (runtime) { - runtime.exec.call(this, 'FileInput', 'disable', Basic.typeOf(state) === 'undefined' ? true : state); - } - }, - - - /** - Reposition and resize dialog trigger to match the position and size of browse_button element. - - @method refresh - */ - refresh: function() { - self.trigger("Refresh"); - }, - - - /** - Destroy component. - - @method destroy - */ - destroy: function() { - var runtime = this.getRuntime(); - if (runtime) { - runtime.exec.call(this, 'FileInput', 'destroy'); - this.disconnectRuntime(); - } - - if (Basic.typeOf(this.files) === 'array') { - // no sense in leaving associated files behind - Basic.each(this.files, function(file) { - file.destroy(); - }); - } - this.files = null; - } - }); - } - - FileInput.prototype = EventTarget.instance; - - return FileInput; -}); - // Included from: src/javascript/file/FileDrop.js /** @@ -3530,11 +3669,12 @@ define('moxie/file/FileDrop', [ 'moxie/core/utils/Dom', 'moxie/core/Exceptions', 'moxie/core/utils/Basic', + 'moxie/core/utils/Env', 'moxie/file/File', 'moxie/runtime/RuntimeClient', 'moxie/core/EventTarget', 'moxie/core/utils/Mime' -], function(I18n, Dom, x, Basic, File, RuntimeClient, EventTarget, Mime) { +], function(I18n, Dom, x, Basic, Env, File, RuntimeClient, EventTarget, Mime) { /** Turn arbitrary DOM element to a drop zone accepting files. Converts selected files to _File_ objects, to be used in conjunction with _Image_, preloaded in memory with _FileReader_ or uploaded to a server through @@ -3611,6 +3751,10 @@ define('moxie/file/FileDrop', [ ]; function FileDrop(options) { + if (MXI_DEBUG) { + Env.log("Instantiating FileDrop..."); + } + var self = this, defaults; // if flat argument passed it should be drop_zone id @@ -3653,25 +3797,10 @@ define('moxie/file/FileDrop', [ files: null, - init: function() { - - self.convertEventPropsToHandlers(dispatches); - + init: function() { self.bind('RuntimeInit', function(e, runtime) { self.ruid = runtime.uid; - - self.bind("Drop", function() { - var files = runtime.exec.call(self, 'FileDrop', 'getFiles'); - - self.files = []; - - Basic.each(files, function(file) { - self.files.push(new File(self.ruid, file)); - }); - }, 999); - runtime.exec.call(self, 'FileDrop', 'init', options); - self.dispatchEvent('ready'); }); @@ -3686,8 +3815,12 @@ define('moxie/file/FileDrop', [ this.disconnectRuntime(); } this.files = null; + + this.unbindAll(); } }); + + this.handleEventProps(dispatches); } FileDrop.prototype = EventTarget.instance; @@ -3695,48 +3828,6 @@ define('moxie/file/FileDrop', [ return FileDrop; }); -// Included from: src/javascript/runtime/RuntimeTarget.js - -/** - * RuntimeTarget.js - * - * Copyright 2013, Moxiecode Systems AB - * Released under GPL License. - * - * License: http://www.plupload.com/license - * Contributing: http://www.plupload.com/contributing - */ - -define('moxie/runtime/RuntimeTarget', [ - 'moxie/core/utils/Basic', - 'moxie/runtime/RuntimeClient', - "moxie/core/EventTarget" -], function(Basic, RuntimeClient, EventTarget) { - /** - Instance of this class can be used as a target for the events dispatched by shims, - when allowing them onto components is for either reason inappropriate - - @class RuntimeTarget - @constructor - @protected - @extends EventTarget - */ - function RuntimeTarget() { - this.uid = Basic.guid('uid_'); - - RuntimeClient.call(this); - - this.destroy = function() { - this.disconnectRuntime(); - this.unbindAll(); - }; - } - - RuntimeTarget.prototype = EventTarget.instance; - - return RuntimeTarget; -}); - // Included from: src/javascript/file/FileReader.js /** @@ -3755,9 +3846,8 @@ define('moxie/file/FileReader', [ 'moxie/core/Exceptions', 'moxie/core/EventTarget', 'moxie/file/Blob', - 'moxie/file/File', - 'moxie/runtime/RuntimeTarget' -], function(Basic, Encode, x, EventTarget, Blob, File, RuntimeTarget) { + 'moxie/runtime/RuntimeClient' +], function(Basic, Encode, x, EventTarget, Blob, RuntimeClient) { /** Utility for preloading o.Blob/o.File objects in memory. By design closely follows [W3C FileReader](http://www.w3.org/TR/FileAPI/#dfn-filereader) interface. Where possible uses native FileReader, where - not falls back to shims. @@ -3819,8 +3909,9 @@ define('moxie/file/FileReader', [ ]; function FileReader() { - var self = this, _fr; - + + RuntimeClient.call(this); + Basic.extend(this, { /** UID of the component instance. @@ -3900,9 +3991,7 @@ define('moxie/file/FileReader', [ this.readyState = FileReader.DONE; } - if (_fr) { - _fr.getRuntime().exec.call(this, 'FileReader', 'abort'); - } + this.exec('FileReader', 'abort'); this.trigger('abort'); this.trigger('loadend'); @@ -3915,83 +4004,63 @@ define('moxie/file/FileReader', [ */ destroy: function() { this.abort(); - - if (_fr) { - _fr.getRuntime().exec.call(this, 'FileReader', 'destroy'); - _fr.disconnectRuntime(); - } - - self = _fr = null; + this.exec('FileReader', 'destroy'); + this.disconnectRuntime(); + this.unbindAll(); } }); + + // uid must already be assigned + this.handleEventProps(dispatches); + + this.bind('Error', function(e, err) { + this.readyState = FileReader.DONE; + this.error = err; + }, 999); + this.bind('Load', function(e) { + this.readyState = FileReader.DONE; + }, 999); + function _read(op, blob) { - _fr = new RuntimeTarget(); + var self = this; - function error(err) { - self.readyState = FileReader.DONE; - self.error = err; - self.trigger('error'); - loadEnd(); - } - - function loadEnd() { - _fr.destroy(); - _fr = null; - self.trigger('loadend'); - } - - function exec(runtime) { - _fr.bind('Error', function(e, err) { - error(err); - }); - - _fr.bind('Progress', function(e) { - self.result = runtime.exec.call(_fr, 'FileReader', 'getResult'); - self.trigger(e); - }); - - _fr.bind('Load', function(e) { - self.readyState = FileReader.DONE; - self.result = runtime.exec.call(_fr, 'FileReader', 'getResult'); - self.trigger(e); - loadEnd(); - }); - - runtime.exec.call(_fr, 'FileReader', 'read', op, blob); - } - - this.convertEventPropsToHandlers(dispatches); - - if (this.readyState === FileReader.LOADING) { - return error(new x.DOMException(x.DOMException.INVALID_STATE_ERR)); - } - - this.readyState = FileReader.LOADING; this.trigger('loadstart'); - // if source is o.Blob/o.File - if (blob instanceof Blob) { - if (blob.isDetached()) { - var src = blob.getSource(); - switch (op) { - case 'readAsText': - case 'readAsBinaryString': - this.result = src; - break; - case 'readAsDataURL': - this.result = 'data:' + blob.type + ';base64,' + Encode.btoa(src); - break; - } - this.readyState = FileReader.DONE; - this.trigger('load'); - loadEnd(); - } else { - exec(_fr.connectRuntime(blob.ruid)); + if (this.readyState === FileReader.LOADING) { + this.trigger('error', new x.DOMException(x.DOMException.INVALID_STATE_ERR)); + this.trigger('loadend'); + return; + } + + // if source is not o.Blob/o.File + if (!(blob instanceof Blob)) { + this.trigger('error', new x.DOMException(x.DOMException.NOT_FOUND_ERR)); + this.trigger('loadend'); + return; + } + + this.result = null; + this.readyState = FileReader.LOADING; + + if (blob.isDetached()) { + var src = blob.getSource(); + switch (op) { + case 'readAsText': + case 'readAsBinaryString': + this.result = src; + break; + case 'readAsDataURL': + this.result = 'data:' + blob.type + ';base64,' + Encode.btoa(src); + break; } + this.readyState = FileReader.DONE; + this.trigger('load'); + this.trigger('loadend'); } else { - error(new x.DOMException(x.DOMException.NOT_FOUND_ERR)); + this.connectRuntime(blob.ruid); + this.exec('FileReader', 'read', op, blob); } } } @@ -4065,7 +4134,7 @@ define('moxie/core/utils/Url', [], function() { https: 443 } , uri = {} - , regex = /^(?:([^:\/?#]+):)?(?:\/\/()(?:(?:()(?:([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?))?()(?:(()(?:(?:[^?#\/]*\/)*)()(?:[^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/ + , regex = /^(?:([^:\/?#]+):)?(?:\/\/()(?:(?:()(?:([^:@\/]*):?([^:@\/]*))?@)?([^:\/?#]*)(?::(\d*))?))?()(?:(()(?:(?:[^?#\/]*\/)*)()(?:[^?#]*))(?:\\?([^#]*))?(?:#(.*))?)/ , m = regex.exec(url || '') ; @@ -4091,10 +4160,11 @@ define('moxie/core/utils/Url', [], function() { if (/^[^\/]/.test(uri.path)) { path = currentUrl.path; // if path ends with a filename, strip it - if (!/(\/|\/[^\.]+)$/.test(path)) { + if (/\/[^\/]*\.[^\/]*$/.test(path)) { path = path.replace(/\/[^\/]+$/, '/'); } else { - path += '/'; + // avoid double slash at the end (see #127) + path = path.replace(/\/?$/, '/'); } } uri.path = path + (uri.path || ''); // site may reside at domain.com or domain.com/subdir @@ -4120,7 +4190,7 @@ define('moxie/core/utils/Url', [], function() { @method resolveUrl @static - @param {String} url Either absolute or relative + @param {String|Object} url Either absolute or relative, or a result of parseUrl call @return {String} Resolved, absolute url */ var resolveUrl = function(url) { @@ -4128,7 +4198,7 @@ define('moxie/core/utils/Url', [], function() { http: 80, https: 443 } - , urlp = parseUrl(url) + , urlp = typeof(url) === 'object' ? url : parseUrl(url); ; return urlp.scheme + '://' + urlp.host + (urlp.port !== ports[urlp.scheme] ? ':' + urlp.port : '') + urlp.path + (urlp.query ? urlp.query : ''); @@ -4160,6 +4230,48 @@ define('moxie/core/utils/Url', [], function() { }; }); +// Included from: src/javascript/runtime/RuntimeTarget.js + +/** + * RuntimeTarget.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +define('moxie/runtime/RuntimeTarget', [ + 'moxie/core/utils/Basic', + 'moxie/runtime/RuntimeClient', + "moxie/core/EventTarget" +], function(Basic, RuntimeClient, EventTarget) { + /** + Instance of this class can be used as a target for the events dispatched by shims, + when allowing them onto components is for either reason inappropriate + + @class RuntimeTarget + @constructor + @protected + @extends EventTarget + */ + function RuntimeTarget() { + this.uid = Basic.guid('uid_'); + + RuntimeClient.call(this); + + this.destroy = function() { + this.disconnectRuntime(); + this.unbindAll(); + }; + } + + RuntimeTarget.prototype = EventTarget.instance; + + return RuntimeTarget; +}); + // Included from: src/javascript/file/FileReaderSync.js /** @@ -4451,7 +4563,23 @@ define("moxie/xhr/XMLHttpRequest", [ @uses RuntimeClient @extends EventTarget */ - var dispatches = ['loadstart', 'progress', 'abort', 'error', 'load', 'timeout', 'loadend']; // & readystatechange (for historical reasons) + var dispatches = [ + 'loadstart', + + 'progress', + + 'abort', + + 'error', + + 'load', + + 'timeout', + + 'loadend' + + // readystatechange (for historical reasons) + ]; var NATIVE = 1, RUNTIME = 2; @@ -4693,7 +4821,6 @@ define("moxie/xhr/XMLHttpRequest", [ _p('readyState', XMLHttpRequest.OPENED); // 20 - this.convertEventPropsToHandlers(['readystatechange']); // unify event handlers this.dispatchEvent('readystatechange'); }, @@ -4870,9 +4997,6 @@ define("moxie/xhr/XMLHttpRequest", [ } else { _options = options; } - - this.convertEventPropsToHandlers(dispatches); - this.upload.convertEventPropsToHandlers(dispatches); // 1-2 if (this.readyState !== XMLHttpRequest.OPENED || _send_flag) { @@ -4973,6 +5097,9 @@ define("moxie/xhr/XMLHttpRequest", [ } }); + this.handleEventProps(dispatches.concat(['readystatechange'])); // for historical reasons + this.upload.handleEventProps(dispatches); + /* this is nice, but maybe too lengthy // if supported by JS version, set getters/setters for specific properties @@ -5264,6 +5391,10 @@ define("moxie/xhr/XMLHttpRequest", [ _options.required_caps.send_multipart = true; } + if (!Basic.isEmptyObj(_headers)) { + _options.required_caps.send_custom_headers = true; + } + if (!_same_origin_flag) { _options.required_caps.do_cors = true; } @@ -5507,6 +5638,7 @@ define("moxie/image/Image", [ ]; function Image() { + RuntimeClient.call(this); Basic.extend(this, { @@ -5619,13 +5751,6 @@ define("moxie/image/Image", [ @param {Boolean|Object} [mixed] */ load: function() { - // this is here because to bind properly we need an uid first, which is created above - this.bind('Load Resize', function() { - _updateInfo.call(this); - }, 999); - - this.convertEventPropsToHandlers(dispatches); - _load.apply(this, arguments); }, @@ -5633,22 +5758,28 @@ define("moxie/image/Image", [ Downsizes the image to fit the specified width/height. If crop is supplied, image will be cropped to exact dimensions. @method downsize - @param {Number} width Resulting width - @param {Number} [height=width] Resulting height (optional, if not supplied will default to width) - @param {Boolean} [crop=false] Whether to crop the image to exact dimensions - @param {Boolean} [preserveHeaders=true] Whether to preserve meta headers (on JPEGs after resize) + @param {Object} opts + @param {Number} opts.width Resulting width + @param {Number} [opts.height=width] Resulting height (optional, if not supplied will default to width) + @param {Boolean} [opts.crop=false] Whether to crop the image to exact dimensions + @param {Boolean} [opts.preserveHeaders=true] Whether to preserve meta headers (on JPEGs after resize) + @param {String} [opts.resample=false] Resampling algorithm to use for resizing */ downsize: function(opts) { var defaults = { width: this.width, height: this.height, + type: this.type || 'image/jpeg', + quality: 90, crop: false, - preserveHeaders: true + preserveHeaders: true, + resample: false }; if (typeof(opts) === 'object') { opts = Basic.extend(defaults, opts); } else { + // for backward compatibility opts = Basic.extend(defaults, { width: arguments[0], height: arguments[1], @@ -5667,7 +5798,7 @@ define("moxie/image/Image", [ throw new x.ImageError(x.ImageError.MAX_RESOLUTION_ERR); } - this.getRuntime().exec.call(this, 'Image', 'downsize', opts.width, opts.height, opts.crop, opts.preserveHeaders); + this.exec('Image', 'downsize', opts.width, opts.height, opts.crop, opts.preserveHeaders); } catch(ex) { // for now simply trigger error event this.trigger('error', ex.code); @@ -5708,16 +5839,7 @@ define("moxie/image/Image", [ if (!this.size) { throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); } - - if (!type) { - type = 'image/jpeg'; - } - - if (type === 'image/jpeg' && !quality) { - quality = 90; - } - - return this.getRuntime().exec.call(this, 'Image', 'getAsBlob', type, quality); + return this.exec('Image', 'getAsBlob', type || 'image/jpeg', quality || 90); }, /** @@ -5733,7 +5855,7 @@ define("moxie/image/Image", [ if (!this.size) { throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); } - return this.getRuntime().exec.call(this, 'Image', 'getAsDataURL', type, quality); + return this.exec('Image', 'getAsDataURL', type || 'image/jpeg', quality || 90); }, /** @@ -5757,44 +5879,49 @@ define("moxie/image/Image", [ @method embed @param {DOMElement} el DOM element to insert the image object into - @param {Object} [options] - @param {Number} [options.width] The width of an embed (defaults to the image width) - @param {Number} [options.height] The height of an embed (defaults to the image height) + @param {Object} [opts] + @param {Number} [opts.width] The width of an embed (defaults to the image width) + @param {Number} [opts.height] The height of an embed (defaults to the image height) @param {String} [type="image/jpeg"] Mime type @param {Number} [quality=90] Quality of an embed, if mime type is image/jpeg @param {Boolean} [crop=false] Whether to crop an embed to the specified dimensions */ - embed: function(el) { + embed: function(el, opts) { var self = this - , imgCopy - , type, quality, crop - , options = arguments[1] || {} - , width = this.width - , height = this.height , runtime // this has to be outside of all the closures to contain proper runtime ; - function onResize() { + opts = Basic.extend({ + width: this.width, + height: this.height, + type: this.type || 'image/jpeg', + quality: 90 + }, opts || {}); + + + function render(type, quality) { + var img = this; + // if possible, embed a canvas element directly if (Env.can('create_canvas')) { - var canvas = imgCopy.getAsCanvas(); + var canvas = img.getAsCanvas(); if (canvas) { el.appendChild(canvas); canvas = null; - imgCopy.destroy(); + img.destroy(); self.trigger('embedded'); return; } } - var dataUrl = imgCopy.getAsDataURL(type, quality); + var dataUrl = img.getAsDataURL(type, quality); if (!dataUrl) { throw new x.ImageError(x.ImageError.WRONG_FORMAT); } if (Env.can('use_data_uri_of', dataUrl.length)) { - el.innerHTML = ''; - imgCopy.destroy(); + el.innerHTML = ''; + img.destroy(); self.trigger('embedded'); } else { var tr = new Transporter(); @@ -5808,8 +5935,8 @@ define("moxie/image/Image", [ //position: 'relative', top: '0px', left: '0px', - width: imgCopy.width + 'px', - height: imgCopy.height + 'px' + width: img.width + 'px', + height: img.height + 'px' }); // some shims (Flash/SilverLight) reinitialize, if parent element is hidden, reordered or it's @@ -5821,20 +5948,20 @@ define("moxie/image/Image", [ onResize.call(self); // re-feed our image data });*/ - runtime = null; + runtime = null; // release }, 999); runtime.exec.call(self, "ImageView", "display", this.result.uid, width, height); - imgCopy.destroy(); + img.destroy(); }); - tr.transport(Encode.atob(dataUrl.substring(dataUrl.indexOf('base64,') + 7)), type, Basic.extend({}, options, { + tr.transport(Encode.atob(dataUrl.substring(dataUrl.indexOf('base64,') + 7)), type, { required_caps: { display_media: true }, runtime_order: 'flash,silverlight', container: el - })); + }); } } @@ -5846,39 +5973,28 @@ define("moxie/image/Image", [ if (!this.size) { // only preloaded image objects can be used as source throw new x.DOMException(x.DOMException.INVALID_STATE_ERR); } - + + // high-resolution images cannot be consistently handled across the runtimes if (this.width > Image.MAX_RESIZE_WIDTH || this.height > Image.MAX_RESIZE_HEIGHT) { - throw new x.ImageError(x.ImageError.MAX_RESOLUTION_ERR); + //throw new x.ImageError(x.ImageError.MAX_RESOLUTION_ERR); } - type = options.type || this.type || 'image/jpeg'; - quality = options.quality || 90; - crop = Basic.typeOf(options.crop) !== 'undefined' ? options.crop : false; - - // figure out dimensions for the thumb - if (options.width) { - width = options.width; - height = options.height || width; - } else { - // if container element has measurable dimensions, use them - var dimensions = Dom.getSize(el); - if (dimensions.w && dimensions.h) { // both should be > 0 - width = dimensions.w; - height = dimensions.h; - } - } - - imgCopy = new Image(); + var imgCopy = new Image(); imgCopy.bind("Resize", function() { - onResize.call(self); + render.call(this, opts.type, opts.quality); }); imgCopy.bind("Load", function() { - imgCopy.downsize(width, height, crop, false); + imgCopy.downsize(opts); }); - imgCopy.clone(this, false); + // if embedded thumb data is available and dimensions are big enough, use it + if (this.meta.thumb && this.meta.thumb.width >= opts.width && this.meta.thumb.height >= opts.height) { + imgCopy.load(this.meta.thumb.data); + } else { + imgCopy.clone(this, false); + } return imgCopy; } catch(ex) { @@ -5902,9 +6018,17 @@ define("moxie/image/Image", [ }); + // this is here, because in order to bind properly, we need uid, which is created above + this.handleEventProps(dispatches); + + this.bind('Load Resize', function() { + _updateInfo.call(this); + }, 999); + + function _updateInfo(info) { if (!info) { - info = this.getRuntime().exec.call(this, 'Image', 'getInfo'); + info = this.exec('Image', 'getInfo'); } this.size = info.size; @@ -5945,7 +6069,7 @@ define("moxie/image/Image", [ // if String else if (srcType === 'string') { // if dataUrl String - if (/^data:[^;]*;base64,/.test(src)) { + if (src.substr(0, 5) === 'data:') { _load.call(this, new Blob(null, { data: src }), arguments[1]); } // else assume Url, either relative or absolute @@ -6039,8 +6163,8 @@ define("moxie/image/Image", [ } // virtual world will crash on you if image has a resolution higher than this: - Image.MAX_RESIZE_WIDTH = 6500; - Image.MAX_RESIZE_HEIGHT = 6500; + Image.MAX_RESIZE_WIDTH = 8192; + Image.MAX_RESIZE_HEIGHT = 8192; Image.prototype = EventTarget.instance; @@ -6093,10 +6217,13 @@ define("moxie/runtime/html5/Runtime", [ // this comes directly from Modernizr: http://www.modernizr.com/ var div = document.createElement('div'); // IE has support for drag and drop since version 5, but doesn't support dropping files from desktop - return (('draggable' in div) || ('ondragstart' in div && 'ondrop' in div)) && (Env.browser !== 'IE' || Env.version > 9); + return (('draggable' in div) || ('ondragstart' in div && 'ondrop' in div)) && + (Env.browser !== 'IE' || Env.verComp(Env.version, 9, '>')); }()), filter_by_extension: Test(function() { // if you know how to feature-detect this, please suggest - return (Env.browser === 'Chrome' && Env.version >= 28) || (Env.browser === 'IE' && Env.version >= 10); + return (Env.browser === 'Chrome' && Env.verComp(Env.version, 28, '>=')) || + (Env.browser === 'IE' && Env.verComp(Env.version, 10, '>=')) || + (Env.browser === 'Safari' && Env.verComp(Env.version, 7, '>=')); }()), return_response_headers: True, return_response_type: function(responseType) { @@ -6114,13 +6241,13 @@ define("moxie/runtime/html5/Runtime", [ return Env.can('use_fileinput') && window.File; }, select_folder: function() { - return I.can('select_file') && Env.browser === 'Chrome' && Env.version >= 21; + return I.can('select_file') && Env.browser === 'Chrome' && Env.verComp(Env.version, 21, '>='); }, select_multiple: function() { // it is buggy on Safari Windows and iOS - return I.can('select_file') && - !(Env.browser === 'Safari' && Env.os === 'Windows') && - !(Env.os === 'iOS' && Env.verComp(Env.osVersion, "7.0.4", '<')); + return I.can('select_file') && + !(Env.browser === 'Safari' && Env.os === 'Windows') && + !(Env.os === 'iOS' && Env.verComp(Env.osVersion, "7.0.0", '>') && Env.verComp(Env.osVersion, "8.0.0", '<')); }, send_binary_string: Test(window.XMLHttpRequest && (new XMLHttpRequest().sendAsBinary || (window.Uint8Array && window.ArrayBuffer))), send_custom_headers: Test(window.XMLHttpRequest), @@ -6131,12 +6258,14 @@ define("moxie/runtime/html5/Runtime", [ stream_upload: function(){ return I.can('slice_blob') && I.can('send_multipart'); }, - summon_file_dialog: Test(function() { // yeah... some dirty sniffing here... - return (Env.browser === 'Firefox' && Env.version >= 4) || - (Env.browser === 'Opera' && Env.version >= 12) || - (Env.browser === 'IE' && Env.version >= 10) || - !!~Basic.inArray(Env.browser, ['Chrome', 'Safari']); - }()), + summon_file_dialog: function() { // yeah... some dirty sniffing here... + return I.can('select_file') && ( + (Env.browser === 'Firefox' && Env.verComp(Env.version, 4, '>=')) || + (Env.browser === 'Opera' && Env.verComp(Env.version, 12, '>=')) || + (Env.browser === 'IE' && Env.verComp(Env.version, 10, '>=')) || + !!~Basic.inArray(Env.browser, ['Chrome', 'Safari']) + ); + }, upload_filesize: True }, arguments[2] @@ -6167,55 +6296,6 @@ define("moxie/runtime/html5/Runtime", [ return extensions; }); -// Included from: src/javascript/runtime/html5/file/Blob.js - -/** - * Blob.js - * - * Copyright 2013, Moxiecode Systems AB - * Released under GPL License. - * - * License: http://www.plupload.com/license - * Contributing: http://www.plupload.com/contributing - */ - -/** -@class moxie/runtime/html5/file/Blob -@private -*/ -define("moxie/runtime/html5/file/Blob", [ - "moxie/runtime/html5/Runtime", - "moxie/file/Blob" -], function(extensions, Blob) { - - function HTML5Blob() { - function w3cBlobSlice(blob, start, end) { - var blobSlice; - - if (window.File.prototype.slice) { - try { - blob.slice(); // depricated version will throw WRONG_ARGUMENTS_ERR exception - return blob.slice(start, end); - } catch (e) { - // depricated slice method - return blob.slice(start, end - start); - } - // slice method got prefixed: https://bugzilla.mozilla.org/show_bug.cgi?id=649672 - } else if ((blobSlice = window.File.prototype.webkitSlice || window.File.prototype.mozSlice)) { - return blobSlice.call(blob, start, end); - } else { - return null; // or throw some exception - } - } - - this.slice = function() { - return new Blob(this.getRuntime().uid, w3cBlobSlice.apply(this, arguments)); - }; - } - - return (extensions.Blob = HTML5Blob); -}); - // Included from: src/javascript/core/utils/Events.js /** @@ -6407,22 +6487,22 @@ define('moxie/core/utils/Events', [ */ define("moxie/runtime/html5/file/FileInput", [ "moxie/runtime/html5/Runtime", + "moxie/file/File", "moxie/core/utils/Basic", "moxie/core/utils/Dom", "moxie/core/utils/Events", "moxie/core/utils/Mime", "moxie/core/utils/Env" -], function(extensions, Basic, Dom, Events, Mime, Env) { +], function(extensions, File, Basic, Dom, Events, Mime, Env) { function FileInput() { - var _files = [], _options; + var _options; Basic.extend(this, { init: function(options) { var comp = this, I = comp.getRuntime(), input, shimContainer, mimes, browseButton, zIndex, top; _options = options; - _files = []; // figure out accept string mimes = _options.accept.mimes || Mime.extList2mimes(_options.accept, I.can('filter_by_extension')); @@ -6489,19 +6569,29 @@ define("moxie/runtime/html5/file/FileInput", [ }, comp.uid); - input.onchange = function onChange() { // there should be only one handler for this - _files = []; + input.onchange = function onChange(e) { // there should be only one handler for this + comp.files = []; - if (_options.directory) { - // folders are represented by dots, filter them out (Chrome 11+) - Basic.each(this.files, function(file) { - if (file.name !== ".") { // if it doesn't looks like a folder - _files.push(file); + Basic.each(this.files, function(file) { + var relativePath = ''; + + if (_options.directory) { + // folders are represented by dots, filter them out (Chrome 11+) + if (file.name == ".") { + // if it looks like a folder... + return true; } - }); - } else { - _files = [].slice.call(this.files); - } + } + + if (file.webkitRelativePath) { + relativePath = '/' + file.webkitRelativePath.replace(/^\//, ''); + } + + file = new File(I.uid, file); + file.relativePath = relativePath; + + comp.files.push(file); + }); // clearing the value enables the user to select the same file again if they want to if (Env.browser !== 'IE' && Env.browser !== 'IEMobile') { @@ -6512,7 +6602,10 @@ define("moxie/runtime/html5/file/FileInput", [ this.parentNode.replaceChild(clone, this); clone.onchange = onChange; } - comp.trigger('change'); + + if (comp.files.length) { + comp.trigger('change'); + } }; // ready event is perfectly asynchronous @@ -6524,9 +6617,6 @@ define("moxie/runtime/html5/file/FileInput", [ shimContainer = null; }, - getFiles: function() { - return _files; - }, disable: function(state) { var I = this.getRuntime(), input; @@ -6552,7 +6642,7 @@ define("moxie/runtime/html5/file/FileInput", [ shim.removeInstance(this.uid); - _files = _options = shimContainer = shim = null; + _options = shimContainer = shim = null; } }); } @@ -6560,6 +6650,55 @@ define("moxie/runtime/html5/file/FileInput", [ return (extensions.FileInput = FileInput); }); +// Included from: src/javascript/runtime/html5/file/Blob.js + +/** + * Blob.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/html5/file/Blob +@private +*/ +define("moxie/runtime/html5/file/Blob", [ + "moxie/runtime/html5/Runtime", + "moxie/file/Blob" +], function(extensions, Blob) { + + function HTML5Blob() { + function w3cBlobSlice(blob, start, end) { + var blobSlice; + + if (window.File.prototype.slice) { + try { + blob.slice(); // depricated version will throw WRONG_ARGUMENTS_ERR exception + return blob.slice(start, end); + } catch (e) { + // depricated slice method + return blob.slice(start, end - start); + } + // slice method got prefixed: https://bugzilla.mozilla.org/show_bug.cgi?id=649672 + } else if ((blobSlice = window.File.prototype.webkitSlice || window.File.prototype.mozSlice)) { + return blobSlice.call(blob, start, end); + } else { + return null; // or throw some exception + } + } + + this.slice = function() { + return new Blob(this.getRuntime().uid, w3cBlobSlice.apply(this, arguments)); + }; + } + + return (extensions.Blob = HTML5Blob); +}); + // Included from: src/javascript/runtime/html5/file/FileDrop.js /** @@ -6578,20 +6717,22 @@ define("moxie/runtime/html5/file/FileInput", [ */ define("moxie/runtime/html5/file/FileDrop", [ "moxie/runtime/html5/Runtime", + 'moxie/file/File', "moxie/core/utils/Basic", "moxie/core/utils/Dom", "moxie/core/utils/Events", "moxie/core/utils/Mime" -], function(extensions, Basic, Dom, Events, Mime) { +], function(extensions, File, Basic, Dom, Events, Mime) { function FileDrop() { - var _files = [], _allowedExts = [], _options; + var _files = [], _allowedExts = [], _options, _ruid; Basic.extend(this, { init: function(options) { var comp = this, dropZone; _options = options; + _ruid = comp.ruid; // every dropped-in file should have a reference to the runtime _allowedExts = _extractExts(_options.accept); dropZone = _options.container; @@ -6614,14 +6755,14 @@ define("moxie/runtime/html5/file/FileDrop", [ // Chrome 21+ accepts folders via Drag'n'Drop if (e.dataTransfer.items && e.dataTransfer.items[0].webkitGetAsEntry) { _readItems(e.dataTransfer.items, function() { + comp.files = _files; comp.trigger("drop"); }); } else { Basic.each(e.dataTransfer.files, function(file) { - if (_isAcceptable(file)) { - _files.push(file); - } + _addFile(file); }); + comp.files = _files; comp.trigger("drop"); } }, comp.uid); @@ -6635,13 +6776,9 @@ define("moxie/runtime/html5/file/FileDrop", [ }, comp.uid); }, - getFiles: function() { - return _files; - }, - destroy: function() { Events.removeAllEvents(_options && Dom.get(_options.container), this.uid); - _files = _allowedExts = _options = null; + _ruid = _files = _allowedExts = _options = null; } }); @@ -6659,6 +6796,15 @@ define("moxie/runtime/html5/file/FileDrop", [ ; } + + function _addFile(file, relativePath) { + if (_isAcceptable(file)) { + var fileObj = new File(_ruid, file); + fileObj.relativePath = relativePath || ''; + _files.push(fileObj); + } + } + function _extractExts(accept) { var exts = []; @@ -6686,10 +6832,7 @@ define("moxie/runtime/html5/file/FileDrop", [ if (entry) { // file() fails on OSX when the filename contains a special character (e.g. umlaut): see #61 if (entry.isFile) { - var file = item.getAsFile(); - if (_isAcceptable(file)) { - _files.push(file); - } + _addFile(item.getAsFile(), entry.fullPath); } else { entries.push(entry); } @@ -6720,9 +6863,7 @@ define("moxie/runtime/html5/file/FileDrop", [ function _readEntry(entry, cb) { if (entry.isFile) { entry.file(function(file) { - if (_isAcceptable(file)) { - _files.push(file); - } + _addFile(file, entry.fullPath); cb(); }, function() { // fire an error event maybe @@ -6789,24 +6930,28 @@ define("moxie/runtime/html5/file/FileReader", [ Basic.extend(this, { read: function(op, blob) { - var target = this; + var comp = this; + + comp.result = ''; _fr = new window.FileReader(); _fr.addEventListener('progress', function(e) { - target.trigger(e); + comp.trigger(e); }); _fr.addEventListener('load', function(e) { - target.trigger(e); + comp.result = _convertToBinary ? _toBinary(_fr.result) : _fr.result; + comp.trigger(e); }); _fr.addEventListener('error', function(e) { - target.trigger(e, _fr.error); + comp.trigger(e, _fr.error); }); - _fr.addEventListener('loadend', function() { + _fr.addEventListener('loadend', function(e) { _fr = null; + comp.trigger(e); }); if (Basic.typeOf(_fr[op]) === 'function') { @@ -6818,10 +6963,6 @@ define("moxie/runtime/html5/file/FileReader", [ } }, - getResult: function() { - return _fr && _fr.result ? (_convertToBinary ? _toBinary(_fr.result) : _fr.result) : null; - }, - abort: function() { if (_fr) { _fr.abort(); @@ -6880,7 +7021,7 @@ define("moxie/runtime/html5/xhr/XMLHttpRequest", [ Basic.extend(this, { send: function(meta, data) { var target = this - , isGecko2_5_6 = (Env.browser === 'Mozilla' && Env.version >= 4 && Env.version < 7) + , isGecko2_5_6 = (Env.browser === 'Mozilla' && Env.verComp(Env.version, 4, '>=') && Env.verComp(Env.version, 7, '<')) , isAndroidBrowser = Env.browser === 'Android Browser' , mustSendAsBinary = false ; @@ -7139,7 +7280,7 @@ define("moxie/runtime/html5/xhr/XMLHttpRequest", [ function _getNativeXHR() { - if (window.XMLHttpRequest && !(Env.browser === 'IE' && Env.version < 8)) { // IE7 has native XHR but it's buggy + if (window.XMLHttpRequest && !(Env.browser === 'IE' && Env.verComp(Env.version, 8, '<'))) { // IE7 has native XHR but it's buggy return new window.XMLHttpRequest(); } else { return (function() { @@ -7232,97 +7373,208 @@ define("moxie/runtime/html5/xhr/XMLHttpRequest", [ @class moxie/runtime/html5/utils/BinaryReader @private */ -define("moxie/runtime/html5/utils/BinaryReader", [], function() { - return function() { - var II = false, bin; +define("moxie/runtime/html5/utils/BinaryReader", [ + "moxie/core/utils/Basic" +], function(Basic) { - // Private functions - function read(idx, size) { - var mv = II ? 0 : -8 * (size - 1), sum = 0, i; + + function BinaryReader(data) { + if (data instanceof ArrayBuffer) { + ArrayBufferReader.apply(this, arguments); + } else { + UTF16StringReader.apply(this, arguments); + } + } +   - for (i = 0; i < size; i++) { - sum |= (bin.charCodeAt(idx + i) << Math.abs(mv + i*8)); + Basic.extend(BinaryReader.prototype, { + + littleEndian: false, + + + read: function(idx, size) { + var sum, mv, i; + + if (idx + size > this.length()) { + throw new Error("You are trying to read outside the source boundaries."); } + + mv = this.littleEndian + ? 0 + : -8 * (size - 1) + ; + for (i = 0, sum = 0; i < size; i++) { + sum |= (this.readByteAt(idx + i) << Math.abs(mv + i*8)); + } return sum; - } + }, - function putstr(segment, idx, length) { - length = arguments.length === 3 ? length : bin.length - idx - 1; - bin = bin.substr(0, idx) + segment + bin.substr(length + idx); - } - function write(idx, num, size) { - var str = '', mv = II ? 0 : -8 * (size - 1), i; + write: function(idx, num, size) { + var mv, i, str = ''; - for (i = 0; i < size; i++) { - str += String.fromCharCode((num >> Math.abs(mv + i*8)) & 255); + if (idx > this.length()) { + throw new Error("You are trying to write outside the source boundaries."); } - putstr(str, idx, size); - } + mv = this.littleEndian + ? 0 + : -8 * (size - 1) + ; - // Public functions - return { - II: function(order) { - if (order === undefined) { - return II; - } else { - II = order; + for (i = 0; i < size; i++) { + this.writeByteAt(idx + i, (num >> Math.abs(mv + i*8)) & 255); + } + }, + + + BYTE: function(idx) { + return this.read(idx, 1); + }, + + + SHORT: function(idx) { + return this.read(idx, 2); + }, + + + LONG: function(idx) { + return this.read(idx, 4); + }, + + + SLONG: function(idx) { // 2's complement notation + var num = this.read(idx, 4); + return (num > 2147483647 ? num - 4294967296 : num); + }, + + + CHAR: function(idx) { + return String.fromCharCode(this.read(idx, 1)); + }, + + + STRING: function(idx, count) { + return this.asArray('CHAR', idx, count).join(''); + }, + + + asArray: function(type, idx, count) { + var values = []; + + for (var i = 0; i < count; i++) { + values[i] = this[type](idx + i); + } + return values; + } + }); + + + function ArrayBufferReader(data) { + var _dv = new DataView(data); + + Basic.extend(this, { + + readByteAt: function(idx) { + return _dv.getUint8(idx); + }, + + + writeByteAt: function(idx, value) { + _dv.setUint8(idx, value); + }, + + + SEGMENT: function(idx, size, value) { + switch (arguments.length) { + case 2: + return data.slice(idx, idx + size); + + case 1: + return data.slice(idx); + + case 3: + if (value === null) { + value = new ArrayBuffer(); + } + + if (value instanceof ArrayBuffer) { + var arr = new Uint8Array(this.length() - size + value.byteLength); + if (idx > 0) { + arr.set(new Uint8Array(data.slice(0, idx)), 0); + } + arr.set(new Uint8Array(value), idx); + arr.set(new Uint8Array(data.slice(idx + size)), idx + value.byteLength); + + this.clear(); + data = arr.buffer; + _dv = new DataView(data); + break; + } + + default: return data; } }, - init: function(binData) { - II = false; - bin = binData; + + length: function() { + return data ? data.byteLength : 0; }, + + clear: function() { + _dv = data = null; + } + }); + } + + + function UTF16StringReader(data) { + Basic.extend(this, { + + readByteAt: function(idx) { + return data.charCodeAt(idx); + }, + + + writeByteAt: function(idx, value) { + putstr(String.fromCharCode(value), idx, 1); + }, + + SEGMENT: function(idx, length, segment) { switch (arguments.length) { case 1: - return bin.substr(idx, bin.length - idx - 1); + return data.substr(idx); case 2: - return bin.substr(idx, length); + return data.substr(idx, length); case 3: - putstr(segment, idx, length); + putstr(segment !== null ? segment : '', idx, length); break; - default: return bin; + default: return data; } }, - BYTE: function(idx) { - return read(idx, 1); - }, - SHORT: function(idx) { - return read(idx, 2); - }, + length: function() { + return data ? data.length : 0; + }, - LONG: function(idx, num) { - if (num === undefined) { - return read(idx, 4); - } else { - write(idx, num, 4); - } - }, - - SLONG: function(idx) { // 2's complement notation - var num = read(idx, 4); - - return (num > 2147483647 ? num - 4294967296 : num); - }, - - STRING: function(idx, size) { - var str = ''; - - for (size += idx; idx < size; idx++) { - str += String.fromCharCode(read(idx, 1)); - } - - return str; + clear: function() { + data = null; } - }; - }; + }); + + + function putstr(segment, idx, length) { + length = arguments.length === 3 ? length : data.length - idx - 1; + data = data.substr(0, idx) + segment + data.substr(length + idx); + } + } + + + return BinaryReader; }); // Included from: src/javascript/runtime/html5/image/JPEGHeaders.js @@ -7342,24 +7594,25 @@ define("moxie/runtime/html5/utils/BinaryReader", [], function() { @private */ define("moxie/runtime/html5/image/JPEGHeaders", [ - "moxie/runtime/html5/utils/BinaryReader" -], function(BinaryReader) { + "moxie/runtime/html5/utils/BinaryReader", + "moxie/core/Exceptions" +], function(BinaryReader, x) { return function JPEGHeaders(data) { - var headers = [], read, idx, marker, length = 0; + var headers = [], _br, idx, marker, length = 0; - read = new BinaryReader(); - read.init(data); + _br = new BinaryReader(data); // Check if data is jpeg - if (read.SHORT(0) !== 0xFFD8) { - return; + if (_br.SHORT(0) !== 0xFFD8) { + _br.clear(); + throw new x.ImageError(x.ImageError.WRONG_FORMAT); } idx = 2; - while (idx <= data.length) { - marker = read.SHORT(idx); + while (idx <= _br.length()) { + marker = _br.SHORT(idx); // omit RST (restart) markers if (marker >= 0xFFD0 && marker <= 0xFFD7) { @@ -7372,7 +7625,7 @@ define("moxie/runtime/html5/image/JPEGHeaders", [ break; } - length = read.SHORT(idx + 2) + 2; + length = _br.SHORT(idx + 2) + 2; // APPn marker detected if (marker >= 0xFFE1 && marker <= 0xFFEF) { @@ -7381,51 +7634,51 @@ define("moxie/runtime/html5/image/JPEGHeaders", [ name: 'APP' + (marker & 0x000F), start: idx, length: length, - segment: read.SEGMENT(idx, length) + segment: _br.SEGMENT(idx, length) }); } idx += length; } - read.init(null); // free memory + _br.clear(); return { headers: headers, restore: function(data) { - var max, i; + var max, i, br; - read.init(data); + br = new BinaryReader(data); - idx = read.SHORT(2) == 0xFFE0 ? 4 + read.SHORT(4) : 2; + idx = br.SHORT(2) == 0xFFE0 ? 4 + br.SHORT(4) : 2; for (i = 0, max = headers.length; i < max; i++) { - read.SEGMENT(idx, 0, headers[i].segment); + br.SEGMENT(idx, 0, headers[i].segment); idx += headers[i].length; } - data = read.SEGMENT(); - read.init(null); + data = br.SEGMENT(); + br.clear(); return data; }, strip: function(data) { - var headers, jpegHeaders, i; + var br, headers, jpegHeaders, i; jpegHeaders = new JPEGHeaders(data); headers = jpegHeaders.headers; jpegHeaders.purge(); - read.init(data); + br = new BinaryReader(data); i = headers.length; while (i--) { - read.SEGMENT(headers[i].start, headers[i].length, ''); + br.SEGMENT(headers[i].start, headers[i].length, ''); } - data = read.SEGMENT(); - read.init(null); + data = br.SEGMENT(); + br.clear(); return data; }, @@ -7462,9 +7715,7 @@ define("moxie/runtime/html5/image/JPEGHeaders", [ }, purge: function() { - headers = []; - read.init(null); - read = null; + this.headers = headers = []; } }; }; @@ -7488,17 +7739,17 @@ define("moxie/runtime/html5/image/JPEGHeaders", [ */ define("moxie/runtime/html5/image/ExifParser", [ "moxie/core/utils/Basic", - "moxie/runtime/html5/utils/BinaryReader" -], function(Basic, BinaryReader) { + "moxie/runtime/html5/utils/BinaryReader", + "moxie/core/Exceptions" +], function(Basic, BinaryReader, x) { - return function ExifParser() { - // Private ExifParser fields - var data, tags, Tiff, offsets = {}, tagDescs; - - data = new BinaryReader(); + function ExifParser(data) { + var __super__, tags, tagDescs, offsets, idx, Tiff; + + BinaryReader.call(this, data); tags = { - tiff : { + tiff: { /* The image orientation viewed in terms of rows and columns. @@ -7519,7 +7770,7 @@ define("moxie/runtime/html5/image/ExifParser", [ 0x8769: 'ExifIFDPointer', 0x8825: 'GPSInfoIFDPointer' }, - exif : { + exif: { 0x9000: 'ExifVersion', 0xA001: 'ColorSpace', 0xA002: 'PixelXDimension', @@ -7542,12 +7793,17 @@ define("moxie/runtime/html5/image/ExifParser", [ 0xA409: 'Saturation', 0xA40A: 'Sharpness' }, - gps : { + gps: { 0x0000: 'GPSVersionID', 0x0001: 'GPSLatitudeRef', 0x0002: 'GPSLatitude', 0x0003: 'GPSLongitudeRef', 0x0004: 'GPSLongitude' + }, + + thumb: { + 0x0201: 'JPEGInterchangeFormat', + 0x0202: 'JPEGInterchangeFormatLength' } }; @@ -7592,10 +7848,10 @@ define("moxie/runtime/html5/image/ExifParser", [ }, 'Flash': { - 0x0000: 'Flash did not fire.', - 0x0001: 'Flash fired.', - 0x0005: 'Strobe return light not detected.', - 0x0007: 'Strobe return light detected.', + 0x0000: 'Flash did not fire', + 0x0001: 'Flash fired', + 0x0005: 'Strobe return light not detected', + 0x0007: 'Strobe return light detected', 0x0009: 'Flash fired, compulsory flash mode', 0x000D: 'Flash fired, compulsory flash mode, return light not detected', 0x000F: 'Flash fired, compulsory flash mode, return light detected', @@ -7664,13 +7920,204 @@ define("moxie/runtime/html5/image/ExifParser", [ } }; + offsets = { + tiffHeader: 10 + }; + + idx = offsets.tiffHeader; + + __super__ = { + clear: this.clear + }; + + // Public functions + Basic.extend(this, { + + read: function() { + try { + return ExifParser.prototype.read.apply(this, arguments); + } catch (ex) { + throw new x.ImageError(x.ImageError.INVALID_META_ERR); + } + }, + + + write: function() { + try { + return ExifParser.prototype.write.apply(this, arguments); + } catch (ex) { + throw new x.ImageError(x.ImageError.INVALID_META_ERR); + } + }, + + + UNDEFINED: function() { + return this.BYTE.apply(this, arguments); + }, + + + RATIONAL: function(idx) { + return this.LONG(idx) / this.LONG(idx + 4) + }, + + + SRATIONAL: function(idx) { + return this.SLONG(idx) / this.SLONG(idx + 4) + }, + + ASCII: function(idx) { + return this.CHAR(idx); + }, + + TIFF: function() { + return Tiff || null; + }, + + + EXIF: function() { + var Exif = null; + + if (offsets.exifIFD) { + try { + Exif = extractTags.call(this, offsets.exifIFD, tags.exif); + } catch(ex) { + return null; + } + + // Fix formatting of some tags + if (Exif.ExifVersion && Basic.typeOf(Exif.ExifVersion) === 'array') { + for (var i = 0, exifVersion = ''; i < Exif.ExifVersion.length; i++) { + exifVersion += String.fromCharCode(Exif.ExifVersion[i]); + } + Exif.ExifVersion = exifVersion; + } + } + + return Exif; + }, + + + GPS: function() { + var GPS = null; + + if (offsets.gpsIFD) { + try { + GPS = extractTags.call(this, offsets.gpsIFD, tags.gps); + } catch (ex) { + return null; + } + + // iOS devices (and probably some others) do not put in GPSVersionID tag (why?..) + if (GPS.GPSVersionID && Basic.typeOf(GPS.GPSVersionID) === 'array') { + GPS.GPSVersionID = GPS.GPSVersionID.join('.'); + } + } + + return GPS; + }, + + + thumb: function() { + if (offsets.IFD1) { + try { + var IFD1Tags = extractTags.call(this, offsets.IFD1, tags.thumb); + + if ('JPEGInterchangeFormat' in IFD1Tags) { + return this.SEGMENT(offsets.tiffHeader + IFD1Tags.JPEGInterchangeFormat, IFD1Tags.JPEGInterchangeFormatLength); + } + } catch (ex) {} + } + return null; + }, + + + setExif: function(tag, value) { + // Right now only setting of width/height is possible + if (tag !== 'PixelXDimension' && tag !== 'PixelYDimension') { return false; } + + return setTag.call(this, 'exif', tag, value); + }, + + + clear: function() { + __super__.clear(); + data = tags = tagDescs = Tiff = offsets = __super__ = null; + } + }); + + + // Check if that's APP1 and that it has EXIF + if (this.SHORT(0) !== 0xFFE1 || this.STRING(4, 5).toUpperCase() !== "EXIF\0") { + throw new x.ImageError(x.ImageError.INVALID_META_ERR); + } + + // Set read order of multi-byte data + this.littleEndian = (this.SHORT(idx) == 0x4949); + + // Check if always present bytes are indeed present + if (this.SHORT(idx+=2) !== 0x002A) { + throw new x.ImageError(x.ImageError.INVALID_META_ERR); + } + + offsets.IFD0 = offsets.tiffHeader + this.LONG(idx += 2); + Tiff = extractTags.call(this, offsets.IFD0, tags.tiff); + + if ('ExifIFDPointer' in Tiff) { + offsets.exifIFD = offsets.tiffHeader + Tiff.ExifIFDPointer; + delete Tiff.ExifIFDPointer; + } + + if ('GPSInfoIFDPointer' in Tiff) { + offsets.gpsIFD = offsets.tiffHeader + Tiff.GPSInfoIFDPointer; + delete Tiff.GPSInfoIFDPointer; + } + + if (Basic.isEmptyObj(Tiff)) { + Tiff = null; + } + + // check if we have a thumb as well + var IFD1Offset = this.LONG(offsets.IFD0 + this.SHORT(offsets.IFD0) * 12 + 2); + if (IFD1Offset) { + offsets.IFD1 = offsets.tiffHeader + IFD1Offset; + } + + function extractTags(IFD_offset, tags2extract) { - var length = data.SHORT(IFD_offset), i, ii, - tag, type, count, tagOffset, offset, value, values = [], hash = {}; + var data = this; + var length, i, tag, type, count, size, offset, value, values = [], hash = {}; + + var types = { + 1 : 'BYTE', + 7 : 'UNDEFINED', + 2 : 'ASCII', + 3 : 'SHORT', + 4 : 'LONG', + 5 : 'RATIONAL', + 9 : 'SLONG', + 10: 'SRATIONAL' + }; + + var sizes = { + 'BYTE' : 1, + 'UNDEFINED' : 1, + 'ASCII' : 1, + 'SHORT' : 2, + 'LONG' : 4, + 'RATIONAL' : 8, + 'SLONG' : 4, + 'SRATIONAL' : 8 + }; + + length = data.SHORT(IFD_offset); + + // The size of APP1 including all these elements shall not exceed the 64 Kbytes specified in the JPEG standard. for (i = 0; i < length; i++) { + values = []; + // Set binary reader pointer to beginning of the next tag - offset = tagOffset = IFD_offset + 12 * i + 2; + offset = IFD_offset + 2 + i*12; tag = tags2extract[data.SHORT(offset)]; @@ -7678,125 +8125,46 @@ define("moxie/runtime/html5/image/ExifParser", [ continue; // Not the tag we requested } - type = data.SHORT(offset+=2); + type = types[data.SHORT(offset+=2)]; count = data.LONG(offset+=2); + size = sizes[type]; - offset += 4; - values = []; - - switch (type) { - case 1: // BYTE - case 7: // UNDEFINED - if (count > 4) { - offset = data.LONG(offset) + offsets.tiffHeader; - } - - for (ii = 0; ii < count; ii++) { - values[ii] = data.BYTE(offset + ii); - } - - break; - - case 2: // STRING - if (count > 4) { - offset = data.LONG(offset) + offsets.tiffHeader; - } - - hash[tag] = data.STRING(offset, count - 1); - - continue; - - case 3: // SHORT - if (count > 2) { - offset = data.LONG(offset) + offsets.tiffHeader; - } - - for (ii = 0; ii < count; ii++) { - values[ii] = data.SHORT(offset + ii*2); - } - - break; - - case 4: // LONG - if (count > 1) { - offset = data.LONG(offset) + offsets.tiffHeader; - } - - for (ii = 0; ii < count; ii++) { - values[ii] = data.LONG(offset + ii*4); - } - - break; - - case 5: // RATIONAL - offset = data.LONG(offset) + offsets.tiffHeader; - - for (ii = 0; ii < count; ii++) { - values[ii] = data.LONG(offset + ii*4) / data.LONG(offset + ii*4 + 4); - } - - break; - - case 9: // SLONG - offset = data.LONG(offset) + offsets.tiffHeader; - - for (ii = 0; ii < count; ii++) { - values[ii] = data.SLONG(offset + ii*4); - } - - break; - - case 10: // SRATIONAL - offset = data.LONG(offset) + offsets.tiffHeader; - - for (ii = 0; ii < count; ii++) { - values[ii] = data.SLONG(offset + ii*4) / data.SLONG(offset + ii*4 + 4); - } - - break; - - default: - continue; + if (!size) { + throw new x.ImageError(x.ImageError.INVALID_META_ERR); } - value = (count == 1 ? values[0] : values); + offset += 4; - if (tagDescs.hasOwnProperty(tag) && typeof value != 'object') { - hash[tag] = tagDescs[tag][value]; + // tag can only fit 4 bytes of data, if data is larger we should look outside + if (size * count > 4) { + // instead of data tag contains an offset of the data + offset = data.LONG(offset) + offsets.tiffHeader; + } + + // in case we left the boundaries of data throw an early exception + if (offset + size * count >= this.length()) { + throw new x.ImageError(x.ImageError.INVALID_META_ERR); + } + + // special care for the string + if (type === 'ASCII') { + hash[tag] = Basic.trim(data.STRING(offset, count).replace(/\0$/, '')); // strip trailing NULL + continue; } else { - hash[tag] = value; + values = data.asArray(type, offset, count); + value = (count == 1 ? values[0] : values); + + if (tagDescs.hasOwnProperty(tag) && typeof value != 'object') { + hash[tag] = tagDescs[tag][value]; + } else { + hash[tag] = value; + } } } return hash; } - function getIFDOffsets() { - var idx = offsets.tiffHeader; - - // Set read order of multi-byte data - data.II(data.SHORT(idx) == 0x4949); - - // Check if always present bytes are indeed present - if (data.SHORT(idx+=2) !== 0x002A) { - return false; - } - - offsets.IFD0 = offsets.tiffHeader + data.LONG(idx += 2); - Tiff = extractTags(offsets.IFD0, tags.tiff); - - if ('ExifIFDPointer' in Tiff) { - offsets.exifIFD = offsets.tiffHeader + Tiff.ExifIFDPointer; - delete Tiff.ExifIFDPointer; - } - - if ('GPSInfoIFDPointer' in Tiff) { - offsets.gpsIFD = offsets.tiffHeader + Tiff.GPSInfoIFDPointer; - delete Tiff.GPSInfoIFDPointer; - } - return true; - } - // At the moment only setting of simple (LONG) values, that do not require offset recalculation, is supported function setTag(ifd, tag, value) { var offset, length, tagOffset, valueOffset = 0; @@ -7812,12 +8180,12 @@ define("moxie/runtime/html5/image/ExifParser", [ } } offset = offsets[ifd.toLowerCase() + 'IFD']; - length = data.SHORT(offset); + length = this.SHORT(offset); for (var i = 0; i < length; i++) { tagOffset = offset + 12 * i + 2; - if (data.SHORT(tagOffset) == tag) { + if (this.SHORT(tagOffset) == tag) { valueOffset = tagOffset + 8; break; } @@ -7827,85 +8195,19 @@ define("moxie/runtime/html5/image/ExifParser", [ return false; } - data.LONG(valueOffset, value); + try { + this.write(valueOffset, value, 4); + } catch(ex) { + return false; + } + return true; } + } + ExifParser.prototype = BinaryReader.prototype; - // Public functions - return { - init: function(segment) { - // Reset internal data - offsets = { - tiffHeader: 10 - }; - - if (segment === undefined || !segment.length) { - return false; - } - - data.init(segment); - - // Check if that's APP1 and that it has EXIF - if (data.SHORT(0) === 0xFFE1 && data.STRING(4, 5).toUpperCase() === "EXIF\0") { - return getIFDOffsets(); - } - return false; - }, - - TIFF: function() { - return Tiff; - }, - - EXIF: function() { - var Exif; - - // Populate EXIF hash - Exif = extractTags(offsets.exifIFD, tags.exif); - - // Fix formatting of some tags - if (Exif.ExifVersion && Basic.typeOf(Exif.ExifVersion) === 'array') { - for (var i = 0, exifVersion = ''; i < Exif.ExifVersion.length; i++) { - exifVersion += String.fromCharCode(Exif.ExifVersion[i]); - } - Exif.ExifVersion = exifVersion; - } - - return Exif; - }, - - GPS: function() { - var GPS; - - GPS = extractTags(offsets.gpsIFD, tags.gps); - - // iOS devices (and probably some others) do not put in GPSVersionID tag (why?..) - if (GPS.GPSVersionID && Basic.typeOf(GPS.GPSVersionID) === 'array') { - GPS.GPSVersionID = GPS.GPSVersionID.join('.'); - } - - return GPS; - }, - - setExif: function(tag, value) { - // Right now only setting of width/height is possible - if (tag !== 'PixelXDimension' && tag !== 'PixelYDimension') {return false;} - - return setTag('exif', tag, value); - }, - - - getBinary: function() { - return data.SEGMENT(); - }, - - purge: function() { - data.init(null); - data = Tiff = null; - offsets = {}; - } - }; - }; + return ExifParser; }); // Included from: src/javascript/runtime/html5/image/JPEG.js @@ -7932,33 +8234,10 @@ define("moxie/runtime/html5/image/JPEG", [ "moxie/runtime/html5/image/ExifParser" ], function(Basic, x, JPEGHeaders, BinaryReader, ExifParser) { - function JPEG(binstr) { - var _binstr, _br, _hm, _ep, _info, hasExif; + function JPEG(data) { + var _br, _hm, _ep, _info; - function _getDimensions() { - var idx = 0, marker, length; - - // examine all through the end, since some images might have very large APP segments - while (idx <= _binstr.length) { - marker = _br.SHORT(idx += 2); - - if (marker >= 0xFFC0 && marker <= 0xFFC3) { // SOFn - idx += 5; // marker (2 bytes) + length (2 bytes) + Sample precision (1 byte) - return { - height: _br.SHORT(idx), - width: _br.SHORT(idx += 2) - }; - } - length = _br.SHORT(idx += 2); - idx += length - 2; - } - return null; - } - - _binstr = binstr; - - _br = new BinaryReader(); - _br.init(_binstr); + _br = new BinaryReader(data); // check if it is jpeg if (_br.SHORT(0) !== 0xFFD8) { @@ -7966,11 +8245,12 @@ define("moxie/runtime/html5/image/JPEG", [ } // backup headers - _hm = new JPEGHeaders(binstr); + _hm = new JPEGHeaders(data); // extract exif info - _ep = new ExifParser(); - hasExif = !!_ep.init(_hm.get('app1')[0]); + try { + _ep = new ExifParser(_hm.get('app1')[0]); + } catch(ex) {} // get dimensions _info = _getDimensions.call(this); @@ -7978,14 +8258,14 @@ define("moxie/runtime/html5/image/JPEG", [ Basic.extend(this, { type: 'image/jpeg', - size: _binstr.length, + size: _br.length(), width: _info && _info.width || 0, height: _info && _info.height || 0, setExif: function(tag, value) { - if (!hasExif) { + if (!_ep) { return false; // or throw an exception } @@ -7998,19 +8278,19 @@ define("moxie/runtime/html5/image/JPEG", [ } // update internal headers - _hm.set('app1', _ep.getBinary()); + _hm.set('app1', _ep.SEGMENT()); }, writeHeaders: function() { if (!arguments.length) { // if no arguments passed, update headers internally - return (_binstr = _hm.restore(_binstr)); + return _hm.restore(data); } return _hm.restore(arguments[0]); }, - stripHeaders: function(binstr) { - return _hm.strip(binstr); + stripHeaders: function(data) { + return _hm.strip(data); }, purge: function() { @@ -8018,22 +8298,72 @@ define("moxie/runtime/html5/image/JPEG", [ } }); - if (hasExif) { + if (_ep) { this.meta = { tiff: _ep.TIFF(), exif: _ep.EXIF(), - gps: _ep.GPS() + gps: _ep.GPS(), + thumb: _getThumb() }; } + + function _getDimensions(br) { + var idx = 0 + , marker + , length + ; + + if (!br) { + br = _br; + } + + // examine all through the end, since some images might have very large APP segments + while (idx <= br.length()) { + marker = br.SHORT(idx += 2); + + if (marker >= 0xFFC0 && marker <= 0xFFC3) { // SOFn + idx += 5; // marker (2 bytes) + length (2 bytes) + Sample precision (1 byte) + return { + height: br.SHORT(idx), + width: br.SHORT(idx += 2) + }; + } + length = br.SHORT(idx += 2); + idx += length - 2; + } + return null; + } + + + function _getThumb() { + var data = _ep.thumb() + , br + , info + ; + + if (data) { + br = new BinaryReader(data); + info = _getDimensions(br); + br.clear(); + + if (info) { + info.data = data; + return info; + } + } + return null; + } + + function _purge() { if (!_ep || !_hm || !_br) { return; // ignore any repeating purge requests } - _ep.purge(); + _ep.clear(); _hm.purge(); - _br.init(null); - _binstr = _info = _hm = _ep = _br = null; + _br.clear(); + _info = _hm = _ep = _br = null; } } @@ -8062,13 +8392,10 @@ define("moxie/runtime/html5/image/PNG", [ "moxie/runtime/html5/utils/BinaryReader" ], function(x, Basic, BinaryReader) { - function PNG(binstr) { - var _binstr, _br, _hm, _ep, _info; + function PNG(data) { + var _br, _hm, _ep, _info; - _binstr = binstr; - - _br = new BinaryReader(); - _br.init(_binstr); + _br = new BinaryReader(data); // check if it's png (function() { @@ -8102,8 +8429,8 @@ define("moxie/runtime/html5/image/PNG", [ if (!_br) { return; // ignore any repeating purge requests } - _br.init(null); - _binstr = _info = _hm = _ep = _br = null; + _br.clear(); + data = _info = _hm = _ep = _br = null; } _info = _getDimensions.call(this); @@ -8111,7 +8438,7 @@ define("moxie/runtime/html5/image/PNG", [ Basic.extend(this, { type: 'image/png', - size: _binstr.length, + size: _br.length(), width: _info.width, @@ -8177,16 +8504,16 @@ define("moxie/runtime/html5/image/ImageInfo", [ @class ImageInfo @constructor - @param {String} binstr Image source as binary string + @param {String} data Image source as binary string */ - return function(binstr) { + return function(data) { var _cs = [JPEG, PNG], _img; // figure out the format, throw: ImageError.WRONG_FORMAT if not supported _img = (function() { for (var i = 0; i < _cs.length; i++) { try { - return new _cs[i](binstr); + return new _cs[i](data); } catch (ex) { // console.info(ex); } @@ -8267,7 +8594,9 @@ define("moxie/runtime/html5/image/ImageInfo", [ @method purge */ - purge: function() {} + purge: function() { + data = null; + } }); Basic.extend(this, _img); @@ -8437,12 +8766,13 @@ define("moxie/runtime/html5/image/Image", [ "moxie/core/utils/Basic", "moxie/core/Exceptions", "moxie/core/utils/Encode", + "moxie/file/Blob", "moxie/file/File", "moxie/runtime/html5/image/ImageInfo", "moxie/runtime/html5/image/MegaPixel", "moxie/core/utils/Mime", "moxie/core/utils/Env" -], function(extensions, Basic, x, Encode, File, ImageInfo, MegaPixel, Mime, Env) { +], function(extensions, Basic, x, Encode, Blob, File, ImageInfo, MegaPixel, Mime, Env) { function HTML5Image() { var me = this @@ -8505,6 +8835,14 @@ define("moxie/runtime/html5/image/Image", [ meta: _imgInfo && _imgInfo.meta || this.meta || {} }; + // store thumbnail data as blob + if (info.meta && info.meta.thumb && !(info.meta.thumb.data instanceof Blob)) { + info.meta.thumb.data = new Blob(null, { + type: 'image/jpeg', + data: info.meta.thumb.data + }); + } + return info; }, @@ -8645,7 +8983,7 @@ define("moxie/runtime/html5/image/Image", [ comp.trigger('load'); }; - _img.src = /^data:[^;]*;base64,/.test(str) ? str : _toDataUrl(str, _blob.type); + _img.src = str.substr(0, 5) == 'data:' ? str : _toDataUrl(str, _blob.type); } @@ -8902,6 +9240,47 @@ define("moxie/runtime/flash/Runtime", [ return parseFloat(version[0] + '.' + version[1]); } + + /** + Cross-browser SWF removal + - Especially needed to safely and completely remove a SWF in Internet Explorer + + Originated from SWFObject v2.2 + */ + function removeSWF(id) { + var obj = Dom.get(id); + if (obj && obj.nodeName == "OBJECT") { + if (Env.browser === 'IE') { + obj.style.display = "none"; + (function onInit(){ + // http://msdn.microsoft.com/en-us/library/ie/ms534360(v=vs.85).aspx + if (obj.readyState == 4) { + removeObjectInIE(id); + } + else { + setTimeout(onInit, 10); + } + })(); + } + else { + obj.parentNode.removeChild(obj); + } + } + } + + + function removeObjectInIE(id) { + var obj = Dom.get(id); + if (obj) { + for (var i in obj) { + if (typeof obj[i] == "function") { + obj[i] = null; + } + } + obj.parentNode.removeChild(obj); + } + } + /** Constructor for the Flash Runtime @@ -8999,6 +9378,10 @@ define("moxie/runtime/flash/Runtime", [ // minimal requirement for Flash Player version if (getShimVersion() < 10) { + if (MXI_DEBUG && Env.debug.runtime) { + Env.log("\tFlash didn't meet minimal version requirement (10)."); + } + this.mode = false; // with falsy mode, runtime won't operable, no matter what the mode was before } @@ -9056,12 +9439,18 @@ define("moxie/runtime/flash/Runtime", [ initTimer = setTimeout(function() { if (I && !I.initialized) { // runtime might be already destroyed by this moment I.trigger("Error", new x.RuntimeError(x.RuntimeError.NOT_INIT_ERR)); + + if (MXI_DEBUG && Env.debug.runtime) { + Env.log("\tFlash failed to initialize within a specified period of time (typically 5s)."); + } } }, 5000); }, destroy: (function(destroy) { // extend default destroy method return function() { + removeSWF(I.uid); // SWF removal requires special care in IE + destroy.call(I); clearTimeout(initTimer); // initialization check might be still onwait options = initTimer = destroy = I = null; @@ -9076,6 +9465,53 @@ define("moxie/runtime/flash/Runtime", [ return extensions; }); +// Included from: src/javascript/runtime/flash/file/FileInput.js + +/** + * FileInput.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/flash/file/FileInput +@private +*/ +define("moxie/runtime/flash/file/FileInput", [ + "moxie/runtime/flash/Runtime", + "moxie/file/File", + "moxie/core/utils/Basic" +], function(extensions, File, Basic) { + + var FileInput = { + init: function(options) { + var comp = this, I = this.getRuntime(); + + this.bind("Change", function() { + var files = I.shimExec.call(comp, 'FileInput', 'getFiles'); + comp.files = []; + Basic.each(files, function(file) { + comp.files.push(new File(I.uid, file)); + }); + }, 999); + + this.getRuntime().shimExec.call(this, 'FileInput', 'init', { + name: options.name, + accept: options.accept, + multiple: options.multiple + }); + + this.trigger('ready'); + } + }; + + return (extensions.FileInput = FileInput); +}); + // Included from: src/javascript/runtime/flash/file/Blob.js /** @@ -9125,40 +9561,6 @@ define("moxie/runtime/flash/file/Blob", [ return (extensions.Blob = FlashBlob); }); -// Included from: src/javascript/runtime/flash/file/FileInput.js - -/** - * FileInput.js - * - * Copyright 2013, Moxiecode Systems AB - * Released under GPL License. - * - * License: http://www.plupload.com/license - * Contributing: http://www.plupload.com/contributing - */ - -/** -@class moxie/runtime/flash/file/FileInput -@private -*/ -define("moxie/runtime/flash/file/FileInput", [ - "moxie/runtime/flash/Runtime" -], function(extensions) { - - var FileInput = { - init: function(options) { - this.getRuntime().shimExec.call(this, 'FileInput', 'init', { - name: options.name, - accept: options.accept, - multiple: options.multiple - }); - this.trigger('ready'); - } - }; - - return (extensions.FileInput = FileInput); -}); - // Included from: src/javascript/runtime/flash/file/FileReader.js /** @@ -9180,8 +9582,6 @@ define("moxie/runtime/flash/file/FileReader", [ "moxie/core/utils/Encode" ], function(extensions, Encode) { - var _result = ''; - function _formatData(data, op) { switch (op) { case 'readAsText': @@ -9196,28 +9596,22 @@ define("moxie/runtime/flash/file/FileReader", [ var FileReader = { read: function(op, blob) { - var target = this, self = target.getRuntime(); + var comp = this; + + comp.result = ''; // special prefix for DataURL read mode if (op === 'readAsDataURL') { - _result = 'data:' + (blob.type || '') + ';base64,'; + comp.result = 'data:' + (blob.type || '') + ';base64,'; } - target.bind('Progress', function(e, data) { + comp.bind('Progress', function(e, data) { if (data) { - _result += _formatData(data, op); + comp.result += _formatData(data, op); } - }); + }, 999); - return self.shimExec.call(this, 'FileReader', 'readAsBase64', blob.uid); - }, - - getResult: function() { - return _result; - }, - - destroy: function() { - _result = null; + return comp.getRuntime().shimExec.call(this, 'FileReader', 'readAsBase64', blob.uid); } }; @@ -9512,6 +9906,17 @@ define("moxie/runtime/flash/image/Image", [ return self.shimExec.call(this, 'Image', 'loadFromImage', img.uid); }, + getInfo: function() { + var self = this.getRuntime() + , info = self.shimExec.call(this, 'Image', 'getInfo') + ; + + if (info.meta && info.meta.thumb && !(info.meta.thumb.data instanceof Blob)) { + info.meta.thumb.data = new Blob(self.uid, info.meta.thumb.data); + } + return info; + }, + getAsBlob: function(type, quality) { var self = this.getRuntime() , blob = self.shimExec.call(this, 'Image', 'getAsBlob', type, quality) @@ -9696,6 +10101,10 @@ define("moxie/runtime/silverlight/Runtime", [ // minimal requirement if (!isInstalled('2.0.31005.0') || Env.browser === 'Opera') { + if (MXI_DEBUG && Env.debug.runtime) { + Env.log("\tSilverlight is not installed or minimal version (2.0.31005.0) requirement not met (not likely)."); + } + this.mode = false; } @@ -9727,6 +10136,10 @@ define("moxie/runtime/silverlight/Runtime", [ initTimer = setTimeout(function() { if (I && !I.initialized) { // runtime might be already destroyed by this moment I.trigger("Error", new x.RuntimeError(x.RuntimeError.NOT_INIT_ERR)); + + if (MXI_DEBUG && Env.debug.runtime) { + Env.log("\Silverlight failed to initialize within a specified period of time (5-10s)."); + } } }, Env.OS !== 'Windows'? 10000 : 5000); // give it more time to initialize in non Windows OS (like Mac) }, @@ -9747,6 +10160,56 @@ define("moxie/runtime/silverlight/Runtime", [ return extensions; }); +// Included from: src/javascript/runtime/silverlight/file/FileInput.js + +/** + * FileInput.js + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + */ + +/** +@class moxie/runtime/silverlight/file/FileInput +@private +*/ +define("moxie/runtime/silverlight/file/FileInput", [ + "moxie/runtime/silverlight/Runtime", + "moxie/file/File", + "moxie/core/utils/Basic" +], function(extensions, File, Basic) { + + var FileInput = { + init: function(options) { + var comp = this, I = this.getRuntime(); + + function toFilters(accept) { + var filter = ''; + for (var i = 0; i < accept.length; i++) { + filter += (filter !== '' ? '|' : '') + accept[i].title + " | *." + accept[i].extensions.replace(/,/g, ';*.'); + } + return filter; + } + + this.bind("Change", function() { + var files = I.shimExec.call(comp, 'FileInput', 'getFiles'); + comp.files = []; + Basic.each(files, function(file) { + comp.files.push(new File(I.uid, file)); + }); + }, 999); + + this.getRuntime().shimExec.call(this, 'FileInput', 'init', toFilters(options.accept), options.name, options.multiple); + this.trigger('ready'); + } + }; + + return (extensions.FileInput = FileInput); +}); + // Included from: src/javascript/runtime/silverlight/file/Blob.js /** @@ -9771,45 +10234,6 @@ define("moxie/runtime/silverlight/file/Blob", [ return (extensions.Blob = Basic.extend({}, Blob)); }); -// Included from: src/javascript/runtime/silverlight/file/FileInput.js - -/** - * FileInput.js - * - * Copyright 2013, Moxiecode Systems AB - * Released under GPL License. - * - * License: http://www.plupload.com/license - * Contributing: http://www.plupload.com/contributing - */ - -/** -@class moxie/runtime/silverlight/file/FileInput -@private -*/ -define("moxie/runtime/silverlight/file/FileInput", [ - "moxie/runtime/silverlight/Runtime" -], function(extensions) { - - var FileInput = { - init: function(options) { - - function toFilters(accept) { - var filter = ''; - for (var i = 0; i < accept.length; i++) { - filter += (filter !== '' ? '|' : '') + accept[i].title + " | *." + accept[i].extensions.replace(/,/g, ';*.'); - } - return filter; - } - - this.getRuntime().shimExec.call(this, 'FileInput', 'init', toFilters(options.accept), options.name, options.multiple); - this.trigger('ready'); - } - }; - - return (extensions.FileInput = FileInput); -}); - // Included from: src/javascript/runtime/silverlight/file/FileDrop.js /** @@ -9985,13 +10409,14 @@ define("moxie/runtime/silverlight/runtime/Transporter", [ define("moxie/runtime/silverlight/image/Image", [ "moxie/runtime/silverlight/Runtime", "moxie/core/utils/Basic", + "moxie/file/Blob", "moxie/runtime/flash/image/Image" -], function(extensions, Basic, Image) { +], function(extensions, Basic, Blob, Image) { return (extensions.Image = Basic.extend({}, Image, { getInfo: function() { var self = this.getRuntime() - , grps = ['tiff', 'exif', 'gps'] + , grps = ['tiff', 'exif', 'gps', 'thumb'] , info = { meta: {} } , rawInfo = self.shimExec.call(this, 'Image', 'getInfo') ; @@ -10021,6 +10446,11 @@ define("moxie/runtime/silverlight/image/Image", [ } } }); + + // save thumb data as blob + if (info.meta && info.meta.thumb && !(info.meta.thumb.data instanceof Blob)) { + info.meta.thumb.data = new Blob(self.uid, info.meta.thumb.data); + } } info.width = parseInt(rawInfo.width, 10); @@ -10076,7 +10506,9 @@ define("moxie/runtime/html4/Runtime", [ do_cors: false, drag_and_drop: false, filter_by_extension: Test(function() { // if you know how to feature-detect this, please suggest - return (Env.browser === 'Chrome' && Env.version >= 28) || (Env.browser === 'IE' && Env.version >= 10); + return (Env.browser === 'Chrome' && Env.verComp(Env.version, 28, '>=')) || + (Env.browser === 'IE' && Env.verComp(Env.version, 10, '>=')) || + (Env.browser === 'Safari' && Env.verComp(Env.version, 7, '>=')); }()), resize_image: function() { return extensions.Image && I.can('access_binary') && Env.can('create_canvas'); @@ -10103,11 +10535,14 @@ define("moxie/runtime/html4/Runtime", [ stream_upload: function() { return I.can('select_file'); }, - summon_file_dialog: Test(function() { // yeah... some dirty sniffing here... - return (Env.browser === 'Firefox' && Env.version >= 4) || - (Env.browser === 'Opera' && Env.version >= 12) || - !!~Basic.inArray(Env.browser, ['Chrome', 'Safari']); - }()), + summon_file_dialog: function() { // yeah... some dirty sniffing here... + return I.can('select_file') && ( + (Env.browser === 'Firefox' && Env.verComp(Env.version, 4, '>=')) || + (Env.browser === 'Opera' && Env.verComp(Env.version, 12, '>=')) || + (Env.browser === 'IE' && Env.verComp(Env.version, 10, '>=')) || + !!~Basic.inArray(Env.browser, ['Chrome', 'Safari']) + ); + }, upload_filesize: True, use_http_method: function(methods) { return !Basic.arrayDiff(methods, ['GET', 'POST']); @@ -10154,15 +10589,16 @@ define("moxie/runtime/html4/Runtime", [ */ define("moxie/runtime/html4/file/FileInput", [ "moxie/runtime/html4/Runtime", + "moxie/file/File", "moxie/core/utils/Basic", "moxie/core/utils/Dom", "moxie/core/utils/Events", "moxie/core/utils/Mime", "moxie/core/utils/Env" -], function(extensions, Basic, Dom, Events, Mime, Env) { +], function(extensions, File, Basic, Dom, Events, Mime, Env) { function FileInput() { - var _uid, _files = [], _mimes = [], _options; + var _uid, _mimes = [], _options; function addInput() { var comp = this, I = comp.getRuntime(), shimContainer, browseButton, currForm, form, input, uid; @@ -10217,7 +10653,7 @@ define("moxie/runtime/html4/file/FileInput", [ height: '100%' }); - if (Env.browser === 'IE' && Env.version < 10) { + if (Env.browser === 'IE' && Env.verComp(Env.version, 10, '<')) { Basic.extend(input.style, { filter : "progid:DXImageTransform.Microsoft.Alpha(opacity=0)" }); @@ -10230,39 +10666,35 @@ define("moxie/runtime/html4/file/FileInput", [ return; } - if (this.files) { + if (this.files) { // check if browser is fresh enough file = this.files[0]; + + // ignore empty files (IE10 for example hangs if you try to send them via XHR) + if (file.size === 0) { + form.parentNode.removeChild(form); + return; + } } else { file = { name: this.value }; } - _files = [file]; + file = new File(I.uid, file); - this.onchange = function() {}; // clear event handler - addInput.call(comp); + // clear event handler + this.onchange = function() {}; + addInput.call(comp); - // after file is initialized as o.File, we need to update form and input ids - comp.bind('change', function onChange() { - var input = Dom.get(uid), form = Dom.get(uid + '_form'), file; + comp.files = [file]; - comp.unbind('change', onChange); - - if (comp.files.length && input && form) { - file = comp.files[0]; - - input.setAttribute('id', file.uid); - form.setAttribute('id', file.uid + '_form'); - - // set upload target - form.setAttribute('target', file.uid + '_iframe'); - } - input = form = null; - }, 998); + // substitute all ids with file uids (consider file.uid read-only - we cannot do it the other way around) + input.setAttribute('id', file.uid); + form.setAttribute('id', file.uid + '_form'); + + comp.trigger('change'); input = form = null; - comp.trigger('change'); }; @@ -10344,9 +10776,6 @@ define("moxie/runtime/html4/file/FileInput", [ }); }, - getFiles: function() { - return _files; - }, disable: function(state) { var input; @@ -10372,7 +10801,7 @@ define("moxie/runtime/html4/file/FileInput", [ shim.removeInstance(this.uid); - _uid = _files = _mimes = _options = shimContainer = shim = null; + _uid = _mimes = _options = shimContainer = shim = null; } }); } @@ -10568,11 +10997,13 @@ define("moxie/runtime/html4/xhr/XMLHttpRequest", [ form.setAttribute('method', meta.method); form.setAttribute('enctype', 'multipart/form-data'); form.setAttribute('encoding', 'multipart/form-data'); - form.setAttribute('target', uid + '_iframe'); I.getShimContainer().appendChild(form); } + // set upload target + form.setAttribute('target', uid + '_iframe'); + if (data instanceof FormData) { data.each(function(value, name) { if (value instanceof Blob) { @@ -10673,8 +11104,9 @@ define("moxie/runtime/html4/image/Image", [ return (extensions.Image = Image); }); -expose(["moxie/core/utils/Basic","moxie/core/I18n","moxie/core/utils/Mime","moxie/core/utils/Env","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/core/EventTarget","moxie/core/utils/Encode","moxie/runtime/Runtime","moxie/runtime/RuntimeClient","moxie/file/Blob","moxie/file/File","moxie/file/FileInput","moxie/file/FileDrop","moxie/runtime/RuntimeTarget","moxie/file/FileReader","moxie/core/utils/Url","moxie/file/FileReaderSync","moxie/xhr/FormData","moxie/xhr/XMLHttpRequest","moxie/runtime/Transporter","moxie/image/Image","moxie/core/utils/Events"]); -})(this);/** +expose(["moxie/core/utils/Basic","moxie/core/utils/Env","moxie/core/I18n","moxie/core/utils/Mime","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/core/EventTarget","moxie/runtime/Runtime","moxie/runtime/RuntimeClient","moxie/file/FileInput","moxie/core/utils/Encode","moxie/file/Blob","moxie/file/File","moxie/file/FileDrop","moxie/file/FileReader","moxie/core/utils/Url","moxie/runtime/RuntimeTarget","moxie/file/FileReaderSync","moxie/xhr/FormData","moxie/xhr/XMLHttpRequest","moxie/runtime/Transporter","moxie/image/Image","moxie/core/utils/Events"]); +})(this); +/** * o.js * * Copyright 2013, Moxiecode Systems AB diff --git a/e107_web/js/plupload/moxie.min.js b/e107_web/js/plupload/moxie.min.js index 8d94a0dde..69581ee82 100644 --- a/e107_web/js/plupload/moxie.min.js +++ b/e107_web/js/plupload/moxie.min.js @@ -1,6 +1,6 @@ /** * mOxie - multi-runtime File API & XMLHttpRequest L2 Polyfill - * v1.2.1 + * v1.3.5 * * Copyright 2013, Moxiecode Systems AB * Released under GPL License. @@ -8,8 +8,9 @@ * License: http://www.plupload.com/license * Contributing: http://www.plupload.com/contributing * - * Date: 2014-05-14 + * Date: 2016-05-15 */ -!function(e,t){"use strict";function n(e,t){for(var n,i=[],r=0;r0&&n(o,function(n,o){n!==r&&(e(i[o])===e(n)&&~a(e(n),["array","object"])?t(i[o],n):i[o]=n)})}),i},n=function(e,t){var n,i,r,o;if(e){try{n=e.length}catch(a){n=o}if(n===o){for(i in e)if(e.hasOwnProperty(i)&&t(e[i],i)===!1)return}else for(r=0;n>r;r++)if(t(e[r],r)===!1)return}},i=function(t){var n;if(!t||"object"!==e(t))return!0;for(n in t)return!1;return!0},r=function(t,n){function i(r){"function"===e(t[r])&&t[r](function(e){++rn;n++)if(t[n]===e)return n}return-1},s=function(t,n){var i=[];"array"!==e(t)&&(t=[t]),"array"!==e(n)&&(n=[n]);for(var r in t)-1===a(t[r],n)&&i.push(t[r]);return i.length?i:!1},u=function(e,t){var i=[];return n(e,function(e){-1!==a(e,t)&&i.push(e)}),i.length?i:null},c=function(e){var t,n=[];for(t=0;ti;i++)n+=Math.floor(65535*Math.random()).toString(32);return(t||"o_")+n+(e++).toString(32)}}(),d=function(e){return e?String.prototype.trim?String.prototype.trim.call(e):e.toString().replace(/^\s*/,"").replace(/\s*$/,""):e},f=function(e){if("string"!=typeof e)return e;var t={t:1099511627776,g:1073741824,m:1048576,k:1024},n;return e=/^([0-9]+)([mgk]?)$/.exec(e.toLowerCase().replace(/[^0-9mkg]/g,"")),n=e[2],e=+e[1],t.hasOwnProperty(n)&&(e*=t[n]),e};return{guid:l,typeOf:e,extend:t,each:n,isEmptyObj:i,inSeries:r,inParallel:o,inArray:a,arrayDiff:s,arrayIntersect:u,toArray:c,trim:d,parseSizeStr:f}}),i(c,[u],function(e){var t={};return{addI18n:function(n){return e.extend(t,n)},translate:function(e){return t[e]||e},_:function(e){return this.translate(e)},sprintf:function(t){var n=[].slice.call(arguments,1);return t.replace(/%[a-z]/g,function(){var t=n.shift();return"undefined"!==e.typeOf(t)?t:""})}}}),i(l,[u,c],function(e,t){var n="application/msword,doc dot,application/pdf,pdf,application/pgp-signature,pgp,application/postscript,ps ai eps,application/rtf,rtf,application/vnd.ms-excel,xls xlb,application/vnd.ms-powerpoint,ppt pps pot,application/zip,zip,application/x-shockwave-flash,swf swfl,application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx,application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx,application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx,application/vnd.openxmlformats-officedocument.presentationml.template,potx,application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx,application/x-javascript,js,application/json,json,audio/mpeg,mp3 mpga mpega mp2,audio/x-wav,wav,audio/x-m4a,m4a,audio/ogg,oga ogg,audio/aiff,aiff aif,audio/flac,flac,audio/aac,aac,audio/ac3,ac3,audio/x-ms-wma,wma,image/bmp,bmp,image/gif,gif,image/jpeg,jpg jpeg jpe,image/photoshop,psd,image/png,png,image/svg+xml,svg svgz,image/tiff,tiff tif,text/plain,asc txt text diff log,text/html,htm html xhtml,text/css,css,text/csv,csv,text/rtf,rtf,video/mpeg,mpeg mpg mpe m2v,video/quicktime,qt mov,video/mp4,mp4,video/x-m4v,m4v,video/x-flv,flv,video/x-ms-wmv,wmv,video/avi,avi,video/webm,webm,video/3gpp,3gpp 3gp,video/3gpp2,3g2,video/vnd.rn-realvideo,rv,video/ogg,ogv,video/x-matroska,mkv,application/vnd.oasis.opendocument.formula-template,otf,application/octet-stream,exe",i={mimes:{},extensions:{},addMimeType:function(e){var t=e.split(/,/),n,i,r;for(n=0;ni;i++)if(e[i]!=t[i]){if(e[i]=u(e[i]),t[i]=u(t[i]),e[i]t[i]){o=1;break}}if(!n)return o;switch(n){case">":case"gt":return o>0;case">=":case"ge":return o>=0;case"<=":case"le":return 0>=o;case"==":case"=":case"eq":return 0===o;case"<>":case"!=":case"ne":return 0!==o;case"":case"<":case"lt":return 0>o;default:return null}}var n=function(e){var t="",n="?",i="function",r="undefined",o="object",a="major",s="model",u="name",c="type",l="vendor",d="version",f="architecture",h="console",p="mobile",m="tablet",g={has:function(e,t){return-1!==t.toLowerCase().indexOf(e.toLowerCase())},lowerize:function(e){return e.toLowerCase()}},v={rgx:function(){for(var t,n=0,a,s,u,c,l,d,f=arguments;n0?2==c.length?t[c[0]]=typeof c[1]==i?c[1].call(this,d):c[1]:3==c.length?t[c[0]]=typeof c[1]!==i||c[1].exec&&c[1].test?d?d.replace(c[1],c[2]):e:d?c[1].call(this,d,c[2]):e:4==c.length&&(t[c[0]]=d?c[3].call(this,d.replace(c[1],c[2])):e):t[c]=d?d:e;break}if(l)break}return t},str:function(t,i){for(var r in i)if(typeof i[r]===o&&i[r].length>0){for(var a=0;a=9)},use_data_uri_of:function(e){return t.use_data_uri&&33e3>e||t.use_data_uri_over32kb()},use_fileinput:function(){var e=document.createElement("input");return e.setAttribute("type","file"),!e.disabled}};return function(n){var i=[].slice.call(arguments);return i.shift(),"function"===e.typeOf(t[n])?t[n].apply(this,i):!!t[n]}}(),r={can:i,browser:n.browser.name,version:parseFloat(n.browser.major),os:n.os.name,osVersion:n.os.version,verComp:t,swf_url:"../flash/Moxie.swf",xap_url:"../silverlight/Moxie.xap",global_event_dispatcher:"moxie.core.EventTarget.instance.dispatchEvent"};return r.OS=r.os,r}),i(f,[d],function(e){var t=function(e){return"string"!=typeof e?e:document.getElementById(e)},n=function(e,t){if(!e.className)return!1;var n=new RegExp("(^|\\s+)"+t+"(\\s+|$)");return n.test(e.className)},i=function(e,t){n(e,t)||(e.className=e.className?e.className.replace(/\s+$/,"")+" "+t:t)},r=function(e,t){if(e.className){var n=new RegExp("(^|\\s+)"+t+"(\\s+|$)");e.className=e.className.replace(n,function(e,t,n){return" "===t&&" "===n?" ":""})}},o=function(e,t){return e.currentStyle?e.currentStyle[t]:window.getComputedStyle?window.getComputedStyle(e,null)[t]:void 0},a=function(t,n){function i(e){var t,n,i=0,r=0;return e&&(n=e.getBoundingClientRect(),t="CSS1Compat"===s.compatMode?s.documentElement:s.body,i=n.left+t.scrollLeft,r=n.top+t.scrollTop),{x:i,y:r}}var r=0,o=0,a,s=document,u,c;if(t=t,n=n||s.body,t&&t.getBoundingClientRect&&"IE"===e.browser&&(!s.documentMode||s.documentMode<8))return u=i(t),c=i(n),{x:u.x-c.x,y:u.y-c.y};for(a=t;a&&a!=n&&a.nodeType;)r+=a.offsetLeft||0,o+=a.offsetTop||0,a=a.offsetParent;for(a=t.parentNode;a&&a!=n&&a.nodeType;)r-=a.scrollLeft||0,o-=a.scrollTop||0,a=a.parentNode;return{x:r,y:o}},s=function(e){return{w:e.offsetWidth||e.clientWidth,h:e.offsetHeight||e.clientHeight}};return{get:t,hasClass:n,addClass:i,removeClass:r,getStyle:o,getPos:a,getSize:s}}),i(h,[u],function(e){function t(e,t){var n;for(n in e)if(e[n]===t)return n;return null}return{RuntimeError:function(){function n(e){this.code=e,this.name=t(i,e),this.message=this.name+": RuntimeError "+this.code}var i={NOT_INIT_ERR:1,NOT_SUPPORTED_ERR:9,JS_ERR:4};return e.extend(n,i),n.prototype=Error.prototype,n}(),OperationNotAllowedException:function(){function t(e){this.code=e,this.name="OperationNotAllowedException"}return e.extend(t,{NOT_ALLOWED_ERR:1}),t.prototype=Error.prototype,t}(),ImageError:function(){function n(e){this.code=e,this.name=t(i,e),this.message=this.name+": ImageError "+this.code}var i={WRONG_FORMAT:1,MAX_RESOLUTION_ERR:2};return e.extend(n,i),n.prototype=Error.prototype,n}(),FileException:function(){function n(e){this.code=e,this.name=t(i,e),this.message=this.name+": FileException "+this.code}var i={NOT_FOUND_ERR:1,SECURITY_ERR:2,ABORT_ERR:3,NOT_READABLE_ERR:4,ENCODING_ERR:5,NO_MODIFICATION_ALLOWED_ERR:6,INVALID_STATE_ERR:7,SYNTAX_ERR:8};return e.extend(n,i),n.prototype=Error.prototype,n}(),DOMException:function(){function n(e){this.code=e,this.name=t(i,e),this.message=this.name+": DOMException "+this.code}var i={INDEX_SIZE_ERR:1,DOMSTRING_SIZE_ERR:2,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,INVALID_CHARACTER_ERR:5,NO_DATA_ALLOWED_ERR:6,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INUSE_ATTRIBUTE_ERR:10,INVALID_STATE_ERR:11,SYNTAX_ERR:12,INVALID_MODIFICATION_ERR:13,NAMESPACE_ERR:14,INVALID_ACCESS_ERR:15,VALIDATION_ERR:16,TYPE_MISMATCH_ERR:17,SECURITY_ERR:18,NETWORK_ERR:19,ABORT_ERR:20,URL_MISMATCH_ERR:21,QUOTA_EXCEEDED_ERR:22,TIMEOUT_ERR:23,INVALID_NODE_TYPE_ERR:24,DATA_CLONE_ERR:25};return e.extend(n,i),n.prototype=Error.prototype,n}(),EventException:function(){function t(e){this.code=e,this.name="EventException"}return e.extend(t,{UNSPECIFIED_EVENT_TYPE_ERR:0}),t.prototype=Error.prototype,t}()}}),i(p,[h,u],function(e,t){function n(){var n={};t.extend(this,{uid:null,init:function(){this.uid||(this.uid=t.guid("uid_"))},addEventListener:function(e,i,r,o){var a=this,s;return e=t.trim(e),/\s/.test(e)?void t.each(e.split(/\s+/),function(e){a.addEventListener(e,i,r,o)}):(e=e.toLowerCase(),r=parseInt(r,10)||0,s=n[this.uid]&&n[this.uid][e]||[],s.push({fn:i,priority:r,scope:o||this}),n[this.uid]||(n[this.uid]={}),void(n[this.uid][e]=s))},hasEventListener:function(e){return e?!(!n[this.uid]||!n[this.uid][e]):!!n[this.uid]},removeEventListener:function(e,i){e=e.toLowerCase();var r=n[this.uid]&&n[this.uid][e],o;if(r){if(i){for(o=r.length-1;o>=0;o--)if(r[o].fn===i){r.splice(o,1);break}}else r=[];r.length||(delete n[this.uid][e],t.isEmptyObj(n[this.uid])&&delete n[this.uid])}},removeAllEventListeners:function(){n[this.uid]&&delete n[this.uid]},dispatchEvent:function(i){var r,o,a,s,u={},c=!0,l;if("string"!==t.typeOf(i)){if(s=i,"string"!==t.typeOf(s.type))throw new e.EventException(e.EventException.UNSPECIFIED_EVENT_TYPE_ERR);i=s.type,s.total!==l&&s.loaded!==l&&(u.total=s.total,u.loaded=s.loaded),u.async=s.async||!1}if(-1!==i.indexOf("::")?!function(e){r=e[0],i=e[1]}(i.split("::")):r=this.uid,i=i.toLowerCase(),o=n[r]&&n[r][i]){o.sort(function(e,t){return t.priority-e.priority}),a=[].slice.call(arguments),a.shift(),u.type=i,a.unshift(u);var d=[];t.each(o,function(e){a[0].target=e.scope,d.push(u.async?function(t){setTimeout(function(){t(e.fn.apply(e.scope,a)===!1)},1)}:function(t){t(e.fn.apply(e.scope,a)===!1)})}),d.length&&t.inSeries(d,function(e){c=!e})}return c},bind:function(){this.addEventListener.apply(this,arguments)},unbind:function(){this.removeEventListener.apply(this,arguments)},unbindAll:function(){this.removeAllEventListeners.apply(this,arguments)},trigger:function(){return this.dispatchEvent.apply(this,arguments)},convertEventPropsToHandlers:function(e){var n;"array"!==t.typeOf(e)&&(e=[e]);for(var i=0;i>16&255,o=d>>8&255,a=255&d,m[h++]=64==c?String.fromCharCode(r):64==l?String.fromCharCode(r,o):String.fromCharCode(r,o,a);while(f>18&63,u=d>>12&63,c=d>>6&63,l=63&d,m[h++]=i.charAt(s)+i.charAt(u)+i.charAt(c)+i.charAt(l);while(fa;a++)o+=String.fromCharCode(r[a]);return o}}t.call(this),e.extend(this,{uid:e.guid("uid_"),readAsBinaryString:function(e){return i.call(this,"readAsBinaryString",e)},readAsDataURL:function(e){return i.call(this,"readAsDataURL",e)},readAsText:function(e){return i.call(this,"readAsText",e)}})}}),i(A,[h,u,y],function(e,t,n){function i(){var e,i=[];t.extend(this,{append:function(r,o){var a=this,s=t.typeOf(o);o instanceof n?e={name:r,value:o}:"array"===s?(r+="[]",t.each(o,function(e){a.append(r,e)})):"object"===s?t.each(o,function(e,t){a.append(r+"["+t+"]",e)}):"null"===s||"undefined"===s||"number"===s&&isNaN(o)?a.append(r,"false"):i.push({name:r,value:o.toString()})},hasBlob:function(){return!!this.getBlob()},getBlob:function(){return e&&e.value||null},getBlobName:function(){return e&&e.name||null},each:function(n){t.each(i,function(e){n(e.value,e.name)}),e&&n(e.value,e.name)},destroy:function(){e=null,i=[]}})}return i}),i(S,[u,h,p,m,R,g,x,y,T,A,d,l],function(e,t,n,i,r,o,a,s,u,c,l,d){function f(){this.uid=e.guid("uid_")}function h(){function n(e,t){return y.hasOwnProperty(e)?1===arguments.length?l.can("define_property")?y[e]:v[e]:void(l.can("define_property")?y[e]=t:v[e]=t):void 0}function u(t){function i(){k&&(k.destroy(),k=null),s.dispatchEvent("loadend"),s=null}function r(r){k.bind("LoadStart",function(e){n("readyState",h.LOADING),s.dispatchEvent("readystatechange"),s.dispatchEvent(e),I&&s.upload.dispatchEvent(e)}),k.bind("Progress",function(e){n("readyState")!==h.LOADING&&(n("readyState",h.LOADING),s.dispatchEvent("readystatechange")),s.dispatchEvent(e)}),k.bind("UploadProgress",function(e){I&&s.upload.dispatchEvent({type:"progress",lengthComputable:!1,total:e.total,loaded:e.loaded})}),k.bind("Load",function(t){n("readyState",h.DONE),n("status",Number(r.exec.call(k,"XMLHttpRequest","getStatus")||0)),n("statusText",p[n("status")]||""),n("response",r.exec.call(k,"XMLHttpRequest","getResponse",n("responseType"))),~e.inArray(n("responseType"),["text",""])?n("responseText",n("response")):"document"===n("responseType")&&n("responseXML",n("response")),U=r.exec.call(k,"XMLHttpRequest","getAllResponseHeaders"),s.dispatchEvent("readystatechange"),n("status")>0?(I&&s.upload.dispatchEvent(t),s.dispatchEvent(t)):(N=!0,s.dispatchEvent("error")),i()}),k.bind("Abort",function(e){s.dispatchEvent(e),i()}),k.bind("Error",function(e){N=!0,n("readyState",h.DONE),s.dispatchEvent("readystatechange"),D=!0,s.dispatchEvent(e),i()}),r.exec.call(k,"XMLHttpRequest","send",{url:E,method:_,async:w,user:b,password:R,headers:x,mimeType:A,encoding:T,responseType:s.responseType,withCredentials:s.withCredentials,options:P},t)}var s=this;M=(new Date).getTime(),k=new a,"string"==typeof P.required_caps&&(P.required_caps=o.parseCaps(P.required_caps)),P.required_caps=e.extend({},P.required_caps,{return_response_type:s.responseType}),t instanceof c&&(P.required_caps.send_multipart=!0),L||(P.required_caps.do_cors=!0),P.ruid?r(k.connectRuntime(P)):(k.bind("RuntimeInit",function(e,t){r(t)}),k.bind("RuntimeError",function(e,t){s.dispatchEvent("RuntimeError",t)}),k.connectRuntime(P))}function g(){n("responseText",""),n("responseXML",null),n("response",null),n("status",0),n("statusText",""),M=C=null}var v=this,y={timeout:0,readyState:h.UNSENT,withCredentials:!1,status:0,statusText:"",responseType:"",responseXML:null,responseText:null,response:null},w=!0,E,_,x={},b,R,T=null,A=null,S=!1,O=!1,I=!1,D=!1,N=!1,L=!1,M,C,F=null,H=null,P={},k,U="",B;e.extend(this,y,{uid:e.guid("uid_"),upload:new f,open:function(o,a,s,u,c){var l;if(!o||!a)throw new t.DOMException(t.DOMException.SYNTAX_ERR);if(/[\u0100-\uffff]/.test(o)||i.utf8_encode(o)!==o)throw new t.DOMException(t.DOMException.SYNTAX_ERR);if(~e.inArray(o.toUpperCase(),["CONNECT","DELETE","GET","HEAD","OPTIONS","POST","PUT","TRACE","TRACK"])&&(_=o.toUpperCase()),~e.inArray(_,["CONNECT","TRACE","TRACK"]))throw new t.DOMException(t.DOMException.SECURITY_ERR);if(a=i.utf8_encode(a),l=r.parseUrl(a),L=r.hasSameOrigin(l),E=r.resolveUrl(a),(u||c)&&!L)throw new t.DOMException(t.DOMException.INVALID_ACCESS_ERR);if(b=u||l.user,R=c||l.pass,w=s||!0,w===!1&&(n("timeout")||n("withCredentials")||""!==n("responseType")))throw new t.DOMException(t.DOMException.INVALID_ACCESS_ERR);S=!w,O=!1,x={},g.call(this),n("readyState",h.OPENED),this.convertEventPropsToHandlers(["readystatechange"]),this.dispatchEvent("readystatechange")},setRequestHeader:function(r,o){var a=["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","cookie","cookie2","content-transfer-encoding","date","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","user-agent","via"];if(n("readyState")!==h.OPENED||O)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(/[\u0100-\uffff]/.test(r)||i.utf8_encode(r)!==r)throw new t.DOMException(t.DOMException.SYNTAX_ERR);return r=e.trim(r).toLowerCase(),~e.inArray(r,a)||/^(proxy\-|sec\-)/.test(r)?!1:(x[r]?x[r]+=", "+o:x[r]=o,!0)},getAllResponseHeaders:function(){return U||""},getResponseHeader:function(t){return t=t.toLowerCase(),N||~e.inArray(t,["set-cookie","set-cookie2"])?null:U&&""!==U&&(B||(B={},e.each(U.split(/\r\n/),function(t){var n=t.split(/:\s+/);2===n.length&&(n[0]=e.trim(n[0]),B[n[0].toLowerCase()]={header:n[0],value:e.trim(n[1])})})),B.hasOwnProperty(t))?B[t].header+": "+B[t].value:null},overrideMimeType:function(i){var r,o;if(~e.inArray(n("readyState"),[h.LOADING,h.DONE]))throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(i=e.trim(i.toLowerCase()),/;/.test(i)&&(r=i.match(/^([^;]+)(?:;\scharset\=)?(.*)$/))&&(i=r[1],r[2]&&(o=r[2])),!d.mimes[i])throw new t.DOMException(t.DOMException.SYNTAX_ERR);F=i,H=o},send:function(n,r){if(P="string"===e.typeOf(r)?{ruid:r}:r?r:{},this.convertEventPropsToHandlers(m),this.upload.convertEventPropsToHandlers(m),this.readyState!==h.OPENED||O)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(n instanceof s)P.ruid=n.ruid,A=n.type||"application/octet-stream";else if(n instanceof c){if(n.hasBlob()){var o=n.getBlob();P.ruid=o.ruid,A=o.type||"application/octet-stream"}}else"string"==typeof n&&(T="UTF-8",A="text/plain;charset=UTF-8",n=i.utf8_encode(n));this.withCredentials||(this.withCredentials=P.required_caps&&P.required_caps.send_browser_cookies&&!L),I=!S&&this.upload.hasEventListener(),N=!1,D=!n,S||(O=!0),u.call(this,n)},abort:function(){if(N=!0,S=!1,~e.inArray(n("readyState"),[h.UNSENT,h.OPENED,h.DONE]))n("readyState",h.UNSENT);else{if(n("readyState",h.DONE),O=!1,!k)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);k.getRuntime().exec.call(k,"XMLHttpRequest","abort",D),D=!0}},destroy:function(){k&&("function"===e.typeOf(k.destroy)&&k.destroy(),k=null),this.unbindAll(),this.upload&&(this.upload.unbindAll(),this.upload=null)}})}var p={100:"Continue",101:"Switching Protocols",102:"Processing",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",306:"Reserved",307:"Temporary Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Request Entity Too Large",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Requested Range Not Satisfiable",417:"Expectation Failed",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",426:"Upgrade Required",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",510:"Not Extended"};f.prototype=n.instance;var m=["loadstart","progress","abort","error","load","timeout","loadend"],g=1,v=2;return h.UNSENT=0,h.OPENED=1,h.HEADERS_RECEIVED=2,h.LOADING=3,h.DONE=4,h.prototype=n.instance,h}),i(O,[u,m,v,p],function(e,t,n,i){function r(){function i(){l=d=0,c=this.result=null}function o(t,n){var i=this;u=n,i.bind("TransportingProgress",function(t){d=t.loaded,l>d&&-1===e.inArray(i.state,[r.IDLE,r.DONE])&&a.call(i)},999),i.bind("TransportingComplete",function(){d=l,i.state=r.DONE,c=null,i.result=u.exec.call(i,"Transporter","getAsBlob",t||"")},999),i.state=r.BUSY,i.trigger("TransportingStarted"),a.call(i)}function a(){var e=this,n,i=l-d;f>i&&(f=i),n=t.btoa(c.substr(d,f)),u.exec.call(e,"Transporter","receive",n,l)}var s,u,c,l,d,f;n.call(this),e.extend(this,{uid:e.guid("uid_"),state:r.IDLE,result:null,transport:function(t,n,r){var a=this;if(r=e.extend({chunk_size:204798},r),(s=r.chunk_size%3)&&(r.chunk_size+=3-s),f=r.chunk_size,i.call(this),c=t,l=t.length,"string"===e.typeOf(r)||r.ruid)o.call(a,n,this.connectRuntime(r));else{var u=function(e,t){a.unbind("RuntimeInit",u),o.call(a,n,t)};this.bind("RuntimeInit",u),this.connectRuntime(r)}},abort:function(){var e=this;e.state=r.IDLE,u&&(u.exec.call(e,"Transporter","clear"),e.trigger("TransportingAborted")),i.call(e)},destroy:function(){this.unbindAll(),u=null,this.disconnectRuntime(),i.call(this)}})}return r.IDLE=0,r.BUSY=1,r.DONE=2,r.prototype=i.instance,r}),i(I,[u,f,h,T,S,g,v,O,d,p,y,w,m],function(e,t,n,i,r,o,a,s,u,c,l,d,f){function h(){function i(e){e||(e=this.getRuntime().exec.call(this,"Image","getInfo")),this.size=e.size,this.width=e.width,this.height=e.height,this.type=e.type,this.meta=e.meta,""===this.name&&(this.name=e.name)}function c(t){var i=e.typeOf(t);try{if(t instanceof h){if(!t.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);m.apply(this,arguments)}else if(t instanceof l){if(!~e.inArray(t.type,["image/jpeg","image/png"]))throw new n.ImageError(n.ImageError.WRONG_FORMAT);g.apply(this,arguments)}else if(-1!==e.inArray(i,["blob","file"]))c.call(this,new d(null,t),arguments[1]);else if("string"===i)/^data:[^;]*;base64,/.test(t)?c.call(this,new l(null,{data:t}),arguments[1]):v.apply(this,arguments);else{if("node"!==i||"img"!==t.nodeName.toLowerCase())throw new n.DOMException(n.DOMException.TYPE_MISMATCH_ERR);c.call(this,t.src,arguments[1])}}catch(r){this.trigger("error",r.code)}}function m(t,n){var i=this.connectRuntime(t.ruid);this.ruid=i.uid,i.exec.call(this,"Image","loadFromImage",t,"undefined"===e.typeOf(n)?!0:n)}function g(t,n){function i(e){r.ruid=e.uid,e.exec.call(r,"Image","loadFromBlob",t)}var r=this;r.name=t.name||"",t.isDetached()?(this.bind("RuntimeInit",function(e,t){i(t)}),n&&"string"==typeof n.required_caps&&(n.required_caps=o.parseCaps(n.required_caps)),this.connectRuntime(e.extend({required_caps:{access_image_binary:!0,resize_image:!0}},n))):i(this.connectRuntime(t.ruid))}function v(e,t){var n=this,i;i=new r,i.open("get",e),i.responseType="blob",i.onprogress=function(e){n.trigger(e)},i.onload=function(){g.call(n,i.response,!0)},i.onerror=function(e){n.trigger(e)},i.onloadend=function(){i.destroy()},i.bind("RuntimeError",function(e,t){n.trigger("RuntimeError",t)}),i.send(null,t)}a.call(this),e.extend(this,{uid:e.guid("uid_"),ruid:null,name:"",size:0,width:0,height:0,type:"",meta:{},clone:function(){this.load.apply(this,arguments)},load:function(){this.bind("Load Resize",function(){i.call(this)},999),this.convertEventPropsToHandlers(p),c.apply(this,arguments)},downsize:function(t){var i={width:this.width,height:this.height,crop:!1,preserveHeaders:!0};t="object"==typeof t?e.extend(i,t):e.extend(i,{width:arguments[0],height:arguments[1],crop:arguments[2],preserveHeaders:arguments[3]});try{if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);if(this.width>h.MAX_RESIZE_WIDTH||this.height>h.MAX_RESIZE_HEIGHT)throw new n.ImageError(n.ImageError.MAX_RESOLUTION_ERR);this.getRuntime().exec.call(this,"Image","downsize",t.width,t.height,t.crop,t.preserveHeaders)}catch(r){this.trigger("error",r.code)}},crop:function(e,t,n){this.downsize(e,t,!0,n)},getAsCanvas:function(){if(!u.can("create_canvas"))throw new n.RuntimeError(n.RuntimeError.NOT_SUPPORTED_ERR);var e=this.connectRuntime(this.ruid);return e.exec.call(this,"Image","getAsCanvas")},getAsBlob:function(e,t){if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);return e||(e="image/jpeg"),"image/jpeg"!==e||t||(t=90),this.getRuntime().exec.call(this,"Image","getAsBlob",e,t)},getAsDataURL:function(e,t){if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);return this.getRuntime().exec.call(this,"Image","getAsDataURL",e,t)},getAsBinaryString:function(e,t){var n=this.getAsDataURL(e,t);return f.atob(n.substring(n.indexOf("base64,")+7))},embed:function(i){function r(){if(u.can("create_canvas")){var t=a.getAsCanvas();if(t)return i.appendChild(t),t=null,a.destroy(),void o.trigger("embedded")}var r=a.getAsDataURL(c,l);if(!r)throw new n.ImageError(n.ImageError.WRONG_FORMAT);if(u.can("use_data_uri_of",r.length))i.innerHTML='',a.destroy(),o.trigger("embedded");else{var d=new s;d.bind("TransportingComplete",function(){v=o.connectRuntime(this.result.ruid),o.bind("Embedded",function(){e.extend(v.getShimContainer().style,{top:"0px",left:"0px",width:a.width+"px",height:a.height+"px"}),v=null},999),v.exec.call(o,"ImageView","display",this.result.uid,m,g),a.destroy()}),d.transport(f.atob(r.substring(r.indexOf("base64,")+7)),c,e.extend({},p,{required_caps:{display_media:!0},runtime_order:"flash,silverlight",container:i}))}}var o=this,a,c,l,d,p=arguments[1]||{},m=this.width,g=this.height,v;try{if(!(i=t.get(i)))throw new n.DOMException(n.DOMException.INVALID_NODE_TYPE_ERR);if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);if(this.width>h.MAX_RESIZE_WIDTH||this.height>h.MAX_RESIZE_HEIGHT)throw new n.ImageError(n.ImageError.MAX_RESOLUTION_ERR);if(c=p.type||this.type||"image/jpeg",l=p.quality||90,d="undefined"!==e.typeOf(p.crop)?p.crop:!1,p.width)m=p.width,g=p.height||m;else{var y=t.getSize(i);y.w&&y.h&&(m=y.w,g=y.h)}return a=new h,a.bind("Resize",function(){r.call(o)}),a.bind("Load",function(){a.downsize(m,g,d,!1)}),a.clone(this,!1),a}catch(w){this.trigger("error",w.code)}},destroy:function(){this.ruid&&(this.getRuntime().exec.call(this,"Image","destroy"),this.disconnectRuntime()),this.unbindAll()}})}var p=["progress","load","error","resize","embedded"];return h.MAX_RESIZE_WIDTH=6500,h.MAX_RESIZE_HEIGHT=6500,h.prototype=c.instance,h}),i(D,[u,h,g,d],function(e,t,n,i){function r(t){var r=this,s=n.capTest,u=n.capTrue,c=e.extend({access_binary:s(window.FileReader||window.File&&window.File.getAsDataURL),access_image_binary:function(){return r.can("access_binary")&&!!a.Image},display_media:s(i.can("create_canvas")||i.can("use_data_uri_over32kb")),do_cors:s(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest),drag_and_drop:s(function(){var e=document.createElement("div");return("draggable"in e||"ondragstart"in e&&"ondrop"in e)&&("IE"!==i.browser||i.version>9)}()),filter_by_extension:s(function(){return"Chrome"===i.browser&&i.version>=28||"IE"===i.browser&&i.version>=10}()),return_response_headers:u,return_response_type:function(e){return"json"===e&&window.JSON?!0:i.can("return_response_type",e)},return_status_code:u,report_upload_progress:s(window.XMLHttpRequest&&(new XMLHttpRequest).upload),resize_image:function(){return r.can("access_binary")&&i.can("create_canvas")},select_file:function(){return i.can("use_fileinput")&&window.File},select_folder:function(){return r.can("select_file")&&"Chrome"===i.browser&&i.version>=21},select_multiple:function(){return!(!r.can("select_file")||"Safari"===i.browser&&"Windows"===i.os||"iOS"===i.os&&i.verComp(i.osVersion,"7.0.4","<"))},send_binary_string:s(window.XMLHttpRequest&&((new XMLHttpRequest).sendAsBinary||window.Uint8Array&&window.ArrayBuffer)),send_custom_headers:s(window.XMLHttpRequest),send_multipart:function(){return!!(window.XMLHttpRequest&&(new XMLHttpRequest).upload&&window.FormData)||r.can("send_binary_string")},slice_blob:s(window.File&&(File.prototype.mozSlice||File.prototype.webkitSlice||File.prototype.slice)),stream_upload:function(){return r.can("slice_blob")&&r.can("send_multipart")},summon_file_dialog:s(function(){return"Firefox"===i.browser&&i.version>=4||"Opera"===i.browser&&i.version>=12||"IE"===i.browser&&i.version>=10||!!~e.inArray(i.browser,["Chrome","Safari"])}()),upload_filesize:u},arguments[2]);n.call(this,t,arguments[1]||o,c),e.extend(this,{init:function(){this.trigger("Init")},destroy:function(e){return function(){e.call(r),e=r=null}}(this.destroy)}),e.extend(this.getShim(),a)}var o="html5",a={};return n.addConstructor(o,r),a}),i(N,[D,y],function(e,t){function n(){function e(e,t,n){var i;if(!window.File.prototype.slice)return(i=window.File.prototype.webkitSlice||window.File.prototype.mozSlice)?i.call(e,t,n):null;try{return e.slice(),e.slice(t,n)}catch(r){return e.slice(t,n-t)}}this.slice=function(){return new t(this.getRuntime().uid,e.apply(this,arguments))}}return e.Blob=n}),i(L,[u],function(e){function t(){this.returnValue=!1}function n(){this.cancelBubble=!0}var i={},r="moxie_"+e.guid(),o=function(o,a,s,u){var c,l;a=a.toLowerCase(),o.addEventListener?(c=s,o.addEventListener(a,c,!1)):o.attachEvent&&(c=function(){var e=window.event;e.target||(e.target=e.srcElement),e.preventDefault=t,e.stopPropagation=n,s(e)},o.attachEvent("on"+a,c)),o[r]||(o[r]=e.guid()),i.hasOwnProperty(o[r])||(i[o[r]]={}),l=i[o[r]],l.hasOwnProperty(a)||(l[a]=[]),l[a].push({func:c,orig:s,key:u})},a=function(t,n,o){var a,s;if(n=n.toLowerCase(),t[r]&&i[t[r]]&&i[t[r]][n]){a=i[t[r]][n];for(var u=a.length-1;u>=0&&(a[u].orig!==o&&a[u].key!==o||(t.removeEventListener?t.removeEventListener(n,a[u].func,!1):t.detachEvent&&t.detachEvent("on"+n,a[u].func),a[u].orig=null,a[u].func=null,a.splice(u,1),o===s));u--);if(a.length||delete i[t[r]][n],e.isEmptyObj(i[t[r]])){delete i[t[r]];try{delete t[r]}catch(c){t[r]=s}}}},s=function(t,n){t&&t[r]&&e.each(i[t[r]],function(e,i){a(t,i,n)})};return{addEvent:o,removeEvent:a,removeAllEvents:s}}),i(M,[D,u,f,L,l,d],function(e,t,n,i,r,o){function a(){var e=[],a;t.extend(this,{init:function(s){var u=this,c=u.getRuntime(),l,d,f,h,p,m;a=s,e=[],f=a.accept.mimes||r.extList2mimes(a.accept,c.can("filter_by_extension")),d=c.getShimContainer(),d.innerHTML='",l=n.get(c.uid),t.extend(l.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),h=n.get(a.browse_button),c.can("summon_file_dialog")&&("static"===n.getStyle(h,"position")&&(h.style.position="relative"),p=parseInt(n.getStyle(h,"z-index"),10)||1,h.style.zIndex=p,d.style.zIndex=p-1,i.addEvent(h,"click",function(e){var t=n.get(c.uid);t&&!t.disabled&&t.click(),e.preventDefault()},u.uid)),m=c.can("summon_file_dialog")?h:d,i.addEvent(m,"mouseover",function(){u.trigger("mouseenter")},u.uid),i.addEvent(m,"mouseout",function(){u.trigger("mouseleave")},u.uid),i.addEvent(m,"mousedown",function(){u.trigger("mousedown")},u.uid),i.addEvent(n.get(a.container),"mouseup",function(){u.trigger("mouseup")},u.uid),l.onchange=function g(){if(e=[],a.directory?t.each(this.files,function(t){"."!==t.name&&e.push(t)}):e=[].slice.call(this.files),"IE"!==o.browser&&"IEMobile"!==o.browser)this.value="";else{var n=this.cloneNode(!0);this.parentNode.replaceChild(n,this),n.onchange=g}u.trigger("change")},u.trigger({type:"ready",async:!0}),d=null},getFiles:function(){return e},disable:function(e){var t=this.getRuntime(),i;(i=n.get(t.uid))&&(i.disabled=!!e)},destroy:function(){var t=this.getRuntime(),r=t.getShim(),o=t.getShimContainer();i.removeAllEvents(o,this.uid),i.removeAllEvents(a&&n.get(a.container),this.uid),i.removeAllEvents(a&&n.get(a.browse_button),this.uid),o&&(o.innerHTML=""),r.removeInstance(this.uid),e=a=o=r=null}})}return e.FileInput=a}),i(C,[D,u,f,L,l],function(e,t,n,i,r){function o(){function e(e){if(!e.dataTransfer||!e.dataTransfer.types)return!1;var n=t.toArray(e.dataTransfer.types||[]);return-1!==t.inArray("Files",n)||-1!==t.inArray("public.file-url",n)||-1!==t.inArray("application/x-moz-file",n)}function o(e){for(var n=[],i=0;i=4&&u.version<7,f="Android Browser"===u.browser,m=!1;if(p=n.url.replace(/^.+?\/([\w\-\.]+)$/,"$1").toLowerCase(),h=c(),h.open(n.method,n.url,n.async,n.user,n.password),r instanceof o)r.isDetached()&&(m=!0),r=r.getSource();else if(r instanceof a){if(r.hasBlob())if(r.getBlob().isDetached())r=d.call(s,r),m=!0;else if((l||f)&&"blob"===t.typeOf(r.getBlob().getSource())&&window.FileReader)return void e.call(s,n,r);if(r instanceof a){var g=new window.FormData;r.each(function(e,t){e instanceof o?g.append(t,e.getSource()):g.append(t,e)}),r=g}}h.upload?(n.withCredentials&&(h.withCredentials=!0),h.addEventListener("load",function(e){s.trigger(e)}),h.addEventListener("error",function(e){s.trigger(e)}),h.addEventListener("progress",function(e){s.trigger(e)}),h.upload.addEventListener("progress",function(e){s.trigger({type:"UploadProgress",loaded:e.loaded,total:e.total})})):h.onreadystatechange=function v(){switch(h.readyState){case 1:break;case 2:break;case 3:var e,t;try{i.hasSameOrigin(n.url)&&(e=h.getResponseHeader("Content-Length")||0),h.responseText&&(t=h.responseText.length)}catch(r){e=t=0}s.trigger({type:"progress",lengthComputable:!!e,total:parseInt(e,10),loaded:t});break;case 4:h.onreadystatechange=function(){},s.trigger(0===h.status?"error":"load")}},t.isEmptyObj(n.headers)||t.each(n.headers,function(e,t){h.setRequestHeader(t,e)}),""!==n.responseType&&"responseType"in h&&(h.responseType="json"!==n.responseType||u.can("return_response_type","json")?n.responseType:"text"),m?h.sendAsBinary?h.sendAsBinary(r):!function(){for(var e=new Uint8Array(r.length),t=0;ta;a++)i|=o.charCodeAt(e+a)<s;s++)o+=String.fromCharCode(t>>Math.abs(a+8*s)&255);n(o,e,i)}var r=!1,o;return{II:function(e){return e===t?r:void(r=e)},init:function(e){r=!1,o=e},SEGMENT:function(e,t,i){switch(arguments.length){case 1:return o.substr(e,o.length-e-1);case 2:return o.substr(e,t);case 3:n(i,e,t);break;default:return o}},BYTE:function(t){return e(t,1)},SHORT:function(t){return e(t,2)},LONG:function(n,r){return r===t?e(n,4):void i(n,r,4)},SLONG:function(t){var n=e(t,4);return n>2147483647?n-4294967296:n},STRING:function(t,n){var i="";for(n+=t;n>t;t++)i+=String.fromCharCode(e(t,1));return i}}}}),i(k,[P],function(e){return function t(n){var i=[],r,o,a,s=0;if(r=new e,r.init(n),65496===r.SHORT(0)){for(o=2;o<=n.length;)if(a=r.SHORT(o),a>=65488&&65495>=a)o+=2;else{if(65498===a||65497===a)break;s=r.SHORT(o+2)+2,a>=65505&&65519>=a&&i.push({hex:a,name:"APP"+(15&a),start:o,length:s,segment:r.SEGMENT(o,s)}),o+=s}return r.init(null),{headers:i,restore:function(e){var t,n;for(r.init(e),o=65504==r.SHORT(2)?4+r.SHORT(4):2,n=0,t=i.length;t>n;n++)r.SEGMENT(o,0,i[n].segment),o+=i[n].length;return e=r.SEGMENT(),r.init(null),e},strip:function(e){var n,i,o;for(i=new t(e),n=i.headers,i.purge(),r.init(e),o=n.length;o--;)r.SEGMENT(n[o].start,n[o].length,"");return e=r.SEGMENT(),r.init(null),e},get:function(e){for(var t=[],n=0,r=i.length;r>n;n++)i[n].name===e.toUpperCase()&&t.push(i[n].segment);return t},set:function(e,t){var n=[],r,o,a;for("string"==typeof t?n.push(t):n=t,r=o=0,a=i.length;a>r&&(i[r].name===e.toUpperCase()&&(i[r].segment=n[o],i[r].length=n[o].length,o++),!(o>=n.length));r++);},purge:function(){i=[],r.init(null),r=null}}}}}),i(U,[u,P],function(e,n){return function i(){function i(e,n){var i=a.SHORT(e),r,o,s,u,d,f,h,p,m=[],g={};for(r=0;i>r;r++)if(h=f=e+12*r+2,s=n[a.SHORT(h)],s!==t){switch(u=a.SHORT(h+=2),d=a.LONG(h+=2),h+=4,m=[],u){case 1:case 7:for(d>4&&(h=a.LONG(h)+c.tiffHeader),o=0;d>o;o++)m[o]=a.BYTE(h+o);break;case 2:d>4&&(h=a.LONG(h)+c.tiffHeader),g[s]=a.STRING(h,d-1);continue;case 3:for(d>2&&(h=a.LONG(h)+c.tiffHeader),o=0;d>o;o++)m[o]=a.SHORT(h+2*o);break;case 4:for(d>1&&(h=a.LONG(h)+c.tiffHeader),o=0;d>o;o++)m[o]=a.LONG(h+4*o);break;case 5:for(h=a.LONG(h)+c.tiffHeader,o=0;d>o;o++)m[o]=a.LONG(h+4*o)/a.LONG(h+4*o+4);break;case 9:for(h=a.LONG(h)+c.tiffHeader,o=0;d>o;o++)m[o]=a.SLONG(h+4*o);break;case 10:for(h=a.LONG(h)+c.tiffHeader,o=0;d>o;o++)m[o]=a.SLONG(h+4*o)/a.SLONG(h+4*o+4);break;default:continue}p=1==d?m[0]:m,g[s]=l.hasOwnProperty(s)&&"object"!=typeof p?l[s][p]:p}return g}function r(){var e=c.tiffHeader;return a.II(18761==a.SHORT(e)),42!==a.SHORT(e+=2)?!1:(c.IFD0=c.tiffHeader+a.LONG(e+=2),u=i(c.IFD0,s.tiff),"ExifIFDPointer"in u&&(c.exifIFD=c.tiffHeader+u.ExifIFDPointer,delete u.ExifIFDPointer),"GPSInfoIFDPointer"in u&&(c.gpsIFD=c.tiffHeader+u.GPSInfoIFDPointer,delete u.GPSInfoIFDPointer),!0)}function o(e,t,n){var i,r,o,u=0;if("string"==typeof t){var l=s[e.toLowerCase()];for(var d in l)if(l[d]===t){t=d;break}}i=c[e.toLowerCase()+"IFD"],r=a.SHORT(i);for(var f=0;r>f;f++)if(o=i+12*f+2,a.SHORT(o)==t){u=o+8;break}return u?(a.LONG(u,n),!0):!1}var a,s,u,c={},l;return a=new n,s={tiff:{274:"Orientation",270:"ImageDescription",271:"Make",272:"Model",305:"Software",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer"},exif:{36864:"ExifVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",36867:"DateTimeOriginal",33434:"ExposureTime",33437:"FNumber",34855:"ISOSpeedRatings",37377:"ShutterSpeedValue",37378:"ApertureValue",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37386:"FocalLength",41986:"ExposureMode",41987:"WhiteBalance",41990:"SceneCaptureType",41988:"DigitalZoomRatio",41992:"Contrast",41993:"Saturation",41994:"Sharpness"},gps:{0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude"}},l={ColorSpace:{1:"sRGB",0:"Uncalibrated"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{1:"Daylight",2:"Fliorescent",3:"Tungsten",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 -5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire.",1:"Flash fired.",5:"Strobe return light not detected.",7:"Strobe return light detected.",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},ExposureMode:{0:"Auto exposure",1:"Manual exposure",2:"Auto bracket"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},GPSLatitudeRef:{N:"North latitude",S:"South latitude"},GPSLongitudeRef:{E:"East longitude",W:"West longitude"}},{init:function(e){return c={tiffHeader:10},e!==t&&e.length?(a.init(e),65505===a.SHORT(0)&&"EXIF\x00"===a.STRING(4,5).toUpperCase()?r():!1):!1 -},TIFF:function(){return u},EXIF:function(){var t;if(t=i(c.exifIFD,s.exif),t.ExifVersion&&"array"===e.typeOf(t.ExifVersion)){for(var n=0,r="";n=65472&&65475>=t)return e+=5,{height:c.SHORT(e),width:c.SHORT(e+=2)};n=c.SHORT(e+=2),e+=n-2}return null}function s(){d&&l&&c&&(d.purge(),l.purge(),c.init(null),u=f=l=d=c=null)}var u,c,l,d,f,h;if(u=o,c=new i,c.init(u),65496!==c.SHORT(0))throw new t.ImageError(t.ImageError.WRONG_FORMAT);l=new n(o),d=new r,h=!!d.init(l.get("app1")[0]),f=a.call(this),e.extend(this,{type:"image/jpeg",size:u.length,width:f&&f.width||0,height:f&&f.height||0,setExif:function(t,n){return h?("object"===e.typeOf(t)?e.each(t,function(e,t){d.setExif(t,e)}):d.setExif(t,n),void l.set("app1",d.getBinary())):!1},writeHeaders:function(){return arguments.length?l.restore(arguments[0]):u=l.restore(u)},stripHeaders:function(e){return l.strip(e)},purge:function(){s.call(this)}}),h&&(this.meta={tiff:d.TIFF(),exif:d.EXIF(),gps:d.GPS()})}return o}),i(z,[h,u,P],function(e,t,n){function i(i){function r(){var e,t;return e=a.call(this,8),"IHDR"==e.type?(t=e.start,{width:u.LONG(t),height:u.LONG(t+=4)}):null}function o(){u&&(u.init(null),s=d=c=l=u=null)}function a(e){var t,n,i,r;return t=u.LONG(e),n=u.STRING(e+=4,4),i=e+=4,r=u.LONG(e+t),{length:t,type:n,start:i,CRC:r}}var s,u,c,l,d;s=i,u=new n,u.init(s),function(){var t=0,n=0,i=[35152,20039,3338,6666];for(n=0;ng;){for(var v=g+f>a?a-g:f,y=0;o>y;){var w=y+f>o?o-y:f;p.clearRect(0,0,f,f),p.drawImage(e,-y,-g);var E=y*s/o+c<<0,_=Math.ceil(w*s/o),x=g*u/a/m+l<<0,b=Math.ceil(v*u/a/m);d.drawImage(h,0,0,w,v,E,x,_,b),y+=f}g+=f}h=p=null}function t(e){var t=e.naturalWidth,n=e.naturalHeight;if(t*n>1048576){var i=document.createElement("canvas");i.width=i.height=1;var r=i.getContext("2d");return r.drawImage(e,-t+1,0),0===r.getImageData(0,0,1,1).data[3]}return!1}function n(e,t,n){var i=document.createElement("canvas");i.width=1,i.height=n;var r=i.getContext("2d");r.drawImage(e,0,0);for(var o=r.getImageData(0,0,1,n).data,a=0,s=n,u=n;u>a;){var c=o[4*(u-1)+3];0===c?s=u:a=u,u=s+a>>1}i=null;var l=u/n;return 0===l?1:l}return{isSubsampled:t,renderTo:e}}),i(X,[D,u,h,m,w,G,q,l,d],function(e,t,n,i,r,o,a,s,u){function c(){function e(){if(!E&&!y)throw new n.ImageError(n.DOMException.INVALID_STATE_ERR);return E||y}function c(e){return i.atob(e.substring(e.indexOf("base64,")+7))}function l(e,t){return"data:"+(t||"")+";base64,"+i.btoa(e)}function d(e){var t=this;y=new Image,y.onerror=function(){g.call(this),t.trigger("error",n.ImageError.WRONG_FORMAT)},y.onload=function(){t.trigger("load")},y.src=/^data:[^;]*;base64,/.test(e)?e:l(e,x.type)}function f(e,t){var i=this,r;return window.FileReader?(r=new FileReader,r.onload=function(){t(this.result)},r.onerror=function(){i.trigger("error",n.ImageError.WRONG_FORMAT)},r.readAsDataURL(e),void 0):t(e.getAsDataURL())}function h(n,i,r,o){var a=this,s,u,c=0,l=0,d,f,h,g;if(R=o,g=this.meta&&this.meta.tiff&&this.meta.tiff.Orientation||1,-1!==t.inArray(g,[5,6,7,8])){var v=n;n=i,i=v}return d=e(),r?(n=Math.min(n,d.width),i=Math.min(i,d.height),s=Math.max(n/d.width,i/d.height)):s=Math.min(n/d.width,i/d.height),s>1&&!r&&o?void this.trigger("Resize"):(E||(E=document.createElement("canvas")),f=Math.round(d.width*s),h=Math.round(d.height*s),r?(E.width=n,E.height=i,f>n&&(c=Math.round((f-n)/2)),h>i&&(l=Math.round((h-i)/2))):(E.width=f,E.height=h),R||m(E.width,E.height,g),p.call(this,d,E,-c,-l,f,h),this.width=E.width,this.height=E.height,b=!0,void a.trigger("Resize"))}function p(e,t,n,i,r,o){if("iOS"===u.OS)a.renderTo(e,t,{width:r,height:o,x:n,y:i});else{var s=t.getContext("2d");s.drawImage(e,n,i,r,o)}}function m(e,t,n){switch(n){case 5:case 6:case 7:case 8:E.width=t,E.height=e;break;default:E.width=e,E.height=t}var i=E.getContext("2d");switch(n){case 2:i.translate(e,0),i.scale(-1,1);break;case 3:i.translate(e,t),i.rotate(Math.PI);break;case 4:i.translate(0,t),i.scale(1,-1);break;case 5:i.rotate(.5*Math.PI),i.scale(1,-1);break;case 6:i.rotate(.5*Math.PI),i.translate(0,-t);break;case 7:i.rotate(.5*Math.PI),i.translate(e,-t),i.scale(-1,1);break;case 8:i.rotate(-.5*Math.PI),i.translate(-e,0)}}function g(){w&&(w.purge(),w=null),_=y=E=x=null,b=!1}var v=this,y,w,E,_,x,b=!1,R=!0;t.extend(this,{loadFromBlob:function(e){var t=this,i=t.getRuntime(),r=arguments.length>1?arguments[1]:!0;if(!i.can("access_binary"))throw new n.RuntimeError(n.RuntimeError.NOT_SUPPORTED_ERR);return x=e,e.isDetached()?(_=e.getSource(),void d.call(this,_)):void f.call(this,e.getSource(),function(e){r&&(_=c(e)),d.call(t,e)})},loadFromImage:function(e,t){this.meta=e.meta,x=new r(null,{name:e.name,size:e.size,type:e.type}),d.call(this,t?_=e.getAsBinaryString():e.getAsDataURL())},getInfo:function(){var t=this.getRuntime(),n;return!w&&_&&t.can("access_image_binary")&&(w=new o(_)),n={width:e().width||0,height:e().height||0,type:x.type||s.getFileMime(x.name),size:_&&_.length||x.size||0,name:x.name||"",meta:w&&w.meta||this.meta||{}}},downsize:function(){h.apply(this,arguments)},getAsCanvas:function(){return E&&(E.id=this.uid+"_canvas"),E},getAsBlob:function(e,t){return e!==this.type&&h.call(this,this.width,this.height,!1),new r(null,{name:x.name||"",type:e,data:v.getAsBinaryString.call(this,e,t)})},getAsDataURL:function(e){var t=arguments[1]||90;if(!b)return y.src;if("image/jpeg"!==e)return E.toDataURL("image/png");try{return E.toDataURL("image/jpeg",t/100)}catch(n){return E.toDataURL("image/jpeg")}},getAsBinaryString:function(e,t){if(!b)return _||(_=c(v.getAsDataURL(e,t))),_;if("image/jpeg"!==e)_=c(v.getAsDataURL(e,t));else{var n;t||(t=90);try{n=E.toDataURL("image/jpeg",t/100)}catch(i){n=E.toDataURL("image/jpeg")}_=c(n),w&&(_=w.stripHeaders(_),R&&(w.meta&&w.meta.exif&&w.setExif({PixelXDimension:this.width,PixelYDimension:this.height}),_=w.writeHeaders(_)),w.purge(),w=null)}return b=!1,_},destroy:function(){v=null,g.call(this),this.getRuntime().getShim().removeInstance(this.uid)}})}return e.Image=c}),i(j,[u,d,f,h,g],function(e,t,n,i,r){function o(){var e;try{e=navigator.plugins["Shockwave Flash"],e=e.description}catch(t){try{e=new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version")}catch(n){e="0.0"}}return e=e.match(/\d+/g),parseFloat(e[0]+"."+e[1])}function a(a){var c=this,l;a=e.extend({swf_url:t.swf_url},a),r.call(this,a,s,{access_binary:function(e){return e&&"browser"===c.mode},access_image_binary:function(e){return e&&"browser"===c.mode},display_media:r.capTrue,do_cors:r.capTrue,drag_and_drop:!1,report_upload_progress:function(){return"client"===c.mode},resize_image:r.capTrue,return_response_headers:!1,return_response_type:function(t){return"json"===t&&window.JSON?!0:!e.arrayDiff(t,["","text","document"])||"browser"===c.mode},return_status_code:function(t){return"browser"===c.mode||!e.arrayDiff(t,[200,404])},select_file:r.capTrue,select_multiple:r.capTrue,send_binary_string:function(e){return e&&"browser"===c.mode},send_browser_cookies:function(e){return e&&"browser"===c.mode},send_custom_headers:function(e){return e&&"browser"===c.mode},send_multipart:r.capTrue,slice_blob:function(e){return e&&"browser"===c.mode},stream_upload:function(e){return e&&"browser"===c.mode},summon_file_dialog:!1,upload_filesize:function(t){return e.parseSizeStr(t)<=2097152||"client"===c.mode},use_http_method:function(t){return!e.arrayDiff(t,["GET","POST"])}},{access_binary:function(e){return e?"browser":"client"},access_image_binary:function(e){return e?"browser":"client"},report_upload_progress:function(e){return e?"browser":"client"},return_response_type:function(t){return e.arrayDiff(t,["","text","json","document"])?"browser":["client","browser"]},return_status_code:function(t){return e.arrayDiff(t,[200,404])?"browser":["client","browser"]},send_binary_string:function(e){return e?"browser":"client"},send_browser_cookies:function(e){return e?"browser":"client"},send_custom_headers:function(e){return e?"browser":"client"},stream_upload:function(e){return e?"client":"browser"},upload_filesize:function(t){return e.parseSizeStr(t)>=2097152?"client":"browser"}},"client"),o()<10&&(this.mode=!1),e.extend(this,{getShim:function(){return n.get(this.uid)},shimExec:function(e,t){var n=[].slice.call(arguments,2);return c.getShim().exec(this.uid,e,t,n)},init:function(){var n,r,o;o=this.getShimContainer(),e.extend(o.style,{position:"absolute",top:"-8px",left:"-8px",width:"9px",height:"9px",overflow:"hidden"}),n='',"IE"===t.browser?(r=document.createElement("div"),o.appendChild(r),r.outerHTML=n,r=o=null):o.innerHTML=n,l=setTimeout(function(){c&&!c.initialized&&c.trigger("Error",new i.RuntimeError(i.RuntimeError.NOT_INIT_ERR))},5e3)},destroy:function(e){return function(){e.call(c),clearTimeout(l),a=l=e=c=null}}(this.destroy)},u)}var s="flash",u={};return r.addConstructor(s,a),u}),i(V,[j,y],function(e,t){var n={slice:function(e,n,i,r){var o=this.getRuntime();return 0>n?n=Math.max(e.size+n,0):n>0&&(n=Math.min(n,e.size)),0>i?i=Math.max(e.size+i,0):i>0&&(i=Math.min(i,e.size)),e=o.shimExec.call(this,"Blob","slice",n,i,r||""),e&&(e=new t(o.uid,e)),e}};return e.Blob=n}),i(W,[j],function(e){var t={init:function(e){this.getRuntime().shimExec.call(this,"FileInput","init",{name:e.name,accept:e.accept,multiple:e.multiple}),this.trigger("ready")}};return e.FileInput=t}),i(Y,[j,m],function(e,t){function n(e,n){switch(n){case"readAsText":return t.atob(e,"utf8");case"readAsBinaryString":return t.atob(e);case"readAsDataURL":return e}return null}var i="",r={read:function(e,t){var r=this,o=r.getRuntime();return"readAsDataURL"===e&&(i="data:"+(t.type||"")+";base64,"),r.bind("Progress",function(t,r){r&&(i+=n(r,e))}),o.shimExec.call(this,"FileReader","readAsBase64",t.uid)},getResult:function(){return i},destroy:function(){i=null}};return e.FileReader=r}),i($,[j,m],function(e,t){function n(e,n){switch(n){case"readAsText":return t.atob(e,"utf8");case"readAsBinaryString":return t.atob(e);case"readAsDataURL":return e}return null}var i={read:function(e,t){var i,r=this.getRuntime();return(i=r.shimExec.call(this,"FileReaderSync","readAsBase64",t.uid))?("readAsDataURL"===e&&(i="data:"+(t.type||"")+";base64,"+i),n(i,e,t.type)):null}};return e.FileReaderSync=i}),i(J,[j,u,y,w,T,A,O],function(e,t,n,i,r,o,a){var s={send:function(e,i){function r(){e.transport=l.mode,l.shimExec.call(c,"XMLHttpRequest","send",e,i)}function s(e,t){l.shimExec.call(c,"XMLHttpRequest","appendBlob",e,t.uid),i=null,r()}function u(e,t){var n=new a;n.bind("TransportingComplete",function(){t(this.result)}),n.transport(e.getSource(),e.type,{ruid:l.uid})}var c=this,l=c.getRuntime();if(t.isEmptyObj(e.headers)||t.each(e.headers,function(e,t){l.shimExec.call(c,"XMLHttpRequest","setRequestHeader",t,e.toString())}),i instanceof o){var d;if(i.each(function(e,t){e instanceof n?d=t:l.shimExec.call(c,"XMLHttpRequest","append",t,e)}),i.hasBlob()){var f=i.getBlob();f.isDetached()?u(f,function(e){f.destroy(),s(d,e)}):s(d,f)}else i=null,r()}else i instanceof n?i.isDetached()?u(i,function(e){i.destroy(),i=e.uid,r()}):(i=i.uid,r()):r()},getResponse:function(e){var n,o,a=this.getRuntime();if(o=a.shimExec.call(this,"XMLHttpRequest","getResponseAsBlob")){if(o=new i(a.uid,o),"blob"===e)return o;try{if(n=new r,~t.inArray(e,["","text"]))return n.readAsText(o);if("json"===e&&window.JSON)return JSON.parse(n.readAsText(o))}finally{o.destroy()}}return null},abort:function(e){var t=this.getRuntime();t.shimExec.call(this,"XMLHttpRequest","abort"),this.dispatchEvent("readystatechange"),this.dispatchEvent("abort")}};return e.XMLHttpRequest=s}),i(Z,[j,y],function(e,t){var n={getAsBlob:function(e){var n=this.getRuntime(),i=n.shimExec.call(this,"Transporter","getAsBlob",e);return i?new t(n.uid,i):null}};return e.Transporter=n}),i(K,[j,u,O,y,T],function(e,t,n,i,r){var o={loadFromBlob:function(e){function t(e){r.shimExec.call(i,"Image","loadFromBlob",e.uid),i=r=null}var i=this,r=i.getRuntime();if(e.isDetached()){var o=new n;o.bind("TransportingComplete",function(){t(o.result.getSource())}),o.transport(e.getSource(),e.type,{ruid:r.uid})}else t(e.getSource())},loadFromImage:function(e){var t=this.getRuntime();return t.shimExec.call(this,"Image","loadFromImage",e.uid)},getAsBlob:function(e,t){var n=this.getRuntime(),r=n.shimExec.call(this,"Image","getAsBlob",e,t);return r?new i(n.uid,r):null},getAsDataURL:function(){var e=this.getRuntime(),t=e.Image.getAsBlob.apply(this,arguments),n;return t?(n=new r,n.readAsDataURL(t)):null}};return e.Image=o}),i(Q,[u,d,f,h,g],function(e,t,n,i,r){function o(e){var t=!1,n=null,i,r,o,a,s,u=0;try{try{n=new ActiveXObject("AgControl.AgControl"),n.IsVersionSupported(e)&&(t=!0),n=null}catch(c){var l=navigator.plugins["Silverlight Plug-In"];if(l){for(i=l.description,"1.0.30226.2"===i&&(i="2.0.30226.2"),r=i.split(".");r.length>3;)r.pop();for(;r.length<4;)r.push(0);for(o=e.split(".");o.length>4;)o.pop();do a=parseInt(o[u],10),s=parseInt(r[u],10),u++;while(u=a&&!isNaN(a)&&(t=!0)}}}catch(d){t=!1}return t}function a(a){var c=this,l;a=e.extend({xap_url:t.xap_url},a),r.call(this,a,s,{access_binary:r.capTrue,access_image_binary:r.capTrue,display_media:r.capTrue,do_cors:r.capTrue,drag_and_drop:!1,report_upload_progress:r.capTrue,resize_image:r.capTrue,return_response_headers:function(e){return e&&"client"===c.mode},return_response_type:function(e){return"json"!==e?!0:!!window.JSON},return_status_code:function(t){return"client"===c.mode||!e.arrayDiff(t,[200,404])},select_file:r.capTrue,select_multiple:r.capTrue,send_binary_string:r.capTrue,send_browser_cookies:function(e){return e&&"browser"===c.mode},send_custom_headers:function(e){return e&&"client"===c.mode},send_multipart:r.capTrue,slice_blob:r.capTrue,stream_upload:!0,summon_file_dialog:!1,upload_filesize:r.capTrue,use_http_method:function(t){return"client"===c.mode||!e.arrayDiff(t,["GET","POST"])}},{return_response_headers:function(e){return e?"client":"browser"},return_status_code:function(t){return e.arrayDiff(t,[200,404])?"client":["client","browser"]},send_browser_cookies:function(e){return e?"browser":"client"},send_custom_headers:function(e){return e?"client":"browser"},use_http_method:function(t){return e.arrayDiff(t,["GET","POST"])?"client":["client","browser"]}}),o("2.0.31005.0")&&"Opera"!==t.browser||(this.mode=!1),e.extend(this,{getShim:function(){return n.get(this.uid).content.Moxie},shimExec:function(e,t){var n=[].slice.call(arguments,2);return c.getShim().exec(this.uid,e,t,n)},init:function(){var e;e=this.getShimContainer(),e.innerHTML='',l=setTimeout(function(){c&&!c.initialized&&c.trigger("Error",new i.RuntimeError(i.RuntimeError.NOT_INIT_ERR))},"Windows"!==t.OS?1e4:5e3)},destroy:function(e){return function(){e.call(c),clearTimeout(l),a=l=e=c=null}}(this.destroy)},u)}var s="silverlight",u={};return r.addConstructor(s,a),u}),i(et,[Q,u,V],function(e,t,n){return e.Blob=t.extend({},n)}),i(tt,[Q],function(e){var t={init:function(e){function t(e){for(var t="",n=0;no;o++)n=t.keys[o],s=t[n],s&&(/^(\d|[1-9]\d+)$/.test(s)?s=parseInt(s,10):/^\d*\.\d+$/.test(s)&&(s=parseFloat(s)),i.meta[e][n]=s)}),i.width=parseInt(r.width,10),i.height=parseInt(r.height,10),i.size=parseInt(r.size,10),i.type=r.type,i.name=r.name,i}})}),i(ut,[u,h,g,d],function(e,t,n,i){function r(t){var r=this,s=n.capTest,u=n.capTrue;n.call(this,t,o,{access_binary:s(window.FileReader||window.File&&File.getAsDataURL),access_image_binary:!1,display_media:s(a.Image&&(i.can("create_canvas")||i.can("use_data_uri_over32kb"))),do_cors:!1,drag_and_drop:!1,filter_by_extension:s(function(){return"Chrome"===i.browser&&i.version>=28||"IE"===i.browser&&i.version>=10}()),resize_image:function(){return a.Image&&r.can("access_binary")&&i.can("create_canvas")},report_upload_progress:!1,return_response_headers:!1,return_response_type:function(t){return"json"===t&&window.JSON?!0:!!~e.inArray(t,["text","document",""])},return_status_code:function(t){return!e.arrayDiff(t,[200,404])},select_file:function(){return i.can("use_fileinput")},select_multiple:!1,send_binary_string:!1,send_custom_headers:!1,send_multipart:!0,slice_blob:!1,stream_upload:function(){return r.can("select_file")},summon_file_dialog:s(function(){return"Firefox"===i.browser&&i.version>=4||"Opera"===i.browser&&i.version>=12||!!~e.inArray(i.browser,["Chrome","Safari"])}()),upload_filesize:u,use_http_method:function(t){return!e.arrayDiff(t,["GET","POST"])}}),e.extend(this,{init:function(){this.trigger("Init")},destroy:function(e){return function(){e.call(r),e=r=null}}(this.destroy)}),e.extend(this.getShim(),a)}var o="html4",a={};return n.addConstructor(o,r),a}),i(ct,[ut,u,f,L,l,d],function(e,t,n,i,r,o){function a(){function e(){var r=this,l=r.getRuntime(),d,f,h,p,m,g;g=t.guid("uid_"),d=l.getShimContainer(),a&&(h=n.get(a+"_form"),h&&t.extend(h.style,{top:"100%"})),p=document.createElement("form"),p.setAttribute("id",g+"_form"),p.setAttribute("method","post"),p.setAttribute("enctype","multipart/form-data"),p.setAttribute("encoding","multipart/form-data"),t.extend(p.style,{overflow:"hidden",position:"absolute",top:0,left:0,width:"100%",height:"100%"}),m=document.createElement("input"),m.setAttribute("id",g),m.setAttribute("type","file"),m.setAttribute("name",c.name||"Filedata"),m.setAttribute("accept",u.join(",")),t.extend(m.style,{fontSize:"999px",opacity:0}),p.appendChild(m),d.appendChild(p),t.extend(m.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),"IE"===o.browser&&o.version<10&&t.extend(m.style,{filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=0)"}),m.onchange=function(){var t;this.value&&(t=this.files?this.files[0]:{name:this.value},s=[t],this.onchange=function(){},e.call(r),r.bind("change",function i(){var e=n.get(g),t=n.get(g+"_form"),o;r.unbind("change",i),r.files.length&&e&&t&&(o=r.files[0],e.setAttribute("id",o.uid),t.setAttribute("id",o.uid+"_form"),t.setAttribute("target",o.uid+"_iframe")),e=t=null},998),m=p=null,r.trigger("change"))},l.can("summon_file_dialog")&&(f=n.get(c.browse_button),i.removeEvent(f,"click",r.uid),i.addEvent(f,"click",function(e){m&&!m.disabled&&m.click(),e.preventDefault()},r.uid)),a=g,d=h=f=null}var a,s=[],u=[],c;t.extend(this,{init:function(t){var o=this,a=o.getRuntime(),s;c=t,u=t.accept.mimes||r.extList2mimes(t.accept,a.can("filter_by_extension")),s=a.getShimContainer(),function(){var e,r,u;e=n.get(t.browse_button),a.can("summon_file_dialog")&&("static"===n.getStyle(e,"position")&&(e.style.position="relative"),r=parseInt(n.getStyle(e,"z-index"),10)||1,e.style.zIndex=r,s.style.zIndex=r-1),u=a.can("summon_file_dialog")?e:s,i.addEvent(u,"mouseover",function(){o.trigger("mouseenter")},o.uid),i.addEvent(u,"mouseout",function(){o.trigger("mouseleave")},o.uid),i.addEvent(u,"mousedown",function(){o.trigger("mousedown")},o.uid),i.addEvent(n.get(t.container),"mouseup",function(){o.trigger("mouseup")},o.uid),e=null}(),e.call(this),s=null,o.trigger({type:"ready",async:!0})},getFiles:function(){return s},disable:function(e){var t;(t=n.get(a))&&(t.disabled=!!e)},destroy:function(){var e=this.getRuntime(),t=e.getShim(),r=e.getShimContainer();i.removeAllEvents(r,this.uid),i.removeAllEvents(c&&n.get(c.container),this.uid),i.removeAllEvents(c&&n.get(c.browse_button),this.uid),r&&(r.innerHTML=""),t.removeInstance(this.uid),a=s=u=c=r=t=null}})}return e.FileInput=a}),i(lt,[ut,F],function(e,t){return e.FileReader=t}),i(dt,[ut,u,f,R,h,L,y,A],function(e,t,n,i,r,o,a,s){function u(){function e(e){var t=this,i,r,a,s,u=!1;if(l){if(i=l.id.replace(/_iframe$/,""),r=n.get(i+"_form")){for(a=r.getElementsByTagName("input"),s=a.length;s--;)switch(a[s].getAttribute("type")){case"hidden":a[s].parentNode.removeChild(a[s]);break;case"file":u=!0}a=[],u||r.parentNode.removeChild(r),r=null}setTimeout(function(){o.removeEvent(l,"load",t.uid),l.parentNode&&l.parentNode.removeChild(l);var n=t.getRuntime().getShimContainer();n.children.length||n.parentNode.removeChild(n),n=l=null,e()},1)}}var u,c,l;t.extend(this,{send:function(d,f){function h(){var n=m.getShimContainer()||document.body,r=document.createElement("div");r.innerHTML='',l=r.firstChild,n.appendChild(l),o.addEvent(l,"load",function(){var n;try{n=l.contentWindow.document||l.contentDocument||window.frames[l.id].document,/^4(0[0-9]|1[0-7]|2[2346])\s/.test(n.title)?u=n.title.replace(/^(\d+).*$/,"$1"):(u=200,c=t.trim(n.body.innerHTML),p.trigger({type:"progress",loaded:c.length,total:c.length}),w&&p.trigger({type:"uploadprogress",loaded:w.size||1025,total:w.size||1025}))}catch(r){if(!i.hasSameOrigin(d.url))return void e.call(p,function(){p.trigger("error")});u=404}e.call(p,function(){p.trigger("load")})},p.uid)}var p=this,m=p.getRuntime(),g,v,y,w;if(u=c=null,f instanceof s&&f.hasBlob()){if(w=f.getBlob(),g=w.uid,y=n.get(g),v=n.get(g+"_form"),!v)throw new r.DOMException(r.DOMException.NOT_FOUND_ERR)}else g=t.guid("uid_"),v=document.createElement("form"),v.setAttribute("id",g+"_form"),v.setAttribute("method",d.method),v.setAttribute("enctype","multipart/form-data"),v.setAttribute("encoding","multipart/form-data"),v.setAttribute("target",g+"_iframe"),m.getShimContainer().appendChild(v);f instanceof s&&f.each(function(e,n){if(e instanceof a)y&&y.setAttribute("name",n);else{var i=document.createElement("input");t.extend(i,{type:"hidden",name:n,value:e}),y?v.insertBefore(i,y):v.appendChild(i)}}),v.setAttribute("action",d.url),h(),v.submit(),p.trigger("loadstart")},getStatus:function(){return u},getResponse:function(e){if("json"===e&&"string"===t.typeOf(c)&&window.JSON)try{return JSON.parse(c.replace(/^\s*]*>/,"").replace(/<\/pre>\s*$/,""))}catch(n){return null}return c},abort:function(){var t=this;l&&l.contentWindow&&(l.contentWindow.stop?l.contentWindow.stop():l.contentWindow.document.execCommand?l.contentWindow.document.execCommand("Stop"):l.src="about:blank"),e.call(this,function(){t.dispatchEvent("abort")})}})}return e.XMLHttpRequest=u}),i(ft,[ut,X],function(e,t){return e.Image=t}),a([u,c,l,d,f,h,p,m,g,v,y,w,E,_,x,b,R,T,A,S,O,I,L])}(this);;(function(e){"use strict";var t={},n=e.moxie.core.utils.Basic.inArray;return function r(e){var i,s;for(i in e)s=typeof e[i],s==="object"&&!~n(i,["Exceptions","Env","Mime"])?r(e[i]):s==="function"&&(t[i]=e[i])}(e.moxie),t.Env=e.moxie.core.utils.Env,t.Mime=e.moxie.core.utils.Mime,t.Exceptions=e.moxie.core.Exceptions,e.mOxie=t,e.o||(e.o=t),t})(this); \ No newline at end of file +!function(e,t){"use strict";function n(e,t){for(var n,i=[],r=0;r0&&n(o,function(n,o){n!==r&&(e(i[o])===e(n)&&~a(e(n),["array","object"])?t(i[o],n):i[o]=n)})}),i},n=function(t,n){var i,r,o,a;if(t)if("number"===e(t.length)){for(o=0,i=t.length;i>o;o++)if(n(t[o],o)===!1)return}else if("object"===e(t))for(r in t)if(t.hasOwnProperty(r)&&n(t[r],r)===!1)return},i=function(t){var n;if(!t||"object"!==e(t))return!0;for(n in t)return!1;return!0},r=function(t,n){function i(r){"function"===e(t[r])&&t[r](function(e){++rn;n++)if(t[n]===e)return n}return-1},s=function(t,n){var i=[];"array"!==e(t)&&(t=[t]),"array"!==e(n)&&(n=[n]);for(var r in t)-1===a(t[r],n)&&i.push(t[r]);return i.length?i:!1},u=function(e,t){var i=[];return n(e,function(e){-1!==a(e,t)&&i.push(e)}),i.length?i:null},c=function(e){var t,n=[];for(t=0;ti;i++)n+=Math.floor(65535*Math.random()).toString(32);return(t||"o_")+n+(e++).toString(32)}}(),d=function(e){return e?String.prototype.trim?String.prototype.trim.call(e):e.toString().replace(/^\s*/,"").replace(/\s*$/,""):e},h=function(e){if("string"!=typeof e)return e;var t={t:1099511627776,g:1073741824,m:1048576,k:1024},n;return e=/^([0-9\.]+)([tmgk]?)$/.exec(e.toLowerCase().replace(/[^0-9\.tmkg]/g,"")),n=e[2],e=+e[1],t.hasOwnProperty(n)&&(e*=t[n]),Math.floor(e)},f=function(t){var n=[].slice.call(arguments,1);return t.replace(/%[a-z]/g,function(){var t=n.shift();return"undefined"!==e(t)?t:""})};return{guid:l,typeOf:e,extend:t,each:n,isEmptyObj:i,inSeries:r,inParallel:o,inArray:a,arrayDiff:s,arrayIntersect:u,toArray:c,trim:d,sprintf:f,parseSizeStr:h}}),i(c,[u],function(e){function t(e,t,n){var i=0,r=0,o=0,a={dev:-6,alpha:-5,a:-5,beta:-4,b:-4,RC:-3,rc:-3,"#":-2,p:1,pl:1},s=function(e){return e=(""+e).replace(/[_\-+]/g,"."),e=e.replace(/([^.\d]+)/g,".$1.").replace(/\.{2,}/g,"."),e.length?e.split("."):[-8]},u=function(e){return e?isNaN(e)?a[e]||-7:parseInt(e,10):0};for(e=s(e),t=s(t),r=Math.max(e.length,t.length),i=0;r>i;i++)if(e[i]!=t[i]){if(e[i]=u(e[i]),t[i]=u(t[i]),e[i]t[i]){o=1;break}}if(!n)return o;switch(n){case">":case"gt":return o>0;case">=":case"ge":return o>=0;case"<=":case"le":return 0>=o;case"==":case"=":case"eq":return 0===o;case"<>":case"!=":case"ne":return 0!==o;case"":case"<":case"lt":return 0>o;default:return null}}var n=function(e){var t="",n="?",i="function",r="undefined",o="object",a="major",s="model",u="name",c="type",l="vendor",d="version",h="architecture",f="console",p="mobile",m="tablet",g={has:function(e,t){return-1!==t.toLowerCase().indexOf(e.toLowerCase())},lowerize:function(e){return e.toLowerCase()}},v={rgx:function(){for(var t,n=0,a,s,u,c,l,d,h=arguments;n0?2==c.length?typeof c[1]==i?t[c[0]]=c[1].call(this,d):t[c[0]]=c[1]:3==c.length?typeof c[1]!==i||c[1].exec&&c[1].test?t[c[0]]=d?d.replace(c[1],c[2]):e:t[c[0]]=d?c[1].call(this,d,c[2]):e:4==c.length&&(t[c[0]]=d?c[3].call(this,d.replace(c[1],c[2])):e):t[c]=d?d:e;break}if(l)break}return t},str:function(t,i){for(var r in i)if(typeof i[r]===o&&i[r].length>0){for(var a=0;a=9)},use_data_uri_of:function(e){return t.use_data_uri&&33e3>e||t.use_data_uri_over32kb()},use_fileinput:function(){if(navigator.userAgent.match(/(Android (1.0|1.1|1.5|1.6|2.0|2.1))|(Windows Phone (OS 7|8.0))|(XBLWP)|(ZuneWP)|(w(eb)?OSBrowser)|(webOS)|(Kindle\/(1.0|2.0|2.5|3.0))/))return!1;var e=document.createElement("input");return e.setAttribute("type","file"),!e.disabled}};return function(n){var i=[].slice.call(arguments);return i.shift(),"function"===e.typeOf(t[n])?t[n].apply(this,i):!!t[n]}}(),r=(new n).getResult(),o={can:i,uaParser:n,browser:r.browser.name,version:r.browser.version,os:r.os.name,osVersion:r.os.version,verComp:t,swf_url:"../flash/Moxie.swf",xap_url:"../silverlight/Moxie.xap",global_event_dispatcher:"moxie.core.EventTarget.instance.dispatchEvent"};return o.OS=o.os,o}),i(l,[u],function(e){var t={};return{addI18n:function(n){return e.extend(t,n)},translate:function(e){return t[e]||e},_:function(e){return this.translate(e)},sprintf:function(t){var n=[].slice.call(arguments,1);return t.replace(/%[a-z]/g,function(){var t=n.shift();return"undefined"!==e.typeOf(t)?t:""})}}}),i(d,[u,l],function(e,t){var n="application/msword,doc dot,application/pdf,pdf,application/pgp-signature,pgp,application/postscript,ps ai eps,application/rtf,rtf,application/vnd.ms-excel,xls xlb,application/vnd.ms-powerpoint,ppt pps pot,application/zip,zip,application/x-shockwave-flash,swf swfl,application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx,application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx,application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx,application/vnd.openxmlformats-officedocument.presentationml.template,potx,application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx,application/x-javascript,js,application/json,json,audio/mpeg,mp3 mpga mpega mp2,audio/x-wav,wav,audio/x-m4a,m4a,audio/ogg,oga ogg,audio/aiff,aiff aif,audio/flac,flac,audio/aac,aac,audio/ac3,ac3,audio/x-ms-wma,wma,image/bmp,bmp,image/gif,gif,image/jpeg,jpg jpeg jpe,image/photoshop,psd,image/png,png,image/svg+xml,svg svgz,image/tiff,tiff tif,text/plain,asc txt text diff log,text/html,htm html xhtml,text/css,css,text/csv,csv,text/rtf,rtf,video/mpeg,mpeg mpg mpe m2v,video/quicktime,qt mov,video/mp4,mp4,video/x-m4v,m4v,video/x-flv,flv,video/x-ms-wmv,wmv,video/avi,avi,video/webm,webm,video/3gpp,3gpp 3gp,video/3gpp2,3g2,video/vnd.rn-realvideo,rv,video/ogg,ogv,video/x-matroska,mkv,application/vnd.oasis.opendocument.formula-template,otf,application/octet-stream,exe",i={mimes:{},extensions:{},addMimeType:function(e){var t=e.split(/,/),n,i,r;for(n=0;n=0;o--)if(r[o].fn===i){r.splice(o,1);break}}else r=[];r.length||(delete e[this.uid][t],n.isEmptyObj(e[this.uid])&&delete e[this.uid])}},removeAllEventListeners:function(){e[this.uid]&&delete e[this.uid]},dispatchEvent:function(i){var r,o,a,s,u={},c=!0,l;if("string"!==n.typeOf(i)){if(s=i,"string"!==n.typeOf(s.type))throw new t.EventException(t.EventException.UNSPECIFIED_EVENT_TYPE_ERR);i=s.type,s.total!==l&&s.loaded!==l&&(u.total=s.total,u.loaded=s.loaded),u.async=s.async||!1}if(-1!==i.indexOf("::")?!function(e){r=e[0],i=e[1]}(i.split("::")):r=this.uid,i=i.toLowerCase(),o=e[r]&&e[r][i]){o.sort(function(e,t){return t.priority-e.priority}),a=[].slice.call(arguments),a.shift(),u.type=i,a.unshift(u);var d=[];n.each(o,function(e){a[0].target=e.scope,u.async?d.push(function(t){setTimeout(function(){t(e.fn.apply(e.scope,a)===!1)},1)}):d.push(function(t){t(e.fn.apply(e.scope,a)===!1)})}),d.length&&n.inSeries(d,function(e){c=!e})}return c},bind:function(){this.addEventListener.apply(this,arguments)},unbind:function(){this.removeEventListener.apply(this,arguments)},unbindAll:function(){this.removeAllEventListeners.apply(this,arguments)},trigger:function(){return this.dispatchEvent.apply(this,arguments)},handleEventProps:function(e){var t=this;this.bind(e.join(" "),function(e){var t="on"+e.type.toLowerCase();"function"===n.typeOf(this[t])&&this[t].apply(this,arguments)}),n.each(e,function(e){e="on"+e.toLowerCase(e),"undefined"===n.typeOf(t[e])&&(t[e]=null)})}})}return i.instance=new i,i}),i(m,[c,u,h,p],function(e,t,n,i){function r(e,i,o,s,u){var c=this,l,d=t.guid(i+"_"),h=u||"browser";e=e||{},a[d]=this,o=t.extend({access_binary:!1,access_image_binary:!1,display_media:!1,do_cors:!1,drag_and_drop:!1,filter_by_extension:!0,resize_image:!1,report_upload_progress:!1,return_response_headers:!1,return_response_type:!1,return_status_code:!0,send_custom_headers:!1,select_file:!1,select_folder:!1,select_multiple:!0,send_binary_string:!1,send_browser_cookies:!0,send_multipart:!0,slice_blob:!1,stream_upload:!1,summon_file_dialog:!1,upload_filesize:!0,use_http_method:!0},o),e.preferred_caps&&(h=r.getMode(s,e.preferred_caps,h)),l=function(){var e={};return{exec:function(t,n,i,r){return l[n]&&(e[t]||(e[t]={context:this,instance:new l[n]}),e[t].instance[i])?e[t].instance[i].apply(this,r):void 0},removeInstance:function(t){delete e[t]},removeAllInstances:function(){var n=this;t.each(e,function(e,i){"function"===t.typeOf(e.instance.destroy)&&e.instance.destroy.call(e.context),n.removeInstance(i)})}}}(),t.extend(this,{initialized:!1,uid:d,type:i,mode:r.getMode(s,e.required_caps,h),shimid:d+"_container",clients:0,options:e,can:function(e,n){var i=arguments[2]||o;if("string"===t.typeOf(e)&&"undefined"===t.typeOf(n)&&(e=r.parseCaps(e)),"object"===t.typeOf(e)){for(var a in e)if(!this.can(a,e[a],i))return!1;return!0}return"function"===t.typeOf(i[e])?i[e].call(this,n):n===i[e]},getShimContainer:function(){var e,i=n.get(this.shimid);return i||(e=this.options.container?n.get(this.options.container):document.body,i=document.createElement("div"),i.id=this.shimid,i.className="moxie-shim moxie-shim-"+this.type,t.extend(i.style,{position:"absolute",top:"0px",left:"0px",width:"1px",height:"1px",overflow:"hidden"}),e.appendChild(i),e=null),i},getShim:function(){return l},shimExec:function(e,t){var n=[].slice.call(arguments,2);return c.getShim().exec.call(this,this.uid,e,t,n)},exec:function(e,t){var n=[].slice.call(arguments,2);return c[e]&&c[e][t]?c[e][t].apply(this,n):c.shimExec.apply(this,arguments)},destroy:function(){if(c){var e=n.get(this.shimid);e&&e.parentNode.removeChild(e),l&&l.removeAllInstances(),this.unbindAll(),delete a[this.uid],this.uid=null,d=c=l=e=null}}}),this.mode&&e.required_caps&&!this.can(e.required_caps)&&(this.mode=!1)}var o={},a={};return r.order="html5,flash,silverlight,html4",r.getRuntime=function(e){return a[e]?a[e]:!1},r.addConstructor=function(e,t){t.prototype=i.instance,o[e]=t},r.getConstructor=function(e){return o[e]||null},r.getInfo=function(e){var t=r.getRuntime(e);return t?{uid:t.uid,type:t.type,mode:t.mode,can:function(){return t.can.apply(t,arguments)}}:null},r.parseCaps=function(e){var n={};return"string"!==t.typeOf(e)?e||{}:(t.each(e.split(","),function(e){n[e]=!0}),n)},r.can=function(e,t){var n,i=r.getConstructor(e),o;return i?(n=new i({required_caps:t}),o=n.mode,n.destroy(),!!o):!1},r.thatCan=function(e,t){var n=(t||r.order).split(/\s*,\s*/);for(var i in n)if(r.can(n[i],e))return n[i];return null},r.getMode=function(e,n,i){var r=null;if("undefined"===t.typeOf(i)&&(i="browser"),n&&!t.isEmptyObj(e)){if(t.each(n,function(n,i){if(e.hasOwnProperty(i)){var o=e[i](n);if("string"==typeof o&&(o=[o]),r){if(!(r=t.arrayIntersect(r,o)))return r=!1}else r=o}}),r)return-1!==t.inArray(i,r)?i:r[0];if(r===!1)return!1}return i},r.capTrue=function(){return!0},r.capFalse=function(){return!1},r.capTest=function(e){return function(){return!!e}},r}),i(g,[c,f,u,m],function(e,t,n,i){return function r(){var e;n.extend(this,{connectRuntime:function(r){function o(n){var s,u;return n.length?(s=n.shift().toLowerCase(),(u=i.getConstructor(s))?(e=new u(r),e.bind("Init",function(){e.initialized=!0,setTimeout(function(){e.clients++,a.trigger("RuntimeInit",e)},1)}),e.bind("Error",function(){e.destroy(),o(n)}),e.mode?void e.init():void e.trigger("Error")):void o(n)):(a.trigger("RuntimeError",new t.RuntimeError(t.RuntimeError.NOT_INIT_ERR)),void(e=null))}var a=this,s;if("string"===n.typeOf(r)?s=r:"string"===n.typeOf(r.ruid)&&(s=r.ruid),s){if(e=i.getRuntime(s))return e.clients++,e;throw new t.RuntimeError(t.RuntimeError.NOT_INIT_ERR)}o((r.runtime_order||i.order).split(/\s*,\s*/))},disconnectRuntime:function(){e&&--e.clients<=0&&e.destroy(),e=null},getRuntime:function(){return e&&e.uid?e:e=null},exec:function(){return e?e.exec.apply(this,arguments):null}})}}),i(v,[u,c,d,h,f,p,l,m,g],function(e,t,n,i,r,o,a,s,u){function c(t){var o=this,c,d,h;if(-1!==e.inArray(e.typeOf(t),["string","node"])&&(t={browse_button:t}),d=i.get(t.browse_button),!d)throw new r.DOMException(r.DOMException.NOT_FOUND_ERR);h={accept:[{title:a.translate("All Files"),extensions:"*"}],name:"file",multiple:!1,required_caps:!1,container:d.parentNode||document.body},t=e.extend({},h,t),"string"==typeof t.required_caps&&(t.required_caps=s.parseCaps(t.required_caps)),"string"==typeof t.accept&&(t.accept=n.mimes2extList(t.accept)),c=i.get(t.container),c||(c=document.body),"static"===i.getStyle(c,"position")&&(c.style.position="relative"),c=d=null,u.call(o),e.extend(o,{uid:e.guid("uid_"),ruid:null,shimid:null,files:null,init:function(){o.bind("RuntimeInit",function(n,r){o.ruid=r.uid,o.shimid=r.shimid,o.bind("Ready",function(){o.trigger("Refresh")},999),o.bind("Refresh",function(){var n,o,a,s;a=i.get(t.browse_button),s=i.get(r.shimid),a&&(n=i.getPos(a,i.get(t.container)),o=i.getSize(a),s&&e.extend(s.style,{top:n.y+"px",left:n.x+"px",width:o.w+"px",height:o.h+"px"})),s=a=null}),r.exec.call(o,"FileInput","init",t)}),o.connectRuntime(e.extend({},t,{required_caps:{select_file:!0}}))},disable:function(t){var n=this.getRuntime();n&&n.exec.call(this,"FileInput","disable","undefined"===e.typeOf(t)?!0:t)},refresh:function(){o.trigger("Refresh")},destroy:function(){var t=this.getRuntime();t&&(t.exec.call(this,"FileInput","destroy"),this.disconnectRuntime()),"array"===e.typeOf(this.files)&&e.each(this.files,function(e){e.destroy()}),this.files=null,this.unbindAll()}}),this.handleEventProps(l)}var l=["ready","change","cancel","mouseenter","mouseleave","mousedown","mouseup"];return c.prototype=o.instance,c}),i(w,[],function(){var e=function(e){return unescape(encodeURIComponent(e))},t=function(e){return decodeURIComponent(escape(e))},n=function(e,n){if("function"==typeof window.atob)return n?t(window.atob(e)):window.atob(e);var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",r,o,a,s,u,c,l,d,h=0,f=0,p="",m=[];if(!e)return e;e+="";do s=i.indexOf(e.charAt(h++)),u=i.indexOf(e.charAt(h++)),c=i.indexOf(e.charAt(h++)),l=i.indexOf(e.charAt(h++)),d=s<<18|u<<12|c<<6|l,r=d>>16&255,o=d>>8&255,a=255&d,64==c?m[f++]=String.fromCharCode(r):64==l?m[f++]=String.fromCharCode(r,o):m[f++]=String.fromCharCode(r,o,a);while(h>18&63,u=d>>12&63,c=d>>6&63,l=63&d,m[f++]=i.charAt(s)+i.charAt(u)+i.charAt(c)+i.charAt(l);while(ha;a++)o+=String.fromCharCode(r[a]);return o}}t.call(this),e.extend(this,{uid:e.guid("uid_"),readAsBinaryString:function(e){return i.call(this,"readAsBinaryString",e)},readAsDataURL:function(e){return i.call(this,"readAsDataURL",e)},readAsText:function(e){return i.call(this,"readAsText",e)}})}}),i(I,[f,u,y],function(e,t,n){function i(){var e,i=[];t.extend(this,{append:function(r,o){var a=this,s=t.typeOf(o);o instanceof n?e={name:r,value:o}:"array"===s?(r+="[]",t.each(o,function(e){a.append(r,e)})):"object"===s?t.each(o,function(e,t){a.append(r+"["+t+"]",e)}):"null"===s||"undefined"===s||"number"===s&&isNaN(o)?a.append(r,"false"):i.push({name:r,value:o.toString()})},hasBlob:function(){return!!this.getBlob()},getBlob:function(){return e&&e.value||null},getBlobName:function(){return e&&e.name||null},each:function(n){t.each(i,function(e){n(e.value,e.name)}),e&&n(e.value,e.name)},destroy:function(){e=null,i=[]}})}return i}),i(T,[u,f,p,w,x,m,R,y,A,I,c,d],function(e,t,n,i,r,o,a,s,u,c,l,d){function h(){this.uid=e.guid("uid_")}function f(){function n(e,t){return w.hasOwnProperty(e)?1===arguments.length?l.can("define_property")?w[e]:v[e]:void(l.can("define_property")?w[e]=t:v[e]=t):void 0}function u(t){function i(){B&&(B.destroy(),B=null),s.dispatchEvent("loadend"),s=null}function r(r){B.bind("LoadStart",function(e){n("readyState",f.LOADING),s.dispatchEvent("readystatechange"),s.dispatchEvent(e),O&&s.upload.dispatchEvent(e)}),B.bind("Progress",function(e){n("readyState")!==f.LOADING&&(n("readyState",f.LOADING),s.dispatchEvent("readystatechange")),s.dispatchEvent(e)}),B.bind("UploadProgress",function(e){O&&s.upload.dispatchEvent({type:"progress",lengthComputable:!1,total:e.total,loaded:e.loaded})}),B.bind("Load",function(t){n("readyState",f.DONE),n("status",Number(r.exec.call(B,"XMLHttpRequest","getStatus")||0)),n("statusText",p[n("status")]||""),n("response",r.exec.call(B,"XMLHttpRequest","getResponse",n("responseType"))),~e.inArray(n("responseType"),["text",""])?n("responseText",n("response")):"document"===n("responseType")&&n("responseXML",n("response")),k=r.exec.call(B,"XMLHttpRequest","getAllResponseHeaders"),s.dispatchEvent("readystatechange"),n("status")>0?(O&&s.upload.dispatchEvent(t),s.dispatchEvent(t)):(N=!0,s.dispatchEvent("error")),i()}),B.bind("Abort",function(e){s.dispatchEvent(e),i()}),B.bind("Error",function(e){N=!0,n("readyState",f.DONE),s.dispatchEvent("readystatechange"),D=!0,s.dispatchEvent(e),i()}),r.exec.call(B,"XMLHttpRequest","send",{url:E,method:_,async:y,user:x,password:R,headers:b,mimeType:I,encoding:A,responseType:s.responseType,withCredentials:s.withCredentials,options:H},t)}var s=this;C=(new Date).getTime(),B=new a,"string"==typeof H.required_caps&&(H.required_caps=o.parseCaps(H.required_caps)),H.required_caps=e.extend({},H.required_caps,{return_response_type:s.responseType}),t instanceof c&&(H.required_caps.send_multipart=!0),e.isEmptyObj(b)||(H.required_caps.send_custom_headers=!0),L||(H.required_caps.do_cors=!0),H.ruid?r(B.connectRuntime(H)):(B.bind("RuntimeInit",function(e,t){r(t)}),B.bind("RuntimeError",function(e,t){s.dispatchEvent("RuntimeError",t)}),B.connectRuntime(H))}function g(){n("responseText",""),n("responseXML",null),n("response",null),n("status",0),n("statusText",""),C=M=null}var v=this,w={timeout:0,readyState:f.UNSENT,withCredentials:!1,status:0,statusText:"",responseType:"",responseXML:null,responseText:null,response:null},y=!0,E,_,b={},x,R,A=null,I=null,T=!1,S=!1,O=!1,D=!1,N=!1,L=!1,C,M,F=null,P=null,H={},B,k="",U;e.extend(this,w,{uid:e.guid("uid_"),upload:new h,open:function(o,a,s,u,c){var l;if(!o||!a)throw new t.DOMException(t.DOMException.SYNTAX_ERR);if(/[\u0100-\uffff]/.test(o)||i.utf8_encode(o)!==o)throw new t.DOMException(t.DOMException.SYNTAX_ERR);if(~e.inArray(o.toUpperCase(),["CONNECT","DELETE","GET","HEAD","OPTIONS","POST","PUT","TRACE","TRACK"])&&(_=o.toUpperCase()),~e.inArray(_,["CONNECT","TRACE","TRACK"]))throw new t.DOMException(t.DOMException.SECURITY_ERR);if(a=i.utf8_encode(a),l=r.parseUrl(a),L=r.hasSameOrigin(l),E=r.resolveUrl(a),(u||c)&&!L)throw new t.DOMException(t.DOMException.INVALID_ACCESS_ERR);if(x=u||l.user,R=c||l.pass,y=s||!0,y===!1&&(n("timeout")||n("withCredentials")||""!==n("responseType")))throw new t.DOMException(t.DOMException.INVALID_ACCESS_ERR);T=!y,S=!1,b={},g.call(this),n("readyState",f.OPENED),this.dispatchEvent("readystatechange")},setRequestHeader:function(r,o){var a=["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","cookie","cookie2","content-transfer-encoding","date","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","user-agent","via"];if(n("readyState")!==f.OPENED||S)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(/[\u0100-\uffff]/.test(r)||i.utf8_encode(r)!==r)throw new t.DOMException(t.DOMException.SYNTAX_ERR);return r=e.trim(r).toLowerCase(),~e.inArray(r,a)||/^(proxy\-|sec\-)/.test(r)?!1:(b[r]?b[r]+=", "+o:b[r]=o,!0)},getAllResponseHeaders:function(){return k||""},getResponseHeader:function(t){return t=t.toLowerCase(),N||~e.inArray(t,["set-cookie","set-cookie2"])?null:k&&""!==k&&(U||(U={},e.each(k.split(/\r\n/),function(t){var n=t.split(/:\s+/);2===n.length&&(n[0]=e.trim(n[0]),U[n[0].toLowerCase()]={header:n[0],value:e.trim(n[1])})})),U.hasOwnProperty(t))?U[t].header+": "+U[t].value:null},overrideMimeType:function(i){var r,o;if(~e.inArray(n("readyState"),[f.LOADING,f.DONE]))throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(i=e.trim(i.toLowerCase()),/;/.test(i)&&(r=i.match(/^([^;]+)(?:;\scharset\=)?(.*)$/))&&(i=r[1],r[2]&&(o=r[2])),!d.mimes[i])throw new t.DOMException(t.DOMException.SYNTAX_ERR);F=i,P=o},send:function(n,r){if(H="string"===e.typeOf(r)?{ruid:r}:r?r:{},this.readyState!==f.OPENED||S)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(n instanceof s)H.ruid=n.ruid,I=n.type||"application/octet-stream";else if(n instanceof c){if(n.hasBlob()){var o=n.getBlob();H.ruid=o.ruid,I=o.type||"application/octet-stream"}}else"string"==typeof n&&(A="UTF-8",I="text/plain;charset=UTF-8",n=i.utf8_encode(n));this.withCredentials||(this.withCredentials=H.required_caps&&H.required_caps.send_browser_cookies&&!L),O=!T&&this.upload.hasEventListener(),N=!1,D=!n,T||(S=!0),u.call(this,n)},abort:function(){if(N=!0,T=!1,~e.inArray(n("readyState"),[f.UNSENT,f.OPENED,f.DONE]))n("readyState",f.UNSENT);else{if(n("readyState",f.DONE),S=!1,!B)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);B.getRuntime().exec.call(B,"XMLHttpRequest","abort",D),D=!0}},destroy:function(){B&&("function"===e.typeOf(B.destroy)&&B.destroy(),B=null),this.unbindAll(),this.upload&&(this.upload.unbindAll(),this.upload=null)}}),this.handleEventProps(m.concat(["readystatechange"])),this.upload.handleEventProps(m)}var p={100:"Continue",101:"Switching Protocols",102:"Processing",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",306:"Reserved",307:"Temporary Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Request Entity Too Large",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Requested Range Not Satisfiable",417:"Expectation Failed",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",426:"Upgrade Required",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",510:"Not Extended"};h.prototype=n.instance;var m=["loadstart","progress","abort","error","load","timeout","loadend"],g=1,v=2;return f.UNSENT=0,f.OPENED=1,f.HEADERS_RECEIVED=2,f.LOADING=3,f.DONE=4,f.prototype=n.instance,f}),i(S,[u,w,g,p],function(e,t,n,i){function r(){function i(){l=d=0,c=this.result=null}function o(t,n){var i=this;u=n,i.bind("TransportingProgress",function(t){d=t.loaded,l>d&&-1===e.inArray(i.state,[r.IDLE,r.DONE])&&a.call(i)},999),i.bind("TransportingComplete",function(){d=l,i.state=r.DONE,c=null,i.result=u.exec.call(i,"Transporter","getAsBlob",t||"")},999),i.state=r.BUSY,i.trigger("TransportingStarted"),a.call(i)}function a(){var e=this,n,i=l-d;h>i&&(h=i),n=t.btoa(c.substr(d,h)),u.exec.call(e,"Transporter","receive",n,l)}var s,u,c,l,d,h;n.call(this),e.extend(this,{uid:e.guid("uid_"),state:r.IDLE,result:null,transport:function(t,n,r){var a=this;if(r=e.extend({chunk_size:204798},r),(s=r.chunk_size%3)&&(r.chunk_size+=3-s),h=r.chunk_size,i.call(this),c=t,l=t.length,"string"===e.typeOf(r)||r.ruid)o.call(a,n,this.connectRuntime(r));else{var u=function(e,t){a.unbind("RuntimeInit",u),o.call(a,n,t)};this.bind("RuntimeInit",u),this.connectRuntime(r)}},abort:function(){var e=this;e.state=r.IDLE,u&&(u.exec.call(e,"Transporter","clear"),e.trigger("TransportingAborted")),i.call(e)},destroy:function(){this.unbindAll(),u=null,this.disconnectRuntime(),i.call(this)}})}return r.IDLE=0,r.BUSY=1,r.DONE=2,r.prototype=i.instance,r}),i(O,[u,h,f,A,T,m,g,S,c,p,y,E,w],function(e,t,n,i,r,o,a,s,u,c,l,d,h){function f(){function i(e){e||(e=this.exec("Image","getInfo")),this.size=e.size,this.width=e.width,this.height=e.height,this.type=e.type,this.meta=e.meta,""===this.name&&(this.name=e.name)}function c(t){var i=e.typeOf(t);try{if(t instanceof f){if(!t.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);m.apply(this,arguments)}else if(t instanceof l){if(!~e.inArray(t.type,["image/jpeg","image/png"]))throw new n.ImageError(n.ImageError.WRONG_FORMAT);g.apply(this,arguments)}else if(-1!==e.inArray(i,["blob","file"]))c.call(this,new d(null,t),arguments[1]);else if("string"===i)"data:"===t.substr(0,5)?c.call(this,new l(null,{data:t}),arguments[1]):v.apply(this,arguments);else{if("node"!==i||"img"!==t.nodeName.toLowerCase())throw new n.DOMException(n.DOMException.TYPE_MISMATCH_ERR);c.call(this,t.src,arguments[1])}}catch(r){this.trigger("error",r.code)}}function m(t,n){var i=this.connectRuntime(t.ruid);this.ruid=i.uid,i.exec.call(this,"Image","loadFromImage",t,"undefined"===e.typeOf(n)?!0:n)}function g(t,n){function i(e){r.ruid=e.uid,e.exec.call(r,"Image","loadFromBlob",t)}var r=this;r.name=t.name||"",t.isDetached()?(this.bind("RuntimeInit",function(e,t){i(t)}),n&&"string"==typeof n.required_caps&&(n.required_caps=o.parseCaps(n.required_caps)),this.connectRuntime(e.extend({required_caps:{access_image_binary:!0,resize_image:!0}},n))):i(this.connectRuntime(t.ruid))}function v(e,t){var n=this,i;i=new r,i.open("get",e),i.responseType="blob",i.onprogress=function(e){n.trigger(e)},i.onload=function(){g.call(n,i.response,!0)},i.onerror=function(e){n.trigger(e)},i.onloadend=function(){i.destroy()},i.bind("RuntimeError",function(e,t){n.trigger("RuntimeError",t)}),i.send(null,t)}a.call(this),e.extend(this,{uid:e.guid("uid_"),ruid:null,name:"",size:0,width:0,height:0,type:"",meta:{},clone:function(){this.load.apply(this,arguments)},load:function(){c.apply(this,arguments)},downsize:function(t){var i={width:this.width,height:this.height,type:this.type||"image/jpeg",quality:90,crop:!1,preserveHeaders:!0,resample:!1};t="object"==typeof t?e.extend(i,t):e.extend(i,{width:arguments[0],height:arguments[1],crop:arguments[2],preserveHeaders:arguments[3]});try{if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);if(this.width>f.MAX_RESIZE_WIDTH||this.height>f.MAX_RESIZE_HEIGHT)throw new n.ImageError(n.ImageError.MAX_RESOLUTION_ERR);this.exec("Image","downsize",t.width,t.height,t.crop,t.preserveHeaders)}catch(r){this.trigger("error",r.code)}},crop:function(e,t,n){this.downsize(e,t,!0,n)},getAsCanvas:function(){if(!u.can("create_canvas"))throw new n.RuntimeError(n.RuntimeError.NOT_SUPPORTED_ERR);var e=this.connectRuntime(this.ruid);return e.exec.call(this,"Image","getAsCanvas")},getAsBlob:function(e,t){if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);return this.exec("Image","getAsBlob",e||"image/jpeg",t||90)},getAsDataURL:function(e,t){if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);return this.exec("Image","getAsDataURL",e||"image/jpeg",t||90)},getAsBinaryString:function(e,t){var n=this.getAsDataURL(e,t);return h.atob(n.substring(n.indexOf("base64,")+7))},embed:function(i,r){function o(t,r){var o=this;if(u.can("create_canvas")){var l=o.getAsCanvas();if(l)return i.appendChild(l),l=null,o.destroy(),void a.trigger("embedded")}var d=o.getAsDataURL(t,r);if(!d)throw new n.ImageError(n.ImageError.WRONG_FORMAT);if(u.can("use_data_uri_of",d.length))i.innerHTML='',o.destroy(),a.trigger("embedded");else{var f=new s;f.bind("TransportingComplete",function(){c=a.connectRuntime(this.result.ruid),a.bind("Embedded",function(){e.extend(c.getShimContainer().style,{top:"0px",left:"0px",width:o.width+"px",height:o.height+"px"}),c=null},999),c.exec.call(a,"ImageView","display",this.result.uid,width,height),o.destroy()}),f.transport(h.atob(d.substring(d.indexOf("base64,")+7)),t,{required_caps:{display_media:!0},runtime_order:"flash,silverlight",container:i})}}var a=this,c;r=e.extend({width:this.width,height:this.height,type:this.type||"image/jpeg",quality:90},r||{});try{if(!(i=t.get(i)))throw new n.DOMException(n.DOMException.INVALID_NODE_TYPE_ERR);if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);this.width>f.MAX_RESIZE_WIDTH||this.height>f.MAX_RESIZE_HEIGHT;var l=new f;return l.bind("Resize",function(){o.call(this,r.type,r.quality)}),l.bind("Load",function(){l.downsize(r)}),this.meta.thumb&&this.meta.thumb.width>=r.width&&this.meta.thumb.height>=r.height?l.load(this.meta.thumb.data):l.clone(this,!1),l}catch(d){this.trigger("error",d.code)}},destroy:function(){this.ruid&&(this.getRuntime().exec.call(this,"Image","destroy"),this.disconnectRuntime()),this.unbindAll()}}),this.handleEventProps(p),this.bind("Load Resize",function(){i.call(this)},999)}var p=["progress","load","error","resize","embedded"];return f.MAX_RESIZE_WIDTH=8192,f.MAX_RESIZE_HEIGHT=8192,f.prototype=c.instance,f}),i(D,[u,f,m,c],function(e,t,n,i){function r(t){var r=this,s=n.capTest,u=n.capTrue,c=e.extend({access_binary:s(window.FileReader||window.File&&window.File.getAsDataURL),access_image_binary:function(){return r.can("access_binary")&&!!a.Image},display_media:s(i.can("create_canvas")||i.can("use_data_uri_over32kb")),do_cors:s(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest),drag_and_drop:s(function(){var e=document.createElement("div");return("draggable"in e||"ondragstart"in e&&"ondrop"in e)&&("IE"!==i.browser||i.verComp(i.version,9,">"))}()),filter_by_extension:s(function(){return"Chrome"===i.browser&&i.verComp(i.version,28,">=")||"IE"===i.browser&&i.verComp(i.version,10,">=")||"Safari"===i.browser&&i.verComp(i.version,7,">=")}()),return_response_headers:u,return_response_type:function(e){return"json"===e&&window.JSON?!0:i.can("return_response_type",e)},return_status_code:u,report_upload_progress:s(window.XMLHttpRequest&&(new XMLHttpRequest).upload),resize_image:function(){return r.can("access_binary")&&i.can("create_canvas")},select_file:function(){return i.can("use_fileinput")&&window.File},select_folder:function(){return r.can("select_file")&&"Chrome"===i.browser&&i.verComp(i.version,21,">=")},select_multiple:function(){return r.can("select_file")&&!("Safari"===i.browser&&"Windows"===i.os)&&!("iOS"===i.os&&i.verComp(i.osVersion,"7.0.0",">")&&i.verComp(i.osVersion,"8.0.0","<"))},send_binary_string:s(window.XMLHttpRequest&&((new XMLHttpRequest).sendAsBinary||window.Uint8Array&&window.ArrayBuffer)),send_custom_headers:s(window.XMLHttpRequest),send_multipart:function(){return!!(window.XMLHttpRequest&&(new XMLHttpRequest).upload&&window.FormData)||r.can("send_binary_string")},slice_blob:s(window.File&&(File.prototype.mozSlice||File.prototype.webkitSlice||File.prototype.slice)),stream_upload:function(){return r.can("slice_blob")&&r.can("send_multipart")},summon_file_dialog:function(){return r.can("select_file")&&("Firefox"===i.browser&&i.verComp(i.version,4,">=")||"Opera"===i.browser&&i.verComp(i.version,12,">=")||"IE"===i.browser&&i.verComp(i.version,10,">=")||!!~e.inArray(i.browser,["Chrome","Safari"]))},upload_filesize:u},arguments[2]);n.call(this,t,arguments[1]||o,c),e.extend(this,{init:function(){this.trigger("Init")},destroy:function(e){return function(){e.call(r),e=r=null}}(this.destroy)}),e.extend(this.getShim(),a)}var o="html5",a={};return n.addConstructor(o,r),a}),i(N,[u],function(e){function t(){this.returnValue=!1}function n(){this.cancelBubble=!0}var i={},r="moxie_"+e.guid(),o=function(o,a,s,u){var c,l;a=a.toLowerCase(),o.addEventListener?(c=s,o.addEventListener(a,c,!1)):o.attachEvent&&(c=function(){var e=window.event;e.target||(e.target=e.srcElement),e.preventDefault=t,e.stopPropagation=n,s(e)},o.attachEvent("on"+a,c)),o[r]||(o[r]=e.guid()),i.hasOwnProperty(o[r])||(i[o[r]]={}),l=i[o[r]],l.hasOwnProperty(a)||(l[a]=[]),l[a].push({func:c,orig:s,key:u})},a=function(t,n,o){var a,s;if(n=n.toLowerCase(),t[r]&&i[t[r]]&&i[t[r]][n]){a=i[t[r]][n];for(var u=a.length-1;u>=0&&(a[u].orig!==o&&a[u].key!==o||(t.removeEventListener?t.removeEventListener(n,a[u].func,!1):t.detachEvent&&t.detachEvent("on"+n,a[u].func),a[u].orig=null,a[u].func=null,a.splice(u,1),o===s));u--);if(a.length||delete i[t[r]][n],e.isEmptyObj(i[t[r]])){delete i[t[r]];try{delete t[r]}catch(c){t[r]=s}}}},s=function(t,n){t&&t[r]&&e.each(i[t[r]],function(e,i){a(t,i,n)})};return{addEvent:o,removeEvent:a,removeAllEvents:s}}),i(L,[D,E,u,h,N,d,c],function(e,t,n,i,r,o,a){function s(){var e;n.extend(this,{init:function(s){var u=this,c=u.getRuntime(),l,d,h,f,p,m;e=s,h=e.accept.mimes||o.extList2mimes(e.accept,c.can("filter_by_extension")),d=c.getShimContainer(),d.innerHTML='",l=i.get(c.uid),n.extend(l.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),f=i.get(e.browse_button),c.can("summon_file_dialog")&&("static"===i.getStyle(f,"position")&&(f.style.position="relative"),p=parseInt(i.getStyle(f,"z-index"),10)||1,f.style.zIndex=p,d.style.zIndex=p-1,r.addEvent(f,"click",function(e){var t=i.get(c.uid);t&&!t.disabled&&t.click(),e.preventDefault()},u.uid)),m=c.can("summon_file_dialog")?f:d,r.addEvent(m,"mouseover",function(){u.trigger("mouseenter")},u.uid),r.addEvent(m,"mouseout",function(){u.trigger("mouseleave")},u.uid),r.addEvent(m,"mousedown",function(){u.trigger("mousedown")},u.uid),r.addEvent(i.get(e.container),"mouseup",function(){u.trigger("mouseup")},u.uid),l.onchange=function g(i){if(u.files=[],n.each(this.files,function(n){var i="";return e.directory&&"."==n.name?!0:(n.webkitRelativePath&&(i="/"+n.webkitRelativePath.replace(/^\//,"")),n=new t(c.uid,n),n.relativePath=i,void u.files.push(n))}),"IE"!==a.browser&&"IEMobile"!==a.browser)this.value="";else{var r=this.cloneNode(!0);this.parentNode.replaceChild(r,this),r.onchange=g}u.files.length&&u.trigger("change")},u.trigger({type:"ready",async:!0}),d=null},disable:function(e){var t=this.getRuntime(),n;(n=i.get(t.uid))&&(n.disabled=!!e)},destroy:function(){var t=this.getRuntime(),n=t.getShim(),o=t.getShimContainer();r.removeAllEvents(o,this.uid),r.removeAllEvents(e&&i.get(e.container),this.uid),r.removeAllEvents(e&&i.get(e.browse_button),this.uid),o&&(o.innerHTML=""),n.removeInstance(this.uid),e=o=n=null}})}return e.FileInput=s}),i(C,[D,y],function(e,t){function n(){function e(e,t,n){var i;if(!window.File.prototype.slice)return(i=window.File.prototype.webkitSlice||window.File.prototype.mozSlice)?i.call(e,t,n):null;try{return e.slice(),e.slice(t,n)}catch(r){return e.slice(t,n-t)}}this.slice=function(){return new t(this.getRuntime().uid,e.apply(this,arguments))}}return e.Blob=n}),i(M,[D,E,u,h,N,d],function(e,t,n,i,r,o){function a(){function e(e){if(!e.dataTransfer||!e.dataTransfer.types)return!1;var t=n.toArray(e.dataTransfer.types||[]);return-1!==n.inArray("Files",t)||-1!==n.inArray("public.file-url",t)||-1!==n.inArray("application/x-moz-file",t)}function a(e,n){if(u(e)){var i=new t(g,e);i.relativePath=n||"",f.push(i)}}function s(e){for(var t=[],i=0;i=")&&u.verComp(u.version,7,"<"),h="Android Browser"===u.browser,m=!1;if(p=n.url.replace(/^.+?\/([\w\-\.]+)$/,"$1").toLowerCase(),f=c(),f.open(n.method,n.url,n.async,n.user,n.password),r instanceof o)r.isDetached()&&(m=!0),r=r.getSource();else if(r instanceof a){if(r.hasBlob())if(r.getBlob().isDetached())r=d.call(s,r),m=!0;else if((l||h)&&"blob"===t.typeOf(r.getBlob().getSource())&&window.FileReader)return void e.call(s,n,r);if(r instanceof a){var g=new window.FormData;r.each(function(e,t){e instanceof o?g.append(t,e.getSource()):g.append(t,e)}),r=g}}f.upload?(n.withCredentials&&(f.withCredentials=!0),f.addEventListener("load",function(e){s.trigger(e)}),f.addEventListener("error",function(e){s.trigger(e)}),f.addEventListener("progress",function(e){s.trigger(e)}),f.upload.addEventListener("progress",function(e){s.trigger({type:"UploadProgress",loaded:e.loaded,total:e.total})})):f.onreadystatechange=function v(){switch(f.readyState){case 1:break;case 2:break;case 3:var e,t;try{i.hasSameOrigin(n.url)&&(e=f.getResponseHeader("Content-Length")||0),f.responseText&&(t=f.responseText.length)}catch(r){e=t=0}s.trigger({type:"progress",lengthComputable:!!e,total:parseInt(e,10),loaded:t});break;case 4:f.onreadystatechange=function(){},0===f.status?s.trigger("error"):s.trigger("load")}},t.isEmptyObj(n.headers)||t.each(n.headers,function(e,t){f.setRequestHeader(t,e)}),""!==n.responseType&&"responseType"in f&&("json"!==n.responseType||u.can("return_response_type","json")?f.responseType=n.responseType:f.responseType="text"),m?f.sendAsBinary?f.sendAsBinary(r):!function(){for(var e=new Uint8Array(r.length),t=0;t0&&o.set(new Uint8Array(t.slice(0,e)),0),o.set(new Uint8Array(r),e),o.set(new Uint8Array(t.slice(e+i)),e+r.byteLength),this.clear(),t=o.buffer,n=new DataView(t);break}default:return t}},length:function(){return t?t.byteLength:0},clear:function(){n=t=null}})}function i(t){function n(e,n,i){i=3===arguments.length?i:t.length-n-1,t=t.substr(0,n)+e+t.substr(i+n)}e.extend(this,{readByteAt:function(e){return t.charCodeAt(e)},writeByteAt:function(e,t){n(String.fromCharCode(t),e,1)},SEGMENT:function(e,i,r){switch(arguments.length){case 1:return t.substr(e);case 2:return t.substr(e,i);case 3:n(null!==r?r:"",e,i);break;default:return t}},length:function(){return t?t.length:0},clear:function(){t=null}})}return e.extend(t.prototype,{littleEndian:!1,read:function(e,t){var n,i,r;if(e+t>this.length())throw new Error("You are trying to read outside the source boundaries.");for(i=this.littleEndian?0:-8*(t-1),r=0,n=0;t>r;r++)n|=this.readByteAt(e+r)<this.length())throw new Error("You are trying to write outside the source boundaries.");for(i=this.littleEndian?0:-8*(n-1),r=0;n>r;r++)this.writeByteAt(e+r,t>>Math.abs(i+8*r)&255)},BYTE:function(e){return this.read(e,1)},SHORT:function(e){return this.read(e,2)},LONG:function(e){return this.read(e,4)},SLONG:function(e){var t=this.read(e,4);return t>2147483647?t-4294967296:t},CHAR:function(e){return String.fromCharCode(this.read(e,1))},STRING:function(e,t){return this.asArray("CHAR",e,t).join("")},asArray:function(e,t,n){for(var i=[],r=0;n>r;r++)i[r]=this[e](t+r);return i}}),t}),i(B,[H,f],function(e,t){return function n(i){var r=[],o,a,s,u=0;if(o=new e(i),65496!==o.SHORT(0))throw o.clear(),new t.ImageError(t.ImageError.WRONG_FORMAT);for(a=2;a<=o.length();)if(s=o.SHORT(a),s>=65488&&65495>=s)a+=2;else{if(65498===s||65497===s)break;u=o.SHORT(a+2)+2,s>=65505&&65519>=s&&r.push({hex:s,name:"APP"+(15&s),start:a,length:u,segment:o.SEGMENT(a,u)}),a+=u}return o.clear(),{headers:r,restore:function(t){var n,i,o;for(o=new e(t),a=65504==o.SHORT(2)?4+o.SHORT(4):2,i=0,n=r.length;n>i;i++)o.SEGMENT(a,0,r[i].segment),a+=r[i].length;return t=o.SEGMENT(),o.clear(),t},strip:function(t){var i,r,o,a;for(o=new n(t),r=o.headers,o.purge(),i=new e(t),a=r.length;a--;)i.SEGMENT(r[a].start,r[a].length,"");return t=i.SEGMENT(),i.clear(),t},get:function(e){for(var t=[],n=0,i=r.length;i>n;n++)r[n].name===e.toUpperCase()&&t.push(r[n].segment); +return t},set:function(e,t){var n=[],i,o,a;for("string"==typeof t?n.push(t):n=t,i=o=0,a=r.length;a>i&&(r[i].name===e.toUpperCase()&&(r[i].segment=n[o],r[i].length=n[o].length,o++),!(o>=n.length));i++);},purge:function(){this.headers=r=[]}}}}),i(k,[u,H,f],function(e,n,i){function r(o){function a(n,r){var o=this,a,s,u,c,h,f,p,m,g=[],v={},w={1:"BYTE",7:"UNDEFINED",2:"ASCII",3:"SHORT",4:"LONG",5:"RATIONAL",9:"SLONG",10:"SRATIONAL"},y={BYTE:1,UNDEFINED:1,ASCII:1,SHORT:2,LONG:4,RATIONAL:8,SLONG:4,SRATIONAL:8};for(a=o.SHORT(n),s=0;a>s;s++)if(g=[],p=n+2+12*s,u=r[o.SHORT(p)],u!==t){if(c=w[o.SHORT(p+=2)],h=o.LONG(p+=2),f=y[c],!f)throw new i.ImageError(i.ImageError.INVALID_META_ERR);if(p+=4,f*h>4&&(p=o.LONG(p)+d.tiffHeader),p+f*h>=this.length())throw new i.ImageError(i.ImageError.INVALID_META_ERR);"ASCII"!==c?(g=o.asArray(c,p,h),m=1==h?g[0]:g,l.hasOwnProperty(u)&&"object"!=typeof m?v[u]=l[u][m]:v[u]=m):v[u]=e.trim(o.STRING(p,h).replace(/\0$/,""))}return v}function s(e,t,n){var i,r,o,a=0;if("string"==typeof t){var s=c[e.toLowerCase()];for(var u in s)if(s[u]===t){t=u;break}}i=d[e.toLowerCase()+"IFD"],r=this.SHORT(i);for(var l=0;r>l;l++)if(o=i+12*l+2,this.SHORT(o)==t){a=o+8;break}if(!a)return!1;try{this.write(a,n,4)}catch(h){return!1}return!0}var u,c,l,d,h,f;if(n.call(this,o),c={tiff:{274:"Orientation",270:"ImageDescription",271:"Make",272:"Model",305:"Software",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer"},exif:{36864:"ExifVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",36867:"DateTimeOriginal",33434:"ExposureTime",33437:"FNumber",34855:"ISOSpeedRatings",37377:"ShutterSpeedValue",37378:"ApertureValue",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37386:"FocalLength",41986:"ExposureMode",41987:"WhiteBalance",41990:"SceneCaptureType",41988:"DigitalZoomRatio",41992:"Contrast",41993:"Saturation",41994:"Sharpness"},gps:{0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude"},thumb:{513:"JPEGInterchangeFormat",514:"JPEGInterchangeFormatLength"}},l={ColorSpace:{1:"sRGB",0:"Uncalibrated"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{1:"Daylight",2:"Fliorescent",3:"Tungsten",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 -5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire",1:"Flash fired",5:"Strobe return light not detected",7:"Strobe return light detected",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},ExposureMode:{0:"Auto exposure",1:"Manual exposure",2:"Auto bracket"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},GPSLatitudeRef:{N:"North latitude",S:"South latitude"},GPSLongitudeRef:{E:"East longitude",W:"West longitude"}},d={tiffHeader:10},h=d.tiffHeader,u={clear:this.clear},e.extend(this,{read:function(){try{return r.prototype.read.apply(this,arguments)}catch(e){throw new i.ImageError(i.ImageError.INVALID_META_ERR)}},write:function(){try{return r.prototype.write.apply(this,arguments)}catch(e){throw new i.ImageError(i.ImageError.INVALID_META_ERR)}},UNDEFINED:function(){return this.BYTE.apply(this,arguments)},RATIONAL:function(e){return this.LONG(e)/this.LONG(e+4)},SRATIONAL:function(e){return this.SLONG(e)/this.SLONG(e+4)},ASCII:function(e){return this.CHAR(e)},TIFF:function(){return f||null},EXIF:function(){var t=null;if(d.exifIFD){try{t=a.call(this,d.exifIFD,c.exif)}catch(n){return null}if(t.ExifVersion&&"array"===e.typeOf(t.ExifVersion)){for(var i=0,r="";i=65472&&65475>=n)return t+=5,{height:e.SHORT(t),width:e.SHORT(t+=2)};i=e.SHORT(t+=2),t+=i-2}return null}function s(){var e=d.thumb(),t,n;return e&&(t=new i(e),n=a(t),t.clear(),n)?(n.data=e,n):null}function u(){d&&l&&c&&(d.clear(),l.purge(),c.clear(),h=l=d=c=null)}var c,l,d,h;if(c=new i(o),65496!==c.SHORT(0))throw new t.ImageError(t.ImageError.WRONG_FORMAT);l=new n(o);try{d=new r(l.get("app1")[0])}catch(f){}h=a.call(this),e.extend(this,{type:"image/jpeg",size:c.length(),width:h&&h.width||0,height:h&&h.height||0,setExif:function(t,n){return d?("object"===e.typeOf(t)?e.each(t,function(e,t){d.setExif(t,e)}):d.setExif(t,n),void l.set("app1",d.SEGMENT())):!1},writeHeaders:function(){return arguments.length?l.restore(arguments[0]):l.restore(o)},stripHeaders:function(e){return l.strip(e)},purge:function(){u.call(this)}}),d&&(this.meta={tiff:d.TIFF(),exif:d.EXIF(),gps:d.GPS(),thumb:s()})}return o}),i(G,[f,u,H],function(e,t,n){function i(i){function r(){var e,t;return e=a.call(this,8),"IHDR"==e.type?(t=e.start,{width:s.LONG(t),height:s.LONG(t+=4)}):null}function o(){s&&(s.clear(),i=l=u=c=s=null)}function a(e){var t,n,i,r;return t=s.LONG(e),n=s.STRING(e+=4,4),i=e+=4,r=s.LONG(e+t),{length:t,type:n,start:i,CRC:r}}var s,u,c,l;s=new n(i),function(){var t=0,n=0,i=[35152,20039,3338,6666];for(n=0;ng;){for(var v=g+h>a?a-g:h,w=0;o>w;){var y=w+h>o?o-w:h;p.clearRect(0,0,h,h),p.drawImage(e,-w,-g);var E=w*s/o+c<<0,_=Math.ceil(y*s/o),b=g*u/a/m+l<<0,x=Math.ceil(v*u/a/m);d.drawImage(f,0,0,y,v,E,b,_,x),w+=h}g+=h}f=p=null}function t(e){var t=e.naturalWidth,n=e.naturalHeight;if(t*n>1048576){var i=document.createElement("canvas");i.width=i.height=1;var r=i.getContext("2d");return r.drawImage(e,-t+1,0),0===r.getImageData(0,0,1,1).data[3]}return!1}function n(e,t,n){var i=document.createElement("canvas");i.width=1,i.height=n;var r=i.getContext("2d");r.drawImage(e,0,0);for(var o=r.getImageData(0,0,1,n).data,a=0,s=n,u=n;u>a;){var c=o[4*(u-1)+3];0===c?s=u:a=u,u=s+a>>1}i=null;var l=u/n;return 0===l?1:l}return{isSubsampled:t,renderTo:e}}),i(j,[D,u,f,w,y,E,z,q,d,c],function(e,t,n,i,r,o,a,s,u,c){function l(){function e(){if(!_&&!y)throw new n.ImageError(n.DOMException.INVALID_STATE_ERR);return _||y}function l(e){return i.atob(e.substring(e.indexOf("base64,")+7))}function d(e,t){return"data:"+(t||"")+";base64,"+i.btoa(e)}function h(e){var t=this;y=new Image,y.onerror=function(){v.call(this),t.trigger("error",n.ImageError.WRONG_FORMAT)},y.onload=function(){t.trigger("load")},y.src="data:"==e.substr(0,5)?e:d(e,x.type)}function f(e,t){var i=this,r;return window.FileReader?(r=new FileReader,r.onload=function(){t(this.result)},r.onerror=function(){i.trigger("error",n.ImageError.WRONG_FORMAT)},r.readAsDataURL(e),void 0):t(e.getAsDataURL())}function p(n,i,r,o){var a=this,s,u,c=0,l=0,d,h,f,p;if(A=o,p=this.meta&&this.meta.tiff&&this.meta.tiff.Orientation||1,-1!==t.inArray(p,[5,6,7,8])){var v=n;n=i,i=v}return d=e(),r?(n=Math.min(n,d.width),i=Math.min(i,d.height),s=Math.max(n/d.width,i/d.height)):s=Math.min(n/d.width,i/d.height),s>1&&!r&&o?void this.trigger("Resize"):(_||(_=document.createElement("canvas")),h=Math.round(d.width*s),f=Math.round(d.height*s),r?(_.width=n,_.height=i,h>n&&(c=Math.round((h-n)/2)),f>i&&(l=Math.round((f-i)/2))):(_.width=h,_.height=f),A||g(_.width,_.height,p),m.call(this,d,_,-c,-l,h,f),this.width=_.width,this.height=_.height,R=!0,void a.trigger("Resize"))}function m(e,t,n,i,r,o){if("iOS"===c.OS)s.renderTo(e,t,{width:r,height:o,x:n,y:i});else{var a=t.getContext("2d");a.drawImage(e,n,i,r,o)}}function g(e,t,n){switch(n){case 5:case 6:case 7:case 8:_.width=t,_.height=e;break;default:_.width=e,_.height=t}var i=_.getContext("2d");switch(n){case 2:i.translate(e,0),i.scale(-1,1);break;case 3:i.translate(e,t),i.rotate(Math.PI);break;case 4:i.translate(0,t),i.scale(1,-1);break;case 5:i.rotate(.5*Math.PI),i.scale(1,-1);break;case 6:i.rotate(.5*Math.PI),i.translate(0,-t);break;case 7:i.rotate(.5*Math.PI),i.translate(e,-t),i.scale(-1,1);break;case 8:i.rotate(-.5*Math.PI),i.translate(-e,0)}}function v(){E&&(E.purge(),E=null),b=y=_=x=null,R=!1}var w=this,y,E,_,b,x,R=!1,A=!0;t.extend(this,{loadFromBlob:function(e){var t=this,i=t.getRuntime(),r=arguments.length>1?arguments[1]:!0;if(!i.can("access_binary"))throw new n.RuntimeError(n.RuntimeError.NOT_SUPPORTED_ERR);return x=e,e.isDetached()?(b=e.getSource(),void h.call(this,b)):void f.call(this,e.getSource(),function(e){r&&(b=l(e)),h.call(t,e)})},loadFromImage:function(e,t){this.meta=e.meta,x=new o(null,{name:e.name,size:e.size,type:e.type}),h.call(this,t?b=e.getAsBinaryString():e.getAsDataURL())},getInfo:function(){var t=this.getRuntime(),n;return!E&&b&&t.can("access_image_binary")&&(E=new a(b)),n={width:e().width||0,height:e().height||0,type:x.type||u.getFileMime(x.name),size:b&&b.length||x.size||0,name:x.name||"",meta:E&&E.meta||this.meta||{}},!n.meta||!n.meta.thumb||n.meta.thumb.data instanceof r||(n.meta.thumb.data=new r(null,{type:"image/jpeg",data:n.meta.thumb.data})),n},downsize:function(){p.apply(this,arguments)},getAsCanvas:function(){return _&&(_.id=this.uid+"_canvas"),_},getAsBlob:function(e,t){return e!==this.type&&p.call(this,this.width,this.height,!1),new o(null,{name:x.name||"",type:e,data:w.getAsBinaryString.call(this,e,t)})},getAsDataURL:function(e){var t=arguments[1]||90;if(!R)return y.src;if("image/jpeg"!==e)return _.toDataURL("image/png");try{return _.toDataURL("image/jpeg",t/100)}catch(n){return _.toDataURL("image/jpeg")}},getAsBinaryString:function(e,t){if(!R)return b||(b=l(w.getAsDataURL(e,t))),b;if("image/jpeg"!==e)b=l(w.getAsDataURL(e,t));else{var n;t||(t=90);try{n=_.toDataURL("image/jpeg",t/100)}catch(i){n=_.toDataURL("image/jpeg")}b=l(n),E&&(b=E.stripHeaders(b),A&&(E.meta&&E.meta.exif&&E.setExif({PixelXDimension:this.width,PixelYDimension:this.height}),b=E.writeHeaders(b)),E.purge(),E=null)}return R=!1,b},destroy:function(){w=null,v.call(this),this.getRuntime().getShim().removeInstance(this.uid)}})}return e.Image=l}),i(X,[u,c,h,f,m],function(e,t,n,i,r){function o(){var e;try{e=navigator.plugins["Shockwave Flash"],e=e.description}catch(t){try{e=new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version")}catch(n){e="0.0"}}return e=e.match(/\d+/g),parseFloat(e[0]+"."+e[1])}function a(e){var i=n.get(e);i&&"OBJECT"==i.nodeName&&("IE"===t.browser?(i.style.display="none",function r(){4==i.readyState?s(e):setTimeout(r,10)}()):i.parentNode.removeChild(i))}function s(e){var t=n.get(e);if(t){for(var i in t)"function"==typeof t[i]&&(t[i]=null);t.parentNode.removeChild(t)}}function u(s){var u=this,d;s=e.extend({swf_url:t.swf_url},s),r.call(this,s,c,{access_binary:function(e){return e&&"browser"===u.mode},access_image_binary:function(e){return e&&"browser"===u.mode},display_media:r.capTrue,do_cors:r.capTrue,drag_and_drop:!1,report_upload_progress:function(){return"client"===u.mode},resize_image:r.capTrue,return_response_headers:!1,return_response_type:function(t){return"json"===t&&window.JSON?!0:!e.arrayDiff(t,["","text","document"])||"browser"===u.mode},return_status_code:function(t){return"browser"===u.mode||!e.arrayDiff(t,[200,404])},select_file:r.capTrue,select_multiple:r.capTrue,send_binary_string:function(e){return e&&"browser"===u.mode},send_browser_cookies:function(e){return e&&"browser"===u.mode},send_custom_headers:function(e){return e&&"browser"===u.mode},send_multipart:r.capTrue,slice_blob:function(e){return e&&"browser"===u.mode},stream_upload:function(e){return e&&"browser"===u.mode},summon_file_dialog:!1,upload_filesize:function(t){return e.parseSizeStr(t)<=2097152||"client"===u.mode},use_http_method:function(t){return!e.arrayDiff(t,["GET","POST"])}},{access_binary:function(e){return e?"browser":"client"},access_image_binary:function(e){return e?"browser":"client"},report_upload_progress:function(e){return e?"browser":"client"},return_response_type:function(t){return e.arrayDiff(t,["","text","json","document"])?"browser":["client","browser"]},return_status_code:function(t){return e.arrayDiff(t,[200,404])?"browser":["client","browser"]},send_binary_string:function(e){return e?"browser":"client"},send_browser_cookies:function(e){return e?"browser":"client"},send_custom_headers:function(e){return e?"browser":"client"},stream_upload:function(e){return e?"client":"browser"},upload_filesize:function(t){return e.parseSizeStr(t)>=2097152?"client":"browser"}},"client"),o()<10&&(this.mode=!1),e.extend(this,{getShim:function(){return n.get(this.uid)},shimExec:function(e,t){var n=[].slice.call(arguments,2);return u.getShim().exec(this.uid,e,t,n)},init:function(){var n,r,o;o=this.getShimContainer(),e.extend(o.style,{position:"absolute",top:"-8px",left:"-8px",width:"9px",height:"9px",overflow:"hidden"}),n='',"IE"===t.browser?(r=document.createElement("div"),o.appendChild(r),r.outerHTML=n,r=o=null):o.innerHTML=n,d=setTimeout(function(){u&&!u.initialized&&u.trigger("Error",new i.RuntimeError(i.RuntimeError.NOT_INIT_ERR))},5e3)},destroy:function(e){return function(){a(u.uid),e.call(u),clearTimeout(d),s=d=e=u=null}}(this.destroy)},l)}var c="flash",l={};return r.addConstructor(c,u),l}),i(V,[X,E,u],function(e,t,n){var i={init:function(e){var i=this,r=this.getRuntime();this.bind("Change",function(){var e=r.shimExec.call(i,"FileInput","getFiles");i.files=[],n.each(e,function(e){i.files.push(new t(r.uid,e))})},999),this.getRuntime().shimExec.call(this,"FileInput","init",{name:e.name,accept:e.accept,multiple:e.multiple}),this.trigger("ready")}};return e.FileInput=i}),i(W,[X,y],function(e,t){var n={slice:function(e,n,i,r){var o=this.getRuntime();return 0>n?n=Math.max(e.size+n,0):n>0&&(n=Math.min(n,e.size)),0>i?i=Math.max(e.size+i,0):i>0&&(i=Math.min(i,e.size)),e=o.shimExec.call(this,"Blob","slice",n,i,r||""),e&&(e=new t(o.uid,e)),e}};return e.Blob=n}),i(Y,[X,w],function(e,t){function n(e,n){switch(n){case"readAsText":return t.atob(e,"utf8");case"readAsBinaryString":return t.atob(e);case"readAsDataURL":return e}return null}var i={read:function(e,t){var i=this;return i.result="","readAsDataURL"===e&&(i.result="data:"+(t.type||"")+";base64,"),i.bind("Progress",function(t,r){r&&(i.result+=n(r,e))},999),i.getRuntime().shimExec.call(this,"FileReader","readAsBase64",t.uid)}};return e.FileReader=i}),i($,[X,w],function(e,t){function n(e,n){switch(n){case"readAsText":return t.atob(e,"utf8");case"readAsBinaryString":return t.atob(e);case"readAsDataURL":return e}return null}var i={read:function(e,t){var i,r=this.getRuntime();return(i=r.shimExec.call(this,"FileReaderSync","readAsBase64",t.uid))?("readAsDataURL"===e&&(i="data:"+(t.type||"")+";base64,"+i),n(i,e,t.type)):null}};return e.FileReaderSync=i}),i(J,[X,u,y,E,A,I,S],function(e,t,n,i,r,o,a){var s={send:function(e,i){function r(){e.transport=l.mode,l.shimExec.call(c,"XMLHttpRequest","send",e,i)}function s(e,t){l.shimExec.call(c,"XMLHttpRequest","appendBlob",e,t.uid),i=null,r()}function u(e,t){var n=new a;n.bind("TransportingComplete",function(){t(this.result)}),n.transport(e.getSource(),e.type,{ruid:l.uid})}var c=this,l=c.getRuntime();if(t.isEmptyObj(e.headers)||t.each(e.headers,function(e,t){l.shimExec.call(c,"XMLHttpRequest","setRequestHeader",t,e.toString())}),i instanceof o){var d;if(i.each(function(e,t){e instanceof n?d=t:l.shimExec.call(c,"XMLHttpRequest","append",t,e)}),i.hasBlob()){var h=i.getBlob();h.isDetached()?u(h,function(e){h.destroy(),s(d,e)}):s(d,h)}else i=null,r()}else i instanceof n?i.isDetached()?u(i,function(e){i.destroy(),i=e.uid,r()}):(i=i.uid,r()):r()},getResponse:function(e){var n,o,a=this.getRuntime();if(o=a.shimExec.call(this,"XMLHttpRequest","getResponseAsBlob")){if(o=new i(a.uid,o),"blob"===e)return o;try{if(n=new r,~t.inArray(e,["","text"]))return n.readAsText(o);if("json"===e&&window.JSON)return JSON.parse(n.readAsText(o))}finally{o.destroy()}}return null},abort:function(e){var t=this.getRuntime();t.shimExec.call(this,"XMLHttpRequest","abort"),this.dispatchEvent("readystatechange"),this.dispatchEvent("abort")}};return e.XMLHttpRequest=s}),i(Z,[X,y],function(e,t){var n={getAsBlob:function(e){var n=this.getRuntime(),i=n.shimExec.call(this,"Transporter","getAsBlob",e);return i?new t(n.uid,i):null}};return e.Transporter=n}),i(K,[X,u,S,y,A],function(e,t,n,i,r){var o={loadFromBlob:function(e){function t(e){r.shimExec.call(i,"Image","loadFromBlob",e.uid),i=r=null}var i=this,r=i.getRuntime();if(e.isDetached()){var o=new n;o.bind("TransportingComplete",function(){t(o.result.getSource())}),o.transport(e.getSource(),e.type,{ruid:r.uid})}else t(e.getSource())},loadFromImage:function(e){var t=this.getRuntime();return t.shimExec.call(this,"Image","loadFromImage",e.uid)},getInfo:function(){var e=this.getRuntime(),t=e.shimExec.call(this,"Image","getInfo");return!t.meta||!t.meta.thumb||t.meta.thumb.data instanceof i||(t.meta.thumb.data=new i(e.uid,t.meta.thumb.data)),t},getAsBlob:function(e,t){var n=this.getRuntime(),r=n.shimExec.call(this,"Image","getAsBlob",e,t);return r?new i(n.uid,r):null},getAsDataURL:function(){var e=this.getRuntime(),t=e.Image.getAsBlob.apply(this,arguments),n;return t?(n=new r,n.readAsDataURL(t)):null}};return e.Image=o}),i(Q,[u,c,h,f,m],function(e,t,n,i,r){function o(e){var t=!1,n=null,i,r,o,a,s,u=0;try{try{n=new ActiveXObject("AgControl.AgControl"),n.IsVersionSupported(e)&&(t=!0),n=null}catch(c){var l=navigator.plugins["Silverlight Plug-In"];if(l){for(i=l.description,"1.0.30226.2"===i&&(i="2.0.30226.2"),r=i.split(".");r.length>3;)r.pop();for(;r.length<4;)r.push(0);for(o=e.split(".");o.length>4;)o.pop();do a=parseInt(o[u],10),s=parseInt(r[u],10),u++;while(u=a&&!isNaN(a)&&(t=!0)}}}catch(d){t=!1}return t}function a(a){var c=this,l;a=e.extend({xap_url:t.xap_url},a),r.call(this,a,s,{access_binary:r.capTrue,access_image_binary:r.capTrue,display_media:r.capTrue,do_cors:r.capTrue,drag_and_drop:!1,report_upload_progress:r.capTrue,resize_image:r.capTrue,return_response_headers:function(e){return e&&"client"===c.mode},return_response_type:function(e){return"json"!==e?!0:!!window.JSON},return_status_code:function(t){return"client"===c.mode||!e.arrayDiff(t,[200,404])},select_file:r.capTrue,select_multiple:r.capTrue,send_binary_string:r.capTrue,send_browser_cookies:function(e){return e&&"browser"===c.mode},send_custom_headers:function(e){return e&&"client"===c.mode},send_multipart:r.capTrue,slice_blob:r.capTrue,stream_upload:!0,summon_file_dialog:!1,upload_filesize:r.capTrue,use_http_method:function(t){return"client"===c.mode||!e.arrayDiff(t,["GET","POST"])}},{return_response_headers:function(e){return e?"client":"browser"},return_status_code:function(t){return e.arrayDiff(t,[200,404])?"client":["client","browser"]},send_browser_cookies:function(e){return e?"browser":"client"},send_custom_headers:function(e){return e?"client":"browser"},use_http_method:function(t){return e.arrayDiff(t,["GET","POST"])?"client":["client","browser"]}}),o("2.0.31005.0")&&"Opera"!==t.browser||(this.mode=!1),e.extend(this,{getShim:function(){return n.get(this.uid).content.Moxie},shimExec:function(e,t){var n=[].slice.call(arguments,2);return c.getShim().exec(this.uid,e,t,n)},init:function(){var e;e=this.getShimContainer(),e.innerHTML='',l=setTimeout(function(){c&&!c.initialized&&c.trigger("Error",new i.RuntimeError(i.RuntimeError.NOT_INIT_ERR))},"Windows"!==t.OS?1e4:5e3)},destroy:function(e){return function(){e.call(c),clearTimeout(l),a=l=e=c=null}}(this.destroy)},u)}var s="silverlight",u={};return r.addConstructor(s,a),u}),i(ee,[Q,E,u],function(e,t,n){var i={init:function(e){function i(e){for(var t="",n=0;ni;i++)n=t.keys[i],s=t[n],s&&(/^(\d|[1-9]\d+)$/.test(s)?s=parseInt(s,10):/^\d*\.\d+$/.test(s)&&(s=parseFloat(s)),r.meta[e][n]=s)}),!r.meta||!r.meta.thumb||r.meta.thumb.data instanceof n||(r.meta.thumb.data=new n(e.uid,r.meta.thumb.data))),r.width=parseInt(o.width,10),r.height=parseInt(o.height,10),r.size=parseInt(o.size,10),r.type=o.type,r.name=o.name,r}})}),i(ue,[u,f,m,c],function(e,t,n,i){function r(t){var r=this,s=n.capTest,u=n.capTrue;n.call(this,t,o,{access_binary:s(window.FileReader||window.File&&File.getAsDataURL),access_image_binary:!1,display_media:s(a.Image&&(i.can("create_canvas")||i.can("use_data_uri_over32kb"))),do_cors:!1,drag_and_drop:!1,filter_by_extension:s(function(){return"Chrome"===i.browser&&i.verComp(i.version,28,">=")||"IE"===i.browser&&i.verComp(i.version,10,">=")||"Safari"===i.browser&&i.verComp(i.version,7,">=")}()),resize_image:function(){return a.Image&&r.can("access_binary")&&i.can("create_canvas")},report_upload_progress:!1,return_response_headers:!1,return_response_type:function(t){return"json"===t&&window.JSON?!0:!!~e.inArray(t,["text","document",""])},return_status_code:function(t){return!e.arrayDiff(t,[200,404])},select_file:function(){return i.can("use_fileinput")},select_multiple:!1,send_binary_string:!1,send_custom_headers:!1,send_multipart:!0,slice_blob:!1,stream_upload:function(){return r.can("select_file")},summon_file_dialog:function(){return r.can("select_file")&&("Firefox"===i.browser&&i.verComp(i.version,4,">=")||"Opera"===i.browser&&i.verComp(i.version,12,">=")||"IE"===i.browser&&i.verComp(i.version,10,">=")||!!~e.inArray(i.browser,["Chrome","Safari"]))},upload_filesize:u,use_http_method:function(t){return!e.arrayDiff(t,["GET","POST"])}}),e.extend(this,{init:function(){this.trigger("Init")},destroy:function(e){return function(){e.call(r),e=r=null}}(this.destroy)}),e.extend(this.getShim(),a)}var o="html4",a={};return n.addConstructor(o,r),a}),i(ce,[ue,E,u,h,N,d,c],function(e,t,n,i,r,o,a){function s(){function e(){var o=this,l=o.getRuntime(),d,h,f,p,m,g;g=n.guid("uid_"),d=l.getShimContainer(),s&&(f=i.get(s+"_form"),f&&n.extend(f.style,{top:"100%"})),p=document.createElement("form"),p.setAttribute("id",g+"_form"),p.setAttribute("method","post"),p.setAttribute("enctype","multipart/form-data"),p.setAttribute("encoding","multipart/form-data"),n.extend(p.style,{overflow:"hidden",position:"absolute",top:0,left:0,width:"100%",height:"100%"}),m=document.createElement("input"),m.setAttribute("id",g),m.setAttribute("type","file"),m.setAttribute("name",c.name||"Filedata"),m.setAttribute("accept",u.join(",")),n.extend(m.style,{fontSize:"999px",opacity:0}),p.appendChild(m),d.appendChild(p),n.extend(m.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),"IE"===a.browser&&a.verComp(a.version,10,"<")&&n.extend(m.style,{filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=0)"}),m.onchange=function(){var n;if(this.value){if(this.files){if(n=this.files[0],0===n.size)return void p.parentNode.removeChild(p)}else n={name:this.value};n=new t(l.uid,n),this.onchange=function(){},e.call(o),o.files=[n],m.setAttribute("id",n.uid),p.setAttribute("id",n.uid+"_form"),o.trigger("change"),m=p=null}},l.can("summon_file_dialog")&&(h=i.get(c.browse_button),r.removeEvent(h,"click",o.uid),r.addEvent(h,"click",function(e){m&&!m.disabled&&m.click(),e.preventDefault()},o.uid)),s=g,d=f=h=null}var s,u=[],c;n.extend(this,{init:function(t){var n=this,a=n.getRuntime(),s;c=t,u=t.accept.mimes||o.extList2mimes(t.accept,a.can("filter_by_extension")),s=a.getShimContainer(),function(){var e,o,u;e=i.get(t.browse_button),a.can("summon_file_dialog")&&("static"===i.getStyle(e,"position")&&(e.style.position="relative"),o=parseInt(i.getStyle(e,"z-index"),10)||1,e.style.zIndex=o,s.style.zIndex=o-1),u=a.can("summon_file_dialog")?e:s,r.addEvent(u,"mouseover",function(){n.trigger("mouseenter")},n.uid),r.addEvent(u,"mouseout",function(){n.trigger("mouseleave")},n.uid),r.addEvent(u,"mousedown",function(){n.trigger("mousedown")},n.uid),r.addEvent(i.get(t.container),"mouseup",function(){n.trigger("mouseup")},n.uid),e=null}(),e.call(this),s=null,n.trigger({type:"ready",async:!0})},disable:function(e){var t;(t=i.get(s))&&(t.disabled=!!e)},destroy:function(){var e=this.getRuntime(),t=e.getShim(),n=e.getShimContainer();r.removeAllEvents(n,this.uid),r.removeAllEvents(c&&i.get(c.container),this.uid),r.removeAllEvents(c&&i.get(c.browse_button),this.uid),n&&(n.innerHTML=""),t.removeInstance(this.uid),s=u=c=n=t=null}})}return e.FileInput=s}),i(le,[ue,F],function(e,t){return e.FileReader=t}),i(de,[ue,u,h,x,f,N,y,I],function(e,t,n,i,r,o,a,s){function u(){function e(e){var t=this,i,r,a,s,u=!1;if(l){if(i=l.id.replace(/_iframe$/,""),r=n.get(i+"_form")){for(a=r.getElementsByTagName("input"),s=a.length;s--;)switch(a[s].getAttribute("type")){case"hidden":a[s].parentNode.removeChild(a[s]);break;case"file":u=!0}a=[],u||r.parentNode.removeChild(r),r=null}setTimeout(function(){o.removeEvent(l,"load",t.uid),l.parentNode&&l.parentNode.removeChild(l);var n=t.getRuntime().getShimContainer();n.children.length||n.parentNode.removeChild(n),n=l=null,e()},1)}}var u,c,l;t.extend(this,{send:function(d,h){function f(){var n=m.getShimContainer()||document.body,r=document.createElement("div");r.innerHTML='',l=r.firstChild,n.appendChild(l),o.addEvent(l,"load",function(){var n;try{n=l.contentWindow.document||l.contentDocument||window.frames[l.id].document,/^4(0[0-9]|1[0-7]|2[2346])\s/.test(n.title)?u=n.title.replace(/^(\d+).*$/,"$1"):(u=200,c=t.trim(n.body.innerHTML),p.trigger({type:"progress",loaded:c.length,total:c.length}),y&&p.trigger({type:"uploadprogress",loaded:y.size||1025,total:y.size||1025}))}catch(r){if(!i.hasSameOrigin(d.url))return void e.call(p,function(){p.trigger("error")});u=404}e.call(p,function(){p.trigger("load")})},p.uid)}var p=this,m=p.getRuntime(),g,v,w,y;if(u=c=null,h instanceof s&&h.hasBlob()){if(y=h.getBlob(),g=y.uid,w=n.get(g),v=n.get(g+"_form"),!v)throw new r.DOMException(r.DOMException.NOT_FOUND_ERR)}else g=t.guid("uid_"),v=document.createElement("form"),v.setAttribute("id",g+"_form"),v.setAttribute("method",d.method),v.setAttribute("enctype","multipart/form-data"),v.setAttribute("encoding","multipart/form-data"),m.getShimContainer().appendChild(v);v.setAttribute("target",g+"_iframe"),h instanceof s&&h.each(function(e,n){if(e instanceof a)w&&w.setAttribute("name",n);else{var i=document.createElement("input");t.extend(i,{type:"hidden",name:n,value:e}),w?v.insertBefore(i,w):v.appendChild(i)}}),v.setAttribute("action",d.url),f(),v.submit(),p.trigger("loadstart")},getStatus:function(){return u},getResponse:function(e){if("json"===e&&"string"===t.typeOf(c)&&window.JSON)try{ +return JSON.parse(c.replace(/^\s*]*>/,"").replace(/<\/pre>\s*$/,""))}catch(n){return null}return c},abort:function(){var t=this;l&&l.contentWindow&&(l.contentWindow.stop?l.contentWindow.stop():l.contentWindow.document.execCommand?l.contentWindow.document.execCommand("Stop"):l.src="about:blank"),e.call(this,function(){t.dispatchEvent("abort")})}})}return e.XMLHttpRequest=u}),i(he,[ue,j],function(e,t){return e.Image=t}),a([u,c,l,d,h,f,p,m,g,v,w,y,E,_,b,x,R,A,I,T,S,O,N])}(this);;(function(e){"use strict";var t={},n=e.moxie.core.utils.Basic.inArray;return function r(e){var i,s;for(i in e)s=typeof e[i],s==="object"&&!~n(i,["Exceptions","Env","Mime"])?r(e[i]):s==="function"&&(t[i]=e[i])}(e.moxie),t.Env=e.moxie.core.utils.Env,t.Mime=e.moxie.core.utils.Mime,t.Exceptions=e.moxie.core.Exceptions,e.mOxie=t,e.o||(e.o=t),t})(this); \ No newline at end of file diff --git a/e107_web/js/plupload/plupload.dev.js b/e107_web/js/plupload/plupload.dev.js index 732231ed9..07b01f98a 100644 --- a/e107_web/js/plupload/plupload.dev.js +++ b/e107_web/js/plupload/plupload.dev.js @@ -1,6 +1,6 @@ /** * Plupload - multi-runtime File Uploader - * v2.1.2 + * v2.1.9 * * Copyright 2013, Moxiecode Systems AB * Released under GPL License. @@ -8,7 +8,7 @@ * License: http://www.plupload.com/license * Contributing: http://www.plupload.com/contributing * - * Date: 2014-05-14 + * Date: 2016-05-15 */ /** * Plupload.js @@ -94,10 +94,10 @@ var plupload = { * @static * @final */ - VERSION : '2.1.2', + VERSION : '2.1.9', /** - * Inital state of the queue and also the state ones it's finished all it's uploads. + * The state of the queue before it has started and after it has finished * * @property STOPPED * @static @@ -288,9 +288,9 @@ var plupload = { /** * Generates an unique ID. This is 99.99% unique since it takes the current time and 5 random numbers. - * The only way a user would be able to get the same ID is if the two persons at the same exact milisecond manages + * The only way a user would be able to get the same ID is if the two persons at the same exact millisecond manages * to get 5 the same random numbers between 0-65535 it also uses a counter so each call will be guaranteed to be page unique. - * It's more probable for the earth to be hit with an ansteriod. You can also if you want to be 100% sure set the plupload.guidPrefix property + * It's more probable for the earth to be hit with an asteriod. You can also if you want to be 100% sure set the plupload.guidPrefix property * to an user unique key. * * @method guid @@ -303,20 +303,19 @@ var plupload = { * Get array of DOM Elements by their ids. * * @method get - * @for Utils * @param {String} id Identifier of the DOM Element * @return {Array} */ - get : function get(ids) { + getAll : function get(ids) { var els = [], el; - if (o.typeOf(ids) !== 'array') { + if (plupload.typeOf(ids) !== 'array') { ids = [ids]; } var i = ids.length; while (i--) { - el = o.get(ids[i]); + el = plupload.get(ids[i]); if (el) { els.push(el); } @@ -325,6 +324,15 @@ var plupload = { return els.length ? els : null; }, + /** + Get DOM element by id + + @method get + @param {String} id Identifier of the DOM Element + @return {Node} + */ + get: o.get, + /** * Executes the callback function for each item in array/object. If you return false in the * callback it will break the loop. @@ -384,7 +392,7 @@ var plupload = { toArray : o.toArray, /** - * Find an element in array and return it's index if present, otherwise return -1. + * Find an element in array and return its index if present, otherwise return -1. * * @method inArray * @static @@ -711,7 +719,7 @@ plupload.addFileFilter('prevent_duplicates', function(value, file, cb) { @param {String} settings.url URL of the server-side upload handler. @param {Number|String} [settings.chunk_size=0] Chunk size in bytes to slice the file into. Shorcuts with b, kb, mb, gb, tb suffixes also supported. `e.g. 204800 or "204800b" or "200kb"`. By default - disabled. @param {Boolean} [settings.send_chunk_number=true] Whether to send chunks and chunk numbers, or total and offset bytes. - @param {String} [settings.container] id of the DOM element to use as a container for uploader structures. Defaults to document.body. + @param {String|DOMElement} [settings.container] id of the DOM element or DOM element itself that will be used to wrap uploader structures. Defaults to immediate parent of the `browse_button` element. @param {String|DOMElement} [settings.drop_element] id of the DOM element or DOM element itself to use as a drop zone for Drag-n-Drop. @param {String} [settings.file_data_name="file"] Name for the file field in Multipart formated message. @param {Object} [settings.filters={}] Set of file type filters. @@ -737,148 +745,158 @@ plupload.addFileFilter('prevent_duplicates', function(value, file, cb) { */ plupload.Uploader = function(options) { /** - * Fires when the current RunTime has been initialized. - * - * @event Init - * @param {plupload.Uploader} uploader Uploader instance sending the event. + Fires when the current RunTime has been initialized. + + @event Init + @param {plupload.Uploader} uploader Uploader instance sending the event. */ /** - * Fires after the init event incase you need to perform actions there. - * - * @event PostInit - * @param {plupload.Uploader} uploader Uploader instance sending the event. + Fires after the init event incase you need to perform actions there. + + @event PostInit + @param {plupload.Uploader} uploader Uploader instance sending the event. */ /** - * Fires when the option is changed in via uploader.setOption(). - * - * @event OptionChanged - * @since 2.1 - * @param {plupload.Uploader} uploader Uploader instance sending the event. - * @param {String} name Name of the option that was changed - * @param {Mixed} value New value for the specified option - * @param {Mixed} oldValue Previous value of the option + Fires when the option is changed in via uploader.setOption(). + + @event OptionChanged + @since 2.1 + @param {plupload.Uploader} uploader Uploader instance sending the event. + @param {String} name Name of the option that was changed + @param {Mixed} value New value for the specified option + @param {Mixed} oldValue Previous value of the option */ /** - * Fires when the silverlight/flash or other shim needs to move. - * - * @event Refresh - * @param {plupload.Uploader} uploader Uploader instance sending the event. + Fires when the silverlight/flash or other shim needs to move. + + @event Refresh + @param {plupload.Uploader} uploader Uploader instance sending the event. */ /** - * Fires when the overall state is being changed for the upload queue. - * - * @event StateChanged - * @param {plupload.Uploader} uploader Uploader instance sending the event. + Fires when the overall state is being changed for the upload queue. + + @event StateChanged + @param {plupload.Uploader} uploader Uploader instance sending the event. */ /** - * Fires when browse_button is clicked and browse dialog shows. - * - * @event Browse - * @since 2.1.2 - * @param {plupload.Uploader} uploader Uploader instance sending the event. + Fires when browse_button is clicked and browse dialog shows. + + @event Browse + @since 2.1.2 + @param {plupload.Uploader} uploader Uploader instance sending the event. */ /** - * Fires for every filtered file before it is added to the queue. - * - * @event FileFiltered - * @since 2.1 - * @param {plupload.Uploader} uploader Uploader instance sending the event. - * @param {plupload.File} file Another file that has to be added to the queue. + Fires for every filtered file before it is added to the queue. + + @event FileFiltered + @since 2.1 + @param {plupload.Uploader} uploader Uploader instance sending the event. + @param {plupload.File} file Another file that has to be added to the queue. */ /** - * Fires when the file queue is changed. In other words when files are added/removed to the files array of the uploader instance. - * - * @event QueueChanged - * @param {plupload.Uploader} uploader Uploader instance sending the event. + Fires when the file queue is changed. In other words when files are added/removed to the files array of the uploader instance. + + @event QueueChanged + @param {plupload.Uploader} uploader Uploader instance sending the event. */ /** - * Fires after files were filtered and added to the queue. - * - * @event FilesAdded - * @param {plupload.Uploader} uploader Uploader instance sending the event. - * @param {Array} files Array of file objects that were added to queue by the user. + Fires after files were filtered and added to the queue. + + @event FilesAdded + @param {plupload.Uploader} uploader Uploader instance sending the event. + @param {Array} files Array of file objects that were added to queue by the user. */ /** - * Fires when file is removed from the queue. - * - * @event FilesRemoved - * @param {plupload.Uploader} uploader Uploader instance sending the event. - * @param {Array} files Array of files that got removed. + Fires when file is removed from the queue. + + @event FilesRemoved + @param {plupload.Uploader} uploader Uploader instance sending the event. + @param {Array} files Array of files that got removed. */ /** - * Fires when just before a file is uploaded. This event enables you to override settings - * on the uploader instance before the file is uploaded. - * - * @event BeforeUpload - * @param {plupload.Uploader} uploader Uploader instance sending the event. - * @param {plupload.File} file File to be uploaded. + Fires just before a file is uploaded. Can be used to cancel the upload for the specified file + by returning false from the handler. + + @event BeforeUpload + @param {plupload.Uploader} uploader Uploader instance sending the event. + @param {plupload.File} file File to be uploaded. */ /** - * Fires when a file is to be uploaded by the runtime. - * - * @event UploadFile - * @param {plupload.Uploader} uploader Uploader instance sending the event. - * @param {plupload.File} file File to be uploaded. + Fires when a file is to be uploaded by the runtime. + + @event UploadFile + @param {plupload.Uploader} uploader Uploader instance sending the event. + @param {plupload.File} file File to be uploaded. */ /** - * Fires while a file is being uploaded. Use this event to update the current file upload progress. - * - * @event UploadProgress - * @param {plupload.Uploader} uploader Uploader instance sending the event. - * @param {plupload.File} file File that is currently being uploaded. + Fires while a file is being uploaded. Use this event to update the current file upload progress. + + @event UploadProgress + @param {plupload.Uploader} uploader Uploader instance sending the event. + @param {plupload.File} file File that is currently being uploaded. */ /** - * Fires when file chunk is uploaded. - * - * @event ChunkUploaded - * @param {plupload.Uploader} uploader Uploader instance sending the event. - * @param {plupload.File} file File that the chunk was uploaded for. - * @param {Object} response Object with response properties. + Fires when file chunk is uploaded. + + @event ChunkUploaded + @param {plupload.Uploader} uploader Uploader instance sending the event. + @param {plupload.File} file File that the chunk was uploaded for. + @param {Object} result Object with response properties. + @param {Number} result.offset The amount of bytes the server has received so far, including this chunk. + @param {Number} result.total The size of the file. + @param {String} result.response The response body sent by the server. + @param {Number} result.status The HTTP status code sent by the server. + @param {String} result.responseHeaders All the response headers as a single string. */ /** - * Fires when a file is successfully uploaded. - * - * @event FileUploaded - * @param {plupload.Uploader} uploader Uploader instance sending the event. - * @param {plupload.File} file File that was uploaded. - * @param {Object} response Object with response properties. + Fires when a file is successfully uploaded. + + @event FileUploaded + @param {plupload.Uploader} uploader Uploader instance sending the event. + @param {plupload.File} file File that was uploaded. + @param {Object} result Object with response properties. + @param {String} result.response The response body sent by the server. + @param {Number} result.status The HTTP status code sent by the server. + @param {String} result.responseHeaders All the response headers as a single string. */ /** - * Fires when all files in a queue are uploaded. - * - * @event UploadComplete - * @param {plupload.Uploader} uploader Uploader instance sending the event. - * @param {Array} files Array of file objects that was added to queue/selected by the user. + Fires when all files in a queue are uploaded. + + @event UploadComplete + @param {plupload.Uploader} uploader Uploader instance sending the event. + @param {Array} files Array of file objects that was added to queue/selected by the user. */ /** - * Fires when a error occurs. - * - * @event Error - * @param {plupload.Uploader} uploader Uploader instance sending the event. - * @param {Object} error Contains code, message and sometimes file and other details. + Fires when a error occurs. + + @event Error + @param {plupload.Uploader} uploader Uploader instance sending the event. + @param {Object} error Contains code, message and sometimes file and other details. + @param {Number} error.code The plupload error code. + @param {String} error.message Description of the error (uses i18n). */ /** - * Fires when destroy method is called. - * - * @event Destroy - * @param {plupload.Uploader} uploader Uploader instance sending the event. + Fires when destroy method is called. + + @event Destroy + @param {plupload.Uploader} uploader Uploader instance sending the event. */ var uid = plupload.guid() , settings @@ -1110,7 +1128,12 @@ plupload.Uploader = function(options) { fileDrop.onready = function() { var info = o.Runtime.getInfo(this.ruid); - self.features.dragdrop = info.can('drag_and_drop'); // for backward compatibility + // for backward compatibility + o.extend(self.features, { + chunks: info.can('slice_blob'), + multipart: info.can('send_multipart'), + dragdrop: info.can('drag_and_drop') + }); inited++; fileDrops.push(this); @@ -1257,11 +1280,15 @@ plupload.Uploader = function(options) { settings.prevent_duplicates = settings.filters.prevent_duplicates = !!value; break; + // options that require reinitialisation + case 'container': case 'browse_button': case 'drop_element': - value = plupload.get(value); - - case 'container': + value = 'container' === option + ? plupload.get(value) + : plupload.getAll(value) + ; + case 'runtimes': case 'multi_selection': case 'flash_swf_url': @@ -1578,7 +1605,7 @@ plupload.Uploader = function(options) { up.destroy(); } // Set failed status if an error occured on a file - else if (err.file) { + else if (err.code === plupload.HTTP_ERROR) { err.file.status = plupload.FAILED; calcFile(err.file); @@ -1725,32 +1752,49 @@ plupload.Uploader = function(options) { * @method init */ init : function() { - var self = this; - - if (typeof(settings.preinit) == "function") { - settings.preinit(self); + var self = this, opt, preinitOpt, err; + + preinitOpt = self.getOption('preinit'); + if (typeof(preinitOpt) == "function") { + preinitOpt(self); } else { - plupload.each(settings.preinit, function(func, name) { + plupload.each(preinitOpt, function(func, name) { self.bind(name, func); }); } - bindEventListeners.call(this); + bindEventListeners.call(self); // Check for required options - if (!settings.browse_button || !settings.url) { - this.trigger('Error', { - code : plupload.INIT_ERROR, - message : plupload.translate('Init error.') - }); - return; + plupload.each(['container', 'browse_button', 'drop_element'], function(el) { + if (self.getOption(el) === null) { + err = { + code : plupload.INIT_ERROR, + message : plupload.translate("'%' specified, but cannot be found.") + } + return false; + } + }); + + if (err) { + return self.trigger('Error', err); } - initControls.call(this, settings, function(inited) { - if (typeof(settings.init) == "function") { - settings.init(self); + + if (!settings.browse_button && !settings.drop_element) { + return self.trigger('Error', { + code : plupload.INIT_ERROR, + message : plupload.translate("You must specify either 'browse_button' or 'drop_element'.") + }); + } + + + initControls.call(self, settings, function(inited) { + var initOpt = self.getOption('init'); + if (typeof(initOpt) == "function") { + initOpt(self); } else { - plupload.each(settings.init, function(func, name) { + plupload.each(initOpt, function(func, name) { self.bind(name, func); }); } @@ -2036,53 +2080,75 @@ plupload.Uploader = function(options) { }, /** - * Dispatches the specified event name and it's arguments to all listeners. - * - * - * @method trigger - * @param {String} name Event name to fire. - * @param {Object..} Multiple arguments to pass along to the listener functions. - */ + Dispatches the specified event name and its arguments to all listeners. - /** - * Check whether uploader has any listeners to the specified event. - * - * @method hasEventListener - * @param {String} name Event name to check for. - */ + @method trigger + @param {String} name Event name to fire. + @param {Object..} Multiple arguments to pass along to the listener functions. + */ + // override the parent method to match Plupload-like event logic + dispatchEvent: function(type) { + var list, args, result; + + type = type.toLowerCase(); + + list = this.hasEventListener(type); - /** - * Adds an event listener by name. - * - * @method bind - * @param {String} name Event name to listen for. - * @param {function} func Function to call ones the event gets fired. - * @param {Object} scope Optional scope to execute the specified function in. - */ - bind : function(name, func, scope) { - var self = this; - // adapt moxie EventTarget style to Plupload-like - plupload.Uploader.prototype.bind.call(this, name, function() { - var args = [].slice.call(arguments); - args.splice(0, 1, self); // replace event object with uploader instance - return func.apply(this, args); - }, 0, scope); + if (list) { + // sort event list by priority + list.sort(function(a, b) { return b.priority - a.priority; }); + + // first argument should be current plupload.Uploader instance + args = [].slice.call(arguments); + args.shift(); + args.unshift(this); + + for (var i = 0; i < list.length; i++) { + // Fire event, break chain if false is returned + if (list[i].fn.apply(list[i].scope, args) === false) { + return false; + } + } + } + return true; }, /** - * Removes the specified event listener. - * - * @method unbind - * @param {String} name Name of event to remove. - * @param {function} func Function to remove from listener. - */ + Check whether uploader has any listeners to the specified event. + + @method hasEventListener + @param {String} name Event name to check for. + */ + /** - * Removes all event listeners. - * - * @method unbindAll - */ + Adds an event listener by name. + + @method bind + @param {String} name Event name to listen for. + @param {function} fn Function to call ones the event gets fired. + @param {Object} [scope] Optional scope to execute the specified function in. + @param {Number} [priority=0] Priority of the event handler - handlers with higher priorities will be called first + */ + bind: function(name, fn, scope, priority) { + // adapt moxie EventTarget style to Plupload-like + plupload.Uploader.prototype.bind.call(this, name, fn, priority, scope); + }, + + /** + Removes the specified event listener. + + @method unbind + @param {String} name Name of event to remove. + @param {function} fn Function to remove from listener. + */ + + /** + Removes all event listeners. + + @method unbindAll + */ /** @@ -2301,7 +2367,7 @@ plupload.File = (function() { self.bytesPerSec = 0; /** - * Resets the progress to it's initial values. + * Resets the progress to its initial values. * * @method reset */ diff --git a/e107_web/js/plupload/plupload.full.min.js b/e107_web/js/plupload/plupload.full.min.js new file mode 100644 index 000000000..be189e30c --- /dev/null +++ b/e107_web/js/plupload/plupload.full.min.js @@ -0,0 +1,29 @@ +/** + * mOxie - multi-runtime File API & XMLHttpRequest L2 Polyfill + * v1.3.5 + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + * + * Date: 2016-05-15 + */ +!function(e,t){"use strict";function n(e,t){for(var n,i=[],r=0;r0&&n(o,function(n,o){n!==r&&(e(i[o])===e(n)&&~a(e(n),["array","object"])?t(i[o],n):i[o]=n)})}),i},n=function(t,n){var i,r,o,a;if(t)if("number"===e(t.length)){for(o=0,i=t.length;i>o;o++)if(n(t[o],o)===!1)return}else if("object"===e(t))for(r in t)if(t.hasOwnProperty(r)&&n(t[r],r)===!1)return},i=function(t){var n;if(!t||"object"!==e(t))return!0;for(n in t)return!1;return!0},r=function(t,n){function i(r){"function"===e(t[r])&&t[r](function(e){++rn;n++)if(t[n]===e)return n}return-1},s=function(t,n){var i=[];"array"!==e(t)&&(t=[t]),"array"!==e(n)&&(n=[n]);for(var r in t)-1===a(t[r],n)&&i.push(t[r]);return i.length?i:!1},u=function(e,t){var i=[];return n(e,function(e){-1!==a(e,t)&&i.push(e)}),i.length?i:null},c=function(e){var t,n=[];for(t=0;ti;i++)n+=Math.floor(65535*Math.random()).toString(32);return(t||"o_")+n+(e++).toString(32)}}(),d=function(e){return e?String.prototype.trim?String.prototype.trim.call(e):e.toString().replace(/^\s*/,"").replace(/\s*$/,""):e},h=function(e){if("string"!=typeof e)return e;var t={t:1099511627776,g:1073741824,m:1048576,k:1024},n;return e=/^([0-9\.]+)([tmgk]?)$/.exec(e.toLowerCase().replace(/[^0-9\.tmkg]/g,"")),n=e[2],e=+e[1],t.hasOwnProperty(n)&&(e*=t[n]),Math.floor(e)},f=function(t){var n=[].slice.call(arguments,1);return t.replace(/%[a-z]/g,function(){var t=n.shift();return"undefined"!==e(t)?t:""})};return{guid:l,typeOf:e,extend:t,each:n,isEmptyObj:i,inSeries:r,inParallel:o,inArray:a,arrayDiff:s,arrayIntersect:u,toArray:c,trim:d,sprintf:f,parseSizeStr:h}}),i(c,[u],function(e){function t(e,t,n){var i=0,r=0,o=0,a={dev:-6,alpha:-5,a:-5,beta:-4,b:-4,RC:-3,rc:-3,"#":-2,p:1,pl:1},s=function(e){return e=(""+e).replace(/[_\-+]/g,"."),e=e.replace(/([^.\d]+)/g,".$1.").replace(/\.{2,}/g,"."),e.length?e.split("."):[-8]},u=function(e){return e?isNaN(e)?a[e]||-7:parseInt(e,10):0};for(e=s(e),t=s(t),r=Math.max(e.length,t.length),i=0;r>i;i++)if(e[i]!=t[i]){if(e[i]=u(e[i]),t[i]=u(t[i]),e[i]t[i]){o=1;break}}if(!n)return o;switch(n){case">":case"gt":return o>0;case">=":case"ge":return o>=0;case"<=":case"le":return 0>=o;case"==":case"=":case"eq":return 0===o;case"<>":case"!=":case"ne":return 0!==o;case"":case"<":case"lt":return 0>o;default:return null}}var n=function(e){var t="",n="?",i="function",r="undefined",o="object",a="major",s="model",u="name",c="type",l="vendor",d="version",h="architecture",f="console",p="mobile",m="tablet",g={has:function(e,t){return-1!==t.toLowerCase().indexOf(e.toLowerCase())},lowerize:function(e){return e.toLowerCase()}},v={rgx:function(){for(var t,n=0,a,s,u,c,l,d,h=arguments;n0?2==c.length?typeof c[1]==i?t[c[0]]=c[1].call(this,d):t[c[0]]=c[1]:3==c.length?typeof c[1]!==i||c[1].exec&&c[1].test?t[c[0]]=d?d.replace(c[1],c[2]):e:t[c[0]]=d?c[1].call(this,d,c[2]):e:4==c.length&&(t[c[0]]=d?c[3].call(this,d.replace(c[1],c[2])):e):t[c]=d?d:e;break}if(l)break}return t},str:function(t,i){for(var r in i)if(typeof i[r]===o&&i[r].length>0){for(var a=0;a=9)},use_data_uri_of:function(e){return t.use_data_uri&&33e3>e||t.use_data_uri_over32kb()},use_fileinput:function(){if(navigator.userAgent.match(/(Android (1.0|1.1|1.5|1.6|2.0|2.1))|(Windows Phone (OS 7|8.0))|(XBLWP)|(ZuneWP)|(w(eb)?OSBrowser)|(webOS)|(Kindle\/(1.0|2.0|2.5|3.0))/))return!1;var e=document.createElement("input");return e.setAttribute("type","file"),!e.disabled}};return function(n){var i=[].slice.call(arguments);return i.shift(),"function"===e.typeOf(t[n])?t[n].apply(this,i):!!t[n]}}(),r=(new n).getResult(),o={can:i,uaParser:n,browser:r.browser.name,version:r.browser.version,os:r.os.name,osVersion:r.os.version,verComp:t,swf_url:"../flash/Moxie.swf",xap_url:"../silverlight/Moxie.xap",global_event_dispatcher:"moxie.core.EventTarget.instance.dispatchEvent"};return o.OS=o.os,o}),i(l,[u],function(e){var t={};return{addI18n:function(n){return e.extend(t,n)},translate:function(e){return t[e]||e},_:function(e){return this.translate(e)},sprintf:function(t){var n=[].slice.call(arguments,1);return t.replace(/%[a-z]/g,function(){var t=n.shift();return"undefined"!==e.typeOf(t)?t:""})}}}),i(d,[u,l],function(e,t){var n="application/msword,doc dot,application/pdf,pdf,application/pgp-signature,pgp,application/postscript,ps ai eps,application/rtf,rtf,application/vnd.ms-excel,xls xlb,application/vnd.ms-powerpoint,ppt pps pot,application/zip,zip,application/x-shockwave-flash,swf swfl,application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx,application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx,application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx,application/vnd.openxmlformats-officedocument.presentationml.template,potx,application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx,application/x-javascript,js,application/json,json,audio/mpeg,mp3 mpga mpega mp2,audio/x-wav,wav,audio/x-m4a,m4a,audio/ogg,oga ogg,audio/aiff,aiff aif,audio/flac,flac,audio/aac,aac,audio/ac3,ac3,audio/x-ms-wma,wma,image/bmp,bmp,image/gif,gif,image/jpeg,jpg jpeg jpe,image/photoshop,psd,image/png,png,image/svg+xml,svg svgz,image/tiff,tiff tif,text/plain,asc txt text diff log,text/html,htm html xhtml,text/css,css,text/csv,csv,text/rtf,rtf,video/mpeg,mpeg mpg mpe m2v,video/quicktime,qt mov,video/mp4,mp4,video/x-m4v,m4v,video/x-flv,flv,video/x-ms-wmv,wmv,video/avi,avi,video/webm,webm,video/3gpp,3gpp 3gp,video/3gpp2,3g2,video/vnd.rn-realvideo,rv,video/ogg,ogv,video/x-matroska,mkv,application/vnd.oasis.opendocument.formula-template,otf,application/octet-stream,exe",i={mimes:{},extensions:{},addMimeType:function(e){var t=e.split(/,/),n,i,r;for(n=0;n=0;o--)if(r[o].fn===i){r.splice(o,1);break}}else r=[];r.length||(delete e[this.uid][t],n.isEmptyObj(e[this.uid])&&delete e[this.uid])}},removeAllEventListeners:function(){e[this.uid]&&delete e[this.uid]},dispatchEvent:function(i){var r,o,a,s,u={},c=!0,l;if("string"!==n.typeOf(i)){if(s=i,"string"!==n.typeOf(s.type))throw new t.EventException(t.EventException.UNSPECIFIED_EVENT_TYPE_ERR);i=s.type,s.total!==l&&s.loaded!==l&&(u.total=s.total,u.loaded=s.loaded),u.async=s.async||!1}if(-1!==i.indexOf("::")?!function(e){r=e[0],i=e[1]}(i.split("::")):r=this.uid,i=i.toLowerCase(),o=e[r]&&e[r][i]){o.sort(function(e,t){return t.priority-e.priority}),a=[].slice.call(arguments),a.shift(),u.type=i,a.unshift(u);var d=[];n.each(o,function(e){a[0].target=e.scope,u.async?d.push(function(t){setTimeout(function(){t(e.fn.apply(e.scope,a)===!1)},1)}):d.push(function(t){t(e.fn.apply(e.scope,a)===!1)})}),d.length&&n.inSeries(d,function(e){c=!e})}return c},bind:function(){this.addEventListener.apply(this,arguments)},unbind:function(){this.removeEventListener.apply(this,arguments)},unbindAll:function(){this.removeAllEventListeners.apply(this,arguments)},trigger:function(){return this.dispatchEvent.apply(this,arguments)},handleEventProps:function(e){var t=this;this.bind(e.join(" "),function(e){var t="on"+e.type.toLowerCase();"function"===n.typeOf(this[t])&&this[t].apply(this,arguments)}),n.each(e,function(e){e="on"+e.toLowerCase(e),"undefined"===n.typeOf(t[e])&&(t[e]=null)})}})}return i.instance=new i,i}),i(m,[c,u,h,p],function(e,t,n,i){function r(e,i,o,s,u){var c=this,l,d=t.guid(i+"_"),h=u||"browser";e=e||{},a[d]=this,o=t.extend({access_binary:!1,access_image_binary:!1,display_media:!1,do_cors:!1,drag_and_drop:!1,filter_by_extension:!0,resize_image:!1,report_upload_progress:!1,return_response_headers:!1,return_response_type:!1,return_status_code:!0,send_custom_headers:!1,select_file:!1,select_folder:!1,select_multiple:!0,send_binary_string:!1,send_browser_cookies:!0,send_multipart:!0,slice_blob:!1,stream_upload:!1,summon_file_dialog:!1,upload_filesize:!0,use_http_method:!0},o),e.preferred_caps&&(h=r.getMode(s,e.preferred_caps,h)),l=function(){var e={};return{exec:function(t,n,i,r){return l[n]&&(e[t]||(e[t]={context:this,instance:new l[n]}),e[t].instance[i])?e[t].instance[i].apply(this,r):void 0},removeInstance:function(t){delete e[t]},removeAllInstances:function(){var n=this;t.each(e,function(e,i){"function"===t.typeOf(e.instance.destroy)&&e.instance.destroy.call(e.context),n.removeInstance(i)})}}}(),t.extend(this,{initialized:!1,uid:d,type:i,mode:r.getMode(s,e.required_caps,h),shimid:d+"_container",clients:0,options:e,can:function(e,n){var i=arguments[2]||o;if("string"===t.typeOf(e)&&"undefined"===t.typeOf(n)&&(e=r.parseCaps(e)),"object"===t.typeOf(e)){for(var a in e)if(!this.can(a,e[a],i))return!1;return!0}return"function"===t.typeOf(i[e])?i[e].call(this,n):n===i[e]},getShimContainer:function(){var e,i=n.get(this.shimid);return i||(e=this.options.container?n.get(this.options.container):document.body,i=document.createElement("div"),i.id=this.shimid,i.className="moxie-shim moxie-shim-"+this.type,t.extend(i.style,{position:"absolute",top:"0px",left:"0px",width:"1px",height:"1px",overflow:"hidden"}),e.appendChild(i),e=null),i},getShim:function(){return l},shimExec:function(e,t){var n=[].slice.call(arguments,2);return c.getShim().exec.call(this,this.uid,e,t,n)},exec:function(e,t){var n=[].slice.call(arguments,2);return c[e]&&c[e][t]?c[e][t].apply(this,n):c.shimExec.apply(this,arguments)},destroy:function(){if(c){var e=n.get(this.shimid);e&&e.parentNode.removeChild(e),l&&l.removeAllInstances(),this.unbindAll(),delete a[this.uid],this.uid=null,d=c=l=e=null}}}),this.mode&&e.required_caps&&!this.can(e.required_caps)&&(this.mode=!1)}var o={},a={};return r.order="html5,flash,silverlight,html4",r.getRuntime=function(e){return a[e]?a[e]:!1},r.addConstructor=function(e,t){t.prototype=i.instance,o[e]=t},r.getConstructor=function(e){return o[e]||null},r.getInfo=function(e){var t=r.getRuntime(e);return t?{uid:t.uid,type:t.type,mode:t.mode,can:function(){return t.can.apply(t,arguments)}}:null},r.parseCaps=function(e){var n={};return"string"!==t.typeOf(e)?e||{}:(t.each(e.split(","),function(e){n[e]=!0}),n)},r.can=function(e,t){var n,i=r.getConstructor(e),o;return i?(n=new i({required_caps:t}),o=n.mode,n.destroy(),!!o):!1},r.thatCan=function(e,t){var n=(t||r.order).split(/\s*,\s*/);for(var i in n)if(r.can(n[i],e))return n[i];return null},r.getMode=function(e,n,i){var r=null;if("undefined"===t.typeOf(i)&&(i="browser"),n&&!t.isEmptyObj(e)){if(t.each(n,function(n,i){if(e.hasOwnProperty(i)){var o=e[i](n);if("string"==typeof o&&(o=[o]),r){if(!(r=t.arrayIntersect(r,o)))return r=!1}else r=o}}),r)return-1!==t.inArray(i,r)?i:r[0];if(r===!1)return!1}return i},r.capTrue=function(){return!0},r.capFalse=function(){return!1},r.capTest=function(e){return function(){return!!e}},r}),i(g,[c,f,u,m],function(e,t,n,i){return function r(){var e;n.extend(this,{connectRuntime:function(r){function o(n){var s,u;return n.length?(s=n.shift().toLowerCase(),(u=i.getConstructor(s))?(e=new u(r),e.bind("Init",function(){e.initialized=!0,setTimeout(function(){e.clients++,a.trigger("RuntimeInit",e)},1)}),e.bind("Error",function(){e.destroy(),o(n)}),e.mode?void e.init():void e.trigger("Error")):void o(n)):(a.trigger("RuntimeError",new t.RuntimeError(t.RuntimeError.NOT_INIT_ERR)),void(e=null))}var a=this,s;if("string"===n.typeOf(r)?s=r:"string"===n.typeOf(r.ruid)&&(s=r.ruid),s){if(e=i.getRuntime(s))return e.clients++,e;throw new t.RuntimeError(t.RuntimeError.NOT_INIT_ERR)}o((r.runtime_order||i.order).split(/\s*,\s*/))},disconnectRuntime:function(){e&&--e.clients<=0&&e.destroy(),e=null},getRuntime:function(){return e&&e.uid?e:e=null},exec:function(){return e?e.exec.apply(this,arguments):null}})}}),i(v,[u,c,d,h,f,p,l,m,g],function(e,t,n,i,r,o,a,s,u){function c(t){var o=this,c,d,h;if(-1!==e.inArray(e.typeOf(t),["string","node"])&&(t={browse_button:t}),d=i.get(t.browse_button),!d)throw new r.DOMException(r.DOMException.NOT_FOUND_ERR);h={accept:[{title:a.translate("All Files"),extensions:"*"}],name:"file",multiple:!1,required_caps:!1,container:d.parentNode||document.body},t=e.extend({},h,t),"string"==typeof t.required_caps&&(t.required_caps=s.parseCaps(t.required_caps)),"string"==typeof t.accept&&(t.accept=n.mimes2extList(t.accept)),c=i.get(t.container),c||(c=document.body),"static"===i.getStyle(c,"position")&&(c.style.position="relative"),c=d=null,u.call(o),e.extend(o,{uid:e.guid("uid_"),ruid:null,shimid:null,files:null,init:function(){o.bind("RuntimeInit",function(n,r){o.ruid=r.uid,o.shimid=r.shimid,o.bind("Ready",function(){o.trigger("Refresh")},999),o.bind("Refresh",function(){var n,o,a,s;a=i.get(t.browse_button),s=i.get(r.shimid),a&&(n=i.getPos(a,i.get(t.container)),o=i.getSize(a),s&&e.extend(s.style,{top:n.y+"px",left:n.x+"px",width:o.w+"px",height:o.h+"px"})),s=a=null}),r.exec.call(o,"FileInput","init",t)}),o.connectRuntime(e.extend({},t,{required_caps:{select_file:!0}}))},disable:function(t){var n=this.getRuntime();n&&n.exec.call(this,"FileInput","disable","undefined"===e.typeOf(t)?!0:t)},refresh:function(){o.trigger("Refresh")},destroy:function(){var t=this.getRuntime();t&&(t.exec.call(this,"FileInput","destroy"),this.disconnectRuntime()),"array"===e.typeOf(this.files)&&e.each(this.files,function(e){e.destroy()}),this.files=null,this.unbindAll()}}),this.handleEventProps(l)}var l=["ready","change","cancel","mouseenter","mouseleave","mousedown","mouseup"];return c.prototype=o.instance,c}),i(w,[],function(){var e=function(e){return unescape(encodeURIComponent(e))},t=function(e){return decodeURIComponent(escape(e))},n=function(e,n){if("function"==typeof window.atob)return n?t(window.atob(e)):window.atob(e);var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",r,o,a,s,u,c,l,d,h=0,f=0,p="",m=[];if(!e)return e;e+="";do s=i.indexOf(e.charAt(h++)),u=i.indexOf(e.charAt(h++)),c=i.indexOf(e.charAt(h++)),l=i.indexOf(e.charAt(h++)),d=s<<18|u<<12|c<<6|l,r=d>>16&255,o=d>>8&255,a=255&d,64==c?m[f++]=String.fromCharCode(r):64==l?m[f++]=String.fromCharCode(r,o):m[f++]=String.fromCharCode(r,o,a);while(h>18&63,u=d>>12&63,c=d>>6&63,l=63&d,m[f++]=i.charAt(s)+i.charAt(u)+i.charAt(c)+i.charAt(l);while(ha;a++)o+=String.fromCharCode(r[a]);return o}}t.call(this),e.extend(this,{uid:e.guid("uid_"),readAsBinaryString:function(e){return i.call(this,"readAsBinaryString",e)},readAsDataURL:function(e){return i.call(this,"readAsDataURL",e)},readAsText:function(e){return i.call(this,"readAsText",e)}})}}),i(I,[f,u,y],function(e,t,n){function i(){var e,i=[];t.extend(this,{append:function(r,o){var a=this,s=t.typeOf(o);o instanceof n?e={name:r,value:o}:"array"===s?(r+="[]",t.each(o,function(e){a.append(r,e)})):"object"===s?t.each(o,function(e,t){a.append(r+"["+t+"]",e)}):"null"===s||"undefined"===s||"number"===s&&isNaN(o)?a.append(r,"false"):i.push({name:r,value:o.toString()})},hasBlob:function(){return!!this.getBlob()},getBlob:function(){return e&&e.value||null},getBlobName:function(){return e&&e.name||null},each:function(n){t.each(i,function(e){n(e.value,e.name)}),e&&n(e.value,e.name)},destroy:function(){e=null,i=[]}})}return i}),i(T,[u,f,p,w,x,m,R,y,A,I,c,d],function(e,t,n,i,r,o,a,s,u,c,l,d){function h(){this.uid=e.guid("uid_")}function f(){function n(e,t){return w.hasOwnProperty(e)?1===arguments.length?l.can("define_property")?w[e]:v[e]:void(l.can("define_property")?w[e]=t:v[e]=t):void 0}function u(t){function i(){B&&(B.destroy(),B=null),s.dispatchEvent("loadend"),s=null}function r(r){B.bind("LoadStart",function(e){n("readyState",f.LOADING),s.dispatchEvent("readystatechange"),s.dispatchEvent(e),O&&s.upload.dispatchEvent(e)}),B.bind("Progress",function(e){n("readyState")!==f.LOADING&&(n("readyState",f.LOADING),s.dispatchEvent("readystatechange")),s.dispatchEvent(e)}),B.bind("UploadProgress",function(e){O&&s.upload.dispatchEvent({type:"progress",lengthComputable:!1,total:e.total,loaded:e.loaded})}),B.bind("Load",function(t){n("readyState",f.DONE),n("status",Number(r.exec.call(B,"XMLHttpRequest","getStatus")||0)),n("statusText",p[n("status")]||""),n("response",r.exec.call(B,"XMLHttpRequest","getResponse",n("responseType"))),~e.inArray(n("responseType"),["text",""])?n("responseText",n("response")):"document"===n("responseType")&&n("responseXML",n("response")),k=r.exec.call(B,"XMLHttpRequest","getAllResponseHeaders"),s.dispatchEvent("readystatechange"),n("status")>0?(O&&s.upload.dispatchEvent(t),s.dispatchEvent(t)):(N=!0,s.dispatchEvent("error")),i()}),B.bind("Abort",function(e){s.dispatchEvent(e),i()}),B.bind("Error",function(e){N=!0,n("readyState",f.DONE),s.dispatchEvent("readystatechange"),D=!0,s.dispatchEvent(e),i()}),r.exec.call(B,"XMLHttpRequest","send",{url:E,method:_,async:y,user:x,password:R,headers:b,mimeType:I,encoding:A,responseType:s.responseType,withCredentials:s.withCredentials,options:H},t)}var s=this;C=(new Date).getTime(),B=new a,"string"==typeof H.required_caps&&(H.required_caps=o.parseCaps(H.required_caps)),H.required_caps=e.extend({},H.required_caps,{return_response_type:s.responseType}),t instanceof c&&(H.required_caps.send_multipart=!0),e.isEmptyObj(b)||(H.required_caps.send_custom_headers=!0),L||(H.required_caps.do_cors=!0),H.ruid?r(B.connectRuntime(H)):(B.bind("RuntimeInit",function(e,t){r(t)}),B.bind("RuntimeError",function(e,t){s.dispatchEvent("RuntimeError",t)}),B.connectRuntime(H))}function g(){n("responseText",""),n("responseXML",null),n("response",null),n("status",0),n("statusText",""),C=M=null}var v=this,w={timeout:0,readyState:f.UNSENT,withCredentials:!1,status:0,statusText:"",responseType:"",responseXML:null,responseText:null,response:null},y=!0,E,_,b={},x,R,A=null,I=null,T=!1,S=!1,O=!1,D=!1,N=!1,L=!1,C,M,F=null,P=null,H={},B,k="",U;e.extend(this,w,{uid:e.guid("uid_"),upload:new h,open:function(o,a,s,u,c){var l;if(!o||!a)throw new t.DOMException(t.DOMException.SYNTAX_ERR);if(/[\u0100-\uffff]/.test(o)||i.utf8_encode(o)!==o)throw new t.DOMException(t.DOMException.SYNTAX_ERR);if(~e.inArray(o.toUpperCase(),["CONNECT","DELETE","GET","HEAD","OPTIONS","POST","PUT","TRACE","TRACK"])&&(_=o.toUpperCase()),~e.inArray(_,["CONNECT","TRACE","TRACK"]))throw new t.DOMException(t.DOMException.SECURITY_ERR);if(a=i.utf8_encode(a),l=r.parseUrl(a),L=r.hasSameOrigin(l),E=r.resolveUrl(a),(u||c)&&!L)throw new t.DOMException(t.DOMException.INVALID_ACCESS_ERR);if(x=u||l.user,R=c||l.pass,y=s||!0,y===!1&&(n("timeout")||n("withCredentials")||""!==n("responseType")))throw new t.DOMException(t.DOMException.INVALID_ACCESS_ERR);T=!y,S=!1,b={},g.call(this),n("readyState",f.OPENED),this.dispatchEvent("readystatechange")},setRequestHeader:function(r,o){var a=["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","cookie","cookie2","content-transfer-encoding","date","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","user-agent","via"];if(n("readyState")!==f.OPENED||S)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(/[\u0100-\uffff]/.test(r)||i.utf8_encode(r)!==r)throw new t.DOMException(t.DOMException.SYNTAX_ERR);return r=e.trim(r).toLowerCase(),~e.inArray(r,a)||/^(proxy\-|sec\-)/.test(r)?!1:(b[r]?b[r]+=", "+o:b[r]=o,!0)},getAllResponseHeaders:function(){return k||""},getResponseHeader:function(t){return t=t.toLowerCase(),N||~e.inArray(t,["set-cookie","set-cookie2"])?null:k&&""!==k&&(U||(U={},e.each(k.split(/\r\n/),function(t){var n=t.split(/:\s+/);2===n.length&&(n[0]=e.trim(n[0]),U[n[0].toLowerCase()]={header:n[0],value:e.trim(n[1])})})),U.hasOwnProperty(t))?U[t].header+": "+U[t].value:null},overrideMimeType:function(i){var r,o;if(~e.inArray(n("readyState"),[f.LOADING,f.DONE]))throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(i=e.trim(i.toLowerCase()),/;/.test(i)&&(r=i.match(/^([^;]+)(?:;\scharset\=)?(.*)$/))&&(i=r[1],r[2]&&(o=r[2])),!d.mimes[i])throw new t.DOMException(t.DOMException.SYNTAX_ERR);F=i,P=o},send:function(n,r){if(H="string"===e.typeOf(r)?{ruid:r}:r?r:{},this.readyState!==f.OPENED||S)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);if(n instanceof s)H.ruid=n.ruid,I=n.type||"application/octet-stream";else if(n instanceof c){if(n.hasBlob()){var o=n.getBlob();H.ruid=o.ruid,I=o.type||"application/octet-stream"}}else"string"==typeof n&&(A="UTF-8",I="text/plain;charset=UTF-8",n=i.utf8_encode(n));this.withCredentials||(this.withCredentials=H.required_caps&&H.required_caps.send_browser_cookies&&!L),O=!T&&this.upload.hasEventListener(),N=!1,D=!n,T||(S=!0),u.call(this,n)},abort:function(){if(N=!0,T=!1,~e.inArray(n("readyState"),[f.UNSENT,f.OPENED,f.DONE]))n("readyState",f.UNSENT);else{if(n("readyState",f.DONE),S=!1,!B)throw new t.DOMException(t.DOMException.INVALID_STATE_ERR);B.getRuntime().exec.call(B,"XMLHttpRequest","abort",D),D=!0}},destroy:function(){B&&("function"===e.typeOf(B.destroy)&&B.destroy(),B=null),this.unbindAll(),this.upload&&(this.upload.unbindAll(),this.upload=null)}}),this.handleEventProps(m.concat(["readystatechange"])),this.upload.handleEventProps(m)}var p={100:"Continue",101:"Switching Protocols",102:"Processing",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",207:"Multi-Status",226:"IM Used",300:"Multiple Choices",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",306:"Reserved",307:"Temporary Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Request Entity Too Large",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Requested Range Not Satisfiable",417:"Expectation Failed",422:"Unprocessable Entity",423:"Locked",424:"Failed Dependency",426:"Upgrade Required",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",506:"Variant Also Negotiates",507:"Insufficient Storage",510:"Not Extended"};h.prototype=n.instance;var m=["loadstart","progress","abort","error","load","timeout","loadend"],g=1,v=2;return f.UNSENT=0,f.OPENED=1,f.HEADERS_RECEIVED=2,f.LOADING=3,f.DONE=4,f.prototype=n.instance,f}),i(S,[u,w,g,p],function(e,t,n,i){function r(){function i(){l=d=0,c=this.result=null}function o(t,n){var i=this;u=n,i.bind("TransportingProgress",function(t){d=t.loaded,l>d&&-1===e.inArray(i.state,[r.IDLE,r.DONE])&&a.call(i)},999),i.bind("TransportingComplete",function(){d=l,i.state=r.DONE,c=null,i.result=u.exec.call(i,"Transporter","getAsBlob",t||"")},999),i.state=r.BUSY,i.trigger("TransportingStarted"),a.call(i)}function a(){var e=this,n,i=l-d;h>i&&(h=i),n=t.btoa(c.substr(d,h)),u.exec.call(e,"Transporter","receive",n,l)}var s,u,c,l,d,h;n.call(this),e.extend(this,{uid:e.guid("uid_"),state:r.IDLE,result:null,transport:function(t,n,r){var a=this;if(r=e.extend({chunk_size:204798},r),(s=r.chunk_size%3)&&(r.chunk_size+=3-s),h=r.chunk_size,i.call(this),c=t,l=t.length,"string"===e.typeOf(r)||r.ruid)o.call(a,n,this.connectRuntime(r));else{var u=function(e,t){a.unbind("RuntimeInit",u),o.call(a,n,t)};this.bind("RuntimeInit",u),this.connectRuntime(r)}},abort:function(){var e=this;e.state=r.IDLE,u&&(u.exec.call(e,"Transporter","clear"),e.trigger("TransportingAborted")),i.call(e)},destroy:function(){this.unbindAll(),u=null,this.disconnectRuntime(),i.call(this)}})}return r.IDLE=0,r.BUSY=1,r.DONE=2,r.prototype=i.instance,r}),i(O,[u,h,f,A,T,m,g,S,c,p,y,E,w],function(e,t,n,i,r,o,a,s,u,c,l,d,h){function f(){function i(e){e||(e=this.exec("Image","getInfo")),this.size=e.size,this.width=e.width,this.height=e.height,this.type=e.type,this.meta=e.meta,""===this.name&&(this.name=e.name)}function c(t){var i=e.typeOf(t);try{if(t instanceof f){if(!t.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);m.apply(this,arguments)}else if(t instanceof l){if(!~e.inArray(t.type,["image/jpeg","image/png"]))throw new n.ImageError(n.ImageError.WRONG_FORMAT);g.apply(this,arguments)}else if(-1!==e.inArray(i,["blob","file"]))c.call(this,new d(null,t),arguments[1]);else if("string"===i)"data:"===t.substr(0,5)?c.call(this,new l(null,{data:t}),arguments[1]):v.apply(this,arguments);else{if("node"!==i||"img"!==t.nodeName.toLowerCase())throw new n.DOMException(n.DOMException.TYPE_MISMATCH_ERR);c.call(this,t.src,arguments[1])}}catch(r){this.trigger("error",r.code)}}function m(t,n){var i=this.connectRuntime(t.ruid);this.ruid=i.uid,i.exec.call(this,"Image","loadFromImage",t,"undefined"===e.typeOf(n)?!0:n)}function g(t,n){function i(e){r.ruid=e.uid,e.exec.call(r,"Image","loadFromBlob",t)}var r=this;r.name=t.name||"",t.isDetached()?(this.bind("RuntimeInit",function(e,t){i(t)}),n&&"string"==typeof n.required_caps&&(n.required_caps=o.parseCaps(n.required_caps)),this.connectRuntime(e.extend({required_caps:{access_image_binary:!0,resize_image:!0}},n))):i(this.connectRuntime(t.ruid))}function v(e,t){var n=this,i;i=new r,i.open("get",e),i.responseType="blob",i.onprogress=function(e){n.trigger(e)},i.onload=function(){g.call(n,i.response,!0)},i.onerror=function(e){n.trigger(e)},i.onloadend=function(){i.destroy()},i.bind("RuntimeError",function(e,t){n.trigger("RuntimeError",t)}),i.send(null,t)}a.call(this),e.extend(this,{uid:e.guid("uid_"),ruid:null,name:"",size:0,width:0,height:0,type:"",meta:{},clone:function(){this.load.apply(this,arguments)},load:function(){c.apply(this,arguments)},downsize:function(t){var i={width:this.width,height:this.height,type:this.type||"image/jpeg",quality:90,crop:!1,preserveHeaders:!0,resample:!1};t="object"==typeof t?e.extend(i,t):e.extend(i,{width:arguments[0],height:arguments[1],crop:arguments[2],preserveHeaders:arguments[3]});try{if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);if(this.width>f.MAX_RESIZE_WIDTH||this.height>f.MAX_RESIZE_HEIGHT)throw new n.ImageError(n.ImageError.MAX_RESOLUTION_ERR);this.exec("Image","downsize",t.width,t.height,t.crop,t.preserveHeaders)}catch(r){this.trigger("error",r.code)}},crop:function(e,t,n){this.downsize(e,t,!0,n)},getAsCanvas:function(){if(!u.can("create_canvas"))throw new n.RuntimeError(n.RuntimeError.NOT_SUPPORTED_ERR);var e=this.connectRuntime(this.ruid);return e.exec.call(this,"Image","getAsCanvas")},getAsBlob:function(e,t){if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);return this.exec("Image","getAsBlob",e||"image/jpeg",t||90)},getAsDataURL:function(e,t){if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);return this.exec("Image","getAsDataURL",e||"image/jpeg",t||90)},getAsBinaryString:function(e,t){var n=this.getAsDataURL(e,t);return h.atob(n.substring(n.indexOf("base64,")+7))},embed:function(i,r){function o(t,r){var o=this;if(u.can("create_canvas")){var l=o.getAsCanvas();if(l)return i.appendChild(l),l=null,o.destroy(),void a.trigger("embedded")}var d=o.getAsDataURL(t,r);if(!d)throw new n.ImageError(n.ImageError.WRONG_FORMAT);if(u.can("use_data_uri_of",d.length))i.innerHTML='',o.destroy(),a.trigger("embedded");else{var f=new s;f.bind("TransportingComplete",function(){c=a.connectRuntime(this.result.ruid),a.bind("Embedded",function(){e.extend(c.getShimContainer().style,{top:"0px",left:"0px",width:o.width+"px",height:o.height+"px"}),c=null},999),c.exec.call(a,"ImageView","display",this.result.uid,width,height),o.destroy()}),f.transport(h.atob(d.substring(d.indexOf("base64,")+7)),t,{required_caps:{display_media:!0},runtime_order:"flash,silverlight",container:i})}}var a=this,c;r=e.extend({width:this.width,height:this.height,type:this.type||"image/jpeg",quality:90},r||{});try{if(!(i=t.get(i)))throw new n.DOMException(n.DOMException.INVALID_NODE_TYPE_ERR);if(!this.size)throw new n.DOMException(n.DOMException.INVALID_STATE_ERR);this.width>f.MAX_RESIZE_WIDTH||this.height>f.MAX_RESIZE_HEIGHT;var l=new f;return l.bind("Resize",function(){o.call(this,r.type,r.quality)}),l.bind("Load",function(){l.downsize(r)}),this.meta.thumb&&this.meta.thumb.width>=r.width&&this.meta.thumb.height>=r.height?l.load(this.meta.thumb.data):l.clone(this,!1),l}catch(d){this.trigger("error",d.code)}},destroy:function(){this.ruid&&(this.getRuntime().exec.call(this,"Image","destroy"),this.disconnectRuntime()),this.unbindAll()}}),this.handleEventProps(p),this.bind("Load Resize",function(){i.call(this)},999)}var p=["progress","load","error","resize","embedded"];return f.MAX_RESIZE_WIDTH=8192,f.MAX_RESIZE_HEIGHT=8192,f.prototype=c.instance,f}),i(D,[u,f,m,c],function(e,t,n,i){function r(t){var r=this,s=n.capTest,u=n.capTrue,c=e.extend({access_binary:s(window.FileReader||window.File&&window.File.getAsDataURL),access_image_binary:function(){return r.can("access_binary")&&!!a.Image},display_media:s(i.can("create_canvas")||i.can("use_data_uri_over32kb")),do_cors:s(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest),drag_and_drop:s(function(){var e=document.createElement("div");return("draggable"in e||"ondragstart"in e&&"ondrop"in e)&&("IE"!==i.browser||i.verComp(i.version,9,">"))}()),filter_by_extension:s(function(){return"Chrome"===i.browser&&i.verComp(i.version,28,">=")||"IE"===i.browser&&i.verComp(i.version,10,">=")||"Safari"===i.browser&&i.verComp(i.version,7,">=")}()),return_response_headers:u,return_response_type:function(e){return"json"===e&&window.JSON?!0:i.can("return_response_type",e)},return_status_code:u,report_upload_progress:s(window.XMLHttpRequest&&(new XMLHttpRequest).upload),resize_image:function(){return r.can("access_binary")&&i.can("create_canvas")},select_file:function(){return i.can("use_fileinput")&&window.File},select_folder:function(){return r.can("select_file")&&"Chrome"===i.browser&&i.verComp(i.version,21,">=")},select_multiple:function(){return r.can("select_file")&&!("Safari"===i.browser&&"Windows"===i.os)&&!("iOS"===i.os&&i.verComp(i.osVersion,"7.0.0",">")&&i.verComp(i.osVersion,"8.0.0","<"))},send_binary_string:s(window.XMLHttpRequest&&((new XMLHttpRequest).sendAsBinary||window.Uint8Array&&window.ArrayBuffer)),send_custom_headers:s(window.XMLHttpRequest),send_multipart:function(){return!!(window.XMLHttpRequest&&(new XMLHttpRequest).upload&&window.FormData)||r.can("send_binary_string")},slice_blob:s(window.File&&(File.prototype.mozSlice||File.prototype.webkitSlice||File.prototype.slice)),stream_upload:function(){return r.can("slice_blob")&&r.can("send_multipart")},summon_file_dialog:function(){return r.can("select_file")&&("Firefox"===i.browser&&i.verComp(i.version,4,">=")||"Opera"===i.browser&&i.verComp(i.version,12,">=")||"IE"===i.browser&&i.verComp(i.version,10,">=")||!!~e.inArray(i.browser,["Chrome","Safari"]))},upload_filesize:u},arguments[2]);n.call(this,t,arguments[1]||o,c),e.extend(this,{init:function(){this.trigger("Init")},destroy:function(e){return function(){e.call(r),e=r=null}}(this.destroy)}),e.extend(this.getShim(),a)}var o="html5",a={};return n.addConstructor(o,r),a}),i(N,[u],function(e){function t(){this.returnValue=!1}function n(){this.cancelBubble=!0}var i={},r="moxie_"+e.guid(),o=function(o,a,s,u){var c,l;a=a.toLowerCase(),o.addEventListener?(c=s,o.addEventListener(a,c,!1)):o.attachEvent&&(c=function(){var e=window.event;e.target||(e.target=e.srcElement),e.preventDefault=t,e.stopPropagation=n,s(e)},o.attachEvent("on"+a,c)),o[r]||(o[r]=e.guid()),i.hasOwnProperty(o[r])||(i[o[r]]={}),l=i[o[r]],l.hasOwnProperty(a)||(l[a]=[]),l[a].push({func:c,orig:s,key:u})},a=function(t,n,o){var a,s;if(n=n.toLowerCase(),t[r]&&i[t[r]]&&i[t[r]][n]){a=i[t[r]][n];for(var u=a.length-1;u>=0&&(a[u].orig!==o&&a[u].key!==o||(t.removeEventListener?t.removeEventListener(n,a[u].func,!1):t.detachEvent&&t.detachEvent("on"+n,a[u].func),a[u].orig=null,a[u].func=null,a.splice(u,1),o===s));u--);if(a.length||delete i[t[r]][n],e.isEmptyObj(i[t[r]])){delete i[t[r]];try{delete t[r]}catch(c){t[r]=s}}}},s=function(t,n){t&&t[r]&&e.each(i[t[r]],function(e,i){a(t,i,n)})};return{addEvent:o,removeEvent:a,removeAllEvents:s}}),i(L,[D,E,u,h,N,d,c],function(e,t,n,i,r,o,a){function s(){var e;n.extend(this,{init:function(s){var u=this,c=u.getRuntime(),l,d,h,f,p,m;e=s,h=e.accept.mimes||o.extList2mimes(e.accept,c.can("filter_by_extension")),d=c.getShimContainer(),d.innerHTML='",l=i.get(c.uid),n.extend(l.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),f=i.get(e.browse_button),c.can("summon_file_dialog")&&("static"===i.getStyle(f,"position")&&(f.style.position="relative"),p=parseInt(i.getStyle(f,"z-index"),10)||1,f.style.zIndex=p,d.style.zIndex=p-1,r.addEvent(f,"click",function(e){var t=i.get(c.uid);t&&!t.disabled&&t.click(),e.preventDefault()},u.uid)),m=c.can("summon_file_dialog")?f:d,r.addEvent(m,"mouseover",function(){u.trigger("mouseenter")},u.uid),r.addEvent(m,"mouseout",function(){u.trigger("mouseleave")},u.uid),r.addEvent(m,"mousedown",function(){u.trigger("mousedown")},u.uid),r.addEvent(i.get(e.container),"mouseup",function(){u.trigger("mouseup")},u.uid),l.onchange=function g(i){if(u.files=[],n.each(this.files,function(n){var i="";return e.directory&&"."==n.name?!0:(n.webkitRelativePath&&(i="/"+n.webkitRelativePath.replace(/^\//,"")),n=new t(c.uid,n),n.relativePath=i,void u.files.push(n))}),"IE"!==a.browser&&"IEMobile"!==a.browser)this.value="";else{var r=this.cloneNode(!0);this.parentNode.replaceChild(r,this),r.onchange=g}u.files.length&&u.trigger("change")},u.trigger({type:"ready",async:!0}),d=null},disable:function(e){var t=this.getRuntime(),n;(n=i.get(t.uid))&&(n.disabled=!!e)},destroy:function(){var t=this.getRuntime(),n=t.getShim(),o=t.getShimContainer();r.removeAllEvents(o,this.uid),r.removeAllEvents(e&&i.get(e.container),this.uid),r.removeAllEvents(e&&i.get(e.browse_button),this.uid),o&&(o.innerHTML=""),n.removeInstance(this.uid),e=o=n=null}})}return e.FileInput=s}),i(C,[D,y],function(e,t){function n(){function e(e,t,n){var i;if(!window.File.prototype.slice)return(i=window.File.prototype.webkitSlice||window.File.prototype.mozSlice)?i.call(e,t,n):null;try{return e.slice(),e.slice(t,n)}catch(r){return e.slice(t,n-t)}}this.slice=function(){return new t(this.getRuntime().uid,e.apply(this,arguments))}}return e.Blob=n}),i(M,[D,E,u,h,N,d],function(e,t,n,i,r,o){function a(){function e(e){if(!e.dataTransfer||!e.dataTransfer.types)return!1;var t=n.toArray(e.dataTransfer.types||[]);return-1!==n.inArray("Files",t)||-1!==n.inArray("public.file-url",t)||-1!==n.inArray("application/x-moz-file",t)}function a(e,n){if(u(e)){var i=new t(g,e);i.relativePath=n||"",f.push(i)}}function s(e){for(var t=[],i=0;i=")&&u.verComp(u.version,7,"<"),h="Android Browser"===u.browser,m=!1;if(p=n.url.replace(/^.+?\/([\w\-\.]+)$/,"$1").toLowerCase(),f=c(),f.open(n.method,n.url,n.async,n.user,n.password),r instanceof o)r.isDetached()&&(m=!0),r=r.getSource();else if(r instanceof a){if(r.hasBlob())if(r.getBlob().isDetached())r=d.call(s,r),m=!0;else if((l||h)&&"blob"===t.typeOf(r.getBlob().getSource())&&window.FileReader)return void e.call(s,n,r);if(r instanceof a){var g=new window.FormData;r.each(function(e,t){e instanceof o?g.append(t,e.getSource()):g.append(t,e)}),r=g}}f.upload?(n.withCredentials&&(f.withCredentials=!0),f.addEventListener("load",function(e){s.trigger(e)}),f.addEventListener("error",function(e){s.trigger(e)}),f.addEventListener("progress",function(e){s.trigger(e)}),f.upload.addEventListener("progress",function(e){s.trigger({type:"UploadProgress",loaded:e.loaded,total:e.total})})):f.onreadystatechange=function v(){switch(f.readyState){case 1:break;case 2:break;case 3:var e,t;try{i.hasSameOrigin(n.url)&&(e=f.getResponseHeader("Content-Length")||0),f.responseText&&(t=f.responseText.length)}catch(r){e=t=0}s.trigger({type:"progress",lengthComputable:!!e,total:parseInt(e,10),loaded:t});break;case 4:f.onreadystatechange=function(){},0===f.status?s.trigger("error"):s.trigger("load")}},t.isEmptyObj(n.headers)||t.each(n.headers,function(e,t){f.setRequestHeader(t,e)}),""!==n.responseType&&"responseType"in f&&("json"!==n.responseType||u.can("return_response_type","json")?f.responseType=n.responseType:f.responseType="text"),m?f.sendAsBinary?f.sendAsBinary(r):!function(){for(var e=new Uint8Array(r.length),t=0;t0&&o.set(new Uint8Array(t.slice(0,e)),0),o.set(new Uint8Array(r),e),o.set(new Uint8Array(t.slice(e+i)),e+r.byteLength),this.clear(),t=o.buffer,n=new DataView(t);break}default:return t}},length:function(){return t?t.byteLength:0},clear:function(){n=t=null}})}function i(t){function n(e,n,i){i=3===arguments.length?i:t.length-n-1,t=t.substr(0,n)+e+t.substr(i+n)}e.extend(this,{readByteAt:function(e){return t.charCodeAt(e)},writeByteAt:function(e,t){n(String.fromCharCode(t),e,1)},SEGMENT:function(e,i,r){switch(arguments.length){case 1:return t.substr(e);case 2:return t.substr(e,i);case 3:n(null!==r?r:"",e,i);break;default:return t}},length:function(){return t?t.length:0},clear:function(){t=null}})}return e.extend(t.prototype,{littleEndian:!1,read:function(e,t){var n,i,r;if(e+t>this.length())throw new Error("You are trying to read outside the source boundaries.");for(i=this.littleEndian?0:-8*(t-1),r=0,n=0;t>r;r++)n|=this.readByteAt(e+r)<this.length())throw new Error("You are trying to write outside the source boundaries.");for(i=this.littleEndian?0:-8*(n-1),r=0;n>r;r++)this.writeByteAt(e+r,t>>Math.abs(i+8*r)&255)},BYTE:function(e){return this.read(e,1)},SHORT:function(e){return this.read(e,2)},LONG:function(e){return this.read(e,4)},SLONG:function(e){var t=this.read(e,4);return t>2147483647?t-4294967296:t},CHAR:function(e){return String.fromCharCode(this.read(e,1))},STRING:function(e,t){return this.asArray("CHAR",e,t).join("")},asArray:function(e,t,n){for(var i=[],r=0;n>r;r++)i[r]=this[e](t+r);return i}}),t}),i(B,[H,f],function(e,t){return function n(i){var r=[],o,a,s,u=0;if(o=new e(i),65496!==o.SHORT(0))throw o.clear(),new t.ImageError(t.ImageError.WRONG_FORMAT);for(a=2;a<=o.length();)if(s=o.SHORT(a),s>=65488&&65495>=s)a+=2;else{if(65498===s||65497===s)break;u=o.SHORT(a+2)+2,s>=65505&&65519>=s&&r.push({hex:s,name:"APP"+(15&s),start:a,length:u,segment:o.SEGMENT(a,u)}),a+=u}return o.clear(),{headers:r,restore:function(t){var n,i,o;for(o=new e(t),a=65504==o.SHORT(2)?4+o.SHORT(4):2,i=0,n=r.length;n>i;i++)o.SEGMENT(a,0,r[i].segment),a+=r[i].length;return t=o.SEGMENT(),o.clear(),t},strip:function(t){var i,r,o,a;for(o=new n(t),r=o.headers,o.purge(),i=new e(t),a=r.length;a--;)i.SEGMENT(r[a].start,r[a].length,"");return t=i.SEGMENT(),i.clear(),t},get:function(e){for(var t=[],n=0,i=r.length;i>n;n++)r[n].name===e.toUpperCase()&&t.push(r[n].segment); +return t},set:function(e,t){var n=[],i,o,a;for("string"==typeof t?n.push(t):n=t,i=o=0,a=r.length;a>i&&(r[i].name===e.toUpperCase()&&(r[i].segment=n[o],r[i].length=n[o].length,o++),!(o>=n.length));i++);},purge:function(){this.headers=r=[]}}}}),i(k,[u,H,f],function(e,n,i){function r(o){function a(n,r){var o=this,a,s,u,c,h,f,p,m,g=[],v={},w={1:"BYTE",7:"UNDEFINED",2:"ASCII",3:"SHORT",4:"LONG",5:"RATIONAL",9:"SLONG",10:"SRATIONAL"},y={BYTE:1,UNDEFINED:1,ASCII:1,SHORT:2,LONG:4,RATIONAL:8,SLONG:4,SRATIONAL:8};for(a=o.SHORT(n),s=0;a>s;s++)if(g=[],p=n+2+12*s,u=r[o.SHORT(p)],u!==t){if(c=w[o.SHORT(p+=2)],h=o.LONG(p+=2),f=y[c],!f)throw new i.ImageError(i.ImageError.INVALID_META_ERR);if(p+=4,f*h>4&&(p=o.LONG(p)+d.tiffHeader),p+f*h>=this.length())throw new i.ImageError(i.ImageError.INVALID_META_ERR);"ASCII"!==c?(g=o.asArray(c,p,h),m=1==h?g[0]:g,l.hasOwnProperty(u)&&"object"!=typeof m?v[u]=l[u][m]:v[u]=m):v[u]=e.trim(o.STRING(p,h).replace(/\0$/,""))}return v}function s(e,t,n){var i,r,o,a=0;if("string"==typeof t){var s=c[e.toLowerCase()];for(var u in s)if(s[u]===t){t=u;break}}i=d[e.toLowerCase()+"IFD"],r=this.SHORT(i);for(var l=0;r>l;l++)if(o=i+12*l+2,this.SHORT(o)==t){a=o+8;break}if(!a)return!1;try{this.write(a,n,4)}catch(h){return!1}return!0}var u,c,l,d,h,f;if(n.call(this,o),c={tiff:{274:"Orientation",270:"ImageDescription",271:"Make",272:"Model",305:"Software",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer"},exif:{36864:"ExifVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",36867:"DateTimeOriginal",33434:"ExposureTime",33437:"FNumber",34855:"ISOSpeedRatings",37377:"ShutterSpeedValue",37378:"ApertureValue",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37386:"FocalLength",41986:"ExposureMode",41987:"WhiteBalance",41990:"SceneCaptureType",41988:"DigitalZoomRatio",41992:"Contrast",41993:"Saturation",41994:"Sharpness"},gps:{0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude"},thumb:{513:"JPEGInterchangeFormat",514:"JPEGInterchangeFormatLength"}},l={ColorSpace:{1:"sRGB",0:"Uncalibrated"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{1:"Daylight",2:"Fliorescent",3:"Tungsten",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 -5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire",1:"Flash fired",5:"Strobe return light not detected",7:"Strobe return light detected",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},ExposureMode:{0:"Auto exposure",1:"Manual exposure",2:"Auto bracket"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},GPSLatitudeRef:{N:"North latitude",S:"South latitude"},GPSLongitudeRef:{E:"East longitude",W:"West longitude"}},d={tiffHeader:10},h=d.tiffHeader,u={clear:this.clear},e.extend(this,{read:function(){try{return r.prototype.read.apply(this,arguments)}catch(e){throw new i.ImageError(i.ImageError.INVALID_META_ERR)}},write:function(){try{return r.prototype.write.apply(this,arguments)}catch(e){throw new i.ImageError(i.ImageError.INVALID_META_ERR)}},UNDEFINED:function(){return this.BYTE.apply(this,arguments)},RATIONAL:function(e){return this.LONG(e)/this.LONG(e+4)},SRATIONAL:function(e){return this.SLONG(e)/this.SLONG(e+4)},ASCII:function(e){return this.CHAR(e)},TIFF:function(){return f||null},EXIF:function(){var t=null;if(d.exifIFD){try{t=a.call(this,d.exifIFD,c.exif)}catch(n){return null}if(t.ExifVersion&&"array"===e.typeOf(t.ExifVersion)){for(var i=0,r="";i=65472&&65475>=n)return t+=5,{height:e.SHORT(t),width:e.SHORT(t+=2)};i=e.SHORT(t+=2),t+=i-2}return null}function s(){var e=d.thumb(),t,n;return e&&(t=new i(e),n=a(t),t.clear(),n)?(n.data=e,n):null}function u(){d&&l&&c&&(d.clear(),l.purge(),c.clear(),h=l=d=c=null)}var c,l,d,h;if(c=new i(o),65496!==c.SHORT(0))throw new t.ImageError(t.ImageError.WRONG_FORMAT);l=new n(o);try{d=new r(l.get("app1")[0])}catch(f){}h=a.call(this),e.extend(this,{type:"image/jpeg",size:c.length(),width:h&&h.width||0,height:h&&h.height||0,setExif:function(t,n){return d?("object"===e.typeOf(t)?e.each(t,function(e,t){d.setExif(t,e)}):d.setExif(t,n),void l.set("app1",d.SEGMENT())):!1},writeHeaders:function(){return arguments.length?l.restore(arguments[0]):l.restore(o)},stripHeaders:function(e){return l.strip(e)},purge:function(){u.call(this)}}),d&&(this.meta={tiff:d.TIFF(),exif:d.EXIF(),gps:d.GPS(),thumb:s()})}return o}),i(G,[f,u,H],function(e,t,n){function i(i){function r(){var e,t;return e=a.call(this,8),"IHDR"==e.type?(t=e.start,{width:s.LONG(t),height:s.LONG(t+=4)}):null}function o(){s&&(s.clear(),i=l=u=c=s=null)}function a(e){var t,n,i,r;return t=s.LONG(e),n=s.STRING(e+=4,4),i=e+=4,r=s.LONG(e+t),{length:t,type:n,start:i,CRC:r}}var s,u,c,l;s=new n(i),function(){var t=0,n=0,i=[35152,20039,3338,6666];for(n=0;ng;){for(var v=g+h>a?a-g:h,w=0;o>w;){var y=w+h>o?o-w:h;p.clearRect(0,0,h,h),p.drawImage(e,-w,-g);var E=w*s/o+c<<0,_=Math.ceil(y*s/o),b=g*u/a/m+l<<0,x=Math.ceil(v*u/a/m);d.drawImage(f,0,0,y,v,E,b,_,x),w+=h}g+=h}f=p=null}function t(e){var t=e.naturalWidth,n=e.naturalHeight;if(t*n>1048576){var i=document.createElement("canvas");i.width=i.height=1;var r=i.getContext("2d");return r.drawImage(e,-t+1,0),0===r.getImageData(0,0,1,1).data[3]}return!1}function n(e,t,n){var i=document.createElement("canvas");i.width=1,i.height=n;var r=i.getContext("2d");r.drawImage(e,0,0);for(var o=r.getImageData(0,0,1,n).data,a=0,s=n,u=n;u>a;){var c=o[4*(u-1)+3];0===c?s=u:a=u,u=s+a>>1}i=null;var l=u/n;return 0===l?1:l}return{isSubsampled:t,renderTo:e}}),i(j,[D,u,f,w,y,E,z,q,d,c],function(e,t,n,i,r,o,a,s,u,c){function l(){function e(){if(!_&&!y)throw new n.ImageError(n.DOMException.INVALID_STATE_ERR);return _||y}function l(e){return i.atob(e.substring(e.indexOf("base64,")+7))}function d(e,t){return"data:"+(t||"")+";base64,"+i.btoa(e)}function h(e){var t=this;y=new Image,y.onerror=function(){v.call(this),t.trigger("error",n.ImageError.WRONG_FORMAT)},y.onload=function(){t.trigger("load")},y.src="data:"==e.substr(0,5)?e:d(e,x.type)}function f(e,t){var i=this,r;return window.FileReader?(r=new FileReader,r.onload=function(){t(this.result)},r.onerror=function(){i.trigger("error",n.ImageError.WRONG_FORMAT)},r.readAsDataURL(e),void 0):t(e.getAsDataURL())}function p(n,i,r,o){var a=this,s,u,c=0,l=0,d,h,f,p;if(A=o,p=this.meta&&this.meta.tiff&&this.meta.tiff.Orientation||1,-1!==t.inArray(p,[5,6,7,8])){var v=n;n=i,i=v}return d=e(),r?(n=Math.min(n,d.width),i=Math.min(i,d.height),s=Math.max(n/d.width,i/d.height)):s=Math.min(n/d.width,i/d.height),s>1&&!r&&o?void this.trigger("Resize"):(_||(_=document.createElement("canvas")),h=Math.round(d.width*s),f=Math.round(d.height*s),r?(_.width=n,_.height=i,h>n&&(c=Math.round((h-n)/2)),f>i&&(l=Math.round((f-i)/2))):(_.width=h,_.height=f),A||g(_.width,_.height,p),m.call(this,d,_,-c,-l,h,f),this.width=_.width,this.height=_.height,R=!0,void a.trigger("Resize"))}function m(e,t,n,i,r,o){if("iOS"===c.OS)s.renderTo(e,t,{width:r,height:o,x:n,y:i});else{var a=t.getContext("2d");a.drawImage(e,n,i,r,o)}}function g(e,t,n){switch(n){case 5:case 6:case 7:case 8:_.width=t,_.height=e;break;default:_.width=e,_.height=t}var i=_.getContext("2d");switch(n){case 2:i.translate(e,0),i.scale(-1,1);break;case 3:i.translate(e,t),i.rotate(Math.PI);break;case 4:i.translate(0,t),i.scale(1,-1);break;case 5:i.rotate(.5*Math.PI),i.scale(1,-1);break;case 6:i.rotate(.5*Math.PI),i.translate(0,-t);break;case 7:i.rotate(.5*Math.PI),i.translate(e,-t),i.scale(-1,1);break;case 8:i.rotate(-.5*Math.PI),i.translate(-e,0)}}function v(){E&&(E.purge(),E=null),b=y=_=x=null,R=!1}var w=this,y,E,_,b,x,R=!1,A=!0;t.extend(this,{loadFromBlob:function(e){var t=this,i=t.getRuntime(),r=arguments.length>1?arguments[1]:!0;if(!i.can("access_binary"))throw new n.RuntimeError(n.RuntimeError.NOT_SUPPORTED_ERR);return x=e,e.isDetached()?(b=e.getSource(),void h.call(this,b)):void f.call(this,e.getSource(),function(e){r&&(b=l(e)),h.call(t,e)})},loadFromImage:function(e,t){this.meta=e.meta,x=new o(null,{name:e.name,size:e.size,type:e.type}),h.call(this,t?b=e.getAsBinaryString():e.getAsDataURL())},getInfo:function(){var t=this.getRuntime(),n;return!E&&b&&t.can("access_image_binary")&&(E=new a(b)),n={width:e().width||0,height:e().height||0,type:x.type||u.getFileMime(x.name),size:b&&b.length||x.size||0,name:x.name||"",meta:E&&E.meta||this.meta||{}},!n.meta||!n.meta.thumb||n.meta.thumb.data instanceof r||(n.meta.thumb.data=new r(null,{type:"image/jpeg",data:n.meta.thumb.data})),n},downsize:function(){p.apply(this,arguments)},getAsCanvas:function(){return _&&(_.id=this.uid+"_canvas"),_},getAsBlob:function(e,t){return e!==this.type&&p.call(this,this.width,this.height,!1),new o(null,{name:x.name||"",type:e,data:w.getAsBinaryString.call(this,e,t)})},getAsDataURL:function(e){var t=arguments[1]||90;if(!R)return y.src;if("image/jpeg"!==e)return _.toDataURL("image/png");try{return _.toDataURL("image/jpeg",t/100)}catch(n){return _.toDataURL("image/jpeg")}},getAsBinaryString:function(e,t){if(!R)return b||(b=l(w.getAsDataURL(e,t))),b;if("image/jpeg"!==e)b=l(w.getAsDataURL(e,t));else{var n;t||(t=90);try{n=_.toDataURL("image/jpeg",t/100)}catch(i){n=_.toDataURL("image/jpeg")}b=l(n),E&&(b=E.stripHeaders(b),A&&(E.meta&&E.meta.exif&&E.setExif({PixelXDimension:this.width,PixelYDimension:this.height}),b=E.writeHeaders(b)),E.purge(),E=null)}return R=!1,b},destroy:function(){w=null,v.call(this),this.getRuntime().getShim().removeInstance(this.uid)}})}return e.Image=l}),i(X,[u,c,h,f,m],function(e,t,n,i,r){function o(){var e;try{e=navigator.plugins["Shockwave Flash"],e=e.description}catch(t){try{e=new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version")}catch(n){e="0.0"}}return e=e.match(/\d+/g),parseFloat(e[0]+"."+e[1])}function a(e){var i=n.get(e);i&&"OBJECT"==i.nodeName&&("IE"===t.browser?(i.style.display="none",function r(){4==i.readyState?s(e):setTimeout(r,10)}()):i.parentNode.removeChild(i))}function s(e){var t=n.get(e);if(t){for(var i in t)"function"==typeof t[i]&&(t[i]=null);t.parentNode.removeChild(t)}}function u(s){var u=this,d;s=e.extend({swf_url:t.swf_url},s),r.call(this,s,c,{access_binary:function(e){return e&&"browser"===u.mode},access_image_binary:function(e){return e&&"browser"===u.mode},display_media:r.capTrue,do_cors:r.capTrue,drag_and_drop:!1,report_upload_progress:function(){return"client"===u.mode},resize_image:r.capTrue,return_response_headers:!1,return_response_type:function(t){return"json"===t&&window.JSON?!0:!e.arrayDiff(t,["","text","document"])||"browser"===u.mode},return_status_code:function(t){return"browser"===u.mode||!e.arrayDiff(t,[200,404])},select_file:r.capTrue,select_multiple:r.capTrue,send_binary_string:function(e){return e&&"browser"===u.mode},send_browser_cookies:function(e){return e&&"browser"===u.mode},send_custom_headers:function(e){return e&&"browser"===u.mode},send_multipart:r.capTrue,slice_blob:function(e){return e&&"browser"===u.mode},stream_upload:function(e){return e&&"browser"===u.mode},summon_file_dialog:!1,upload_filesize:function(t){return e.parseSizeStr(t)<=2097152||"client"===u.mode},use_http_method:function(t){return!e.arrayDiff(t,["GET","POST"])}},{access_binary:function(e){return e?"browser":"client"},access_image_binary:function(e){return e?"browser":"client"},report_upload_progress:function(e){return e?"browser":"client"},return_response_type:function(t){return e.arrayDiff(t,["","text","json","document"])?"browser":["client","browser"]},return_status_code:function(t){return e.arrayDiff(t,[200,404])?"browser":["client","browser"]},send_binary_string:function(e){return e?"browser":"client"},send_browser_cookies:function(e){return e?"browser":"client"},send_custom_headers:function(e){return e?"browser":"client"},stream_upload:function(e){return e?"client":"browser"},upload_filesize:function(t){return e.parseSizeStr(t)>=2097152?"client":"browser"}},"client"),o()<10&&(this.mode=!1),e.extend(this,{getShim:function(){return n.get(this.uid)},shimExec:function(e,t){var n=[].slice.call(arguments,2);return u.getShim().exec(this.uid,e,t,n)},init:function(){var n,r,o;o=this.getShimContainer(),e.extend(o.style,{position:"absolute",top:"-8px",left:"-8px",width:"9px",height:"9px",overflow:"hidden"}),n='',"IE"===t.browser?(r=document.createElement("div"),o.appendChild(r),r.outerHTML=n,r=o=null):o.innerHTML=n,d=setTimeout(function(){u&&!u.initialized&&u.trigger("Error",new i.RuntimeError(i.RuntimeError.NOT_INIT_ERR))},5e3)},destroy:function(e){return function(){a(u.uid),e.call(u),clearTimeout(d),s=d=e=u=null}}(this.destroy)},l)}var c="flash",l={};return r.addConstructor(c,u),l}),i(V,[X,E,u],function(e,t,n){var i={init:function(e){var i=this,r=this.getRuntime();this.bind("Change",function(){var e=r.shimExec.call(i,"FileInput","getFiles");i.files=[],n.each(e,function(e){i.files.push(new t(r.uid,e))})},999),this.getRuntime().shimExec.call(this,"FileInput","init",{name:e.name,accept:e.accept,multiple:e.multiple}),this.trigger("ready")}};return e.FileInput=i}),i(W,[X,y],function(e,t){var n={slice:function(e,n,i,r){var o=this.getRuntime();return 0>n?n=Math.max(e.size+n,0):n>0&&(n=Math.min(n,e.size)),0>i?i=Math.max(e.size+i,0):i>0&&(i=Math.min(i,e.size)),e=o.shimExec.call(this,"Blob","slice",n,i,r||""),e&&(e=new t(o.uid,e)),e}};return e.Blob=n}),i(Y,[X,w],function(e,t){function n(e,n){switch(n){case"readAsText":return t.atob(e,"utf8");case"readAsBinaryString":return t.atob(e);case"readAsDataURL":return e}return null}var i={read:function(e,t){var i=this;return i.result="","readAsDataURL"===e&&(i.result="data:"+(t.type||"")+";base64,"),i.bind("Progress",function(t,r){r&&(i.result+=n(r,e))},999),i.getRuntime().shimExec.call(this,"FileReader","readAsBase64",t.uid)}};return e.FileReader=i}),i($,[X,w],function(e,t){function n(e,n){switch(n){case"readAsText":return t.atob(e,"utf8");case"readAsBinaryString":return t.atob(e);case"readAsDataURL":return e}return null}var i={read:function(e,t){var i,r=this.getRuntime();return(i=r.shimExec.call(this,"FileReaderSync","readAsBase64",t.uid))?("readAsDataURL"===e&&(i="data:"+(t.type||"")+";base64,"+i),n(i,e,t.type)):null}};return e.FileReaderSync=i}),i(J,[X,u,y,E,A,I,S],function(e,t,n,i,r,o,a){var s={send:function(e,i){function r(){e.transport=l.mode,l.shimExec.call(c,"XMLHttpRequest","send",e,i)}function s(e,t){l.shimExec.call(c,"XMLHttpRequest","appendBlob",e,t.uid),i=null,r()}function u(e,t){var n=new a;n.bind("TransportingComplete",function(){t(this.result)}),n.transport(e.getSource(),e.type,{ruid:l.uid})}var c=this,l=c.getRuntime();if(t.isEmptyObj(e.headers)||t.each(e.headers,function(e,t){l.shimExec.call(c,"XMLHttpRequest","setRequestHeader",t,e.toString())}),i instanceof o){var d;if(i.each(function(e,t){e instanceof n?d=t:l.shimExec.call(c,"XMLHttpRequest","append",t,e)}),i.hasBlob()){var h=i.getBlob();h.isDetached()?u(h,function(e){h.destroy(),s(d,e)}):s(d,h)}else i=null,r()}else i instanceof n?i.isDetached()?u(i,function(e){i.destroy(),i=e.uid,r()}):(i=i.uid,r()):r()},getResponse:function(e){var n,o,a=this.getRuntime();if(o=a.shimExec.call(this,"XMLHttpRequest","getResponseAsBlob")){if(o=new i(a.uid,o),"blob"===e)return o;try{if(n=new r,~t.inArray(e,["","text"]))return n.readAsText(o);if("json"===e&&window.JSON)return JSON.parse(n.readAsText(o))}finally{o.destroy()}}return null},abort:function(e){var t=this.getRuntime();t.shimExec.call(this,"XMLHttpRequest","abort"),this.dispatchEvent("readystatechange"),this.dispatchEvent("abort")}};return e.XMLHttpRequest=s}),i(Z,[X,y],function(e,t){var n={getAsBlob:function(e){var n=this.getRuntime(),i=n.shimExec.call(this,"Transporter","getAsBlob",e);return i?new t(n.uid,i):null}};return e.Transporter=n}),i(K,[X,u,S,y,A],function(e,t,n,i,r){var o={loadFromBlob:function(e){function t(e){r.shimExec.call(i,"Image","loadFromBlob",e.uid),i=r=null}var i=this,r=i.getRuntime();if(e.isDetached()){var o=new n;o.bind("TransportingComplete",function(){t(o.result.getSource())}),o.transport(e.getSource(),e.type,{ruid:r.uid})}else t(e.getSource())},loadFromImage:function(e){var t=this.getRuntime();return t.shimExec.call(this,"Image","loadFromImage",e.uid)},getInfo:function(){var e=this.getRuntime(),t=e.shimExec.call(this,"Image","getInfo");return!t.meta||!t.meta.thumb||t.meta.thumb.data instanceof i||(t.meta.thumb.data=new i(e.uid,t.meta.thumb.data)),t},getAsBlob:function(e,t){var n=this.getRuntime(),r=n.shimExec.call(this,"Image","getAsBlob",e,t);return r?new i(n.uid,r):null},getAsDataURL:function(){var e=this.getRuntime(),t=e.Image.getAsBlob.apply(this,arguments),n;return t?(n=new r,n.readAsDataURL(t)):null}};return e.Image=o}),i(Q,[u,c,h,f,m],function(e,t,n,i,r){function o(e){var t=!1,n=null,i,r,o,a,s,u=0;try{try{n=new ActiveXObject("AgControl.AgControl"),n.IsVersionSupported(e)&&(t=!0),n=null}catch(c){var l=navigator.plugins["Silverlight Plug-In"];if(l){for(i=l.description,"1.0.30226.2"===i&&(i="2.0.30226.2"),r=i.split(".");r.length>3;)r.pop();for(;r.length<4;)r.push(0);for(o=e.split(".");o.length>4;)o.pop();do a=parseInt(o[u],10),s=parseInt(r[u],10),u++;while(u=a&&!isNaN(a)&&(t=!0)}}}catch(d){t=!1}return t}function a(a){var c=this,l;a=e.extend({xap_url:t.xap_url},a),r.call(this,a,s,{access_binary:r.capTrue,access_image_binary:r.capTrue,display_media:r.capTrue,do_cors:r.capTrue,drag_and_drop:!1,report_upload_progress:r.capTrue,resize_image:r.capTrue,return_response_headers:function(e){return e&&"client"===c.mode},return_response_type:function(e){return"json"!==e?!0:!!window.JSON},return_status_code:function(t){return"client"===c.mode||!e.arrayDiff(t,[200,404])},select_file:r.capTrue,select_multiple:r.capTrue,send_binary_string:r.capTrue,send_browser_cookies:function(e){return e&&"browser"===c.mode},send_custom_headers:function(e){return e&&"client"===c.mode},send_multipart:r.capTrue,slice_blob:r.capTrue,stream_upload:!0,summon_file_dialog:!1,upload_filesize:r.capTrue,use_http_method:function(t){return"client"===c.mode||!e.arrayDiff(t,["GET","POST"])}},{return_response_headers:function(e){return e?"client":"browser"},return_status_code:function(t){return e.arrayDiff(t,[200,404])?"client":["client","browser"]},send_browser_cookies:function(e){return e?"browser":"client"},send_custom_headers:function(e){return e?"client":"browser"},use_http_method:function(t){return e.arrayDiff(t,["GET","POST"])?"client":["client","browser"]}}),o("2.0.31005.0")&&"Opera"!==t.browser||(this.mode=!1),e.extend(this,{getShim:function(){return n.get(this.uid).content.Moxie},shimExec:function(e,t){var n=[].slice.call(arguments,2);return c.getShim().exec(this.uid,e,t,n)},init:function(){var e;e=this.getShimContainer(),e.innerHTML='',l=setTimeout(function(){c&&!c.initialized&&c.trigger("Error",new i.RuntimeError(i.RuntimeError.NOT_INIT_ERR))},"Windows"!==t.OS?1e4:5e3)},destroy:function(e){return function(){e.call(c),clearTimeout(l),a=l=e=c=null}}(this.destroy)},u)}var s="silverlight",u={};return r.addConstructor(s,a),u}),i(ee,[Q,E,u],function(e,t,n){var i={init:function(e){function i(e){for(var t="",n=0;ni;i++)n=t.keys[i],s=t[n],s&&(/^(\d|[1-9]\d+)$/.test(s)?s=parseInt(s,10):/^\d*\.\d+$/.test(s)&&(s=parseFloat(s)),r.meta[e][n]=s)}),!r.meta||!r.meta.thumb||r.meta.thumb.data instanceof n||(r.meta.thumb.data=new n(e.uid,r.meta.thumb.data))),r.width=parseInt(o.width,10),r.height=parseInt(o.height,10),r.size=parseInt(o.size,10),r.type=o.type,r.name=o.name,r}})}),i(ue,[u,f,m,c],function(e,t,n,i){function r(t){var r=this,s=n.capTest,u=n.capTrue;n.call(this,t,o,{access_binary:s(window.FileReader||window.File&&File.getAsDataURL),access_image_binary:!1,display_media:s(a.Image&&(i.can("create_canvas")||i.can("use_data_uri_over32kb"))),do_cors:!1,drag_and_drop:!1,filter_by_extension:s(function(){return"Chrome"===i.browser&&i.verComp(i.version,28,">=")||"IE"===i.browser&&i.verComp(i.version,10,">=")||"Safari"===i.browser&&i.verComp(i.version,7,">=")}()),resize_image:function(){return a.Image&&r.can("access_binary")&&i.can("create_canvas")},report_upload_progress:!1,return_response_headers:!1,return_response_type:function(t){return"json"===t&&window.JSON?!0:!!~e.inArray(t,["text","document",""])},return_status_code:function(t){return!e.arrayDiff(t,[200,404])},select_file:function(){return i.can("use_fileinput")},select_multiple:!1,send_binary_string:!1,send_custom_headers:!1,send_multipart:!0,slice_blob:!1,stream_upload:function(){return r.can("select_file")},summon_file_dialog:function(){return r.can("select_file")&&("Firefox"===i.browser&&i.verComp(i.version,4,">=")||"Opera"===i.browser&&i.verComp(i.version,12,">=")||"IE"===i.browser&&i.verComp(i.version,10,">=")||!!~e.inArray(i.browser,["Chrome","Safari"]))},upload_filesize:u,use_http_method:function(t){return!e.arrayDiff(t,["GET","POST"])}}),e.extend(this,{init:function(){this.trigger("Init")},destroy:function(e){return function(){e.call(r),e=r=null}}(this.destroy)}),e.extend(this.getShim(),a)}var o="html4",a={};return n.addConstructor(o,r),a}),i(ce,[ue,E,u,h,N,d,c],function(e,t,n,i,r,o,a){function s(){function e(){var o=this,l=o.getRuntime(),d,h,f,p,m,g;g=n.guid("uid_"),d=l.getShimContainer(),s&&(f=i.get(s+"_form"),f&&n.extend(f.style,{top:"100%"})),p=document.createElement("form"),p.setAttribute("id",g+"_form"),p.setAttribute("method","post"),p.setAttribute("enctype","multipart/form-data"),p.setAttribute("encoding","multipart/form-data"),n.extend(p.style,{overflow:"hidden",position:"absolute",top:0,left:0,width:"100%",height:"100%"}),m=document.createElement("input"),m.setAttribute("id",g),m.setAttribute("type","file"),m.setAttribute("name",c.name||"Filedata"),m.setAttribute("accept",u.join(",")),n.extend(m.style,{fontSize:"999px",opacity:0}),p.appendChild(m),d.appendChild(p),n.extend(m.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),"IE"===a.browser&&a.verComp(a.version,10,"<")&&n.extend(m.style,{filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=0)"}),m.onchange=function(){var n;if(this.value){if(this.files){if(n=this.files[0],0===n.size)return void p.parentNode.removeChild(p)}else n={name:this.value};n=new t(l.uid,n),this.onchange=function(){},e.call(o),o.files=[n],m.setAttribute("id",n.uid),p.setAttribute("id",n.uid+"_form"),o.trigger("change"),m=p=null}},l.can("summon_file_dialog")&&(h=i.get(c.browse_button),r.removeEvent(h,"click",o.uid),r.addEvent(h,"click",function(e){m&&!m.disabled&&m.click(),e.preventDefault()},o.uid)),s=g,d=f=h=null}var s,u=[],c;n.extend(this,{init:function(t){var n=this,a=n.getRuntime(),s;c=t,u=t.accept.mimes||o.extList2mimes(t.accept,a.can("filter_by_extension")),s=a.getShimContainer(),function(){var e,o,u;e=i.get(t.browse_button),a.can("summon_file_dialog")&&("static"===i.getStyle(e,"position")&&(e.style.position="relative"),o=parseInt(i.getStyle(e,"z-index"),10)||1,e.style.zIndex=o,s.style.zIndex=o-1),u=a.can("summon_file_dialog")?e:s,r.addEvent(u,"mouseover",function(){n.trigger("mouseenter")},n.uid),r.addEvent(u,"mouseout",function(){n.trigger("mouseleave")},n.uid),r.addEvent(u,"mousedown",function(){n.trigger("mousedown")},n.uid),r.addEvent(i.get(t.container),"mouseup",function(){n.trigger("mouseup")},n.uid),e=null}(),e.call(this),s=null,n.trigger({type:"ready",async:!0})},disable:function(e){var t;(t=i.get(s))&&(t.disabled=!!e)},destroy:function(){var e=this.getRuntime(),t=e.getShim(),n=e.getShimContainer();r.removeAllEvents(n,this.uid),r.removeAllEvents(c&&i.get(c.container),this.uid),r.removeAllEvents(c&&i.get(c.browse_button),this.uid),n&&(n.innerHTML=""),t.removeInstance(this.uid),s=u=c=n=t=null}})}return e.FileInput=s}),i(le,[ue,F],function(e,t){return e.FileReader=t}),i(de,[ue,u,h,x,f,N,y,I],function(e,t,n,i,r,o,a,s){function u(){function e(e){var t=this,i,r,a,s,u=!1;if(l){if(i=l.id.replace(/_iframe$/,""),r=n.get(i+"_form")){for(a=r.getElementsByTagName("input"),s=a.length;s--;)switch(a[s].getAttribute("type")){case"hidden":a[s].parentNode.removeChild(a[s]);break;case"file":u=!0}a=[],u||r.parentNode.removeChild(r),r=null}setTimeout(function(){o.removeEvent(l,"load",t.uid),l.parentNode&&l.parentNode.removeChild(l);var n=t.getRuntime().getShimContainer();n.children.length||n.parentNode.removeChild(n),n=l=null,e()},1)}}var u,c,l;t.extend(this,{send:function(d,h){function f(){var n=m.getShimContainer()||document.body,r=document.createElement("div");r.innerHTML='',l=r.firstChild,n.appendChild(l),o.addEvent(l,"load",function(){var n;try{n=l.contentWindow.document||l.contentDocument||window.frames[l.id].document,/^4(0[0-9]|1[0-7]|2[2346])\s/.test(n.title)?u=n.title.replace(/^(\d+).*$/,"$1"):(u=200,c=t.trim(n.body.innerHTML),p.trigger({type:"progress",loaded:c.length,total:c.length}),y&&p.trigger({type:"uploadprogress",loaded:y.size||1025,total:y.size||1025}))}catch(r){if(!i.hasSameOrigin(d.url))return void e.call(p,function(){p.trigger("error")});u=404}e.call(p,function(){p.trigger("load")})},p.uid)}var p=this,m=p.getRuntime(),g,v,w,y;if(u=c=null,h instanceof s&&h.hasBlob()){if(y=h.getBlob(),g=y.uid,w=n.get(g),v=n.get(g+"_form"),!v)throw new r.DOMException(r.DOMException.NOT_FOUND_ERR)}else g=t.guid("uid_"),v=document.createElement("form"),v.setAttribute("id",g+"_form"),v.setAttribute("method",d.method),v.setAttribute("enctype","multipart/form-data"),v.setAttribute("encoding","multipart/form-data"),m.getShimContainer().appendChild(v);v.setAttribute("target",g+"_iframe"),h instanceof s&&h.each(function(e,n){if(e instanceof a)w&&w.setAttribute("name",n);else{var i=document.createElement("input");t.extend(i,{type:"hidden",name:n,value:e}),w?v.insertBefore(i,w):v.appendChild(i)}}),v.setAttribute("action",d.url),f(),v.submit(),p.trigger("loadstart")},getStatus:function(){return u},getResponse:function(e){if("json"===e&&"string"===t.typeOf(c)&&window.JSON)try{ +return JSON.parse(c.replace(/^\s*]*>/,"").replace(/<\/pre>\s*$/,""))}catch(n){return null}return c},abort:function(){var t=this;l&&l.contentWindow&&(l.contentWindow.stop?l.contentWindow.stop():l.contentWindow.document.execCommand?l.contentWindow.document.execCommand("Stop"):l.src="about:blank"),e.call(this,function(){t.dispatchEvent("abort")})}})}return e.XMLHttpRequest=u}),i(he,[ue,j],function(e,t){return e.Image=t}),a([u,c,l,d,h,f,p,m,g,v,w,y,E,_,b,x,R,A,I,T,S,O,N])}(this);;(function(e){"use strict";var t={},n=e.moxie.core.utils.Basic.inArray;return function r(e){var i,s;for(i in e)s=typeof e[i],s==="object"&&!~n(i,["Exceptions","Env","Mime"])?r(e[i]):s==="function"&&(t[i]=e[i])}(e.moxie),t.Env=e.moxie.core.utils.Env,t.Mime=e.moxie.core.utils.Mime,t.Exceptions=e.moxie.core.Exceptions,e.mOxie=t,e.o||(e.o=t),t})(this); +/** + * Plupload - multi-runtime File Uploader + * v2.1.9 + * + * Copyright 2013, Moxiecode Systems AB + * Released under GPL License. + * + * License: http://www.plupload.com/license + * Contributing: http://www.plupload.com/contributing + * + * Date: 2016-05-15 + */ +;(function(e,t,n){function s(e){function r(e,t,r){var i={chunks:"slice_blob",jpgresize:"send_binary_string",pngresize:"send_binary_string",progress:"report_upload_progress",multi_selection:"select_multiple",dragdrop:"drag_and_drop",drop_element:"drag_and_drop",headers:"send_custom_headers",urlstream_upload:"send_binary_string",canSendBinary:"send_binary",triggerDialog:"summon_file_dialog"};i[e]?n[i[e]]=t:r||(n[e]=t)}var t=e.required_features,n={};if(typeof t=="string")o.each(t.split(/\s*,\s*/),function(e){r(e,!0)});else if(typeof t=="object")o.each(t,function(e,t){r(t,e)});else if(t===!0){e.chunk_size>0&&(n.slice_blob=!0);if(e.resize.enabled||!e.multipart)n.send_binary_string=!0;o.each(e,function(e,t){r(t,!!e,!0)})}return n}var r=e.setTimeout,i={},o={VERSION:"2.1.9",STOPPED:1,STARTED:2,QUEUED:1,UPLOADING:2,FAILED:4,DONE:5,GENERIC_ERROR:-100,HTTP_ERROR:-200,IO_ERROR:-300,SECURITY_ERROR:-400,INIT_ERROR:-500,FILE_SIZE_ERROR:-600,FILE_EXTENSION_ERROR:-601,FILE_DUPLICATE_ERROR:-602,IMAGE_FORMAT_ERROR:-700,MEMORY_ERROR:-701,IMAGE_DIMENSIONS_ERROR:-702,mimeTypes:t.mimes,ua:t.ua,typeOf:t.typeOf,extend:t.extend,guid:t.guid,getAll:function(t){var n=[],r;o.typeOf(t)!=="array"&&(t=[t]);var i=t.length;while(i--)r=o.get(t[i]),r&&n.push(r);return n.length?n:null},get:t.get,each:t.each,getPos:t.getPos,getSize:t.getSize,xmlEncode:function(e){var t={"<":"lt",">":"gt","&":"amp",'"':"quot","'":"#39"},n=/[<>&\"\']/g;return e?(""+e).replace(n,function(e){return t[e]?"&"+t[e]+";":e}):e},toArray:t.toArray,inArray:t.inArray,addI18n:t.addI18n,translate:t.translate,isEmptyObj:t.isEmptyObj,hasClass:t.hasClass,addClass:t.addClass,removeClass:t.removeClass,getStyle:t.getStyle,addEvent:t.addEvent,removeEvent:t.removeEvent,removeAllEvents:t.removeAllEvents,cleanName:function(e){var t,n;n=[/[\300-\306]/g,"A",/[\340-\346]/g,"a",/\307/g,"C",/\347/g,"c",/[\310-\313]/g,"E",/[\350-\353]/g,"e",/[\314-\317]/g,"I",/[\354-\357]/g,"i",/\321/g,"N",/\361/g,"n",/[\322-\330]/g,"O",/[\362-\370]/g,"o",/[\331-\334]/g,"U",/[\371-\374]/g,"u"];for(t=0;t0?"&":"?")+n),e},formatSize:function(e){function t(e,t){return Math.round(e*Math.pow(10,t))/Math.pow(10,t)}if(e===n||/\D/.test(e))return o.translate("N/A");var r=Math.pow(1024,4);return e>r?t(e/r,1)+" "+o.translate("tb"):e>(r/=1024)?t(e/r,1)+" "+o.translate("gb"):e>(r/=1024)?t(e/r,1)+" "+o.translate("mb"):e>1024?Math.round(e/1024)+" "+o.translate("kb"):e+" "+o.translate("b")},parseSize:t.parseSizeStr,predictRuntime:function(e,n){var r,i;return r=new o.Uploader(e),i=t.Runtime.thatCan(r.getOption().required_features,n||e.runtimes),r.destroy(),i},addFileFilter:function(e,t){i[e]=t}};o.addFileFilter("mime_types",function(e,t,n){e.length&&!e.regexp.test(t.name)?(this.trigger("Error",{code:o.FILE_EXTENSION_ERROR,message:o.translate("File extension error."),file:t}),n(!1)):n(!0)}),o.addFileFilter("max_file_size",function(e,t,n){var r;e=o.parseSize(e),t.size!==r&&e&&t.size>e?(this.trigger("Error",{code:o.FILE_SIZE_ERROR,message:o.translate("File size error."),file:t}),n(!1)):n(!0)}),o.addFileFilter("prevent_duplicates",function(e,t,n){if(e){var r=this.files.length;while(r--)if(t.name===this.files[r].name&&t.size===this.files[r].size){this.trigger("Error",{code:o.FILE_DUPLICATE_ERROR,message:o.translate("Duplicate file error."),file:t}),n(!1);return}}n(!0)}),o.Uploader=function(e){function g(){var e,t=0,n;if(this.state==o.STARTED){for(n=0;n0?Math.ceil(e.loaded/e.size*100):100,b()}function b(){var e,t;d.reset();for(e=0;e0?Math.ceil(d.uploaded/f.length*100):0:(d.bytesPerSec=Math.ceil(d.loaded/((+(new Date)-p||1)/1e3)),d.percent=d.size>0?Math.ceil(d.loaded/d.size*100):0)}function w(){var e=c[0]||h[0];return e?e.getRuntime().uid:!1}function E(e,n){if(e.ruid){var r=t.Runtime.getInfo(e.ruid);if(r)return r.can(n)}return!1}function S(){this.bind("FilesAdded FilesRemoved",function(e){e.trigger("QueueChanged"),e.refresh()}),this.bind("CancelUpload",O),this.bind("BeforeUpload",C),this.bind("UploadFile",k),this.bind("UploadProgress",L),this.bind("StateChanged",A),this.bind("QueueChanged",b),this.bind("Error",_),this.bind("FileUploaded",M),this.bind("Destroy",D)}function x(e,n){var r=this,i=0,s=[],u={runtime_order:e.runtimes,required_caps:e.required_features,preferred_caps:l,swf_url:e.flash_swf_url,xap_url:e.silverlight_xap_url};o.each(e.runtimes.split(/\s*,\s*/),function(t){e[t]&&(u[t]=e[t])}),e.browse_button&&o.each(e.browse_button,function(n){s.push(function(s){var a=new t.FileInput(o.extend({},u,{accept:e.filters.mime_types,name:e.file_data_name,multiple:e.multi_selection,container:e.container,browse_button:n}));a.onready=function(){var e=t.Runtime.getInfo(this.ruid);t.extend(r.features,{chunks:e.can("slice_blob"),multipart:e.can("send_multipart"),multi_selection:e.can("select_multiple")}),i++,c.push(this),s()},a.onchange=function(){r.addFile(this.files)},a.bind("mouseenter mouseleave mousedown mouseup",function(r){v||(e.browse_button_hover&&("mouseenter"===r.type?t.addClass(n,e.browse_button_hover):"mouseleave"===r.type&&t.removeClass(n,e.browse_button_hover)),e.browse_button_active&&("mousedown"===r.type?t.addClass(n,e.browse_button_active):"mouseup"===r.type&&t.removeClass(n,e.browse_button_active)))}),a.bind("mousedown",function(){r.trigger("Browse")}),a.bind("error runtimeerror",function(){a=null,s()}),a.init()})}),e.drop_element&&o.each(e.drop_element,function(e){s.push(function(n){var s=new t.FileDrop(o.extend({},u,{drop_zone:e}));s.onready=function(){var e=t.Runtime.getInfo(this.ruid);t.extend(r.features,{chunks:e.can("slice_blob"),multipart:e.can("send_multipart"),dragdrop:e.can("drag_and_drop")}),i++,h.push(this),n()},s.ondrop=function(){r.addFile(this.files)},s.bind("error runtimeerror",function(){s=null,n()}),s.init()})}),t.inSeries(s,function(){typeof n=="function"&&n(i)})}function T(e,r,i){var s=new t.Image;try{s.onload=function(){if(r.width>this.width&&r.height>this.height&&r.quality===n&&r.preserve_headers&&!r.crop)return this.destroy(),i(e);s.downsize(r.width,r.height,r.crop,r.preserve_headers)},s.onresize=function(){i(this.getAsBlob(e.type,r.quality)),this.destroy()},s.onerror=function(){i(e)},s.load(e)}catch(o){i(e)}}function N(e,n,r){function f(e,t,n){var r=a[e];switch(e){case"max_file_size":e==="max_file_size"&&(a.max_file_size=a.filters.max_file_size=t);break;case"chunk_size":if(t=o.parseSize(t))a[e]=t,a.send_file_name=!0;break;case"multipart":a[e]=t,t||(a.send_file_name=!0);break;case"unique_names":a[e]=t,t&&(a.send_file_name=!0);break;case"filters":o.typeOf(t)==="array"&&(t={mime_types:t}),n?o.extend(a.filters,t):a.filters=t,t.mime_types&&(a.filters.mime_types.regexp=function(e){var t=[];return o.each(e,function(e){o.each(e.extensions.split(/,/),function(e){/^\s*\*\s*$/.test(e)?t.push("\\.*"):t.push("\\."+e.replace(new RegExp("["+"/^$.*+?|()[]{}\\".replace(/./g,"\\$&")+"]","g"),"\\$&"))})}),new RegExp("("+t.join("|")+")$","i")}(a.filters.mime_types));break;case"resize":n?o.extend(a.resize,t,{enabled:!0}):a.resize=t;break;case"prevent_duplicates":a.prevent_duplicates=a.filters.prevent_duplicates=!!t;break;case"container":case"browse_button":case"drop_element":t="container"===e?o.get(t):o.getAll(t);case"runtimes":case"multi_selection":case"flash_swf_url":case"silverlight_xap_url":a[e]=t,n||(u=!0);break;default:a[e]=t}n||i.trigger("OptionChanged",e,t,r)}var i=this,u=!1;typeof e=="object"?o.each(e,function(e,t){f(t,e,r)}):f(e,n,r),r?(a.required_features=s(o.extend({},a)),l=s(o.extend({},a,{required_features:!0}))):u&&(i.trigger("Destroy"),x.call(i,a,function(e){e?(i.runtime=t.Runtime.getInfo(w()).type,i.trigger("Init",{runtime:i.runtime}),i.trigger("PostInit")):i.trigger("Error",{code:o.INIT_ERROR,message:o.translate("Init error.")})}))}function C(e,t){if(e.settings.unique_names){var n=t.name.match(/\.([^.]+)$/),r="part";n&&(r=n[1]),t.target_name=t.id+"."+r}}function k(e,n){function h(){u-->0?r(p,1e3):(n.loaded=f,e.trigger("Error",{code:o.HTTP_ERROR,message:o.translate("HTTP Error."),file:n,response:m.responseText,status:m.status,responseHeaders:m.getAllResponseHeaders()}))}function p(){var d,v,g={},y;if(n.status!==o.UPLOADING||e.state===o.STOPPED)return;e.settings.send_file_name&&(g.name=n.target_name||n.name),s&&a.chunks&&c.size>s?(y=Math.min(s,c.size-f),d=c.slice(f,f+y)):(y=c.size,d=c),s&&a.chunks&&(e.settings.send_chunk_number?(g.chunk=Math.ceil(f/s),g.chunks=Math.ceil(c.size/s)):(g.offset=f,g.total=c.size)),m=new t.XMLHttpRequest,m.upload&&(m.upload.onprogress=function(t){n.loaded=Math.min(n.size,f+t.loaded),e.trigger("UploadProgress",n)}),m.onload=function(){if(m.status>=400){h();return}u=e.settings.max_retries,y=c.size?(n.size!=n.origSize&&(c.destroy(),c=null),e.trigger("UploadProgress",n),n.status=o.DONE,e.trigger("FileUploaded",n,{response:m.responseText,status:m.status,responseHeaders:m.getAllResponseHeaders()})):r(p,1)},m.onerror=function(){h()},m.onloadend=function(){this.destroy(),m=null},e.settings.multipart&&a.multipart?(m.open("post",i,!0),o.each(e.settings.headers,function(e,t){m.setRequestHeader(t,e)}),v=new t.FormData,o.each(o.extend(g,e.settings.multipart_params),function(e,t){v.append(t,e)}),v.append(e.settings.file_data_name,d),m.send(v,{runtime_order:e.settings.runtimes,required_caps:e.settings.required_features,preferred_caps:l,swf_url:e.settings.flash_swf_url,xap_url:e.settings.silverlight_xap_url})):(i=o.buildUrl(e.settings.url,o.extend(g,e.settings.multipart_params)),m.open("post",i,!0),m.setRequestHeader("Content-Type","application/octet-stream"),o.each(e.settings.headers,function(e,t){m.setRequestHeader(t,e)}),m.send(d,{runtime_order:e.settings.runtimes,required_caps:e.settings.required_features,preferred_caps:l,swf_url:e.settings.flash_swf_url,xap_url:e.settings.silverlight_xap_url}))}var i=e.settings.url,s=e.settings.chunk_size,u=e.settings.max_retries,a=e.features,f=0,c;n.loaded&&(f=n.loaded=s?s*Math.floor(n.loaded/s):0),c=n.getSource(),e.settings.resize.enabled&&E(c,"send_binary_string")&&!!~t.inArray(c.type,["image/jpeg","image/png"])?T.call(this,c,e.settings.resize,function(e){c=e,n.size=e.size,p()}):p()}function L(e,t){y(t)}function A(e){if(e.state==o.STARTED)p=+(new Date);else if(e.state==o.STOPPED)for(var t=e.files.length-1;t>=0;t--)e.files[t].status==o.UPLOADING&&(e.files[t].status=o.QUEUED,b())}function O(){m&&m.abort()}function M(e){b(),r(function(){g.call(e)},1)}function _(e,t){t.code===o.INIT_ERROR?e.destroy():t.code===o.HTTP_ERROR&&(t.file.status=o.FAILED,y(t.file),e.state==o.STARTED&&(e.trigger("CancelUpload"),r(function(){g.call(e)},1)))}function D(e){e.stop(),o.each(f,function(e){e.destroy()}),f=[],c.length&&(o.each(c,function(e){e.destroy()}),c=[]),h.length&&(o.each(h,function(e){e.destroy()}),h=[]),l={},v=!1,p=m=null,d.reset()}var u=o.guid(),a,f=[],l={},c=[],h=[],p,d,v=!1,m;a={runtimes:t.Runtime.order,max_retries:0,chunk_size:0,multipart:!0,multi_selection:!0,file_data_name:"file",flash_swf_url:"js/Moxie.swf",silverlight_xap_url:"js/Moxie.xap",filters:{mime_types:[],prevent_duplicates:!1,max_file_size:0},resize:{enabled:!1,preserve_headers:!0,crop:!1},send_file_name:!0,send_chunk_number:!0},N.call(this,e,null,!0),d=new o.QueueProgress,o.extend(this,{id:u,uid:u,state:o.STOPPED,features:{},runtime:null,files:f,settings:a,total:d,init:function(){var e=this,n,r,i;r=e.getOption("preinit"),typeof r=="function"?r(e):o.each(r,function(t,n){e.bind(n,t)}),S.call(e),o.each(["container","browse_button","drop_element"],function(t){if(e.getOption(t)===null)return i={code:o.INIT_ERROR,message:o.translate("'%' specified, but cannot be found.")},!1});if(i)return e.trigger("Error",i);if(!a.browse_button&&!a.drop_element)return e.trigger("Error",{code:o.INIT_ERROR,message:o.translate("You must specify either 'browse_button' or 'drop_element'.")});x.call(e,a,function(n){var r=e.getOption("init");typeof r=="function"?r(e):o.each(r,function(t,n){e.bind(n,t)}),n?(e.runtime=t.Runtime.getInfo(w()).type,e.trigger("Init",{runtime:e.runtime}),e.trigger("PostInit")):e.trigger("Error",{code:o.INIT_ERROR,message:o.translate("Init error.")})})},setOption:function(e,t){N.call(this,e,t,!this.runtime)},getOption:function(e){return e?a[e]:a},refresh:function(){c.length&&o.each(c,function(e){e.trigger("Refresh")}),this.trigger("Refresh")},start:function(){this.state!=o.STARTED&&(this.state=o.STARTED,this.trigger("StateChanged"),g.call(this))},stop:function(){this.state!=o.STOPPED&&(this.state=o.STOPPED,this.trigger("StateChanged"),this.trigger("CancelUpload"))},disableBrowse:function(){v=arguments[0]!==n?arguments[0]:!0,c.length&&o.each(c,function(e){e.disable(v)}),this.trigger("DisableBrowse",v)},getFile:function(e){var t;for(t=f.length-1;t>=0;t--)if(f[t].id===e)return f[t]},addFile:function(e,n){function c(e,n){var r=[];t.each(s.settings.filters,function(t,n){i[n]&&r.push(function(r){i[n].call(s,t,e,function(e){r(!e)})})}),t.inSeries(r,n)}function h(e){var i=t.typeOf(e);if(e instanceof t.File){if(!e.ruid&&!e.isDetached()){if(!l)return!1;e.ruid=l,e.connectRuntime(l)}h(new o.File(e))}else e instanceof t.Blob?(h(e.getSource()),e.destroy()):e instanceof o.File?(n&&(e.name=n),u.push(function(t){c(e,function(n){n||(f.push(e),a.push(e),s.trigger("FileFiltered",e)),r(t,1)})})):t.inArray(i,["file","blob"])!==-1?h(new t.File(null,e)):i==="node"&&t.typeOf(e.files)==="filelist"?t.each(e.files,h):i==="array"&&(n=null,t.each(e,h))}var s=this,u=[],a=[],l;l=w(),h(e),u.length&&t.inSeries(u,function(){a.length&&s.trigger("FilesAdded",a)})},removeFile:function(e){var t=typeof e=="string"?e:e.id;for(var n=f.length-1;n>=0;n--)if(f[n].id===t)return this.splice(n,1)[0]},splice:function(e,t){var r=f.splice(e===n?0:e,t===n?f.length:t),i=!1;return this.state==o.STARTED&&(o.each(r,function(e){if(e.status===o.UPLOADING)return i=!0,!1}),i&&this.stop()),this.trigger("FilesRemoved",r),o.each(r,function(e){e.destroy()}),i&&this.start(),r},dispatchEvent:function(e){var t,n,r;e=e.toLowerCase(),t=this.hasEventListener(e);if(t){t.sort(function(e,t){return t.priority-e.priority}),n=[].slice.call(arguments),n.shift(),n.unshift(this);for(var i=0;i0&&(n.slice_blob=!0);if(e.resize.enabled||!e.multipart)n.send_binary_string=!0;o.each(e,function(e,t){r(t,!!e,!0)})}return n}var r=e.setTimeout,i={},o={VERSION:"2.1.9",STOPPED:1,STARTED:2,QUEUED:1,UPLOADING:2,FAILED:4,DONE:5,GENERIC_ERROR:-100,HTTP_ERROR:-200,IO_ERROR:-300,SECURITY_ERROR:-400,INIT_ERROR:-500,FILE_SIZE_ERROR:-600,FILE_EXTENSION_ERROR:-601,FILE_DUPLICATE_ERROR:-602,IMAGE_FORMAT_ERROR:-700,MEMORY_ERROR:-701,IMAGE_DIMENSIONS_ERROR:-702,mimeTypes:t.mimes,ua:t.ua,typeOf:t.typeOf,extend:t.extend,guid:t.guid,getAll:function(t){var n=[],r;o.typeOf(t)!=="array"&&(t=[t]);var i=t.length;while(i--)r=o.get(t[i]),r&&n.push(r);return n.length?n:null},get:t.get,each:t.each,getPos:t.getPos,getSize:t.getSize,xmlEncode:function(e){var t={"<":"lt",">":"gt","&":"amp",'"':"quot","'":"#39"},n=/[<>&\"\']/g;return e?(""+e).replace(n,function(e){return t[e]?"&"+t[e]+";":e}):e},toArray:t.toArray,inArray:t.inArray,addI18n:t.addI18n,translate:t.translate,isEmptyObj:t.isEmptyObj,hasClass:t.hasClass,addClass:t.addClass,removeClass:t.removeClass,getStyle:t.getStyle,addEvent:t.addEvent,removeEvent:t.removeEvent,removeAllEvents:t.removeAllEvents,cleanName:function(e){var t,n;n=[/[\300-\306]/g,"A",/[\340-\346]/g,"a",/\307/g,"C",/\347/g,"c",/[\310-\313]/g,"E",/[\350-\353]/g,"e",/[\314-\317]/g,"I",/[\354-\357]/g,"i",/\321/g,"N",/\361/g,"n",/[\322-\330]/g,"O",/[\362-\370]/g,"o",/[\331-\334]/g,"U",/[\371-\374]/g,"u"];for(t=0;t0?"&":"?")+n),e},formatSize:function(e){function t(e,t){return Math.round(e*Math.pow(10,t))/Math.pow(10,t)}if(e===n||/\D/.test(e))return o.translate("N/A");var r=Math.pow(1024,4);return e>r?t(e/r,1)+" "+o.translate("tb"):e>(r/=1024)?t(e/r,1)+" "+o.translate("gb"):e>(r/=1024)?t(e/r,1)+" "+o.translate("mb"):e>1024?Math.round(e/1024)+" "+o.translate("kb"):e+" "+o.translate("b")},parseSize:t.parseSizeStr,predictRuntime:function(e,n){var r,i;return r=new o.Uploader(e),i=t.Runtime.thatCan(r.getOption().required_features,n||e.runtimes),r.destroy(),i},addFileFilter:function(e,t){i[e]=t}};o.addFileFilter("mime_types",function(e,t,n){e.length&&!e.regexp.test(t.name)?(this.trigger("Error",{code:o.FILE_EXTENSION_ERROR,message:o.translate("File extension error."),file:t}),n(!1)):n(!0)}),o.addFileFilter("max_file_size",function(e,t,n){var r;e=o.parseSize(e),t.size!==r&&e&&t.size>e?(this.trigger("Error",{code:o.FILE_SIZE_ERROR,message:o.translate("File size error."),file:t}),n(!1)):n(!0)}),o.addFileFilter("prevent_duplicates",function(e,t,n){if(e){var r=this.files.length;while(r--)if(t.name===this.files[r].name&&t.size===this.files[r].size){this.trigger("Error",{code:o.FILE_DUPLICATE_ERROR,message:o.translate("Duplicate file error."),file:t}),n(!1);return}}n(!0)}),o.Uploader=function(e){function g(){var e,t=0,n;if(this.state==o.STARTED){for(n=0;n0?Math.ceil(e.loaded/e.size*100):100,b()}function b(){var e,t;d.reset();for(e=0;e0?Math.ceil(d.uploaded/f.length*100):0:(d.bytesPerSec=Math.ceil(d.loaded/((+(new Date)-p||1)/1e3)),d.percent=d.size>0?Math.ceil(d.loaded/d.size*100):0)}function w(){var e=c[0]||h[0];return e?e.getRuntime().uid:!1}function E(e,n){if(e.ruid){var r=t.Runtime.getInfo(e.ruid);if(r)return r.can(n)}return!1}function S(){this.bind("FilesAdded FilesRemoved",function(e){e.trigger("QueueChanged"),e.refresh()}),this.bind("CancelUpload",O),this.bind("BeforeUpload",C),this.bind("UploadFile",k),this.bind("UploadProgress",L),this.bind("StateChanged",A),this.bind("QueueChanged",b),this.bind("Error",_),this.bind("FileUploaded",M),this.bind("Destroy",D)}function x(e,n){var r=this,i=0,s=[],u={runtime_order:e.runtimes,required_caps:e.required_features,preferred_caps:l,swf_url:e.flash_swf_url,xap_url:e.silverlight_xap_url};o.each(e.runtimes.split(/\s*,\s*/),function(t){e[t]&&(u[t]=e[t])}),e.browse_button&&o.each(e.browse_button,function(n){s.push(function(s){var a=new t.FileInput(o.extend({},u,{accept:e.filters.mime_types,name:e.file_data_name,multiple:e.multi_selection,container:e.container,browse_button:n}));a.onready=function(){var e=t.Runtime.getInfo(this.ruid);t.extend(r.features,{chunks:e.can("slice_blob"),multipart:e.can("send_multipart"),multi_selection:e.can("select_multiple")}),i++,c.push(this),s()},a.onchange=function(){r.addFile(this.files)},a.bind("mouseenter mouseleave mousedown mouseup",function(r){v||(e.browse_button_hover&&("mouseenter"===r.type?t.addClass(n,e.browse_button_hover):"mouseleave"===r.type&&t.removeClass(n,e.browse_button_hover)),e.browse_button_active&&("mousedown"===r.type?t.addClass(n,e.browse_button_active):"mouseup"===r.type&&t.removeClass(n,e.browse_button_active)))}),a.bind("mousedown",function(){r.trigger("Browse")}),a.bind("error runtimeerror",function(){a=null,s()}),a.init()})}),e.drop_element&&o.each(e.drop_element,function(e){s.push(function(n){var s=new t.FileDrop(o.extend({},u,{drop_zone:e}));s.onready=function(){var e=t.Runtime.getInfo(this.ruid);t.extend(r.features,{chunks:e.can("slice_blob"),multipart:e.can("send_multipart"),dragdrop:e.can("drag_and_drop")}),i++,h.push(this),n()},s.ondrop=function(){r.addFile(this.files)},s.bind("error runtimeerror",function(){s=null,n()}),s.init()})}),t.inSeries(s,function(){typeof n=="function"&&n(i)})}function T(e,r,i){var s=new t.Image;try{s.onload=function(){if(r.width>this.width&&r.height>this.height&&r.quality===n&&r.preserve_headers&&!r.crop)return this.destroy(),i(e);s.downsize(r.width,r.height,r.crop,r.preserve_headers)},s.onresize=function(){i(this.getAsBlob(e.type,r.quality)),this.destroy()},s.onerror=function(){i(e)},s.load(e)}catch(o){i(e)}}function N(e,n,r){function f(e,t,n){var r=a[e];switch(e){case"max_file_size":e==="max_file_size"&&(a.max_file_size=a.filters.max_file_size=t);break;case"chunk_size":if(t=o.parseSize(t))a[e]=t,a.send_file_name=!0;break;case"multipart":a[e]=t,t||(a.send_file_name=!0);break;case"unique_names":a[e]=t,t&&(a.send_file_name=!0);break;case"filters":o.typeOf(t)==="array"&&(t={mime_types:t}),n?o.extend(a.filters,t):a.filters=t,t.mime_types&&(a.filters.mime_types.regexp=function(e){var t=[];return o.each(e,function(e){o.each(e.extensions.split(/,/),function(e){/^\s*\*\s*$/.test(e)?t.push("\\.*"):t.push("\\."+e.replace(new RegExp("["+"/^$.*+?|()[]{}\\".replace(/./g,"\\$&")+"]","g"),"\\$&"))})}),new RegExp("("+t.join("|")+")$","i")}(a.filters.mime_types));break;case"resize":n?o.extend(a.resize,t,{enabled:!0}):a.resize=t;break;case"prevent_duplicates":a.prevent_duplicates=a.filters.prevent_duplicates=!!t;break;case"container":case"browse_button":case"drop_element":t="container"===e?o.get(t):o.getAll(t);case"runtimes":case"multi_selection":case"flash_swf_url":case"silverlight_xap_url":a[e]=t,n||(u=!0);break;default:a[e]=t}n||i.trigger("OptionChanged",e,t,r)}var i=this,u=!1;typeof e=="object"?o.each(e,function(e,t){f(t,e,r)}):f(e,n,r),r?(a.required_features=s(o.extend({},a)),l=s(o.extend({},a,{required_features:!0}))):u&&(i.trigger("Destroy"),x.call(i,a,function(e){e?(i.runtime=t.Runtime.getInfo(w()).type,i.trigger("Init",{runtime:i.runtime}),i.trigger("PostInit")):i.trigger("Error",{code:o.INIT_ERROR,message:o.translate("Init error.")})}))}function C(e,t){if(e.settings.unique_names){var n=t.name.match(/\.([^.]+)$/),r="part";n&&(r=n[1]),t.target_name=t.id+"."+r}}function k(e,n){function h(){u-->0?r(p,1e3):(n.loaded=f,e.trigger("Error",{code:o.HTTP_ERROR,message:o.translate("HTTP Error."),file:n,response:m.responseText,status:m.status,responseHeaders:m.getAllResponseHeaders()}))}function p(){var d,v,g={},y;if(n.status!==o.UPLOADING||e.state===o.STOPPED)return;e.settings.send_file_name&&(g.name=n.target_name||n.name),s&&a.chunks&&c.size>s?(y=Math.min(s,c.size-f),d=c.slice(f,f+y)):(y=c.size,d=c),s&&a.chunks&&(e.settings.send_chunk_number?(g.chunk=Math.ceil(f/s),g.chunks=Math.ceil(c.size/s)):(g.offset=f,g.total=c.size)),m=new t.XMLHttpRequest,m.upload&&(m.upload.onprogress=function(t){n.loaded=Math.min(n.size,f+t.loaded),e.trigger("UploadProgress",n)}),m.onload=function(){if(m.status>=400){h();return}u=e.settings.max_retries,y=c.size?(n.size!=n.origSize&&(c.destroy(),c=null),e.trigger("UploadProgress",n),n.status=o.DONE,e.trigger("FileUploaded",n,{response:m.responseText,status:m.status,responseHeaders:m.getAllResponseHeaders()})):r(p,1)},m.onerror=function(){h()},m.onloadend=function(){this.destroy(),m=null},e.settings.multipart&&a.multipart?(m.open("post",i,!0),o.each(e.settings.headers,function(e,t){m.setRequestHeader(t,e)}),v=new t.FormData,o.each(o.extend(g,e.settings.multipart_params),function(e,t){v.append(t,e)}),v.append(e.settings.file_data_name,d),m.send(v,{runtime_order:e.settings.runtimes,required_caps:e.settings.required_features,preferred_caps:l,swf_url:e.settings.flash_swf_url,xap_url:e.settings.silverlight_xap_url})):(i=o.buildUrl(e.settings.url,o.extend(g,e.settings.multipart_params)),m.open("post",i,!0),m.setRequestHeader("Content-Type","application/octet-stream"),o.each(e.settings.headers,function(e,t){m.setRequestHeader(t,e)}),m.send(d,{runtime_order:e.settings.runtimes,required_caps:e.settings.required_features,preferred_caps:l,swf_url:e.settings.flash_swf_url,xap_url:e.settings.silverlight_xap_url}))}var i=e.settings.url,s=e.settings.chunk_size,u=e.settings.max_retries,a=e.features,f=0,c;n.loaded&&(f=n.loaded=s?s*Math.floor(n.loaded/s):0),c=n.getSource(),e.settings.resize.enabled&&E(c,"send_binary_string")&&!!~t.inArray(c.type,["image/jpeg","image/png"])?T.call(this,c,e.settings.resize,function(e){c=e,n.size=e.size,p()}):p()}function L(e,t){y(t)}function A(e){if(e.state==o.STARTED)p=+(new Date);else if(e.state==o.STOPPED)for(var t=e.files.length-1;t>=0;t--)e.files[t].status==o.UPLOADING&&(e.files[t].status=o.QUEUED,b())}function O(){m&&m.abort()}function M(e){b(),r(function(){g.call(e)},1)}function _(e,t){t.code===o.INIT_ERROR?e.destroy():t.code===o.HTTP_ERROR&&(t.file.status=o.FAILED,y(t.file),e.state==o.STARTED&&(e.trigger("CancelUpload"),r(function(){g.call(e)},1)))}function D(e){e.stop(),o.each(f,function(e){e.destroy()}),f=[],c.length&&(o.each(c,function(e){e.destroy()}),c=[]),h.length&&(o.each(h,function(e){e.destroy()}),h=[]),l={},v=!1,p=m=null,d.reset()}var u=o.guid(),a,f=[],l={},c=[],h=[],p,d,v=!1,m;a={runtimes:t.Runtime.order,max_retries:0,chunk_size:0,multipart:!0,multi_selection:!0,file_data_name:"file",flash_swf_url:"js/Moxie.swf",silverlight_xap_url:"js/Moxie.xap",filters:{mime_types:[],prevent_duplicates:!1,max_file_size:0},resize:{enabled:!1,preserve_headers:!0,crop:!1},send_file_name:!0,send_chunk_number:!0},N.call(this,e,null,!0),d=new o.QueueProgress,o.extend(this,{id:u,uid:u,state:o.STOPPED,features:{},runtime:null,files:f,settings:a,total:d,init:function(){var e=this,n,r,i;r=e.getOption("preinit"),typeof r=="function"?r(e):o.each(r,function(t,n){e.bind(n,t)}),S.call(e),o.each(["container","browse_button","drop_element"],function(t){if(e.getOption(t)===null)return i={code:o.INIT_ERROR,message:o.translate("'%' specified, but cannot be found.")},!1});if(i)return e.trigger("Error",i);if(!a.browse_button&&!a.drop_element)return e.trigger("Error",{code:o.INIT_ERROR,message:o.translate("You must specify either 'browse_button' or 'drop_element'.")});x.call(e,a,function(n){var r=e.getOption("init");typeof r=="function"?r(e):o.each(r,function(t,n){e.bind(n,t)}),n?(e.runtime=t.Runtime.getInfo(w()).type,e.trigger("Init",{runtime:e.runtime}),e.trigger("PostInit")):e.trigger("Error",{code:o.INIT_ERROR,message:o.translate("Init error.")})})},setOption:function(e,t){N.call(this,e,t,!this.runtime)},getOption:function(e){return e?a[e]:a},refresh:function(){c.length&&o.each(c,function(e){e.trigger("Refresh")}),this.trigger("Refresh")},start:function(){this.state!=o.STARTED&&(this.state=o.STARTED,this.trigger("StateChanged"),g.call(this))},stop:function(){this.state!=o.STOPPED&&(this.state=o.STOPPED,this.trigger("StateChanged"),this.trigger("CancelUpload"))},disableBrowse:function(){v=arguments[0]!==n?arguments[0]:!0,c.length&&o.each(c,function(e){e.disable(v)}),this.trigger("DisableBrowse",v)},getFile:function(e){var t;for(t=f.length-1;t>=0;t--)if(f[t].id===e)return f[t]},addFile:function(e,n){function c(e,n){var r=[];t.each(s.settings.filters,function(t,n){i[n]&&r.push(function(r){i[n].call(s,t,e,function(e){r(!e)})})}),t.inSeries(r,n)}function h(e){var i=t.typeOf(e);if(e instanceof t.File){if(!e.ruid&&!e.isDetached()){if(!l)return!1;e.ruid=l,e.connectRuntime(l)}h(new o.File(e))}else e instanceof t.Blob?(h(e.getSource()),e.destroy()):e instanceof o.File?(n&&(e.name=n),u.push(function(t){c(e,function(n){n||(f.push(e),a.push(e),s.trigger("FileFiltered",e)),r(t,1)})})):t.inArray(i,["file","blob"])!==-1?h(new t.File(null,e)):i==="node"&&t.typeOf(e.files)==="filelist"?t.each(e.files,h):i==="array"&&(n=null,t.each(e,h))}var s=this,u=[],a=[],l;l=w(),h(e),u.length&&t.inSeries(u,function(){a.length&&s.trigger("FilesAdded",a)})},removeFile:function(e){var t=typeof e=="string"?e:e.id;for(var n=f.length-1;n>=0;n--)if(f[n].id===t)return this.splice(n,1)[0]},splice:function(e,t){var r=f.splice(e===n?0:e,t===n?f.length:t),i=!1;return this.state==o.STARTED&&(o.each(r,function(e){if(e.status===o.UPLOADING)return i=!0,!1}),i&&this.stop()),this.trigger("FilesRemoved",r),o.each(r,function(e){e.destroy()}),i&&this.start(),r},dispatchEvent:function(e){var t,n,r;e=e.toLowerCase(),t=this.hasEventListener(e);if(t){t.sort(function(e,t){return t.priority-e.priority}),n=[].slice.call(arguments),n.shift(),n.unshift(this);for(var i=0;i