From 768ba444a4de588be90c834e4556d3ae887ac844 Mon Sep 17 00:00:00 2001 From: Robert Price Date: Thu, 23 Nov 2017 21:12:39 +0000 Subject: [PATCH 1/3] Added onQueueComplete Microflow option that is called when the upload queue completes. --- dist/DropZone.mpk | Bin 31244 -> 31169 bytes doc/documentation.md | 28 +++++++++++- src/DropZone/DropZone.xml | 28 +++++++----- src/DropZone/widget/DropZone.js | 75 +++++++++++++++++++++----------- test/DropZone6.mpr | Bin 610304 -> 640000 bytes test/widgets/DropZone.mpk | Bin 31244 -> 31169 bytes 6 files changed, 93 insertions(+), 38 deletions(-) diff --git a/dist/DropZone.mpk b/dist/DropZone.mpk index 6d572740a5b8b56e9eae7c56e95b3a9ed5913115..2642676d42f5321206e3d060321347827d37eb51 100644 GIT binary patch literal 31169 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 OTxvi70LpHE@BSZ~0MV!b literal 31244 zcmaI6Q?M{h5T`cu}U%YeIQ#Jkcs~`;w z0tN6t28Irq^#2+B&kgdwQ^e8EUdztblwRRK843WzfAjw>L;YW6|CgT5-Nt%GOR}kG zy+Lma@s6M3b`<&=2n6W3+!CA_0-=ed*@55`lX0ldPvUL&a_ePVxV?%ymkr1{*`qg` z89wii74_pEL?&CsBt88-`MD`_vfc@~>GMg+-Jl-=eU{(PJ-^=%51B8DbJpHLm>$TyM?y*)kcwCNEK5B^gi~0!R?LC|eH)#kL=b=~hR{TmBx|pLHJm$)r;k zd8WQ;s|PSc%kNaALz6FGnl0k@ee5~&d$-Tm1iV(Arg*m%w z(*t##euB%*DD97|{#nYE9~l4dQ;f!8jf!3!zIPIG2^KNQgQ93{UXjIEHExai^ie8~ z#iC|kIW#BApr?aKe)ftySm(`wm47_>I>kWA-c5q;98$G#lV@!h7A+}wqRC7pQP!#)wcDrXZII zyw>|-iZ4KAbEkTL>O$Zl6G3}+8gx1^1jeDzT?--v9Sk3c38!Vb!UPC#f`Hz%Iw`h1 zdDrz*Ls++U7_khv(&(9YFs8iZi4UuV;=}nK?5+B5ZD>$MXmGFx`IO06xhN z8==lMPqdC5#4K#<9mvtUpG)QxIzzs_Y+rwZ}a}Sl+)ent3pWJJ-SM}Mz?Qgn!^KEbcCXgy}PqffwQXO zL=|gLtqpZ#m+~X?Y^+pCYjhdOkwh07!WhT6RSLgbR%lR|9Z~c^UMp)>=2~=Oql)W0 z1x{&n(uoul>7NEb9vz_Rgl=4v!%WACR7S>kg#^|dqeWBphMFkywDQ>gE8n#cj6m|& z_7+71LOJPCdjf#mQ6<362Yc>wwQhtIOhNH$-?~{Q_8?xNNDDZjUY(8AROW@*2<>DD z?mCq4a$K%P7Ko94u%6lZ@XJaoIKmJ;>#KJZ<}|kS*>rE|C?t;SCtlrL-edb_$|PhL zFo0Vw$=yO5>n>dZBwezLE~RGjp5w3xj!QGhn#aus`B@xr`;a=H_08TEF=12JgWPy^=Y}u zns~UHrFKrs^JG&ULzE)ngWdM#x`fWMJA~OBjZNnB$Y7vGVCSKt*-8%;jB@5`8@h8F z8`V#VxBzOnOLzWIQ&OE_swmtr1R{VCkr7wt_hUR};EpJ>#WI!v_88u1Gjvx!1N$+S zepjp3RlH0fNBG_Q;7p#jja$kc=k)i}?B&z+e__ou1q>`1z=K5)3BuU{^MeHrH6M#n zxFU#8YN|RS=f+xub|a#fP~ow!u^^T%dhm3m=UWsm1HyG%UOQ=U#XLC+t@$s6WD!xG zMD7&a?G>nH>{(Zr(4tD<1C6189f>V!__A8;gd6az@q?jPtpIbLLfE_Z5flm}6*)~W z6O}BVff7qmkt!b~&XClwt07ddG7_%P0=JpLO1D_Rrl-2y(n2XBmoLfp6z*NGM>X?{ zA7I!B?Z*b|iZpYwXBHUyc&24f9hs-JhEv@BQ$o(i4#B%Eir>kHhS>38&1oN_UsUEg-6u$sAAk$5jIN8Lh!|1;LNDx z65-My<2s(k^kq!}Tm`}^;M^9Ut^1=j;%#Ga`6gfnmsRx37Z9jjQe{8P^i&8;c3s>m zJH@}z!3myNuEUB{wIw%L;6I%<6kiA|Xlz%RsdF4bEk`Yb8S^i4wj@ab%vbh#Swgh+ z-h37_vdh{Pj@gd$&qIntoN|)~heSA1zq3ul{jmz9*I<{$`2&JdpiwkMf~6N-4K*~G zK~n-f!+5Bq<)ZBDEyr)>{q4TQYO1!nI!|b6DE1g{3C>4ffp3%x3}aUda9jyAKym59 zsaz>WG7;G>ncdud>Mx~u4oKtO(AJxY#n7tp?5IQW8fkAoqQ^`nGyWpbPetHwVm9xo z&`&fY+@$T)6uDd%k+irCqG zbwlWleIJp~?AzyYQTET1z zXlUrTte}0x*IF?h8cfULa(%Jsbqj5_tPF1Gu_%XS{*B(xP@9K@R;46S z)5&51nz)W}#0w7bt|NaPRBjphfY%wMxA5hYoNAFu%~xYzr0)GYOUe-|at)kuI9mdT zjo0pQbd-6FjbFxDAY0mRr}H~YQ^G>bZ#l_tZ#I^ItQIZ?VI=IaQImls*`?=lc+EpuHX~FsGhivWvDIaQC%P>mK-TL9 zu)CB{oq1-48ycfV!&npXxt(fbm~GX$53uAri^&TGHBUpLg(ai|q`J6Vr}0Nd_Zyp% z%7UaZ>&fBN-!U4rk3I3~4)~0>b9HD-WjJEF771x)4_VbyyO%b$2{d!%=vFxxGPVh3 zC37?V1^sIn2w+Lx-ebDs_^4S(1|z^fcT3(@O$RY54Ia{sRVWbOXm+X~xr+RuSzt)> z)9j}N7UOZdzt8(&X)~0)PTp)F%BnhmS_F0b_YK6$L!M#00I=4ZfPvR%Q!H~+M7s0x z&9(0nW1$f=DL+GiN+e7|eTLRnu+*LBLoX&oI~Ng%cQHw#*^9i<(WNjvEGBDsLooNj zx`>B(simIq>PfvIz!K1uoD^K48}H&kqGzG4&Wc=vn`Ulv#5v z9AW39@**dB+N*aj;LH}K6ZWDZk&1L!-;?ERseA?mI|yDu0N>qq*|oE|7PP--1rpeq zlVQL_n0{FkREZ+oNoBMTNP^IuhlMsFlZ!M9Gv|NaHf8lS&I4zvw{Lgt)4g zcpbZvwxo+>FI7!rBXyrfiYbgqn>|(4lhHB6TOk_P!*F=d=GB&O-Xr17XD>E}3rkig z0Z98Nim$;RJ68u4vvE#UFf>b+E8at|8BleTib<2qvLQ~~U4WO^jK&u8uS{>~Z9!qa zUO(t(75bQ)xc|))R%_;Sn2>jH)r5Szbg3Pe2|D?x z@^dH`jaT}}UCNM*N$f^|rKji;qttK^il$>u4if$D6eVmU^sLa`ocMcrRMHEnH9rlQ z)HvU$st$I25Js0Imx8?OmED|(oj38>i6_hv!y$-U-vuzhMk8668g}4pxYDl46bp@c zIfgM>*)0e-zn&X0d_d&*`=de0V}CW?&9?x^5MWCZD^|PtVC7WayHfo3w^nacc3zg5 zCev1<(LoHCg#k4*vy;eG`vmY@V!46PkJAf!j9*iSoAG)oCL%GAu*##<2|`IL7Y&Ty z_8yC~Yyw+t(NLCeS3p`FKI6uSqB3W{JvuT1H!pbj7#Co&OQEbUR(J0@dl_=S2J|u* z&!W4jG3Y}}Kx+?0#a31iio)1x4TN4fB*#5-+X(mEw2kzz4XyL3U2>zWfch7=zf(Rb zU2UM9#hWf}THc?Ao6R`yjob1%7~yac8yuH9v{GPuFGs19 zsR3;osXSEV$)N1ESD$(a?C#aual$9rUnL9IIq5_RpK&JL3p|)mREF&^1W*=t)VPHf zL~u$oT887tbqFAeXiMYZw#oVxBDsvLz5$f14Gx4wFKSCcfX3ur@e!`2bt5_(AQ=ZI zr?1uGA~lJ^=ccF)yu$fx1?T^*P@3gZUJo;4gMo>i=uh%w)% z+Kv6n046izc;LO5i=ia!i6GYAB7*vOWO_BL=|1&@9as$vHw-N%+t=C;OBZ%SOPTF0 zbd@iQ4k9|=OrQU~odnz%B7qMifInK{3=}F-n|321zUmN=DhMr{(|oUcLskKB`c;*! zDMz8t+}s14zGZi?g8=L198R@{neX5|T_&-_R}tD=gsb@d$aVn4AKlKkb~Vjl-brH4 z57V=oH=9M1-q+1jW`1>TorBkF-Pr-x+ugn6^FHS!an@0%+`eK}Xn?E1_xp(H?e}@4 za%1CwE~3i(*WaG=rSanWHPaZ!-1*1S;I#;}XFrYa`V1R6HavgRd5SxD#MSY#!&Ph@ z=#|GZz$N5^8`*2C7q|EOs*GvVn{c{@t5t=^fB6k~`tb3cgevcpL29-yxxd476RS@b7H4j=6oD!1$M(Es!%+bDOmrAob{-sQ>nwC(5w&E|vs zo>l94UJJe2@of2(RqS2aM8#fv2I|sAiBwlH*p0<+BWJr?M{L~&$>xy=n$^eKgD7)F z@ab26+4p@S?)5eLw`uYroMKb^{6}NTU(bVcR}|@|*{3SWr}}jfXD{!-yBHC8`uBM@ z$JMO!19;n=o6QrOy4_mSeeALNbh~bMafqJd?t(RQb4X9`G~a7|`SN(stFMfji$xSM%&!fD4dLS1^P_EDi?r@VThzBl- z;?@`F&Rg@XIX#%v{}%cs^}=h%@AlbMP#adP`%Nw3*608H{r>j`_DS-&W8dkc&KrG% zdt!r&32yuG7z6qz#o|uIpd?y+n z-t&FZuiRT*`u4Nbnq8jzSJ#m$uvPbK!7b^7*OoZd%B8M*@oQGhxW>_a>w*foZL7NO zr5XEgxhNmuzM&b)RhDP;PL%;Aq~$hZ*QRPZqoaD6|aw%58rR^ z`1Z)ODF3_7ruSRmEF#V3um$Do>&Yi`#eMJf!Tojqs>-2G`=kFT3+l#9Bl)8*?r{qK zN*jzijKo|G?x1ugC|^&Jf0yJ@o!jFZ0sKl-)w z`ULyS{iW0F===O%U$=rCCHgnOVVmS#%fSb*>DwmFA7`T%*Cw+)dluXHTKiYKLmu6I zOS~WI?kS^)XZUYThJF~EJhlgqC+vn_CRB8Od1zh09X!L{>BN4V(ts9^$CZf{tnZvm z1Dt}M@$~0DSE?u%lP;_>9iWOl8Y`9KyG{nR`xwudkQY zW7r?4f;2cpLa^*_GztK~5G4S>|G=65-_#S~f5n+@7A9t<&i@5`|`S?7YxF0z*(qwg3{XV1=$O9$RxaZXe8lOb@@WKeL>w zJE}W2%<=d2#Ef`rC(9jsmFasPx}}n86{ZP&v@Q(_s)|<`kuM!`=#OrxcFzBPYnyB| zg0Y`!=FL8hsJ(8d?RL}mIHjLV(~Z8UCICw3`&K0b_}S21g!&%j%^U*fSopb@KyM0t z*zG93v(Y|Y`8`Tcwt9H^nY{c`iZj_LTlQo642|zQS(?r|DUx`OHs*qk_L-USR#&*_ zP1b^F=#X?P@!2IyY%7vn5|RaUeQK68(EkbJsLe2r`SEl8jxCstIQ>B&fyfBe>@L(AG~=1B-FZYesAj$o;&j_N)PzTr`yKToN^H#Q1# zj*M+~X@jJGm7#TYY^{5Ma=4!Wb);eQs8QCbP>s6~Pb;(} zcZ^GFNGQ(iUu3c!9MG&YtKSQ=pKplE43AyR(~M%W8L2a0rMV>u!PB%pxp=Xm>uR)i zON&|Ygd?7Ca&f{@7Q5c;a^)=1>FDx4n=%{`Lz}mg(OfR&A^X8INZ7Orv!URwntEtG zRwj5bGQoEV>bG~TT!?QXrbKSCrS`F^o~~_+;qCV0R7PbXS_Ue4x zFw}f!^<3!+7iAEMnxC?9+U0{ydcQf#bDZ&yItbSP4N}Elc}}v zR21-{P5==N?SOKzqx7&bdW|iW!GT5t8-LJDk?;?JQLzeiISe?nKcD)Y(lm0RgNTSM z?pF{LK?h%BLk5>(&{1&)+A6Rk1YrHRhEI_^PRbvpqpQ7_27wKj7=mTH0Cg989@ z@o@3MPk$pPf#3Iokl0dKsM$kdDA7p*y7=LhcHr?Qh^VQ465kk!$YY$t5(g0xphqAG;JdA!~=oMV&rWj#o$8-B; z7aa040}7RvDu^QzyrM}P3$Wq>OFN`&vOrnu>Y0yt3p;5e?-9Bw({( zAO3ugAS|6Raend@EHCmt9-l{9RhyY%k=W~WZ0?yJDabW8+%#76kQ5x(0CLV0vJ}4R z6Bq?_QN3>9ZDB1ZSdGQ<@QSWyxbQ+M6uIiS*K2u+66<&^Q1E74tv3pKHWF~?@|6zZ z3Md!-VYy{p)`DbbAzci*llj1nc?sxg3zklk>^x@r_~I-8l|e$e+EK)_ANvLMt__VxJ8wXCGNdXRZ)Bu0V=nAR zVNoCfkehf3h0uW}%cw*VUr_eaa^?_A;-ibYJbpghWEjce1Q}y-Tc%%PF20Qoxq%3x zinL<%7kxnV8FIp|GNovEBKPv^phaUBujVTYZQm+ND>3@FCnW@Oe-OHKJv6FD^&?Ke zpEJ#z;Wr9^2SoZDrGW#J>--@H${0Ojjf#>(C zTrTR`n+WrC2$|?lJQ%ob*8Anh#0+gS70JxgJR6jDT)5K|n?F~T(j=g37vx&Cmu-+0 zWP8y2MH2o;s2t^R(&qhDT77YF%|M&e^5r4)>HLv>Z{G&I2^Y?m?gf%nVo|oKYt2XmJy-ghiE3DT1|=7pUIM{G^U*E%)(2 zPB0>yK8}iAwh4*E{h?lnPn^9XeET#)u~P3mQTM7PS1fe$EuPX#VaR=#qu6_bK-5)| ze;6x#HN0l$gszJyT?0-5(_RY8%vKe zUDw@8eks@7k{6Lt#3hM-n6pjM$(Dm9V9JGvNnPzjYPHeEZ;qBKGO#t6Ulsmuq!}4RY*G3y3N4 zrK2A%u>gzc+XPmTiqrE~%>N}6uoB8=YCMOoC^0pLn(HGPqBAu5T5alK84pf%l6f<+ zBiJ*LEa7d1MNC4n6Td3#)x~GRjrQqD8`te(4a=|_qXx#g!)#4_ykWJ6)v{uJZ75pR zf$$_xOBX2-X-2zkDW>SL-Kcx~R}*>vt;1`+YAzBZ%&Qm`qu%S;EFYkYm!fZN`2Dyq zz8ZEW6pxw8UtgoiH0}(ZKcr6YYDvNqJgjb}^=g?&3*#cE$w+CA$k@@fTxj zrHFrv(5c;bC2JIX$d=^QXY&xHq&xeG^w-_3@?sMV;$m}}AgM4cdf{dzW}wV=D+nFI ztksm#52hEc*{1GaHvjI28QwzY2Spw<%&$113&}5e931q6kjZeHq?O zTfUt!IOA>cYgyN!a@A8jO7M&b!)(_H)`o~G;_%CYi z9s@pleZY;Y1Aeitxk0v|v&?y)w@x|Ctjo%xqAHqaOsg~Pp(!E~q_hU}UjjcPy*;V8 zqVxoMd!BMZrVAEiKls?i(^+J<1O2T7(Z6>Lm1%k%gY_yz$H9EK^7|jKVnzt?jqN`c z0nPEhgBAbLjQ_`?^*>>SwT03D23X+#|J*S7&*N?Thp@$}6%_ZNO_ zbECmNKtLz@rt>+7F?j><2yk1Km99=ZA9x%Mi5SwjZR~67&4-w%?o2`;#j4Hi-_l{QbohTOI$B4EMlWW{p`qce8Y4FHXyM*dCpNO__r84zA3e#?fr*Mcsqq};?)Rk< z$A^mUOWmwT@M_M_GFJ~)j;!Y(-#ph1C+im0y{qKA3wP2;=T&o1=Pg92kujVkH=PHI=pop1{3;5fPb4#OhI}NSrfa0jkNojXXJ$lnr26Bt*S7~WC*V2@_^p7su@_|zJum9<=)|4{lYd~2 zegyqu(DlqmGaH7UE-c8A;o~XqeQyLDfcB66HMFSl99Aw&)J&)iaaW6McxT-{Pg~Dsoc$#k1~_oY2;DK%cFPwO2#w)Q;!ql(~*8^LDY_i ztjz1^up1|3EHAQ2(TstzEC0Kk2D<+9xSN@a`izn(2XMF;Cq~iGo#)~itY-id z_UTylF4<4|;_zg}p^u#}kG>OON%8L8GBDA&mxmI(I^>teh$UvKw-B6y_gU~0w?5gi z7~LF{C)$MRyml@O-6GC2a_wTp+`m+iWI4z`E^P6!>(OM8{d(l0eh*)-DT{nauuU8* zHqZSZUV+G&`+LCR$$Fe3&~ym&Ao_qfrfuHnS&nZXN9lAzsCh3t0@p*!6)u;z3s0^9 zoo9}(V8Xv8k2+3I)$q7nJJhhREpdJu9BWkWu#u^tpT1k3El)KTHn@lFbb8-SPS4)I z%W{E;pcr)VK9sMmk>z?hMjlr)R^sKJB+?($A z2KUHL`q#L~ot&N=VgSBP`t|aFtqq}_8zZ|bgD1{>JD#159nMcvJ%5`!oF0Pfo1Y+~ zBKHml`{t$(OShwZ_m9i{livfhd3UgRdRIMb{QQ!do*Hy<+U97tkyZT%1suM;^&L|u zAiE<}Pe%crsF|O%KAh|C_wRD|-o7tuX!<-`z@eD3F6~VmuJ(?uh9-7>o~`w*_XG_* zlrR6{9}~rq=J$&aH2tO>*l)WhbF)9tuI7%v!*hVRr}Kw_gu36Q*@IQ@28Vhli9>7r z>pKfGNuy;UYJlKQ`c@RA33`wx9U(-ddsK*hd#YR;n`g^5w?OUJhuvL7$*)G9ZxKfFQ0v9NKm%)d|?dtqQVKf9(sO5ZxMYC;$9!Cn`VE{zKWGo zO;=mEN#uIHqc`m4{Ji4}Z5fE#fj}o3O7cl$Enk2Wr;)UBVgQZIxtgg3d!}QQ>w*yV zJ-Q z!a$nsE`Qsqr5jtHe1&;2jDD&2-qLw{1KKsg{$iv8O(cxdh5$&?k`T-Km(*yk+w5-g ztta-s2mDR$RJEitJ+-lqm^V8Lg^+?F}F0&my{srutw5#UW+t-T1?NUgX&MO5O& zI6L)#m+z4jKuFZciz2-I1<`#im6aeS6K5vxd^bK69s$+FH%^pTJTRUlSBm~PIQu#| z@cfg%)ndhj0m=C3YCn^9O9uU8T$PLxSUHS4?orY@I$!N5zH$A)ElcK~3!fBMFHgph+jUU# zy}}+`168RF`;nbgxddQm!>Axxb%K*hffFzK3E26q77E+3Uh+_as(kloo`I~KXg<2+ z1tt$L&f5cZF70CdW2>bOj5$N}tDf@=t%RSaeyIys_~^gnrA~N_HT4j2w@QtHrchM0 zyw0l-4@aP@4g4b~ql86yEgF?L9hm~r42QwJ0apE>@3*A!y3=a&Ja;BOk_vlto^CuO z+vGkKHGr-2Tt@|JdYVx#J9E|PGsHgJ6?U-ybMC;_IVBddE=+xd!D?w zJ3+7`>m(OdFF0LH&h9^2BB5H~z<1>ZTIV>^F^&NjfaueJ5BR($`!&VsaunrOsN5M! z7%f0C793|~MeVY3IjX!1DOb1Ihkdig>Ib9$tgWhh&I+<;Z_&c%aEj@|GD0%-zSC}}0 zep~<{xA%8)X3Hv8RjLDs;ah!Rr3KgLyo#Y8eu&h-N&uU~q;AGpxvxq1sV*}mU`_WG z>!@y!M*xc97vC*OmB5k%$!-7>Ls)g2cH#=eG!r>e)gHe0!G1PSb22f)%T^1~_l%Nl0Kq$(F-$`DGDb&Jd$IAoLN<+E4 z>71AET&6uM41IWRU7nm7q9i4;j0f9;`~@%h}4orcYqS9AdY0R_XUqVu`-p zLAPQy`7`zy7-KP;gJjzPCew)EBsV!4wa4W7a$ROOaHcEwz{A>c0Je34(iQBu+DL2V zo2pe*TUg}Nv;Cd-(yySC){7F<)*&iI_5apy$UI z7IdUbC}C*zvbR$aZ;G<{Ju0IGQ-WazUWl_?!=mTx$9&I>y5)Nk^8Ed-L3HS2^LvX| zd>nL%eg!%5lUz?6gUtf2yJeAhGTZQ;R_N=X5hV-I&~8cA>3MD>i(&wfcLttq+rTzRJ;h<|8d12ey#f7* zq`;(Y(6$X9xsGoDALN>8jL~f5L|;czK_^4V818;7gpw&2qaEVqrAS$r04xKrc8r-l zRu{qAc#V=VgyNw3{sx(?oCo)Klb+#j!rt(_%49Rqo4|}yI@F<=0APEy=b$090Mu$I zhu2~h?gBlP{wgO*b{dS=YGG|bsi;_acG7`I+9oL}B+JP+`r7bww7=0Fgl~6I2KbD& zmBuez6_Ny>L$5JFn{WZ!J$U1c=LT>!c@pv4Z|IUmhO5i4X%`Z0f@SMWJ*_v+GQe`- z!J?E?8Yn7eA?P@RD#Y1NNFT__L@ObuL#nygELR+(F*xudte=mPY7$dTc2RK=bs9ZY z1i-N>OtAJx<9|oYG&Ht(KiwhVOanwsP!Ld>RbUYx>wN5IPh74NrenD>0R1FQ5gvf* zX+Awn77MZ$n|6Et!rW1b)l+Ukfu2-YYvF|W@9BhAy++lQ9!FeKx_XEzPgUOyD6ViF zXBS1)))J~Q$z8+-(L+aNL0ixJ^%qXC&CZyCkfYDYY{044q4pTVF|CPcU@IyQnFg=N zAvM`}EOOuEpd3xCTv$}Ck9i(=2FJKr4>YA5dUEswiFn6)8-jHOh2H}{G=|)*;a=m* z-Ns?++i%=?Q+1u1P(ztHFNu$^nIyOhW*jpCx-w%ip<@FXI2S~yZh4#u!+!;i#HM<= zv5Lt+lGagdM*_joId}BqLt^&B`5v|xr7d>*=fj#0$J$#=c`(DX18+On{f& z=}rX7@r(r36Mb>#U|p3OHdMD0FDQZIRB!ju+s|~_)8Tb@N~Y(HfQOrMvPTFXX+*&9 z^Ew7DejjayEr_@c*;ztvci6B?2J!czKE(Zw{` zybK=c@-9*_8*U$+Ac^j$e^VdoOb|HEfF?Vb*}nn(#oh~O$f5XXBv{6 z?yq)H9vp_LXg~|1Mw-gfA_B96>Wpl)S)PZgQG@4n+wp0t3bSz!MVUIkr`|*Bhl?O+s_AnE0~y zRMeyEkKUWqBqG5*tD{(Ikpp?r z&-hRq>9-t*NungPo>|WM%&~byaziD;WXfYYNPLDM9N5F%z&_21=keDJ5EV^6Bz+B{ z<2pOcucaLNO+2KSysN1gmrGcucYABcKvy3~n8iTjbAkLa%(h4NDBvmov{uTUGTUr_ zE^b3HE+8SuN!qarm6d}h)w3`+ckP9`L4eZ`)|Lw7Rv^f`o<+I8)y@jb0Kbw*7B%+@ zG6-*cQj;a&j0b2+Z&U`pfQXtvBr4k)-9RvyCMVi-3Z4?6qYjiV^X-p55`xH>!(IMQ zCaO`^g4=xItyDCvKy+`-T+t@!Uqsc{=gpT+8W#%7CXGsk$Q~vdMvrJYGmDwtL8{&EqB z0=o@vK17qquyLerHY^@Q&c#F%FVNuK@X-@KkxQ4VngVomfRws%ur9 zp)wGSd{mqgHjB`^YjO2OOXvBMDHb#xhC0)eIT!gqSdzUIZ<-%lt0`eNqK*6tYp?m~ z=6-nop;ywy#3w}9n(%BK#FWGPM1XciYDyf*@H9jaT^z$PoHCrunXcLX4G01@+eEU) z3;PI;b2VsQF>Uz+d=c)Eo#hi9wBVC36cP<16RJh4E)2+7!<7`N>T#Q$!U{1aWd9d3 zC6}Dy2cC-Cv-N#3Cbkq<^>UbNaa<$FpmRJtx5hWxid@#|dDI9HfTtu!N=##~!?qYi zi*2p(Fi3*gY{x|njRkM4NiSs#YonGm7_7B=IToYAu`cOc63U65dy&E`0#TEv5hhHh z1L+KDLJ&h!p>+Fet8yXsc%i5awC9+7bz6r714I`c6K*Q?w$G?F=!PFG#42AosATAN zIl??J!2EQPDpQhSLC7x#eH_0*v3tUA1If5we@56snT!>)8Bz=WUqdk{QK3=rKaYS9 zkvP@E<>fdYFc*G8vJv6cJEqE_fe?TUYECqxZHX~d6N5edOP-J8SA>F2lKg>( zbm)b@+z4kP{f(g}IEg)+cL%ipM1*C?*opcZbtnRoxca zG(?jj2edA#4w>+Zi^jk@ptAZo(5VmkA51aXgy)u~g>pq*K>qYq0HwwkDw*IY9uLl? z;oHs^%Zf`fXhgB`mAB-wAs8-b;_>%`;5#zj%Y`RuPpT?qo{b#4n4L)9^tT?!|b;M{Mh&CNU za=ovIIux{<3MYBCV)YLbtto|cG zubx&n3!9IYUk~4pT2~K`MJeJ}S0n$v46Q6YUKSoVC%+#ptxgU;k6v86%KNpp}P7b~wJ*{3AK8spP#KXVA>cgz!95($- zA!VzpYil_XtTWm%`9^LZm8@ENI(uKsdHW&((}@sSU{V+t$)j*VMMg z3FbZ5^}MaTWu>@$^=9gN+-~oY#HN+u)umq}G zSMlqB$UPt-rlhAv9)(qef5P0MA#O^-;?@M)R#4x(@K{=qMourO@@s-bZaz+2t#D1W zwQbQKU2hf^H$T0<9H5X2aY z26pZP<);jIf1A^^;nmYt@%VM92j4spAl`$TeyMXe9Sof_8t>V7Tx_|Ais=n#{(`J{mD>vQ(R(!^ z22&x2=!|s4$Y2D?!4;KRdk~Sf&}I`K`AX|T;|D8c0P+vP|xEv3=4)I zsZYh~#+muQvjd$rZ3xV~hJK1&xUK4Y+M~%q_MPF>FkF}kmBx5LYdQHj+~b7_ zBTn+_8_2w2A{X52)Zxk4>l`Jw5yP8 z77;!CYR~HcVW%$5~Q#s1@^Uk2^W8Y} z;pO(X`Ny4-dZS$7CM;M$tu{qWm1mx|2Zu+KJ1~Xx0bSh7uVCRN=4ircJt~EnyYR0tsnag~0--Xu%c1p*RVAiquzKmJ=x;>ppmT6=tTr-MZ9yWm%_>t>9F!lWX)|-`Up^wl-Lg zFmJw=tAi35-}gx}SjYLnhQyi(BV`WqK@|7);Di0R*NcHtOMK!GB---d=&({JEB3f0 z1iS=`NfOxINq=ImO7O=>y}L{Olx{pc@B69cNR^PR8=I$gC?}Z8V(HhVyxiPqztI>X zp{)eUn6NwPEjPpBxKD)F+a1sOSB(Ng_wmDyEo9sQB=Xx%jXa)IsLSv-2s5^T9@Dls z{MeLl=E|_-;`3u}4WtWefx!P!**OPk@^pK?ZQHhO+qP}nwykMR+qP}ncK5X1)7?9> zzrAA=hTz+IXe|Swz6Th2)tYyLyG4V7{R}VnPjGOj;!w2 zw#CaF&UD?SVw~X3I+7F-B!!~0ZY&cbn^D3FZzM&NrYf=Fx+d{hwJ=IQK-kq~6tdBD zqGvuF<$;EvrWlKYkWNM?IxQaiXUf*Ik#bclI1e`a;zS0M$G*#4*5xN8)l1Qn%Tq0J zlJ3Q@;HNAI8k-4h+d|j<#K14}mk>OvltT*ZYC$L7cPT};AJ5AP%kBVT(ye_KlzIfu z;HT+FnTxRgtwUiMZF}sr(@HcUh7K=lPKP*B zCuhO};7ppYFttzD(w4F@?Qog6e3_3kK$&9<)nvI+Wehzv@ls?OjozF6E-m=g{rxet zeNyy}+`x&WRp)@93yUA8F(V4W_~owrHNi0c>*wh%uhBMeIEUdh82^>PrA@)+&q)5i**yYWf>h(*9Uts7IWJo zTzrQh5P66q)5KzC#m>tD#bW?`Ni{+E1E<)EO)EmME?`)!LnQ{b?1&`#^ci-XW6E)m z0^GXaws#f3!847-b|IKe@*R$yqi}pTd2my228`v9B+DS7_Gj4UoO+|Nx9(ijWM#5I zksCRj7lM$omLg^(fvS`d4TNf=)BFL6rq2=@oQT0DBIRR!3*7set{mo~7x2+;6o@TY zii}&%UT#4rDnOB>o5~1j8k8Pz8y$+Sxy%O^C5s-OCs06@utIgpN|w?Xz5%CzrBQtjZz z)g`Kce-~M`yt~SBq6Rn&*rw$ADKM^vWgQA~36DjYl0+?s^OLYkSFX;X zJSeA>aFCUsVc?i+OXE(6dMO*&zGltTMX80Ubv{@R4oJh7GMohU#Qq6g22H zwy-H!#F;jT#2B@IV7jIlCrO5s@u+G8sng`12Yz=Q4TcO;C)717@zVYHq_5LYKJ2?w z@7fENzB?mI_S)ocebF8Dc#}%#TBA+S?zi}nU4f4pmM+cTJO~|adSftX=}C0<359C zWPl;l$oC)y%?>%jfhkgPa7PJrF;Fk|o6rW;NPe-7e*1VhUf9c=$D3I5uxRip=_Z3E z+$I{6>0S%oz*uh|3IqFU>+}UxlnnxkR`NXNJ<`7)e!1r>+^+ zYl-HIAQ+S!`{_8v`6QOJnBeL%j zI#_dulzpw1U&WUMRc`GqJ`;y0clLO^t*0*Am|dK&sbk^cgB^W_LP%{5+{@*if>%I@-#-u`)$7kdO0vwD#&zaV?AMjkIq;hnuwm*J0Gc)~S(b;xsq`%fJHe&8j zs*@6~#Hyh!TN=&P!165;*=&S%K`7qvnEvewY?s?@DeyTwKSu`82$@pCAR_@nu2!^H zsz?b;V5w!66jd5(E*)7Y4An6n)q22{(PQiAv)N@tdf>f8s7Yq37^322+6%p0;tx;S zf-Mhl=txF7QAM=j098)Mbk~RtvjZ^(=yB$^Hi7}*bF9z~Z8}6|z1E08H{9QImjfX4 zgpU~T<>IEsE$O=Odfnhxxss?%2b~ZTLE!;B0VMA>3l&F)qgzBb)Gm6DD379(dTo-z zmTnOE6A}f6G+RXF=(}h0`(uY~ss6*Ap9vTs0{jG-#i5v~ffayHPDck3dD-~oXsJjC zXWzR71nB9LB-^fZ1jMC4QvPuE&`zx$!VHBsFGAElAS? zutNn|HvrDMsCr)SXc=*Z$Qcx7Caz(a<(PDrWK(qGY3{tjFBvR*JNbHJhYN0irpAjR zie<%uRW}mB*?9J`T7em4f08(jh6yF+j#-tgNt$n{pQrSmiZH7r;v`yv8qgS)Fw+WG zG}L%cES!a~jH03AQ1xjfI@q!D7ebr8N6`3kc?QE0yBBk;viMy$iz&Yjxw5W0CjW#1 z=VIU8JN>()-z~P9VFz6wYDk+OxFX9@u8v1(-W`Pbl0D0ckA{3s^GI9=T@V4Hze+eK zWU5n7zGT`|Q$ zL$NA%zj#eIA%=uYJfgnHGrfd=3dlv1x4l21teO#6GTPlI1~Y}1q2}uKJM!r3y!l@a zG#_MH&~rR*fdlo2k2q=wFZ2-cwS7@`Bj?JF1J-_s%iqkRzxb#4zZ~uQC;G?V^hTPQ zWV%=anwjPIl{b27wm4aG)d;KM6l;0ua@k3tQ2pG&bGmAx3tufyADPd30h&dx?DC3i zrELZ#L=D>kFZF+9&uqJ zIU$Ar^NQGOJJJy29s7>48-ed3_$}!7#s-~NELM~c$l|_F{NW1InK_UXwFy~%*G&?> zmYZ-4Iv@cMW|PUlghuC@k8*M@RsgB%zDK{nD6_QUKnaZ3&}PDd8*0f6Pr;j6Q1|de zcqb(zy>U3{a;6K;hD}iPc$Y@<MGqW+e2m76${Z^O2Wy@nPL73Ef1*K;fFvBGXP^!>Eo}8~#0H)nEC#NjaZe${?mgBpUGoT^iyJyA`ntsDzcU6)1XwW#Xhp>9~(PeVv1y`EDiQm2Kl9~nvRk)tv>jnD0cpKl1Hgyq{a zP>JqiMtDhE2OAViRkH7Zr8ms>J1Y&6^@lMRE|J*KOM`rhrpjy$G~zLt?KRZNw_1`J z=G2z24d9BgjXxnhP5Ze`M3o(F*S!X#Y%35B@cb%N@4Dlu5J^$o^@^AM&UZ$5CVKis zYhwu);-dXCN{0z$;kk7FmD+_3FfneLs`q zkZ@>NE%=y@$ZRkO8{g>D4_`jUym_>tLiFlzU&Fo^1MLp^B8A^jusbd#87vNrd~|+H z5>bn1Yg~i07#x?8#Io7FeOCTCnK~he{zf=ZCv2P3E%eo2w=|mrVwq>gi(2mU%zjA^ zN-|c_b)zT%U;V>WikgU+-H00I=Ex~ev&!&a(DIuAX~u{{asZ8N?IedR6iV?#z2Hy5 z8#DLg>1kSZc32H&)dx1y6$*V?6|i$d7iLl`sZp+K)oM#YKr&UM0?=`{P=rQpSeU13 z(A|yw4k~;%`$K&Jw6Wzwkish3(4F}jI{PU8$S->R^wY~DpK9Bw;5CrP8e(QI^YH2~ zLf=x}r3n-17^VbqdX{~=8auR3)QiR}pmo?^k=I7WE>aHDVs>;d7jX}vYRXzG)JW`# zD%^!O(ZHxcNaGdK`sxvA@qu0bnudkaNS7dLrXF+to9fy~%O;oAi z6;3?lc_#`gw0LgQiNL%wZp+oSW9B|Vrc*+bv<0PYvwpN9(j=KjwjyGnLaR93P9+h4 zOYk1T5_9nm2;-C_(aUM-?UwbjhmjS_L^8!X);-uzMNx^mNfmid7BoX{7Prmk_)!1cgx%2z!#vR0( zUSD>R0?TV$c@bQg1>@RP0wc0j*CeycNUZJBx2%sAsA*Gqa288aV;o9UG)a<1- zcdnZlU$c$F1{?-g@9^_t2QIAOM-&0+{|(&&@?Wk$`` z9j!?PEK{Q+Vsjz>>>t4DBXRh<;?2rYOt*7_0%LfNL9 zicTcFIX3Wp8*aITaSBy-QBTQ^Zl4{B95n&cMa5lWeez;KO1Wf(|v9sQ#60V-D z>%2q&uEG-ql)xgcNZ;Mm#=zR$8;nrXM}^lqiett*+oCrgO;(crsV%8(VU#k)-q}{Q ziROv!%Tl(UnLm2(MP*Gzb!&WT)*SQ>Kq4N}<_HzYrKtSjsKm^>P|LV3(L`LrdyRyw zgu-(c(Mg{i$?uNUro*#fbD;wE7-CCevy}8sDMpTl6q>t!eL9s8X1!FGUXyLr9891!?L@&o(AC_vh$zJ1E)PTwsw=tacQP;hZ<~yS$FmqMMk>q}Y11kTa%UP9(Vjdf^OdIMSe1S=&Nylcx6po;n*BzQr-Tt0io{f&=>sha0Gs zBg1cJ6l}CMci<{A9^*Lcmn-4Ei5CC$S z!`z}3eN67qIFja5MTCco1t?_2%=sL$Mzc=km|RVZ-7RnpOfWdlRNOssZlAbIv+Wqr zEPVI!s+{P+1S$h1!X&9NU^$jvo1xkNF?JY+tUEp8#7<^>_0Bu+U%hvg@Fz2 z2MtSE1LnyY3gcL@SC2#3phT%BXi^*$kvtEA*rg&81V{M&yG=w`?0$Uid?aj!E4@pS z%rGvFn49BLtR>HmXR2wTnhaBURoN`dB11vF5!ev&NPlZB!HUPRUb1x=<@U*!It(T{ zIG*Cdr4u!WQ-4ipyt?CZ3z-Sfq0t@0x~S>MVlLM(wpknQ&$iWv6UO{wM4^!eD*^c! zfYR-T*&cUJ2X**h^;sMvLt@ysJwg3c#d6Q5Tf``)Zw-PghCyPcwrs*ZL63pTV3E3r zIb6vimpQ_Zux zrU3}w`b_xw4Vv-@~238#~)vr#Rm!uPv$2DEIEOSF2iy?x7P^ zsKFyrQ=9Qk-4j2w=B~3FSrLn09&LxN77a!H;)k!EkIk9l!Rw3RY8_tRd{8DQMjt$q zhiUhgVxXfI90&-n=B#UI0S2#4n-P?TP|R}ZbA zfK8^Obi{ikAS4K>hf_#!mONQ7qB{)>cX?Y25U)}~`C(2z-c0GPq_{YkIUza^hNkTp zUqBM;wk4i(?n(^0r2xZ|2ZOoi?`9srbsCO?#bfSinj8v?SNIbdc8Wb@*nkFJ9i6T zX4F!AH2E5f2+8jl;w2$P@Or&WvqKUh|7L>tv#G@!dEay~=7KUcHc4{2K+IT5e7h}r zpu(0^Nkh?E4?YpEr=3Hi9}OYV!O|w_#qWFtlSf~R39T#Zl7fhXAQfC`a8TlxSc=hS zhKPPLUB^6*Fg%K5iBK``HFj@I%QDh@L@B_Jw4tPE8xCtC3q*kqg=7LDom8qmy&f^SKgY0rKh zh4n>_asyr{le+>St_?rk3>9Oh$PkcatVRNrwq#gT)k*A%UBz&t_B|mdydOVeRJM&I zK=4Syo+jf(@R(Jz`WCWA4Mt#l~+=tDJJb0DYmaIEerIRKf*=+ESpa7n?i`Y<2 zSotwVl=uuWe>x=@nf3&Tg^wJ@%xWIYAxBcaF0Xgv6oTnA3tQUx{M6ag=FGXak3k&YI!ea1|4FyOZ2YL42Nre$V@4Ee>m* zPY`hupAYmwz6&E!=#DHNd(v?SWd?SMgNTL<&+OV0L<0;-$r@NL(=t@7HOHu%lA@Vv z(aJ*SrDj>W(9%Jcn>j^-DqL{j6N~ozY!aaz7+Z+R>hP7Lxth&!xK?B=(eNG0yV4_K zrLiasosBO8%?TxHObm7usVsr~US9kb_YIw%1X8yIX7aWz)+PDyp#j?k9L&B1l4DF6 zS7Fp?2I31vok-pWxk4)iUSajfjnrrtadcNS#5@vOEU|s=CHJ^DE`N)HN~`bw9k6va z4mb+<+cks#uD3vfUwtYFu$r6|v>-uX^`Wc0&o4AfLUx&UK*%A(R+*fWt^j}`SlN9^c}**)Fhk*_|Z=Q;>=o7bO}?VrqQ)Pt!je1O3aC`Bsxgey z%BhGtc$6|0CK5#DelG=DBZ;PeURH8&$a8Y7`(O=i$$odO8_4a&dM$^kGmm+b6|YiX z_k_Y6*R{KJt6L#H^ss^aLS4Ot3G_P+_JT_^YA39)3WdZe1qJH?!G0TSi`Ie4W+ju* z&}l$bi0qmN>h>JrXSCNDME_l$vaS;{L79C$OutuXX}ks}X*@VqKru=Y{CyAWaSG%bnqtu^!I8bRxV3gIQj zcgHTsyQJ|J)_Jr58x)Z~^%~n@Vk12GTCK$ovO)!olrI>h)YJC1Y7?euVl4U-Srz#+ zIR-_x`Af|(j>3?FYL&6Xd7+s#h64z{I70iD;mh8*t7iG_JhlZ|Fms%tU?%C@fhy1wr8g)9}LnOWAE@MD_GbbGh*c!ff1MtQR2<>k24QuCL|JiG`+!LL;c z3}lgt=+=RSNH)bj98h*QM5DZRc~c}9wPBiGODjbZzlE_E_OLyJ^OIj-F@zZ~Vlx5x zkRA&z*1Zp@45q}ZwIedO#5A#58t+C)6(35h>g{r)1#G04LXd+$CWSwA%HLr z`jqCs&(O93N6dl{PMFaOXQ6njD+|y>mcVm>nk|I-h1;IlYwEl`&etT#;6fRu>gO^C$q3)fOIkwme`jgZ&G4u+k@p)iiGrCCF)7*rjRI<_A0TPl- zLe*>$S8HEjeS|8|-?n|uJK4PDR+nW_B;PvD=2TGDC7<<(B#60jW`Py&0R$%Uct&bj z2*$bUXOL2Yp3G4kP^;BrbtBawm~1DP@sCObtjwR1@0A)5*~NKSA`imq9(l#d$R37M zOm-p{`ED&4rjq33>vF{WZ_CgBUTk`vpPK})%kBeKARI4eD-kK%t~GS){t})WTpVlsWu?7U zsa-Ury5+UE;gCrNNzwg0N-KvXW0+#3E`kVACL$au_Y*(c)E!X?zb}|fvL+*uA|#F@ zQZLYuMrEbWfp^=0XlX7+Z{-B)uqvxl)3*3?P#A=PK>4_JFR3?MZAs!(C+X7UnGw3< zj8A{*nkhUX2wX*T@*4=uYkB$xSr)}JJZLIpm*>@f#nNTnj*3XHDV-; z|BSX@SIzPn%Qogk`?eEi&K)x6`fXlR#nIjo&`Q~fHwDFE$fQU_i;KBM2}iPAKTut> zeIK&Er7Hn?naypAm`OdVt`EaIZJ16t8PB0K>j1piCrlUTF@pL%2=#^GZtZ(7uFVfy zdmS&;cEWG?7NqS1l}m+JNHg0XWMc~87pKge?40t;Fflr*3l`?X-@vxgBUHKJ_cMFX z?;p&piV&Aem6HX`uPOxC0Xoe)=jemRPtvi_5ey6%Z(;-cn#7rs0&+x&p-~79I((P0 z@*eEOM}5!ONsfUwQ`e2`)I6@7Kca2hOvhgnr~5sS{MseRr=E;vhwscy9J)me+K+xv z@~Ci0m897p#Bo}0*J|Gb9zY=|9LdRZ1O{$Um%k$%&r{a%!M^#c2`P`_W^K?L@+L~|<8I6}4o8@DX;MHF@-fOitpjabs zvvdN1k1>A)X#jhzjc)33vg?xS&RKpv8{mKvs_4y`9tVV0$ejjZqWX34tv)P3BwOLB z7waA3yl|7>9J7U8D;J>#XeB4MMKDAumOdHOIxk?$gdIMt0RO1>*R`Rif9BXFwJK+C zxd>NJPmcf?I&o&P>OMgLU2Z@66`__(_MjQrsAKm@7`$rxkxgO>$g~keN?lWb%-CgT z>s$}G>icK`PPLdmg@K>yy@8J>9=})UarRoFSN`VLRt>WCxsDkR*%Ek8va~=P&IXkg z3m3v(5iKn1*}IUlq&31!u_h^98D{UN!Q~%a)g&kv!CN5&XXnn7o`%3-q}tH@!%YXO z$pP~KWHs6MEXOq=s3BAYxiFSF1IbdooXYO3#uE8;+B^6vNg>%Z?Up|$!@SVgjQBi5 zBASeNFfP6D#cyW+Hb0{$dFYl~0`tOC($h?AT*l{+aygb?;1O9TC(DSsHN$=lOQ7Cm z04omcO)OrKwx;N(u-Fs$r1*x|vX>O4I^oa6#t37g{*gzO`b^+jAD!8QOMUd69?LH; z-qwf*r`)C_=fTwnwze+2oNRY7>|`@FRdWttE9dicZ=c1i=M;b3%(F0mI9ucL)3F0v}D zr{I@WQi7r?5r{NkC{a(2S9s!+Havss=YK5SQs?g0uQ?X>q0}O^vjXrAgH+dQj_qe$snGi6KGuf^i|JntKA`~=MT0tqKlTU@$fWZgYOj% ze{+E{0T{s{)w}q>y0yYxyRa(Jrv_rOfc{npwbUGiYeP2l)b_TsWIRL&O#;7c1Z>%I zv;wwXj-4+ejZ}JO@XlZ>$@p#5oHLG$(Pm zAD|j>&$3=TB(x$XEQll9F9Ksk5~DvffMo9~sX1$OMIrZ1n7?eEfWweLdoN&_Zoz^i zQgB_7D?~^gZfsLrmCbRfv#JL?ltgz;q3QBmlcZNvd8!B(UKjERx1RN+APE`iZmJn# zlNu(zQyn1zy0sQ7ic^`{0VToDv>7>ur32 zVPRrk7r2Eu$$-wxASyS3iM?890@17qCtWGP^&taxum}i2CRe+w24@`N zq`Sm5qK>++efX#KuThM{MrzEMB7Jmi_%BODbRI7YS1UTvy%W)Da)~$}BY~0P-}WYj zXSyEG<&p?|S%G0Lk_9OQV}?OX4MKo3R_A`D@hZ@DNuLVaa`Q3M8~j&{VGZw6t8372 z$3bM?iFe7AmS?a-Z3Y-LUmdU1W7U@!@Vt1S8<8ot3cWoxw5Lc!OXI4ze12yZ$#N_q zbv^CeLN$%2m0}o_hKrM({-yyT*P^BCD}OdJaI5dO%7O1Jir2eu=A7V1&bdwP>rRsr z6$;g9sf;bs+{HW4xs^H=a88={lxQVp2KX1q>B4lX-@+{wCB*lTNa;pO?N7-Tl)f?qN?Wai0U&9scNUYs0Tcn|_=GY?dj`VVB=+!Zc%d~L zr`{(KYNO>_I=~%z-y6}xKewNEJRFQ-6xC*+;}hKdU7~i*FA`%NP~Cx1ou_AnJ7Rac!Byj)VLmj0?#K z-hl4Fi_?8dGaWW!asDTtP#;|w@?aVoQ8PzeMgu`X-5wD2Txq}ZrTG9+<7xK9HN&R=pj`t1-?;?B2fL}=|a zB@MZ?>DW+gKFO3C^7`gX+7O2mW=b1`tyfk-F?9%@R6$Dar_ZJ#FV1!mni zk^65ENY7t;RVim8&%E5!!Oqm^>Ao!~DA-iiWfbt=CCeBu4KXL<#C#LjufCjCLF$k&}u&_!_NFEtT zXiHRB1QmF;7itdj3J?T+;1V$s14lmZS;jHE)zuYK;IvHrr)Oib#Yzy@y=2|kv8&EZ zXP@GcM{G0CC$b#-yr&##fJb26r;^~rRVoy~=uIeg4(GT<8T>Ni=$=b2q#pFxn6Jar zC9x;UEQ+xtvudOKdPeqKjF!h(X@~|?x=o1ERx4v7D4$~9&&(I9AiQl+`|J? zKJF!8+4BefOUpqaR->&I0{{>P0sL>!zR3Rt`^MGs{}Yz;$KgK#zsAnazqGaO58L4U z@D09#1C8o3`#BDaWVxsDaA4{_oC28bKb)Rr>r+L_?CWy$>c2k|8p@(=Ips>}JCh42 zkkSh%?vW)UAJgUc_hw7!Z+3m(P?m;&M!j*Z)oBeqwABE=T7I*0&;`jTDPCaBzn)jj}E0el?kYx$YUq6a!qp_NgAkqg%l{eh+ z-XYB>ls8{N93k&=Cj!=M z0p!8KTEZ$&q!+hD$}9GPw&-96kJz>o64^bU|P zB+rhAN^>Pj=?d4FR}+X=EDxwFwENEOB7Uq~sUPt1A=nvCj^P)u(t68RZhy`@u|Ldh zQs?vfiAE$gt6kXXJF5-6)i2+}I@5X3MQx_0!U+z8$>4Ra0!xm97nNOb20yxpJYbo( zgf8oy(qpheiW67NmI{eh1SC`90`w+7olAnX^|%iMnxpjXqQJ0!9}|>^4(cMrW7F}(ecE4_Pg~2Ov(Dq3PHM$Lt@M=2exXVfYZki{b*dxtC;va5i0ZJ$7 z4}0=$g*w?=4hj}Djj1v7D`}vqo`a0g&<#w@TXc12#g&aOA1ct*O)UcTHL+FDSg(kb z%lLw##3gmI{g=P)Fg3ELg!^MOYPQ6(E6s9bT8EsL*)@SYh=rcJbWswD=rg4N3gX5IBTN0gkIw;6#Lq45my_+6V2|T)!3`7Jcuf3bCgtDa~E_~mFjid=&wCR*Sjm!R;HDqSk*ME zur)GRXVBh@Ws#o*5u>7V`h|tqe%C{4Qn@LFg%sFS`fsJH{Ls0VL8G-fCoOC(iyYX% z2IRz&1Xw0bSkLuytOmRQV7~~SOtboR_JnzjjPwP;I!7@86k|_og<{3J4~tw**J4$D zaJR{hGiob3;o6RYA2C&-M+K}-gBb25%MG$>ZC@U}xv5M>Tq6qr+Y6 z&?Skub()T+zdf>|8ql69AB|?YYH-ivq|^kv;omv-3xx2VN6bGjg#oa$*sK2AC zirr;F;y$H>8<80|anG64j!ie}s2gzCMr1SQU^9~uOQeuoC-eGI~$7(E8S8C+A%Se(*Cs#4#Me({pu~HfC0K3 zc*e>`EI=XTnK4rECWBqz(#kldx-toI0@CR{h4?`gog5!LRfMbFM^YQR-EJAM`-(~a$*!HHE}|f+I?JBOt}Y30>R2J zl;Mu6ZcK;kjv|0^~LEh9Gl0Rq0%c@MzZl||=4BAxGTN#%nMWh?u@w>X_ zb+dp{XtF129|z}j$JE4}xXmqn3FT6_sK&Id!PnAxQX0uOF#;&6#R%~sxJT}|y<2GS zyGvY8xSRLj4fgFesaZPO(blLYHKl2T4;TnPsIrTX)3tbEY%$a3C{vz5A55h)>A&1d*GDn7Pq9#*w~J_FL+_Vj z1|f{1deqG`QqXn*KBRyht z&)p;bM&84g`t_HBFfMW53*_j|DI-r65MlYM7}!$dGi;a1Ge}gL670$S+4vUJkaTa% ze%(9&-{{VTLKxWKPc>RR&VN{l|8*T&=s(e&gQ2mtp}Fbb>a)HHlW;)-Frup&ukgv& zIR%b}Qvle9Gx!edfk4Qa;sywO`V99F(C)I%-g4TBj~zz#71*Y-AmVsH#K{{nnM6S= zr{U0bBs(`D$>-8&Lt$N(L=@fb>O(b`ZDh&ixut4{^dZ3Dh8a*IT9iy*hK(&mW<@0s zcFnHx)(~hnnc=@dzSpf6h#*8t8-jl8sxHNh7;GELy*n`;6rBvB2JE)=(Fz<Pw)RY|3jnv?_~VNU;bl%WfYSB-yQt}!~AzC|C%iP#bN$q zf2Az{KYB3v-*C+TPR`%_;vf4fXWr)jmh(Tejel43uZ#QN)d1Q4mmU1)-2BNt{?FU| luPf*8^YD-T9a^p1zdaoa(x6~}e}w#Vr~?52 diff --git a/doc/documentation.md b/doc/documentation.md index 4aafcee..ebef604 100644 --- a/doc/documentation.md +++ b/doc/documentation.md @@ -8,10 +8,12 @@ DropZone.widget.DropZone * [~constructor()](#DropZone.widget.module_DropZone..constructor) ⇒ undefined * [~postCreate()](#DropZone.widget.module_DropZone..postCreate) ⇒ undefined * [~update(obj, callback)](#DropZone.widget.module_DropZone..update) ⇒ undefined + * [~addFormData(files, XMLhttprequest)](#DropZone.widget.module_DropZone..addFormData) ⇒ * [~getMendixURL(files)](#DropZone.widget.module_DropZone..getMendixURL) ⇒ String * [~onError(file, message)](#DropZone.widget.module_DropZone..onError) ⇒ undefined * [~onRemoveFile(file, message)](#DropZone.widget.module_DropZone..onRemoveFile) ⇒ undefined * [~onComplete(file, message)](#DropZone.widget.module_DropZone..onComplete) ⇒ undefined + * [~onQueueComplete()](#DropZone.widget.module_DropZone..onQueueComplete) ⇒ undefined * [~accept(file, callback)](#DropZone.widget.module_DropZone..accept) ⇒ undefined * [~acceptMendix(file, callback)](#DropZone.widget.module_DropZone..acceptMendix) ⇒ undefined * [~createMendixFile(file, callback)](#DropZone.widget.module_DropZone..createMendixFile) ⇒ undefined @@ -45,6 +47,20 @@ mxui.widget._WidgetBase.update is called when context is changed or initialized. | obj | mendix/lib/MxObject | the current track object, or null if there is none | | callback | mxui/widget/_WidgetBase~ApplyContextCallback | function to be called when finished | + + +### DropZone~addFormData(files, XMLhttprequest) ⇒ +add Mendix 7 'data' part to formdata + +**Kind**: inner method of [DropZone](#DropZone.widget.module_DropZone) +**Returns**: added formData + +| Param | Type | Description | +| --- | --- | --- | +| files | Array.<data> | | +| XMLhttprequest | xhr | | +| dropzone.js | formData | created formdata | + ### DropZone~getMendixURL(files) ⇒ String @@ -93,6 +109,12 @@ when uploadload is completed, commit and call onchange MF | file | type | the file that is completed | | message | type | status message | + + +### DropZone~onQueueComplete() ⇒ undefined +When all files in the queue finish uploading call microflow onQueueCompleteMf + +**Kind**: inner method of [DropZone](#DropZone.widget.module_DropZone) ### DropZone~accept(file, callback) ⇒ undefined @@ -120,7 +142,8 @@ Validate if object will be accepted by the mendix server ### DropZone~createMendixFile(file, callback) ⇒ undefined -Create a mendix empty file object on the server when new upload item is added. Upload of the file be done by the DropZoneJs lib +Create a mendix empty file object on the server when new upload item is added. +Upload of the file be done by the DropZoneJs lib **Kind**: inner method of [DropZone](#DropZone.widget.module_DropZone) @@ -160,6 +183,7 @@ Call onchange Miroflow if any. ### DropZone~uninitialize() ⇒ undefined -mxui.widget._WidgetBase.uninitialize is called when the widget is destroyed. Implement to do special tear-down work. Clean up listeners, helper objects, etc. There is no need to remove listeners added with this.connect / this.subscribe / this.own. +mxui.widget._WidgetBase.uninitialize is called when the widget is destroyed. Implement to do special tear-down work. +Clean up listeners, helper objects, etc. There is no need to remove listeners added with this.connect / this.subscribe / this.own. **Kind**: inner method of [DropZone](#DropZone.widget.module_DropZone) diff --git a/src/DropZone/DropZone.xml b/src/DropZone/DropZone.xml index 6344d3a..a422c29 100644 --- a/src/DropZone/DropZone.xml +++ b/src/DropZone/DropZone.xml @@ -14,26 +14,26 @@ Name attribute Data - Attribute for name of the file, normally 'name' + Attribute for name of the file, normally 'name' - + Type attribute Data - Attribute for the filetype, it is not required, it can be used to filter data in the on accept microflow. Values are like 'image/jpeg' + Attribute for the filetype, it is not required, it can be used to filter data in the on accept microflow. Values are like 'image/jpeg' - + - + Size attribute Data - Attribute for the size, not required, can be used to filter data in onAccept. + Attribute for the size, not required, can be used to filter data in onAccept. - - + + @@ -60,7 +60,7 @@ Autosize Settings When documents are dropped the panel is sized. - + Button caption Display @@ -79,7 +79,7 @@ Init Message Display - The message that gets displayed before any files are dropped. + The message that gets displayed before any files are dropped. Click here, or drop files here to upload. Klik hier, of sleep bestanden hierheen om te uploaden. @@ -103,5 +103,11 @@ Microflow is called when an uploaded file is removed. You should remove the object yourself. + + On Queue Complete + Events + Microflow is called when all files in the queue finish uploading. + + - \ No newline at end of file + diff --git a/src/DropZone/widget/DropZone.js b/src/DropZone/widget/DropZone.js index a36ea0b..9eecee0 100644 --- a/src/DropZone/widget/DropZone.js +++ b/src/DropZone/widget/DropZone.js @@ -7,7 +7,7 @@ @file : Dropzone.js @version : 4.0.2 @author : Andries Smit & Chris de Gelder - @date : 06-09-2017 + @date : 06-09-2017 @license : Apache V2 Documentation @@ -15,7 +15,7 @@ Drop multiple images or documents and upload. Mendix 7.x version. - + To be done: - fix, upload button image - is relative dimension, width, height. @@ -39,6 +39,7 @@ define([ maxFileSize: 0, imageentity: "", onChangemf: "", + onQueueCompleteMf: "", contextassociation: "", panelheight: 200, panelwidth: 500, @@ -80,7 +81,7 @@ define([ mendix.lang.nullExec(callback); }, /** - * initalize the dropzone library. + * initalize the dropzone library. * @private * @returns {undefined} */ @@ -89,8 +90,8 @@ define([ domConstruct.empty(this.domNode); if (!this.autoUpload) { this.uploadButton = new mxui.dom.create('Button', { - type: 'button', - class: 'btn mx-button btn-default', + type: 'button', + class: 'btn mx-button btn-default', icon: "mxclientsystem/mxui/widget/styles/images/MxFileInput/uploading.gif" }); this.uploadButton.innerHTML = this.buttoncaption; @@ -110,7 +111,7 @@ define([ "style": "height: " + height + "; width: " + width + ";" })); this.dropzone = new Constructdropzone("#" + this.id + "_zone", { - autoDiscover: false, + autoDiscover: false, maxFilesize: this.maxFileSize, url: dojoLang.hitch(this, this.getMendixURL), paramName: "blob", @@ -128,24 +129,25 @@ define([ this.dropzone.on("error", dojoLang.hitch(this, this.onError)); this.dropzone.on("removedfile", dojoLang.hitch(this, this.onRemoveFile)); this.dropzone.on("sending", dojoLang.hitch(this, this.addFormData)); - + this.dropzone.on("queuecomplete", dojoLang.hitch(this, this.onQueueComplete)); + }, /** * add Mendix 7 'data' part to formdata * @param {data[]} files * @param {xhr} XMLhttprequest * @param {formData} dropzone.js created formdata - * @returns added formData - */ + * @returns added formData + */ addFormData: function(data, xhr, formData) { // Mendix 7 expects a data part. var s = '{"changes":{},"objects":[]}'; - formData.append("data", s); + formData.append("data", s); }, /** * set the Mendix upload URL based on the GUID * @param {file[]} files - * @returns {String} url - mendix server URL to post the file to.s + * @returns {String} url - mendix server URL to post the file to.s */ getMendixURL: function (files) { logger.debug(this.id + ".getMendixURL"); @@ -211,9 +213,32 @@ define([ }); } if (!this.autoUpload) { - this.dropzone.processQueue(); + this.dropzone.processQueue(); } }, + /** + * When all files in the queue finish uploading call microflow onQueueCompleteMf + * @returns {undefined} + */ + onQueueComplete: function () { + logger.debug(this.id + ".onQueueComplete"); + if (this.onQueueCompleteMf) { + mx.data.action({ + params: { + actionname: this.onQueueCompleteMf, + applyto: "selection", + guids: [] + }, + origin: this.mxform, + callback: dojoLang.hitch(this, function () { + logger.debug("onQueueComplete"); + }), + error: function (e) { + logger.error("onQueueComplete", e); + } + }); + } + }, /** * Create file on mendix server, and validate if it could be accepted. * @param {File} file - the file that validate @@ -285,19 +310,19 @@ define([ file.obj = obj; logger.debug('save document'); mx.data.saveDocument( - file.obj.getGuid(), - file.obj.name, - { width: 100, height: 75 }, - file, + file.obj.getGuid(), + file.obj.name, + { width: 100, height: 75 }, + file, function(obj) { - logger.debug('save succes', obj); + logger.debug('save succes', obj); // call callback when done callback(); }, function(e) { - logger.debug('save error', e); + logger.debug('save error', e); callback(); - }); - + }); + }), error: function () { logger.error("failed createMendixFile"); @@ -318,7 +343,7 @@ define([ callback: function () { mx.data.update({ entity: file.obj.getEntity() - }); + }); file.obj = null; }, error: function (err) { @@ -333,12 +358,12 @@ define([ */ onclickEvent: function () { logger.debug(this.id + ".onclickEvent"); - this.dropzone.processQueue(); - logger.debug('dz', this.dropzone.getQueuedFiles()); + this.dropzone.processQueue(); + logger.debug('dz', this.dropzone.getQueuedFiles()); //cdg test this.processQueue(); }, /** - * Call onchange Miroflow if any. + * Call onchange Miroflow if any. * @param {mendix/lib/MxObject} obj * @returns {undefined} */ @@ -373,4 +398,4 @@ define([ } } }); -}); \ No newline at end of file +}); diff --git a/test/DropZone6.mpr b/test/DropZone6.mpr index b0fafbe95d86ce6792cf40a9ce4604846613ae71..413a8bb805b144ea7f3e1c001b9b9f27e44abc87 100644 GIT binary patch delta 10506 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 TPaL%M|8c6MW%*ylspWqFxBY+M delta 5240 zcmaJ_dt8iZ|DNZWxyw_^(@UrvT53trK~bqSX=SsA)S**AOQDSsRcpR%#rrCmCvDGl1#Uk(r$;P&#Jd!Yj+*Txj zd*{(lL?Ik%LxGLtWUDrk^vblkv(@Gffj^|o<_`OE0By*6%OVyMZbUGVL~J9 zF%bpV2SoKM<(vGMWL^z=<6UQZPsw7GL(x#O3A2kx0p?)%63 ze&Ghgi%n>du8yhr!C2LZoB6Xv{@kj?xpI^qlzAgf(Atbq@7Fo~lKiW=u*pIvAZ5a- z+j5jPq-{n$hKHljk<`#r+{V_?J}vuF5pdS1zLIH&vZUZ>Y=cz%FOe{-d#T`RW%B+>X~_u^Hg3NyOj9#wmd&N6suItFT|>O zmvw`$#UJI>j`#E7X0EmZ;yhtY-w-`AY4dp_IDVseV_)UPI&kPC4X35e!ER>Y!eh~L zZ&M$;Yiu$nf!~z4^M3NM(G}=7By@mVM2&^xYHY1(p+;Z+HG>iVwGF9m1Oe+PU8a3F z>_o>5M%xByAla}soHY%LJ0`{_#NhfpWc4cKYywhaF$<%6D(ul6M)y=iQr1w|N%#X- z5AA>#LBw3pzetRSy4^^V*-@Co20WsuG4kv7go+Y03pPhlmzcd3+fFR}U*ZBV+l$

ghamfZ4MOR97`xESHu55lNQ9Z?lmW(<&9$?;1$$ zX855DlUNck-541&r?fwuw1s`ksW3QOiyS779#zr+>v}`Q0=%N}F>XWIQd~E~CKTes zhNziFqa5P1c-;vsK6=;z7j7Ug>^tz#M?W#Ip*AvCqT-gjrXf|(^;CAE4|q&LV&+=J zvWhM{LVv7DtUJM(jA)2{fMl^0S*UJd0ro3QZ&325A&a~8Bay)RvYU}H+Q=KF99?Zov!mKKNrrpWhHY4muXv?Pg4$*g>xSW~RcaeC% z>emrY4#AR&we4i~JgS4O#%9H_NHgM}tT-G1!yqmQJ%jx#RgED&1lf)~$L6V-m`ooN zu95Kp$|fOWr#MMetaC8W$63+&5JSj6>e}2u}oZV<`T1d<;Da@?-lD-@Yh6%!&gW8 zEQpxDDp440DNJ%$;bgBPhEi?RKzlg?oA`nlhVxR4ZGZMFc9z zmh6^s%Bf#T^0XHWR8qENpeN`bp!#sgTm~m*su;-h4^p?-a+c+w6{vbrcH$%@U~Ax? zg93|FYHFVQ-~0fv)v8Vq^e;4?G~&bZ(^Msy=nU#bR3sUu2Qkf*heRwCi^GeGDT2Nvxz!VyvD2l9Ti)!c;ghM1IRR%WKe~SQjJXB< zEK!SD*@J@mYvbW(DP>6#!MHBM8tn3^rg3w>7jEom=;h~Aa|-ISW@7UwkaT{E|lblcn76Z?Zw630$Ida-WQe12b- zsNjaAh^d{eV|F)S) zeBTz*U-frC5$u~%JeZ$&)Io_l>xFNo^mTj5jzs`q6e8D?<0}I?l_Z z$y1u&0jHW;<2^O@!9w5?^h_r zJu~o;>)L7?Zgseb_DEFrYrH?^r9|Px=r`{7)1gj*8dm%=>2<9Xn*u15kQ1RZld>U+ zaOig@_R#y9mtF87Z9HUx_=*#Ehg+54a{??m=YFd34x9f7GM1QLE_U^amzk$f1q7YE zBDOcr{jJm1p|m@-C0fgs2pkn@_;WLUnmtF$FS+k~;|lo)g!{*MyD8f)B9+=h5-Y&m zm$V-jK0Y|nK_i8C()pomzjI!911J(ejoUHJHv3nroJ5}k)G>6WRs-gp1#0%9qSr`^ev1xc&~2Nm`q z+B4v_|HE;29rsw=?zg{??X3)qF;PU&54F+U0)AfR_eo)?|5spqIt`wmd__4`w9OJt zck}E2{{tg~@o#}~^zef`FfxW;R-r;#E5qRgJKR>QMmGxH$ak2Hg4e`fL5`6S8O@_u z>o_64V>ZtSle*mcB4pxHWI{0ds6U8Y0O~PRJF|b}co~j_Jc8+7c-NW8X(K^ghThVn ztm~3IN`09E83u+^U4;5HN_+#{+LJ_B~r%WFkNqZi0?r0F#AQy&{eVO|h)Ask=#~8J> z?ZjGn;JZZd#%B{PY|@ER2lf<`vb4~x)!<|GPtYvFfrEYi@?X&NQ#>s34A+f`EL5#Uc%R_ zXrtwLnXiT5Fyu;KG=8y!p0$OyyR``kCg1BG2~VH%9%CVlNZe*Fgc0^5^zOrtJ{X0} zUUF>C%?I0O6+4cQ3U%ErTjs234B|$B+ReDUoqn(Fb;ufFe0EvIYGQ`@iJfDWCuV diff --git a/test/widgets/DropZone.mpk b/test/widgets/DropZone.mpk index 6d572740a5b8b56e9eae7c56e95b3a9ed5913115..2642676d42f5321206e3d060321347827d37eb51 100644 GIT binary patch literal 31169 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 OTxvi70LpHE@BSZ~0MV!b literal 31244 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 luPf*8^YD-T9a^p1zdaoa(x6~}e}w#Vr~?52 From c8024e3ae949ac911ea806f7b74864b4759f481e Mon Sep 17 00:00:00 2001 From: Robert Price Date: Thu, 23 Nov 2017 21:15:36 +0000 Subject: [PATCH 2/3] Updated README.md to include the new On Queue Complete microflow property. --- README.md | 18 ++++++++++-------- dist/DropZone.mpk | Bin 31169 -> 31169 bytes test/widgets/DropZone.mpk | Bin 31169 -> 31169 bytes 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 9815245..17e5fd1 100644 --- a/README.md +++ b/README.md @@ -4,11 +4,11 @@ Mendix implementation of the DropZone widget. Credits to: http://www.dropzonejs.com/ - + **Description** Upload multiple images or filedocuments on a canvas an upload them together. All processed files are marked with a tick-box, errors with a red cross. - + **History** Update 3.0.2: css loading on linux and Mendix cloud @@ -26,7 +26,7 @@ Update 3.0.2: css loading on linux and Mendix cloud - Put the widget on a context form. **Properties** - + - Image entity: filedocument or inherited entity - Association to context: Set this to associate the images to the context. For example Item has multiple images use Image\_Item. @@ -41,6 +41,8 @@ Update 3.0.2: css loading on linux and Mendix cloud - On remove: when a file is uploaded and then deleted, this microflow is called an should delete the filedocument. +- On queue complete: when the upload queue completes uploading. + - maxFileSize: Maximum file size in MB - Button caption: Text on the upload button (can be translated). @@ -55,16 +57,16 @@ Update 3.0.2: css loading on linux and Mendix cloud When you don't provide an on remove microflow the file is deleted but the screen is not refreshed. All of the original issues of the [Dropzone library] (https://github.com/enyo/dropzone/issues) - + **Frequently Asked Questions** - + Ask your question at the Mendix Community [*Forum*](https://mxforum.mendix.com/) - + - None -- -> Written with [StackEdit](https://stackedit.io/). \ No newline at end of file +- +> Written with [StackEdit](https://stackedit.io/). diff --git a/dist/DropZone.mpk b/dist/DropZone.mpk index 2642676d42f5321206e3d060321347827d37eb51..cd9318834d83026a8c1830289be715ae67f5d896 100644 GIT binary patch delta 134 zcmX^3nepIfM(zM_W)?065V$@$v0QkfoG|0{jYh9T7_U#371d?DzS&#!odA$yrDh1^ zgn(}7TTpLaxv#9JHkW4H$1Cle!oq*)+a$6uNS>XXBlPVm6 RAo;Pv0Z1BEg4p$yP5>6yH9`OY delta 134 zcmX^3nepIfM(zM_W)?065RjUjSS~zKPMA?@qtPo7MybiNqPmPyo4rNf2>>}(YKA~g zj#`Nukn=Fd07&MjDQ`B-wc!LZi^|>s$;5IqAUUJl2}s^9w*``t6&^q`slpLRE~)SV Rk{>G^fTU3+h+SXl1ONwFC-?vW diff --git a/test/widgets/DropZone.mpk b/test/widgets/DropZone.mpk index 2642676d42f5321206e3d060321347827d37eb51..cd9318834d83026a8c1830289be715ae67f5d896 100644 GIT binary patch delta 134 zcmX^3nepIfM(zM_W)?065V$@$v0QkfoG|0{jYh9T7_U#371d?DzS&#!odA$yrDh1^ zgn(}7TTpLaxv#9JHkW4H$1Cle!oq*)+a$6uNS>XXBlPVm6 RAo;Pv0Z1BEg4p$yP5>6yH9`OY delta 134 zcmX^3nepIfM(zM_W)?065RjUjSS~zKPMA?@qtPo7MybiNqPmPyo4rNf2>>}(YKA~g zj#`Nukn=Fd07&MjDQ`B-wc!LZi^|>s$;5IqAUUJl2}s^9w*``t6&^q`slpLRE~)SV Rk{>G^fTU3+h+SXl1ONwFC-?vW From fa7a800c4d2236d05ef9794c9b2fc03dce3ac373 Mon Sep 17 00:00:00 2001 From: Robert Price Date: Sun, 26 Nov 2017 00:24:08 +0000 Subject: [PATCH 3/3] Update to the latest version of dropzone.js Added MultipleFiles option to allow a single file, or multiple files to be uploaded Added resize methods that allow images to be resized and their format adjusted --- README.md | 12 + dist/DropZone.mpk | Bin 31169 -> 51301 bytes src/DropZone/DropZone.xml | 40 + src/DropZone/widget/DropZone.js | 22 +- src/DropZone/widget/lib/dropzone.js | 4278 +++++++++++++++++++-------- test/DropZone6.mpr | Bin 640000 -> 709632 bytes test/widgets/DropZone.mpk | Bin 31169 -> 51301 bytes 7 files changed, 3080 insertions(+), 1272 deletions(-) diff --git a/README.md b/README.md index 17e5fd1..dcfbccb 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,18 @@ Update 3.0.2: css loading on linux and Mendix cloud - Auto Start Upload: Hides upload button start uploading on drop. +- Multiple Files: If true allow multiple files to be uploaded, if false only one at a time. + +- Resize Width: If set, the image will be resized to this maximum width BEFORE upload. + +- Resize Height: If set, the image will be resized to this maximum height BEFORE upload. + +- Resize Quality: The quality of the resize. + +- Resize Method: Either "crop" or "contain" the image when resizing. + +- Resize MimeType: The format of the image to upload. This can convert the type of image BEFORE upload. + **Known bugs** diff --git a/dist/DropZone.mpk b/dist/DropZone.mpk index cd9318834d83026a8c1830289be715ae67f5d896..19e21e7e65c95e7cd014f039476ab6b3d2aefdf1 100644 GIT binary patch delta 48458 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 R1~;0V=S2YZJo=y2{|Be`6NCT& delta 28201 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 z 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 diff --git a/src/DropZone/DropZone.xml b/src/DropZone/DropZone.xml index a422c29..dca0f70 100644 --- a/src/DropZone/DropZone.xml +++ b/src/DropZone/DropZone.xml @@ -60,6 +60,11 @@ Autosize Settings When documents are dropped the panel is sized. + + + multipleFiles + Settings + Allow uploading of more than one file. Button caption @@ -109,5 +114,40 @@ Microflow is called when all files in the queue finish uploading. + + Resize Width + Resize + If set, images will be resized to these dimensions before being uploaded. Set only width or height to retain aspect ratio. + + + Resize Height + Resize + If set, images will be resized to these dimensions before being uploaded. Set only width or height to retain aspect ratio + + + Resize Quality + Resize + The quality of resized images on a scale of 0 to 100 (best) + + + Resize Method + Resize + How the images should be scaled down in case both a resize width and height are provided. + + Contain + Crop + + + + Image format + Resize + What format should the resized image be uploaded as? + + Original + GIF + JPEG + PNG + + diff --git a/src/DropZone/widget/DropZone.js b/src/DropZone/widget/DropZone.js index 9eecee0..e51bbcd 100644 --- a/src/DropZone/widget/DropZone.js +++ b/src/DropZone/widget/DropZone.js @@ -40,6 +40,12 @@ define([ imageentity: "", onChangemf: "", onQueueCompleteMf: "", + resizeWidth: "", + resizeHeight: "", + resizeQuality: "", + resizeMimeType: "", + resizeMethod: "", + multipleFiles: true, contextassociation: "", panelheight: 200, panelwidth: 500, @@ -105,6 +111,12 @@ define([ height = "100%"; width = "100%"; } + var resizeHeight = this.resizeHeight ? this.resizeHeight : null, + resizeWidth = this.resizeWidth ? this.resizeWidth : null, + resizeQuality = this.resizeQuality ? (this.resizeQuality / 100) : null, + resizeMethod = this.resizeMethod ? this.resizeMethod : null, + resizeMimeType = (this.resizeMimeType && this.MimeType !== "original") ? ("image/" + this.resizeMimeType) : null, + maxFiles = this.multipleFiles ? null : 1; this.domNode.appendChild(mxui.dom.create("div", { "id": this.id + "_zone", "class": "dropzone", @@ -123,7 +135,13 @@ define([ headers: { 'X-Csrf-Token': mx.session.sessionData.csrftoken, 'X-Requested-With': 'XMLHttpRequest' - } + }, + resizeHeight: resizeHeight, + resizeWidth: resizeWidth, + resizeQuality: resizeQuality, + resizeMethod: resizeMethod, + resizeMimeType: resizeMimeType, + maxFiles: maxFiles }); this.dropzone.on("success", dojoLang.hitch(this, this.onComplete)); this.dropzone.on("error", dojoLang.hitch(this, this.onError)); @@ -399,3 +417,5 @@ define([ } }); }); + + diff --git a/src/DropZone/widget/lib/dropzone.js b/src/DropZone/widget/lib/dropzone.js index 25ec3a4..ff4bd9f 100644 --- a/src/DropZone/widget/lib/dropzone.js +++ b/src/DropZone/widget/lib/dropzone.js @@ -2,8 +2,7 @@ (function (factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module. - define([], factory); // AS: we do not need jquery! - //define(['jquery'], factory); + define([], factory); } else { // Browser globals factory(jQuery); @@ -11,6 +10,15 @@ } (function (jQuery) { var module = { exports: { } }; // Fake component +"use strict"; + +var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /* * @@ -38,592 +46,1264 @@ * */ -(function() { - var Dropzone, Emitter, camelize, contentLoaded, detectVerticalSquash, drawImageIOSFix, noop, without, - __slice = [].slice, - __hasProp = {}.hasOwnProperty, - __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; - - noop = function() {}; - - Emitter = (function() { - function Emitter() {} +// The Emitter class provides the ability to call `.on()` on Dropzone to listen +// to events. +// It is strongly based on component's emitter class, and I removed the +// functionality because of the dependency hell with different frameworks. +var Emitter = function () { + function Emitter() { + _classCallCheck(this, Emitter); + } - Emitter.prototype.addEventListener = Emitter.prototype.on; + _createClass(Emitter, [{ + key: "on", - Emitter.prototype.on = function(event, fn) { + // Add an event listener for given event + value: function on(event, fn) { this._callbacks = this._callbacks || {}; + // Create namespace for this event if (!this._callbacks[event]) { this._callbacks[event] = []; } this._callbacks[event].push(fn); return this; - }; - - Emitter.prototype.emit = function() { - var args, callback, callbacks, event, _i, _len; - event = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : []; + } + }, { + key: "emit", + value: function emit(event) { this._callbacks = this._callbacks || {}; - callbacks = this._callbacks[event]; + var callbacks = this._callbacks[event]; + if (callbacks) { - for (_i = 0, _len = callbacks.length; _i < _len; _i++) { - callback = callbacks[_i]; + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + + for (var _iterator = callbacks, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) { + var _ref; + + if (_isArray) { + if (_i >= _iterator.length) break; + _ref = _iterator[_i++]; + } else { + _i = _iterator.next(); + if (_i.done) break; + _ref = _i.value; + } + + var callback = _ref; + callback.apply(this, args); } } - return this; - }; - - Emitter.prototype.removeListener = Emitter.prototype.off; - Emitter.prototype.removeAllListeners = Emitter.prototype.off; + return this; + } - Emitter.prototype.removeEventListener = Emitter.prototype.off; + // Remove event listener for given event. If fn is not provided, all event + // listeners for that event will be removed. If neither is provided, all + // event listeners will be removed. - Emitter.prototype.off = function(event, fn) { - var callback, callbacks, i, _i, _len; + }, { + key: "off", + value: function off(event, fn) { if (!this._callbacks || arguments.length === 0) { this._callbacks = {}; return this; } - callbacks = this._callbacks[event]; + + // specific event + var callbacks = this._callbacks[event]; if (!callbacks) { return this; } + + // remove all handlers if (arguments.length === 1) { delete this._callbacks[event]; return this; } - for (i = _i = 0, _len = callbacks.length; _i < _len; i = ++_i) { - callback = callbacks[i]; + + // remove specific handler + for (var i = 0; i < callbacks.length; i++) { + var callback = callbacks[i]; if (callback === fn) { callbacks.splice(i, 1); break; } } + return this; - }; + } + }]); - return Emitter; + return Emitter; +}(); - })(); +var Dropzone = function (_Emitter) { + _inherits(Dropzone, _Emitter); - Dropzone = (function(_super) { - var extend, resolveOption; + _createClass(Dropzone, null, [{ + key: "initClass", + value: function initClass() { - __extends(Dropzone, _super); + // Exposing the emitter class, mainly for tests + this.prototype.Emitter = Emitter; - Dropzone.prototype.Emitter = Emitter; + /* + This is a list of all available events you can register on a dropzone object. + You can register an event handler like this: + dropzone.on("dragEnter", function() { }); + */ + this.prototype.events = ["drop", "dragstart", "dragend", "dragenter", "dragover", "dragleave", "addedfile", "addedfiles", "removedfile", "thumbnail", "error", "errormultiple", "processing", "processingmultiple", "uploadprogress", "totaluploadprogress", "sending", "sendingmultiple", "success", "successmultiple", "canceled", "canceledmultiple", "complete", "completemultiple", "reset", "maxfilesexceeded", "maxfilesreached", "queuecomplete"]; + + this.prototype.defaultOptions = { + /** + * Has to be specified on elements other than form (or when the form + * doesn't have an `action` attribute). You can also + * provide a function that will be called with `files` and + * must return the url (since `v3.12.0`) + */ + url: null, + + /** + * Can be changed to `"put"` if necessary. You can also provide a function + * that will be called with `files` and must return the method (since `v3.12.0`). + */ + method: "post", + + /** + * Will be set on the XHRequest. + */ + withCredentials: false, + + /** + * The timeout for the XHR requests in milliseconds (since `v4.4.0`). + */ + timeout: 30000, + + /** + * How many file uploads to process in parallel (See the + * Enqueuing file uploads* documentation section for more info) + */ + parallelUploads: 2, + + /** + * Whether to send multiple files in one request. If + * this it set to true, then the fallback file input element will + * have the `multiple` attribute as well. This option will + * also trigger additional events (like `processingmultiple`). See the events + * documentation section for more information. + */ + uploadMultiple: false, + + /** + * Whether you want files to be uploaded in chunks to your server. This can't be + * used in combination with `uploadMultiple`. + * + * See [chunksUploaded](#config-chunksUploaded) for the callback to finalise an upload. + */ + chunking: false, + + /** + * If `chunking` is enabled, this defines whether **every** file should be chunked, + * even if the file size is below chunkSize. This means, that the additional chunk + * form data will be submitted and the `chunksUploaded` callback will be invoked. + */ + forceChunking: false, + + /** + * If `chunking` is `true`, then this defines the chunk size in bytes. + */ + chunkSize: 2000000, + + /** + * If `true`, the individual chunks of a file are being uploaded simultaneously. + */ + parallelChunkUploads: false, + + /** + * Whether a chunk should be retried if it fails. + */ + retryChunks: false, + + /** + * If `retryChunks` is true, how many times should it be retried. + */ + retryChunksLimit: 3, + + /** + * If not `null` defines how many files this Dropzone handles. If it exceeds, + * the event `maxfilesexceeded` will be called. The dropzone element gets the + * class `dz-max-files-reached` accordingly so you can provide visual feedback. + */ + maxFilesize: 256, + + /** + * The name of the file param that gets transferred. + * **NOTE**: If you have the option `uploadMultiple` set to `true`, then + * Dropzone will append `[]` to the name. + */ + paramName: "file", + + /** + * Whether thumbnails for images should be generated + */ + createImageThumbnails: true, + + /** + * In MB. When the filename exceeds this limit, the thumbnail will not be generated. + */ + maxThumbnailFilesize: 10, + + /** + * If `null`, the ratio of the image will be used to calculate it. + */ + thumbnailWidth: 120, + + /** + * The same as `thumbnailWidth`. If both are null, images will not be resized. + */ + thumbnailHeight: 120, + + /** + * How the images should be scaled down in case both, `thumbnailWidth` and `thumbnailHeight` are provided. + * Can be either `contain` or `crop`. + */ + thumbnailMethod: 'crop', + + /** + * If set, images will be resized to these dimensions before being **uploaded**. + * If only one, `resizeWidth` **or** `resizeHeight` is provided, the original aspect + * ratio of the file will be preserved. + * + * The `options.transformFile` function uses these options, so if the `transformFile` function + * is overridden, these options don't do anything. + */ + resizeWidth: null, + + /** + * See `resizeWidth`. + */ + resizeHeight: null, + + /** + * The mime type of the resized image (before it gets uploaded to the server). + * If `null` the original mime type will be used. To force jpeg, for example, use `image/jpeg`. + * See `resizeWidth` for more information. + */ + resizeMimeType: null, + + /** + * The quality of the resized images. See `resizeWidth`. + */ + resizeQuality: 0.8, + + /** + * How the images should be scaled down in case both, `resizeWidth` and `resizeHeight` are provided. + * Can be either `contain` or `crop`. + */ + resizeMethod: 'contain', + + /** + * The base that is used to calculate the filesize. You can change this to + * 1024 if you would rather display kibibytes, mebibytes, etc... + * 1024 is technically incorrect, because `1024 bytes` are `1 kibibyte` not `1 kilobyte`. + * You can change this to `1024` if you don't care about validity. + */ + filesizeBase: 1000, + + /** + * Can be used to limit the maximum number of files that will be handled by this Dropzone + */ + maxFiles: null, + + /** + * An optional object to send additional headers to the server. Eg: + * `{ "My-Awesome-Header": "header value" }` + */ + headers: null, + + /** + * If `true`, the dropzone element itself will be clickable, if `false` + * nothing will be clickable. + * + * You can also pass an HTML element, a CSS selector (for multiple elements) + * or an array of those. In that case, all of those elements will trigger an + * upload when clicked. + */ + clickable: true, + + /** + * Whether hidden files in directories should be ignored. + */ + ignoreHiddenFiles: true, + + /** + * The default implementation of `accept` checks the file's mime type or + * extension against this list. This is a comma separated list of mime + * types or file extensions. + * + * Eg.: `image/*,application/pdf,.psd` + * + * If the Dropzone is `clickable` this option will also be used as + * [`accept`](https://developer.mozilla.org/en-US/docs/HTML/Element/input#attr-accept) + * parameter on the hidden file input as well. + */ + acceptedFiles: null, + + /** + * **Deprecated!** + * Use acceptedFiles instead. + */ + acceptedMimeTypes: null, + + /** + * If false, files will be added to the queue but the queue will not be + * processed automatically. + * This can be useful if you need some additional user input before sending + * files (or if you want want all files sent at once). + * If you're ready to send the file simply call `myDropzone.processQueue()`. + * + * See the [enqueuing file uploads](#enqueuing-file-uploads) documentation + * section for more information. + */ + autoProcessQueue: true, + + /** + * If false, files added to the dropzone will not be queued by default. + * You'll have to call `enqueueFile(file)` manually. + */ + autoQueue: true, + + /** + * If `true`, this will add a link to every file preview to remove or cancel (if + * already uploading) the file. The `dictCancelUpload`, `dictCancelUploadConfirmation` + * and `dictRemoveFile` options are used for the wording. + */ + addRemoveLinks: false, + + /** + * Defines where to display the file previews – if `null` the + * Dropzone element itself is used. Can be a plain `HTMLElement` or a CSS + * selector. The element should have the `dropzone-previews` class so + * the previews are displayed properly. + */ + previewsContainer: null, + + /** + * This is the element the hidden input field (which is used when clicking on the + * dropzone to trigger file selection) will be appended to. This might + * be important in case you use frameworks to switch the content of your page. + */ + hiddenInputContainer: "body", + + /** + * If null, no capture type will be specified + * If camera, mobile devices will skip the file selection and choose camera + * If microphone, mobile devices will skip the file selection and choose the microphone + * If camcorder, mobile devices will skip the file selection and choose the camera in video mode + * On apple devices multiple must be set to false. AcceptedFiles may need to + * be set to an appropriate mime type (e.g. "image/*", "audio/*", or "video/*"). + */ + capture: null, + + /** + * **Deprecated**. Use `renameFile` instead. + */ + renameFilename: null, + + /** + * A function that is invoked before the file is uploaded to the server and renames the file. + * This function gets the `File` as argument and can use the `file.name`. The actual name of the + * file that gets used during the upload can be accessed through `file.upload.filename`. + */ + renameFile: null, + + /** + * If `true` the fallback will be forced. This is very useful to test your server + * implementations first and make sure that everything works as + * expected without dropzone if you experience problems, and to test + * how your fallbacks will look. + */ + forceFallback: false, + + /** + * The text used before any files are dropped. + */ + dictDefaultMessage: "Drop files here to upload", + + /** + * The text that replaces the default message text it the browser is not supported. + */ + dictFallbackMessage: "Your browser does not support drag'n'drop file uploads.", + + /** + * The text that will be added before the fallback form. + * If you provide a fallback element yourself, or if this option is `null` this will + * be ignored. + */ + dictFallbackText: "Please use the fallback form below to upload your files like in the olden days.", + + /** + * If the filesize is too big. + * `{{filesize}}` and `{{maxFilesize}}` will be replaced with the respective configuration values. + */ + dictFileTooBig: "File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.", + + /** + * If the file doesn't match the file type. + */ + dictInvalidFileType: "You can't upload files of this type.", + + /** + * If the server response was invalid. + * `{{statusCode}}` will be replaced with the servers status code. + */ + dictResponseError: "Server responded with {{statusCode}} code.", + + /** + * If `addRemoveLinks` is true, the text to be used for the cancel upload link. + */ + dictCancelUpload: "Cancel upload", + + /** + * If `addRemoveLinks` is true, the text to be used for confirmation when cancelling upload. + */ + dictCancelUploadConfirmation: "Are you sure you want to cancel this upload?", + + /** + * If `addRemoveLinks` is true, the text to be used to remove a file. + */ + dictRemoveFile: "Remove file", + + /** + * If this is not null, then the user will be prompted before removing a file. + */ + dictRemoveFileConfirmation: null, + + /** + * Displayed if `maxFiles` is st and exceeded. + * The string `{{maxFiles}}` will be replaced by the configuration value. + */ + dictMaxFilesExceeded: "You can not upload any more files.", + + /** + * Allows you to translate the different units. Starting with `tb` for terabytes and going down to + * `b` for bytes. + */ + dictFileSizeUnits: { tb: "TB", gb: "GB", mb: "MB", kb: "KB", b: "b" }, + + /** + * Called when dropzone initialized + * You can add event listeners here + */ + init: function init() {}, + + + /** + * Can be an **object** of additional parameters to transfer to the server, **or** a `Function` + * that gets invoked with the `files`, `xhr` and, if it's a chunked upload, `chunk` arguments. In case + * of a function, this needs to return a map. + * + * The default implementation does nothing for normal uploads, but adds relevant information for + * chunked uploads. + * + * This is the same as adding hidden input fields in the form element. + */ + params: function params(files, xhr, chunk) { + if (chunk) { + return { + dzuuid: chunk.file.upload.uuid, + dzchunkindex: chunk.index, + dztotalfilesize: chunk.file.size, + dzchunksize: this.options.chunkSize, + dztotalchunkcount: chunk.file.upload.totalChunkCount, + dzchunkbyteoffset: chunk.index * this.options.chunkSize + }; + } + }, + + + /** + * A function that gets a [file](https://developer.mozilla.org/en-US/docs/DOM/File) + * and a `done` function as parameters. + * + * If the done function is invoked without arguments, the file is "accepted" and will + * be processed. If you pass an error message, the file is rejected, and the error + * message will be displayed. + * This function will not be called if the file is too big or doesn't match the mime types. + */ + accept: function accept(file, done) { + return done(); + }, + + + /** + * The callback that will be invoked when all chunks have been uploaded for a file. + * It gets the file for which the chunks have been uploaded as the first parameter, + * and the `done` function as second. `done()` needs to be invoked when everything + * needed to finish the upload process is done. + */ + chunksUploaded: function chunksUploaded(file, done) { + done(); + }, + + /** + * Gets called when the browser is not supported. + * The default implementation shows the fallback input field and adds + * a text. + */ + fallback: function fallback() { + // This code should pass in IE7... :( + var messageElement = void 0; + this.element.className = this.element.className + " dz-browser-not-supported"; + + for (var _iterator2 = this.element.getElementsByTagName("div"), _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) { + var _ref2; + + if (_isArray2) { + if (_i2 >= _iterator2.length) break; + _ref2 = _iterator2[_i2++]; + } else { + _i2 = _iterator2.next(); + if (_i2.done) break; + _ref2 = _i2.value; + } + var child = _ref2; - /* - This is a list of all available events you can register on a dropzone object. - - You can register an event handler like this: - - dropzone.on("dragEnter", function() { }); - */ - - Dropzone.prototype.events = ["drop", "dragstart", "dragend", "dragenter", "dragover", "dragleave", "addedfile", "addedfiles", "removedfile", "thumbnail", "error", "errormultiple", "processing", "processingmultiple", "uploadprogress", "totaluploadprogress", "sending", "sendingmultiple", "success", "successmultiple", "canceled", "canceledmultiple", "complete", "completemultiple", "reset", "maxfilesexceeded", "maxfilesreached", "queuecomplete"]; - - Dropzone.prototype.defaultOptions = { - url: null, - method: "post", - withCredentials: false, - parallelUploads: 2, - uploadMultiple: false, - maxFilesize: 256, - paramName: "file", - createImageThumbnails: true, - maxThumbnailFilesize: 10, - thumbnailWidth: 120, - thumbnailHeight: 120, - filesizeBase: 1000, - maxFiles: null, - params: {}, - clickable: true, - ignoreHiddenFiles: true, - acceptedFiles: null, - acceptedMimeTypes: null, - autoProcessQueue: true, - autoQueue: true, - addRemoveLinks: false, - previewsContainer: null, - hiddenInputContainer: "body", - capture: null, - renameFilename: null, - dictDefaultMessage: "Drop files here to upload", - dictFallbackMessage: "Your browser does not support drag'n'drop file uploads.", - dictFallbackText: "Please use the fallback form below to upload your files like in the olden days.", - dictFileTooBig: "File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.", - dictInvalidFileType: "You can't upload files of this type.", - dictResponseError: "Server responded with {{statusCode}} code.", - dictCancelUpload: "Cancel upload", - dictCancelUploadConfirmation: "Are you sure you want to cancel this upload?", - dictRemoveFile: "Remove file", - dictRemoveFileConfirmation: null, - dictMaxFilesExceeded: "You can not upload any more files.", - accept: function(file, done) { - return done(); - }, - init: function() { - return noop; - }, - forceFallback: false, - fallback: function() { - var child, messageElement, span, _i, _len, _ref; - this.element.className = "" + this.element.className + " dz-browser-not-supported"; - _ref = this.element.getElementsByTagName("div"); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - child = _ref[_i]; - if (/(^| )dz-message($| )/.test(child.className)) { - messageElement = child; - child.className = "dz-message"; - continue; + if (/(^| )dz-message($| )/.test(child.className)) { + messageElement = child; + child.className = "dz-message"; // Removes the 'dz-default' class + break; + } } - } - if (!messageElement) { - messageElement = Dropzone.createElement("

"); - this.element.appendChild(messageElement); - } - span = messageElement.getElementsByTagName("span")[0]; - if (span) { - if (span.textContent != null) { - span.textContent = this.options.dictFallbackMessage; - } else if (span.innerText != null) { - span.innerText = this.options.dictFallbackMessage; + if (!messageElement) { + messageElement = Dropzone.createElement("
"); + this.element.appendChild(messageElement); } - } - return this.element.appendChild(this.getFallbackForm()); - }, - resize: function(file) { - var info, srcRatio, trgRatio; - info = { - srcX: 0, - srcY: 0, - srcWidth: file.width, - srcHeight: file.height - }; - srcRatio = file.width / file.height; - info.optWidth = this.options.thumbnailWidth; - info.optHeight = this.options.thumbnailHeight; - if ((info.optWidth == null) && (info.optHeight == null)) { - info.optWidth = info.srcWidth; - info.optHeight = info.srcHeight; - } else if (info.optWidth == null) { - info.optWidth = srcRatio * info.optHeight; - } else if (info.optHeight == null) { - info.optHeight = (1 / srcRatio) * info.optWidth; - } - trgRatio = info.optWidth / info.optHeight; - if (file.height < info.optHeight || file.width < info.optWidth) { - info.trgHeight = info.srcHeight; - info.trgWidth = info.srcWidth; - } else { - if (srcRatio > trgRatio) { - info.srcHeight = file.height; - info.srcWidth = info.srcHeight * trgRatio; - } else { - info.srcWidth = file.width; - info.srcHeight = info.srcWidth / trgRatio; + + var span = messageElement.getElementsByTagName("span")[0]; + if (span) { + if (span.textContent != null) { + span.textContent = this.options.dictFallbackMessage; + } else if (span.innerText != null) { + span.innerText = this.options.dictFallbackMessage; + } } - } - info.srcX = (file.width - info.srcWidth) / 2; - info.srcY = (file.height - info.srcHeight) / 2; - return info; - }, - /* - Those functions register themselves to the events on init and handle all - the user interface specific stuff. Overwriting them won't break the upload - but can break the way it's displayed. - You can overwrite them if you don't like the default behavior. If you just - want to add an additional event handler, register it on the dropzone object - and don't overwrite those options. - */ - drop: function(e) { - return this.element.classList.remove("dz-drag-hover"); - }, - dragstart: noop, - dragend: function(e) { - return this.element.classList.remove("dz-drag-hover"); - }, - dragenter: function(e) { - return this.element.classList.add("dz-drag-hover"); - }, - dragover: function(e) { - return this.element.classList.add("dz-drag-hover"); - }, - dragleave: function(e) { - return this.element.classList.remove("dz-drag-hover"); - }, - paste: noop, - reset: function() { - return this.element.classList.remove("dz-started"); - }, - addedfile: function(file) { - var node, removeFileEvent, removeLink, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _results; - if (this.element === this.previewsContainer) { - this.element.classList.add("dz-started"); - } - if (this.previewsContainer) { - file.previewElement = Dropzone.createElement(this.options.previewTemplate.trim()); - file.previewTemplate = file.previewElement; - this.previewsContainer.appendChild(file.previewElement); - _ref = file.previewElement.querySelectorAll("[data-dz-name]"); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - node = _ref[_i]; - node.textContent = this._renameFilename(file.name); + return this.element.appendChild(this.getFallbackForm()); + }, + + + /** + * Gets called to calculate the thumbnail dimensions. + * + * It gets `file`, `width` and `height` (both may be `null`) as parameters and must return an object containing: + * + * - `srcWidth` & `srcHeight` (required) + * - `trgWidth` & `trgHeight` (required) + * - `srcX` & `srcY` (optional, default `0`) + * - `trgX` & `trgY` (optional, default `0`) + * + * Those values are going to be used by `ctx.drawImage()`. + */ + resize: function resize(file, width, height, resizeMethod) { + var info = { + srcX: 0, + srcY: 0, + srcWidth: file.width, + srcHeight: file.height + }; + + var srcRatio = file.width / file.height; + + // Automatically calculate dimensions if not specified + if (width == null && height == null) { + width = info.srcWidth; + height = info.srcHeight; + } else if (width == null) { + width = height * srcRatio; + } else if (height == null) { + height = width / srcRatio; + } + + // Make sure images aren't upscaled + width = Math.min(width, info.srcWidth); + height = Math.min(height, info.srcHeight); + + var trgRatio = width / height; + + if (info.srcWidth > width || info.srcHeight > height) { + // Image is bigger and needs rescaling + if (resizeMethod === 'crop') { + if (srcRatio > trgRatio) { + info.srcHeight = file.height; + info.srcWidth = info.srcHeight * trgRatio; + } else { + info.srcWidth = file.width; + info.srcHeight = info.srcWidth / trgRatio; + } + } else if (resizeMethod === 'contain') { + // Method 'contain' + if (srcRatio > trgRatio) { + height = width / srcRatio; + } else { + width = height * srcRatio; + } + } else { + throw new Error("Unknown resizeMethod '" + resizeMethod + "'"); + } } - _ref1 = file.previewElement.querySelectorAll("[data-dz-size]"); - for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { - node = _ref1[_j]; - node.innerHTML = this.filesize(file.size); + + info.srcX = (file.width - info.srcWidth) / 2; + info.srcY = (file.height - info.srcHeight) / 2; + + info.trgWidth = width; + info.trgHeight = height; + + return info; + }, + + + /** + * Can be used to transform the file (for example, resize an image if necessary). + * + * The default implementation uses `resizeWidth` and `resizeHeight` (if provided) and resizes + * images according to those dimensions. + * + * Gets the `file` as the first parameter, and a `done()` function as the second, that needs + * to be invoked with the file when the transformation is done. + */ + transformFile: function transformFile(file, done) { + if ((this.options.resizeWidth || this.options.resizeHeight) && file.type.match(/image.*/)) { + return this.resizeImage(file, this.options.resizeWidth, this.options.resizeHeight, this.options.resizeMethod, done); + } else { + return done(file); } - if (this.options.addRemoveLinks) { - file._removeLink = Dropzone.createElement("" + this.options.dictRemoveFile + ""); - file.previewElement.appendChild(file._removeLink); + }, + + + /** + * A string that contains the template used for each dropped + * file. Change it to fulfill your needs but make sure to properly + * provide all elements. + * + * If you want to use an actual HTML element instead of providing a String + * as a config option, you could create a div with the id `tpl`, + * put the template inside it and provide the element like this: + * + * document + * .querySelector('#tpl') + * .innerHTML + * + */ + previewTemplate: "
\n
\n
\n
\n
\n
\n
\n
\n
\n \n Check\n \n \n \n \n \n
\n
\n \n Error\n \n \n \n \n \n \n \n
\n
", + + // END OPTIONS + // (Required by the dropzone documentation parser) + + + /* + Those functions register themselves to the events on init and handle all + the user interface specific stuff. Overwriting them won't break the upload + but can break the way it's displayed. + You can overwrite them if you don't like the default behavior. If you just + want to add an additional event handler, register it on the dropzone object + and don't overwrite those options. + */ + + // Those are self explanatory and simply concern the DragnDrop. + drop: function drop(e) { + return this.element.classList.remove("dz-drag-hover"); + }, + dragstart: function dragstart(e) {}, + dragend: function dragend(e) { + return this.element.classList.remove("dz-drag-hover"); + }, + dragenter: function dragenter(e) { + return this.element.classList.add("dz-drag-hover"); + }, + dragover: function dragover(e) { + return this.element.classList.add("dz-drag-hover"); + }, + dragleave: function dragleave(e) { + return this.element.classList.remove("dz-drag-hover"); + }, + paste: function paste(e) {}, + + + // Called whenever there are no files left in the dropzone anymore, and the + // dropzone should be displayed as if in the initial state. + reset: function reset() { + return this.element.classList.remove("dz-started"); + }, + + + // Called when a file is added to the queue + // Receives `file` + addedfile: function addedfile(file) { + var _this2 = this; + + if (this.element === this.previewsContainer) { + this.element.classList.add("dz-started"); } - removeFileEvent = (function(_this) { - return function(e) { + + if (this.previewsContainer) { + file.previewElement = Dropzone.createElement(this.options.previewTemplate.trim()); + file.previewTemplate = file.previewElement; // Backwards compatibility + + this.previewsContainer.appendChild(file.previewElement); + for (var _iterator3 = file.previewElement.querySelectorAll("[data-dz-name]"), _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) { + var _ref3; + + if (_isArray3) { + if (_i3 >= _iterator3.length) break; + _ref3 = _iterator3[_i3++]; + } else { + _i3 = _iterator3.next(); + if (_i3.done) break; + _ref3 = _i3.value; + } + + var node = _ref3; + + node.textContent = file.name; + } + for (var _iterator4 = file.previewElement.querySelectorAll("[data-dz-size]"), _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) { + if (_isArray4) { + if (_i4 >= _iterator4.length) break; + node = _iterator4[_i4++]; + } else { + _i4 = _iterator4.next(); + if (_i4.done) break; + node = _i4.value; + } + + node.innerHTML = this.filesize(file.size); + } + + if (this.options.addRemoveLinks) { + file._removeLink = Dropzone.createElement("" + this.options.dictRemoveFile + ""); + file.previewElement.appendChild(file._removeLink); + } + + var removeFileEvent = function removeFileEvent(e) { e.preventDefault(); e.stopPropagation(); if (file.status === Dropzone.UPLOADING) { - return Dropzone.confirm(_this.options.dictCancelUploadConfirmation, function() { - return _this.removeFile(file); + return Dropzone.confirm(_this2.options.dictCancelUploadConfirmation, function () { + return _this2.removeFile(file); }); } else { - if (_this.options.dictRemoveFileConfirmation) { - return Dropzone.confirm(_this.options.dictRemoveFileConfirmation, function() { - return _this.removeFile(file); + if (_this2.options.dictRemoveFileConfirmation) { + return Dropzone.confirm(_this2.options.dictRemoveFileConfirmation, function () { + return _this2.removeFile(file); }); } else { - return _this.removeFile(file); + return _this2.removeFile(file); } } }; - })(this); - _ref2 = file.previewElement.querySelectorAll("[data-dz-remove]"); - _results = []; - for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) { - removeLink = _ref2[_k]; - _results.push(removeLink.addEventListener("click", removeFileEvent)); - } - return _results; - } - }, - removedfile: function(file) { - var _ref; - if (file.previewElement) { - if ((_ref = file.previewElement) != null) { - _ref.parentNode.removeChild(file.previewElement); + + for (var _iterator5 = file.previewElement.querySelectorAll("[data-dz-remove]"), _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) { + var _ref4; + + if (_isArray5) { + if (_i5 >= _iterator5.length) break; + _ref4 = _iterator5[_i5++]; + } else { + _i5 = _iterator5.next(); + if (_i5.done) break; + _ref4 = _i5.value; + } + + var removeLink = _ref4; + + removeLink.addEventListener("click", removeFileEvent); + } } - } - return this._updateMaxFilesReachedClass(); - }, - thumbnail: function(file, dataUrl) { - var thumbnailElement, _i, _len, _ref; - if (file.previewElement) { - file.previewElement.classList.remove("dz-file-preview"); - _ref = file.previewElement.querySelectorAll("[data-dz-thumbnail]"); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - thumbnailElement = _ref[_i]; - thumbnailElement.alt = file.name; - thumbnailElement.src = dataUrl; + }, + + + // Called whenever a file is removed. + removedfile: function removedfile(file) { + if (file.previewElement != null && file.previewElement.parentNode != null) { + file.previewElement.parentNode.removeChild(file.previewElement); } - return setTimeout(((function(_this) { - return function() { + return this._updateMaxFilesReachedClass(); + }, + + + // Called when a thumbnail has been generated + // Receives `file` and `dataUrl` + thumbnail: function thumbnail(file, dataUrl) { + if (file.previewElement) { + file.previewElement.classList.remove("dz-file-preview"); + for (var _iterator6 = file.previewElement.querySelectorAll("[data-dz-thumbnail]"), _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) { + var _ref5; + + if (_isArray6) { + if (_i6 >= _iterator6.length) break; + _ref5 = _iterator6[_i6++]; + } else { + _i6 = _iterator6.next(); + if (_i6.done) break; + _ref5 = _i6.value; + } + + var thumbnailElement = _ref5; + + thumbnailElement.alt = file.name; + thumbnailElement.src = dataUrl; + } + + return setTimeout(function () { return file.previewElement.classList.add("dz-image-preview"); - }; - })(this)), 1); - } - }, - error: function(file, message) { - var node, _i, _len, _ref, _results; - if (file.previewElement) { - file.previewElement.classList.add("dz-error"); - if (typeof message !== "String" && message.error) { - message = message.error; + }, 1); } - _ref = file.previewElement.querySelectorAll("[data-dz-errormessage]"); - _results = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - node = _ref[_i]; - _results.push(node.textContent = message); + }, + + + // Called whenever an error occurs + // Receives `file` and `message` + error: function error(file, message) { + if (file.previewElement) { + file.previewElement.classList.add("dz-error"); + if (typeof message !== "String" && message.error) { + message = message.error; + } + for (var _iterator7 = file.previewElement.querySelectorAll("[data-dz-errormessage]"), _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) { + var _ref6; + + if (_isArray7) { + if (_i7 >= _iterator7.length) break; + _ref6 = _iterator7[_i7++]; + } else { + _i7 = _iterator7.next(); + if (_i7.done) break; + _ref6 = _i7.value; + } + + var node = _ref6; + + node.textContent = message; + } } - return _results; - } - }, - errormultiple: noop, - processing: function(file) { - if (file.previewElement) { - file.previewElement.classList.add("dz-processing"); - if (file._removeLink) { - return file._removeLink.textContent = this.options.dictCancelUpload; + }, + errormultiple: function errormultiple() {}, + + + // Called when a file gets processed. Since there is a cue, not all added + // files are processed immediately. + // Receives `file` + processing: function processing(file) { + if (file.previewElement) { + file.previewElement.classList.add("dz-processing"); + if (file._removeLink) { + return file._removeLink.textContent = this.options.dictCancelUpload; + } } - } - }, - processingmultiple: noop, - uploadprogress: function(file, progress, bytesSent) { - var node, _i, _len, _ref, _results; - if (file.previewElement) { - _ref = file.previewElement.querySelectorAll("[data-dz-uploadprogress]"); - _results = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - node = _ref[_i]; - if (node.nodeName === 'PROGRESS') { - _results.push(node.value = progress); - } else { - _results.push(node.style.width = "" + progress + "%"); + }, + processingmultiple: function processingmultiple() {}, + + + // Called whenever the upload progress gets updated. + // Receives `file`, `progress` (percentage 0-100) and `bytesSent`. + // To get the total number of bytes of the file, use `file.size` + uploadprogress: function uploadprogress(file, progress, bytesSent) { + if (file.previewElement) { + for (var _iterator8 = file.previewElement.querySelectorAll("[data-dz-uploadprogress]"), _isArray8 = Array.isArray(_iterator8), _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : _iterator8[Symbol.iterator]();;) { + var _ref7; + + if (_isArray8) { + if (_i8 >= _iterator8.length) break; + _ref7 = _iterator8[_i8++]; + } else { + _i8 = _iterator8.next(); + if (_i8.done) break; + _ref7 = _i8.value; + } + + var node = _ref7; + + node.nodeName === 'PROGRESS' ? node.value = progress : node.style.width = progress + "%"; } } - return _results; - } - }, - totaluploadprogress: noop, - sending: noop, - sendingmultiple: noop, - success: function(file) { - if (file.previewElement) { - return file.previewElement.classList.add("dz-success"); - } - }, - successmultiple: noop, - canceled: function(file) { - return this.emit("error", file, "Upload canceled."); - }, - canceledmultiple: noop, - complete: function(file) { - if (file._removeLink) { - file._removeLink.textContent = this.options.dictRemoveFile; - } - if (file.previewElement) { - return file.previewElement.classList.add("dz-complete"); - } - }, - completemultiple: noop, - maxfilesexceeded: noop, - maxfilesreached: noop, - queuecomplete: noop, - addedfiles: noop, - previewTemplate: "
\n
\n
\n
\n
\n
\n
\n
\n
\n \n Check\n \n \n \n \n \n
\n
\n \n Error\n \n \n \n \n \n \n \n
\n
" - }; + }, - extend = function() { - var key, object, objects, target, val, _i, _len; - target = arguments[0], objects = 2 <= arguments.length ? __slice.call(arguments, 1) : []; - for (_i = 0, _len = objects.length; _i < _len; _i++) { - object = objects[_i]; - for (key in object) { - val = object[key]; - target[key] = val; - } + + // Called whenever the total upload progress gets updated. + // Called with totalUploadProgress (0-100), totalBytes and totalBytesSent + totaluploadprogress: function totaluploadprogress() {}, + + + // Called just before the file is sent. Gets the `xhr` object as second + // parameter, so you can modify it (for example to add a CSRF token) and a + // `formData` object to add additional information. + sending: function sending() {}, + sendingmultiple: function sendingmultiple() {}, + + + // When the complete upload is finished and successful + // Receives `file` + success: function success(file) { + if (file.previewElement) { + return file.previewElement.classList.add("dz-success"); + } + }, + successmultiple: function successmultiple() {}, + + + // When the upload is canceled. + canceled: function canceled(file) { + return this.emit("error", file, "Upload canceled."); + }, + canceledmultiple: function canceledmultiple() {}, + + + // When the upload is finished, either with success or an error. + // Receives `file` + complete: function complete(file) { + if (file._removeLink) { + file._removeLink.textContent = this.options.dictRemoveFile; + } + if (file.previewElement) { + return file.previewElement.classList.add("dz-complete"); + } + }, + completemultiple: function completemultiple() {}, + maxfilesexceeded: function maxfilesexceeded() {}, + maxfilesreached: function maxfilesreached() {}, + queuecomplete: function queuecomplete() {}, + addedfiles: function addedfiles() {} + }; + + this.prototype._thumbnailQueue = []; + this.prototype._processingThumbnail = false; + } + + // global utility + + }, { + key: "extend", + value: function extend(target) { + for (var _len2 = arguments.length, objects = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + objects[_key2 - 1] = arguments[_key2]; } - return target; - }; - function Dropzone(element, options) { - var elementOptions, fallback, _ref; - this.element = element; - this.version = Dropzone.version; - this.defaultOptions.previewTemplate = this.defaultOptions.previewTemplate.replace(/\n*/g, ""); - this.clickableElements = []; - this.listeners = []; - this.files = []; - if (typeof this.element === "string") { - this.element = document.querySelector(this.element); - } - if (!(this.element && (this.element.nodeType != null))) { - throw new Error("Invalid dropzone element."); - } - if (this.element.dropzone) { - throw new Error("Dropzone already attached."); - } - Dropzone.instances.push(this); - this.element.dropzone = this; - elementOptions = (_ref = Dropzone.optionsForElement(this.element)) != null ? _ref : {}; - this.options = extend({}, this.defaultOptions, elementOptions, options != null ? options : {}); - if (this.options.forceFallback || !Dropzone.isBrowserSupported()) { - return this.options.fallback.call(this); - } - if (this.options.url == null) { - this.options.url = this.element.getAttribute("action"); - } - if (!this.options.url) { - throw new Error("No URL provided."); - } - if (this.options.acceptedFiles && this.options.acceptedMimeTypes) { - throw new Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated."); - } - if (this.options.acceptedMimeTypes) { - this.options.acceptedFiles = this.options.acceptedMimeTypes; - delete this.options.acceptedMimeTypes; - } - this.options.method = this.options.method.toUpperCase(); - if ((fallback = this.getExistingFallback()) && fallback.parentNode) { - fallback.parentNode.removeChild(fallback); - } - if (this.options.previewsContainer !== false) { - if (this.options.previewsContainer) { - this.previewsContainer = Dropzone.getElement(this.options.previewsContainer, "previewsContainer"); + for (var _iterator9 = objects, _isArray9 = Array.isArray(_iterator9), _i9 = 0, _iterator9 = _isArray9 ? _iterator9 : _iterator9[Symbol.iterator]();;) { + var _ref8; + + if (_isArray9) { + if (_i9 >= _iterator9.length) break; + _ref8 = _iterator9[_i9++]; } else { - this.previewsContainer = this.element; + _i9 = _iterator9.next(); + if (_i9.done) break; + _ref8 = _i9.value; } - } - if (this.options.clickable) { - if (this.options.clickable === true) { - this.clickableElements = [this.element]; - } else { - this.clickableElements = Dropzone.getElements(this.options.clickable, "clickable"); + + var object = _ref8; + + for (var key in object) { + var val = object[key]; + target[key] = val; } } - this.init(); + return target; } + }]); - Dropzone.prototype.getAcceptedFiles = function() { - var file, _i, _len, _ref, _results; - _ref = this.files; - _results = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - file = _ref[_i]; - if (file.accepted) { - _results.push(file); - } - } - return _results; - }; + function Dropzone(el, options) { + _classCallCheck(this, Dropzone); - Dropzone.prototype.getRejectedFiles = function() { - var file, _i, _len, _ref, _results; - _ref = this.files; - _results = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - file = _ref[_i]; - if (!file.accepted) { - _results.push(file); - } + var _this = _possibleConstructorReturn(this, (Dropzone.__proto__ || Object.getPrototypeOf(Dropzone)).call(this)); + + var fallback = void 0, + left = void 0; + _this.element = el; + // For backwards compatibility since the version was in the prototype previously + _this.version = Dropzone.version; + + _this.defaultOptions.previewTemplate = _this.defaultOptions.previewTemplate.replace(/\n*/g, ""); + + _this.clickableElements = []; + _this.listeners = []; + _this.files = []; // All files + + if (typeof _this.element === "string") { + _this.element = document.querySelector(_this.element); + } + + // Not checking if instance of HTMLElement or Element since IE9 is extremely weird. + if (!_this.element || _this.element.nodeType == null) { + throw new Error("Invalid dropzone element."); + } + + if (_this.element.dropzone) { + throw new Error("Dropzone already attached."); + } + + // Now add this dropzone to the instances. + Dropzone.instances.push(_this); + + // Put the dropzone inside the element itself. + _this.element.dropzone = _this; + + var elementOptions = (left = Dropzone.optionsForElement(_this.element)) != null ? left : {}; + + _this.options = Dropzone.extend({}, _this.defaultOptions, elementOptions, options != null ? options : {}); + + // If the browser failed, just call the fallback and leave + if (_this.options.forceFallback || !Dropzone.isBrowserSupported()) { + var _ret; + + return _ret = _this.options.fallback.call(_this), _possibleConstructorReturn(_this, _ret); + } + + // @options.url = @element.getAttribute "action" unless @options.url? + if (_this.options.url == null) { + _this.options.url = _this.element.getAttribute("action"); + } + + if (!_this.options.url) { + throw new Error("No URL provided."); + } + + if (_this.options.acceptedFiles && _this.options.acceptedMimeTypes) { + throw new Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated."); + } + + if (_this.options.uploadMultiple && _this.options.chunking) { + throw new Error('You cannot set both: uploadMultiple and chunking.'); + } + + // Backwards compatibility + if (_this.options.acceptedMimeTypes) { + _this.options.acceptedFiles = _this.options.acceptedMimeTypes; + delete _this.options.acceptedMimeTypes; + } + + // Backwards compatibility + if (_this.options.renameFilename != null) { + _this.options.renameFile = function (file) { + return _this.options.renameFilename.call(_this, file.name, file); + }; + } + + _this.options.method = _this.options.method.toUpperCase(); + + if ((fallback = _this.getExistingFallback()) && fallback.parentNode) { + // Remove the fallback + fallback.parentNode.removeChild(fallback); + } + + // Display previews in the previewsContainer element or the Dropzone element unless explicitly set to false + if (_this.options.previewsContainer !== false) { + if (_this.options.previewsContainer) { + _this.previewsContainer = Dropzone.getElement(_this.options.previewsContainer, "previewsContainer"); + } else { + _this.previewsContainer = _this.element; } - return _results; - }; + } - Dropzone.prototype.getFilesWithStatus = function(status) { - var file, _i, _len, _ref, _results; - _ref = this.files; - _results = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - file = _ref[_i]; - if (file.status === status) { - _results.push(file); - } + if (_this.options.clickable) { + if (_this.options.clickable === true) { + _this.clickableElements = [_this.element]; + } else { + _this.clickableElements = Dropzone.getElements(_this.options.clickable, "clickable"); } - return _results; - }; + } - Dropzone.prototype.getQueuedFiles = function() { - return this.getFilesWithStatus(Dropzone.QUEUED); - }; + _this.init(); + return _this; + } - Dropzone.prototype.getUploadingFiles = function() { - return this.getFilesWithStatus(Dropzone.UPLOADING); - }; + // Returns all files that have been accepted + + + _createClass(Dropzone, [{ + key: "getAcceptedFiles", + value: function getAcceptedFiles() { + return this.files.filter(function (file) { + return file.accepted; + }).map(function (file) { + return file; + }); + } + + // Returns all files that have been rejected + // Not sure when that's going to be useful, but added for completeness. - Dropzone.prototype.getAddedFiles = function() { + }, { + key: "getRejectedFiles", + value: function getRejectedFiles() { + return this.files.filter(function (file) { + return !file.accepted; + }).map(function (file) { + return file; + }); + } + }, { + key: "getFilesWithStatus", + value: function getFilesWithStatus(status) { + return this.files.filter(function (file) { + return file.status === status; + }).map(function (file) { + return file; + }); + } + + // Returns all files that are in the queue + + }, { + key: "getQueuedFiles", + value: function getQueuedFiles() { + return this.getFilesWithStatus(Dropzone.QUEUED); + } + }, { + key: "getUploadingFiles", + value: function getUploadingFiles() { + return this.getFilesWithStatus(Dropzone.UPLOADING); + } + }, { + key: "getAddedFiles", + value: function getAddedFiles() { return this.getFilesWithStatus(Dropzone.ADDED); - }; + } - Dropzone.prototype.getActiveFiles = function() { - var file, _i, _len, _ref, _results; - _ref = this.files; - _results = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - file = _ref[_i]; - if (file.status === Dropzone.UPLOADING || file.status === Dropzone.QUEUED) { - _results.push(file); - } - } - return _results; - }; + // Files that are either queued or uploading + + }, { + key: "getActiveFiles", + value: function getActiveFiles() { + return this.files.filter(function (file) { + return file.status === Dropzone.UPLOADING || file.status === Dropzone.QUEUED; + }).map(function (file) { + return file; + }); + } + + // The function that gets called when Dropzone is initialized. You + // can (and should) setup event listeners inside this function. + + }, { + key: "init", + value: function init() { + var _this3 = this; - Dropzone.prototype.init = function() { - var eventName, noPropagation, setupHiddenFileInput, _i, _len, _ref, _ref1; + // In case it isn't set already if (this.element.tagName === "form") { this.element.setAttribute("enctype", "multipart/form-data"); } + if (this.element.classList.contains("dropzone") && !this.element.querySelector(".dz-message")) { this.element.appendChild(Dropzone.createElement("
" + this.options.dictDefaultMessage + "
")); } + if (this.clickableElements.length) { - setupHiddenFileInput = (function(_this) { - return function() { - if (_this.hiddenFileInput) { - _this.hiddenFileInput.parentNode.removeChild(_this.hiddenFileInput); - } - _this.hiddenFileInput = document.createElement("input"); - _this.hiddenFileInput.setAttribute("type", "file"); - if ((_this.options.maxFiles == null) || _this.options.maxFiles > 1) { - _this.hiddenFileInput.setAttribute("multiple", "multiple"); - } - _this.hiddenFileInput.className = "dz-hidden-input"; - if (_this.options.acceptedFiles != null) { - _this.hiddenFileInput.setAttribute("accept", _this.options.acceptedFiles); - } - if (_this.options.capture != null) { - _this.hiddenFileInput.setAttribute("capture", _this.options.capture); - } - _this.hiddenFileInput.style.visibility = "hidden"; - _this.hiddenFileInput.style.position = "absolute"; - _this.hiddenFileInput.style.top = "0"; - _this.hiddenFileInput.style.left = "0"; - _this.hiddenFileInput.style.height = "0"; - _this.hiddenFileInput.style.width = "0"; - document.querySelector(_this.options.hiddenInputContainer).appendChild(_this.hiddenFileInput); - return _this.hiddenFileInput.addEventListener("change", function() { - var file, files, _i, _len; - files = _this.hiddenFileInput.files; - if (files.length) { - for (_i = 0, _len = files.length; _i < _len; _i++) { - file = files[_i]; - _this.addFile(file); + var setupHiddenFileInput = function setupHiddenFileInput() { + if (_this3.hiddenFileInput) { + _this3.hiddenFileInput.parentNode.removeChild(_this3.hiddenFileInput); + } + _this3.hiddenFileInput = document.createElement("input"); + _this3.hiddenFileInput.setAttribute("type", "file"); + if (_this3.options.maxFiles === null || _this3.options.maxFiles > 1) { + _this3.hiddenFileInput.setAttribute("multiple", "multiple"); + } + _this3.hiddenFileInput.className = "dz-hidden-input"; + + if (_this3.options.acceptedFiles !== null) { + _this3.hiddenFileInput.setAttribute("accept", _this3.options.acceptedFiles); + } + if (_this3.options.capture !== null) { + _this3.hiddenFileInput.setAttribute("capture", _this3.options.capture); + } + + // Not setting `display="none"` because some browsers don't accept clicks + // on elements that aren't displayed. + _this3.hiddenFileInput.style.visibility = "hidden"; + _this3.hiddenFileInput.style.position = "absolute"; + _this3.hiddenFileInput.style.top = "0"; + _this3.hiddenFileInput.style.left = "0"; + _this3.hiddenFileInput.style.height = "0"; + _this3.hiddenFileInput.style.width = "0"; + document.querySelector(_this3.options.hiddenInputContainer).appendChild(_this3.hiddenFileInput); + return _this3.hiddenFileInput.addEventListener("change", function () { + var files = _this3.hiddenFileInput.files; + + if (files.length) { + for (var _iterator10 = files, _isArray10 = Array.isArray(_iterator10), _i10 = 0, _iterator10 = _isArray10 ? _iterator10 : _iterator10[Symbol.iterator]();;) { + var _ref9; + + if (_isArray10) { + if (_i10 >= _iterator10.length) break; + _ref9 = _iterator10[_i10++]; + } else { + _i10 = _iterator10.next(); + if (_i10.done) break; + _ref9 = _i10.value; } + + var file = _ref9; + + _this3.addFile(file); } - _this.emit("addedfiles", files); - return setupHiddenFileInput(); - }); - }; - })(this); + } + _this3.emit("addedfiles", files); + return setupHiddenFileInput(); + }); + }; setupHiddenFileInput(); } - this.URL = (_ref = window.URL) != null ? _ref : window.webkitURL; - _ref1 = this.events; - for (_i = 0, _len = _ref1.length; _i < _len; _i++) { - eventName = _ref1[_i]; + + this.URL = window.URL !== null ? window.URL : window.webkitURL; + + // Setup all event listeners on the Dropzone object itself. + // They're not in @setupEventListeners() because they shouldn't be removed + // again when the dropzone gets disabled. + for (var _iterator11 = this.events, _isArray11 = Array.isArray(_iterator11), _i11 = 0, _iterator11 = _isArray11 ? _iterator11 : _iterator11[Symbol.iterator]();;) { + var _ref10; + + if (_isArray11) { + if (_i11 >= _iterator11.length) break; + _ref10 = _iterator11[_i11++]; + } else { + _i11 = _iterator11.next(); + if (_i11.done) break; + _ref10 = _i11.value; + } + + var eventName = _ref10; + this.on(eventName, this.options[eventName]); } - this.on("uploadprogress", (function(_this) { - return function() { - return _this.updateTotalUploadProgress(); - }; - })(this)); - this.on("removedfile", (function(_this) { - return function() { - return _this.updateTotalUploadProgress(); - }; - })(this)); - this.on("canceled", (function(_this) { - return function(file) { - return _this.emit("complete", file); - }; - })(this)); - this.on("complete", (function(_this) { - return function(file) { - if (_this.getAddedFiles().length === 0 && _this.getUploadingFiles().length === 0 && _this.getQueuedFiles().length === 0) { - return setTimeout((function() { - return _this.emit("queuecomplete"); - }), 0); - } - }; - })(this)); - noPropagation = function(e) { + + this.on("uploadprogress", function () { + return _this3.updateTotalUploadProgress(); + }); + + this.on("removedfile", function () { + return _this3.updateTotalUploadProgress(); + }); + + this.on("canceled", function (file) { + return _this3.emit("complete", file); + }); + + // Emit a `queuecomplete` event if all files finished uploading. + this.on("complete", function (file) { + if (_this3.getAddedFiles().length === 0 && _this3.getUploadingFiles().length === 0 && _this3.getQueuedFiles().length === 0) { + // This needs to be deferred so that `queuecomplete` really triggers after `complete` + return setTimeout(function () { + return _this3.emit("queuecomplete"); + }, 0); + } + }); + + var noPropagation = function noPropagation(e) { e.stopPropagation(); if (e.preventDefault) { return e.preventDefault(); @@ -631,91 +1311,106 @@ return e.returnValue = false; } }; - this.listeners = [ - { - element: this.element, - events: { - "dragstart": (function(_this) { - return function(e) { - return _this.emit("dragstart", e); - }; - })(this), - "dragenter": (function(_this) { - return function(e) { - noPropagation(e); - return _this.emit("dragenter", e); - }; - })(this), - "dragover": (function(_this) { - return function(e) { - var efct; - try { - efct = e.dataTransfer.effectAllowed; - } catch (_error) {} - e.dataTransfer.dropEffect = 'move' === efct || 'linkMove' === efct ? 'move' : 'copy'; - noPropagation(e); - return _this.emit("dragover", e); - }; - })(this), - "dragleave": (function(_this) { - return function(e) { - return _this.emit("dragleave", e); - }; - })(this), - "drop": (function(_this) { - return function(e) { - noPropagation(e); - return _this.drop(e); - }; - })(this), - "dragend": (function(_this) { - return function(e) { - return _this.emit("dragend", e); - }; - })(this) + + // Create the listeners + this.listeners = [{ + element: this.element, + events: { + "dragstart": function dragstart(e) { + return _this3.emit("dragstart", e); + }, + "dragenter": function dragenter(e) { + noPropagation(e); + return _this3.emit("dragenter", e); + }, + "dragover": function dragover(e) { + // Makes it possible to drag files from chrome's download bar + // http://stackoverflow.com/questions/19526430/drag-and-drop-file-uploads-from-chrome-downloads-bar + // Try is required to prevent bug in Internet Explorer 11 (SCRIPT65535 exception) + var efct = void 0; + try { + efct = e.dataTransfer.effectAllowed; + } catch (error) {} + e.dataTransfer.dropEffect = 'move' === efct || 'linkMove' === efct ? 'move' : 'copy'; + + noPropagation(e); + return _this3.emit("dragover", e); + }, + "dragleave": function dragleave(e) { + return _this3.emit("dragleave", e); + }, + "drop": function drop(e) { + noPropagation(e); + return _this3.drop(e); + }, + "dragend": function dragend(e) { + return _this3.emit("dragend", e); } - } - ]; - this.clickableElements.forEach((function(_this) { - return function(clickableElement) { - return _this.listeners.push({ - element: clickableElement, - events: { - "click": function(evt) { - if ((clickableElement !== _this.element) || (evt.target === _this.element || Dropzone.elementInside(evt.target, _this.element.querySelector(".dz-message")))) { - _this.hiddenFileInput.click(); - } - return true; + + // This is disabled right now, because the browsers don't implement it properly. + // "paste": (e) => + // noPropagation e + // @paste e + } }]; + + this.clickableElements.forEach(function (clickableElement) { + return _this3.listeners.push({ + element: clickableElement, + events: { + "click": function click(evt) { + // Only the actual dropzone or the message element should trigger file selection + if (clickableElement !== _this3.element || evt.target === _this3.element || Dropzone.elementInside(evt.target, _this3.element.querySelector(".dz-message"))) { + _this3.hiddenFileInput.click(); // Forward the click } + return true; } - }); - }; - })(this)); + } + }); + }); + this.enable(); + return this.options.init.call(this); - }; + } - Dropzone.prototype.destroy = function() { - var _ref; + // Not fully tested yet + + }, { + key: "destroy", + value: function destroy() { this.disable(); this.removeAllFiles(true); - if ((_ref = this.hiddenFileInput) != null ? _ref.parentNode : void 0) { + if (this.hiddenFileInput != null ? this.hiddenFileInput.parentNode : undefined) { this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput); this.hiddenFileInput = null; } delete this.element.dropzone; return Dropzone.instances.splice(Dropzone.instances.indexOf(this), 1); - }; + } + }, { + key: "updateTotalUploadProgress", + value: function updateTotalUploadProgress() { + var totalUploadProgress = void 0; + var totalBytesSent = 0; + var totalBytes = 0; + + var activeFiles = this.getActiveFiles(); - Dropzone.prototype.updateTotalUploadProgress = function() { - var activeFiles, file, totalBytes, totalBytesSent, totalUploadProgress, _i, _len, _ref; - totalBytesSent = 0; - totalBytes = 0; - activeFiles = this.getActiveFiles(); if (activeFiles.length) { - _ref = this.getActiveFiles(); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - file = _ref[_i]; + for (var _iterator12 = this.getActiveFiles(), _isArray12 = Array.isArray(_iterator12), _i12 = 0, _iterator12 = _isArray12 ? _iterator12 : _iterator12[Symbol.iterator]();;) { + var _ref11; + + if (_isArray12) { + if (_i12 >= _iterator12.length) break; + _ref11 = _iterator12[_i12++]; + } else { + _i12 = _iterator12.next(); + if (_i12.done) break; + _ref11 = _i12.value; + } + + var file = _ref11; + totalBytesSent += file.upload.bytesSent; totalBytes += file.upload.total; } @@ -723,149 +1418,198 @@ } else { totalUploadProgress = 100; } + return this.emit("totaluploadprogress", totalUploadProgress, totalBytes, totalBytesSent); - }; + } - Dropzone.prototype._getParamName = function(n) { + // @options.paramName can be a function taking one parameter rather than a string. + // A parameter name for a file is obtained simply by calling this with an index number. + + }, { + key: "_getParamName", + value: function _getParamName(n) { if (typeof this.options.paramName === "function") { return this.options.paramName(n); } else { return "" + this.options.paramName + (this.options.uploadMultiple ? "[" + n + "]" : ""); } - }; + } + + // If @options.renameFile is a function, + // the function will be used to rename the file.name before appending it to the formData - Dropzone.prototype._renameFilename = function(name) { - if (typeof this.options.renameFilename !== "function") { - return name; + }, { + key: "_renameFile", + value: function _renameFile(file) { + if (typeof this.options.renameFile !== "function") { + return file.name; } - return this.options.renameFilename(name); - }; + return this.options.renameFile(file); + } - Dropzone.prototype.getFallbackForm = function() { - var existingFallback, fields, fieldsString, form; + // Returns a form that can be used as fallback if the browser does not support DragnDrop + // + // If the dropzone is already a form, only the input field and button are returned. Otherwise a complete form element is provided. + // This code has to pass in IE7 :( + + }, { + key: "getFallbackForm", + value: function getFallbackForm() { + var existingFallback = void 0, + form = void 0; if (existingFallback = this.getExistingFallback()) { return existingFallback; } - fieldsString = "
"; + + var fieldsString = "
"; if (this.options.dictFallbackText) { fieldsString += "

" + this.options.dictFallbackText + "

"; } - fieldsString += "
"; - fields = Dropzone.createElement(fieldsString); + fieldsString += "
"; + + var fields = Dropzone.createElement(fieldsString); if (this.element.tagName !== "FORM") { form = Dropzone.createElement("
"); form.appendChild(fields); } else { + // Make sure that the enctype and method attributes are set properly this.element.setAttribute("enctype", "multipart/form-data"); this.element.setAttribute("method", this.options.method); } return form != null ? form : fields; - }; + } + + // Returns the fallback elements if they exist already + // + // This code has to pass in IE7 :( + + }, { + key: "getExistingFallback", + value: function getExistingFallback() { + var getFallback = function getFallback(elements) { + for (var _iterator13 = elements, _isArray13 = Array.isArray(_iterator13), _i13 = 0, _iterator13 = _isArray13 ? _iterator13 : _iterator13[Symbol.iterator]();;) { + var _ref12; + + if (_isArray13) { + if (_i13 >= _iterator13.length) break; + _ref12 = _iterator13[_i13++]; + } else { + _i13 = _iterator13.next(); + if (_i13.done) break; + _ref12 = _i13.value; + } + + var el = _ref12; - Dropzone.prototype.getExistingFallback = function() { - var fallback, getFallback, tagName, _i, _len, _ref; - getFallback = function(elements) { - var el, _i, _len; - for (_i = 0, _len = elements.length; _i < _len; _i++) { - el = elements[_i]; if (/(^| )fallback($| )/.test(el.className)) { return el; } } }; - _ref = ["div", "form"]; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - tagName = _ref[_i]; + + var _arr = ["div", "form"]; + for (var _i14 = 0; _i14 < _arr.length; _i14++) { + var tagName = _arr[_i14]; + var fallback; if (fallback = getFallback(this.element.getElementsByTagName(tagName))) { return fallback; } } - }; + } - Dropzone.prototype.setupEventListeners = function() { - var elementListeners, event, listener, _i, _len, _ref, _results; - _ref = this.listeners; - _results = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - elementListeners = _ref[_i]; - _results.push((function() { - var _ref1, _results1; - _ref1 = elementListeners.events; - _results1 = []; - for (event in _ref1) { - listener = _ref1[event]; - _results1.push(elementListeners.element.addEventListener(event, listener, false)); + // Activates all listeners stored in @listeners + + }, { + key: "setupEventListeners", + value: function setupEventListeners() { + return this.listeners.map(function (elementListeners) { + return function () { + var result = []; + for (var event in elementListeners.events) { + var listener = elementListeners.events[event]; + result.push(elementListeners.element.addEventListener(event, listener, false)); } - return _results1; - })()); - } - return _results; - }; + return result; + }(); + }); + } - Dropzone.prototype.removeEventListeners = function() { - var elementListeners, event, listener, _i, _len, _ref, _results; - _ref = this.listeners; - _results = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - elementListeners = _ref[_i]; - _results.push((function() { - var _ref1, _results1; - _ref1 = elementListeners.events; - _results1 = []; - for (event in _ref1) { - listener = _ref1[event]; - _results1.push(elementListeners.element.removeEventListener(event, listener, false)); + // Deactivates all listeners stored in @listeners + + }, { + key: "removeEventListeners", + value: function removeEventListeners() { + return this.listeners.map(function (elementListeners) { + return function () { + var result = []; + for (var event in elementListeners.events) { + var listener = elementListeners.events[event]; + result.push(elementListeners.element.removeEventListener(event, listener, false)); } - return _results1; - })()); - } - return _results; - }; + return result; + }(); + }); + } + + // Removes all event listeners and cancels all files in the queue or being processed. + + }, { + key: "disable", + value: function disable() { + var _this4 = this; - Dropzone.prototype.disable = function() { - var file, _i, _len, _ref, _results; - this.clickableElements.forEach(function(element) { + this.clickableElements.forEach(function (element) { return element.classList.remove("dz-clickable"); }); this.removeEventListeners(); - _ref = this.files; - _results = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - file = _ref[_i]; - _results.push(this.cancelUpload(file)); - } - return _results; - }; - Dropzone.prototype.enable = function() { - this.clickableElements.forEach(function(element) { + return this.files.map(function (file) { + return _this4.cancelUpload(file); + }); + } + }, { + key: "enable", + value: function enable() { + this.clickableElements.forEach(function (element) { return element.classList.add("dz-clickable"); }); return this.setupEventListeners(); - }; + } + + // Returns a nicely formatted filesize + + }, { + key: "filesize", + value: function filesize(size) { + var selectedSize = 0; + var selectedUnit = "b"; - Dropzone.prototype.filesize = function(size) { - var cutoff, i, selectedSize, selectedUnit, unit, units, _i, _len; - selectedSize = 0; - selectedUnit = "b"; if (size > 0) { - units = ['TB', 'GB', 'MB', 'KB', 'b']; - for (i = _i = 0, _len = units.length; _i < _len; i = ++_i) { - unit = units[i]; - cutoff = Math.pow(this.options.filesizeBase, 4 - i) / 10; + var units = ['tb', 'gb', 'mb', 'kb', 'b']; + + for (var i = 0; i < units.length; i++) { + var unit = units[i]; + var cutoff = Math.pow(this.options.filesizeBase, 4 - i) / 10; + if (size >= cutoff) { selectedSize = size / Math.pow(this.options.filesizeBase, 4 - i); selectedUnit = unit; break; } } - selectedSize = Math.round(10 * selectedSize) / 10; + + selectedSize = Math.round(10 * selectedSize) / 10; // Cutting of digits } - return "" + selectedSize + " " + selectedUnit; - }; - Dropzone.prototype._updateMaxFilesReachedClass = function() { - if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) { + return "" + selectedSize + " " + this.options.dictFileSizeUnits[selectedUnit]; + } + + // Adds or removes the `dz-max-files-reached` class from the form. + + }, { + key: "_updateMaxFilesReachedClass", + value: function _updateMaxFilesReachedClass() { + if (this.options.maxFiles != null && this.getAcceptedFiles().length >= this.options.maxFiles) { if (this.getAcceptedFiles().length === this.options.maxFiles) { this.emit('maxfilesreached', this.files); } @@ -873,536 +1617,1176 @@ } else { return this.element.classList.remove("dz-max-files-reached"); } - }; - - Dropzone.prototype.drop = function(e) { - var files, items; + } + }, { + key: "drop", + value: function drop(e) { if (!e.dataTransfer) { return; } this.emit("drop", e); - files = e.dataTransfer.files; + + var files = e.dataTransfer.files; + this.emit("addedfiles", files); + + // Even if it's a folder, files.length will contain the folders. if (files.length) { - items = e.dataTransfer.items; - if (items && items.length && (items[0].webkitGetAsEntry != null)) { + var items = e.dataTransfer.items; + + if (items && items.length && items[0].webkitGetAsEntry != null) { + // The browser supports dropping of folders, so handle items instead of files this._addFilesFromItems(items); } else { this.handleFiles(files); } } - }; - - Dropzone.prototype.paste = function(e) { - var items, _ref; - if ((e != null ? (_ref = e.clipboardData) != null ? _ref.items : void 0 : void 0) == null) { + } + }, { + key: "paste", + value: function paste(e) { + if (__guard__(e != null ? e.clipboardData : undefined, function (x) { + return x.items; + }) == null) { return; } + this.emit("paste", e); - items = e.clipboardData.items; + var items = e.clipboardData.items; + + if (items.length) { return this._addFilesFromItems(items); } - }; + } + }, { + key: "handleFiles", + value: function handleFiles(files) { + var _this5 = this; - Dropzone.prototype.handleFiles = function(files) { - var file, _i, _len, _results; - _results = []; - for (_i = 0, _len = files.length; _i < _len; _i++) { - file = files[_i]; - _results.push(this.addFile(file)); - } - return _results; - }; + return files.map(function (file) { + return _this5.addFile(file); + }); + } + + // When a folder is dropped (or files are pasted), items must be handled + // instead of files. + + }, { + key: "_addFilesFromItems", + value: function _addFilesFromItems(items) { + var _this6 = this; - Dropzone.prototype._addFilesFromItems = function(items) { - var entry, item, _i, _len, _results; - _results = []; - for (_i = 0, _len = items.length; _i < _len; _i++) { - item = items[_i]; - if ((item.webkitGetAsEntry != null) && (entry = item.webkitGetAsEntry())) { - if (entry.isFile) { - _results.push(this.addFile(item.getAsFile())); - } else if (entry.isDirectory) { - _results.push(this._addFilesFromDirectory(entry, entry.name)); + return function () { + var result = []; + for (var _iterator14 = items, _isArray14 = Array.isArray(_iterator14), _i15 = 0, _iterator14 = _isArray14 ? _iterator14 : _iterator14[Symbol.iterator]();;) { + var _ref13; + + if (_isArray14) { + if (_i15 >= _iterator14.length) break; + _ref13 = _iterator14[_i15++]; } else { - _results.push(void 0); + _i15 = _iterator14.next(); + if (_i15.done) break; + _ref13 = _i15.value; } - } else if (item.getAsFile != null) { - if ((item.kind == null) || item.kind === "file") { - _results.push(this.addFile(item.getAsFile())); + + var item = _ref13; + + var entry; + if (item.webkitGetAsEntry != null && (entry = item.webkitGetAsEntry())) { + if (entry.isFile) { + result.push(_this6.addFile(item.getAsFile())); + } else if (entry.isDirectory) { + // Append all files from that directory to files + result.push(_this6._addFilesFromDirectory(entry, entry.name)); + } else { + result.push(undefined); + } + } else if (item.getAsFile != null) { + if (item.kind == null || item.kind === "file") { + result.push(_this6.addFile(item.getAsFile())); + } else { + result.push(undefined); + } } else { - _results.push(void 0); + result.push(undefined); } - } else { - _results.push(void 0); } - } - return _results; - }; + return result; + }(); + } + + // Goes through the directory, and adds each file it finds recursively - Dropzone.prototype._addFilesFromDirectory = function(directory, path) { - var dirReader, errorHandler, readEntries; - dirReader = directory.createReader(); - errorHandler = function(error) { - return typeof console !== "undefined" && console !== null ? typeof console.log === "function" ? console.log(error) : void 0 : void 0; + }, { + key: "_addFilesFromDirectory", + value: function _addFilesFromDirectory(directory, path) { + var _this7 = this; + + var dirReader = directory.createReader(); + + var errorHandler = function errorHandler(error) { + return __guardMethod__(console, 'log', function (o) { + return o.log(error); + }); }; - readEntries = (function(_this) { - return function() { - return dirReader.readEntries(function(entries) { - var entry, _i, _len; - if (entries.length > 0) { - for (_i = 0, _len = entries.length; _i < _len; _i++) { - entry = entries[_i]; - if (entry.isFile) { - entry.file(function(file) { - if (_this.options.ignoreHiddenFiles && file.name.substring(0, 1) === '.') { - return; - } - file.fullPath = "" + path + "/" + file.name; - return _this.addFile(file); - }); - } else if (entry.isDirectory) { - _this._addFilesFromDirectory(entry, "" + path + "/" + entry.name); - } + + var readEntries = function readEntries() { + return dirReader.readEntries(function (entries) { + if (entries.length > 0) { + for (var _iterator15 = entries, _isArray15 = Array.isArray(_iterator15), _i16 = 0, _iterator15 = _isArray15 ? _iterator15 : _iterator15[Symbol.iterator]();;) { + var _ref14; + + if (_isArray15) { + if (_i16 >= _iterator15.length) break; + _ref14 = _iterator15[_i16++]; + } else { + _i16 = _iterator15.next(); + if (_i16.done) break; + _ref14 = _i16.value; + } + + var entry = _ref14; + + if (entry.isFile) { + entry.file(function (file) { + if (_this7.options.ignoreHiddenFiles && file.name.substring(0, 1) === '.') { + return; + } + file.fullPath = path + "/" + file.name; + return _this7.addFile(file); + }); + } else if (entry.isDirectory) { + _this7._addFilesFromDirectory(entry, path + "/" + entry.name); } - readEntries(); } - return null; - }, errorHandler); - }; - })(this); + + // Recursively call readEntries() again, since browser only handle + // the first 100 entries. + // See: https://developer.mozilla.org/en-US/docs/Web/API/DirectoryReader#readEntries + readEntries(); + } + return null; + }, errorHandler); + }; + return readEntries(); - }; + } - Dropzone.prototype.accept = function(file, done) { + // If `done()` is called without argument the file is accepted + // If you call it with an error message, the file is rejected + // (This allows for asynchronous validation) + // + // This function checks the filesize, and if the file.type passes the + // `acceptedFiles` check. + + }, { + key: "accept", + value: function accept(file, done) { if (file.size > this.options.maxFilesize * 1024 * 1024) { return done(this.options.dictFileTooBig.replace("{{filesize}}", Math.round(file.size / 1024 / 10.24) / 100).replace("{{maxFilesize}}", this.options.maxFilesize)); } else if (!Dropzone.isValidFile(file, this.options.acceptedFiles)) { return done(this.options.dictInvalidFileType); - } else if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) { + } else if (this.options.maxFiles != null && this.getAcceptedFiles().length >= this.options.maxFiles) { done(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}", this.options.maxFiles)); return this.emit("maxfilesexceeded", file); } else { return this.options.accept.call(this, file, done); } - }; + } + }, { + key: "addFile", + value: function addFile(file) { + var _this8 = this; - Dropzone.prototype.addFile = function(file) { file.upload = { + uuid: Dropzone.uuidv4(), progress: 0, + // Setting the total upload size to file.size for the beginning + // It's actual different than the size to be transmitted. total: file.size, - bytesSent: 0 + bytesSent: 0, + filename: this._renameFile(file), + chunked: this.options.chunking && (this.options.forceChunking || file.size > this.options.chunkSize), + totalChunkCount: Math.ceil(file.size / this.options.chunkSize) }; this.files.push(file); + file.status = Dropzone.ADDED; + this.emit("addedfile", file); + this._enqueueThumbnail(file); - return this.accept(file, (function(_this) { - return function(error) { - if (error) { - file.accepted = false; - _this._errorProcessing([file], error); - } else { - file.accepted = true; - if (_this.options.autoQueue) { - _this.enqueueFile(file); - } - } - return _this._updateMaxFilesReachedClass(); - }; - })(this)); - }; - Dropzone.prototype.enqueueFiles = function(files) { - var file, _i, _len; - for (_i = 0, _len = files.length; _i < _len; _i++) { - file = files[_i]; + return this.accept(file, function (error) { + if (error) { + file.accepted = false; + _this8._errorProcessing([file], error); // Will set the file.status + } else { + file.accepted = true; + if (_this8.options.autoQueue) { + _this8.enqueueFile(file); + } // Will set .accepted = true + } + return _this8._updateMaxFilesReachedClass(); + }); + } + + // Wrapper for enqueueFile + + }, { + key: "enqueueFiles", + value: function enqueueFiles(files) { + for (var _iterator16 = files, _isArray16 = Array.isArray(_iterator16), _i17 = 0, _iterator16 = _isArray16 ? _iterator16 : _iterator16[Symbol.iterator]();;) { + var _ref15; + + if (_isArray16) { + if (_i17 >= _iterator16.length) break; + _ref15 = _iterator16[_i17++]; + } else { + _i17 = _iterator16.next(); + if (_i17.done) break; + _ref15 = _i17.value; + } + + var file = _ref15; + this.enqueueFile(file); } return null; - }; + } + }, { + key: "enqueueFile", + value: function enqueueFile(file) { + var _this9 = this; - Dropzone.prototype.enqueueFile = function(file) { if (file.status === Dropzone.ADDED && file.accepted === true) { file.status = Dropzone.QUEUED; if (this.options.autoProcessQueue) { - return setTimeout(((function(_this) { - return function() { - return _this.processQueue(); - }; - })(this)), 0); + return setTimeout(function () { + return _this9.processQueue(); + }, 0); // Deferring the call } } else { throw new Error("This file can't be queued because it has already been processed or was rejected."); } - }; - - Dropzone.prototype._thumbnailQueue = []; - - Dropzone.prototype._processingThumbnail = false; + } + }, { + key: "_enqueueThumbnail", + value: function _enqueueThumbnail(file) { + var _this10 = this; - Dropzone.prototype._enqueueThumbnail = function(file) { if (this.options.createImageThumbnails && file.type.match(/image.*/) && file.size <= this.options.maxThumbnailFilesize * 1024 * 1024) { this._thumbnailQueue.push(file); - return setTimeout(((function(_this) { - return function() { - return _this._processThumbnailQueue(); - }; - })(this)), 0); + return setTimeout(function () { + return _this10._processThumbnailQueue(); + }, 0); // Deferring the call } - }; + } + }, { + key: "_processThumbnailQueue", + value: function _processThumbnailQueue() { + var _this11 = this; - Dropzone.prototype._processThumbnailQueue = function() { if (this._processingThumbnail || this._thumbnailQueue.length === 0) { return; } + this._processingThumbnail = true; - return this.createThumbnail(this._thumbnailQueue.shift(), (function(_this) { - return function() { - _this._processingThumbnail = false; - return _this._processThumbnailQueue(); - }; - })(this)); - }; + var file = this._thumbnailQueue.shift(); + return this.createThumbnail(file, this.options.thumbnailWidth, this.options.thumbnailHeight, this.options.thumbnailMethod, true, function (dataUrl) { + _this11.emit("thumbnail", file, dataUrl); + _this11._processingThumbnail = false; + return _this11._processThumbnailQueue(); + }); + } + + // Can be called by the user to remove a file - Dropzone.prototype.removeFile = function(file) { + }, { + key: "removeFile", + value: function removeFile(file) { if (file.status === Dropzone.UPLOADING) { this.cancelUpload(file); } this.files = without(this.files, file); + this.emit("removedfile", file); if (this.files.length === 0) { return this.emit("reset"); } - }; + } + + // Removes all files that aren't currently processed from the list - Dropzone.prototype.removeAllFiles = function(cancelIfNecessary) { - var file, _i, _len, _ref; + }, { + key: "removeAllFiles", + value: function removeAllFiles(cancelIfNecessary) { + // Create a copy of files since removeFile() changes the @files array. if (cancelIfNecessary == null) { cancelIfNecessary = false; } - _ref = this.files.slice(); - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - file = _ref[_i]; + for (var _iterator17 = this.files.slice(), _isArray17 = Array.isArray(_iterator17), _i18 = 0, _iterator17 = _isArray17 ? _iterator17 : _iterator17[Symbol.iterator]();;) { + var _ref16; + + if (_isArray17) { + if (_i18 >= _iterator17.length) break; + _ref16 = _iterator17[_i18++]; + } else { + _i18 = _iterator17.next(); + if (_i18.done) break; + _ref16 = _i18.value; + } + + var file = _ref16; + if (file.status !== Dropzone.UPLOADING || cancelIfNecessary) { this.removeFile(file); } } return null; - }; + } - Dropzone.prototype.createThumbnail = function(file, callback) { - var fileReader; - fileReader = new FileReader; - fileReader.onload = (function(_this) { - return function() { - if (file.type === "image/svg+xml") { - _this.emit("thumbnail", file, fileReader.result); - if (callback != null) { - callback(); - } - return; + // Resizes an image before it gets sent to the server. This function is the default behavior of + // `options.transformFile` if `resizeWidth` or `resizeHeight` are set. The callback is invoked with + // the resized blob. + + }, { + key: "resizeImage", + value: function resizeImage(file, width, height, resizeMethod, callback) { + var _this12 = this; + + return this.createThumbnail(file, width, height, resizeMethod, false, function (dataUrl, canvas) { + if (canvas === null) { + // The image has not been resized + return callback(file); + } else { + var resizeMimeType = _this12.options.resizeMimeType; + + if (resizeMimeType == null) { + resizeMimeType = file.type; } - return _this.createThumbnailFromUrl(file, fileReader.result, callback); - }; - })(this); + var resizedDataURL = canvas.toDataURL(resizeMimeType, _this12.options.resizeQuality); + if (resizeMimeType === 'image/jpeg' || resizeMimeType === 'image/jpg') { + // Now add the original EXIF information + resizedDataURL = ExifRestore.restore(file.dataURL, resizedDataURL); + } + return callback(Dropzone.dataURItoBlob(resizedDataURL)); + } + }); + } + }, { + key: "createThumbnail", + value: function createThumbnail(file, width, height, resizeMethod, fixOrientation, callback) { + var _this13 = this; + + var fileReader = new FileReader(); + + fileReader.onload = function () { + + file.dataURL = fileReader.result; + + // Don't bother creating a thumbnail for SVG images since they're vector + if (file.type === "image/svg+xml") { + if (callback != null) { + callback(fileReader.result); + } + return; + } + + return _this13.createThumbnailFromUrl(file, width, height, resizeMethod, fixOrientation, callback); + }; + return fileReader.readAsDataURL(file); - }; + } + }, { + key: "createThumbnailFromUrl", + value: function createThumbnailFromUrl(file, width, height, resizeMethod, fixOrientation, callback, crossOrigin) { + var _this14 = this; + + // Not using `new Image` here because of a bug in latest Chrome versions. + // See https://github.com/enyo/dropzone/pull/226 + var img = document.createElement("img"); - Dropzone.prototype.createThumbnailFromUrl = function(file, imageUrl, callback, crossOrigin) { - var img; - img = document.createElement("img"); if (crossOrigin) { img.crossOrigin = crossOrigin; } - img.onload = (function(_this) { - return function() { - var canvas, ctx, resizeInfo, thumbnail, _ref, _ref1, _ref2, _ref3; + + img.onload = function () { + var loadExif = function loadExif(callback) { + return callback(1); + }; + if (typeof EXIF !== 'undefined' && EXIF !== null && fixOrientation) { + loadExif = function loadExif(callback) { + return EXIF.getData(img, function () { + return callback(EXIF.getTag(this, 'Orientation')); + }); + }; + } + + return loadExif(function (orientation) { file.width = img.width; file.height = img.height; - resizeInfo = _this.options.resize.call(_this, file); - if (resizeInfo.trgWidth == null) { - resizeInfo.trgWidth = resizeInfo.optWidth; - } - if (resizeInfo.trgHeight == null) { - resizeInfo.trgHeight = resizeInfo.optHeight; - } - canvas = document.createElement("canvas"); - ctx = canvas.getContext("2d"); + + var resizeInfo = _this14.options.resize.call(_this14, file, width, height, resizeMethod); + + var canvas = document.createElement("canvas"); + var ctx = canvas.getContext("2d"); + canvas.width = resizeInfo.trgWidth; canvas.height = resizeInfo.trgHeight; - drawImageIOSFix(ctx, img, (_ref = resizeInfo.srcX) != null ? _ref : 0, (_ref1 = resizeInfo.srcY) != null ? _ref1 : 0, resizeInfo.srcWidth, resizeInfo.srcHeight, (_ref2 = resizeInfo.trgX) != null ? _ref2 : 0, (_ref3 = resizeInfo.trgY) != null ? _ref3 : 0, resizeInfo.trgWidth, resizeInfo.trgHeight); - thumbnail = canvas.toDataURL("image/png"); - _this.emit("thumbnail", file, thumbnail); + + if (orientation > 4) { + canvas.width = resizeInfo.trgHeight; + canvas.height = resizeInfo.trgWidth; + } + + switch (orientation) { + case 2: + // horizontal flip + ctx.translate(canvas.width, 0); + ctx.scale(-1, 1); + break; + case 3: + // 180° rotate left + ctx.translate(canvas.width, canvas.height); + ctx.rotate(Math.PI); + break; + case 4: + // vertical flip + ctx.translate(0, canvas.height); + ctx.scale(1, -1); + break; + case 5: + // vertical flip + 90 rotate right + ctx.rotate(0.5 * Math.PI); + ctx.scale(1, -1); + break; + case 6: + // 90° rotate right + ctx.rotate(0.5 * Math.PI); + ctx.translate(0, -canvas.height); + break; + case 7: + // horizontal flip + 90 rotate right + ctx.rotate(0.5 * Math.PI); + ctx.translate(canvas.width, -canvas.height); + ctx.scale(-1, 1); + break; + case 8: + // 90° rotate left + ctx.rotate(-0.5 * Math.PI); + ctx.translate(-canvas.width, 0); + break; + } + + // This is a bugfix for iOS' scaling bug. + drawImageIOSFix(ctx, img, resizeInfo.srcX != null ? resizeInfo.srcX : 0, resizeInfo.srcY != null ? resizeInfo.srcY : 0, resizeInfo.srcWidth, resizeInfo.srcHeight, resizeInfo.trgX != null ? resizeInfo.trgX : 0, resizeInfo.trgY != null ? resizeInfo.trgY : 0, resizeInfo.trgWidth, resizeInfo.trgHeight); + + var thumbnail = canvas.toDataURL("image/png"); + if (callback != null) { - return callback(); + return callback(thumbnail, canvas); } - }; - })(this); + }); + }; + if (callback != null) { img.onerror = callback; } - return img.src = imageUrl; - }; - Dropzone.prototype.processQueue = function() { - var i, parallelUploads, processingLength, queuedFiles; - parallelUploads = this.options.parallelUploads; - processingLength = this.getUploadingFiles().length; - i = processingLength; + return img.src = file.dataURL; + } + + // Goes through the queue and processes files if there aren't too many already. + + }, { + key: "processQueue", + value: function processQueue() { + var parallelUploads = this.options.parallelUploads; + + var processingLength = this.getUploadingFiles().length; + var i = processingLength; + + // There are already at least as many files uploading than should be if (processingLength >= parallelUploads) { return; } - queuedFiles = this.getQueuedFiles(); + + var queuedFiles = this.getQueuedFiles(); + if (!(queuedFiles.length > 0)) { return; } + if (this.options.uploadMultiple) { + // The files should be uploaded in one request return this.processFiles(queuedFiles.slice(0, parallelUploads - processingLength)); } else { while (i < parallelUploads) { if (!queuedFiles.length) { return; - } + } // Nothing left to process this.processFile(queuedFiles.shift()); i++; } } - }; + } - Dropzone.prototype.processFile = function(file) { + // Wrapper for `processFiles` + + }, { + key: "processFile", + value: function processFile(file) { return this.processFiles([file]); - }; + } + + // Loads the file, then calls finishedLoading() + + }, { + key: "processFiles", + value: function processFiles(files) { + for (var _iterator18 = files, _isArray18 = Array.isArray(_iterator18), _i19 = 0, _iterator18 = _isArray18 ? _iterator18 : _iterator18[Symbol.iterator]();;) { + var _ref17; + + if (_isArray18) { + if (_i19 >= _iterator18.length) break; + _ref17 = _iterator18[_i19++]; + } else { + _i19 = _iterator18.next(); + if (_i19.done) break; + _ref17 = _i19.value; + } + + var file = _ref17; + + file.processing = true; // Backwards compatibility + file.status = Dropzone.UPLOADING; - Dropzone.prototype.processFiles = function(files) { - var file, _i, _len; - for (_i = 0, _len = files.length; _i < _len; _i++) { - file = files[_i]; - file.processing = true; - file.status = Dropzone.UPLOADING; this.emit("processing", file); } + if (this.options.uploadMultiple) { this.emit("processingmultiple", files); } + return this.uploadFiles(files); - }; + } + }, { + key: "_getFilesWithXhr", + value: function _getFilesWithXhr(xhr) { + var files = void 0; + return files = this.files.filter(function (file) { + return file.xhr === xhr; + }).map(function (file) { + return file; + }); + } - Dropzone.prototype._getFilesWithXhr = function(xhr) { - var file, files; - return files = (function() { - var _i, _len, _ref, _results; - _ref = this.files; - _results = []; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - file = _ref[_i]; - if (file.xhr === xhr) { - _results.push(file); - } - } - return _results; - }).call(this); - }; + // Cancels the file upload and sets the status to CANCELED + // **if** the file is actually being uploaded. + // If it's still in the queue, the file is being removed from it and the status + // set to CANCELED. - Dropzone.prototype.cancelUpload = function(file) { - var groupedFile, groupedFiles, _i, _j, _len, _len1, _ref; + }, { + key: "cancelUpload", + value: function cancelUpload(file) { if (file.status === Dropzone.UPLOADING) { - groupedFiles = this._getFilesWithXhr(file.xhr); - for (_i = 0, _len = groupedFiles.length; _i < _len; _i++) { - groupedFile = groupedFiles[_i]; + var groupedFiles = this._getFilesWithXhr(file.xhr); + for (var _iterator19 = groupedFiles, _isArray19 = Array.isArray(_iterator19), _i20 = 0, _iterator19 = _isArray19 ? _iterator19 : _iterator19[Symbol.iterator]();;) { + var _ref18; + + if (_isArray19) { + if (_i20 >= _iterator19.length) break; + _ref18 = _iterator19[_i20++]; + } else { + _i20 = _iterator19.next(); + if (_i20.done) break; + _ref18 = _i20.value; + } + + var groupedFile = _ref18; + groupedFile.status = Dropzone.CANCELED; } - file.xhr.abort(); - for (_j = 0, _len1 = groupedFiles.length; _j < _len1; _j++) { - groupedFile = groupedFiles[_j]; - this.emit("canceled", groupedFile); + if (typeof file.xhr !== 'undefined') { + file.xhr.abort(); + } + for (var _iterator20 = groupedFiles, _isArray20 = Array.isArray(_iterator20), _i21 = 0, _iterator20 = _isArray20 ? _iterator20 : _iterator20[Symbol.iterator]();;) { + var _ref19; + + if (_isArray20) { + if (_i21 >= _iterator20.length) break; + _ref19 = _iterator20[_i21++]; + } else { + _i21 = _iterator20.next(); + if (_i21.done) break; + _ref19 = _i21.value; + } + + var _groupedFile = _ref19; + + this.emit("canceled", _groupedFile); } if (this.options.uploadMultiple) { this.emit("canceledmultiple", groupedFiles); } - } else if ((_ref = file.status) === Dropzone.ADDED || _ref === Dropzone.QUEUED) { + } else if (file.status === Dropzone.ADDED || file.status === Dropzone.QUEUED) { file.status = Dropzone.CANCELED; this.emit("canceled", file); if (this.options.uploadMultiple) { this.emit("canceledmultiple", [file]); } } + if (this.options.autoProcessQueue) { return this.processQueue(); } - }; - - resolveOption = function() { - var args, option; - option = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : []; + } + }, { + key: "resolveOption", + value: function resolveOption(option) { if (typeof option === 'function') { + for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { + args[_key3 - 1] = arguments[_key3]; + } + return option.apply(this, args); } return option; - }; - - Dropzone.prototype.uploadFile = function(file) { + } + }, { + key: "uploadFile", + value: function uploadFile(file) { return this.uploadFiles([file]); - }; + } + }, { + key: "uploadFiles", + value: function uploadFiles(files) { + var _this15 = this; - Dropzone.prototype.uploadFiles = function(files) { - var file, formData, handleError, headerName, headerValue, headers, i, input, inputName, inputType, key, method, option, progressObj, response, updateProgress, url, value, xhr, _i, _j, _k, _l, _len, _len1, _len2, _len3, _m, _ref, _ref1, _ref2, _ref3, _ref4, _ref5; - xhr = new XMLHttpRequest(); - for (_i = 0, _len = files.length; _i < _len; _i++) { - file = files[_i]; - file.xhr = xhr; - } - method = resolveOption(this.options.method, files); - url = resolveOption(this.options.url, files); - xhr.open(method, url, true); - xhr.withCredentials = !!this.options.withCredentials; - response = null; - handleError = (function(_this) { - return function() { - var _j, _len1, _results; - _results = []; - for (_j = 0, _len1 = files.length; _j < _len1; _j++) { - file = files[_j]; - _results.push(_this._errorProcessing(files, response || _this.options.dictResponseError.replace("{{statusCode}}", xhr.status), xhr)); - } - return _results; - }; - })(this); - updateProgress = (function(_this) { - return function(e) { - var allFilesFinished, progress, _j, _k, _l, _len1, _len2, _len3, _results; - if (e != null) { - progress = 100 * e.loaded / e.total; - for (_j = 0, _len1 = files.length; _j < _len1; _j++) { - file = files[_j]; - file.upload = { - progress: progress, - total: e.total, - bytesSent: e.loaded - }; + this._transformFiles(files, function (transformedFiles) { + if (files[0].upload.chunked) { + // This file should be sent in chunks! + + // If the chunking option is set, we **know** that there can only be **one** file, since + // uploadMultiple is not allowed with this option. + var file = files[0]; + var transformedFile = transformedFiles[0]; + var startedChunkCount = 0; + + file.upload.chunks = []; + + var handleNextChunk = function handleNextChunk() { + var chunkIndex = 0; + + // Find the next item in file.upload.chunks that is not defined yet. + while (file.upload.chunks[chunkIndex] !== undefined) { + chunkIndex++; } - } else { - allFilesFinished = true; - progress = 100; - for (_k = 0, _len2 = files.length; _k < _len2; _k++) { - file = files[_k]; - if (!(file.upload.progress === 100 && file.upload.bytesSent === file.upload.total)) { - allFilesFinished = false; + + // This means, that all chunks have already been started. + if (chunkIndex >= file.upload.totalChunkCount) return; + + startedChunkCount++; + + var start = chunkIndex * _this15.options.chunkSize; + var end = Math.min(start + _this15.options.chunkSize, file.size); + + var dataBlock = { + name: _this15._getParamName(0), + data: transformedFile.webkitSlice ? transformedFile.webkitSlice(start, end) : transformedFile.slice(start, end), + filename: file.upload.filename, + chunkIndex: chunkIndex + }; + + file.upload.chunks[chunkIndex] = { + file: file, + index: chunkIndex, + dataBlock: dataBlock, // In case we want to retry. + status: Dropzone.UPLOADING, + progress: 0, + retries: 0 // The number of times this block has been retried. + }; + + _this15._uploadData(files, [dataBlock]); + }; + + file.upload.finishedChunkUpload = function (chunk) { + var allFinished = true; + chunk.status = Dropzone.SUCCESS; + + // Clear the data from the chunk + chunk.dataBlock = null; + + for (var i = 0; i < file.upload.totalChunkCount; i++) { + if (file.upload.chunks[i] === undefined) { + return handleNextChunk(); + } + if (file.upload.chunks[i].status !== Dropzone.SUCCESS) { + allFinished = false; } - file.upload.progress = progress; - file.upload.bytesSent = file.upload.total; } - if (allFilesFinished) { - return; + + if (allFinished) { + _this15.options.chunksUploaded(file, function () { + _this15._finished(files, '', null); + }); } - } - _results = []; - for (_l = 0, _len3 = files.length; _l < _len3; _l++) { - file = files[_l]; - _results.push(_this.emit("uploadprogress", file, progress, file.upload.bytesSent)); - } - return _results; - }; - })(this); - xhr.onload = (function(_this) { - return function(e) { - var _ref; - if (files[0].status === Dropzone.CANCELED) { - return; - } - if (xhr.readyState !== 4) { - return; - } - response = xhr.responseText; - if (xhr.getResponseHeader("content-type") && ~xhr.getResponseHeader("content-type").indexOf("application/json")) { - try { - response = JSON.parse(response); - } catch (_error) { - e = _error; - response = "Invalid JSON response from server."; + }; + + if (_this15.options.parallelChunkUploads) { + for (var i = 0; i < file.upload.totalChunkCount; i++) { + handleNextChunk(); } - } - updateProgress(); - if (!((200 <= (_ref = xhr.status) && _ref < 300))) { - return handleError(); } else { - return _this._finished(files, response, e); + handleNextChunk(); } - }; - })(this); - xhr.onerror = (function(_this) { - return function() { - if (files[0].status === Dropzone.CANCELED) { - return; + } else { + var dataBlocks = []; + for (var _i22 = 0; _i22 < files.length; _i22++) { + dataBlocks[_i22] = { + name: _this15._getParamName(_i22), + data: transformedFiles[_i22], + filename: files[_i22].upload.filename + }; } - return handleError(); - }; - })(this); - progressObj = (_ref = xhr.upload) != null ? _ref : xhr; - progressObj.onprogress = updateProgress; - headers = { + _this15._uploadData(files, dataBlocks); + } + }); + } + + /// Returns the right chunk for given file and xhr + + }, { + key: "_getChunk", + value: function _getChunk(file, xhr) { + for (var i = 0; i < file.upload.totalChunkCount; i++) { + if (file.upload.chunks[i] !== undefined && file.upload.chunks[i].xhr === xhr) { + return file.upload.chunks[i]; + } + } + } + + // This function actually uploads the file(s) to the server. + // If dataBlocks contains the actual data to upload (meaning, that this could either be transformed + // files, or individual chunks for chunked upload). + + }, { + key: "_uploadData", + value: function _uploadData(files, dataBlocks) { + var _this16 = this; + + var xhr = new XMLHttpRequest(); + + // Put the xhr object in the file objects to be able to reference it later. + for (var _iterator21 = files, _isArray21 = Array.isArray(_iterator21), _i23 = 0, _iterator21 = _isArray21 ? _iterator21 : _iterator21[Symbol.iterator]();;) { + var _ref20; + + if (_isArray21) { + if (_i23 >= _iterator21.length) break; + _ref20 = _iterator21[_i23++]; + } else { + _i23 = _iterator21.next(); + if (_i23.done) break; + _ref20 = _i23.value; + } + + var file = _ref20; + + file.xhr = xhr; + } + if (files[0].upload.chunked) { + // Put the xhr object in the right chunk object, so it can be associated later, and found with _getChunk + files[0].upload.chunks[dataBlocks[0].chunkIndex].xhr = xhr; + } + + var method = this.resolveOption(this.options.method, files); + var url = this.resolveOption(this.options.url, files); + xhr.open(method, url, true); + + // Setting the timeout after open because of IE11 issue: https://gitlab.com/meno/dropzone/issues/8 + xhr.timeout = this.resolveOption(this.options.timeout, files); + + // Has to be after `.open()`. See https://github.com/enyo/dropzone/issues/179 + xhr.withCredentials = !!this.options.withCredentials; + + xhr.onload = function (e) { + _this16._finishedUploading(files, xhr, e); + }; + + xhr.onerror = function () { + _this16._handleUploadError(files, xhr); + }; + + // Some browsers do not have the .upload property + var progressObj = xhr.upload != null ? xhr.upload : xhr; + progressObj.onprogress = function (e) { + return _this16._updateFilesUploadProgress(files, xhr, e); + }; + + var headers = { "Accept": "application/json", "Cache-Control": "no-cache", "X-Requested-With": "XMLHttpRequest" }; + if (this.options.headers) { - extend(headers, this.options.headers); + Dropzone.extend(headers, this.options.headers); } - for (headerName in headers) { - headerValue = headers[headerName]; + + for (var headerName in headers) { + var headerValue = headers[headerName]; if (headerValue) { xhr.setRequestHeader(headerName, headerValue); } } - formData = new FormData(); + + var formData = new FormData(); + + // Adding all @options parameters if (this.options.params) { - _ref1 = this.options.params; - for (key in _ref1) { - value = _ref1[key]; + var additionalParams = this.options.params; + if (typeof additionalParams === 'function') { + additionalParams = additionalParams.call(this, files, xhr, files[0].upload.chunked ? this._getChunk(files[0], xhr) : null); + } + + for (var key in additionalParams) { + var value = additionalParams[key]; formData.append(key, value); } } - for (_j = 0, _len1 = files.length; _j < _len1; _j++) { - file = files[_j]; - this.emit("sending", file, xhr, formData); + + // Let the user add additional data if necessary + for (var _iterator22 = files, _isArray22 = Array.isArray(_iterator22), _i24 = 0, _iterator22 = _isArray22 ? _iterator22 : _iterator22[Symbol.iterator]();;) { + var _ref21; + + if (_isArray22) { + if (_i24 >= _iterator22.length) break; + _ref21 = _iterator22[_i24++]; + } else { + _i24 = _iterator22.next(); + if (_i24.done) break; + _ref21 = _i24.value; + } + + var _file = _ref21; + + this.emit("sending", _file, xhr, formData); } if (this.options.uploadMultiple) { this.emit("sendingmultiple", files, xhr, formData); } + + this._addFormElementData(formData); + + // Finally add the files + // Has to be last because some servers (eg: S3) expect the file to be the last parameter + for (var i = 0; i < dataBlocks.length; i++) { + var dataBlock = dataBlocks[i]; + formData.append(dataBlock.name, dataBlock.data, dataBlock.filename); + } + + this.submitRequest(xhr, formData, files); + } + + // Transforms all files with this.options.transformFile and invokes done with the transformed files when done. + + }, { + key: "_transformFiles", + value: function _transformFiles(files, done) { + var _this17 = this; + + var transformedFiles = []; + // Clumsy way of handling asynchronous calls, until I get to add a proper Future library. + var doneCounter = 0; + + var _loop = function _loop(i) { + _this17.options.transformFile.call(_this17, files[i], function (transformedFile) { + transformedFiles[i] = transformedFile; + if (++doneCounter === files.length) { + done(transformedFiles); + } + }); + }; + + for (var i = 0; i < files.length; i++) { + _loop(i); + } + } + + // Takes care of adding other input elements of the form to the AJAX request + + }, { + key: "_addFormElementData", + value: function _addFormElementData(formData) { + // Take care of other input elements if (this.element.tagName === "FORM") { - _ref2 = this.element.querySelectorAll("input, textarea, select, button"); - for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) { - input = _ref2[_k]; - inputName = input.getAttribute("name"); - inputType = input.getAttribute("type"); + for (var _iterator23 = this.element.querySelectorAll("input, textarea, select, button"), _isArray23 = Array.isArray(_iterator23), _i25 = 0, _iterator23 = _isArray23 ? _iterator23 : _iterator23[Symbol.iterator]();;) { + var _ref22; + + if (_isArray23) { + if (_i25 >= _iterator23.length) break; + _ref22 = _iterator23[_i25++]; + } else { + _i25 = _iterator23.next(); + if (_i25.done) break; + _ref22 = _i25.value; + } + + var input = _ref22; + + var inputName = input.getAttribute("name"); + var inputType = input.getAttribute("type"); + if (inputType) inputType = inputType.toLowerCase(); + + // If the input doesn't have a name, we can't use it. + if (typeof inputName === 'undefined' || inputName === null) continue; + if (input.tagName === "SELECT" && input.hasAttribute("multiple")) { - _ref3 = input.options; - for (_l = 0, _len3 = _ref3.length; _l < _len3; _l++) { - option = _ref3[_l]; + // Possibly multiple values + for (var _iterator24 = input.options, _isArray24 = Array.isArray(_iterator24), _i26 = 0, _iterator24 = _isArray24 ? _iterator24 : _iterator24[Symbol.iterator]();;) { + var _ref23; + + if (_isArray24) { + if (_i26 >= _iterator24.length) break; + _ref23 = _iterator24[_i26++]; + } else { + _i26 = _iterator24.next(); + if (_i26.done) break; + _ref23 = _i26.value; + } + + var option = _ref23; + if (option.selected) { formData.append(inputName, option.value); } } - } else if (!inputType || ((_ref4 = inputType.toLowerCase()) !== "checkbox" && _ref4 !== "radio") || input.checked) { + } else if (!inputType || inputType !== "checkbox" && inputType !== "radio" || input.checked) { formData.append(inputName, input.value); } } } - for (i = _m = 0, _ref5 = files.length - 1; 0 <= _ref5 ? _m <= _ref5 : _m >= _ref5; i = 0 <= _ref5 ? ++_m : --_m) { - formData.append(this._getParamName(i), files[i], this._renameFilename(files[i].name)); + } + + // Invoked when there is new progress information about given files. + // If e is not provided, it is assumed that the upload is finished. + + }, { + key: "_updateFilesUploadProgress", + value: function _updateFilesUploadProgress(files, xhr, e) { + var progress = void 0; + if (typeof e !== 'undefined') { + progress = 100 * e.loaded / e.total; + + if (files[0].upload.chunked) { + var file = files[0]; + // Since this is a chunked upload, we need to update the appropriate chunk progress. + var chunk = this._getChunk(file, xhr); + chunk.progress = progress; + chunk.total = e.total; + chunk.bytesSent = e.loaded; + var fileProgress = 0, + fileTotal = void 0, + fileBytesSent = void 0; + file.upload.progress = 0; + file.upload.total = 0; + file.upload.bytesSent = 0; + for (var i = 0; i < file.upload.totalChunkCount; i++) { + if (file.upload.chunks[i] !== undefined && file.upload.chunks[i].progress !== undefined) { + file.upload.progress += file.upload.chunks[i].progress; + file.upload.total += file.upload.chunks[i].total; + file.upload.bytesSent += file.upload.chunks[i].bytesSent; + } + } + file.upload.progress = file.upload.progress / file.upload.totalChunkCount; + } else { + for (var _iterator25 = files, _isArray25 = Array.isArray(_iterator25), _i27 = 0, _iterator25 = _isArray25 ? _iterator25 : _iterator25[Symbol.iterator]();;) { + var _ref24; + + if (_isArray25) { + if (_i27 >= _iterator25.length) break; + _ref24 = _iterator25[_i27++]; + } else { + _i27 = _iterator25.next(); + if (_i27.done) break; + _ref24 = _i27.value; + } + + var _file2 = _ref24; + + _file2.upload.progress = progress; + _file2.upload.total = e.total; + _file2.upload.bytesSent = e.loaded; + } + } + for (var _iterator26 = files, _isArray26 = Array.isArray(_iterator26), _i28 = 0, _iterator26 = _isArray26 ? _iterator26 : _iterator26[Symbol.iterator]();;) { + var _ref25; + + if (_isArray26) { + if (_i28 >= _iterator26.length) break; + _ref25 = _iterator26[_i28++]; + } else { + _i28 = _iterator26.next(); + if (_i28.done) break; + _ref25 = _i28.value; + } + + var _file3 = _ref25; + + this.emit("uploadprogress", _file3, _file3.upload.progress, _file3.upload.bytesSent); + } + } else { + // Called when the file finished uploading + + var allFilesFinished = true; + + progress = 100; + + for (var _iterator27 = files, _isArray27 = Array.isArray(_iterator27), _i29 = 0, _iterator27 = _isArray27 ? _iterator27 : _iterator27[Symbol.iterator]();;) { + var _ref26; + + if (_isArray27) { + if (_i29 >= _iterator27.length) break; + _ref26 = _iterator27[_i29++]; + } else { + _i29 = _iterator27.next(); + if (_i29.done) break; + _ref26 = _i29.value; + } + + var _file4 = _ref26; + + if (_file4.upload.progress !== 100 || _file4.upload.bytesSent !== _file4.upload.total) { + allFilesFinished = false; + } + _file4.upload.progress = progress; + _file4.upload.bytesSent = _file4.upload.total; + } + + // Nothing to do, all files already at 100% + if (allFilesFinished) { + return; + } + + for (var _iterator28 = files, _isArray28 = Array.isArray(_iterator28), _i30 = 0, _iterator28 = _isArray28 ? _iterator28 : _iterator28[Symbol.iterator]();;) { + var _ref27; + + if (_isArray28) { + if (_i30 >= _iterator28.length) break; + _ref27 = _iterator28[_i30++]; + } else { + _i30 = _iterator28.next(); + if (_i30.done) break; + _ref27 = _i30.value; + } + + var _file5 = _ref27; + + this.emit("uploadprogress", _file5, progress, _file5.upload.bytesSent); + } } - return this.submitRequest(xhr, formData, files); - }; + } + }, { + key: "_finishedUploading", + value: function _finishedUploading(files, xhr, e) { + var response = void 0; - Dropzone.prototype.submitRequest = function(xhr, formData, files) { - return xhr.send(formData); - }; + if (files[0].status === Dropzone.CANCELED) { + return; + } + + if (xhr.readyState !== 4) { + return; + } + + if (xhr.responseType !== 'arraybuffer' && xhr.responseType !== 'blob') { + response = xhr.responseText; + + if (xhr.getResponseHeader("content-type") && ~xhr.getResponseHeader("content-type").indexOf("application/json")) { + try { + response = JSON.parse(response); + } catch (error) { + e = error; + response = "Invalid JSON response from server."; + } + } + } + + this._updateFilesUploadProgress(files); + + if (!(200 <= xhr.status && xhr.status < 300)) { + this._handleUploadError(files, xhr, response); + } else { + if (files[0].upload.chunked) { + files[0].upload.finishedChunkUpload(this._getChunk(files[0], xhr)); + } else { + this._finished(files, response, e); + } + } + } + }, { + key: "_handleUploadError", + value: function _handleUploadError(files, xhr, response) { + if (files[0].status === Dropzone.CANCELED) { + return; + } + + if (files[0].upload.chunked && this.options.retryChunks) { + var chunk = this._getChunk(files[0], xhr); + if (chunk.retries++ < this.options.retryChunksLimit) { + this._uploadData(files, [chunk.dataBlock]); + return; + } else { + console.warn('Retried this chunk too often. Giving up.'); + } + } + + for (var _iterator29 = files, _isArray29 = Array.isArray(_iterator29), _i31 = 0, _iterator29 = _isArray29 ? _iterator29 : _iterator29[Symbol.iterator]();;) { + var _ref28; + + if (_isArray29) { + if (_i31 >= _iterator29.length) break; + _ref28 = _iterator29[_i31++]; + } else { + _i31 = _iterator29.next(); + if (_i31.done) break; + _ref28 = _i31.value; + } + + var file = _ref28; + + this._errorProcessing(files, response || this.options.dictResponseError.replace("{{statusCode}}", xhr.status), xhr); + } + } + }, { + key: "submitRequest", + value: function submitRequest(xhr, formData, files) { + xhr.send(formData); + } + + // Called internally when processing is finished. + // Individual callbacks have to be called in the appropriate sections. + + }, { + key: "_finished", + value: function _finished(files, responseText, e) { + for (var _iterator30 = files, _isArray30 = Array.isArray(_iterator30), _i32 = 0, _iterator30 = _isArray30 ? _iterator30 : _iterator30[Symbol.iterator]();;) { + var _ref29; + + if (_isArray30) { + if (_i32 >= _iterator30.length) break; + _ref29 = _iterator30[_i32++]; + } else { + _i32 = _iterator30.next(); + if (_i32.done) break; + _ref29 = _i32.value; + } + + var file = _ref29; - Dropzone.prototype._finished = function(files, responseText, e) { - var file, _i, _len; - for (_i = 0, _len = files.length; _i < _len; _i++) { - file = files[_i]; file.status = Dropzone.SUCCESS; this.emit("success", file, responseText, e); this.emit("complete", file); @@ -1411,15 +2795,32 @@ this.emit("successmultiple", files, responseText, e); this.emit("completemultiple", files); } + if (this.options.autoProcessQueue) { return this.processQueue(); } - }; + } + + // Called internally when processing is finished. + // Individual callbacks have to be called in the appropriate sections. + + }, { + key: "_errorProcessing", + value: function _errorProcessing(files, message, xhr) { + for (var _iterator31 = files, _isArray31 = Array.isArray(_iterator31), _i33 = 0, _iterator31 = _isArray31 ? _iterator31 : _iterator31[Symbol.iterator]();;) { + var _ref30; + + if (_isArray31) { + if (_i33 >= _iterator31.length) break; + _ref30 = _iterator31[_i33++]; + } else { + _i33 = _iterator31.next(); + if (_i33.done) break; + _ref30 = _i33.value; + } + + var file = _ref30; - Dropzone.prototype._errorProcessing = function(files, message, xhr) { - var file, _i, _len; - for (_i = 0, _len = files.length; _i < _len; _i++) { - file = files[_i]; file.status = Dropzone.ERROR; this.emit("error", file, message, xhr); this.emit("complete", file); @@ -1428,356 +2829,691 @@ this.emit("errormultiple", files, message, xhr); this.emit("completemultiple", files); } + if (this.options.autoProcessQueue) { return this.processQueue(); } - }; - - return Dropzone; - - })(Emitter); - - Dropzone.version = "4.3.0"; + } + }], [{ + key: "uuidv4", + value: function uuidv4() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + var r = Math.random() * 16 | 0, + v = c === 'x' ? r : r & 0x3 | 0x8; + return v.toString(16); + }); + } + }]); + + return Dropzone; +}(Emitter); + +Dropzone.initClass(); + +Dropzone.version = "5.2.0"; + +// This is a map of options for your different dropzones. Add configurations +// to this object for your different dropzone elemens. +// +// Example: +// +// Dropzone.options.myDropzoneElementId = { maxFilesize: 1 }; +// +// To disable autoDiscover for a specific element, you can set `false` as an option: +// +// Dropzone.options.myDisabledElementId = false; +// +// And in html: +// +//
+Dropzone.options = {}; + +// Returns the options for an element or undefined if none available. +Dropzone.optionsForElement = function (element) { + // Get the `Dropzone.options.elementId` for this element if it exists + if (element.getAttribute("id")) { + return Dropzone.options[camelize(element.getAttribute("id"))]; + } else { + return undefined; + } +}; - Dropzone.options = {}; +// Holds a list of all dropzone instances +Dropzone.instances = []; - Dropzone.optionsForElement = function(element) { - if (element.getAttribute("id")) { - return Dropzone.options[camelize(element.getAttribute("id"))]; - } else { - return void 0; - } - }; +// Returns the dropzone for given element if any +Dropzone.forElement = function (element) { + if (typeof element === "string") { + element = document.querySelector(element); + } + if ((element != null ? element.dropzone : undefined) == null) { + throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone."); + } + return element.dropzone; +}; - Dropzone.instances = []; +// Set to false if you don't want Dropzone to automatically find and attach to .dropzone elements. +Dropzone.autoDiscover = true; - Dropzone.forElement = function(element) { - if (typeof element === "string") { - element = document.querySelector(element); - } - if ((element != null ? element.dropzone : void 0) == null) { - throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone."); - } - return element.dropzone; - }; +// Looks for all .dropzone elements and creates a dropzone for them +Dropzone.discover = function () { + var dropzones = void 0; + if (document.querySelectorAll) { + dropzones = document.querySelectorAll(".dropzone"); + } else { + dropzones = []; + // IE :( + var checkElements = function checkElements(elements) { + return function () { + var result = []; + for (var _iterator32 = elements, _isArray32 = Array.isArray(_iterator32), _i34 = 0, _iterator32 = _isArray32 ? _iterator32 : _iterator32[Symbol.iterator]();;) { + var _ref31; + + if (_isArray32) { + if (_i34 >= _iterator32.length) break; + _ref31 = _iterator32[_i34++]; + } else { + _i34 = _iterator32.next(); + if (_i34.done) break; + _ref31 = _i34.value; + } - Dropzone.autoDiscover = true; + var el = _ref31; - Dropzone.discover = function() { - var checkElements, dropzone, dropzones, _i, _len, _results; - if (document.querySelectorAll) { - dropzones = document.querySelectorAll(".dropzone"); - } else { - dropzones = []; - checkElements = function(elements) { - var el, _i, _len, _results; - _results = []; - for (_i = 0, _len = elements.length; _i < _len; _i++) { - el = elements[_i]; if (/(^| )dropzone($| )/.test(el.className)) { - _results.push(dropzones.push(el)); + result.push(dropzones.push(el)); } else { - _results.push(void 0); + result.push(undefined); } } - return _results; - }; - checkElements(document.getElementsByTagName("div")); - checkElements(document.getElementsByTagName("form")); - } - _results = []; - for (_i = 0, _len = dropzones.length; _i < _len; _i++) { - dropzone = dropzones[_i]; - if (Dropzone.optionsForElement(dropzone) !== false) { - _results.push(new Dropzone(dropzone)); + return result; + }(); + }; + checkElements(document.getElementsByTagName("div")); + checkElements(document.getElementsByTagName("form")); + } + + return function () { + var result = []; + for (var _iterator33 = dropzones, _isArray33 = Array.isArray(_iterator33), _i35 = 0, _iterator33 = _isArray33 ? _iterator33 : _iterator33[Symbol.iterator]();;) { + var _ref32; + + if (_isArray33) { + if (_i35 >= _iterator33.length) break; + _ref32 = _iterator33[_i35++]; } else { - _results.push(void 0); + _i35 = _iterator33.next(); + if (_i35.done) break; + _ref32 = _i35.value; } - } - return _results; - }; - Dropzone.blacklistedBrowsers = [/opera.*Macintosh.*version\/12/i]; + var dropzone = _ref32; - Dropzone.isBrowserSupported = function() { - var capableBrowser, regex, _i, _len, _ref; - capableBrowser = true; - if (window.File && window.FileReader && window.FileList && window.Blob && window.FormData && document.querySelector) { - if (!("classList" in document.createElement("a"))) { - capableBrowser = false; + // Create a dropzone unless auto discover has been disabled for specific element + if (Dropzone.optionsForElement(dropzone) !== false) { + result.push(new Dropzone(dropzone)); } else { - _ref = Dropzone.blacklistedBrowsers; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - regex = _ref[_i]; - if (regex.test(navigator.userAgent)) { - capableBrowser = false; - continue; - } - } + result.push(undefined); } - } else { - capableBrowser = false; } - return capableBrowser; - }; + return result; + }(); +}; + +// Since the whole Drag'n'Drop API is pretty new, some browsers implement it, +// but not correctly. +// So I created a blacklist of userAgents. Yes, yes. Browser sniffing, I know. +// But what to do when browsers *theoretically* support an API, but crash +// when using it. +// +// This is a list of regular expressions tested against navigator.userAgent +// +// ** It should only be used on browser that *do* support the API, but +// incorrectly ** +// +Dropzone.blacklistedBrowsers = [ +// The mac os and windows phone version of opera 12 seems to have a problem with the File drag'n'drop API. +/opera.*(Macintosh|Windows Phone).*version\/12/i]; + +// Checks if the browser is supported +Dropzone.isBrowserSupported = function () { + var capableBrowser = true; + + if (window.File && window.FileReader && window.FileList && window.Blob && window.FormData && document.querySelector) { + if (!("classList" in document.createElement("a"))) { + capableBrowser = false; + } else { + // The browser supports the API, but may be blacklisted. + for (var _iterator34 = Dropzone.blacklistedBrowsers, _isArray34 = Array.isArray(_iterator34), _i36 = 0, _iterator34 = _isArray34 ? _iterator34 : _iterator34[Symbol.iterator]();;) { + var _ref33; + + if (_isArray34) { + if (_i36 >= _iterator34.length) break; + _ref33 = _iterator34[_i36++]; + } else { + _i36 = _iterator34.next(); + if (_i36.done) break; + _ref33 = _i36.value; + } + + var regex = _ref33; - without = function(list, rejectedItem) { - var item, _i, _len, _results; - _results = []; - for (_i = 0, _len = list.length; _i < _len; _i++) { - item = list[_i]; - if (item !== rejectedItem) { - _results.push(item); + if (regex.test(navigator.userAgent)) { + capableBrowser = false; + continue; + } } } - return _results; - }; + } else { + capableBrowser = false; + } - camelize = function(str) { - return str.replace(/[\-_](\w)/g, function(match) { - return match.charAt(1).toUpperCase(); - }); - }; + return capableBrowser; +}; - Dropzone.createElement = function(string) { - var div; - div = document.createElement("div"); - div.innerHTML = string; - return div.childNodes[0]; - }; +Dropzone.dataURItoBlob = function (dataURI) { + // convert base64 to raw binary data held in a string + // doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this + var byteString = atob(dataURI.split(',')[1]); + + // separate out the mime component + var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]; + + // write the bytes of the string to an ArrayBuffer + var ab = new ArrayBuffer(byteString.length); + var ia = new Uint8Array(ab); + for (var i = 0, end = byteString.length, asc = 0 <= end; asc ? i <= end : i >= end; asc ? i++ : i--) { + ia[i] = byteString.charCodeAt(i); + } - Dropzone.elementInside = function(element, container) { + // write the ArrayBuffer to a blob + return new Blob([ab], { type: mimeString }); +}; + +// Returns an array without the rejected item +var without = function without(list, rejectedItem) { + return list.filter(function (item) { + return item !== rejectedItem; + }).map(function (item) { + return item; + }); +}; + +// abc-def_ghi -> abcDefGhi +var camelize = function camelize(str) { + return str.replace(/[\-_](\w)/g, function (match) { + return match.charAt(1).toUpperCase(); + }); +}; + +// Creates an element from string +Dropzone.createElement = function (string) { + var div = document.createElement("div"); + div.innerHTML = string; + return div.childNodes[0]; +}; + +// Tests if given element is inside (or simply is) the container +Dropzone.elementInside = function (element, container) { + if (element === container) { + return true; + } // Coffeescript doesn't support do/while loops + while (element = element.parentNode) { if (element === container) { return true; } - while (element = element.parentNode) { - if (element === container) { - return true; + } + return false; +}; + +Dropzone.getElement = function (el, name) { + var element = void 0; + if (typeof el === "string") { + element = document.querySelector(el); + } else if (el.nodeType != null) { + element = el; + } + if (element == null) { + throw new Error("Invalid `" + name + "` option provided. Please provide a CSS selector or a plain HTML element."); + } + return element; +}; + +Dropzone.getElements = function (els, name) { + var el = void 0, + elements = void 0; + if (els instanceof Array) { + elements = []; + try { + for (var _iterator35 = els, _isArray35 = Array.isArray(_iterator35), _i37 = 0, _iterator35 = _isArray35 ? _iterator35 : _iterator35[Symbol.iterator]();;) { + if (_isArray35) { + if (_i37 >= _iterator35.length) break; + el = _iterator35[_i37++]; + } else { + _i37 = _iterator35.next(); + if (_i37.done) break; + el = _i37.value; + } + + elements.push(this.getElement(el, name)); } + } catch (e) { + elements = null; } - return false; - }; + } else if (typeof els === "string") { + elements = []; + for (var _iterator36 = document.querySelectorAll(els), _isArray36 = Array.isArray(_iterator36), _i38 = 0, _iterator36 = _isArray36 ? _iterator36 : _iterator36[Symbol.iterator]();;) { + if (_isArray36) { + if (_i38 >= _iterator36.length) break; + el = _iterator36[_i38++]; + } else { + _i38 = _iterator36.next(); + if (_i38.done) break; + el = _i38.value; + } - Dropzone.getElement = function(el, name) { - var element; - if (typeof el === "string") { - element = document.querySelector(el); - } else if (el.nodeType != null) { - element = el; + elements.push(el); } - if (element == null) { - throw new Error("Invalid `" + name + "` option provided. Please provide a CSS selector or a plain HTML element."); + } else if (els.nodeType != null) { + elements = [els]; + } + + if (elements == null || !elements.length) { + throw new Error("Invalid `" + name + "` option provided. Please provide a CSS selector, a plain HTML element or a list of those."); + } + + return elements; +}; + +// Asks the user the question and calls accepted or rejected accordingly +// +// The default implementation just uses `window.confirm` and then calls the +// appropriate callback. +Dropzone.confirm = function (question, accepted, rejected) { + if (window.confirm(question)) { + return accepted(); + } else if (rejected != null) { + return rejected(); + } +}; + +// Validates the mime type like this: +// +// https://developer.mozilla.org/en-US/docs/HTML/Element/input#attr-accept +Dropzone.isValidFile = function (file, acceptedFiles) { + if (!acceptedFiles) { + return true; + } // If there are no accepted mime types, it's OK + acceptedFiles = acceptedFiles.split(","); + + var mimeType = file.type; + var baseMimeType = mimeType.replace(/\/.*$/, ""); + + for (var _iterator37 = acceptedFiles, _isArray37 = Array.isArray(_iterator37), _i39 = 0, _iterator37 = _isArray37 ? _iterator37 : _iterator37[Symbol.iterator]();;) { + var _ref34; + + if (_isArray37) { + if (_i39 >= _iterator37.length) break; + _ref34 = _iterator37[_i39++]; + } else { + _i39 = _iterator37.next(); + if (_i39.done) break; + _ref34 = _i39.value; } - return element; - }; - Dropzone.getElements = function(els, name) { - var e, el, elements, _i, _j, _len, _len1, _ref; - if (els instanceof Array) { - elements = []; - try { - for (_i = 0, _len = els.length; _i < _len; _i++) { - el = els[_i]; - elements.push(this.getElement(el, name)); - } - } catch (_error) { - e = _error; - elements = null; + var validType = _ref34; + + validType = validType.trim(); + if (validType.charAt(0) === ".") { + if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) { + return true; } - } else if (typeof els === "string") { - elements = []; - _ref = document.querySelectorAll(els); - for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) { - el = _ref[_j]; - elements.push(el); + } else if (/\/\*$/.test(validType)) { + // This is something like a image/* mime type + if (baseMimeType === validType.replace(/\/.*$/, "")) { + return true; + } + } else { + if (mimeType === validType) { + return true; } - } else if (els.nodeType != null) { - elements = [els]; - } - if (!((elements != null) && elements.length)) { - throw new Error("Invalid `" + name + "` option provided. Please provide a CSS selector, a plain HTML element or a list of those."); } - return elements; - }; + } - Dropzone.confirm = function(question, accepted, rejected) { - if (window.confirm(question)) { - return accepted(); - } else if (rejected != null) { - return rejected(); - } - }; + return false; +}; - Dropzone.isValidFile = function(file, acceptedFiles) { - var baseMimeType, mimeType, validType, _i, _len; - if (!acceptedFiles) { - return true; - } - acceptedFiles = acceptedFiles.split(","); - mimeType = file.type; - baseMimeType = mimeType.replace(/\/.*$/, ""); - for (_i = 0, _len = acceptedFiles.length; _i < _len; _i++) { - validType = acceptedFiles[_i]; - validType = validType.trim(); - if (validType.charAt(0) === ".") { - if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) { - return true; - } - } else if (/\/\*$/.test(validType)) { - if (baseMimeType === validType.replace(/\/.*$/, "")) { - return true; - } - } else { - if (mimeType === validType) { - return true; - } - } - } - return false; +// Augment jQuery +if (typeof jQuery !== 'undefined' && jQuery !== null) { + jQuery.fn.dropzone = function (options) { + return this.each(function () { + return new Dropzone(this, options); + }); }; +} - if (typeof jQuery !== "undefined" && jQuery !== null) { - jQuery.fn.dropzone = function(options) { - return this.each(function() { - return new Dropzone(this, options); - }); - }; - } +if (typeof module !== 'undefined' && module !== null) { + module.exports = Dropzone; +} else { + window.Dropzone = Dropzone; +} - if (typeof module !== "undefined" && module !== null) { - module.exports = Dropzone; - } else { - window.Dropzone = Dropzone; - } +// Dropzone file status codes +Dropzone.ADDED = "added"; - Dropzone.ADDED = "added"; +Dropzone.QUEUED = "queued"; +// For backwards compatibility. Now, if a file is accepted, it's either queued +// or uploading. +Dropzone.ACCEPTED = Dropzone.QUEUED; - Dropzone.QUEUED = "queued"; +Dropzone.UPLOADING = "uploading"; +Dropzone.PROCESSING = Dropzone.UPLOADING; // alias - Dropzone.ACCEPTED = Dropzone.QUEUED; +Dropzone.CANCELED = "canceled"; +Dropzone.ERROR = "error"; +Dropzone.SUCCESS = "success"; - Dropzone.UPLOADING = "uploading"; +/* - Dropzone.PROCESSING = Dropzone.UPLOADING; + Bugfix for iOS 6 and 7 + Source: http://stackoverflow.com/questions/11929099/html5-canvas-drawimage-ratio-bug-ios + based on the work of https://github.com/stomita/ios-imagefile-megapixel - Dropzone.CANCELED = "canceled"; + */ - Dropzone.ERROR = "error"; +// Detecting vertical squash in loaded image. +// Fixes a bug which squash image vertically while drawing into canvas for some images. +// This is a bug in iOS6 devices. This function from https://github.com/stomita/ios-imagefile-megapixel +var detectVerticalSquash = function detectVerticalSquash(img) { + var iw = img.naturalWidth; + var ih = img.naturalHeight; + var canvas = document.createElement("canvas"); + canvas.width = 1; + canvas.height = ih; + var ctx = canvas.getContext("2d"); + ctx.drawImage(img, 0, 0); - Dropzone.SUCCESS = "success"; + var _ctx$getImageData = ctx.getImageData(1, 0, 1, ih), + data = _ctx$getImageData.data; + // search image edge pixel position in case it is squashed vertically. - /* - - Bugfix for iOS 6 and 7 - Source: http://stackoverflow.com/questions/11929099/html5-canvas-drawimage-ratio-bug-ios - based on the work of https://github.com/stomita/ios-imagefile-megapixel - */ - detectVerticalSquash = function(img) { - var alpha, canvas, ctx, data, ey, ih, iw, py, ratio, sy; - iw = img.naturalWidth; - ih = img.naturalHeight; - canvas = document.createElement("canvas"); - canvas.width = 1; - canvas.height = ih; - ctx = canvas.getContext("2d"); - ctx.drawImage(img, 0, 0); - data = ctx.getImageData(0, 0, 1, ih).data; - sy = 0; - ey = ih; - py = ih; - while (py > sy) { - alpha = data[(py - 1) * 4 + 3]; - if (alpha === 0) { - ey = py; - } else { - sy = py; - } - py = (ey + sy) >> 1; - } - ratio = py / ih; - if (ratio === 0) { - return 1; + var sy = 0; + var ey = ih; + var py = ih; + while (py > sy) { + var alpha = data[(py - 1) * 4 + 3]; + + if (alpha === 0) { + ey = py; } else { - return ratio; + sy = py; } - }; - drawImageIOSFix = function(ctx, img, sx, sy, sw, sh, dx, dy, dw, dh) { - var vertSquashRatio; - vertSquashRatio = detectVerticalSquash(img); - return ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio); - }; + py = ey + sy >> 1; + } + var ratio = py / ih; + if (ratio === 0) { + return 1; + } else { + return ratio; + } +}; + +// A replacement for context.drawImage +// (args are for source and destination). +var drawImageIOSFix = function drawImageIOSFix(ctx, img, sx, sy, sw, sh, dx, dy, dw, dh) { + var vertSquashRatio = detectVerticalSquash(img); + return ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio); +}; + +// Based on MinifyJpeg +// Source: http://www.perry.cz/files/ExifRestorer.js +// http://elicon.blog57.fc2.com/blog-entry-206.html + +var ExifRestore = function () { + function ExifRestore() { + _classCallCheck(this, ExifRestore); + } - /* - * contentloaded.js - * - * Author: Diego Perini (diego.perini at gmail.com) - * Summary: cross-browser wrapper for DOMContentLoaded - * Updated: 20101020 - * License: MIT - * Version: 1.2 - * - * URL: - * http://javascript.nwbox.com/ContentLoaded/ - * http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE - */ - - contentLoaded = function(win, fn) { - var add, doc, done, init, poll, pre, rem, root, top; - done = false; - top = true; - doc = win.document; - root = doc.documentElement; - add = (doc.addEventListener ? "addEventListener" : "attachEvent"); - rem = (doc.addEventListener ? "removeEventListener" : "detachEvent"); - pre = (doc.addEventListener ? "" : "on"); - init = function(e) { - if (e.type === "readystatechange" && doc.readyState !== "complete") { - return; + _createClass(ExifRestore, null, [{ + key: "initClass", + value: function initClass() { + this.KEY_STR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; + } + }, { + key: "encode64", + value: function encode64(input) { + var output = ''; + var chr1 = undefined; + var chr2 = undefined; + var chr3 = ''; + var enc1 = undefined; + var enc2 = undefined; + var enc3 = undefined; + var enc4 = ''; + var i = 0; + while (true) { + chr1 = input[i++]; + chr2 = input[i++]; + chr3 = input[i++]; + enc1 = chr1 >> 2; + enc2 = (chr1 & 3) << 4 | chr2 >> 4; + enc3 = (chr2 & 15) << 2 | chr3 >> 6; + enc4 = chr3 & 63; + if (isNaN(chr2)) { + enc3 = enc4 = 64; + } else if (isNaN(chr3)) { + enc4 = 64; + } + output = output + this.KEY_STR.charAt(enc1) + this.KEY_STR.charAt(enc2) + this.KEY_STR.charAt(enc3) + this.KEY_STR.charAt(enc4); + chr1 = chr2 = chr3 = ''; + enc1 = enc2 = enc3 = enc4 = ''; + if (!(i < input.length)) { + break; + } } - (e.type === "load" ? win : doc)[rem](pre + e.type, init, false); - if (!done && (done = true)) { - return fn.call(win, e.type || e); + return output; + } + }, { + key: "restore", + value: function restore(origFileBase64, resizedFileBase64) { + if (!origFileBase64.match('data:image/jpeg;base64,')) { + return resizedFileBase64; + } + var rawImage = this.decode64(origFileBase64.replace('data:image/jpeg;base64,', '')); + var segments = this.slice2Segments(rawImage); + var image = this.exifManipulation(resizedFileBase64, segments); + return "data:image/jpeg;base64," + this.encode64(image); + } + }, { + key: "exifManipulation", + value: function exifManipulation(resizedFileBase64, segments) { + var exifArray = this.getExifArray(segments); + var newImageArray = this.insertExif(resizedFileBase64, exifArray); + var aBuffer = new Uint8Array(newImageArray); + return aBuffer; + } + }, { + key: "getExifArray", + value: function getExifArray(segments) { + var seg = undefined; + var x = 0; + while (x < segments.length) { + seg = segments[x]; + if (seg[0] === 255 & seg[1] === 225) { + return seg; + } + x++; } - }; - poll = function() { - var e; - try { - root.doScroll("left"); - } catch (_error) { - e = _error; - setTimeout(poll, 50); - return; + return []; + } + }, { + key: "insertExif", + value: function insertExif(resizedFileBase64, exifArray) { + var imageData = resizedFileBase64.replace('data:image/jpeg;base64,', ''); + var buf = this.decode64(imageData); + var separatePoint = buf.indexOf(255, 3); + var mae = buf.slice(0, separatePoint); + var ato = buf.slice(separatePoint); + var array = mae; + array = array.concat(exifArray); + array = array.concat(ato); + return array; + } + }, { + key: "slice2Segments", + value: function slice2Segments(rawImageArray) { + var head = 0; + var segments = []; + while (true) { + var length; + if (rawImageArray[head] === 255 & rawImageArray[head + 1] === 218) { + break; + } + if (rawImageArray[head] === 255 & rawImageArray[head + 1] === 216) { + head += 2; + } else { + length = rawImageArray[head + 2] * 256 + rawImageArray[head + 3]; + var endPoint = head + length + 2; + var seg = rawImageArray.slice(head, endPoint); + segments.push(seg); + head = endPoint; + } + if (head > rawImageArray.length) { + break; + } } - return init("poll"); - }; - if (doc.readyState !== "complete") { - if (doc.createEventObject && root.doScroll) { - try { - top = !win.frameElement; - } catch (_error) {} - if (top) { - poll(); + return segments; + } + }, { + key: "decode64", + value: function decode64(input) { + var output = ''; + var chr1 = undefined; + var chr2 = undefined; + var chr3 = ''; + var enc1 = undefined; + var enc2 = undefined; + var enc3 = undefined; + var enc4 = ''; + var i = 0; + var buf = []; + // remove all characters that are not A-Z, a-z, 0-9, +, /, or = + var base64test = /[^A-Za-z0-9\+\/\=]/g; + if (base64test.exec(input)) { + console.warn('There were invalid base64 characters in the input text.\nValid base64 characters are A-Z, a-z, 0-9, \'+\', \'/\',and \'=\'\nExpect errors in decoding.'); + } + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ''); + while (true) { + enc1 = this.KEY_STR.indexOf(input.charAt(i++)); + enc2 = this.KEY_STR.indexOf(input.charAt(i++)); + enc3 = this.KEY_STR.indexOf(input.charAt(i++)); + enc4 = this.KEY_STR.indexOf(input.charAt(i++)); + chr1 = enc1 << 2 | enc2 >> 4; + chr2 = (enc2 & 15) << 4 | enc3 >> 2; + chr3 = (enc3 & 3) << 6 | enc4; + buf.push(chr1); + if (enc3 !== 64) { + buf.push(chr2); + } + if (enc4 !== 64) { + buf.push(chr3); + } + chr1 = chr2 = chr3 = ''; + enc1 = enc2 = enc3 = enc4 = ''; + if (!(i < input.length)) { + break; } } - doc[add](pre + "DOMContentLoaded", init, false); - doc[add](pre + "readystatechange", init, false); - return win[add](pre + "load", init, false); + return buf; + } + }]); + + return ExifRestore; +}(); + +ExifRestore.initClass(); + +/* + * contentloaded.js + * + * Author: Diego Perini (diego.perini at gmail.com) + * Summary: cross-browser wrapper for DOMContentLoaded + * Updated: 20101020 + * License: MIT + * Version: 1.2 + * + * URL: + * http://javascript.nwbox.com/ContentLoaded/ + * http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE + */ + +// @win window reference +// @fn function reference +var contentLoaded = function contentLoaded(win, fn) { + var done = false; + var top = true; + var doc = win.document; + var root = doc.documentElement; + var add = doc.addEventListener ? "addEventListener" : "attachEvent"; + var rem = doc.addEventListener ? "removeEventListener" : "detachEvent"; + var pre = doc.addEventListener ? "" : "on"; + var init = function init(e) { + if (e.type === "readystatechange" && doc.readyState !== "complete") { + return; + } + (e.type === "load" ? win : doc)[rem](pre + e.type, init, false); + if (!done && (done = true)) { + return fn.call(win, e.type || e); } }; - Dropzone._autoDiscoverFunction = function() { - if (Dropzone.autoDiscover) { - return Dropzone.discover(); + var poll = function poll() { + try { + root.doScroll("left"); + } catch (e) { + setTimeout(poll, 50); + return; } + return init("poll"); }; - contentLoaded(window, Dropzone._autoDiscoverFunction); + if (doc.readyState !== "complete") { + if (doc.createEventObject && root.doScroll) { + try { + top = !win.frameElement; + } catch (error) {} + if (top) { + poll(); + } + } + doc[add](pre + "DOMContentLoaded", init, false); + doc[add](pre + "readystatechange", init, false); + return win[add](pre + "load", init, false); + } +}; -}).call(this); +// As a single function to be able to write tests. +Dropzone._autoDiscoverFunction = function () { + if (Dropzone.autoDiscover) { + return Dropzone.discover(); + } +}; +contentLoaded(window, Dropzone._autoDiscoverFunction); + +function __guard__(value, transform) { + return typeof value !== 'undefined' && value !== null ? transform(value) : undefined; +} +function __guardMethod__(obj, methodName, transform) { + if (typeof obj !== 'undefined' && obj !== null && typeof obj[methodName] === 'function') { + return transform(obj, methodName); + } else { + return undefined; + } +} return module.exports; -})); \ No newline at end of file +})); diff --git a/test/DropZone6.mpr b/test/DropZone6.mpr index 413a8bb805b144ea7f3e1c001b9b9f27e44abc87..085defc02ec7f66a8df5a09d22edacd6f4969f7a 100644 GIT binary patch delta 32916 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 R1~;0V=S2YZJo=y2{|Be`6NCT& delta 28201 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 z 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