From 13b500f26728faa1834e401ca43e75efc99aab43 Mon Sep 17 00:00:00 2001 From: Adriaan Wormgoor Date: Mon, 21 Oct 2013 16:48:41 +0200 Subject: [PATCH 01/13] further squeezing of kilobytes from the assets to save space on the 'kastje' --- img_old/icon.png | Bin 0 -> 21821 bytes img_old/logo/logo_full.png | Bin 0 -> 67980 bytes img_old/logo/logo_small.png | Bin 0 -> 47556 bytes img_old/logo/logo_smaller.png | Bin 0 -> 31902 bytes img_old/logo/logo_smallest.png | Bin 0 -> 19093 bytes .../apple-touch-icon-114x114-precomposed.png | Bin .../apple-touch-icon-144x144-precomposed.png | Bin 0 -> 21298 bytes .../apple-touch-icon-72x72-precomposed.png | Bin .../apple-touch-icon-precomposed.png | Bin www/img/buttons/btnTurnRight.png | Bin 4988 -> 2299 bytes www/img/icon.png | Bin 21821 -> 7025 bytes www/img/logo/logo_full.png | Bin 67980 -> 19400 bytes www/img/logo/logo_small.png | Bin 47556 -> 14023 bytes www/img/logo/logo_smaller.png | Bin 31902 -> 9827 bytes www/img/logo/logo_smallest.png | Bin 19093 -> 6178 bytes .../apple-touch-icon-144x144-precomposed.png | Bin 21298 -> 8524 bytes 16 files changed, 0 insertions(+), 0 deletions(-) create mode 100755 img_old/icon.png create mode 100755 img_old/logo/logo_full.png create mode 100644 img_old/logo/logo_small.png create mode 100644 img_old/logo/logo_smaller.png create mode 100644 img_old/logo/logo_smallest.png rename {www/img => img_old}/webpage_icons/apple-touch-icon-114x114-precomposed.png (100%) create mode 100644 img_old/webpage_icons/apple-touch-icon-144x144-precomposed.png rename {www/img => img_old}/webpage_icons/apple-touch-icon-72x72-precomposed.png (100%) rename {www/img => img_old}/webpage_icons/apple-touch-icon-precomposed.png (100%) mode change 100755 => 100644 www/img/icon.png mode change 100755 => 100644 www/img/logo/logo_full.png diff --git a/img_old/icon.png b/img_old/icon.png new file mode 100755 index 0000000000000000000000000000000000000000..434f30f5a58c839bf48a5ce893b44090ec09db86 GIT binary patch literal 21821 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⁢^8^+ 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]q`}Hf4T=g6 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%0A2{$K`0M1|Ax zm%gEsdrni^?kUuDL?@~P<&>Pf?Bk=VY20O9P*@73mo;?bYjsRx z+^jGf&ML77-oAbNXrNetCx$eT0l|2^x1J$*fhW+lLD`D2m<@Z7ipxu>7K^O`XJ*4v zV!?dztgo){g;J_xVq&;H$QAic0!?)W3JVA(YE+!%l7`^=LBTf=m)M03x$oV}sMTs* zFkS_W<_w?n0mYZq7^@(cDxpj=(M#weLr@5XMaGcDY*s@iK60_G-hEHp66F;9XN8g> z&e8C8l-FK+O=Jn1Q})I^kNgw#&2pFiaiEvk8=ojHv4OCmFv|0xn@m61quJ zai&<>n2L4N1JTspHbJ^jkV9?HAE8s(7sv=kakIQcIJPiDAf-gLp#CWx1qI{(SYLH; zKs}P%(dnElKIEofj~+divSPz|%D9fF)~FhqdPR8TWleTQ(z|txv!mAQLckhm{rdHP z;T;d55ivC5t%X2DU;1>xUnukBVd^{TK1xj+2w!k33(cxl3)E#A+99=T^@Ir%ij?!` z&-Vw4>9ex4L?Fn;<%ZDTB@>FxZBkrcaaogi8^zn^@xO0pX3JP6?J{VKd(B6dxub?=>r#}yb3Z`Td= zAec*RO%Z8l#CEM(1d1&YSy_1r2xdFt{Z$acW0Hb#twrudNKWZ`B$ZjHLPvZA2TK^3#{b?-~SC-!~ z3O_i2`4b+d*Qd-RAFC%Ls={^WjG0Os5AUMgd-jYTHEL9E%qas7*hj`2Ynv>B+q;P{ z0FF{2SCQRuyO~Lpv8brH_3G8D7k~EIXR{*X66Akdx{?CJ{ON-yXVR~$mQ!$O1Wlg% zf?!j;*Uw{Ld@vCh)8(_|Ks=w6lzbVeTA;ji>5{&_u3qEG8#!*}fp`J8sSy>N)@^%%4^w<`(VEiC>klw%V+UnCQr}-TI^*$7?m5z^W)OcW40nK$1t^S-U(c0><&oi2KQbIMQma zqjoU~G-Jd>dVB4c1{nKz(AKl&db8-HcgPx&#Nvmg&Z8TFq2Yoey4|-*6|B;7ACI)R zZr$1wYtu`K_w*e!luqv6Mcbw?qjJRPVbQTP_q{Ku1!BdT%3J-ha=8aIuADw5{@p4e z;V7Jn8@i&fNrxw@)IQ#>au2(zN5JiHIY3wRBI(h<*YO_2THy;>ojTowC0W-I_^(OPU4b5=CNbP#7?@a z*NWgxYA7a3C%Cg2)bFwBy=dS5ELykjP_lHn^z?T0(MMAeyt+WsJzj~o(_guqj~Jv9 z9=!bxgTYV%3UMA(*3KTT1W=wQ+Y)xl@wrn@v(e#8SKt|&lI?)jmd`s zJy}!5h7B7gVQnYz?ub3R_ZSf;*D4W{014%wrDeT)_x=iK@&%{=8G$%P!#s{72CmA_ z&kw99uYXWO1Wk_bn+uKe%9Y8s&y*WR9PF0i!Y<{RZ%VGcj4F}((AM) zo7H-T$F2k|2!cR-)fzSV2N=lZO`)?zN=Bj4`8BkWG@Km)bc;@jqKBTJLR-Jt4*n^p zR&834A+UKAeY3(8_`w1-Mb zyLVp{HM8*Wuzm2%c3e9f9s_L59HEY() zm6VWcGSgrFH^roIeCp}H<6Zc9S*OVi>IhF*1?OOcGAiy>W|DR>a8tJQNJvVc*4+|u zJ)eMTQ*}Vm%_6EUGQsg&i9*b>WYC~NeSshg;A!(Y1_On=jM(iM3~a=?bJyv{^$Kc} z5&}iGQTOgGG1oS9J6lVrvl=mfy`Fm6BqPFVIZ1U%Tusva*=|I`Npqm#nGc!#b z({Tv_)L `TZOZLr<@ThlN$75ZjqEq2GBuH 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 Y0B~6WW9t*vtN;K207*qoM6N<$g1-~C+5i9m literal 0 HcmV?d00001 diff --git a/www/img/webpage_icons/apple-touch-icon-114x114-precomposed.png b/img_old/webpage_icons/apple-touch-icon-114x114-precomposed.png similarity index 100% rename from www/img/webpage_icons/apple-touch-icon-114x114-precomposed.png rename to img_old/webpage_icons/apple-touch-icon-114x114-precomposed.png diff --git a/img_old/webpage_icons/apple-touch-icon-144x144-precomposed.png b/img_old/webpage_icons/apple-touch-icon-144x144-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..585036f73283ba9cca1683eeab074f00a0571371 GIT binary patch literal 21298 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 literal 0 HcmV?d00001 diff --git a/www/img/webpage_icons/apple-touch-icon-72x72-precomposed.png b/img_old/webpage_icons/apple-touch-icon-72x72-precomposed.png similarity index 100% rename from www/img/webpage_icons/apple-touch-icon-72x72-precomposed.png rename to img_old/webpage_icons/apple-touch-icon-72x72-precomposed.png diff --git a/www/img/webpage_icons/apple-touch-icon-precomposed.png b/img_old/webpage_icons/apple-touch-icon-precomposed.png similarity index 100% rename from www/img/webpage_icons/apple-touch-icon-precomposed.png rename to img_old/webpage_icons/apple-touch-icon-precomposed.png diff --git a/www/img/buttons/btnTurnRight.png b/www/img/buttons/btnTurnRight.png index 89f242c0f9be099e5d13651cc2ed45166e451ffb..60b97f7ace632b2b9b1bd8f10b3f6e7fa491f9bf 100644 GIT binary patch delta 1363 zcmV-Z1+4n~Ci@YPBqAAfMObuGZ)S9NVRB^vL1b@YWgtmyVP|DhWnpA_ami&ov%LzN z1AhfcL_t(|+LV`RTjEF%fIEOjQ4mBCB+TNqcz`I3Jc1ko1{Cib?{gG&ozb~xXS@A1 z{LiT*5IfjGx4+Pku9v#If}Yr`GL1EBx}tLs>BwWoVnWc{<=F_Nt3S~!T?W##oxEJt zCzS>O%5{Y3A}YFoN@H=AL7RbI$dgxAoqrOjPM*BJv;?Fzzp?01w|A+En63xBMg5%3 z{(e1EB~-KkhJ0*xIhD#SQNP@dV?1WdRIRAcfO_)_rrWO8&7o4MbZ=Z=%PBu@OiHJm z#-zpw1)#~i*r;PD5Dp2V$Z?z~4BAH=pHlFJ-SX^zf3D7#g%Z23H@g&WH?gt(t=&U`gZ$ucCqqpcL3| z`6+_5YxQHxj(;wlNP9a!dK8AJY8B~E##I}T#)B#3f`4-!{yIx$Yc{2JZ#D-)l0Rf~ zqVNYlIufLo(MV&!dKhCN(3z|W&wnOQXO`h3VJn%p9(XKHoj8Fb9J`Bzzv2Okzg}>wYv6AF9 zvS-DT8DhBncfOX70H73@Zw+A{%`0C<`@+v&3*KgA0N{Qc-flcsRpkj$3V$5;aQMWn z>=(;X$(>DsfF%SctiNW-Oj!`Z<>mrimeWs&%AxKt%)S3hG5-)k$Ny(ro0;*pT0s@d z1*mY|ew(T*Y#K1z<-#H3th~25A?xo)<^962N5tafDTx=0^P~Y_qd$tRiUr9nscNzd z-klpS#B}cwqVv1JYArP2tbZ+nR~Kb(x_@HMoGjdrJDuZ0X%aJlLg955ph5u_%_0t@ zrCq$siFqSgk*k8Yzaxcn0dwVJ24I?sf()3Gy#eub8i+eA2;fU@z(f*u5s$5~RG{); z4FDb)@Xv=3o^p_U=Y3!M7-a5wF4o}!o#HIOlM1-h0GyqKWKzYv;eQ(A>kIM~+LHxt!XxO0s~-*O(Z z)V|9Es5UGcLwHb$)xiLS%@LFLCJ*MW3Pm%A2hJJ;VvZ>s9a)gKtvu!eiz=X}kd**w zHb8a4mj{f4CdD71aew5>eQWLFvrRRswFP93z+YdRUrRD?TTY|^VK61 zV-&?q7L2dHu`==L*#>e0K@Z<36?FGqs(z&r4lKq|2#ftiRxQw7J#`<&+^S!8-m)Pm zXEG-`+x(;(n&tQo(E&Us~PQq%)HQC$&CkMw+1 zzQp&F$z)#g$uQUx^s{QI{$`qYfEzfEV_$R9Z|C4bV^u=s`EINdvUh_(7`*o`tLK*7 zSI{2=X{G|y^B zrJFHq%d+J)6MsteQ9OaHf*e43!A`I^icAO8&q%e0S%06Em#$ODBTnS4Bi=aM0h%dI zGv%Z%jBTC=i^cNbDYxw98ccdfGbU1JmgZI*27|$|l2~XsDN=)G-JqB~n7dqCOP?+= z#iuJelj>`;;){tLF=zEx#Px>l#^b)uD+hYzW$V?K9whXJH@5%(&ctNsy!ibQU;x+s V>um*aAvXX3002ovPDHLkV1fY;k_i9+ delta 4072 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 a{|x{jrq6#TL&0kR0000C0000PbVXQnQ*UN; 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⁢^8^+ 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 LNkvXXu0mjfUDmrY literal 67980 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]q`}Hf4T=g6 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 literal 47556 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%0A2{$K`0M1|Ax zm%gEsdrni^?kUuDL?@~P<&>Pf?Bk=VY20O9P*@73mo;?bYjsRx z+^jGf&ML77-oAbNXrNetCx$eT0l|2^x1J$*fhW+lLD`D2m<@Z7ipxu>7K^O`XJ*4v zV!?dztgo){g;J_xVq&;H$QAic0!?)W3JVA(YE+!%l7`^=LBTf=m)M03x$oV}sMTs* zFkS_W<_w?n0mYZq7^@(cDxpj=(M#weLr@5XMaGcDY*s@iK60_G-hEHp66F;9XN8g> z&e8C8l-FK+O=Jn1Q})I^kNgw#&2pFiaiEvk8=ojHv4OCmFv|0xn@m61quJ zai&<>n2L4N1JTspHbJ^jkV9?HAE8s(7sv=kakIQcIJPiDAf-gLp#CWx1qI{(SYLH; zKs}P%(dnElKIEofj~+divSPz|%D9fF)~FhqdPR8TWleTQ(z|txv!mAQLckhm{rdHP z;T;d55ivC5t%X2DU;1>xUnukBVd^{TK1xj+2w!k33(cxl3)E#A+99=T^@Ir%ij?!` z&-Vw4>9ex4L?Fn;<%ZDTB@>FxZBkrcaaogi8^zn^@xO0pX3JP6?J{VKd(B6dxub?=>r#}yb3Z`Td= zAec*RO%Z8l#CEM(1d1&YSy_1r2xdFt{Z$acW0Hb#twrudNKWZ`B$ZjHLPvZA2TK^3#{b?-~SC-!~ z3O_i2`4b+d*Qd-RAFC%Ls={^WjG0Os5AUMgd-jYTHEL9E%qas7*hj`2Ynv>B+q;P{ z0FF{2SCQRuyO~Lpv8brH_3G8D7k~EIXR{*X66Akdx{?CJ{ON-yXVR~$mQ!$O1Wlg% zf?!j;*Uw{Ld@vCh)8(_|Ks=w6lzbVeTA;ji>5{&_u3qEG8#!*}fp`J8sSy>N)@^%%4^w<`(VEiC>klw%V+UnCQr}-TI^*$7?m5z^W)OcW40nK$1t^S-U(c0><&oi2KQbIMQma zqjoU~G-Jd>dVB4c1{nKz(AKl&db8-HcgPx&#Nvmg&Z8TFq2Yoey4|-*6|B;7ACI)R zZr$1wYtu`K_w*e!luqv6Mcbw?qjJRPVbQTP_q{Ku1!BdT%3J-ha=8aIuADw5{@p4e z;V7Jn8@i&fNrxw@)IQ#>au2(zN5JiHIY3wRBI(h<*YO_2THy;>ojTowC0W-I_^(OPU4b5=CNbP#7?@a z*NWgxYA7a3C%Cg2)bFwBy=dS5ELykjP_lHn^z?T0(MMAeyt+WsJzj~o(_guqj~Jv9 z9=!bxgTYV%3UMA(*3KTT1W=wQ+Y)xl@wrn@v(e#8SKt|&lI?)jmd`s zJy}!5h7B7gVQnYz?ub3R_ZSf;*D4W{014%wrDeT)_x=iK@&%{=8G$%P!#s{72CmA_ z&kw99uYXWO1Wk_bn+uKe%9Y8s&y*WR9PF0i!Y<{RZ%VGcj4F}((AM) zo7H-T$F2k|2!cR-)fzSV2N=lZO`)?zN=Bj4`8BkWG@Km)bc;@jqKBTJLR-Jt4*n^p zR&834A+UKAeY3(8_`w1-Mb zyLVp{HM8*Wuzm2%c3e9f9s_L59HEY() zm6VWcGSgrFH^roIeCp}H<6Zc9S*OVi>IhF*1?OOcGAiy>W|DR>a8tJQNJvVc*4+|u zJ)eMTQ*}Vm%_6EUGQsg&i9*b>WYC~NeSshg;A!(Y1_On=jM(iM3~a=?bJyv{^$Kc} z5&}iGQTOgGG1oS9J6lVrvl=mfy`Fm6BqPFVIZ1U%Tusva*=|I`Npqm#nGc!#b z({Tv_)L `TZOZLr<@ThlN$75ZjqEq2GBuH z&8KwhMbSwe5J$_Y*4WI>4xNmS?Al4!FI}MYe*Mltm#;A^P*zu0_W^wfXC%@G>O93{ zZ>q7Z#B+L)%G-X_xNnP<$cFz$K0TNQOzSO-Mx*uP#T3j!wB}%8M9r(o=}Rg<&LxVdJY*)6Xv`~Ejo0ix@xPShrH2`3;er(SRvkvv2Q3UDssye_c-^>TX*9aTF={x zq#X@6^GK;vh}xIRUrFtIx1|XGC_2CQqB!Dg=gyr|ii?X=Cr_R{7xZvXZf>pxDF5q@ z9Xm#pmKkZsuFKT6eI(gUW(o>c(@XytNB2#-MoX7|_S$2Q{n_57OBX&0-Nv+#pVE;4 z%^{dVgc!F@-hzJU_$WG1!+tOxQ%GoNNoYvOMWfM}kN2EHd|d+Lvjbh_Ow}>g8K9Z* zoU-Q=zsSq97=3une0W`~_1q2{WUj9dHTZ`jhBb(8dx=R@lzFn3K3a{p3Ha7paaX)t zsiKMVUZLTS%@(x7PopOvU$scUa6;3Jb#Xhbcj`0HvaYImsrF=#`LrJkcR{;v?;N-- zbA@2tKggfHe|r-h-<81zl?f&Nnt412%{rZ~a>9fOtJuK!GuyXcpn3C#fbz*j(!&#+ zJ3Iwt*{#kb={~H63Z;fVTeh99<(BZ*-0UAee*7^uc~3r^j1oEnZOYh3n~&_FnAq6s@VHx;_BiZzrKe`3x}%|i z>tBE`N*nb66<^P#R_!~{;0GS3c6|nkez`iMRmhUFl7>J9{qotTl(ByYP`Yyl5O)_8 zzrQC*K@AC_JG+T_%Y=o-JULXHUs-;$g05Y-PI)dlck>Pb#gwXi`URtQb3gm0isib z$yDj-8Zy^=WZ+eIti_>TMy{t=6gq%{Z`bHGTc|3+$C0 z82dsvoGQr17Y4`&q>0n2RKCrZ!#E-3A7h{aNqq$a5e&lWq>6$nD#;cW-irK zn5eF@o~~zK$LnRB1r9lJ;>0x2nvFori-QLb`C<9;<@5LMy+9{V6i|4-nxr?5p!GG#6 zb|CX3EId^7?)}j-Z`@vf#Pu$%UW3JU)0)?Rq;K9?!&J-p^wUrO6>-2OR(wx}%1=53 zwRGy#ss8|#TMOmVEm^W1G_ei&`6_{scb>~3((*pw+*quA`>xUxPkatEw9r#eJ+%;V z*LL2z?H0R~#WBq^ZQ8UqVZ411hqV2C>js+KX9T5$L?Py>zAe^lY{kAnuDqHGdVI+% zboS~cf|33_Zrr#JMYb3ZOy6w+__c;N_S-ZM-%h0BP+j!2=@g70%S zk_-4s7#4SogTCb7qzxZ@N*h0440N{ALk~Ulc83lf_^?%uL5wQ3%3OG($nUomyG8T0 z%e#^Dw%Qn8;5BntJ=tJJ9+^r;5y_zx+uqZG)=$<;jEftsnWnFL=Lh=nwtuHG;CNh_3W7d`Z*IHL&U70e}27$0wCwdM&3v9 zq2Z*)YawuIt>RiyLTD8EL!0fU8nQ8+^KBHET)O;?WP(hu)#q+>fza^1uM<9cD>pn*%-(j_{{XWB^z_+t@%nK^Uj;txLf z;HB-`Pt)SXI}vw{!R4#TYPC0b6wY$--Xpm}O>5Skqy^7@OME88n6YD5fgZlW*ObOB zwesNpc{66rc=3%l-dK}gR;+z(&8PI$ytfcT>OJvRqdii5289ek@tNyc^z>)%(2Q-oZl_M2-euGk9Rppv?s$C0)fO@aeC=B??Gca${P=Tur@*A0a9EjXGe7Y{CWN+(t<}HeRRS5 z?=M_;?09z2g@2vd-G^Ct5cIuch`{~(_>Gk>>Jbvjk zEFLcq^NkxfZnWLIcdtm<^AU2_P9LRm#C|+>A#5N_;f-9nk#m7=W@l0^o_4F5f`fvp z`t|F#XUv!}9|i;j?Bn!zBV~2=?%jJ4?sxI@snbh9=Ua=@s6g3{Y&=2!VFoI?Q7jTq z;v7eezof8CB!5Kg#uB$3lgKEV2e$XpEHOx$B@~_g5M|RRT zJAR_Vic&75Z<{-3?vpSm6KC%DJ{X%7?C3ANN9>0mewg?AW0S;*QvSgq6cQatetN#_ zf7qNL7u(H5LWB>`tt`Asmros|1Dn>;@!eZRVgzyWS?Ka#+qG-Ay-^F;?FJ@gwuF&Q zobWO%)$!qnAHKo?rberwqAMk&_E&q(W@yI1c-OPcEhme~O!>KmRC=SFZe-=rwez`x z`zvG$S7Kt~)!`$De}kCf8(8|y=2~kSCq=wRp_w0fs&>SO4v$m)0nM`|T{H zr>A;1xVb4iJ6~)?FD|a4(9p2Ti4!M$0OMJRYg?p4G@FYH897_GZvFYZdGqR5tXQ$= zyB$A=oXoyJW77tZA9vYfYcESO$dS^49+bLYC{oIOD=P8=dmy=~4f1_uRJckR^SR7`B_E-cV4{+d$$rkLiA z31HbHzW8nKGjm6N|NZw%_V3?6wz{f@mcF$7&h>zU21>XP zbE%R}N0#&%|F#StKK!rzZ8PiEty>^6ez;HJ}&E_bup+43DfFFkrxb7}o|s_6`i9m|J&#?~!EQZR0j9{!0+n z*^3vmUOamAe8&R^E;b636t3v#sL}@>7`6j~{s_W6(X`lkuf|gZ_212(H!o-Bu3fJl zJalNld+WYdH-2A0P*63ldl=sEOHj*AFj%LwS#kqF9URGXJTUTp^;@X0Of-E-Ac>oT`pbXb5=WQfFCmWEK50K$T zW(%0XO*||xY)4*Ro*7P~UP_}&sdbhQu7CX5XP+I1YrndG|ADDrez`N?tFLyFuUbjL zA%WuD6h0b&yBgpO8SiOin#TRHe#8*>kct-%!X~e%wLrs_m$No$9oIci3 zTCd|5&(p-W=8+LHy#Zyet*`U+4tiMy;!1l;YHC)uE?u__9z1w0WOknA(%cumi_^WF zPTSC-LtlVM)SEYNo?Tg1OmEDXEV?#CS7VcNJB5?y-AK3}pWZ7eJa+~{&&mf3=zpMN z$IcsKV`H}F=jT^7W?gqRFjg4J8;jG9z+>U9--6KVwr$%sxz+`h(0t1g?u_r}DM0Ca&+W>vE zT8-8P!z%aF_+=w-y~GO01yGiggo><;?CmdJym;F+q2w9QJ@?#r(8W;D#WIYWcNnws zmqNi!M~@zLA3JtT^Z-iRVt!9Yx`dP%b1j_CJD`(3Y#>{l{zq*+YR7Fh0=io2hIx#30Vq*8H%`e6z0~Vva%|uurN>U z(FeCorBd5LnJxbQk=4P$$_l*S4#RXoOr>}|3o^LQ_u+Z-J!4{G_F>(Ib?@GNSXo)w zq)V4BwKi58LyufO&xb>~^ai~>COp)n0)xTa%E5m2;5w%u!;AR6ggZT&TkpmWkbmdm zSpWY0pXD(P6zqn`5o~sHA3;p2nuo zJMlhl(8Xd_VDQdXtyRd@Xxp1CbV7LU3shmNbUO<7m#~-^<%cK(3}?q89UlhYs0 zqX(Q_xOdJnIKdjkLxs?%OgQOG7=;BC%6jV5sX7>smABtZV`9hV_5P*MsqaRO8np@Q z*n{*NN@hqKO>s{zSkrzxTY#|3`oU Y0B~6WW9t*vtN;K207*qoM6N<$g1-~C+5i9m diff --git a/www/img/webpage_icons/apple-touch-icon-144x144-precomposed.png b/www/img/webpage_icons/apple-touch-icon-144x144-precomposed.png index 585036f73283ba9cca1683eeab074f00a0571371..e3c478b13ebb04d31712f8f45fe69564c0c068a9 100644 GIT binary patch literal 8524 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 From 48a602e856ba322bd8a8b4d7a3701733b2e9d273 Mon Sep 17 00:00:00 2001 From: peteruithoven Date: Tue, 22 Oct 2013 03:31:12 +0200 Subject: [PATCH 02/13] UpdatePanel --- www/index.html | 3 +- www/js/{message.js => Message.js} | 0 www/js/SettingsWindow.js | 24 +++- www/js/UpdatePanel.js | 230 ++++++++++++++++++++++++++++++ www/settings.html | 109 +++++++------- 5 files changed, 309 insertions(+), 57 deletions(-) rename www/js/{message.js => Message.js} (100%) create mode 100644 www/js/UpdatePanel.js diff --git a/www/index.html b/www/index.html index cd0b5d3..5aa8b24 100755 --- a/www/index.html +++ b/www/index.html @@ -131,6 +131,7 @@ + @@ -143,7 +144,7 @@ - + diff --git a/www/js/message.js b/www/js/Message.js similarity index 100% rename from www/js/message.js rename to www/js/Message.js diff --git a/www/js/SettingsWindow.js b/www/js/SettingsWindow.js index 846ca07..9eb7191 100644 --- a/www/js/SettingsWindow.js +++ b/www/js/SettingsWindow.js @@ -49,7 +49,7 @@ function SettingsWindow() { this.clientModeState = SettingsWindow.NOT_CONNECTED; this.currentAP; this.apModeState = SettingsWindow.NO_AP; - + // after switching wifi network or creating a access point we delay the status retrieval // because the webserver needs time to switch this.retrieveNetworkStatusDelay; // setTimout delay @@ -68,7 +68,6 @@ function SettingsWindow() { SettingsWindow.NO_AP = "no ap"; SettingsWindow.AP = "ap"; SettingsWindow.CREATING_AP = "creating ap"; - SettingsWindow.API_CONNECTING_FAILED = -1 SettingsWindow.API_NOT_CONNECTED = 0 @@ -77,6 +76,15 @@ function SettingsWindow() { SettingsWindow.API_CREATING = 3 SettingsWindow.API_CREATED = 4 + // network mode + SettingsWindow.NETWORK_MODE_NEITHER = "neither"; + SettingsWindow.NETWORK_MODE_CLIENT = "clientMode"; + SettingsWindow.NETWORK_MODE_ACCESS_POINT = "accessPointMode"; + + this.networkMode = SettingsWindow.NETWORK_MODE_NEITHER; + + this.updatePanel = new UpdatePanel(); + var self = this; this.init = function(wifiboxURL,wifiboxCGIBinURL) { @@ -108,6 +116,10 @@ function SettingsWindow() { btnConnect.on('touchstart mousedown',self.connectToNetwork); btnCreate.on('touchstart mousedown',self.createAP); networkSelector.change(self.networkSelectorChanged); + + // update panel + var $updatePanelElement = self.form.find("#updatePanel"); + self.updatePanel.init(wifiboxURL,$updatePanelElement); }); } this.submitwindow = function(e) { @@ -360,6 +372,8 @@ function SettingsWindow() { //console.log(" not connected & not a access point"); self.apFieldSet.show(); self.clientFieldSet.show(); + + self.networkMode = SettingsWindow.NETWORK_MODE_NEITHER; break; case SettingsWindow.API_CONNECTING_FAILED: case SettingsWindow.API_CONNECTING: @@ -380,7 +394,7 @@ function SettingsWindow() { } else { self.currentLocalIP = "" } - + self.networkMode = SettingsWindow.NETWORK_MODE_CLIENT; break; case SettingsWindow.API_CREATING: case SettingsWindow.API_CREATED: @@ -398,8 +412,10 @@ function SettingsWindow() { if(data.ssid && data.status == SettingsWindow.API_CREATED) { self.currentAP = data.ssid; } + self.networkMode = SettingsWindow.NETWORK_MODE_ACCESS_POINT; break; } + self.updatePanel.setNetworkMode(self.networkMode); // update status message switch(data.status) { @@ -456,6 +472,8 @@ function SettingsWindow() { this.selectNetwork = function(ssid) { console.log("select network: ",ssid); + if(ssid == "") return; + console.log(" checked"); this.selectedNetwork = ssid; if(this.networks == undefined || ssid == SettingsWindow.NOT_CONNECTED) { this.hideWiFiPassword(); diff --git a/www/js/UpdatePanel.js b/www/js/UpdatePanel.js new file mode 100644 index 0000000..5c9558c --- /dev/null +++ b/www/js/UpdatePanel.js @@ -0,0 +1,230 @@ +function UpdatePanel() { + this.wifiboxURL; + this.element; + + this.statusCheckInterval = 1000; + this.statusCheckDelayer; // setTimout instance + this.installedDelay = 60*1000; // Since we can't retrieve status during installation we show the installed text after a fixed delay + this.installedDelayer; // setTimout instance + this.retryDelay = 1000; + this.retryDelayer; // setTimout instance + //this.timeoutTime = 3000; + + this.canUpdate = false; + this.currentVersion = ""; + this.newestVersion; + this.progress; + this.imageSize; + + // states from api, see Doodle3D firmware src/script/d3d-updater.lua + UpdatePanel.NONE = 1; // default state + UpdatePanel.DOWNLOADING = 2; + UpdatePanel.DOWNLOAD_FAILED = 3; + UpdatePanel.IMAGE_READY = 4; // download successfull and checked + UpdatePanel.INSTALLING = 5; + UpdatePanel.INSTALLED = 6; + UpdatePanel.INSTALL_FAILED = 7; + + this.state; // update state from api + this.stateText = ""; // update state text from api + + this.networkMode; // network modes from SettingsWindow + + var self = this; + + this.init = function(wifiboxURL,updatePanelElement) { + + this.wifiboxURL = wifiboxURL; + + this.element = updatePanelElement; + this.btnUpdate = this.element.find("#update"); + this.statusDisplay = this.element.find("#updateState"); + this.infoDisplay = this.element.find("#updateInfo"); + + this.btnUpdate.click(this.update); + + this.checkStatus(false); + } + + this.update = function() { + console.log("UpdatePanel:update"); + self.downloadUpdate(); + } + this.downloadUpdate = function() { + console.log("UpdatePanel:downloadUpdate"); + $.ajax({ + url: self.wifiboxURL + "/update/download", + type: "POST", + dataType: 'json', + success: function(response){ + console.log("UpdatePanel:downloadUpdate response: ",response); + } + }).fail(function() { + console.log("UpdatePanel:downloadUpdate: failed"); + }); + self.setState(UpdatePanel.DOWNLOADING); + self.startCheckingStatus(); + } + this.installUpdate = function() { + console.log("UpdatePanel:installUpdate"); + self.stopCheckingStatus(); + $.ajax({ + url: self.wifiboxURL + "/update/install", + type: "POST", + dataType: 'json', + success: function(response){ + console.log("UpdatePanel:installUpdate response: ",response); + } + }).fail(function() { + console.log("UpdatePanel:installUpdate: no respons (there shouldn't be)"); + }); + self.setState(UpdatePanel.INSTALLING); + + clearTimeout(self.installedDelayer); + self.installedDelayer = setTimeout(function() { self.setState(UpdatePanel.INSTALLED) },self.installedDelay); + } + + this.startCheckingStatus = function() { + clearTimeout(self.statusCheckDelayer); + clearTimeout(self.retryDelayer); + self.statusCheckDelayer = setTimeout(function() { self.checkStatus(true) },self.statusCheckInterval); + } + this.stopCheckingStatus = function() { + clearTimeout(self.statusCheckDelayer); + clearTimeout(self.retryDelayer); + } + this.checkStatus = function(keepChecking) { + if (!communicateWithWifibox) return; + $.ajax({ + url: self.wifiboxURL + "/update/status", + type: "GET", + dataType: 'json', + //timeout: self.timeoutTime, + success: function(response){ + console.log("UpdatePanel:checkStatus response: ",response); + + // Keep checking ? + if(keepChecking) { + switch(self.state){ + case UpdatePanel.DOWNLOADING: + case UpdatePanel.INSTALLING: + clearTimeout(self.statusCheckDelayer); + self.statusCheckDelayer = setTimeout(function() { self.checkStatus(keepChecking) },self.statusCheckInterval); + break; + } + } + + if(response.status != "error") { + var data = response.data; + self.handleStatusData(data); + } + } + }).fail(function() { + //console.log("UpdatePanel:checkStatus: failed"); + if(keepChecking) { + clearTimeout(self.retryDelayer); + self.retryDelayer = setTimeout(function() { self.checkStatus(keepChecking) },self.retryDelay); // retry after delay + } + }); + } + + this.handleStatusData = function(data) { + //console.log("UpdatePanel:handleStatusData"); + self.canUpdate = data.can_update; + + if(self.currentVersion != data.current_version || self.newestVersion != data.newest_version) { + self.currentVersion = data.current_version; + self.newestVersion = data.newest_version; + self.updateInfoDisplay(); + } + + self.stateText = data.state_text; + self.progress = data.progress; // not always available + self.imageSize = data.image_size; // not always available + + self.setState(data.state_code); + + switch(this.state){ + case UpdatePanel.IMAGE_READY: + self.installUpdate(); + break; + } + } + this.setState = function(newState) { + if(this.state == newState) return; + console.log("UpdatePanel:setState: ",this.state," > ",newState,"(",this.stateText,") (networkMode: ",self.networkMode,") (newestVersion: ",self.newestVersion,")"); + this.state = newState; + + // download button + // if there isn't newestVersion data something went wrong, + // probably accessing the internet + if(self.newestVersion != undefined) { + switch(this.state){ + case UpdatePanel.NONE: + case UpdatePanel.DOWNLOAD_FAILED: + case UpdatePanel.INSTALL_FAILED: + if(self.canUpdate) { + self.btnUpdate.removeAttr("disabled"); + } else { + self.btnUpdate.attr("disabled", true); + } + break; + default: + self.btnUpdate.attr("disabled", true); + break; + } + } else { + self.btnUpdate.attr("disabled", true); + } + this.updateStatusDisplay(); + } + this.updateStatusDisplay = function() { + var text = ""; + if(self.newestVersion != undefined) { + switch(this.state){ + case UpdatePanel.NONE: + if(self.canUpdate) { + text = "Update(s) available."; + } else { + text = "You're up to date."; + } + break; + case UpdatePanel.DOWNLOADING: + text = "Downloading update..."; + break; + case UpdatePanel.DOWNLOAD_FAILED: + text = "Downloading update failed."; + break; + case UpdatePanel.IMAGE_READY: + text = "Update downloaded."; + break; + case UpdatePanel.INSTALLING: + text = "Installing update... (will take a minute)"; + break; + case UpdatePanel.INSTALLED: + text = "Update complete, please refresh Page."; + break; + case UpdatePanel.INSTALL_FAILED: + text = "Installing update failed."; + break; + } + } else { + if(self.networkMode == SettingsWindow.NETWORK_MODE_ACCESS_POINT) { + text = "Can't access internet in access point mode."; + } else { + text = "Can't access internet."; + } + } + this.statusDisplay.html(text); + } + this.updateInfoDisplay = function() { + var text = "Current version: "+self.currentVersion+". "; + if(self.canUpdate) { + text += "Latest version: "+self.newestVersion+"."; + } + self.infoDisplay.text(text); + } + this.setNetworkMode = function(networkMode) { + self.networkMode = networkMode; + } +} \ No newline at end of file diff --git a/www/settings.html b/www/settings.html index 5097302..94f4e71 100755 --- a/www/settings.html +++ b/www/settings.html @@ -55,7 +55,7 @@ --> -

+
Print settings mm
mm
@@ -78,68 +78,71 @@
-
- Doodle3D settings - px
- mm
-
-
+
+ Doodle3D settings + px
+ mm
+
+
-
- Network settings - -
- - -
+
+ Network settings + +
+ + +
- Access point settings -
- * The text %%MAC_ADDR_TAIL%% will be replaced by the last 6 digits of your Doodle3D Wi-Fi box's MAC address. -
-
-
-
- -
-
- When you can't connect to your device, you can always use an ethernet cable and go to connect.doodle3d.com. + Access point settings +
+ * The text %%MAC_ADDR_TAIL%% will be replaced by the last 6 digits of your Doodle3D Wi-Fi box's MAC address. +
+
+
+
+ +
+
+ When you can't connect to your device, you can always use an ethernet cable and go to connect.doodle3d.com.
- Client mode settings + Client mode settings -
- * Is used on connect.doodle3d.com.
- The text %%MAC_ADDR_TAIL%% will be replaced by the last 6 digits of your Doodle3D Wi-Fi box's MAC address.
-
- - -
-
- -
-
- When you can't connect to your device, you can always use an ethernet cable and go to connect.doodle3d.com. -
+
+ * Is used on connect.doodle3d.com.
+ The text %%MAC_ADDR_TAIL%% will be replaced by the last 6 digits of your Doodle3D Wi-Fi box's MAC address.
+
+ + +
+
+ +
+
+ When you can't connect to your device, you can always use an ethernet cable and go to connect.doodle3d.com.
+
+ +
+ Update + +
+ +
- GCODE settings -
-
- - -
-
-
- -
- The text {printingTemp} will be replaced by the printing temperature and {preheatTemp} will be replaced by the preaheat temperature. + GCODE settings +
+
+ +
+
+
+ +
+ The text {printingTemp} will be replaced by the printing temperature and {preheatTemp} will be replaced by the preaheat temperature.

From 447b245c5bf51ddceb9183a7279b7e57af2ff3bf Mon Sep 17 00:00:00 2001 From: Adriaan Wormgoor Date: Tue, 22 Oct 2013 11:00:33 +0200 Subject: [PATCH 03/13] fix bug where progressguage and thermometer were making print and stop button non-clickable --- less/base_rightpanel.less | 2 +- www/css/styles.css | 2 +- www/css/styles.min.css | 2 +- www/index.html | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/less/base_rightpanel.less b/less/base_rightpanel.less index ab32d06..efc58a4 100644 --- a/less/base_rightpanel.less +++ b/less/base_rightpanel.less @@ -81,7 +81,7 @@ transition: right .40s cubic-bezier(0.68, -0.55, 0.265, 1.55); right: -60%; - margin-top: 5%; + margin: 5% 0%; } #progressbarCanvas { diff --git a/www/css/styles.css b/www/css/styles.css index dd25934..a95a968 100644 --- a/www/css/styles.css +++ b/www/css/styles.css @@ -464,7 +464,7 @@ img { -webkit-transition: right 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55); transition: right 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55); right: -60%; - margin-top: 5%; + margin: 5% 0%; } #progressbarCanvas { diff --git a/www/css/styles.min.css b/www/css/styles.min.css index 06fe733..8590541 100644 --- a/www/css/styles.min.css +++ b/www/css/styles.min.css @@ -1 +1 @@ -body{background-color:#fcfcfc;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden}img{z-index:5}.btn{background-repeat:no-repeat;cursor:pointer}#landscape{position:absolute;background-color:#fff;width:100%;max-width:1024px;max-height:768px;top:0;bottom:0;left:0;right:0;z-index:5;overflow:hidden;margin:0 auto;outline:2px solid #5e8c71;-webkit-box-shadow:0 0 8px rgba(8,8,8,.25);box-shadow:0 0 8px rgba(8,8,8,.25)}#portrait{display:none}.bgContainer{position:absolute;width:100%;height:100%;overflow:hidden}.bgTop,.bgMiddle,.bgBottom{opacity:1;-webkit-transition:opacity .35s linear;transition:opacity .35s linear;position:absolute;left:0;z-index:-5}.bgTop{top:0}.bgMiddle{top:30%}.bgBottom{bottom:0}.centerpanel{position:absolute;left:50%;margin-left:-33%;width:66%;height:100%;z-index:5}.logopanel{height:25%}.d3dlogo{position:relative;top:15%;width:100%;height:100%;margin:0 auto;max-width:399px;height:139px;background:url(../img/logo/logo_full.png) no-repeat center center;cursor:pointer}#verticalShapes{position:absolute;right:0;bottom:15px;margin-right:-8.5%;width:8%}#verticalShapes>div{border:2px solid #333;border-radius:0 5px 5px 0;margin-top:4px;background-color:#fff;cursor:pointer}#verticalShapes>div img.verticalshape{width:100%;max-width:50px;height:auto;vertical-align:bottom}.drawareacontainer{position:relative;width:100%;height:65%;background-color:#fff;border:4px solid #000;border-radius:15px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;z-index:15}#canvasContainers{position:absolute;top:0;bottom:0;left:0;right:0;width:100%;height:100%;padding:0;margin:0}#mycanvasContainer{position:absolute;top:0;left:0;width:78%;height:100%}#mycanvas{width:100%;height:100%;margin:0;padding:0;border-right:2px solid #333}#previewContainer{position:absolute;top:0;right:0;width:22%;height:100%}#preview{min-width:50px;width:100%;height:100%;margin:0;padding:0}#preview_tmp{position:absolute;top:0;left:0;z-index:500;border:1px solid #f80;display:none}.bottompanel{position:relative;bottom:0;width:100%;height:10%}.manipulationBtns{margin:2px 5px;position:absolute;right:0;top:0;max-width:340px;max-height:70px;width:45%}.manipulationBtn{width:45%;height:auto;cursor:pointer}#btnsUpDown{float:left;width:45%}#btnsUpDown>div{float:left;padding-right:8px;background-repeat:no-repeat}#btnsTurnLeftRight{float:right;width:45%}#btnsTurnLeftRight>div{float:left;padding-right:8px;background-repeat:no-repeat}#btnMoveUp{max-width:65px}#btnMoveDown{max-width:64px}#btnTwistLeft{max-width:59px}#btnTwistRight{max-width:64px}@media screen and (max-height:700px){.logopanel{height:22%}.doodlecontainer{height:68%}.d3dlogo{top:25%;max-width:399px;height:74px;background-image:url(../img/logo/logo_small.png)}}@media screen and (max-height:655px){.bgMiddle{opacity:0}}@media screen and (max-height:525px){.d3dlogo{top:20%;height:57px;max-width:307px;background-image:url(../img/logo/logo_smaller.png)}}@media screen and (max-height:375px){.d3dlogo{height:40px;max-width:216px;background-image:url(../img/logo/logo_smallest.png)}}.leftpanel{position:absolute;width:17%;top:0;left:0;bottom:0}.btnNew{margin:5% 0 1% 5%;width:100%;max-width:180px;height:auto}.btnsPrevNext{margin:1% 7%;max-width:160px}.btnPrevious{width:40%;max-width:56px;height:auto}.btnNext{width:40%;max-width:56px;height:auto;float:right}.btnSave{margin:5% 5% 1%;width:90%;max-width:144px;height:auto}.btnOops{margin:5% 5% 1%;width:90%;max-width:144px;height:auto}.rightpanel{position:absolute;width:17%;top:0;right:0;bottom:0}.btnPrint{margin:1% 5% 5% 0;width:100%;max-width:163px;height:auto;float:right}.btnStop{margin:5% 10% 1% 5%;float:right;width:90%;max-width:98px;height:auto}.btnsSettingsInfo{position:absolute;bottom:25px;right:5px;width:80%;margin:1% 5%;max-width:160px}.btnInfo{width:40%;max-width:53px;height:auto}.btnSettings{width:40%;max-width:53px;height:auto;float:right}.progressbarAppear{right:-.5%!important}.thermometerAppear{right:-6.5%!important}.progressbarCanvasContainerParent{position:relative;width:100%}#progressbarCanvasContainer{position:relative;width:50%;float:right;border:solid #000;border-width:2px 0 2px 2px;border-radius:15px 0 0 15px;padding:5px;background-color:#fff;-webkit-box-shadow:0 2px 5px rgba(37,37,37,.35);box-shadow:0 2px 5px rgba(37,37,37,.35);-webkit-transition:right .4s cubic-bezier(0.68,-.55,.265,1.55);transition:right .4s cubic-bezier(0.68,-.55,.265,1.55);right:-60%;margin-top:5%}#progressbarCanvas{top:0;right:0;bottom:0;left:0;width:100%;height:auto;background-color:#fff}.thermometerContainerParent{position:relative;width:100%;padding-top:10px}#thermometerContainer{position:relative;width:45%;float:right;background-color:#fff;border:solid #000;border-width:2px 0 2px 2px;border-radius:15px 0 0 15px;padding:5px;-webkit-box-shadow:0 2px 5px rgba(37,37,37,.35);box-shadow:0 2px 5px rgba(37,37,37,.35);-webkit-transition:right .5s cubic-bezier(0.68,-.55,.265,1.55);transition:right .5s cubic-bezier(0.68,-.55,.265,1.55);right:-55%}#thermometerCanvas{top:0;right:0;bottom:0;left:0;width:100%;height:auto;background-color:#fff}.disabled{opacity:.3;cursor:default}#btnStop.disabled{display:none}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.clearfix{*zoom:1}#contentOverlay{background-color:rgba(255,255,255,.65);z-index:20;position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;display:none}#contentOverlay #settings{background-color:#fff;position:absolute;top:0;left:0;right:0;bottom:0;z-index:15;max-width:775px;max-height:540px;width:80%;height:75%;margin:7% 8%;-webkit-box-shadow:0 2px 6px 0 rgba(16,16,16,.65);box-shadow:0 2px 6px 0 rgba(16,16,16,.65);border:2px solid #222;border-radius:15px;padding:2%}#contentOverlay #settings .toppanel{height:10%}#contentOverlay #settings .toppanel .settingsLabelContainer{width:100%;height:auto;margin-bottom:1%}#contentOverlay #settings .toppanel .settingsLabelContainer .settingsLabelImg{width:45%;max-width:373px;height:auto}#contentOverlay #settings .bottompanel{width:100%;height:90%}#contentOverlay #settings .bottompanel>.settingsContainer{float:left;width:83%;height:98%;margin:.5%;overflow-y:scroll;overflow-x:hidden;border:1px solid #bbb;border-radius:5px}#contentOverlay #settings .bottompanel>.btnContainer{width:15%;height:100%;float:right;position:relative;right:0}#contentOverlay #settings .bottompanel>.btnContainer>.btnOK{position:absolute;bottom:3%;right:7%;max-width:85px;min-width:42px;width:88%;height:auto;margin:0 2% 2% 0;cursor:pointer}#message{position:absolute;top:0;right:0;padding:.4em .5em;border-radius:0 0 0 10px;border:2px solid #333;border-width:0 0 2px 2px;font-weight:700;-webkit-box-shadow:0 2px 6px 0 rgba(16,16,16,.65);box-shadow:0 2px 6px 0 rgba(16,16,16,.65);color:#333;white-space:nowrap;display:none}#message.error{background:#EB313C;color:#fff}#message.warning{background:#E9A86E}#message.notice{background:#93CAF4}#message.info{background:#97DD8A}@media only screen and (max-width:480px),only screen and (max-width:720px) and (min-device-pixel-ratio:1.5),only screen and (max-width:720px) and (-webkit-min-device-pixel-ratio:1.5){.centerpanel{left:0;margin-left:0;width:100%}.logopanel{height:40px}.d3dlogo{top:0;height:40px;max-width:216px;background-image:url(../img/logo/logo_smallest.png)}.drawareacontainer{height:70%}.bottompanel{height:10%}.bottompanel .manipulationBtns{margin:2px -27;right:22%;width:38%}.leftpanel{width:100px;background-color:#fff;z-index:50;-webkit-transition:left .3s ease-out;transition:left .3s ease-out}.hideleft{left:-101px}.shadowright{-webkit-box-shadow:2px 0 4px rgba(42,42,41,.6);box-shadow:2px 0 4px rgba(42,42,41,.6)}.btnNew{margin:5% 5% 1%;width:90%}.btnSave{margin-left:9%;width:75%}.btnOops{margin-left:6%;width:71%}.rightpanel{width:100px;background-color:#fff;z-index:50;-webkit-transition:right .3s ease-out;transition:right .3s ease-out}.hideright{right:-101px}.shadowleft{-webkit-box-shadow:-2px 0 4px rgba(42,42,41,.6);box-shadow:-2px 0 4px rgba(42,42,41,.6)}.btnPrint{margin:1% 5% 5%;width:90%}.btnStop{margin:5% 6% 1% 5%;width:70%}.sidebutton{display:block;position:absolute;top:40px;width:25px;height:38px;border:1px solid #808;background:url(../img/arrows.png) no-repeat;background-color:#eee;cursor:pointer}.sidebutton:active{background-color:#aaa}.leftpanel .sidebutton{right:-27px;background-position:0 0}.rightpanel .sidebutton{left:-27px;background-position:-25px 0}.sidebuttonin:active{background-color:#888}.leftpanel .sidebuttonin{background-color:#ccc;background-position:-25px 0}.rightpanel .sidebuttonin{background-color:#ccc;background-position:0 0}#contentOverlay{z-index:200}#contentOverlay #settings{width:87%;height:82%;margin:6% 4%}#contentOverlay #settings>.right{width:14%}}@media only screen and (min-width:1000px) and (max-device-pixel-ratio:1.5),only screen and (min-width:1000px) and (-webkit-max-device-pixel-ratio:1.5){}@media only screen and (orientation:portrait){#landscape{display:none}#portrait{display:block}.vertImage{margin:0;padding:0;max-width:100%;height:auto;width:auto}} \ No newline at end of file +body{background-color:#fcfcfc;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden}img{z-index:5}.btn{background-repeat:no-repeat;cursor:pointer}#landscape{position:absolute;background-color:#fff;width:100%;max-width:1024px;max-height:768px;top:0;bottom:0;left:0;right:0;z-index:5;overflow:hidden;margin:0 auto;outline:2px solid #5e8c71;-webkit-box-shadow:0 0 8px rgba(8,8,8,.25);box-shadow:0 0 8px rgba(8,8,8,.25)}#portrait{display:none}.bgContainer{position:absolute;width:100%;height:100%;overflow:hidden}.bgTop,.bgMiddle,.bgBottom{opacity:1;-webkit-transition:opacity .35s linear;transition:opacity .35s linear;position:absolute;left:0;z-index:-5}.bgTop{top:0}.bgMiddle{top:30%}.bgBottom{bottom:0}.centerpanel{position:absolute;left:50%;margin-left:-33%;width:66%;height:100%;z-index:5}.logopanel{height:25%}.d3dlogo{position:relative;top:15%;width:100%;height:100%;margin:0 auto;max-width:399px;height:139px;background:url(../img/logo/logo_full.png) no-repeat center center;cursor:pointer}#verticalShapes{position:absolute;right:0;bottom:15px;margin-right:-8.5%;width:8%}#verticalShapes>div{border:2px solid #333;border-radius:0 5px 5px 0;margin-top:4px;background-color:#fff;cursor:pointer}#verticalShapes>div img.verticalshape{width:100%;max-width:50px;height:auto;vertical-align:bottom}.drawareacontainer{position:relative;width:100%;height:65%;background-color:#fff;border:4px solid #000;border-radius:15px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;z-index:15}#canvasContainers{position:absolute;top:0;bottom:0;left:0;right:0;width:100%;height:100%;padding:0;margin:0}#mycanvasContainer{position:absolute;top:0;left:0;width:78%;height:100%}#mycanvas{width:100%;height:100%;margin:0;padding:0;border-right:2px solid #333}#previewContainer{position:absolute;top:0;right:0;width:22%;height:100%}#preview{min-width:50px;width:100%;height:100%;margin:0;padding:0}#preview_tmp{position:absolute;top:0;left:0;z-index:500;border:1px solid #f80;display:none}.bottompanel{position:relative;bottom:0;width:100%;height:10%}.manipulationBtns{margin:2px 5px;position:absolute;right:0;top:0;max-width:340px;max-height:70px;width:45%}.manipulationBtn{width:45%;height:auto;cursor:pointer}#btnsUpDown{float:left;width:45%}#btnsUpDown>div{float:left;padding-right:8px;background-repeat:no-repeat}#btnsTurnLeftRight{float:right;width:45%}#btnsTurnLeftRight>div{float:left;padding-right:8px;background-repeat:no-repeat}#btnMoveUp{max-width:65px}#btnMoveDown{max-width:64px}#btnTwistLeft{max-width:59px}#btnTwistRight{max-width:64px}@media screen and (max-height:700px){.logopanel{height:22%}.doodlecontainer{height:68%}.d3dlogo{top:25%;max-width:399px;height:74px;background-image:url(../img/logo/logo_small.png)}}@media screen and (max-height:655px){.bgMiddle{opacity:0}}@media screen and (max-height:525px){.d3dlogo{top:20%;height:57px;max-width:307px;background-image:url(../img/logo/logo_smaller.png)}}@media screen and (max-height:375px){.d3dlogo{height:40px;max-width:216px;background-image:url(../img/logo/logo_smallest.png)}}.leftpanel{position:absolute;width:17%;top:0;left:0;bottom:0}.btnNew{margin:5% 0 1% 5%;width:100%;max-width:180px;height:auto}.btnsPrevNext{margin:1% 7%;max-width:160px}.btnPrevious{width:40%;max-width:56px;height:auto}.btnNext{width:40%;max-width:56px;height:auto;float:right}.btnSave{margin:5% 5% 1%;width:90%;max-width:144px;height:auto}.btnOops{margin:5% 5% 1%;width:90%;max-width:144px;height:auto}.rightpanel{position:absolute;width:17%;top:0;right:0;bottom:0}.btnPrint{margin:1% 5% 5% 0;width:100%;max-width:163px;height:auto;float:right}.btnStop{margin:5% 10% 1% 5%;float:right;width:90%;max-width:98px;height:auto}.btnsSettingsInfo{position:absolute;bottom:25px;right:5px;width:80%;margin:1% 5%;max-width:160px}.btnInfo{width:40%;max-width:53px;height:auto}.btnSettings{width:40%;max-width:53px;height:auto;float:right}.progressbarAppear{right:-.5%!important}.thermometerAppear{right:-6.5%!important}.progressbarCanvasContainerParent{position:relative;width:100%}#progressbarCanvasContainer{position:relative;width:50%;float:right;border:solid #000;border-width:2px 0 2px 2px;border-radius:15px 0 0 15px;padding:5px;background-color:#fff;-webkit-box-shadow:0 2px 5px rgba(37,37,37,.35);box-shadow:0 2px 5px rgba(37,37,37,.35);-webkit-transition:right .4s cubic-bezier(0.68,-.55,.265,1.55);transition:right .4s cubic-bezier(0.68,-.55,.265,1.55);right:-60%;margin:5% 0}#progressbarCanvas{top:0;right:0;bottom:0;left:0;width:100%;height:auto;background-color:#fff}.thermometerContainerParent{position:relative;width:100%;padding-top:10px}#thermometerContainer{position:relative;width:45%;float:right;background-color:#fff;border:solid #000;border-width:2px 0 2px 2px;border-radius:15px 0 0 15px;padding:5px;-webkit-box-shadow:0 2px 5px rgba(37,37,37,.35);box-shadow:0 2px 5px rgba(37,37,37,.35);-webkit-transition:right .5s cubic-bezier(0.68,-.55,.265,1.55);transition:right .5s cubic-bezier(0.68,-.55,.265,1.55);right:-55%}#thermometerCanvas{top:0;right:0;bottom:0;left:0;width:100%;height:auto;background-color:#fff}.disabled{opacity:.3;cursor:default}#btnStop.disabled{display:none}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.clearfix{*zoom:1}#contentOverlay{background-color:rgba(255,255,255,.65);z-index:20;position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;display:none}#contentOverlay #settings{background-color:#fff;position:absolute;top:0;left:0;right:0;bottom:0;z-index:15;max-width:775px;max-height:540px;width:80%;height:75%;margin:7% 8%;-webkit-box-shadow:0 2px 6px 0 rgba(16,16,16,.65);box-shadow:0 2px 6px 0 rgba(16,16,16,.65);border:2px solid #222;border-radius:15px;padding:2%}#contentOverlay #settings .toppanel{height:10%}#contentOverlay #settings .toppanel .settingsLabelContainer{width:100%;height:auto;margin-bottom:1%}#contentOverlay #settings .toppanel .settingsLabelContainer .settingsLabelImg{width:45%;max-width:373px;height:auto}#contentOverlay #settings .bottompanel{width:100%;height:90%}#contentOverlay #settings .bottompanel>.settingsContainer{float:left;width:83%;height:98%;margin:.5%;overflow-y:scroll;overflow-x:hidden;border:1px solid #bbb;border-radius:5px}#contentOverlay #settings .bottompanel>.btnContainer{width:15%;height:100%;float:right;position:relative;right:0}#contentOverlay #settings .bottompanel>.btnContainer>.btnOK{position:absolute;bottom:3%;right:7%;max-width:85px;min-width:42px;width:88%;height:auto;margin:0 2% 2% 0;cursor:pointer}#message{position:absolute;top:0;right:0;padding:.4em .5em;border-radius:0 0 0 10px;border:2px solid #333;border-width:0 0 2px 2px;font-weight:700;-webkit-box-shadow:0 2px 6px 0 rgba(16,16,16,.65);box-shadow:0 2px 6px 0 rgba(16,16,16,.65);color:#333;white-space:nowrap;display:none}#message.error{background:#EB313C;color:#fff}#message.warning{background:#E9A86E}#message.notice{background:#93CAF4}#message.info{background:#97DD8A}@media only screen and (max-width:480px),only screen and (max-width:720px) and (min-device-pixel-ratio:1.5),only screen and (max-width:720px) and (-webkit-min-device-pixel-ratio:1.5){.centerpanel{left:0;margin-left:0;width:100%}.logopanel{height:40px}.d3dlogo{top:0;height:40px;max-width:216px;background-image:url(../img/logo/logo_smallest.png)}.drawareacontainer{height:70%}.bottompanel{height:10%}.bottompanel .manipulationBtns{margin:2px -27;right:22%;width:38%}.leftpanel{width:100px;background-color:#fff;z-index:50;-webkit-transition:left .3s ease-out;transition:left .3s ease-out}.hideleft{left:-101px}.shadowright{-webkit-box-shadow:2px 0 4px rgba(42,42,41,.6);box-shadow:2px 0 4px rgba(42,42,41,.6)}.btnNew{margin:5% 5% 1%;width:90%}.btnSave{margin-left:9%;width:75%}.btnOops{margin-left:6%;width:71%}.rightpanel{width:100px;background-color:#fff;z-index:50;-webkit-transition:right .3s ease-out;transition:right .3s ease-out}.hideright{right:-101px}.shadowleft{-webkit-box-shadow:-2px 0 4px rgba(42,42,41,.6);box-shadow:-2px 0 4px rgba(42,42,41,.6)}.btnPrint{margin:1% 5% 5%;width:90%}.btnStop{margin:5% 6% 1% 5%;width:70%}.sidebutton{display:block;position:absolute;top:40px;width:25px;height:38px;border:1px solid #808;background:url(../img/arrows.png) no-repeat;background-color:#eee;cursor:pointer}.sidebutton:active{background-color:#aaa}.leftpanel .sidebutton{right:-27px;background-position:0 0}.rightpanel .sidebutton{left:-27px;background-position:-25px 0}.sidebuttonin:active{background-color:#888}.leftpanel .sidebuttonin{background-color:#ccc;background-position:-25px 0}.rightpanel .sidebuttonin{background-color:#ccc;background-position:0 0}#contentOverlay{z-index:200}#contentOverlay #settings{width:87%;height:82%;margin:6% 4%}#contentOverlay #settings>.right{width:14%}}@media only screen and (min-width:1000px) and (max-device-pixel-ratio:1.5),only screen and (min-width:1000px) and (-webkit-max-device-pixel-ratio:1.5){}@media only screen and (orientation:portrait){#landscape{display:none}#portrait{display:block}.vertImage{margin:0;padding:0;max-width:100%;height:auto;width:auto}} \ No newline at end of file diff --git a/www/index.html b/www/index.html index cd0b5d3..76ca93d 100755 --- a/www/index.html +++ b/www/index.html @@ -43,12 +43,12 @@ -
+
-
+
From f0f97198ec0adda47f841778a5441f73a53fc97a Mon Sep 17 00:00:00 2001 From: Adriaan Wormgoor Date: Tue, 22 Oct 2013 12:04:46 +0200 Subject: [PATCH 04/13] Big changes to order and placement of JS files: - grunt file updated to include automatic production of doodle3d-client.js and doodle3d-client.min.js - all individual JS files moved to outside scope of 'www' dir to reflect these changes --- Gruntfile.js | 57 +- {www/js => js_src}/Message.js | 0 {www/js => js_src}/Printer.js | 0 {www/js => js_src}/Progressbar.js | 0 {www/js => js_src}/SettingsWindow.js | 0 {www/js => js_src}/Thermometer.js | 0 {www/js => js_src}/UpdatePanel.js | 0 {www/js => js_src}/buttonbehaviors.js | 0 {www/js => js_src}/canvasDrawing.js | 0 {www/js => js_src}/d3dServerInterfacing.js | 0 {www/js => js_src}/gcodeGenerating.js | 0 js_src/init_layout.js | 62 + {www/js => js_src}/main.js | 6 +- {www/js => js_src}/previewRendering.js | 0 {www/js => js_src}/sidebar.js | 0 {www/js => js_src}/utils.js | 0 {www/js => js_src}/verticalShapes.js | 0 package.json | 2 +- www/index.html | 34 +- www/js/doodle3d-client.js | 3392 ++++++++++++++++++++ www/js/doodle3d-client.min.js | 2 + www/js/init_layout.js | 140 - 22 files changed, 3510 insertions(+), 185 deletions(-) rename {www/js => js_src}/Message.js (100%) rename {www/js => js_src}/Printer.js (100%) rename {www/js => js_src}/Progressbar.js (100%) rename {www/js => js_src}/SettingsWindow.js (100%) rename {www/js => js_src}/Thermometer.js (100%) rename {www/js => js_src}/UpdatePanel.js (100%) rename {www/js => js_src}/buttonbehaviors.js (100%) rename {www/js => js_src}/canvasDrawing.js (100%) rename {www/js => js_src}/d3dServerInterfacing.js (100%) rename {www/js => js_src}/gcodeGenerating.js (100%) create mode 100644 js_src/init_layout.js rename {www/js => js_src}/main.js (99%) rename {www/js => js_src}/previewRendering.js (100%) rename {www/js => js_src}/sidebar.js (100%) rename {www/js => js_src}/utils.js (100%) rename {www/js => js_src}/verticalShapes.js (100%) create mode 100644 www/js/doodle3d-client.js create mode 100644 www/js/doodle3d-client.min.js delete mode 100644 www/js/init_layout.js diff --git a/Gruntfile.js b/Gruntfile.js index 41b4be6..110852f 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -16,21 +16,22 @@ module.exports = function(grunt) { }, dist: { src: [ - 'www/js/SettingsWindow.js', - 'www/js/d3dServerInterfacing.js', - 'www/js/verticalShapes.js', - 'www/js/buttonbehaviors.js', - 'www/js/canvasDrawing.js', - 'www/js/previewRendering.js', - 'www/js/gcodeGenerating.js', - 'www/js/init_layout.js', - 'www/js/Printer.js', - 'www/js/Progressbar.js', - 'www/js/Thermometer.js', - 'www/js/utils.js', - 'www/js/sidebar.js', - 'www/js/message.js', - 'www/js/main.js' + 'js_src/SettingsWindow.js', + 'js_src/UpdatePanel.js', + 'js_src/d3dServerInterfacing.js', + 'js_src/verticalShapes.js', + 'js_src/buttonbehaviors.js', + 'js_src/canvasDrawing.js', + 'js_src/previewRendering.js', + 'js_src/gcodeGenerating.js', + 'js_src/init_layout.js', + 'js_src/Printer.js', + 'js_src/Progressbar.js', + 'js_src/Thermometer.js', + 'js_src/utils.js', + 'js_src/sidebar.js', + 'js_src/Message.js', + 'js_src/main.js' ], dest: 'www/js/<%= pkg.name %>.js' } @@ -38,15 +39,21 @@ module.exports = function(grunt) { uglify: { options: { // banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n', - mangle: false, + mangle: true, beautify: false, compress: {}, report: 'min', preserveComments: 'false' }, build: { - src: ['www/js/*.js', '!www/js/<%= pkg.name %>.min.js'], - dest: 'www/js/<%= pkg.name %>.min.js' + files: { +// 'www/js/<%= pkg.name %>.min.js' : ['www/js/*.js', '!www/js/<%= pkg.name %>.min.js', '!www/js/<%= pkg.name %>.js'] + 'www/js/<%= pkg.name %>.min.js' : ['www/js/<%= pkg.name %>.js'] + } +// src: 'www/js/*.js', +// dest: 'www/js/min/blabla.js' +// src: ['www/js/*.js', '!www/js/<%= pkg.name %>.min.js'], +// dest: 'www/js/<%= pkg.name %>.min.js' } }, jshint: { @@ -85,11 +92,11 @@ module.exports = function(grunt) { } }, watch: { -// javascript: { -// files: ["www/js/*", '!www/js/*.min.js'], -// // tasks: ["less", "css_prefix"] -// tasks: ["uglify"] -// }, + javascript: { + files: ["js_src/*", '!www/js/<%= pkg.name %>.min.js', '!www/js/<%= pkg.name %>.js'], + tasks: ["concat", "uglify"] +// tasks: ["jshint", "concat", "uglify"] + }, styles: { files: ["less/*"], tasks: ["less", "autoprefixer", "cssmin"] @@ -133,8 +140,8 @@ module.exports = function(grunt) { 'less', 'autoprefixer', 'cssmin', -// 'concat', -// 'uglify', + 'concat', + 'uglify', // 'jshint', 'watch' ]); diff --git a/www/js/Message.js b/js_src/Message.js similarity index 100% rename from www/js/Message.js rename to js_src/Message.js diff --git a/www/js/Printer.js b/js_src/Printer.js similarity index 100% rename from www/js/Printer.js rename to js_src/Printer.js diff --git a/www/js/Progressbar.js b/js_src/Progressbar.js similarity index 100% rename from www/js/Progressbar.js rename to js_src/Progressbar.js diff --git a/www/js/SettingsWindow.js b/js_src/SettingsWindow.js similarity index 100% rename from www/js/SettingsWindow.js rename to js_src/SettingsWindow.js diff --git a/www/js/Thermometer.js b/js_src/Thermometer.js similarity index 100% rename from www/js/Thermometer.js rename to js_src/Thermometer.js diff --git a/www/js/UpdatePanel.js b/js_src/UpdatePanel.js similarity index 100% rename from www/js/UpdatePanel.js rename to js_src/UpdatePanel.js diff --git a/www/js/buttonbehaviors.js b/js_src/buttonbehaviors.js similarity index 100% rename from www/js/buttonbehaviors.js rename to js_src/buttonbehaviors.js diff --git a/www/js/canvasDrawing.js b/js_src/canvasDrawing.js similarity index 100% rename from www/js/canvasDrawing.js rename to js_src/canvasDrawing.js diff --git a/www/js/d3dServerInterfacing.js b/js_src/d3dServerInterfacing.js similarity index 100% rename from www/js/d3dServerInterfacing.js rename to js_src/d3dServerInterfacing.js diff --git a/www/js/gcodeGenerating.js b/js_src/gcodeGenerating.js similarity index 100% rename from www/js/gcodeGenerating.js rename to js_src/gcodeGenerating.js diff --git a/js_src/init_layout.js b/js_src/init_layout.js new file mode 100644 index 0000000..4191375 --- /dev/null +++ b/js_src/init_layout.js @@ -0,0 +1,62 @@ +// TODO refactor this stuff, there's much to wipe +var drawAreaContainerMinHeight = 300; +var drawAreaContainerMaxHeight = 450; + +function doOnResize() { + // console.log("doOnResize() >> " + new Date().getTime()); + canvas.width = $canvas.width(); + canvas.height = $canvas.height(); // canvas.clientHeight; + + preview.width = $preview.width(); + preview.height = $drawAreaContainer.height(); + + canvasWidth = canvas.width; + canvasHeight = canvas.height; + + console.log(" preview.width: " + preview.width + ", $preview.width(): " + $preview.width()); + + calcPreviewCanvasProperties(); + + drawCanvasTopLeftCoords[0] = drawCanvas.offset().left; + drawCanvasTopLeftCoords[1] = drawCanvas.offset().top; + + redrawDoodle(); + redrawPreview(); + +} + +function initLayouting() { + console.log("f:initLayouting()"); + + $drawAreaContainer = $(".drawareacontainer"); + + canvas.width = $canvas.width(); + canvas.height = $canvas.height(); // canvas.clientHeight; + + preview.width = $preview.width(); + preview.height = $drawAreaContainer.height(); + + canvasWidth = canvas.width; + canvasHeight = canvas.height; + + $drawAreaContainer.show(); + + // window.innerHeight + console.log("window.innerHeight: " + window.innerHeight); + console.log("window.innerWidth: " + window.innerWidth); + console.log("$drawAreaContainer.innerHeight(): " + $drawAreaContainer.innerHeight()); + console.log("$drawAreaContainer.offset().top: " + $drawAreaContainer.offset().top); + + // timeout because it SEEMS to be beneficial for initting the layout + // 2013-09-18 seems beneficial since when? + setTimeout(_startOrientationAndChangeEventListening, 1000); +} + +function _startOrientationAndChangeEventListening() { + // Initial execution if needed + + $(window).on('resize', doOnResize); + + // is it necessary to call these? Aren't they called by the above eventhandlers? + doOnResize(); +} diff --git a/www/js/main.js b/js_src/main.js similarity index 99% rename from www/js/main.js rename to js_src/main.js index fc7ad01..3717a01 100644 --- a/www/js/main.js +++ b/js_src/main.js @@ -17,6 +17,9 @@ var wifiboxCGIBinURL; // CGI-bin, for some network stuff, where it needs to rest var $drawAreaContainer, $doodleCanvas, doodleCanvas, doodleCanvasContext, $previewContainer; +var showhideInterval; +var showOrHide = false; + $(function() { console.log("ready"); @@ -103,9 +106,6 @@ $(function() { } }); -var showhideInterval; -var showOrHide = false; - function showOrHideThermo() { console.log("f:showOrHideThermo()"); if (showOrHide) { diff --git a/www/js/previewRendering.js b/js_src/previewRendering.js similarity index 100% rename from www/js/previewRendering.js rename to js_src/previewRendering.js diff --git a/www/js/sidebar.js b/js_src/sidebar.js similarity index 100% rename from www/js/sidebar.js rename to js_src/sidebar.js diff --git a/www/js/utils.js b/js_src/utils.js similarity index 100% rename from www/js/utils.js rename to js_src/utils.js diff --git a/www/js/verticalShapes.js b/js_src/verticalShapes.js similarity index 100% rename from www/js/verticalShapes.js rename to js_src/verticalShapes.js diff --git a/package.json b/package.json index a0f7f1b..b224a64 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "doodle3dclient", + "name": "doodle3d-client", "version": "0.9.0", "description": "Doodle3D client app", "repository": { diff --git a/www/index.html b/www/index.html index 1b79cea..021e822 100755 --- a/www/index.html +++ b/www/index.html @@ -130,22 +130,24 @@
- - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/www/js/doodle3d-client.js b/www/js/doodle3d-client.js new file mode 100644 index 0000000..d36ffa0 --- /dev/null +++ b/www/js/doodle3d-client.js @@ -0,0 +1,3392 @@ +//these settings are defined in the firmware (conf_defaults.lua) and will be initialized in loadSettings() +var settings = { +"network.ap.ssid": "d3d-ap-%%MAC_ADDR_TAIL%%", +"network.ap.address": "192.168.10.1", +"network.ap.netmask": "255.255.255.0", +"printer.temperature": 220, +"printer.maxObjectHeight": 150, +"printer.layerHeight": 0.2, +"printer.wallThickness": 0.7, +"printer.screenToMillimeterScale": 0.3, +"printer.speed": 50, +"printer.travelSpeed": 200, +"printer.filamentThickness": 2.85, +"printer.enableTraveling": true, +"printer.useSubLayers": true, +"printer.firstLayerSlow": true, +"printer.autoWarmUp": true, +"printer.simplify.iterations": 10, +"printer.simplify.minNumPoints": 15, +"printer.simplify.minDistance": 3, +"printer.retraction.enabled": true, +"printer.retraction.speed": 50, +"printer.retraction.minDistance": 1, +"printer.retraction.amount": 5, +"printer.autoWarmUpCommand": "M104 S220 (hardcoded temperature)" +} + + +function SettingsWindow() { + this.wifiboxURL; + this.wifiboxCGIBinURL + this.window; + this.form; + this.timeoutTime = 3000; + this.retryDelay = 2000; // retry setTimout delay + this.retryRetrieveNetworkStatusDelayTime = 1000;// retry setTimout delay + + this.retryLoadSettingsDelay; // retry setTimout instance + this.retrySaveSettingsDelay; // retry setTimout instance + this.retryRetrieveNetworkStatusDelay;// retry setTimout instance + + + this.apFieldSet; + this.clientFieldSet; + this.networks; + this.currentNetwork; // the ssid of the network the box is on + this.selectedNetwork; // the ssid of the selected network in the client mode settings + this.currentLocalIP = ""; + this.clientModeState = SettingsWindow.NOT_CONNECTED; + this.currentAP; + this.apModeState = SettingsWindow.NO_AP; + + // after switching wifi network or creating a access point we delay the status retrieval + // because the webserver needs time to switch + this.retrieveNetworkStatusDelay; // setTimout delay + this.retrieveNetworkStatusDelayTime = 1000; + + // Events + SettingsWindow.SETTINGS_LOADED = "settingsLoaded"; + + // network client mode states + SettingsWindow.NOT_CONNECTED = "not connected"; // also used as first item in networks list + SettingsWindow.CONNECTED = "connected"; + SettingsWindow.CONNECTING = "connecting"; + SettingsWindow.CONNECTING_FAILED = "connecting failed" + + // network access point mode states + SettingsWindow.NO_AP = "no ap"; + SettingsWindow.AP = "ap"; + SettingsWindow.CREATING_AP = "creating ap"; + + SettingsWindow.API_CONNECTING_FAILED = -1 + SettingsWindow.API_NOT_CONNECTED = 0 + SettingsWindow.API_CONNECTING = 1 + SettingsWindow.API_CONNECTED = 2 + SettingsWindow.API_CREATING = 3 + SettingsWindow.API_CREATED = 4 + + // network mode + SettingsWindow.NETWORK_MODE_NEITHER = "neither"; + SettingsWindow.NETWORK_MODE_CLIENT = "clientMode"; + SettingsWindow.NETWORK_MODE_ACCESS_POINT = "accessPointMode"; + + this.networkMode = SettingsWindow.NETWORK_MODE_NEITHER; + + this.updatePanel = new UpdatePanel(); + + var self = this; + + this.init = function(wifiboxURL,wifiboxCGIBinURL) { + this.wifiboxURL = wifiboxURL; + this.wifiboxCGIBinURL = wifiboxCGIBinURL; + + this.window = $("#settings"); + this.window.find(".btnOK").click(this.submitwindow); + this.window.find(".settingsContainer").load("settings.html", function() { + console.log("Settings:finished loading settings.html, now loading settings..."); + + self.form = self.window.find("form"); + self.form.submit(function (e) { self.submitwindow(e) }); + + self.loadSettings(); + + var btnAP = self.form.find("label[for='ap']"); + var btnClient = self.form.find("label[for='client']"); + var btnRefresh = self.form.find("#refreshNetworks"); + var btnConnect = self.form.find("#connectToNetwork"); + var btnCreate = self.form.find("#createAP"); + var networkSelector = self.form.find("#network"); + self.apFieldSet = self.form.find("#apSettings"); + self.clientFieldSet = self.form.find("#clientSettings"); + + btnAP.on('touchstart mousedown',self.showAPSettings); + btnClient.on('touchstart mousedown',self.showClientSettings); + btnRefresh.on('touchstart mousedown',self.refreshNetworks); + btnConnect.on('touchstart mousedown',self.connectToNetwork); + btnCreate.on('touchstart mousedown',self.createAP); + networkSelector.change(self.networkSelectorChanged); + + // update panel + var $updatePanelElement = self.form.find("#updatePanel"); + self.updatePanel.init(wifiboxURL,$updatePanelElement); + }); + } + this.submitwindow = function(e) { + e.preventDefault(); + e.stopPropagation(); + self.saveSettings(self.readForm(),function(){ + self.hideSettings(); + }); + + clearTimeout(self.retryRetrieveNetworkStatusDelay); + } + + this.showSettings = function() { + console.log("f:showSettings()"); + + this.loadSettings(); // reload settings +// this.window.css("display","table"); + $("#contentOverlay").fadeIn(375, function() { + document.body.removeEventListener('touchmove',prevent,false); + }); + } + this.hideSettings = function() { + $("#contentOverlay").fadeOut(375, function() { + document.body.addEventListener('touchmove',prevent,false); +// self.window.css("display","none"); + }); + } + + this.loadSettings = function() { + if (!communicateWithWifibox) { + console.log(" communicateWithWifibox is false: settings aren't being loaded from wifibox...") + return; + } + console.log("Settings:loadSettings() >> getting new data..."); + + $.ajax({ + url: this.wifiboxURL + "/config/all", + dataType: 'json', + timeout: this.timeoutTime, + success: function(response){ + console.log("Settings:loadSettings response: ",response); + settings = response.data; + console.log(" settings: ",settings); + self.fillForm(); + $(document).trigger(SettingsWindow.SETTINGS_LOADED); + } + }).fail(function() { + console.log("Settings:loadSettings: failed"); + clearTimeout(self.retryLoadSettingsDelay); + self.retryLoadSettingsDelay = setTimeout(function() { self.loadSettings() },self.retryDelay); // retry after delay + }); + + this.refreshNetworks(); + this.retrieveNetworkStatus(false); + } + this.fillForm = function() { + console.log("SettingsWindow:fillForm"); + + //fill form with loaded settings + var selects = this.form.find("select"); + selects.each( function(index,element) { + var element = $(element); + element.val(settings[element.attr('name')]); + }); + var inputs = this.form.find("input"); + inputs.each( function(index,element) { + var element = $(element); + //console.log("printer setting input: ",index,element.attr("type"),element.attr('name')); //,element); + switch(element.attr("type")) { + case "text": + case "number": + element.val(settings[element.attr('name')]); + break; + case "checkbox": + element.prop('checked', settings[element.attr('name')]); + break; + } + }); + var textareas = this.form.find("textarea"); + textareas.each( function(index,element) { + var element = $(element); + var value = settings[element.attr('name')]; + element.val(value); + }); + } + + this.saveSettings = function(newSettings,complete) { + settings = newSettings; // store new settings in global settings + if (communicateWithWifibox) { + $.ajax({ + url: this.wifiboxURL + "/config", + type: "POST", + data: newSettings, + dataType: 'json', + timeout: this.timeoutTime, + success: function(response){ + console.log("Settings:saveSettings response: ",response); + if(response.status == "error") { + clearTimeout(self.retrySaveSettingsDelay); + self.retrySaveSettingsDelay = setTimeout(function() { self.saveSettings(settings) },self.retryDelay); // retry after delay + } else { + var data = response.data; + var validation = data.validation; + self.clearValidationErrors(); + var validated = true; + $.each(validation, function(key, val) { + if (val != "ok") { + console.log("ERROR: setting '" + key + "' not successfully set. Message: " + val); + self.displayValidationError(key,val); + validated = false; + } + }); + settings.substituted_ssid = data.substituted_ssid; + if(complete && validated) complete(); + } + } + }).fail(function() { + console.log("Settings:saveSettings: failed"); + clearTimeout(self.retrySaveSettingsDelay); + self.retrySaveSettingsDelay = setTimeout(function() { self.saveSettings(settings) },self.retryDelay); // retry after delay + }); + } + } + this.displayValidationError = function(key,msg) { + var formElement = self.form.find("[name|='"+key+"']"); + console.log("formElement: ",formElement); + formElement.addClass("error"); + var errorMsg = "

"+msg+"

" + formElement.after(errorMsg); + } + this.clearValidationErrors = function() { + var formElements = self.form.find(".error"); + formElements.each( function(index,element) { + $(element).removeClass("error"); + }); + } + + this.readForm = function() { + //console.log("SettingsWindow:readForm"); + var settings = {}; + var selects = self.form.find("select"); + selects.each( function(index,element) { + var element = $(element); + if(element.attr('name') != "network.client.network") { + settings[element.attr('name')] = element.val(); + } + }); + + var inputs = self.form.find("input"); + inputs.each( function(index,element) { + var element = $(element); + switch(element.attr("type")) { + case "text": + case "number": + settings[element.attr('name')] = element.val(); + break; + case "checkbox": + settings[element.attr('name')] = element.prop('checked') + break; + } + }); + + var textareas = self.form.find("textarea"); + textareas.each( function(index,element) { + var element = $(element); + settings[element.attr('name')] = element.val(); + }); + //console.log(settings); + return settings; + } + + /* + * Networks ui + */ + this.showAPSettings = function() { + self.apFieldSet.show(); + self.clientFieldSet.hide(); + } + this.showClientSettings = function() { + self.clientFieldSet.show(); + self.apFieldSet.hide(); + } + this.refreshNetworks = function() { + console.log("Settings:refreshNetworks"); + + if (communicateWithWifibox) { + $.ajax({ + url: self.wifiboxURL + "/network/scan", + type: "GET", + dataType: 'json', + timeout: self.timeoutTime, + success: function(response){ + console.log("Settings:refreshNetworks response: ",response); + if(response.status == "error") { + //clearTimeout(self.retrySaveSettingsDelay); + //self.retrySaveSettingsDelay = setTimeout(function() { self.saveSettings() },self.retryDelay); // retry after delay + } else { + var networks = response.data.networks + self.networks = {}; + var foundCurrentNetwork = false; + var networkSelector = self.form.find("#network"); + networkSelector.empty(); + networkSelector.append( + $("").val(SettingsWindow.NOT_CONNECTED).html("not connected") + ); + $.each(networks, function(index,element) { + if(element.ssid == self.currentNetwork) { + foundCurrentNetwork = true; + } + networkSelector.append( + $("").val(element.ssid).html(element.ssid) + ); + self.networks[element.ssid] = element; + }); + if(foundCurrentNetwork) { + networkSelector.val(self.currentNetwork); + self.selectNetwork(self.currentNetwork); + } + } + } + }).fail(function() { + + }); + } + } + + this.retrieveNetworkStatus = function(connecting) { + //console.log("Settings:retrieveNetworkStatus"); + if (communicateWithWifibox) { + $.ajax({ + url: self.wifiboxURL + "/network/status", + type: "GET", + dataType: 'json', + timeout: self.timeoutTime, + success: function(response){ + console.log("Settings:retrieveNetworkStatus response: ",response); + if(response.status == "error") { + + } else { + var data = response.data; + + if(typeof data.status === 'string') { + data.status = parseInt(data.status); + } + //console.log(" data.status: ",data.status,data.statusMessage); + + // Determine which network settings to show + switch(data.status) { + case SettingsWindow.API_NOT_CONNECTED: + //console.log(" not connected & not a access point"); + self.apFieldSet.show(); + self.clientFieldSet.show(); + + self.networkMode = SettingsWindow.NETWORK_MODE_NEITHER; + break; + case SettingsWindow.API_CONNECTING_FAILED: + case SettingsWindow.API_CONNECTING: + case SettingsWindow.API_CONNECTED: + //console.log(" client mode"); + self.form.find("#client").prop('checked',true); + + self.apFieldSet.hide(); + self.clientFieldSet.show(); + + if(data.status == SettingsWindow.API_CONNECTED) { + var networkSelector = self.form.find("#network"); + networkSelector.val(data.ssid); + + self.currentNetwork = data.ssid; + self.currentLocalIP = data.localip; + self.selectNetwork(data.ssid); + } else { + self.currentLocalIP = "" + } + self.networkMode = SettingsWindow.NETWORK_MODE_CLIENT; + break; + case SettingsWindow.API_CREATING: + case SettingsWindow.API_CREATED: + //console.log(" access point mode"); + self.form.find("#ap").prop('checked',true); + + self.apFieldSet.show(); + self.clientFieldSet.hide(); + + self.currentNetwork = undefined; + self.selectNetwork(SettingsWindow.NOT_CONNECTED); + var networkSelector = self.form.find("#network"); + networkSelector.val(SettingsWindow.NOT_CONNECTED); + + if(data.ssid && data.status == SettingsWindow.API_CREATED) { + self.currentAP = data.ssid; + } + self.networkMode = SettingsWindow.NETWORK_MODE_ACCESS_POINT; + break; + } + self.updatePanel.setNetworkMode(self.networkMode); + + // update status message + switch(data.status) { + case SettingsWindow.API_CONNECTING_FAILED: + self.setClientModeState(SettingsWindow.CONNECTING_FAILED,data.statusMessage); + self.setAPModeState(SettingsWindow.NO_AP,""); + break; + case SettingsWindow.API_NOT_CONNECTED: + self.setClientModeState(SettingsWindow.NOT_CONNECTED,""); + self.setAPModeState(SettingsWindow.NO_AP,""); + break; + case SettingsWindow.API_CONNECTING: + self.setClientModeState(SettingsWindow.CONNECTING,""); + self.setAPModeState(SettingsWindow.NO_AP,""); + break; + case SettingsWindow.API_CONNECTED: + self.setClientModeState(SettingsWindow.CONNECTED,""); + self.setAPModeState(SettingsWindow.NO_AP,""); + break; + case SettingsWindow.API_CREATING: + self.setClientModeState(SettingsWindow.NOT_CONNECTED,""); + self.setAPModeState(SettingsWindow.CREATING_AP,""); + break; + case SettingsWindow.API_CREATED: + self.setClientModeState(SettingsWindow.NOT_CONNECTED,""); + self.setAPModeState(SettingsWindow.AP,""); + break; + } + + // Keep checking for updates? + if(connecting) { + switch(data.status) { + case SettingsWindow.API_CONNECTING: + case SettingsWindow.API_CREATING: + clearTimeout(self.retryRetrieveNetworkStatusDelay); + self.retryRetrieveNetworkStatusDelay = setTimeout(function() { self.retrieveNetworkStatus(connecting) },self.retryRetrieveNetworkStatusDelayTime); // retry after delay + break; + } + } + } + } + }).fail(function() { + console.log("Settings:retrieveNetworkStatus: failed"); + clearTimeout(self.retryRetrieveNetworkStatusDelay); + self.retryRetrieveNetworkStatusDelay = setTimeout(function() { self.retrieveNetworkStatus(connecting) },self.retryDelay); // retry after delay + }); + } + } + + this.networkSelectorChanged = function(e) { + var selectedOption = $(this).find("option:selected"); + self.selectNetwork(selectedOption.val()); + } + + this.selectNetwork = function(ssid) { + console.log("select network: ",ssid); + if(ssid == "") return; + console.log(" checked"); + this.selectedNetwork = ssid; + if(this.networks == undefined || ssid == SettingsWindow.NOT_CONNECTED) { + this.hideWiFiPassword(); + } else { + var network = this.networks[ssid]; + if(network.encryption == "none") { + this.hideWiFiPassword(); + } else { + this.showWiFiPassword(); + } + this.form.find("#password").val(""); + } + } + this.showWiFiPassword = function() { + this.form.find("#passwordLabel").show(); + this.form.find("#password").show(); + } + this.hideWiFiPassword = function() { + this.form.find("#passwordLabel").hide(); + this.form.find("#password").hide(); + } + + this.setClientModeState = function(state,msg) { + var field = this.form.find("#clientModeState"); + var btnConnect = self.form.find("#connectToNetwork"); + switch(state) { + case SettingsWindow.NOT_CONNECTED: + btnConnect.removeAttr("disabled"); + field.html("Not connected"); + break; + case SettingsWindow.CONNECTED: + btnConnect.removeAttr("disabled"); + + var fieldText = "Connected to: "+this.currentNetwork+"."; + if(this.currentLocalIP != undefined && this.currentLocalIP != "") { + var a = ""+this.currentLocalIP+""; + fieldText += " (IP: "+a+")"; + } + field.html(fieldText); + break; + case SettingsWindow.CONNECTING: + btnConnect.attr("disabled", true); + field.html("Connecting... Reconnect by connecting your device to "+this.selectedNetwork+" and going to connect.doodle3d.com"); + break; + case SettingsWindow.CONNECTING_FAILED: + btnConnect.removeAttr("disabled"); + field.html(msg); + break; + } + this.clientModeState = state; + } + this.setAPModeState = function(state,msg) { + var field = this.form.find("#apModeState"); + var btnCreate = this.form.find("#createAP"); + switch(state) { + case SettingsWindow.NO_AP: + btnCreate.removeAttr("disabled"); + field.html("Not currently a access point"); + break; + case SettingsWindow.AP: + btnCreate.removeAttr("disabled"); + field.html("Is access point: "+this.currentAP+""); + break; + case SettingsWindow.CREATING_AP: + btnCreate.attr("disabled", true); + field.html("Creating access point... Reconnect by connecting your device to "+settings.substituted_ssid+" and going to draw.doodle3d.com"); + break; + } + this.apModeState = state; + } + + this.connectToNetwork = function() { + console.log("connectToNetwork"); + if(self.selectedNetwork == undefined) return; + var postData = { + ssid:self.selectedNetwork, + phrase:self.form.find("#password").val(), + recreate:true + } + console.log(" postData: ",postData); + if (communicateWithWifibox) { + + // save network related settings and on complete, connect to network + self.saveSettings(self.readForm(),function() { + + $.ajax({ + url: self.wifiboxCGIBinURL + "/network/associate", + type: "POST", + data: postData, + dataType: 'json', + timeout: self.timeoutTime, + success: function(response){ + console.log("Settings:connectToNetwork response: ",response); + } + }).fail(function() { + console.log("Settings:connectToNetwork: timeout (normal behavior)"); + //clearTimeout(self.retrySaveSettingsDelay); + //self.retrySaveSettingsDelay = setTimeout(function() { self.saveSettings() },self.retryDelay); // retry after delay + }); + }); + } + self.setClientModeState(SettingsWindow.CONNECTING,""); + + // after switching wifi network or creating a access point we delay the status retrieval + // because the webserver needs time to switch + clearTimeout(self.retrieveNetworkStatusDelay); + self.retrieveNetworkStatusDelay = setTimeout(function() { self.retrieveNetworkStatus(true) },self.retrieveNetworkStatusDelayTime); + } + + this.createAP = function() { + console.log("createAP"); + if (communicateWithWifibox) { + + // save network related settings and on complete, create access point + self.saveSettings(self.readForm(),function() { + self.setAPModeState(SettingsWindow.CREATING_AP); // get latest substituted ssid + $.ajax({ + url: self.wifiboxCGIBinURL + "/network/openap", + type: "POST", + dataType: 'json', + timeout: self.timeoutTime, + success: function(response){ + console.log("Settings:createAP response: ",response); + } + }).fail(function() { + console.log("Settings:createAP: timeout (normal behavior)"); + //clearTimeout(self.retrySaveSettingsDelay); + //self.retrySaveSettingsDelay = setTimeout(function() { self.saveSettings() },self.retryDelay); // retry after delay + }); + + self.setAPModeState(SettingsWindow.CREATING_AP,""); + + // after switching wifi network or creating a access point we delay the status retrieval + // because the webserver needs time to switch + clearTimeout(self.retrieveNetworkStatusDelay); + self.retrieveNetworkStatusDelay = setTimeout(function() { self.retrieveNetworkStatus(true) },self.retrieveNetworkStatusDelayTime); + }); + } + } +} + +/************************* + * + * + * FROM DOODLE3D.INI + * + */ +//TODO: find all references to these variables, replace them and finally remove these. +var objectHeight = 20; +var layerHeight = .2; +//var wallThickness = .5; +//var hop = 0; +//var speed = 70; +//var travelSpeed = 200; +var enableTraveling = true; +//var filamentThickness = 2.89; +var minScale = .3; +var maxScale = 1; +var shape = "%"; +var twists = 0; +//var useSubLayers = true; +//var debug = false; // debug moved to main.js +var loglevel = 2; +//var zOffset = 0; +var serverport = 8888; +var autoLoadImage = "hand.txt"; +var loadOffset = [0, 0]; // x en y ? +var showWarmUp = true; +var loopAlways = false; +var firstLayerSlow = true; +var useSubpathColors = false; +var autoWarmUp = true; +//var maxObjectHeight = 150; +var maxScaleDifference = .1; +var frameRate = 60; +var quitOnEscape = true; +var screenToMillimeterScale = .3; // 0.3 +//var targetTemperature = 220; +//var simplifyiterations = 10; +//var simplifyminNumPoints = 15; +//var simplifyminDistance = 3; +//var retractionspeed = 50; +//var retractionminDistance = 5; +//var retractionamount = 3; +var sideis3D = true; +var sidevisible = true; +var sidebounds = [900, 210, 131, 390]; +var sideborder = [880, 169, 2, 471]; +var windowbounds = [0, 0, 800, 500]; +var windowcenter = true; +var windowfullscreen = false; +var autoWarmUpCommand = "M104 S230"; +//var checkTemperatureInterval = 3; +var autoWarmUpDelay = 3; + +function UpdatePanel() { + this.wifiboxURL; + this.element; + + this.statusCheckInterval = 1000; + this.statusCheckDelayer; // setTimout instance + this.installedDelay = 60*1000; // Since we can't retrieve status during installation we show the installed text after a fixed delay + this.installedDelayer; // setTimout instance + this.retryDelay = 1000; + this.retryDelayer; // setTimout instance + //this.timeoutTime = 3000; + + this.canUpdate = false; + this.currentVersion = ""; + this.newestVersion; + this.progress; + this.imageSize; + + // states from api, see Doodle3D firmware src/script/d3d-updater.lua + UpdatePanel.NONE = 1; // default state + UpdatePanel.DOWNLOADING = 2; + UpdatePanel.DOWNLOAD_FAILED = 3; + UpdatePanel.IMAGE_READY = 4; // download successfull and checked + UpdatePanel.INSTALLING = 5; + UpdatePanel.INSTALLED = 6; + UpdatePanel.INSTALL_FAILED = 7; + + this.state; // update state from api + this.stateText = ""; // update state text from api + + this.networkMode; // network modes from SettingsWindow + + var self = this; + + this.init = function(wifiboxURL,updatePanelElement) { + + this.wifiboxURL = wifiboxURL; + + this.element = updatePanelElement; + this.btnUpdate = this.element.find("#update"); + this.statusDisplay = this.element.find("#updateState"); + this.infoDisplay = this.element.find("#updateInfo"); + + this.btnUpdate.click(this.update); + + this.checkStatus(false); + } + + this.update = function() { + console.log("UpdatePanel:update"); + self.downloadUpdate(); + } + this.downloadUpdate = function() { + console.log("UpdatePanel:downloadUpdate"); + $.ajax({ + url: self.wifiboxURL + "/update/download", + type: "POST", + dataType: 'json', + success: function(response){ + console.log("UpdatePanel:downloadUpdate response: ",response); + } + }).fail(function() { + console.log("UpdatePanel:downloadUpdate: failed"); + }); + self.setState(UpdatePanel.DOWNLOADING); + self.startCheckingStatus(); + } + this.installUpdate = function() { + console.log("UpdatePanel:installUpdate"); + self.stopCheckingStatus(); + $.ajax({ + url: self.wifiboxURL + "/update/install", + type: "POST", + dataType: 'json', + success: function(response){ + console.log("UpdatePanel:installUpdate response: ",response); + } + }).fail(function() { + console.log("UpdatePanel:installUpdate: no respons (there shouldn't be)"); + }); + self.setState(UpdatePanel.INSTALLING); + + clearTimeout(self.installedDelayer); + self.installedDelayer = setTimeout(function() { self.setState(UpdatePanel.INSTALLED) },self.installedDelay); + } + + this.startCheckingStatus = function() { + clearTimeout(self.statusCheckDelayer); + clearTimeout(self.retryDelayer); + self.statusCheckDelayer = setTimeout(function() { self.checkStatus(true) },self.statusCheckInterval); + } + this.stopCheckingStatus = function() { + clearTimeout(self.statusCheckDelayer); + clearTimeout(self.retryDelayer); + } + this.checkStatus = function(keepChecking) { + if (!communicateWithWifibox) return; + $.ajax({ + url: self.wifiboxURL + "/update/status", + type: "GET", + dataType: 'json', + //timeout: self.timeoutTime, + success: function(response){ + console.log("UpdatePanel:checkStatus response: ",response); + + // Keep checking ? + if(keepChecking) { + switch(self.state){ + case UpdatePanel.DOWNLOADING: + case UpdatePanel.INSTALLING: + clearTimeout(self.statusCheckDelayer); + self.statusCheckDelayer = setTimeout(function() { self.checkStatus(keepChecking) },self.statusCheckInterval); + break; + } + } + + if(response.status != "error") { + var data = response.data; + self.handleStatusData(data); + } + } + }).fail(function() { + //console.log("UpdatePanel:checkStatus: failed"); + if(keepChecking) { + clearTimeout(self.retryDelayer); + self.retryDelayer = setTimeout(function() { self.checkStatus(keepChecking) },self.retryDelay); // retry after delay + } + }); + } + + this.handleStatusData = function(data) { + //console.log("UpdatePanel:handleStatusData"); + self.canUpdate = data.can_update; + + if(self.currentVersion != data.current_version || self.newestVersion != data.newest_version) { + self.currentVersion = data.current_version; + self.newestVersion = data.newest_version; + self.updateInfoDisplay(); + } + + self.stateText = data.state_text; + self.progress = data.progress; // not always available + self.imageSize = data.image_size; // not always available + + self.setState(data.state_code); + + switch(this.state){ + case UpdatePanel.IMAGE_READY: + self.installUpdate(); + break; + } + } + this.setState = function(newState) { + if(this.state == newState) return; + console.log("UpdatePanel:setState: ",this.state," > ",newState,"(",this.stateText,") (networkMode: ",self.networkMode,") (newestVersion: ",self.newestVersion,")"); + this.state = newState; + + // download button + // if there isn't newestVersion data something went wrong, + // probably accessing the internet + if(self.newestVersion != undefined) { + switch(this.state){ + case UpdatePanel.NONE: + case UpdatePanel.DOWNLOAD_FAILED: + case UpdatePanel.INSTALL_FAILED: + if(self.canUpdate) { + self.btnUpdate.removeAttr("disabled"); + } else { + self.btnUpdate.attr("disabled", true); + } + break; + default: + self.btnUpdate.attr("disabled", true); + break; + } + } else { + self.btnUpdate.attr("disabled", true); + } + this.updateStatusDisplay(); + } + this.updateStatusDisplay = function() { + var text = ""; + if(self.newestVersion != undefined) { + switch(this.state){ + case UpdatePanel.NONE: + if(self.canUpdate) { + text = "Update(s) available."; + } else { + text = "You're up to date."; + } + break; + case UpdatePanel.DOWNLOADING: + text = "Downloading update..."; + break; + case UpdatePanel.DOWNLOAD_FAILED: + text = "Downloading update failed."; + break; + case UpdatePanel.IMAGE_READY: + text = "Update downloaded."; + break; + case UpdatePanel.INSTALLING: + text = "Installing update... (will take a minute)"; + break; + case UpdatePanel.INSTALLED: + text = "Update complete, please refresh Page."; + break; + case UpdatePanel.INSTALL_FAILED: + text = "Installing update failed."; + break; + } + } else { + if(self.networkMode == SettingsWindow.NETWORK_MODE_ACCESS_POINT) { + text = "Can't access internet in access point mode."; + } else { + text = "Can't access internet."; + } + } + this.statusDisplay.html(text); + } + this.updateInfoDisplay = function() { + var text = "Current version: "+self.currentVersion+". "; + if(self.canUpdate) { + text += "Latest version: "+self.newestVersion+"."; + } + self.infoDisplay.text(text); + } + this.setNetworkMode = function(networkMode) { + self.networkMode = networkMode; + } +} +function setTemperature(callback) { + + if (callback != undefined) callback(); + +} +function setTemperature(callback) { + + if (callback != undefined) callback(); + +} +var VERTICALSHAPE; +var verticalShapes = { + "NONE": 'none', + "DIVERGING": 'diverging', + "CONVERGING": 'converging', + "SINUS": 'sinus' +}; + +function initVerticalShapes() { + // TODO give these vertical shapes a better spot + VERTICALSHAPE = verticalShapes.NONE; + $(".verticalShapes, .straight").on('mouseup touchend', function(e) { + e.preventDefault(); + console.log("diverging"); + VERTICALSHAPE = verticalShapes.NONE; + redrawRenderedPreview(); + }) + $(".verticalShapes, .diverging").on('mouseup touchend', function(e) { + e.preventDefault(); + console.log("diverging"); + VERTICALSHAPE = verticalShapes.DIVERGING; + redrawRenderedPreview(); + }) + $(".verticalShapes, .converging").on('mouseup touchend', function(e) { + e.preventDefault(); + console.log("converging"); + VERTICALSHAPE = verticalShapes.CONVERGING; + redrawRenderedPreview(); + }) + $(".verticalShapes, .sinus").on('mouseup touchend', function(e) { + e.preventDefault(); + console.log("sinus"); + VERTICALSHAPE = verticalShapes.SINUS; + redrawRenderedPreview(); + }) + +} + +function resetVerticalShapes() { + VERTICALSHAPE = verticalShapes.NONE; +} +var btnMoveUpInterval; +var btnMoveDownInterval; + +var btnTwistLeftInterval; +var btnTwistRightInterval; +var twistIncrement = Math.PI/1800; + +var btnOopsInterval; + +var btnNew, btnPrevious, btnNext; +var btnOops, btnStop, btnClear; +var btnMoveUp, btnMoveDown, btnTwistLeft, btnTwistRight; +var btnInfo, btnSettings; +//var btnDebug; // debug + +var state; +var prevState; +var hasControl; + +var gcodeGenerateDelayer; +var gcodeGenerateDelay = 50; + +function initButtonBehavior() { + console.log("f:initButtonBehavior"); + +// btnClear= $(".btnClear"); + btnOops = $(".btnOops"); + btnMoveUp = $("#btnMoveUp"); + btnMoveDown = $("#btnMoveDown"); + btnTwistLeft = $("#btnTwistLeft"); + btnTwistRight = $("#btnTwistRight"); + btnInfo = $(".btnInfo"); + btnSettings = $(".btnSettings"); + btnNew = $(".btnNew"); + btnPrint= $(".btnPrint"); + btnStop = $(".btnStop"); + + btnPrevious = $(".btnPrevious"); + btnNext = $(".btnNext"); + + //debug + //btnDebug = $(".debugBtn"); + + btnNew.on('touchstart mousedown', clearDoodle); + btnPrint.on('touchstart mousedown', print); + + // not using these at the moment + $("#btnPrevious").css("opacity", "0.3"); + btnNext.css("opacity", "0.3"); + $("#btnSave").css("opacity", "0.3"); + btnInfo.css("opacity", "0.3"); + +// btnClear.click(function(e) { +// e.preventDefault(); +// // console.log("clear"); +// +// clearDoodle(); +// }); + + function startOops(e) { + // console.log("btnOops mouse down"); + e.preventDefault(); + btnOopsInterval = setInterval( function() { + oopsUndo(); + }, 1000/50); + } + function stopOops(e) { + // console.log("btnOops mouse up"); + e.preventDefault(); + clearInterval(btnOopsInterval); + } + btnOops.on('touchstart', function(e) { startOops(e); }); + btnOops.on('touchend', function(e) { stopOops(e); }); + btnOops.mousedown(function(e) { startOops(e); }); + btnOops.mouseup(function(e) { stopOops(e); }); + + function startMoveUp(e) { + e.preventDefault(); + // console.log("btnMoveUp mouse down"); + previewUp(true); + clearInterval(btnMoveUpInterval); + btnMoveUpInterval = setInterval( function() { + previewUp(true); + }, 1000/30); + } + function stopMoveUp(e) { + e.preventDefault(); + console.log("btnMoveUp mouse up"); + clearInterval(btnMoveUpInterval); + previewUp(); + } + btnMoveUp.mousedown(function(e) { startMoveUp(e) }); + btnMoveUp.mouseup(function(e) { stopMoveUp(e) }); + btnMoveUp.on('touchstart', function(e) { startMoveUp(e) }); + btnMoveUp.on('touchend', function(e) { stopMoveUp(e) }); + + function startMoveDown(e) { + e.preventDefault(); + // console.log("btnMoveDown mouse down"); + previewDown(true); + clearInterval(btnMoveDownInterval); + btnMoveDownInterval = setInterval( function() { + previewDown(true); + }, 1000/30); + } + function stopMoveDown(e) { + e.preventDefault(); + console.log("btnMoveDown mouse up"); + clearInterval(btnMoveDownInterval); + previewDown(); + } + btnMoveDown.mousedown(function(e) { startMoveDown(e) }); + btnMoveDown.mouseup(function(e) { stopMoveDown(e) }); + btnMoveDown.on('touchstart', function(e) { startMoveDown(e) }); + btnMoveDown.on('touchend', function(e) { stopMoveDown(e) }); + + function startTwistLeft(e) { + e.preventDefault(); + // console.log("btnTwistLeft mouse down"); + previewTwistLeft(true); + clearInterval(btnTwistLeftInterval); + btnTwistLeftInterval = setInterval( function() { + previewTwistLeft(true); + }, 1000/30); + } + function stopTwistLeft(e) { + e.preventDefault(); + // console.log("btnTwistLeft mouse up"); + clearInterval(btnTwistLeftInterval); + previewTwistLeft(); + } + btnTwistLeft.mousedown(function(e) { startTwistLeft(e) }); + btnTwistLeft.mouseup(function(e) { stopTwistLeft(e) }); + btnTwistLeft.on('touchstart', function(e) { startTwistLeft(e) }); + btnTwistLeft.on('touchend', function(e) { stopTwistLeft(e) }); + + function startTwistRight(e) { + e.preventDefault(); + // console.log("btnTwistRight mouse down"); + previewTwistRight(true); + clearInterval(btnTwistRightInterval); + btnTwistRightInterval = setInterval( function() { + previewTwistRight(true); + }, 1000/30); + } + function stopTwistRight(e) { + e.preventDefault(); + // console.log("btnTwistRight mouse up"); + clearInterval(btnTwistRightInterval); + previewTwistRight(); + } + btnTwistRight.mousedown(function(e) { startTwistRight(e) }); + btnTwistRight.mouseup(function(e) { stopTwistRight(e) }); + btnTwistRight.on('touchstart', function(e) { startTwistRight(e) }); + btnTwistRight.on('touchend', function(e) { stopTwistRight(e) }); + + /*function openSettings() { + console.log("f:openSettings()"); + $("#contentOverlay").fadeIn(1000, function() { + loadSettings(); + }); + }*/ + btnSettings.bind('touchstart mousedown',function () { + //e.preventDefault(); + //console.log("btnSettings clicked"); + settingsWindow.showSettings(); + }); +// btnSettings.on('touchend', function(e) { +// e.preventDefault(); +// console.log("btnSettings touchend"); +// }); + + btnInfo.mouseup(function(e) { + e.preventDefault(); + console.log("btnInfo mouse up"); + }); + + // DEBUG + /* + // $(".agentInfo").css("display", "none"); + btnDebug.click(function(e) { + console.log("debugClick"); + $(".agentInfo").toggleClass("agentInfoToggle"); + e.preventDefault(); + }) + //*/ + + //btnStop.on('touchstart mousedown',stopPrint); +} +function stopPrint() { + console.log("f:stopPrint() >> sendPrintCommands = " + sendPrintCommands); + //if (!confirm("Weet je zeker dat je huidige print wilt stoppen?")) return; + if (sendPrintCommands) printer.stop(); + //setState(Printer.STOPPING_STATE,printer.hasControl); + printer.overruleState(Printer.STOPPING_STATE); +} + + +function prevDoodle(e) { + console.log("f:prevDoodle()"); + console.log("f:prevDoodle()"); +} +function nextDoodle(e) { + console.log("f:nextDoodle()"); +} + +function print(e) { + console.log("f:print() >> sendPrintCommands = " + sendPrintCommands); + + //$(".btnPrint").css("display","none"); + + if (_points.length > 2) { + + //setState(Printer.BUFFERING_STATE,printer.hasControl); + printer.overruleState(Printer.BUFFERING_STATE); + + btnStop.css("display","none"); // hack + + // we put the gcode generation in a little delay + // so that for example the print button is disabled right away + clearTimeout(gcodeGenerateDelayer); + gcodeGenerateDelayer = setTimeout(function() { + + var gcode = generate_gcode(); + if (sendPrintCommands) { + if(gcode.length > 0) { + printer.print(gcode); + } else { + printer.overruleState(Printer.IDLE_STATE); + printer.startStatusCheckInterval(); + } + } else { + console.log("sendPrintCommands is false: not sending print command to 3dprinter"); + } + + if (debugMode) { + $("#textdump").text(""); + $("#textdump").text(gcode.join("\n")); + } + + }, gcodeGenerateDelay); + } else { + console.log("f:print >> not enough points!"); + } + + //alert("Je tekening zal nu geprint worden"); + //$(".btnPrint").css("display","block"); + + + // $.post("/doodle3d.of", { data:output }, function(data) { + // btnPrint.disabled = false; + // }); +} + + +function clearMainView() { + // console.log("f:clearMainView()"); + ctx.save(); + ctx.clearRect(0,0,canvas.width, canvas.height); + ctx.restore(); +} +function resetPreview() { + // console.log("f:resetPreview()"); + + // clear preview canvas + previewCtx.save(); + previewCtx.clearRect(0,0,canvas.width, canvas.height); + previewCtx.restore(); + + // reset height and rotation to default values + numLayers = previewDefaults.numLayers; // current number of preview layers + rStep = previewDefaults.rotation; // Math.PI/180; //Math.PI/40; // +} + +function oopsUndo() { + // console.log("f:oopsUndo()"); + _points.pop(); + redrawDoodle(); + redrawPreview(); +} +function previewUp(redrawLess) { + // console.log("f:previewUp()"); + if (numLayers < maxNumLayers) { + numLayers++; + } +// redrawPreview(redrawLess); + redrawRenderedPreview(redrawLess); +} +function previewDown(redrawLess) { + // console.log("f:previewDown()"); + if (numLayers > minNumLayers) { + numLayers--; + } +// redrawPreview(redrawLess); + redrawRenderedPreview(redrawLess); +} +function previewTwistLeft(redrawLess) { + if (redrawLess == undefined) redrawLess = false; + // console.log("f:previewTwistLeft()"); + if (rStep > -previewRotationLimit) rStep -= twistIncrement; + // redrawPreview(redrawLess); + redrawRenderedPreview(redrawLess); +} +function previewTwistRight(redrawLess) { + // console.log("f:previewTwistRight()"); + if (rStep < previewRotationLimit) rStep += twistIncrement; + // redrawPreview(redrawLess); + redrawRenderedPreview(redrawLess); +} + + + +function update() { + setState(printer.state,printer.hasControl); + + thermometer.update(printer.temperature, printer.targetTemperature); + progressbar.update(printer.currentLine, printer.totalLines); +} + +function setState(newState,newHasControl) { + if(newState == state && newHasControl == hasControl) return; + + prevState = state; + + console.log("setState: ",prevState," > ",newState," ( ",newHasControl,")"); + setDebugText("State: "+newState); + + // print button + var printEnabled = (newState == Printer.IDLE_STATE && newHasControl); + if(printEnabled) { + btnPrint.removeClass("disabled"); // enable print button + btnPrint.unbind('touchstart mousedown'); + btnPrint.bind('touchstart mousedown',print); + } else { + btnPrint.addClass("disabled"); // disable print button + btnPrint.unbind('touchstart mousedown'); + } + + // stop button + var stopEnabled = ((newState == Printer.PRINTING_STATE || newState == Printer.BUFFERING_STATE) && newHasControl); + if(stopEnabled) { + btnStop.removeClass("disabled"); + btnStop.unbind('touchstart mousedown'); + btnStop.bind('touchstart mousedown',stopPrint); + } else { + btnStop.addClass("disabled"); + btnStop.unbind('touchstart mousedown'); + } + + // thermometer + switch(newState) { + case Printer.IDLE_STATE: + case Printer.BUFFERING_STATE: + case Printer.PRINTING_STATE: + case Printer.STOPPING_STATE: + thermometer.show(); + break; + default: + thermometer.hide(); + break; + } + + // progress indicator + switch(newState) { + case Printer.PRINTING_STATE: + progressbar.show(); + break; + default: + progressbar.hide(); + break; + } + + if(newState == Printer.WIFIBOX_DISCONNECTED_STATE) { + message.set("Lost connection to WiFi box",Message.ERROR); + } else if(prevState == Printer.WIFIBOX_DISCONNECTED_STATE) { + message.set("Connected to WiFi box",Message.INFO,true); + } else if(newState == Printer.DISCONNECTED_STATE) { + message.set("Printer disconnected",Message.WARNING,true); + } else if(prevState == Printer.DISCONNECTED_STATE && newState == Printer.IDLE_STATE || + prevState == Printer.UNKNOWN_STATE && newState == Printer.IDLE_STATE) { + message.set("Printer connected",Message.INFO,true); + } + + state = newState; + hasControl = newHasControl; +} + +/* * * * * * * * * * + * + * VARS + * + * * * * * * * * * */ +var preview; +var previewCtx; + +var svgPathRegExp = /[LM]\d* \d*/ig; +var svgPathParamsRegExp = /([LM])(\d*) (\d*)/; + +var dragging = false; + +var $canvas, canvas, ctx; +var canvasWidth, canvasHeight; + +var drawCanvas; +var drawCanvasTopLeftCoords = [0, 0]; + +var doodleBounds = [-1, -1, -1, -1]; // left, top, right, bottom +// var doodleScaleVals = [[0, 0], [1.0, 1.0]]; // [ [x, y], [scaleX, scaleY] ] +var doodleTransform = [0, 0, 1.0, 1.0]; // [ x, y, scaleX, scaleY ] + +var _points = []; + +var prevCountingTime = 0; +var movementCounter = 0; + +var drawVariableLineWeight = false; // set to true to have the momentum of the mouse/touch movement result in larger/smaller strokes +var lineweight = 2; + +/* * * * * * * * * * + * + * INIT + * + * * * * * * * * * */ +function initDoodleDrawing() { + console.log("f:initDoodleDrawing()"); + + $canvas = $("#mycanvas"); + canvas = $canvas[0]; + ctx = canvas.getContext('2d'); + + canvasWidth = canvas.width; + canvasHeight = canvas.height; + + + //* + //TODO make these jquery eventhandlers (works for all) + if (!canvas.addEventListener) { + canvas.attachEvent('onmousedown',onCanvasMouseDown); + canvas.attachEvent('onmousemove',onCanvasMouseMove); + canvas.attachEvent('onmouseup',onCanvasMouseUp); + canvas.attachEvent('ontouchstart',onCanvasTouchDown); + canvas.attachEvent('ontouchmove',onCanvasTouchMove); + canvas.attachEvent('ontouchend',onCanvasTouchEnd); + document.body.attachEvent('ontouchmove',prevent); + } else { + canvas.addEventListener('mousedown',onCanvasMouseDown,false); + canvas.addEventListener('mousemove',onCanvasMouseMove,false); + canvas.addEventListener('mouseup',onCanvasMouseUp,false); + canvas.addEventListener('touchstart',onCanvasTouchDown,false); + canvas.addEventListener('touchmove',onCanvasTouchMove,false); + canvas.addEventListener('touchend',onCanvasTouchEnd,false); + if (!debugMode) document.body.addEventListener('touchmove',prevent,false); + } + //*/ + +// drawCanvas = $(".drawareacontainer"); + drawCanvas = $("#mycanvasContainer"); // $("#drawAreaContainer") + + console.log("drawCanvasTopLeftCoords: " + drawCanvasTopLeftCoords); +// drawCanvasTopLeftCoords[0] = drawCanvas.css("left").match(/[0-9]/g).join(""); +// drawCanvasTopLeftCoords[1] = drawCanvas.css("top").match(/[0-9]/g).join(""); + drawCanvasTopLeftCoords[0] = drawCanvas.offset().left; + drawCanvasTopLeftCoords[1] = drawCanvas.offset().top; +// drawCanvasTopLeftCoords[0] = drawCanvas[0].offsetParent.offsetLeft; +// drawCanvasTopLeftCoords[1] = drawCanvas[0].offsetParent.offsetTop; + + console.log("f:initDoodleDrawing() >> canvasWidth: " + canvasWidth); + console.log("f:initDoodleDrawing() >> canvasHeight: " + canvasHeight); + +} + +/* * * * * * * * * * + * + * CANVAS DRAWING FUNCTION + * + * * * * * * * * * */ +function draw(_x, _y, _width) { + // console.log("f:draw() >> _width: " + _width); + + if (prevX == 0 && prevY ==0) { + prevX = _x; + prevY = _y; + } + + ctx.beginPath(); + ctx.moveTo(prevX, prevY); + ctx.lineTo(_x, _y); + + if (_width != undefined) { + ctx.lineWidth = _width; + } else { + if (drawVariableLineWeight) { + var dist = Math.sqrt(Math.pow((prevX - _x), 2) + Math.pow((prevY - _y), 2)); + if (dist < 10) { + lineweight += .25; + } else if (dist < 20) { + lineweight += .5; + } else if (dist < 30) { + lineweight += .75; + } else if (dist < 50) { + lineweight += 1; + } else if (dist < 80) { + lineweight += 1.5; + } else if (dist < 120) { + lineweight += 2.25; + } else if (dist < 170) { + lineweight += 3.5; + } else { + lineweight += 2; + } + lineweight = Math.min(lineweight, 30); + lineweight *= 0.90; + lineweight = Math.max(lineweight, 1.0); + } else { + lineweight = 2; + } + + ctx.lineWidth = lineweight; + } + ctx.lineCap = 'round'; + ctx.stroke(); + + prevX = _x; + prevY = _y; +} + + +/* * * * * * * * * * + * + * SUPPORTING FUNCTIONS + * + * * * * * * * * * */ +function clearDoodle() { + console.log("f:clearDoodle"); + + _points = []; + + prevX = 0; + prevY = 0; + + updatePrevX = -1; + updatePrevY = -1; + + doodleBounds = [-1, -1, -1, -1]; // left, top, right, bottom + doodleTransform = [0, 0, 1.0, 1.0]; // [ x, y, scaleX, scaleY ] + + dragging = false; + + clearMainView(); + resetPreview(); + resetVerticalShapes(); +} + +function redrawDoodle() { + console.log("f:redrawDoodle()"); + + clearMainView(); + + prevX = 0; + prevY = 0; + + for (var i = 0; i < _points.length; i++) { + // console.log(" drawing points " + _points[i]); + if (_points[i][2] == true) { + draw(_points[i][0], _points[i][1], 0.5); + } else { + draw(_points[i][0], _points[i][1]); + } + } +} + + function adjustBounds(x, y) { + var newPointsOutsideOfCurrentBounds = false; + console.log("f:adjustBounds("+x+","+y+")"); + + if (doodleBounds[0] == -1) { + // if doodleBounds[0] is -1 then it isn't initted yet, so x and y are both the min and max vals + + doodleBounds[0] = x; + doodleBounds[1] = y; + doodleBounds[2] = x; + doodleBounds[3] = y; + return; + } + + if (x < doodleBounds[0]) { + doodleBounds[0] = x; + newPointsOutsideOfCurrentBounds = true; + } + if (x > doodleBounds[2]) { + doodleBounds[2] = x; + newPointsOutsideOfCurrentBounds = true; + } + if (y < doodleBounds[1]) { + doodleBounds[1] = y; + newPointsOutsideOfCurrentBounds = true; + } + if (y > doodleBounds[3]) { + doodleBounds[3] = y; + newPointsOutsideOfCurrentBounds = true; + } +// doodleBounds[0] = Math.min(doodleBounds[0], x); // left +// doodleBounds[2] = Math.max(doodleBounds[2], x); // right +// +// doodleBounds[1] = Math.min(doodleBounds[1], y); // top +// doodleBounds[3] = Math.max(doodleBounds[3], y); // bottom + + // draw the bounding rect (DEBUG) + /* + ctx.beginPath(); + ctx.rect(doodleBounds[0],doodleBounds[1], doodleBounds[2] - doodleBounds[0], doodleBounds[3] - doodleBounds[1]); + ctx.lineWidth = .2; + ctx.strokeStyle = "#333" + ctx.stroke(); + ctx.closePath(); + //*/ + + // console.log(" new bounds: " + doodleBounds); + + return newPointsOutsideOfCurrentBounds; +} + +// does what exactly? +function adjustPreviewTransformation() { + // console.log("f:adjustPreviewTransformation()"); + +// doodleTransform[0] = doodleBounds[0] - (doodleBounds[2] - doodleBounds[0]) / 2; +// doodleTransform[1] = doodleBounds[1] - (doodleBounds[3] - doodleBounds[1]) / 2; +// doodleTransform[0] = doodleBounds[0] - ((doodleBounds[2] - doodleBounds[0]) / 2); +// doodleTransform[1] = doodleBounds[1] - ((doodleBounds[3] - doodleBounds[1]) / 2); + doodleTransform[0] = doodleBounds[0]; + doodleTransform[1] = doodleBounds[1]; + + var sclX, sclY, finalScl; + if (_points.length < 2) { +// console.log(_points); + sclX = 1.0; + sclY = 1.0; + finalScl = Math.min(sclX, sclY); + } else { + sclX = canvasWidth / (doodleBounds[2] - doodleBounds[0]); + sclY = canvasHeight / (doodleBounds[3] - doodleBounds[1]); + + // TODO this shouldn't be a matter if choosing the smallest but should probably involve maintaining aspect ratio?? + finalScl = Math.min(sclX, sclY); + } + + doodleTransform[2] = finalScl; + doodleTransform[3] = finalScl; +} + + +/* * * * * * * * * * + * + * MOUSE/TOUCH EVENTHANDLERS + * + * * * * * * * * * */ +function onCanvasMouseDown(e) { + // console.log("onmousedown >> e.offsetX,e.offsetY = " + e.offsetX+","+e.offsetY); + // console.log("onmousedown >> e.layerX,e.layerY= " + e.layerX+","+e.layerY); + // console.log("onmousedown >> e: " + e); + // console.log(e); +// console.log("f:onCanvasMouseDown()"); + dragging = true; + + prevCountingTime = new Date().getTime(); + movementCounter = 0 + +// _points.push([e.clientX - canvas.offsetLeft, e.clientY - canvas.offsetTop, true]); +// adjustBounds(e.clientX - canvas.offsetLeft, e.clientY - canvas.offsetTop); +// adjustPreviewTransformation(); +// draw(e.clientX - canvas.offsetLeft, e.clientY - canvas.offsetTop, 0.5); + + var x, y; + if (e.offsetX != undefined) { + x = e.offsetX; + y = e.offsetY; + } else { + x = e.layerX; + y = e.layerY; + } +// console.log(" x: " + x + ", y: " + y); + + _points.push([x, y, true]); + adjustBounds(x, y); + adjustPreviewTransformation(); + draw(x, y, 0.5); +} + +var prevPoint = {x:-1, y:-1}; +function onCanvasMouseMove(e) { +// console.log("f:onCanvasMouseMove()"); + if (!dragging) return; + // console.log("onmousemove"); + + var x, y; + if (e.offsetX != undefined) { + x = e.offsetX; + y = e.offsetY; + } else { + x = e.layerX; + y = e.layerY; + } + + if (prevPoint.x != -1 || prevPoint.y != -1) { + var dist = Math.sqrt(Math.pow((prevPoint.x - x), 2) + Math.pow((prevPoint.y - y), 2)); + if (dist > 5) { // replace by setting: doodle3d.simplify.minDistance + _points.push([x, y, false]); + adjustBounds(x, y) + adjustPreviewTransformation(); + draw(x, y); + prevPoint.x = x; + prevPoint.y = y; + } + } else { + _points.push([x, y, false]); + adjustBounds(x, y) + adjustPreviewTransformation(); + draw(x, y); + prevPoint.x = x; + prevPoint.y = y; + } + + // DEBUG +// $("#textdump").text(""); +// $("#textdump").append("doodlebounds:" + doodleBounds + "\n"); +// $("#textdump").append("doodletransform:" + doodleTransform + "\n"); + + if (new Date().getTime() - prevRedrawTime > redrawInterval) { + // redrawing the whole preview the first X points ensures that the doodleBounds is set well + prevRedrawTime = new Date().getTime(); + if (_points.length < 50) { + redrawPreview(); + } else { + updatePreview(x, y, true); + /* + if (_points.length - prevUpdateFullPreview > prevUpdateFullPreviewInterval) { + console.log("f:onTouchMove >> passed prevUpdateFullPreviewInterval, updating full preview"); + redrawPreview(); + prevUpdateFullPreview = _points.length; + } else { + updatePreview(x, y, true); + } + //*/ +// redrawPreview(); + } + } +} +prevUpdateFullPreview = 0; // 0 is not a timeframe but refers to the _points array +prevUpdateFullPreviewInterval = 25; // refers to number of points, not a timeframe + +function onCanvasMouseUp(e) { +// console.log("f:onCanvasMouseUp()"); + // console.log("onmouseup"); + dragging = false; + console.log("doodleBounds: " + doodleBounds); + console.log("doodleTransform: " + doodleTransform); + // ctx.stroke(); + + console.log("_points.length :" + _points.length); +// console.log(_points); + + // DEBUG +// $("#textdump").text(""); +// $("#textdump").append("doodlebounds:" + doodleBounds + "\n"); +// $("#textdump").append("doodletransform:" + doodleTransform + "\n"); + +// redrawPreview(); + renderToImageDataPreview(); +} + +function onCanvasTouchDown(e) { + e.preventDefault(); + console.log("f:onCanvasTouchDown >> e: " , e); +// var x = e.touches[0].pageX - e.touches[0].target.offsetLeft; +// var y = e.touches[0].pageY - e.touches[0].target.offsetTop; + var x = e.touches[0].pageX - drawCanvasTopLeftCoords[0]; + var y = e.touches[0].pageY - drawCanvasTopLeftCoords[1]; +// var x = e.touches[0].pageX; +// var y = e.touches[0].pageY; +// var x = e.touches[0].layerX; +// var y = e.touches[0].layerY; + + _points.push([x, y, true]); + adjustBounds(x, y); + adjustPreviewTransformation(); + draw(x, y, .5); + + movementCounter = 0; + + prevRedrawTime = new Date().getTime(); +} + +function onCanvasTouchMove(e) { + e.preventDefault(); +// var x = e.touches[0].pageX - e.touches[0].target.offsetLeft; +// var y = e.touches[0].pageY - e.touches[0].target.offsetTop; + var x = e.touches[0].pageX - drawCanvasTopLeftCoords[0]; + var y = e.touches[0].pageY - drawCanvasTopLeftCoords[1]; +// var x = e.touches[0].layerX; +// var y = e.touches[0].layerY; +// var x = e.touches[0].layerX; +// var y = e.touches[0].layerY; + + console.log("f:onCanvasTouchMove >> x,y = "+x+","+y+" , e: " , e); + + if (prevPoint.x != -1 || prevPoint.y != -1) { + var dist = Math.sqrt(Math.pow((prevPoint.x - x), 2) + Math.pow((prevPoint.y - y), 2)); + if (dist > 5) { + _points.push([x, y, false]); + adjustBounds(x, y) + adjustPreviewTransformation(); + draw(x, y); + prevPoint.x = x; + prevPoint.y = y; + } + } else { + _points.push([x, y, false]); + adjustBounds(x, y) + adjustPreviewTransformation(); + draw(x, y); + prevPoint.x = x; + prevPoint.y = y; + } + + // update counter -> this was for getting a handle on how often the Canvas fires a move-event + /* + movementCounter++; + if (new Date().getTime() - prevCountingTime > 1000) { + // console.log("number of moves in 1sec: " + movementCounter) + prevCountingTime= new Date().getTime(); + $("#numtimes").text(movementCounter + " times"); + movementCounter = 0; + } + //*/ + + if (new Date().getTime() - prevRedrawTime > redrawInterval) { + // redrawing the whole preview the first X points ensures that the doodleBounds is set well + if (_points.length < 50) { + redrawPreview(); + } else { + updatePreview(x, y, true); + /* + if (_points.length - prevUpdateFullPreview > prevUpdateFullPreviewInterval) { + console.log("f:onTouchMove >> passed prevUpdateFullPreviewInterval, updating full preview"); + redrawPreview(); + prevUpdateFullPreview = _points.length; + } else { + updatePreview(x, y, true); + } + //*/ + } + prevRedrawTime = new Date().getTime(); + } +} + +function onCanvasTouchEnd(e) { + console.log("f:onCanvasTouchEnd()"); + console.log("doodleBounds: " + doodleBounds); + console.log("doodleTransform: " + doodleTransform); + // ctx.stroke(); + + console.log("_points.length :" + _points.length); + + // redrawPreview(); + renderToImageDataPreview(); +} + +function prevent(e) { + e.preventDefault(); +} +//* +var $preview; +var preview; +var previewCtx; + +var preview_tmp; +var previewCtx_tmp; + +var previewDefaults = { + rotation: Math.PI/90, + numLayers: 10 +} + +var svgPathRegExp = /[LM]\d* \d*/ig; +var svgPathParamsRegExp = /([LM])(\d*) (\d*)/; + +var prevRedrawTime = new Date().getTime(); +var redrawInterval = 1000 / 30; // ms + +function initPreviewRendering() { + console.log("f:initPreviewRendering()"); + + $preview = $("#preview"); + preview = $preview[0]; + previewCtx = preview.getContext('2d'); + + // DEBUG --> mbt preview_tmp (voor de toImageData truc) + var _ratio = preview.width / canvas.width; + preview_tmp = document.getElementById('preview_tmp'); + preview_tmp.width = preview.width; + preview_tmp.height = canvas.height * _ratio; + $("#preview_tmp").css("top", -preview_tmp.height); + + previewCtx_tmp = preview_tmp.getContext('2d'); + + calcPreviewCanvasProperties(); + redrawPreview(); +} + +function calcPreviewCanvasProperties() { + console.log("f:calcPreviewCanvasProperties()"); + + globalScale = preview.width / canvasWidth; + layerCX = (canvasWidth / 2) * globalScale; // defined in canvasDrawing_v01.js + layerCY = (canvasHeight / 2) * globalScale; // defined in canvasDrawing_v01.js +// layerOffsetY = preview.height - 1.75 * layerCY; + layerOffsetY = preview.height * (1 - previewVerticalPadding.bottom); + yStep = (preview.height - (preview.height * (previewVerticalPadding.top + previewVerticalPadding.bottom))) / maxNumLayers; +} + +// TODO (perhaps) : make the twist limit dynamic, depending on what's printable (w.r.t. overlapping) +var previewRotationLimit = Math.PI / 30; // rough estimate + +var numLayers = previewDefaults.numLayers; // current number of preview layers +var maxNumLayers= 100; // maximum number of preview layers +var minNumLayers= 2; // minimum number of preview layers +var globalScale = 0.3; // global scale of preview (width preview / width canvas) +var globalAlpha = 0.20; // global alpha of preview +var scaleY = 0.4; // additional vertical scale per path for 3d effect +var viewerScale = 0.65; // additional scale to fit into preview nicely (otherwise is fills out totally) +var previewVerticalPadding = { "top" : .15, "bottom" : 0.12 }; // % +var strokeWidth = 2; //4; +//var rStep = Math.PI/40; //Math.PI/40; // +var rStep = previewDefaults.rotation; // Math.PI/180; //Math.PI/40; // +var yStep;// = preview.height / 150; // 3; //6; +//var svgWidth = 500; // 650 //parseInt($(svg).css("width")); +//var svgHeight = 450; //450; //parseInt($(svg).css("height")); +var layerCX, layerCY; +//var layerCX = (canvasWidth / 2) * globalScale; // defined in canvasDrawing_v01.js +//var layerCY = (canvasHeight / 2) * globalScale; // defined in canvasDrawing_v01.js +var layerOffsetY; //= preview.height - 1.75 * layerCY; // 330; // previewHeight - 120 +var prevX = 0; +var prevY = 0; +var highlight = true; //highlight bottom, middle and top layers + +var linesRaw = ""; +var debug_redrawSimplification = 6; +function redrawPreview(redrawLess) { + if (redrawLess == undefined) redrawLess = false; + + if (_points.length < 2) return; + + if (!redrawLess) { + //debug_redrawSimplification = Math.round(_points.length / 65); + //* + if (_points.length < 100) { + debug_redrawSimplification = 6; + } else if (_points.length < 250) { + debug_redrawSimplification = 7; + } else if (_points.length < 400) { + debug_redrawSimplification = 8; + } else if (_points.length < 550) { + debug_redrawSimplification = 9; + } else if (_points.length < 700) { + debug_redrawSimplification = 10; + } else { + debug_redrawSimplification = 11; + } + //*/ +// console.log("debug_redrawSimplification: " + debug_redrawSimplification); + } + + var y = 0; + var r = 0; + + //preview.width = preview.width; + previewCtx.clearRect(0, 0, preview.width, preview.height); + previewCtx.lineWidth = strokeWidth; + previewCtx.strokeStyle = '#f00'; //"rgba(255,255,0,0)"; + + for(var i = 0; i < numLayers; i++) { + + var verticalScaleFactor = scaleFunction(i / maxNumLayers); + + if(i == 0 || i == Math.floor(numLayers/2) || i == numLayers-1) { + previewCtx.globalAlpha = 1; + } else { + previewCtx.globalAlpha = globalAlpha; + } + + if (redrawLess && i%debug_redrawSimplification != 0 && !(i == 0 || i == Math.floor(numLayers/2) || i == numLayers-1) ) { + y -= yStep; + r += rStep; + continue; + } + + previewCtx.save(); + +// previewCtx.translate(layerCX, layerOffsetY + layerCY + y); + previewCtx.translate(layerCX, layerOffsetY + y); +// previewCtx.setTransform(1, 0, 0, scaleY, layerCX, layerOffsetY+layerCY+y); + previewCtx.scale(viewerScale * verticalScaleFactor, scaleY * viewerScale * verticalScaleFactor); + previewCtx.rotate(r); + previewCtx.translate((-doodleTransform[0]) * (globalScale * doodleTransform[2]), (-doodleTransform[1]) * (globalScale * doodleTransform[3])); + + var adjustedDoodlePoint = centeredAndScaledDoodlePoint(_points[0]); + + previewCtx.beginPath(); + previewCtx.moveTo(adjustedDoodlePoint.x, adjustedDoodlePoint.y); + for(var j = 1; j < _points.length; j++) { + adjustedDoodlePoint = centeredAndScaledDoodlePoint(_points[j]) + if (redrawLess && j%debug_redrawSimplification != 0 ) continue; + previewCtx.lineTo(adjustedDoodlePoint.x, adjustedDoodlePoint.y); + } + previewCtx.stroke(); + + y -= yStep; + r += rStep; + previewCtx.restore(); + } + previewCtx.globalAlpha = globalAlpha; +} + +function renderToImageDataPreview() { + console.log("f:renderToImageDataPreview()"); + + if (_points.length < 2) return; + + //* + // the first step + previewCtx_tmp.clearRect(0, 0, preview.width, preview.height); + previewCtx_tmp.lineWidth = strokeWidth; + previewCtx_tmp.strokeStyle = '#f00'; //"rgba(255,255,0,0)"; + + previewCtx_tmp.save(); + previewCtx_tmp.translate(layerCX, layerCY); + previewCtx_tmp.scale(viewerScale, viewerScale); + previewCtx_tmp.translate((-doodleTransform[0]) * (globalScale * doodleTransform[2]), (-doodleTransform[1]) * (globalScale * doodleTransform[3])); + + var adjustedDoodlePt = centeredAndScaledDoodlePoint(_points[0]); + + previewCtx_tmp.beginPath(); + previewCtx_tmp.moveTo(adjustedDoodlePt.x, adjustedDoodlePt.y); + for(var j = 1; j < _points.length; j++) { + adjustedDoodlePt = centeredAndScaledDoodlePoint(_points[j]) + previewCtx_tmp.lineTo(adjustedDoodlePt.x, adjustedDoodlePt.y); + } + previewCtx_tmp.stroke(); + previewCtx_tmp.closePath(); + previewCtx_tmp.restore(); + //*/ + + // var saved_rect = previewCtx_tmp.getImageData(0, 0, layerCX*2, layerCY*2); + var saved_rect_todataurl = preview_tmp.toDataURL(); + doodleImageCapture = new Image(); + doodleImageCapture.onload = function() { + + previewCtx.clearRect(0, 0, preview.width, preview.height); + previewCtx.lineWidth = strokeWidth; + previewCtx.strokeStyle = '#f00'; //"rgba(255,255,0,0)"; + + var y = 0; + var r = 0; + + for(var i=0;i> EFFE CHECKEN:"); + console.log(" speed: " + speed); + console.log(" travelSpeed: " + travelSpeed); + console.log(" filamentThickness: " + filamentThickness); + console.log(" wallThickness: " + wallThickness); + console.log(" screenToMillimeterScale: " + screenToMillimeterScale); + console.log(" layerHeight: " + layerHeight); + console.log(" objectHeight: " + objectHeight); + console.log(" maxObjectHeight: " + maxObjectHeight); + console.log(" temperature: " + temperature); + console.log(" maxObjectHeight: " + maxObjectHeight); + console.log(" useSubLayers: " + useSubLayers); + console.log(" enableTraveling: " + enableTraveling); + console.log(" retractionspeed: " + retractionspeed); + console.log(" retractionminDistance: " + retractionminDistance); + console.log(" retractionamount: " + retractionamount); + console.log(""); + //*/ + + // max amount of real world layers + var layers = maxObjectHeight / layerHeight; //maxObjectHeight instead of objectHeight + + // translate numLayers in preview to objectHeight in real world + //objectHeight = Math.ceil(numLayers / 5); // in settings objectHeight = 20, in previewRendering_v01.js numLayers is 100, hence the / 5 + //objectHeight = numLayers; // in settings objectHeight = 20, in previewRendering_v01.js numLayers is 100, hence the / 5 + objectHeight = Math.round(numLayers/maxNumLayers*maxObjectHeight); + + // translate preview rotation (per layer) to real world rotation + var rStepGCode = rStep * maxNumLayers/layers; ///maxNumLayers*maxObjectHeight; + // correct direction + rStepGCode = -rStepGCode; + + // todo hier een array van PATHS maken wat de losse paths zijn + + // copy array without reference -> http://stackoverflow.com/questions/9885821/copying-of-an-array-of-objects-to-another-array-without-object-reference-in-java + var points = JSON.parse(JSON.stringify(_points)); + +// console.log("f:generategcode() >> paths: " + paths.toString()); +// console.log("paths.toString(): " + paths.toString()); +// return; + + //gcode.push("M104 S" + temperature); // set target temperature and do not wait for the extruder to reach it + //gcode.push("M109 S" + temperature); // set target temperature and wait for the extruder to reach it + + // add gcode begin commands + gcode = gcode.concat(startGcode); + + //gcode.push("M109 S" + temperature); // set target temperature and wait for the extruder to reach it + + var layers = maxObjectHeight / layerHeight; //maxObjectHeight instead of objectHeight + var extruder = 0.0; + var prev = new Point(); prev.set(0, 0); + + // replacement (and improvement) for ofxGetCenterofMass + var centerOfDoodle = { + x: doodleBounds[0] + (doodleBounds[2]- doodleBounds[0])/2, + y: doodleBounds[1] + (doodleBounds[3] - doodleBounds[1])/2 +// x: doodleBounds[0], +// y: doodleBounds[1] + } + + console.log("f:generategcode() >> layers: " + layers); + if (layers == Infinity) return; + + // check feasibility of design + var pointsToPrint = points.length * layers*(objectHeight/maxObjectHeight) + //console.log(" points.length: ",points.length); + //console.log(" numLayers: ",(layers*(objectHeight/maxObjectHeight))); + //console.log(" pointsToPrint: ",pointsToPrint); + //console.log(" MAX_POINTS_TO_PRINT: ",MAX_POINTS_TO_PRINT); + + if(pointsToPrint > MAX_POINTS_TO_PRINT) { + alert("Sorry, your doodle to to complex and / or to high"); + console.log("WARNING: to many points to convert to gcode"); + return []; + } + + for (var layer = 0; layer < layers; layer++) { + + var p = JSON.parse(JSON.stringify(points)); // [].concat(points); + + if (p.length < 2) return; + var even = (layer % 2 == 0); + var progress = layer / layers; + + // float layerScale = scaleFunction(float(layer)/layers); // scaleFactor van de layer -> lookup naar vfunc[] voor die scaleVals +// var layerScale = 1.0; + var layerScale = scaleFunction(progress); + + // if begin point this row and end point last row are close enough, isLoop is true + var isLoop = lineLength(points[0][0], points[0][1], points[points.length-1][0], points[points.length-1][1]) < 3; + + // set center of doodle as middle (ie subtract to that) + pointsTranslate(p, -centerOfDoodle.x, -centerOfDoodle.y); + pointsScale(p, screenToMillimeterScale,-screenToMillimeterScale); + pointsScale(p, layerScale, layerScale); + + // sort-of in de buurt van (360/2.5) + // // -> aight.. er zijn 750 lines vs 1000 in de d3d app. 135 = .75 * 180... dit kan je nog rechttrekken als je NET wat slimmer nadenkt :) + // update: NEE, het is niet .75 * 180 want 135 was niet de beste value. + //pointsRotate(p, rStep * progress * 139); + pointsRotate(p, rStepGCode * layer); + + if (layer == 0) { + //gcode.push("M107"); //fan off + if (firstLayerSlow) { + //gcode.push("M220 S20"); //slow speed + speed = bottomSpeed; + //console.log("> speed: ",speed); + } + } else if (layer == 2) { ////////LET OP, pas bij layer 2 weer op normale snelheid ipv layer 1 + gcode.push("M106"); //fan on + //gcode.push("M220 S100"); //normal speed + speed = normalSpeed; + //console.log("> speed: ",speed); + } + + var curLayerCommand = 0; + var totalLayerCommands = p.length; + var layerProgress = 0; + + var paths = []; + var pathCounter = -1; + // var points = []; + + for (var i = 0; i < p.length; i++) { + if (p[i][2] == true) { + pathCounter++; + paths.push([]); + paths[pathCounter].push([p[i][0], p[i][1]]); + } else { + paths[pathCounter].push([p[i][0], p[i][1]]); + } + } +// console.log("f:generategcode() >> paths.length: " + paths.length); + + // loop over the subpaths (the separately drawn lines) + for (var j = 0; j < paths.length; j++) { // TODO paths > subpaths + // this line is probably for drawing efficiency, alternating going from 0->end and end->0 (i.e. to and fro) +// vector &commands = subpaths[even ? j : subpaths.size()-1-j].getCommands(); + var commands = paths[j]; //commands zijn alle points uit subpath j // TODO commands > subpathPoints + + // loop over the coordinates of the subpath + for (var i = 0; i < commands.length; i++) { + var last = commands.length - 1; + + // this line is probably for drawing efficiency, alternating going from 0->end and end->0 (i.e. to and fro) +// ofPoint to = commands[(even || isLoop || loopAlways) ? i : last-i].to; + var to = new Point(); to.set(commands[i][0], commands[i][1]); + + // TODO 2013-09-18 evaluate if this should stay.. + // this was added when Rick mailed us wrt the Ultimaker delivery of Doodle3D + to.x += gCodeOffsetX; + to.y += gCodeOffsetY; + + var sublayer = (layer == 0) ? 0.0 : layer + (useSubLayers ? (curLayerCommand/totalLayerCommands) : 0); + var z = (sublayer + 1) * layerHeight; // 2013-09-06 removed zOffset (seemed to be useless) + + var isTraveling = !isLoop && i==0; + var doRetract = retractionEnabled && prev.distance(to) > retractionminDistance; + + if (enableTraveling && isTraveling) { +// console.log("enableTraveling && isTraveling >> doRetract: " + doRetract + ", retractionspeed: " + retractionspeed); + if (doRetract) gcode.push("G0 E" + (extruder - retractionamount).toFixed(3) + " F" + (retractionspeed * 60).toFixed(3)); //retract + gcode.push("G0 X" + to.x.toFixed(3) + " Y" + to.y.toFixed(3) + " Z" + z.toFixed(3) + " F" + (travelSpeed * 60).toFixed(3)); + if (doRetract) gcode.push("G0 E" + extruder.toFixed(3) + " F" + (retractionspeed * 60).toFixed(3)); // return to normal + } else { +// console.log(" else"); + //extruder += prev.distance(to) * wallThickness * layerHeight / filamentThickness; + extruder += prev.distance(to) * wallThickness * layerHeight / (Math.pow((filamentThickness/2), 2) * Math.PI); + gcode.push("G1 X" + to.x.toFixed(3) + " Y" + to.y.toFixed(3) + " Z" + z.toFixed(3) + " F" + (speed * 60).toFixed(3) + " E" + extruder.toFixed(3)); + } + + curLayerCommand++; + layerProgress = curLayerCommand/totalLayerCommands; + prev = to; + + } + + } + + if ((layer/layers) > (objectHeight/maxObjectHeight)) { + console.log("f:generategcode() >> (layer/layers) > (objectHeight/maxObjectHeight) is true -> breaking at layer " + (layer + 1)); + break; + } + } + // add gcode end commands + gcode = gcode.concat(endGcode); + + return gcode; +} + +function scaleFunction(percent) { + var r = 1.0; + + switch (VERTICALSHAPE) { + case verticalShapes.NONE: + r = 1.0; + break; + case verticalShapes.DIVERGING: + r = .5 + (percent * .5); + break; + case verticalShapes.CONVERGING: + r = 1.0 - (percent * .8); + break; + case verticalShapes.SINUS: + r = (Math.cos(percent * Math.PI * 4) * .25) + .75; + break; + } + +// return 1.0 - (percent *.8); + return r; +} + +pointsTranslate = function(p, x, y) { + for (var i = 0; i < p.length; i++) { + p[i][0] += x; + p[i][1] += y; + } +} + +pointsScale = function(p, sx, sy) { + for (var i = 0; i < p.length; i++) { + p[i][0] *= sx; + p[i][1] *= sy; + } +} + +// rotates around point 0,0 (origin). +// Not the prettiest kind of rotation solution but in our case we're assuming that the points have just been translated to origin +pointsRotate = function(p, ang) { + var _ang, dist; + for (var i = 0; i < p.length; i++) { + dist = Math.sqrt(p[i][0] * p[i][0] + p[i][1] * p[i][1]); + _ang = Math.atan2(p[i][1], p[i][0]); + p[i][0] = Math.cos(_ang + ang) * dist; + p[i][1] = Math.sin(_ang + ang) * dist; + } +} + +//+ Jonas Raoni Soares Silva +//@ http://jsfromhell.com/math/line-length [rev. #1] +lineLength = function(x, y, x0, y0){ + return Math.sqrt((x -= x0) * x + (y -= y0) * y); +}; + +var Point = function() {}; +Point.prototype = { + x: 0, + y: 0, + set: function(_x, _y) { + this.x = _x; + this.y = _y; + }, + distance: function(p) { + var d = -1; + if (p instanceof Point) { + d = Math.sqrt((p.x - this.x) * (p.x - this.x) + (p.y - this.y) * (p.y - this.y)); + } + return d; + }, + toString: function() { + console.log("x:" + this.x + ", y:" + this.y); + } +} + +// TODO refactor this stuff, there's much to wipe +var drawAreaContainerMinHeight = 300; +var drawAreaContainerMaxHeight = 450; + +function doOnResize() { + // console.log("doOnResize() >> " + new Date().getTime()); + canvas.width = $canvas.width(); + canvas.height = $canvas.height(); // canvas.clientHeight; + + preview.width = $preview.width(); + preview.height = $drawAreaContainer.height(); + + canvasWidth = canvas.width; + canvasHeight = canvas.height; + + console.log(" preview.width: " + preview.width + ", $preview.width(): " + $preview.width()); + + calcPreviewCanvasProperties(); + + drawCanvasTopLeftCoords[0] = drawCanvas.offset().left; + drawCanvasTopLeftCoords[1] = drawCanvas.offset().top; + + redrawDoodle(); + redrawPreview(); + +} + +function initLayouting() { + console.log("f:initLayouting()"); + + $drawAreaContainer = $(".drawareacontainer"); + + canvas.width = $canvas.width(); + canvas.height = $canvas.height(); // canvas.clientHeight; + + preview.width = $preview.width(); + preview.height = $drawAreaContainer.height(); + + canvasWidth = canvas.width; + canvasHeight = canvas.height; + + $drawAreaContainer.show(); + + // window.innerHeight + console.log("window.innerHeight: " + window.innerHeight); + console.log("window.innerWidth: " + window.innerWidth); + console.log("$drawAreaContainer.innerHeight(): " + $drawAreaContainer.innerHeight()); + console.log("$drawAreaContainer.offset().top: " + $drawAreaContainer.offset().top); + + // timeout because it SEEMS to be beneficial for initting the layout + // 2013-09-18 seems beneficial since when? + setTimeout(_startOrientationAndChangeEventListening, 1000); +} + +function _startOrientationAndChangeEventListening() { + // Initial execution if needed + + $(window).on('resize', doOnResize); + + // is it necessary to call these? Aren't they called by the above eventhandlers? + doOnResize(); +} + +/* not using this now +var $printProgressContainer = $("#printProgressContainer"); +var $progressbar = $("#progressbar"); +var $progressAmount = $(".progressAmount"); +function setPrintprogress(val) { + if (isNaN(val)) return; +// console.log("f:setPrintprogress() >> val " + val); + $progressbar.css("width", val*100 + "%"); + $progressAmount.text(Math.floor(val*100) + "%"); +} +//*/ + +function Printer() { + + Printer.WIFIBOX_DISCONNECTED_STATE = "wifibox disconnected"; + Printer.UNKNOWN_STATE = "unknown"; // happens when a printer is connection but there isn't communication yet + Printer.DISCONNECTED_STATE = "disconnected"; // printer disconnected + Printer.IDLE_STATE = "idle"; // printer found, but idle + Printer.BUFFERING_STATE = "buffering"; // printer is buffering (recieving) data, but not yet printing + Printer.PRINTING_STATE = "printing"; + Printer.STOPPING_STATE = "stopping"; // when you stop (abort) a print it prints the endcode + + Printer.ON_BEFORE_UNLOAD_MESSAGE = "You're doodle is still being send to the printer, leaving will result in a incomplete 3D print"; + + this.temperature = 0; + this.targetTemperature = 0; + this.currentLine = 0; + this.totalLines = 0; + this.bufferedLines = 0; + this.state = Printer.UNKNOWN_STATE; + this.hasControl = true; // whether this client has control access + + this.wifiboxURL; + + this.checkStatusInterval = 3000; + this.checkStatusDelay; + this.timeoutTime = 3000; + this.sendPrintPartTimeoutTime = 5000; + + this.gcode; // gcode to be printed + this.sendLength = 1500; // max amount of gcode lines per post (limited because WiFi box can't handle to much) + + this.retryDelay = 2000; // retry setTimout delay + this.retrySendPrintPartDelay; // retry setTimout instance + this.retryCheckStatusDelay; // retry setTimout instance + this.retryStopDelay; // retry setTimout instance + this.retryPreheatDelay; // retry setTimout instance + + this.maxGCodeSize = 10; // max size of gcode in MB's (estimation) + + this.stateOverruled = false; + + // Events + Printer.UPDATE = "update"; + + var self = this; + + this.init = function() { + console.log("Printer:init"); + //this.wifiboxURL = "http://" + window.location.host + "/cgi-bin/d3dapi"; + //this.wifiboxURL = "http://192.168.5.1/cgi-bin/d3dapi"; + this.wifiboxURL = wifiboxURL; + //this.wifiboxURL = "proxy5.php"; + console.log(" wifiboxURL: ",this.wifiboxURL); + + if(autoUpdate) { + this.startStatusCheckInterval(); + } + } + + this.preheat = function() { + console.log("Printer:preheat"); + var self = this; + if (communicateWithWifibox) { + $.ajax({ + url: this.wifiboxURL + "/printer/heatup", + type: "POST", + dataType: 'json', + timeout: this.timeoutTime, + success: function(data){ + console.log("Printer:preheat response: ",data); + if(data.status == "error") { + clearTimeout(self.retryPreheatDelay); + self.retryPreheatDelay = setTimeout(function() { self.preheat() },self.retryDelay); // retry after delay + } + } + }).fail(function() { + console.log("Printer:preheat: failed"); + clearTimeout(self.retryPreheatDelay); + self.retryPreheatDelay = setTimeout(function() { self.preheat() },self.retryDelay); // retry after delay + }); + } else { + console.log ("Printer >> f:preheat() >> communicateWithWifibox is false, so not executing this function"); + } + } + + this.print = function(gcode) { + console.log("Printer:print"); + console.log(" gcode total # of lines: " + gcode.length); + + message.set("Sending doodle to printer...",Message.NOTICE); + self.addLeaveWarning(); + + /*for (i = 0; i < gcode.length; i++) { + gcode[i] += " (" + i + ")"; + }*/ + + this.sendIndex = 0; + this.gcode = gcode; + + //console.log(" gcode[20]: ",gcode[20]); + var gcodeLineSize = this.byteSize(gcode[20]); + //console.log(" gcodeLineSize: ",gcodeLineSize); + var gcodeSize = gcodeLineSize*gcode.length/1024/1024; // estimate gcode size in MB's + console.log(" gcodeSize: ",gcodeSize); + + if(gcodeSize > this.maxGCodeSize) { + console.log("Error: Printer:print: gcode file is probably to big ("+gcodeSize+"MB) (max: "+this.maxGCodeSize+"MB)"); + return; + } + + //this.targetTemperature = settings["printer.temperature"]; // slight hack + + this.sendPrintPart(this.sendIndex, this.sendLength); + } + this.byteSize = function(s){ + return~-encodeURI(s).split(/%..|./).length; + } + this.sendPrintPart = function(sendIndex,sendLength) { + console.log("Printer:sendPrintPart sendIndex: " + sendIndex + "/" + this.gcode.length + ", sendLength: " + sendLength); + + var firstOne = (sendIndex == 0)? true : false; + var start = firstOne; // start printing right away + + var completed = false; + if (this.gcode.length < (sendIndex + sendLength)) { + console.log(" sending less than max sendLength (and last)"); + sendLength = this.gcode.length - sendIndex; + //lastOne = true; + completed = true; + } + var gcodePart = this.gcode.slice(sendIndex, sendIndex+sendLength); + + var postData = { gcode: gcodePart.join("\n"), first: firstOne, start: start}; + var self = this; + if (communicateWithWifibox) { + $.ajax({ + url: this.wifiboxURL + "/printer/print", + type: "POST", + data: postData, + dataType: 'json', + timeout: this.sendPrintPartTimeoutTime, + success: function(data){ + console.log("Printer:sendPrintPart response: ",data); + + if(data.status == "success") { + if (completed) { + console.log("Printer:sendPrintPart:gcode sending completed"); + this.gcode = []; + btnStop.css("display","block"); // hack + self.removeLeaveWarning(); + message.set("Doodle is send to printer...",Message.INFO,true); + //self.targetTemperature = settings["printer.temperature"]; // slight hack + } else { + // only if the state hasn't bin changed (by for example pressing stop) we send more gcode + + console.log("Printer:sendPrintPart:gcode part received (state: ",self.state,")"); + if(self.state == Printer.PRINTING_STATE || self.state == Printer.BUFFERING_STATE) { + console.log("Printer:sendPrintPart:sending next part"); + self.sendPrintPart(sendIndex + sendLength, sendLength); + } + } + } + // after we know the first gcode packed has bin received or failed + // (and the driver had time to update the printer.state) + // we start checking the status again + if(sendIndex == 0) { + self.startStatusCheckInterval(); + } + } + }).fail(function() { + console.log("Printer:sendPrintPart: failed"); + clearTimeout(self.retrySendPrintPartDelay); + self.retrySendPrintPartDelay = setTimeout(function() { + console.log("request printer:sendPrintPart failed retry"); + self.sendPrintPart(sendIndex, sendLength) + },self.retryDelay); // retry after delay + + // after we know the gcode packed has bin received or failed + // (and the driver had time to update the printer.state) + // we start checking the status again + self.startStatusCheckInterval(); + }); + } else { + console.log ("Printer >> f:sendPrintPart() >> communicateWithWifibox is false, so not executing this function"); + } + } + + this.stop = function() { + console.log("Printer:stop"); + var self = this; + if (communicateWithWifibox) { + $.ajax({ + url: this.wifiboxURL + "/printer/stop", + type: "POST", + dataType: 'json', + timeout: this.timeoutTime, + success: function(data){ + console.log("Printer:stop response: ", data); + + // after we know the stop has bin received or failed + // (and the driver had time to update the printer.state) + // we start checking the status again + self.startStatusCheckInterval(); + } + }).fail(function() { + console.log("Printer:stop: failed"); + clearTimeout(self.retryStopDelay); + self.retryStopDelay = setTimeout(function() { self.stop() },self.retryDelay); // retry after delay + + // after we know the stop has bin received or failed + // (and the driver had time to update the printer.state) + // we start checking the status again + self.startStatusCheckInterval(); + }); + } else { + console.log ("Printer >> f:communicateWithWifibox() >> communicateWithWifibox is false, so not executing this function"); + } + } + this.startStatusCheckInterval = function() { + console.log("Printer:startStatusCheckInterval"); + self.checkStatus(); + clearTimeout(self.checkStatusDelay); + clearTimeout(self.retryCheckStatusDelay); + self.checkStatusDelay = setTimeout(function() { self.checkStatus() }, self.checkStatusInterval); + } + this.stopStatusCheckInterval = function() { + console.log("Printer:stopStatusCheckInterval"); + clearTimeout(self.checkStatusDelay); + clearTimeout(self.retryCheckStatusDelay); + } + this.checkStatus = function() { + console.log("Printer:checkStatus"); + this.stateOverruled = false; + //console.log(" stateOverruled: ",this.stateOverruled); + var self = this; + if (communicateWithWifibox) { + $.ajax({ + url: this.wifiboxURL + "/info/status", + dataType: 'json', + timeout: this.timeoutTime, + success: function(response){ + //console.log(" Printer:status: ",response.data.state); //," response: ",response); + + self.handleStatusUpdate(response); + + clearTimeout(self.checkStatusDelay); + clearTimeout(self.retryCheckStatusDelay); + self.checkStatusDelay = setTimeout(function() { self.checkStatus() }, self.checkStatusInterval); + } + }).fail(function() { + console.log("Printer:checkStatus: failed"); + self.state = Printer.WIFIBOX_DISCONNECTED_STATE; + clearTimeout(self.checkStatusDelay); + clearTimeout(self.retryCheckStatusDelay); + self.retryCheckStatusDelay = setTimeout(function() { self.checkStatus() },self.retryDelay); // retry after delay + $(document).trigger(Printer.UPDATE); + }); + } else { + console.log ("Printer >> f:checkStatus() >> communicateWithWifibox is false, so not executing this function"); + } + } + this.handleStatusUpdate = function(response) { + console.log("Printer:handleStatusUpdate response: ",response); + var data = response.data; + if(response.status != "success") { + self.state = Printer.UNKNOWN_STATE; + } else { + // state + //console.log(" stateOverruled: ",this.stateOverruled); + if(!this.stateOverruled) { + self.state = data.state; + //console.log(" state > ",self.state); + } + + // temperature + self.temperature = data.hotend; + self.targetTemperature = data.hotend_target; + + // progress + self.currentLine = data.current_line; + self.totalLines = data.total_lines; + self.bufferedLines = data.buffered_lines + + // access + self.hasControl = data.has_control; + + if(self.state == Printer.PRINTING_STATE || self.state == Printer.STOPPING_STATE) { + console.log("progress: ",self.currentLine+"/"+self.totalLines+" ("+self.bufferedLines+") ("+self.state+")"); + } + } + $(document).trigger(Printer.UPDATE); + } + this.overruleState = function(newState) { + this.stateOverruled = true; + console.log(" stateOverruled: ",this.stateOverruled); + + self.state = newState; + + $(document).trigger(Printer.UPDATE); + + this.stopStatusCheckInterval(); + } + + this.removeLeaveWarning = function() { + window.onbeforeunload = null; + } + this.addLeaveWarning = function() { + window.onbeforeunload = function() { + return Printer.ON_BEFORE_UNLOAD_MESSAGE; + }; + } +} +function Progressbar() { + this.currProgress = 0; // default val + + this.progressbarFGImg = new Image(); + this.progressbarFGImgSrc = "img/progress_fg.png"; + this.progressbarBGImg = new Image(); + this.progressbarBGImgSrc = "img/progress_bg.png"; + + this.progressWidth= 93; + this.progressHeight = 82; + + this.quartPI = .5 * Math.PI; + this.twoPI = 2 * Math.PI; + + + this.$canvas; + this.canvas; + this.context; + this.$container; + + this.isInitted = false; + + this.enabled = true; + + this.init = function(targCanvas, targCanvasContainer) { + console.log("Thermometer.init()"); + + this.$container = targCanvasContainer; + + this.$canvas = targCanvas; + this.canvas = this.$canvas[0]; + this.context = this.canvas.getContext('2d'); + + + var self = this; + this.progressbarBGImg.onload = function() { + console.log("progressbarBGImg img loaded"); + // self.isInitted = true; + // self.update(self.currentTemperature, self.targetTemperature); + + self.progressbarFGImg.onload = function() { + console.log("progressbarFGImg img loaded"); + self.isInitted = true; + self.update(0, 100); + }; + self.progressbarFGImg.src = self.progressbarFGImgSrc; + }; + this.progressbarBGImg.src = this.progressbarBGImgSrc; + } + + this.update = function(part, total) { + //console.log("Progressbar.update(" + part + "," + total + ")"); + + var pct = part / total; + if (this.isInitted) { + if (part == undefined) part = 0; + if (total== undefined) total = 100; // prevent divide by zero + + var progress = part / total; + progress = Math.min(progress, 1.0); + progress = Math.max(progress, 0); + //console.log("progressbar >> f:update() >> progress: " + progress); + + // clear + this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); + + this.context.drawImage(this.progressbarBGImg, 0, 0); + + this.context.font = "7pt sans-serif"; + + // draw the progressbar foreground's clipping path + this.context.save(); + this.context.beginPath(); + this.context.moveTo(45, 45); + this.context.lineTo(45, 0); + this.context.arc(45, 45, 45, -this.quartPI, -this.quartPI + (progress * (this.twoPI)), false); // circle bottom of thermometer + this.context.lineTo(45, 45); + this.context.clip(); + + this.context.drawImage(this.progressbarFGImg, 0, 0); + this.context.restore(); + + if (debugMode) { + this.context.fillStyle = '#222'; + this.context.strokeStyle = '#fff'; + this.context.lineWidth = 3; + this.context.textAlign="center"; + this.context.strokeText(part + " / " + total, 45, 45, 90); + this.context.fillText(part + " / " + total, 45, 45, 90); + } + + } else { + console.log("Progressbar.setTemperature() -> thermometer not initialized!"); + } + } + this.show = function() { + this.$container.addClass("progressbarAppear"); + // this.$container.show(); + this.enabled = true; + } + this.hide = function() { + this.$container.removeClass("progressbarAppear"); + // this.$container.hide(); + this.enabled = false; + } +} + +// TODO assess if this var is still necessary +var $displayThermometer = $("#thermometerContainer"); + + +//TODO 2013-09-18 allow displaying temperatures HIGHER than the targTemp (it's now being capped at targTemp). +function Thermometer() { + this.currentTemperature = 0; // default val + this.targetTemperature = 0; // default val + + this.thermoOverlayImg = new Image(); + this.thermoOverlayImgSrc = "img/thermometer_fg_overlay.png"; // ../img/thermometer_fg_overlay.png + + this.thermoWidth= 40; + this.thermoHeight = 100; + + this.$canvas; + this.canvas; + this.context; + this.$container; + + this.isInitted = false; + + this.enabled = true; + + this.thermoColors = [ + [50, 200, 244], // 'cold' + [244, 190, 10], // 'warming up' + [244, 50, 50] // 'ready / hot' + ]; + + this.init = function(targCanvas, targCanvasContainer) { + console.log("Thermometer.init()"); + + this.$container = targCanvasContainer; + + this.$canvas = targCanvas; + this.canvas = this.$canvas[0]; + this.context = this.canvas.getContext('2d'); + + + var self = this; + this.thermoOverlayImg.onload = function() { + console.log("canvasThermoOverlay img loaded"); + self.isInitted = true; + self.update(self.currentTemperature, self.targetTemperature); + }; + this.thermoOverlayImg.src = this.thermoOverlayImgSrc; + } + + this.update = function(curr, targ) { + // console.log("Thermometer.update(" + curr + "," + targ + ")"); + + if (this.isInitted) { + if(!this.enabled) return; + if (curr == undefined) curr = 0; + if (targ== undefined) targ = 180; // prevent divide by zero + + var progress = curr / targ; + + progress = Math.min(progress, 1.0); + progress = Math.max(progress, 0); + + var h = this.thermoHeight; // 94 // px + var paddingUnder = 15; // how far is beginpoint from bottom of thermometer + var paddingAbove = 25; // how far is endpoint from top of thermometer + var endPoint = h * .8; + var p = Math.floor((h - paddingUnder - paddingAbove) * progress); // % + // var tempHeight = + + var currColor = this.thermoColors[0]; + if (progress > 0.98) { + currColor = this.thermoColors[2]; + } else if (progress > 0.25) { + currColor = this.thermoColors[1]; + } + + // clear + this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); + this.context.font = "10pt sans-serif"; + + // draw the thermometer clipping path + this.context.save(); + this.context.beginPath(); + this.context.arc(40, 80, 16, 0, 2 * Math.PI, false); // circle bottom of thermometer + this.context.arc(40, 10, 4, 0, 2 * Math.PI, false); // circle at top of thermometer tube + this.context.rect(36, 11, 8, 70); // thermometer tube + this.context.fillStyle = '#fff'; + this.context.fill(); + this.context.clip(); + + // draw rectangle which represents temperature + // rect will be clipped by the thermometer outlines + this.context.beginPath(); + this.context.rect(20, h - paddingUnder - p, 60, p + paddingUnder); + //console.log(" currColor: " + currColor); + //todo Math.floor?? + this.context.fillStyle = "rgb(" + currColor[0] + "," + currColor[1] + "," + currColor[2] + ")"; + this.context.fill(); + this.context.restore(); + + // additional text labels + this.context.save(); + this.context.beginPath(); + this.context.moveTo(32, paddingAbove); + this.context.lineTo(52, paddingAbove); + this.context.lineWidth = 2; + this.context.strokeStyle = '#000'; + this.context.stroke(); + this.context.fillStyle = '#000'; + this.context.textAlign = "left"; + this.context.textBaseline = "middle"; + this.context.fillText(targ + "°", 55, paddingAbove); + this.context.restore(); + + // the thermometer outline png + this.context.drawImage(this.thermoOverlayImg, 20, 0); + + // text + this.context.fillStyle = '#000'; + this.context.textAlign="center"; + this.context.fillText(curr + "°", 40, h + paddingUnder); + } else { + console.log("Thermometer.setTemperature() -> thermometer not initialized!"); + } + } + this.show = function() { + this.$container.addClass("thermometerAppear"); +// $("#progressbarCanvasContainer").addClass("thermometerAppear"); +// this.$container.show(); + this.enabled = true; + } + this.hide = function() { + this.$container.removeClass("thermometerAppear"); +// $("#progressbarCanvasContainer").removeClass("thermometerAppear"); +// this.$container.hide(); + this.enabled = false; + } +} + + +// http://stackoverflow.com/questions/1403888/get-url-parameter-with-jquery +function getURLParameter(name) { + return decodeURI( + (new RegExp('[&?]'+name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1] + ); +} + +var sidebarLeft; +var sidebarRight; + +function initSidebars() { + console.log("f:initSidebars()"); + + sidebarLeft = new SideBar(); + sidebarLeft.init(".leftpanel", "hideleft", function() { + $(".leftpanel").show(); + }); + + sidebarRight = new SideBar(); + sidebarRight.init(".rightpanel", "hideright", function() { + $(".rightpanel").show(); + }); +} + +function SideBar() { + this.initted = false; + this.$contentTarg = undefined; + this.$sideBtn = undefined; + this.contentHidden = false; + this.hideClass = ""; + + this.init = function(targ, hideClass, callback) { + console.log("SideBar >> f:init >> targ: " , $(targ) , ", hideClass: " + hideClass); + this.$contentTarg = $(targ); + this.hideClass = hideClass; + + this.$contentTarg.addClass(this.hideClass); + this.contentHidden = true; + + this.$contentTarg.append("
"); + this.$sideBtn = $(targ +" .sidebutton"); + var self = this; + + this.$sideBtn.on('click', function(e) { + console.log("sidebutton"); + self.toggleShowHide(); + }); + + this.initted = true; + + callback(); + } + + this.toggleShowHide = function() { + if (this.contentHidden) { + this.contentHidden = false; + this.$contentTarg.removeClass(this.hideClass); + // self.$sideBtn.addClass("sidebuttonin"); + this.$sideBtn.addClass("sidebuttonin"); + } else { + this.contentHidden = true; + this.$contentTarg.addClass(this.hideClass); + // self.$sideBtn.removeClass("sidebuttonin"); + this.$sideBtn.removeClass("sidebuttonin"); + + } + } +} + + +function Message() { + + Message.ERROR = "error"; + Message.WARNING = "warning"; + Message.NOTICE = "notice"; + Message.INFO = "info"; + + this.mode = ""; + + this.$element; + + var self = this; + var autoHideDelay = 2000; + var autohideTimeout; + + this.init = function($element) { + console.log("Message:init"); + + this.$element = $element; + console.log("$element: ",$element); + } + + this.set = function(text,mode,autoHide) { + console.log("Message:set: ",text,mode,autoHide); + self.hide(function() { + self.show(); + self.clear(); + + self.$element.text(text); + self.$element.addClass(mode); + self.show(); + + self.mode = mode; + + clearTimeout(autohideTimeout); + if(autoHide) { + autohideTimeout = setTimeout(function(){ self.hide()},autoHideDelay); + } + }); + } + this.clear = function($element) { + this.$element.text(""); + this.$element.removeClass(this.mode); + } + + this.show = function() { + this.$element.fadeIn(200); + } + this.hide = function(complete) { + this.$element.fadeOut(200,complete); + } +} +var debugMode = false; // debug mode +var sendPrintCommands = true; // if Doodle3d should send print commands to the 3d printer +var communicateWithWifibox = true; // if Doodle3d should try interfacing with the wifibox (in case one is not connected) +var wifiboxIsRemote = false; // when you want to run the client on a computer and have it remotely connect to the wifibox +var autoUpdate = true; // auto retrieve updates about temperature and progress from printer + +var printer = new Printer(); +var progressbar = new Progressbar(); +var thermometer = new Thermometer(); +var settingsWindow = new SettingsWindow(); +var message = new Message(); + +var firstTimeSettingsLoaded = true; + +var wifiboxURL; // Using the uhttpd lua handler as default, because of better performance +var wifiboxCGIBinURL; // CGI-bin, for some network stuff, where it needs to restart the webserver for example + +var $drawAreaContainer, $doodleCanvas, doodleCanvas, doodleCanvasContext, $previewContainer; + +var showhideInterval; +var showOrHide = false; + +$(function() { + console.log("ready"); + + + //TODO give this a more logical place in code + + if (getURLParameter("d") != "null") debugMode = (getURLParameter("d") == "1"); + if (getURLParameter("p") != "null") sendPrintCommands = (getURLParameter("p") == "1"); + if (getURLParameter("c") != "null") communicateWithWifibox = (getURLParameter("c") == "1"); + if (getURLParameter("r") != "null") wifiboxIsRemote = (getURLParameter("r") == "1"); + if (getURLParameter("u") != "null") autoUpdate = (getURLParameter("u") == "1"); + + if (wifiboxIsRemote) { + wifiboxURL = "http://192.168.5.1/d3dapi"; + wifiboxCGIBinURL = "http://192.168.5.1/cgi-bin/d3dapi"; + } else { + wifiboxURL = "http://" + window.location.host + "/d3dapi"; + wifiboxCGIBinURL = "http://" + window.location.host + "/cgi-bin/d3dapi"; + } + + if (!communicateWithWifibox) { + sendPrintCommands = false; // 'communicateWithWifibox = false' implies this + } + console.log("debugMode: " + debugMode); + console.log("sendPrintCommands: " + sendPrintCommands); + console.log("communicateWithWifibox: " + communicateWithWifibox); + console.log("wifiboxIsRemote: " + wifiboxIsRemote); + console.log("wifibox URL: " + wifiboxURL); + + initDoodleDrawing(); + initPreviewRendering(); + initLayouting(); + initSidebars(); + initButtonBehavior(); + initVerticalShapes(); + + thermometer.init($("#thermometerCanvas"), $("#thermometerContainer")); + progressbar.init($("#progressbarCanvas"), $("#progressbarCanvasContainer")); + + message.init($("#message")); + + printer.init(); + $(document).on(Printer.UPDATE,update); + + settingsWindow.init(wifiboxURL,wifiboxCGIBinURL); + $(document).on(SettingsWindow.SETTINGS_LOADED, settingsLoaded); + + if(debugMode) { + console.log("debug mode is true"); + $("body").css("overflow", "auto"); + $("#debug_textArea").css("display", "block"); + $("#preview_tmp").css("display", "block"); + + $("#debug_display").css("display", "block"); + + // show and hide the progressguage and thermometer + showhideInterval = setInterval(showOrHideThermo, 2500); + +// $("#debugContainer").css("display", "block"); + + /* TEMP CODE!! -> artificially populates the startgcode and endgcode textareas in the settings window */ + // todo remove this temporary code... + /* + setTimeout(function() { + $("#startgcode").text(""); + $("#startgcode").append("G21 (mm) \n"); + $("#startgcode").append("G91 (relative) \n"); + $("#startgcode").append("G28 X0 Y0 Z0 (physical home) \n"); + $("#startgcode").append("M104 S230 (temperature) \n"); + $("#startgcode").append("G1 E10 F250 (flow) \n"); + $("#startgcode").append("G92 X-100 Y-100 Z0 E10 \n"); + $("#startgcode").append("G1 Z3 F5000 (prevent diagonal line) \n"); + $("#startgcode").append("G90 (absolute) \n"); + $("#startgcode").append("M106 (fan on)"); + console.log("$('#startgcode'): " + $("#startgcode").val()); + + $("#endgcode").text(""); + $("#endgcode").append("G1 X-100 Y-100 F15000 (fast homing) \n"); + $("#endgcode").append("M107 \n"); + $("#endgcode").append("M84 (disable axes) \n"); + console.log("$('#endgcode'): " + $("#endgcode").val()); + }, 1000); + //*/ + } +}); + +function showOrHideThermo() { + console.log("f:showOrHideThermo()"); + if (showOrHide) { + thermometer.hide(); + progressbar.hide(); + } else { + thermometer.show(); + progressbar.show(); + + } + showOrHide = !showOrHide; +} + +function settingsLoaded() { + console.log("settingsLoaded"); + console.log("autoHeatup: ",settings["printer.heatup.enabled"]); + if(settings["printer.heatup.enabled"]) { + if(firstTimeSettingsLoaded) { + printer.preheat(); + firstTimeSettingsLoaded = false; + } + } +} + +function setDebugText(text) { + $("#debug_display").text(text); +} \ No newline at end of file diff --git a/www/js/doodle3d-client.min.js b/www/js/doodle3d-client.min.js new file mode 100644 index 0000000..054e1db --- /dev/null +++ b/www/js/doodle3d-client.min.js @@ -0,0 +1,2 @@ +function SettingsWindow(){this.wifiboxURL,this.wifiboxCGIBinURL,this.window,this.form,this.timeoutTime=3e3,this.retryDelay=2e3,this.retryRetrieveNetworkStatusDelayTime=1e3,this.retryLoadSettingsDelay,this.retrySaveSettingsDelay,this.retryRetrieveNetworkStatusDelay,this.apFieldSet,this.clientFieldSet,this.networks,this.currentNetwork,this.selectedNetwork,this.currentLocalIP="",this.clientModeState=SettingsWindow.NOT_CONNECTED,this.currentAP,this.apModeState=SettingsWindow.NO_AP,this.retrieveNetworkStatusDelay,this.retrieveNetworkStatusDelayTime=1e3,SettingsWindow.SETTINGS_LOADED="settingsLoaded",SettingsWindow.NOT_CONNECTED="not connected",SettingsWindow.CONNECTED="connected",SettingsWindow.CONNECTING="connecting",SettingsWindow.CONNECTING_FAILED="connecting failed",SettingsWindow.NO_AP="no ap",SettingsWindow.AP="ap",SettingsWindow.CREATING_AP="creating ap",SettingsWindow.API_CONNECTING_FAILED=-1,SettingsWindow.API_NOT_CONNECTED=0,SettingsWindow.API_CONNECTING=1,SettingsWindow.API_CONNECTED=2,SettingsWindow.API_CREATING=3,SettingsWindow.API_CREATED=4,SettingsWindow.NETWORK_MODE_NEITHER="neither",SettingsWindow.NETWORK_MODE_CLIENT="clientMode",SettingsWindow.NETWORK_MODE_ACCESS_POINT="accessPointMode",this.networkMode=SettingsWindow.NETWORK_MODE_NEITHER,this.updatePanel=new UpdatePanel;var a=this;this.init=function(b,c){this.wifiboxURL=b,this.wifiboxCGIBinURL=c,this.window=$("#settings"),this.window.find(".btnOK").click(this.submitwindow),this.window.find(".settingsContainer").load("settings.html",function(){console.log("Settings:finished loading settings.html, now loading settings..."),a.form=a.window.find("form"),a.form.submit(function(b){a.submitwindow(b)}),a.loadSettings();var c=a.form.find("label[for='ap']"),d=a.form.find("label[for='client']"),e=a.form.find("#refreshNetworks"),f=a.form.find("#connectToNetwork"),g=a.form.find("#createAP"),h=a.form.find("#network");a.apFieldSet=a.form.find("#apSettings"),a.clientFieldSet=a.form.find("#clientSettings"),c.on("touchstart mousedown",a.showAPSettings),d.on("touchstart mousedown",a.showClientSettings),e.on("touchstart mousedown",a.refreshNetworks),f.on("touchstart mousedown",a.connectToNetwork),g.on("touchstart mousedown",a.createAP),h.change(a.networkSelectorChanged);var i=a.form.find("#updatePanel");a.updatePanel.init(b,i)})},this.submitwindow=function(b){b.preventDefault(),b.stopPropagation(),a.saveSettings(a.readForm(),function(){a.hideSettings()}),clearTimeout(a.retryRetrieveNetworkStatusDelay)},this.showSettings=function(){console.log("f:showSettings()"),this.loadSettings(),$("#contentOverlay").fadeIn(375,function(){document.body.removeEventListener("touchmove",prevent,!1)})},this.hideSettings=function(){$("#contentOverlay").fadeOut(375,function(){document.body.addEventListener("touchmove",prevent,!1)})},this.loadSettings=function(){return communicateWithWifibox?(console.log("Settings:loadSettings() >> getting new data..."),$.ajax({url:this.wifiboxURL+"/config/all",dataType:"json",timeout:this.timeoutTime,success:function(b){console.log("Settings:loadSettings response: ",b),settings=b.data,console.log(" settings: ",settings),a.fillForm(),$(document).trigger(SettingsWindow.SETTINGS_LOADED)}}).fail(function(){console.log("Settings:loadSettings: failed"),clearTimeout(a.retryLoadSettingsDelay),a.retryLoadSettingsDelay=setTimeout(function(){a.loadSettings()},a.retryDelay)}),this.refreshNetworks(),this.retrieveNetworkStatus(!1),void 0):(console.log(" communicateWithWifibox is false: settings aren't being loaded from wifibox..."),void 0)},this.fillForm=function(){console.log("SettingsWindow:fillForm");var a=this.form.find("select");a.each(function(a,b){var b=$(b);b.val(settings[b.attr("name")])});var b=this.form.find("input");b.each(function(a,b){var b=$(b);switch(b.attr("type")){case"text":case"number":b.val(settings[b.attr("name")]);break;case"checkbox":b.prop("checked",settings[b.attr("name")])}});var c=this.form.find("textarea");c.each(function(a,b){var b=$(b),c=settings[b.attr("name")];b.val(c)})},this.saveSettings=function(b,c){settings=b,communicateWithWifibox&&$.ajax({url:this.wifiboxURL+"/config",type:"POST",data:b,dataType:"json",timeout:this.timeoutTime,success:function(b){if(console.log("Settings:saveSettings response: ",b),"error"==b.status)clearTimeout(a.retrySaveSettingsDelay),a.retrySaveSettingsDelay=setTimeout(function(){a.saveSettings(settings)},a.retryDelay);else{var d=b.data,e=d.validation;a.clearValidationErrors();var f=!0;$.each(e,function(b,c){"ok"!=c&&(console.log("ERROR: setting '"+b+"' not successfully set. Message: "+c),a.displayValidationError(b,c),f=!1)}),settings.substituted_ssid=d.substituted_ssid,c&&f&&c()}}}).fail(function(){console.log("Settings:saveSettings: failed"),clearTimeout(a.retrySaveSettingsDelay),a.retrySaveSettingsDelay=setTimeout(function(){a.saveSettings(settings)},a.retryDelay)})},this.displayValidationError=function(b,c){var d=a.form.find("[name|='"+b+"']");console.log("formElement: ",d),d.addClass("error");var e="

"+c+"

";d.after(e)},this.clearValidationErrors=function(){var b=a.form.find(".error");b.each(function(a,b){$(b).removeClass("error")})},this.readForm=function(){var b={},c=a.form.find("select");c.each(function(a,c){var c=$(c);"network.client.network"!=c.attr("name")&&(b[c.attr("name")]=c.val())});var d=a.form.find("input");d.each(function(a,c){var c=$(c);switch(c.attr("type")){case"text":case"number":b[c.attr("name")]=c.val();break;case"checkbox":b[c.attr("name")]=c.prop("checked")}});var e=a.form.find("textarea");return e.each(function(a,c){var c=$(c);b[c.attr("name")]=c.val()}),b},this.showAPSettings=function(){a.apFieldSet.show(),a.clientFieldSet.hide()},this.showClientSettings=function(){a.clientFieldSet.show(),a.apFieldSet.hide()},this.refreshNetworks=function(){console.log("Settings:refreshNetworks"),communicateWithWifibox&&$.ajax({url:a.wifiboxURL+"/network/scan",type:"GET",dataType:"json",timeout:a.timeoutTime,success:function(b){if(console.log("Settings:refreshNetworks response: ",b),"error"==b.status);else{var c=b.data.networks;a.networks={};var d=!1,e=a.form.find("#network");e.empty(),e.append($("").val(SettingsWindow.NOT_CONNECTED).html("not connected")),$.each(c,function(b,c){c.ssid==a.currentNetwork&&(d=!0),e.append($("").val(c.ssid).html(c.ssid)),a.networks[c.ssid]=c}),d&&(e.val(a.currentNetwork),a.selectNetwork(a.currentNetwork))}}}).fail(function(){})},this.retrieveNetworkStatus=function(b){communicateWithWifibox&&$.ajax({url:a.wifiboxURL+"/network/status",type:"GET",dataType:"json",timeout:a.timeoutTime,success:function(c){if(console.log("Settings:retrieveNetworkStatus response: ",c),"error"==c.status);else{var d=c.data;switch("string"==typeof d.status&&(d.status=parseInt(d.status)),d.status){case SettingsWindow.API_NOT_CONNECTED:a.apFieldSet.show(),a.clientFieldSet.show(),a.networkMode=SettingsWindow.NETWORK_MODE_NEITHER;break;case SettingsWindow.API_CONNECTING_FAILED:case SettingsWindow.API_CONNECTING:case SettingsWindow.API_CONNECTED:if(a.form.find("#client").prop("checked",!0),a.apFieldSet.hide(),a.clientFieldSet.show(),d.status==SettingsWindow.API_CONNECTED){var e=a.form.find("#network");e.val(d.ssid),a.currentNetwork=d.ssid,a.currentLocalIP=d.localip,a.selectNetwork(d.ssid)}else a.currentLocalIP="";a.networkMode=SettingsWindow.NETWORK_MODE_CLIENT;break;case SettingsWindow.API_CREATING:case SettingsWindow.API_CREATED:a.form.find("#ap").prop("checked",!0),a.apFieldSet.show(),a.clientFieldSet.hide(),a.currentNetwork=void 0,a.selectNetwork(SettingsWindow.NOT_CONNECTED);var e=a.form.find("#network");e.val(SettingsWindow.NOT_CONNECTED),d.ssid&&d.status==SettingsWindow.API_CREATED&&(a.currentAP=d.ssid),a.networkMode=SettingsWindow.NETWORK_MODE_ACCESS_POINT}switch(a.updatePanel.setNetworkMode(a.networkMode),d.status){case SettingsWindow.API_CONNECTING_FAILED:a.setClientModeState(SettingsWindow.CONNECTING_FAILED,d.statusMessage),a.setAPModeState(SettingsWindow.NO_AP,"");break;case SettingsWindow.API_NOT_CONNECTED:a.setClientModeState(SettingsWindow.NOT_CONNECTED,""),a.setAPModeState(SettingsWindow.NO_AP,"");break;case SettingsWindow.API_CONNECTING:a.setClientModeState(SettingsWindow.CONNECTING,""),a.setAPModeState(SettingsWindow.NO_AP,"");break;case SettingsWindow.API_CONNECTED:a.setClientModeState(SettingsWindow.CONNECTED,""),a.setAPModeState(SettingsWindow.NO_AP,"");break;case SettingsWindow.API_CREATING:a.setClientModeState(SettingsWindow.NOT_CONNECTED,""),a.setAPModeState(SettingsWindow.CREATING_AP,"");break;case SettingsWindow.API_CREATED:a.setClientModeState(SettingsWindow.NOT_CONNECTED,""),a.setAPModeState(SettingsWindow.AP,"")}if(b)switch(d.status){case SettingsWindow.API_CONNECTING:case SettingsWindow.API_CREATING:clearTimeout(a.retryRetrieveNetworkStatusDelay),a.retryRetrieveNetworkStatusDelay=setTimeout(function(){a.retrieveNetworkStatus(b)},a.retryRetrieveNetworkStatusDelayTime)}}}}).fail(function(){console.log("Settings:retrieveNetworkStatus: failed"),clearTimeout(a.retryRetrieveNetworkStatusDelay),a.retryRetrieveNetworkStatusDelay=setTimeout(function(){a.retrieveNetworkStatus(b)},a.retryDelay)})},this.networkSelectorChanged=function(){var b=$(this).find("option:selected");a.selectNetwork(b.val())},this.selectNetwork=function(a){if(console.log("select network: ",a),""!=a)if(console.log(" checked"),this.selectedNetwork=a,void 0==this.networks||a==SettingsWindow.NOT_CONNECTED)this.hideWiFiPassword();else{var b=this.networks[a];"none"==b.encryption?this.hideWiFiPassword():this.showWiFiPassword(),this.form.find("#password").val("")}},this.showWiFiPassword=function(){this.form.find("#passwordLabel").show(),this.form.find("#password").show()},this.hideWiFiPassword=function(){this.form.find("#passwordLabel").hide(),this.form.find("#password").hide()},this.setClientModeState=function(b,c){var d=this.form.find("#clientModeState"),e=a.form.find("#connectToNetwork");switch(b){case SettingsWindow.NOT_CONNECTED:e.removeAttr("disabled"),d.html("Not connected");break;case SettingsWindow.CONNECTED:e.removeAttr("disabled");var f="Connected to: "+this.currentNetwork+".";if(void 0!=this.currentLocalIP&&""!=this.currentLocalIP){var g=""+this.currentLocalIP+"";f+=" (IP: "+g+")"}d.html(f);break;case SettingsWindow.CONNECTING:e.attr("disabled",!0),d.html("Connecting... Reconnect by connecting your device to "+this.selectedNetwork+" and going to connect.doodle3d.com");break;case SettingsWindow.CONNECTING_FAILED:e.removeAttr("disabled"),d.html(c)}this.clientModeState=b},this.setAPModeState=function(a){var b=this.form.find("#apModeState"),c=this.form.find("#createAP");switch(a){case SettingsWindow.NO_AP:c.removeAttr("disabled"),b.html("Not currently a access point");break;case SettingsWindow.AP:c.removeAttr("disabled"),b.html("Is access point: "+this.currentAP+"");break;case SettingsWindow.CREATING_AP:c.attr("disabled",!0),b.html("Creating access point... Reconnect by connecting your device to "+settings.substituted_ssid+" and going to draw.doodle3d.com")}this.apModeState=a},this.connectToNetwork=function(){if(console.log("connectToNetwork"),void 0!=a.selectedNetwork){var b={ssid:a.selectedNetwork,phrase:a.form.find("#password").val(),recreate:!0};console.log(" postData: ",b),communicateWithWifibox&&a.saveSettings(a.readForm(),function(){$.ajax({url:a.wifiboxCGIBinURL+"/network/associate",type:"POST",data:b,dataType:"json",timeout:a.timeoutTime,success:function(a){console.log("Settings:connectToNetwork response: ",a)}}).fail(function(){console.log("Settings:connectToNetwork: timeout (normal behavior)")})}),a.setClientModeState(SettingsWindow.CONNECTING,""),clearTimeout(a.retrieveNetworkStatusDelay),a.retrieveNetworkStatusDelay=setTimeout(function(){a.retrieveNetworkStatus(!0)},a.retrieveNetworkStatusDelayTime)}},this.createAP=function(){console.log("createAP"),communicateWithWifibox&&a.saveSettings(a.readForm(),function(){a.setAPModeState(SettingsWindow.CREATING_AP),$.ajax({url:a.wifiboxCGIBinURL+"/network/openap",type:"POST",dataType:"json",timeout:a.timeoutTime,success:function(a){console.log("Settings:createAP response: ",a)}}).fail(function(){console.log("Settings:createAP: timeout (normal behavior)")}),a.setAPModeState(SettingsWindow.CREATING_AP,""),clearTimeout(a.retrieveNetworkStatusDelay),a.retrieveNetworkStatusDelay=setTimeout(function(){a.retrieveNetworkStatus(!0)},a.retrieveNetworkStatusDelayTime)})}}function UpdatePanel(){this.wifiboxURL,this.element,this.statusCheckInterval=1e3,this.statusCheckDelayer,this.installedDelay=6e4,this.installedDelayer,this.retryDelay=1e3,this.retryDelayer,this.canUpdate=!1,this.currentVersion="",this.newestVersion,this.progress,this.imageSize,UpdatePanel.NONE=1,UpdatePanel.DOWNLOADING=2,UpdatePanel.DOWNLOAD_FAILED=3,UpdatePanel.IMAGE_READY=4,UpdatePanel.INSTALLING=5,UpdatePanel.INSTALLED=6,UpdatePanel.INSTALL_FAILED=7,this.state,this.stateText="",this.networkMode;var a=this;this.init=function(a,b){this.wifiboxURL=a,this.element=b,this.btnUpdate=this.element.find("#update"),this.statusDisplay=this.element.find("#updateState"),this.infoDisplay=this.element.find("#updateInfo"),this.btnUpdate.click(this.update),this.checkStatus(!1)},this.update=function(){console.log("UpdatePanel:update"),a.downloadUpdate()},this.downloadUpdate=function(){console.log("UpdatePanel:downloadUpdate"),$.ajax({url:a.wifiboxURL+"/update/download",type:"POST",dataType:"json",success:function(a){console.log("UpdatePanel:downloadUpdate response: ",a)}}).fail(function(){console.log("UpdatePanel:downloadUpdate: failed")}),a.setState(UpdatePanel.DOWNLOADING),a.startCheckingStatus()},this.installUpdate=function(){console.log("UpdatePanel:installUpdate"),a.stopCheckingStatus(),$.ajax({url:a.wifiboxURL+"/update/install",type:"POST",dataType:"json",success:function(a){console.log("UpdatePanel:installUpdate response: ",a)}}).fail(function(){console.log("UpdatePanel:installUpdate: no respons (there shouldn't be)")}),a.setState(UpdatePanel.INSTALLING),clearTimeout(a.installedDelayer),a.installedDelayer=setTimeout(function(){a.setState(UpdatePanel.INSTALLED)},a.installedDelay)},this.startCheckingStatus=function(){clearTimeout(a.statusCheckDelayer),clearTimeout(a.retryDelayer),a.statusCheckDelayer=setTimeout(function(){a.checkStatus(!0)},a.statusCheckInterval)},this.stopCheckingStatus=function(){clearTimeout(a.statusCheckDelayer),clearTimeout(a.retryDelayer)},this.checkStatus=function(b){communicateWithWifibox&&$.ajax({url:a.wifiboxURL+"/update/status",type:"GET",dataType:"json",success:function(c){if(console.log("UpdatePanel:checkStatus response: ",c),b)switch(a.state){case UpdatePanel.DOWNLOADING:case UpdatePanel.INSTALLING:clearTimeout(a.statusCheckDelayer),a.statusCheckDelayer=setTimeout(function(){a.checkStatus(b)},a.statusCheckInterval)}if("error"!=c.status){var d=c.data;a.handleStatusData(d)}}}).fail(function(){b&&(clearTimeout(a.retryDelayer),a.retryDelayer=setTimeout(function(){a.checkStatus(b)},a.retryDelay))})},this.handleStatusData=function(b){switch(a.canUpdate=b.can_update,(a.currentVersion!=b.current_version||a.newestVersion!=b.newest_version)&&(a.currentVersion=b.current_version,a.newestVersion=b.newest_version,a.updateInfoDisplay()),a.stateText=b.state_text,a.progress=b.progress,a.imageSize=b.image_size,a.setState(b.state_code),this.state){case UpdatePanel.IMAGE_READY:a.installUpdate()}},this.setState=function(b){if(this.state!=b){if(console.log("UpdatePanel:setState: ",this.state," > ",b,"(",this.stateText,") (networkMode: ",a.networkMode,") (newestVersion: ",a.newestVersion,")"),this.state=b,void 0!=a.newestVersion)switch(this.state){case UpdatePanel.NONE:case UpdatePanel.DOWNLOAD_FAILED:case UpdatePanel.INSTALL_FAILED:a.canUpdate?a.btnUpdate.removeAttr("disabled"):a.btnUpdate.attr("disabled",!0);break;default:a.btnUpdate.attr("disabled",!0)}else a.btnUpdate.attr("disabled",!0);this.updateStatusDisplay()}},this.updateStatusDisplay=function(){var b="";if(void 0!=a.newestVersion)switch(this.state){case UpdatePanel.NONE:b=a.canUpdate?"Update(s) available.":"You're up to date.";break;case UpdatePanel.DOWNLOADING:b="Downloading update...";break;case UpdatePanel.DOWNLOAD_FAILED:b="Downloading update failed.";break;case UpdatePanel.IMAGE_READY:b="Update downloaded.";break;case UpdatePanel.INSTALLING:b="Installing update... (will take a minute)";break;case UpdatePanel.INSTALLED:b="Update complete, please refresh Page.";break;case UpdatePanel.INSTALL_FAILED:b="Installing update failed."}else b=a.networkMode==SettingsWindow.NETWORK_MODE_ACCESS_POINT?"Can't access internet in access point mode.":"Can't access internet.";this.statusDisplay.html(b)},this.updateInfoDisplay=function(){var b="Current version: "+a.currentVersion+". ";a.canUpdate&&(b+="Latest version: "+a.newestVersion+"."),a.infoDisplay.text(b)},this.setNetworkMode=function(b){a.networkMode=b}}function setTemperature(a){void 0!=a&&a()}function setTemperature(a){void 0!=a&&a()}function initVerticalShapes(){VERTICALSHAPE=verticalShapes.NONE,$(".verticalShapes, .straight").on("mouseup touchend",function(a){a.preventDefault(),console.log("diverging"),VERTICALSHAPE=verticalShapes.NONE,redrawRenderedPreview()}),$(".verticalShapes, .diverging").on("mouseup touchend",function(a){a.preventDefault(),console.log("diverging"),VERTICALSHAPE=verticalShapes.DIVERGING,redrawRenderedPreview()}),$(".verticalShapes, .converging").on("mouseup touchend",function(a){a.preventDefault(),console.log("converging"),VERTICALSHAPE=verticalShapes.CONVERGING,redrawRenderedPreview()}),$(".verticalShapes, .sinus").on("mouseup touchend",function(a){a.preventDefault(),console.log("sinus"),VERTICALSHAPE=verticalShapes.SINUS,redrawRenderedPreview()})}function resetVerticalShapes(){VERTICALSHAPE=verticalShapes.NONE}function initButtonBehavior(){function a(a){a.preventDefault(),btnOopsInterval=setInterval(function(){oopsUndo()},20)}function b(a){a.preventDefault(),clearInterval(btnOopsInterval)}function c(a){a.preventDefault(),previewUp(!0),clearInterval(btnMoveUpInterval),btnMoveUpInterval=setInterval(function(){previewUp(!0)},1e3/30)}function d(a){a.preventDefault(),console.log("btnMoveUp mouse up"),clearInterval(btnMoveUpInterval),previewUp()}function e(a){a.preventDefault(),previewDown(!0),clearInterval(btnMoveDownInterval),btnMoveDownInterval=setInterval(function(){previewDown(!0)},1e3/30)}function f(a){a.preventDefault(),console.log("btnMoveDown mouse up"),clearInterval(btnMoveDownInterval),previewDown()}function g(a){a.preventDefault(),previewTwistLeft(!0),clearInterval(btnTwistLeftInterval),btnTwistLeftInterval=setInterval(function(){previewTwistLeft(!0)},1e3/30)}function h(a){a.preventDefault(),clearInterval(btnTwistLeftInterval),previewTwistLeft()}function i(a){a.preventDefault(),previewTwistRight(!0),clearInterval(btnTwistRightInterval),btnTwistRightInterval=setInterval(function(){previewTwistRight(!0)},1e3/30)}function j(a){a.preventDefault(),clearInterval(btnTwistRightInterval),previewTwistRight()}console.log("f:initButtonBehavior"),btnOops=$(".btnOops"),btnMoveUp=$("#btnMoveUp"),btnMoveDown=$("#btnMoveDown"),btnTwistLeft=$("#btnTwistLeft"),btnTwistRight=$("#btnTwistRight"),btnInfo=$(".btnInfo"),btnSettings=$(".btnSettings"),btnNew=$(".btnNew"),btnPrint=$(".btnPrint"),btnStop=$(".btnStop"),btnPrevious=$(".btnPrevious"),btnNext=$(".btnNext"),btnNew.on("touchstart mousedown",clearDoodle),btnPrint.on("touchstart mousedown",print),$("#btnPrevious").css("opacity","0.3"),btnNext.css("opacity","0.3"),$("#btnSave").css("opacity","0.3"),btnInfo.css("opacity","0.3"),btnOops.on("touchstart",function(b){a(b)}),btnOops.on("touchend",function(a){b(a)}),btnOops.mousedown(function(b){a(b)}),btnOops.mouseup(function(a){b(a)}),btnMoveUp.mousedown(function(a){c(a)}),btnMoveUp.mouseup(function(a){d(a)}),btnMoveUp.on("touchstart",function(a){c(a)}),btnMoveUp.on("touchend",function(a){d(a)}),btnMoveDown.mousedown(function(a){e(a)}),btnMoveDown.mouseup(function(a){f(a)}),btnMoveDown.on("touchstart",function(a){e(a)}),btnMoveDown.on("touchend",function(a){f(a)}),btnTwistLeft.mousedown(function(a){g(a)}),btnTwistLeft.mouseup(function(a){h(a)}),btnTwistLeft.on("touchstart",function(a){g(a)}),btnTwistLeft.on("touchend",function(a){h(a)}),btnTwistRight.mousedown(function(a){i(a)}),btnTwistRight.mouseup(function(a){j(a)}),btnTwistRight.on("touchstart",function(a){i(a)}),btnTwistRight.on("touchend",function(a){j(a)}),btnSettings.bind("touchstart mousedown",function(){settingsWindow.showSettings()}),btnInfo.mouseup(function(a){a.preventDefault(),console.log("btnInfo mouse up")})}function stopPrint(){console.log("f:stopPrint() >> sendPrintCommands = "+sendPrintCommands),sendPrintCommands&&printer.stop(),printer.overruleState(Printer.STOPPING_STATE)}function prevDoodle(){console.log("f:prevDoodle()"),console.log("f:prevDoodle()")}function nextDoodle(){console.log("f:nextDoodle()")}function print(){console.log("f:print() >> sendPrintCommands = "+sendPrintCommands),_points.length>2?(printer.overruleState(Printer.BUFFERING_STATE),btnStop.css("display","none"),clearTimeout(gcodeGenerateDelayer),gcodeGenerateDelayer=setTimeout(function(){var a=generate_gcode();sendPrintCommands?a.length>0?printer.print(a):(printer.overruleState(Printer.IDLE_STATE),printer.startStatusCheckInterval()):console.log("sendPrintCommands is false: not sending print command to 3dprinter"),debugMode&&($("#textdump").text(""),$("#textdump").text(a.join("\n")))},gcodeGenerateDelay)):console.log("f:print >> not enough points!")}function clearMainView(){ctx.save(),ctx.clearRect(0,0,canvas.width,canvas.height),ctx.restore()}function resetPreview(){previewCtx.save(),previewCtx.clearRect(0,0,canvas.width,canvas.height),previewCtx.restore(),numLayers=previewDefaults.numLayers,rStep=previewDefaults.rotation}function oopsUndo(){_points.pop(),redrawDoodle(),redrawPreview()}function previewUp(a){maxNumLayers>numLayers&&numLayers++,redrawRenderedPreview(a)}function previewDown(a){numLayers>minNumLayers&&numLayers--,redrawRenderedPreview(a)}function previewTwistLeft(a){void 0==a&&(a=!1),rStep>-previewRotationLimit&&(rStep-=twistIncrement),redrawRenderedPreview(a)}function previewTwistRight(a){previewRotationLimit>rStep&&(rStep+=twistIncrement),redrawRenderedPreview(a)}function update(){setState(printer.state,printer.hasControl),thermometer.update(printer.temperature,printer.targetTemperature),progressbar.update(printer.currentLine,printer.totalLines)}function setState(a,b){if(a!=state||b!=hasControl){prevState=state,console.log("setState: ",prevState," > ",a," ( ",b,")"),setDebugText("State: "+a);var c=a==Printer.IDLE_STATE&&b;c?(btnPrint.removeClass("disabled"),btnPrint.unbind("touchstart mousedown"),btnPrint.bind("touchstart mousedown",print)):(btnPrint.addClass("disabled"),btnPrint.unbind("touchstart mousedown"));var d=(a==Printer.PRINTING_STATE||a==Printer.BUFFERING_STATE)&&b;switch(d?(btnStop.removeClass("disabled"),btnStop.unbind("touchstart mousedown"),btnStop.bind("touchstart mousedown",stopPrint)):(btnStop.addClass("disabled"),btnStop.unbind("touchstart mousedown")),a){case Printer.IDLE_STATE:case Printer.BUFFERING_STATE:case Printer.PRINTING_STATE:case Printer.STOPPING_STATE:thermometer.show();break;default:thermometer.hide()}switch(a){case Printer.PRINTING_STATE:progressbar.show();break;default:progressbar.hide()}a==Printer.WIFIBOX_DISCONNECTED_STATE?message.set("Lost connection to WiFi box",Message.ERROR):prevState==Printer.WIFIBOX_DISCONNECTED_STATE?message.set("Connected to WiFi box",Message.INFO,!0):a==Printer.DISCONNECTED_STATE?message.set("Printer disconnected",Message.WARNING,!0):(prevState==Printer.DISCONNECTED_STATE&&a==Printer.IDLE_STATE||prevState==Printer.UNKNOWN_STATE&&a==Printer.IDLE_STATE)&&message.set("Printer connected",Message.INFO,!0),state=a,hasControl=b}}function initDoodleDrawing(){console.log("f:initDoodleDrawing()"),$canvas=$("#mycanvas"),canvas=$canvas[0],ctx=canvas.getContext("2d"),canvasWidth=canvas.width,canvasHeight=canvas.height,canvas.addEventListener?(canvas.addEventListener("mousedown",onCanvasMouseDown,!1),canvas.addEventListener("mousemove",onCanvasMouseMove,!1),canvas.addEventListener("mouseup",onCanvasMouseUp,!1),canvas.addEventListener("touchstart",onCanvasTouchDown,!1),canvas.addEventListener("touchmove",onCanvasTouchMove,!1),canvas.addEventListener("touchend",onCanvasTouchEnd,!1),debugMode||document.body.addEventListener("touchmove",prevent,!1)):(canvas.attachEvent("onmousedown",onCanvasMouseDown),canvas.attachEvent("onmousemove",onCanvasMouseMove),canvas.attachEvent("onmouseup",onCanvasMouseUp),canvas.attachEvent("ontouchstart",onCanvasTouchDown),canvas.attachEvent("ontouchmove",onCanvasTouchMove),canvas.attachEvent("ontouchend",onCanvasTouchEnd),document.body.attachEvent("ontouchmove",prevent)),drawCanvas=$("#mycanvasContainer"),console.log("drawCanvasTopLeftCoords: "+drawCanvasTopLeftCoords),drawCanvasTopLeftCoords[0]=drawCanvas.offset().left,drawCanvasTopLeftCoords[1]=drawCanvas.offset().top,console.log("f:initDoodleDrawing() >> canvasWidth: "+canvasWidth),console.log("f:initDoodleDrawing() >> canvasHeight: "+canvasHeight)}function draw(a,b,c){if(0==prevX&&0==prevY&&(prevX=a,prevY=b),ctx.beginPath(),ctx.moveTo(prevX,prevY),ctx.lineTo(a,b),void 0!=c)ctx.lineWidth=c;else{if(drawVariableLineWeight){var d=Math.sqrt(Math.pow(prevX-a,2)+Math.pow(prevY-b,2));lineweight+=10>d?.25:20>d?.5:30>d?.75:50>d?1:80>d?1.5:120>d?2.25:170>d?3.5:2,lineweight=Math.min(lineweight,30),lineweight*=.9,lineweight=Math.max(lineweight,1)}else lineweight=2;ctx.lineWidth=lineweight}ctx.lineCap="round",ctx.stroke(),prevX=a,prevY=b}function clearDoodle(){console.log("f:clearDoodle"),_points=[],prevX=0,prevY=0,updatePrevX=-1,updatePrevY=-1,doodleBounds=[-1,-1,-1,-1],doodleTransform=[0,0,1,1],dragging=!1,clearMainView(),resetPreview(),resetVerticalShapes()}function redrawDoodle(){console.log("f:redrawDoodle()"),clearMainView(),prevX=0,prevY=0;for(var a=0;a<_points.length;a++)1==_points[a][2]?draw(_points[a][0],_points[a][1],.5):draw(_points[a][0],_points[a][1])}function adjustBounds(a,b){var c=!1;return console.log("f:adjustBounds("+a+","+b+")"),-1==doodleBounds[0]?(doodleBounds[0]=a,doodleBounds[1]=b,doodleBounds[2]=a,doodleBounds[3]=b,void 0):(adoodleBounds[2]&&(doodleBounds[2]=a,c=!0),bdoodleBounds[3]&&(doodleBounds[3]=b,c=!0),c)}function adjustPreviewTransformation(){doodleTransform[0]=doodleBounds[0],doodleTransform[1]=doodleBounds[1];var a,b,c;_points.length<2?(a=1,b=1,c=Math.min(a,b)):(a=canvasWidth/(doodleBounds[2]-doodleBounds[0]),b=canvasHeight/(doodleBounds[3]-doodleBounds[1]),c=Math.min(a,b)),doodleTransform[2]=c,doodleTransform[3]=c}function onCanvasMouseDown(a){dragging=!0,prevCountingTime=(new Date).getTime(),movementCounter=0;var b,c;void 0!=a.offsetX?(b=a.offsetX,c=a.offsetY):(b=a.layerX,c=a.layerY),_points.push([b,c,!0]),adjustBounds(b,c),adjustPreviewTransformation(),draw(b,c,.5)}function onCanvasMouseMove(a){if(dragging){var b,c;if(void 0!=a.offsetX?(b=a.offsetX,c=a.offsetY):(b=a.layerX,c=a.layerY),-1!=prevPoint.x||-1!=prevPoint.y){var d=Math.sqrt(Math.pow(prevPoint.x-b,2)+Math.pow(prevPoint.y-c,2));d>5&&(_points.push([b,c,!1]),adjustBounds(b,c),adjustPreviewTransformation(),draw(b,c),prevPoint.x=b,prevPoint.y=c)}else _points.push([b,c,!1]),adjustBounds(b,c),adjustPreviewTransformation(),draw(b,c),prevPoint.x=b,prevPoint.y=c;(new Date).getTime()-prevRedrawTime>redrawInterval&&(prevRedrawTime=(new Date).getTime(),_points.length<50?redrawPreview():updatePreview(b,c,!0))}}function onCanvasMouseUp(){dragging=!1,console.log("doodleBounds: "+doodleBounds),console.log("doodleTransform: "+doodleTransform),console.log("_points.length :"+_points.length),renderToImageDataPreview()}function onCanvasTouchDown(a){a.preventDefault(),console.log("f:onCanvasTouchDown >> e: ",a);var b=a.touches[0].pageX-drawCanvasTopLeftCoords[0],c=a.touches[0].pageY-drawCanvasTopLeftCoords[1];_points.push([b,c,!0]),adjustBounds(b,c),adjustPreviewTransformation(),draw(b,c,.5),movementCounter=0,prevRedrawTime=(new Date).getTime()}function onCanvasTouchMove(a){a.preventDefault();var b=a.touches[0].pageX-drawCanvasTopLeftCoords[0],c=a.touches[0].pageY-drawCanvasTopLeftCoords[1];if(console.log("f:onCanvasTouchMove >> x,y = "+b+","+c+" , e: ",a),-1!=prevPoint.x||-1!=prevPoint.y){var d=Math.sqrt(Math.pow(prevPoint.x-b,2)+Math.pow(prevPoint.y-c,2));d>5&&(_points.push([b,c,!1]),adjustBounds(b,c),adjustPreviewTransformation(),draw(b,c),prevPoint.x=b,prevPoint.y=c)}else _points.push([b,c,!1]),adjustBounds(b,c),adjustPreviewTransformation(),draw(b,c),prevPoint.x=b,prevPoint.y=c;(new Date).getTime()-prevRedrawTime>redrawInterval&&(_points.length<50?redrawPreview():updatePreview(b,c,!0),prevRedrawTime=(new Date).getTime())}function onCanvasTouchEnd(){console.log("f:onCanvasTouchEnd()"),console.log("doodleBounds: "+doodleBounds),console.log("doodleTransform: "+doodleTransform),console.log("_points.length :"+_points.length),renderToImageDataPreview()}function prevent(a){a.preventDefault()}function initPreviewRendering(){console.log("f:initPreviewRendering()"),$preview=$("#preview"),preview=$preview[0],previewCtx=preview.getContext("2d");var a=preview.width/canvas.width;preview_tmp=document.getElementById("preview_tmp"),preview_tmp.width=preview.width,preview_tmp.height=canvas.height*a,$("#preview_tmp").css("top",-preview_tmp.height),previewCtx_tmp=preview_tmp.getContext("2d"),calcPreviewCanvasProperties(),redrawPreview()}function calcPreviewCanvasProperties(){console.log("f:calcPreviewCanvasProperties()"),globalScale=preview.width/canvasWidth,layerCX=canvasWidth/2*globalScale,layerCY=canvasHeight/2*globalScale,layerOffsetY=preview.height*(1-previewVerticalPadding.bottom),yStep=(preview.height-preview.height*(previewVerticalPadding.top+previewVerticalPadding.bottom))/maxNumLayers}function redrawPreview(a){if(void 0==a&&(a=!1),!(_points.length<2)){a||(debug_redrawSimplification=_points.length<100?6:_points.length<250?7:_points.length<400?8:_points.length<550?9:_points.length<700?10:11);var b=0,c=0;previewCtx.clearRect(0,0,preview.width,preview.height),previewCtx.lineWidth=strokeWidth,previewCtx.strokeStyle="#f00";for(var d=0;numLayers>d;d++){var e=scaleFunction(d/maxNumLayers);if(previewCtx.globalAlpha=0==d||d==Math.floor(numLayers/2)||d==numLayers-1?1:globalAlpha,a&&0!=d%debug_redrawSimplification&&0!=d&&d!=Math.floor(numLayers/2)&&d!=numLayers-1)b-=yStep,c+=rStep;else{previewCtx.save(),previewCtx.translate(layerCX,layerOffsetY+b),previewCtx.scale(viewerScale*e,scaleY*viewerScale*e),previewCtx.rotate(c),previewCtx.translate(-doodleTransform[0]*globalScale*doodleTransform[2],-doodleTransform[1]*globalScale*doodleTransform[3]);var f=centeredAndScaledDoodlePoint(_points[0]);previewCtx.beginPath(),previewCtx.moveTo(f.x,f.y);for(var g=1;g<_points.length;g++)f=centeredAndScaledDoodlePoint(_points[g]),a&&0!=g%debug_redrawSimplification||previewCtx.lineTo(f.x,f.y);previewCtx.stroke(),b-=yStep,c+=rStep,previewCtx.restore()}}previewCtx.globalAlpha=globalAlpha}}function renderToImageDataPreview(){if(console.log("f:renderToImageDataPreview()"),!(_points.length<2)){previewCtx_tmp.clearRect(0,0,preview.width,preview.height),previewCtx_tmp.lineWidth=strokeWidth,previewCtx_tmp.strokeStyle="#f00",previewCtx_tmp.save(),previewCtx_tmp.translate(layerCX,layerCY),previewCtx_tmp.scale(viewerScale,viewerScale),previewCtx_tmp.translate(-doodleTransform[0]*globalScale*doodleTransform[2],-doodleTransform[1]*globalScale*doodleTransform[3]);var a=centeredAndScaledDoodlePoint(_points[0]);previewCtx_tmp.beginPath(),previewCtx_tmp.moveTo(a.x,a.y);for(var b=1;b<_points.length;b++)a=centeredAndScaledDoodlePoint(_points[b]),previewCtx_tmp.lineTo(a.x,a.y);previewCtx_tmp.stroke(),previewCtx_tmp.closePath(),previewCtx_tmp.restore(); +var c=preview_tmp.toDataURL();doodleImageCapture=new Image,doodleImageCapture.onload=function(){previewCtx.clearRect(0,0,preview.width,preview.height),previewCtx.lineWidth=strokeWidth,previewCtx.strokeStyle="#f00";for(var a=0,b=0,c=0;numLayers>c;c++){var d=scaleFunction(c/maxNumLayers);previewCtx.globalAlpha=0==c||c==Math.floor(numLayers/2)||c==numLayers-1?1:globalAlpha,previewCtx.save(),previewCtx.translate(layerCX,layerOffsetY+a),previewCtx.scale(d,scaleY*d),previewCtx.rotate(b),previewCtx.translate(-layerCX,-layerCY),previewCtx.drawImage(doodleImageCapture,0,0),a-=yStep,b+=rStep,previewCtx.restore()}},doodleImageCapture.src=c,previewCtx.globalAlpha=globalAlpha}}function redrawRenderedPreview(a){void 0==a&&(a=!1),console.log("f:redrawRenderedPreview()"),previewCtx.clearRect(0,0,preview.width,preview.height),previewCtx.lineWidth=strokeWidth,previewCtx.strokeStyle="#f00";for(var b=0,c=0,d=0;numLayers>d;d++){var e=scaleFunction(d/maxNumLayers);previewCtx.globalAlpha=0==d||d==Math.floor(numLayers/2)||d==numLayers-1?1:globalAlpha,a&&0!=d%2&&0!=d&&d!=Math.floor(numLayers/2)&&d!=numLayers-1?(b-=yStep,c+=rStep):(previewCtx.save(),previewCtx.translate(layerCX,layerOffsetY+b),previewCtx.scale(e,scaleY*e),previewCtx.rotate(c),previewCtx.translate(-layerCX,-layerCY),previewCtx.drawImage(doodleImageCapture,0,0),b-=yStep,c+=rStep,previewCtx.restore())}}function centeredAndScaledDoodlePoint(a){var b={x:0,y:0};return b.x=(a[0]-(doodleBounds[2]-doodleBounds[0])/2)*globalScale*doodleTransform[2],b.y=(a[1]-(doodleBounds[3]-doodleBounds[1])/2)*globalScale*doodleTransform[3],b}function updatePreview(a,b,c){if(void 0==c&&(c=!1),c=!1,!(_points.length<2)){if(-1==updatePrevX||-1==updatePrevY)return updatePrevX=a,updatePrevY=b,void 0;var d=0,e=0;previewCtx.lineWidth=strokeWidth,previewCtx.strokeStyle="#f00";for(var f=0;numLayers>f;f++)if(previewCtx.globalAlpha=0==f||f==Math.floor(numLayers/2)||f==numLayers-1?1:globalAlpha,c&&0!=f%debug_redrawSimplification&&0!=f&&f!=Math.floor(numLayers/2)&&f!=numLayers-1)d-=yStep,e+=rStep;else{previewCtx.save(),previewCtx.translate(layerCX,layerOffsetY+d),previewCtx.scale(viewerScale,scaleY*viewerScale),previewCtx.rotate(e),previewCtx.translate(-doodleTransform[0]*globalScale*doodleTransform[2],-doodleTransform[1]*globalScale*doodleTransform[3]),previewCtx.beginPath();var g=centeredAndScaledDoodlePoint([updatePrevX,updatePrevY]);previewCtx.moveTo(g.x,g.y);var h=centeredAndScaledDoodlePoint([a,b]);previewCtx.lineTo(h.x,h.y),previewCtx.stroke(),d-=yStep,e+=rStep,previewCtx.restore()}previewCtx.globalAlpha=globalAlpha,updatePrevX=a,updatePrevY=b}}function generate_gcode(){console.log("f:generategcode()");var a=110,b=110;gcode=[],console.log("settings: ",settings);var c=settings["printer.speed"],d=c,e=.5*c,f=settings["printer.travelSpeed"],g=settings["printer.filamentThickness"],h=settings["printer.wallThickness"],i=settings["printer.screenToMillimeterScale"],j=settings["printer.layerHeight"],k=settings["printer.maxObjectHeight"],l=settings["printer.temperature"],m=settings["printer.useSubLayers"],n=settings["printer.enableTraveling"],o=settings["printer.retraction.enabled"],p=settings["printer.retraction.speed"],q=settings["printer.retraction.minDistance"],r=settings["printer.retraction.amount"],s=settings["printer.heatup.temperature"],t=settings["printer.startgcode"];t=t.replace("{printingTemp}",l),t=t.replace("{preheatTemp}",s),t=t.split("\n");var u=settings["printer.endgcode"];u=u.replace("{printingTemp}",l),u=u.replace("{preheatTemp}",s),u=u.split("\n");var v=k/j;objectHeight=Math.round(numLayers/maxNumLayers*k);var w=rStep*maxNumLayers/v;w=-w;var x=JSON.parse(JSON.stringify(_points));gcode=gcode.concat(t);var v=k/j,y=0,z=new Point;z.set(0,0);var A={x:doodleBounds[0]+(doodleBounds[2]-doodleBounds[0])/2,y:doodleBounds[1]+(doodleBounds[3]-doodleBounds[1])/2};if(console.log("f:generategcode() >> layers: "+v),1/0!=v){var B=x.length*v*(objectHeight/k);if(B>MAX_POINTS_TO_PRINT)return alert("Sorry, your doodle to to complex and / or to high"),console.log("WARNING: to many points to convert to gcode"),[];for(var C=0;v>C;C++){var D=JSON.parse(JSON.stringify(x));if(D.length<2)return;var E=C/v,F=scaleFunction(E),G=lineLength(x[0][0],x[0][1],x[x.length-1][0],x[x.length-1][1])<3;pointsTranslate(D,-A.x,-A.y),pointsScale(D,i,-i),pointsScale(D,F,F),pointsRotate(D,w*C),0==C?firstLayerSlow&&(c=e):2==C&&(gcode.push("M106"),c=d);for(var H=0,I=D.length,J=0,K=[],L=-1,M=0;Mq;n&&S?(T&&gcode.push("G0 E"+(y-r).toFixed(3)+" F"+(60*p).toFixed(3)),gcode.push("G0 X"+P.x.toFixed(3)+" Y"+P.y.toFixed(3)+" Z"+R.toFixed(3)+" F"+(60*f).toFixed(3)),T&&gcode.push("G0 E"+y.toFixed(3)+" F"+(60*p).toFixed(3))):(y+=z.distance(P)*h*j/(Math.pow(g/2,2)*Math.PI),gcode.push("G1 X"+P.x.toFixed(3)+" Y"+P.y.toFixed(3)+" Z"+R.toFixed(3)+" F"+(60*c).toFixed(3)+" E"+y.toFixed(3))),H++,J=H/I,z=P}if(C/v>objectHeight/k){console.log("f:generategcode() >> (layer/layers) > (objectHeight/maxObjectHeight) is true -> breaking at layer "+(C+1));break}}return gcode=gcode.concat(u)}}function scaleFunction(a){var b=1;switch(VERTICALSHAPE){case verticalShapes.NONE:b=1;break;case verticalShapes.DIVERGING:b=.5+.5*a;break;case verticalShapes.CONVERGING:b=1-.8*a;break;case verticalShapes.SINUS:b=.25*Math.cos(4*a*Math.PI)+.75}return b}function doOnResize(){canvas.width=$canvas.width(),canvas.height=$canvas.height(),preview.width=$preview.width(),preview.height=$drawAreaContainer.height(),canvasWidth=canvas.width,canvasHeight=canvas.height,console.log(" preview.width: "+preview.width+", $preview.width(): "+$preview.width()),calcPreviewCanvasProperties(),drawCanvasTopLeftCoords[0]=drawCanvas.offset().left,drawCanvasTopLeftCoords[1]=drawCanvas.offset().top,redrawDoodle(),redrawPreview()}function initLayouting(){console.log("f:initLayouting()"),$drawAreaContainer=$(".drawareacontainer"),canvas.width=$canvas.width(),canvas.height=$canvas.height(),preview.width=$preview.width(),preview.height=$drawAreaContainer.height(),canvasWidth=canvas.width,canvasHeight=canvas.height,$drawAreaContainer.show(),console.log("window.innerHeight: "+window.innerHeight),console.log("window.innerWidth: "+window.innerWidth),console.log("$drawAreaContainer.innerHeight(): "+$drawAreaContainer.innerHeight()),console.log("$drawAreaContainer.offset().top: "+$drawAreaContainer.offset().top),setTimeout(_startOrientationAndChangeEventListening,1e3)}function _startOrientationAndChangeEventListening(){$(window).on("resize",doOnResize),doOnResize()}function Printer(){Printer.WIFIBOX_DISCONNECTED_STATE="wifibox disconnected",Printer.UNKNOWN_STATE="unknown",Printer.DISCONNECTED_STATE="disconnected",Printer.IDLE_STATE="idle",Printer.BUFFERING_STATE="buffering",Printer.PRINTING_STATE="printing",Printer.STOPPING_STATE="stopping",Printer.ON_BEFORE_UNLOAD_MESSAGE="You're doodle is still being send to the printer, leaving will result in a incomplete 3D print",this.temperature=0,this.targetTemperature=0,this.currentLine=0,this.totalLines=0,this.bufferedLines=0,this.state=Printer.UNKNOWN_STATE,this.hasControl=!0,this.wifiboxURL,this.checkStatusInterval=3e3,this.checkStatusDelay,this.timeoutTime=3e3,this.sendPrintPartTimeoutTime=5e3,this.gcode,this.sendLength=1500,this.retryDelay=2e3,this.retrySendPrintPartDelay,this.retryCheckStatusDelay,this.retryStopDelay,this.retryPreheatDelay,this.maxGCodeSize=10,this.stateOverruled=!1,Printer.UPDATE="update";var a=this;this.init=function(){console.log("Printer:init"),this.wifiboxURL=wifiboxURL,console.log(" wifiboxURL: ",this.wifiboxURL),autoUpdate&&this.startStatusCheckInterval()},this.preheat=function(){console.log("Printer:preheat");var a=this;communicateWithWifibox?$.ajax({url:this.wifiboxURL+"/printer/heatup",type:"POST",dataType:"json",timeout:this.timeoutTime,success:function(b){console.log("Printer:preheat response: ",b),"error"==b.status&&(clearTimeout(a.retryPreheatDelay),a.retryPreheatDelay=setTimeout(function(){a.preheat()},a.retryDelay))}}).fail(function(){console.log("Printer:preheat: failed"),clearTimeout(a.retryPreheatDelay),a.retryPreheatDelay=setTimeout(function(){a.preheat()},a.retryDelay)}):console.log("Printer >> f:preheat() >> communicateWithWifibox is false, so not executing this function")},this.print=function(b){console.log("Printer:print"),console.log(" gcode total # of lines: "+b.length),message.set("Sending doodle to printer...",Message.NOTICE),a.addLeaveWarning(),this.sendIndex=0,this.gcode=b;var c=this.byteSize(b[20]),d=c*b.length/1024/1024;return console.log(" gcodeSize: ",d),d>this.maxGCodeSize?(console.log("Error: Printer:print: gcode file is probably to big ("+d+"MB) (max: "+this.maxGCodeSize+"MB)"),void 0):(this.sendPrintPart(this.sendIndex,this.sendLength),void 0)},this.byteSize=function(a){return~-encodeURI(a).split(/%..|./).length},this.sendPrintPart=function(a,b){console.log("Printer:sendPrintPart sendIndex: "+a+"/"+this.gcode.length+", sendLength: "+b);var c=0==a?!0:!1,d=c,e=!1;this.gcode.length> f:sendPrintPart() >> communicateWithWifibox is false, so not executing this function")},this.stop=function(){console.log("Printer:stop");var a=this;communicateWithWifibox?$.ajax({url:this.wifiboxURL+"/printer/stop",type:"POST",dataType:"json",timeout:this.timeoutTime,success:function(b){console.log("Printer:stop response: ",b),a.startStatusCheckInterval()}}).fail(function(){console.log("Printer:stop: failed"),clearTimeout(a.retryStopDelay),a.retryStopDelay=setTimeout(function(){a.stop()},a.retryDelay),a.startStatusCheckInterval()}):console.log("Printer >> f:communicateWithWifibox() >> communicateWithWifibox is false, so not executing this function")},this.startStatusCheckInterval=function(){console.log("Printer:startStatusCheckInterval"),a.checkStatus(),clearTimeout(a.checkStatusDelay),clearTimeout(a.retryCheckStatusDelay),a.checkStatusDelay=setTimeout(function(){a.checkStatus()},a.checkStatusInterval)},this.stopStatusCheckInterval=function(){console.log("Printer:stopStatusCheckInterval"),clearTimeout(a.checkStatusDelay),clearTimeout(a.retryCheckStatusDelay)},this.checkStatus=function(){console.log("Printer:checkStatus"),this.stateOverruled=!1;var a=this;communicateWithWifibox?$.ajax({url:this.wifiboxURL+"/info/status",dataType:"json",timeout:this.timeoutTime,success:function(b){a.handleStatusUpdate(b),clearTimeout(a.checkStatusDelay),clearTimeout(a.retryCheckStatusDelay),a.checkStatusDelay=setTimeout(function(){a.checkStatus()},a.checkStatusInterval)}}).fail(function(){console.log("Printer:checkStatus: failed"),a.state=Printer.WIFIBOX_DISCONNECTED_STATE,clearTimeout(a.checkStatusDelay),clearTimeout(a.retryCheckStatusDelay),a.retryCheckStatusDelay=setTimeout(function(){a.checkStatus()},a.retryDelay),$(document).trigger(Printer.UPDATE)}):console.log("Printer >> f:checkStatus() >> communicateWithWifibox is false, so not executing this function")},this.handleStatusUpdate=function(b){console.log("Printer:handleStatusUpdate response: ",b);var c=b.data;"success"!=b.status?a.state=Printer.UNKNOWN_STATE:(this.stateOverruled||(a.state=c.state),a.temperature=c.hotend,a.targetTemperature=c.hotend_target,a.currentLine=c.current_line,a.totalLines=c.total_lines,a.bufferedLines=c.buffered_lines,a.hasControl=c.has_control,(a.state==Printer.PRINTING_STATE||a.state==Printer.STOPPING_STATE)&&console.log("progress: ",a.currentLine+"/"+a.totalLines+" ("+a.bufferedLines+") ("+a.state+")")),$(document).trigger(Printer.UPDATE)},this.overruleState=function(b){this.stateOverruled=!0,console.log(" stateOverruled: ",this.stateOverruled),a.state=b,$(document).trigger(Printer.UPDATE),this.stopStatusCheckInterval()},this.removeLeaveWarning=function(){window.onbeforeunload=null},this.addLeaveWarning=function(){window.onbeforeunload=function(){return Printer.ON_BEFORE_UNLOAD_MESSAGE}}}function Progressbar(){this.currProgress=0,this.progressbarFGImg=new Image,this.progressbarFGImgSrc="img/progress_fg.png",this.progressbarBGImg=new Image,this.progressbarBGImgSrc="img/progress_bg.png",this.progressWidth=93,this.progressHeight=82,this.quartPI=.5*Math.PI,this.twoPI=2*Math.PI,this.$canvas,this.canvas,this.context,this.$container,this.isInitted=!1,this.enabled=!0,this.init=function(a,b){console.log("Thermometer.init()"),this.$container=b,this.$canvas=a,this.canvas=this.$canvas[0],this.context=this.canvas.getContext("2d");var c=this;this.progressbarBGImg.onload=function(){console.log("progressbarBGImg img loaded"),c.progressbarFGImg.onload=function(){console.log("progressbarFGImg img loaded"),c.isInitted=!0,c.update(0,100)},c.progressbarFGImg.src=c.progressbarFGImgSrc},this.progressbarBGImg.src=this.progressbarBGImgSrc},this.update=function(a,b){if(this.isInitted){void 0==a&&(a=0),void 0==b&&(b=100);var c=a/b;c=Math.min(c,1),c=Math.max(c,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height),this.context.drawImage(this.progressbarBGImg,0,0),this.context.font="7pt sans-serif",this.context.save(),this.context.beginPath(),this.context.moveTo(45,45),this.context.lineTo(45,0),this.context.arc(45,45,45,-this.quartPI,-this.quartPI+c*this.twoPI,!1),this.context.lineTo(45,45),this.context.clip(),this.context.drawImage(this.progressbarFGImg,0,0),this.context.restore(),debugMode&&(this.context.fillStyle="#222",this.context.strokeStyle="#fff",this.context.lineWidth=3,this.context.textAlign="center",this.context.strokeText(a+" / "+b,45,45,90),this.context.fillText(a+" / "+b,45,45,90))}else console.log("Progressbar.setTemperature() -> thermometer not initialized!")},this.show=function(){this.$container.addClass("progressbarAppear"),this.enabled=!0},this.hide=function(){this.$container.removeClass("progressbarAppear"),this.enabled=!1}}function Thermometer(){this.currentTemperature=0,this.targetTemperature=0,this.thermoOverlayImg=new Image,this.thermoOverlayImgSrc="img/thermometer_fg_overlay.png",this.thermoWidth=40,this.thermoHeight=100,this.$canvas,this.canvas,this.context,this.$container,this.isInitted=!1,this.enabled=!0,this.thermoColors=[[50,200,244],[244,190,10],[244,50,50]],this.init=function(a,b){console.log("Thermometer.init()"),this.$container=b,this.$canvas=a,this.canvas=this.$canvas[0],this.context=this.canvas.getContext("2d");var c=this;this.thermoOverlayImg.onload=function(){console.log("canvasThermoOverlay img loaded"),c.isInitted=!0,c.update(c.currentTemperature,c.targetTemperature)},this.thermoOverlayImg.src=this.thermoOverlayImgSrc},this.update=function(a,b){if(this.isInitted){if(!this.enabled)return;void 0==a&&(a=0),void 0==b&&(b=180);var c=a/b;c=Math.min(c,1),c=Math.max(c,0);var d=this.thermoHeight,e=15,f=25,g=Math.floor((d-e-f)*c),h=this.thermoColors[0];c>.98?h=this.thermoColors[2]:c>.25&&(h=this.thermoColors[1]),this.context.clearRect(0,0,this.canvas.width,this.canvas.height),this.context.font="10pt sans-serif",this.context.save(),this.context.beginPath(),this.context.arc(40,80,16,0,2*Math.PI,!1),this.context.arc(40,10,4,0,2*Math.PI,!1),this.context.rect(36,11,8,70),this.context.fillStyle="#fff",this.context.fill(),this.context.clip(),this.context.beginPath(),this.context.rect(20,d-e-g,60,g+e),this.context.fillStyle="rgb("+h[0]+","+h[1]+","+h[2]+")",this.context.fill(),this.context.restore(),this.context.save(),this.context.beginPath(),this.context.moveTo(32,f),this.context.lineTo(52,f),this.context.lineWidth=2,this.context.strokeStyle="#000",this.context.stroke(),this.context.fillStyle="#000",this.context.textAlign="left",this.context.textBaseline="middle",this.context.fillText(b+"°",55,f),this.context.restore(),this.context.drawImage(this.thermoOverlayImg,20,0),this.context.fillStyle="#000",this.context.textAlign="center",this.context.fillText(a+"°",40,d+e)}else console.log("Thermometer.setTemperature() -> thermometer not initialized!")},this.show=function(){this.$container.addClass("thermometerAppear"),this.enabled=!0},this.hide=function(){this.$container.removeClass("thermometerAppear"),this.enabled=!1}}function getURLParameter(a){return decodeURI((new RegExp("[&?]"+a+"="+"(.+?)(&|$)").exec(location.search)||[,null])[1])}function initSidebars(){console.log("f:initSidebars()"),sidebarLeft=new SideBar,sidebarLeft.init(".leftpanel","hideleft",function(){$(".leftpanel").show()}),sidebarRight=new SideBar,sidebarRight.init(".rightpanel","hideright",function(){$(".rightpanel").show()})}function SideBar(){this.initted=!1,this.$contentTarg=void 0,this.$sideBtn=void 0,this.contentHidden=!1,this.hideClass="",this.init=function(a,b,c){console.log("SideBar >> f:init >> targ: ",$(a),", hideClass: "+b),this.$contentTarg=$(a),this.hideClass=b,this.$contentTarg.addClass(this.hideClass),this.contentHidden=!0,this.$contentTarg.append("
"),this.$sideBtn=$(a+" .sidebutton");var d=this;this.$sideBtn.on("click",function(){console.log("sidebutton"),d.toggleShowHide()}),this.initted=!0,c()},this.toggleShowHide=function(){this.contentHidden?(this.contentHidden=!1,this.$contentTarg.removeClass(this.hideClass),this.$sideBtn.addClass("sidebuttonin")):(this.contentHidden=!0,this.$contentTarg.addClass(this.hideClass),this.$sideBtn.removeClass("sidebuttonin"))}}function Message(){Message.ERROR="error",Message.WARNING="warning",Message.NOTICE="notice",Message.INFO="info",this.mode="",this.$element;var a,b=this,c=2e3;this.init=function(a){console.log("Message:init"),this.$element=a,console.log("$element: ",a)},this.set=function(d,e,f){console.log("Message:set: ",d,e,f),b.hide(function(){b.show(),b.clear(),b.$element.text(d),b.$element.addClass(e),b.show(),b.mode=e,clearTimeout(a),f&&(a=setTimeout(function(){b.hide()},c))})},this.clear=function(){this.$element.text(""),this.$element.removeClass(this.mode)},this.show=function(){this.$element.fadeIn(200)},this.hide=function(a){this.$element.fadeOut(200,a)}}function showOrHideThermo(){console.log("f:showOrHideThermo()"),showOrHide?(thermometer.hide(),progressbar.hide()):(thermometer.show(),progressbar.show()),showOrHide=!showOrHide}function settingsLoaded(){console.log("settingsLoaded"),console.log("autoHeatup: ",settings["printer.heatup.enabled"]),settings["printer.heatup.enabled"]&&firstTimeSettingsLoaded&&(printer.preheat(),firstTimeSettingsLoaded=!1)}function setDebugText(a){$("#debug_display").text(a)}var settings={"network.ap.ssid":"d3d-ap-%%MAC_ADDR_TAIL%%","network.ap.address":"192.168.10.1","network.ap.netmask":"255.255.255.0","printer.temperature":220,"printer.maxObjectHeight":150,"printer.layerHeight":.2,"printer.wallThickness":.7,"printer.screenToMillimeterScale":.3,"printer.speed":50,"printer.travelSpeed":200,"printer.filamentThickness":2.85,"printer.enableTraveling":!0,"printer.useSubLayers":!0,"printer.firstLayerSlow":!0,"printer.autoWarmUp":!0,"printer.simplify.iterations":10,"printer.simplify.minNumPoints":15,"printer.simplify.minDistance":3,"printer.retraction.enabled":!0,"printer.retraction.speed":50,"printer.retraction.minDistance":1,"printer.retraction.amount":5,"printer.autoWarmUpCommand":"M104 S220 (hardcoded temperature)"},objectHeight=20,layerHeight=.2,enableTraveling=!0,minScale=.3,maxScale=1,shape="%",twists=0,loglevel=2,serverport=8888,autoLoadImage="hand.txt",loadOffset=[0,0],showWarmUp=!0,loopAlways=!1,firstLayerSlow=!0,useSubpathColors=!1,autoWarmUp=!0,maxScaleDifference=.1,frameRate=60,quitOnEscape=!0,screenToMillimeterScale=.3,sideis3D=!0,sidevisible=!0,sidebounds=[900,210,131,390],sideborder=[880,169,2,471],windowbounds=[0,0,800,500],windowcenter=!0,windowfullscreen=!1,autoWarmUpCommand="M104 S230",autoWarmUpDelay=3,VERTICALSHAPE,verticalShapes={NONE:"none",DIVERGING:"diverging",CONVERGING:"converging",SINUS:"sinus"},btnMoveUpInterval,btnMoveDownInterval,btnTwistLeftInterval,btnTwistRightInterval,twistIncrement=Math.PI/1800,btnOopsInterval,btnNew,btnPrevious,btnNext,btnOops,btnStop,btnClear,btnMoveUp,btnMoveDown,btnTwistLeft,btnTwistRight,btnInfo,btnSettings,state,prevState,hasControl,gcodeGenerateDelayer,gcodeGenerateDelay=50,preview,previewCtx,svgPathRegExp=/[LM]\d* \d*/gi,svgPathParamsRegExp=/([LM])(\d*) (\d*)/,dragging=!1,$canvas,canvas,ctx,canvasWidth,canvasHeight,drawCanvas,drawCanvasTopLeftCoords=[0,0],doodleBounds=[-1,-1,-1,-1],doodleTransform=[0,0,1,1],_points=[],prevCountingTime=0,movementCounter=0,drawVariableLineWeight=!1,lineweight=2,prevPoint={x:-1,y:-1};prevUpdateFullPreview=0,prevUpdateFullPreviewInterval=25;var $preview,preview,previewCtx,preview_tmp,previewCtx_tmp,previewDefaults={rotation:Math.PI/90,numLayers:10},svgPathRegExp=/[LM]\d* \d*/gi,svgPathParamsRegExp=/([LM])(\d*) (\d*)/,prevRedrawTime=(new Date).getTime(),redrawInterval=1e3/30,previewRotationLimit=Math.PI/30,numLayers=previewDefaults.numLayers,maxNumLayers=100,minNumLayers=2,globalScale=.3,globalAlpha=.2,scaleY=.4,viewerScale=.65,previewVerticalPadding={top:.15,bottom:.12},strokeWidth=2,rStep=previewDefaults.rotation,yStep,layerCX,layerCY,layerOffsetY,prevX=0,prevY=0,highlight=!0,linesRaw="",debug_redrawSimplification=6,updatePrevX=-1,updatePrevY=-1,MAX_POINTS_TO_PRINT=4e5,gcode=[];pointsTranslate=function(a,b,c){for(var d=0;d> " + new Date().getTime()); -// $(".container").css("height", window.innerHeight); - - /* 2013-10-09 commented out -> no more need with new layouting - $drawAreaContainer.css("marginLeft", -$drawAreaContainer.width()/2); - $drawAreaContainer.css("marginTop", -$drawAreaContainer.height() *.45); -// $drawAreaContainer.css("marginTop", -parseInt($drawAreaContainer.css("height")) * 0.45); -//*/ - - // canvas.width = $drawAreaContainer.width() - preview.width; // canvas.clientWidth; - // canvas.width = $("#mycanvasContainer").width(); - canvas.width = $canvas.width(); - canvas.height = $canvas.height(); // canvas.clientHeight; - // canvas.height = $drawAreaContainer.height(); // canvas.clientHeight; - - preview.width = $preview.width(); - preview.height = $drawAreaContainer.height(); - - canvasWidth = canvas.width; - canvasHeight = canvas.height; - - console.log(" preview.width: " + preview.width + ", $preview.width(): " + $preview.width()); - - calcPreviewCanvasProperties(); - -// layerOffsetY = preview.height - 1.75 * layerCY; -// yStep = preview.height / 150; -// preview.width = parseInt($preview.css("width"), 10); -// preview.height = parseInt($preview.css("height"), 10); - -// canvasWidth = canvas.width; -// canvasHeight = canvas.height; - - drawCanvasTopLeftCoords[0] = drawCanvas.offset().left; - drawCanvasTopLeftCoords[1] = drawCanvas.offset().top; -// drawCanvasTopLeftCoords[0] = drawCanvas[0].offsetParent.offsetLeft; -// drawCanvasTopLeftCoords[1] = drawCanvas[0].offsetParent.offsetTop; - -// preview.height = $("#previewContainer").height(); -// console.log("f:doOnResize() >> preview.height: " + preview.height); - - redrawDoodle(); - redrawPreview(); - - return; - -// doClientAndOrientationStuff() // <-- is this necessary in this method? - -// console.log("f:doOnResize() >> $('#canvascontainer').innerHeight: " + window.innerHeight); - if (window.innerHeight < 768) { -// $('#drawAreaContainer').innerHeight(window.innerHeight - $("#drawAreaContainer").offset().top - 70); - var newVal = window.innerHeight - $("#drawAreaContainer").offset().top - 100; // what's the 70 ?? - newVal = Math.max(newVal, drawAreaContainerMinHeight); - newVal = Math.min(newVal, drawAreaContainerMaxHeight); - - $('#drawAreaContainer').innerHeight(newVal); - - // canvas drawing area - $canvas.css("height", newVal); - canvas.height = newVal; - canvasWidth = canvas.width; - canvasHeight = canvas.height; - - // preview area - $preview.css("height", newVal); - preview.height = newVal; - layerOffsetY = preview.height - 1.75 * layerCY; - yStep = preview.height / 150; - - redrawDoodle(); - redrawPreview(); - } -} - -function initLayouting() { - console.log("f:initLayouting()"); - - // first set the css width/height and actual width/height of the drawing area - - - - -// $doodleCanvas = $("#mycanvas"); -// doodleCanvas = $("#mycanvas")[0]; -// doodleCanvasContext = doodleCanvas.getContext('2d'); - - $drawAreaContainer = $(".drawareacontainer"); - /* 2013-10-09 commented out -> no more need with new layouting - $drawAreaContainer.css("margin", 0); - $drawAreaContainer.css("marginLeft", -$drawAreaContainer.width()/2); - $drawAreaContainer.css("marginTop", -$drawAreaContainer.height() *.45); - //*/ - -// console.log(" preview.width: " + preview.width + ", $preview.width(): " + $preview.width()); -// canvas.width = $drawAreaContainer.width() - preview.width; // canvas.clientWidth; -// canvas.width = $("#mycanvasContainer").width(); - canvas.width = $canvas.width(); - canvas.height = $canvas.height(); // canvas.clientHeight; -// canvas.height = $drawAreaContainer.height(); // canvas.clientHeight; - - preview.width = $preview.width(); - preview.height = $drawAreaContainer.height(); - - canvasWidth = canvas.width; - canvasHeight = canvas.height; - - $drawAreaContainer.show(); - - // window.innerHeight - console.log("window.innerHeight: " + window.innerHeight); - console.log("window.innerWidth: " + window.innerWidth); - console.log("$drawAreaContainer.innerHeight(): " + $drawAreaContainer.innerHeight()); - console.log("$drawAreaContainer.offset().top: " + $drawAreaContainer.offset().top); - - - /* 2013-07-26 not doing this resizing stuff now, it's not working well yet - if (window.innerHeight < 768) { - $('#drawAreaContainer').innerHeight(window.innerHeight - $("#drawAreaContainer").offset().top - 70); - } - //*/ - - // timeout because it SEEMS to be beneficial for initting the layout - // 2013-09-18 seems beneficial since when? - setTimeout(_startOrientationAndChangeEventListening, 1000); -} - -function _startOrientationAndChangeEventListening() { - // Initial execution if needed - - $(window).on('resize', doOnResize); - - // is it necessary to call these? Aren't they called by the above eventhandlers? -// doClientAndOrientationStuff(); - doOnResize(); -} From b55a9be25f512d1ba913447071243d030e4aefd8 Mon Sep 17 00:00:00 2001 From: Adriaan Wormgoor Date: Tue, 22 Oct 2013 12:21:45 +0200 Subject: [PATCH 05/13] slight change --- www/index.html | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/www/index.html b/www/index.html index 021e822..75e70a5 100755 --- a/www/index.html +++ b/www/index.html @@ -130,24 +130,28 @@
- - - - - - - - - - - - - - - - - - + + + + + \ No newline at end of file From d06008b3dc7f6e25d5a8bf4a39f8d42aecdabe67 Mon Sep 17 00:00:00 2001 From: peteruithoven Date: Tue, 22 Oct 2013 13:50:32 +0200 Subject: [PATCH 06/13] Correcting spelling mistake --- www/settings.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/www/settings.html b/www/settings.html index 94f4e71..a44967d 100755 --- a/www/settings.html +++ b/www/settings.html @@ -75,7 +75,7 @@ mm/s


-
+
@@ -142,7 +142,7 @@
- The text {printingTemp} will be replaced by the printing temperature and {preheatTemp} will be replaced by the preaheat temperature. + The text {printingTemp} will be replaced by the printing temperature and {preheatTemp} will be replaced by the preheat temperature.

From 4899f7f510e5d1fb52662297c2546d04402843c4 Mon Sep 17 00:00:00 2001 From: peteruithoven Date: Tue, 22 Oct 2013 15:33:08 +0200 Subject: [PATCH 07/13] Added bed temperature settings and replacement patterns --- .gitignore | 2 ++ js_src/gcodeGenerating.js | 18 ++++++++++++++---- js_src/main.js | 2 +- www/css/settings.css | 5 +++++ www/js/doodle3d-client.js | 20 +++++++++++++++----- www/js/doodle3d-client.min.js | 2 +- www/settings.html | 18 ++++++++++++++---- 7 files changed, 52 insertions(+), 15 deletions(-) diff --git a/.gitignore b/.gitignore index a9b723e..11e8b71 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ .project + +node_modules/* diff --git a/js_src/gcodeGenerating.js b/js_src/gcodeGenerating.js index 6dd50be..8cd3a4c 100644 --- a/js_src/gcodeGenerating.js +++ b/js_src/gcodeGenerating.js @@ -49,6 +49,7 @@ function generate_gcode() { var layerHeight = settings["printer.layerHeight"]; var maxObjectHeight = settings["printer.maxObjectHeight"]; var temperature = settings["printer.temperature"]; + var bedTemperature = settings["printer.bed.temperature"]; var useSubLayers = settings["printer.useSubLayers"]; var enableTraveling = settings["printer.enableTraveling"]; var retractionEnabled = settings["printer.retraction.enabled"]; @@ -56,15 +57,14 @@ function generate_gcode() { var retractionminDistance = settings["printer.retraction.minDistance"]; var retractionamount = settings["printer.retraction.amount"]; var preheatTemperature = settings["printer.heatup.temperature"]; + var preheatBedTemperature = settings["printer.heatup.bed.temperature"]; var startGcode = settings["printer.startgcode"]; - startGcode = startGcode.replace("{printingTemp}",temperature); - startGcode = startGcode.replace("{preheatTemp}",preheatTemperature); + startGcode = subsituteVariables(startGcode,temperature,bedTemperature,preheatTemperature,preheatBedTemperature); startGcode = startGcode.split("\n"); var endGcode = settings["printer.endgcode"]; - endGcode = endGcode.replace("{printingTemp}",temperature); - endGcode = endGcode.replace("{preheatTemp}",preheatTemperature); + endGcode = subsituteVariables(endGcode,temperature,bedTemperature,preheatTemperature,preheatBedTemperature); endGcode = endGcode.split("\n"); /* @@ -260,6 +260,16 @@ function generate_gcode() { return gcode; } +function subsituteVariables(gcode,temperature,bedTemperature,preheatTemperature,preheatBedTemperature) { + + gcode = gcode.replace(/{printingTemp}/gi ,temperature); + gcode = gcode.replace(/{printingBedTemp}/gi ,bedTemperature); + gcode = gcode.replace(/{preheatTemp}/gi ,preheatTemperature); + gcode = gcode.replace(/{preheatBedTemp}/gi ,preheatBedTemperature); + + return gcode; +} + function scaleFunction(percent) { var r = 1.0; diff --git a/js_src/main.js b/js_src/main.js index 3717a01..04b0e7c 100644 --- a/js_src/main.js +++ b/js_src/main.js @@ -76,7 +76,7 @@ $(function() { $("#debug_display").css("display", "block"); // show and hide the progressguage and thermometer - showhideInterval = setInterval(showOrHideThermo, 2500); + //showhideInterval = setInterval(showOrHideThermo, 2500); // $("#debugContainer").css("display", "block"); diff --git a/www/css/settings.css b/www/css/settings.css index 7747b58..8feddcc 100644 --- a/www/css/settings.css +++ b/www/css/settings.css @@ -101,4 +101,9 @@ form input.error, form textarea.error, form select.error { form .errorMsg { color: #f00; margin: 0 0 0 1em; +} +form dl dt { + float: left; + font-style: italic; + width: 10em; } \ No newline at end of file diff --git a/www/js/doodle3d-client.js b/www/js/doodle3d-client.js index d36ffa0..3ba19c6 100644 --- a/www/js/doodle3d-client.js +++ b/www/js/doodle3d-client.js @@ -2215,6 +2215,7 @@ function generate_gcode() { var layerHeight = settings["printer.layerHeight"]; var maxObjectHeight = settings["printer.maxObjectHeight"]; var temperature = settings["printer.temperature"]; + var bedTemperature = settings["printer.bed.temperature"]; var useSubLayers = settings["printer.useSubLayers"]; var enableTraveling = settings["printer.enableTraveling"]; var retractionEnabled = settings["printer.retraction.enabled"]; @@ -2222,15 +2223,14 @@ function generate_gcode() { var retractionminDistance = settings["printer.retraction.minDistance"]; var retractionamount = settings["printer.retraction.amount"]; var preheatTemperature = settings["printer.heatup.temperature"]; + var preheatBedTemperature = settings["printer.heatup.bed.temperature"]; var startGcode = settings["printer.startgcode"]; - startGcode = startGcode.replace("{printingTemp}",temperature); - startGcode = startGcode.replace("{preheatTemp}",preheatTemperature); + startGcode = subsituteVariables(startGcode,temperature,bedTemperature,preheatTemperature,preheatBedTemperature); startGcode = startGcode.split("\n"); var endGcode = settings["printer.endgcode"]; - endGcode = endGcode.replace("{printingTemp}",temperature); - endGcode = endGcode.replace("{preheatTemp}",preheatTemperature); + endGcode = subsituteVariables(endGcode,temperature,bedTemperature,preheatTemperature,preheatBedTemperature); endGcode = endGcode.split("\n"); /* @@ -2426,6 +2426,16 @@ function generate_gcode() { return gcode; } +function subsituteVariables(gcode,temperature,bedTemperature,preheatTemperature,preheatBedTemperature) { + + gcode = gcode.replace(/{printingTemp}/gi ,temperature); + gcode = gcode.replace(/{printingBedTemp}/gi ,bedTemperature); + gcode = gcode.replace(/{preheatTemp}/gi ,preheatTemperature); + gcode = gcode.replace(/{preheatBedTemp}/gi ,preheatBedTemperature); + + return gcode; +} + function scaleFunction(percent) { var r = 1.0; @@ -3333,7 +3343,7 @@ $(function() { $("#debug_display").css("display", "block"); // show and hide the progressguage and thermometer - showhideInterval = setInterval(showOrHideThermo, 2500); + //showhideInterval = setInterval(showOrHideThermo, 2500); // $("#debugContainer").css("display", "block"); diff --git a/www/js/doodle3d-client.min.js b/www/js/doodle3d-client.min.js index 054e1db..242e645 100644 --- a/www/js/doodle3d-client.min.js +++ b/www/js/doodle3d-client.min.js @@ -1,2 +1,2 @@ function SettingsWindow(){this.wifiboxURL,this.wifiboxCGIBinURL,this.window,this.form,this.timeoutTime=3e3,this.retryDelay=2e3,this.retryRetrieveNetworkStatusDelayTime=1e3,this.retryLoadSettingsDelay,this.retrySaveSettingsDelay,this.retryRetrieveNetworkStatusDelay,this.apFieldSet,this.clientFieldSet,this.networks,this.currentNetwork,this.selectedNetwork,this.currentLocalIP="",this.clientModeState=SettingsWindow.NOT_CONNECTED,this.currentAP,this.apModeState=SettingsWindow.NO_AP,this.retrieveNetworkStatusDelay,this.retrieveNetworkStatusDelayTime=1e3,SettingsWindow.SETTINGS_LOADED="settingsLoaded",SettingsWindow.NOT_CONNECTED="not connected",SettingsWindow.CONNECTED="connected",SettingsWindow.CONNECTING="connecting",SettingsWindow.CONNECTING_FAILED="connecting failed",SettingsWindow.NO_AP="no ap",SettingsWindow.AP="ap",SettingsWindow.CREATING_AP="creating ap",SettingsWindow.API_CONNECTING_FAILED=-1,SettingsWindow.API_NOT_CONNECTED=0,SettingsWindow.API_CONNECTING=1,SettingsWindow.API_CONNECTED=2,SettingsWindow.API_CREATING=3,SettingsWindow.API_CREATED=4,SettingsWindow.NETWORK_MODE_NEITHER="neither",SettingsWindow.NETWORK_MODE_CLIENT="clientMode",SettingsWindow.NETWORK_MODE_ACCESS_POINT="accessPointMode",this.networkMode=SettingsWindow.NETWORK_MODE_NEITHER,this.updatePanel=new UpdatePanel;var a=this;this.init=function(b,c){this.wifiboxURL=b,this.wifiboxCGIBinURL=c,this.window=$("#settings"),this.window.find(".btnOK").click(this.submitwindow),this.window.find(".settingsContainer").load("settings.html",function(){console.log("Settings:finished loading settings.html, now loading settings..."),a.form=a.window.find("form"),a.form.submit(function(b){a.submitwindow(b)}),a.loadSettings();var c=a.form.find("label[for='ap']"),d=a.form.find("label[for='client']"),e=a.form.find("#refreshNetworks"),f=a.form.find("#connectToNetwork"),g=a.form.find("#createAP"),h=a.form.find("#network");a.apFieldSet=a.form.find("#apSettings"),a.clientFieldSet=a.form.find("#clientSettings"),c.on("touchstart mousedown",a.showAPSettings),d.on("touchstart mousedown",a.showClientSettings),e.on("touchstart mousedown",a.refreshNetworks),f.on("touchstart mousedown",a.connectToNetwork),g.on("touchstart mousedown",a.createAP),h.change(a.networkSelectorChanged);var i=a.form.find("#updatePanel");a.updatePanel.init(b,i)})},this.submitwindow=function(b){b.preventDefault(),b.stopPropagation(),a.saveSettings(a.readForm(),function(){a.hideSettings()}),clearTimeout(a.retryRetrieveNetworkStatusDelay)},this.showSettings=function(){console.log("f:showSettings()"),this.loadSettings(),$("#contentOverlay").fadeIn(375,function(){document.body.removeEventListener("touchmove",prevent,!1)})},this.hideSettings=function(){$("#contentOverlay").fadeOut(375,function(){document.body.addEventListener("touchmove",prevent,!1)})},this.loadSettings=function(){return communicateWithWifibox?(console.log("Settings:loadSettings() >> getting new data..."),$.ajax({url:this.wifiboxURL+"/config/all",dataType:"json",timeout:this.timeoutTime,success:function(b){console.log("Settings:loadSettings response: ",b),settings=b.data,console.log(" settings: ",settings),a.fillForm(),$(document).trigger(SettingsWindow.SETTINGS_LOADED)}}).fail(function(){console.log("Settings:loadSettings: failed"),clearTimeout(a.retryLoadSettingsDelay),a.retryLoadSettingsDelay=setTimeout(function(){a.loadSettings()},a.retryDelay)}),this.refreshNetworks(),this.retrieveNetworkStatus(!1),void 0):(console.log(" communicateWithWifibox is false: settings aren't being loaded from wifibox..."),void 0)},this.fillForm=function(){console.log("SettingsWindow:fillForm");var a=this.form.find("select");a.each(function(a,b){var b=$(b);b.val(settings[b.attr("name")])});var b=this.form.find("input");b.each(function(a,b){var b=$(b);switch(b.attr("type")){case"text":case"number":b.val(settings[b.attr("name")]);break;case"checkbox":b.prop("checked",settings[b.attr("name")])}});var c=this.form.find("textarea");c.each(function(a,b){var b=$(b),c=settings[b.attr("name")];b.val(c)})},this.saveSettings=function(b,c){settings=b,communicateWithWifibox&&$.ajax({url:this.wifiboxURL+"/config",type:"POST",data:b,dataType:"json",timeout:this.timeoutTime,success:function(b){if(console.log("Settings:saveSettings response: ",b),"error"==b.status)clearTimeout(a.retrySaveSettingsDelay),a.retrySaveSettingsDelay=setTimeout(function(){a.saveSettings(settings)},a.retryDelay);else{var d=b.data,e=d.validation;a.clearValidationErrors();var f=!0;$.each(e,function(b,c){"ok"!=c&&(console.log("ERROR: setting '"+b+"' not successfully set. Message: "+c),a.displayValidationError(b,c),f=!1)}),settings.substituted_ssid=d.substituted_ssid,c&&f&&c()}}}).fail(function(){console.log("Settings:saveSettings: failed"),clearTimeout(a.retrySaveSettingsDelay),a.retrySaveSettingsDelay=setTimeout(function(){a.saveSettings(settings)},a.retryDelay)})},this.displayValidationError=function(b,c){var d=a.form.find("[name|='"+b+"']");console.log("formElement: ",d),d.addClass("error");var e="

"+c+"

";d.after(e)},this.clearValidationErrors=function(){var b=a.form.find(".error");b.each(function(a,b){$(b).removeClass("error")})},this.readForm=function(){var b={},c=a.form.find("select");c.each(function(a,c){var c=$(c);"network.client.network"!=c.attr("name")&&(b[c.attr("name")]=c.val())});var d=a.form.find("input");d.each(function(a,c){var c=$(c);switch(c.attr("type")){case"text":case"number":b[c.attr("name")]=c.val();break;case"checkbox":b[c.attr("name")]=c.prop("checked")}});var e=a.form.find("textarea");return e.each(function(a,c){var c=$(c);b[c.attr("name")]=c.val()}),b},this.showAPSettings=function(){a.apFieldSet.show(),a.clientFieldSet.hide()},this.showClientSettings=function(){a.clientFieldSet.show(),a.apFieldSet.hide()},this.refreshNetworks=function(){console.log("Settings:refreshNetworks"),communicateWithWifibox&&$.ajax({url:a.wifiboxURL+"/network/scan",type:"GET",dataType:"json",timeout:a.timeoutTime,success:function(b){if(console.log("Settings:refreshNetworks response: ",b),"error"==b.status);else{var c=b.data.networks;a.networks={};var d=!1,e=a.form.find("#network");e.empty(),e.append($("").val(SettingsWindow.NOT_CONNECTED).html("not connected")),$.each(c,function(b,c){c.ssid==a.currentNetwork&&(d=!0),e.append($("").val(c.ssid).html(c.ssid)),a.networks[c.ssid]=c}),d&&(e.val(a.currentNetwork),a.selectNetwork(a.currentNetwork))}}}).fail(function(){})},this.retrieveNetworkStatus=function(b){communicateWithWifibox&&$.ajax({url:a.wifiboxURL+"/network/status",type:"GET",dataType:"json",timeout:a.timeoutTime,success:function(c){if(console.log("Settings:retrieveNetworkStatus response: ",c),"error"==c.status);else{var d=c.data;switch("string"==typeof d.status&&(d.status=parseInt(d.status)),d.status){case SettingsWindow.API_NOT_CONNECTED:a.apFieldSet.show(),a.clientFieldSet.show(),a.networkMode=SettingsWindow.NETWORK_MODE_NEITHER;break;case SettingsWindow.API_CONNECTING_FAILED:case SettingsWindow.API_CONNECTING:case SettingsWindow.API_CONNECTED:if(a.form.find("#client").prop("checked",!0),a.apFieldSet.hide(),a.clientFieldSet.show(),d.status==SettingsWindow.API_CONNECTED){var e=a.form.find("#network");e.val(d.ssid),a.currentNetwork=d.ssid,a.currentLocalIP=d.localip,a.selectNetwork(d.ssid)}else a.currentLocalIP="";a.networkMode=SettingsWindow.NETWORK_MODE_CLIENT;break;case SettingsWindow.API_CREATING:case SettingsWindow.API_CREATED:a.form.find("#ap").prop("checked",!0),a.apFieldSet.show(),a.clientFieldSet.hide(),a.currentNetwork=void 0,a.selectNetwork(SettingsWindow.NOT_CONNECTED);var e=a.form.find("#network");e.val(SettingsWindow.NOT_CONNECTED),d.ssid&&d.status==SettingsWindow.API_CREATED&&(a.currentAP=d.ssid),a.networkMode=SettingsWindow.NETWORK_MODE_ACCESS_POINT}switch(a.updatePanel.setNetworkMode(a.networkMode),d.status){case SettingsWindow.API_CONNECTING_FAILED:a.setClientModeState(SettingsWindow.CONNECTING_FAILED,d.statusMessage),a.setAPModeState(SettingsWindow.NO_AP,"");break;case SettingsWindow.API_NOT_CONNECTED:a.setClientModeState(SettingsWindow.NOT_CONNECTED,""),a.setAPModeState(SettingsWindow.NO_AP,"");break;case SettingsWindow.API_CONNECTING:a.setClientModeState(SettingsWindow.CONNECTING,""),a.setAPModeState(SettingsWindow.NO_AP,"");break;case SettingsWindow.API_CONNECTED:a.setClientModeState(SettingsWindow.CONNECTED,""),a.setAPModeState(SettingsWindow.NO_AP,"");break;case SettingsWindow.API_CREATING:a.setClientModeState(SettingsWindow.NOT_CONNECTED,""),a.setAPModeState(SettingsWindow.CREATING_AP,"");break;case SettingsWindow.API_CREATED:a.setClientModeState(SettingsWindow.NOT_CONNECTED,""),a.setAPModeState(SettingsWindow.AP,"")}if(b)switch(d.status){case SettingsWindow.API_CONNECTING:case SettingsWindow.API_CREATING:clearTimeout(a.retryRetrieveNetworkStatusDelay),a.retryRetrieveNetworkStatusDelay=setTimeout(function(){a.retrieveNetworkStatus(b)},a.retryRetrieveNetworkStatusDelayTime)}}}}).fail(function(){console.log("Settings:retrieveNetworkStatus: failed"),clearTimeout(a.retryRetrieveNetworkStatusDelay),a.retryRetrieveNetworkStatusDelay=setTimeout(function(){a.retrieveNetworkStatus(b)},a.retryDelay)})},this.networkSelectorChanged=function(){var b=$(this).find("option:selected");a.selectNetwork(b.val())},this.selectNetwork=function(a){if(console.log("select network: ",a),""!=a)if(console.log(" checked"),this.selectedNetwork=a,void 0==this.networks||a==SettingsWindow.NOT_CONNECTED)this.hideWiFiPassword();else{var b=this.networks[a];"none"==b.encryption?this.hideWiFiPassword():this.showWiFiPassword(),this.form.find("#password").val("")}},this.showWiFiPassword=function(){this.form.find("#passwordLabel").show(),this.form.find("#password").show()},this.hideWiFiPassword=function(){this.form.find("#passwordLabel").hide(),this.form.find("#password").hide()},this.setClientModeState=function(b,c){var d=this.form.find("#clientModeState"),e=a.form.find("#connectToNetwork");switch(b){case SettingsWindow.NOT_CONNECTED:e.removeAttr("disabled"),d.html("Not connected");break;case SettingsWindow.CONNECTED:e.removeAttr("disabled");var f="Connected to: "+this.currentNetwork+".";if(void 0!=this.currentLocalIP&&""!=this.currentLocalIP){var g=""+this.currentLocalIP+"";f+=" (IP: "+g+")"}d.html(f);break;case SettingsWindow.CONNECTING:e.attr("disabled",!0),d.html("Connecting... Reconnect by connecting your device to "+this.selectedNetwork+" and going to connect.doodle3d.com");break;case SettingsWindow.CONNECTING_FAILED:e.removeAttr("disabled"),d.html(c)}this.clientModeState=b},this.setAPModeState=function(a){var b=this.form.find("#apModeState"),c=this.form.find("#createAP");switch(a){case SettingsWindow.NO_AP:c.removeAttr("disabled"),b.html("Not currently a access point");break;case SettingsWindow.AP:c.removeAttr("disabled"),b.html("Is access point: "+this.currentAP+"");break;case SettingsWindow.CREATING_AP:c.attr("disabled",!0),b.html("Creating access point... Reconnect by connecting your device to "+settings.substituted_ssid+" and going to draw.doodle3d.com")}this.apModeState=a},this.connectToNetwork=function(){if(console.log("connectToNetwork"),void 0!=a.selectedNetwork){var b={ssid:a.selectedNetwork,phrase:a.form.find("#password").val(),recreate:!0};console.log(" postData: ",b),communicateWithWifibox&&a.saveSettings(a.readForm(),function(){$.ajax({url:a.wifiboxCGIBinURL+"/network/associate",type:"POST",data:b,dataType:"json",timeout:a.timeoutTime,success:function(a){console.log("Settings:connectToNetwork response: ",a)}}).fail(function(){console.log("Settings:connectToNetwork: timeout (normal behavior)")})}),a.setClientModeState(SettingsWindow.CONNECTING,""),clearTimeout(a.retrieveNetworkStatusDelay),a.retrieveNetworkStatusDelay=setTimeout(function(){a.retrieveNetworkStatus(!0)},a.retrieveNetworkStatusDelayTime)}},this.createAP=function(){console.log("createAP"),communicateWithWifibox&&a.saveSettings(a.readForm(),function(){a.setAPModeState(SettingsWindow.CREATING_AP),$.ajax({url:a.wifiboxCGIBinURL+"/network/openap",type:"POST",dataType:"json",timeout:a.timeoutTime,success:function(a){console.log("Settings:createAP response: ",a)}}).fail(function(){console.log("Settings:createAP: timeout (normal behavior)")}),a.setAPModeState(SettingsWindow.CREATING_AP,""),clearTimeout(a.retrieveNetworkStatusDelay),a.retrieveNetworkStatusDelay=setTimeout(function(){a.retrieveNetworkStatus(!0)},a.retrieveNetworkStatusDelayTime)})}}function UpdatePanel(){this.wifiboxURL,this.element,this.statusCheckInterval=1e3,this.statusCheckDelayer,this.installedDelay=6e4,this.installedDelayer,this.retryDelay=1e3,this.retryDelayer,this.canUpdate=!1,this.currentVersion="",this.newestVersion,this.progress,this.imageSize,UpdatePanel.NONE=1,UpdatePanel.DOWNLOADING=2,UpdatePanel.DOWNLOAD_FAILED=3,UpdatePanel.IMAGE_READY=4,UpdatePanel.INSTALLING=5,UpdatePanel.INSTALLED=6,UpdatePanel.INSTALL_FAILED=7,this.state,this.stateText="",this.networkMode;var a=this;this.init=function(a,b){this.wifiboxURL=a,this.element=b,this.btnUpdate=this.element.find("#update"),this.statusDisplay=this.element.find("#updateState"),this.infoDisplay=this.element.find("#updateInfo"),this.btnUpdate.click(this.update),this.checkStatus(!1)},this.update=function(){console.log("UpdatePanel:update"),a.downloadUpdate()},this.downloadUpdate=function(){console.log("UpdatePanel:downloadUpdate"),$.ajax({url:a.wifiboxURL+"/update/download",type:"POST",dataType:"json",success:function(a){console.log("UpdatePanel:downloadUpdate response: ",a)}}).fail(function(){console.log("UpdatePanel:downloadUpdate: failed")}),a.setState(UpdatePanel.DOWNLOADING),a.startCheckingStatus()},this.installUpdate=function(){console.log("UpdatePanel:installUpdate"),a.stopCheckingStatus(),$.ajax({url:a.wifiboxURL+"/update/install",type:"POST",dataType:"json",success:function(a){console.log("UpdatePanel:installUpdate response: ",a)}}).fail(function(){console.log("UpdatePanel:installUpdate: no respons (there shouldn't be)")}),a.setState(UpdatePanel.INSTALLING),clearTimeout(a.installedDelayer),a.installedDelayer=setTimeout(function(){a.setState(UpdatePanel.INSTALLED)},a.installedDelay)},this.startCheckingStatus=function(){clearTimeout(a.statusCheckDelayer),clearTimeout(a.retryDelayer),a.statusCheckDelayer=setTimeout(function(){a.checkStatus(!0)},a.statusCheckInterval)},this.stopCheckingStatus=function(){clearTimeout(a.statusCheckDelayer),clearTimeout(a.retryDelayer)},this.checkStatus=function(b){communicateWithWifibox&&$.ajax({url:a.wifiboxURL+"/update/status",type:"GET",dataType:"json",success:function(c){if(console.log("UpdatePanel:checkStatus response: ",c),b)switch(a.state){case UpdatePanel.DOWNLOADING:case UpdatePanel.INSTALLING:clearTimeout(a.statusCheckDelayer),a.statusCheckDelayer=setTimeout(function(){a.checkStatus(b)},a.statusCheckInterval)}if("error"!=c.status){var d=c.data;a.handleStatusData(d)}}}).fail(function(){b&&(clearTimeout(a.retryDelayer),a.retryDelayer=setTimeout(function(){a.checkStatus(b)},a.retryDelay))})},this.handleStatusData=function(b){switch(a.canUpdate=b.can_update,(a.currentVersion!=b.current_version||a.newestVersion!=b.newest_version)&&(a.currentVersion=b.current_version,a.newestVersion=b.newest_version,a.updateInfoDisplay()),a.stateText=b.state_text,a.progress=b.progress,a.imageSize=b.image_size,a.setState(b.state_code),this.state){case UpdatePanel.IMAGE_READY:a.installUpdate()}},this.setState=function(b){if(this.state!=b){if(console.log("UpdatePanel:setState: ",this.state," > ",b,"(",this.stateText,") (networkMode: ",a.networkMode,") (newestVersion: ",a.newestVersion,")"),this.state=b,void 0!=a.newestVersion)switch(this.state){case UpdatePanel.NONE:case UpdatePanel.DOWNLOAD_FAILED:case UpdatePanel.INSTALL_FAILED:a.canUpdate?a.btnUpdate.removeAttr("disabled"):a.btnUpdate.attr("disabled",!0);break;default:a.btnUpdate.attr("disabled",!0)}else a.btnUpdate.attr("disabled",!0);this.updateStatusDisplay()}},this.updateStatusDisplay=function(){var b="";if(void 0!=a.newestVersion)switch(this.state){case UpdatePanel.NONE:b=a.canUpdate?"Update(s) available.":"You're up to date.";break;case UpdatePanel.DOWNLOADING:b="Downloading update...";break;case UpdatePanel.DOWNLOAD_FAILED:b="Downloading update failed.";break;case UpdatePanel.IMAGE_READY:b="Update downloaded.";break;case UpdatePanel.INSTALLING:b="Installing update... (will take a minute)";break;case UpdatePanel.INSTALLED:b="Update complete, please refresh Page.";break;case UpdatePanel.INSTALL_FAILED:b="Installing update failed."}else b=a.networkMode==SettingsWindow.NETWORK_MODE_ACCESS_POINT?"Can't access internet in access point mode.":"Can't access internet.";this.statusDisplay.html(b)},this.updateInfoDisplay=function(){var b="Current version: "+a.currentVersion+". ";a.canUpdate&&(b+="Latest version: "+a.newestVersion+"."),a.infoDisplay.text(b)},this.setNetworkMode=function(b){a.networkMode=b}}function setTemperature(a){void 0!=a&&a()}function setTemperature(a){void 0!=a&&a()}function initVerticalShapes(){VERTICALSHAPE=verticalShapes.NONE,$(".verticalShapes, .straight").on("mouseup touchend",function(a){a.preventDefault(),console.log("diverging"),VERTICALSHAPE=verticalShapes.NONE,redrawRenderedPreview()}),$(".verticalShapes, .diverging").on("mouseup touchend",function(a){a.preventDefault(),console.log("diverging"),VERTICALSHAPE=verticalShapes.DIVERGING,redrawRenderedPreview()}),$(".verticalShapes, .converging").on("mouseup touchend",function(a){a.preventDefault(),console.log("converging"),VERTICALSHAPE=verticalShapes.CONVERGING,redrawRenderedPreview()}),$(".verticalShapes, .sinus").on("mouseup touchend",function(a){a.preventDefault(),console.log("sinus"),VERTICALSHAPE=verticalShapes.SINUS,redrawRenderedPreview()})}function resetVerticalShapes(){VERTICALSHAPE=verticalShapes.NONE}function initButtonBehavior(){function a(a){a.preventDefault(),btnOopsInterval=setInterval(function(){oopsUndo()},20)}function b(a){a.preventDefault(),clearInterval(btnOopsInterval)}function c(a){a.preventDefault(),previewUp(!0),clearInterval(btnMoveUpInterval),btnMoveUpInterval=setInterval(function(){previewUp(!0)},1e3/30)}function d(a){a.preventDefault(),console.log("btnMoveUp mouse up"),clearInterval(btnMoveUpInterval),previewUp()}function e(a){a.preventDefault(),previewDown(!0),clearInterval(btnMoveDownInterval),btnMoveDownInterval=setInterval(function(){previewDown(!0)},1e3/30)}function f(a){a.preventDefault(),console.log("btnMoveDown mouse up"),clearInterval(btnMoveDownInterval),previewDown()}function g(a){a.preventDefault(),previewTwistLeft(!0),clearInterval(btnTwistLeftInterval),btnTwistLeftInterval=setInterval(function(){previewTwistLeft(!0)},1e3/30)}function h(a){a.preventDefault(),clearInterval(btnTwistLeftInterval),previewTwistLeft()}function i(a){a.preventDefault(),previewTwistRight(!0),clearInterval(btnTwistRightInterval),btnTwistRightInterval=setInterval(function(){previewTwistRight(!0)},1e3/30)}function j(a){a.preventDefault(),clearInterval(btnTwistRightInterval),previewTwistRight()}console.log("f:initButtonBehavior"),btnOops=$(".btnOops"),btnMoveUp=$("#btnMoveUp"),btnMoveDown=$("#btnMoveDown"),btnTwistLeft=$("#btnTwistLeft"),btnTwistRight=$("#btnTwistRight"),btnInfo=$(".btnInfo"),btnSettings=$(".btnSettings"),btnNew=$(".btnNew"),btnPrint=$(".btnPrint"),btnStop=$(".btnStop"),btnPrevious=$(".btnPrevious"),btnNext=$(".btnNext"),btnNew.on("touchstart mousedown",clearDoodle),btnPrint.on("touchstart mousedown",print),$("#btnPrevious").css("opacity","0.3"),btnNext.css("opacity","0.3"),$("#btnSave").css("opacity","0.3"),btnInfo.css("opacity","0.3"),btnOops.on("touchstart",function(b){a(b)}),btnOops.on("touchend",function(a){b(a)}),btnOops.mousedown(function(b){a(b)}),btnOops.mouseup(function(a){b(a)}),btnMoveUp.mousedown(function(a){c(a)}),btnMoveUp.mouseup(function(a){d(a)}),btnMoveUp.on("touchstart",function(a){c(a)}),btnMoveUp.on("touchend",function(a){d(a)}),btnMoveDown.mousedown(function(a){e(a)}),btnMoveDown.mouseup(function(a){f(a)}),btnMoveDown.on("touchstart",function(a){e(a)}),btnMoveDown.on("touchend",function(a){f(a)}),btnTwistLeft.mousedown(function(a){g(a)}),btnTwistLeft.mouseup(function(a){h(a)}),btnTwistLeft.on("touchstart",function(a){g(a)}),btnTwistLeft.on("touchend",function(a){h(a)}),btnTwistRight.mousedown(function(a){i(a)}),btnTwistRight.mouseup(function(a){j(a)}),btnTwistRight.on("touchstart",function(a){i(a)}),btnTwistRight.on("touchend",function(a){j(a)}),btnSettings.bind("touchstart mousedown",function(){settingsWindow.showSettings()}),btnInfo.mouseup(function(a){a.preventDefault(),console.log("btnInfo mouse up")})}function stopPrint(){console.log("f:stopPrint() >> sendPrintCommands = "+sendPrintCommands),sendPrintCommands&&printer.stop(),printer.overruleState(Printer.STOPPING_STATE)}function prevDoodle(){console.log("f:prevDoodle()"),console.log("f:prevDoodle()")}function nextDoodle(){console.log("f:nextDoodle()")}function print(){console.log("f:print() >> sendPrintCommands = "+sendPrintCommands),_points.length>2?(printer.overruleState(Printer.BUFFERING_STATE),btnStop.css("display","none"),clearTimeout(gcodeGenerateDelayer),gcodeGenerateDelayer=setTimeout(function(){var a=generate_gcode();sendPrintCommands?a.length>0?printer.print(a):(printer.overruleState(Printer.IDLE_STATE),printer.startStatusCheckInterval()):console.log("sendPrintCommands is false: not sending print command to 3dprinter"),debugMode&&($("#textdump").text(""),$("#textdump").text(a.join("\n")))},gcodeGenerateDelay)):console.log("f:print >> not enough points!")}function clearMainView(){ctx.save(),ctx.clearRect(0,0,canvas.width,canvas.height),ctx.restore()}function resetPreview(){previewCtx.save(),previewCtx.clearRect(0,0,canvas.width,canvas.height),previewCtx.restore(),numLayers=previewDefaults.numLayers,rStep=previewDefaults.rotation}function oopsUndo(){_points.pop(),redrawDoodle(),redrawPreview()}function previewUp(a){maxNumLayers>numLayers&&numLayers++,redrawRenderedPreview(a)}function previewDown(a){numLayers>minNumLayers&&numLayers--,redrawRenderedPreview(a)}function previewTwistLeft(a){void 0==a&&(a=!1),rStep>-previewRotationLimit&&(rStep-=twistIncrement),redrawRenderedPreview(a)}function previewTwistRight(a){previewRotationLimit>rStep&&(rStep+=twistIncrement),redrawRenderedPreview(a)}function update(){setState(printer.state,printer.hasControl),thermometer.update(printer.temperature,printer.targetTemperature),progressbar.update(printer.currentLine,printer.totalLines)}function setState(a,b){if(a!=state||b!=hasControl){prevState=state,console.log("setState: ",prevState," > ",a," ( ",b,")"),setDebugText("State: "+a);var c=a==Printer.IDLE_STATE&&b;c?(btnPrint.removeClass("disabled"),btnPrint.unbind("touchstart mousedown"),btnPrint.bind("touchstart mousedown",print)):(btnPrint.addClass("disabled"),btnPrint.unbind("touchstart mousedown"));var d=(a==Printer.PRINTING_STATE||a==Printer.BUFFERING_STATE)&&b;switch(d?(btnStop.removeClass("disabled"),btnStop.unbind("touchstart mousedown"),btnStop.bind("touchstart mousedown",stopPrint)):(btnStop.addClass("disabled"),btnStop.unbind("touchstart mousedown")),a){case Printer.IDLE_STATE:case Printer.BUFFERING_STATE:case Printer.PRINTING_STATE:case Printer.STOPPING_STATE:thermometer.show();break;default:thermometer.hide()}switch(a){case Printer.PRINTING_STATE:progressbar.show();break;default:progressbar.hide()}a==Printer.WIFIBOX_DISCONNECTED_STATE?message.set("Lost connection to WiFi box",Message.ERROR):prevState==Printer.WIFIBOX_DISCONNECTED_STATE?message.set("Connected to WiFi box",Message.INFO,!0):a==Printer.DISCONNECTED_STATE?message.set("Printer disconnected",Message.WARNING,!0):(prevState==Printer.DISCONNECTED_STATE&&a==Printer.IDLE_STATE||prevState==Printer.UNKNOWN_STATE&&a==Printer.IDLE_STATE)&&message.set("Printer connected",Message.INFO,!0),state=a,hasControl=b}}function initDoodleDrawing(){console.log("f:initDoodleDrawing()"),$canvas=$("#mycanvas"),canvas=$canvas[0],ctx=canvas.getContext("2d"),canvasWidth=canvas.width,canvasHeight=canvas.height,canvas.addEventListener?(canvas.addEventListener("mousedown",onCanvasMouseDown,!1),canvas.addEventListener("mousemove",onCanvasMouseMove,!1),canvas.addEventListener("mouseup",onCanvasMouseUp,!1),canvas.addEventListener("touchstart",onCanvasTouchDown,!1),canvas.addEventListener("touchmove",onCanvasTouchMove,!1),canvas.addEventListener("touchend",onCanvasTouchEnd,!1),debugMode||document.body.addEventListener("touchmove",prevent,!1)):(canvas.attachEvent("onmousedown",onCanvasMouseDown),canvas.attachEvent("onmousemove",onCanvasMouseMove),canvas.attachEvent("onmouseup",onCanvasMouseUp),canvas.attachEvent("ontouchstart",onCanvasTouchDown),canvas.attachEvent("ontouchmove",onCanvasTouchMove),canvas.attachEvent("ontouchend",onCanvasTouchEnd),document.body.attachEvent("ontouchmove",prevent)),drawCanvas=$("#mycanvasContainer"),console.log("drawCanvasTopLeftCoords: "+drawCanvasTopLeftCoords),drawCanvasTopLeftCoords[0]=drawCanvas.offset().left,drawCanvasTopLeftCoords[1]=drawCanvas.offset().top,console.log("f:initDoodleDrawing() >> canvasWidth: "+canvasWidth),console.log("f:initDoodleDrawing() >> canvasHeight: "+canvasHeight)}function draw(a,b,c){if(0==prevX&&0==prevY&&(prevX=a,prevY=b),ctx.beginPath(),ctx.moveTo(prevX,prevY),ctx.lineTo(a,b),void 0!=c)ctx.lineWidth=c;else{if(drawVariableLineWeight){var d=Math.sqrt(Math.pow(prevX-a,2)+Math.pow(prevY-b,2));lineweight+=10>d?.25:20>d?.5:30>d?.75:50>d?1:80>d?1.5:120>d?2.25:170>d?3.5:2,lineweight=Math.min(lineweight,30),lineweight*=.9,lineweight=Math.max(lineweight,1)}else lineweight=2;ctx.lineWidth=lineweight}ctx.lineCap="round",ctx.stroke(),prevX=a,prevY=b}function clearDoodle(){console.log("f:clearDoodle"),_points=[],prevX=0,prevY=0,updatePrevX=-1,updatePrevY=-1,doodleBounds=[-1,-1,-1,-1],doodleTransform=[0,0,1,1],dragging=!1,clearMainView(),resetPreview(),resetVerticalShapes()}function redrawDoodle(){console.log("f:redrawDoodle()"),clearMainView(),prevX=0,prevY=0;for(var a=0;a<_points.length;a++)1==_points[a][2]?draw(_points[a][0],_points[a][1],.5):draw(_points[a][0],_points[a][1])}function adjustBounds(a,b){var c=!1;return console.log("f:adjustBounds("+a+","+b+")"),-1==doodleBounds[0]?(doodleBounds[0]=a,doodleBounds[1]=b,doodleBounds[2]=a,doodleBounds[3]=b,void 0):(adoodleBounds[2]&&(doodleBounds[2]=a,c=!0),bdoodleBounds[3]&&(doodleBounds[3]=b,c=!0),c)}function adjustPreviewTransformation(){doodleTransform[0]=doodleBounds[0],doodleTransform[1]=doodleBounds[1];var a,b,c;_points.length<2?(a=1,b=1,c=Math.min(a,b)):(a=canvasWidth/(doodleBounds[2]-doodleBounds[0]),b=canvasHeight/(doodleBounds[3]-doodleBounds[1]),c=Math.min(a,b)),doodleTransform[2]=c,doodleTransform[3]=c}function onCanvasMouseDown(a){dragging=!0,prevCountingTime=(new Date).getTime(),movementCounter=0;var b,c;void 0!=a.offsetX?(b=a.offsetX,c=a.offsetY):(b=a.layerX,c=a.layerY),_points.push([b,c,!0]),adjustBounds(b,c),adjustPreviewTransformation(),draw(b,c,.5)}function onCanvasMouseMove(a){if(dragging){var b,c;if(void 0!=a.offsetX?(b=a.offsetX,c=a.offsetY):(b=a.layerX,c=a.layerY),-1!=prevPoint.x||-1!=prevPoint.y){var d=Math.sqrt(Math.pow(prevPoint.x-b,2)+Math.pow(prevPoint.y-c,2));d>5&&(_points.push([b,c,!1]),adjustBounds(b,c),adjustPreviewTransformation(),draw(b,c),prevPoint.x=b,prevPoint.y=c)}else _points.push([b,c,!1]),adjustBounds(b,c),adjustPreviewTransformation(),draw(b,c),prevPoint.x=b,prevPoint.y=c;(new Date).getTime()-prevRedrawTime>redrawInterval&&(prevRedrawTime=(new Date).getTime(),_points.length<50?redrawPreview():updatePreview(b,c,!0))}}function onCanvasMouseUp(){dragging=!1,console.log("doodleBounds: "+doodleBounds),console.log("doodleTransform: "+doodleTransform),console.log("_points.length :"+_points.length),renderToImageDataPreview()}function onCanvasTouchDown(a){a.preventDefault(),console.log("f:onCanvasTouchDown >> e: ",a);var b=a.touches[0].pageX-drawCanvasTopLeftCoords[0],c=a.touches[0].pageY-drawCanvasTopLeftCoords[1];_points.push([b,c,!0]),adjustBounds(b,c),adjustPreviewTransformation(),draw(b,c,.5),movementCounter=0,prevRedrawTime=(new Date).getTime()}function onCanvasTouchMove(a){a.preventDefault();var b=a.touches[0].pageX-drawCanvasTopLeftCoords[0],c=a.touches[0].pageY-drawCanvasTopLeftCoords[1];if(console.log("f:onCanvasTouchMove >> x,y = "+b+","+c+" , e: ",a),-1!=prevPoint.x||-1!=prevPoint.y){var d=Math.sqrt(Math.pow(prevPoint.x-b,2)+Math.pow(prevPoint.y-c,2));d>5&&(_points.push([b,c,!1]),adjustBounds(b,c),adjustPreviewTransformation(),draw(b,c),prevPoint.x=b,prevPoint.y=c)}else _points.push([b,c,!1]),adjustBounds(b,c),adjustPreviewTransformation(),draw(b,c),prevPoint.x=b,prevPoint.y=c;(new Date).getTime()-prevRedrawTime>redrawInterval&&(_points.length<50?redrawPreview():updatePreview(b,c,!0),prevRedrawTime=(new Date).getTime())}function onCanvasTouchEnd(){console.log("f:onCanvasTouchEnd()"),console.log("doodleBounds: "+doodleBounds),console.log("doodleTransform: "+doodleTransform),console.log("_points.length :"+_points.length),renderToImageDataPreview()}function prevent(a){a.preventDefault()}function initPreviewRendering(){console.log("f:initPreviewRendering()"),$preview=$("#preview"),preview=$preview[0],previewCtx=preview.getContext("2d");var a=preview.width/canvas.width;preview_tmp=document.getElementById("preview_tmp"),preview_tmp.width=preview.width,preview_tmp.height=canvas.height*a,$("#preview_tmp").css("top",-preview_tmp.height),previewCtx_tmp=preview_tmp.getContext("2d"),calcPreviewCanvasProperties(),redrawPreview()}function calcPreviewCanvasProperties(){console.log("f:calcPreviewCanvasProperties()"),globalScale=preview.width/canvasWidth,layerCX=canvasWidth/2*globalScale,layerCY=canvasHeight/2*globalScale,layerOffsetY=preview.height*(1-previewVerticalPadding.bottom),yStep=(preview.height-preview.height*(previewVerticalPadding.top+previewVerticalPadding.bottom))/maxNumLayers}function redrawPreview(a){if(void 0==a&&(a=!1),!(_points.length<2)){a||(debug_redrawSimplification=_points.length<100?6:_points.length<250?7:_points.length<400?8:_points.length<550?9:_points.length<700?10:11);var b=0,c=0;previewCtx.clearRect(0,0,preview.width,preview.height),previewCtx.lineWidth=strokeWidth,previewCtx.strokeStyle="#f00";for(var d=0;numLayers>d;d++){var e=scaleFunction(d/maxNumLayers);if(previewCtx.globalAlpha=0==d||d==Math.floor(numLayers/2)||d==numLayers-1?1:globalAlpha,a&&0!=d%debug_redrawSimplification&&0!=d&&d!=Math.floor(numLayers/2)&&d!=numLayers-1)b-=yStep,c+=rStep;else{previewCtx.save(),previewCtx.translate(layerCX,layerOffsetY+b),previewCtx.scale(viewerScale*e,scaleY*viewerScale*e),previewCtx.rotate(c),previewCtx.translate(-doodleTransform[0]*globalScale*doodleTransform[2],-doodleTransform[1]*globalScale*doodleTransform[3]);var f=centeredAndScaledDoodlePoint(_points[0]);previewCtx.beginPath(),previewCtx.moveTo(f.x,f.y);for(var g=1;g<_points.length;g++)f=centeredAndScaledDoodlePoint(_points[g]),a&&0!=g%debug_redrawSimplification||previewCtx.lineTo(f.x,f.y);previewCtx.stroke(),b-=yStep,c+=rStep,previewCtx.restore()}}previewCtx.globalAlpha=globalAlpha}}function renderToImageDataPreview(){if(console.log("f:renderToImageDataPreview()"),!(_points.length<2)){previewCtx_tmp.clearRect(0,0,preview.width,preview.height),previewCtx_tmp.lineWidth=strokeWidth,previewCtx_tmp.strokeStyle="#f00",previewCtx_tmp.save(),previewCtx_tmp.translate(layerCX,layerCY),previewCtx_tmp.scale(viewerScale,viewerScale),previewCtx_tmp.translate(-doodleTransform[0]*globalScale*doodleTransform[2],-doodleTransform[1]*globalScale*doodleTransform[3]);var a=centeredAndScaledDoodlePoint(_points[0]);previewCtx_tmp.beginPath(),previewCtx_tmp.moveTo(a.x,a.y);for(var b=1;b<_points.length;b++)a=centeredAndScaledDoodlePoint(_points[b]),previewCtx_tmp.lineTo(a.x,a.y);previewCtx_tmp.stroke(),previewCtx_tmp.closePath(),previewCtx_tmp.restore(); -var c=preview_tmp.toDataURL();doodleImageCapture=new Image,doodleImageCapture.onload=function(){previewCtx.clearRect(0,0,preview.width,preview.height),previewCtx.lineWidth=strokeWidth,previewCtx.strokeStyle="#f00";for(var a=0,b=0,c=0;numLayers>c;c++){var d=scaleFunction(c/maxNumLayers);previewCtx.globalAlpha=0==c||c==Math.floor(numLayers/2)||c==numLayers-1?1:globalAlpha,previewCtx.save(),previewCtx.translate(layerCX,layerOffsetY+a),previewCtx.scale(d,scaleY*d),previewCtx.rotate(b),previewCtx.translate(-layerCX,-layerCY),previewCtx.drawImage(doodleImageCapture,0,0),a-=yStep,b+=rStep,previewCtx.restore()}},doodleImageCapture.src=c,previewCtx.globalAlpha=globalAlpha}}function redrawRenderedPreview(a){void 0==a&&(a=!1),console.log("f:redrawRenderedPreview()"),previewCtx.clearRect(0,0,preview.width,preview.height),previewCtx.lineWidth=strokeWidth,previewCtx.strokeStyle="#f00";for(var b=0,c=0,d=0;numLayers>d;d++){var e=scaleFunction(d/maxNumLayers);previewCtx.globalAlpha=0==d||d==Math.floor(numLayers/2)||d==numLayers-1?1:globalAlpha,a&&0!=d%2&&0!=d&&d!=Math.floor(numLayers/2)&&d!=numLayers-1?(b-=yStep,c+=rStep):(previewCtx.save(),previewCtx.translate(layerCX,layerOffsetY+b),previewCtx.scale(e,scaleY*e),previewCtx.rotate(c),previewCtx.translate(-layerCX,-layerCY),previewCtx.drawImage(doodleImageCapture,0,0),b-=yStep,c+=rStep,previewCtx.restore())}}function centeredAndScaledDoodlePoint(a){var b={x:0,y:0};return b.x=(a[0]-(doodleBounds[2]-doodleBounds[0])/2)*globalScale*doodleTransform[2],b.y=(a[1]-(doodleBounds[3]-doodleBounds[1])/2)*globalScale*doodleTransform[3],b}function updatePreview(a,b,c){if(void 0==c&&(c=!1),c=!1,!(_points.length<2)){if(-1==updatePrevX||-1==updatePrevY)return updatePrevX=a,updatePrevY=b,void 0;var d=0,e=0;previewCtx.lineWidth=strokeWidth,previewCtx.strokeStyle="#f00";for(var f=0;numLayers>f;f++)if(previewCtx.globalAlpha=0==f||f==Math.floor(numLayers/2)||f==numLayers-1?1:globalAlpha,c&&0!=f%debug_redrawSimplification&&0!=f&&f!=Math.floor(numLayers/2)&&f!=numLayers-1)d-=yStep,e+=rStep;else{previewCtx.save(),previewCtx.translate(layerCX,layerOffsetY+d),previewCtx.scale(viewerScale,scaleY*viewerScale),previewCtx.rotate(e),previewCtx.translate(-doodleTransform[0]*globalScale*doodleTransform[2],-doodleTransform[1]*globalScale*doodleTransform[3]),previewCtx.beginPath();var g=centeredAndScaledDoodlePoint([updatePrevX,updatePrevY]);previewCtx.moveTo(g.x,g.y);var h=centeredAndScaledDoodlePoint([a,b]);previewCtx.lineTo(h.x,h.y),previewCtx.stroke(),d-=yStep,e+=rStep,previewCtx.restore()}previewCtx.globalAlpha=globalAlpha,updatePrevX=a,updatePrevY=b}}function generate_gcode(){console.log("f:generategcode()");var a=110,b=110;gcode=[],console.log("settings: ",settings);var c=settings["printer.speed"],d=c,e=.5*c,f=settings["printer.travelSpeed"],g=settings["printer.filamentThickness"],h=settings["printer.wallThickness"],i=settings["printer.screenToMillimeterScale"],j=settings["printer.layerHeight"],k=settings["printer.maxObjectHeight"],l=settings["printer.temperature"],m=settings["printer.useSubLayers"],n=settings["printer.enableTraveling"],o=settings["printer.retraction.enabled"],p=settings["printer.retraction.speed"],q=settings["printer.retraction.minDistance"],r=settings["printer.retraction.amount"],s=settings["printer.heatup.temperature"],t=settings["printer.startgcode"];t=t.replace("{printingTemp}",l),t=t.replace("{preheatTemp}",s),t=t.split("\n");var u=settings["printer.endgcode"];u=u.replace("{printingTemp}",l),u=u.replace("{preheatTemp}",s),u=u.split("\n");var v=k/j;objectHeight=Math.round(numLayers/maxNumLayers*k);var w=rStep*maxNumLayers/v;w=-w;var x=JSON.parse(JSON.stringify(_points));gcode=gcode.concat(t);var v=k/j,y=0,z=new Point;z.set(0,0);var A={x:doodleBounds[0]+(doodleBounds[2]-doodleBounds[0])/2,y:doodleBounds[1]+(doodleBounds[3]-doodleBounds[1])/2};if(console.log("f:generategcode() >> layers: "+v),1/0!=v){var B=x.length*v*(objectHeight/k);if(B>MAX_POINTS_TO_PRINT)return alert("Sorry, your doodle to to complex and / or to high"),console.log("WARNING: to many points to convert to gcode"),[];for(var C=0;v>C;C++){var D=JSON.parse(JSON.stringify(x));if(D.length<2)return;var E=C/v,F=scaleFunction(E),G=lineLength(x[0][0],x[0][1],x[x.length-1][0],x[x.length-1][1])<3;pointsTranslate(D,-A.x,-A.y),pointsScale(D,i,-i),pointsScale(D,F,F),pointsRotate(D,w*C),0==C?firstLayerSlow&&(c=e):2==C&&(gcode.push("M106"),c=d);for(var H=0,I=D.length,J=0,K=[],L=-1,M=0;Mq;n&&S?(T&&gcode.push("G0 E"+(y-r).toFixed(3)+" F"+(60*p).toFixed(3)),gcode.push("G0 X"+P.x.toFixed(3)+" Y"+P.y.toFixed(3)+" Z"+R.toFixed(3)+" F"+(60*f).toFixed(3)),T&&gcode.push("G0 E"+y.toFixed(3)+" F"+(60*p).toFixed(3))):(y+=z.distance(P)*h*j/(Math.pow(g/2,2)*Math.PI),gcode.push("G1 X"+P.x.toFixed(3)+" Y"+P.y.toFixed(3)+" Z"+R.toFixed(3)+" F"+(60*c).toFixed(3)+" E"+y.toFixed(3))),H++,J=H/I,z=P}if(C/v>objectHeight/k){console.log("f:generategcode() >> (layer/layers) > (objectHeight/maxObjectHeight) is true -> breaking at layer "+(C+1));break}}return gcode=gcode.concat(u)}}function scaleFunction(a){var b=1;switch(VERTICALSHAPE){case verticalShapes.NONE:b=1;break;case verticalShapes.DIVERGING:b=.5+.5*a;break;case verticalShapes.CONVERGING:b=1-.8*a;break;case verticalShapes.SINUS:b=.25*Math.cos(4*a*Math.PI)+.75}return b}function doOnResize(){canvas.width=$canvas.width(),canvas.height=$canvas.height(),preview.width=$preview.width(),preview.height=$drawAreaContainer.height(),canvasWidth=canvas.width,canvasHeight=canvas.height,console.log(" preview.width: "+preview.width+", $preview.width(): "+$preview.width()),calcPreviewCanvasProperties(),drawCanvasTopLeftCoords[0]=drawCanvas.offset().left,drawCanvasTopLeftCoords[1]=drawCanvas.offset().top,redrawDoodle(),redrawPreview()}function initLayouting(){console.log("f:initLayouting()"),$drawAreaContainer=$(".drawareacontainer"),canvas.width=$canvas.width(),canvas.height=$canvas.height(),preview.width=$preview.width(),preview.height=$drawAreaContainer.height(),canvasWidth=canvas.width,canvasHeight=canvas.height,$drawAreaContainer.show(),console.log("window.innerHeight: "+window.innerHeight),console.log("window.innerWidth: "+window.innerWidth),console.log("$drawAreaContainer.innerHeight(): "+$drawAreaContainer.innerHeight()),console.log("$drawAreaContainer.offset().top: "+$drawAreaContainer.offset().top),setTimeout(_startOrientationAndChangeEventListening,1e3)}function _startOrientationAndChangeEventListening(){$(window).on("resize",doOnResize),doOnResize()}function Printer(){Printer.WIFIBOX_DISCONNECTED_STATE="wifibox disconnected",Printer.UNKNOWN_STATE="unknown",Printer.DISCONNECTED_STATE="disconnected",Printer.IDLE_STATE="idle",Printer.BUFFERING_STATE="buffering",Printer.PRINTING_STATE="printing",Printer.STOPPING_STATE="stopping",Printer.ON_BEFORE_UNLOAD_MESSAGE="You're doodle is still being send to the printer, leaving will result in a incomplete 3D print",this.temperature=0,this.targetTemperature=0,this.currentLine=0,this.totalLines=0,this.bufferedLines=0,this.state=Printer.UNKNOWN_STATE,this.hasControl=!0,this.wifiboxURL,this.checkStatusInterval=3e3,this.checkStatusDelay,this.timeoutTime=3e3,this.sendPrintPartTimeoutTime=5e3,this.gcode,this.sendLength=1500,this.retryDelay=2e3,this.retrySendPrintPartDelay,this.retryCheckStatusDelay,this.retryStopDelay,this.retryPreheatDelay,this.maxGCodeSize=10,this.stateOverruled=!1,Printer.UPDATE="update";var a=this;this.init=function(){console.log("Printer:init"),this.wifiboxURL=wifiboxURL,console.log(" wifiboxURL: ",this.wifiboxURL),autoUpdate&&this.startStatusCheckInterval()},this.preheat=function(){console.log("Printer:preheat");var a=this;communicateWithWifibox?$.ajax({url:this.wifiboxURL+"/printer/heatup",type:"POST",dataType:"json",timeout:this.timeoutTime,success:function(b){console.log("Printer:preheat response: ",b),"error"==b.status&&(clearTimeout(a.retryPreheatDelay),a.retryPreheatDelay=setTimeout(function(){a.preheat()},a.retryDelay))}}).fail(function(){console.log("Printer:preheat: failed"),clearTimeout(a.retryPreheatDelay),a.retryPreheatDelay=setTimeout(function(){a.preheat()},a.retryDelay)}):console.log("Printer >> f:preheat() >> communicateWithWifibox is false, so not executing this function")},this.print=function(b){console.log("Printer:print"),console.log(" gcode total # of lines: "+b.length),message.set("Sending doodle to printer...",Message.NOTICE),a.addLeaveWarning(),this.sendIndex=0,this.gcode=b;var c=this.byteSize(b[20]),d=c*b.length/1024/1024;return console.log(" gcodeSize: ",d),d>this.maxGCodeSize?(console.log("Error: Printer:print: gcode file is probably to big ("+d+"MB) (max: "+this.maxGCodeSize+"MB)"),void 0):(this.sendPrintPart(this.sendIndex,this.sendLength),void 0)},this.byteSize=function(a){return~-encodeURI(a).split(/%..|./).length},this.sendPrintPart=function(a,b){console.log("Printer:sendPrintPart sendIndex: "+a+"/"+this.gcode.length+", sendLength: "+b);var c=0==a?!0:!1,d=c,e=!1;this.gcode.length> f:sendPrintPart() >> communicateWithWifibox is false, so not executing this function")},this.stop=function(){console.log("Printer:stop");var a=this;communicateWithWifibox?$.ajax({url:this.wifiboxURL+"/printer/stop",type:"POST",dataType:"json",timeout:this.timeoutTime,success:function(b){console.log("Printer:stop response: ",b),a.startStatusCheckInterval()}}).fail(function(){console.log("Printer:stop: failed"),clearTimeout(a.retryStopDelay),a.retryStopDelay=setTimeout(function(){a.stop()},a.retryDelay),a.startStatusCheckInterval()}):console.log("Printer >> f:communicateWithWifibox() >> communicateWithWifibox is false, so not executing this function")},this.startStatusCheckInterval=function(){console.log("Printer:startStatusCheckInterval"),a.checkStatus(),clearTimeout(a.checkStatusDelay),clearTimeout(a.retryCheckStatusDelay),a.checkStatusDelay=setTimeout(function(){a.checkStatus()},a.checkStatusInterval)},this.stopStatusCheckInterval=function(){console.log("Printer:stopStatusCheckInterval"),clearTimeout(a.checkStatusDelay),clearTimeout(a.retryCheckStatusDelay)},this.checkStatus=function(){console.log("Printer:checkStatus"),this.stateOverruled=!1;var a=this;communicateWithWifibox?$.ajax({url:this.wifiboxURL+"/info/status",dataType:"json",timeout:this.timeoutTime,success:function(b){a.handleStatusUpdate(b),clearTimeout(a.checkStatusDelay),clearTimeout(a.retryCheckStatusDelay),a.checkStatusDelay=setTimeout(function(){a.checkStatus()},a.checkStatusInterval)}}).fail(function(){console.log("Printer:checkStatus: failed"),a.state=Printer.WIFIBOX_DISCONNECTED_STATE,clearTimeout(a.checkStatusDelay),clearTimeout(a.retryCheckStatusDelay),a.retryCheckStatusDelay=setTimeout(function(){a.checkStatus()},a.retryDelay),$(document).trigger(Printer.UPDATE)}):console.log("Printer >> f:checkStatus() >> communicateWithWifibox is false, so not executing this function")},this.handleStatusUpdate=function(b){console.log("Printer:handleStatusUpdate response: ",b);var c=b.data;"success"!=b.status?a.state=Printer.UNKNOWN_STATE:(this.stateOverruled||(a.state=c.state),a.temperature=c.hotend,a.targetTemperature=c.hotend_target,a.currentLine=c.current_line,a.totalLines=c.total_lines,a.bufferedLines=c.buffered_lines,a.hasControl=c.has_control,(a.state==Printer.PRINTING_STATE||a.state==Printer.STOPPING_STATE)&&console.log("progress: ",a.currentLine+"/"+a.totalLines+" ("+a.bufferedLines+") ("+a.state+")")),$(document).trigger(Printer.UPDATE)},this.overruleState=function(b){this.stateOverruled=!0,console.log(" stateOverruled: ",this.stateOverruled),a.state=b,$(document).trigger(Printer.UPDATE),this.stopStatusCheckInterval()},this.removeLeaveWarning=function(){window.onbeforeunload=null},this.addLeaveWarning=function(){window.onbeforeunload=function(){return Printer.ON_BEFORE_UNLOAD_MESSAGE}}}function Progressbar(){this.currProgress=0,this.progressbarFGImg=new Image,this.progressbarFGImgSrc="img/progress_fg.png",this.progressbarBGImg=new Image,this.progressbarBGImgSrc="img/progress_bg.png",this.progressWidth=93,this.progressHeight=82,this.quartPI=.5*Math.PI,this.twoPI=2*Math.PI,this.$canvas,this.canvas,this.context,this.$container,this.isInitted=!1,this.enabled=!0,this.init=function(a,b){console.log("Thermometer.init()"),this.$container=b,this.$canvas=a,this.canvas=this.$canvas[0],this.context=this.canvas.getContext("2d");var c=this;this.progressbarBGImg.onload=function(){console.log("progressbarBGImg img loaded"),c.progressbarFGImg.onload=function(){console.log("progressbarFGImg img loaded"),c.isInitted=!0,c.update(0,100)},c.progressbarFGImg.src=c.progressbarFGImgSrc},this.progressbarBGImg.src=this.progressbarBGImgSrc},this.update=function(a,b){if(this.isInitted){void 0==a&&(a=0),void 0==b&&(b=100);var c=a/b;c=Math.min(c,1),c=Math.max(c,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height),this.context.drawImage(this.progressbarBGImg,0,0),this.context.font="7pt sans-serif",this.context.save(),this.context.beginPath(),this.context.moveTo(45,45),this.context.lineTo(45,0),this.context.arc(45,45,45,-this.quartPI,-this.quartPI+c*this.twoPI,!1),this.context.lineTo(45,45),this.context.clip(),this.context.drawImage(this.progressbarFGImg,0,0),this.context.restore(),debugMode&&(this.context.fillStyle="#222",this.context.strokeStyle="#fff",this.context.lineWidth=3,this.context.textAlign="center",this.context.strokeText(a+" / "+b,45,45,90),this.context.fillText(a+" / "+b,45,45,90))}else console.log("Progressbar.setTemperature() -> thermometer not initialized!")},this.show=function(){this.$container.addClass("progressbarAppear"),this.enabled=!0},this.hide=function(){this.$container.removeClass("progressbarAppear"),this.enabled=!1}}function Thermometer(){this.currentTemperature=0,this.targetTemperature=0,this.thermoOverlayImg=new Image,this.thermoOverlayImgSrc="img/thermometer_fg_overlay.png",this.thermoWidth=40,this.thermoHeight=100,this.$canvas,this.canvas,this.context,this.$container,this.isInitted=!1,this.enabled=!0,this.thermoColors=[[50,200,244],[244,190,10],[244,50,50]],this.init=function(a,b){console.log("Thermometer.init()"),this.$container=b,this.$canvas=a,this.canvas=this.$canvas[0],this.context=this.canvas.getContext("2d");var c=this;this.thermoOverlayImg.onload=function(){console.log("canvasThermoOverlay img loaded"),c.isInitted=!0,c.update(c.currentTemperature,c.targetTemperature)},this.thermoOverlayImg.src=this.thermoOverlayImgSrc},this.update=function(a,b){if(this.isInitted){if(!this.enabled)return;void 0==a&&(a=0),void 0==b&&(b=180);var c=a/b;c=Math.min(c,1),c=Math.max(c,0);var d=this.thermoHeight,e=15,f=25,g=Math.floor((d-e-f)*c),h=this.thermoColors[0];c>.98?h=this.thermoColors[2]:c>.25&&(h=this.thermoColors[1]),this.context.clearRect(0,0,this.canvas.width,this.canvas.height),this.context.font="10pt sans-serif",this.context.save(),this.context.beginPath(),this.context.arc(40,80,16,0,2*Math.PI,!1),this.context.arc(40,10,4,0,2*Math.PI,!1),this.context.rect(36,11,8,70),this.context.fillStyle="#fff",this.context.fill(),this.context.clip(),this.context.beginPath(),this.context.rect(20,d-e-g,60,g+e),this.context.fillStyle="rgb("+h[0]+","+h[1]+","+h[2]+")",this.context.fill(),this.context.restore(),this.context.save(),this.context.beginPath(),this.context.moveTo(32,f),this.context.lineTo(52,f),this.context.lineWidth=2,this.context.strokeStyle="#000",this.context.stroke(),this.context.fillStyle="#000",this.context.textAlign="left",this.context.textBaseline="middle",this.context.fillText(b+"°",55,f),this.context.restore(),this.context.drawImage(this.thermoOverlayImg,20,0),this.context.fillStyle="#000",this.context.textAlign="center",this.context.fillText(a+"°",40,d+e)}else console.log("Thermometer.setTemperature() -> thermometer not initialized!")},this.show=function(){this.$container.addClass("thermometerAppear"),this.enabled=!0},this.hide=function(){this.$container.removeClass("thermometerAppear"),this.enabled=!1}}function getURLParameter(a){return decodeURI((new RegExp("[&?]"+a+"="+"(.+?)(&|$)").exec(location.search)||[,null])[1])}function initSidebars(){console.log("f:initSidebars()"),sidebarLeft=new SideBar,sidebarLeft.init(".leftpanel","hideleft",function(){$(".leftpanel").show()}),sidebarRight=new SideBar,sidebarRight.init(".rightpanel","hideright",function(){$(".rightpanel").show()})}function SideBar(){this.initted=!1,this.$contentTarg=void 0,this.$sideBtn=void 0,this.contentHidden=!1,this.hideClass="",this.init=function(a,b,c){console.log("SideBar >> f:init >> targ: ",$(a),", hideClass: "+b),this.$contentTarg=$(a),this.hideClass=b,this.$contentTarg.addClass(this.hideClass),this.contentHidden=!0,this.$contentTarg.append("
"),this.$sideBtn=$(a+" .sidebutton");var d=this;this.$sideBtn.on("click",function(){console.log("sidebutton"),d.toggleShowHide()}),this.initted=!0,c()},this.toggleShowHide=function(){this.contentHidden?(this.contentHidden=!1,this.$contentTarg.removeClass(this.hideClass),this.$sideBtn.addClass("sidebuttonin")):(this.contentHidden=!0,this.$contentTarg.addClass(this.hideClass),this.$sideBtn.removeClass("sidebuttonin"))}}function Message(){Message.ERROR="error",Message.WARNING="warning",Message.NOTICE="notice",Message.INFO="info",this.mode="",this.$element;var a,b=this,c=2e3;this.init=function(a){console.log("Message:init"),this.$element=a,console.log("$element: ",a)},this.set=function(d,e,f){console.log("Message:set: ",d,e,f),b.hide(function(){b.show(),b.clear(),b.$element.text(d),b.$element.addClass(e),b.show(),b.mode=e,clearTimeout(a),f&&(a=setTimeout(function(){b.hide()},c))})},this.clear=function(){this.$element.text(""),this.$element.removeClass(this.mode)},this.show=function(){this.$element.fadeIn(200)},this.hide=function(a){this.$element.fadeOut(200,a)}}function showOrHideThermo(){console.log("f:showOrHideThermo()"),showOrHide?(thermometer.hide(),progressbar.hide()):(thermometer.show(),progressbar.show()),showOrHide=!showOrHide}function settingsLoaded(){console.log("settingsLoaded"),console.log("autoHeatup: ",settings["printer.heatup.enabled"]),settings["printer.heatup.enabled"]&&firstTimeSettingsLoaded&&(printer.preheat(),firstTimeSettingsLoaded=!1)}function setDebugText(a){$("#debug_display").text(a)}var settings={"network.ap.ssid":"d3d-ap-%%MAC_ADDR_TAIL%%","network.ap.address":"192.168.10.1","network.ap.netmask":"255.255.255.0","printer.temperature":220,"printer.maxObjectHeight":150,"printer.layerHeight":.2,"printer.wallThickness":.7,"printer.screenToMillimeterScale":.3,"printer.speed":50,"printer.travelSpeed":200,"printer.filamentThickness":2.85,"printer.enableTraveling":!0,"printer.useSubLayers":!0,"printer.firstLayerSlow":!0,"printer.autoWarmUp":!0,"printer.simplify.iterations":10,"printer.simplify.minNumPoints":15,"printer.simplify.minDistance":3,"printer.retraction.enabled":!0,"printer.retraction.speed":50,"printer.retraction.minDistance":1,"printer.retraction.amount":5,"printer.autoWarmUpCommand":"M104 S220 (hardcoded temperature)"},objectHeight=20,layerHeight=.2,enableTraveling=!0,minScale=.3,maxScale=1,shape="%",twists=0,loglevel=2,serverport=8888,autoLoadImage="hand.txt",loadOffset=[0,0],showWarmUp=!0,loopAlways=!1,firstLayerSlow=!0,useSubpathColors=!1,autoWarmUp=!0,maxScaleDifference=.1,frameRate=60,quitOnEscape=!0,screenToMillimeterScale=.3,sideis3D=!0,sidevisible=!0,sidebounds=[900,210,131,390],sideborder=[880,169,2,471],windowbounds=[0,0,800,500],windowcenter=!0,windowfullscreen=!1,autoWarmUpCommand="M104 S230",autoWarmUpDelay=3,VERTICALSHAPE,verticalShapes={NONE:"none",DIVERGING:"diverging",CONVERGING:"converging",SINUS:"sinus"},btnMoveUpInterval,btnMoveDownInterval,btnTwistLeftInterval,btnTwistRightInterval,twistIncrement=Math.PI/1800,btnOopsInterval,btnNew,btnPrevious,btnNext,btnOops,btnStop,btnClear,btnMoveUp,btnMoveDown,btnTwistLeft,btnTwistRight,btnInfo,btnSettings,state,prevState,hasControl,gcodeGenerateDelayer,gcodeGenerateDelay=50,preview,previewCtx,svgPathRegExp=/[LM]\d* \d*/gi,svgPathParamsRegExp=/([LM])(\d*) (\d*)/,dragging=!1,$canvas,canvas,ctx,canvasWidth,canvasHeight,drawCanvas,drawCanvasTopLeftCoords=[0,0],doodleBounds=[-1,-1,-1,-1],doodleTransform=[0,0,1,1],_points=[],prevCountingTime=0,movementCounter=0,drawVariableLineWeight=!1,lineweight=2,prevPoint={x:-1,y:-1};prevUpdateFullPreview=0,prevUpdateFullPreviewInterval=25;var $preview,preview,previewCtx,preview_tmp,previewCtx_tmp,previewDefaults={rotation:Math.PI/90,numLayers:10},svgPathRegExp=/[LM]\d* \d*/gi,svgPathParamsRegExp=/([LM])(\d*) (\d*)/,prevRedrawTime=(new Date).getTime(),redrawInterval=1e3/30,previewRotationLimit=Math.PI/30,numLayers=previewDefaults.numLayers,maxNumLayers=100,minNumLayers=2,globalScale=.3,globalAlpha=.2,scaleY=.4,viewerScale=.65,previewVerticalPadding={top:.15,bottom:.12},strokeWidth=2,rStep=previewDefaults.rotation,yStep,layerCX,layerCY,layerOffsetY,prevX=0,prevY=0,highlight=!0,linesRaw="",debug_redrawSimplification=6,updatePrevX=-1,updatePrevY=-1,MAX_POINTS_TO_PRINT=4e5,gcode=[];pointsTranslate=function(a,b,c){for(var d=0;dc;c++){var d=scaleFunction(c/maxNumLayers);previewCtx.globalAlpha=0==c||c==Math.floor(numLayers/2)||c==numLayers-1?1:globalAlpha,previewCtx.save(),previewCtx.translate(layerCX,layerOffsetY+a),previewCtx.scale(d,scaleY*d),previewCtx.rotate(b),previewCtx.translate(-layerCX,-layerCY),previewCtx.drawImage(doodleImageCapture,0,0),a-=yStep,b+=rStep,previewCtx.restore()}},doodleImageCapture.src=c,previewCtx.globalAlpha=globalAlpha}}function redrawRenderedPreview(a){void 0==a&&(a=!1),console.log("f:redrawRenderedPreview()"),previewCtx.clearRect(0,0,preview.width,preview.height),previewCtx.lineWidth=strokeWidth,previewCtx.strokeStyle="#f00";for(var b=0,c=0,d=0;numLayers>d;d++){var e=scaleFunction(d/maxNumLayers);previewCtx.globalAlpha=0==d||d==Math.floor(numLayers/2)||d==numLayers-1?1:globalAlpha,a&&0!=d%2&&0!=d&&d!=Math.floor(numLayers/2)&&d!=numLayers-1?(b-=yStep,c+=rStep):(previewCtx.save(),previewCtx.translate(layerCX,layerOffsetY+b),previewCtx.scale(e,scaleY*e),previewCtx.rotate(c),previewCtx.translate(-layerCX,-layerCY),previewCtx.drawImage(doodleImageCapture,0,0),b-=yStep,c+=rStep,previewCtx.restore())}}function centeredAndScaledDoodlePoint(a){var b={x:0,y:0};return b.x=(a[0]-(doodleBounds[2]-doodleBounds[0])/2)*globalScale*doodleTransform[2],b.y=(a[1]-(doodleBounds[3]-doodleBounds[1])/2)*globalScale*doodleTransform[3],b}function updatePreview(a,b,c){if(void 0==c&&(c=!1),c=!1,!(_points.length<2)){if(-1==updatePrevX||-1==updatePrevY)return updatePrevX=a,updatePrevY=b,void 0;var d=0,e=0;previewCtx.lineWidth=strokeWidth,previewCtx.strokeStyle="#f00";for(var f=0;numLayers>f;f++)if(previewCtx.globalAlpha=0==f||f==Math.floor(numLayers/2)||f==numLayers-1?1:globalAlpha,c&&0!=f%debug_redrawSimplification&&0!=f&&f!=Math.floor(numLayers/2)&&f!=numLayers-1)d-=yStep,e+=rStep;else{previewCtx.save(),previewCtx.translate(layerCX,layerOffsetY+d),previewCtx.scale(viewerScale,scaleY*viewerScale),previewCtx.rotate(e),previewCtx.translate(-doodleTransform[0]*globalScale*doodleTransform[2],-doodleTransform[1]*globalScale*doodleTransform[3]),previewCtx.beginPath();var g=centeredAndScaledDoodlePoint([updatePrevX,updatePrevY]);previewCtx.moveTo(g.x,g.y);var h=centeredAndScaledDoodlePoint([a,b]);previewCtx.lineTo(h.x,h.y),previewCtx.stroke(),d-=yStep,e+=rStep,previewCtx.restore()}previewCtx.globalAlpha=globalAlpha,updatePrevX=a,updatePrevY=b}}function generate_gcode(){console.log("f:generategcode()");var a=110,b=110;gcode=[],console.log("settings: ",settings);var c=settings["printer.speed"],d=c,e=.5*c,f=settings["printer.travelSpeed"],g=settings["printer.filamentThickness"],h=settings["printer.wallThickness"],i=settings["printer.screenToMillimeterScale"],j=settings["printer.layerHeight"],k=settings["printer.maxObjectHeight"],l=settings["printer.temperature"],m=settings["printer.bed.temperature"],n=settings["printer.useSubLayers"],o=settings["printer.enableTraveling"],p=settings["printer.retraction.enabled"],q=settings["printer.retraction.speed"],r=settings["printer.retraction.minDistance"],s=settings["printer.retraction.amount"],t=settings["printer.heatup.temperature"],u=settings["printer.heatup.bed.temperature"],v=settings["printer.startgcode"];v=subsituteVariables(v,l,m,t,u),v=v.split("\n");var w=settings["printer.endgcode"];w=subsituteVariables(w,l,m,t,u),w=w.split("\n");var x=k/j;objectHeight=Math.round(numLayers/maxNumLayers*k);var y=rStep*maxNumLayers/x;y=-y;var z=JSON.parse(JSON.stringify(_points));gcode=gcode.concat(v);var x=k/j,A=0,B=new Point;B.set(0,0);var C={x:doodleBounds[0]+(doodleBounds[2]-doodleBounds[0])/2,y:doodleBounds[1]+(doodleBounds[3]-doodleBounds[1])/2};if(console.log("f:generategcode() >> layers: "+x),1/0!=x){var D=z.length*x*(objectHeight/k);if(D>MAX_POINTS_TO_PRINT)return alert("Sorry, your doodle to to complex and / or to high"),console.log("WARNING: to many points to convert to gcode"),[];for(var E=0;x>E;E++){var F=JSON.parse(JSON.stringify(z));if(F.length<2)return;var G=E/x,H=scaleFunction(G),I=lineLength(z[0][0],z[0][1],z[z.length-1][0],z[z.length-1][1])<3;pointsTranslate(F,-C.x,-C.y),pointsScale(F,i,-i),pointsScale(F,H,H),pointsRotate(F,y*E),0==E?firstLayerSlow&&(c=e):2==E&&(gcode.push("M106"),c=d);for(var J=0,K=F.length,L=0,M=[],N=-1,O=0;Or;o&&U?(V&&gcode.push("G0 E"+(A-s).toFixed(3)+" F"+(60*q).toFixed(3)),gcode.push("G0 X"+R.x.toFixed(3)+" Y"+R.y.toFixed(3)+" Z"+T.toFixed(3)+" F"+(60*f).toFixed(3)),V&&gcode.push("G0 E"+A.toFixed(3)+" F"+(60*q).toFixed(3))):(A+=B.distance(R)*h*j/(Math.pow(g/2,2)*Math.PI),gcode.push("G1 X"+R.x.toFixed(3)+" Y"+R.y.toFixed(3)+" Z"+T.toFixed(3)+" F"+(60*c).toFixed(3)+" E"+A.toFixed(3))),J++,L=J/K,B=R}if(E/x>objectHeight/k){console.log("f:generategcode() >> (layer/layers) > (objectHeight/maxObjectHeight) is true -> breaking at layer "+(E+1));break}}return gcode=gcode.concat(w)}}function subsituteVariables(a,b,c,d,e){return a=a.replace(/{printingTemp}/gi,b),a=a.replace(/{printingBedTemp}/gi,c),a=a.replace(/{preheatTemp}/gi,d),a=a.replace(/{preheatBedTemp}/gi,e)}function scaleFunction(a){var b=1;switch(VERTICALSHAPE){case verticalShapes.NONE:b=1;break;case verticalShapes.DIVERGING:b=.5+.5*a;break;case verticalShapes.CONVERGING:b=1-.8*a;break;case verticalShapes.SINUS:b=.25*Math.cos(4*a*Math.PI)+.75}return b}function doOnResize(){canvas.width=$canvas.width(),canvas.height=$canvas.height(),preview.width=$preview.width(),preview.height=$drawAreaContainer.height(),canvasWidth=canvas.width,canvasHeight=canvas.height,console.log(" preview.width: "+preview.width+", $preview.width(): "+$preview.width()),calcPreviewCanvasProperties(),drawCanvasTopLeftCoords[0]=drawCanvas.offset().left,drawCanvasTopLeftCoords[1]=drawCanvas.offset().top,redrawDoodle(),redrawPreview()}function initLayouting(){console.log("f:initLayouting()"),$drawAreaContainer=$(".drawareacontainer"),canvas.width=$canvas.width(),canvas.height=$canvas.height(),preview.width=$preview.width(),preview.height=$drawAreaContainer.height(),canvasWidth=canvas.width,canvasHeight=canvas.height,$drawAreaContainer.show(),console.log("window.innerHeight: "+window.innerHeight),console.log("window.innerWidth: "+window.innerWidth),console.log("$drawAreaContainer.innerHeight(): "+$drawAreaContainer.innerHeight()),console.log("$drawAreaContainer.offset().top: "+$drawAreaContainer.offset().top),setTimeout(_startOrientationAndChangeEventListening,1e3)}function _startOrientationAndChangeEventListening(){$(window).on("resize",doOnResize),doOnResize()}function Printer(){Printer.WIFIBOX_DISCONNECTED_STATE="wifibox disconnected",Printer.UNKNOWN_STATE="unknown",Printer.DISCONNECTED_STATE="disconnected",Printer.IDLE_STATE="idle",Printer.BUFFERING_STATE="buffering",Printer.PRINTING_STATE="printing",Printer.STOPPING_STATE="stopping",Printer.ON_BEFORE_UNLOAD_MESSAGE="You're doodle is still being send to the printer, leaving will result in a incomplete 3D print",this.temperature=0,this.targetTemperature=0,this.currentLine=0,this.totalLines=0,this.bufferedLines=0,this.state=Printer.UNKNOWN_STATE,this.hasControl=!0,this.wifiboxURL,this.checkStatusInterval=3e3,this.checkStatusDelay,this.timeoutTime=3e3,this.sendPrintPartTimeoutTime=5e3,this.gcode,this.sendLength=1500,this.retryDelay=2e3,this.retrySendPrintPartDelay,this.retryCheckStatusDelay,this.retryStopDelay,this.retryPreheatDelay,this.maxGCodeSize=10,this.stateOverruled=!1,Printer.UPDATE="update";var a=this;this.init=function(){console.log("Printer:init"),this.wifiboxURL=wifiboxURL,console.log(" wifiboxURL: ",this.wifiboxURL),autoUpdate&&this.startStatusCheckInterval()},this.preheat=function(){console.log("Printer:preheat");var a=this;communicateWithWifibox?$.ajax({url:this.wifiboxURL+"/printer/heatup",type:"POST",dataType:"json",timeout:this.timeoutTime,success:function(b){console.log("Printer:preheat response: ",b),"error"==b.status&&(clearTimeout(a.retryPreheatDelay),a.retryPreheatDelay=setTimeout(function(){a.preheat()},a.retryDelay))}}).fail(function(){console.log("Printer:preheat: failed"),clearTimeout(a.retryPreheatDelay),a.retryPreheatDelay=setTimeout(function(){a.preheat()},a.retryDelay)}):console.log("Printer >> f:preheat() >> communicateWithWifibox is false, so not executing this function")},this.print=function(b){console.log("Printer:print"),console.log(" gcode total # of lines: "+b.length),message.set("Sending doodle to printer...",Message.NOTICE),a.addLeaveWarning(),this.sendIndex=0,this.gcode=b;var c=this.byteSize(b[20]),d=c*b.length/1024/1024;return console.log(" gcodeSize: ",d),d>this.maxGCodeSize?(console.log("Error: Printer:print: gcode file is probably to big ("+d+"MB) (max: "+this.maxGCodeSize+"MB)"),void 0):(this.sendPrintPart(this.sendIndex,this.sendLength),void 0)},this.byteSize=function(a){return~-encodeURI(a).split(/%..|./).length},this.sendPrintPart=function(a,b){console.log("Printer:sendPrintPart sendIndex: "+a+"/"+this.gcode.length+", sendLength: "+b);var c=0==a?!0:!1,d=c,e=!1;this.gcode.length> f:sendPrintPart() >> communicateWithWifibox is false, so not executing this function")},this.stop=function(){console.log("Printer:stop");var a=this;communicateWithWifibox?$.ajax({url:this.wifiboxURL+"/printer/stop",type:"POST",dataType:"json",timeout:this.timeoutTime,success:function(b){console.log("Printer:stop response: ",b),a.startStatusCheckInterval()}}).fail(function(){console.log("Printer:stop: failed"),clearTimeout(a.retryStopDelay),a.retryStopDelay=setTimeout(function(){a.stop()},a.retryDelay),a.startStatusCheckInterval()}):console.log("Printer >> f:communicateWithWifibox() >> communicateWithWifibox is false, so not executing this function")},this.startStatusCheckInterval=function(){console.log("Printer:startStatusCheckInterval"),a.checkStatus(),clearTimeout(a.checkStatusDelay),clearTimeout(a.retryCheckStatusDelay),a.checkStatusDelay=setTimeout(function(){a.checkStatus()},a.checkStatusInterval)},this.stopStatusCheckInterval=function(){console.log("Printer:stopStatusCheckInterval"),clearTimeout(a.checkStatusDelay),clearTimeout(a.retryCheckStatusDelay)},this.checkStatus=function(){console.log("Printer:checkStatus"),this.stateOverruled=!1;var a=this;communicateWithWifibox?$.ajax({url:this.wifiboxURL+"/info/status",dataType:"json",timeout:this.timeoutTime,success:function(b){a.handleStatusUpdate(b),clearTimeout(a.checkStatusDelay),clearTimeout(a.retryCheckStatusDelay),a.checkStatusDelay=setTimeout(function(){a.checkStatus()},a.checkStatusInterval)}}).fail(function(){console.log("Printer:checkStatus: failed"),a.state=Printer.WIFIBOX_DISCONNECTED_STATE,clearTimeout(a.checkStatusDelay),clearTimeout(a.retryCheckStatusDelay),a.retryCheckStatusDelay=setTimeout(function(){a.checkStatus()},a.retryDelay),$(document).trigger(Printer.UPDATE)}):console.log("Printer >> f:checkStatus() >> communicateWithWifibox is false, so not executing this function")},this.handleStatusUpdate=function(b){console.log("Printer:handleStatusUpdate response: ",b);var c=b.data;"success"!=b.status?a.state=Printer.UNKNOWN_STATE:(this.stateOverruled||(a.state=c.state),a.temperature=c.hotend,a.targetTemperature=c.hotend_target,a.currentLine=c.current_line,a.totalLines=c.total_lines,a.bufferedLines=c.buffered_lines,a.hasControl=c.has_control,(a.state==Printer.PRINTING_STATE||a.state==Printer.STOPPING_STATE)&&console.log("progress: ",a.currentLine+"/"+a.totalLines+" ("+a.bufferedLines+") ("+a.state+")")),$(document).trigger(Printer.UPDATE)},this.overruleState=function(b){this.stateOverruled=!0,console.log(" stateOverruled: ",this.stateOverruled),a.state=b,$(document).trigger(Printer.UPDATE),this.stopStatusCheckInterval()},this.removeLeaveWarning=function(){window.onbeforeunload=null},this.addLeaveWarning=function(){window.onbeforeunload=function(){return Printer.ON_BEFORE_UNLOAD_MESSAGE}}}function Progressbar(){this.currProgress=0,this.progressbarFGImg=new Image,this.progressbarFGImgSrc="img/progress_fg.png",this.progressbarBGImg=new Image,this.progressbarBGImgSrc="img/progress_bg.png",this.progressWidth=93,this.progressHeight=82,this.quartPI=.5*Math.PI,this.twoPI=2*Math.PI,this.$canvas,this.canvas,this.context,this.$container,this.isInitted=!1,this.enabled=!0,this.init=function(a,b){console.log("Thermometer.init()"),this.$container=b,this.$canvas=a,this.canvas=this.$canvas[0],this.context=this.canvas.getContext("2d");var c=this;this.progressbarBGImg.onload=function(){console.log("progressbarBGImg img loaded"),c.progressbarFGImg.onload=function(){console.log("progressbarFGImg img loaded"),c.isInitted=!0,c.update(0,100)},c.progressbarFGImg.src=c.progressbarFGImgSrc},this.progressbarBGImg.src=this.progressbarBGImgSrc},this.update=function(a,b){if(this.isInitted){void 0==a&&(a=0),void 0==b&&(b=100);var c=a/b;c=Math.min(c,1),c=Math.max(c,0),this.context.clearRect(0,0,this.canvas.width,this.canvas.height),this.context.drawImage(this.progressbarBGImg,0,0),this.context.font="7pt sans-serif",this.context.save(),this.context.beginPath(),this.context.moveTo(45,45),this.context.lineTo(45,0),this.context.arc(45,45,45,-this.quartPI,-this.quartPI+c*this.twoPI,!1),this.context.lineTo(45,45),this.context.clip(),this.context.drawImage(this.progressbarFGImg,0,0),this.context.restore(),debugMode&&(this.context.fillStyle="#222",this.context.strokeStyle="#fff",this.context.lineWidth=3,this.context.textAlign="center",this.context.strokeText(a+" / "+b,45,45,90),this.context.fillText(a+" / "+b,45,45,90))}else console.log("Progressbar.setTemperature() -> thermometer not initialized!")},this.show=function(){this.$container.addClass("progressbarAppear"),this.enabled=!0},this.hide=function(){this.$container.removeClass("progressbarAppear"),this.enabled=!1}}function Thermometer(){this.currentTemperature=0,this.targetTemperature=0,this.thermoOverlayImg=new Image,this.thermoOverlayImgSrc="img/thermometer_fg_overlay.png",this.thermoWidth=40,this.thermoHeight=100,this.$canvas,this.canvas,this.context,this.$container,this.isInitted=!1,this.enabled=!0,this.thermoColors=[[50,200,244],[244,190,10],[244,50,50]],this.init=function(a,b){console.log("Thermometer.init()"),this.$container=b,this.$canvas=a,this.canvas=this.$canvas[0],this.context=this.canvas.getContext("2d");var c=this;this.thermoOverlayImg.onload=function(){console.log("canvasThermoOverlay img loaded"),c.isInitted=!0,c.update(c.currentTemperature,c.targetTemperature)},this.thermoOverlayImg.src=this.thermoOverlayImgSrc},this.update=function(a,b){if(this.isInitted){if(!this.enabled)return;void 0==a&&(a=0),void 0==b&&(b=180);var c=a/b;c=Math.min(c,1),c=Math.max(c,0);var d=this.thermoHeight,e=15,f=25,g=Math.floor((d-e-f)*c),h=this.thermoColors[0];c>.98?h=this.thermoColors[2]:c>.25&&(h=this.thermoColors[1]),this.context.clearRect(0,0,this.canvas.width,this.canvas.height),this.context.font="10pt sans-serif",this.context.save(),this.context.beginPath(),this.context.arc(40,80,16,0,2*Math.PI,!1),this.context.arc(40,10,4,0,2*Math.PI,!1),this.context.rect(36,11,8,70),this.context.fillStyle="#fff",this.context.fill(),this.context.clip(),this.context.beginPath(),this.context.rect(20,d-e-g,60,g+e),this.context.fillStyle="rgb("+h[0]+","+h[1]+","+h[2]+")",this.context.fill(),this.context.restore(),this.context.save(),this.context.beginPath(),this.context.moveTo(32,f),this.context.lineTo(52,f),this.context.lineWidth=2,this.context.strokeStyle="#000",this.context.stroke(),this.context.fillStyle="#000",this.context.textAlign="left",this.context.textBaseline="middle",this.context.fillText(b+"°",55,f),this.context.restore(),this.context.drawImage(this.thermoOverlayImg,20,0),this.context.fillStyle="#000",this.context.textAlign="center",this.context.fillText(a+"°",40,d+e)}else console.log("Thermometer.setTemperature() -> thermometer not initialized!")},this.show=function(){this.$container.addClass("thermometerAppear"),this.enabled=!0},this.hide=function(){this.$container.removeClass("thermometerAppear"),this.enabled=!1}}function getURLParameter(a){return decodeURI((new RegExp("[&?]"+a+"="+"(.+?)(&|$)").exec(location.search)||[,null])[1])}function initSidebars(){console.log("f:initSidebars()"),sidebarLeft=new SideBar,sidebarLeft.init(".leftpanel","hideleft",function(){$(".leftpanel").show()}),sidebarRight=new SideBar,sidebarRight.init(".rightpanel","hideright",function(){$(".rightpanel").show()})}function SideBar(){this.initted=!1,this.$contentTarg=void 0,this.$sideBtn=void 0,this.contentHidden=!1,this.hideClass="",this.init=function(a,b,c){console.log("SideBar >> f:init >> targ: ",$(a),", hideClass: "+b),this.$contentTarg=$(a),this.hideClass=b,this.$contentTarg.addClass(this.hideClass),this.contentHidden=!0,this.$contentTarg.append("
"),this.$sideBtn=$(a+" .sidebutton");var d=this;this.$sideBtn.on("click",function(){console.log("sidebutton"),d.toggleShowHide()}),this.initted=!0,c()},this.toggleShowHide=function(){this.contentHidden?(this.contentHidden=!1,this.$contentTarg.removeClass(this.hideClass),this.$sideBtn.addClass("sidebuttonin")):(this.contentHidden=!0,this.$contentTarg.addClass(this.hideClass),this.$sideBtn.removeClass("sidebuttonin"))}}function Message(){Message.ERROR="error",Message.WARNING="warning",Message.NOTICE="notice",Message.INFO="info",this.mode="",this.$element;var a,b=this,c=2e3;this.init=function(a){console.log("Message:init"),this.$element=a,console.log("$element: ",a)},this.set=function(d,e,f){console.log("Message:set: ",d,e,f),b.hide(function(){b.show(),b.clear(),b.$element.text(d),b.$element.addClass(e),b.show(),b.mode=e,clearTimeout(a),f&&(a=setTimeout(function(){b.hide()},c))})},this.clear=function(){this.$element.text(""),this.$element.removeClass(this.mode)},this.show=function(){this.$element.fadeIn(200)},this.hide=function(a){this.$element.fadeOut(200,a)}}function showOrHideThermo(){console.log("f:showOrHideThermo()"),showOrHide?(thermometer.hide(),progressbar.hide()):(thermometer.show(),progressbar.show()),showOrHide=!showOrHide}function settingsLoaded(){console.log("settingsLoaded"),console.log("autoHeatup: ",settings["printer.heatup.enabled"]),settings["printer.heatup.enabled"]&&firstTimeSettingsLoaded&&(printer.preheat(),firstTimeSettingsLoaded=!1)}function setDebugText(a){$("#debug_display").text(a)}var settings={"network.ap.ssid":"d3d-ap-%%MAC_ADDR_TAIL%%","network.ap.address":"192.168.10.1","network.ap.netmask":"255.255.255.0","printer.temperature":220,"printer.maxObjectHeight":150,"printer.layerHeight":.2,"printer.wallThickness":.7,"printer.screenToMillimeterScale":.3,"printer.speed":50,"printer.travelSpeed":200,"printer.filamentThickness":2.85,"printer.enableTraveling":!0,"printer.useSubLayers":!0,"printer.firstLayerSlow":!0,"printer.autoWarmUp":!0,"printer.simplify.iterations":10,"printer.simplify.minNumPoints":15,"printer.simplify.minDistance":3,"printer.retraction.enabled":!0,"printer.retraction.speed":50,"printer.retraction.minDistance":1,"printer.retraction.amount":5,"printer.autoWarmUpCommand":"M104 S220 (hardcoded temperature)"},objectHeight=20,layerHeight=.2,enableTraveling=!0,minScale=.3,maxScale=1,shape="%",twists=0,loglevel=2,serverport=8888,autoLoadImage="hand.txt",loadOffset=[0,0],showWarmUp=!0,loopAlways=!1,firstLayerSlow=!0,useSubpathColors=!1,autoWarmUp=!0,maxScaleDifference=.1,frameRate=60,quitOnEscape=!0,screenToMillimeterScale=.3,sideis3D=!0,sidevisible=!0,sidebounds=[900,210,131,390],sideborder=[880,169,2,471],windowbounds=[0,0,800,500],windowcenter=!0,windowfullscreen=!1,autoWarmUpCommand="M104 S230",autoWarmUpDelay=3,VERTICALSHAPE,verticalShapes={NONE:"none",DIVERGING:"diverging",CONVERGING:"converging",SINUS:"sinus"},btnMoveUpInterval,btnMoveDownInterval,btnTwistLeftInterval,btnTwistRightInterval,twistIncrement=Math.PI/1800,btnOopsInterval,btnNew,btnPrevious,btnNext,btnOops,btnStop,btnClear,btnMoveUp,btnMoveDown,btnTwistLeft,btnTwistRight,btnInfo,btnSettings,state,prevState,hasControl,gcodeGenerateDelayer,gcodeGenerateDelay=50,preview,previewCtx,svgPathRegExp=/[LM]\d* \d*/gi,svgPathParamsRegExp=/([LM])(\d*) (\d*)/,dragging=!1,$canvas,canvas,ctx,canvasWidth,canvasHeight,drawCanvas,drawCanvasTopLeftCoords=[0,0],doodleBounds=[-1,-1,-1,-1],doodleTransform=[0,0,1,1],_points=[],prevCountingTime=0,movementCounter=0,drawVariableLineWeight=!1,lineweight=2,prevPoint={x:-1,y:-1};prevUpdateFullPreview=0,prevUpdateFullPreviewInterval=25;var $preview,preview,previewCtx,preview_tmp,previewCtx_tmp,previewDefaults={rotation:Math.PI/90,numLayers:10},svgPathRegExp=/[LM]\d* \d*/gi,svgPathParamsRegExp=/([LM])(\d*) (\d*)/,prevRedrawTime=(new Date).getTime(),redrawInterval=1e3/30,previewRotationLimit=Math.PI/30,numLayers=previewDefaults.numLayers,maxNumLayers=100,minNumLayers=2,globalScale=.3,globalAlpha=.2,scaleY=.4,viewerScale=.65,previewVerticalPadding={top:.15,bottom:.12},strokeWidth=2,rStep=previewDefaults.rotation,yStep,layerCX,layerCY,layerOffsetY,prevX=0,prevY=0,highlight=!0,linesRaw="",debug_redrawSimplification=6,updatePrevX=-1,updatePrevY=-1,MAX_POINTS_TO_PRINT=4e5,gcode=[];pointsTranslate=function(a,b,c){for(var d=0;dWall thickness:mm
mm
degrees C
+ degrees C

mm/s
mm/s
@@ -69,13 +70,14 @@
* Continuously move platform while printing instead of once per layer
-
+
mm
mm
mm/s

-
-
+
+
+
@@ -142,7 +144,15 @@
- The text {printingTemp} will be replaced by the printing temperature and {preheatTemp} will be replaced by the preheat temperature. + + The following texts are replaced: +
+
{printingTemp}
Printing temperature
+
{printingBedTemp}
Printing bed temperature
+
{preheatTemp}
Preheat temperature
+
{preheatBedTemp}
Preheat bed temperature
+
+

From b3823c1fc5b9ef9d20e50be3a95e20d67e7bd0da Mon Sep 17 00:00:00 2001 From: Adriaan Wormgoor Date: Tue, 22 Oct 2013 16:17:38 +0200 Subject: [PATCH 08/13] .gitignore --- .gitignore | 2272 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2272 insertions(+) diff --git a/.gitignore b/.gitignore index a9b723e..f3f9a3b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2274 @@ .project +.idea/.name +.idea/doodle3d-client.iml +.idea/encodings.xml +.idea/libraries/sass_stdlib.xml +.idea/misc.xml +.idea/modules.xml +.idea/scopes/scope_settings.xml +.idea/vcs.xml +.idea/workspace.xml +__index.html +_index.html +div_bgs.html +img/thermo_bg_2.png +img/thermo_fg_2.png +img/logo/logo_full_8bit.png +img/logo/logo_small BACKUP.png +img/logo/logo_small_8bit.png +img/logo/logo_smaller.png +img/logo/logo_smaller_8bit.png +img/logo/logo_smaller_wide_8bit.png +img/logo/logo_smallest.png +css/_backup20131010/d3d_btns.css +css/_backup20131010/fixedPosInterface.css +css/_backup20131010/settingsPopup.css +css/_backup20131011/fixedPosInterface.css +css/_backup20131011/fixedPosInterface.css.BACKUP.99789.css +css/_backup20131011/fixedPosInterface.css.BASE.99789.css +css/_backup20131011/fixedPosInterface.css.LOCAL.99789.css +css/_backup20131011/fixedPosInterface.css.REMOTE.99789.css +index.html.orig +js/Thermometer.js.orig +js/buttonbehaviors.js.orig +js/gcodeGenerating_v01.js.orig +js/init_layout backup20130918.js +js/main.js.orig +js/previewRendering_v02.js.orig +less/verticalshapes.css +less/verticalshapes_backup.css +__settings.html +css/_settings.css +node_modules/grunt/.npmignore +node_modules/grunt/.travis.yml +node_modules/grunt/AUTHORS +node_modules/grunt/CHANGELOG +node_modules/grunt/CONTRIBUTING.md +node_modules/grunt/Gruntfile.js +node_modules/grunt/LICENSE-MIT +node_modules/grunt/README.md +node_modules/grunt/custom-gruntfile.js +node_modules/grunt/package.json +node_modules/grunt-autoprefixer/.travis.yml +node_modules/grunt-autoprefixer/LICENSE-MIT +node_modules/grunt-autoprefixer/README.md +node_modules/grunt-autoprefixer/package.json +node_modules/grunt-autoprefixer/node_modules/.bin/autoprefixer +node_modules/grunt-autoprefixer/node_modules/autoprefixer/ChangeLog +node_modules/grunt-autoprefixer/node_modules/autoprefixer/LICENSE +node_modules/grunt-autoprefixer/node_modules/autoprefixer/README.md +node_modules/grunt-autoprefixer/node_modules/autoprefixer/package.json +node_modules/grunt-autoprefixer/node_modules/autoprefixer/bin/autoprefixer +node_modules/grunt-autoprefixer/node_modules/autoprefixer/data/browsers.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/data/prefixes.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/binary.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/browsers.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/css.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/declaration.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/inspect.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/keyframes.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/old-value.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/prefixes.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/processor.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/rule.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/rules.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/selector.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/updater.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/utils.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/value.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/hacks/align-content.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/hacks/align-items.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/hacks/align-self.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/hacks/border-image.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/hacks/border-radius.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/hacks/display-flex.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/hacks/fill-available.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/hacks/filter.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/hacks/flex-basis.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/hacks/flex-declaration.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/hacks/flex-direction.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/hacks/flex-flow.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/hacks/flex-grow.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/hacks/flex-shrink.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/hacks/flex-wrap.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/hacks/flex.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/hacks/fullscreen.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/hacks/gradient.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/hacks/justify-content.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/hacks/order.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/hacks/placeholder.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/lib/autoprefixer/hacks/transition.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/node_modules/css-parse/Readme.md +node_modules/grunt-autoprefixer/node_modules/autoprefixer/node_modules/css-parse/index.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/node_modules/css-parse/package.json +node_modules/grunt-autoprefixer/node_modules/autoprefixer/node_modules/css-stringify/.npmignore +node_modules/grunt-autoprefixer/node_modules/autoprefixer/node_modules/css-stringify/.travis.yml +node_modules/grunt-autoprefixer/node_modules/autoprefixer/node_modules/css-stringify/History.md +node_modules/grunt-autoprefixer/node_modules/autoprefixer/node_modules/css-stringify/LICENSE +node_modules/grunt-autoprefixer/node_modules/autoprefixer/node_modules/css-stringify/Makefile +node_modules/grunt-autoprefixer/node_modules/autoprefixer/node_modules/css-stringify/Readme.md +node_modules/grunt-autoprefixer/node_modules/autoprefixer/node_modules/css-stringify/component.json +node_modules/grunt-autoprefixer/node_modules/autoprefixer/node_modules/css-stringify/index.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/node_modules/css-stringify/package.json +node_modules/grunt-autoprefixer/node_modules/autoprefixer/node_modules/css-stringify/lib/compress.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/node_modules/css-stringify/lib/identity.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/updaters/browsers.js +node_modules/grunt-autoprefixer/node_modules/autoprefixer/updaters/prefixes.js +node_modules/grunt-autoprefixer/tasks/autoprefixer.js +node_modules/grunt-contrib-concat/.gitattributes +node_modules/grunt-contrib-concat/.jshintrc +node_modules/grunt-contrib-concat/.npmignore +node_modules/grunt-contrib-concat/.travis.yml +node_modules/grunt-contrib-concat/AUTHORS +node_modules/grunt-contrib-concat/CHANGELOG +node_modules/grunt-contrib-concat/CONTRIBUTING.md +node_modules/grunt-contrib-concat/Gruntfile.js +node_modules/grunt-contrib-concat/LICENSE-MIT +node_modules/grunt-contrib-concat/README.md +node_modules/grunt-contrib-concat/package.json +node_modules/grunt-contrib-concat/docs/concat-examples.md +node_modules/grunt-contrib-concat/docs/concat-options.md +node_modules/grunt-contrib-concat/docs/concat-overview.md +node_modules/grunt-contrib-concat/tasks/concat.js +node_modules/grunt-contrib-concat/tasks/lib/comment.js +node_modules/grunt-contrib-concat/test/concat_test.js +node_modules/grunt-contrib-concat/test/expected/custom_options +node_modules/grunt-contrib-concat/test/expected/default_options +node_modules/grunt-contrib-concat/test/expected/handling_invalid_files +node_modules/grunt-contrib-concat/test/expected/process_function +node_modules/grunt-contrib-concat/test/fixtures/banner.js +node_modules/grunt-contrib-concat/test/fixtures/banner2.js +node_modules/grunt-contrib-concat/test/fixtures/banner3.js +node_modules/grunt-contrib-concat/test/fixtures/file1 +node_modules/grunt-contrib-concat/test/fixtures/file2 +node_modules/grunt-contrib-cssmin/.jshintrc +node_modules/grunt-contrib-cssmin/.npmignore +node_modules/grunt-contrib-cssmin/.travis.yml +node_modules/grunt-contrib-cssmin/AUTHORS +node_modules/grunt-contrib-cssmin/CHANGELOG +node_modules/grunt-contrib-cssmin/CONTRIBUTING.md +node_modules/grunt-contrib-cssmin/Gruntfile.js +node_modules/grunt-contrib-cssmin/LICENSE-MIT +node_modules/grunt-contrib-cssmin/README.md +node_modules/grunt-contrib-cssmin/package.json +node_modules/grunt-contrib-cssmin/docs/cssmin-examples.md +node_modules/grunt-contrib-cssmin/docs/cssmin-options.md +node_modules/grunt-contrib-cssmin/docs/cssmin-overview.md +node_modules/grunt-contrib-cssmin/docs/overview.md +node_modules/grunt-contrib-cssmin/node_modules/.bin/cleancss +node_modules/grunt-contrib-cssmin/node_modules/clean-css/History.md +node_modules/grunt-contrib-cssmin/node_modules/clean-css/LICENSE +node_modules/grunt-contrib-cssmin/node_modules/clean-css/README.md +node_modules/grunt-contrib-cssmin/node_modules/clean-css/index.js +node_modules/grunt-contrib-cssmin/node_modules/clean-css/package.json +node_modules/grunt-contrib-cssmin/node_modules/clean-css/bin/cleancss +node_modules/grunt-contrib-cssmin/node_modules/clean-css/lib/clean.js +node_modules/grunt-contrib-cssmin/node_modules/clean-css/lib/colors/hsl-to-hex.js +node_modules/grunt-contrib-cssmin/node_modules/clean-css/lib/colors/long-to-short-hex.js +node_modules/grunt-contrib-cssmin/node_modules/clean-css/lib/colors/rgb-to-hex.js +node_modules/grunt-contrib-cssmin/node_modules/clean-css/lib/colors/shortener.js +node_modules/grunt-contrib-cssmin/node_modules/clean-css/lib/images/url-rebase.js +node_modules/grunt-contrib-cssmin/node_modules/clean-css/lib/images/url-rewriter.js +node_modules/grunt-contrib-cssmin/node_modules/clean-css/lib/imports/inliner.js +node_modules/grunt-contrib-cssmin/node_modules/clean-css/lib/properties/shorthand-notations.js +node_modules/grunt-contrib-cssmin/node_modules/clean-css/lib/text/comments.js +node_modules/grunt-contrib-cssmin/node_modules/clean-css/lib/text/expressions.js +node_modules/grunt-contrib-cssmin/node_modules/clean-css/lib/text/free.js +node_modules/grunt-contrib-cssmin/node_modules/clean-css/lib/text/urls.js +node_modules/grunt-contrib-cssmin/node_modules/clean-css/node_modules/commander/History.md +node_modules/grunt-contrib-cssmin/node_modules/clean-css/node_modules/commander/Readme.md +node_modules/grunt-contrib-cssmin/node_modules/clean-css/node_modules/commander/index.js +node_modules/grunt-contrib-cssmin/node_modules/clean-css/node_modules/commander/package.json +node_modules/grunt-contrib-cssmin/node_modules/grunt-lib-contrib/.gitattributes +node_modules/grunt-contrib-cssmin/node_modules/grunt-lib-contrib/.jshintrc +node_modules/grunt-contrib-cssmin/node_modules/grunt-lib-contrib/.npmignore +node_modules/grunt-contrib-cssmin/node_modules/grunt-lib-contrib/.travis.yml +node_modules/grunt-contrib-cssmin/node_modules/grunt-lib-contrib/AUTHORS +node_modules/grunt-contrib-cssmin/node_modules/grunt-lib-contrib/CHANGELOG +node_modules/grunt-contrib-cssmin/node_modules/grunt-lib-contrib/Gruntfile.js +node_modules/grunt-contrib-cssmin/node_modules/grunt-lib-contrib/LICENSE-MIT +node_modules/grunt-contrib-cssmin/node_modules/grunt-lib-contrib/README.md +node_modules/grunt-contrib-cssmin/node_modules/grunt-lib-contrib/package.json +node_modules/grunt-contrib-cssmin/node_modules/grunt-lib-contrib/lib/contrib.js +node_modules/grunt-contrib-cssmin/node_modules/grunt-lib-contrib/node_modules/zlib-browserify/.npmignore +node_modules/grunt-contrib-cssmin/node_modules/grunt-lib-contrib/node_modules/zlib-browserify/index.js +node_modules/grunt-contrib-cssmin/node_modules/grunt-lib-contrib/node_modules/zlib-browserify/package.json +node_modules/grunt-contrib-cssmin/node_modules/grunt-lib-contrib/node_modules/zlib-browserify/readme.md +node_modules/grunt-contrib-cssmin/node_modules/grunt-lib-contrib/node_modules/zlib-browserify/zlib.js +node_modules/grunt-contrib-cssmin/node_modules/grunt-lib-contrib/node_modules/zlib-browserify/test/zlib.test.js +node_modules/grunt-contrib-cssmin/node_modules/grunt-lib-contrib/test/lib_test.js +node_modules/grunt-contrib-cssmin/tasks/cssmin.js +node_modules/grunt-contrib-cssmin/test/cssmin_test.js +node_modules/grunt-contrib-cssmin/test/expected/inline_import.css +node_modules/grunt-contrib-cssmin/test/expected/input_bannered.css +node_modules/grunt-contrib-cssmin/test/expected/style.css +node_modules/grunt-contrib-cssmin/test/expected/with-banner.css +node_modules/grunt-contrib-cssmin/test/fixtures/input_bannered.css +node_modules/grunt-contrib-cssmin/test/fixtures/input_inline_import.css +node_modules/grunt-contrib-cssmin/test/fixtures/input_inline_import2.css +node_modules/grunt-contrib-cssmin/test/fixtures/input_one.css +node_modules/grunt-contrib-cssmin/test/fixtures/input_two.css +node_modules/grunt-contrib-cssmin/test/fixtures/inner/input_inline_import.css +node_modules/grunt-contrib-cssmin/test/fixtures/inner/input_inline_import2.css +node_modules/grunt-contrib-jshint/.jshintignore +node_modules/grunt-contrib-jshint/.jshintrc +node_modules/grunt-contrib-jshint/.npmignore +node_modules/grunt-contrib-jshint/.travis.yml +node_modules/grunt-contrib-jshint/AUTHORS +node_modules/grunt-contrib-jshint/CHANGELOG +node_modules/grunt-contrib-jshint/CONTRIBUTING.md +node_modules/grunt-contrib-jshint/Gruntfile.js +node_modules/grunt-contrib-jshint/LICENSE-MIT +node_modules/grunt-contrib-jshint/README.md +node_modules/grunt-contrib-jshint/package.json +node_modules/grunt-contrib-jshint/docs/jshint-examples.md +node_modules/grunt-contrib-jshint/docs/jshint-options.md +node_modules/grunt-contrib-jshint/docs/jshint-overview.md +node_modules/grunt-contrib-jshint/node_modules/.bin/jshint +node_modules/grunt-contrib-jshint/node_modules/jshint/README.md +node_modules/grunt-contrib-jshint/node_modules/jshint/package.json +node_modules/grunt-contrib-jshint/node_modules/jshint/bin/apply +node_modules/grunt-contrib-jshint/node_modules/jshint/bin/build +node_modules/grunt-contrib-jshint/node_modules/jshint/bin/changelog +node_modules/grunt-contrib-jshint/node_modules/jshint/bin/jshint +node_modules/grunt-contrib-jshint/node_modules/jshint/bin/land +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/.bin/shjs +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/README.md +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/cli.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/index.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/package.json +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/examples/cat.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/examples/command.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/examples/echo.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/examples/glob.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/examples/long_desc.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/examples/progress.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/examples/sort.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/examples/spinner.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/examples/static.coffee +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/examples/static.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/node_modules/glob/.npmignore +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/node_modules/glob/.travis.yml +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/node_modules/glob/LICENSE +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/node_modules/glob/README.md +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/node_modules/glob/glob.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/node_modules/glob/package.json +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/node_modules/glob/examples/g.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/node_modules/glob/examples/usr-local.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/node_modules/glob/node_modules/inherits/LICENSE +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/node_modules/glob/node_modules/inherits/README.md +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/node_modules/glob/node_modules/inherits/inherits.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/node_modules/glob/node_modules/inherits/inherits_browser.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/node_modules/glob/node_modules/inherits/package.json +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/node_modules/glob/node_modules/inherits/test.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/node_modules/glob/test/00-setup.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/node_modules/glob/test/bash-comparison.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/node_modules/glob/test/bash-results.json +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/node_modules/glob/test/cwd-test.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/node_modules/glob/test/globstar-match.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/node_modules/glob/test/mark.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/node_modules/glob/test/nocase-nomagic.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/node_modules/glob/test/pause-resume.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/node_modules/glob/test/root-nomount.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/node_modules/glob/test/root.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/node_modules/glob/test/stat.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/cli/node_modules/glob/test/zz-cleanup.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/console-browserify/.npmignore +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/console-browserify/.testem.json +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/console-browserify/.travis.yml +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/console-browserify/LICENCE +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/console-browserify/README.md +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/console-browserify/index.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/console-browserify/package.json +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/console-browserify/test/index.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/console-browserify/test/static/index.html +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/console-browserify/test/static/test-adapter.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/minimatch/LICENSE +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/minimatch/README.md +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/minimatch/minimatch.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/minimatch/package.json +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/minimatch/node_modules/lru-cache/.npmignore +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/minimatch/node_modules/lru-cache/AUTHORS +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/minimatch/node_modules/lru-cache/LICENSE +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/minimatch/node_modules/lru-cache/README.md +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/minimatch/node_modules/lru-cache/bench.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/minimatch/node_modules/lru-cache/package.json +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/minimatch/node_modules/lru-cache/test/basic.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/minimatch/node_modules/lru-cache/test/foreach.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/minimatch/node_modules/sigmund/LICENSE +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/minimatch/node_modules/sigmund/README.md +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/minimatch/node_modules/sigmund/bench.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/minimatch/node_modules/sigmund/package.json +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/minimatch/node_modules/sigmund/sigmund.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/minimatch/node_modules/sigmund/test/basic.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/minimatch/test/basic.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/minimatch/test/brace-expand.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/minimatch/test/caching.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/minimatch/test/defaults.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/.documentup.json +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/.npmignore +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/.travis.yml +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/LICENSE +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/README.md +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/global.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/jshint.json +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/make.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/package.json +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/shell.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/bin/shjs +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/scripts/docs.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/scripts/run-tests.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/.npmignore +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/cat.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/cd.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/chmod.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/config.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/cp.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/dirs.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/echo.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/env.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/exec.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/find.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/grep.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/ls.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/make.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/mkdir.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/mv.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/popd.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/pushd.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/pwd.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/rm.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/sed.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/tempdir.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/test.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/to.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/which.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/a.txt +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/file1 +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/file1.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/file1.txt +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/file2 +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/file2.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/file2.txt +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/chmod/file1 +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/chmod/a/b/c/.npmignore +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/chmod/b/a/b/.npmignore +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/chmod/c/a/b/.npmignore +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/cp/a +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/cp/b +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/cp/dir_a/z +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/cp/dir_b/dir_b_a/dir_b_a_a/z +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/external/node_script.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/find/.hidden +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/find/a +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/find/b +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/find/dir1/a_dir1 +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/find/dir1/dir11/a_dir11 +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/find/dir2/a_dir1 +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/issue44/main.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/ls/.hidden_file +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/ls/file1 +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/ls/file1.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/ls/file2 +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/ls/file2.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/ls/filename(with)[chars$]^that.must+be-escaped +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/ls/.hidden_dir/nada +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/ls/a_dir/nada +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/ls/a_dir/.hidden_dir/nada +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/ls/a_dir/b_dir/z +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/pushd/a/dummy +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/shelljs/test/resources/pushd/b/c/dummy +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/underscore/.npmignore +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/underscore/.travis.yml +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/underscore/CNAME +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/underscore/CONTRIBUTING.md +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/underscore/LICENSE +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/underscore/README.md +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/underscore/favicon.ico +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/underscore/index.html +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/underscore/index.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/underscore/package.json +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/underscore/underscore-min.js +node_modules/grunt-contrib-jshint/node_modules/jshint/node_modules/underscore/underscore.js +node_modules/grunt-contrib-jshint/node_modules/jshint/src/cli.js +node_modules/grunt-contrib-jshint/node_modules/jshint/src/jshint.js +node_modules/grunt-contrib-jshint/node_modules/jshint/src/lex.js +node_modules/grunt-contrib-jshint/node_modules/jshint/src/messages.js +node_modules/grunt-contrib-jshint/node_modules/jshint/src/reg.js +node_modules/grunt-contrib-jshint/node_modules/jshint/src/state.js +node_modules/grunt-contrib-jshint/node_modules/jshint/src/style.js +node_modules/grunt-contrib-jshint/node_modules/jshint/src/vars.js +node_modules/grunt-contrib-jshint/node_modules/jshint/src/platforms/rhino.js +node_modules/grunt-contrib-jshint/node_modules/jshint/src/reporters/checkstyle.js +node_modules/grunt-contrib-jshint/node_modules/jshint/src/reporters/default.js +node_modules/grunt-contrib-jshint/node_modules/jshint/src/reporters/jslint_xml.js +node_modules/grunt-contrib-jshint/node_modules/jshint/src/reporters/non_error.js +node_modules/grunt-contrib-jshint/tasks/jshint.js +node_modules/grunt-contrib-jshint/tasks/lib/jshint.js +node_modules/grunt-contrib-jshint/test/jshint_test.js +node_modules/grunt-contrib-jshint/test/fixtures/dontlint.txt +node_modules/grunt-contrib-jshint/test/fixtures/lint.txt +node_modules/grunt-contrib-jshint/test/fixtures/missingsemicolon.js +node_modules/grunt-contrib-jshint/test/fixtures/nodemodule.js +node_modules/grunt-contrib-less/.jshintrc +node_modules/grunt-contrib-less/.npmignore +node_modules/grunt-contrib-less/.travis.yml +node_modules/grunt-contrib-less/AUTHORS +node_modules/grunt-contrib-less/CHANGELOG +node_modules/grunt-contrib-less/CONTRIBUTING.md +node_modules/grunt-contrib-less/Gruntfile.js +node_modules/grunt-contrib-less/LICENSE-MIT +node_modules/grunt-contrib-less/README.md +node_modules/grunt-contrib-less/package.json +node_modules/grunt-contrib-less/docs/less-examples.md +node_modules/grunt-contrib-less/docs/less-options.md +node_modules/grunt-contrib-less/docs/less-overview.md +node_modules/grunt-contrib-less/docs/overview.md +node_modules/grunt-contrib-less/node_modules/.bin/lessc +node_modules/grunt-contrib-less/node_modules/grunt-lib-contrib/.gitattributes +node_modules/grunt-contrib-less/node_modules/grunt-lib-contrib/.jshintrc +node_modules/grunt-contrib-less/node_modules/grunt-lib-contrib/.npmignore +node_modules/grunt-contrib-less/node_modules/grunt-lib-contrib/.travis.yml +node_modules/grunt-contrib-less/node_modules/grunt-lib-contrib/AUTHORS +node_modules/grunt-contrib-less/node_modules/grunt-lib-contrib/CHANGELOG +node_modules/grunt-contrib-less/node_modules/grunt-lib-contrib/Gruntfile.js +node_modules/grunt-contrib-less/node_modules/grunt-lib-contrib/LICENSE-MIT +node_modules/grunt-contrib-less/node_modules/grunt-lib-contrib/README.md +node_modules/grunt-contrib-less/node_modules/grunt-lib-contrib/package.json +node_modules/grunt-contrib-less/node_modules/grunt-lib-contrib/lib/contrib.js +node_modules/grunt-contrib-less/node_modules/grunt-lib-contrib/node_modules/zlib-browserify/.npmignore +node_modules/grunt-contrib-less/node_modules/grunt-lib-contrib/node_modules/zlib-browserify/index.js +node_modules/grunt-contrib-less/node_modules/grunt-lib-contrib/node_modules/zlib-browserify/package.json +node_modules/grunt-contrib-less/node_modules/grunt-lib-contrib/node_modules/zlib-browserify/readme.md +node_modules/grunt-contrib-less/node_modules/grunt-lib-contrib/node_modules/zlib-browserify/zlib.js +node_modules/grunt-contrib-less/node_modules/grunt-lib-contrib/node_modules/zlib-browserify/test/zlib.test.js +node_modules/grunt-contrib-less/node_modules/grunt-lib-contrib/test/lib_test.js +node_modules/grunt-contrib-less/node_modules/less/.npmignore +node_modules/grunt-contrib-less/node_modules/less/CHANGELOG.md +node_modules/grunt-contrib-less/node_modules/less/CONTRIBUTING.md +node_modules/grunt-contrib-less/node_modules/less/LICENSE +node_modules/grunt-contrib-less/node_modules/less/Makefile +node_modules/grunt-contrib-less/node_modules/less/README.md +node_modules/grunt-contrib-less/node_modules/less/package.json +node_modules/grunt-contrib-less/node_modules/less/benchmark/benchmark.less +node_modules/grunt-contrib-less/node_modules/less/benchmark/less-benchmark.js +node_modules/grunt-contrib-less/node_modules/less/bin/lessc +node_modules/grunt-contrib-less/node_modules/less/build/amd.js +node_modules/grunt-contrib-less/node_modules/less/build/header.js +node_modules/grunt-contrib-less/node_modules/less/build/require-rhino.js +node_modules/grunt-contrib-less/node_modules/less/build/require.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.1.0.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.1.0.min.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.1.1.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.1.1.min.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.1.2.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.1.2.min.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.1.3.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.1.3.min.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.1.4.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.1.4.min.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.1.5.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.1.5.min.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.1.6.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.1.6.min.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.2.0.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.2.0.min.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.2.1.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.2.1.min.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.2.2.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.2.2.min.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.3.0.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.3.0.min.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.3.1.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.3.1.min.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.3.2.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.3.2.min.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.3.3.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.3.3.min.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.4.0-beta.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.4.0-beta.min.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.4.0.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.4.0.min.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.4.1.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.4.1.min.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.4.2.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-1.4.2.min.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-rhino-1.1.3.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-rhino-1.1.5.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-rhino-1.3.1.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-rhino-1.3.2.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-rhino-1.3.3.js +node_modules/grunt-contrib-less/node_modules/less/dist/less-rhino-1.4.0.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/browser.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/colors.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/env.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/extend-visitor.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/functions.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/import-visitor.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/index.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/join-selector-visitor.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/lessc_helper.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/parser.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/rhino.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/visitor.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/alpha.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/anonymous.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/assignment.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/call.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/color.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/comment.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/condition.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/dimension.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/directive.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/element.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/expression.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/extend.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/import.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/javascript.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/keyword.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/media.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/mixin.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/negative.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/operation.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/paren.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/quoted.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/rule.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/ruleset.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/selector.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/unicode-descriptor.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/url.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/value.js +node_modules/grunt-contrib-less/node_modules/less/lib/less/tree/variable.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/.bin/ycssmin +node_modules/grunt-contrib-less/node_modules/less/node_modules/mime/LICENSE +node_modules/grunt-contrib-less/node_modules/less/node_modules/mime/README.md +node_modules/grunt-contrib-less/node_modules/less/node_modules/mime/mime.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/mime/package.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/mime/test.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/mime/types/mime.types +node_modules/grunt-contrib-less/node_modules/less/node_modules/mime/types/node.types +node_modules/grunt-contrib-less/node_modules/less/node_modules/mkdirp/.npmignore +node_modules/grunt-contrib-less/node_modules/less/node_modules/mkdirp/.travis.yml +node_modules/grunt-contrib-less/node_modules/less/node_modules/mkdirp/LICENSE +node_modules/grunt-contrib-less/node_modules/less/node_modules/mkdirp/index.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/mkdirp/package.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/mkdirp/readme.markdown +node_modules/grunt-contrib-less/node_modules/less/node_modules/mkdirp/examples/pow.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/mkdirp/test/chmod.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/mkdirp/test/clobber.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/mkdirp/test/mkdirp.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/mkdirp/test/perm.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/mkdirp/test/perm_sync.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/mkdirp/test/race.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/mkdirp/test/rel.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/mkdirp/test/return.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/mkdirp/test/return_sync.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/mkdirp/test/root.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/mkdirp/test/sync.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/mkdirp/test/umask.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/mkdirp/test/umask_sync.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/.npmignore +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/LICENSE +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/README.md +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/index.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/package.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/request.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/lib/copy.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/lib/debug.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/lib/getSafe.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/aws-sign/LICENSE +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/aws-sign/README.md +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/aws-sign/index.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/aws-sign/package.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/cookie-jar/LICENSE +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/cookie-jar/README.md +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/cookie-jar/index.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/cookie-jar/jar.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/cookie-jar/package.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/cookie-jar/tests/run.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/cookie-jar/tests/test-cookie.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/cookie-jar/tests/test-cookiejar.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/forever-agent/LICENSE +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/forever-agent/README.md +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/forever-agent/index.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/forever-agent/package.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/License +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/Readme.md +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/package.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/lib/form_data.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/async/LICENSE +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/async/README.md +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/async/component.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/async/package.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/async/lib/async.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/.npmignore +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/License +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/Makefile +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/Readme.md +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/package.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/lib/combined_stream.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/.npmignore +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/License +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Makefile +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/Readme.md +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/package.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/lib/delayed_stream.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/common.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/run.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-http-upload.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-auto-pause.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream-pause.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-delayed-stream.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-handle-source-errors.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-max-data-size.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-pipe-resumes.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/node_modules/delayed-stream/test/integration/test-proxy-readable.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/common.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/run.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/fixture/file1.txt +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/fixture/file2.txt +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-callback-streams.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-data-size.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-delayed-streams-and-buffers-and-strings.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-delayed-streams.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-empty-string.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-is-stream-like.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-max-data-size.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/form-data/node_modules/combined-stream/test/integration/test-unpaused-streams.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/.npmignore +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/.travis.yml +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/LICENSE +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/Makefile +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/README.md +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/index.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/package.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/example/usage.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/images/hawk.png +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/images/logo.png +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/lib/browser.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/lib/client.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/lib/crypto.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/lib/index.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/lib/server.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/lib/utils.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/boom/.npmignore +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/boom/.travis.yml +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/boom/LICENSE +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/boom/Makefile +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/boom/README.md +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/boom/index.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/boom/package.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/boom/images/boom.png +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/boom/lib/index.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/boom/test/index.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/cryptiles/.npmignore +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/cryptiles/.travis.yml +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/cryptiles/LICENSE +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/cryptiles/Makefile +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/cryptiles/README.md +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/cryptiles/index.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/cryptiles/package.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/cryptiles/lib/index.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/cryptiles/test/index.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/hoek/.npmignore +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/hoek/.travis.yml +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/hoek/LICENSE +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/hoek/Makefile +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/hoek/README.md +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/hoek/index.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/hoek/package.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/hoek/images/hoek.png +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/hoek/lib/escape.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/hoek/lib/index.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/hoek/test/escaper.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/hoek/test/index.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test1.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test2.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/hoek/test/modules/test3.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/sntp/.npmignore +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/sntp/.travis.yml +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/sntp/LICENSE +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/sntp/Makefile +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/sntp/README.md +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/sntp/index.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/sntp/package.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/sntp/examples/offset.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/sntp/examples/time.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/sntp/lib/index.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/node_modules/sntp/test/index.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/test/browser.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/test/client.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/test/crypto.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/test/index.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/test/message.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/test/readme.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/test/server.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/test/uri.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/hawk/test/utils.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/.dir-locals.el +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/.npmignore +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/LICENSE +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/README.md +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/http_signing.md +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/package.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/lib/index.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/lib/parser.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/lib/signer.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/lib/util.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/lib/verify.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/asn1/.npmignore +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/asn1/LICENSE +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/asn1/README.md +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/asn1/package.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/index.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/errors.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/index.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/reader.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/types.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/asn1/lib/ber/writer.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/reader.test.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/asn1/tst/ber/writer.test.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/assert-plus/README.md +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/assert-plus/assert.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/assert-plus/package.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/CHANGELOG +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/LICENSE +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/README +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/README.old +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/ctf.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/ctio.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/ctype.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/package.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/man/man3ctype/ctio.3ctype +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsl.conf +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tools/jsstyle +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/float.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/int.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/psinfo.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/struct.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.fail.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.float.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.int.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.psinfo.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.struct.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/tst.typedef.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctf/typedef.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.rfloat.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/float/tst.wfloat.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.64.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.rint.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wbounds.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/int/tst.wint.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.64.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.roundtrip.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.ruint.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctio/uint/tst.wuint.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicr.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.basicw.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.char.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.endian.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.oldwrite.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.readSize.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.structw.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/http-signature/node_modules/ctype/tst/ctype/tst.writeStruct.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/json-stringify-safe/LICENSE +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/json-stringify-safe/README.md +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/json-stringify-safe/package.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/json-stringify-safe/stringify.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/json-stringify-safe/test.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/node-uuid/.npmignore +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/node-uuid/LICENSE.md +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/node-uuid/README.md +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/node-uuid/component.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/node-uuid/package.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/node-uuid/uuid.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/node-uuid/benchmark/README.md +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/node-uuid/benchmark/bench.gnu +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/node-uuid/benchmark/bench.sh +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/node-uuid/benchmark/benchmark-native.c +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/node-uuid/benchmark/benchmark.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/node-uuid/test/compare_v1.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/node-uuid/test/test.html +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/node-uuid/test/test.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/oauth-sign/LICENSE +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/oauth-sign/README.md +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/oauth-sign/index.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/oauth-sign/package.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/oauth-sign/test.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/qs/.gitmodules +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/qs/.npmignore +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/qs/Readme.md +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/qs/index.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/qs/package.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/tunnel-agent/LICENSE +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/tunnel-agent/README.md +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/tunnel-agent/index.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/node_modules/tunnel-agent/package.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/googledoodle.jpg +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/run.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/server.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/squid.conf +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-agentOptions.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-basic-auth.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-body.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-defaults.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-digest-auth.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-emptyBody.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-errors.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-follow-all-303.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-follow-all.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-form.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-hawk.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-headers.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-http-signature.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-httpModule.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-https-strict.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-https.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-isUrl.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-localAddress.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-oauth.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-onelineproxy.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-params.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-piped-redirect.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-pipes.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-pool.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-protocol-changing-redirect.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-proxy.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-qs.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-redirect.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-s3.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-timeout.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-toJSON.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/test-tunnel.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/unicycle.jpg +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/ssl/npm-ca.crt +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/ssl/test.crt +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/ssl/test.key +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/ssl/ca/ca.cnf +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/ssl/ca/ca.crl +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/ssl/ca/ca.crt +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/ssl/ca/ca.csr +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/ssl/ca/ca.key +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/ssl/ca/ca.srl +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/ssl/ca/server.cnf +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/ssl/ca/server.crt +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/ssl/ca/server.csr +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/ssl/ca/server.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/request/tests/ssl/ca/server.key +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/.npmignore +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/.travis.yml +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/LICENSE +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/Makefile +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/README.md +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/cssmin.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/package.json +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/bin/cssmin +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/tests.js +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/background-position.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/background-position.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/border-none.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/border-none.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/box-model-hack.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/box-model-hack.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/bug2527974.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/bug2527974.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/bug2527991.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/bug2527991.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/bug2527998.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/bug2527998.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/bug2528034.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/bug2528034.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/charset-media.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/charset-media.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/color-simple.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/color-simple.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/color.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/color.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/comment.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/comment.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/concat-charset.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/concat-charset.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-base64-doublequotes.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-base64-doublequotes.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-base64-eof.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-base64-eof.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-base64-linebreakindata.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-base64-linebreakindata.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-base64-noquotes.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-base64-noquotes.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-base64-singlequotes.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-base64-singlequotes.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-base64-twourls.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-base64-twourls.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-dbquote-font.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-dbquote-font.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-nonbase64-doublequotes.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-nonbase64-doublequotes.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-nonbase64-noquotes.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-nonbase64-noquotes.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-nonbase64-singlequotes.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-nonbase64-singlequotes.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-noquote-multiline-font.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-noquote-multiline-font.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-realdata-doublequotes.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-realdata-doublequotes.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-realdata-noquotes.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-realdata-noquotes.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-realdata-singlequotes.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-realdata-singlequotes.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-realdata-yuiapp.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-realdata-yuiapp.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-singlequote-font.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dataurl-singlequote-font.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/decimals.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/decimals.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dollar-header.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/dollar-header.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/font-face.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/font-face.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/ie5mac.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/ie5mac.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/media-empty-class.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/media-empty-class.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/media-multi.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/media-multi.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/media-test.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/media-test.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/opacity-filter.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/opacity-filter.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/preserve-case.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/preserve-case.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/preserve-new-line.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/preserve-new-line.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/preserve-strings.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/preserve-strings.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/pseudo-first.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/pseudo-first.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/pseudo.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/pseudo.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/special-comments.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/special-comments.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/star-underscore-hacks.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/star-underscore-hacks.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/string-in-comment.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/string-in-comment.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/webkit-transform.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/webkit-transform.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/zeros.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/zeros.css.min +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/special/linebreakpos.css +node_modules/grunt-contrib-less/node_modules/less/node_modules/ycssmin/tests/files/special/linebreakpos.css.min +node_modules/grunt-contrib-less/node_modules/less/test/browser-test-prepare.js +node_modules/grunt-contrib-less/node_modules/less/test/less-test.js +node_modules/grunt-contrib-less/node_modules/less/test/browser/common.js +node_modules/grunt-contrib-less/node_modules/less/test/browser/jasmine-html.js +node_modules/grunt-contrib-less/node_modules/less/test/browser/jasmine.css +node_modules/grunt-contrib-less/node_modules/less/test/browser/jasmine.js +node_modules/grunt-contrib-less/node_modules/less/test/browser/phantom-runner.js +node_modules/grunt-contrib-less/node_modules/less/test/browser/runner-browser.js +node_modules/grunt-contrib-less/node_modules/less/test/browser/runner-errors.js +node_modules/grunt-contrib-less/node_modules/less/test/browser/runner-legacy.js +node_modules/grunt-contrib-less/node_modules/less/test/browser/runner-main.js +node_modules/grunt-contrib-less/node_modules/less/test/browser/runner-production.js +node_modules/grunt-contrib-less/node_modules/less/test/browser/runner-relative-urls.js +node_modules/grunt-contrib-less/node_modules/less/test/browser/runner-rootpath-relative.js +node_modules/grunt-contrib-less/node_modules/less/test/browser/runner-rootpath.js +node_modules/grunt-contrib-less/node_modules/less/test/browser/template.htm +node_modules/grunt-contrib-less/node_modules/less/test/browser/css/urls.css +node_modules/grunt-contrib-less/node_modules/less/test/browser/css/relative-urls/urls.css +node_modules/grunt-contrib-less/node_modules/less/test/browser/css/rootpath/urls.css +node_modules/grunt-contrib-less/node_modules/less/test/browser/css/rootpath-relative/urls.css +node_modules/grunt-contrib-less/node_modules/less/test/browser/less/urls.less +node_modules/grunt-contrib-less/node_modules/less/test/browser/less/imports/urls.less +node_modules/grunt-contrib-less/node_modules/less/test/browser/less/imports/urls2.less +node_modules/grunt-contrib-less/node_modules/less/test/browser/less/relative-urls/urls.less +node_modules/grunt-contrib-less/node_modules/less/test/browser/less/rootpath/urls.less +node_modules/grunt-contrib-less/node_modules/less/test/browser/less/rootpath-relative/urls.less +node_modules/grunt-contrib-less/node_modules/less/test/css/charsets.css +node_modules/grunt-contrib-less/node_modules/less/test/css/colors.css +node_modules/grunt-contrib-less/node_modules/less/test/css/comments.css +node_modules/grunt-contrib-less/node_modules/less/test/css/css-3.css +node_modules/grunt-contrib-less/node_modules/less/test/css/css-escapes.css +node_modules/grunt-contrib-less/node_modules/less/test/css/css.css +node_modules/grunt-contrib-less/node_modules/less/test/css/extend-chaining.css +node_modules/grunt-contrib-less/node_modules/less/test/css/extend-clearfix.css +node_modules/grunt-contrib-less/node_modules/less/test/css/extend-exact.css +node_modules/grunt-contrib-less/node_modules/less/test/css/extend-media.css +node_modules/grunt-contrib-less/node_modules/less/test/css/extend-nest.css +node_modules/grunt-contrib-less/node_modules/less/test/css/extend-selector.css +node_modules/grunt-contrib-less/node_modules/less/test/css/extend.css +node_modules/grunt-contrib-less/node_modules/less/test/css/functions.css +node_modules/grunt-contrib-less/node_modules/less/test/css/ie-filters.css +node_modules/grunt-contrib-less/node_modules/less/test/css/import-interpolation.css +node_modules/grunt-contrib-less/node_modules/less/test/css/import-once.css +node_modules/grunt-contrib-less/node_modules/less/test/css/import.css +node_modules/grunt-contrib-less/node_modules/less/test/css/javascript.css +node_modules/grunt-contrib-less/node_modules/less/test/css/lazy-eval.css +node_modules/grunt-contrib-less/node_modules/less/test/css/media.css +node_modules/grunt-contrib-less/node_modules/less/test/css/mixins-args.css +node_modules/grunt-contrib-less/node_modules/less/test/css/mixins-closure.css +node_modules/grunt-contrib-less/node_modules/less/test/css/mixins-guards.css +node_modules/grunt-contrib-less/node_modules/less/test/css/mixins-important.css +node_modules/grunt-contrib-less/node_modules/less/test/css/mixins-named-args.css +node_modules/grunt-contrib-less/node_modules/less/test/css/mixins-nested.css +node_modules/grunt-contrib-less/node_modules/less/test/css/mixins-pattern.css +node_modules/grunt-contrib-less/node_modules/less/test/css/mixins.css +node_modules/grunt-contrib-less/node_modules/less/test/css/operations.css +node_modules/grunt-contrib-less/node_modules/less/test/css/parens.css +node_modules/grunt-contrib-less/node_modules/less/test/css/rulesets.css +node_modules/grunt-contrib-less/node_modules/less/test/css/scope.css +node_modules/grunt-contrib-less/node_modules/less/test/css/selectors.css +node_modules/grunt-contrib-less/node_modules/less/test/css/strings.css +node_modules/grunt-contrib-less/node_modules/less/test/css/urls.css +node_modules/grunt-contrib-less/node_modules/less/test/css/variables.css +node_modules/grunt-contrib-less/node_modules/less/test/css/whitespace.css +node_modules/grunt-contrib-less/node_modules/less/test/css/compression/compression.css +node_modules/grunt-contrib-less/node_modules/less/test/css/debug/linenumbers-all.css +node_modules/grunt-contrib-less/node_modules/less/test/css/debug/linenumbers-comments.css +node_modules/grunt-contrib-less/node_modules/less/test/css/debug/linenumbers-mediaquery.css +node_modules/grunt-contrib-less/node_modules/less/test/css/legacy/legacy.css +node_modules/grunt-contrib-less/node_modules/less/test/css/static-urls/urls.css +node_modules/grunt-contrib-less/node_modules/less/test/data/data-uri-fail.png +node_modules/grunt-contrib-less/node_modules/less/test/data/image.jpg +node_modules/grunt-contrib-less/node_modules/less/test/data/page.html +node_modules/grunt-contrib-less/node_modules/less/test/less/charsets.less +node_modules/grunt-contrib-less/node_modules/less/test/less/colors.less +node_modules/grunt-contrib-less/node_modules/less/test/less/comments.less +node_modules/grunt-contrib-less/node_modules/less/test/less/css-3.less +node_modules/grunt-contrib-less/node_modules/less/test/less/css-escapes.less +node_modules/grunt-contrib-less/node_modules/less/test/less/css.less +node_modules/grunt-contrib-less/node_modules/less/test/less/extend-chaining.less +node_modules/grunt-contrib-less/node_modules/less/test/less/extend-clearfix.less +node_modules/grunt-contrib-less/node_modules/less/test/less/extend-exact.less +node_modules/grunt-contrib-less/node_modules/less/test/less/extend-media.less +node_modules/grunt-contrib-less/node_modules/less/test/less/extend-nest.less +node_modules/grunt-contrib-less/node_modules/less/test/less/extend-selector.less +node_modules/grunt-contrib-less/node_modules/less/test/less/extend.less +node_modules/grunt-contrib-less/node_modules/less/test/less/functions.less +node_modules/grunt-contrib-less/node_modules/less/test/less/ie-filters.less +node_modules/grunt-contrib-less/node_modules/less/test/less/import-interpolation.less +node_modules/grunt-contrib-less/node_modules/less/test/less/import-once.less +node_modules/grunt-contrib-less/node_modules/less/test/less/import.less +node_modules/grunt-contrib-less/node_modules/less/test/less/javascript.less +node_modules/grunt-contrib-less/node_modules/less/test/less/lazy-eval.less +node_modules/grunt-contrib-less/node_modules/less/test/less/media.less +node_modules/grunt-contrib-less/node_modules/less/test/less/mixins-args.less +node_modules/grunt-contrib-less/node_modules/less/test/less/mixins-closure.less +node_modules/grunt-contrib-less/node_modules/less/test/less/mixins-guards.less +node_modules/grunt-contrib-less/node_modules/less/test/less/mixins-important.less +node_modules/grunt-contrib-less/node_modules/less/test/less/mixins-named-args.less +node_modules/grunt-contrib-less/node_modules/less/test/less/mixins-nested.less +node_modules/grunt-contrib-less/node_modules/less/test/less/mixins-pattern.less +node_modules/grunt-contrib-less/node_modules/less/test/less/mixins.less +node_modules/grunt-contrib-less/node_modules/less/test/less/operations.less +node_modules/grunt-contrib-less/node_modules/less/test/less/parens.less +node_modules/grunt-contrib-less/node_modules/less/test/less/rulesets.less +node_modules/grunt-contrib-less/node_modules/less/test/less/scope.less +node_modules/grunt-contrib-less/node_modules/less/test/less/selectors.less +node_modules/grunt-contrib-less/node_modules/less/test/less/strings.less +node_modules/grunt-contrib-less/node_modules/less/test/less/urls.less +node_modules/grunt-contrib-less/node_modules/less/test/less/variables.less +node_modules/grunt-contrib-less/node_modules/less/test/less/whitespace.less +node_modules/grunt-contrib-less/node_modules/less/test/less/compression/compression.less +node_modules/grunt-contrib-less/node_modules/less/test/less/debug/linenumbers.less +node_modules/grunt-contrib-less/node_modules/less/test/less/debug/import/test.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/add-mixed-units.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/add-mixed-units.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/add-mixed-units2.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/add-mixed-units2.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/bad-variable-declaration1.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/bad-variable-declaration1.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/color-operation-error.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/color-operation-error.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/comment-in-selector.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/comment-in-selector.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/divide-mixed-units.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/divide-mixed-units.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/extend-no-selector.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/extend-no-selector.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/extend-not-at-end.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/extend-not-at-end.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/import-missing.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/import-missing.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/import-no-semi.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/import-no-semi.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/import-subfolder1.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/import-subfolder1.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/import-subfolder2.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/import-subfolder2.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/javascript-error.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/javascript-error.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/mixed-mixin-definition-args-1.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/mixed-mixin-definition-args-1.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/mixed-mixin-definition-args-2.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/mixed-mixin-definition-args-2.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/mixin-not-defined.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/mixin-not-defined.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/mixin-not-matched.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/mixin-not-matched.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/mixin-not-matched2.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/mixin-not-matched2.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/multiply-mixed-units.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/multiply-mixed-units.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/parens-error-1.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/parens-error-1.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/parens-error-2.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/parens-error-2.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/parens-error-3.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/parens-error-3.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/parse-error-curly-bracket.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/parse-error-curly-bracket.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/parse-error-missing-bracket.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/parse-error-missing-bracket.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/parse-error-with-import.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/parse-error-with-import.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/property-ie5-hack.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/property-ie5-hack.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/property-in-root.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/property-in-root.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/property-in-root2.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/property-in-root2.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/property-in-root3.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/property-in-root3.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/recursive-variable.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/recursive-variable.txt +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/imports/import-subfolder1.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/imports/import-subfolder2.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/imports/import-test.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/imports/subfolder/mixin-not-defined.less +node_modules/grunt-contrib-less/node_modules/less/test/less/errors/imports/subfolder/parse-error-curly-bracket.less +node_modules/grunt-contrib-less/node_modules/less/test/less/import/import-and-relative-paths-test.less +node_modules/grunt-contrib-less/node_modules/less/test/less/import/import-charset-test.less +node_modules/grunt-contrib-less/node_modules/less/test/less/import/import-interpolation.less +node_modules/grunt-contrib-less/node_modules/less/test/less/import/import-interpolation2.less +node_modules/grunt-contrib-less/node_modules/less/test/less/import/import-once-test-c.less +node_modules/grunt-contrib-less/node_modules/less/test/less/import/import-test-a.less +node_modules/grunt-contrib-less/node_modules/less/test/less/import/import-test-b.less +node_modules/grunt-contrib-less/node_modules/less/test/less/import/import-test-c.less +node_modules/grunt-contrib-less/node_modules/less/test/less/import/import-test-d.css +node_modules/grunt-contrib-less/node_modules/less/test/less/import/import-test-e.less +node_modules/grunt-contrib-less/node_modules/less/test/less/import/urls.less +node_modules/grunt-contrib-less/node_modules/less/test/less/import/deeper/import-once-test-a.less +node_modules/grunt-contrib-less/node_modules/less/test/less/import/imports/font.less +node_modules/grunt-contrib-less/node_modules/less/test/less/import/imports/logo.less +node_modules/grunt-contrib-less/node_modules/less/test/less/legacy/legacy.less +node_modules/grunt-contrib-less/node_modules/less/test/less/static-urls/urls.less +node_modules/grunt-contrib-less/tasks/less.js +node_modules/grunt-contrib-less/test/less_test.js +node_modules/grunt-contrib-less/test/expected/compress.css +node_modules/grunt-contrib-less/test/expected/concat.css +node_modules/grunt-contrib-less/test/expected/ieCompatFalse.css +node_modules/grunt-contrib-less/test/expected/ieCompatTrue.css +node_modules/grunt-contrib-less/test/expected/less.css +node_modules/grunt-contrib-less/test/expected/nomatches.css +node_modules/grunt-contrib-less/test/expected/nopaths.css +node_modules/grunt-contrib-less/test/expected/yuicompress.css +node_modules/grunt-contrib-less/test/expected/yuicompressReport.css +node_modules/grunt-contrib-less/test/expected/individual/style.css +node_modules/grunt-contrib-less/test/expected/individual/style2.css +node_modules/grunt-contrib-less/test/expected/individual/level2/style3.css +node_modules/grunt-contrib-less/test/expected/individual_flatten/style.css +node_modules/grunt-contrib-less/test/expected/individual_flatten/style2.css +node_modules/grunt-contrib-less/test/expected/individual_flatten/style3.css +node_modules/grunt-contrib-less/test/fixtures/ieCompat.less +node_modules/grunt-contrib-less/test/fixtures/nopaths.less +node_modules/grunt-contrib-less/test/fixtures/style.less +node_modules/grunt-contrib-less/test/fixtures/style2.less +node_modules/grunt-contrib-less/test/fixtures/style3.less +node_modules/grunt-contrib-less/test/fixtures/include/bob.jpg +node_modules/grunt-contrib-less/test/fixtures/include/variables.less +node_modules/grunt-contrib-less/test/fixtures/level2/style3.less +node_modules/grunt-contrib-uglify/.jshintrc +node_modules/grunt-contrib-uglify/.npmignore +node_modules/grunt-contrib-uglify/.travis.yml +node_modules/grunt-contrib-uglify/AUTHORS +node_modules/grunt-contrib-uglify/CHANGELOG +node_modules/grunt-contrib-uglify/CONTRIBUTING.md +node_modules/grunt-contrib-uglify/Gruntfile.js +node_modules/grunt-contrib-uglify/LICENSE-MIT +node_modules/grunt-contrib-uglify/README.md +node_modules/grunt-contrib-uglify/package.json +node_modules/grunt-contrib-uglify/docs/uglify-examples.md +node_modules/grunt-contrib-uglify/docs/uglify-options.md +node_modules/grunt-contrib-uglify/docs/uglify-overview.md +node_modules/grunt-contrib-uglify/node_modules/.bin/uglifyjs +node_modules/grunt-contrib-uglify/node_modules/grunt-lib-contrib/.gitattributes +node_modules/grunt-contrib-uglify/node_modules/grunt-lib-contrib/.jshintrc +node_modules/grunt-contrib-uglify/node_modules/grunt-lib-contrib/.npmignore +node_modules/grunt-contrib-uglify/node_modules/grunt-lib-contrib/.travis.yml +node_modules/grunt-contrib-uglify/node_modules/grunt-lib-contrib/AUTHORS +node_modules/grunt-contrib-uglify/node_modules/grunt-lib-contrib/CHANGELOG +node_modules/grunt-contrib-uglify/node_modules/grunt-lib-contrib/Gruntfile.js +node_modules/grunt-contrib-uglify/node_modules/grunt-lib-contrib/LICENSE-MIT +node_modules/grunt-contrib-uglify/node_modules/grunt-lib-contrib/README.md +node_modules/grunt-contrib-uglify/node_modules/grunt-lib-contrib/package.json +node_modules/grunt-contrib-uglify/node_modules/grunt-lib-contrib/lib/contrib.js +node_modules/grunt-contrib-uglify/node_modules/grunt-lib-contrib/node_modules/zlib-browserify/.npmignore +node_modules/grunt-contrib-uglify/node_modules/grunt-lib-contrib/node_modules/zlib-browserify/index.js +node_modules/grunt-contrib-uglify/node_modules/grunt-lib-contrib/node_modules/zlib-browserify/package.json +node_modules/grunt-contrib-uglify/node_modules/grunt-lib-contrib/node_modules/zlib-browserify/readme.md +node_modules/grunt-contrib-uglify/node_modules/grunt-lib-contrib/node_modules/zlib-browserify/zlib.js +node_modules/grunt-contrib-uglify/node_modules/grunt-lib-contrib/node_modules/zlib-browserify/test/zlib.test.js +node_modules/grunt-contrib-uglify/node_modules/grunt-lib-contrib/test/lib_test.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/.npmignore +node_modules/grunt-contrib-uglify/node_modules/uglify-js/.travis.yml +node_modules/grunt-contrib-uglify/node_modules/uglify-js/LICENSE +node_modules/grunt-contrib-uglify/node_modules/uglify-js/README.md +node_modules/grunt-contrib-uglify/node_modules/uglify-js/package.json +node_modules/grunt-contrib-uglify/node_modules/uglify-js/bin/uglifyjs +node_modules/grunt-contrib-uglify/node_modules/uglify-js/lib/ast.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/lib/compress.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/lib/mozilla-ast.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/lib/output.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/lib/parse.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/lib/scope.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/lib/sourcemap.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/lib/transform.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/lib/utils.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/async/LICENSE +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/async/README.md +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/async/component.json +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/async/package.json +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/async/lib/async.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/.travis.yml +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/LICENSE +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/index.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/package.json +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/readme.markdown +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/example/bool.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/example/boolean_double.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/example/boolean_single.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/example/default_hash.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/example/default_singles.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/example/divide.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/example/line_count.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/example/line_count_options.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/example/line_count_wrap.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/example/nonopt.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/example/reflect.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/example/short.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/example/string.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/example/usage-options.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/example/xup.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/.npmignore +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/README.markdown +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/index.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/package.json +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/example/center.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/example/meat.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/test/break.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/test/idleness.txt +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/node_modules/wordwrap/test/wrap.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/test/_.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/test/parse.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/test/usage.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/test/_/argv.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/optimist/test/_/bin.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/.npmignore +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/.travis.yml +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/CHANGELOG.md +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/LICENSE +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/Makefile.dryice.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/README.md +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/package.json +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/build/assert-shim.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/build/mini-require.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/build/prefix-source-map.jsm +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/build/prefix-utils.jsm +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/build/suffix-browser.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/build/suffix-source-map.jsm +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/build/suffix-utils.jsm +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/build/test-prefix.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/build/test-suffix.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/lib/source-map.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/lib/source-map/array-set.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/lib/source-map/base64-vlq.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/lib/source-map/base64.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/lib/source-map/binary-search.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-consumer.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-map-generator.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/lib/source-map/source-node.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/lib/source-map/util.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/LICENSE +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/README.md +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/amdefine.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/intercept.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/node_modules/amdefine/package.json +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/test/run-tests.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/test/source-map/test-api.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/test/source-map/test-array-set.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/test/source-map/test-base64-vlq.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/test/source-map/test-base64.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/test/source-map/test-binary-search.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/test/source-map/test-dog-fooding.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/test/source-map/test-source-map-consumer.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/test/source-map/test-source-map-generator.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/test/source-map/test-source-node.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/source-map/test/source-map/util.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/uglify-to-browserify/.npmignore +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/uglify-to-browserify/.travis.yml +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/uglify-to-browserify/LICENSE +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/uglify-to-browserify/README.md +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/uglify-to-browserify/index.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/uglify-to-browserify/package.json +node_modules/grunt-contrib-uglify/node_modules/uglify-js/node_modules/uglify-to-browserify/test/index.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/test/run-tests.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/test/compress/arrays.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/test/compress/blocks.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/test/compress/conditionals.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/test/compress/dead-code.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/test/compress/debugger.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/test/compress/drop-unused.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/test/compress/issue-105.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/test/compress/issue-12.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/test/compress/issue-143.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/test/compress/issue-22.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/test/compress/issue-44.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/test/compress/issue-59.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/test/compress/labels.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/test/compress/loops.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/test/compress/negate-iife.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/test/compress/properties.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/test/compress/sequences.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/test/compress/switch.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/test/compress/typeof.js +node_modules/grunt-contrib-uglify/node_modules/uglify-js/tools/node.js +node_modules/grunt-contrib-uglify/tasks/uglify.js +node_modules/grunt-contrib-uglify/tasks/lib/uglify.js +node_modules/grunt-contrib-uglify/test/uglify_test.js +node_modules/grunt-contrib-uglify/test/fixtures/expected/comments.js +node_modules/grunt-contrib-uglify/test/fixtures/expected/compress.js +node_modules/grunt-contrib-uglify/test/fixtures/expected/compress_mangle.js +node_modules/grunt-contrib-uglify/test/fixtures/expected/compress_mangle_beautify.js +node_modules/grunt-contrib-uglify/test/fixtures/expected/compress_mangle_except.js +node_modules/grunt-contrib-uglify/test/fixtures/expected/compress_mangle_sourcemap +node_modules/grunt-contrib-uglify/test/fixtures/expected/exportAll.js +node_modules/grunt-contrib-uglify/test/fixtures/expected/multifile.js +node_modules/grunt-contrib-uglify/test/fixtures/expected/multiple_sourcemaps1.js +node_modules/grunt-contrib-uglify/test/fixtures/expected/multiple_sourcemaps1.map +node_modules/grunt-contrib-uglify/test/fixtures/expected/multiple_sourcemaps2.js +node_modules/grunt-contrib-uglify/test/fixtures/expected/multiple_sourcemaps2.map +node_modules/grunt-contrib-uglify/test/fixtures/expected/sourcemap_prefix +node_modules/grunt-contrib-uglify/test/fixtures/expected/sourcemapin +node_modules/grunt-contrib-uglify/test/fixtures/expected/sourcemapin.js +node_modules/grunt-contrib-uglify/test/fixtures/expected/sourcemapurl.js +node_modules/grunt-contrib-uglify/test/fixtures/expected/wrap.js +node_modules/grunt-contrib-uglify/test/fixtures/src/comments.js +node_modules/grunt-contrib-uglify/test/fixtures/src/simple.js +node_modules/grunt-contrib-uglify/test/fixtures/src/simple2.coffee +node_modules/grunt-contrib-uglify/test/fixtures/src/simple2.js +node_modules/grunt-contrib-uglify/test/fixtures/src/simple2.map +node_modules/grunt-contrib-watch/.editorconfig +node_modules/grunt-contrib-watch/.gitattributes +node_modules/grunt-contrib-watch/.jshintrc +node_modules/grunt-contrib-watch/.npmignore +node_modules/grunt-contrib-watch/.travis.yml +node_modules/grunt-contrib-watch/AUTHORS +node_modules/grunt-contrib-watch/CHANGELOG +node_modules/grunt-contrib-watch/CONTRIBUTING.md +node_modules/grunt-contrib-watch/Gruntfile.js +node_modules/grunt-contrib-watch/LICENSE-MIT +node_modules/grunt-contrib-watch/README.md +node_modules/grunt-contrib-watch/package.json +node_modules/grunt-contrib-watch/docs/watch-examples.md +node_modules/grunt-contrib-watch/docs/watch-options.md +node_modules/grunt-contrib-watch/node_modules/.bin/tiny-lr +node_modules/grunt-contrib-watch/node_modules/gaze/.editorconfig +node_modules/grunt-contrib-watch/node_modules/gaze/.jshintrc +node_modules/grunt-contrib-watch/node_modules/gaze/.npmignore +node_modules/grunt-contrib-watch/node_modules/gaze/.travis.yml +node_modules/grunt-contrib-watch/node_modules/gaze/AUTHORS +node_modules/grunt-contrib-watch/node_modules/gaze/Gruntfile.js +node_modules/grunt-contrib-watch/node_modules/gaze/LICENSE-MIT +node_modules/grunt-contrib-watch/node_modules/gaze/README.md +node_modules/grunt-contrib-watch/node_modules/gaze/package.json +node_modules/grunt-contrib-watch/node_modules/gaze/benchmarks/gaze100s.js +node_modules/grunt-contrib-watch/node_modules/gaze/lib/gaze.js +node_modules/grunt-contrib-watch/node_modules/gaze/lib/helper.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/.jshintrc +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/.npmignore +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/.travis.yml +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/Gruntfile.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/LICENSE-MIT +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/README.md +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/package.json +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/lib/globule.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/.bin/lodash +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/.npmignore +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/.travis.yml +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/LICENSE +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/README.md +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/glob.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/package.json +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/examples/g.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/examples/usr-local.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/node_modules/graceful-fs/.npmignore +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/node_modules/graceful-fs/LICENSE +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/node_modules/graceful-fs/README.md +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/node_modules/graceful-fs/graceful-fs.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/node_modules/graceful-fs/package.json +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/node_modules/graceful-fs/test/open.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/node_modules/graceful-fs/test/ulimit.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/node_modules/inherits/README.md +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/node_modules/inherits/inherits.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/node_modules/inherits/package.json +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/test/00-setup.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/test/bash-comparison.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/test/bash-results.json +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/test/cwd-test.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/test/mark.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/test/nocase-nomagic.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/test/pause-resume.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/test/root-nomount.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/test/root.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/glob/test/zz-cleanup.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/LICENSE.txt +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/README.md +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/build.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/index.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/lodash.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/package.json +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/build/minify.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/build/post-compile.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/build/pre-compile.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/dist/lodash.compat.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/dist/lodash.compat.min.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/dist/lodash.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/dist/lodash.min.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/dist/lodash.underscore.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/dist/lodash.underscore.min.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/doc/README.md +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/perf/perf.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/test/test-build.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/test/test.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/test/template/a.jst +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/test/template/b.jst +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/test/template/c.jst +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/test/template/d.tpl +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/benchmark.js/LICENSE.txt +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/benchmark.js/README.md +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/benchmark.js/benchmark.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/platform.js/LICENSE.txt +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/platform.js/README.md +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/platform.js/platform.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/qunit/README.md +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/qunit-clib/LICENSE.txt +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/qunit-clib/README.md +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/qunit-clib/qunit-clib.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/qunit/qunit/qunit.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/README.md +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/tar.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/lib/buffer-entry.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/lib/entry-writer.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/lib/entry.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/lib/extended-header-writer.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/lib/extended-header.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/lib/extract.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/lib/global-header-writer.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/lib/header.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/lib/pack.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/lib/parse.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/block-stream/LICENCE +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/block-stream/README.md +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/block-stream/block-stream.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/fstream/LICENCE +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/fstream/README.md +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/fstream/fstream.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/fstream/lib/abstract.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/fstream/lib/collect.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/fstream/lib/dir-reader.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/fstream/lib/dir-writer.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/fstream/lib/file-reader.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/fstream/lib/file-writer.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/fstream/lib/get-type.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/fstream/lib/link-reader.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/fstream/lib/link-writer.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/fstream/lib/proxy-reader.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/fstream/lib/proxy-writer.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/fstream/lib/reader.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/fstream/lib/socket-reader.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/fstream/lib/writer.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/graceful-fs/LICENSE +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/graceful-fs/README.md +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/graceful-fs/graceful-fs.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/inherits/README.md +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/inherits/inherits.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/mkdirp/LICENSE +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/mkdirp/README.markdown +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/mkdirp/index.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/rimraf/AUTHORS +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/rimraf/LICENSE +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/rimraf/README.md +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/tar/vendor/rimraf/rimraf.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/underscore/LICENSE +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/underscore/README.md +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/lodash/vendor/underscore/underscore.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/minimatch/LICENSE +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/minimatch/README.md +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/minimatch/minimatch.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/minimatch/package.json +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/lru-cache/.npmignore +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/lru-cache/AUTHORS +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/lru-cache/LICENSE +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/lru-cache/README.md +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/lru-cache/bench.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/lru-cache/package.json +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/lru-cache/test/basic.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/lru-cache/test/foreach.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/sigmund/LICENSE +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/sigmund/README.md +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/sigmund/bench.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/sigmund/package.json +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/sigmund/sigmund.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/minimatch/node_modules/sigmund/test/basic.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/minimatch/test/basic.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/minimatch/test/brace-expand.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/minimatch/test/caching.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/node_modules/minimatch/test/defaults.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/test/globule_test.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/test/fixtures/expand/README.md +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/test/fixtures/expand/css/baz.css +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/test/fixtures/expand/css/qux.css +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/test/fixtures/expand/deep/deep.txt +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/test/fixtures/expand/deep/deeper/deeper.txt +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/test/fixtures/expand/deep/deeper/deepest/deepest.txt +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/test/fixtures/expand/js/bar.js +node_modules/grunt-contrib-watch/node_modules/gaze/node_modules/globule/test/fixtures/expand/js/foo.js +node_modules/grunt-contrib-watch/node_modules/gaze/test/add_test.js +node_modules/grunt-contrib-watch/node_modules/gaze/test/api_test.js +node_modules/grunt-contrib-watch/node_modules/gaze/test/file_poller.js +node_modules/grunt-contrib-watch/node_modules/gaze/test/helper.js +node_modules/grunt-contrib-watch/node_modules/gaze/test/matching_test.js +node_modules/grunt-contrib-watch/node_modules/gaze/test/patterns_test.js +node_modules/grunt-contrib-watch/node_modules/gaze/test/relative_test.js +node_modules/grunt-contrib-watch/node_modules/gaze/test/rename_test.js +node_modules/grunt-contrib-watch/node_modules/gaze/test/safewrite_test.js +node_modules/grunt-contrib-watch/node_modules/gaze/test/watch_race_test.js +node_modules/grunt-contrib-watch/node_modules/gaze/test/watch_test.js +node_modules/grunt-contrib-watch/node_modules/gaze/test/fixtures/one.js +node_modules/grunt-contrib-watch/node_modules/gaze/test/fixtures/nested/one.js +node_modules/grunt-contrib-watch/node_modules/gaze/test/fixtures/nested/three.js +node_modules/grunt-contrib-watch/node_modules/gaze/test/fixtures/nested/sub/two.js +node_modules/grunt-contrib-watch/node_modules/gaze/test/fixtures/nested/sub2/two.js +node_modules/grunt-contrib-watch/node_modules/gaze/test/fixtures/Project (LO)/one.js +node_modules/grunt-contrib-watch/node_modules/gaze/test/fixtures/sub/one.js +node_modules/grunt-contrib-watch/node_modules/gaze/test/fixtures/sub/two.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/.npmignore +node_modules/grunt-contrib-watch/node_modules/tiny-lr/.travis.yml +node_modules/grunt-contrib-watch/node_modules/tiny-lr/package.json +node_modules/grunt-contrib-watch/node_modules/tiny-lr/readme.md +node_modules/grunt-contrib-watch/node_modules/tiny-lr/bin/tiny-lr +node_modules/grunt-contrib-watch/node_modules/tiny-lr/bin/update-livereload +node_modules/grunt-contrib-watch/node_modules/tiny-lr/lib/client.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/lib/index.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/lib/server.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/lib/public/livereload.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/debug/.npmignore +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/debug/History.md +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/debug/Readme.md +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/debug/component.json +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/debug/debug.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/debug/index.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/debug/package.json +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/debug/example/app.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/debug/example/browser.html +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/debug/example/wildcards.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/debug/example/worker.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/debug/lib/debug.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/CHANGELOG.txt +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/README.markdown +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/package.json +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/examples/autobahn_client.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/examples/client.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/examples/haproxy.conf +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/examples/server.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/examples/sse.html +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/examples/ws.html +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/lib/faye/eventsource.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/lib/faye/websocket.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/lib/faye/websocket/api.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/lib/faye/websocket/client.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/lib/faye/websocket/draft75_parser.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/lib/faye/websocket/draft76_parser.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/lib/faye/websocket/hybi_parser.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/lib/faye/websocket/api/event.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/lib/faye/websocket/api/event_target.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/lib/faye/websocket/hybi_parser/handshake.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/lib/faye/websocket/hybi_parser/stream_reader.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/spec/runner.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/spec/server.crt +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/spec/server.key +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/spec/faye/websocket/client_spec.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/spec/faye/websocket/draft75parser_spec.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/spec/faye/websocket/draft76parser_spec.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/faye-websocket/spec/faye/websocket/hybi_parser_spec.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/noptify/.npmignore +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/noptify/index.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/noptify/package.json +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/noptify/readme.md +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/noptify/actions/collectable.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/noptify/actions/commandable.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/noptify/node_modules/.bin/nopt +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/noptify/node_modules/nopt/.npmignore +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/noptify/node_modules/nopt/LICENSE +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/noptify/node_modules/nopt/README.md +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/noptify/node_modules/nopt/package.json +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/noptify/node_modules/nopt/bin/nopt.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/noptify/node_modules/nopt/examples/my-program.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/noptify/node_modules/nopt/lib/nopt.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/noptify/node_modules/nopt/node_modules/abbrev/LICENSE +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/noptify/node_modules/nopt/node_modules/abbrev/README.md +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/noptify/node_modules/nopt/node_modules/abbrev/package.json +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/noptify/node_modules/nopt/node_modules/abbrev/lib/abbrev.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/noptify/test/api.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/noptify/test/collectable.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/noptify/test/commandable.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/noptify/test/fixtures/a.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/noptify/test/fixtures/b.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/noptify/util/extend.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/noptify/util/index.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/qs/.gitmodules +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/qs/.npmignore +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/qs/.travis.yml +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/qs/History.md +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/qs/Makefile +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/qs/Readme.md +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/qs/benchmark.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/qs/component.json +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/qs/examples.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/qs/index.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/qs/package.json +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/qs/test/parse.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/qs/test/stringify.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/qs/test/browser/expect.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/qs/test/browser/index.html +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/qs/test/browser/jquery.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/qs/test/browser/mocha.css +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/qs/test/browser/mocha.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/qs/test/browser/qs.css +node_modules/grunt-contrib-watch/node_modules/tiny-lr/node_modules/qs/test/browser/qs.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/tasks/tiny-lr.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/tasks/tiny-lr.mk +node_modules/grunt-contrib-watch/node_modules/tiny-lr/test/client.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/test/middleware.js +node_modules/grunt-contrib-watch/node_modules/tiny-lr/test/server.js +node_modules/grunt-contrib-watch/tasks/watch.js +node_modules/grunt-contrib-watch/tasks/lib/livereload.js +node_modules/grunt-contrib-watch/tasks/lib/taskrun.js +node_modules/grunt-contrib-watch/tasks/lib/taskrunner.js +node_modules/grunt-contrib-watch/test/fixtures/atBegin/Gruntfile.js +node_modules/grunt-contrib-watch/test/fixtures/atBegin/lib/one.js +node_modules/grunt-contrib-watch/test/fixtures/dateFormat/Gruntfile.js +node_modules/grunt-contrib-watch/test/fixtures/dateFormat/lib/one.js +node_modules/grunt-contrib-watch/test/fixtures/events/Gruntfile.js +node_modules/grunt-contrib-watch/test/fixtures/events/lib/one.js +node_modules/grunt-contrib-watch/test/fixtures/events/lib/one/test.js +node_modules/grunt-contrib-watch/test/fixtures/events/lib/two/test.js +node_modules/grunt-contrib-watch/test/fixtures/fail/Gruntfile.js +node_modules/grunt-contrib-watch/test/fixtures/fail/lib/one.js +node_modules/grunt-contrib-watch/test/fixtures/livereload/Gruntfile.js +node_modules/grunt-contrib-watch/test/fixtures/livereload/css/one.css +node_modules/grunt-contrib-watch/test/fixtures/livereload/lib/one.js +node_modules/grunt-contrib-watch/test/fixtures/livereload/lib/two.js +node_modules/grunt-contrib-watch/test/fixtures/livereload/sass/one.scss +node_modules/grunt-contrib-watch/test/fixtures/multiTargets/Gruntfile.js +node_modules/grunt-contrib-watch/test/fixtures/multiTargets/lib/fail.js +node_modules/grunt-contrib-watch/test/fixtures/multiTargets/lib/interrupt.js +node_modules/grunt-contrib-watch/test/fixtures/multiTargets/lib/one.js +node_modules/grunt-contrib-watch/test/fixtures/multiTargets/lib/two.js +node_modules/grunt-contrib-watch/test/fixtures/multiTargets/lib/wait.js +node_modules/grunt-contrib-watch/test/fixtures/nospawn/Gruntfile.js +node_modules/grunt-contrib-watch/test/fixtures/nospawn/lib/interrupt.js +node_modules/grunt-contrib-watch/test/fixtures/nospawn/lib/nospawn.js +node_modules/grunt-contrib-watch/test/fixtures/nospawn/lib/spawn.js +node_modules/grunt-contrib-watch/test/fixtures/oneTarget/Gruntfile.js +node_modules/grunt-contrib-watch/test/fixtures/oneTarget/lib/one.js +node_modules/grunt-contrib-watch/test/fixtures/patterns/Gruntfile.js +node_modules/grunt-contrib-watch/test/fixtures/patterns/lib/edit.js +node_modules/grunt-contrib-watch/test/fixtures/patterns/lib/sub/dontedit.js +node_modules/grunt-contrib-watch/test/fixtures/tasks/echo.js +node_modules/grunt-contrib-watch/test/tasks/events_test.js +node_modules/grunt-contrib-watch/test/tasks/fail_test.js +node_modules/grunt-contrib-watch/test/tasks/helper.js +node_modules/grunt-contrib-watch/test/tasks/livereload_test.js +node_modules/grunt-contrib-watch/test/tasks/nospawn_test.js +node_modules/grunt-contrib-watch/test/tasks/patterns_test.js +node_modules/grunt-contrib-watch/test/tasks/reloadgruntfile_test.js +node_modules/grunt-contrib-watch/test/tasks/watch_test.js +node_modules/grunt/docs/README.md +node_modules/grunt/lib/grunt.js +node_modules/grunt/lib/grunt/cli.js +node_modules/grunt/lib/grunt/config.js +node_modules/grunt/lib/grunt/event.js +node_modules/grunt/lib/grunt/fail.js +node_modules/grunt/lib/grunt/file.js +node_modules/grunt/lib/grunt/help.js +node_modules/grunt/lib/grunt/log.js +node_modules/grunt/lib/grunt/option.js +node_modules/grunt/lib/grunt/task.js +node_modules/grunt/lib/grunt/template.js +node_modules/grunt/lib/grunt/util.js +node_modules/grunt/lib/util/exit.js +node_modules/grunt/lib/util/namespace.js +node_modules/grunt/lib/util/task.js +node_modules/grunt/node_modules/.bin/cake +node_modules/grunt/node_modules/.bin/coffee +node_modules/grunt/node_modules/.bin/js-yaml +node_modules/grunt/node_modules/.bin/lodash +node_modules/grunt/node_modules/.bin/nopt +node_modules/grunt/node_modules/.bin/which +node_modules/grunt/node_modules/async/.gitmodules +node_modules/grunt/node_modules/async/.npmignore +node_modules/grunt/node_modules/async/LICENSE +node_modules/grunt/node_modules/async/Makefile +node_modules/grunt/node_modules/async/README.md +node_modules/grunt/node_modules/async/index.js +node_modules/grunt/node_modules/async/package.json +node_modules/grunt/node_modules/async/lib/async.js +node_modules/grunt/node_modules/coffee-script/.npmignore +node_modules/grunt/node_modules/coffee-script/CNAME +node_modules/grunt/node_modules/coffee-script/LICENSE +node_modules/grunt/node_modules/coffee-script/README +node_modules/grunt/node_modules/coffee-script/Rakefile +node_modules/grunt/node_modules/coffee-script/package.json +node_modules/grunt/node_modules/coffee-script/bin/cake +node_modules/grunt/node_modules/coffee-script/bin/coffee +node_modules/grunt/node_modules/coffee-script/extras/jsl.conf +node_modules/grunt/node_modules/coffee-script/lib/coffee-script/browser.js +node_modules/grunt/node_modules/coffee-script/lib/coffee-script/cake.js +node_modules/grunt/node_modules/coffee-script/lib/coffee-script/coffee-script.js +node_modules/grunt/node_modules/coffee-script/lib/coffee-script/command.js +node_modules/grunt/node_modules/coffee-script/lib/coffee-script/grammar.js +node_modules/grunt/node_modules/coffee-script/lib/coffee-script/helpers.js +node_modules/grunt/node_modules/coffee-script/lib/coffee-script/index.js +node_modules/grunt/node_modules/coffee-script/lib/coffee-script/lexer.js +node_modules/grunt/node_modules/coffee-script/lib/coffee-script/nodes.js +node_modules/grunt/node_modules/coffee-script/lib/coffee-script/optparse.js +node_modules/grunt/node_modules/coffee-script/lib/coffee-script/parser.js +node_modules/grunt/node_modules/coffee-script/lib/coffee-script/repl.js +node_modules/grunt/node_modules/coffee-script/lib/coffee-script/rewriter.js +node_modules/grunt/node_modules/coffee-script/lib/coffee-script/scope.js +node_modules/grunt/node_modules/colors/MIT-LICENSE.txt +node_modules/grunt/node_modules/colors/ReadMe.md +node_modules/grunt/node_modules/colors/colors.js +node_modules/grunt/node_modules/colors/example.html +node_modules/grunt/node_modules/colors/example.js +node_modules/grunt/node_modules/colors/package.json +node_modules/grunt/node_modules/colors/test.js +node_modules/grunt/node_modules/colors/themes/winston-dark.js +node_modules/grunt/node_modules/colors/themes/winston-light.js +node_modules/grunt/node_modules/dateformat/Readme.md +node_modules/grunt/node_modules/dateformat/package.json +node_modules/grunt/node_modules/dateformat/lib/dateformat.js +node_modules/grunt/node_modules/dateformat/test/test_weekofyear.js +node_modules/grunt/node_modules/dateformat/test/test_weekofyear.sh +node_modules/grunt/node_modules/eventemitter2/README.md +node_modules/grunt/node_modules/eventemitter2/index.js +node_modules/grunt/node_modules/eventemitter2/package.json +node_modules/grunt/node_modules/eventemitter2/lib/eventemitter2.js +node_modules/grunt/node_modules/findup-sync/.jshintrc +node_modules/grunt/node_modules/findup-sync/.npmignore +node_modules/grunt/node_modules/findup-sync/Gruntfile.js +node_modules/grunt/node_modules/findup-sync/LICENSE-MIT +node_modules/grunt/node_modules/findup-sync/README.md +node_modules/grunt/node_modules/findup-sync/package.json +node_modules/grunt/node_modules/findup-sync/lib/findup-sync.js +node_modules/grunt/node_modules/findup-sync/node_modules/.bin/lodash +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/LICENSE.txt +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/README.md +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/build.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/index.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/lodash.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/package.json +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/build/minify.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/build/post-compile.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/build/pre-compile.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/dist/lodash.compat.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/dist/lodash.compat.min.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/dist/lodash.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/dist/lodash.min.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/dist/lodash.underscore.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/dist/lodash.underscore.min.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/doc/README.md +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/perf/perf.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/test/test-build.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/test/test.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/test/template/a.jst +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/test/template/b.jst +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/test/template/c.jst +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/test/template/d.tpl +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/benchmark.js/LICENSE.txt +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/benchmark.js/README.md +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/benchmark.js/benchmark.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/platform.js/LICENSE.txt +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/platform.js/README.md +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/platform.js/platform.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/qunit/README.md +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/qunit-clib/LICENSE.txt +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/qunit-clib/README.md +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/qunit-clib/qunit-clib.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/qunit/qunit/qunit.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/README.md +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/tar.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/lib/buffer-entry.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/lib/entry-writer.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/lib/entry.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/lib/extended-header-writer.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/lib/extended-header.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/lib/extract.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/lib/global-header-writer.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/lib/header.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/lib/pack.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/lib/parse.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/block-stream/LICENCE +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/block-stream/README.md +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/block-stream/block-stream.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/fstream/LICENCE +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/fstream/README.md +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/fstream/fstream.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/fstream/lib/abstract.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/fstream/lib/collect.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/fstream/lib/dir-reader.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/fstream/lib/dir-writer.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/fstream/lib/file-reader.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/fstream/lib/file-writer.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/fstream/lib/get-type.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/fstream/lib/link-reader.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/fstream/lib/link-writer.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/fstream/lib/proxy-reader.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/fstream/lib/proxy-writer.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/fstream/lib/reader.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/fstream/lib/socket-reader.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/fstream/lib/writer.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/graceful-fs/LICENSE +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/graceful-fs/README.md +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/graceful-fs/graceful-fs.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/inherits/README.md +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/inherits/inherits.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/mkdirp/LICENSE +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/mkdirp/README.markdown +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/mkdirp/index.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/rimraf/AUTHORS +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/rimraf/LICENSE +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/rimraf/README.md +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/tar/vendor/rimraf/rimraf.js +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/underscore/LICENSE +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/underscore/README.md +node_modules/grunt/node_modules/findup-sync/node_modules/lodash/vendor/underscore/underscore.js +node_modules/grunt/node_modules/findup-sync/test/findup-sync_test.js +node_modules/grunt/node_modules/findup-sync/test/fixtures/a.txt +node_modules/grunt/node_modules/findup-sync/test/fixtures/aaa.txt +node_modules/grunt/node_modules/findup-sync/test/fixtures/a/foo.txt +node_modules/grunt/node_modules/findup-sync/test/fixtures/a/b/bar.txt +node_modules/grunt/node_modules/glob/.npmignore +node_modules/grunt/node_modules/glob/.travis.yml +node_modules/grunt/node_modules/glob/LICENSE +node_modules/grunt/node_modules/glob/README.md +node_modules/grunt/node_modules/glob/glob.js +node_modules/grunt/node_modules/glob/package.json +node_modules/grunt/node_modules/glob/examples/g.js +node_modules/grunt/node_modules/glob/examples/usr-local.js +node_modules/grunt/node_modules/glob/node_modules/graceful-fs/.npmignore +node_modules/grunt/node_modules/glob/node_modules/graceful-fs/LICENSE +node_modules/grunt/node_modules/glob/node_modules/graceful-fs/README.md +node_modules/grunt/node_modules/glob/node_modules/graceful-fs/graceful-fs.js +node_modules/grunt/node_modules/glob/node_modules/graceful-fs/package.json +node_modules/grunt/node_modules/glob/node_modules/graceful-fs/test/open.js +node_modules/grunt/node_modules/glob/node_modules/graceful-fs/test/ulimit.js +node_modules/grunt/node_modules/glob/node_modules/inherits/README.md +node_modules/grunt/node_modules/glob/node_modules/inherits/inherits.js +node_modules/grunt/node_modules/glob/node_modules/inherits/package.json +node_modules/grunt/node_modules/glob/test/00-setup.js +node_modules/grunt/node_modules/glob/test/bash-comparison.js +node_modules/grunt/node_modules/glob/test/bash-results.json +node_modules/grunt/node_modules/glob/test/cwd-test.js +node_modules/grunt/node_modules/glob/test/mark.js +node_modules/grunt/node_modules/glob/test/nocase-nomagic.js +node_modules/grunt/node_modules/glob/test/pause-resume.js +node_modules/grunt/node_modules/glob/test/root-nomount.js +node_modules/grunt/node_modules/glob/test/root.js +node_modules/grunt/node_modules/glob/test/zz-cleanup.js +node_modules/grunt/node_modules/hooker/LICENSE-MIT +node_modules/grunt/node_modules/hooker/README.md +node_modules/grunt/node_modules/hooker/child.js +node_modules/grunt/node_modules/hooker/grunt.js +node_modules/grunt/node_modules/hooker/package.json +node_modules/grunt/node_modules/hooker/parent.js +node_modules/grunt/node_modules/hooker/dist/ba-hooker.js +node_modules/grunt/node_modules/hooker/dist/ba-hooker.min.js +node_modules/grunt/node_modules/hooker/lib/hooker.js +node_modules/grunt/node_modules/hooker/test/hooker_test.js +node_modules/grunt/node_modules/iconv-lite/.npmignore +node_modules/grunt/node_modules/iconv-lite/.travis.yml +node_modules/grunt/node_modules/iconv-lite/LICENSE +node_modules/grunt/node_modules/iconv-lite/README.md +node_modules/grunt/node_modules/iconv-lite/index.js +node_modules/grunt/node_modules/iconv-lite/package.json +node_modules/grunt/node_modules/iconv-lite/encodings/big5.js +node_modules/grunt/node_modules/iconv-lite/encodings/gbk.js +node_modules/grunt/node_modules/iconv-lite/encodings/singlebyte.js +node_modules/grunt/node_modules/iconv-lite/encodings/table/big5.js +node_modules/grunt/node_modules/iconv-lite/encodings/table/gbk.js +node_modules/grunt/node_modules/iconv-lite/generation/generate-big5-table.js +node_modules/grunt/node_modules/iconv-lite/generation/generate-singlebyte.js +node_modules/grunt/node_modules/iconv-lite/test/big5-test.js +node_modules/grunt/node_modules/iconv-lite/test/big5File.txt +node_modules/grunt/node_modules/iconv-lite/test/cyrillic-test.js +node_modules/grunt/node_modules/iconv-lite/test/gbk-test.js +node_modules/grunt/node_modules/iconv-lite/test/gbkFile.txt +node_modules/grunt/node_modules/iconv-lite/test/greek-test.js +node_modules/grunt/node_modules/iconv-lite/test/main-test.js +node_modules/grunt/node_modules/iconv-lite/test/performance.js +node_modules/grunt/node_modules/iconv-lite/test/turkish-test.js +node_modules/grunt/node_modules/js-yaml/HISTORY.md +node_modules/grunt/node_modules/js-yaml/LICENSE +node_modules/grunt/node_modules/js-yaml/README.md +node_modules/grunt/node_modules/js-yaml/index.js +node_modules/grunt/node_modules/js-yaml/package.json +node_modules/grunt/node_modules/js-yaml/bin/js-yaml.js +node_modules/grunt/node_modules/js-yaml/examples/custom_types.js +node_modules/grunt/node_modules/js-yaml/examples/custom_types.yaml +node_modules/grunt/node_modules/js-yaml/examples/dumper.js +node_modules/grunt/node_modules/js-yaml/examples/dumper.json +node_modules/grunt/node_modules/js-yaml/examples/sample_document.js +node_modules/grunt/node_modules/js-yaml/examples/sample_document.yaml +node_modules/grunt/node_modules/js-yaml/lib/js-yaml.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/common.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/dumper.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/exception.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/loader.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/mark.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/require.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/schema.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/type.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/schema/default.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/schema/minimal.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/schema/safe.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/type/binary.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/type/bool.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/type/float.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/type/int.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/type/map.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/type/merge.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/type/null.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/type/omap.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/type/pairs.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/type/seq.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/type/set.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/type/str.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/type/timestamp.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/type/js/function.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js +node_modules/grunt/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js +node_modules/grunt/node_modules/js-yaml/node_modules/.bin/esparse +node_modules/grunt/node_modules/js-yaml/node_modules/.bin/esvalidate +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/HISTORY.md +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/LICENSE +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/README.md +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/index.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/package.json +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/examples/arguments.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/examples/choice.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/examples/constants.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/examples/help.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/examples/nargs.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/examples/parents.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/examples/prefix_chars.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/examples/sub_commands.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/examples/sum.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/examples/testformatters.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/lib/action.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/lib/action_container.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/lib/argparse.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/lib/argument_parser.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/lib/const.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/lib/namespace.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/lib/action/append.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/lib/action/count.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/lib/action/help.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/lib/action/store.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/lib/action/subparsers.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/lib/action/version.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/lib/action/append/constant.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/lib/action/store/constant.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/lib/action/store/false.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/lib/action/store/true.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/lib/argument/error.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/lib/argument/exclusive.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/lib/argument/group.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/lib/help/added_formatters.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/lib/help/formatter.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/.npmignore +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/.travis.yml +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/CNAME +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/CONTRIBUTING.md +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/LICENSE +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/README.md +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/favicon.ico +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/index.html +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/index.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/package.json +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore-min.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore/underscore.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/.travis.yml +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/Gemfile +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/Gemfile.lock +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/README.markdown +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/Rakefile +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/component.json +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/libpeerconnection.log +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/package.json +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/dist/underscore.string.min.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/lib/underscore.string.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/test/run-qunit.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/test/speed.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/test/strings.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/test/strings_standalone.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/test/test.html +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/test/test_standalone.html +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/test/underscore.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/test/test_underscore/arrays.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/test/test_underscore/chaining.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/test/test_underscore/collections.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/test/test_underscore/functions.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/test/test_underscore/index.html +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/test/test_underscore/objects.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/test/test_underscore/speed.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/test/test_underscore/utility.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/test/test_underscore/vendor/jquery.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/test/test_underscore/vendor/jslitmus.js +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/test/test_underscore/vendor/qunit.css +node_modules/grunt/node_modules/js-yaml/node_modules/argparse/node_modules/underscore.string/test/test_underscore/vendor/qunit.js +node_modules/grunt/node_modules/js-yaml/node_modules/esprima/README.md +node_modules/grunt/node_modules/js-yaml/node_modules/esprima/esprima.js +node_modules/grunt/node_modules/js-yaml/node_modules/esprima/package.json +node_modules/grunt/node_modules/js-yaml/node_modules/esprima/bin/esparse.js +node_modules/grunt/node_modules/js-yaml/node_modules/esprima/bin/esvalidate.js +node_modules/grunt/node_modules/js-yaml/node_modules/esprima/test/compat.js +node_modules/grunt/node_modules/js-yaml/node_modules/esprima/test/reflect.js +node_modules/grunt/node_modules/js-yaml/node_modules/esprima/test/run.js +node_modules/grunt/node_modules/js-yaml/node_modules/esprima/test/runner.js +node_modules/grunt/node_modules/js-yaml/node_modules/esprima/test/test.js +node_modules/grunt/node_modules/lodash/LICENSE.txt +node_modules/grunt/node_modules/lodash/README.md +node_modules/grunt/node_modules/lodash/build.js +node_modules/grunt/node_modules/lodash/index.js +node_modules/grunt/node_modules/lodash/lodash.js +node_modules/grunt/node_modules/lodash/lodash.min.js +node_modules/grunt/node_modules/lodash/lodash.underscore.js +node_modules/grunt/node_modules/lodash/lodash.underscore.min.js +node_modules/grunt/node_modules/lodash/package.json +node_modules/grunt/node_modules/lodash/build/minify.js +node_modules/grunt/node_modules/lodash/build/post-compile.js +node_modules/grunt/node_modules/lodash/build/pre-compile.js +node_modules/grunt/node_modules/lodash/doc/README.md +node_modules/grunt/node_modules/lodash/perf/perf.js +node_modules/grunt/node_modules/lodash/test/test-build.js +node_modules/grunt/node_modules/lodash/test/test.js +node_modules/grunt/node_modules/lodash/test/template/a.jst +node_modules/grunt/node_modules/lodash/test/template/b.jst +node_modules/grunt/node_modules/lodash/test/template/c.tpl +node_modules/grunt/node_modules/lodash/vendor/benchmark.js/LICENSE.txt +node_modules/grunt/node_modules/lodash/vendor/benchmark.js/README.md +node_modules/grunt/node_modules/lodash/vendor/benchmark.js/benchmark.js +node_modules/grunt/node_modules/lodash/vendor/platform.js/LICENSE.txt +node_modules/grunt/node_modules/lodash/vendor/platform.js/README.md +node_modules/grunt/node_modules/lodash/vendor/platform.js/platform.js +node_modules/grunt/node_modules/lodash/vendor/qunit/README.md +node_modules/grunt/node_modules/lodash/vendor/qunit-clib/LICENSE.txt +node_modules/grunt/node_modules/lodash/vendor/qunit-clib/README.md +node_modules/grunt/node_modules/lodash/vendor/qunit-clib/qunit-clib.js +node_modules/grunt/node_modules/lodash/vendor/qunit/qunit/qunit.js +node_modules/grunt/node_modules/lodash/vendor/tar/LICENCE +node_modules/grunt/node_modules/lodash/vendor/tar/README.md +node_modules/grunt/node_modules/lodash/vendor/tar/tar.js +node_modules/grunt/node_modules/lodash/vendor/tar/lib/buffer-entry.js +node_modules/grunt/node_modules/lodash/vendor/tar/lib/entry-writer.js +node_modules/grunt/node_modules/lodash/vendor/tar/lib/entry.js +node_modules/grunt/node_modules/lodash/vendor/tar/lib/extended-header-writer.js +node_modules/grunt/node_modules/lodash/vendor/tar/lib/extended-header.js +node_modules/grunt/node_modules/lodash/vendor/tar/lib/extract.js +node_modules/grunt/node_modules/lodash/vendor/tar/lib/global-header-writer.js +node_modules/grunt/node_modules/lodash/vendor/tar/lib/header.js +node_modules/grunt/node_modules/lodash/vendor/tar/lib/pack.js +node_modules/grunt/node_modules/lodash/vendor/tar/lib/parse.js +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/block-stream/LICENCE +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/block-stream/README.md +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/block-stream/block-stream.js +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/fstream/LICENSE +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/fstream/README.md +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/fstream/fstream.js +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/fstream/lib/abstract.js +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/fstream/lib/collect.js +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/fstream/lib/dir-reader.js +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/fstream/lib/dir-writer.js +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/fstream/lib/file-reader.js +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/fstream/lib/file-writer.js +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/fstream/lib/get-type.js +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/fstream/lib/link-reader.js +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/fstream/lib/link-writer.js +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/fstream/lib/proxy-reader.js +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/fstream/lib/proxy-writer.js +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/fstream/lib/reader.js +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/fstream/lib/socket-reader.js +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/fstream/lib/writer.js +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/graceful-fs/LICENSE +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/graceful-fs/README.md +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/graceful-fs/graceful-fs.js +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/inherits/README.md +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/inherits/inherits.js +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/mkdirp/LICENSE +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/mkdirp/index.js +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/mkdirp/readme.markdown +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/rimraf/AUTHORS +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/rimraf/LICENSE +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/rimraf/README.md +node_modules/grunt/node_modules/lodash/vendor/tar/vendor/rimraf/rimraf.js +node_modules/grunt/node_modules/lodash/vendor/underscore/LICENSE +node_modules/grunt/node_modules/lodash/vendor/underscore/README.md +node_modules/grunt/node_modules/lodash/vendor/underscore/underscore.js +node_modules/grunt/node_modules/minimatch/LICENSE +node_modules/grunt/node_modules/minimatch/README.md +node_modules/grunt/node_modules/minimatch/minimatch.js +node_modules/grunt/node_modules/minimatch/package.json +node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/.npmignore +node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/AUTHORS +node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/LICENSE +node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/README.md +node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/bench.js +node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/package.json +node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/lib/lru-cache.js +node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/test/basic.js +node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/test/foreach.js +node_modules/grunt/node_modules/minimatch/node_modules/lru-cache/test/memory-leak.js +node_modules/grunt/node_modules/minimatch/node_modules/sigmund/LICENSE +node_modules/grunt/node_modules/minimatch/node_modules/sigmund/README.md +node_modules/grunt/node_modules/minimatch/node_modules/sigmund/bench.js +node_modules/grunt/node_modules/minimatch/node_modules/sigmund/package.json +node_modules/grunt/node_modules/minimatch/node_modules/sigmund/sigmund.js +node_modules/grunt/node_modules/minimatch/node_modules/sigmund/test/basic.js +node_modules/grunt/node_modules/minimatch/test/basic.js +node_modules/grunt/node_modules/minimatch/test/brace-expand.js +node_modules/grunt/node_modules/minimatch/test/caching.js +node_modules/grunt/node_modules/minimatch/test/defaults.js +node_modules/grunt/node_modules/nopt/.npmignore +node_modules/grunt/node_modules/nopt/LICENSE +node_modules/grunt/node_modules/nopt/README.md +node_modules/grunt/node_modules/nopt/package.json +node_modules/grunt/node_modules/nopt/bin/nopt.js +node_modules/grunt/node_modules/nopt/examples/my-program.js +node_modules/grunt/node_modules/nopt/lib/nopt.js +node_modules/grunt/node_modules/nopt/node_modules/abbrev/LICENSE +node_modules/grunt/node_modules/nopt/node_modules/abbrev/README.md +node_modules/grunt/node_modules/nopt/node_modules/abbrev/package.json +node_modules/grunt/node_modules/nopt/node_modules/abbrev/lib/abbrev.js +node_modules/grunt/node_modules/rimraf/AUTHORS +node_modules/grunt/node_modules/rimraf/LICENSE +node_modules/grunt/node_modules/rimraf/README.md +node_modules/grunt/node_modules/rimraf/package.json +node_modules/grunt/node_modules/rimraf/rimraf.js +node_modules/grunt/node_modules/rimraf/node_modules/graceful-fs/.npmignore +node_modules/grunt/node_modules/rimraf/node_modules/graceful-fs/LICENSE +node_modules/grunt/node_modules/rimraf/node_modules/graceful-fs/README.md +node_modules/grunt/node_modules/rimraf/node_modules/graceful-fs/graceful-fs.js +node_modules/grunt/node_modules/rimraf/node_modules/graceful-fs/package.json +node_modules/grunt/node_modules/rimraf/node_modules/graceful-fs/test/open.js +node_modules/grunt/node_modules/rimraf/test/run.sh +node_modules/grunt/node_modules/rimraf/test/setup.sh +node_modules/grunt/node_modules/rimraf/test/test-async.js +node_modules/grunt/node_modules/rimraf/test/test-fiber.js +node_modules/grunt/node_modules/rimraf/test/test-sync.js +node_modules/grunt/node_modules/underscore.string/.travis.yml +node_modules/grunt/node_modules/underscore.string/Gemfile +node_modules/grunt/node_modules/underscore.string/Gemfile.lock +node_modules/grunt/node_modules/underscore.string/README.markdown +node_modules/grunt/node_modules/underscore.string/Rakefile +node_modules/grunt/node_modules/underscore.string/package.json +node_modules/grunt/node_modules/underscore.string/dist/underscore.string.min.js +node_modules/grunt/node_modules/underscore.string/lib/underscore.string.js +node_modules/grunt/node_modules/underscore.string/test/run-qunit.js +node_modules/grunt/node_modules/underscore.string/test/speed.js +node_modules/grunt/node_modules/underscore.string/test/strings.js +node_modules/grunt/node_modules/underscore.string/test/strings_standalone.js +node_modules/grunt/node_modules/underscore.string/test/test.html +node_modules/grunt/node_modules/underscore.string/test/test_standalone.html +node_modules/grunt/node_modules/underscore.string/test/underscore.js +node_modules/grunt/node_modules/underscore.string/test/test_underscore/arrays.js +node_modules/grunt/node_modules/underscore.string/test/test_underscore/chaining.js +node_modules/grunt/node_modules/underscore.string/test/test_underscore/collections.js +node_modules/grunt/node_modules/underscore.string/test/test_underscore/functions.js +node_modules/grunt/node_modules/underscore.string/test/test_underscore/objects.js +node_modules/grunt/node_modules/underscore.string/test/test_underscore/speed.js +node_modules/grunt/node_modules/underscore.string/test/test_underscore/temp.js +node_modules/grunt/node_modules/underscore.string/test/test_underscore/temp_tests.html +node_modules/grunt/node_modules/underscore.string/test/test_underscore/test.html +node_modules/grunt/node_modules/underscore.string/test/test_underscore/utility.js +node_modules/grunt/node_modules/underscore.string/test/test_underscore/vendor/jquery.js +node_modules/grunt/node_modules/underscore.string/test/test_underscore/vendor/jslitmus.js +node_modules/grunt/node_modules/underscore.string/test/test_underscore/vendor/qunit.css +node_modules/grunt/node_modules/underscore.string/test/test_underscore/vendor/qunit.js +node_modules/grunt/node_modules/which/LICENSE +node_modules/grunt/node_modules/which/README.md +node_modules/grunt/node_modules/which/package.json +node_modules/grunt/node_modules/which/which.js +node_modules/grunt/node_modules/which/bin/which +node_modules/grunt/test/fixtures/BOM.txt +node_modules/grunt/test/fixtures/Gruntfile-print-text.js +node_modules/grunt/test/fixtures/a.js +node_modules/grunt/test/fixtures/b.js +node_modules/grunt/test/fixtures/banner.js +node_modules/grunt/test/fixtures/banner2.js +node_modules/grunt/test/fixtures/banner3.js +node_modules/grunt/test/fixtures/exec.cmd +node_modules/grunt/test/fixtures/exec.sh +node_modules/grunt/test/fixtures/iso-8859-1.json +node_modules/grunt/test/fixtures/iso-8859-1.txt +node_modules/grunt/test/fixtures/iso-8859-1.yaml +node_modules/grunt/test/fixtures/lint.txt +node_modules/grunt/test/fixtures/no_BOM.txt +node_modules/grunt/test/fixtures/octocat.png +node_modules/grunt/test/fixtures/spawn-multibyte.js +node_modules/grunt/test/fixtures/spawn.js +node_modules/grunt/test/fixtures/template.txt +node_modules/grunt/test/fixtures/test.json +node_modules/grunt/test/fixtures/utf8.json +node_modules/grunt/test/fixtures/utf8.txt +node_modules/grunt/test/fixtures/utf8.yaml +node_modules/grunt/test/fixtures/expand/README.md +node_modules/grunt/test/fixtures/expand-mapping-ext/file.ext.ension +node_modules/grunt/test/fixtures/expand-mapping-ext/dir.ectory/file-no-extension +node_modules/grunt/test/fixtures/expand-mapping-ext/dir.ectory/sub.dir.ectory/file.ext.ension +node_modules/grunt/test/fixtures/expand/css/baz.css +node_modules/grunt/test/fixtures/expand/css/qux.css +node_modules/grunt/test/fixtures/expand/deep/deep.txt +node_modules/grunt/test/fixtures/expand/deep/deeper/deeper.txt +node_modules/grunt/test/fixtures/expand/deep/deeper/deepest/deepest.txt +node_modules/grunt/test/fixtures/expand/js/bar.js +node_modules/grunt/test/fixtures/expand/js/foo.js +node_modules/grunt/test/fixtures/files/dist/built-123-a.js +node_modules/grunt/test/fixtures/files/dist/built-123-b.js +node_modules/grunt/test/fixtures/files/dist/built-a.js +node_modules/grunt/test/fixtures/files/dist/built-b.js +node_modules/grunt/test/fixtures/files/dist/built.js +node_modules/grunt/test/fixtures/files/src/file1-123.js +node_modules/grunt/test/fixtures/files/src/file1.js +node_modules/grunt/test/fixtures/files/src/file2-123.js +node_modules/grunt/test/fixtures/files/src/file2.js +node_modules/grunt/test/grunt/config_test.js +node_modules/grunt/test/grunt/event_test.js +node_modules/grunt/test/grunt/file_test.js +node_modules/grunt/test/grunt/log_test.js +node_modules/grunt/test/grunt/option_test.js +node_modules/grunt/test/grunt/task_test.js +node_modules/grunt/test/grunt/template_test.js +node_modules/grunt/test/grunt/util_test.js +node_modules/grunt/test/gruntfile/multi-task-files.js +node_modules/grunt/test/util/namespace_test.js +node_modules/grunt/test/util/task_test.js From cda7b431637c1913387a66b55405f3e1de02fa36 Mon Sep 17 00:00:00 2001 From: Adriaan Wormgoor Date: Tue, 22 Oct 2013 16:37:56 +0200 Subject: [PATCH 09/13] - new libs and files for the in-app help - moved some uncompressed js libs to js_src/libs --- {www/js => js_src}/libs/excanvas.js | 0 js_src/libs/imagesloaded.pkgd.js | 836 +++++++++++++++++++++++++++ js_src/libs/jquery-tourbus.js | 539 +++++++++++++++++ www/helpcontent.html | 94 +++ www/js/libs/imagesloaded.pkgd.min.js | 7 + www/js/libs/jquery-tourbus.min.js | 1 + www/js/libs/jquery.cookie.js | 72 +++ 7 files changed, 1549 insertions(+) rename {www/js => js_src}/libs/excanvas.js (100%) create mode 100644 js_src/libs/imagesloaded.pkgd.js create mode 100644 js_src/libs/jquery-tourbus.js create mode 100644 www/helpcontent.html create mode 100644 www/js/libs/imagesloaded.pkgd.min.js create mode 100644 www/js/libs/jquery-tourbus.min.js create mode 100755 www/js/libs/jquery.cookie.js diff --git a/www/js/libs/excanvas.js b/js_src/libs/excanvas.js similarity index 100% rename from www/js/libs/excanvas.js rename to js_src/libs/excanvas.js diff --git a/js_src/libs/imagesloaded.pkgd.js b/js_src/libs/imagesloaded.pkgd.js new file mode 100644 index 0000000..65c5f14 --- /dev/null +++ b/js_src/libs/imagesloaded.pkgd.js @@ -0,0 +1,836 @@ +/*! + * imagesLoaded PACKAGED v3.0.4 + * JavaScript is all like "You images are done yet or what?" + * MIT License + */ + +/*! + * EventEmitter v4.2.4 - git.io/ee + * Oliver Caldwell + * MIT license + * @preserve + */ + +(function () { + 'use strict'; + + /** + * Class for managing events. + * Can be extended to provide event functionality in other classes. + * + * @class EventEmitter Manages event registering and emitting. + */ + function EventEmitter() {} + + // Shortcuts to improve speed and size + + // Easy access to the prototype + var proto = EventEmitter.prototype; + + /** + * Finds the index of the listener for the event in it's storage array. + * + * @param {Function[]} listeners Array of listeners to search through. + * @param {Function} listener Method to look for. + * @return {Number} Index of the specified listener, -1 if not found + * @api private + */ + function indexOfListener(listeners, listener) { + var i = listeners.length; + while (i--) { + if (listeners[i].listener === listener) { + return i; + } + } + + return -1; + } + + /** + * Alias a method while keeping the context correct, to allow for overwriting of target method. + * + * @param {String} name The name of the target method. + * @return {Function} The aliased method + * @api private + */ + function alias(name) { + return function aliasClosure() { + return this[name].apply(this, arguments); + }; + } + + /** + * Returns the listener array for the specified event. + * Will initialise the event object and listener arrays if required. + * Will return an object if you use a regex search. The object contains keys for each matched event. So /ba[rz]/ might return an object containing bar and baz. But only if you have either defined them with defineEvent or added some listeners to them. + * Each property in the object response is an array of listener functions. + * + * @param {String|RegExp} evt Name of the event to return the listeners from. + * @return {Function[]|Object} All listener functions for the event. + */ + proto.getListeners = function getListeners(evt) { + var events = this._getEvents(); + var response; + var key; + + // Return a concatenated array of all matching events if + // the selector is a regular expression. + if (typeof evt === 'object') { + response = {}; + for (key in events) { + if (events.hasOwnProperty(key) && evt.test(key)) { + response[key] = events[key]; + } + } + } + else { + response = events[evt] || (events[evt] = []); + } + + return response; + }; + + /** + * Takes a list of listener objects and flattens it into a list of listener functions. + * + * @param {Object[]} listeners Raw listener objects. + * @return {Function[]} Just the listener functions. + */ + proto.flattenListeners = function flattenListeners(listeners) { + var flatListeners = []; + var i; + + for (i = 0; i < listeners.length; i += 1) { + flatListeners.push(listeners[i].listener); + } + + return flatListeners; + }; + + /** + * Fetches the requested listeners via getListeners but will always return the results inside an object. This is mainly for internal use but others may find it useful. + * + * @param {String|RegExp} evt Name of the event to return the listeners from. + * @return {Object} All listener functions for an event in an object. + */ + proto.getListenersAsObject = function getListenersAsObject(evt) { + var listeners = this.getListeners(evt); + var response; + + if (listeners instanceof Array) { + response = {}; + response[evt] = listeners; + } + + return response || listeners; + }; + + /** + * Adds a listener function to the specified event. + * The listener will not be added if it is a duplicate. + * If the listener returns true then it will be removed after it is called. + * If you pass a regular expression as the event name then the listener will be added to all events that match it. + * + * @param {String|RegExp} evt Name of the event to attach the listener to. + * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.addListener = function addListener(evt, listener) { + var listeners = this.getListenersAsObject(evt); + var listenerIsWrapped = typeof listener === 'object'; + var key; + + for (key in listeners) { + if (listeners.hasOwnProperty(key) && indexOfListener(listeners[key], listener) === -1) { + listeners[key].push(listenerIsWrapped ? listener : { + listener: listener, + once: false + }); + } + } + + return this; + }; + + /** + * Alias of addListener + */ + proto.on = alias('addListener'); + + /** + * Semi-alias of addListener. It will add a listener that will be + * automatically removed after it's first execution. + * + * @param {String|RegExp} evt Name of the event to attach the listener to. + * @param {Function} listener Method to be called when the event is emitted. If the function returns true then it will be removed after calling. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.addOnceListener = function addOnceListener(evt, listener) { + return this.addListener(evt, { + listener: listener, + once: true + }); + }; + + /** + * Alias of addOnceListener. + */ + proto.once = alias('addOnceListener'); + + /** + * Defines an event name. This is required if you want to use a regex to add a listener to multiple events at once. If you don't do this then how do you expect it to know what event to add to? Should it just add to every possible match for a regex? No. That is scary and bad. + * You need to tell it what event names should be matched by a regex. + * + * @param {String} evt Name of the event to create. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.defineEvent = function defineEvent(evt) { + this.getListeners(evt); + return this; + }; + + /** + * Uses defineEvent to define multiple events. + * + * @param {String[]} evts An array of event names to define. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.defineEvents = function defineEvents(evts) { + for (var i = 0; i < evts.length; i += 1) { + this.defineEvent(evts[i]); + } + return this; + }; + + /** + * Removes a listener function from the specified event. + * When passed a regular expression as the event name, it will remove the listener from all events that match it. + * + * @param {String|RegExp} evt Name of the event to remove the listener from. + * @param {Function} listener Method to remove from the event. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.removeListener = function removeListener(evt, listener) { + var listeners = this.getListenersAsObject(evt); + var index; + var key; + + for (key in listeners) { + if (listeners.hasOwnProperty(key)) { + index = indexOfListener(listeners[key], listener); + + if (index !== -1) { + listeners[key].splice(index, 1); + } + } + } + + return this; + }; + + /** + * Alias of removeListener + */ + proto.off = alias('removeListener'); + + /** + * Adds listeners in bulk using the manipulateListeners method. + * If you pass an object as the second argument you can add to multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. You can also pass it an event name and an array of listeners to be added. + * You can also pass it a regular expression to add the array of listeners to all events that match it. + * Yeah, this function does quite a bit. That's probably a bad thing. + * + * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add to multiple events at once. + * @param {Function[]} [listeners] An optional array of listener functions to add. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.addListeners = function addListeners(evt, listeners) { + // Pass through to manipulateListeners + return this.manipulateListeners(false, evt, listeners); + }; + + /** + * Removes listeners in bulk using the manipulateListeners method. + * If you pass an object as the second argument you can remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. + * You can also pass it an event name and an array of listeners to be removed. + * You can also pass it a regular expression to remove the listeners from all events that match it. + * + * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to remove from multiple events at once. + * @param {Function[]} [listeners] An optional array of listener functions to remove. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.removeListeners = function removeListeners(evt, listeners) { + // Pass through to manipulateListeners + return this.manipulateListeners(true, evt, listeners); + }; + + /** + * Edits listeners in bulk. The addListeners and removeListeners methods both use this to do their job. You should really use those instead, this is a little lower level. + * The first argument will determine if the listeners are removed (true) or added (false). + * If you pass an object as the second argument you can add/remove from multiple events at once. The object should contain key value pairs of events and listeners or listener arrays. + * You can also pass it an event name and an array of listeners to be added/removed. + * You can also pass it a regular expression to manipulate the listeners of all events that match it. + * + * @param {Boolean} remove True if you want to remove listeners, false if you want to add. + * @param {String|Object|RegExp} evt An event name if you will pass an array of listeners next. An object if you wish to add/remove from multiple events at once. + * @param {Function[]} [listeners] An optional array of listener functions to add/remove. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.manipulateListeners = function manipulateListeners(remove, evt, listeners) { + var i; + var value; + var single = remove ? this.removeListener : this.addListener; + var multiple = remove ? this.removeListeners : this.addListeners; + + // If evt is an object then pass each of it's properties to this method + if (typeof evt === 'object' && !(evt instanceof RegExp)) { + for (i in evt) { + if (evt.hasOwnProperty(i) && (value = evt[i])) { + // Pass the single listener straight through to the singular method + if (typeof value === 'function') { + single.call(this, i, value); + } + else { + // Otherwise pass back to the multiple function + multiple.call(this, i, value); + } + } + } + } + else { + // So evt must be a string + // And listeners must be an array of listeners + // Loop over it and pass each one to the multiple method + i = listeners.length; + while (i--) { + single.call(this, evt, listeners[i]); + } + } + + return this; + }; + + /** + * Removes all listeners from a specified event. + * If you do not specify an event then all listeners will be removed. + * That means every event will be emptied. + * You can also pass a regex to remove all events that match it. + * + * @param {String|RegExp} [evt] Optional name of the event to remove all listeners for. Will remove from every event if not passed. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.removeEvent = function removeEvent(evt) { + var type = typeof evt; + var events = this._getEvents(); + var key; + + // Remove different things depending on the state of evt + if (type === 'string') { + // Remove all listeners for the specified event + delete events[evt]; + } + else if (type === 'object') { + // Remove all events matching the regex. + for (key in events) { + if (events.hasOwnProperty(key) && evt.test(key)) { + delete events[key]; + } + } + } + else { + // Remove all listeners in all events + delete this._events; + } + + return this; + }; + + /** + * Alias of removeEvent. + * + * Added to mirror the node API. + */ + proto.removeAllListeners = alias('removeEvent'); + + /** + * Emits an event of your choice. + * When emitted, every listener attached to that event will be executed. + * If you pass the optional argument array then those arguments will be passed to every listener upon execution. + * Because it uses `apply`, your array of arguments will be passed as if you wrote them out separately. + * So they will not arrive within the array on the other side, they will be separate. + * You can also pass a regular expression to emit to all events that match it. + * + * @param {String|RegExp} evt Name of the event to emit and execute listeners for. + * @param {Array} [args] Optional array of arguments to be passed to each listener. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.emitEvent = function emitEvent(evt, args) { + var listeners = this.getListenersAsObject(evt); + var listener; + var i; + var key; + var response; + + for (key in listeners) { + if (listeners.hasOwnProperty(key)) { + i = listeners[key].length; + + while (i--) { + // If the listener returns true then it shall be removed from the event + // The function is executed either with a basic call or an apply if there is an args array + listener = listeners[key][i]; + + if (listener.once === true) { + this.removeListener(evt, listener.listener); + } + + response = listener.listener.apply(this, args || []); + + if (response === this._getOnceReturnValue()) { + this.removeListener(evt, listener.listener); + } + } + } + } + + return this; + }; + + /** + * Alias of emitEvent + */ + proto.trigger = alias('emitEvent'); + + /** + * Subtly different from emitEvent in that it will pass its arguments on to the listeners, as opposed to taking a single array of arguments to pass on. + * As with emitEvent, you can pass a regex in place of the event name to emit to all events that match it. + * + * @param {String|RegExp} evt Name of the event to emit and execute listeners for. + * @param {...*} Optional additional arguments to be passed to each listener. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.emit = function emit(evt) { + var args = Array.prototype.slice.call(arguments, 1); + return this.emitEvent(evt, args); + }; + + /** + * Sets the current value to check against when executing listeners. If a + * listeners return value matches the one set here then it will be removed + * after execution. This value defaults to true. + * + * @param {*} value The new value to check for when executing listeners. + * @return {Object} Current instance of EventEmitter for chaining. + */ + proto.setOnceReturnValue = function setOnceReturnValue(value) { + this._onceReturnValue = value; + return this; + }; + + /** + * Fetches the current value to check against when executing listeners. If + * the listeners return value matches this one then it should be removed + * automatically. It will return true by default. + * + * @return {*|Boolean} The current value to check for or the default, true. + * @api private + */ + proto._getOnceReturnValue = function _getOnceReturnValue() { + if (this.hasOwnProperty('_onceReturnValue')) { + return this._onceReturnValue; + } + else { + return true; + } + }; + + /** + * Fetches the events object and creates one if required. + * + * @return {Object} The events storage object. + * @api private + */ + proto._getEvents = function _getEvents() { + return this._events || (this._events = {}); + }; + + // Expose the class either via AMD, CommonJS or the global object + if (typeof define === 'function' && define.amd) { + define(function () { + return EventEmitter; + }); + } + else if (typeof module === 'object' && module.exports){ + module.exports = EventEmitter; + } + else { + this.EventEmitter = EventEmitter; + } +}.call(this)); + +/*! + * eventie v1.0.3 + * event binding helper + * eventie.bind( elem, 'click', myFn ) + * eventie.unbind( elem, 'click', myFn ) + */ + +/*jshint browser: true, undef: true, unused: true */ +/*global define: false */ + +( function( window ) { + +'use strict'; + +var docElem = document.documentElement; + +var bind = function() {}; + +if ( docElem.addEventListener ) { + bind = function( obj, type, fn ) { + obj.addEventListener( type, fn, false ); + }; +} else if ( docElem.attachEvent ) { + bind = function( obj, type, fn ) { + obj[ type + fn ] = fn.handleEvent ? + function() { + var event = window.event; + // add event.target + event.target = event.target || event.srcElement; + fn.handleEvent.call( fn, event ); + } : + function() { + var event = window.event; + // add event.target + event.target = event.target || event.srcElement; + fn.call( obj, event ); + }; + obj.attachEvent( "on" + type, obj[ type + fn ] ); + }; +} + +var unbind = function() {}; + +if ( docElem.removeEventListener ) { + unbind = function( obj, type, fn ) { + obj.removeEventListener( type, fn, false ); + }; +} else if ( docElem.detachEvent ) { + unbind = function( obj, type, fn ) { + obj.detachEvent( "on" + type, obj[ type + fn ] ); + try { + delete obj[ type + fn ]; + } catch ( err ) { + // can't delete window object properties + obj[ type + fn ] = undefined; + } + }; +} + +var eventie = { + bind: bind, + unbind: unbind +}; + +// transport +if ( typeof define === 'function' && define.amd ) { + // AMD + define( eventie ); +} else { + // browser global + window.eventie = eventie; +} + +})( this ); + +/*! + * imagesLoaded v3.0.4 + * JavaScript is all like "You images are done yet or what?" + * MIT License + */ + +( function( window ) { + +'use strict'; + +var $ = window.jQuery; +var console = window.console; +var hasConsole = typeof console !== 'undefined'; + +// -------------------------- helpers -------------------------- // + +// extend objects +function extend( a, b ) { + for ( var prop in b ) { + a[ prop ] = b[ prop ]; + } + return a; +} + +var objToString = Object.prototype.toString; +function isArray( obj ) { + return objToString.call( obj ) === '[object Array]'; +} + +// turn element or nodeList into an array +function makeArray( obj ) { + var ary = []; + if ( isArray( obj ) ) { + // use object if already an array + ary = obj; + } else if ( typeof obj.length === 'number' ) { + // convert nodeList to array + for ( var i=0, len = obj.length; i < len; i++ ) { + ary.push( obj[i] ); + } + } else { + // array of single index + ary.push( obj ); + } + return ary; +} + +// -------------------------- -------------------------- // + +function defineImagesLoaded( EventEmitter, eventie ) { + + /** + * @param {Array, Element, NodeList, String} elem + * @param {Object or Function} options - if function, use as callback + * @param {Function} onAlways - callback function + */ + function ImagesLoaded( elem, options, onAlways ) { + // coerce ImagesLoaded() without new, to be new ImagesLoaded() + if ( !( this instanceof ImagesLoaded ) ) { + return new ImagesLoaded( elem, options ); + } + // use elem as selector string + if ( typeof elem === 'string' ) { + elem = document.querySelectorAll( elem ); + } + + this.elements = makeArray( elem ); + this.options = extend( {}, this.options ); + + if ( typeof options === 'function' ) { + onAlways = options; + } else { + extend( this.options, options ); + } + + if ( onAlways ) { + this.on( 'always', onAlways ); + } + + this.getImages(); + + if ( $ ) { + // add jQuery Deferred object + this.jqDeferred = new $.Deferred(); + } + + // HACK check async to allow time to bind listeners + var _this = this; + setTimeout( function() { + _this.check(); + }); + } + + ImagesLoaded.prototype = new EventEmitter(); + + ImagesLoaded.prototype.options = {}; + + ImagesLoaded.prototype.getImages = function() { + this.images = []; + + // filter & find items if we have an item selector + for ( var i=0, len = this.elements.length; i < len; i++ ) { + var elem = this.elements[i]; + // filter siblings + if ( elem.nodeName === 'IMG' ) { + this.addImage( elem ); + } + // find children + var childElems = elem.querySelectorAll('img'); + // concat childElems to filterFound array + for ( var j=0, jLen = childElems.length; j < jLen; j++ ) { + var img = childElems[j]; + this.addImage( img ); + } + } + }; + + /** + * @param {Image} img + */ + ImagesLoaded.prototype.addImage = function( img ) { + var loadingImage = new LoadingImage( img ); + this.images.push( loadingImage ); + }; + + ImagesLoaded.prototype.check = function() { + var _this = this; + var checkedCount = 0; + var length = this.images.length; + this.hasAnyBroken = false; + // complete if no images + if ( !length ) { + this.complete(); + return; + } + + function onConfirm( image, message ) { + if ( _this.options.debug && hasConsole ) { + console.log( 'confirm', image, message ); + } + + _this.progress( image ); + checkedCount++; + if ( checkedCount === length ) { + _this.complete(); + } + return true; // bind once + } + + for ( var i=0; i < length; i++ ) { + var loadingImage = this.images[i]; + loadingImage.on( 'confirm', onConfirm ); + loadingImage.check(); + } + }; + + ImagesLoaded.prototype.progress = function( image ) { + this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded; + // HACK - Chrome triggers event before object properties have changed. #83 + var _this = this; + setTimeout( function() { + _this.emit( 'progress', _this, image ); + if ( _this.jqDeferred ) { + _this.jqDeferred.notify( _this, image ); + } + }); + }; + + ImagesLoaded.prototype.complete = function() { + var eventName = this.hasAnyBroken ? 'fail' : 'done'; + this.isComplete = true; + var _this = this; + // HACK - another setTimeout so that confirm happens after progress + setTimeout( function() { + _this.emit( eventName, _this ); + _this.emit( 'always', _this ); + if ( _this.jqDeferred ) { + var jqMethod = _this.hasAnyBroken ? 'reject' : 'resolve'; + _this.jqDeferred[ jqMethod ]( _this ); + } + }); + }; + + // -------------------------- jquery -------------------------- // + + if ( $ ) { + $.fn.imagesLoaded = function( options, callback ) { + var instance = new ImagesLoaded( this, options, callback ); + return instance.jqDeferred.promise( $(this) ); + }; + } + + + // -------------------------- -------------------------- // + + var cache = {}; + + function LoadingImage( img ) { + this.img = img; + } + + LoadingImage.prototype = new EventEmitter(); + + LoadingImage.prototype.check = function() { + // first check cached any previous images that have same src + var cached = cache[ this.img.src ]; + if ( cached ) { + this.useCached( cached ); + return; + } + // add this to cache + cache[ this.img.src ] = this; + + // If complete is true and browser supports natural sizes, + // try to check for image status manually. + if ( this.img.complete && this.img.naturalWidth !== undefined ) { + // report based on naturalWidth + this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' ); + return; + } + + // If none of the checks above matched, simulate loading on detached element. + var proxyImage = this.proxyImage = new Image(); + eventie.bind( proxyImage, 'load', this ); + eventie.bind( proxyImage, 'error', this ); + proxyImage.src = this.img.src; + }; + + LoadingImage.prototype.useCached = function( cached ) { + if ( cached.isConfirmed ) { + this.confirm( cached.isLoaded, 'cached was confirmed' ); + } else { + var _this = this; + cached.on( 'confirm', function( image ) { + _this.confirm( image.isLoaded, 'cache emitted confirmed' ); + return true; // bind once + }); + } + }; + + LoadingImage.prototype.confirm = function( isLoaded, message ) { + this.isConfirmed = true; + this.isLoaded = isLoaded; + this.emit( 'confirm', this, message ); + }; + + // trigger specified handler for event type + LoadingImage.prototype.handleEvent = function( event ) { + var method = 'on' + event.type; + if ( this[ method ] ) { + this[ method ]( event ); + } + }; + + LoadingImage.prototype.onload = function() { + this.confirm( true, 'onload' ); + this.unbindProxyEvents(); + }; + + LoadingImage.prototype.onerror = function() { + this.confirm( false, 'onerror' ); + this.unbindProxyEvents(); + }; + + LoadingImage.prototype.unbindProxyEvents = function() { + eventie.unbind( this.proxyImage, 'load', this ); + eventie.unbind( this.proxyImage, 'error', this ); + }; + + // ----- ----- // + + return ImagesLoaded; +} + +// -------------------------- transport -------------------------- // + +if ( typeof define === 'function' && define.amd ) { + // AMD + define( [ + 'eventEmitter/EventEmitter', + 'eventie/eventie' + ], + defineImagesLoaded ); +} else { + // browser global + window.imagesLoaded = defineImagesLoaded( + window.EventEmitter, + window.eventie + ); +} + +})( window ); diff --git a/js_src/libs/jquery-tourbus.js b/js_src/libs/jquery-tourbus.js new file mode 100644 index 0000000..385e95e --- /dev/null +++ b/js_src/libs/jquery-tourbus.js @@ -0,0 +1,539 @@ +(function() { + var __slice = [].slice; + + (function($) { + var Bus, Leg, methods, tourbus, uniqueId, _addRule, _assemble, _busses, _dataProp, _include, _tours; + tourbus = $.tourbus = function() { + var args, method; + args = 1 <= arguments.length ? __slice.call(arguments, 0) : []; + method = args[0]; + if (methods.hasOwnProperty(method)) { + args = args.slice(1); + } else if (method instanceof $) { + method = 'build'; + } else if (typeof method === 'string') { + method = 'build'; + args[0] = $(args[0]); + } else { + $.error("Unknown method of $.tourbus --", args); + } + return methods[method].apply(this, args); + }; + $.fn.tourbus = function() { + var args; + args = 1 <= arguments.length ? __slice.call(arguments, 0) : []; + return this.each(function() { + args.unshift($(this)); + tourbus.apply(null, ['build'].concat(__slice.call(args))); + return this; + }); + }; + methods = { + build: function(el, options) { + var built; + if (options == null) { + options = {}; + } + options = $.extend(true, {}, tourbus.defaults, options); + built = []; + if (!(el instanceof $)) { + el = $(el); + } + el.each(function() { + return built.push(_assemble(this, options)); + }); + if (built.length === 0) { + $.error("" + el.selector + " was not found!"); + } + if (built.length === 1) { + return built[0]; + } + return built; + }, + destroyAll: function() { + var bus, index, _results; + _results = []; + for (index in _busses) { + bus = _busses[index]; + _results.push(bus.destroy()); + } + return _results; + }, + expose: function(global) { + return global.tourbus = { + Bus: Bus, + Leg: Leg + }; + } + }; + tourbus.defaults = { + debug: false, + autoDepart: false, + target: 'body', + startAt: 0, + onDepart: function() { + return null; + }, + onStop: function() { + return null; + }, + onLegStart: function() { + return null; + }, + onLegEnd: function() { + return null; + }, + leg: { + scrollTo: null, + scrollSpeed: 150, + scrollContext: 100, + orientation: 'bottom', + align: 'left', + width: 'auto', + margin: 10, + top: null, + left: null, + arrow: "35%" + } + }; + /* Internal + */ + + Bus = (function() { + + function Bus(el, options) { + this.id = uniqueId(); + this.$target = $(options.target); + this.$el = $(el); + this.$el.data({ + tourbus: this + }); + this.options = options; + this.currentLegIndex = null; + this.legs = null; + this.legEls = this.$el.children('li'); + this.totalLegs = this.legEls.length; + this._setupEvents(); + if (this.options.autoDepart) { + this.$el.trigger('depart.tourbus'); + } + this._log('built tourbus with el', el.toString(), 'and options', this.options); + } + + Bus.prototype.depart = function() { + this.running = true; + this.options.onDepart(this); + this._log('departing', this); + this.legs = this._buildLegs(); + this.currentLegIndex = this.options.startAt; + return this.showLeg(); + }; + + Bus.prototype.stop = function() { + if (!this.running) { + return; + } + if (this.legs) { + $.each(this.legs, $.proxy(this.hideLeg, this)); + } + this.currentLegIndex = this.options.startAt; + this.options.onStop(this); + return this.running = false; + }; + + Bus.prototype.on = function(event, selector, fn) { + return this.$target.on(event, selector, fn); + }; + + Bus.prototype.currentLeg = function() { + if (this.currentLegIndex === null) { + return null; + } + return this.legs[this.currentLegIndex]; + }; + + Bus.prototype.showLeg = function(index) { + var leg, preventDefault; + if (index == null) { + index = this.currentLegIndex; + } + leg = this.legs[index]; + this._log('showLeg:', leg); + preventDefault = this.options.onLegStart(leg, this); + if (preventDefault !== false) { + return leg.show(); + } + }; + + Bus.prototype.hideLeg = function(index) { + var leg, preventDefault; + if (index == null) { + index = this.currentLegIndex; + } + leg = this.legs[index]; + this._log('hideLeg:', leg); + preventDefault = this.options.onLegEnd(leg, this); + if (preventDefault !== false) { + return leg.hide(); + } + }; + + Bus.prototype.repositionLegs = function() { + if (this.legs) { + return $.each(this.legs, function() { + return this.reposition(); + }); + } + }; + + Bus.prototype.next = function() { + this.hideLeg(); + this.currentLegIndex++; + if (this.currentLegIndex > this.totalLegs - 1) { + return this.stop(); + } + return this.showLeg(); + }; + + Bus.prototype.prev = function(cb) { + this.hideLeg(); + this.currentLegIndex--; + if (this.currentLegIndex < 0) { + return this.stop(); + } + return this.showLeg(); + }; + + Bus.prototype.destroy = function() { + if (this.legs) { + $.each(this.legs, function() { + return this.destroy(); + }); + } + this.legs = null; + delete _busses[this.id]; + return this._teardownEvents(); + }; + + Bus.prototype._buildLegs = function() { + var _this = this; + if (this.legs) { + $.each(this.legs, function(_, leg) { + return leg.destroy(); + }); + } + return $.map(this.legEls, function(legEl, i) { + var $legEl, data, leg; + $legEl = $(legEl); + data = $legEl.data(); + leg = new Leg({ + content: $legEl.html(), + target: data.el || 'body', + bus: _this, + index: i, + rawData: data + }); + leg.render(); + _this.$target.append(leg.$el); + leg._position(); + leg.hide(); + return leg; + }); + }; + + Bus.prototype._log = function() { + if (!this.options.debug) { + return; + } + return console.log.apply(console, ["TOURBUS " + this.id + ":"].concat(__slice.call(arguments))); + }; + + Bus.prototype._setupEvents = function() { + this.$el.on('depart.tourbus', $.proxy(this.depart, this)); + this.$el.on('stop.tourbus', $.proxy(this.stop, this)); + this.$el.on('next.tourbus', $.proxy(this.next, this)); + return this.$el.on('prev.tourbus', $.proxy(this.prev, this)); + }; + + Bus.prototype._teardownEvents = function() { + return this.$el.off('.tourbus'); + }; + + return Bus; + + })(); + Leg = (function() { + + function Leg(options) { + this.bus = options.bus; + this.rawData = options.rawData; + this.content = options.content; + this.index = options.index; + this.options = options; + this.$target = $(options.target); + if (this.$target.length === 0) { + throw "" + this.$target.selector + " is not an element!"; + } + this._setupOptions(); + this._configureElement(); + this._configureTarget(); + this._configureScroll(); + this._setupEvents(); + this.bus._log("leg " + this.index + " made with options", this.options); + } + + Leg.prototype.render = function() { + var arrowClass, html; + arrowClass = this.options.orientation === 'centered' ? '' : 'tourbus-arrow'; + this.$el.addClass(" " + arrowClass + " tourbus-arrow-" + this.options.orientation + " "); + html = "
\n " + this.content + "\n
"; + this.$el.css({ + width: this.options.width + }).html(html); + return this; + }; + + Leg.prototype.destroy = function() { + this.$el.remove(); + return this._teardownEvents(); + }; + + Leg.prototype.reposition = function() { + this._configureTarget(); + return this._position(); + }; + + Leg.prototype._position = function() { + var css, keys, rule, selector; + if (this.options.orientation !== 'centered') { + rule = {}; + keys = { + top: 'left', + bottom: 'left', + left: 'top', + right: 'top' + }; + if (typeof this.options.arrow === 'number') { + this.options.arrow += 'px'; + } + rule[keys[this.options.orientation]] = this.options.arrow; + selector = "#" + this.id + ".tourbus-arrow"; + this.bus._log("adding rule for " + this.id, rule); + _addRule("" + selector + ":before, " + selector + ":after", rule); + } + css = this._offsets(); + this.bus._log('setting offsets on leg', css); + return this.$el.css(css); + }; + + Leg.prototype.show = function() { + this.$el.css({ + visibility: 'visible', + opacity: 1.0, + zIndex: 9999 + }); + return this.scrollIntoView(); + }; + + Leg.prototype.hide = function() { + if (this.bus.options.debug) { + return this.$el.css({ + visibility: 'visible', + opacity: 0.4, + zIndex: 0 + }); + } else { + return this.$el.css({ + visibility: 'hidden' + }); + } + }; + + Leg.prototype.scrollIntoView = function() { + var scrollTarget; + if (!this.willScroll) { + return; + } + scrollTarget = _dataProp(this.options.scrollTo, this.$el); + this.bus._log('scrolling to', scrollTarget, this.scrollSettings); + return $.scrollTo(scrollTarget, this.scrollSettings); + }; + + Leg.prototype._setupOptions = function() { + var globalOptions; + globalOptions = this.bus.options.leg; + this.options.top = _dataProp(this.rawData.top, globalOptions.top); + this.options.left = _dataProp(this.rawData.left, globalOptions.left); + this.options.scrollTo = _dataProp(this.rawData.scrollTo, globalOptions.scrollTo); + this.options.scrollSpeed = _dataProp(this.rawData.scrollSpeed, globalOptions.scrollSpeed); + this.options.scrollContext = _dataProp(this.rawData.scrollContext, globalOptions.scrollContext); + this.options.margin = _dataProp(this.rawData.margin, globalOptions.margin); + this.options.arrow = this.rawData.arrow || globalOptions.arrow; + this.options.align = this.rawData.align || globalOptions.align; + this.options.width = this.rawData.width || globalOptions.width; + return this.options.orientation = this.rawData.orientation || globalOptions.orientation; + }; + + Leg.prototype._configureElement = function() { + this.id = "tourbus-leg-id-" + this.bus.id + "-" + this.options.index; + this.$el = $("
"); + this.el = this.$el[0]; + this.$el.attr({ + id: this.id + }); + return this.$el.css({ + zIndex: 9999 + }); + }; + + Leg.prototype._setupEvents = function() { + this.$el.on('click', '.tourbus-next', $.proxy(this.bus.next, this.bus)); + this.$el.on('click', '.tourbus-prev', $.proxy(this.bus.prev, this.bus)); + return this.$el.on('click', '.tourbus-stop', $.proxy(this.bus.stop, this.bus)); + }; + + Leg.prototype._teardownEvents = function() { + return this.$el.off('click'); + }; + + Leg.prototype._configureTarget = function() { + this.targetOffset = this.$target.offset(); + if (_dataProp(this.options.top, false)) { + this.targetOffset.top = this.options.top; + } + if (_dataProp(this.options.left, false)) { + this.targetOffset.left = this.options.left; + } + this.targetWidth = this.$target.outerWidth(); + return this.targetHeight = this.$target.outerHeight(); + }; + + Leg.prototype._configureScroll = function() { + this.willScroll = $.fn.scrollTo && this.options.scrollTo !== false; + return this.scrollSettings = { + offset: -this.options.scrollContext, + easing: 'linear', + axis: 'y', + duration: this.options.scrollSpeed + }; + }; + + Leg.prototype._offsets = function() { + var dimension, elHalf, elHeight, elWidth, offsets, targetHalf, targetHeightOverride, validOrientations; + elHeight = this.$el.height(); + elWidth = this.$el.width(); + offsets = {}; + switch (this.options.orientation) { + case 'centered': + targetHeightOverride = $(window).height(); + offsets.top = this.options.top; + if (!_dataProp(offsets.top, false)) { + offsets.top = (targetHeightOverride / 2) - (elHeight / 2); + } + offsets.left = (this.targetWidth / 2) - (elWidth / 2); + break; + case 'left': + offsets.top = this.targetOffset.top; + offsets.left = this.targetOffset.left - elWidth - this.options.margin; + break; + case 'right': + offsets.top = this.targetOffset.top; + offsets.left = this.targetOffset.left + this.targetWidth + this.options.margin; + break; + case 'top': + offsets.top = this.targetOffset.top - elHeight - this.options.margin; + offsets.left = this.targetOffset.left; + break; + case 'bottom': + offsets.top = this.targetOffset.top + this.targetHeight + this.options.margin; + offsets.left = this.targetOffset.left; + } + validOrientations = { + top: ['left', 'right'], + bottom: ['left', 'right'], + left: ['top', 'bottom'], + right: ['top', 'bottom'] + }; + if (_include(this.options.orientation, validOrientations[this.options.align])) { + switch (this.options.align) { + case 'right': + offsets.left += this.targetWidth - elWidth; + break; + case 'bottom': + offsets.top += this.targetHeight - elHeight; + } + } else if (this.options.align === 'center') { + if (_include(this.options.orientation, validOrientations.left)) { + targetHalf = this.targetWidth / 2; + elHalf = elWidth / 2; + dimension = 'left'; + } else { + targetHalf = this.targetHeight / 2; + elHalf = elHeight / 2; + dimension = 'top'; + } + if (targetHalf > elHalf) { + offsets[dimension] += targetHalf - elHalf; + } else { + offsets[dimension] -= elHalf - targetHalf; + } + } + return offsets; + }; + + return Leg; + + })(); + _tours = 0; + uniqueId = function() { + return _tours++; + }; + _busses = {}; + _assemble = function() { + var bus; + bus = (function(func, args, ctor) { + ctor.prototype = func.prototype; + var child = new ctor, result = func.apply(child, args); + return Object(result) === result ? result : child; + })(Bus, arguments, function(){}); + _busses[bus.id] = bus; + return bus; + }; + _dataProp = function(possiblyFalsy, alternative) { + if (possiblyFalsy === null || typeof possiblyFalsy === 'undefined') { + return alternative; + } + return possiblyFalsy; + }; + _include = function(value, array) { + return $.inArray(value, array || []) !== -1; + }; + return _addRule = (function(styleTag) { + var sheet; + styleTag.type = 'text/css'; + document.getElementsByTagName('head')[0].appendChild(styleTag); + sheet = document.styleSheets[document.styleSheets.length - 1]; + return function(selector, css) { + var key, propText; + propText = $.map((function() { + var _results; + _results = []; + for (key in css) { + _results.push(key); + } + return _results; + })(), function(p) { + return "" + p + ":" + css[p]; + }).join(';'); + try { + if (sheet.insertRule) { + sheet.insertRule("" + selector + " { " + propText + " }", (sheet.cssRules || sheet.rules).length); + } else { + sheet.addRule(selector, propText); + } + } catch (_error) {} + }; + })(document.createElement('style')); + })(jQuery); + +}).call(this); diff --git a/www/helpcontent.html b/www/helpcontent.html new file mode 100644 index 0000000..4363738 --- /dev/null +++ b/www/helpcontent.html @@ -0,0 +1,94 @@ +
+ +
    + + +
  1. +

    Welcome to Doodle3D

    +

    This is your first time starting the app. How about we show you around a bit?

    + Yes + No +
  2. + + +
  3. +

    Leftpanel

    +

    Random text which makes it all seem like there's something to say...

    + + Next... +
  4. +
  5. +

    New

    +

    Random text which makes it all seem like there's something to say...

    + + Next... +
  6. +
  7. +

    PrevNext

    +

    Random text which makes it all seem like there's something to say...

    + + Next... +
  8. +
  9. +

    Save

    +

    Random text which makes it all seem like there's something to say...

    + + Next... +
  10. +
  11. +

    Oops

    +

    Random text which makes it all seem like there's something to say...

    + + Next... +
  12. + + +
  13. +

    Leftpanel

    +

    Random text which makes it all seem like there's something to say...

    + + Next... +
  14. +
  15. +

    print

    +

    Random text which makes it all seem like there's something to say...

    + + Next... +
  16. +
  17. +

    stop

    +

    Random text which makes it all seem like there's something to say...

    + + Next... +
  18. +
  19. +

    progress

    +

    Random text which makes it all seem like there's something to say...

    + + Next... +
  20. +
  21. +

    thermo

    +

    Random text which makes it all seem like there's something to say...

    + + Next... +
  22. +
  23. +

    info

    +

    Random text which makes it all seem like there's something to say...

    + + Got it... +
  24. + + +
+
    + +
  1. +

    INFO

    +

    check out the info here anytime..

    + Got it +
  2. + + +
\ No newline at end of file diff --git a/www/js/libs/imagesloaded.pkgd.min.js b/www/js/libs/imagesloaded.pkgd.min.js new file mode 100644 index 0000000..ae01244 --- /dev/null +++ b/www/js/libs/imagesloaded.pkgd.min.js @@ -0,0 +1,7 @@ +/*! + * imagesLoaded PACKAGED v3.0.4 + * JavaScript is all like "You images are done yet or what?" + * MIT License + */ + +(function(){"use strict";function e(){}function t(e,t){for(var n=e.length;n--;)if(e[n].listener===t)return n;return-1}function n(e){return function(){return this[e].apply(this,arguments)}}var i=e.prototype;i.getListeners=function(e){var t,n,i=this._getEvents();if("object"==typeof e){t={};for(n in i)i.hasOwnProperty(n)&&e.test(n)&&(t[n]=i[n])}else t=i[e]||(i[e]=[]);return t},i.flattenListeners=function(e){var t,n=[];for(t=0;e.length>t;t+=1)n.push(e[t].listener);return n},i.getListenersAsObject=function(e){var t,n=this.getListeners(e);return n instanceof Array&&(t={},t[e]=n),t||n},i.addListener=function(e,n){var i,r=this.getListenersAsObject(e),o="object"==typeof n;for(i in r)r.hasOwnProperty(i)&&-1===t(r[i],n)&&r[i].push(o?n:{listener:n,once:!1});return this},i.on=n("addListener"),i.addOnceListener=function(e,t){return this.addListener(e,{listener:t,once:!0})},i.once=n("addOnceListener"),i.defineEvent=function(e){return this.getListeners(e),this},i.defineEvents=function(e){for(var t=0;e.length>t;t+=1)this.defineEvent(e[t]);return this},i.removeListener=function(e,n){var i,r,o=this.getListenersAsObject(e);for(r in o)o.hasOwnProperty(r)&&(i=t(o[r],n),-1!==i&&o[r].splice(i,1));return this},i.off=n("removeListener"),i.addListeners=function(e,t){return this.manipulateListeners(!1,e,t)},i.removeListeners=function(e,t){return this.manipulateListeners(!0,e,t)},i.manipulateListeners=function(e,t,n){var i,r,o=e?this.removeListener:this.addListener,s=e?this.removeListeners:this.addListeners;if("object"!=typeof t||t instanceof RegExp)for(i=n.length;i--;)o.call(this,t,n[i]);else for(i in t)t.hasOwnProperty(i)&&(r=t[i])&&("function"==typeof r?o.call(this,i,r):s.call(this,i,r));return this},i.removeEvent=function(e){var t,n=typeof e,i=this._getEvents();if("string"===n)delete i[e];else if("object"===n)for(t in i)i.hasOwnProperty(t)&&e.test(t)&&delete i[t];else delete this._events;return this},i.removeAllListeners=n("removeEvent"),i.emitEvent=function(e,t){var n,i,r,o,s=this.getListenersAsObject(e);for(r in s)if(s.hasOwnProperty(r))for(i=s[r].length;i--;)n=s[r][i],n.once===!0&&this.removeListener(e,n.listener),o=n.listener.apply(this,t||[]),o===this._getOnceReturnValue()&&this.removeListener(e,n.listener);return this},i.trigger=n("emitEvent"),i.emit=function(e){var t=Array.prototype.slice.call(arguments,1);return this.emitEvent(e,t)},i.setOnceReturnValue=function(e){return this._onceReturnValue=e,this},i._getOnceReturnValue=function(){return this.hasOwnProperty("_onceReturnValue")?this._onceReturnValue:!0},i._getEvents=function(){return this._events||(this._events={})},"function"==typeof define&&define.amd?define(function(){return e}):"object"==typeof module&&module.exports?module.exports=e:this.EventEmitter=e}).call(this),function(e){"use strict";var t=document.documentElement,n=function(){};t.addEventListener?n=function(e,t,n){e.addEventListener(t,n,!1)}:t.attachEvent&&(n=function(t,n,i){t[n+i]=i.handleEvent?function(){var t=e.event;t.target=t.target||t.srcElement,i.handleEvent.call(i,t)}:function(){var n=e.event;n.target=n.target||n.srcElement,i.call(t,n)},t.attachEvent("on"+n,t[n+i])});var i=function(){};t.removeEventListener?i=function(e,t,n){e.removeEventListener(t,n,!1)}:t.detachEvent&&(i=function(e,t,n){e.detachEvent("on"+t,e[t+n]);try{delete e[t+n]}catch(i){e[t+n]=void 0}});var r={bind:n,unbind:i};"function"==typeof define&&define.amd?define(r):e.eventie=r}(this),function(e){"use strict";function t(e,t){for(var n in t)e[n]=t[n];return e}function n(e){return"[object Array]"===c.call(e)}function i(e){var t=[];if(n(e))t=e;else if("number"==typeof e.length)for(var i=0,r=e.length;r>i;i++)t.push(e[i]);else t.push(e);return t}function r(e,n){function r(e,n,s){if(!(this instanceof r))return new r(e,n);"string"==typeof e&&(e=document.querySelectorAll(e)),this.elements=i(e),this.options=t({},this.options),"function"==typeof n?s=n:t(this.options,n),s&&this.on("always",s),this.getImages(),o&&(this.jqDeferred=new o.Deferred);var a=this;setTimeout(function(){a.check()})}function c(e){this.img=e}r.prototype=new e,r.prototype.options={},r.prototype.getImages=function(){this.images=[];for(var e=0,t=this.elements.length;t>e;e++){var n=this.elements[e];"IMG"===n.nodeName&&this.addImage(n);for(var i=n.querySelectorAll("img"),r=0,o=i.length;o>r;r++){var s=i[r];this.addImage(s)}}},r.prototype.addImage=function(e){var t=new c(e);this.images.push(t)},r.prototype.check=function(){function e(e,r){return t.options.debug&&a&&s.log("confirm",e,r),t.progress(e),n++,n===i&&t.complete(),!0}var t=this,n=0,i=this.images.length;if(this.hasAnyBroken=!1,!i)return this.complete(),void 0;for(var r=0;i>r;r++){var o=this.images[r];o.on("confirm",e),o.check()}},r.prototype.progress=function(e){this.hasAnyBroken=this.hasAnyBroken||!e.isLoaded;var t=this;setTimeout(function(){t.emit("progress",t,e),t.jqDeferred&&t.jqDeferred.notify(t,e)})},r.prototype.complete=function(){var e=this.hasAnyBroken?"fail":"done";this.isComplete=!0;var t=this;setTimeout(function(){if(t.emit(e,t),t.emit("always",t),t.jqDeferred){var n=t.hasAnyBroken?"reject":"resolve";t.jqDeferred[n](t)}})},o&&(o.fn.imagesLoaded=function(e,t){var n=new r(this,e,t);return n.jqDeferred.promise(o(this))});var f={};return c.prototype=new e,c.prototype.check=function(){var e=f[this.img.src];if(e)return this.useCached(e),void 0;if(f[this.img.src]=this,this.img.complete&&void 0!==this.img.naturalWidth)return this.confirm(0!==this.img.naturalWidth,"naturalWidth"),void 0;var t=this.proxyImage=new Image;n.bind(t,"load",this),n.bind(t,"error",this),t.src=this.img.src},c.prototype.useCached=function(e){if(e.isConfirmed)this.confirm(e.isLoaded,"cached was confirmed");else{var t=this;e.on("confirm",function(e){return t.confirm(e.isLoaded,"cache emitted confirmed"),!0})}},c.prototype.confirm=function(e,t){this.isConfirmed=!0,this.isLoaded=e,this.emit("confirm",this,t)},c.prototype.handleEvent=function(e){var t="on"+e.type;this[t]&&this[t](e)},c.prototype.onload=function(){this.confirm(!0,"onload"),this.unbindProxyEvents()},c.prototype.onerror=function(){this.confirm(!1,"onerror"),this.unbindProxyEvents()},c.prototype.unbindProxyEvents=function(){n.unbind(this.proxyImage,"load",this),n.unbind(this.proxyImage,"error",this)},r}var o=e.jQuery,s=e.console,a=s!==void 0,c=Object.prototype.toString;"function"==typeof define&&define.amd?define(["eventEmitter/EventEmitter","eventie/eventie"],r):e.imagesLoaded=r(e.EventEmitter,e.eventie)}(window); \ No newline at end of file diff --git a/www/js/libs/jquery-tourbus.min.js b/www/js/libs/jquery-tourbus.min.js new file mode 100644 index 0000000..ad4fa66 --- /dev/null +++ b/www/js/libs/jquery-tourbus.min.js @@ -0,0 +1 @@ +(function(){var t=[].slice;(function(i){var e,o,s,n,r,h,l,u,a,p,c;return n=i.tourbus=function(){var e,o;return e=arguments.length>=1?t.call(arguments,0):[],o=e[0],s.hasOwnProperty(o)?e=e.slice(1):o instanceof i?o="build":"string"==typeof o?(o="build",e[0]=i(e[0])):i.error("Unknown method of $.tourbus --",e),s[o].apply(this,e)},i.fn.tourbus=function(){var e;return e=arguments.length>=1?t.call(arguments,0):[],this.each(function(){return e.unshift(i(this)),n.apply(null,["build"].concat(t.call(e))),this})},s={build:function(t,e){var o;return null==e&&(e={}),e=i.extend(!0,{},n.defaults,e),o=[],t instanceof i||(t=i(t)),t.each(function(){return o.push(l(this,e))}),0===o.length&&i.error(""+t.selector+" was not found!"),1===o.length?o[0]:o},destroyAll:function(){var t,i,e;e=[];for(i in u)t=u[i],e.push(t.destroy());return e},expose:function(t){return t.tourbus={Bus:e,Leg:o}}},n.defaults={debug:!1,autoDepart:!1,target:"body",startAt:0,onDepart:function(){return null},onStop:function(){return null},onLegStart:function(){return null},onLegEnd:function(){return null},leg:{scrollTo:null,scrollSpeed:150,scrollContext:100,orientation:"bottom",align:"left",width:"auto",margin:10,top:null,left:null,arrow:"50%"}},e=function(){function e(t,e){this.id=r(),this.$target=i(e.target),this.$el=i(t),this.$el.data({tourbus:this}),this.options=e,this.currentLegIndex=null,this.legs=null,this.legEls=this.$el.children("li"),this.totalLegs=this.legEls.length,this._setupEvents(),this.options.autoDepart&&this.$el.trigger("depart.tourbus"),this._log("built tourbus with el",""+t,"and options",this.options)}return e.prototype.depart=function(){return this.running=!0,this.options.onDepart(this),this._log("departing",this),this.legs=this._buildLegs(),this.currentLegIndex=this.options.startAt,this.showLeg()},e.prototype.stop=function(){return this.running?(this.legs&&i.each(this.legs,i.proxy(this.hideLeg,this)),this.currentLegIndex=this.options.startAt,this.options.onStop(this),this.running=!1):void 0},e.prototype.on=function(t,i,e){return this.$target.on(t,i,e)},e.prototype.currentLeg=function(){return null===this.currentLegIndex?null:this.legs[this.currentLegIndex]},e.prototype.showLeg=function(t){var i,e;return null==t&&(t=this.currentLegIndex),i=this.legs[t],this._log("showLeg:",i),e=this.options.onLegStart(i,this),e!==!1?i.show():void 0},e.prototype.hideLeg=function(t){var i,e;return null==t&&(t=this.currentLegIndex),i=this.legs[t],this._log("hideLeg:",i),e=this.options.onLegEnd(i,this),e!==!1?i.hide():void 0},e.prototype.repositionLegs=function(){return this.legs?i.each(this.legs,function(){return this.reposition()}):void 0},e.prototype.next=function(){return this.hideLeg(),this.currentLegIndex++,this.currentLegIndex>this.totalLegs-1?this.stop():this.showLeg()},e.prototype.prev=function(){return this.hideLeg(),this.currentLegIndex--,0>this.currentLegIndex?this.stop():this.showLeg()},e.prototype.destroy=function(){return this.legs&&i.each(this.legs,function(){return this.destroy()}),this.legs=null,delete u[this.id],this._teardownEvents()},e.prototype._buildLegs=function(){var t=this;return this.legs&&i.each(this.legs,function(t,i){return i.destroy()}),i.map(this.legEls,function(e,s){var n,r,h;return n=i(e),r=n.data(),h=new o({content:n.html(),target:r.el||"body",bus:t,index:s,rawData:r}),h.render(),t.$target.append(h.$el),h._position(),h.hide(),h})},e.prototype._log=function(){return this.options.debug?console.log.apply(console,["TOURBUS "+this.id+":"].concat(t.call(arguments))):void 0},e.prototype._setupEvents=function(){return this.$el.on("depart.tourbus",i.proxy(this.depart,this)),this.$el.on("stop.tourbus",i.proxy(this.stop,this)),this.$el.on("next.tourbus",i.proxy(this.next,this)),this.$el.on("prev.tourbus",i.proxy(this.prev,this))},e.prototype._teardownEvents=function(){return this.$el.off(".tourbus")},e}(),o=function(){function t(t){if(this.bus=t.bus,this.rawData=t.rawData,this.content=t.content,this.index=t.index,this.options=t,this.$target=i(t.target),0===this.$target.length)throw""+this.$target.selector+" is not an element!";this._setupOptions(),this._configureElement(),this._configureTarget(),this._configureScroll(),this._setupEvents(),this.bus._log("leg "+this.index+" made with options",this.options)}return t.prototype.render=function(){var t,i;return t="centered"===this.options.orientation?"":"tourbus-arrow",this.$el.addClass(" "+t+" tourbus-arrow-"+this.options.orientation+" "),i="
\n "+this.content+"\n
",this.$el.css({width:this.options.width}).html(i),this},t.prototype.destroy=function(){return this.$el.remove(),this._teardownEvents()},t.prototype.reposition=function(){return this._configureTarget(),this._position()},t.prototype._position=function(){var t,i,e,o;return"centered"!==this.options.orientation&&(e={},i={top:"left",bottom:"left",left:"top",right:"top"},"number"==typeof this.options.arrow&&(this.options.arrow+="px"),e[i[this.options.orientation]]=this.options.arrow,o="#"+this.id+".tourbus-arrow",this.bus._log("adding rule for "+this.id,e),h(""+o+":before, "+o+":after",e)),t=this._offsets(),this.bus._log("setting offsets on leg",t),this.$el.css(t)},t.prototype.show=function(){return this.$el.css({visibility:"visible",opacity:1,zIndex:9999}),this.scrollIntoView()},t.prototype.hide=function(){return this.bus.options.debug?this.$el.css({visibility:"visible",opacity:.4,zIndex:0}):this.$el.css({visibility:"hidden"})},t.prototype.scrollIntoView=function(){var t;if(this.willScroll)return t=a(this.options.scrollTo,this.$el),this.bus._log("scrolling to",t,this.scrollSettings),i.scrollTo(t,this.scrollSettings)},t.prototype._setupOptions=function(){var t;return t=this.bus.options.leg,this.options.top=a(this.rawData.top,t.top),this.options.left=a(this.rawData.left,t.left),this.options.scrollTo=a(this.rawData.scrollTo,t.scrollTo),this.options.scrollSpeed=a(this.rawData.scrollSpeed,t.scrollSpeed),this.options.scrollContext=a(this.rawData.scrollContext,t.scrollContext),this.options.margin=a(this.rawData.margin,t.margin),this.options.arrow=this.rawData.arrow||t.arrow,this.options.align=this.rawData.align||t.align,this.options.width=this.rawData.width||t.width,this.options.orientation=this.rawData.orientation||t.orientation},t.prototype._configureElement=function(){return this.id="tourbus-leg-id-"+this.bus.id+"-"+this.options.index,this.$el=i("
"),this.el=this.$el[0],this.$el.attr({id:this.id}),this.$el.css({zIndex:9999})},t.prototype._setupEvents=function(){return this.$el.on("click",".tourbus-next",i.proxy(this.bus.next,this.bus)),this.$el.on("click",".tourbus-prev",i.proxy(this.bus.prev,this.bus)),this.$el.on("click",".tourbus-stop",i.proxy(this.bus.stop,this.bus))},t.prototype._teardownEvents=function(){return this.$el.off("click")},t.prototype._configureTarget=function(){return this.targetOffset=this.$target.offset(),a(this.options.top,!1)&&(this.targetOffset.top=this.options.top),a(this.options.left,!1)&&(this.targetOffset.left=this.options.left),this.targetWidth=this.$target.outerWidth(),this.targetHeight=this.$target.outerHeight()},t.prototype._configureScroll=function(){return this.willScroll=i.fn.scrollTo&&this.options.scrollTo!==!1,this.scrollSettings={offset:-this.options.scrollContext,easing:"linear",axis:"y",duration:this.options.scrollSpeed}},t.prototype._offsets=function(){var t,e,o,s,n,r,h,l;switch(o=this.$el.height(),s=this.$el.width(),n={},this.options.orientation){case"centered":h=i(window).height(),n.top=this.options.top,a(n.top,!1)||(n.top=h/2-o/2),n.left=this.targetWidth/2-s/2;break;case"left":n.top=this.targetOffset.top,n.left=this.targetOffset.left-s-this.options.margin;break;case"right":n.top=this.targetOffset.top,n.left=this.targetOffset.left+this.targetWidth+this.options.margin;break;case"top":n.top=this.targetOffset.top-o-this.options.margin,n.left=this.targetOffset.left;break;case"bottom":n.top=this.targetOffset.top+this.targetHeight+this.options.margin,n.left=this.targetOffset.left}if(l={top:["left","right"],bottom:["left","right"],left:["top","bottom"],right:["top","bottom"]},p(this.options.orientation,l[this.options.align]))switch(this.options.align){case"right":n.left+=this.targetWidth-s;break;case"bottom":n.top+=this.targetHeight-o}else"center"===this.options.align&&(p(this.options.orientation,l.left)?(r=this.targetWidth/2,e=s/2,t="left"):(r=this.targetHeight/2,e=o/2,t="top"),r>e?n[t]+=r-e:n[t]-=e-r);return n},t}(),c=0,r=function(){return c++},u={},l=function(){var t;return t=function(t,i,e){e.prototype=t.prototype;var o=new e,s=t.apply(o,i);return Object(s)===s?s:o}(e,arguments,function(){}),u[t.id]=t,t},a=function(t,i){return null===t||t===void 0?i:t},p=function(t,e){return-1!==i.inArray(t,e||[])},h=function(t){var e;return t.type="text/css",document.getElementsByTagName("head")[0].appendChild(t),e=document.styleSheets[document.styleSheets.length-1],function(t,o){var s,n;n=i.map(function(){var t;t=[];for(s in o)t.push(s);return t}(),function(t){return""+t+":"+o[t]}).join(";");try{e.insertRule?e.insertRule(""+t+" { "+n+" }",(e.cssRules||e.rules).length):e.addRule(t,n)}catch(r){}}}(document.createElement("style"))})(jQuery)}).call(this); \ No newline at end of file diff --git a/www/js/libs/jquery.cookie.js b/www/js/libs/jquery.cookie.js new file mode 100755 index 0000000..68db832 --- /dev/null +++ b/www/js/libs/jquery.cookie.js @@ -0,0 +1,72 @@ +/*jshint eqnull:true */ +/*! + * jQuery Cookie Plugin v1.2 + * https://github.com/carhartl/jquery-cookie + * + * Copyright 2011, Klaus Hartl + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://www.opensource.org/licenses/mit-license.php + * http://www.opensource.org/licenses/GPL-2.0 + */ +(function ($, document, undefined) { + + var pluses = /\+/g; + + function raw(s) { + return s; + } + + function decoded(s) { + return decodeURIComponent(s.replace(pluses, ' ')); + } + + $.cookie = function (key, value, options) { + + // key and at least value given, set cookie... + if (value !== undefined && !/Object/.test(Object.prototype.toString.call(value))) { + options = $.extend({}, $.cookie.defaults, options); + + if (value === null) { + options.expires = -1; + } + + if (typeof options.expires === 'number') { + var days = options.expires, t = options.expires = new Date(); + t.setDate(t.getDate() + days); + } + + value = String(value); + + return (document.cookie = [ + encodeURIComponent(key), '=', options.raw ? value : encodeURIComponent(value), + options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE + options.path ? '; path=' + options.path : '', + options.domain ? '; domain=' + options.domain : '', + options.secure ? '; secure' : '' + ].join('')); + } + + // key and possibly options given, get cookie... + options = value || $.cookie.defaults || {}; + var decode = options.raw ? raw : decoded; + var cookies = document.cookie.split('; '); + for (var i = 0, parts; (parts = cookies[i] && cookies[i].split('=')); i++) { + if (decode(parts.shift()) === key) { + return decode(parts.join('=')); + } + } + + return null; + }; + + $.cookie.defaults = {}; + + $.removeCookie = function (key, options) { + if ($.cookie(key, options) !== null) { + $.cookie(key, null, options); + return true; + } + return false; + }; + +})(jQuery, document); \ No newline at end of file From df983302592ff887e395d6e7c14b494cba8fd327 Mon Sep 17 00:00:00 2001 From: Adriaan Wormgoor Date: Tue, 22 Oct 2013 16:54:10 +0200 Subject: [PATCH 10/13] - some more files w.r.t. help - fixed issue #3 https://github.com/Doodle3D/doodle3d-client/issues/3 --- less/base.less | 2 - less/jquery-tourbus.less | 144 +++++++++++++++++++++++++++++++ less/settingsPopup.less | 1 + less/styles.less | 2 + www/css/settings.min.css | 2 +- www/css/styles.css | 180 +++++++++++++++++++++++++++++++++++++++ www/css/styles.min.css | 2 +- 7 files changed, 329 insertions(+), 4 deletions(-) create mode 100644 less/jquery-tourbus.less diff --git a/less/base.less b/less/base.less index d368906..1d5c12f 100644 --- a/less/base.less +++ b/less/base.less @@ -6,8 +6,6 @@ body { background-color: #fcfcfc; user-select: none; /* disable cut copy paste */ -// -moz-user-select: none; /* disable cut copy paste */ -// -webkit-user-select: none; /* disable cut copy paste */ overflow:hidden; /* This chops off any overhanging divs */ } img { diff --git a/less/jquery-tourbus.less b/less/jquery-tourbus.less new file mode 100644 index 0000000..84825b4 --- /dev/null +++ b/less/jquery-tourbus.less @@ -0,0 +1,144 @@ +/* Tourbus leg definitions element */ +.tourbus-legs { + display: none; +} +/* Container for tourbus leg */ +.tourbus-leg { + position: absolute; + visibility: hidden; + top: 0; + border: 1px solid #E5E5E5; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.45); + border-radius: 4px; + background: white; +} +/* Interior of leg, clearfixed */ +.tourbus-leg-inner { + padding: 20px; + position: relative; + zoom: 1; +} +.tourbus-leg-inner:before, +.tourbus-leg-inner:after { + content: "\0020"; + display: block; + height: 0; + overflow: hidden; +} +.tourbus-leg-inner:after { + clear: both; +} + +.prevnextBtn { + border: 1px solid #8e8e8e; + color: #252525; + border-radius: 4px; + padding: 4px 8px; + background-color: #eaeaea; + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.7); + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.7); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.7); + margin-right: 8px; +} +/* + remove top padding/margin on headings + because the interior of the leg has padding +*/ +.tourbus-leg h1, +.tourbus-leg h2, +.tourbus-leg h3, +.tourbus-leg h4, +.tourbus-leg h5, +.tourbus-leg h6 { + margin-top: 0; + padding-top: 0; +} +/* Tourbus leg arrow */ +.tourbus-arrow:before, +.tourbus-arrow:after { + border: solid rgba(0, 0, 0, 0); + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border-color: transparent; +} +/* set the :after to be the _interior_ size of the arrow */ +/* set the :before to be the _interior + desired border width_ */ +.tourbus-arrow:after { + border-width: 14px; +} +.tourbus-arrow:before { + border-width: 16px; +} +/* Arrow background and border colors */ +/* + change margin-top/left values here to + match the border width for :after above + + border colors here are for the _interior_ of the arrow +*/ +.tourbus-arrow-right:after { + border-right-color: #ffffff; + margin-top: -14px; + top: 50%; +} +.tourbus-arrow-left:after { + border-left-color: #ffffff; + margin-top: -14px; + top: 50%; +} +.tourbus-arrow-bottom:after { + border-bottom-color: #ffffff; + margin-left: -14px; + left: 50%; +} +.tourbus-arrow-top:after { + border-top-color: #ffffff; + margin-left: -14px; + left: 50%; +} +/* + change margin-top/left values here to + match the border width for :before above + + border colors here are for the _border_ of the arrow +*/ +.tourbus-arrow-right:before { + border-right-color: #e5e5e5; + margin-top: -16px; + top: 50%; +} +.tourbus-arrow-left:before { + border-left-color: #e5e5e5; + margin-top: -16px; + top: 50%; +} +.tourbus-arrow-bottom:before { + border-bottom-color: #e5e5e5; + margin-left: -16px; + left: 50%; +} +.tourbus-arrow-top:before { + border-top-color: #e5e5e5; + margin-left: -16px; + left: 50%; +} +/* you shouldn't need to change these */ +.tourbus-arrow-right:after, +.tourbus-arrow-right:before { + right: 100%; +} +.tourbus-arrow-left:after, +.tourbus-arrow-left:before { + left: 100%; +} +.tourbus-arrow-bottom:after, +.tourbus-arrow-bottom:before { + bottom: 100%; +} +.tourbus-arrow-top:after, +.tourbus-arrow-top:before { + top: 100%; +} diff --git a/less/settingsPopup.less b/less/settingsPopup.less index ed02367..cb6ae90 100644 --- a/less/settingsPopup.less +++ b/less/settingsPopup.less @@ -14,6 +14,7 @@ width: 100%; height: 100%; display:none; + user-select: text; #settings { background-color: #fff; diff --git a/less/styles.less b/less/styles.less index bfaef91..e403b0e 100644 --- a/less/styles.less +++ b/less/styles.less @@ -23,3 +23,5 @@ @media only screen and (orientation:portrait) { @import "portrait.less"; } + +@import "jquery-tourbus.less"; diff --git a/www/css/settings.min.css b/www/css/settings.min.css index 719024d..11ea3a1 100644 --- a/www/css/settings.min.css +++ b/www/css/settings.min.css @@ -1 +1 @@ -form{margin:10px;max-width:600px}form input{margin:1px}body,th,td{font-family:Helvetica,Arial,"Nimbus Sans L",sans-serif;font-size:13px}.settingsContainer{position:relative;width:100%;height:100%}form fieldset{max-width:600px;border:1px solid #bbb;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;margin-bottom:20px;padding:8px}form fieldset fieldset{max-width:580px;margin:15px 0 5px;clear:left;float:left}form fieldset legend{margin-left:10px;font-weight:700}form label{min-width:150px;display:block;float:left;margin:1px 0 0;clear:left}form div{float:left}form input[type=text],form input[type=number],form input[type=password]{border:1px solid #90c0ff;margin-right:5px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}form input[type=text].small,form input[type=number].small,form input[type=password].small{width:50px}form input[type=text].large,form input[type=number].large,form input[type=password].large{width:250px}form input[type=radio]{margin:4px 4px 0 0}form textarea{border:1px solid #90c0ff;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}form .startgcode_left{float:left;margin-right:20px}form textarea.gcode{width:252px;height:150px}form small{margin:3px 0 0;display:block;clear:left}form .button{display:inline-block}form #passwordLabel,form #password{display:none}form input.error,form textarea.error,form select.error{border:red solid 2px}form .errorMsg{color:red;margin:0 0 0 1em} \ No newline at end of file +form{margin:10px;max-width:600px}form input{margin:1px}body,th,td{font-family:Helvetica,Arial,"Nimbus Sans L",sans-serif;font-size:13px}.settingsContainer{position:relative;width:100%;height:100%}form fieldset{max-width:600px;border:1px solid #bbb;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;margin-bottom:20px;padding:8px}form fieldset fieldset{max-width:580px;margin:15px 0 5px;clear:left;float:left}form fieldset legend{margin-left:10px;font-weight:700}form label{min-width:150px;display:block;float:left;margin:1px 0 0;clear:left}form div{float:left}form input[type=text],form input[type=number],form input[type=password]{border:1px solid #90c0ff;margin-right:5px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}form input[type=text].small,form input[type=number].small,form input[type=password].small{width:50px}form input[type=text].large,form input[type=number].large,form input[type=password].large{width:250px}form input[type=radio]{margin:4px 4px 0 0}form textarea{border:1px solid #90c0ff;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}form .startgcode_left{float:left;margin-right:20px}form textarea.gcode{width:252px;height:150px}form small{margin:3px 0 0;display:block;clear:left}form .button{display:inline-block}form #passwordLabel,form #password{display:none}form input.error,form textarea.error,form select.error{border:red solid 2px}form .errorMsg{color:red;margin:0 0 0 1em}form dl dt{float:left;font-style:italic;width:10em} \ No newline at end of file diff --git a/www/css/styles.css b/www/css/styles.css index a95a968..a9948b9 100644 --- a/www/css/styles.css +++ b/www/css/styles.css @@ -573,6 +573,10 @@ img { width: 100%; height: 100%; display: none; + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; } #contentOverlay #settings { @@ -875,4 +879,180 @@ img { width: auto; /* for ie9 */ } +} + +/* Tourbus leg definitions element */ + +.tourbus-legs { + display: none; +} + +/* Container for tourbus leg */ + +.tourbus-leg { + position: absolute; + visibility: hidden; + top: 0; + border: 1px solid #E5E5E5; + -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.45); + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.45); + border-radius: 4px; + background: white; +} + +/* Interior of leg, clearfixed */ + +.tourbus-leg-inner { + padding: 20px; + position: relative; + zoom: 1; +} + +.tourbus-leg-inner:before, +.tourbus-leg-inner:after { + content: "\0020"; + display: block; + height: 0; + overflow: hidden; +} + +.tourbus-leg-inner:after { + clear: both; +} + +.prevnextBtn { + border: 1px solid #8e8e8e; + color: #252525; + border-radius: 4px; + padding: 4px 8px; + background-color: #eaeaea; + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.7); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.7); + margin-right: 8px; +} + +/* + remove top padding/margin on headings + because the interior of the leg has padding +*/ + +.tourbus-leg h1, +.tourbus-leg h2, +.tourbus-leg h3, +.tourbus-leg h4, +.tourbus-leg h5, +.tourbus-leg h6 { + margin-top: 0; + padding-top: 0; +} + +/* Tourbus leg arrow */ + +.tourbus-arrow:before, +.tourbus-arrow:after { + border: solid rgba(0, 0, 0, 0); + content: " "; + height: 0; + width: 0; + position: absolute; + pointer-events: none; + border-color: transparent; +} + +/* set the :after to be the _interior_ size of the arrow */ + +/* set the :before to be the _interior + desired border width_ */ + +.tourbus-arrow:after { + border-width: 14px; +} + +.tourbus-arrow:before { + border-width: 16px; +} + +/* Arrow background and border colors */ + +/* + change margin-top/left values here to + match the border width for :after above + + border colors here are for the _interior_ of the arrow +*/ + +.tourbus-arrow-right:after { + border-right-color: #ffffff; + margin-top: -14px; + top: 50%; +} + +.tourbus-arrow-left:after { + border-left-color: #ffffff; + margin-top: -14px; + top: 50%; +} + +.tourbus-arrow-bottom:after { + border-bottom-color: #ffffff; + margin-left: -14px; + left: 50%; +} + +.tourbus-arrow-top:after { + border-top-color: #ffffff; + margin-left: -14px; + left: 50%; +} + +/* + change margin-top/left values here to + match the border width for :before above + + border colors here are for the _border_ of the arrow +*/ + +.tourbus-arrow-right:before { + border-right-color: #e5e5e5; + margin-top: -16px; + top: 50%; +} + +.tourbus-arrow-left:before { + border-left-color: #e5e5e5; + margin-top: -16px; + top: 50%; +} + +.tourbus-arrow-bottom:before { + border-bottom-color: #e5e5e5; + margin-left: -16px; + left: 50%; +} + +.tourbus-arrow-top:before { + border-top-color: #e5e5e5; + margin-left: -16px; + left: 50%; +} + +/* you shouldn't need to change these */ + +.tourbus-arrow-right:after, +.tourbus-arrow-right:before { + right: 100%; +} + +.tourbus-arrow-left:after, +.tourbus-arrow-left:before { + left: 100%; +} + +.tourbus-arrow-bottom:after, +.tourbus-arrow-bottom:before { + bottom: 100%; +} + +.tourbus-arrow-top:after, +.tourbus-arrow-top:before { + top: 100%; } \ No newline at end of file diff --git a/www/css/styles.min.css b/www/css/styles.min.css index 8590541..5a472a6 100644 --- a/www/css/styles.min.css +++ b/www/css/styles.min.css @@ -1 +1 @@ -body{background-color:#fcfcfc;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden}img{z-index:5}.btn{background-repeat:no-repeat;cursor:pointer}#landscape{position:absolute;background-color:#fff;width:100%;max-width:1024px;max-height:768px;top:0;bottom:0;left:0;right:0;z-index:5;overflow:hidden;margin:0 auto;outline:2px solid #5e8c71;-webkit-box-shadow:0 0 8px rgba(8,8,8,.25);box-shadow:0 0 8px rgba(8,8,8,.25)}#portrait{display:none}.bgContainer{position:absolute;width:100%;height:100%;overflow:hidden}.bgTop,.bgMiddle,.bgBottom{opacity:1;-webkit-transition:opacity .35s linear;transition:opacity .35s linear;position:absolute;left:0;z-index:-5}.bgTop{top:0}.bgMiddle{top:30%}.bgBottom{bottom:0}.centerpanel{position:absolute;left:50%;margin-left:-33%;width:66%;height:100%;z-index:5}.logopanel{height:25%}.d3dlogo{position:relative;top:15%;width:100%;height:100%;margin:0 auto;max-width:399px;height:139px;background:url(../img/logo/logo_full.png) no-repeat center center;cursor:pointer}#verticalShapes{position:absolute;right:0;bottom:15px;margin-right:-8.5%;width:8%}#verticalShapes>div{border:2px solid #333;border-radius:0 5px 5px 0;margin-top:4px;background-color:#fff;cursor:pointer}#verticalShapes>div img.verticalshape{width:100%;max-width:50px;height:auto;vertical-align:bottom}.drawareacontainer{position:relative;width:100%;height:65%;background-color:#fff;border:4px solid #000;border-radius:15px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;z-index:15}#canvasContainers{position:absolute;top:0;bottom:0;left:0;right:0;width:100%;height:100%;padding:0;margin:0}#mycanvasContainer{position:absolute;top:0;left:0;width:78%;height:100%}#mycanvas{width:100%;height:100%;margin:0;padding:0;border-right:2px solid #333}#previewContainer{position:absolute;top:0;right:0;width:22%;height:100%}#preview{min-width:50px;width:100%;height:100%;margin:0;padding:0}#preview_tmp{position:absolute;top:0;left:0;z-index:500;border:1px solid #f80;display:none}.bottompanel{position:relative;bottom:0;width:100%;height:10%}.manipulationBtns{margin:2px 5px;position:absolute;right:0;top:0;max-width:340px;max-height:70px;width:45%}.manipulationBtn{width:45%;height:auto;cursor:pointer}#btnsUpDown{float:left;width:45%}#btnsUpDown>div{float:left;padding-right:8px;background-repeat:no-repeat}#btnsTurnLeftRight{float:right;width:45%}#btnsTurnLeftRight>div{float:left;padding-right:8px;background-repeat:no-repeat}#btnMoveUp{max-width:65px}#btnMoveDown{max-width:64px}#btnTwistLeft{max-width:59px}#btnTwistRight{max-width:64px}@media screen and (max-height:700px){.logopanel{height:22%}.doodlecontainer{height:68%}.d3dlogo{top:25%;max-width:399px;height:74px;background-image:url(../img/logo/logo_small.png)}}@media screen and (max-height:655px){.bgMiddle{opacity:0}}@media screen and (max-height:525px){.d3dlogo{top:20%;height:57px;max-width:307px;background-image:url(../img/logo/logo_smaller.png)}}@media screen and (max-height:375px){.d3dlogo{height:40px;max-width:216px;background-image:url(../img/logo/logo_smallest.png)}}.leftpanel{position:absolute;width:17%;top:0;left:0;bottom:0}.btnNew{margin:5% 0 1% 5%;width:100%;max-width:180px;height:auto}.btnsPrevNext{margin:1% 7%;max-width:160px}.btnPrevious{width:40%;max-width:56px;height:auto}.btnNext{width:40%;max-width:56px;height:auto;float:right}.btnSave{margin:5% 5% 1%;width:90%;max-width:144px;height:auto}.btnOops{margin:5% 5% 1%;width:90%;max-width:144px;height:auto}.rightpanel{position:absolute;width:17%;top:0;right:0;bottom:0}.btnPrint{margin:1% 5% 5% 0;width:100%;max-width:163px;height:auto;float:right}.btnStop{margin:5% 10% 1% 5%;float:right;width:90%;max-width:98px;height:auto}.btnsSettingsInfo{position:absolute;bottom:25px;right:5px;width:80%;margin:1% 5%;max-width:160px}.btnInfo{width:40%;max-width:53px;height:auto}.btnSettings{width:40%;max-width:53px;height:auto;float:right}.progressbarAppear{right:-.5%!important}.thermometerAppear{right:-6.5%!important}.progressbarCanvasContainerParent{position:relative;width:100%}#progressbarCanvasContainer{position:relative;width:50%;float:right;border:solid #000;border-width:2px 0 2px 2px;border-radius:15px 0 0 15px;padding:5px;background-color:#fff;-webkit-box-shadow:0 2px 5px rgba(37,37,37,.35);box-shadow:0 2px 5px rgba(37,37,37,.35);-webkit-transition:right .4s cubic-bezier(0.68,-.55,.265,1.55);transition:right .4s cubic-bezier(0.68,-.55,.265,1.55);right:-60%;margin:5% 0}#progressbarCanvas{top:0;right:0;bottom:0;left:0;width:100%;height:auto;background-color:#fff}.thermometerContainerParent{position:relative;width:100%;padding-top:10px}#thermometerContainer{position:relative;width:45%;float:right;background-color:#fff;border:solid #000;border-width:2px 0 2px 2px;border-radius:15px 0 0 15px;padding:5px;-webkit-box-shadow:0 2px 5px rgba(37,37,37,.35);box-shadow:0 2px 5px rgba(37,37,37,.35);-webkit-transition:right .5s cubic-bezier(0.68,-.55,.265,1.55);transition:right .5s cubic-bezier(0.68,-.55,.265,1.55);right:-55%}#thermometerCanvas{top:0;right:0;bottom:0;left:0;width:100%;height:auto;background-color:#fff}.disabled{opacity:.3;cursor:default}#btnStop.disabled{display:none}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.clearfix{*zoom:1}#contentOverlay{background-color:rgba(255,255,255,.65);z-index:20;position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;display:none}#contentOverlay #settings{background-color:#fff;position:absolute;top:0;left:0;right:0;bottom:0;z-index:15;max-width:775px;max-height:540px;width:80%;height:75%;margin:7% 8%;-webkit-box-shadow:0 2px 6px 0 rgba(16,16,16,.65);box-shadow:0 2px 6px 0 rgba(16,16,16,.65);border:2px solid #222;border-radius:15px;padding:2%}#contentOverlay #settings .toppanel{height:10%}#contentOverlay #settings .toppanel .settingsLabelContainer{width:100%;height:auto;margin-bottom:1%}#contentOverlay #settings .toppanel .settingsLabelContainer .settingsLabelImg{width:45%;max-width:373px;height:auto}#contentOverlay #settings .bottompanel{width:100%;height:90%}#contentOverlay #settings .bottompanel>.settingsContainer{float:left;width:83%;height:98%;margin:.5%;overflow-y:scroll;overflow-x:hidden;border:1px solid #bbb;border-radius:5px}#contentOverlay #settings .bottompanel>.btnContainer{width:15%;height:100%;float:right;position:relative;right:0}#contentOverlay #settings .bottompanel>.btnContainer>.btnOK{position:absolute;bottom:3%;right:7%;max-width:85px;min-width:42px;width:88%;height:auto;margin:0 2% 2% 0;cursor:pointer}#message{position:absolute;top:0;right:0;padding:.4em .5em;border-radius:0 0 0 10px;border:2px solid #333;border-width:0 0 2px 2px;font-weight:700;-webkit-box-shadow:0 2px 6px 0 rgba(16,16,16,.65);box-shadow:0 2px 6px 0 rgba(16,16,16,.65);color:#333;white-space:nowrap;display:none}#message.error{background:#EB313C;color:#fff}#message.warning{background:#E9A86E}#message.notice{background:#93CAF4}#message.info{background:#97DD8A}@media only screen and (max-width:480px),only screen and (max-width:720px) and (min-device-pixel-ratio:1.5),only screen and (max-width:720px) and (-webkit-min-device-pixel-ratio:1.5){.centerpanel{left:0;margin-left:0;width:100%}.logopanel{height:40px}.d3dlogo{top:0;height:40px;max-width:216px;background-image:url(../img/logo/logo_smallest.png)}.drawareacontainer{height:70%}.bottompanel{height:10%}.bottompanel .manipulationBtns{margin:2px -27;right:22%;width:38%}.leftpanel{width:100px;background-color:#fff;z-index:50;-webkit-transition:left .3s ease-out;transition:left .3s ease-out}.hideleft{left:-101px}.shadowright{-webkit-box-shadow:2px 0 4px rgba(42,42,41,.6);box-shadow:2px 0 4px rgba(42,42,41,.6)}.btnNew{margin:5% 5% 1%;width:90%}.btnSave{margin-left:9%;width:75%}.btnOops{margin-left:6%;width:71%}.rightpanel{width:100px;background-color:#fff;z-index:50;-webkit-transition:right .3s ease-out;transition:right .3s ease-out}.hideright{right:-101px}.shadowleft{-webkit-box-shadow:-2px 0 4px rgba(42,42,41,.6);box-shadow:-2px 0 4px rgba(42,42,41,.6)}.btnPrint{margin:1% 5% 5%;width:90%}.btnStop{margin:5% 6% 1% 5%;width:70%}.sidebutton{display:block;position:absolute;top:40px;width:25px;height:38px;border:1px solid #808;background:url(../img/arrows.png) no-repeat;background-color:#eee;cursor:pointer}.sidebutton:active{background-color:#aaa}.leftpanel .sidebutton{right:-27px;background-position:0 0}.rightpanel .sidebutton{left:-27px;background-position:-25px 0}.sidebuttonin:active{background-color:#888}.leftpanel .sidebuttonin{background-color:#ccc;background-position:-25px 0}.rightpanel .sidebuttonin{background-color:#ccc;background-position:0 0}#contentOverlay{z-index:200}#contentOverlay #settings{width:87%;height:82%;margin:6% 4%}#contentOverlay #settings>.right{width:14%}}@media only screen and (min-width:1000px) and (max-device-pixel-ratio:1.5),only screen and (min-width:1000px) and (-webkit-max-device-pixel-ratio:1.5){}@media only screen and (orientation:portrait){#landscape{display:none}#portrait{display:block}.vertImage{margin:0;padding:0;max-width:100%;height:auto;width:auto}} \ No newline at end of file +body{background-color:#fcfcfc;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden}img{z-index:5}.btn{background-repeat:no-repeat;cursor:pointer}#landscape{position:absolute;background-color:#fff;width:100%;max-width:1024px;max-height:768px;top:0;bottom:0;left:0;right:0;z-index:5;overflow:hidden;margin:0 auto;outline:2px solid #5e8c71;-webkit-box-shadow:0 0 8px rgba(8,8,8,.25);box-shadow:0 0 8px rgba(8,8,8,.25)}#portrait{display:none}.bgContainer{position:absolute;width:100%;height:100%;overflow:hidden}.bgTop,.bgMiddle,.bgBottom{opacity:1;-webkit-transition:opacity .35s linear;transition:opacity .35s linear;position:absolute;left:0;z-index:-5}.bgTop{top:0}.bgMiddle{top:30%}.bgBottom{bottom:0}.centerpanel{position:absolute;left:50%;margin-left:-33%;width:66%;height:100%;z-index:5}.logopanel{height:25%}.d3dlogo{position:relative;top:15%;width:100%;height:100%;margin:0 auto;max-width:399px;height:139px;background:url(../img/logo/logo_full.png) no-repeat center center;cursor:pointer}#verticalShapes{position:absolute;right:0;bottom:15px;margin-right:-8.5%;width:8%}#verticalShapes>div{border:2px solid #333;border-radius:0 5px 5px 0;margin-top:4px;background-color:#fff;cursor:pointer}#verticalShapes>div img.verticalshape{width:100%;max-width:50px;height:auto;vertical-align:bottom}.drawareacontainer{position:relative;width:100%;height:65%;background-color:#fff;border:4px solid #000;border-radius:15px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;z-index:15}#canvasContainers{position:absolute;top:0;bottom:0;left:0;right:0;width:100%;height:100%;padding:0;margin:0}#mycanvasContainer{position:absolute;top:0;left:0;width:78%;height:100%}#mycanvas{width:100%;height:100%;margin:0;padding:0;border-right:2px solid #333}#previewContainer{position:absolute;top:0;right:0;width:22%;height:100%}#preview{min-width:50px;width:100%;height:100%;margin:0;padding:0}#preview_tmp{position:absolute;top:0;left:0;z-index:500;border:1px solid #f80;display:none}.bottompanel{position:relative;bottom:0;width:100%;height:10%}.manipulationBtns{margin:2px 5px;position:absolute;right:0;top:0;max-width:340px;max-height:70px;width:45%}.manipulationBtn{width:45%;height:auto;cursor:pointer}#btnsUpDown{float:left;width:45%}#btnsUpDown>div{float:left;padding-right:8px;background-repeat:no-repeat}#btnsTurnLeftRight{float:right;width:45%}#btnsTurnLeftRight>div{float:left;padding-right:8px;background-repeat:no-repeat}#btnMoveUp{max-width:65px}#btnMoveDown{max-width:64px}#btnTwistLeft{max-width:59px}#btnTwistRight{max-width:64px}@media screen and (max-height:700px){.logopanel{height:22%}.doodlecontainer{height:68%}.d3dlogo{top:25%;max-width:399px;height:74px;background-image:url(../img/logo/logo_small.png)}}@media screen and (max-height:655px){.bgMiddle{opacity:0}}@media screen and (max-height:525px){.d3dlogo{top:20%;height:57px;max-width:307px;background-image:url(../img/logo/logo_smaller.png)}}@media screen and (max-height:375px){.d3dlogo{height:40px;max-width:216px;background-image:url(../img/logo/logo_smallest.png)}}.leftpanel{position:absolute;width:17%;top:0;left:0;bottom:0}.btnNew{margin:5% 0 1% 5%;width:100%;max-width:180px;height:auto}.btnsPrevNext{margin:1% 7%;max-width:160px}.btnPrevious{width:40%;max-width:56px;height:auto}.btnNext{width:40%;max-width:56px;height:auto;float:right}.btnSave{margin:5% 5% 1%;width:90%;max-width:144px;height:auto}.btnOops{margin:5% 5% 1%;width:90%;max-width:144px;height:auto}.rightpanel{position:absolute;width:17%;top:0;right:0;bottom:0}.btnPrint{margin:1% 5% 5% 0;width:100%;max-width:163px;height:auto;float:right}.btnStop{margin:5% 10% 1% 5%;float:right;width:90%;max-width:98px;height:auto}.btnsSettingsInfo{position:absolute;bottom:25px;right:5px;width:80%;margin:1% 5%;max-width:160px}.btnInfo{width:40%;max-width:53px;height:auto}.btnSettings{width:40%;max-width:53px;height:auto;float:right}.progressbarAppear{right:-.5%!important}.thermometerAppear{right:-6.5%!important}.progressbarCanvasContainerParent{position:relative;width:100%}#progressbarCanvasContainer{position:relative;width:50%;float:right;border:solid #000;border-width:2px 0 2px 2px;border-radius:15px 0 0 15px;padding:5px;background-color:#fff;-webkit-box-shadow:0 2px 5px rgba(37,37,37,.35);box-shadow:0 2px 5px rgba(37,37,37,.35);-webkit-transition:right .4s cubic-bezier(0.68,-.55,.265,1.55);transition:right .4s cubic-bezier(0.68,-.55,.265,1.55);right:-60%;margin:5% 0}#progressbarCanvas{top:0;right:0;bottom:0;left:0;width:100%;height:auto;background-color:#fff}.thermometerContainerParent{position:relative;width:100%;padding-top:10px}#thermometerContainer{position:relative;width:45%;float:right;background-color:#fff;border:solid #000;border-width:2px 0 2px 2px;border-radius:15px 0 0 15px;padding:5px;-webkit-box-shadow:0 2px 5px rgba(37,37,37,.35);box-shadow:0 2px 5px rgba(37,37,37,.35);-webkit-transition:right .5s cubic-bezier(0.68,-.55,.265,1.55);transition:right .5s cubic-bezier(0.68,-.55,.265,1.55);right:-55%}#thermometerCanvas{top:0;right:0;bottom:0;left:0;width:100%;height:auto;background-color:#fff}.disabled{opacity:.3;cursor:default}#btnStop.disabled{display:none}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.clearfix{*zoom:1}#contentOverlay{background-color:rgba(255,255,255,.65);z-index:20;position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;display:none;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}#contentOverlay #settings{background-color:#fff;position:absolute;top:0;left:0;right:0;bottom:0;z-index:15;max-width:775px;max-height:540px;width:80%;height:75%;margin:7% 8%;-webkit-box-shadow:0 2px 6px 0 rgba(16,16,16,.65);box-shadow:0 2px 6px 0 rgba(16,16,16,.65);border:2px solid #222;border-radius:15px;padding:2%}#contentOverlay #settings .toppanel{height:10%}#contentOverlay #settings .toppanel .settingsLabelContainer{width:100%;height:auto;margin-bottom:1%}#contentOverlay #settings .toppanel .settingsLabelContainer .settingsLabelImg{width:45%;max-width:373px;height:auto}#contentOverlay #settings .bottompanel{width:100%;height:90%}#contentOverlay #settings .bottompanel>.settingsContainer{float:left;width:83%;height:98%;margin:.5%;overflow-y:scroll;overflow-x:hidden;border:1px solid #bbb;border-radius:5px}#contentOverlay #settings .bottompanel>.btnContainer{width:15%;height:100%;float:right;position:relative;right:0}#contentOverlay #settings .bottompanel>.btnContainer>.btnOK{position:absolute;bottom:3%;right:7%;max-width:85px;min-width:42px;width:88%;height:auto;margin:0 2% 2% 0;cursor:pointer}#message{position:absolute;top:0;right:0;padding:.4em .5em;border-radius:0 0 0 10px;border:2px solid #333;border-width:0 0 2px 2px;font-weight:700;-webkit-box-shadow:0 2px 6px 0 rgba(16,16,16,.65);box-shadow:0 2px 6px 0 rgba(16,16,16,.65);color:#333;white-space:nowrap;display:none}#message.error{background:#EB313C;color:#fff}#message.warning{background:#E9A86E}#message.notice{background:#93CAF4}#message.info{background:#97DD8A}@media only screen and (max-width:480px),only screen and (max-width:720px) and (min-device-pixel-ratio:1.5),only screen and (max-width:720px) and (-webkit-min-device-pixel-ratio:1.5){.centerpanel{left:0;margin-left:0;width:100%}.logopanel{height:40px}.d3dlogo{top:0;height:40px;max-width:216px;background-image:url(../img/logo/logo_smallest.png)}.drawareacontainer{height:70%}.bottompanel{height:10%}.bottompanel .manipulationBtns{margin:2px -27;right:22%;width:38%}.leftpanel{width:100px;background-color:#fff;z-index:50;-webkit-transition:left .3s ease-out;transition:left .3s ease-out}.hideleft{left:-101px}.shadowright{-webkit-box-shadow:2px 0 4px rgba(42,42,41,.6);box-shadow:2px 0 4px rgba(42,42,41,.6)}.btnNew{margin:5% 5% 1%;width:90%}.btnSave{margin-left:9%;width:75%}.btnOops{margin-left:6%;width:71%}.rightpanel{width:100px;background-color:#fff;z-index:50;-webkit-transition:right .3s ease-out;transition:right .3s ease-out}.hideright{right:-101px}.shadowleft{-webkit-box-shadow:-2px 0 4px rgba(42,42,41,.6);box-shadow:-2px 0 4px rgba(42,42,41,.6)}.btnPrint{margin:1% 5% 5%;width:90%}.btnStop{margin:5% 6% 1% 5%;width:70%}.sidebutton{display:block;position:absolute;top:40px;width:25px;height:38px;border:1px solid #808;background:url(../img/arrows.png) no-repeat;background-color:#eee;cursor:pointer}.sidebutton:active{background-color:#aaa}.leftpanel .sidebutton{right:-27px;background-position:0 0}.rightpanel .sidebutton{left:-27px;background-position:-25px 0}.sidebuttonin:active{background-color:#888}.leftpanel .sidebuttonin{background-color:#ccc;background-position:-25px 0}.rightpanel .sidebuttonin{background-color:#ccc;background-position:0 0}#contentOverlay{z-index:200}#contentOverlay #settings{width:87%;height:82%;margin:6% 4%}#contentOverlay #settings>.right{width:14%}}@media only screen and (min-width:1000px) and (max-device-pixel-ratio:1.5),only screen and (min-width:1000px) and (-webkit-max-device-pixel-ratio:1.5){}@media only screen and (orientation:portrait){#landscape{display:none}#portrait{display:block}.vertImage{margin:0;padding:0;max-width:100%;height:auto;width:auto}}.tourbus-legs{display:none}.tourbus-leg{position:absolute;visibility:hidden;top:0;border:1px solid #E5E5E5;-webkit-box-shadow:0 2px 5px rgba(0,0,0,.45);box-shadow:0 2px 5px rgba(0,0,0,.45);border-radius:4px;background:#fff}.tourbus-leg-inner{padding:20px;position:relative;zoom:1}.tourbus-leg-inner:before,.tourbus-leg-inner:after{content:"\0020";display:block;height:0;overflow:hidden}.tourbus-leg-inner:after{clear:both}.prevnextBtn{border:1px solid #8e8e8e;color:#252525;border-radius:4px;padding:4px 8px;background-color:#eaeaea;-webkit-box-shadow:0 0 3px rgba(0,0,0,.7);box-shadow:0 0 3px rgba(0,0,0,.7);margin-right:8px}.tourbus-leg h1,.tourbus-leg h2,.tourbus-leg h3,.tourbus-leg h4,.tourbus-leg h5,.tourbus-leg h6{margin-top:0;padding-top:0}.tourbus-arrow:before,.tourbus-arrow:after{border:solid rgba(0,0,0,0);content:" ";height:0;width:0;position:absolute;pointer-events:none;border-color:transparent}.tourbus-arrow:after{border-width:14px}.tourbus-arrow:before{border-width:16px}.tourbus-arrow-right:after{border-right-color:#fff;margin-top:-14px;top:50%}.tourbus-arrow-left:after{border-left-color:#fff;margin-top:-14px;top:50%}.tourbus-arrow-bottom:after{border-bottom-color:#fff;margin-left:-14px;left:50%}.tourbus-arrow-top:after{border-top-color:#fff;margin-left:-14px;left:50%}.tourbus-arrow-right:before{border-right-color:#e5e5e5;margin-top:-16px;top:50%}.tourbus-arrow-left:before{border-left-color:#e5e5e5;margin-top:-16px;top:50%}.tourbus-arrow-bottom:before{border-bottom-color:#e5e5e5;margin-left:-16px;left:50%}.tourbus-arrow-top:before{border-top-color:#e5e5e5;margin-left:-16px;left:50%}.tourbus-arrow-right:after,.tourbus-arrow-right:before{right:100%}.tourbus-arrow-left:after,.tourbus-arrow-left:before{left:100%}.tourbus-arrow-bottom:after,.tourbus-arrow-bottom:before{bottom:100%}.tourbus-arrow-top:after,.tourbus-arrow-top:before{top:100%} \ No newline at end of file From 7b44b52cddd1c200905798de454861844e88f84f Mon Sep 17 00:00:00 2001 From: Wouter R Date: Tue, 22 Oct 2013 17:39:44 +0200 Subject: [PATCH 11/13] Fix permissions. --- ___settings.html | 0 www/favicon.ico | Bin www/img/buttons/btnDown.png | Bin www/img/buttons/btnNew.png | Bin www/img/buttons/btnOk.png | Bin www/img/buttons/btnOops.png | Bin www/img/buttons/btnPrint.png | Bin www/img/buttons/btnSave.png | Bin www/img/buttons/btnStop.png | Bin www/img/buttons/btnTurnLeft.png | Bin www/img/buttons/btnUp.png | Bin www/img/buttons/btnZoomIn.png | Bin www/img/buttons/btnZoomOut.png | Bin www/index.html | 0 www/js/libs/jquery.cookie.js | 0 www/settings.html | 0 16 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 ___settings.html mode change 100755 => 100644 www/favicon.ico mode change 100755 => 100644 www/img/buttons/btnDown.png mode change 100755 => 100644 www/img/buttons/btnNew.png mode change 100755 => 100644 www/img/buttons/btnOk.png mode change 100755 => 100644 www/img/buttons/btnOops.png mode change 100755 => 100644 www/img/buttons/btnPrint.png mode change 100755 => 100644 www/img/buttons/btnSave.png mode change 100755 => 100644 www/img/buttons/btnStop.png mode change 100755 => 100644 www/img/buttons/btnTurnLeft.png mode change 100755 => 100644 www/img/buttons/btnUp.png mode change 100755 => 100644 www/img/buttons/btnZoomIn.png mode change 100755 => 100644 www/img/buttons/btnZoomOut.png mode change 100755 => 100644 www/index.html mode change 100755 => 100644 www/js/libs/jquery.cookie.js mode change 100755 => 100644 www/settings.html diff --git a/___settings.html b/___settings.html old mode 100755 new mode 100644 diff --git a/www/favicon.ico b/www/favicon.ico old mode 100755 new mode 100644 diff --git a/www/img/buttons/btnDown.png b/www/img/buttons/btnDown.png old mode 100755 new mode 100644 diff --git a/www/img/buttons/btnNew.png b/www/img/buttons/btnNew.png old mode 100755 new mode 100644 diff --git a/www/img/buttons/btnOk.png b/www/img/buttons/btnOk.png old mode 100755 new mode 100644 diff --git a/www/img/buttons/btnOops.png b/www/img/buttons/btnOops.png old mode 100755 new mode 100644 diff --git a/www/img/buttons/btnPrint.png b/www/img/buttons/btnPrint.png old mode 100755 new mode 100644 diff --git a/www/img/buttons/btnSave.png b/www/img/buttons/btnSave.png old mode 100755 new mode 100644 diff --git a/www/img/buttons/btnStop.png b/www/img/buttons/btnStop.png old mode 100755 new mode 100644 diff --git a/www/img/buttons/btnTurnLeft.png b/www/img/buttons/btnTurnLeft.png old mode 100755 new mode 100644 diff --git a/www/img/buttons/btnUp.png b/www/img/buttons/btnUp.png old mode 100755 new mode 100644 diff --git a/www/img/buttons/btnZoomIn.png b/www/img/buttons/btnZoomIn.png old mode 100755 new mode 100644 diff --git a/www/img/buttons/btnZoomOut.png b/www/img/buttons/btnZoomOut.png old mode 100755 new mode 100644 diff --git a/www/index.html b/www/index.html old mode 100755 new mode 100644 diff --git a/www/js/libs/jquery.cookie.js b/www/js/libs/jquery.cookie.js old mode 100755 new mode 100644 diff --git a/www/settings.html b/www/settings.html old mode 100755 new mode 100644 From 1f79986f5442bb00a56b82e3724cd020fce60462 Mon Sep 17 00:00:00 2001 From: Wouter R Date: Tue, 22 Oct 2013 18:23:29 +0200 Subject: [PATCH 12/13] Add openwrt package Makefile. Add short description of steps to build css and js files. --- Makefile | 64 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 14 +++++++++++- 2 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 Makefile diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..33b5598 --- /dev/null +++ b/Makefile @@ -0,0 +1,64 @@ +################################################ +# OpenWrt Makefile for Doodle3D Print3D driver # +################################################ +include $(TOPDIR)/rules.mk + +PKG_NAME := doodle3d-client +PKG_VERSION := 0.9.0 +PKG_RELEASE := 1 + +PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) + +include $(INCLUDE_DIR)/package.mk + +define Package/doodle3d-client + SECTION:=mods + CATEGORY:=Doodle3D + TITLE:=Doodle3D web client + DEPENDS:= +endef + +define Package/doodle3d-client/description + This package provides the Doodle3D web client, which interacts with the wifibox package using a REST API. +endef + +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) + $(CP) less $(PKG_BUILD_DIR)/ + $(CP) www $(PKG_BUILD_DIR)/ + $(CP) Gruntfile.js $(PKG_BUILD_DIR)/ + $(CP) README.md $(PKG_BUILD_DIR)/ + $(CP) ___settings.html $(PKG_BUILD_DIR)/ + $(CP) lesstocss.sh $(PKG_BUILD_DIR)/ + $(CP) package.json $(PKG_BUILD_DIR)/ +endef + +define Build/Compile + npm install + grunt less autoprefixer cssmin concat uglify +endef + +define Package/doodle3d-client/install + $(INSTALL_DIR) $(1)/www + $(INSTALL_DIR) $(1)/www/css + $(INSTALL_DIR) $(1)/www/img + #$(INSTALL_DIR) $(1)/www/js + $(INSTALL_DIR) $(1)/www/js/libs + + $(CP) $(PKG_BUILD_DIR)/www/favicon* $(1)/www/ + $(CP) $(PKG_BUILD_DIR)/www/index.html $(1)/www/ + $(CP) $(PKG_BUILD_DIR)/www/settings.html $(1)/www/ + + $(CP) $(PKG_BUILD_DIR)/www/css/debug.min.css $(1)/www/css/ + $(CP) $(PKG_BUILD_DIR)/www/css/settings.min.css $(1)/www/css/ + $(CP) $(PKG_BUILD_DIR)/www/css/styles.min.css $(1)/www/css/ + + $(CP) $(PKG_BUILD_DIR)/www/img/* $(1)/www/img/ + + $(CP) $(PKG_BUILD_DIR)/www/js/doodle3d-client.min.js $(1)/www/js/ + $(CP) $(PKG_BUILD_DIR)/www/js/libs/* $(1)/www/js/libs/ + + $(CP) $(PKG_BUILD_DIR)/www/library $(1)/www/ +endef + +$(eval $(call BuildPackage,doodle3d-client)) diff --git a/README.md b/README.md index 8a4ef7a..d86cc3a 100644 --- a/README.md +++ b/README.md @@ -1 +1,13 @@ -Doodle3D client app \ No newline at end of file +Doodle3D client app +=================== + + +# How to build + +## Prerequisites +- get `npm`, the Node.js package manager, for instance using macports on OSX. +- (prerequisite) install Grunt: `npm install -g grunt-cli`. +- run npm install in the project root to install project dependencies + +Finally run grunt to build minified css and js files. By default, it will keep +running to automatically rebuild when source files are changed. From 6e79e70c0b7ec4ca2ff7c691d3bc44338e6c9d80 Mon Sep 17 00:00:00 2001 From: Wouter R Date: Tue, 22 Oct 2013 19:43:37 +0200 Subject: [PATCH 13/13] Change references to minified stylesheets. --- www/index.html | 10 ++++++---- www/settings.html | 7 ++++--- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/www/index.html b/www/index.html index 75e70a5..c33f0bb 100644 --- a/www/index.html +++ b/www/index.html @@ -11,8 +11,10 @@ - - + + + + @@ -66,7 +68,7 @@ - +
@@ -154,4 +156,4 @@ --> - \ No newline at end of file + diff --git a/www/settings.html b/www/settings.html index 7dcf006..6b61f19 100644 --- a/www/settings.html +++ b/www/settings.html @@ -6,7 +6,8 @@ - + +
@@ -111,7 +112,7 @@
Client mode settings - +
* Is used on connect.doodle3d.com.
The text %%MAC_ADDR_TAIL%% will be replaced by the last 6 digits of your Doodle3D Wi-Fi box's MAC address.
@@ -157,4 +158,4 @@
- \ No newline at end of file +