From 191cfe3df725531066136e1463c61ec954610ea5 Mon Sep 17 00:00:00 2001 From: ccd0 Date: Thu, 21 Apr 2016 00:03:40 -0700 Subject: [PATCH] Release 4chan X v1.11.31.0. --- CHANGELOG.md | 8 + builds/4chan-X-beta.crx | Bin 268788 -> 277569 bytes builds/4chan-X-beta.meta.js | 2 +- builds/4chan-X-beta.user.js | 37291 +++++++++++++++--------------- builds/4chan-X-noupdate.crx | Bin 268738 -> 277520 bytes builds/4chan-X-noupdate.user.js | 37291 +++++++++++++++--------------- builds/4chan-X.crx | Bin 268784 -> 277566 bytes builds/4chan-X.meta.js | 2 +- builds/4chan-X.user.js | 37291 +++++++++++++++--------------- builds/4chan-X.zip | Bin 268172 -> 276954 bytes builds/updates-beta.xml | 2 +- builds/updates.xml | 2 +- version.json | 6 +- 13 files changed, 57069 insertions(+), 54826 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bf2597c30..a78b546ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ Sometimes the changelog has notes (not comprehensive) acknowledging people's work. This does not mean the changes are their fault, only that their code was used. All changes to the script are chosen by and the fault of the maintainer (ccd0). +### v1.11.31 + +**v1.11.31.0** *(2016-04-21)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.31.0/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.31.0/builds/4chan-X-noupdate.crx "Chromium version")] +- Based on v1.11.30.3. +- Fix scrolling issue that happened when `Reply Pruning` removes posts from above you in a thread. +- Fix race condition causing persona data to occasionally not be filled into posts. +- Improve connection error message, remove link to banned page. + ### v1.11.30 **v1.11.30.3** *(2016-04-09)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.30.3/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.30.3/builds/4chan-X-noupdate.crx "Chromium version")] diff --git a/builds/4chan-X-beta.crx b/builds/4chan-X-beta.crx index 7eb21004d00b7bb7f12b1d35e27c68553f66451e..de54a68a6d8dfc56a22a96c3eec8548630dd1e81 100644 GIT binary patch literal 277569 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®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%0AR9eWpiHgH7tY^ThmMeayD%!2!%SwaI4#<3Li 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

&{k)reDZEav!2p&evAd3-WC5FUYagFLSJ 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 F`aiJZSHA!N literal 268788 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

WPAbFD5HW@7?e=eS=wYNvT1 z{^X0_BHt!CstL?|D5aF!$V&CQk zkZ7z5Q&~O!KJk_UvIIe$pd_IZI^vOV)%_I6CXi><*w%uk{>WLR0n+bQSZb5dJpg*!en*uYl^$;2s`lryOs;`&BvRV;*5u@<# z0T~wIe8P)x{RCl#54a&nqS70+3=^DYwpu!G1i|LHW1da}*G*bZSQBKdKcd?wg(ZT( z#{yYff0X(?#v14+PohYd%QX=tQ$G4BE43ad@idf2FZ0l%;cIq0b(zX)qIsi-79K+J z<^>Q+yj;g1N#tbtSn!P#Da<9v_HyMF6TVaZeBEm!i1p#W&b4xmdCT$Ky5Wt9E!Dcb z0R-BnzBWFzEekB_>*Sa=vPPVIYG!7f7UwQX{#`{lZCkOPCAC-#>k|i2RseTWvQR9) zMT7}$QZ|SvzobujT5deB?~wZK-R9lFE|<1+f$gBSCwS-?Kh5|{`wjV~$?!S}p_5mA zaKu6G*l@ufQJHsuwDUsH33z5)s5Eaf*GhzQGhX+V<)h$^=pcINzTtC%ccApJ>v61JL|7O2|dno|AR6{Ii2x&DJo#SL08)j zR3`r5G*am%Q3kAraST0whBB>|<9gIAOIG{BqfRLl?tne#jg3mWNcRRNXO|Jp(;linE)FnajNAO!auH4{#A_;bVm)hl9O)M`TP-08D*##2r~Nk#|Kinl;mB3 zh1UKd0mK}&?nI{F{fy3Lk0D{aoq%6Q%(uw~5Sms1iy zYNjm>Fq7CkRv=2IlH-AlCV3sgi4S_bqQ4N}A=#S^tD6mitdZRxaApLia1%a^`gW`j z=v~J4dQPk0ubVG3PN<)iru2DX6Seyj5C4uaEDZHcdzgD7&pYLoHj+uB&khA-tjifN z(}iY-rP>^Va9F@Fk20QZ5nYpV>*>B4b9?QPo0bfX-q7y!IMV(l0$r2v;nz3)9wse6 zNU%O-ra=0J{2GdEy2Sh)D{#0`r?HV#44cN~q*z?#DzHF2MZ0}U-73!7Qkb2HG95a4 zm%yZ%$d&BA-4A7=ls9h9#ucwN&<@w_`xRfD`ZXj6?joDbmczGCTe@O@ybQV)&vB6X z*I>_xCVeVH-UIGfCE#AB>hrXBl$1u@z|sN7b94sDi%o=BI=DVwp?aYqcMn8{U^Fkh zKi7UNMJz^*^C39S{u3Tz$W#0|2YoG8wkHYi0%_ZNyJpuhFre?dFD;8vYQ@9pV&y80 z6z{5dRcTbfPZrY=VN|CmbvA1db{B1tX3K_Xo(ugG$QNK^cI2?f9*fXBC%(u91MW=G z@zePoOn+lmdnWov_-fV!18t{KP`J{wQwiqZL;xjwcK}EaOEIx4{x_q+QB}7YwN7D1 z|F~=099wRWo_Z^K=6hkV3?nIBH4}Ij(lRR{y35MjRE)}EnyNqMbl$Y2yJ1zwZV;;R zu>$4_;dOhpZ8amye4!cWa?5^NQ?|7nK}+?6$867oZEn+VX^~lXp~~&;^c5)IcO*5D z#{=FVK^J%&s((}34e9?Bx_jcLf3(&s_Cq|1fQKQQ;f@62)|rX`8ENF-K3^^1GMf?< z&la|f;04~!L@GRR;$&5_2$c&L%cnjRlLBE>gx(%o;;SNxcBfrChf)vwWfoo)f0IYm z4(2S?-nO*cahM~VRktoZ7n#W5_fNaRgg#yVEr)QY1<~z=HN-RhE3xdn&Z%ec;PjRV zI0s&1p51K1(JPGY79O=yV%!`gXGt}qHPlK~&3Id6dr{|_A~*-xT2V=8p>p)`5tL{h zotoj!Kz@A}^ToMHkFzx-A%3`H<1|R(X(Txrz5aRI#c#9?{eWHOG&Af04AIR7cE;Z* z8AY0akm^u2N2s;vnNdp38DFP7BpLBYfs+wGD6q6mCp{Ingj((v$|^Ct#`n=^dPbOk z*X%=#J=eF?(5;XeoS0(}>3fa1D3eW?s+}U%gCuA{fEZ0m$b`;vAsm-MuO*aaBTys9Pc&@R>I!-0-PFOl1waWFQ2O&w0 zoUnZ14CIF6%R@9@W;n9?Dv(`J98^xCznI5RMh&FUc_|c`z#_PLY&oV%5}>AjC97IV z;UL}wz)g3SKb-7vYDt%u%ObX*nkBCZvsnaarVU+?0_T(*4bi;%zZ^QKq{H4wf!Civ zYSZ;|jwFy4&Q)R!QLFB^0dyu=5&b@pxg-GL>fN^*(lRm49T`Ez+f&QY<4YB^W9gSura|_YPh^U z7XGBwzqmuH_O$_~JM3!=hH@}$YTyp2^}dm$?1>f(fU&I}V)=BxYdT3@C-={OL?3f$ zOWr=Az+Xc<9Wji+3oXf9EHDAD;x;688n{Pd`5A+GSgv4@Uxe|^cOgQf$6~;!Yj?P? z87OY58@od~BE40$DIYm@ajETi*y6e&hmg(nsTx2x(HLS5b#)7gTUYAqlxQkX{3U9Z zKP0A=$Y5%OVmwi!$b>Wxv5CL4>y`(&;YclEmEHm0h#_TgD8qQ=df8et6 zb6ze5@TWVi2w~G*2WqJ>V9&MVbwEdTimwM7@L8*nF`L}BMbiku_evxhzB(On+X!d5 zWPC#Qiz#EadU{rc0$Oi{#$c#5uC!6Z*G)o-o^VR3{z|r>Y1!QlMnAVco zV~-~+RyqXAWbE8zsqU=xqZ@Bbq4eeM6Ohm z-2+I+g05zsi>pB#N$!Jf5FRZj$HrHyA@ogceP2E^ zo4(588D~WKj+Xr{{M*yS4I} zP2Ehz9N|hf<`U#ig=N3CzOqo8lO#W)mPB2$Tmp!bRu2E9gSFA~FRmgA@>OcIwTFT& zjRXo=Mn}mZrt!6V6`*RT2OjS}H-ByF!e?8|&~s01S4Nv4SDuU~0RIG^oS(B&| zA|D~FFSaGx{21)MIb=qqYtoDE^h`%>6-Z-#4XEe@8|@tftpF|H3Q4QZ&P2w5Lt452 zX0E2dT;JfwX&EP0f*$(0&eRadM9~r-mJ4e(^_l9{ZNxI#WiR?DEG}c-6F1BOh{`swQ>OpuYe;Mr`^!=$FX-QK6IQU0=0{^Pz`OkH< zS!zr+X3ZFt(Iy6@)Ve#taU5`0TZfoHbsFC+U5J1w46$ArJpd@f+dUUaL)K_CR=_i@ zE7K*EM_x)@XJw-mE+~pP$c7IYEu9lq1`B|%S89M@eM!4xP8uEIt8LKS2w5s1k_EwA zk2zdqcQL~WIIZ6;gPQlZn7=);c7XXOTkXHKAa3wy|GHz(rUQ$84H}@ebEl7jbl9rz zD@nfzs$M*aIsM~v&VM_jwhHCq(YLzH(G!;h!49=zl;|R%tGVL_g85OW#6q`3Ga)~( z4bwFxp-9Yu?q8Z4S9JPD!P-qhTw7bLGQe%KUQRh|tG_{!bLpJ)_K4dadoDp?1pCCF zZ34!FTg?&rTNk__r{-0`LLZXKDv$Fchxsmr&q#>^7%3g=m{)2#sNN7z^!K=Q*;vt! zVP-kupEgj~WEHosW>HkHng(-XgQm?I?}8P+NUwG#w#@?^p-GRv706=eCwVI-7F+zw zf}JaA1R{X^w~lXpjoP2r;!1aom*IR2@qnuHS1L^Lgc0p7ltw=QgUia(=zw;!}^)U6O*~8R*01D8ojhY zQ>Kt$Mr$dmN%&$AB;3@9$LJ=1lI2d1wM})DpxkW50u$t{XVdFBb{ULgcq!w-hcUO| zBvbZ1Tul@4P8yOlM2Qugv;^kw;Dje86OrWnI%n|0iCcZpBV5fX%8hLA>e}|b6Xp5E z4y3o#TAnGFJzf9xCct4uA}%nGP-DMI^K=R&gfMOZo$8&{h~KhDL1NqOxQj9I<&+=kZ7g8lk=OUWDWIQnJu zDXX_XDans3stTPJgq=~rZm}C;WvWWjpVZ{ielxr%&GE+ozFgp_fPdrbzLQ=fUn!n* zR_#W<)Mf?Ld3s>J{H?O;XlX$Vesy z`1N}k6I*!2rNOz7TELp<)HpevMl+@0kTk)_t@p0!4(Qz@X^z$S5hBMZfET{f$oJD$ z`Vo?+=Y_#Iw)FzDEGfgvJI4#pQ-|(o3&ztps{A8@8{5aCMt`8CQ!`G+7*DT1EIEHlWx;w*lKwRa zS_j^B3&rgmu{hQOVnzfq)Ckt)-yUi+WBO;k@q+-3L2|+|!%;oP^my$b)O2~g^5+Gs zFjP&e1dTUody$!sb<18rVYrCDrI7Bg+uig(QZf^jUuD4{e_J_rKGq877t`xKyd5hz zQE1XfK7WgA?ibFz5t$B%sEXM#EDRJa9ntolPp_R+8Ts}V?#5ygT#J1SCO!CIRacVap8z)_cI6gGrzMaZw_NF5W8`_+_C$-9|XHnm*8`OkH*}X1eDZH*$W^6MK?LJ z0l<O-ImBT*3!ZlO_3Drz@XOLwIuzs5G*g zGq3Y@u_sOo3&%?_&AxZh_wV>C0O#$yqExvUoKbBDIv+2e0MGqOo$%Srt%>58Q6fxF zCl)z!h6^}&(+Z}!ki6I|j_hP>F1wFD!bWDH8%J-b3Qq}t+Uq0y8?u&vM5JIX0ht9V z(ztD=GPN=%wCzNbf$$=MYC;E<+$y%4)AO|;m!d)7B^rj0PeP4QofiGwtUgWfE_sw9 zQX)-JNnBaO=xaU2cxp8edbk#rl#`AmR@3h$47Vn~0$Wcxvb)*bljZct2Cl&9JAN$f zG9+hWNbF6Yv|Ci!jQ45yuHPWKF<~=+F3IBs6a#s|No>IvhEpN+84cu@s%(LbslNrR zYOFao=>Poo)ad;gu}I91WwO_BN~$4yZ@$q&yh@DUF;Mi6wp+sVjhSwv?6i08fHt}g znEUgfRwwy8PPb%uQKZ#i2}N}L7)n?d04n)6`$=4D^j|2&KbGk|!vnS!)@I%-IziV? zYw!-esI2aP!#*E~JLg2qHR6ehgBhE6{+1nnOrLlEDofwI(is*+(Ez0}&GBq&AWjLS z#6@uMV$yMRY=7k5n;y>C{mY6am#6UV?UR!T2o!|}zYBbQ=W)C!E%CqXd1Bkn*1T@o z-%Ln4gbI{;b&vUK=uT0%`=g0npP|NCo34Z|;H*$J+jy*6zggJ4wgj$UJkb)R%Q3Zt zV<5{xdjnhUD}2AWvKeUdf728$66cD~Vk90|Ks9fc1or=Yn$1WH1CyOM+J{7W!>m-% zom=2^v}4Ft+pXS%{9S5K$!^k~{H;=x%le3(N4SN%YSqCAj`)Xy=Ggv^4yvj<=mYT6 zIx8Q)4laYwgqj{vy?W6a;FLLYx^IXZyR^d>TohhDHplj*!F-E6@q5)=;~>Z2hyvMvYsIBu zri^N&@5dHN%JvB)f8P<=&53eBBNFp@LSWAE&hr7`5BW_A;!Zb?x0< z-|#qO9SQ=p@!+@rM*tISKB(5-X&oMIJ2`wI^#p+G`sacz<;+0)*wGqtE@Q&bhfK$v zgfD|A_BT<6G7W07f~q_LX7a!h{TG}uRH2vE)vDy(Jmw}P)x1M)cb1r-Uw4auecGR_ zoI`zHJ$`ze>4c!Wj)SAnRe?GH;8Z98<>9uiSZ>PxV!p8|%hdQSFPE3w{H<}FXzPi@ z5eKeola;0lm8Q~@7;}^3#SlZZ`B2~hZMTe16crfrSTx0Mp_6D+Z_JgKoHAOYuX*y0 zvLk9o4yBllX+TEj1rS=wtIRMB&obRRNU5n3TnrXW408`|hmK}9SwL;}9HzCdhxAc%Y>%tZbc!!3g_Cc_B zVaGbj&^Iw<3iCn>96o!jaLJO{8R^I;u!`4{zQfyn0==uz#aH%8uX4JIfCBxixDPxv z=Vl0HmqmZCvEGEGuoEFymg&48brh9PM{U)}KrOZ3QKpHTGZT9lH==PH5ZUBrz=YD%^nI_()je{(_fA%h^MWni)PIgg)SJFw@Vw~~zN|g3o z;azR%C7IFQ?aW}3e;HhHa$!A#Urf`L%jgr7YH2QDmfdE+(_Q8R6 z`TycX{S}H#24qLM2m3ON@IMhOOMCvk=Cz52|0-P06L>G@R~yBzYbe+k(Tk6Q+n!I- zUpq*gyFZ8rQ2eCL*I}BjqWhf%;hhdmM|P3SFCyulz;B)f;hqk%px7^>)gQon-Wp;u zSy}CPTmn1}0ZYo`=~$N&8k>pEFNdJl;|?G9mAH-lJwX(qwsi~_6Y;oXNVr?^PEO+U zvpt_=`{Vw2Tk*GtmGtA=*uhJ0gWUq=h?Vg}aud zd@<7IQVRTN81dEs^b8&KTxMqVoX~ZMAJf3Q-b(Hz?ef>OYpD5K zKjl=RJC#|zt^y+MIQz>|DP45|8~v&_6+^@)J;l76P@-i zo47p@5GnRAV?%8YY2Z_^q}0TXI2TsPCYto!LJ}O!Aro4-? z{37zir{FF3Kk1PAB^2v3XqGpSsczpohTZd#M8wLA=##g?zZkQFnA3Yah1VELFLBf! znvIVCqGA`V`8q=LMP%Qz;FfPb+p}PWZ~l}|;i8Aq@jEBWmFtej;n?+X>E?1$*Wupv zdO|nBgY`aM9u)}A<%mJ@4+xY-{IZ|{8I={Gq!pub5*5)OY8;7kY>5hN2@7nAjGw)6 z=&Z=Hl0lx+lZ)>ia*|s~PGXKLVvcKKjvHc*TLRwF`b@ZeCgYWq29cBjk(3SOX^7@Q z-ob08{+Y7@k+cPov;&c}2a$9Dk#q!+bm|)&W>^m)?ei}Z+*?0L4I(bLxBGeMBWD{$ z{#L5<%_R1Vap#M%wq#x4N5tD$k0dp|)DJemuIYTPCUp}a{yXtwEcgGxjR$X}EmPey}#O?^zAFEN3CEk&8Y1Wy)?@L#0jN?8y{J#!{G z3H)FyF^+5zccPgw$x@&4%;*1voA?36nR}_YOFzihP26|q_rSXTa!^eP-q^;nshPs0m>?(TE zS@5JipZ+uPpBjk14nOxSc+V;8q0rpLXnq#0_U7^`Sm`md)LlW2-a%Tv38UXd8rwy( zyABh(f#h@r&Ef%`(FQuH5d_ruIjZH^tIZVt#J+Zlid_`5Efl+JD9)b}^GtvzB?=pO z5#9d)e)}kR`Y3q+DXJgx9HgY;!i?Zof=Dw-xrKPba!gSro}@ZYLW2vbk!az6ileeX zO|&#Z9>VpA0ZIe;O0TR;cOdbQJMNJi^JhH`AQFrqI+1B4n?NL+K_px1o+5OSCvvK2 zs9XrCoCzh-T6F3$$$UO6{3ljOyWvUu;Yo+#Nyp(yrw526f9i&G9iDU>o^&6c^a!5x zY#@c&N75}JO8*a9FKJ0a5kx`>L_!%vLK;Lu21G&@#0zPXX9U^Lkw!%gKlAQ1Cv>G@_H3~}D2n89IG{*Uf{{bHY+4g^d7OBdsX}Eyga4;hb zWlOm~j>f1wrB(B5tzeiTJohh*a65X40~jpXDE&x5{O~S5@1Pq?C=&2XHm8cuCGu1-GIhZ(;L3l67Z+Ut^HH0{EY)Y=e zJN%2ssg!P4U19OibD}2Lyg7;{_AR}sRKJ%lvDgT_M9R#<1QRcLIH>#PWpZc7sN)v| zwasNj;<|0%c8Qhx)@h@Zv!wEP*wAIIFBz1>Vq(f*BS$`HeCo-{&IE*E@UsTWCPSPJ z@voUad>eVuVQfRRL^`7p=U)8t^ky>38{S!RbMwvqd1G11j7AMLAV4e0)}M*oyU1jp zY~_>gMU5PcdMHWO4?Hv~#$bgiipj*R=?ZoFddU@lf2ag#^1`$o@Y&4H;bPO^&9SCX zhLvQ7Q$rsy2N&el+ahh!SsqR_49)gM9}kVWts+|E4>?eeHuL$|Jh?7Zc5!IZ%sqgv zqJBK`l2(hf5&pO@$=tW-XhZTan#^CmY$CiOkwFo&VJ%|M%X$J5#bA53R3lgw$R&Z- zS%!!H)oY2O#L5W-MgfZNrPd5E$N;I2Zu3$hy2Y>4#N$l0TSuVkWzKa*uvlsC(+(-) z8L@(Q6XBJfMP`yGk5%8!J1a|*X4+z0g2;4Fg`>J94bizn7f^6Nt19|86$BZ2sXl1H z7UVIPkBk{4AUS{Cqj(#cp{H}ZbSt3*tvZ(zE)&L8&1FCUo9IUsVX0Zs5Bm)H(1GQT z{;fC#6s@(q%XfzhA!X%(v@D^@7k@J#<{{Q*Xss<@C+-Zngw_B(!#}&XIYndRkEar&P{NJ&W>cIOrPd=lMzgXm; ztZZdWS*D0B7_biTNT@VgxqO3i`{JtBBsum-IL+|I3Whwn>J+O8_9IbFJ_Q3O{p<~Z zS`+a@Vwxb5*GppUgE)9iiigf@fXY zR0_Fjot}%gF2JKE1t(^kr~1uC(s12n0T3jXXIY>#4_hq~(K3V(F}8ns4T(4FPJ(A* zZ_-esREty&`J@cS!0K!Rg!-p<^Pz6Cq-H8$>=W2Pjaa#CWO0c3bDg8^EUNDC?SHq=6J_7|fHw3{9~}1(~I|jxhID+PUr)b?_Hn&AjLBi!CVf zKJ{naAFM-14z%-&2(T`yBNW7rMQpR(|J5{&bS}oX!&^evKy)5{WjMG}tBMo)(NKWD zJ)nGO#GDF;5j|Xm6?uMKV2=vsz;w2VAnLK_Zb_<$|D~$i&Q}D^VlGQKD_K%tG#f3~W6g6@%!EY` zCo1z~@}_8!(#B9G>KJE6sGB0#$$HP3B&+!4%s5`CLT`I_0kEQH zqYvjz)uWSmjd?~$N7lkrP4(&t$R*HylHVXW$px^tn?{%mD+Xuc!&I#tIjszGmRKt) zbvT9MFzv`R-BARV3@0BK@aaE}HcjP9l&co-ob6!Y4)din2z*eDKIxXcyU4cSOkWEcT1`p4l*R5$S>dvFfSCKGpU4b? zZqD8OuMGDuU+{8v82)nsYUMJKN*0Tj`Tk30z?gAb5%5xxiFfb~rfk4vIXX5%+vyxAZ zxoupc61}=8>bzkuuHV}44j4MIMErco_r`G^KIpF~1vx29Z8iu^$lspO=bgLH_nFn9 zbF|0mzOckBK|3EU(eXB2V?m8W>QTZ}Tl{nGBSsa;2k zsIxT6{}S8l>88Nn&d%(0{IfG@*m7*+5%ISE2*A=$stokm-LU=*s|sWLC<;L`c?@A! zwDK82mm4A={+vQY-O8KAsmG@uSVyF8KrH+zx0m?*s-zuDw62DAH>EgY#kiyX z1S8gocArVs{IXbB7;Ru+Z_HJ>LV6wKBQyhVE55uuHPc0-v&vQfPzS5lmcOeS2T2yT z#z~c~j!>!~VvB>nzSvs&R^fN_h_$Ou<$JR4a@5Suehx}D&(C$Dl5;GKc9-BT1J8|X z@g zJi{Gx90gF#6;9r6JpJB+o7Pz*Oy4oOTx}V%=L{30m@u0$ElV^=;{dWiwLtc`NfAc8sws_@4J_&mA2!fTQ-7A(L9yr4r-|?xLy5{; zazs$Gimww^-a3ClF+T|{Wj&D(f1$zCmu*{&e&+7heXv4W42Hqo_Mv+at=wVVE+Swz zHlBz!M#cs?Nzg=O0yUH*S8;^yKufy?FVy7W1FstF6KR@VB(|nWP7Z}+tI$Bu9qQE; z4)@SzX@iYw!q+7KR}`|=*A>CUAZJ8m{hWKI?0{wAu&E>cXBWf7QjHDMJ$r_{gw2x2iR zS!iri39?{Wi|5Y{7&Fs4YXYYU!I4&3m#&CqO^iYfg|MPS+8mMU;_~Bj+^f*Z^6{jZ zOjOU4>MCCk3CimPyNP3=&be);|}==2E3Mtx9Hn zLV6aPw$Lmb7x0|LjCrX*aF;6?XgPCLmYk!j{n7~Ozb*9cMO^DRknq3o&aqYEEgyjG zNB;#;75~we5T5QPLx;YbCG1Zo?bqg!UXC!cOZ~@eE-#4eU!jVP7h!93ZE=0L6A1qj zhJUr+j?OGNQ~V#FOK0~7?sNL%E-3Q$cmPL4vm{vKlJvPXz_C-8a#pdcclrD zIGz=XNBIiC0Et{5~VOc#c>}!1!CgBD&uc|x{Pi& zvb>Vdp&v-ys1}=&oqD_)@5kxqD6id^YU#=ig1(9)De+ajR~Du0ZrC>6Xs{i?A0IVn zC%@*Fd-~*|Tc>o3q<{_dNRoo6Ssn2kf0cHR;Z~<>$+8eD%!nwq_p9_%wS+%MKA}?Eur=MxEW220~RRr_IZt|v-Aa{#=Y0dchxd*yJmn5 z+$EaITBaZRW17~_5I`(FMg3iTbZA7fdsk6!7u>HQ4{h#Xj&19$YO*w@iH3rlT(MV{ z7G`lvI~f+v1VXVZhpL^!(o~T40Nq1$U&?+06SFSxy(28d1E1{#tAhFDWjQ%i2N$>y zQmxc`?x%wEp{Xid2GYTP!(48#_hmuX8-^9i=w4*e)Tr}-vnJ`>Lfg*7`r9`*zm;6= z?%Wz+iwQ5ht7WzjoANDWuE*2Cj=}GPr&8mwE1i9z(0QJD9j>-`Vc~#4cXfL@-wP zM}I;ShvcJDrEK*gh%=T4_+kxq``4I{)~Q*c0c>ztEK*jG0W{w{z%>CSDT9r@y@eDT zW6qH$9*bj%R+mYWo|>Yg>=BAwj`)`4TfRLSgMjw#1qC=?zbtjaGM z{JQaFZ@2%~$U~LM4A{g=i}T-mLj>JAcqTn1DhTniV^^(PAvc{|DU70TwKG(TkuARI3#4@9auo8AL2pkqaMEMtgE0cUb zHHXpaFbDp6=H4jN@dJSU1rqABv`*|ALHThLj0QNk!><;L+uVQRd%bN;Ujm=vd*8<+ zuM8Fej6&y6U}8c2IBI;Oo}>a1uVP_c8X_x-0YF{u{Yq`4Cfzk_SvxqUj2pwsmR2yS zb~vP`?C2SO3-d<{@32M`}Xzd?+r|Alp@2I+J7q8WFOaL3h6X ze3v|QM<#w9vIjqgKZL`7)EdQ3~)z!=D;7Ie%0`cZ2C|#7VvBUZXois3cc`=DH z+%$dnX6&hxcJfp{5_L%N&?+n{bFQ$F&w1!XAFJjE%!wVYcW9Tm*#U^+H+r>&fB%)D zdK>DwNV&TA$`=3j@-Ngku0zOhTkBNl`<-VP+*f&17>!DeN*(1#=s4~<-73~8wwLX}Kt8wr+4)2r6>Yk8pi1tvsLgFXeAOu#>5c3G z$d56{A6wM(D9Z;-@jsQMnM}B{++UIiX8_JFVl-Dd>=FoEgHH0rTCfEgwmM+I(nT=MF#*-}I_ zQo{MP?3`&vaGlqMMudKtPXrIO-s522?Ltu5|LgVu1W7t;<2tCC>3b=Xn1zxKe*Hzn zYLmT9y~?3eWo7?Ff=Tu55X_)UX0e39W_q@>THItt8Q-T`Nvkc-QWhFHPf1W)EwuAN zmYMREHsz*vN+BC2yEOvGL#MiqItWf5FU%gc%wdLJW$O>rv3((OS1m3XM0bzjQrnfe zj>@9)O1VH&wec*z$W}8HeM8uz+Tz?rI?pf{$%-pDpW^3J4rNJp0;34V3iSqZ)Y8K5 zA%bgTl&O*ELJ}_7dBXDl09Zh$zx(2HHIOH$hoEG#1E6xbB6HtLp+bpf-#8qN=&4!g zy!ur4zz~8m{$#Ap?Ipx&XMYUOuUq}&Q4BDCPd_a>$0z+>m6lcP&a4sDwwd@JLt~tD zE@fPL+jErDf)3KN&;eAFg?@<<>!Gw8vVIN-h0`9G-Cckld6xal<2*kZ8gf2wyyoog3~~&z|P9 zytvW1^_FwR{m=|CfFF&ct5nTUt3NVq846(kx1O$vO;1(GV))<7G-1Pe5RDkU(*N7v zo}QkzMP%&j!yCE$8_0dVOY!1t3=Xcz0*q6yW{hjHJ@+uM6;WWcc!jzU`T(~qt3}3k zaIm+5$Wf@FM>{w8#aQxUYA$wJyon7s!;b;uGy!8hVy&ZQNxWl}xdgXC_P(PmYbo>x zVqgT-;Jz-L!WeW-X+z&&8qQD`E9kJrijjd9E53t44ZGrTU_K5{Ow%p*q)lVpUM9vN zTM7l(7d?VsX4&XN=(8@gC7L)V#iSSxcr?a>MsO5kxkrzp;U1f(Xy@~b7u`s{9Nh7| zyeHnBXt0PtV?Gq$MLWIW{rhS#;KlyEyJ|S##bChNWQ`2>A#&QcJ3BiRw+)ts%@V|# zqIrI(ddi0gkgFRXCcw-~nIMb()Q!|K{Xv*!vi;+pPKZ<|hJPMBi1s_tHon?|mC>7= zCk3Q;c~Zq0+in7)n8ZM5YcI32^BMcE`j1e_ZNhyN=Hn~Dgf`6-xB-^q0 zg{?01l+nD?v;pUaw7S4#dzq+>jt(1jjqxHkZ0lCNaBsj8u|9)NjkQrF&`d(E1b6_t zCId#DZv!_~Z{+~MKB*%kirc(xM4%r-kUU~?xVnou{XWr+7fDy!J{Lf3{%2+2GW%2~ zN<3}_2@-ut`!X5ESeT=;9GY&FvKj~*f;g+ z1|z04mvZsi>3?1^ST7jB@*HJN0BuL0o*LFST)h1CxI~jI>!qX=< zA||!UPBXetGoQ+ClrK$_{Pc8)e|Pck9{$~j+#e7n_Z5W}C$*t%p8Vdj=D!6UWqr`+ zA9i$xaubms+raA;`svxDx!x9L^bMM$;EChan|D8cFb^Rgp8wB>C-0v>apDKwiu>{N za`O9=S@k>QfBOA(S|z_9fdlIC*74Mz%af4Gb??(6(3K3|8e>IGd3N+ z|B#+mzrP2z(z&e_Z`C29!5b8p-`W;8a< zgY`{v0pUhS6Ki|F5X+Yx?v)lEPvPQatTXP4#ogG^S(nFT zoMmOzJ~^O0uq)Zq|3n2R;=W;pD|8_Mih48YHDn zu=DsdHo#NaW9Zl(@wbf9(?!#MV^Djy*Amt=GegZ=O--P>W!0g=+{VTZAe7Ad%eGfP z7}$>uXw7Z~BBPQG!?`GkkW*l%+UEY%@ppI*kIAlW;si)cyMNRzHpV^-i&5I%kF3};0%K_Zg%0yN_!?a*lTI^ z)MKZF3ZHBYR1pOHVwNYBmwYx^P+{s8W|dW9FBUu^nwvUpb>0npgGCKZfu0N-ZVL&f z>1qT~@=r&WY!x=c^!ca7pO0wzX|XAua1H(EBTDzXn_+tN->;7T4TSn@R&I(Z7Y@); z!M|TB=I8Rho9>p-T+?0cXf>W^Rd_%DiuehMg}i)Yr#5^-Y(ln=b^Z7eLqwaMxN+t| zL(1e~m8gNjpH$B6xX-eMAaOuF3To}z(0J0t)ukJxnF=Lult+VGo}&&PkU9$%D8T?=L}?;w_~r0!I^uR7VlVVZ<336u>Pze zZ9V0g(UYrnb4HJ=bpY_>kg%Wj7W}VR0fn4VZ zm`{byaZl(WPeH$(wnKKub(vvN&j4dWy9eCoAuT{dGfHje3B=g&*^g)e9alzLibc84}-ZkMqyw7Qi*d<)p}Gvk&>J(>G~4O{cL2!zi!4@15q8 zRoQgY2kt(N=16LxJ@N*pi25OOslYQgU>n1!{=l=3(6?5zUcTZhC87b%7H9vlU6za5 z-)r%?VaJ)+k4&%pkL@p$R<{wuK!@e`)&`=rxFmD>>$w~I!fvfk9bTieyqbVAC@-q0 zx>{~DJ%0!*BR(|&td1B`;FuC`B1LhTxH0d&@fi%REomvoTZ5*YP6z@24lK6^n;mEW zG#q^~ls8gt;ClPh(3OX86#8$9XjCQRe-pABsR?jVVT4H!w!Wae8)0=0i^m%qw&6nh zBQe{)31-jI65Xc$P|S92fY{5-yZO3N+nb#!Xt^?=a2q%s+W?Hu;WfSC*$ET*K!it- zo_@+#z6GS&mav6`;UHN_KykB9%9@ig6PweI=#n%^F)YL;YvJz6yiDI6^oUxBR}*TaM$M0El#+fg_69FYlER zDopn7MGqb_iiJhX{<7cuchSf$zO!$Cxxdp1df@ZGg{MV6f6BcX7*Tf^-~1uJOpB*U z88Z1mH16NA8yoEGZ`xY49qrv~(qsTCSXhUYC)dg^&4~SO+1pW44@%=&9 zrUK#nQrocNlm!g~@!gJ@z`0z3yX|f6@7+^w0Yc*FP()U`#0qY7mgW1k8wLiia&`%6_2Xp@ zw{D3+fl#;+j?@UeaUSw&C*}@IAkj9*3(pO{i??m z9-&2iOOCsdpCP@B-Y}VG0=G*^fr0qDQEP;`MiTJdYMme%L`jiiE=Dzd`66<3Fuhhc z8tym*hXjBI-aV5RIJM9xlE@h~;5)4hqb#cgdn42AaG0zF{;P5z2w8gC`A?YaA&`>Ya>PU17BhklvLE%51Ftg-wEI0u98&`?t zpOBo@L~|~W5|vMso*2@7sMOEM*j?G{%pryk_Swe8SBAmi03Sm}$b+Z_P+JCa+5F6x zI!0%CA~=`K9rDmtjs^NUW@=ftcii~EIx_q$dci=*`_=Wyg^WEZ8T)gd!R`goWY;Bul5yX70#B_s#%P@D zv3jTJOa<4s5^a5kDA(sHOpl&F2*X*!U_YO^$%FK?6jX-aKjC-Zd>f1t(Xj;}f@8&f z(C!AK!`ooWCyB5a*{W=k)9k{@C)u{L8g(L2l(O9`{$JesP`;R)XR|3mp~?^2Wwjc& zPcRi_U;FHDq}@4b5ru7P-VwUDBU;u+%Me&7mI?}MP_lD)0|E@YE;WS_$SXxd;$23n zL)!y8R}dr>0)0hMdg6rqk%@>5nlx4btrJSw6FrJ{U1hB&Rp5q{9?`boDIwwMdGf1dl6AvCrWuj@77gr*Q*--_KZQ><3DMFAdMlK3)kyrU7pP|kTwQWi@1`5e7 zg{=N5DbIr>_CB3qHjHPiH5J(C)te8`-~Z#u4`4R@`qi5sKRl26(Xji)DG!^+gA{m? zNd;m@riiz!@9-)5kX5skQeJEl^Q7J_g^t@Zh{@)QWpp8fX@G2gmKxrb;^cwVy@AMT zy6GX6hHCn?$aJPCl2cke)?|8>SV8iF@SxMKdQ5`br>{p=YFsn z?s8+MV!C*not{FBjLR;zV$b9i6LjaS$@3EKg63n$XoVp-;o5b@mU}n4N)r{VctwH3 zVk!%$Gx&@_-0nSl@)L^qAeP2h2jh5P=!~D(V+`RO0R{C!G_4B0hG(NBf73-=Rl#TI z2&|Q(7aUs%c?oDpEa~lb6!QijkU~y0&lmuTQ`iRk#^AJ}N*i(?@xDBSu7TSguk@$} z1RDk>o;V2TP-EG3{$nc|45RO;V8`hIFT{GFckR`9Rf&Z4Ya6KzeO;BBI*-S*y+DAgqi~^s4wmR>Y?R zUS2N-&$1MIu((5z-_4Wa;}J00E{%w9oMjn{BbfSlJUYESC2K(sCl@n9QcjZ;6h6Ly z2Re}-jwlWjd^AsO??H`DM|#J#(=I4oc&M?mSwcy1Zn;R4StP33XBK&5I?X3ckSVbA zb}35xLs1LJfKvdnzweF0hT9l7ix}QGS<)A_V&D0IJ29Kac1;e>`V4C3)b>^jKKL;? zJ~Q~+7|XL$m%nk%!FOF#!HgX;4m&TYyF|P0o|<@q!%yzG)qR9nJwO@BMhq!qGVO&hy3j||JPf!njWy@*EXUa4?7wt9!By2%=l*M_9UInqFdP< z&`%bX1m0?(jx%D=lO2?ZL@(8Y{^jLm5AW_Vu^*Jg?1tv%!6d7c9c)EU zj9V_lasr}{&KLz5Iz4Vc;k3B@xwlBGKBv7Bb7&eB8F`^D^dQLI@Q%Wwx!X8&x%Ps}1* zrtIetnasD%EN3QtJcm{ygkzV(ppmS|FXLIV_~?A~Py*0`d^o9-V16uN^>9LqE(VaJ zfL4yFvwx8nlax&^+4%_GK}9f4;;+6K(!%G69rRwWD&$#j$7Nc8>NX$}@MU|Nfsy-Z z0ryLkYg1n&XL){x$%y8Cxd-%Rj#^hBTv(~TQZj%RHM(%I+rb+g zCr&aGOnU0Ngzj2M`PFW)$4ud1m(JE)55rmCzFFRi?im`ltH6~pH!CXAlCie$uTVP~ z$nnm%g5Y)phIid)PRU`r7-pmF>K5zo(`m-&t+KXC8dNf}mqn^P1_NPS_8Qh`(gN9h z)csZ0@JxVjeER88ir-Ds1@aEirgpyDritxyA&R1;vgy6W^BVBt!Ni2d^(dvx0vh`_uKWMxk8Ou{E)|Yci@Kj?!Hk-Vj=bk-2q{}RXt2^z{rsp zJpe_95#h!Mcaf52BQ3$YmUtYaH=Acs)UI90A{#wcZ;-!Nn>?_yfW$ws z^hN;sHPa}9(%MS@s&%4Hd*EwG16-Z2=3`Cfw#|F7f(9Q@bJ~EHJ((;=2z|CT40MQp zdZJHk6x?bP%uCUTnm5UoXT$$G$vSVG7TPk1u+->)EGCagDt;P;ORe@vSIh6|Ug%H- z4NrPOzW(+Vzc7r@il{TvU*cY;f2Ofd##ATvHZuX{qhZR9Lw@56tITL}LTVc0D#aUH zKXGR|Dw}U`^oBTRaV$Ux~x*TtA>ZS zOh)EE-{cqa^|N$Bzd0KJN{jrRVRXJQiEt4;hz33xwzUJ-*Nb(hf`$JOASdlWR`Hv4 znv=~2aDpo_u3Z{Lg4c5tKgE%o8hvY z*Wq$>gJC{GVgZ5qZEG zdTUOn;?yQGm>sS^0_!(FqS`i=KTX*Gw=bDc3%h9GfGkkd3xM6r0r!84{wMMjY3@L1 z9juKcY_cTxzJR-fb9NA&tSS<*r4PLY(PhXf3npFlTgD0p}D!BL%b zYr+Xt%}C%7E+SDGDeu@mpH@kx#eVSI%sk6V&<00u$ZF>~T$7ZJt1Xnj4N9e>Dld{V zO94Y`@6Jgm7_Oi+u7$hKw1z79t0`0d(`B~Yq_dx+nY*=*AY-VOlA zImZZoAyF*@sCKDyCGw!`^h)B`X(V^Ugg*bAm6fnxKz(s{tu?jK)5XDpwnmAkF0Spk zc?o4cT{nn=k|R|T$(m|xOpvG~_XkN#^hE|`A}N%65C6*X zw##EoBvjk8DvUd)$E}F2DgZmY+&ylE?pj${Qo67*q;p~I@vX~6%mQ|nRp+ZQ-bYO) z)15vC+#j_o5%K|AR5%km#5#IJh7*jw6 z{*skfzo350A$WV$vh}5Y)vPpLC?HvYqL3)I-Q^3nE*oUB_XZgryLHPxw*uR2n9 zZEY&z)D%I$w2DHhuEuIXi>sr{fTdx~P3k~dL$HT0wM6G|JhrbjVyMCTT2(UMZei54 z30*&3Ezi>hJ1tMq`=}eTwh-kjyHt(9Y1=ie5jy!U)dRsS=I!Y__KcLopy$+YP@>-> z!;FoD5)E6_y?VDnZA@uL14|$VI_yBrambgkb(K zh&{FtJs_Z?of9Wj%(cB5L|WjQ)qq9J)gUE+^`(uQE?JM7I|&Bdv*cxpyT@@fuM(iS z#@hIr4A3=Kyk8?=0mON71))RlSEHZOciOIO4V_(zfLM0pM1#sTM;%%8*m$^%aaEY3 zY4ZbnctIA(Pid1P$|W(o?YaVB8Gf?qM#5(UhEHpqzsWUmQVgesiiBtc>Q&nN<8lj> z_wDVrO>qt%wl7Qgx!U4wR{IB0kXMq(4S)T5dTq4_$ygJy!Gt6=f(D9rJjfm}aq&uD zmz=0fdpZ$&OjKY)WYqVNv9#a59k+U7$G~&5Lmqb9LFj7l0{dL|WNj@7z#D>2mey%o zaCW(;K^R6M1%=QwEHLrJEl2yzfh;0TK=6*8jd+)dE1!EV>T6dC`WaRuhlvqa21w%a z{OZs;*iVv0b#%3un0pv2h?_rtO~I9@T_zW4bj1!t@_daq_a&=)UgQf1d?1wpgtF}!!YAnUd$t03$x zTJe<1Iuvf%5dCqHUzTanE~90UT_lq$g?Bt>a_TsZV7p~&BY_Na1%q}P9k-}$aC=}P zH50d(texi{Gmx-5y_RvF?$oGKlW7^8qL8|PEuZblqS7@6cA5#dDg@DKXY;cLdWO2` zFb}F9a=0R|ASVZmC72FDCdYZ?o_e?u4r8a|bTVNRlT1FcisyI+`jm*6rn`5B`}cRe zCm=9|onWpCHfV5Y=|ZDXd7iIk)2Q}@ca|6D*=*Kdeb1)tm zJ3u}}H!VwV5>}k}&DlUdX_)_c)FzBK{*#t;H%f}4%QN_OBY6bVewN^QL}D>=8+Mpt z^UL1iIfMTLk5xJ^G5Z4?2rg2_O!D!s($Da8&=q_{{*Z?W@hrvv(=44$>HMSFW8taY zFq^y%>NjTTS-O}$;{9ZU%wIfM&Dc?r{c%r{YFKo$H0YP(8U!-w3NDQW<{cUUH#VFo zz$2`aOyoR zPi)^#LYbjxvM{z@K*KQp)j~PaR|zY@%4v=f!w=vy>AS&f5;>S%9yU8wY^^-V~LOPe`6?z2H8Df*0|m!r8G z=1PE9@7WmyBL)2ZeRRY&Y$sVB8wj;BY`w9OwTP$3G!z^cR-9W{uEdo*hJ<$0uOBqKzmDfZ3@zAe1pNvHTGLmtFkeK5K>k5fTB>l7riq@GZf=`CwD==A3X+w;Z zvt!SXB61OH{=q}4XAg!fSxchUh2UzOBf*fephn>@xQxPQ5F17WN3nNWSx=ob`{#BR-5Lis0C{tS_26VGf(`9CWa1D~{Sg651 zNuXgHz4%ef0iQzL3MM%%R&3o~ZF7E9aYJ2*mWck$Af&MZLe2+I)%R4q4Dy&#JD0HVWVy8xliCKdGWTF=THHm=yT4v2%ANYwIN!!9iw_?H&5BP{g6a^?Pt)vYD;4MJqdP zPwYilCvAf;fDP1;KP>?6Vq=lHOBFRl?Mgo(8wEa@yiJ%xO9nd0L}&04XJa zF{RrTs)#t~PP2^XV(>;SQopuN;*m3kZH=niC;pSBs|Y7&N+Fd|PNmjSwHkw8tkNg> zcL1FSat#S6!`Q-xmHC;a&vGyRv0O~d6HLHF*M6q_j8nd^^ zFXN8>4H`Ybzcr&JES(Jmg0VXAfZmN{EaD_^CnmsYDys|1yTto|5rN^22)vV`((2bT zU$ksvs}__wfZZ!2Z>l~NI~=p^`OaP!fW+e}PvX^rZJo(7jnf4r$NKU8EAR`<7obqI z3|4qdBGf7lJMcd@cs65}Py=^G->S7r$_=B`-nDc zUU_kN!Hav=}aaHIVoYWSE(n32RRK=A~uPI3opoxcA zvpAFPW;B)^-CC|FY~GGBj@{R?x!N&0O;~rQ(R4*J<^np97rk~csid4q4xn63z{%)z zHIq^+V`Y!qopsh-nsX)8itF|p!!T`vK`G*25L2_26g4RHMF;oALm+g^J^Tj44dH_( zAAQPki&=2mfq$Nq9~cI>46Q5Ne8C7FGlS_DA<2~OsFe``#$@PR{$Q+h&{bjxhbAbC zD^4|KDM@Y55|#4`s#QY1Hcm&3fa*+tV(P&qa*b9M_iyI`9j3*h%h2eS~=v37CS@+n& zDuKcMoaV+-4Et*wQ6v?&>zFG&dbOBk3xuaVJH$-iFb#crsS5KKPVrZZDG0%7^!8nZ z33j2%>!kPyFR*GEsKDeVs|FQ^>s-hk@2~Z=$jg$aP!aG&ecv|&%4(5)TBX?(YS8aj z&&(3@96vI0z;w38H_XxL4(3|_eJ23!ASZftx>#JDd^2NlQm?G64 zizzk1{`EnS3yGGL)0;~Wgy8!>@rOBi6j>gYERQj7PA$wjvWXA*jyp>!GAMQ&LM~Zq zJS(FYp3+#77uPP|P_#xv!OXoXeXAz9-4dkG4i-;gmlHc*?0JIN0iv)+qJi^Xr+D#a*rP%3qCjK9+C)NUV74KH)cm`CIdnK*YUn8D-r zz{+5)xx0OUTqcLUO2craV4dA?9bjPII(y+dlzQsW5<{IlfBIo0pl&q`1y0q~`FUP} z&enfRV_p1`A@I!a$*lSvg3g%H1%d}iyqk_e zdC{x#AD2sE>kQz5)H=+d3wqjjfIvPOxgovvG$4d*fg#M^xGWkWFieLJgqv%Hcjhn z8(gSsgi;t@@Y2>v3jv8!CqSxvT~y$n(b0*Q8i|?~)F_H$JO>-J<_wQek4xMzIyhET zufY1G(@`xsV~VN3av+OfZT_;;WEWt5MezZAi&8?7>~MNlRe zylKO*r^I+OvImF)<$d?$>0;dztc1f7k48HZxY0!@MI)o_Gt(_&<$w0H8n<`Y|JrPY ze-^IV+xr18RI|Yc5mp`a;1B-Yxrcvu+O|6?cCGy)`0_(Op2=|WwourcU@gVeIRj% z({62BRu2ZO3uyk<3A?8>nWw=H&eI?;Pr`Cr;KllU%hzXE0}kJ4z0T9tL9}BA)NJjs zQ}MVIU1bG!tpabZlGD{nE3ju3_yN>7SsA@$WX?YCTc6*P)oS!Tn5{-1(#bh1bk8bu znXm)lihUT^_?@0rCA_!6F7k>{XCH?{>*KSuT=DBh_-uFSG%M0+x&Ti|_-uEG`}|JX zHyGQRt!pSL#+{lq``6I5AO@xf&$a~v7pdOU9d;?uztN!BFbh>7yF z)3ME{#Yg$@QY2`P$b<%TKY#_Qk@U}RFG>4mtR%m4=5CYpBxt%x_9-8o6NR?J z`}ir%1CLVExnSwozkRv8tMYm3)V;>XYNw~vp@?>b=af57OypM9E+ zkHNL$xZj_Hqt@*~A75fH@OI}*7vp{G(k|N2-l_{naJ%e;L2$vU z>7Jvwi=yIQRi}qdK-pwfpXvYpLG~aQ_cilZdd$E6p~(^N^63A;b02y6z;hpl;nz64 z_*dxd^A(G7EC@%WK>hj;^yfF<(SP|FP`~b={jb@Cd3pJnY`I_GwziUBi>K@%`N84* z`=gou1CHnUAHV$NU!Py%!Tj~FF29j~u{N838*#;ZLfmo@(VX6oC;!V0^}o5nih|DH z{YYdQyR+Tzb^iJvfym+`9x56zN>V%I15M#$2`tU;qzfgPY?BqaGn-Vo1Y&O5|99t8 zet$l!yyJIT9Q*g~WSWxZMcDP-xm=1RQ^_{{9ZC0lc>g_|_Px6Q5x^kvcTrVz4H*gj zC~$6S1*e%Szjs$LTlBjFPZZOUf+l0(k~Vd^QCp=QN6!k-L}L>r4}W@lf*gOu_+^nn zY+G>&zi=_8dAr!qq;q^_44TrNA!nmhK%7e_=hkD@+w)n;7{OQ4!pnouzJGZ`87!Y4 z8FJk<;<|XW!cUI_&x6+CcBO^{R`h|XC<^TIFl_N3wbKhV8@kNDW1;th^M7c@b}^j1 zu`v8M?78k4v_-L=e%PMv4_LGP{yopyD6-%8d}|{K{U#dM*@5SQ!%9>w@#~Aaf^m={ z2djuf1RoS%lVCulHvIc{Ec$v=DoPOniXpR%D825(!mvwF6#8^MER$FkfO0eR2qf5t zg#k81rUsz!G=6+oHnvItMQQ&1l5tKQP%^d&dE91XSOwdRo*tHj#tooY3;cOp2Eb{& zM6LMoVOdEtB1D)AUzLdiv078+q9)`+_fh-PR z0iU0)BR<5w8`0Ohp`)Ttt!$Xf+bAWMLUCp{^yWH2=%v)-#LLj%Ji70=T(m@vU{NS` zaKd7b!8j>ZTI2s5Yxyqb(J!&HDm+0?*I`DWae3Ag&%4;)Lreyc=yhnSC`>&X;e(uc z$cH&|AMe_-t|Pa%SU7zUZVLK2M01Z!C81vNHTRD6o`jy|&$i&O%(X)DCZ-i6@Rz+t zzO2_mX&fR6?na76zY`fT2}2k>M0)8caH(*D5D)wsLB-!O^aHBR6K(Tb5}5E;$k^Y; zWRRdkrDX%SGprLJg*?*D$mYixhe?*`VhdTodVIih$OjNZs1%#Xim&s|Z_R@ZC|7)j z??i2IqH;O;QZ9-UVF7LubP7XS$!~uboL>PC3z$h4G=UU%q2{SMJ{L{yzms_-v|3Y4 z%YkzP6kS2i@!(qTxbzw6qsBRRe=b?=sj_@8&* za$OICO%%@*;sQ8gaPCA69LJlL{uHltd=t;VZtc(UVu2}vPGQGgGqMq}Hee^?h8l% z!EH^Z_Gs9!R(dFxA)+srv0uh`(Xhh|$56lmyRIT*=C@n|+|dZZW<+Q#x>5qW4}m^D z@bKcng*nq6jZIBDx*gp4)29%SP@4z%<(+{7NQ2OUFoOz1CuQLRIspMr!n15R6S(q` zGb*}Y$qC0~?;nlR%kJi7lwM}{c>w9qnL9Ku*dxZI zFpdGjU>_bjJOUBtq6~+u!XKfWm+N z9Fe-zzdZ|2zcu_jDyK{kGK7BcRf55)ZKi=&R#SM&tu0|vdF(XN^ z0o%7P`*pWx7Zen%!&ML9&`lAogU~i>6D$bO(`P@!g``LHj{bbm7wOwqA3+QTr7w#c0_6ob%FMqe51M zC*bPew2#E1xP8dZpyY(mrylvT-V}G=FCQbTsPM-GVByfBSHIoh&{zEJcB1$2 zdm<1eYK!RVA{84N2|nQWMcjcep}d2FLMQd_pxZ2-J$sQ~;o2y%!dbA1WVMW-b}QW~ znLC%Lo#f8t9ntE6V0Etgj*I;F<*OtWX`J`ryYbsVYrOCpQ9GLBUQzzZddw2XVenGE zhUg)7sfd4Zv4EfO(W38qmVw$r`iR$@b{pZ%1TX@I9fdl(M0`63-Mi|F4H z`nQb!tt5iH^_tuNnAxJd0aYCpYIuo z_;Azy|`oM(&Z0gzerQ} z-ZG&x8QWN0?)S2*b%TTvbeMebC(v*LbLm(~fU8F8VL3#qjSD{!-{8nlf&fbeDv5|1 zqp)$1_eTFuACS1It{Dl#mabdS`z{eQTtwP21xqNDlAH_3Fu@)X{*=(hfP=Ex$QN># z>o#)FQ8oUG&%buBij;^b?lO_@y#EaEY;TX@tq0v90$L>H#jhKBJM^#lC%k-r9= z2S_HW^d)zxmiw0b5+CpA6oB9HdB|Zo{`|DH&z}$AXXq;6UlsiF(vuo#4lf>~=S0qf zV?o$a(W1cBXmIgB^05EQQe=LB4r(UMa{JfZ0H8P?{AN9V=L3#jhdjj1P@>+`{c1?X zg0=*}3P7T7KR{rvGVA8DnExR^b5#wjc9wC8C_t7C@GyVBL>)UcmKXc7z9CAfde%xh zh-LVc>bU_^*~S9YH4*x`cKt%SesKqb4x${kaRKAHhH(9&e%l00Ja}&5cwJ$2TLETx zJXhFVSLj^7(63)~uV2{LFGhDJiZW!LyB*w?h>|;=OK`U(?u)SJ8b4=iymu}l!<;%V z?jjA%<_{l{s}}zF5fS35fA*Lp^&cLU_vVin{;s*P{seNkSND%kAIhMxkv}_qSpOqT zww*gay^A!M6x}?7bne-6fE*4}Fua_BmpOlgF%oV*PtTttMRj66@RBBU@w;<}=6f9u z-|x`-few=Z2wD_!!n&Mq`_4hrPM49@&#l*wp6p(_?VmsN>zB8K^V>n{t$Q`Z0DeUpi*$2SUOBgO=H33&I6@P5aX=L4 z<6xP5D#-j1{0JL8y7ji&@wGTHQ$&h>Jg=|va&F#y8Lu)VJZJUCh& z*zcIXhQU)Vl45+Hm>4Hr>ra!_xzQId9NvzV?@%j|EIF703MJ#h)LT0l-Ozr@jxT0K zVa$>YPo26nwj8iYapU~?de=SQ8^;Yso0|-JCm%!PSG>7*0ervf&zUAJBZ%~j3DYDd zw>Ge4-n`m9DSdzc$9j)%e75%8aUf;&dxv?3LapRld;nm^{83Vut@S-3cV*#su5@D# zCOej?K;yso>7g;$f%iUwV(`zyG6>`LxFl<3k9%xd#vj4q0R^LnhvkxM2~aY5eB7q& zITmaZ{=H+YmZjOzlBDUhW+*w=5us@vj8BSgiZDgnB!NjMxZY+Py4tMO#8vxa0l5RxSvln8Wl)J;38kz}y6+mzB+6ktj|8XTRZCN^u z=!-JjXGa#Nwg2A0;v1Z}orlB2e@yrMg9%8I(Q^>Pb>Z9mF zxu}LLHc*u$R{ym|JNDiEQwr_##O_&iz#t5Nxqs96@1{AuO3HJalIQ9wGkKe&M2JE8 z+l}MoAIQe@<>~5f;t3@JkFE#cGt{M^cd@VtpA*RoJx3TBK3@E*pR#~Jd>AgRChPjATYXgcoL3l4?)^;hnHG|i zIuCkF$3aN?xOTO;+up+gz31YZT;so`g{H@M`6=<~e4(Fy_h)YPGxZ>Te1Z2s;E)a4aO)8~LRQ58M zOX+xjQn4=1CSSkgetKLl8Tk(uj}K;IyKw>8h)IfhBnZAqp)8!IOhfLtgG3iBVEEZe z7t@s6)XVXFFFSEIUb&`XkcK2i5^wSCXEr6Cf2KEN91`YCZ~Tbfkl-mxZ{iRgD1MCp z4cU$)0Wy#o$%P(~Z;`!qAN>bqJ^%VjL&eJO< ziC^6F1cPXTMeuYT#UqKKlhpYVWKe*G(wii!o{h71@BJ@#W5|8Vefa{G@5{Gu*}y>1 zAK}qAxJ;LCkCUT;F7wYn{dBcDnKH?3IAC<(4qjpnz+bULPVOcWkM$M}{)_f4N}(J# zb3^YgJBdg(V0SjYzvFK(pY;ak`)+f;Uo{&P2lo|4$8xhFXBglD`7KXW>RZYhqEaR%H|1h^&ebPc#jtr-W^ zIDNYY3F`~|{tX6|jI*x&BL`!OWfI>dg_70!66GLyO0eZs44}ApwspXriM;omyeYir zQV$K&;KH0on*cXJ$iFtX%Y29RM)?abeEWQpRuI`qp2;kD6B`=QKuUf-TZ3A0s@nU$>HwId zodHjG!}k32d|9z8bdn*mpdomY9;Chfud8Ib$a*lvdPVl0FPS67rQBEl`<^l6T^Rv( zaBK1!1L4cXbXY)XchXIxcaJ<|GfjRc+h{Vs+^@M$rsX|e=h$ zL(;(8IYB&v`P&Av>wIJQd>dIVHi5p0Ecbpw!6+yMWS0_O;p-NnNTZjzTz`*KtX;pp zIxQ)}bzSl{-Y#hJy3pMSftmP#*V$SSpi4<)qdRc{5qEHb#ShW*7o>tjy=hXUsz{-$ zr*F}Bq)9^`QTNw+jN1T%vH58td0Zvg(xjI^614XBYkTuFhDceRpK(RB%W$Yy7U+qM zxrXoe_LQlF7B`HG)(vH;0$rQnGpYBF@{V8fTlVMQ0 zjzRJ9<85NW%V3kmvhGlDEuE$^RH3cIvlgN3t6neM>1EDew0u4VOV$q(!kD;SZGGGU zjIj9nh-xNf3g7P0wi{n%pr)2 zy0TaEz|;lblb@f`C++F=PAM?Gr9x}q;vP4!;C*`3)tczEys`pEnZk)GfPM!ks&KwEL-Ll>2T zPHyp%k#gdf+#N;E z=Rat;@Guq9JBg5Zlu`CJ4U*?P)^uio)sudOB6$ z_YZeY&t0JdA_qZHtmcmSzPMc`DX=P11)Q~{$oLu7%nrvk3+ z4f>M*K$dgZL=?>P%Tto|o;N*B^6e~Vb-((5Q*oB zcRNh}lf>hF{f?9^n~3V=k z&p(NM#Azs9bhN*Gb*a^Na7^09UM; zGCYa0;~g)pyxyz}iae|M4v(B%Z$ujSpYkA9Z|1(-3Xx>pM5)PNZgRuC-l%>5{Wjm* zwwna)zu(J%5Ygi=PrR2TWCe7Cmt4RfIs9+nl*8Xm+W@a3q78q`==bF-v=zL3vy9}6 ze6Sjp=tGePY=mctmj3-5CO?wG1a9OV!^;SGV)PLM&F6P4k`S>>NfUI=v!%1{H0W53*<*js+OgJKuN- zhJOGoDngQX>K-g)`E!FN&u8&5p?tU<64(iZyq8^onpyxqxvDHZx_5)KgtQFEEH*gx z=_+>z6lauwP~}}~%5<_6bfggM!-r3~0hpU+>o8=7twmlwX9DEN38H^{y04T3{1**b z&u7UJq0KH2t+b@4ch@Q=$!SCh1J#>QF)eJrZ+r+B4irS8523IPMqC3Y{+L}g#C=BX zBJ&Ah3!v_<=_^#mf;M222sW%Jt9Q1!G%t8H$_ptJA^Q6@1%7l*kP*V7LSk&+ zegA6|w1Tr7@9yXC<^{Z#Yocnmi88WmSybvO{lpdLb|Yq{!Rk5-Zbq2O;>e7_{g-pH z<~W1E(`|)6CJ9}Rx69kl-^t+wPCmRxe3N2w87l(Q@tj{DF$?g3M=`eUSo#8K0Id|mL?9ZCHR(J}lbME(Mlcd}<*ZQ}2@z=DPj8TVG?LgGH(&%|}5cf3hf zdj+x(j?TGhuhueY^9D+CcbEP)-|S7|j`;jsRm>`rZh5J(Nsj z{YnstawH<0AEO8q#yGO3mJlzn(IN@beVEBL11hq9)>c9Pw5MxXB(1SZ_y-uwR*(Uu z_v3y&>rTuxMe|f&K!MUkQNl4)`{MxFmrn+)52Go-uWPm;Ba6lJNC zgLGy5uWuh7TJzpXD5pg(MsQgRrI+t2ZPM`kP#GaZjdtuf^_ok>_EdmE#5yN22yNa| zlQhbA;}AwkwUVJ-v;esq%|KE%{ViKN=`39$c^9+&*jFr%W%NPkE`LfC4`}1yrD2A3 zitX`0+i-;u_wk%Go;F?m{a)LV01z3LUz$%?`AZS^`2P3D!+T%s&*c)Tc1_;ikj53> zgd-i~)7JeMv&wflGvzSm2#aMA7GW%1JUK!M?} zR^ii?yH)c5CX;j&>&YL|$+Q3v-7BHNi>|v^EFPv>%$+qj@zwer9Zps|lMFq(!Jn=; zg)=-6ae61sP@*`qwrbzl#KRicR{_RD`^7=2*1ihZn2irL(qZI&R_~rSllz#!T@I98}yIjecRr-AM0d^emp6RHaalWpY2t+rH00kMY z@^meZXAB?`Y5XNx$XH0^l3@3-a|JjSvWsGx%Mfbbp6-qK3?*kL88hOZ0fs$WBj2lb zHWB}nvVVTPTQEu{^eLA|OPw|)djx^^)K9l%e!tJG-2fW0rM{j#3{=Wpl0e-8&F|lZ z_lpI_4Y2=|83oi;V^JE%zr;YC`uy@B=hUOYe23$|@ca?Pavlt8f(QUiSp_fVvPb_N z3=+dL;QXOI#;pzO_dr^DL;Cp`P9v7%V{R(L3|_pW>Bk(q*}(8Kh#a6g>4LCfK<;xb z%QvN`mxn6nJFtuF=I=r74?*qb9AD|YPiI;i8ybGh-N5nhkC6^qzvw;>J>HwlWkKhb z?nkb&Flg$O7p}8XM*l^{Ap7atQ4inI;HLY4hBDvn0X6!jTSyz4wJXmSfvIC03;Cp7 z-8N>+!6;16caD0zk;onh=G+3z4b)o2t^UyDe*X^hc#nsP!8Cmsvo<(ss08%kifM{$ zcFv_gr#?+PlV+`f9BA_A=E-k&5)&pu+wCCY$f3z73bEESQi}Z4Oi~3tMZoQ3yHW%PJ{7x8k(5GugY7Lap-Z0N6gMyHbo50%ax}m z`Wo}^-%*_r-`Aa`y*zi{GG3iu@NZ{9A$e8E*bQWFkK&>?Wajo3B`wY&qlD;78lKTC z0fv-x8IgYXIeT&qK+}+2-G{Fq((w*}PzL+gcwIY15n)A#hkEI^4_Oo_M+^n{^C%tn zqdWYFM>=oP1pd60!_eM66vE*3Iz-YpH@`nc?YdJ{b4Or;jI6-b{INUVgvok-f+nb6 zpnUtcUkpnCnEqS({`jYR*W{bD(N`J|W=yx!LcqrIok&K8YJ9+IhO#Wd7f)HoqEwxG zHh}*~9zVi>Mo+mT87A$z_uHx}rk%yNm zfSrFVj6AxF0BGVP7VMEAPPa%#70 z9Rnv=@Fu)Gg$ferIsmw4OZ4Fl{quWsi-0&$tVDbN{FHS6F=-=tkvhv)nWfX}W&n^8 z{9Nbvj9xz^76zz{Ab?Y48MzQf)CD}H{-BTUBZKRN&w3w!Lg5?+GmEW&)znRT+`w7kSds=q~P62SqT!WPL%W0`mfj4=jHMlBlZzwomhppK_61^5>^pPxy$|M+y4UU*oxf#$zn102E~zHfTB~ zUnr#?^mS4ksJB4Hv+aX*x^DJn-L5>IJ^&6hN?-T}&_LuH_z@*J_!SQE6IdtjqqRZa ziMjvt)r`EYq7i&V6z>zdcS(j1#DULW&EG%VHyGIfEbttmyekU)ntOMLuk9TYJdrh1 z{V97szR$p?u73u;hh!I4aAhX|!%Vt(d9$Kd&(|~|W#*mua=O?4L+39^F6l2%@YFti zdwiROgqz2N$yILdg?_-}=lTB|)fw`BgtqyJB!l0v`Rtoz(^1x68SrOWO=J|@X#q)` z>_7qy+Dt`mcui?J9`gNR=tSIRKKHk* zG7|v)J19MU1r1ZH+EI#o$&5mZdpRf#=HigzvVKHCz&Xp16BUXJi0cvEYJ`@v%lW1b z9bjPQlFP02mJj&I&hpb|lyMt2dUeBmlfWEI38wo4!+%MI9D84$J;O}Y#eF-8tZCoH zIR^H0KRimxmI;|jMN0KF#)vlPj_Tv0Ad8OgJAP*mj1(V65P3tEme2RBC$Hv_LXy)s z&esDh87q3wy*tu6-DU$cUeOtySe6$(x!0-xqOESkew(nrB@$67g%dNY zdC_5hN%4Y-*7D1@YYXSUTu#KVxwkXY%1S{0j!E)mLU#?5<14>Np&D;}{!#~!@;6t9 z09bf=O;Fd%Z3A&AiRi}_lZS8=nrGY@m?&J33js+l`^!zVls^;LHCgn_yt4sbQx2bK zEQ3h(`E-GqI~Ogtrv2x=jiwLR5Z(_yUjQ$Gt7PeJFC*U5{$$>JGC1iMtY*hBcH zw)f@VG}}e3Bhv`b1K9q5{Ja>x+o$9$eYJBmpP993q6io~I(`zOWKq9R1(3Idu zsqP=6yBVGN|8qj0*|HR^-$Cj96)>He#8()u#`3-AWHzrk{N?k503k`4D|K|5lBC^#uP6`lYlTWr z^dZgBT8f(uWEB(j8#kHs4nPPxz~?LeI^9f!}=)?o3zw%!?oP=M?#ncg+huv z2IKj~M*GnE4*FC)e?jj7fL@vA-WNmP(*dT$#b$Pz5fc(GpCzKaoD$+&u16E^&fB>y zRP)P2anV(+5DJUmK0LUz(SkRqZc9fe`<}#jV;C62StL9lkL!%S582CtaljkkFHfo_ zAy+|ov?0~~5`BxVQ@*|4sgEQCXrllj?h<_gzAb#qT&!Ov2a7)3h^UE3Yj*1_b}Q9n z_UawM<_b2`LQSNHg`;`^crP#S=n1bu_X|3Zur)A$63?FNOUtQK9R&iq0MZo^fJ=Sw z&SxB@wth{x>N|d$;u|W7nteMLL%-06H-G`e-FZrJi61)|={DiPc)pApnU5wvQfC10 z{U2U#b~4$H`+a6213ssQjx0?6^{?0z^$DHLNZ*_;l}rg1bY+zP+qHBVfsZ5u8B%wj zZif`*4FBa~Q+T~%?|ZoduJ!pJzkC9JzP|k9FE5y(+<3aaZ7t1A-=q952F`Pi_i|t+ zH!iS9m-=+RF^J*d$JXq_bK-UZy(n@)q(_YXAP`y-okK2mkw{E7z+V1|YkNVs=AVqD;u~Ud03Zd`)c51nbu< zxr!?1e*uf|oJTN}E&dS}hihfQ+<|fDFCT8mN;GzOck*SV%g|z1Lf+Q`O7fR;JsC(g zrYuX5(+gM{$C7+8N|YBh`}Xat`PJki+K~H!z58m;fC!KS(?#2jjIWR;8?*%jGu7Y+ zWQ%3aCQMY~qIiY?j=p_0;fD*PM{m(u{KzqY;GY0jp z>2g3&RJyO&{~>>W%YVhto#Uk*fDgFnDc7M0>W~XKrn#;!XPk)sfnNO<-C9TcZNjKd zvq=|TtXU=$Mk38P+V{W4!+BUX{{C`(L>>huP3HrPhWZgL7)(f&ViO{_B`~{}*qH9t z!zrqbn1?t;*oQ2GnP^6{Hf#^oqt^y-@H!-_*L6|NCuqV8iDQOgMAY)Cm3DDq!ikKdM ze}-Lu%5hyL$F`VU;SESGG{=3)4Z72$k(YD3Sp0-K{kQ@60p34HA9L|LLxYhmVYBgs zKA%gtj`#_pj3~P9Cm3iic6vm^`xsiAa}q%bueK*jlpe4)_QqorjSfJUOLQ9KQk!Sn*dK9N~gf#{uo{4@Byzy3ub_F+Q z`TcUsuZa3?)ov&?qT8#hb!BD1-;;f<)OA<&Vxv~Gb~VPW$wPa)YOhc0(y0~>oLcBH zjgug7yFT34} z*VVgawHE3#N>CQHF5g{^N~>zG;_OIn=&ggzemCa(Ek>>O8*;JO>G;LQ;n11XyM>A_ z9BRjj+dKt<9TtiegI@M=n$wScu^sR;BjCkq-rtV$1FWhS_1(ZOx}&$K{#)xr}romqILe!*Gqbsp=n zB2B5};WQ;C8?DW0+6uQ$JCASfoQ21>J#(@os`j)#>nPpgY#?fyqSov^-=|wkVLDL` z`}JbbJ?aii>-<6UroP6K{eZ0bWN9i$svZQVNrh-sF%^jSD{W_bG0_cyN*g%I@{)m+;)f9Q3|luGVoVU;Ew~WXADDezsdK)&St=yn*q}y zJ6KURPu`~B$tqhuEH!P6v-vv31ytiSn=jUeycr#oULbTPBQ2UI^z zD%9qO8a~_4`QbuumxCpLSe65gtrECV<%mMNl*bl5fvA+`i)x-26<b{-iF!?*D6@hW&PKwdN%typ zmuwm=wi}8Cp=uX8Se~DisF|ytB)NXznhM*~Lv}EkxLSX8Jo5Cw^7UB*x7tmzxEp!8 z7}Q33Fl<}WaWXQG>N4mLN}Z0#$V-u824Qc!!M$v zi^IuyrMFLb)u77lUh%MO41H?JmX*elGf7TqXn9j)-Nq8g?$o$t$u7a{>KM&9e6u+U z>85-*t&6=nsV&K|*(kEisjO`Fq-=G#CbMj|cZxnXoJj?v4qI}+UksPa5V)!oU>2j!E$E*E^#*-=)tk26iW;*Kh1(_fIh#|Xwq+*FHP&z!5{{MIj&7YlLR z8Vyd1kivSi(`n+L2(2UY)Nrbn0=GRq%q_t#FDwy1ROY@+kxj9IkN9vetLk`%Nr5;v zTD7w6bE?i1iq5f#)l7u;24ri+Wv|I+#`X=xO7vF6~ZoV^rGft@^Ta@(pLl_wozH z^wn}T^qe`{F-~r6P^j){p)mI(W6cwTj=Ai&(i)EP^%l_Jg)NE|)s>LRV=xE~ZV)u65kglvg{A^O(UJ zqk>m09>nQ!Cs&2GER+VV(`=ESSO;{W>Pzh)Z!5O2Ef{Ls8T<8Sg*%

06B5VpNc)Hgnb45`N2PyvnjYv#9E1NR^iPqEkA`gS_n8`(bE>J(5tC1x`H7o2D^s z;7-lh)5>6Mm^B|W^BZ+V<@XBH+%mPWX0%OzU~cywiIsG1*dAL&zg#gHmhrHjSZrZi z<I5@?jTx<^HR%gE24c#fO^;Xh!u`H}8k7T)Vwdo(-^=Q5<@ALRh zug#YIB|l>(fB~bFYIC^VtmoXYb7&LCDlIky7B~3fVi}D2v2Kgi0f4_Q)!Y}$^_n>8 z8!ee^bE_6b*(IaXYP7e^pkGrgs(8q^R7~FXs75Wn*{ug3T3A2r}AzQUQJ};e003`Lwi0m;OKo49`61pYXFzU@keoW&%n>emd1K-2_88fVx zRi#r4Cz3N>)i7T#5WXQf>}lF^Nl~7Y`Cy}Os@SG2Z4Xr|*oXO5yTAve*$WId=tw@f z9*xR9!&f%?XsU=Z0}2dl7~P>td9A+`P9+Dw*(<)j@B8Xou63SexFr_)yAymYf9K;*p|yq#qR#3 zH1a3X>eAJ{RF?p2T4Vcj-5=MRt-Qi`jb2!kSgScAW{1rjfTBEJS1SVU?}+6_Z}Gx{ zcPd+P(c26MeC5fpR$&}@CQW4luvG-Z6Dj#0Z?zY#GPi8-Ptcx zVN`7Kb*!^2^*wB*w7SztW3}f(n)VcjZXOM{e9WstyE!COPw|9iMOC=^ANND*$g$(SPt3!mM0JZTw$bQJIk9|X$~EJ3Y*-zeD-g}SLU$>5SK0SB zoA!KHYuDv%P-8rQcPMPBTF4C=$8u%kSqEw>E%Or1&9&{pD^z)`6$)tTIUpAMH4FVdCTeAx^tyCr7hlG!uX zlE~MJt44nd+ z-SRp zG>eNvXIwlT#+>coVXIOtO(v(7AV|2agjJmfoEYnv}cQOBwDq~#@zn@MN}|3bXHxr?f6ar?tAac9F}%N5^t0SQc$gOr=IB@0ef9G-En1CC&W`{S==o~ zWva`1wFB+c>&JSpx9W~{zNBm&oE^#)z~!?gb5=9*M`G2G=YwO{RfK_^ZYQG-2j zo0TUJ)9Ii%t&r1Md9|H%t>(hnbqgWB;*4FuF!}jF8u^koF9V*v!C0m?;56RmL$krr zqPVT8d@Iyj?M2WHYiy&bHvo@WEfxlnRBkN6-tK9#Up1VeS!wV6rOgY?Ufs~@z0GpS zPV^qnVEaz3KP-`xQ$Vc*<1lq`o7SA!P+X4{sWtRDdqpkls;Uf%eV^DXU3)rpd&F$q zUvvzPq4Z@KDimL6Q>)R8FRX@3ds$l$BHIYm!(zoQ8%m?Utt&@8Gu#9|R;{e%iIXpyrJY;Q$iCO{wP02utA49Bt7yIH&cwPAJTv8dEaLyzhc5*;eTIks=*^OW5aT79C+H=Q+c z+5`n7*lAU~KU=5-Jv7L9=!P7nHCsDosnbepA`v^R)@8Tiu!|F$!?r9j@NYlQ7U!M#)IHv24`iX*&;qNy*4woKUz@Q3r*MYBR*#z@QIM)L zYq)ht-&zAAnBR{IGG>n|6d~B_hO`-WRt3S6HU(+6SqkF7Qpf8tA1Fk?VqHvP>EmhD znb@6CI1GI}TsjqequHmjZaN1H8!rsUG3qmZjJq9uEe@UPDz&88%wCgNc z){utB@^R5Nx66q&;p@&mBuQK<8KKWpRZ0j(9ey$p_xyY;?WjhzvD%WZ(5bCv9i^?2 z#fhRHY1bZ^{SnR>8)88bh1q&rSruEy62NZEv}5VzlRU-B+mQ_@P2HaM_sfObB`ZUZ z99NWCaGQf07UU2(7iJnBBb?=P3jwx#rZa(7zh zhmt~sma;fFL1U>%D^Wd89QM#vDLNS89k1JE%K`1nou;!Ar@;ZtSFjf*-^ObWrC@b> zJD11GX3UnE@{nVPb-%m@Qnoc>*LBNyUiPMewIv(4ytbTDpi}0KcjV2= z4^67R*>YX6F%{@$zcQnDo2@u6>8ts4v>h~8Hb1U=gUumdY#)gYKubhd6bU^rCmd!f z#~v-uF{&N3uwtv`2mA6NUk^%U*~kZuTs1e{3Q?sx;wfJUmIUd!!)y9T9c8UePShlu1rHP$rZdzv5LbFz0xTogP+1j-#W6X5YcB?ak@3(50*p|V9 z(Z>}wrtOIt%FV@yw5nr&bS%ql01L$#jZNoc0B?;Bg&7{tPp3+w*f=f6C4VU%q|+j7 zX$r?5W{kz?=76X#T+;B#x=`0UiPXkDskbap$cljrAiwPFt#zBuU> z+_`$H8?|cdw9y*%l_!;Tj20iP-SV)xr1AMEptKdBozo@NEQPJ^ zrsi(igCV;#?S3$T1@eL@AIvyU`)wPl8pGcWbG| zPx9k&HNRQzf>SZzm&TYjoIF!J>^baVvY9dTBeU&rbs&|80Bjd|%AhvD#`>A8)F4k~l0!=CX?yeP6~8Mabsh!N z9@R!`ZSgg=UM!agOSA^Zepsp0^KH{F+dWrlu1@ue-Y(ag^DwMYzBL|f>E5`tT+g*} z)$3v-Obn*hvRLL;E9+>Ar)i0-bHuvQUUv44opz8}fSP*Nu*1*06jr5;=9*{25zF#m zOj9S=&g-Q)I00>0ba}=RS8Hpxt93g4$-YI5_P#RRjeEmJFzD3hqj7IM>Q619#&*o! ztU)zT1)5bBodrH_I)n9SXHOW88?|;_6|35&vMsM1d_CKe)W#2-^{y})`&7W0l02Ok zyRCM)XqDB%a=kvxCr-%{01F@%Npb5@WqTO9Rj$~SPP!F==_{oYAQ+7XzmgcC z6X1HNVz$5K1GxdH?X+Db%XFx-_Fh`f0QTmvo!?cQ_PRcGC%h7HQ_F0Q@GjL0CwYap zjkbFV%LLU4ij2(>W654jnme3hSLW1`TU@P1QMLVHCw7K3=8U(lz!OV+d1CXc3O-ns zML>sV9_j3=#F9A{m`ZD<7WdepDpXeh1JghjQmX@xTeUV@vWyWGvOSc=>9Ab#8hA+} z?P0z=oRx?}sj~Ko*}5#bvwa?~d$m#ln+(firytO*YInaB0>4gSjI*mqM0qnP>E^Tq zz&+>@J5tu|rdK94K>E2+zO|R=RhuIB;i(+XWJVnHDRbopdEAwN&y6P*3O1s%z^yUj|Ae9225snogqEyR{w`2==rPows zLMJ+f9>bBko;wcZ-#O{rFw##?*^WU5x!VrR8F*>ERo zI*&KVm9S|vf}v11iWY;P)E2qw5^VD%D)w|`RcMwT9+`=DJm!1OSO~Uj01Oy=svlOq zGn!x&+a8wd^2*&bsnul0VfezF3^z@-qxc8kwtzG`*y8-8E6u^eGEK{B%2c<$)lS86 z3*XWTW)|Bgx<5Hp0?{feU5c6(R~@=D#+sdAMl3diX+^DX^4;xWDOrUOV|CtW`OP{r zm{=Uy(DJT}^`?4$w>a%)rO}|-rGg_@aRLo6RE6bf?3N9pa8Rg4-yN{>WaRM5aKovC zilnfWjaws^zKOG>&m9a#+GtLJ@S3i$qI$*JL^?J|TAZm)XTVm8?IdVQy)jFxK~uIT z1WwPw<8(_D>r*Ab0UiZhOINdq30-AYtbvD3+El{wQmK~3us&(kR-#d@7bkO_3R|lM z#Z|b2xq>p}iLe;2yrS{;Lf#T&XIEVL~sgAYrqG|N9IHwgnU=^ z2(r4Zy4a*VE}OzcA?^NP)wc?UvkunnVV*K4E@!QZLgvw0tSJR{21!Q`IF_npc+1tD;6Mn}h_wJ@lPA~`K*1@O}lmW;V$0Ls{ z8pNo?jLN+tD>RBOwvec?y|#qKH0X}Io8pcNwOYPc+4U@ceQFfM{C00hIg7YIm zTy!e4<#fC>+~eV>HTKQjqScv(T*EZVBi_Vot=5kAalJpC)Kq~zRhHu&&*2=ms`pwm zKAZtgO<)1KRx2F<@1=@35TxDl&<1kdOfGfDr`4e*yPacK(pIB+)268{Cx|ocX!+wF zqbc1`Zl7xMK;hWIaz%8GYOhaq*-;>b#+t3y_JL}7;j&Q^cBMnFhg)^kD%M70nXikg z&-e0!+DNbIwb{U+8+^bD-f#(ca?w>*=tY3g@SW~F<>qZwOMsMT@jOhi?$A= z+wk||TATtN7AIXp41i!z*6X7^ke2-pHVQ`aj2+EIybBmRvM-18zDjXgV|>&loY@Wz zt@0Evu61SHRcd2J98A5?4jTnQrNqQazOwy`V2`OV##jWHc6nz?NL9WwdHXGmrTjw%novydp~FAb*^Cm@JerOKf47h6S5e zAL9ysP;~N&d1Puthx65v+i|3xu`34jlGz`*`i>#=Y5p*?0Fz?@R9v@fjuUhZ$V;kW zFQ~R9Bdi9U*;ou)>&>jo9@|@Kw;u_UgEre04#8o!@A7M>RWbSDpi$e^+DzGO%<@`| zX^oeQ)w1F(I`fLN2#-5f-8WaB)e-p?Hw{`HhA?!YQRTZ;eb;ZUW<#z$mX5te1y1x!Ikh)1F%P3H;FI*&Q*m^Lu$Vbq1ArANMKGZ`JIs z<@dCGsnjPhsax%U4#(@dUYt|@DiC>Lq%9@YZ!+>sCN`wJAo^4RFPwmsw(B@9;TNXb zJm?T%*e+n4v17*ri7S_RuX-|yYvqX5_HJ*q-L)*YS{NJ(p(EFwig>JwbET?p@w_={ z6P8@Hd?1~d0YM-7-P2lVYek714)VgrREoyz#2Q`Sb6d5Y&Xp<^PjPgAUFg>+T$pl< zT`alFu{o=7l|0krwtIks#iJF@PEB_?+z-0GRxDE65!S(FiPJl7eoi%4T%ZCFBAt*8 z7Q(8$;S}1N?#12=$l|QIq5&H?Zs~4&yHVwVv~Doj{w z51jfMXWiwgkGsU0;z#{CHW`dGz3WsOBHa@z{H)Zgt&079y?(+KQJGjYKG@4N+gbO< zeb(Ncib~r9=#Xu9MtZ5dUL3snG_37adA6E{7T;OBX74zkQKj8+M$MgqXiNUK)Zgi) zU`czcpf8^~`j9qDYvHK*j6V{UPCFR-`+c>!;14Ac|K<32RidADEORYeM~ zHHBkgT2zO)Q<%4gHGImry6={(!}`z|%y8R2O@e-xko;1=P(A9M-QM-eU0fd*rH#E~ zJL7QB0c;YxwU2naIql2`TkyWLVyDV#!)SU)mbpOJ*@m&*Fd|iT_OtnRKG{z9DyPpI zL(=q$4dux08bz(y+K_AIz!N=pL9Iwj?^PtBu;mYjWpnKX`(~@DC~7!!z5mO>Su8jT z1yS^aSm3q{?(RD@xI=)iA9}Xw4)UnFbq-0mnl+v`qyGe+!4jmX|LR7tN~vFlk@2aW zBUu!%6O(Jk+4{kH_F#o+QFg^w*hgf{@w#y%UvEgFMWg5FxMK3P8CCw7>}axn7REIV z#Zmj&?^OQ`uq?He^ka2}@r#V6ByPak_G2(S86Er!7u;v3HY@( z){soyW_d!x2fkT(exp7zKr9@Gb1PO?2_|VJU8_ypDXXM(3Nv)uVHQU1l7CoHnEUOw ze$im--;80N&!AUps|G30d?dL(p05AMqdvGy@^+v#WMnCE7-fShsJ#IjNWqEG85*6P z|3fNojXQB&Te5JH!UF{g$7ht0Y%kxz^w`AzoNzB)l zM|_G^-@<%~otC?2f7%nBw@hXakKg6?=rk7C`c`ekH}CyV&oIBoqX$Jr+M0>O%-f{w zt>|A7w#Mr-GzbU^=hy=`F2H)iCa|1@&U)mh-&Kq~C?t=@~GHojcB4CdKgC&uL8juEKqIUfq%W%2*_#tcO2`0Yk-$MSqe)84O(32aI_8BcGt+x`f8D`{_EwJ<+>}JRww3MdL`rx;|x@a#U)FVCi>uQI=CUdsb`Qx}fM(5Sf4rK&d zr4CdupwS&V$baxx=L(i+AghX19Zx2UDW@ZxG%XOmyrugu+GG@eaS{SExN#2w?y0s9 zzXnx%FhQS9-m&jLC$pjltGt4?2LN3_qQ9UmV~5GNwUyW3%!?h>4#)ulnQSx(Lq&cw zKrR~~@1;PB*3OVpH)d6@x!z)5gIPmW+#$7_0+mJ&n{B~h7%FKo&PEDd1ON|co=;PW zC~5wqS@YT`2LY$Fy;I_cIk4T$fuX6Jjn|iO)+!wb02ge? zTt&lk8&f?P$RU3+=7S`&0bvFraFos~1B|?NB}~9H^mOoL;B9(C>0{4nGoi=t3(-h- zG=X2n4h{({HQM&T4$?W6p(#q|3 zL>b;I!>r5=l~02h>f>=#<0I*ElrSivWy{g zEQycTW?k}y&5u<4-Xi(?*l&c!;|Cc4lK*nynK!h9%9SqRVl)D(f})EP@*a-*0m8wn zr+{>KZF1nlIX}-Zd;4X_R& zCZiSN`h|Rg6Je-s-thbV#)Wde=|t#X@-52!K;6CY2*Ok6vdSclmc@7I@|(Xgzw@@t z8)ajRZIMT3h`%jT0W~n-+#;P}>sKiv2An-unZ8*1j!96BE+YHTvcj zM$8Zr30D{KseA{w2G_kqv4QgwVDW=AqcGbwm6ESCJUB3TIp^>>v2znLL7f`AZC}sd zLXdlgmdDUb39yH&Yyb+sChZq^vzwE)Be+%W!{VvQ(oG11P30!3F1vt2OMNK~+foL_ZiQVVU?Pq34Uye+z&`V6F zPcOU6S15w>WiuatviKl|_GbEZ6^8;^ADX({dv7E0g9|VKzH@d)qQNNQN6f&%4R zxdN}q2RWraS)6zja!+6fE@)?I#J|i?_B*j2b#{i<)eNqkI4|opesx9wLndr9Pptiu zCzmN&ZdwJ%V9Y)t*q0e%r>vP^noW$RT@8H15kw*w*X$&3V2csGkJ8+*>1=d$=zb|knOmzV|}+DcOsPLW;nx7A&P%5X8rT#_l=6Q!PD zIoE&^n6(E*C37XmEor0N2DUAdLW$lDD806G94W6D z)(}4S(pTSQJHQkBV9IdwLyEzXhmh@YT*H-tO2K9ycMDaf4h-NJKUQdpl${hJQ|}*p z62AAn?s?jih%fR_Oo=i#_MK7EhPVgfNHY4#zwUHJnaeI~O~J0j(%rS!5R=on1xA9a5unvIQq+rdMACu54PdD37_ z#8)(*d7hw2^i-*7lPi#d6m`F4fvcn8zO4#1bnJ~iRYD}NtLB3Nq0Tj;H5ljtE>#=& zR{H>#V7fUK$J@w>b}HXcxXxB~h6E}r36VYcw$7&0_hw= zL5VM0YNH)4v4retsTe~a2yAAQHsw%2Sf|a7Va?_NkAPr04w$IZ5Pv7{y06%jJbV`` zVE~RtXC4nr4j3_`=ErorSHal zFXGD|d(I80&0kSflAMeMZA8S(Sd#7Kg7th|QVdZX_jV$Nt4gBG`Mpr|k4k}^jy8~v z==LTnD4V~+j!F&${2DL4Re|&?WqKk4(ADWE0kMxlb+;ncu{Ib@zaotQ4`H?C9Dd=@ zD^P$kq@F%u|KiIh3ZO@Tr@>r?o+V*iv=K)u)r?zJ!2Hz-sceaBDI9H48c8-4vBU62 zmMK7E)OuE0hI3!MmOr&?_U~K=&jg`ai-u&$0+$ghQ|M@OJKp1hqugbQij1Wbdpg}^ zvjQ{RzsvB&f4f*S`}(R?ce9@+aCd8=lE^mF?mOd%akl+RT|;U*HthilPMt^PNK&Ly`KF12EzyQ03Ve%K(ifW5y|g^J zuo}}=qoqCy6bTVJ^qR6Mmx15V$b(n?j>@XCZn=T_GFWc~a8dXnZa-z8a_={u$xjQR zh%!p18_xtUM%8{-GQ9NQkN3@G$)wVRw=6OvVYifgQ|$wsqUhxzZkCzr&M>2avV|Kj z(6qexto4GXJI_!4D7s0JrfTMCx!~FYft_UG^0MArYEh7>gVIIu4;?V$+abTc={mu8 ze;C5RlXYK2k9CZ1$xYxCVTNW*WLtg87M}%(0Cyz^9G|4benp)DT`Dj1jTC1Fogu-5l;;pr}N#vmKYCfgAb5uzP+I`I+pF zriHM#0uDvU72o__i~h?O=+=#78cR~kX>LNEsY?qAvkTR?ta=@?D&v6^&k*OUbGa|4 z&(LPl1#ya(*RfuRJf0nUiUJ;_^Ljs85-XotL;o9_YPNcDHQ;Y}{4KcuMS@vQX*Vri z7nt_~zRUcGXDwy|_~1n96tD_HQUo<%&!>j$G@DF#{(k=XC95!9cHuRBn>J-!e?<-|7uG#GFId2xtnFB-2{(dGRkOf~eUP@( zP=5sEdSyWkwbOSDRwKSAc!V0<+JL}Q?iBM}y7|n@FwS21B-chI*obL6(87jF5!%|x zIJ(d#E7GEN@?GDZQyr}cyQdF=cv*w=B^WdTA?OkQ2*;#-@FcBhZp- z&QDbQf(cIsUW5LAlQx0TE%1}vO46*l{xbzXfc;?QeT$4>?yVYgz$F$2Bkr(8q-xhQ zZ<@qBA8_yWgep#g2j7=-F~^M3BRr=s!`28aw)KQe7FiS4LIT0uid+dmwrY-EJx&~2 z)1wXPrsh$wG-Zu4^Vr+DAkb zG&x&_wvTMwf6UrN1kh{}BT`C>^rDsC!AbeVV`A*s6V@A@@t@y0nmv>SHHHI*Hvkr$ zCYME{J3k$1K8C+;Vnn;?T6gh!8KM>NQ zD56mu&~r+Np#7s@QbnqwhsStfyHOxRM{P!|B!L5d+VS#fe6Df%uq6M!$1p}&2~fYh zU@tS0R&oN(eRvYgVN<-?H#G^hHk&Xwt@Oorz+7dY5*s-^swZ7DjFVIJYRcb$dR7i{ zQLWXgPW{~_m=o!Y9y9D#K{?ZUcGnrZNH)=Yq43k?1H@YiKVkSY689hirJ2#SJF)6As@$6G|3F_u=~JGXR(3R3@$U`8ju5N2Vd*OUzAqGv_1g?>LSeN#WsLKzlLeHH=)0(zu zeb8TTv97?xNTFCXaxt%_d;oapkt#g|kUc};E(z+|f{O~bPafn>mBxb~w)Rq4!dff= zN@L(Vc$FoU89HD?yNML{r(vAJwW2)>Vch}6*N}BsT5m8CnDblQ!cGlszwkG4ng!I2&pS%|Zf9!+#)j|0nd1Pd zY4t1){K&imiy>bk4wqY}&Sbj0T_EUpTrLjYme`^)a%uCJ@NRea1rrFZMt~USpsfXl zX-G0rUfnl<6Lh%@h2|b5l7VkI_KcczAqeW^I=?7BE&)KNaE(i!@S7x&E@B6YtxW+~ z+B?0fT&lo}M?LE;7wbf$#q7lXb=6kagzpoQ@6|<5>I7q)+0f}4+RQH8-dAs z^sk%Rfu`IVMOo=UP5qJWU+`jD-(5gyG!(h58zluuqJyh;W@E1j=hoe1?G4CX_#okO zOEXmX+GmN2)nU>}xbk@Sf5l~7M9Cn%G1o=3JC~ExH8?w!dyfs$`K6%(s6A{jKI%;b zl`~wd5T%)4y=ErEGR$uem}s{~%z|k1wsq+7`$%Qd=%++OK&BW)y?c=HWH%Iw|ftdpxe6PIh4UwNX(>-ajKCY)da_S$Y52EYqwxVZ- z6?zn9bpXjy6;De=i}6iIVxf!APenBS!Y)pz*BsHmPi@kdE6eqmq9#2rPW!9QB*fm6 zVR0qd<;#vMY}n}^fId{Nr(t>*Rs)%+y*K@|sic%Bt7X&hI64I)|G$&rky>lnux|^R z+Qay;SmF(H%(#lJJ;D&*7&KW~!=6>`FRF1fj~VfXrer!R=qgCNPuK-)GFOR$RSpm3u&q)I<(n+))4aat%^U7jR{aVQNvfi zYV6E38LGnZIT9@)vvc%BEQJ^22CO@J>lMt=`GH~LrT_#7OUsg;mL@82uTd5s=pP(= zBM#?Vc{G_xo&ciqx~asQF0v(zn37}T^4Is@EO<4l@Az$ySYPuzUT_? z@sNX|MweTJ?;$wudMJ-X8~F>OAae-!Q&&>omGQ?3T z&fhB@hVE*jehwS2(Yjp9&gT6=3zj{gqs$FpuE9VaK}VSF2x_MzvKP;8lZfT-=y5c1)ONg`HUz&9Ct6F2*M8}mX~e~0}b?U-h>Qs=m; zklX&<+zIu>FJ#*7Q-*8BAWCu!t}iFsU>-CFdDysyFE8z<<(ApR5t1uU<v%|T!XFmjhI*@{GDm~Q?=^2=?{bEHGjOb;8 zC574)d|Km~bk*`*$$q{mA!)!V^s=s8qdqBs8v$b@;`sP5aj-fh0=c4c4bMjd$+fXY ztU8aL{go|%wK3o>S$>9B0RD{1=sa$}5c1+i8tE}Er8i*)tbTv;TSga%WTS4EV;EcvD+9?F9de!9w7a(}WUQb6P`yF$5_+P;K zp$}MMhS#Y~zWZ{4xlpU+&-WpZeEt4 zL&LzuYKwfKYlUc38C1uGIx{Y}#cb6!k3|40&~AK_n|>Mb$&8*JW_fb&)dSE(FxED3 zV(x@U0|~sX9d^?3QKhbP^jUBd+WMg*Wi3$?%jQZiQ`S`eY{V6cgoV`VG9<#o?!yMk zjP=Q#mpN^6T>w7|e3rpVqd7)X4|N9Hxnv4caobnD30R=oIW+Looh1y{Z_tE_gPFNL zUvY_|wB=(Kqr{-Bp;Vji+tw#1^B`po#kMjs-8pHauz73y3 zO-Q5z`i_5%QRSa46aX-eMmS^?57$@JM}r)L{1V_q)CcejeJeZoB2oMscFR){cqPO4 z8v5)`T0y!~(zg5}aN!HQ6{{h;a_fm`M?}uJC_^L+HD$$1FoxuS4%>{NFD%`?R6t(} zGVz9t&dN8b+W}(sf(MI-pUm!J>Kfu=II@6j2dDv(2yh3gRVo>)xhYIJ6joCH3+{5 z2EO+Q#QW?=bcI#QQA4g5mS#FD5>C$wPFArb) z9{rI!D;iUudlVCAOS8(B=aOSxG=615pu!g^`NtAPcqb>%2M9=tf`@M<+H!Av9*Y9P zFMN)-CF#q@EN<9;(yZc4Z6xzV zpFWIxF36eI5al&Q9iO5}(WxxV+P{blWwTIEcgUDMT@Ekl9EmaNiuG|qW zCDS7Thyd`BFQ>t-$SJX@5}leOe_-4vU37PagWJ%L)Ezqn=*YyggoT06*g0Oud>oA$ z@Q=Bf&W;v3{`aVhoP6=i`&6 zWpqPM!)`X67SF#_xeRW{%l2{*8#e?Jt6fLHQG-ZX*XQ#iV7wDxngX(gOn_s^+erU3 zm7#vsvsHdl)_qcVRyHGx#E@BLfXEGIx4k$92ECl(L{CsLQ`7EjN~Ikaevtz}Y!&mu zC6y-*F~*j=-q*idb7Iy5oH6m9q*pcoyKCO4FJ74GR?`Ltje(7SG)d2a=mWTW3~NwK zjeZ2Pso)4CF2hg~$uo=)DKa)UzA8)Ka-^JyVVX~j|J0*bx$t|De zP%|&gcjd{$rzZ5hL>X_hy)uN~?M~%xl8;;)XBJ|=PSI}KzH1vL0F8w&1Vcn~5Rmc} zdLvfUa1zQ#-zkuDBQm@*pN4wuPu+=xDvN~gMvmE=?sy4edbrIh$YCQLtG*SlXs@;k z3WO$@r8_4*?$qLE-urvgLTv5owTR>O`=tb?ZQ@7jHh8L+k5?^?e8sV=O_29Pp22tI zvf1V(PdvE@{U`N!QDx}D&C(ex9Avs9HTo9=7}QkEHq9`BxzGWtjRt z>U-ZjE__dZ6pOP*P=DV|h56Qn(5K>HZiAGaR03tQN2M0OAIY_dc9wPi7Omv< zeoNoMSfrnM=XKelGdin(piFKgdP~%(Cdm|oBorRKH2$+723OV z8qU@!@zZ**fdOA|LF}I_pSlT!it})J*>yJa<`+K&ggi*>K{9${z}v=%-ng|fF{_r8 z0hX%Uhurn2Ot&BLeXmysqPOf{sNRK7ZZ!N<2N@t4q8Xbi{vEqs)yiZu##HJi6qD|} z{@Sx*3X-oD4gX=U@*Zrl(?2(jb~-PUQK!~lU1a$V7TGj4}Hl+PmXdl>Hgpfx{Amr z0mSlc`|9imu4k6n`MC5#iY;rY`-Gn6!sc8L?9lP*#PqfAGm}<}wGynCw6X~Cc`oJi zgQ*P;>imSuC9Wsw*#(mt3c>J}*$DOQrrmH4nu#O6`7c3aX_Vm>MU|f`Yu*~6rtO+O*6F^Wa-5(z?@NtGIlxP6Xl>d^=yKlY;I)E#JosE!oxYC4(3;dkKT(qPTEy;_3R z)+u^b0El&xCKhXv!QB0o6U~W5Necq6GMJaf*qItlS};N<_jHr4-`0Cc_i#`isGf_; z`l(BylqJ&d9vS{C+>9T3Ug^eT#3lok7&wyrZt@Gaf?=|bn_V3$`YwxTA=m3>&O?(B={bbW%g8&5fGE_BHUP3UEvA-kS zPvoDH^Sg@xB>je)y@UEwqck=l>4$yi>DxQ3fX1+So3H`DnflyK*ww$%dthsIdm`1^ z8&31d{E<09G}?i)A>4FfP^{=FXt_d03Y*;l9B%EGoi(;f5IgHcwY_@&Uc?_YJ9ntX zXUt2b2$5d0N6--LYOCG-*Y^l*AO}7{krOBtqpIbf+AAa~tgTUm-el5P7QPBdGtp@B zBsrZD@g<2$1p{NkEhkFinN7_W3&LCXd{rG=L~(RpHXr`d@}2sE3HG{GLmeo%_ITS%e0}x z6km=}rhaAsA6hV6@c@?^D4{BhmJ`%Un$~~J=IYu2+9lB#qnCCU@B1u#jy}#3*5Pls#IvkOh>$*7Wh? zZ~Gb-7?4391w@ND0nd6Na8U@ea#s#(G!7%FhN4$%%Obo3Pd>!_Y;eP#f&2S%Q#wA} zPTCdf$6rZrF84v@JxpL!A?!O$QPc*kDB5mNcwRu990T3km8s_L6Bi=O66g}*c!mlB z`7?@wPicj%FC@MfrGlc>fC8^9t4idMi=YRyIl#hcPjVmt*<%uOL$J>lO8X2UIVW4_ z5xpBjuze^~0r>_i#AD;66YBr_Rp&R?!WI{u30=*N49yu<03>eV! zm8{;V{-$91F&$9BYe=FeLNb;eRq;^7So=nY1$5U9j?M#B>K$ww(zF1;-l5+;UB_oq zsj|XaXJzqbJr2Qf`eyrSB(YSaVxTn=qFE5o6@?kingEE|?(m*^DQA%hOll%RHOUje z;|JUf-WxMfxSi#OSTe@;D~wmC*P;(;hS?7l;T$*l5gC%9fQobk*^+*@?p6=~bHW3r zTclv=VU}L?p04;*Ny>d001m_E7=Gd019(f}7V%)8qJcG_IBFC5tg*W7?b3xG@WrT; z=dH~aluK$_OCD4*9sOaeVaWE8m~g)=b=H=cPH6fyy?y5h90<2273vGoGFRx z3w?xd{yrJA+u!YUrKF}4E=Kk$3j50A+cnA|Ndo14)DpxfzC8$U8I$e2=$>fv3Ips# z)`_q#a5b@Yj~QwNHNVa{YG={q*hWq2&d|*T z>GF8tW!0p=OaIfmP?NEcBpe8LSk)l%XINa@B;3=pm&o<+q@b*Uv%kQcS!k4H%EeZQ zk)VApOuYYST0BC_j7E>LCNNk&h_jLM0eovB5DR$k&_lytD8Q0!1c)Ghy?i^jYT50f zUUCQ=LE!;^%dorG{HsncE3(mkX)&^ts+yCQg>oM)jDG#52{lQukx=CVc*aP#by_K; z7qJ%&$Jw?Ej5g5d-0r(>PA5*a321P#VBEJ%EQ$2%@Mz7-wWPBfh=QOpM2%1pj~~#W z)rZ?^!n@nIIsIBqzAnMCYH%t}CYkT1C z#g!qb1(P{x6^Jigo#&x_Ao@TGG$b=gH8x#2#J2(thvQ2oY7|?B&L$jTx`@}-k}j?C zEgHcV&WedumwqIPwC7NnLq)%>Rp>ZW*LtUZ9;sb~@g5Y$*`=jF1i{HbFcfTk*Pmrz zFnM1q=*_Sk{MIQDGCEL(JD$A*B_Uclk8kuwDT~JIp-4r71ZB(u7m#G=3I*#kGqkf3 z3L0Bc)$$S%chfg(zVkvOJ}O2x`;h~KIAg|l&;WmyMKNOKJJBhoF29{^h=zus5y9xw zr>1+fVbtET+1w-GZce$4gcVOAWfW#?=`~7R<<4kxft^&P@L&bt` z_0nAV0dV%jPwaW}-!f;#Fk3^SU_#-CNGR3QEf}gS(;r*%SdRWA(j*({`pV3&bFOfJ z9iRbKV*s-X`ZjUX{t~EZf~lzmwHFlC=!(CaX98qPbvrh6JmLwFLPayq_$1oU@OtX~ zinei;;7_}#ICh_-fr)R;20ifsYq>44HE|DuC0g}>_b;zfP7Ep49?V z5uKHZdPV_KAiiUqHIWTjgXIvS(G6fQ>JOtzzVV-!JwzijaX*TaCEHD-qL+Q^`qM{5GhQ54@e%}d^lX!?gY;G+)zsL4GvHz4bsW|e;l2+cBD`c zL_dfC??T+*&EO%!d++)B9c`kcV1$6zT~+rCuR)5OL_rXsA_FzajXd7%HQ)0ce3C5D z2%(RMoC)o8C(yctw;|^u&v;wW7j`J-Q@+p=V4o*1 zPO}5Icejl$Ymh!0+{+5W9^{PX&u=IIU7X_}@TCOxaU69Jrd@y{CPWK(4e_Cr%Z?vL z0ti5XvVmo(5jde*5J- zrvaPB$&$-X5C^J-wfx;)2_=kN08+{CVH{7EpWQ=gT3?x1FBEwP7hpc`3rQg3e9C$X z(=q$d?YcxDu!JjuC)+)*Ax$RjYUa#C6>^R?KtUBo<{ci$LYm82zA?8rHmtiGLOQ=5 zZ8-0YvjrFU+753waY19gwcf*>gONcSNksf6{f4bG%_D%N5i*+P1SOX#6naLe zHMh*_#xf(UAb|Bt*SXNR3y`VTT8F{Z2A`lLxU6h6*x%5&b0wi@mDeqG)yUg3(D2rP zq@1Fr{w=Q40xQaK0dj7;%LDlL0OWg;q)B^~aOQ}U%d0Mmfb-N64oQC(!zP7e`rm6V zW#vP{}n=z0S|d)l@htJYf0>^2V4u z`*e6>CntDQzFkv8yth8AE09<0JDKFG!A~+Nx^2_vwCM!I@faJ@YbWW^NC8+CTZi1a zJd4M1$^z!aC|widL0RictYeX-W>6_EtZn&_E<%Or5_cd2Hb)x4vW;e-x!;}P-B$_Wo(E%1V$6pUu zshXEg|IvQzf04y$zu7C|?(|Mwc^+w)isTdYW%^bjdxZ3W*QRZ#|9@IKe$e}-p%?D z2J+IaTX|qx)Gre}#JnWL`8&I-VcFC?TCbG^^oG5tt9sVrnoaXk?S0gJ+xrD%3wmHS+ELiKSy(x*<6wN+ z7$k0wA%&)5T8efz?A*?-Uni_(8LN4M+XFJ1u~L`p3v@Qb`j&FE^KMC{D+CpY`0&W zgU;VUFl`!mn}d`ug}Zn+5vV|a3v~uL;u=rQL)m6GJ#91QZ#>1`qc;uFh5j;Ph7*3e znXZEcc8g;`J<)iQ>(1_Y(q*p45btAPfSbETrLJ6%j8G-+)t6(~O-we1_;g}oe!j}A z4-H3tk=_C-bu%5dHlm)iK$ZSs%CC8ojjzep@sc zU^=JXq{4M6Qgs^?pMhe~>WfW96|eLJ0^rsAnqB4ijZpb%QEH}`(SZoKq47XSF!m=J zK#!ks9^RqECsjFz#Fo{zfZGAz#737+nDDv!^I}5Y9xKlgIknk2#IdN8KUA;&N*KO3> zo4Mg!hIBc(yjmfFWJpp`m@D(FbdvMC|3s8G%x6oKHK4dY%B}A_;J_!_yi^iZZe1yU z$5`Vsag)MUOJiXo_Vt%jKRrA|={hcb9kW4Nq4OI& z7~IukOCbdW&tcpOW-Gz5p7sMBrvn1O@6u3L1I~??i42_fuVhJ5(UE$YGF`4$AB{86 z>xeON8h)WcK-vz4>C)P;_9J#yDG(GuWn(|$khmT^wiCIe?lq3~0%T2$`;j14+)U~R zvw_j^g6&6$+f*hMG~UGM*dRLTB*5Uz(TyQSFNJH~OH{&{@jx?*(e-id$Hnxu|K9Qm zug%Y{-b#}{^EyGT&m^e(<-bXNsjuVk-Ws_$c%P3A^c+M8(nAFGgN33cWaeHzU)KHx zS5bSNH4}@5`#e2PeKXYEO{42NS&vnXn+hNw(L#=$$3T<={O9-fQlzj1l%`-Dyh8z!&=3Mr4N$d#8aX7sEE?z&YqxT6Im3xnD%@I8Xj*k(dC8PbT zrDj=JqXH-3WUZwJ$g6T=KkNr9MDNnI!TC7X&T3u`){!#!vE}Y@^l}}a`Hd&%9p1rd zT>}C&7fV?Y)_%?zaKLJo#1DcbN=1A@C53M@xO;L;ki15lpi!7G%InI1`?7;S zl;e~BSd0xI#B!URknzbX*3Yc~A6xgi0q%`zaKZ-JhM0R3S}^*$n~z?0xv1R-#@e3; zU_V&gRm@ENZdFM)r6nu@Uo&Ro;rI834j(`kA~Id0CkT-KVaz+halCY3WBfc6B0D7a z4cB|&ulMoG1=&=8EF!8$)#Oy0W{T$}T{b)^4dk^@5;-;xg3?D!XeqZ081^0@@_i2` zFm+Clcvi_D97tuZ1=X8S@IL(h{V(POcO@S_!5xo@$uOJ-upb6>jUrP!Q`#qv4k94q z-Po6#EDT9%=BZQw4s7>#RwQP&Js{t{uN=xhNYzchHm~?)a_Ui(7C=;Pf`Q?ONUJXk z()1a(dvaJdX)nZ4*r!0e&fYmKnf|81Gr;>ILWo=TRA2q5LG;lU{+J#SjP;AVWA zs;6t5tp*L}xCO4(9HGAAS(fziIYDEoDcV?r3PkfY^Q9Y)Zkv6=IDVv+r4L*91g6-< zRA78n`sp9%+|+Es5}kp+We=N^UUhCHo{0tlUZ*;R|F)Lp$;*Vs^rzlPEXmoMo*g#| zFY>r=(Hz@$VXSt29geHB`Z7cr6xEft=K4^MGm_(-7!rQl7r`*B7)I)8V)ud!BjbCABfp}aiVH4uM7wdt0nsJLAX6mR9h&r-^FQ0zK41s`_bvMy(eNzQ8 zlsK7s!mufMwS2L!yGV&inVi^+Hv`=_oxmp{C%f_+tVF%Y3 z^g^EAJ-o%$5b>*b_-8ie(;X=~HNKStzY=AX zn4EAZ;i=5u6GPf)38GCDpiEw_Afv@D{>(Wa50xs;My!xd`uvRz4j6NvCT2&!+DEg@lZysa8J&S)Ek{2*2v1vtj z6HV!f^tW6bz-C2HxD!U*<+m>{W@YX)}htPUKFnO z)sgIz8_!_mo;E_w-%EvXt5HDg#4&F$+vj@khX3S_&Uo+_sKEKVFDWQ}&ifRtxy107 zQb3S>4HbOv{)zCs#RRfOzO1%UxhQUx3rdD1ob-6E1PJ0GwSx2P4`8dkKu|HyV4(mZ z)aP_Z-z_3PjZ9eL(Fpc?;s%XhVS4pFWs4h!t;ZYbrd*`%Cjtq97fNv5&hM%M8Aq8p@Sle0KrY z{{msjB?@5Ut{84R5D*#GfI=-9-~Es$wSAy#3aJ+j5?T}=7d=Ik$;QZT((=bI0r0wJ zQR|bo*(K;#Y)^Cdh*_Q+P66;Z(^Fdk7@mq9IB>3GzV~X-p#Jh3trKIt=v=lJJIm^P z4WucC%{CWbMO7i@8hM*EGX)UZC8L`4-!$+Z%a>BS(wRIhm0f=F3e%5t%_Y?09+mtH3KRx2$L}{)JN)=G1TxWY7rj?lc6Bv^ z|MW$fqTj;t(i2gUUi0(&BOZ~yt7$g-Tb+G#<-ZSSJ6!CJhgb{g(+)h;*>6WY2W{6? zRhzQX3Q{6VI4$65T}Dw%8wQOGxU&0rEy{z%UzN$#8pIG5mEiG)E&W^87Y(11qNr)V zsbwE$OXp0`HVA|~;D&0P41=`I71@%8@YYhgjICsWkJ;{#xOf~gNJ3R8r_FuZ!a`lQ z--N1d6&5E1lKji0Cz=F!R_PpTvMJ&T^W_jr;Ccl_e9o{OLd7<7Adom}*J+$J*$fOd z^2Ccu!PT_VeCMFPBrk?a{N!YhNos$Kk^#v1eFX8>e+4@}2$`-|Wpg+^$2n#Eg)8~O zL2F4Sz#1!55-bl@aegtLH0#e57Je|PU@R=+ZolT)@AwyDl-jni+?$$_dj(U8eRiBj z8{z2LMV}k^BYC505qt^ZfR29ZvGfdp$w&(Y4I;-x`yA-|Wq0Nk!sRG+5X6{(+aM5e zPljG-hTZ{J1zac{35;+;eaVM9PM0Uhyz=eBxeG}0Gx~@PlL40)SXA|af!=~$dD|C3 zapEyeyU8MYY#r7qluK6%Nolo@ZVARXeR7CV-vG2Ro);kcvR`tjf6~W_!YZ0Knb>{x zlOWxIFC_fP3)ARO8X@fjG5yp;Jip>b43r<<(*gIsVIvaUY5KmI0af|{5xl~3Rs6R> zvP*n2yXGSctHbkCbn3f>xIpvKR8z{(EpWS07l{>5Ha%7zNqVaNZ->Xdt@W!yJvV*p zAknE-*qQT9IWGci4&otYOk)v*I~OZDE?$|0{oyqiv38=EvO1XZ=nLmFW~^*f-?7MT zeN1X{JwC322t&sOIc>cli&?tfF_`hQh^*9{$+De(TM3vkI(!&n<$PF`l-la5_r({p zt1U;kw$w|CJrWhFBo8GxiEK;m7=K*S_fbPjd?D6lUf9`&jQJ_Ok}BzB!F6fw-}lSq zR#wRaWs0mcx7=ENI-)(J7PCvU+_0PI?*~DcBHJ>>JnX_w21YNYu?+t{)-b4K6|kJw@WvO7@)cdCLWscu)wx-#;zml-IC7*KrA zGO40)f!1*+Eab74UiJHr6CoQtk@V#exI&Y;)r}gkb9KNKh{^QQ1a6Ewuc|d_Li{N8Q z%P`^HdP0&Ar)KB&oIZ8nf(~C8YD!N~Ca0oCov-|T`t}p280iz8i*vaC(MluXPR2U9 zAT1>lJc0mq$G&?u$j1TPTKW5W;!DDROB;!Pvv58}lpbiMH58v30LCR;z}uNY9)fBo z0Id6oXyt*Po(&^GwIX>D0|nK&R5)4%<0l7fjeIdp$Kcs~a-!Fhi8z z-Cq=w1}V_sGTT4HcV0)Ddg3EY*J~emnWR<|#k6N_q!XXrcEuj-W|L;gT(i_)rN{Cw zBtxt|;5Hivf`mQ8?EiRL%kDuw9+opZMuGL2$&*3gnrd&DfQE8i`d)Kr{G7Y*u|0ZC z=!XI4MEUM4EG1+sIbXHs5kV0YL)PlpzyjW?FA5%Sr z2T+fV9h9H%Xs}OJZ0-v!BK2D}9<6tEf+ykEwd1bmRzIXK1jL&;t*D)8myu6HWd1%8 z(h7t#3g}yis83MK*y6Dl-aBKX`0_wHM5~w0KsxP*i7_X@;Ko9mEqY6oD?bhQjpcR$ zpK>?K*6q4BHQQ9?D6hno>TyagD@wj8ZwbY|ZAi_mx4ZBj#*3sZOq>S#inFIOUa8G) z49}~nT1V__*;(G&y*@NH{ z_lNXxp`;xM!SnJu$$f?jm%B}ez1PrzpF^*t?sJ8euz@UHtR^Wntz&jDfe-F+FASABjetC(JDBrZYQ9|1j zxkuP3WKm~xQoceIT1WlStEgiRhUwYu9<1;CY@@OJ5I*m@wzu@3HxP!N{KTGyet$XL zUjP*JHOXxVKQ9VUwRalmL2yCE=f~;5ga3A&>XNpQ7b;0$ zSJHj}DZ;ac1MqoYpgY#=^TsNj(fewz4J>_Y9AH20wp}z!B@?n94Ld&CbK9q1ndjM- zhT{gBBjUALSu=yR)0aS8^I);K>;e7&YVZ^`jG;zq8Mj&hq(O{q8%U%MhVyHUn zzV#KAA8E37ouCahb5I@Ixa9!NP}MW3T>0++2QS@k549A=r)_)5Wh=xJu}xc>BdkJo zX_nXwuO}(Jzzd9zY%`6Al>lmLK{r(P9ftYf>0Fw6a>B1>(Bk^e$w&2UWbusCjoV$T zX`4~l=3p{8ua$w1<_hD4v67EXd<}?kv;sXY3a;{akjgqaMuAO8GbMdBh2;n_#^mqC zy3)dEAh@%RFSfK`J)|=+`3+3ao3Qkuh8XiVa>#Rf^9gc;;7O7<@=M4#j6*h#y1JJ`-s&Uxq&udYc)j`#jbIDCfl9`p0eKc zgPS$O<&_3Y9^QzCeuHYULl@3n0CB8)4&j5>%>9xZyE-7uhaY~}3I^CMj{P%X1`Z1) zR>ZL$d%AmJ*Ql^B2%$vti}-FSY_j=)6-m>-j~GB(Sj;II$OJzpdSaQ*%^{oXyj*BV z9FGd=PFK^GdUBJvr0>2gG>ociR@n@pWHws{C~We2g~$AohC77dWu_{AB$&gGelg5< z8bo<8p@IK231YUyeY|(4tecrt<0~1x{&NpHk2Y;)K$PWnHFz?dyVDShJkspk5YJTy z^7~Dz8qc6;haVEmUzy{D7<_RUxbtUmO-w}gdZEY;mDoSSmhI-2xr!23qpoSOEPG#j z&$;Q+5OAVfsMeU6{ye12Sic4E9C z)ui1^P`k3+o{j*QQ?G01aH!a+DGnf5cL4GFS>|R4&6zqe*calZIs1AqOFhuF{AgnS z;rWlQGecLLg_U-!l|A5x%6Rhf`=_{OkBK z0vjq4aLB9rtWGsr%CCs6wb(nL@fH$K(Kc)%i%X%YqWhl&BLfnaZ!HBsTxi5n{atsC zvNn;tYF24ub2G@PR?atJ!H#{ipjP9c-r6?N;T3&{X9@G@*)kdQo!=d_$|cCXYB1QB zrZN0dMEqjJ@tz~pNcWBYNiu$@Ou&a|u>$LsPL$`{SKSS;16TnA{SFEtG3}-TN`BJ} z*7^wsahyH}+eJMK$dqYZ8-l=aCJkY#$I3b73N?@ETccb6JTbN?u^})M}!x~?MzZWlg zg>}iPz@Yrin(tbp%Ik{p=@xCeD`?jGR>E-bfB5{FB;UCob;z!i+qzA6>_EBIUISmG z6O0dpEC%JqinEdsXogHy1<=%(&~mUUBSkd*tdzl_wrilej--JR`=6^yQ*+2Ga-Cmo zIpTAvNOz?#OO%-=ksw7kGQ&udR@PD0;Nb28w` zfz~Bpr)f-m+B;KZ*%B*79t$z<5^w1b?#=tc~Y?OS|wIXGeJ z8%^?yj~E8sUW7U751C8uQ^N9n>nVFRm>KAhq}Jjj3j`f)S@gw_Q?B`W@=_M_`#$u8 zvXU6!N1!2>XSNE(;>%$LI~tpDm#7K^))M_$_9O4;{_jdm&dacx1jv#I_jx(+_~Q z2}b(Z5I-4&i*EYDTsr83Seaj_p&mhmkgmNC>yb> zVIIdQpJTJp)MdQ5^|Z@qt)t!C2vpt2xI2HGuA%57x$HT>V`7!zIrDL z4Z=isb9{M;3NWs_~``SCPnTo6-a+8_f5raaXUyv~H z2z6a!0k!w&7wK*d8f%>TWVP_=kL?pMCuRg#+IT-Vy0?aS)d(TrNFIEAtbx z{PZfDjpxiBC20=6*2Z&PS8zFWfyXoD!kP{1d<{rbaC!oc&uUUuSN6s?sm?&&YJSp? zakV7?>IWmupz!Dwocw;sb&=59FAl{gJP@Prcqnwp8t_%aN&#}7anwb_+b=2SHSg=Osp?{YxF99u;d(7`XO ztx;JjcT`~NC6oV!95qP@P~ESjYo<8C*lODE*KIm&o@H9ER#->U4O%~-F`SgWQJpztA0T@ zP{UrE{8AjNhzqX&H5wT9RMM^Hj4!JBRtruXc zmwnerWGbmk1nU0s2b5qI!+W2^C2U|Up$G&&EdgOb135?U!UgZ={A)<^ zS#y=Jc17sBEYgJgJrvSHN?$+a@_B*=d6LL__xtH=fRV7nvM^Xk2cY2p(iv7jAt4Sw z8amGNs7{>?JkZNm_0~5^Dy{eIeOyu}Q4*IPV%sfniwl1cpSqJA?pkph;Dap%{mUVF z*A@M4NB%@-8}i_LcPyQoAK~&v^k-7U_d}%4;Adzl!ELHssN3S0u}R8Xs^*&mXeuSk zM~lBI%|<*nM6`8Hyghl41aHH6oFI_I!Ox*dN1pe;QRibddvhKoMOeh?L{z;Md{Bgzl*i32(%Mq*RCgVw82aBXK3`Cfa9hsEMf6Ao86z*uvplAu5maJ`r!oGbm&tq&WlCPGTuIw^! ztuch+>qcN_PQ^9wEa^BDO-Cyi(P;s!SHM}zfL1)ZAvFm2<$C#(k;p(@vfg1)ha=e4 zp;9DN<4z5rPhKrG9zjyaCI$fd0e}!9^|?ck#{4Nrc(+p}+B?qNKNHr52*99cNkdxDECT4 zbA0xy3|O@E_zDb2rjiJ5bzbi0x_rwU(6rC33aBfw^1l@8=VeV4I(oqsMD}O`>|?ki3I~&x<8cPDtDlLkngS~7$GC=`I#Slj=6WiE zDn1=_yp>SLZ}IbmyZrQREfLawwA`W;X4?>mM%X0@;bBiMlYOliypptyDM-sJR_DfC z=fe=tw#?qqi7@Bb&KzkmXDghFuDy0H0AnN$SI4bW9d6|@w`0tkw<|o}${kA>qo*}! zWA}7h$Uwt&!s}y=oJAC3daLiRP1kGF+-qv$C075DMKWQFHHc=&WhwY|tlGr1ZVOpP z`0>G&Xy!)_RDEz+kC~L~(1Gt|U1X?|9}-5f39H1Q*~|W{XObPZvz1g?(Qra=M~qC`$@S2vBVQ{Z5JBy{ z8sYT=<3I9i_3ax9m3s3cox6x2v>2`C&ktPFJyNv!0u16zXoiED@8JK^A3d9~ZN)lr zmAo6CpT}fm!t#eq938FF$sflya=}3#oon8+^@JX{Uuc@MhhPXlJ;B%x%Aj~dG{G(^ zCiE4cbSwM}3-tDNCfKhPjn9OO)d$~Ywlj7WozYe70brtt;D8vFEJObb1Oq%o;{J(_ zQYfc3TRjnPzSn1ngv2#qj^e%i>jF~6+xH~HBBW5jp2@E(dsW{dYyfoBsA}H^#28H3 z795La+e2mZx{x;fc(cf&kBym0RNAthF8*NYp9B9o2;|MNUFx&T#>Hwi2r>M^;LVk_ zWk2Bi@iwhzmcBV(a2E?fHiwlGdv7Sx`pZtE+f#iubVM*z9yv5&V#nN-zB@i-3|+1O zD5~}^kM_1^p$C8$3c#hBu>+A5KZwipR7rx=YJem1(o$X!BsH&2YitN;_r_mjWlNYS z=RpRA5&U_={J~&3ulMoi`~^uETo4O{s8d69+w}>>obihGR=3#qPC3sL@B@E^W=J@d z3ZUq#x8UE*zoC!qh9W|<`ZUU~Ldasj7}VpB&J5MYmkM5=QeWGH#atJ5FQ(`YsyVx( zG}q{Y+aY-23%Cknm7h0ZwVQ8ks$A8Fu~CSD<$aVa;k|qP5GO!w^=SL7@vCLXtF(F&d*bJ{XM^VneIVbjJe{QeNt;0>N&G2w39_|X z)BIvZB&{IMfyRVHXn$?I)~;?mMtFQ-X!I}~lDxb8+03-*S51}RrXPOv8QME$41bS) z#z%(P=jwhbQycMwZDr9nAf*{GZMEs(S>Hae1-EzzBubePxV~{;mump@-#`wG4DNFQ zNGN|4lx3UrZuynG&#*3! zY8u?D?LM=}!8)qbXS?RL418pP#_M=iO`MmZFJKS?A+MfdV6+VUfsicX`-;^Z@pIlE zx(f1lTfWajsh@F&Hz{o7BgjcFJXhXpt9xToSdXgC@KkfVB%M-qUDPE7Q$PY^jP^j@ zE=zX*}|1u@pEjC}^LuL}6roFQkG4jSS?^ zOZKLx5PssyX3N}t=>siHWSNj%5o@Nb27dsPQjPBMAC{@R)|0Kb>y6^9tZaoiHzu1z zlQb{#?QRdDz_AZwQ4Gsiwa$!xden9KcYfHr$(S}psTTB{9;zx(c*C=)K89FQZvQik zc!Cq9M4vF%MzCTjs*ZiuyIfu@=er!Z$)nC|Ox(w@We(FdDLQrRL)tOVjp5D17h7vJ4n94IS=dOuS)J*=0Yyqt-ZuC90@yJN;|tpk?2dcjpQp|({Z;?qJ3!=^mNDp z6U|D9fo)M_MeL5H%CEdtK*Uk@Vk<2n(Ytw$KqCh>tV30KLI-4`UL*z^tl%u zWSphc;rSXil@^(LB0lrBt|aicXd+W~so%e@62*qQN`_`kI`vDSD`X!Xt9*?DrIT_} zYRmft=SA&=m}=!d<3cm&WO0>SL`n1}BNv6+q2DPo zf%5!;KM+2Ly-hlgzqC>mxcVKMdNALPXBau+dvAw0aasHgv=yAHqiE=J6I8S<;*)y_ zzS*}fJUOG&;>8F|)Ba7Ap@mh>GYvqt?aWD=Xj#fZ!lTB*?d>%?CKsL@rTh@4o`o>YoY_cl6iPC!9A`zYtoI5 zp21SAd41tuQ?$>3nt_2Bur`4U3W^*F??Ns8C^IGw;|W>gCRnNE#Yd}a&`SS}Yjm;O z)E`e2AN&C}KTF(?>Hqj8j5qc|Yekbl!c$-*v)lNT?PUg%O6j zRL!g0YeGr+q`5jnh?%MJ_br^5xM$m0Y!j}Bs0Wjk00*2xI}Z^f9k_V*)7tk&ZR#yk zU^QAHzzjXlk%Aear>PzP5~)nAqZ2Hu2;z_l=8J0onSBO!a-VRbfB>BafIpB<6HvNw zou&?C1aATcJ_L(uaNN;J`f^KrerE*ug<$J2h17H1zYTD~3MT2DIFyMK?T5Tuhh?|E zL|_S|ojyv!`p4TW9OVyoaeYB~jlq;qNp5CMC8u6kGR&dPJU-vt^m;^5`b_qG#O>LR z1yQ8!%hl3aw8XDL^=Nb`r!)h-GR#g!^+{S~P&Fx&Sg?byWtu2kUzuNI_8Nay1p*Lt zKBeSZE};AxUu&WOa&_>ZiF{Cw5v@VNOR_6nyt+cZm;z?fwxiBmaFF|NGnR~034+$i z4w!EpA=AH&`m%4q^Ked6_KA;i9+`K5i!3=pagNtbfzr(P2HNxx(7_7>vc=p zvY%@c$HdudvNhyvuE@QwDf4<{&`Q10UF5adpf%)dtYvwQy!d0ze)9>NCS(@@J9Jf>?;lBmdr3 zHo!>JVXhc)6>)sh)<+9Pg-f&#%(x~j zf8a<-qBnqRa&eB?AgXhUF;`>JlZ~7^WixSN6`pHALf?Si)C>0WDFb@=*i_v!f!4yU z7HNJrh|;$bsw~6~21RD}DE20gTZv=x0hVRr+l3=-vw~NJ7t~pVXlp0%(?>>R6B%!_ z-l`Wl{3!l@*A#=iUPXZ3gx%cwq|J5>9XU=%nIg2X(GZew5}F81kHPRoFjpY+Y5E-R zPxT3l^Llf{Fq{vLM1gHT)*ycg=|C;3%W~?d6Lxt?=xNnv9q8T%_~q2*4*0LDK7@2- z+v@SlZXpJt@Ux2-5{(QalRU`M{LaMhi*DXpA{R2LO8EoR+=)E6v}8gn{86d#MPliU zKk`iLeVy>YQ=a{Tt*bLZZ1k~!DdWZIU?ad}&0)ub?}&ja>14r{S)~n9*eXM=+t3<&WK_CNn2Y|;r z#1V8Sg-PV@MPc_)r>hN2!iZ&2MzJ73)|#afmyWMd5=|X>_ z>*XNVLOp?KBLW(sM0D&Iyu8zs#M*y*!^-oq?)Ek(#cyG!5}p2DVM+3==Wq0a5MPQG z{*#mZjaTD=^?;xflX0mf#YjYTrVhdOfWH;bvBV|N!vdgOFnrODsNZQRChMs>uEd9N z<|=!C&A?C`Ua~;&?m=e`#=|Rcy%>JP z&Ra1EW6Ghwp>@GOre%&qgVEu;*xK5S&`%Gl{kS{F0Z-oRarUC3)R!{0)gli5T`s%Y zj8(T|O5zur0k0i76JwHYT11Ej?FFp@FmgE2??q0iXaG%q;pX%|T&I8=EiSCor^u(o zxs6#2c3w_t_KK?3JB<|MHVMy2r)VPxVCHKIo~)^{23tkL#j1~+V8%7IakECvAn`6T ztj3d}scYoET{)$wJpmI?2!}&J9DUPahvQlM zz@mdx=AREN9?6hA@`6c&%B(QhqA$ z*1E^SpNv$-bPK+|KZ^m`V=DBmsf>HT1tnrF_#SyzE^C!tDorEZbbe+5B11E6=@l+7l->?}-2h*USA zol;tKs_mQlUEDQ7U8QG)54s4&)u3$=CFpvP;2gn0%$05FjG$oR58B4d00kGCHMFA! zK2H`Z0qv;KKEUKyLd8clO!s&T=hYz(-XXJhi4kuvJKTmpzNQ0CRSL-IRst-KtF8q? z0$FyV4RoC+W@TQ08zlFPIi5u&B_pspW;qmucLNk$SHigZtHl4BjOquVFl)90_ZPi2Dx42m~uWJT-0OlEnPZO=i_o!z)%;H^Y>X}yp^lIazTBJMkS}W3E7GgY{oZ z*w#d0(`k>)(Ru|)%Xn6p9oGjhPGnl$CY8x`K+=(nU-Ip@eHb7y1KoR$amD=r9pnif zC`(ddqW=~1L5I`y+bG(N_QtMAD3=6F_f|-f$NqGp^-2$q?evs{7~%U zq@!~!Ys6BuA3&5){}OQE3>}fVsRgPIM^g}91GEXu*IvO^nH%)TB7Ux*Ki-VSeu0kI z{JrRf=u@PsD67H@hfH!?N(`~umrs0?s%XORuUhmE(hXcYd#CF>$N>)xyu%+2!X6a4 zt_qbMA|@iZCicwaoH(TP8$6k3;xc56DNQ#X65USawOyB@uKA0@=y(o(Cc^1;XwJ`+ zQ9W`Bn8Clt2hWoLGV}2~_}S>PE5}}kTzXe&xd-`)F>rqv0tq}ffLZ7FSBrA+VYWsk zCsf=oN=t(7#>4_BQ51B>EN9Dbh~)sJbk9h9ZU1Jz%vGCqeN&JYI4(Y6*V-D(RaoI} z_rdff`oL~P#lr^mIHWoyPVW zLQjz+*;&xoUm{zf)YV47VRKmTQ*n9Qd!x>~;xyi#qL1TD@hAGFDFzX|x}3`VQ_lmq zGk@#^S4r#jn{hAYSB|bupSf>KC0+aBUGjc!X}Hdzsmy_CO=$aEA% zTYCD5@-&kR1&3S2Z#@92#NLlUQ|&#E9eI|C@$X}n)(&5`Y9ytp?vYCqmWWlzAcIu# ziU$qvBSJTB`f1nk@z{*6i^b7L8Vd!|%UkCNds-NVP3)^uP>Lm|RM=u#?be9ju{SKOa6d4Ut0hG6%xs91D97u1~i0qhrZB z_?UFC%rw;t@g4*#t^V;LZJ72XjE9-X-_J*m2DpvZ$oOUD3#uXo3nGmdMPkH>axdjW z3`F9^qS3&Jpvi9s+ypx=kal@MJPBywUO7MWeR%bYe zgfg&y0+qFV{^n#hhnej#%0av)z+j8qF`xNrZP&f{Zt8YPG<+dyY=6dN3W%6hWj-!N$P}BN_C837#79vG`Bp7pE1r0tC3A$G8-Ul zD}7cZk)9?{?(HLTKggawQ_Dn%@GNY~>?*;r3(W@XM@}DU#hi7|nCyiIHfAzu3OMtd zw7E3o#V}(epW~q%gi{g{_f-(xG}`uMaC6G#qh;f0l+Y}Dk4hFnSopmDuWWysZW6}bh-#`lYr zy|)k3V)}IO#QV^aMywUE8{XIO4aup`5x>o+r$TetFU>QvIVDyI`!n37ObvIE60od) zN|IK^9}_s)SDAu{6@O8``5L=aCaJQaicXQDx~Y2-1|bYwGvykS$|w5+j5rpjw%~`u z7eHyEZOvcp=Y%rP%4fM+qq#X!l@psgrS1X>hAuHIM#*|CSQ&rAuP?-_&%*hLPER@H zNvhLo%zSLk$6=7|+Cvqv-RQ?BOb9b)=sO1J487;V1!RwDr&r5lqf9KjX{4X&hxwR+ z?Z;_~lpPQ=ebV=V^ZR)0lzsyW?IkRb^_c64{(}Mff-vJ4a@STM)b{nCpdGp29=u^x z#5nm?vm#Y2CtKNBh4@0=+0=9s)?D{3ohCRW+F{7B?-(=EZ#McowBdPTyYTze;K#j& z)<)vjAkt-Z8iYw^)*EPF;-^r+f4`*jWmlo}n6&wyrz*~q*5CX2DxZf}?8 zc)aTAii5_fHOtCIGEee;M)Ld_@CRV=W?7V9rdtG&;k{0JTKp==O&c%!?P;=OY%!AR zeb$W<0jX??#fmQBM&yWW^y24J*|JY?lM_(3#9LO=p@lK($~%x#oW-9Q?g*r2OVb#8 zZ-hy6XF{IL4CQ`e(U_gQ zMyw0{;E2Qv@!6Non%V)Z{gU!spg4-+Zv8b@XG0<&My;coj&Hg+;2abzvl8<_R|jau zAI5pw<){y6;?LG2Nf5rVpqCIT2HQP_OlieQa2vAQ}cT066dkHu(VAA|Gm+I|xl zdavIJYIOO6D!<}KC$&<2)u)|Wtnif{wuNM3!hZ0ZwZPm|-qIpO=1g_!IZPZ#`(2eR|*R ziHYw8#dm6rubG4#wax0Ysh%4a&`Am3BSDqcLHV@aV?Lp4%5wB}MGiH^w)q3n#A@zt zTf#LMmoj~12BA%od61mbo7P$z@xfT-j6>OsIzQRF4!s=>{kqEWHXJdaa%~_p#0c++ z?`u^P5={-ijatt4X5?GtHmB)q@I?}OKLj`qPA{%!6CyZN;2JqPwy}+Q z_8e~NN#=Xidr-Ldm#)zbpiu4*&v&#%WNVV^cBrv6PEm&98RQY_C_CX)!+?hFw241F$=U2l;T7H66#S7F2)yk#Jq5p| zBTnVfzHUENn^tcjdq{NaTkUEhlpMKKQ+RtR9{Vb;Zv%ICUiO!YGlA)r^{3h2{vKl7 zhC4M%KRFkv@U+@wR;tFXfjXvrCJx)31A)%rlHxgaWCc+AP?~^E`9KM<9K9fq>4;Dg zhgqes&kHaCqv1@NSF&oeuMmGP9L@}>S2iHI{C)?(op%8DB?DA@XZRT_B`&}%CHlpL ziD2FLvIz~XdO)Xv$WLs3z_@De-?Gw0G4H!1GGc}bUnUSy(9M#2K*H-$TVgyW0iYFx z`c*FTKqunqHJ`{X#PkY2d5i2|wG#E-@Z(Tg^W8Jo`TBu)2H@a`?{2f94!YltE1X%L z(Q}7WgC`)|g}%OLq$?iGaMUsr2Y{Sj-O|<(y~(C3L!FO?g1w%$r9TlU!uu`&WRjTC zuxPw$B(cJ1yFGvR^gL8d6a5tK>v)~={~d1O3GbuO-ky(0AxLb|0d9Fmw0bP3(U$z+ z5ha&`5T2is0_kNcI1of#F?w$+J?Qs>Bv!5H`eUlVR)4%~c=!6ou+SQA$nsxFDrX^N zI;VRCpB+<72|gGFg)8_SCl~@@uv`S>mxCy}ZbQrQHxX)Igp>>Q%A#81Ui}@;Y^(2B zYz_P(y?(gridyClU5CP<0ZsR4WhtM_wV5Mm>K zO~cB^I$%wZ%MsQ7)AxWskl+0Ih^KOFaQ`tNzWp4(wUWemOob_9bk+7hp8l!McVcu% zwtbyN>&uq0NCIuM@UE$;RlO9Vg^QeHR5*Q6hnec@%1GRoK1Aer7U$cA7|Fy7t6LC_ z$X7PkrQCj0A2t<~5)2;T651AJ`kg5C^qflQ;kW$r@bmh1{+sxcialTP^Sv@ouxaY3 z=YS}4HGqe89|XQKaSA~GV>qzEdoJ=7iuAs?9F~?S=pFBK5G0xS=gqj(^LFHZ%a-{p zRmC`)UN^-Ev6yuPht@ptnbG~dipG7NqI3Y#G4H9F z{I0$>*aR_>j+)%$v4hK-rnOVX6iBeC_5x#_z)ox3#!mhGKkiWt6LVH2N%yYN9d zVj69JS{4K_vVMQ}6LIe4qQHlFAxC zdN(v|TGKTKC`0SpY!m#nI0vt>S(OhT9^tpUWNBiyMdY9lS{yCM4k$zf1rGQ!V#h6) zAWzpv0NsT`XC`M&ifw_&r+EL;=TES?{;nj1cI3B`C@;_ z79&d!N57Z&7p|@QF5J9Pm5OXine2HJkR!G^_TeCgwuQKLjpJV4JSP;Cti&+Ba~^F} z*8(rC#9O~rQ^OEjaV#l%Sryd`ffo6JWq?(w8+{FeH*;tMLE*Co^gnWI0W!9?x~u6@ zZ{Tb6C3&yKH66z6*A_oNrss$$BF&(a7AMSmo@c7U#*oq*#FX9DM9kmQ>h`B~q>KD@nXmAzpeOBREQ8X7^Gdz;Py4O(T{hPn(x8|2)3OsL@(#;_9$wOrxoWmMS+qV^dgAgv&nK1D3My#L` zP^<%@HROs`V8H+#5*SeZXeft15Cxb0Hhq%oI7p#=(0TyMS1~7nG}34^556o+E%7wE z$Dj#cKTj-l5g%JPV2lJ9BRA^Hy0#lQrPOQbcc|MV z0cMX>z_#8)LXjoYKO03B8hCmHSy|ax+8)ewr&z%`QV3TD9*89l45O z$o$pEap`}4ALQZw&dK|#3WO&}E8K^AK9A#jBZtq8{Ufw6#uI&8&q^Anv)$c60u=>v z^V!$<18hplajCM+G>Q~gW*zO~8`)c?d06-?kUKCGHDOg8fFRqu9D(|+kUM@a=*{h1 zC5#ob--J8|ceM2BI|;>pt}ei9>ZoAQ+-C1sFJE-o^f+LljqroelKk+i$yg+gmh@T^ zq$J>88AuD@Hxta7-*VM(HZ{UPq-j?`K zN0n9R3%7$}QnHNJ#b#t(tGy$^X-H{6T2DsEJ<*mjdBN_4^zg89AmDy;ld#>Ee&>=k zxHwTyaN1l^9(+tvZ@<+IKhtuylT{M5S8llkUocwCQaG5;nptSu0(6BuF9Sbh2w^=K z{GF!Nf@jej(Z*l*b<^#SAQZp^+lNx>l@aORef~benw?I`z-#@vL2+F%Jaf5pqzFOh zWM{HlrJ7H;dw5wj{jNhV);v_tj;&K$;R%)(GJ1^cj2W}uVQGTVbQ%8M;fV8ZI#jMu zlmc^|fp^q~ns$*F^r4r)yh^PjO{(F+mq5PWT-r1IeS%j{+Q_!3UQWwT{vp$z5`jpxi;*1O>wA*fLJz=Ms zdTqwS<1T7rqY6MGGF)FCB3#6WEN|D;fa#dTPJf_3>bKm!urP^mH@)_d7V>uoB_RN{Mx-+@& zAdJXz6YUK#VPPRbzM(t*3W~+=m*@1J;cL3EMXX~k`P@reqcbtg_tkjOd_`_vg>{<2 zKhTGh*wwPcwK$$xE|W5BRRs9Eqm9jE#q?B`B@J4;NbL;sI1lzoE2KpcP0$6qLB*J( zY#5HoF?%DEZ!Gbq%HQg89&Ob9{sI;XIXL`cU)L~r0)euZ)Xs|OKwQhRLP_+Y%t`cB zfO&Ryk0;J4CC-D-&zX`g#O}q-X;w4%>Bwh%eCv0p2&*dSLulop`)QlN$`UHS&W7sK z|JsS!HI*=?iU&($3oBA=0kH;1Tnca0@$LLJO`tFv^P43Mn2UawNZhqm6Up2#;#?06 z(F9W2ecO~rG?Uj}qo;M&SV)Xbx2AP}5p=_})L;>xY8Z0ZwAmW6g!(l8Ky{UVa_m9U zBII|Cz+_|$Q-F6RC=xhgg*V~I@mNkOQ{zl@8Jj1s0JwE1gRYr<0SI89k4Y^%iEzi9 zS#%bptgNJ1NelzfmcWvxNs7o&Ycdm00bgp1pN_^9LHXErO}!pXe8o$WlC|Xg-u35C zqss2CW~+NIbpYq~0ccsHk^3?u^=|LcgQ9J&FvS3pM+I7|N)^Dm&@_BMEjoe%CePN> zHO&gxF3^DGR}_AlvZEOy%_)QX?97QiX2Q-WWvPy*!pKk!%X2NvwxRu-OQ%=S$pv8G z?;PUhxX-9o{WG84DQ)h$)8Ot|i>PD29^jehsb897 zT}P*|oAAyy2Wf}tk)sJbnZ}0!W3>a zdC@a7CUP%}I2&mDGu`Bm2iDkcWZ!i`5&nn568Xp~lV+$w6g(cb7s@-KlDDx`8lRX1{PJxX9{|^^Tsf|5PaggK0Cce^(d=+-(VsSlOOm+7ox$ww+}QA1YO_UmBkhH034wqEDuY8uG+@` zCZo(Yy$~ERRa%TGVFEv6FN#E`7uBvf@-3O}U@wlk8ZMkS>wo7#f;5FUoc*J994~!5 z*JT<-N$_NYz95*2$1$9?zjiRC-;A`ho782hSp^l-6+x@=Uwb$W&C8Vl%pS+3mQUnYzCo5Q49B%zXilj1#x#K)PqOag z5A1}xRPQ?jo*!c5q5!p*t?=#gtTs`5Dg0BDywuj3B-k; zhzZABffC@1n`}UIoF58=w-B3OdANnI*$`_trt_kqlcHST-uq;Mh3cyxbyNEER+D|c zNGh<(7mB;&VxGBce)3&rE|Pt^e!IPCu4Utb4UjY#f*UFNh@QbKf_OMS;|M{h9+xqU zH|=8`28w?{J)!Q1H^jVIw)l<57#8^tj>1Am+x`9#5(hII$`7tzy);BDowMkn-><1; z?-j9esPfGXt@@X_+vg)fPAt5^&b{up-k!g3p`&5m9ec?Y#G2xN%av{34?EGpsb&hj z7+=Aex;OC|UoI@_L1P3P!(k?9P4(+~AHz@1R7ZNoD4kM@vYs{u*i0}*jCB-1bj`a-zs)EN$6%(^-jBTx zR_a&-6^*zfHZeftqcAKwocpdpwSTkQ4Or=n3N8Y=Qo(3tm zHx=JYSF&9t@T#x%2SaLNlsr*uHFC61hdytLDv+M6%m|3&ZL(8W+QwlqJ?Vn8r&YU? zCqDdQNHMZ#J_rYBN0W*)!^v^8@chv3ola2|l_vDf4f|JhPlhYAqBP9+KIObW%aX*~ zNw`D&bTBsg-B)Q_VWmJXjSQ`OBKVF+dEX?FlzupDDg7$Wi{}QvI_<48+5fQUm)VeQ zF!RL7YVH1bt@Y;GQ=x25Y@hMDL$g$@Y##|+;aC?SqzQSDqGTwmTW7re3@9A8OMh@f znD3ZvWmgOvtv;B_WgiXl=(hWIjfF*%{}s@%oGB#G7cjiy?Kx7VFea;O$#y9*aY;8# zlKT4xF%wJR5TGR=)DRLEXJ@?+2HsFLbxFLRHsjJS31-+XN-}|3D?1i+v(}*epTgKte-U^L!>?h>e*~)I#3ujnJP=(%EW0=xKB`IN`91 zWkI4hJri0n@jXFoOKNA{_{4#r#Eb}l0-hhre}hcr!x$Zz6ZUJEtF-WJ8m*t3o4Mjq zZHB?$29ZDA-?ax#!vHSlXoz-VmUxIYblQmh>Zb5z#hM*Z#%toAwhE~dt4X*)P8R5< zG!H`Hzpg80BSrSej?{&mlDpLQ7+p;ae!wa2Uc!epVPisHY`&>DJB7+~ZP-fK`H}{)|4{)oH_V=FYPuB>wex1v+izM#x>MEpK< zi`&f4^H}%p3h9MsQD9wGxaPn~jZSlZr2I?supUtGfykoLL9^_~Ijb{tXHBp$=~;=l z>Y7)RfW4w9jg9Lw>hzPbT_9cLe9S4JK@rXIc##d)j(}nB+!^eS@nIl;^~#N*p;%^m z7eYbau`|D7lr=&<$)6qnl7m{t<3SYTh>!E};JE<^Rl@mzDlbnZ-gik`6J5^srs7kNL$ztW<&3|=pu zQ&I*73^DrQ9}|c-yfO49fkbKld*hKOKJ5m8J|BJPH!* zDNy#YFwhBga90YyEfNG1o?7h4l3nIGKcJNnm^fG<;C(+s%F`lEb{+7krBe$406Ey2 zq&OM%E{yGA3#dOJ2h4Q3fDw%tWCw<$5!_aEj(CN|NF1ugz}3gZfgVZkGWr9T0FlwL z3^%^F>Y4DKC4Majnh_1L(4D6HbP1I}a_21#7#=hW9HSb413$wO(k0S2d_zis(-|vW5)-`@zAI(jIM{J%%25~Rv zT81t+I&~nt#n2@LBbFO$&Eru7uxZ0pP?Y^Jk@LP6o36gOr}0hqP40*(hV66BsB!6h ze`E1TE^7<(cO}0eBO!f!poSK1;do_deEe1+e6N->mpM#yx^k?ye!{Os{EFC zW`so)Zc=sKOFAG|>>II&&t#rW zUSY6$DXyl`aORv?JLKz~;3Lb9W0%=P9x23;o_v5T>1(M>Bg3rl5#Tm67$XqwOOb@T zPjB`i?9|6lD$U+jSek22Br|G})W#5FsL7ll~apfHXH=%8)Hjc@N$ zkilXotdw0Ny5#wXh>5B0UXBx*h=yi3S~esJD|6SWF)Nl-pRV_$_+i1JJgmiWC`Y$`v` zP;s9fT!(6lQ1F3@Rhmd_t0-%emTW_U(K4<<%`r!gzPb z;o_|xdkZLd(m-RLn~!7i5jO9nBWqBuvy9h7r8b?vdu=*qJ5xnJ4>ZZBzUaU)m<3WM znZ~87*#V1H$MCp@wWiyL0=JiKj;CE`{DAK~_t-hFLAQs~_=6T(XnpI+6=T?Hue z-mD~lR1DL_TXF4 z;J*3L>GuQCs3)YB+*7wg8u**tFZ~Fz(IWtfR;4aB&^FuVEgl5G-CzEq0LOd+fR+KG zB9_SqQB81vdCM?}TYMAwW}Ze6OYw4Gr{frX`%p7YlG(CE-L@eQDPu|N`F~pzBN(zd z>l2(rd6FcJSU;nE5G1bP)}#gNOA9BS2wRF1S7px#KLM-$HOXoXpD!kHIc^a!4&&gC zZr$*p%btePQu!YOitmwtz*fvbfM@v}_{y}PNhi2RE#_GAH~ZKwIo5$oGsYut)bA>3 z?;+g|^j&)i3<+o4iHJVAg?bdqC2`__o)9Xp zScB1~OG%9`_I5@{J;)yS1L=oi(l=Zd2P?I&4dN@pD>DHkV|J_#M7AXS2#gxh(csST~bo`v$kgp>Xc(kY4X@eHiSV1%n2v|!t#2K^mlfe^7t zO&!x(o9In6od&Hx0qyV@l*UyjK(UQ(((F=5~nJDgP4EZXn>T zlocNK1S=WVr2*4Xip)75a7q-~{RJ@#rCu7v4l;M~M2#i6z&Ls<5`SY`TDQPK__d$5 z<7<;c+$KSV)Ssw*T!7KD0t&6H^4^?Ra{!5a~m!Owlci>BJ^u*;A84|9)l0D_4F)?f!Es$ zXJWNJpKD_-6OQZUN_qidHlUUgqbK@{aP?T zH0!;bk*812-OmBrem?4<>1F(h zBK?hIfKzrPN%zK>K!1hEo*{qSO|xIt*BCq}LiYQc`=Il*FC#F8e5fEcu-!)yP1x>%c@0^4*#w0-^+_w|+CViK}Y<@}? zDZoj?s+O)g$?)~3s~Qg6*G~((h=RtI)LLXm+N(2gZncbGOBO!xe|J65o%$; z?VZsE+%&8YTSyA*@`FRn7d>nNH$Rc&dI?Xj>pgUkRSgL7In2EBUqYx_{05g(JF!apdJ4?1(PU_xR(gz1`nRt7LniS+(@Dzt3}`je zUR40gX8?f_PI}O8a97EV4<~2TY}JrWy|dnhCoJzYtch5BoJ%LUjptW=_f+*}+&^#r z)i~7xYWNx9lwwnsTjJ!4T_0@;^NX#%+*||=;nP96z%${@Si8jvD-yF$BM{aTV@OK5 z9xI2nh5z3`TmA)3&^;N(#drRgtMr@Spt9sN+jH8 zxwZta3^4eqc>+eL*HTsWKu5rYI}@WGSIzz30Z=|2mr8#|OeIl?$!Ld3B@X2;(c!@Y zm3Nf*<6{Q(^`6leM-pgX+>!Gl^qUqzh05SlDyYT{HLl_-6*UNdC7pD@(JxrO=Beqy zjn&)1YpiTU?FiYdJ3^X$0^$U7T#;5sEoJ{V{fwWF7{YsOexun!ARUFlpKB3t(N#CxnX%agCA!32xXmA@8ld5!to*jpy}#S&x~DX zg~jiDvhVdoH>J0T9;b4kF??)%*cXtoD^;HaA`S8PIZ)ofzM2R-19Qq)U(JSl0B9}= zr@*ldS~b@TW9iik`ge5|lVT-eutWD;2|2=d^BM^FSAGz3+jCKDl{I094t?D-Q&EdZ zTk^}xYQ+;%QSkD>e9~_=6yPn1z2#G|{hVGQ?QlA$`P(xUhQwD|_JfSPKkjhP%s{8I zq5D!w3i*lKS9RE+f`U2V+GyoM%-J|jvX7E|iTx!wK7lWdFV;+Ek{k#eSk2Ro^pyF} zwn_w4b0DXMi?6RD*E&L@_4?Li2tJy9rmlB{9{-N5lJIn^i+ zG)z^I)RAax0*dfY-mVh8O?w~w<{B`t2?G!;(XHltRd_qy)N+c@D5v&m6+B}EkoeHr^BwHO=!rGqgZ&Yd)tfNo^nH?7MZr*c0Ko>D-Vw($ zVm_~|&Xj4aHUrq^+k)g_yUN7tK6&uW5a8omN=mXY^rH;qv&&rPr?MG+Rdq)d|A10@ z-*NuUh zML?RgAt|~Eyt4Vpi!TPH8!EL;;hQ}nH$K?*@~6C#%0CtU6N_wLpWu|GT1e0S1l7y8 zI>z`AY2@qG1WcYKL964>5+AduNBonF(`5ReR0TuJ=veR(zeGTE*R&PIB+zmNtk@B= zc4N_tnT(~BpcGI~%26dv**kG3rSARzq#Z6N{m&Zrz`bxF<6=j3C?#d%EX?T3q0kU@ zp6B-^JepYVsWF^cx!V2Gh@jUl;yFbHv@venF3Wd=r%Y;{Rn+9yXJQ3{O%W_>Gxyxj zf3PWyWkx@cTv~uNIuMkjZP%LuDXwF4-WLe)OPJGfP7uLq2f$NIbj)jbyS9OEa+Upb z`&iT5_{N@c`2!i|^DJM3+_4dC=|;`=v|hW8cZCG|e4eeh2q_g-5#WLFO@9WS6gjW# z=juaq0a12v!kt{vd~c(Az*;u| zm@FMv#k*{0v?IbBfqn{xQI4{#!R_TN8XAV`2bl~Y@-|Nu1pTJxz-xgO9|EF~lYo=B z2hWy{wNF2KZgS&V`}{nK5(I-`i&_ALl;fR^mWthVgzg01Q>24<@z(4U$7!hC;$VMY*xqrF2b$mVvfJ%a58F~Zy`zCzu_dkkS zfLZeNg}fVd#rSyZ4TYy_kBa=z-=jzRr7worc~V6d#Z5GT6*LmAWE|ed9J#`#>vAFF zCF%&lHpBGwkaryWp+(l9M&P@KOq=$>@(_0DHGch*X5{0kNE$(rf&oW>6d%avfneQ9 zd;P5@I&$FN{aP1B_G5^!&pZ=bOMSBSdt}J9-wV9M_%=_`0PO3W>`^-@zPTaCjE7$*nW8iyaCVdym>8{+!TE%}RMjs0FA^4NtAAY|5$>|LA6e=Fq8q5G!0be3tqr>A zlrvgY&3QWR_5>;iKSS~@B9^UdH8dc^^!P5x4w)Y$TaoVcW+5GD5;BlFCR{LsaW8pJ z=*d54m)6qrU3za%2W)m)qWOGSkfol&Q2=%c)CO{DZL5U(Cn=X}eM>{}(lcx>F8F5c z8lg*V|@Rs#p>pP@37v?*j6d4d|lg|JBR=4iA6u?uxGDFh7h5{3L0D<(A zlS&q_RkNVZhRFe#;grUSnh4wbFyfTWEsdlC7JY39`d*0zKto@5v}tK*l(^tTlTI4X z`4EV=gKF82W>JTO%V2lc_Sw9Y?W5iq!VR3%h5A4pATb=kIL-3z*!4%}7`+790V-kq0P z8Hqejbt7>_z{jo|DZB4=(mhD!#i^S9E5K5;NJ5iMzkdw8MEIDGLcQVQ>AVIsO)kel zulX2DU)8@Lw#oc)`Tp~D1Y`{-19ad9Z*{$q()JXZ?lJ|Xe~4UoBz1wnAKJMNMfL2d ztPVYz#)UgR_X*4(p9p|yijyjY!;TcoU7pT&xC^3sENj*8y+5H`cU-SGA~{;$1o80> z$nl7tvr3R@vW(njkrwW;`6$^q{{!LpGv;y-hcjTehLo|vX{d>8hG#+*Pg6f)@Fzko*1$kRx_IMGK zn^G+q?NJCmF0glI`4DT6=*mq0Sg#6dP&q5Pf=pm!VdDmmggbRj#n77hO!#>O8S20tz`kc$Sbq+fM;YM-e!~gqyt=)BY zz5op><()612q~=zOF%M4-}GY$L17z@6XYZO_6f+q6|a>@u4#$rOHQ1YBuTms(Vtkx zuPH;EHUL&}?8Jxr9+X;NHE26+CoUo#08vQMsj)mT>LLDV+SU5KWK=z&olip-ae1x_ z7FP9F(Y_06p!?sO`nnX(8J&C7k$tB!?xV`+KR;`cZV-$06Yn>z49MuaepaaGl_3hQ zy;7y$tf6@pKW|{|n664X>fZ3NNwJKKqg~;LEuKX09Vw*G@FCg9*U>`Mv$V7DE$)jS z?XchQg4#;4qsBe`Fsg{)1R$ph7^IlF09~!YfQ>6B-oAM1m^j?iQBsxLtQfaYJ-_#@ zkaDbMp~Rm?69lPH8=4sIchbW_DoGSzw_l*0wcuVxEjXO}RzuyWyYh&#QsiHe-KC_% zyeEX*NcpbD&#n_fP2R=lZvF7u&NPPQJ=hj=QgM^a0?J-vdg2kkb^U8y4?6Djwh$c@ z4M&-ebLjJTmiM?Jw*c#};Tb-v9{c7yC-@tmS2&O&*~}MUZH=@bj!|4kT!AH_zJOeu z==0LkaZ?{2s74^;0fzh#6I8@^whx|VL{}i)1YT@mMMKZ0rVF-;$3o>=GkddwRfJFp z^IT{vH{z;RQdjsO?BxS%M9mL=cBMPBZhF3Vy$oA)Q_$FXJ5aX=%Jj`3u zh66k>k3eD4w*`p#Jp5irMweVAi28AwjP6#+QX?@Yv41Amt;&GI6oV(U7?&xElO`?F ztdS7AmUsUm1G$ydiUYU|yERWoM3rLv{L05&djY`kmnV5bGf6f%@iZa%1^lDrVf+3v zv-o{y&K^#8(;tfCYMTANP~_kO%!?Smp@PEUvudkWs*hxDs* z*F%Sx;Wkb+f|GehkFEW0YY_TNT=Sz}14mwF;&=z(a8UMz|kjk4mnJMT4pcZ}v z`*;mDFR*1A1b*bf=jW;zl6AyFhUQisSNH^a!8? z40D5~O%6o6@Lte#%cmn?MrQ8RIt&@cgUnPqpKv-g9vmD!7x9(QvgZ^oY>wwX%9`N@ z;dBDu*U6*5^C#W>@sPjGkYfu2$F%j6T?s<|yAF%0tNEi#=|e(UvudE3b&BMtD2H2m zTW-u$<~Vx}CLwMxzWjuV|8Dz7bCx{BOa1p*k2z>F`-xv(;iSbiFgy#19W5h9ScWOv z+%{Oa^{m}_SrgWKxPo{S50%xB#J-`rbc_K%NUV%U$|LWw*d3!!sHh#-_WNP5(1pKb zv7|-GQgLzRaOY%~FUjgr4sSIDgTs0QCx8&2w=3-Fc4KC;v8;S`6llZFW6rhV^^FRv z$Z-J@T6I1f;57k+Y!oix?puZPX%@ z;Ji8w>*a&{!M+Dn?q7oqH<`P3L8#`KhF#Ytoh5IWy1uPdVWFqHKW+aR4Xl(NfCJ*O^_%4nL+aJG}v3VIgSXlxP3%cS6Cv}}on-T2Qx@2xV+(co& zaSpq|9Da){P9`zpomQ5db>q-vxK|YUd0MW+D0bI5fcn5&W|Bj}Sp5zgd`&I#`nUC) zD9nDF@0dKFIn?Y<=sWuO$(4?ZVJd#%bN^6vfAcz=)e`~DKftrV00RM1ow(-ndklRl zuMP4HYI|r7xy4V5QQ2(9j7u6Ifw3{k_ia-i1i8L#NB+Q|0JELJ-vS(8Vu4gbWE<0R z>pF}S;1rbyQXj|Bs?gL56Nlh#-2#bupYP{^1+#)aS=jYzqHKctVk0BqC zt8%0V?*TQYPCYXlHIUij>bTfFlEwmsJ)ImR#`0WBkZW`2XqL z$?a`Zu%7^`0up7srhsDiDm7fuZakCqx#0~ZDH!$vF?0)<`&%&m#`R)hN=TkiteDl@ zy_WB5A&gU_Abah^sThW%;4_GYwb^bn7dzjMP%eMupn?T4)*|o0#CrPOKMlc3_@_ji z>cPCU?rv|}KerKetUFK+1U=t&7Cz=PN)MrDA3@@ptpko@+5`XgODAAGi^6n`l#cSJ1C`=H)u#piY7KQaqt zQs`&EYWe0|ZHQ)NaBFcq%qg!uqL0;VGp$wl;SC#e zIMV7s^A=Tk@oOLJKo=DDZ7rp2TTi3PWFt&AAjftl* z%bXe_LFiL*$>Es}sj#=$Vt8t1tCDqnn_0=DI1eSxn0h0N>et>b7A_4#goEh`I<20= zd?@BCv(nafe8JM^iA)A!G8ifvhF&%)hE*=K#-AA(MfdCu+zHkMd%))l4E*7|3cCUF znNmti7vPniELguCP=5^J37hrlsLShk2Uasy;HR1^u%we#)-9=|Zg)#;lm=(SfpR)2 zst2vN{nJ^PV@8eCK4z}GV4?Ks+7qHOoVVBKn$s?&V63)mz-rzO%ag;?v3Xtc>TWn| zb20#&ON-~lrsuxQs54J<>6$(&4JB+*Wi0cQ|4&Wle*^)0DKYc&*#j~0e}$Cc%Jg99QG32(4$0|laK7Qq2)M_%)jBnuJQ%eA1gJW&qM+A=f#H1 zq9V@{d$yi9#Y$i#~ z+1;S8l0exXiTo9XUR!YpFfW!I(C5d{VTSchw)Mune4oo5&IBDcS4z}wx1-6puuo)o z+svt*6o6jMNJd0cL$5M0t(Ch8f3qYv?1(#&j#_1V8hD8U3mx%*iot6nH|wjV^P^ir zngY6Lso3HPXNkflfOKg9OoAkZEhNZKX>nX_MH{_pTu-}bMhX=Lv9;7801fCc?C*HV^{HFL|sPc5ifTFhGx;|&(1Wu#FzKJj+=&#ZZ->EXLptpdTskq?-uMkNK- zNq<+7dVnkedP4lAk{$UrT0K}^#eXATTE39#HRLJn)84P2Yx+)}-*NW!mCFdr0Z-s> z+KC;Tl_!d23HxMHhq;?u3%j>`sN5O_$8`?(m)frQ%Az9dxn@d3n_wz5gAl&RN{_7i z%cLCD$hnkS;jbE?>f2SQe!=u=7AvAgY{cOC(V9R6Rr=BsZ^BCQhzZ=_e+EMaUa;0{ z$)col8FWOB+uv+T?S(M(e5~>InI^@L-IuR5=4Z;4wyf#QIY&aRRiA_RYQF?es9s-9 zF8SEcVT>x`&$V@7*Li-i7>!u2%`?T)TxWlB-?1{RvD&hX zqSXkIV&Z-PZ_QxZi^(Y@XrRV9Y2w+pvO1_=v*Jy_05@0k9Lw~AQtq(#ah_p$tcosr zrY)AJdXrWN2;yNP3j|is+?IAsMjLc-Hp12E=B8ns1dUc60{eqyhvqIIh^VI7@AH=b zpzc?`;uR06Ls2FAf9uu6Kaza0A$rtOH1w(o@BoKkJl3EcCr=GsUI`(~BWLMt z^vOWECo`?!}RUt90~Ms`qO-z%KXKEYOuPcQ4L$zHLHm~Q-5uWILFDi%<>DZ~_Z z)^XGTbef8FBFi`5lW8vyVyHc(Op6${qmIr2@hF(oLs?PDYmmodxqca2mb|~?r~(iQ zljC=NSS73kN2=9dfef|^c1w_aU5b@BNgaDg*7CUCozfC3W`G4O1=rv3cDZjtxiZK& zI56h76Dt@_E&uxj%|4aLuyoO%z{hXi7FN;uNlou^0f%N55SShk!eI@o18as66G)%? zbb9mdG%whVJ5pf@0Xj87P2H$V*^;QWI33}og-B%B7E)C=*0_i%dHcf*Y^x=7u-L3p zSmK4wn=>YOK;*hqzFmfO?ol~WPYb>7ei8fkd$2zI8qtpK>3RPUQ&YA*F7iJhq2Eya>yL4Cj zNT1)P`r{3!dd)WppI1g_rU*`8Yhv!H{F#E|NSdpEZ@-|J|GpF>gC+5lE!hoQnzEZ#PfB;X%`iNlMKH2NEZNRuX z{5D>SOjoojcl34}{-$2;H$w>@Xutpht0AGaC9f1$gXUU(y)gWDWlAi5{7Kh9s6 zbI5!P->(1O15d2b{AB2fpJm6+B@U@tVLjiBp>B53^qDyBPr|n!Q{JNB$_lb zFVd+|GCeidWn5AZib`UcQezrbJ;U0?)Fj~#!RgUgXJ#v-9GA9)hq>}@sIw-k+TX2! z_H6!dUd-g8ki4+ZOm^QmZK|O%TZ%yQ^dGIOK!GG@brA(fJ^W|%9Ugqn9@GcbCm6(8 z>YePn{xdrXUJo}UWGZGT&z`)Eq*6w~o464f#8Q77x|`kEW7me$6aCh(oI4fA*uL#u z^$YqGg(g*FoDlB%@Jf$lh+}?h0}L%Q$V1r(ez(d-cZp=fSuPShAJ&m&ko=>qiW{M{ zX95}lu=+#u9bRvhjDuN5+*#~zc(c<_wCmRc<&Ue!9O~>P^qsGCJ;F_)sJoW7rTYI~ zdgn2!fKc?~ff|@?SDp!^kMcre8=bMUSE%`BIQ1GS(`a>c7@6|FpT)mAkTkF!KeF)X>{y)91` z#btl9gTid$Mqtp7LO?B3GqOr_(l8OSfupsJb~PZHk5w75JfHhdM|?pKrgs^_M9}D; z-TIMV$@Q(7@vHRb2;$|{IZcY-JP~*6Ko&S50-uo&wdrm8rcp!mXDAL({&UM zIozJaLm&gDQ3zC>$QBk`j+Zz)uNW@c%4?5#RiFWwU@+%B-eR)ueSX3B8R&&LjW|q8 z`-j2VGY)dJ!^0v8sjnVx``8ISS|*2|%N5IZMkJ5+xo#|+9LBi+_o|PB(+kC^s4XgE`s1D%~jzk<}y5Y1GWm+7g_Wc+I}fgpsP zemY76NNLzmNrL$nRuN!^0?S^=UVm_GFr=dk28&oW|G3dWE&y=Wew2Zg4`lQme2Q zGoN*6#&k58`Qg1IB$bp>)_Gure*b#w=4lNSr6%WiLs;HmG>#h|mOkCZqWB&fFEx^e z=`W)s`La(_Q78!#`R+}yR)6(IylU_n>b0z&L5u4gz>KLGL)`6i&AcSm^99QUdqNgj!!5e^eFpG@EL?S_7PxX@1wy+ z&2D4$AHG#ToG!2SawT>6>`O-)J>2iQi+mE&KW)l>bGw7rX z#*@aPqv1RSDnp^TfXoX=* zz#2Sc>in&n{-2bWpT0=eErhQ$^^yz<6SM@fR*lQ!>8>U)BK|2~A4hi=+y0bkcgfq! zKs`vvEj2O75H;fAf$>N2Q`RKLJqG6+l$wmXO*`=ShbNm1@$(%Uad{!)!I42p1o2YU z0v?=07=*gY*XtN$2ddm=l|U3_{=e0YqTXy_b~xCSlH5QGJ%$)Do&x69| zX@xT+tw2lLg&87$-i8bC1XuwILsc=JLXA@1@O$(?G`^)Auw&v+5c9?yC+pBC(ydqy z(Ljhd%hfKsh_Wx$35`vqQE0tbdVW@hV%8g>7uCOot@_<@QBVY z7<0eOSYvQ?2VY{xdnA1p^(vC^9qtVJuubEdq3ti;a5GE6Q@_CmRnjRXU!(ZKVJBwy z8k6b^HF3U>Xr#+{9eq8%Zwk)@=odOp8DA1};km$@5;dMA;)*&GdGR4!`bUIqP&k^5 zi0dSDgZbyR*H( zz5If&YSM`t;Lunx2#foVqD|CAlp`jhIp`!z@$h7uKkc2vM|~~jPoaf9Ie~ugT+}?V zFZkP}`(|72xR7t!xA}lk{g5GTIxJo(66$@w#_|~o1M@3(tOBMMgXay zefiJNU3nb9*Q#gBoUI_e^2z0C(~wdv$AkrFrjb_=;Ht;e5R+rWT%kf}G2E$y{Vtuk zHJQ6LIjwIHflt37r_9ab*b=ONv2V^?E(6*Shz)D2wew}f7FWT5;ZQ zUHBT_zbH+sBVwy&=;Y_A&UN!-4$jfX$0oeZq1(SOl{)ITZmATtQQO^8ZLJlBGFDf3 zSuDX??+od96x6IJJAM7|IBy4tW6533VkHJg>8aUs6*m@sF}jx&dJ)DRclyv=&vX59_pS(+Uh>845|f2X+)R+m*dTz@QcGOHXMR7f4n2*f^}cqUmr5A<|2K(C}w1Nj_5*sbfWL!B0%Duo2d9{z-o~naeSbX1^ce5_#VJKJ*4# zV?>r_;*mMmeF|HD6gHq?Jfqk|>!`sRr7yPNn}$Ai+s|3#!M=DW=X;h?lox7Lk zTR`#yEJ+|vB_7?JZwnOMDXjR(+;d-O%w+0Ij>9Us#Su9r8c6Q&Z5YeY-#pB?&g9*> zl=F*{j`XN8XJ)Y0?uB8Ggk%;iuEk*)u_?qdDMH?N5$4Nf0M6NTl8kEzlB;s< zSO$~eavB?(!;6er@8P?e)LZB3iCaPW#xx6uzbWzp`;K?H*_@H6P-p!s8cJ9e@3r<{ zhK!4v79xT%M@bK$M05hZg4gf5P4oDozd;D8nP}wE7d;xi&8!<1Lly;r#hkC82KmRO zl%_IeE8~P|qHAF1@UKkGSO8MCn-^cNJ-EEr1T(tqhzM0 zcPq}nK*pr545k~})3lh=;H}^t4Ys?xpD*ke7G)OBY$ zC0p63&$#3UP_-dvWbQZMD=%zkQ=Jl06=65fpl$B_EQGGr)vxAS1HHlAG5<n>oL;n6yGi7?qB1TrUi==Q zh|kmFkt2=y8dy{oolqShGs?wLDPA&GBvu_5wrnzcgkb7b+=sCeZ@Ig0l&;7c1wk{; z;LVSoJe*9~M4~W8`J=Yc*9Lq6b0_8Sn;wHnN+4^TGtxu)Xcd&UQcJKkMGheJA~Rkzggih&#^@$e;wD zhE(;soIm_S+~C%ymJ#kL#6p;)_Z~q5sV3;4QGQB=U9DAgAk|cB6P?7{0Zi)tsJOwb z;)iAKw2BHiCyo_CJa+apPkxMqJ;X`0wWZGBr{ z{q#iF4;ck62wK6^5`K2vN0NPkGhG|-S9EA|SrMQ};`6o;?@B#=oSOx*^_t-Tz0h1= zr`Ywy;Dknptg~O0VC?`!OjHEd&&%u`cxHo2mK<(={DCkzq0Iqh3k%funRo`E-FV`- zfZwjFk&d43&8t|*B)8l{=&^~?g7}av0C|~jVN8~!Vd#;~HaH(Vh^dby+6}u*<|i&P zF;UFV=?eA(HQg-243y0k{J!M34rQgJ##34xhf#P zr6r^)K?97?NFe^)2k1scN|VQFX_~(h7j9HrXe*Mfkg6+N8X+m3^PR+Z1ldW{FC$wP z$^CXD8*0bckdz2nig6`tE1J&$vWw4xW#zqKdc5u|d(qvvo$-wJV2C*RqNIQrY0Nuv8i13;L^<(j28p|>j@irbcqh&i$*Znx%ZQoaZZ!3g&w|c@?BNSg!7PW7M zHzZFj&Q+Y#)brUw0M=9wlV1FX+wL6aoyK!GO03@zp$KzmUuxLYj5G2q<>Q)^{&Xpe z`iuDp3Z$kB;=;N;3*D@149Dq>AtQ_d0zok`l3IV|hCQpUL7T<~0+@aZ}F z=0-;K@PV{xJBO)K5+e7d;1Km8nnt0%N1We_lLoF{d5;h3YwkQJ6iThKmuuh`dhrgUj~lpKIkr&UCP_A-BsRY7TXTUp2=*te5NOm5`Kxu{XFB}~*C3CcvhI~OSy*u56 z&#mxcji$RAo%5N6i)?}!x}@dQ7I(QMlVPkyIvH8-p(~O(@V-=`4G50C$H86cpB5q0 zCHYV!>?8H4IR7IUQm=WRM?|j|o=;(a=w0&cPD?WDO-hhDhp4J3O!*E&40L*xhtr_e zNwlhbkMpLDz1cbRO2(Vz@?=g3IMPnb<{uy+b7uFDL?V)3OI6xd1gIJLSA$G!O)kt$ zc)A3)qE_r>}I3UMxvM-^`%o`s|-F}Mn3urwPc z^Q)XrX*|-))2Lk=1wh_Cn-3*q(m6d!-K%%B`O$n208ehBy^5(Xw~^hE0{ilB9z6SS z`_wuk%rBis{wf}ORhQn;!{0K#@d)wuVL19UwkfN&^*iDpnh@ilSbo?&Ii-eKJ_~_@ zhFGVb)|J@%yvB7cAy~dKI5YK~clnY4tnfPoqfLe~s&5e>cv+pUHq4@dc04Al3xXdd zkTj|2f9$9>B8Df;IAWonc#m_J&NXgjwp zls1`pvSgRlkC4uz#5hNRc~=vlyUwuRlXazLnext0=3zj>H<1f_B9fTQOt6HP0z{u; zNvWOMCmw@D#G`kOraN?dBcFXKxNWBMjCp}ND@LX4fTPH*D8Giqe~|&RAF?cH3PtH3 zit90F8X$*)A^ChMjaW`Z)m(_1bi77 zx!s!y-AN8SvwZ)=fzS^i=ru9Z&Fr-6K@Nh*;9FkUuPPBXti5VlbE*FU1e>Rd- z=?8PY8+ZXdriE3Z#EsiUK=tgNj3AJ&Dt0D-soC}x%)ijr_qI1GH25-RiEbcYv1(Cc zS`L!@TT>iR~2Jn4H zj-J)G9oiCuS<5AsrRrDHB5x0?G1u5AecFG|SrWpH@ijf`Z_ozC(th?ue#_NIqwk(S z(|iym7Z^9?kgOEuNs;^&;49563D=y{%THp(xS;5%PC zr=nd4KEVJ~*HHS{L4!?#JJs_xGjS_`0AHP5rlw^B75mn_2u`f1pcl?*xN8eIrVA9xC&(Sfl(9ob&TxEeDLQGJL zBDdrx!&_9o`=>f(qRn1o7`2UrXoSWWC-S;zyiLOPpH@9s9XaBnL{Kz7DDl>w^o%;; z0E{1d;KZpPp~rJ6{EpEVopp4_FBaM5j6~ne3Und#`$)0>>8iE6$;moowNMkNTSGd2 zZFCm}AY9srzUBj{p5!-fDYgUiZZM%6ZhToQ93yByPcm~_e6DO|61fEr%N95jPCZ_^ zM`trz<^ za{PTpq9^Dc9+|^u6mb6%6!s&3IwPNGVy9hV)|~9X!Q1jEU3@6>z&Hhkl#=BAZsNZw zL-i;50N(@HdIyNRRtrrv%jHW?ETf2PgKq}tV6Sgl-UYTKIGx>W&Nz8fRt@u7SH+-` zdu2Jz;H&GwU)Cro*v7QVstcNhbH@18;_hf!%{FG?Ar0u!v;{T#+l^n7WE&Uy3V6@* zq=&wZ3OBS2h-k~OJ&ReR4wc!0++){EB2vnoEvBuywh?f&;dnq7l5ept$<7K zKtq`A&Ekb;<{i7+E7oN{AL0+Eo36gGO39q|`-voW4g!}6olA@!j5WVH zbHV1KNgSVZY_H=hBl(TwHqgwv`Jr^Iw_P%E_Mx*D=&EY;z4h8lV{@uxr`4}5OiY0- zYGE(>b-W`R^42i=chVvtQ63yC|CL4`ejU;!yAeJnaztc#Cn_2yx2sV}x(rdA8`vCe z1YYd8IcyZC9N4-xgKxK_pR3LpVhN);7}#G-2)FJF_oGf)9&~)`G5N%4zb{yJ+KA9) zlx_2Jj{c?=yz&X|nXLO2x#M9yzK+iQMeA59sYs=+fq3l-JSW`#ChqsDkOctqa zzCLjY5bA67{C3jB$OVdwPc|EIqujcynDD035Uni_v+1iy@ODTjhYcnU^ zc%%zLHWf(#TUppeH3q?R>s&y(n_apAOTQqtxXv@n-#VB)A3UiLrD66+-lr(z$(Jz0 z+8*#HL=#1P$))`zD+@P2%O_*x(>^N1Fh~VzQV$e%wzT{E> zxoq4OQ?R)$takQqVRz4l-7o+)-+}ko{gk0v^)J5s%57sfU= zsZ;D}4d&aZY#rsocRlM?QgEmLrrzZ*JlECuD}F}+SBnCEu`R6UVp4guN&7KDmS8|c z;Aqn8LllV|eDWsTY=FMi(Z5^zg^HWeqj(c(Z(Qj7h(s`|Tc+zXF~=E+mS=(mTF3X4 z+c4mDcTZOAZzDee)N!A=!+Fz{<0tqC&~L78euojDAE40dDLah9O7X9plsL>V0Sj>Z zs(0qQ{$epfM+LL(RxJJs5#m=V&HM#7Xa#(_>v+8;O^$%g@52Tv0*^E@rH`s^db`-H zmPag-k?zL@nisdKw*RhcW8O$#vf$1|I$CVJe!4Ljw_A=sF1mYI6(48&Mj7-@JZF*{G*Ob8jq^^Cz?nBe;L%r;$o(k;66>yZu(ZR=38i$&u^$CbqOVa;bZ zfki(0mQezqdBYXDiAwGu&nJQDj;!K!2Y^b#-A^LFnV}4%Wwi9D0aNKL_FSsi7%Py` zgNlX*sHzTcl~#(fF8YXeLI!6`v`7+=4C@6%Ct1-CssMv7{*kj#%?*Q)uxgf+ zo+Y>xf}Z+Us2$|%;-E>l08R1AbVk<~n&CD{JxBcO6+q_Pe)Re z**}+Q0W4`8PqI%ke__cZ6;UaNBc7b+HA+)!!KFf$iT(0}jH0WaWLmaHiVBH`llj;; z7#VQsa1AjNiqkyj1)IOY!efDto?XF(NScWhl%s_In6^vv9`L|xK zIkc#dTcZl8WLEkYW$)tdWp7jGd#Ryiv%av2E4(00xpE&2G(Z(%URiD4kMLAPVCE@^ z?^o>?PTrbryqCBia^wmxcJYq-ekUirk$ZS{L7E^Idm0b|OutuoOlzmQ(mahcUY%u^ zL8+{|#)zLk%<7Lx_Ae|ehbL2}1Sp$`p-zHjV0eXYerA7G zzlCDHcYCL-)59bgq^=dTR{%VFalf5?vXbKOHhEdTtF9AKyqV^pkX3l{h!%8xvom_l z$_{X4AQ6P2JaSED_`2&|PASaY?ap6!#VoiCRbM-+aOl8PN8Dz$9KAeJTJ+7}m!1g# zMmbqX?(0S1s$wbo6k=YPowD^vEFarKwXCnTmuc|% zJl1XQ`jr-B>2y1q!Qpgqd2EcdT#49i_ziAF@{#KSkn6$@$1%>WBC9Zo3LFC6?MYNL zvuo{@VIyux4(q9l2u7541K&Mg1F_Y7tGr1$>j05q&v_fGEm9}357l-6lg;=~^li7W zHSshfXX>;|w|EogmTjchdbs&oJ7K3HS&eMTt(Mv76CCWFS5@?b)6+UhqBBeez&SG8 zr(1gID>(dxTfX>8bHgx>zx(QtF^h)5fjj3bsJIiVYfV))1_LiwtGhZjcb9(=>H=)L z>R(OL&DH3-oC06?ju@ zYA6ZJ(h}StCLOZhjshqfX)lLe8EtZ_S3X>adF3<~`h@5$w)eNU#h?5CewYt=Ad~g6 zrlcCvDD~AtfbKBw#gAC&6Nfa3`4U@nR>=1Q$dBbsJ@h!y`<>D6J7$bbPG{FK>GjYV z<=sy18!=>rLiW8r2owHp_VwoGB55liBJ8VUK8N{4_YuJP*z{fng?PBLSbVavVNsjH4qwqQMv39#!hcplfKyjvvzK~;*?kt;vxL= z^6KaYR@E&_eYI63hJUNn;vu#zhZ3J-Fk98D&`lsY*IF1}{TY%JV#OchZi}0{WpH`P zuNefB^Ab`KSO}WUdz4Tcl}ST08;EM`c3kQgpqUOJ0DA0i6l$Izhtb9_PgRKM)z<2C{Ciu=8MZpMV?0}@QA0zL zUNjnkd3KwmK@c4PSSwH$(y_kf!p315>h^SAom8|!n&SaQEM{W3eFqWpS;<@{e1>F` zSXVp|L@oOQhIIuboBP81&p7LY(>lkLa~)hTX;tj?INbi4Svp}~TuTpJ&pJ$n_ks@4RD=sd&73yk2`v)J{Cpgmnt zODKeMYDD|~;PRC+f8q#XTPvZ<2}6411Uu|GDkwu6V37eJD^ z%Q^r+Pzb*pkdD4mMuAT)zuWbznA5#Jc9&2iL_q1 z{^ni^hy|Y2;AxJ`JaSj7pbt8hO}MwdnL>v3Gw83$@O24Q=_gsY&8WUFGToOFLZbPt zeVWnFWle${qCRVDd^B$7wp=Z)M&cx5p`m+iv;k)*_6Ewe-0wy!tS0ueyNNfw*VL8}}kDTYWiH z0!*6Kn)Y18Rgh$#pHO=e!D20oTLDGXfuaH5Ey?S7c73N(L8-z!%MB(Lw)vuj+{+u7 zZs!v26;jV;^-zJXxy8U97qkqi2|r}#(Pf-6C!Z{4*qafqIp^%+?9F_f=x9#(V1pI zaN6rZDj*b+RZ5)@RRSwyTd1jtS8+E?+%_$k&Vc!I$VE6mHy{JF-g5*FY_%{-nHkmT zPvm|UH`y5-y}a~UJ*d{d^B7T|a6bc>*M|u?JaPYF8Q)P(G&`5sT#62|GTWCx1`mZH z&Em!Pe5k5(x2QcgdI55+9;y3lm#?f0@J^fgyb>}- z+E2HQ@>;D#m90iuTDQj|vZ_dpYt0vDNqqG30qijv^kV9~N#wWmPZvY`ri7%Tu7`E{ zsS4{aM~A%-{)xFHYSYj>yMgKWb<6R-rI*GJb!Ex>l>-+w9INgHXp>%L%M}A~#FnW= zkcULref3J~VmO)&ZLqvWSoO+}Q33}VsG!)oR<#zSS(ab)IWqEDyAGey2} z->p|Wz4{E)a@EbPrL*d;i<2HjJx;syCp|s`{(Qy}2`gAvpAKgBdb?!tiYImK6J`0U z3)R1elByAXdEx7D0TOGn-m{LGTtc%ortQxD2M&;~fXL=zP*ymc2zt5m<1guFa8~p; zRWvU9*^l>*A8Nz!CjSDRWSfIdh99e#c)gYsKDAd3t5p=N3uTZUP{_+SdNb&1ntY{3 zX|o&7uQa3c+!%1gt85E?u{xRs5v6~NsRgIZuuVLqZ89c6%7EbrMhmx1#-u83PaG!E zc#F{tpaDVQU{~lt+PciIu`S9r0rwUqFwHMw23hv{rOU$&3^(1In6-zUFS5;knL+44 z0@@M=Gp?;j7SHj|JcedZibR#R0Jk7E+VyDoA#axDI}=wu=Fnxy;zA952BPfCzETuJ z*JSp#f zMDK65GypMvnKxb1Fh-&In;u@_U=NccR^dyG;(~;}QQI4SZ{}~L1cUQ+s6l6~_X~-> z%Sp2~d$zGAR^0@^5^LbBxxy<*iOvl|VddEDcLbDogXj??>;Ec&9|(>1s`z z^GsV~~8%WM*-A*Vie3mq|fN{5*llT1+N44i|rb7X`lJ6NNw#a)O^u!B@Z zpFY?#>oW!dwfTH;I<*uwjD-2fjFEW^it)N14!mC0?Y`+>(*Qlk8yHxr_gSDbij!ne?Mcc#RV~0N~wom z=r(`}{n);QKb1$p0|a_UpTl-O@hWB`32W6;I}IT=X^BrfW!8sSG=T&tCS#bibz)lU_%Y>O1&`pxo1 z^KV5Cw4b%zwhV8?d{*hO_y~LvxSxd62vu5KYB*Y+zvccG8^XjRQ!i`4fM%`OlahC^ zE5d>D@Q-C;T>`Z~m%3$;i4))XoSx*O*vBpuSs=g%AY<%f9j)>@cKnn1k38mVD>$tT zRiWVn9TqUFcu9QReaX+lMGar+wP+?ur+a9FW+$%~Ov(1e97vBfN-+PhCU5o;MF_~S z)Q;b@b3^2faz`atKZWa3127fzk{=QmNO1Jh&`Le&x-hwYTigy zxyP=3W*xjW?Qx}B*j4!2JkvPXP^Qi}DaH)&(PXW}S}G`*y?)xg?*I|&{Kawgz&B7>d85LYt!N8)m}b_j1HJn(-vsk&aD#jXu*J+%$W@FW#LQL1pTD7ZACx6%N%SH zajv316c~9MHZIPG&}cTxdLH_Q@B#X z5!XisdJNiDrhZ`W_zYPW@3O{AsOf594mQY=v7g^>y1&mG&W2Z|T+(bBQUte#JffIv zmcN@9r8Hp7{>~|Y0!%^y>=`<2+gX2d9pMD}T2d{}tws%$!A-^h5(IQ&`eXbo)}mS% zXKjGV^%emoqC1cJ3^N;C&TmRW_G#PL1yoY^scGQq4=jnK3ytd+Nv6w2Cd@oHTSeaL zOxI6Rg$Nc(62GoU>hT}EH)dxVc-QTF`YmqWmeZETu)GZdq#u3vBjHL2DC%rIN?)`^ z&N~M&@1Zx=C=}VSLBxh9C1sx*4(Fn5SrqVZ!bmm4F|vShrxf|5AF=UGyr_gU-W;*c ze3%%zOP)I4WaJ$}y=k>py)HL8`6%s${NX!y8a|`f8gy6rsvZ0MhdpU&zd%hp^`B-- zWDJNWl9|i%18cS=G7GmIxE#q576Kkwy6ujY25b6871|i>9V&86JH$hg8b?hx%=H^feX@hh%0yArP{pR{qD(TZIbR6n#Se< zp>quVl6r}nBW+(Og@VDl2n`c;e;{-YVKysz)hedgak$*{;zV1=N_v4fpEU# zsEIFskBSM^YM?Vs3PP?{=#WSQYG8}?9jz#6i#|a|e)*=4VjB3TO99$u1lUCKH7Wpk zhbFo-Q(9&p$#4HA8X|tX`>-n1T3b7LonMLW->uw(ZV904)ZMok_yc>G0KH3L2&72N zjeeO?Hx}i3bhmyDQPpLt+yOCmfVlV?UDJgK-*-Fg}NZEsf|BLs6ur9Svvwu_~k^ zdLvX>aAD}>!R_wEf{aJ2@J@XE!oxPAq|te+c#G-iGorUjFKDpZsH2SRowO0+1b|9T zr_a}fAgIfEx-E{dA2uFSXx2(=C0SsLrIMYoYW+R7_jm3l#_IAad)+Gfg91Zjp-<+bN z26y&~+zCb@MA!$Gq88wFVPyIKXK9n=K7oR0gtjugbb8qjqMYbsaT^#7Ic_&75}8HR z<`U!s?eohc)UTS|niT$jz?Df6+z(=?qJ^<@!Ab%ge|H^o-Ux;$I zcI%wJ5YyT(tH0r|4injHSg#FU-0|?Ptnl0e4{#9xIJ5=I29@5x#ZZI)$htxx1BP%i<(iNi?~!X0*D63Nv7b;G!#belg$E z#fz?S%S-|<-Li(;8oc{nKZo*qZXkK<;8=j?+gV7hc{A`d(yLidOXur34x3z^yN$xI z2<&5J(?Htf7VQ0!5|m)%7PtOA>M)3K9@V-B>GlE5eNTk>SMl~%w`1>nc(RGCt<6*jXkV-jx^Ho>d$UDbL?}+|PO{ z1ymjN^?sfJ-f+#C2Qhr%fe^1XGsTwge6|6<=mTNR#6wPfWoK)=)Hxtjmh}toPs(?} z6n$+ofqr`!vFAlF=9hN|q(YWR^S@jHZY}OGPu-VCqZ+iFV%G61*$+0BN;xa7{nNnX zL7sVRFYoU}_JUG}; zG6X&8*djUKzDb))8WziP&J3bJ;6AA%+8r(&X_d^6_Z@P9oqbu%_6+mrzcV)tkmk(^ zn==;e!aEGdq(GYFqc1WakpVeRIs%%}Dyt{i(%-Ovjq|HY2`{Bc1aKQsM0e15eb|ca z_C~;1*Id3Z7=c!4%n{w~&_UXctqK%3QLF^3b-issl zKpyG<;P1O~L0JSSzKYNw01#kiZssrB3|-WWGpvB^>Q)w`46#XCVDRtA90%%E(g^WF zw7F?kOjiv#Y2!_pwjLW%wDJoag~+R~qH@o@6gz9hz>=JA?7>Es4&|6G@D-5 zRu2)9kS>s}Q@@=1aYi=@hC6XvSuS(-OcU-ipDTn5#ND*=gAUn{-A z#U8qoGr^AZvW^+DJx04s-4h3**>42I^-22I)7AdAAT~CeWweKx(zKyA^#gX(=BSAHUrG_NY_k zBx`?f$NQC)^>O3B>2b-4Pk%<=tv?SZ_=fWFN$5~rt0bN18g--#0v6#GXgCmHYl=ihuxQ^ljV_iQ6SO5%rnW4Go@;3 zJ*?ZCZqU?&aDNXcc*Vo^2j2l_}oh(g0iiJ6_MjT;9}NQsI+DrbKQq!dz4T6#hoQ&Ra239;~p- z4VDZGw;HbBkl|KYs*&96Vz-pGm|Tp0NH=;5-TaE9&l}wi>OxhES>T=N%u_|zfoFbC zt73oC5hV}Iw%4TqJpEM?=YZ%;ht46HWRzT@S`cRe?IF(gN)A zF`#mH^e2%|1t;d1VmJ&F#nXlFu|@E14J&p2Q?>jSCZ$GX%40%I_CbQjpTbM8qS_cX z)?sV;`9I?O{WU!(_&(euXQ zokTXbH|00IQjs0p0$({xXDpQwu+L-t83+5*W`?-Lu?ylCroNc#==e<0 zrA#i^RGlNsxE}8VyxqdGRb)7MzTxn62gfu6Y>7v>B$oD~7|liPi6XlNAim6mj%8o) za_K;Qz(a01&I*bpyozXL&PYF|ysl6W?Y`I`uKOJ!J5O<+1_7yD6FT>N|QC ztjbSbYJ1UCBm2zBzL={UI#^$c(b~m9|7m{!A zu`obtUqNf4T9tgcxE^CYzrO5eJ`% zbTOiyoC?jJQRooR2h@e1nMHjLJ^PM!x^bBMeSWy7!8Vbj5MvL&pMz3jh)$yE@~80K zwz4En-gP}cY>cc|tR=UZM%WtI?*cpuRoyG7AEMLTa^JYTkYsMQnBW5eeua1pUK#~X zlzNsv^wz!2g5SK7n=eXr;SI~r03T>o53ddxjj56QJR6MeW>7(JsAKT%NpW$rC)nI= zYk@EyL$M*t#hlTc4rkkL*^f410HI9@LKPnUJKe6c1`oQ-(0 zOvQDzF4~HWYciDY6OuF0m68vyWg-N|2k#h-y{T;PkX;S0Xeo>%WGvNzrQ6sry$_IH znQp2_6dzM&nz%SC&lYF~15*~xmzs4z~X z^{zLPJ;^S;@lEc>5r335o^5b!JFznaVPy)_ZcP{BI422YF1#^IkHFXvHfbd{F%kTy{KejQ}Im+!JUdrIYUH{n^wL!WW(716<1j9yNjEax_!_b>pn z1psx%nZ$s0$`cBG&Z5q-xw6S@*sd&$)lLVf?6pDMo|PjiQ#?=q333!U|NkhLDTLIJ?PpWluD}F)##;y ze!S&ks?a=pJ1BVs#!c}aUAcv6wr8T~OdB)5eKUGuG7bqn+Op%+S3g=3&hY1eZX{)(2!R7qfF-c_2r?Uztm8@HRa z$&9x7%np*}ymZ)^PAZ$za_HKARw5eJZXFj!shUKVd&9~tm_1(Cj2yxPV!?)oGSKy3 z#1QPo+=2vWh&2lqi9c)SnJkRQafu`29*4v>xdvcwnDU>+cHuHXyd1W_2u z!AN}51YvQid-Xg?+~SF_pJCoQQ4{o_fd4?(EO~@>@y~3QA)NwINF~nISQvs~PTF*ZL;_kovv|7u4&D<0eD{t|N>C9>E}sZ-MgYx7Jb@F2NXgyQ-^vKJ2D9w({ITnj z&ffJ^NX-WXHM~sR6+~}YL2Wf@VH=1Tq45Hg_6iFgP65sI2qcJYsXYg`0m_iw-JQEB z6{S}q6W*D5{`l;m1_303y$nJvx$=bEU{iv1CwMT`v&b}25u{jWCJ$yY@}A6BvLli= z#bBfXs!VPat{s%;4bvQZ z))n|d_fH6%F9?h$JZA<+w7`Mlq!=)mldi5Tsovc9aw1eiFdE*CQ>eHmHTwDz0iN7WmuDa_Xcu zB|~uPU{xaN$tAoF4bB=0fMeW6msog#EC80MUQVR$$pM|Uz{QGHE50K`69+I>cQORwP!#-kwM z9QQJSB|_~wA!-oVadxXIH~IleUpyK%<&TfFzwGUBP-KD7{WO|L8mBwVrTG z2}^{Bp<(q_t?IB9A;HbK?BNySM8JO0N{*K-;fgHUO6WmR!rcvTVqe7XSU;9$)4pEmKAM^dzvr67USgdBXS%4& zVpEL=_*HSMh{ULG#+7F4jbKNSpD$>%b%*uav9nXF!sZF!Td6`_`&y=zk7&D6Au`%f zB@obE?e8-nh~;Rsb;qk=UGHjP`c|hcykay?lPPL%=KPW?IK)-mH~irteDLGYJ}Kw| zn*E+eh(zm(K5&W|{ilqC)&$M+Cst#GyV$z+^K2UZ9X?2dj^d}tOtW3ZT3^Q5hPHH5 z5{|LHB^Cf^?25!t6vwCNWUy+H=TtV6V}^@l5HsEYy2mE6X0~`+@f;mn!m_GQv{>P1 zA!aG{jDsngfofhZ_vP0i2=9E9WUq-p;%IamBF>+#-7?1d@pWBY$WbfRFLto7H-KdT7bQB~&qBk;7jb62D;m~&Qh#kOCGTF72P=3?OJTmna}_YU6Y zI|&3zg{2mEM{akk+|JrUQRpXUgn<<6g8eEJCjRjTce(!JXf-#9czWa1A^2ukb8=ZP zEO)>UrZHdz+ysuRcAv4mF7hx%^hf~R5|Fk;?HCbRRB2$|stKcppi= zC~7uJxfrhQiH%O3K|EJ~cHfVUfC7vlsYqy8R;5zYA~9xE?^(YoZAlKOsEFcqq^6r@ zccQWCg`5Rl&G9g_Vd<--=Rk)M-0IP(onZDM2!3sBjZ9~kseLItK2Y3~vHdYoq`do2 zko2Wl4cqXbOhoiBPY_nvOPx3~U?1BiL<%U*db1;q^N4;|-R{#V7-6{aG=*djvc+fc z5zb5eQ|V%N^K=w?SvqQ~NM3?)LEOdE$8U}Kd~LzL+g8*kw-iTD3+_me#OIFQ)*eQ? z*L%lN^6d)*QE1~>7H2XF(9;^8(0iqGV3&ppeF)*!M%sJHD!=e5e_dj5ZrehpoJXiJ z+pDPc`W?hX?&Yr^|B@rO&d{6pI1Qc-lj96G?9Zhmxa%C~m1wj1X`dCk`p_p6oOP|# z6Xs$GBecN-tOwZ439?#%krt!!$z_P4lk~aW`rt0F!YN9zPpT^PG8p!P^KWOFGc0dy@=CkQ&>y}Y=%YVw=<)ZFU0_IXbo{WLGdn_A84RkDH@$bGw`(~ffj#g{V?x2XYoe?)YFmaWR~ki6`iE z1tw^DE^fDGt=9~vWPtflYJa^$T2U@jP@6g#(j-p#(#DD%a}Nxni8mv>);i_&)wLo( z0knFJ4#>tKjhV&I2mEl8&MSDv+;^z2O9$dI{$7)2PaFWX<|y)QfL&RAh~?)B|r%Bdbde%Nz4-OSLE` z8H1B??I{dX!!^R-Qry*|!w+im;AKNzmz@f>MiTW{Iu_@qKz-{~AuRLIWt7UDcN$!D zH{S;|SVqg|gBNoap=kq+^vR%zgf7}ig+@yNK|sF0YMZ_A-;;b!^P5ul9X!c|i!m;x z)JYdhgEDChiqQdD48p?ZRu!4~CB@m`hvBWo$t($l_|_pAivykBUo9PmaYc)%4wv$2 zk_`zthIrash{gDlC_av5(2q}Ij9;83kZXG6$*H=6OxVB_lpl%Ruy{cLt2Qh@1GB9Y zA$L&Gdi6skhgI|t9khpho=ZHr8@t|^jUD9&A?Hzds8&K5j#)JkS z#TadLXiUAqAq}k$4<2`+WtuvKZNc95Lxu{07Cu_`ONaSFhO8m1kDf~4dr=6nKnok(Afhl22i%fY+}O&P{>iK%R(Vy}o%nVYAOj4(wW<_;iGRTm!VhRJoA#Fhuo zVRDz;xy6axi%P7Hp!=Hb5}PN0Fk;Z-?i{wESBoURKN&3k z*#6%p)6f9Uq*z_=feLb-&(SEBfoDw6UdNQEJccUDEQ{p)tqRTh6w2Jw&mpeq`QvEf z)S~lQ2L|WP7CW03cU%R`ut$Fv6KPSNtK*JOH?~2&nDzp$T2`3)&UEX$(yj%mSnCUS zo;g%zAC#|x)Ec_<@j{FRGLhiPU*rWdlFFYRXUp}e)0H0038U45Io&KucK}qvy^1INbH2`$vTk^CsMmCbWb%0ev-o*Vr#vD_vxBpH`l4LRoZZM`v1G6>EgC#*a6$A~=Zp zv0r^lsHOzfOQ>>qYS$gQc?g?1!K<6g7ULXUF*`Xu0bD2hHf5M_tBEG=l>a#)4qzW-hu?jOyMaDcb zwV`%-o_Nx%V{{1%6$Y7H^FPu-vQj`(S_1A~1M@wil53Ac4Pb)#WdJ?`C93cGb+pW@ zvY@wKr-PeOksg@&dp_|105+;z9h(lX-3t2W5TVS$i#B^pe~=MEjhtWSF>OTfsx8=TQIa)FvjP=wP_Webb*Wj# zOK|qqPQ}5}j_uY`>5}=!jb{{>%!vq3LA-EXPS}s38$-&S(e?DWV8C=;f^3u5mFTSEd(if zuqXq?NE6&4hN%Dsw%L*kX8_F~U{7BC6kik(5>AeU`%`Ihoe{UnxynWclzpSB2F^2_ zv?D!g7GO<2jU_Vl))R7`N*djPA)v1~N)!%C%Nn7sk(R^pqpe6cI=SJYV=syIgo7VU zd5PFm-HSPEy>o8p?eARzB80jZ1=e!qXPtc z*BJ>npj*+cpAl=;XcT4HmAE{trN0UOsiJ&QOIFsC#?Y- zflL-6d}GJ;Y>S+1`3|t69@?yhzIww3z{o95A#tt9cvgvr_=uiIIS!?>CPD|YEclRO zUhjmDJD`_*cd2{*B)a!T>0Rw5Jc9VKK3YN{MR!b;VttL|MLDARLgkhaJ|Ai^$rjTl z;8ACNP`S^x=m-<3*hj8yPm32UZ@~7@s+LW-wUOOL?7CB63umLPMlIso#!ccoqXv0< zN#*QGWij~@VpVJK&Flw$H(tDJDI*|u6mEvZy!ML${N!R6wizRR-wdC8$E56Q6AN*sWBIZThlzUZ+$ z!&^WFyb%iy-w)?fh}%BmunpIyJH0rNG14VFtKoQl=2!{LtrwL1OboooNzK&*J9YX+ zNbCbyDgchE_%$vM+sPgXIl35vsvVUM9fe6G_lQ?e3E;`-u&IIOcj~&1W=Sc1#piP; z7*8v8_gbxHd;4BSY-r9#!5i6i&g-TSmyILrWYwt;yn@#pMGt^B$gAPQ38nbpf>nOD z^rbU9>3KfEgk!VLvo;^I12qh^3X&#h08;|b!ub6r64}}9EJ}9GZrT>F-e@tr{C!?0 zTI;((39Wj*vn*c$ZiutH5NPX2DxC)lM=00_%<|>Gt(HSIg?7~v}ubv2B_55 zkZcmQC};9SO+}J7C9CfBgO-u+Qye#UCqKyL`*YuZNIFyadWG{3x*~LDGw#)@H$%() zFmn{uZ9bsas4rsw9Iz&dfH#ZnbzvXvqlz)wRxq|Zg!abcv|?rUa-|5Ch!_3iGi5pa zIi<~&B3=aL{@sCrXAQm{k8G0YXx$K5+j_Tu1=K2?N7Sv}4nGQ_rzaDpGoM^OGwDe^ zZu{XwDYKA5Ux}4>;>5m=ju43G0836$OG6ph)amlVK!KOQVtlnqdHqwLGTged7dZT7G z8<^l-94O|ilHF0B1(glLK1!Xtma>5{W)X;KJbRiKt-Rf8He6B@G+TO{d{mbyS4rttGBsol%b8_xEU0gsNl`%2)ryM<1G+(6AbXT zkd>!pJ!YGp|6Vm50Tt-0&7w_VciK_tL#Yd;fTk zO2`-52};U_6m{7gZyJ@2dXfmkp$QK6;@m(N&qw?c1s4i=g{8t9MX;u`PaAs318mRl zQ#BW~Bp^(!5VpzR<&()6N_+J3km}dsJ?5LFw^+Y6{+i0JYp-NQa3Ah@X>cqGuahq* zms(XrD8{IY;+LQ0`HsYe(?eowR>p%o2kpm;lt!vCV95qls?WW9P%Edo9H!AEO$sEv z!E1jwdf}=R2!9%N3TuO(6lZ(LCaYx=0#I8N6@iAt17jQT`8d@F`KlR0+S4*rm%yX- zijxc7;#pR-{fm2?Bntv(ac81RKQlaF`be|V=9p~p#BQmWWQGM2EIFJMztW5dWZd}X zM_)Fry_9iZwc9Ei5g~6?r8O8$LF}O+lqRq%`s^O-V}Ej32UREAtGCt-k+FkUN2_0s zDcq%Y3TkbINe}Lx2X+zzwtXO3>NK?P&$Re8^BuG{ zWU0EOimk-w$<@kPW<=xl!e}igcj#567M7B++~+x;8h98- zhWk6?0R>pOh^ZmOQ3Cjc$w0E(3z87*ht4?iL2gfw%1Gq{G&+!pBl#TR96eQ@^N|L& z&vX5tq3okC4|s|YtF8cB(66e4WH~RfTXI-Az&jn;)cv`oxQ~twM+PLJh^{PXn@%dD zqhc)&jDUB&y^?6UfIcIxO+YfE3WWgpX@CvHhuoBC@E)5RxNf%?nZWQ??ZBX{M9*An zv4kXGBEx2PP*c+*$O%P0eLWzVC8Z%+GJY< z=GB)n6I)3D0&l(Bk`_16m`!(QY(Y2H#_R-j^f0Kczfg7w?PQTpJ~Pz}n~(lbvB!t; z5e{#SncE+8+!6_VGj`xo=cWwz5_rmc`Y!M3*|fjqyZc)DC)|G8iyY-?vF^$(FGAtZ zM!}$ynHv1_6X<*Y<1dTo)5=)tsxKAwi?=U_LA}vt$fADW=pFWBM`2Nr{2ji}wrM*m zqRx*>l5ZZ=(kctv6_C(8+ro|)tO|e^>@y>35lC5?7)aW3)WZtWC?(^2rCoZEQG5E3Th4SjOyW^-$jE8Dd@!r<9Ka2s-Csl? zhdhu$)^1U3Nn%2VyuhF)`#tYL2nQ^%{vhkc`O)0G@(vi(oC^2XZV)(@XVAyry>kxW zyRnn|K!QBTk!n6U=m*SfIeTZXDLp#aY>I?oB<8yF_>&B_FiMqlDNWdgV*k+!?PFG{ zU_Z{F2?x8gy0Qd6msUMKO8u#{D!dzLcbC%7XSp5*|B^!?b_Gki1^5FEhp@9=hDLi^92vPs2U zm8`K@Aa=+5WYUJ^3kfbsK@kIKEV7I*hQ$&;!h0HCX7PEe7`A-Gs4CLuAnB?mtdWUI z?3z*qmg9$49pv;rM*qN=ieLdqt;}oWc~0C|R%Ok!dP89nHcrtnbjQiUgB!Ba45|Y3 zSc<5IXYJl4XA(#kFjN=M)K);`W_ifRCbL#10vL}Y41U+0h+`_8n^@>-J0+da!yjkd`R0NsRKbbw3Yr-rhSJjW_iuACZ9hZ-qFWSt+064a+&o z7P@>5FM_#6P6{hv)8NvliFNG0*YbI`bxp@__xXCf19v8rb?W4jdn&d)*%4|W_}aQi z7&R}sjIwZ?p9nHH)~SW#lf1;}Qa%u7I7Hgew~%S5{IjraD>+d7e(ecj-!PjH7D4uL zFRhMsORS`^Lk#W~68w+%#Euk)8~@E*B`>VI$RMif`A8Eg!kYVT#%JY_|~X>F>3krp|kA zH}?X&ic`e1)5jBa%}PHiCj*bplPk*qkc6e_Ox4}k(^D` z?Z^k9dKz)k0cg3T%^6wH-jtFi4hv~9UwCa43*PmsuY^5#s{n`cUqjP8j8>65AC((D zcZrb_b@wTK`e&A~KlU0nhNB;9SHxgUncdE=-A#cj@TtyYltl>Oqs`QCqYV3vl0z+U zMQR5ovGd@qwA*Es*7j}PpGaNDhL~Vp=C9I5I%$S`hZmhMNSpR6!q}}U(-|ReiRsFd z@WPBtB&w6xU#NM36;E+lE2ZGNEfN@Ha6ymbwsgQ0VQM0+Cv4-pJpzo6}I zp~2=SLyDX<HmLI;8F3z+hPF zSuRgWFF%c;VDWg6h@n010uM|eF&o0Ww%rGK^ZExhZze(S+@1W>cG>$TwL?9)5DyQW_#*xeKD?~0OJE}Zns1X zQWfCv?VSMsz&FRf=`1rm7*?s+jujp^lTB{oAu!@DV_x6o)k2j} zy1JPlc(Zk9@hgCb;He@k55NzsbRc@j85QbB1@rQTmUXd&>LEQQFz|@GXR|&3W9JHt z%V9|3OsdMljy&nA*`r_($h-q|&NRELk0UXWd!nZG$W>1AajJ_QWHzfC9}jJ9(rnnU zw#Ixv9c%JdG?&Djuc_V!h?5AT<~Df->Z7i24RbG{==4E>EP}fR<5n8eGpv`gXeiyE zpU-;R%uCYy=W;c)>uZkgy(>3$iP_4ZQ?xy?#j9&;%r{usJA``s;AYR%15m0%pX1US zld%{_yy?6kqu=Z6O8c5sU&#Q@Z%@P}Zy&)>2^?-Uv1QYiPhY;x6$xwYR_{P99-N%B z$h;kM&P!E@WN-X(a-w#uDCXKLRLJ@nP=Vvik52Vxp++r$5fi6&mK#|&UV7MP!y>lm zyRw(jx~iL`@rE-`W;Q2^ER`~=q`K$ zw{BX29N0Hv!~s6{GLL+BnLdMHlA(8NaE#~sF#<%k{h*&yM~)kjZUg1wc4@HoXjf4* zI_x_dye=A0&q*ONHBi@>qvW+JA~MkM$kUTUPft3sz^DbI8q69-9~pfZj8Whxm!Axt zFbkp?ZfXKFfj&n102m|7PnI(&_0jQLeUFa&rwUyS=l*?1g&mF@zcht>M2sQ@BA0{I}GG_sbkbZuMSAVOq zVKV|Cb1t9|>8DC)J|y(RxCdwEOhDn$&zX4nkkk+B9^jdS0L6=b#)O7KVn57#fM(7H z6e;~Ai5CjV{jl!=m^mj<@bptAGy@XyVaS66a7LhT=x0y73`oj{B@Zybfq_D$pFGX^ zgw`YC-i-M`fX)l3VwywmDI)UT?D+tI4i8i^%^8H2BSPK`;DCdU3RFJL?Zhibq`X-S zC<6x?G-aSN=qksxoRC0h1#fn58bFoP6^Oq;LI$bQbhK;NlMqvV-LxH451*e8zkEJ2 zffjTOaIc-+_fNkc{rvIar$oH~kOx2o*m){HnEW#Rsg(Tl!noWMRC;53IU|WJR3*6P#mZ`UaFZmIG?Fq^yz|?>h16ogo z2A<9YPXaaxNCZ#<;d7Qz;@q1*y5o40ZgAVd(7JLGCwM? zZ9!QDET6J_%-iuXKM1ge!MmuMC}s7Sv*Z0846t26IR-40a(c|)@jXB8>(QWm%Xs5Q z6EbtW0FM%EYfzQ}%b@HWb94Nj3l6p)Q0@V9r!1fN@iWIK@bJKP2Iaej_JFffevWV8 zk%BD=%6DhY0W+se5Ff$A0oxvwjl0zXc22!Pdy(Ff zMyxcf;*&wXLA_zpiNS4_Sb6vGGS>8!4THyCdIA?Rnk{ zzAw{u(_p2Zs}QRLKl|w=zX`q3)5(d(g?7Sd)(8uMEu5G?u+dLU|1P)Y=6oD(wZyE# zx<7IKyWN^Gog>_WiFt+%e`5Q0y)}J0OSq-_?|EsxIQ1-FNsa!_y@$ugM zu6nQXJ-C89_5D;x452Oqf^uBlI68>Y9E_f}M4x)buVo)Lq{ zz|mZy5btLEqdWTgRm5WP_)uf0CGp&U7-D0uILNHesOuao?O=&>u#^ zJNqMr(OT~9qf47)5c?F#2y|Bi(KOQ0?P|feJJdp8WCXkUE6rm6oea7by;BWMTT^p5 z>cApSm~GS9TDB3j9xGbtiVz0_@n2~JxS2k4F=McjgjHJO=!l#YJJ0sJ zkI1VcQM=N4MntiLtlK3+d`!(g9(!bXW$w~JzFtso7dgLu7@S}D$BA)4{3=7^d?Ns+ zwE$A+^!7P}x8rqfh3h=DOMuD=X3)3b%@SoI#MQEag6qEHM@Jx?K%o!4+1M7xsdQBy zb3k2a+rp<=|#`r01$5eYCEoTOh2s*VXKhVq3KYoRLo;>xhj zL|@2x8V+A5yPmeP;=CO{v}_%WJ|xyuLYcA_`Anf#yS-;LNZ-k&pPz7^_iUD}Btx7X z5u=R+Eg@av?Xn=n(YmEtIiY?xft)7lCpfV%yEK66kKHIgv2e?wk6+Iv4BrDP*^3D?Er<0rD8G1XT^lu2Rj_UorvLT}MS z;>8-$Brk1(#Vz_i`q=6ljJpyR$#A#XCi5JF5?5SD+ZG&q>Wb!jJ%pi5apIGQAR5P6 z%bE)~SMl0*=_(MYzI~^(m`)S_;>V(kk6ADI9-DDr7`mRL;Mc8IBb7^dXn9`@elO*P zG}@V0x9)gYw%N5upp(;3@UM6A#8VFDcwGYW=7Or@4kXEN{&Q zA_phLZu3UcYP_%uqc78$)2(}g9?W(^SZ%KaDKn2D_oI;MzSOw$VJSZEs0n|9CXsga z)0J?-0af~V?6fRjp@^XZ>Z9}of%7oVODqR^qQJWG-HqmN-Qq2~+e z5li5o-9k{yvwYi#`hgI)S8ccJ6~(=D{CsvHAk14GI7bo|>h5xl(s+b(Dyq6r&2o84 z7(L-$zadD;kd@P^?Y67)skTs7rAz6QRnfIaE!@MvlGQ1*9h)gc^d3dwEIEavVvJ9Sm9I&BBMotm&oDqqi3w|Po67!>Ee3~6iVgK>w7V{+NOgcDIo6U}ol>AiZrJ2VnDjlg}cbL&;C*4H&fo1f{3T= z&5PUe$?KEe(4&9fy}o=5%3#Jg8bx#FlrNvt5FCjWWrSYmc86iAlvOmzhsjg#qBs() zprRAn%4e~3hvSskDxvv!nW~Fam@ujSstC+$7^OMEp<})~OLso53u)btYc7r3T^K@C zDU}$#&%VrcItB!=SNXXj{kiIWPXsx^rP>JGa{^>Vf%+h(M%8GfxrZ7_oRr7-+OOQG zID1jxtn$2VXjk3s5mVUm@R~z8bO-sSSmQ$^wD?+Xsx+sx7^Ep49Q>Mkx#!A>x4epX z{I2xB)U%uZgD{y2>d@BuP;enQ(%?BbIzP%~C8 zvA!q5Fg0Sco$Q6ABeyi(Vs%sMD-B@CZ=?7~ihpuXBP#llTAwk?(RcuLq)b<}*?`%q zy%@xU6xrNfW!xbG>D3!g)TaF`rMv$=w>HAj>4G$DdBs~N=j*&fihtt`g02lvH9Cp! z8hzF7%XnsSi!Ihn6-e)dm;EUd+J29jFPQPLiJIT&m1tAq^oo17#+-a7v3rr*CE*RfbgdQN&1v&FS^6)6FcO)ov3B6faa# z>}(IOmTi8$I)~;y`iF=@HEV|~tEOS9N=D37X?TmnAXb9wUkie&#}wjJ{H7l~{3?_I zelg<2tfnwAttk*}r_tH;xw6M=I_?psXI9Vg+gyh?S42-Xv>4Sq>O;xJgN+!eD(mK1 zGtz^t7`G7TC*3AgLWqf@ILNds&a?#geLs#qeYU;@tCYmI*2oWzd8*OV3<^;cUH5hS zh*l?+cfbPcC2Q*0C>^43LV34*x8%(85j87kmXDx$ads(^>_ZGzw+NWvrP;;9ybtf{ zVY-?ob*d>mbV=eJVc>-OAPyx*rws9sECzZ+0`C{kf_KfV;tP9#2{tRx;YHN%zdnXB z*)$(4%BL8dz4F2jUf({BO|fK5*VZ9G*POQ=X0_&)aj2|1c zjQDmiY`h=*AOGdQ{*e!J7p?#Me>sLc|1babzyDkRFMk04%fI|_pYPW{kE|-n^)G*5 z5cK7lWxd+$FMsquyxaeH?*IDttwTjv*TC(&%jo0j4|4g%Fn4`5C`oH{9^<_3! z>wj7-V-__(uG0VA%+hKZ+vxgX-d26~XWR}+^L2XF=bjymj^}?qu~$nKS8cW4u77>p zW?zH#m-(LYU;1JF-~V+fhj~r5_0K99`sKg=@xT4YiRF)9hxBjL`uo}b!@yt0{O3dd z{jK2R`N#iSb>r=E2lGGgs*C2L>i=Aa@h^Y;iGE`=4!7+1Yl!FUE??FDcj5f2C;Xp* z`hPIx|Mthfc3Hpu8E@-4^gqu0dh*b(7on`uH0%GTuKTy&|23YYq{-Ih&ts0pzx*Z2 z*KGc8|F2yC|6Rf8uL1dwr27(`}k)=L)6N%^fg^2I#s_q*?p*`LF= zF6bAR^1j0Qtu^*_K5I08YmEQG_%|~lzL;-I_Wju87vsEYyKjxDFUD*6XL~1Y_N@c` zlf$>B(J#iXmhU4Nf3Z)>ENQ;APQF;rSvTzeG4KEO$6p6%hvgs7tW}qN55V-7kot3M zx9@$jU;A`b|Gg9Z73t$}WcT{#`L`ZFp}i{lsQuRbE82_fZ(#iQ&Bg-@n=%a z$&Z`(tN*vY(eHh?@mtTYc~SN8aDHq3H7|bDr?;XB^bDXRGd!*%GOHb5gbM&1#`n9J2pqSqp!#_>E{kH0$Um;(u zw_5p@7@FKufA+zC<#SZ&_uU=+iv4>|MgM1;<=qJF>X*w+M!(jTk$ zt@+m!S$~t**w+Nf(&`@|*#A>E{8v2ppSuyiA`st}QjGjb zVr1i8*pudn=5K2a_BC_z=c9^f(k)31If1BmRPpx3+##=9aiv@!CMfQDbO#UkEzP0{| zG~IP-u9k1r|5MQ&PsD1;PulR4X=v#e7BtPvh{ARVjVm-UQx6OXG z{c~xf@3k%Y73w#X`X4Vi{5_ifK4$A&MSbyo)JXW}uGxQY{Zmhf+N@8%-;^Z3roen7 zcldVeki>q*ZucAhO8(RYqN2~fHz&U7PT!|JNq*zKN5GCLG5O;X@XaJUco9(r9BA`^ zI~I8YAgZyV#06o8ET$G8SHMP=$s;8^&VSL@^^N5a7mR?IPZgbLeNquMS8+T|)g-|q zP6Gis`URp8;FO7Kijc(R4aUqANNMhnbKI!Z!v3`Xl%H-}yJS1wH0WU?U>30vt_IC4p?_5*fVkmT+_? zB8S3`bsvUsNkd!#u}u<Qw!;nc14Lnk8*t?`;l1m=#H$4O2``b;}%_4(p=X{ zXd9}`*ylJ0*L1}t^Dv1+jFh$lW~@e>=hEXsc7+G{f~o_};+#-s9=nSYlRvIyQ#e4R z(8KYr<$Nk8cX6KFakxX1cb~|OB>|V-BBvJ-`P0#MinjrCcTHTZl7#G!pivN&M5I8M zw@B8+B?Z-G$tQ9$D&P6!&00pZd<~wDDdf`+nI%y?nGy2ivRPZ!8ZgUfD8fSkvYkoOw7fF(%U5#=J5BylU05u-0Wz&FVqg^G88d3g`= z7kos_0XYQ$iKBh@nZ>)Txa6rTI|H#k!! zvQq_tmMH5x#403T0~SqWRm$UPk_C4oT95W)pl?EeRDv|15G-rtoj@TO5E4jom<@Il z=ld2}m{5?tNAnazAg(m!aisy(+W}HL@#I=5A{(mfJ;M7mJKDc!9_VHRRw>Xf#Dsnk zQL8o(vB`)?MZ(E7PqAc*j3rCf$`u6z1bsJ%=~c|pqqnhKDPi%c2-MKmyd+UnWii@V zg0_bk<17{Emc-n%sA#7v4sqL1u>ivW&qAz{idYwXO_!lfmrRmJK##5sfjJ2zh%RM- zsR*w#AyPc90Yi~@8gWgkh>;micQ8S=WOKGEB7;X}OzPuQ-#n2LR2g?z{DcNMRD@?D zU_JR_va-q`0P+}R(hkiaXz~~-QGj3&Sb2;tK~`Z9ba_ab*uE^5B)MT6mL{P^IYNsP znvzGbQ0|V5x?m8{xh~jA$%{DAoZMmokupWd0-^@VaQ_Hj5c5Ic=*cJN41!4C`VDrSISq4Fx2M6JSSI8p{SU(dpVeuwvvUP$%Q0KQJFCsyf zd`6Z)g;<`ABmg>tV8m4itb~O0D9hd?q(;oXf}z;N{hvXg;5+3UNI(fiNEi%sLUI|G zJb;b>jgnk31p$ychDP>KU|3{UlJUk2OP-TpO6lmlj66j%V@W4k?}}l2@mc=)PW2xO z`g}#~Oayx)k)9#@p&2xNaO27#&D{^bJq zBTbRWGafN8X>bxGoT)Jg0R59B5vRf+V03q*DMUCrlOf?s$m;-sq(e{+JWB;4wy(Jx za_1qybjN~TlEmaF#^fZ)#QBmTVN9N%j4+veGHv1>jsVmjh{@s^0#bjVOp?k$9QDHPWg^=|VD5_V#F1y<0g)Iv>=4P-&mx|oy8hrn>$}7)62ZGW zKn{uPo|;LnD6%V=52}|T#(tlb__%LvqGE>N;~oF=nCqImg+3x8Q5Xa}e|$Jl+&M%! z7s1bqnkQKgN6Mln5$OetsgIagB-sUt6xcHqLAN(T!f6M?$z-yGqZS4M(}#41<(o;T zD-43DkJ2R-h`{OtLen=CN0SmuWRnOJi_G9Lh-5~B0P3$4Nz4pE)t@cj^TlU;7{S(G z$%yG6*V5?|+>ItKU=ly8P?6A%1aBz@f!51F2_XB6Gdc8tU4S0;2gOl!vW|-2>@^b* zt{uT3QlORvAj1&3AcD6S$Z|Y_v;_=6JauAW5Qu$*j=aPWqPh2ht%3gLfQ4|xZk8B6KvrSHo;KnT9NuDeymL8s~62)~CL$4SDx%von zJ~43yHT!y6T!dW1cv?1@e<4tM*H19F7Enlum6ROyp_Mk;f!v@xqI42DJc5)z5G`;B zME`1w1+UW(sn0M3Y1wP*9SIlNe8tpsXNh zj|bf%F;51O_`RnmJ_x4%xKR`x+D?fZ0)neQXog}v*$)tKz2`eS&4uBV?ymn=a0&5X zoIx=6k+ax@CL$WI1w@`y_+F?BQV% zd21+&7$HaV{D=+uhLC))pZg}@Dvqmp%=TjbguY- zzC39}VgZ$;$(0q+`H~P_h!GLRK{;rG>5;u;84s?hN7?vUOEWmdWe|aSG8jRRQvre}3>`f=_)5^AvjM#18>n-?l$t z_>rVe!X}3Jn%uP>)AEQOXbj?X@*w*=ibw>fGl&n$L(DJ5u*rck7#ZVo{Dk?-7zh|K z?c+i}!!s~ZGX>9ju$5g;JS5!H4UC}dyqgNyI3%Ni?o1eeE?EOd99Q;xV$vL<+5>$s zK0!cPC!#L{gE+CciWyf30@t#{;2#X)*a9>>TneQLx9j2{Jh1v2v$)vP={-5~M*qY*WyK z7fAwRC<+n4{gtKro@gcPt%$RVM^;r4e-yAXEy>r(Zh?$~F*XqSA>xV>3{O&=B?fUn zfqwdA)`@tZoE4p@Nh6*okfDT&h1{J2Vx(4yawg(pA_+R|PLB+jQP4SmPSEiX=aQ>; z-Vsa`@}UUgT_Qv&E(i=h4sD!`*4B}q`sASERtOI$;BQ7R@MlckjUWxkr zOHXo1PmI$&$Nk{A{Ox;fem-h#N-(izwCIf zW{SSPBN8FUjGAHVXJ~&U&LGrxWOo)kus(?d7#DUg$wi)J@;Hj8C;u#Zm4PN07BTQ7 z%b-#0h>5vPQ%r4kHno1g(Wd?=OIT zarIs#66G*m@{A^rEhw=w3%Fvyl(2T>Vv1xMB7~boyhfr_LB@B^-*k6K> zB;>{Jb@&DLZ-oqv>5}nvs#2w_I2@yOhnjRyWC!{W*jz&i!4u;KOe7`lHC^jO# z9cL+SF^gE#hA0tvFiMM?FtZWY4|t}Y5DS&fpg|RF7>-VnU6(wi(b%IfF5me* z`*08+K8<+mAz2}gAvdB7HY<4Lneq;$Z;xy;ViDJo8##;3G$DW{i@22Bh!|{E*P0P? z%Mfy-vAIQEAkniwbuz|^MchT8byScKS^_6WJVh+ow03YInA%PwQe~2;o>;kgGO&u1&7=u)LYmg-;&7Y3K)lJmFUF5BAy~Z1|wby z#Ud^u!AdbfKLJTh2NdM-M5g~CuB$4#0x!`e+Yk}I5%^vpt~bPKgrjMj+zkk**bpw{ zx*%>NcTe^J8cVDc;yiMv3q5AZghbc*@JbglVTME)I>M3(v*;aTzDq_4vzS{NY^XjG z)8{bhVZ3u9lS14^AO*Prs2PAL%ORd3*C=>oCy7EPCO>XTb3!gB0RGB3ZJg*yP3+ zP>n<;vIoRjL=8M8!^`D~MCjeiMBy887qJ~n_JIC!2jiOduk!i~{cRwP!`iWSWGM6w);;BJnO#wn&qS+ynsuaSquC?#4?f2hrel zU-2x9eB6V$h1@CLiL(v8azSw<@&!CBdg%h>>*!7M??*-4L3Utj*Kj*9VTyHAnyG50 z<|!$7>M1xsf07v18)}9EvU~LF=^Etdo654NoW+qucH2nz- z{YG&#?{UblrTt`D-jCn!op0e6XuA{S_oLteIqCK=M3=#+=HFtKJ3-KvY#o0}(Lohi z@Nw3n@FV?}3jhDXaNiya28F%dzQ&6qWd4538_l2oV9^3TB*6yx!HZhgZ}-&;BQ!+| zK>F$XTCMgox$9Hkm&@gc1sv2;yFhX2N&p}I9B)O!`&-GGOy=`pa1C;b$-siaY=Wl* zn)>ChfbtIp+Fq0 zD?@Y@h^l{=70GgfJt9)lovB3U);%Kwv^3h7&?KFLk0Zlz3xkl_XtJ!BkGbfAsOXqn zuGXi=ia(n}sQmRRL3A*HoQ-g(z@@M!94cX0 z*0gsoJ-<3H|kF@rh#EhR+C$FiJz&j$E3MMl?-BgmTX{*=nt z5te5Qa^S9(qCWrl)IIkbC;NLy@gKiqc78yYcNmZcY1`E)J@sC|wC~;{(b?jgTHxd& zYO?lIxKC8a0yd>3y&lM zZu>3uy=}Q(4G3A+m-X%rX6UIXlOu+8G z_ms7;)84~h*c}1CCcz@Agd0i95>4v_eRNZ|9#nxa_pX^ApQ{S85HP`I?eG)CP5?JR z$iKc@>brNgqq8+CDm;{P5j`o95op9)yk zJCLgBU}42LKDtVh>%+?t7802Ng6zJ-%LCv906*R((|dcK%GMR(NwSUeA&7w446c*v z#aypD16bP|=T-I(Ql??oeLzJPh+EgpVOv7!{R8x*AYZ>5fxp-NXILKi`8!w!>{rv% z0+&-r@Y%zGm)!?saA4@&cfjyty8}scx$#oss{IgR<-tZPh8W8mtm5k|b%FY&NuRkN zHQC$5GsiQEt3V;>+8WBm3Qj7)Rp;aO4KOPx63JiNnjkm3)-ji*queaY=Q2eayJf;{ zQhrNaptV{#eGbLafZTwFujI4g^2W)aw7?1V^ zjwFXt7>enGURn$KyXb>eWn!zwp@g>{i}w$XI7{Q_Av!Xt?@jA^W1~i>Nrppe0)wgR z@TL%KdbH-Z$$?AGau~HAn-I-6Sk!V{Sih%dn1oKa8xqKdh0lzVdNX8?*X{`LS>K`^ z9J~%Szi+s_5hd(}`f!+K-3UsIh`&MQAVO72sR!^G+&TcAp@igt z)^lazG~UhvW>o5faZ?{O=cW|Fg_0P&y7|SGO|p;y-7c_HF*MFZMt{R+A8u}n{2ngj z@7)d9l_WpLeXh;P(6K!!x@q^^ZssV3}*Os{1{?>udRfrsrUW4t@mCF zSld5Pg%7x`UN_W~hBh)-<8ec1todN8el(qvc~~I9K?@Cmy+?b2Y3Oo6Ez$O!3>72KiY9uNwQU>F>-Z=l(pT`aGfts|_{o<&RL) z`nPWnEqapb)lqy_?c|!hR55J5z7KUz=$){O?YYQ)gl<_kft!i3z0Z{^h+tCr7+b}I zkZ^B1kRM3ZxdHE#1H6C`ujWM;1u>&!^DVlWJkKbmqP@n5h?xd!6%N#wxd1WC+f2vh z`hA4=3UATPO$bK@bhdN;_NpN{BD7!_*=O!Q1$gk62Ss#X2oBGEKRSY)WF~|s(ljm5 zfB)^fXPF49_i)N`&*MMBOfY%KP&^H#)VI$Q!tgL6>@R2!)f6|laSO_aXUmWF-u)cr zBg>JyC%SP%tuRr1xUQWb?sG5$!pVTiD{iaAN{u%%lqzHgzejce8W5O*L8(!d8O-$H z*{ieQ`_PfN>#j?l`FpIllJ7WRgde4%08-;d^OP|1C9FN1mp?~d-y3#g{i?25oj#o9YLel>*xPVzGdxaK%kk<+TF(!b`au2Q(qDhHsQqQ0G+80#VVe zV@g(3!Ph}Dpw56bq?jpFQK0qoZUOic`{~!z-HiPwbvAdt*|KcX0uK@-TAPE~g7P~Tjm`{8Qziz`^++=A8r@NpV z>6K)29AemElg+lVzWq=f$8r*ZTpL#p8V_sqmdX^spAU>tD3&XVWFq97$$c$jc)95F zTv_^y^>uwoQe5|W&J3OXQqD2d$u*-u@kpiuTbHC;u7VzUfEgY$atAyo`UEGpKDP-W z#Rs<$!k`Q&KaN_n87$)Q6OIQuRanPx=zj(#_1+iIa>^o0=*D>2`0B#0tWUVr!vc+J zhqj{xF~NxK6Ov3ceh?D`Lmu*1?}|->#tZ1W^0*=s)pD?Zjc>=yarnr`?I8O7^muyq zCyYVDp*6a468P=oo{4OEpGMB;s9}ckwFCG+W%|W839wCYPxgpgBXTrxu43C)d~tig z!BXNUm=8V9MXAF+k3D*Dj`%cV|M<>9-Ut7Fd(Cc-r+77G(y0ELGKB+?%@tsR+g%LgIB#MKty!c1(lYVs2*c*u(40!eDDL z=9R}LxX790XJ^D_^i_R=g`rl*z(w&@lkSIdf-D#;-*8KNgG?EW;d3lFVI-6GMo$o7 z3_Q@-7!Hdh%_1Z03O-P_ef{n6g&-ebxDOe;iykOJD_MYDe4J#@C)2Gc++Y;QBS@%8 z6kh$LNL?ehPS-GikZ{Ij6EZfys)*MIX@6|01q?p-EW=o35@m<@NWd7m&vFirBvsA% zguP-;RD*^3wBe7g4X<-G2z`b3PK3_siu}uO->HJ`DiHPxf|Mew8Gy=n3MH|3i-inBy0L8SzEH zd}J}GC|vgce|KH{;jQ;Ra?z*By@x<568iVL98^t*h9UxIdPWvo?{_sHBAepC*q7J( zHD9p)Z&R!B7A<32e1M zN{Zv?6C`~!!-Og^FIMSxolD^S@DCjHnaL4hW_V~ATFUpgQbKEWC+w!8&{s&PmM!RhNFoA2&0vby-j_bd^C$zeyX85jAT+*bj&$KzA?Al-(5K7#rlE z3Wlbip>LmQ1$*r)a(IwaT%t>GV1CU>>?6Y|2KXn(hX3ZdXm8)83%oBGu9CU} z6W&cq1pjGV=9o2-+@0~s|Dbnb71E^QALa?h+w{5LGhQo7Z1m*>2e!J%r7)0=MI?<@&`Uc>N=dZfMg8?Xq%juEv#n*3$Q27d0|DHjJCB${g-Q72w zWAT&n#~B!Z8!bO-lZv0_zsq2vNcY9*8)np?mHhstbNa-W5ub1%mc$Hn!Ih7}QF=JX zgF7I}s6)@PfBuTn{?PTm#&nUO;UWGgrclQ^4)gvC<+?_2MoOFkcOjo6S?V)bH~L$K zI_O#DdH!skcoL9hlJfU9z9Ew17_fH2IR)mJ0w0#sE86o^&RqBdGKah6`WBDB+O<3@qs+lcsX0VEa`dY(IqCv6^g3&KlsyW&Ig z^B>rQA>tv7()p~(457))pV?%RPWDREfZ#%TYYK=7l9GbDUJUF8rIr8gty2jd@M}sW zDgRGa(}Q;XOp$&fNzBjVFNcrbz?&xMW=RPqXd`fVc@)b7 zNWKtF_x)P8L_zN&D4;~;BLM26nf>FL0Wn$k!yHiGmrtykZ>bFnJ{eRGy;|8`2?Ix9 zo(zrCGpA<20X{WGKX?!v8z!Gq#v{N1+3rV{@UB4XTlrv9P9xG<}3~ul!S0h9yL81i~GVnqS3>DXx5OC;3--X|=hR1ItuQ>7`hdI6;$?tQK%&$Q(J{Jiw zI>rkQw`AIfI2Jg41Lymf=(`pj)GS6z`97@2&6U!{n4;fLsNi#dcgDv*dTix~qo|JJ zZoWFDUk;Pi!-?Mc5%g?a)QJv1{+!}*q%gcb8u}&k!pua_59B5B zU?G1c_m68$1NWSVUbxw5xL7Cr8TLVv70|JcWD{WI<@4r*;sZgC3Qa+A03iPPs|6+c z+>o5P$(eeZ7qiejQN=!A!<&L_S95klu^MASh?vEhBO zpv$gbG0~Xm5B5bDo1o4y)9PnQngNuCpHjY~|M=T?@EGQ&;0fg(*6EX>zx_M-l7iRW zmaNk+Kfp!C=D`1dfXKk$c1_;3!7?AgiS)}4p5rS&qyU}i{_+FdP{4k2JRU!enP4kn zX_|&P|M2U-!;7ZD&Zq0Y`~U@iIuQGRNXfta&}Fk9Oon~Se-!hK^v-^;bSC)Ay>lN$ zCI`OL#lm~xg9W<62beqjV?f&(*@4h{sc2`~^<3c|$WT9^ym<-{A0OL)Ab3WfX-JK;Yt zVGiw3Z-pT! zX>^MD(>#_C)E83@jWv~_R_Oq#Vhcfh7#u~sa`@P^_Y-a0+h|;*pef{~1Q*Azsb~=Q z7p>R<^-Yg7$wb-nXvAf|Q0);omJF`f8@| z=|!WO?ok8M!}Yce=n88Bq0E%f6j2>INCzWOyhVJ81i*l<0wPQhjPzr${@^_SS0EtD ziWQ=G44M0n-(4x1kGci}XN37bA$hvpf3dz#iVoS!voeq=fb|3miQ-P_347$t zdgNVK3!$nHE}VzWvwW^0?(n(&uVRBLW?r&EWr#MYputyAA+g_{9xbjFX=gpnD#=42 zHrFuMt0c0Fd9~C{bwLlq6&2wfpjVBnmEzZwki0Di$)X-KUvRhhEazqd56eriwtRei zVB~;EMxk>#%;tLY(e331Z@h_ifLeB{d0f;dd2E6SoLY zi4}zru7cEw{S;;GSNFT{%9*eTOn2S4i=Y+h&$w05G~r!KpJ~3}Zl4uw8^{P}LqXyZz&F8*k5A3dwBW}4mYncY zuDDZtq37m`v%^;C2wsH6z%A-i+zYg`u$XU=?dpv{97C9e#8GJ5w_ASUFAQk>mK7-M z_BBWg2leGWJc;tDQvo7D)Bt8=w+CO>-pF?b! zEQg7c!VuvYF_bZ`v}Y5q0ZPzeDREhOZ*O$m#Z_!v0%n=qTdJ6SOJ$2dO)q>Ssjb&C zV5rknsGGY>%a2_`^%4bKTj6z5|G-P=nTPtZ%pFDgymr>nOnra?9eCZ$E0v28yi~W) zQ1D9SuKM`H@1u(KZBm&XuKhHFeb zCFat(KXH_=Ld)Bi=k5bx;>abRLw)!BUeW|{5beM?-zRr;B4>U?XlFvp>$UG;7usPwvCCE@)+?pi^sg!I`RcQ1bB?zY=Zhy5G`dL(We&%~kO2n!g! z8Q|Wb5dIEBLZz;;#&0*%bt2~r-|ru;Y6$PI{e~)Rf&_;YYHaG`?RMAxc!!6wDUjne z4)Df0zMIPNHo9S$jBi&TztF69)w9ABK)?FDvka`{cOcaIqM=>I`ix>d7B`Xw1b)d*?c5{x<=Kk&$~zc)v(@c!HRCac)9S#z`OUe!<;Q0XiQ6uHc+Y zNzuSQPbouG7d8%Bk_LPC-_KzWypU{f_hBZxJHG;RerFz|{Y5dZQFQYQ-Zgs!)b>&= zi`?ygE{+IckJ=BO8;h=`UL%3v!)u^-FFpELc`poa8nnwEBQiHwwCIMXYfP1AU ztfRX>rtD`lk40^57#@DBx$ogDCZ%&F4I&4@aN9ur00PW|^bhM2d7JvU$9uVfh$3&J zy?4baMqb8>c^$fNoo0w|jDk?vhcJ%#=YQOp50xIiFO^C^CxrcqgS?<*EjaIM$U6bM z{n4|o-b8Py?`sA4ANW!!!~eeF0Ed_$H_??7jQXvcV{;(&IGUJ&Cjir~^+9hrddxmn z`fai#M_l^tyXJuJfe2$4GL^RUIok{Z;=^(N71h-rq z@vE^KqhblMYwk79#=~qy??f)5-aoMKp^9+3g#2m#m^=ao7ZQAUj%M4}izjd=SBMGa z8R#Y!JpTo)0uxw@7&yvN!hs@~+8*|&S7J6}PNg0oGFbwu5mY^liWzg|3Zh(s65@ww zPeH;g_E2o3+(!Ap#DI`EJqp{BB#{-xB7d){Dt5sUFYV@vk8kdJ6y9I`TJr~UL}GMm zhNvdo^8?)j)zN$Qs`G_2uy{wak)xtOtGMO~HR~_M8I4g#_2al}3O)w+y%)3Ci4n#E z3qWm0&D&gmr{I+wS9J{XqyX1@dk1)4c+C!kk0U|f#X#zRvC7W^kG-5_=t>!jP>XXa z1LGDp;^&tf&K_f4aU^~5UMt`9UbrKYFin$|*h|-6M&>cRVI`?zi9YS9FJNMGY2*0K=jNA<%Y=7;>GMM!+`9a9{I;w$kR(Ltmvgnv z6G2LccHSGbu^HmI$AJMdRSI>2RA1Q%J1xQqV|L27 za8+AjqJR8JifSzI6hTlYy}kP$au`d)C2)=gcb2NPRpE&)#6cp`+ z(AwDf7xZehe+X#qCt&!5M0bn`Vc)rz{CVbfJ$wje4I1?-*`x521fL(Koqu%nk?Sb$ zWjtI-X~8?Ltm9P%QZ46dXmG*g4)3sxn9iStip1#s2_D9Oz!5dUUmw%!7$+y5=dr>- z$h$v>=k+1J^Zj3uO9B4tFXbnU6=^#HKK*njA&Fr~4v)IfpVx~ow&q=2zo@D{Sr7`4pWaSQsNJuzlkcb3&LrInMZB~GDKdpjA>TlNt-{Ti{nPbQj&G^|e5sz%izJEXesOUDvX@sgc_k=H1SV9z+FITq zMxZIhui+$}PKP0wQ{>ZY;!=$FIPMw7+bWKc!B6$ibN?%}Cp`MUMbL}|jed?8z>-Ba zVq0**o&qgyn3ukzKOPKV3Y2^o2)dx#EM2ya@J`T&CtrPY;28^ z79MyZ`-Y7!!w6O`hw;qTNx$W2ssB*%ezZm79eh7fX$08Tn5Ue5X${_JMM$QFqA z!alr;9@M>f;U?)|>rcRVgt6D-Z6drtJNC+tpLcH*NrRq>zI5bvH4_7&S#p99oj;`l z%(*FOx{G=YLkQuQRgfa?2Hzt645Ey6?M>3)6A$*{w}^)^^W!(x#4bR+W^}Cqav%2_ zdR;2<&hGdn9^@R!Ieo3P#OVH*V7mvL^Ve%qHf92bllKktg19Mt6qE8xfcIY~?~k7| z_8SV=h#jLoRaY|@_p%Ifi2La70VmR1@T>4JtuQV69&=$Rd4rA+e#nlnPH;R4K!4Y} z0pNeJOPVp)`?_F~C_hGAf?`+tB5!dudSF!XP`2@|Csu&@V3KMOe;pA*ia%qN{-ln_ zxF@3({bw96{Zh!NTQ&+!zh-R~ezHvcd_QLWHHDUz4A2Ub-~7K5JXBJnASK38I6KIHc*quv(`>?J;maSfcX@wckU}q6E59I9J$g1nx)iS92Tb}q z?m{_fBRFW>v*erWfQSM5Ah>De-`)ZtG3Lb=8c_end@)T-|Yn)(Y>U;KV>@f8f@xXO1Nspr}FFRB+hbOam*i&>^F4l+_~|7J_W)b3!s=sT!eVWHBL)RcylVyZf#)I7VHvNu_#~fZ z!d%{h`%fP7d%=O>9Szi(5Mlc>G?3}Vt|uchQWC}l+oA{fAw$1!d}{d)=NGRXQ6xaKb{!}w!Z6W>iPXHnFT}tE-KzpiK?&(2ci!R`5@IGA|Z3w zS&%0l{^9&$B2(gJ-~1SBg&j#?)WKMNWNz;h`Sfk=KTG~1r-s@5{FSiEIGzI=m`d)U zSXa=btqSd<=w0s*%kinbkK~;80F``naDJE!Gzq497@aLhqIs=RwKnZni`!+H zpSN4{qi}HO_IWWEsajL4c+*<#d}*C>=FC#7?84&Ag}bGl{Q%b1ob5(zV{5DpRZdTf zeNR@?1~*fwTzaf3Q)*N!Z)US~Z&?|6y4v#n0Z%ytRiUy&yF%s6i@Bu-Y`%S@ioU4= zvf@Hb=ZX@QE>q)vzDLoQbe})1yM{3;E9o@l6t#?UpxX0;N*&~7VbG>Tk1A3}r#H(` z%^r8Anlq1C?tAO3U7t(_*@i3nJS%Qi?EYY%&Gc#8?29Mf&diQ`-C3LKPVMZRXJ^jb z42)H)0S1bdj!WfKFO-Z~nX>0*W;4k4R{CY`4=b%^Ms8{~b2{~pRd>kurF|j4?Mdal z+E6-EuXSqFvV7er%@tla@bd{A$^1=Z~EhbIC6*diLN`d0~H` z>Z8(@7PotT!R|%cY~_tbgUOe(4QYBB^6Aaln0sSip~{?4^lhrxznD~h=Hw5IIa=oH z`>t4ICK)kv$Q|Z~fuT}k8l+kccj-!{Q!b6h{R^FI?RRM_PqB=7Q1=H{5i4qbx9U*b zr6io}%}%+<>3+@3H!h3AB{M&4jYCl=^eBp}?kH+CDcQ5-)almQ1$W#^vYsoX{U&u3 zxQ>(AjC)(@Qm-lJV}G`yL{Xa6ZHlTDwTpV7hB}>5GlOiWOf|;U;oe^!yI>5;l~!K9 zls4yWebpPPy9ci~Jy+RHb};3KCF^jQ-GAV zUw-&@<+uU+{KV5H1ns>Ah%MlD(JKd$^t1i1WgsOUGJuMgQCeg8pjq!Vr#qVG8 z1`oMP8m4bnKn5iSrp_6VWDhydLTa6J(@D@H$7%I69ZkkdmQ~JNmDRItah&IzZho1m z<+5cer&1JExadW5oaG!!Ee<*yHLWWdaj-1R_D=Qy-XD8g=Mpff(sJiDMtouEuPdwI zL1xsNOs9=3-vraX!12vSk%KR)#ee~od-8VKBMFC`2k=Q7pggC@|S*{ zo3}SPE>kVIqEw{nV2Q%Ilvd;Es5IlZizN#xGd^!B8@?_Tt!la3-=4u1Qyo{UOQ*E7 zJM&UqIyO$yp|q`3P7Ot0Z|oXMQLojrBzXU7xd09&Z*_*n3H-91mAbPk*oD?* zE3+OunIr3EOJhG<5)Rpsmf_0jELUlRPoLw!#=_AK_#8?ceJSUvR3%rN)N-?JJvTda za_pg(uTz8kLLBB7>O7x4EDNoQP*_cr!oC7N9kq}fXvOwrTWsfd#ZJR6x)r-v=4@ zI2&bIE7N69?b4Jl*RsNFDD9l4KWepe4T?IkuAyY9u0N=#j#AWe5>=KmQ?9Zt!s4$F4>V>?~kQ**d#U_tL%ewWT=Fvg(lTRYulQoY2L=l<5Wiv}AkR)xLRI zv9byJ>>y`kAdeI&E$er7-pbi={fW*g3xo4TlS`{suD{)b!d=i2p4aa9c|U*j_u{cI zsKBBx1!|B@54IqwnfF)Q!oj{2&qBU<7AusuQYqhdsN)K3sbEE%+TbH}sFTy6&igHO z&QGWdkohk83PpntlQ${0a{!+UmFZAareIRp?k+Q=R(`-4&Cz(GcgHnJtY0Lq+iTYj z@HrDK#-Vj#LDvpe4cAsxhVCuR&QEa=g$S+VWxV& zIa!o;(lVb}u^lbT%4_g3vqu9AnR4C^^XAH`^4UReuN=p#wtl4h#dgcBw~yPBtY=rs zeAlWEr<>lk+T7DCr`zPx7247AtxG}k$|HVJc1CM=m@%g3^huMP!B|xL^r+hO>f>{H zCd@jSKA7^wj#T!B)AgBNUYe}}*JU~y7|gPJD4uF;83>16{@5!PCo`tfq`O{aF7fML zuRc9XJXZ!y-c>YiS2;S}{z^M`x9v-P+$_()F0@%~>FIEmA1Hs_{_+?|{C`)q)8(#e zXIkG;-a%uk%TuvHohF6#JPXFyuGhNN;aq2HTDQ3Bt~LgH8u918Yxvt*&5&!OhEIEQ zqmZAT?bFzEa>dI)@OzxXIgOc}X)ZTn|Ij$6kB#b3KkbaPvP;Va(}0T4P8q9?s>{Z@ zRn8C3Q+;wa+}1?(Co7h_WE=8)c|3OA1eWu!r#^vtBlo?TFsm-h?SPgRL-o5n(*`08vh zIGPoyLQ4n5<5_<>+U4@igF@-{wx3^?`pjV9*9sLib2zG5N$gd#-d;ZDm$QALu{<|U zx!PeSC++1oyxZvr9Q|E z=rKoCm!sOWMm77Bk~3X221ZexCTkTKcrE}IQt>tvZ^~UB--pk{LeL6c} zp4x-8Z1AqEwvK~tlUh1CPE_;Wsspr-VZPFnTl1RNTpq0c$`JikHQ!&@&30SY3b_mK z6z$@AGTV9c$;@m|n(Va5`J=g#nX=8+v?9(*oSoau4DQ4k#hFA&rXsJVy-T^EH#@>m zaaW~tZc|-l4558lA3#x;*}PI*c#FfVJ`~4ueq8gq{A4!LTg|rEpUgeIwGfnrV*7(G zqvpCjyIAjd1*3B~EIWox_cuefc0BBIM*bx1E0e>LR+jVW%#%!AU#LsHZky^(pZSi^ zXn@h$p8Q@qr|!IIL!ZxA17W31EvngR)6=%+mB3&FA*xs((C5x+-fB%x)~Y@=3-qN@ zEK`TYkjnNNONQQLy3EBG{#BZkX1boB>uZp;W&O2slN1Qx0T=w@|4JFTxr{y#>ziz; z#7pJU+A4uhxpZ{PPO{m*#GKZkIK{^`H z6u>82sg#Cdy*#ayHx(y$Sl`MSRZGoE`P9yNvZ}D^1c>1h_}zr*fqXY@R5t5wYrEKG z2P=6ompjv%HSJZG{dQ$N?oPX-&a`AI&8#x1Z|MRxH0Bx0oM)WL<)HRY)LNTnn%b<< z-OU?vRamwxv2nkJmbKY1{FtTZgIb++K6*a812nH;t~>o}0b>rc=yYa=W(o zG;UArIcKoX(P^{nQHRcvIt)(Kc19l>OPX>dhH};{b=YLoi;OZab=vEU`nc`ZMMvFJ_#& zte1?HS)!E%+ug3l0+2^FD`)KYd*Ags`~1Zhp*(2il!KS|DIouK&P7TM<-dcI3qBN( zCJ*`aqP?Dup}f)E1UqEATih<|Kne%EXtm}`?PhPn$R&PLYBZO%?x_pLS#!7I##)JG zAfdZupW9fp``>Ty!t&W5XfW7utMxsf`bbB3;stL6M;aB1hxtqLVBR>RSyE-xg_ z-FMCzx@hfqc9^YdZq`i zFZ5<^-S6y=?r}KY4x8nPvFz4{Lbby4wL+`WQQLL*_!lW>x^_@>McDlxAd2a|V4~Ga zyV`Nec4o$O$@eSHz%Q)06LT8dqtaq{u2~(oR81dMts+em73%{wDo-8b;^tXd)~D0W z&eFP0b}(Ubd9G0GZgLXSqs{S1-#d$39t=-3^IaZ3@VH-0L?=l^c_EAa}}U-Hh{qC`kBsVb7~G-U3Oo!M-ysbX7-fq zXL!IE#>SyOY0$c@x4X`4r!DQ7Jrr6n==x<-*llI zp0UiH_35SKYNM*{)aDXBVY}(oc-x*YX}&7x-fFsSX{S}IY5P0Qp3L>$fGsU+hyJ^DPx9vEseFK_G~`Qt{d(s5bTDV<+5&v&&|?WXf*ZK*)rN?%W7+Mak!JK<0+@C z>YltbHsGTxOICNJg}fItqw8lpHd^Vi-csg9%lDjo-E*As+{l$Tc6%ev8P5Rw-a%xG zwA>hF!7{ z!Op&KLu=E{76d>tH|(4NK6`U7_|O7nfn6VbSg`x=9jDE@PW$XSLe2&40-rjxPQm^D z=yuA`N(ElFFJ4EWz0R2N@&*frIOFA&tl!Z%Uo@ZvEAQw1!T|^kpd$in))Cs~+)3#u zHL52`t(~Mr?c|y_%U1Jh*@9NB-bKpv0iW#Cz0Ls0Vu5uFb|zh1KnvH5k)a_@oH3p{ zV~P&6b}g8q3O?H<>jf6C73&>@pkloY_~fNb@1lT8LJOFh?KeQTSD+*b&=6?-VvC36*y?nH)1g-5DrNE0dim(~z~s_87g+rj*dJQQ zb<^*gutj?yRTV`klctUZb+@8>RAAwvu9mDRv}DyQI=Adr+JDDU*x4NS381SLO2})5@$G zv*~hnJ_2#ZVx3B_$J8x$d#QK2KxitnL(v~gS=Lw>LVsb|MUD5$3#Y~H7xV3eEApbw zR>v(MBv9VC+3jj)$Jq}vlbk>1*28vgH{RR(-BfXm`b0SmYsQia-~dlR;R`6U&Z`f z$mAs5^5wr&?kc(A^vRyN`Q*&n)8VLGKd_E?scc&cuQy9Z|E$^dX0x@gRZEqse%xfw z(@tF()fNM*+AQf5e;88hGCML)Kub7jTkW`W3miMnr8DyB;_6bPRkkOK*@9uH#et@a z`E_Top7pw|lR50Ei|obS>&jd-ZL6zNmQa+7g#y^KyJgC;(^XnX^R(>FEV0|`mizre zDc6-o7GG*L(|m5-GJ2T`%NMrmYN=e^jjP>~BROt`zf|UPGsAD!?V3>O8tc*C)atdh zD^zS|>va0&x}q|R2~$b)j9inl-8R45Y2{gayPf&@bupbCT~1kz@pGH)LiD?HhwgL3 zLGMuZ^G%_=I#%05f7hv39D_R*{3h)=x$aJ@>pSg`KX=qi5A2_umK(ZFu)23uRXPE# zK3{fsGrqq)9hUr7$~1ZnM{GBXv(m6sJJwikF>H@Z+kI1ImL;F}ood&SF6+v9UCB`= zwo|riokeGQ9s-3^m+j4_v{|an1z>1XCSB77e|O3I%e|W!H{85b&z6jdYwSwXTG22T z)uX@`N`My%!$C)}{hlP&$MfOdAC_6FElbvk0mAT3D$(biv|~)3O&=$hu3K=ux;e-? z;=F#$XRH30s@H~dwVkJqwcH?E%d3|rzud`&T>Yz-ix*t^>K*>epbVD5X){C;u%nVa z$9&+s^ksOS1`D(<*INDQ5y~C3KDoGAhqEH+0%^WnZXFa|kY%;;V$_2#D$FOkpsE2) za#gQ4yWVzKtxijNw>-D1bxF$^^=j8W4cE;xUD8Tmy>!NOjb9F%M|yYUOPXyp8Gf?^ z^Rvm<%FV?|YpnML`mY@52OQ?V{@D5Vk8{<%k26zNS*E_u)aqJ>sc$lXv1DuDUmg5A zYwxmpThB6movZatjv3pz+1Sd#@A{n%&;+z0y&gP^es0ge`yjt-{EbCS;mSwF}R7ol~sT|KP(qk#%@>`l$-2m$BnkT=4m?BN9&b7n**V|w_WOsS-m%8vRV^} zxFaUJ?*LVxJCR$vRdF!vS#GObrTg3U;F4`uyYrGZ*lq?|)o2f`U9**~GF_u&2$u~I zce{02UmE3$+ZmS&qrPhZZNjK+ylmA50kOCgP$y9I%_mb zeVI~*MeA5AFE*T%Zq?y;6wKbfmk$izi&AsGfPBY=9I8`2R(ZodE~7g@ zW(~S%I~;bZ)qOosV0C&l+t5R{=!x^0FY~2}WXv{leYR^hWLvJU*CSf*O>0W2vXNj` zTrlG*+s=~ZmqNGF1lrcoWLgzUACy-c``AgBm?PwF=iOyp+Eg^&s;JH7a5dzCk~!c? zeq}Of?T34Q$RFnPitp|U>FQr5792D~`D;%|;H16T51R67+TP^cj^5dI3@6($T)t}; z3Oz?&&gPl!YMbXJ*V{Q>(Pb2_nm_cos@g2J4zkxi`Xy~^b30qqGqj>ryn;|?{Qbzu z?HR&M0On)1Rz!{llR+SRB*p1q=t(DNeb0Xh;q9$zfkyu7W+Q7RUig z&(<$Rx_{L8ZfVXBZQeScBz-r?Y!&KEH&}kSxX|-SfuU(>h54~^;f%Yzty*Ssk5J6dbN7pr?|X&l$g!hvuR^CJ`evg=3=@|o<5a*Qzvsar|j%s!5ZTa*0u%_93W2dqCVYk$}2#qQQRMcJ1?a|umaL9?L zGq0DpLQx+oXJ4ku!ddcG)((e~x^Cy$yt#DG z1Fh^F>C85lRu4H|;JfAZnQt3p{vmdo~ zn|jOX^ZC-n;QZ;rEtSTz?s+`5$1^wAKJT5qQ8U{9GDBDB-gcVlbp*!CZHn8&iWz3; zd0k_Qs>rl2{PEnbZI<=%bP0sL-O=t&7Cob8YvLkZ(P*bxp4W7FUZi-=6WNQOR|ek1 zS<_vmp$vBVV0rN?qhsE$)VR_7ARfyZwol9XQ$aB~PR&*twcP2zQHO?|Q>k4Jd`T+@ zUu8OcU$ni$_~86if|?}>j`e?n&(g8@>9f@3OMdqVWbyN))t;8?`q-?E&on!kT$KK~ ztPQ2gOk1$I{p`X{`18`68`bX7w^o^MewL*>QYl}w8#{@15BA}*ENm+jRmhtsHJurp z&BB3N^$Umetalzztg&kOMw1zq=i_F9&9IHFZ)l#b9=Y^>U{giCFe!WaTx&p4r=5JF zj_zV!zHGgDZFiiMcjCOJ6m5O5qta_3J2_pblSfsk&8|mL>+V7W8n2MCq*Efrb*UWmN$CwPDz(2@h3t7tPkomLN?&$m zIb2pWis@`$UDau}U-m7&I}wYkUAgG%I@3Ei4!cS(4kKF_sZx$>P`N@az155Ep}M)8 zJGHqbN%I+C!RJY1PkG0)yw%$y-OO(nMX}f2bz7#mv1+3Zb1LtR_9;i5HTHkDcje7( zT8P1$;uC?29jCX?Bx(?={@z8%j_y`m*bqD_ek4;`M$cYinto}fq_NjAGP zlPJW&2GD3UerQPD!_SXuxi6J9xl-+cArBw8a_zFWEU$+Bmp5}JR$OB_I6j`Y+&g*F zeN-PMu4Xh`{i5n>>R@uE-IjqEiSuEZzdSlFm+hW3T$HtQ(JV`6=lW27yI8h{y5;Jx%_6CC*_mns9kOy zsmGv4ygb*-Z(OaXJzey!KP|QLr!iO8WXD|E{pMxmt?~N#v2ML8P5x$icK7)Oq zTD+yW6j^+6S>ST#n{V#CcWyFgCduTDG|rYepVwu=%oY~DOMbOcdvSCja@NmvHP^&iFn0Lqm&N*qacHM7 z|IFZD$ALn4Qf|v1cY~jZDgG>u(*73xnnM3tnk1gl0IwRJ)y5EMkV~8QZ`pjc{D$2A zDtpU6P8YScuQ=?kB81A3#`}3AR@5vW#s{GitjrXrT$XEz@6^ptp^$I!rnWj^r98=gZgQ-Jg{5=;U+}moDH~jtFu{*St zTr##YtJ}?GQAsyFyNDZ6)8^6jT%`WZao{R!zyI{EDe$=LIaXnPM=`q-oq!N4W2puDX|J4QBedIo-$D zVv~>KnpNegSy|r*v=)8@(|@p1GqRCouXd~cDwJHqM&}8vD6-!2QbU{dUHu8UoL4p) zh!2bnAQO)=`MbU60x5$(h&Dx=EFMJ8%lu~=z;JqG9SZq{O|Lbbc6CS2 zR-tUNv7PJ~_14a~=UlSES6yIJxTq27} zusTqmctmsI%qP(A*?Mc?rUQO(UCR&bzvrGIGZ`?{PueNTdhps{@4opKkK9XXS!QF= zY)#jGCBB>1`!n%9f>=BGX~z!CzUg|`)aZ-L9XkuY%@mJAKnTuF?%I`kC@@4UiE5^b z@5^L>8Y)`F_hEM}{Ix=O%p7?_WI;+*_MLPRWd$QvK_lnIvg$*8UM~u;m{HBqd8jnz zrFSI5BB1KtLlq^BS;#hCOWs9(iN}Xnt-zwY7zy5DmBiEATP%h1V-ARv8;OvsD9aV+RB0 z=!^Oa5$<_AA5<7)+J1_!u~pU4ds=do0IhzRm;Em+@nY0w+^i2>;_X2#%8SY$mWS(O z|4TdIU9#V7p6+#mJ;xuNF{R7v!M;flWug`gXceD6R4fhX(#5hAbfU>W7%O30p+=0d-U^v|T|YA@ zW5&EcrnMS~bU4ko<_(Pa7@pQ~p*ujWYEFA=2)*&vCttKak1^L*BpK$X1l?>n3Uya1Qo5qeo>p^nF_QGr=6o(}`FF2fn zi_ND(%LHL0P^^mEED{hIxyViWH7p}gr9Cx@*Sb>AR@4FVG3J&0oI!&Di#Ybm=TDkH z{0j|Z>9(tFk}F~AvYXI1Zay_TZxHVkdCMnUrneW4=c#t!g59X)hF~4@F zW2QXy`PJ}}<~lkAuLUko8`#lbhc)x)N{-nuR>7j8fZtlqZq&Qm((c30@p0dpJL7yl z4biIjK495ezO_fNhd#XWn$+Ty-Kbv_14m|*ia8OSa`+B!#vlDokLFYA_-w8D)P!CZ zL)oLQfgb$svR;TQYrcO4>==8k!PL^SY`BYc^))uS=Qsny!~Hi??Z%xwSe{~;q=8XX z4fs~ed@Y#8?|ITvwjXZyu^v;dr+a2e$MXT5aQAi6fVNUny@mkaTg)RSej^;;#5ere z>MU3*-Au?Miw{!=2q0IAN;vT~3?g{t-PJ3bZZ~s1!D{W^On`h(m*h`sHc{sV+BH=C zWQJ-MqFRNm-C*J8zAJhU81ts0_^uFywFKd}h0ZB}No=;^7S|Y=&xA#5G%3JlI+alV zV<7- ze|!n24@KBLsD!myFK>>N;7E+>_=EW_0pB%BG}xkgT8PFNbIaPBa-5BZkjGZZ)iZgE zaRVKPkMnagoA1N)LEKJ>1_wuV)c$6VUv@`eFTqRNkl_=TN`X5l|`}ESl%>=B*iZDj|wP8eS!q?me1_O1-WF5$bjBctgX?Tas^qG;a*mMq-4K#Zj- zUpN%7oQCH4C6BBV2>&Ev-=k`c8Ms4Nw9HzcJLj-qe2KA1_I0JRC3$MFb`j%NHu3nA za=`Io1T}JbS+wPzH1B-RRC0l#t3{2^nUn0}_v*bV#;vrw*mLnoWpdlnGY1v4GE0kv zPmZ!Aw}f9>|G8~FF7;5v5k}8kZ4aN~#p}7#5hQ{36ZZZ+org1McOk-fipXH2ahtG!Ddwx)k7xe zpO^x5at;_H;m+jUj|b)H+m*g&aP+0h_nqmqb67drv7p@yen&_@mt8}J?nY6s^Bi4} z*8_CPyUjl375f@5Ct=KmplD|cwX#Hjs|sDXd#F> zCyBdSu{S|$ik$LC{O~MpDI6{g;A-Otp95;3?xJ{=nvFU8@j3oXpIrlVxEuFI_|95&!y>hq5D1cI?h6UP{QNb2Iz#+My zcZwYGn|y6SZOmQsrj1tto;ga`Ei(7yh91_7Cb_~8N#e6!{cChGx7G)*jH_YR{b4q@ zMqFzAB0)nMJmKyQY}0r5Zb`105AooOCOMv4i;My;;=B@5`cO43->PprHTiU}!Hdp& zyWe7IVSys?$+rcHQ+E}gWjLm3(+2+|UEon4dc9}2ToFLO5K75In6DdAHgmeM4S`@yL8g!c<4F+Oqb zqV*dq6WuqQWezAD0u=t;K*-`k^gRX9i>AJ>b*c6X!lm~wOU#}ga?Ofrcz8nGZlw=j zTMDEp3mviB4DdOptxG;D)|#9tByv*^Cc3?P0fLX~+EY9k1FmN$fA*HvC(<)1?FEXQ#PepOL;;` z+2khpI47sJi}W7IbK!Bby1FWTGThcFiTP23_l$)v#+mQuVB7PeW{WSzOG062?{T3d zvh?dH=I8YHPo9R+nrHt~6bZ+$KlnT*Ut9=QGbnyL?*QNQtxPeOl7vnSt8gptyHy@E z#x5>K*&fFo3$8(0E_+H7Y<^2*)6z^lcS%z_~}MPa-nX1GQ@|<>2ZBH7$l-fe;{p; zKSBpp9C5+TENFs~(|-xd5RnIWtYPRGkI`Y*(@I@q z?e8$Y`3<-pCn>9Fxo4jV0E`*9O=ZI=Z5Wh(EQjBy|+jXs(@aD z-5C;sW~&fU3q3q3un6C4L8{h0P>j|v!sFN>>A}ON<^$&l(iOviX_9$KsK6|w1Q-Gk zW}DRTGL=sjOPgijg-cbG+t#yEln)xn!|+Bq>9X;Byy^VF$%rF=;>_+x!OBXOdvxy( zrDJ?@zP;rDSSkyA7ptCsGdk$>++kcyE(tSFCvFl-7n{4!f^#mJSZ}fw zoC7bZR>@z`&R`=1)MFA39j(8_If;MMc=Iu!a;bK$oXc=+XLuN&ovx-5*9%`}zelEr zRW(9Uwa_xWCj~1AfNgN9W+uHm1q^;GRf3MisRhdOg?0xE12SzT>8m65qN$i}|1_BE zpo$P#=o6jr*v`;P$mL%3bvkHhP~u7W>2HjA$nHAf9!ga8UKXkW#2^LW0000iz&7t& z)t<8vjlVzu00ja79zV4HGdcJ>c=|$ZoE-REeg2zlkp|CqKXmVV5Zr%Y_!t0yi`@%P z!KdPUUY<_>4F=L&Z)Q9I@CW&~A^%Ai{|}1(FRqlqm$LDpbIXJLlS5$spF-jPsn3!> zeF@`XJd>>}`!t=jPT|IyxJqaEGt_tx0*#AH~!2p1d c-Afm*e}hmB&_fjf06%2IhsD$FLw`v9RL6T diff --git a/builds/4chan-X-beta.meta.js b/builds/4chan-X-beta.meta.js index c07def64c..852af908b 100644 --- a/builds/4chan-X-beta.meta.js +++ b/builds/4chan-X-beta.meta.js @@ -1,6 +1,6 @@ // ==UserScript== // @name 4chan X beta -// @version 1.11.30.3 +// @version 1.11.31.0 // @minGMVer 1.14 // @minFFVer 26 // @namespace 4chan-X diff --git a/builds/4chan-X-beta.user.js b/builds/4chan-X-beta.user.js index b91ca6af8..ddc829c9d 100644 --- a/builds/4chan-X-beta.user.js +++ b/builds/4chan-X-beta.user.js @@ -1,7 +1,6 @@ -// Generated by CoffeeScript // ==UserScript== // @name 4chan X beta -// @version 1.11.30.3 +// @version 1.11.31.0 // @minGMVer 1.14 // @minFFVer 26 // @namespace 4chan-X @@ -107,7 +106,7 @@ /* * Contains data from external sources: * -* audio/beep.wav from http://freesound.org/people/pierrecartoons1979/sounds/90112/ +* src/Monitoring/ThreadUpdater/beep.wav from http://freesound.org/people/pierrecartoons1979/sounds/90112/ * cc-by-nc-3.0 * * Font Awesome by Dave Gandy (http://fontawesome.io) @@ -119,12 +118,56 @@ 'use strict'; (function() { - var $, $$, Anonymize, AntiAutoplay, ArchiveLink, Banner, Board, Build, Callbacks, Captcha, CatalogLinks, CatalogThread, Clone, Conf, Config, Connection, CrossOrigin, CustomCSS, DataBoard, DeleteLink, DownloadLink, E, Embedding, ExpandComment, ExpandThread, FappeTyme, Favicon, Fetcher, FileInfo, Filter, Flash, Fourchan, Gallery, Get, Header, IDColor, IDHighlight, ImageCommon, ImageExpand, ImageHover, ImageLoader, Index, Keybinds, Linkify, Main, MarkNewIPs, Menu, Metadata, Nav, NormalizeURL, Notice, PSAHiding, PassLink, Polyfill, Post, PostHiding, PostSuccessful, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, RandomAccessList, Recursive, Redirect, RelativeDates, RemoveSpoilers, ReplyPruning, Report, ReportLink, RevealSpoilers, Sauce, Settings, ShimSet, SimpleDict, Thread, ThreadExcerpt, ThreadHiding, ThreadLinks, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, Volume, c, d, doc, g, - slice = [].slice, - indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, - extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, - hasProp = {}.hasOwnProperty, - bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; + +var $, $$, Anonymize, AntiAutoplay, ArchiveLink, Banner, Board, Build, CSS, Callbacks, Captcha, CatalogLinks, CatalogThread, Config, Connection, CrossOrigin, CustomCSS, DataBoard, DeleteLink, DownloadLink, Embedding, ExpandComment, ExpandThread, FappeTyme, Favicon, Fetcher, FileInfo, Filter, Flash, Fourchan, Gallery, Get, Header, IDColor, IDHighlight, ImageCommon, ImageExpand, ImageHover, ImageLoader, Index, Keybinds, Linkify, Main, MarkNewIPs, Menu, Metadata, Nav, NormalizeURL, Notice, PSAHiding, PassLink, Polyfill, Post, PostHiding, PostSuccessful, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, RandomAccessList, Recursive, Redirect, RelativeDates, RemoveSpoilers, ReplyPruning, Report, ReportLink, RevealSpoilers, Sauce, Settings, ShimSet, SimpleDict, Thread, ThreadExcerpt, ThreadHiding, ThreadLinks, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, Volume; + +var Conf, E, c, d, doc, g; + +Conf = {}; +c = console; +d = document; +doc = d.documentElement; + +g = { + VERSION: '1.11.31.0', + NAMESPACE: '4chan X.', + boards: {} +}; + +E = (function() { + var fn, r, regex, str; + str = { + '&': '&', + "'": ''', + '"': '"', + '<': '<', + '>': '>' + }; + r = String.prototype.replace; + regex = /[&"'<>]/g; + fn = function(x) { + return str[x]; + }; + return function(text) { + return r.call(text, regex, fn); + }; +})(); + +E.cat = function(templates) { + var html, i, len; + html = ''; + for (i = 0, len = templates.length; i < len; i++) { + html += templates[i].innerHTML; + } + return html; +}; + +E.url = function(content) { + return "data:text/html;charset=utf-8," + encodeURIComponent(content.innerHTML); +}; + +Config = (function() { + var Config; Config = { main: { @@ -368,7 +411,7 @@ ":root.tomorrow div.boardTitle {\n" + " font-family: sans-serif !important;\n" + " text-shadow: 1px 1px 1px rgba(167,170,168,0.6);\n" + -"}", +"}\n", hotkeys: { 'Toggle board list': ['Ctrl+b', 'Toggle the full board list.'], 'Toggle header': ['Shift+h', 'Toggle the auto-hide option of the header.'], @@ -434,18204 +477,23 @@ 'Autohiding Scrollbar': false }; - Conf = {}; + return Config; - c = console; +}).call(this); - d = document; +CSS = { - doc = d.documentElement; - - g = { - VERSION: '1.11.30.3', - NAMESPACE: '4chan X.', - boards: {} - }; - - E = (function() { - var fn, r, regex, str; - str = { - '&': '&', - "'": ''', - '"': '"', - '<': '<', - '>': '>' - }; - r = String.prototype.replace; - regex = /[&"'<>]/g; - fn = function(x) { - return str[x]; - }; - return function(text) { - return r.call(text, regex, fn); - }; - })(); - - E.cat = function(templates) { - var html, k, len1, x; - html = ''; - for (k = 0, len1 = templates.length; k < len1; k++) { - x = templates[k]; - html += x.innerHTML; - } - return html; - }; - - E.url = function(content) { - return "data:text/html;charset=utf-8," + (encodeURIComponent(content.innerHTML)); - }; - - $ = function(selector, root) { - if (root == null) { - root = d.body; - } - return root.querySelector(selector); - }; - - $.DAY = 24 * ($.HOUR = 60 * ($.MINUTE = 60 * ($.SECOND = 1000))); - - $.id = function(id) { - return d.getElementById(id); - }; - - $.ready = function(fc) { - var cb; - if (d.readyState !== 'loading') { - $.queueTask(fc); - return; - } - cb = function() { - $.off(d, 'DOMContentLoaded', cb); - return fc(); - }; - return $.on(d, 'DOMContentLoaded', cb); - }; - - $.formData = function(form) { - var fd, key, val; - if (form instanceof HTMLFormElement) { - return new FormData(form); - } - fd = new FormData(); - for (key in form) { - val = form[key]; - if (val) { - if (typeof val === 'object' && 'newName' in val) { - fd.append(key, val, val.newName); - } else { - fd.append(key, val); - } - } - } - return fd; - }; - - $.extend = function(object, properties) { - var key, val; - for (key in properties) { - val = properties[key]; - object[key] = val; - } - }; - - $.ajax = (function() { - var blockedError, blockedURLs, lastModified; - lastModified = {}; - blockedURLs = {}; - blockedError = function(url) { - var message; - if (blockedURLs[url]) { - return; - } - blockedURLs[url] = true; - message = $.el('div', { - innerHTML: "4chan X was blocked from loading the following URL:

[
More info]" - }); - $('span', message).textContent = (/^\/\//.test(url) ? location.protocol : '') + url; - return new Notice('warning', message, 30, function() { - return delete blockedURLs[url]; - }); - }; - return function(url, options, extra) { - var err, event, form, k, len1, r, ref, ref1, type, upCallbacks, whenModified; - if (options == null) { - options = {}; - } - if (extra == null) { - extra = {}; - } - type = extra.type, whenModified = extra.whenModified, upCallbacks = extra.upCallbacks, form = extra.form; - url = url.replace(/^((?:https?:)?\/\/(?:\w+\.)?4c(?:ha|d)n\.org)\/adv\//, '$1//adv/'); - r = new XMLHttpRequest(); - type || (type = form && 'post' || 'get'); - try { - r.open(type, url, true); - } catch (_error) { - err = _error; - blockedError(url); - ref = ['error', 'loadend']; - for (k = 0, len1 = ref.length; k < len1; k++) { - event = ref[k]; - r["on" + event] = options["on" + event]; - $.queueTask($.event, event, null, r); - } - return; - } - if (whenModified) { - if (((ref1 = lastModified[whenModified]) != null ? ref1[url] : void 0) != null) { - r.setRequestHeader('If-Modified-Since', lastModified[whenModified][url]); - } - $.on(r, 'load', function() { - return (lastModified[whenModified] || (lastModified[whenModified] = {}))[url] = r.getResponseHeader('Last-Modified'); - }); - } - if (/\.json$/.test(url)) { - if (options.responseType == null) { - options.responseType = 'json'; - } - } - $.extend(r, options); - if (options.responseType === 'json' && r.responseType !== 'json' && delete r.response) { - Object.defineProperty(r, 'response', { - configurable: true, - enumerable: true, - get: function() { - return JSON.parse(r.responseText); - } - }); - } - $.extend(r.upload, upCallbacks); - r.send(form); - return r; - }; - })(); - - (function() { - var reqs; - reqs = {}; - $.cache = function(url, cb, options) { - var err, req, rm; - if (req = reqs[url]) { - if (req.readyState === 4) { - $.queueTask(function() { - return cb.call(req, req.evt, true); - }); - } else { - req.callbacks.push(cb); - } - return req; - } - rm = function() { - return delete reqs[url]; - }; - try { - if (!(req = $.ajax(url, options))) { - return; - } - } catch (_error) { - err = _error; - return; - } - $.on(req, 'load', function(e) { - var fn1, k, len1, ref; - this.evt = e; - ref = this.callbacks; - fn1 = (function(_this) { - return function(cb) { - return $.queueTask(function() { - return cb.call(_this, e, false); - }); - }; - })(this); - for (k = 0, len1 = ref.length; k < len1; k++) { - cb = ref[k]; - fn1(cb); - } - return delete this.callbacks; - }); - $.on(req, 'abort error', rm); - req.callbacks = [cb]; - return reqs[url] = req; - }; - return $.cleanCache = function(testf) { - var url; - for (url in reqs) { - if (testf(url)) { - delete reqs[url]; - } - } - }; - })(); - - $.cb = { - checked: function() { - $.set(this.name, this.checked); - return Conf[this.name] = this.checked; - }, - value: function() { - $.set(this.name, this.value.trim()); - return Conf[this.name] = this.value; - } - }; - - $.asap = function(test, cb) { - if (test()) { - return cb(); - } else { - return setTimeout($.asap, 25, test, cb); - } - }; - - $.onExists = function(root, selector, cb) { - var el, observer; - if (el = $(selector, root)) { - return cb(el); - } - if ($.engine === 'edge' && d.readyState === 'loading') { - $.asap((function() { - return d.readyState !== 'loading' || $(selector, root); - }), function() { - return $.onExists(root, selector, cb); - }); - return; - } - observer = new MutationObserver(function() { - if (el = $(selector, root)) { - observer.disconnect(); - return cb(el); - } - }); - return observer.observe(root, { - childList: true, - subtree: true - }); - }; - - $.addStyle = function(css, id, test) { - var style; - if (test == null) { - test = 'head'; - } - style = $.el('style', { - textContent: css - }); - if (id != null) { - style.id = id; - } - $.onExists(doc, test, function() { - return $.add(d.head, style); - }); - return style; - }; - - $.x = function(path, root) { - root || (root = d.body); - return d.evaluate(path, root, null, 8, null).singleNodeValue; - }; - - $.X = function(path, root) { - root || (root = d.body); - return d.evaluate(path, root, null, 7, null); - }; - - $.addClass = function() { - var className, classNames, el, k, len1; - el = arguments[0], classNames = 2 <= arguments.length ? slice.call(arguments, 1) : []; - for (k = 0, len1 = classNames.length; k < len1; k++) { - className = classNames[k]; - el.classList.add(className); - } - }; - - $.rmClass = function() { - var className, classNames, el, k, len1; - el = arguments[0], classNames = 2 <= arguments.length ? slice.call(arguments, 1) : []; - for (k = 0, len1 = classNames.length; k < len1; k++) { - className = classNames[k]; - el.classList.remove(className); - } - }; - - $.toggleClass = function(el, className) { - return el.classList.toggle(className); - }; - - $.hasClass = function(el, className) { - return indexOf.call(el.classList, className) >= 0; - }; - - $.rm = function(el) { - return el != null ? el.remove() : void 0; - }; - - $.rmAll = function(root) { - return root.textContent = null; - }; - - $.tn = function(s) { - return d.createTextNode(s); - }; - - $.frag = function() { - return d.createDocumentFragment(); - }; - - $.nodes = function(nodes) { - var frag, k, len1, node; - if (!(nodes instanceof Array)) { - return nodes; - } - frag = $.frag(); - for (k = 0, len1 = nodes.length; k < len1; k++) { - node = nodes[k]; - frag.appendChild(node); - } - return frag; - }; - - $.add = function(parent, el) { - return parent.appendChild($.nodes(el)); - }; - - $.prepend = function(parent, el) { - return parent.insertBefore($.nodes(el), parent.firstChild); - }; - - $.after = function(root, el) { - return root.parentNode.insertBefore($.nodes(el), root.nextSibling); - }; - - $.before = function(root, el) { - return root.parentNode.insertBefore($.nodes(el), root); - }; - - $.replace = function(root, el) { - return root.parentNode.replaceChild($.nodes(el), root); - }; - - $.el = function(tag, properties, properties2) { - var el; - el = d.createElement(tag); - if (properties) { - $.extend(el, properties); - } - if (properties2) { - $.extend(el, properties2); - } - return el; - }; - - $.on = function(el, events, handler) { - var event, k, len1, ref; - ref = events.split(' '); - for (k = 0, len1 = ref.length; k < len1; k++) { - event = ref[k]; - el.addEventListener(event, handler, false); - } - }; - - $.off = function(el, events, handler) { - var event, k, len1, ref; - ref = events.split(' '); - for (k = 0, len1 = ref.length; k < len1; k++) { - event = ref[k]; - el.removeEventListener(event, handler, false); - } - }; - - $.one = function(el, events, handler) { - var cb; - cb = function(e) { - $.off(el, events, cb); - return handler.call(this, e); - }; - return $.on(el, events, cb); - }; - - $.event = function(event, detail, root) { - if (root == null) { - root = d; - } - if ((detail != null) && typeof cloneInto === 'function') { - detail = cloneInto(detail, d.defaultView); - } - return root.dispatchEvent(new CustomEvent(event, { - bubbles: true, - detail: detail - })); - }; - - (function() { - var clone, err, ref, unsafeConstructors; - if (!(/PaleMoon\//.test(navigator.userAgent) && +(typeof GM_info !== "undefined" && GM_info !== null ? (ref = GM_info.version) != null ? ref.split('.')[0] : void 0 : void 0) >= 2 && typeof cloneInto === 'undefined')) { - return; - } - try { - return new CustomEvent('x', { - detail: {} - }); - } catch (_error) { - err = _error; - unsafeConstructors = { - Object: unsafeWindow.Object, - Array: unsafeWindow.Array - }; - clone = function(obj) { - var constructor, key, obj2, val; - if ((obj != null) && typeof obj === 'object' && (constructor = unsafeConstructors[obj.constructor.name])) { - obj2 = new constructor(); - for (key in obj) { - val = obj[key]; - obj2[key] = clone(val); - } - return obj2; - } else { - return obj; - } - }; - return $.event = function(event, detail, root) { - if (root == null) { - root = d; - } - return root.dispatchEvent(new CustomEvent(event, { - bubbles: true, - detail: clone(detail) - })); - }; - } - })(); - - $.open = typeof GM_openInTab !== "undefined" && GM_openInTab !== null ? GM_openInTab : function(url) { - return window.open(url, '_blank'); - }; - - $.debounce = function(wait, fn) { - var args, exec, lastCall, that, timeout; - lastCall = 0; - timeout = null; - that = null; - args = null; - exec = function() { - lastCall = Date.now(); - return fn.apply(that, args); - }; - return function() { - args = arguments; - that = this; - if (lastCall < Date.now() - wait) { - return exec(); - } - clearTimeout(timeout); - return timeout = setTimeout(exec, wait); - }; - }; - - $.queueTask = (function() { - var execTask, taskChannel, taskQueue; - taskQueue = []; - execTask = function() { - var args, func, task; - task = taskQueue.shift(); - func = task[0]; - args = Array.prototype.slice.call(task, 1); - return func.apply(func, args); - }; - if (window.MessageChannel) { - taskChannel = new MessageChannel(); - taskChannel.port1.onmessage = execTask; - return function() { - taskQueue.push(arguments); - return taskChannel.port2.postMessage(null); - }; - } else { - return function() { - taskQueue.push(arguments); - return setTimeout(execTask, 0); - }; - } - })(); - - $.globalEval = function(code) { - var script; - script = $.el('script', { - textContent: code - }); - $.add(d.head || doc, script); - return $.rm(script); - }; - - $.global = function(fn) { - if (doc) { - return $.globalEval("(" + fn + ")();"); - } else { - return fn(); - } - }; - - $.bytesToString = function(size) { - var unit; - unit = 0; - while (size >= 1024) { - size /= 1024; - unit++; - } - size = unit > 1 ? Math.round(size * 100) / 100 : Math.round(size); - return size + " " + ['B', 'KB', 'MB', 'GB'][unit]; - }; - - $.minmax = function(value, min, max) { - return (value < min ? min : value > max ? max : value); - }; - - $.hasAudio = function(video) { - return video.mozHasAudio || !!video.webkitAudioDecodedByteCount; - }; - - $.engine = (function() { - if (/Edge\//.test(navigator.userAgent)) { - return 'edge'; - } - if (/Chrome\//.test(navigator.userAgent)) { - return 'blink'; - } - if (/WebKit\//.test(navigator.userAgent)) { - return 'webkit'; - } - if (/Gecko\/|Goanna/.test(navigator.userAgent)) { - return 'gecko'; - } - })(); - - try { - localStorage.getItem('x'); - $.hasStorage = true; - } catch (_error) { - $.hasStorage = false; - } - - $.item = function(key, val) { - var item; - item = {}; - item[key] = val; - return item; - }; - - $.syncing = {}; - - if (typeof GM_deleteValue !== "undefined" && GM_deleteValue !== null) { - $.getValue = GM_getValue; - $.listValues = function() { - return GM_listValues(); - }; - } else if ($.hasStorage) { - $.getValue = function(key) { - return localStorage[key]; - }; - $.listValues = function() { - var key, results; - results = []; - for (key in localStorage) { - if (key.slice(0, g.NAMESPACE.length) === g.NAMESPACE) { - results.push(key); - } - } - return results; - }; - } else { - $.getValue = function() {}; - $.listValues = function() { - return []; - }; - } - - if (typeof GM_addValueChangeListener !== "undefined" && GM_addValueChangeListener !== null) { - $.setValue = GM_setValue; - $.deleteValue = GM_deleteValue; - } else if (typeof GM_deleteValue !== "undefined" && GM_deleteValue !== null) { - $.oldValue = {}; - $.setValue = function(key, val) { - GM_setValue(key, val); - if (key in $.syncing) { - $.oldValue[key] = val; - if ($.hasStorage) { - return localStorage[key] = val; - } - } - }; - $.deleteValue = function(key) { - GM_deleteValue(key); - if (key in $.syncing) { - delete $.oldValue[key]; - if ($.hasStorage) { - return localStorage.removeItem(key); - } - } - }; - if (!$.hasStorage) { - $.cantSync = true; - } - } else if ($.hasStorage) { - $.oldValue = {}; - $.setValue = function(key, val) { - if (key in $.syncing) { - $.oldValue[key] = val; - } - return localStorage[key] = val; - }; - $.deleteValue = function(key) { - if (key in $.syncing) { - delete $.oldValue[key]; - } - return localStorage.removeItem(key); - }; - } else { - $.setValue = function() {}; - $.deleteValue = function() {}; - $.cantSync = $.cantSet = true; - } - - if (typeof GM_addValueChangeListener !== "undefined" && GM_addValueChangeListener !== null) { - $.sync = function(key, cb) { - return $.syncing[key] = GM_addValueChangeListener(g.NAMESPACE + key, function(key2, oldValue, newValue, remote) { - if (remote) { - if (newValue !== void 0) { - newValue = JSON.parse(newValue); - } - return cb(newValue, key); - } - }); - }; - $.forceSync = function() {}; - } else if ((typeof GM_deleteValue !== "undefined" && GM_deleteValue !== null) || $.hasStorage) { - $.sync = function(key, cb) { - key = g.NAMESPACE + key; - $.syncing[key] = cb; - return $.oldValue[key] = $.getValue(key); - }; - (function() { - var onChange; - onChange = function(arg) { - var cb, key, newValue; - key = arg.key, newValue = arg.newValue; - if (!(cb = $.syncing[key])) { - return; - } - if (newValue != null) { - if (newValue === $.oldValue[key]) { - return; - } - $.oldValue[key] = newValue; - return cb(JSON.parse(newValue), key.slice(g.NAMESPACE.length)); - } else { - if ($.oldValue[key] == null) { - return; - } - delete $.oldValue[key]; - return cb(void 0, key.slice(g.NAMESPACE.length)); - } - }; - $.on(window, 'storage', onChange); - return $.forceSync = function(key) { - key = g.NAMESPACE + key; - return onChange({ - key: key, - newValue: $.getValue(key) - }); - }; - })(); - } else { - $.sync = function() {}; - $.forceSync = function() {}; - } - - $["delete"] = function(keys) { - var k, key, len1; - if (!(keys instanceof Array)) { - keys = [keys]; - } - for (k = 0, len1 = keys.length; k < len1; k++) { - key = keys[k]; - $.deleteValue(g.NAMESPACE + key); - } - }; - - $.get = function(key, val, cb) { - var items; - if (typeof cb === 'function') { - items = $.item(key, val); - } else { - items = key; - cb = val; - } - return $.queueTask(function() { - for (key in items) { - if (val = $.getValue(g.NAMESPACE + key)) { - items[key] = JSON.parse(val); - } - } - return cb(items); - }); - }; - - $.set = function(keys, val, cb) { - var key, value; - if (typeof keys === 'string') { - $.setValue(g.NAMESPACE + keys, JSON.stringify(val)); - } else { - for (key in keys) { - value = keys[key]; - $.setValue(g.NAMESPACE + key, JSON.stringify(value)); - } - cb = val; - } - return typeof cb === "function" ? cb() : void 0; - }; - - $.clear = function(cb) { - var id; - $["delete"](Object.keys(Conf)); - $["delete"](['previousversion', 'AutoWatch', 'QR Size', 'captchas', 'QR.persona', 'hiddenPSA']); - $["delete"]((function() { - var k, len1, ref, results; - ref = ['embedding', 'updater', 'thread-stats', 'thread-watcher', 'qr']; - results = []; - for (k = 0, len1 = ref.length; k < len1; k++) { - id = ref[k]; - results.push(id + ".position"); - } - return results; - })()); - try { - $["delete"]($.listValues().map(function(key) { - return key.replace(g.NAMESPACE, ''); - })); - } catch (_error) {} - return typeof cb === "function" ? cb() : void 0; - }; - - $$ = function(selector, root) { - if (root == null) { - root = d.body; - } - return slice.call(root.querySelectorAll(selector)); - }; - - Callbacks = (function() { - function Callbacks(type1) { - this.type = type1; - this.keys = []; - } - - Callbacks.prototype.push = function(arg) { - var cb, name; - name = arg.name, cb = arg.cb; - if (!this[name]) { - this.keys.push(name); - } - return this[name] = cb; - }; - - Callbacks.prototype.execute = function(node, keys) { - var err, errors, k, len1, name, ref; - if (keys == null) { - keys = this.keys; - } - for (k = 0, len1 = keys.length; k < len1; k++) { - name = keys[k]; - try { - if ((ref = this[name]) != null) { - ref.call(node); - } - } catch (_error) { - err = _error; - if (!errors) { - errors = []; - } - errors.push({ - message: ['"', name, '" crashed on node ', this.type, ' No.', node.ID, ' (', node.board, ').'].join(''), - error: err - }); - } - } - if (errors) { - return Main.handleErrors(errors); - } - }; - - return Callbacks; - - })(); - - Board = (function() { - Board.prototype.toString = function() { - return this.ID; - }; - - function Board(ID1) { - this.ID = ID1; - this.threads = new SimpleDict(); - this.posts = new SimpleDict(); - g.boards[this] = this; - } - - return Board; - - })(); - - Thread = (function() { - Thread.callbacks = new Callbacks('Thread'); - - Thread.prototype.toString = function() { - return this.ID; - }; - - function Thread(ID1, board1) { - this.ID = ID1; - this.board = board1; - this.fullID = this.board + "." + this.ID; - this.posts = new SimpleDict(); - this.isDead = false; - this.isHidden = false; - this.isOnTop = false; - this.isSticky = false; - this.isClosed = false; - this.isArchived = false; - this.postLimit = false; - this.fileLimit = false; - this.ipCount = void 0; - this.OP = null; - this.catalogView = null; - this.board.threads.push(this.ID, this); - g.threads.push(this.fullID, this); - } - - Thread.prototype.setPage = function(pageNum) { - var icon, info, quote, ref; - ref = this.OP.nodes, info = ref.info, quote = ref.quote; - if (!(icon = $('.page-num', info))) { - icon = $.el('span', { - className: 'page-num' - }); - $.after(quote, [$.tn(' '), icon]); - } - icon.title = "This thread is on page " + pageNum + " in the original index."; - icon.textContent = "[" + pageNum + "]"; - if (this.catalogView) { - return this.catalogView.nodes.pageCount.textContent = pageNum; - } - }; - - Thread.prototype.setCount = function(type, count, reachedLimit) { - var el; - if (!this.catalogView) { - return; - } - el = this.catalogView.nodes[type + "Count"]; - el.textContent = count; - return (reachedLimit ? $.addClass : $.rmClass)(el, 'warning'); - }; - - Thread.prototype.setStatus = function(type, status) { - var name; - name = "is" + type; - if (this[name] === status) { - return; - } - this[name] = status; - if (!this.OP) { - return; - } - this.setIcon('Sticky', this.isSticky); - this.setIcon('Closed', this.isClosed && !this.isArchived); - return this.setIcon('Archived', this.isArchived); - }; - - Thread.prototype.setIcon = function(type, status) { - var icon, root, typeLC; - typeLC = type.toLowerCase(); - icon = $("." + typeLC + "Icon", this.OP.nodes.info); - if (!!icon === status) { - return; - } - if (!status) { - $.rm(icon.previousSibling); - $.rm(icon); - if (this.catalogView) { - $.rm($("." + typeLC + "Icon", this.catalogView.nodes.icons)); - } - return; - } - icon = $.el('img', { - src: "" + Build.staticPath + typeLC + Build.gifIcon, - alt: type, - title: type, - className: typeLC + "Icon retina" - }); - root = type !== 'Sticky' && this.isSticky ? $('.stickyIcon', this.OP.nodes.info) : $('.page-num', this.OP.nodes.info) || this.OP.nodes.quote; - $.after(root, [$.tn(' '), icon]); - if (!this.catalogView) { - return; - } - return (type === 'Sticky' && this.isClosed ? $.prepend : $.add)(this.catalogView.nodes.icons, icon.cloneNode()); - }; - - Thread.prototype.kill = function() { - return this.isDead = true; - }; - - Thread.prototype.collect = function() { - this.posts.forEach(function(post) { - return post.collect(); - }); - g.threads.rm(this.fullID); - return this.board.threads.rm(this); - }; - - return Thread; - - })(); - - CatalogThread = (function() { - CatalogThread.callbacks = new Callbacks('Catalog Thread'); - - CatalogThread.prototype.toString = function() { - return this.ID; - }; - - function CatalogThread(root, thread1) { - this.thread = thread1; - this.ID = this.thread.ID; - this.board = this.thread.board; - this.nodes = { - root: root, - thumb: $('.catalog-thumb', root), - icons: $('.catalog-icons', root), - postCount: $('.post-count', root), - fileCount: $('.file-count', root), - pageCount: $('.page-count', root), - comment: $('.comment', root) - }; - this.thread.catalogView = this; - } - - return CatalogThread; - - })(); - - Post = (function() { - Post.callbacks = new Callbacks('Post'); - - Post.prototype.toString = function() { - return this.ID; - }; - - function Post(root, thread1, board1) { - var capcode, clone, date, email, flag, info, k, len1, name, post, ref, subject, tripcode, uniqueID; - this.thread = thread1; - this.board = board1; - this.ID = +root.id.slice(2); - this.fullID = this.board + "." + this.ID; - this.context = this; - root.dataset.fullID = this.fullID; - post = $('.post', root); - info = $('.postInfo', post); - this.nodes = { - root: root, - post: post, - info: info, - nameBlock: $('.nameBlock', info), - quote: $('.postNum > a:nth-of-type(2)', info), - comment: $('.postMessage', post), - links: [], - quotelinks: [] - }; - if ($.engine === 'edge') { - Object.defineProperty(this.nodes, 'backlinks', { - configurable: true, - enumerable: true, - get: function() { - return info.getElementsByClassName('backlink'); - } - }); - } else { - this.nodes.backlinks = info.getElementsByClassName('backlink'); - } - if (!(this.isReply = $.hasClass(post, 'reply'))) { - this.thread.OP = this; - this.thread.isArchived = !!$('.archivedIcon', info); - this.thread.isSticky = !!$('.stickyIcon', info); - this.thread.isClosed = this.thread.isArchived || !!$('.closedIcon', info); - if (this.thread.isArchived) { - this.thread.kill(); - } - } - this.info = {}; - this.info.nameBlock = Conf['Anonymize'] ? 'Anonymous' : this.nodes.nameBlock.textContent.trim(); - if (subject = $('.subject', info)) { - this.nodes.subject = subject; - this.info.subject = subject.textContent || void 0; - } - if (name = $('.name', info)) { - this.nodes.name = name; - this.info.name = name.textContent; - } - if (email = $('.useremail', info)) { - this.nodes.email = email; - this.info.email = decodeURIComponent(email.href.slice(7)); - } - if (tripcode = $('.postertrip', info)) { - this.nodes.tripcode = tripcode; - this.info.tripcode = tripcode.textContent; - } - if (uniqueID = $('.posteruid', info)) { - this.nodes.uniqueID = uniqueID; - this.info.uniqueID = uniqueID.firstElementChild.textContent; - } - if (capcode = $('.capcode.hand', info)) { - this.nodes.capcode = capcode; - this.info.capcode = capcode.textContent.replace('## ', ''); - } - if (flag = $('.flag, .countryFlag', info)) { - this.nodes.flag = flag; - this.info.flag = flag.title; - } - if (date = $('.dateTime', info)) { - this.nodes.date = date; - this.info.date = new Date(date.dataset.utc * 1000); - } - this.parseComment(); - this.parseQuotes(); - this.parseFile(); - this.isDead = false; - this.isHidden = false; - this.clones = []; - if (g.posts[this.fullID]) { - this.isRebuilt = true; - this.clones = g.posts[this.fullID].clones; - ref = this.clones; - for (k = 0, len1 = ref.length; k < len1; k++) { - clone = ref[k]; - clone.origin = this; - } - } - this.board.posts.push(this.ID, this); - this.thread.posts.push(this.ID, this); - g.posts.push(this.fullID, this); - } - - Post.prototype.parseComment = function() { - var abbr, bq, commentDisplay, k, len1, len2, node, q, ref, spoilers; - this.nodes.comment.normalize(); - bq = this.nodes.comment.cloneNode(true); - ref = $$('.abbr + br, .exif, b, .fortune', bq); - for (k = 0, len1 = ref.length; k < len1; k++) { - node = ref[k]; - $.rm(node); - } - if (abbr = $('.abbr', bq)) { - $.rm(abbr); - } - this.info.comment = this.nodesToText(bq); - if (abbr) { - this.info.comment = this.info.comment.replace(/\n\n$/, ''); - } - commentDisplay = this.info.comment; - if (!(Conf['Remove Spoilers'] || Conf['Reveal Spoilers'])) { - spoilers = $$('s', bq); - if (spoilers.length) { - for (q = 0, len2 = spoilers.length; q < len2; q++) { - node = spoilers[q]; - $.replace(node, $.tn('[spoiler]')); - } - commentDisplay = this.nodesToText(bq); - } - } - return this.info.commentDisplay = commentDisplay.trim().replace(/\s+$/gm, ''); - }; - - Post.prototype.nodesToText = function(bq) { - var i, node, nodes, text; - text = ""; - nodes = $.X('.//br|.//text()', bq); - i = 0; - while (node = nodes.snapshotItem(i++)) { - text += node.data || '\n'; - } - return text; - }; - - Post.prototype.parseQuotes = function() { - var k, len1, quotelink, ref; - this.quotes = []; - ref = $$(':not(pre) > .quotelink', this.nodes.comment); - for (k = 0, len1 = ref.length; k < len1; k++) { - quotelink = ref[k]; - this.parseQuote(quotelink); - } - }; - - Post.prototype.parseQuote = function(quotelink) { - var fullID, match; - match = quotelink.href.match(/^https?:\/\/boards\.4chan\.org\/+([^\/]+)\/+(?:res|thread)\/+\d+(?:\/[^#]*)?#p(\d+)$/); - if (!(match || (this.isClone && quotelink.dataset.postID))) { - return; - } - this.nodes.quotelinks.push(quotelink); - if (this.isClone) { - return; - } - fullID = match[1] + "." + match[2]; - if (indexOf.call(this.quotes, fullID) < 0) { - return this.quotes.push(fullID); - } - }; - - Post.prototype.parseFile = function() { - var fileEl, fileText, info, link, m, ref, ref1, ref2, size, thumb, unit; - if (!(fileEl = $('.file', this.nodes.post))) { - return; - } - if (!(link = $('.fileText > a, .fileText-original > a', fileEl))) { - return; - } - if (!(info = (ref = link.nextSibling) != null ? ref.textContent.match(/\(([\d.]+ [KMG]?B).*\)/) : void 0)) { - return; - } - fileText = fileEl.firstElementChild; - this.file = { - text: fileText, - link: link, - url: link.href, - name: fileText.title || link.title || link.textContent, - size: info[1], - isImage: /(jpg|png|gif)$/i.test(link.href), - isVideo: /webm$/i.test(link.href), - dimensions: (ref1 = info[0].match(/\d+x\d+/)) != null ? ref1[0] : void 0, - tag: (ref2 = info[0].match(/,[^,]*, ([a-z]+)\)/i)) != null ? ref2[1] : void 0 - }; - size = +this.file.size.match(/[\d.]+/)[0]; - unit = ['B', 'KB', 'MB', 'GB'].indexOf(this.file.size.match(/\w+$/)[0]); - while (unit-- > 0) { - size *= 1024; - } - this.file.sizeInBytes = size; - if ((thumb = $('.fileThumb > [data-md5]', fileEl))) { - return $.extend(this.file, { - thumb: thumb, - thumbURL: (m = link.href.match(/\d+(?=\.\w+$)/)) ? location.protocol + "//i.4cdn.org/" + this.board + "/" + m[0] + "s.jpg" : void 0, - MD5: thumb.dataset.md5, - isSpoiler: $.hasClass(thumb.parentNode, 'imgspoiler') - }); - } - }; - - Post.prototype.kill = function(file) { - var clone, k, len1, len2, q, quotelink, ref, ref1, strong; - if (file) { - if (this.file.isDead) { - return; - } - this.file.isDead = true; - $.addClass(this.nodes.root, 'deleted-file'); - } else { - if (this.isDead) { - return; - } - this.isDead = true; - $.addClass(this.nodes.root, 'deleted-post'); - } - if (!(strong = $('strong.warning', this.nodes.info))) { - strong = $.el('strong', { - className: 'warning', - textContent: this.isReply ? '[Deleted]' : '[Dead]' - }); - $.after($('input', this.nodes.info), strong); - } - strong.textContent = file ? '[File deleted]' : '[Deleted]'; - if (this.isClone) { - return; - } - ref = this.clones; - for (k = 0, len1 = ref.length; k < len1; k++) { - clone = ref[k]; - clone.kill(file); - } - if (file) { - return; - } - ref1 = Get.allQuotelinksLinkingTo(this); - for (q = 0, len2 = ref1.length; q < len2; q++) { - quotelink = ref1[q]; - if (!(!$.hasClass(quotelink, 'deadlink'))) { - continue; - } - quotelink.textContent = quotelink.textContent + '\u00A0(Dead)'; - $.addClass(quotelink, 'deadlink'); - } - }; - - Post.prototype.resurrect = function() { - var clone, k, len1, len2, q, quotelink, ref, ref1, strong; - this.isDead = false; - $.rmClass(this.nodes.root, 'deleted-post'); - strong = $('strong.warning', this.nodes.info); - if (this.file && this.file.isDead) { - strong.textContent = '[File deleted]'; - } else { - $.rm(strong); - } - if (this.isClone) { - return; - } - ref = this.clones; - for (k = 0, len1 = ref.length; k < len1; k++) { - clone = ref[k]; - clone.resurrect(); - } - ref1 = Get.allQuotelinksLinkingTo(this); - for (q = 0, len2 = ref1.length; q < len2; q++) { - quotelink = ref1[q]; - if (!($.hasClass(quotelink, 'deadlink'))) { - continue; - } - quotelink.textContent = quotelink.textContent.replace('\u00A0(Dead)', ''); - $.rmClass(quotelink, 'deadlink'); - } - }; - - Post.prototype.collect = function() { - g.posts.rm(this.fullID); - this.thread.posts.rm(this); - return this.board.posts.rm(this); - }; - - Post.prototype.addClone = function(context, contractThumb) { - return new Clone(this, context, contractThumb); - }; - - Post.prototype.rmClone = function(index) { - var clone, k, len1, ref; - this.clones.splice(index, 1); - ref = this.clones.slice(index); - for (k = 0, len1 = ref.length; k < len1; k++) { - clone = ref[k]; - clone.nodes.root.dataset.clone = index++; - } - }; - - return Post; - - })(); - - Clone = (function(superClass) { - extend(Clone, superClass); - - Clone.prototype.isClone = true; - - function Clone(origin1, context1, contractThumb) { - var file, info, inline, inlined, k, key, len1, len2, len3, len4, node, nodes, post, q, ref, ref1, ref2, ref3, ref4, ref5, root, u, v, val; - this.origin = origin1; - this.context = context1; - ref = ['ID', 'fullID', 'board', 'thread', 'info', 'quotes', 'isReply']; - for (k = 0, len1 = ref.length; k < len1; k++) { - key = ref[k]; - this[key] = this.origin[key]; - } - nodes = this.origin.nodes; - root = contractThumb ? this.cloneWithoutVideo(nodes.root) : nodes.root.cloneNode(true); - Clone.prefix || (Clone.prefix = 0); - ref1 = [root].concat(slice.call($$('[id]', root))); - for (q = 0, len2 = ref1.length; q < len2; q++) { - node = ref1[q]; - node.id = Clone.prefix + node.id; - } - Clone.prefix++; - post = $('.post', root); - info = $('.postInfo', post); - this.nodes = { - root: root, - post: post, - info: info, - nameBlock: $('.nameBlock', info), - quote: $('.postNum > a:nth-of-type(2)', info), - comment: $('.postMessage', post), - quotelinks: [] - }; - if ($.engine === 'edge') { - Object.defineProperty(this.nodes, 'backlinks', { - configurable: true, - enumerable: true, - get: function() { - return info.getElementsByClassName('backlink'); - } - }); - } else { - this.nodes.backlinks = info.getElementsByClassName('backlink'); - } - ref2 = $$('.inline', post); - for (u = 0, len3 = ref2.length; u < len3; u++) { - inline = ref2[u]; - $.rm(inline); - } - ref3 = $$('.inlined', post); - for (v = 0, len4 = ref3.length; v < len4; v++) { - inlined = ref3[v]; - $.rmClass(inlined, 'inlined'); - } - root.hidden = false; - $.rmClass(root, 'forwarded'); - $.rmClass(post, 'highlight'); - if (nodes.subject) { - this.nodes.subject = $('.subject', info); - } - if (nodes.name) { - this.nodes.name = $('.name', info); - } - if (nodes.email) { - this.nodes.email = $('.useremail', info); - } - if (nodes.tripcode) { - this.nodes.tripcode = $('.postertrip', info); - } - if (nodes.uniqueID) { - this.nodes.uniqueID = $('.posteruid', info); - } - if (nodes.capcode) { - this.nodes.capcode = $('.capcode.hand', info); - } - if (nodes.flag) { - this.nodes.flag = $('.flag, .countryFlag', info); - } - if (nodes.date) { - this.nodes.date = $('.dateTime', info); - } - this.parseQuotes(); - this.quotes = slice.call(this.origin.quotes); - if (this.origin.file) { - this.file = {}; - ref4 = this.origin.file; - for (key in ref4) { - val = ref4[key]; - this.file[key] = val; - } - file = $('.file', post); - this.file.text = file.firstElementChild; - this.file.link = $('.fileText > a, .fileText-original', file); - this.file.thumb = $('.fileThumb > [data-md5]', file); - this.file.fullImage = $('.full-image', file); - this.file.videoControls = $('.video-controls', this.file.text); - if (this.file.videoThumb) { - this.file.thumb.muted = true; - } - if ((ref5 = this.file.thumb) != null ? ref5.dataset.src : void 0) { - this.file.thumb.src = this.file.thumb.dataset.src; - this.file.thumb.removeAttribute('data-src'); - } - if (this.file.thumb && contractThumb) { - ImageExpand.contract(this); - } - } - if (this.origin.isDead) { - this.isDead = true; - } - root.dataset.clone = this.origin.clones.push(this) - 1; - } - - Clone.prototype.cloneWithoutVideo = function(node) { - var child, clone, k, len1, ref; - if (node.tagName === 'VIDEO' && !node.dataset.md5) { - return []; - } else if (node.nodeType === Node.ELEMENT_NODE && $('video', node)) { - clone = node.cloneNode(false); - ref = node.childNodes; - for (k = 0, len1 = ref.length; k < len1; k++) { - child = ref[k]; - $.add(clone, this.cloneWithoutVideo(child)); - } - return clone; - } else { - return node.cloneNode(true); - } - }; - - return Clone; - - })(Post); - - DataBoard = (function() { - DataBoard.keys = ['hiddenThreads', 'hiddenPosts', 'lastReadPosts', 'yourPosts', 'watchedThreads', 'customTitles']; - - function DataBoard(key1, sync, dontClean) { - var init; - this.key = key1; - this.onSync = bind(this.onSync, this); - this.data = Conf[this.key]; - $.sync(this.key, this.onSync); - if (!dontClean) { - this.clean(); - } - if (!sync) { - return; - } - init = (function(_this) { - return function() { - $.off(d, '4chanXInitFinished', init); - return _this.sync = sync; - }; - })(this); - $.on(d, '4chanXInitFinished', init); - } - - DataBoard.prototype.save = function(cb) { - return $.set(this.key, this.data, cb); - }; - - DataBoard.prototype["delete"] = function(arg) { - var boardID, postID, ref, threadID; - boardID = arg.boardID, threadID = arg.threadID, postID = arg.postID; - $.forceSync(this.key); - if (postID) { - if (!((ref = this.data.boards[boardID]) != null ? ref[threadID] : void 0)) { - return; - } - delete this.data.boards[boardID][threadID][postID]; - this.deleteIfEmpty({ - boardID: boardID, - threadID: threadID - }); - } else if (threadID) { - if (!this.data.boards[boardID]) { - return; - } - delete this.data.boards[boardID][threadID]; - this.deleteIfEmpty({ - boardID: boardID - }); - } else { - delete this.data.boards[boardID]; - } - return this.save(); - }; - - DataBoard.prototype.deleteIfEmpty = function(arg) { - var boardID, threadID; - boardID = arg.boardID, threadID = arg.threadID; - $.forceSync(this.key); - if (threadID) { - if (!Object.keys(this.data.boards[boardID][threadID]).length) { - delete this.data.boards[boardID][threadID]; - return this.deleteIfEmpty({ - boardID: boardID - }); - } - } else if (!Object.keys(this.data.boards[boardID]).length) { - return delete this.data.boards[boardID]; - } - }; - - DataBoard.prototype.set = function(arg, cb) { - var base1, base2, base3, boardID, postID, threadID, val; - boardID = arg.boardID, threadID = arg.threadID, postID = arg.postID, val = arg.val; - $.forceSync(this.key); - if (postID !== void 0) { - ((base1 = ((base2 = this.data.boards)[boardID] || (base2[boardID] = {})))[threadID] || (base1[threadID] = {}))[postID] = val; - } else if (threadID !== void 0) { - ((base3 = this.data.boards)[boardID] || (base3[boardID] = {}))[threadID] = val; - } else { - this.data.boards[boardID] = val; - } - return this.save(cb); - }; - - DataBoard.prototype.get = function(arg) { - var ID, board, boardID, defaultValue, k, len1, postID, thread, threadID, val; - boardID = arg.boardID, threadID = arg.threadID, postID = arg.postID, defaultValue = arg.defaultValue; - if (board = this.data.boards[boardID]) { - if (threadID == null) { - if (postID != null) { - for (thread = k = 0, len1 = board.length; k < len1; thread = ++k) { - ID = board[thread]; - if (postID in thread) { - val = thread[postID]; - break; - } - } - } else { - val = board; - } - } else if (thread = board[threadID]) { - val = postID != null ? thread[postID] : thread; - } - } - return val || defaultValue; - }; - - DataBoard.prototype.forceSync = function() { - return $.forceSync(this.key); - }; - - DataBoard.prototype.clean = function() { - var boardID, now, ref, val; - $.forceSync(this.key); - ref = this.data.boards; - for (boardID in ref) { - val = ref[boardID]; - this.deleteIfEmpty({ - boardID: boardID - }); - } - now = Date.now(); - if ((this.data.lastChecked || 0) < now - 2 * $.HOUR) { - this.data.lastChecked = now; - for (boardID in this.data.boards) { - this.ajaxClean(boardID); - } - } - }; - - DataBoard.prototype.ajaxClean = function(boardID) { - return $.cache("//a.4cdn.org/" + boardID + "/threads.json", (function(_this) { - return function(e1) { - var ref; - if ((ref = e1.target.status) !== 200 && ref !== 404) { - return; - } - return $.cache("//a.4cdn.org/" + boardID + "/archive.json", function(e2) { - var ref1; - if ((ref1 = e2.target.status) !== 200 && ref1 !== 404) { - return; - } - return _this.ajaxCleanParse(boardID, e1.target.response, e2.target.response); - }); - }; - })(this)); - }; - - DataBoard.prototype.ajaxCleanParse = function(boardID, response1, response2) { - var ID, board, k, len1, len2, len3, page, q, ref, thread, threads, u; - if (!(board = this.data.boards[boardID])) { - return; - } - threads = {}; - if (response1) { - for (k = 0, len1 = response1.length; k < len1; k++) { - page = response1[k]; - ref = page.threads; - for (q = 0, len2 = ref.length; q < len2; q++) { - thread = ref[q]; - ID = thread.no; - if (ID in board) { - threads[ID] = board[ID]; - } - } - } - } - if (response2) { - for (u = 0, len3 = response2.length; u < len3; u++) { - ID = response2[u]; - if (ID in board) { - threads[ID] = board[ID]; - } - } - } - this.data.boards[boardID] = threads; - this.deleteIfEmpty({ - boardID: boardID - }); - return this.save(); - }; - - DataBoard.prototype.onSync = function(data) { - this.data = data || { - boards: {} - }; - return typeof this.sync === "function" ? this.sync() : void 0; - }; - - return DataBoard; - - })(); - - Notice = (function() { - function Notice(type, content, timeout1, onclose) { - this.timeout = timeout1; - this.onclose = onclose; - this.close = bind(this.close, this); - this.add = bind(this.add, this); - this.el = $.el('div', { - innerHTML: "

" - }); - this.el.style.opacity = 0; - this.setType(type); - $.on(this.el.firstElementChild, 'click', this.close); - if (typeof content === 'string') { - content = $.tn(content); - } - $.add(this.el.lastElementChild, content); - $.ready(this.add); - } - - Notice.prototype.setType = function(type) { - return this.el.className = "notification " + type; - }; - - Notice.prototype.add = function() { - if (d.hidden) { - $.on(d, 'visibilitychange', this.add); - return; - } - $.off(d, 'visibilitychange', this.add); - $.add(Header.noticesRoot, this.el); - this.el.clientHeight; - this.el.style.opacity = 1; - if (this.timeout) { - return setTimeout(this.close, this.timeout * $.SECOND); - } - }; - - Notice.prototype.close = function() { - $.off(d, 'visibilitychange', this.add); - $.rm(this.el); - return typeof this.onclose === "function" ? this.onclose() : void 0; - }; - - return Notice; - - })(); - - RandomAccessList = (function() { - function RandomAccessList(items) { - var item, k, len1; - this.length = 0; - if (items) { - for (k = 0, len1 = items.length; k < len1; k++) { - item = items[k]; - this.push(item); - } - } - } - - RandomAccessList.prototype.push = function(data) { - var ID, item, last; - ID = data.ID; - ID || (ID = data.id); - if (this[ID]) { - return; - } - last = this.last; - this[ID] = item = { - prev: last, - next: null, - data: data, - ID: ID - }; - item.prev = last; - this.last = last ? last.next = item : this.first = item; - return this.length++; - }; - - RandomAccessList.prototype.before = function(root, item) { - var prev; - if (item.next === root || item === root) { - return; - } - this.rmi(item); - prev = root.prev; - root.prev = item; - item.next = root; - item.prev = prev; - if (prev) { - return prev.next = item; - } else { - return this.first = item; - } - }; - - RandomAccessList.prototype.after = function(root, item) { - var next; - if (item.prev === root || item === root) { - return; - } - this.rmi(item); - next = root.next; - root.next = item; - item.prev = root; - item.next = next; - if (next) { - return next.prev = item; - } else { - return this.last = item; - } - }; - - RandomAccessList.prototype.prepend = function(item) { - var first; - first = this.first; - if (item === first || !this[item.ID]) { - return; - } - this.rmi(item); - item.next = first; - if (first) { - first.prev = item; - } else { - this.last = item; - } - this.first = item; - return delete item.prev; - }; - - RandomAccessList.prototype.shift = function() { - return this.rm(this.first.ID); - }; - - RandomAccessList.prototype.order = function() { - var item, order; - order = [item = this.first]; - while (item = item.next) { - order.push(item); - } - return order; - }; - - RandomAccessList.prototype.rm = function(ID) { - var item; - item = this[ID]; - if (!item) { - return; - } - delete this[ID]; - this.length--; - this.rmi(item); - delete item.next; - return delete item.prev; - }; - - RandomAccessList.prototype.rmi = function(item) { - var next, prev; - prev = item.prev, next = item.next; - if (prev) { - prev.next = next; - } else { - this.first = next; - } - if (next) { - return next.prev = prev; - } else { - return this.last = prev; - } - }; - - return RandomAccessList; - - })(); - - SimpleDict = (function() { - function SimpleDict() { - this.keys = []; - } - - SimpleDict.prototype.push = function(key, data) { - key = "" + key; - if (!this[key]) { - this.keys.push(key); - } - return this[key] = data; - }; - - SimpleDict.prototype.rm = function(key) { - var i; - key = "" + key; - if ((i = this.keys.indexOf(key)) !== -1) { - this.keys.splice(i, 1); - return delete this[key]; - } - }; - - SimpleDict.prototype.forEach = function(fn) { - var k, key, len1, ref; - ref = slice.call(this.keys); - for (k = 0, len1 = ref.length; k < len1; k++) { - key = ref[k]; - fn(this[key]); - } - }; - - return SimpleDict; - - })(); - - ShimSet = (function() { - function ShimSet() { - this.elements = {}; - this.size = 0; - } - - ShimSet.prototype.has = function(value) { - return value in this.elements; - }; - - ShimSet.prototype.add = function(value) { - if (this.elements[value]) { - return; - } - this.elements[value] = true; - return this.size++; - }; - - ShimSet.prototype["delete"] = function(value) { - if (!this.elements[value]) { - return; - } - delete this.elements[value]; - return this.size--; - }; - - return ShimSet; - - })(); - - if (!('Set' in window)) { - window.Set = ShimSet; - } - - Connection = (function() { - function Connection(target1, origin1, cb1) { - this.target = target1; - this.origin = origin1; - this.cb = cb1 != null ? cb1 : {}; - this.onMessage = bind(this.onMessage, this); - this.send = bind(this.send, this); - $.on(window, 'message', this.onMessage); - } - - Connection.prototype.targetWindow = function() { - if (this.target instanceof window.HTMLIFrameElement) { - return this.target.contentWindow; - } else { - return this.target; - } - }; - - Connection.prototype.send = function(data) { - return this.targetWindow().postMessage("" + g.NAMESPACE + (JSON.stringify(data)), this.origin); - }; - - Connection.prototype.onMessage = function(e) { - var base1, data, type, value; - if (!(e.source === this.targetWindow() && e.origin === this.origin && typeof e.data === 'string' && e.data.slice(0, g.NAMESPACE.length) === g.NAMESPACE)) { - return; - } - data = JSON.parse(e.data.slice(g.NAMESPACE.length)); - for (type in data) { - value = data[type]; - if (typeof (base1 = this.cb)[type] === "function") { - base1[type](value); - } - } - }; - - return Connection; - - })(); - - Fetcher = (function() { - function Fetcher(boardID1, threadID1, postID1, root1, quoter1) { - var post; - this.boardID = boardID1; - this.threadID = threadID1; - this.postID = postID1; - this.root = root1; - this.quoter = quoter1; - if (post = g.posts[this.boardID + "." + this.postID]) { - this.insert(post); - return; - } - this.root.textContent = "Loading post No." + this.postID + "..."; - if (this.threadID) { - $.cache("//a.4cdn.org/" + this.boardID + "/thread/" + this.threadID + ".json", (function(_this) { - return function(e, isCached) { - return _this.fetchedPost(e.target, isCached); - }; - })(this)); - } else { - this.archivedPost(); - } - } - - Fetcher.prototype.insert = function(post) { - var boardID, clone, k, len1, nodes, postID, quote, ref, ref1; - if (!this.root.parentNode) { - return; - } - clone = post.addClone(this.quoter.context, $.hasClass(this.root, 'dialog')); - Main.callbackNodes(Clone, [clone]); - nodes = clone.nodes; - $.rmAll(nodes.root); - $.add(nodes.root, nodes.post); - ref = clone.nodes.quotelinks.concat(slice.call(clone.nodes.backlinks)); - for (k = 0, len1 = ref.length; k < len1; k++) { - quote = ref[k]; - ref1 = Get.postDataFromLink(quote), boardID = ref1.boardID, postID = ref1.postID; - if (postID === this.quoter.ID && boardID === this.quoter.board.ID) { - $.addClass(quote, 'forwardlink'); - } - } - $.rmAll(this.root); - $.add(this.root, nodes.root); - return $.event('PostsInserted'); - }; - - Fetcher.prototype.fetchedPost = function(req, isCached) { - var api, board, k, len1, post, posts, status, thread; - if (post = g.posts[this.boardID + "." + this.postID]) { - this.insert(post); - return; - } - status = req.status; - if (status !== 200 && status !== 304) { - if (this.archivedPost()) { - return; - } - $.addClass(this.root, 'warning'); - this.root.textContent = status === 404 ? "Thread No." + this.threadID + " 404'd." : "Error " + req.statusText + " (" + req.status + ")."; - return; - } - posts = req.response.posts; - Build.spoilerRange[this.boardID] = posts[0].custom_spoiler; - for (k = 0, len1 = posts.length; k < len1; k++) { - post = posts[k]; - if (post.no === this.postID) { - break; - } - } - if (post.no !== this.postID) { - if (isCached) { - api = "//a.4cdn.org/" + this.boardID + "/thread/" + this.threadID + ".json"; - $.cleanCache(function(url) { - return url === api; - }); - $.cache(api, (function(_this) { - return function(e) { - return _this.fetchedPost(e.target, false); - }; - })(this)); - return; - } - if (this.archivedPost()) { - return; - } - $.addClass(this.root, 'warning'); - this.root.textContent = "Post No." + this.postID + " was not found."; - return; - } - board = g.boards[this.boardID] || new Board(this.boardID); - thread = g.threads[this.boardID + "." + this.threadID] || new Thread(this.threadID, board); - post = new Post(Build.postFromObject(post, this.boardID), thread, board); - post.isFetchedQuote = true; - Main.callbackNodes(Post, [post]); - return this.insert(post); - }; - - Fetcher.prototype.archivedPost = function() { - var archive, url; - if (!Conf['Resurrect Quotes']) { - return false; - } - if (!(url = Redirect.to('post', { - boardID: this.boardID, - postID: this.postID - }))) { - return false; - } - archive = Redirect.data.post[this.boardID]; - if (/^https:\/\//.test(url) || location.protocol === 'http:') { - $.cache(url, (function(_this) { - return function(e) { - return _this.parseArchivedPost(e.target.response, url, archive); - }; - })(this), { - responseType: 'json', - withCredentials: archive.withCredentials - }); - return true; - } else if (Conf['Exempt Archives from Encryption']) { - CrossOrigin.json(url, (function(_this) { - return function(response) { - var key, media, ref; - media = response.media; - if (media) { - for (key in media) { - if (/_link$/.test(key)) { - if (!((ref = media[key]) != null ? ref.match(/^http:\/\//) : void 0)) { - delete media[key]; - } - } - } - } - return _this.parseArchivedPost(response, url, archive); - }; - })(this)); - return true; - } - return false; - }; - - Fetcher.prototype.parseArchivedPost = function(data, url, archive) { - var board, comment, greentext, i, j, key, o, post, ref, ref1, text, text2, thread, val; - if (post = g.posts[this.boardID + "." + this.postID]) { - this.insert(post); - return; - } - if (data == null) { - $.addClass(this.root, 'warning'); - this.root.textContent = "Error fetching Post No." + this.postID + " from " + archive.name + "."; - return; - } - if (data.error) { - $.addClass(this.root, 'warning'); - this.root.textContent = data.error; - return; - } - comment = (data.comment || '').split(/(\n|\[\/?(?:b|spoiler|code|moot|banned)\])/); - comment = (function() { - var k, len1, results; - results = []; - for (i = k = 0, len1 = comment.length; k < len1; i = ++k) { - text = comment[i]; - if (i % 2 === 1) { - results.push(this.archiveTags[text]); - } else { - greentext = text[0] === '>'; - text = text.replace(/(\[\/?[a-z]+):lit(\])/g, '$1$2'); - text = (function() { - var len2, q, ref, results1; - ref = text.split(/(>>(?:>\/[a-z\d]+\/)?\d+)/g); - results1 = []; - for (j = q = 0, len2 = ref.length; q < len2; j = ++q) { - text2 = ref[j]; - results1.push({ - innerHTML: (j % 2 ? "" + E(text2) + "" : E(text2)) - }); - } - return results1; - })(); - text = { - innerHTML: (greentext ? "" + E.cat(text) + "" : E.cat(text)) - }; - results.push(text); - } - } - return results; - }).call(this); - comment = { - innerHTML: E.cat(comment) - }; - this.threadID = +data.thread_num; - o = { - postID: this.postID, - threadID: this.threadID, - boardID: this.boardID, - isReply: this.postID !== this.threadID - }; - o.info = { - subject: data.title, - email: data.email, - name: data.name || '', - tripcode: data.trip, - capcode: (function() { - switch (data.capcode) { - case 'M': - return 'Mod'; - case 'A': - return 'Admin'; - case 'D': - return 'Developer'; - } - })(), - uniqueID: data.poster_hash, - flagCode: data.poster_country, - flag: data.poster_country_name, - dateUTC: data.timestamp, - dateText: data.fourchan_date, - commentHTML: comment - }; - if (o.info.capcode) { - delete o.info.uniqueID; - } - if ((ref = data.media) != null ? ref.media_filename : void 0) { - ref1 = data.media; - for (key in ref1) { - val = ref1[key]; - if (/_link$/.test(key) && (val != null ? val[0] : void 0) === '/') { - data.media[key] = url.split('/', 3).join('/') + val; - } - } - o.file = { - name: data.media.media_filename, - url: data.media.media_link || data.media.remote_media_link || (location.protocol + "//i.4cdn.org/" + this.boardID + "/" + (encodeURIComponent(data.media[this.boardID === 'f' ? 'media_filename' : 'media_orig']))), - height: data.media.media_h, - width: data.media.media_w, - MD5: data.media.media_hash, - size: $.bytesToString(data.media.media_size), - thumbURL: data.media.thumb_link || (location.protocol + "//i.4cdn.org/" + this.boardID + "/" + data.media.preview_orig), - theight: data.media.preview_h, - twidth: data.media.preview_w, - isSpoiler: data.media.spoiler === '1' - }; - if (!/\.pdf$/.test(o.file.url)) { - o.file.dimensions = o.file.width + "x" + o.file.height; - } - if (this.boardID === 'f' && data.media.exif) { - o.file.tag = JSON.parse(data.media.exif).Tag; - } - } - board = g.boards[this.boardID] || new Board(this.boardID); - thread = g.threads[this.boardID + "." + this.threadID] || new Thread(this.threadID, board); - post = new Post(Build.post(o), thread, board); - post.kill(); - if (post.file) { - post.file.thumbURL = o.file.thumbURL; - } - post.isFetchedQuote = true; - Main.callbackNodes(Post, [post]); - return this.insert(post); - }; - - Fetcher.prototype.archiveTags = { - '\n': { - innerHTML: "
" - }, - '[b]': { - innerHTML: "" - }, - '[/b]': { - innerHTML: "" - }, - '[spoiler]': { - innerHTML: "" - }, - '[/spoiler]': { - innerHTML: "" - }, - '[code]': { - innerHTML: "
"
-      },
-      '[/code]': {
-        innerHTML: "
" - }, - '[moot]': { - innerHTML: "
" - }, - '[/moot]': { - innerHTML: "
" - }, - '[banned]': { - innerHTML: "" - }, - '[/banned]': { - innerHTML: "" - } - }; - - return Fetcher; - - })(); - - Polyfill = { - init: function() { - return this.toBlob(); - }, - toBlob: function() { - if (HTMLCanvasElement.prototype.toBlob) { - return; - } - HTMLCanvasElement.prototype.toBlob = function(cb, type, encoderOptions) { - var data, i, k, l, ref, ui8a, url; - if (type == null) { - type = 'image/png'; - } - url = this.toDataURL(type, encoderOptions); - data = atob(url.slice(url.indexOf(',') + 1)); - l = data.length; - ui8a = new Uint8Array(l); - for (i = k = 0, ref = l; k < ref; i = k += 1) { - ui8a[i] = data.charCodeAt(i); - } - return cb(new Blob([ui8a], { - type: type - })); - }; - return $.globalEval("HTMLCanvasElement.prototype.toBlob = (" + HTMLCanvasElement.prototype.toBlob + ");"); - } - }; - - Header = { - init: function() { - var barFixedToggler, barPositionToggler, box, customNavToggler, editCustomNav, footerToggler, headerToggler, linkJustifyToggler, menuButton, scrollHeaderToggler, shortcutToggler; - this.menu = new UI.Menu('header'); - menuButton = $.el('span', { - className: 'menu-button' - }); - $.extend(menuButton, { - innerHTML: "" - }); - box = UI.checkbox; - barFixedToggler = box('Fixed Header', 'Fixed Header'); - headerToggler = box('Header auto-hide', 'Auto-hide header'); - scrollHeaderToggler = box('Header auto-hide on scroll', 'Auto-hide header on scroll'); - barPositionToggler = box('Bottom Header', 'Bottom header'); - linkJustifyToggler = box('Centered links', 'Centered links'); - customNavToggler = box('Custom Board Navigation', 'Custom board navigation'); - footerToggler = box('Bottom Board List', 'Hide bottom board list'); - shortcutToggler = box('Shortcut Icons', 'Shortcut Icons'); - editCustomNav = $.el('a', { - textContent: 'Edit custom board navigation', - href: 'javascript:;' - }); - this.barFixedToggler = barFixedToggler.firstElementChild; - this.scrollHeaderToggler = scrollHeaderToggler.firstElementChild; - this.barPositionToggler = barPositionToggler.firstElementChild; - this.linkJustifyToggler = linkJustifyToggler.firstElementChild; - this.headerToggler = headerToggler.firstElementChild; - this.footerToggler = footerToggler.firstElementChild; - this.shortcutToggler = shortcutToggler.firstElementChild; - this.customNavToggler = customNavToggler.firstElementChild; - $.on(menuButton, 'click', this.menuToggle); - $.on(this.headerToggler, 'change', this.toggleBarVisibility); - $.on(this.barFixedToggler, 'change', this.toggleBarFixed); - $.on(this.barPositionToggler, 'change', this.toggleBarPosition); - $.on(this.scrollHeaderToggler, 'change', this.toggleHideBarOnScroll); - $.on(this.linkJustifyToggler, 'change', this.toggleLinkJustify); - $.on(this.footerToggler, 'change', this.toggleFooterVisibility); - $.on(this.shortcutToggler, 'change', this.toggleShortcutIcons); - $.on(this.customNavToggler, 'change', this.toggleCustomNav); - $.on(editCustomNav, 'click', this.editCustomNav); - this.setBarFixed(Conf['Fixed Header']); - this.setHideBarOnScroll(Conf['Header auto-hide on scroll']); - this.setBarVisibility(Conf['Header auto-hide']); - this.setLinkJustify(Conf['Centered links']); - this.setShortcutIcons(Conf['Shortcut Icons']); - this.setFooterVisibility(Conf['Bottom Board List']); - $.sync('Fixed Header', this.setBarFixed); - $.sync('Header auto-hide on scroll', this.setHideBarOnScroll); - $.sync('Bottom Header', this.setBarPosition); - $.sync('Shortcut Icons', this.setShortcutIcons); - $.sync('Header auto-hide', this.setBarVisibility); - $.sync('Centered links', this.setLinkJustify); - $.sync('Bottom Board List', this.setFooterVisibility); - this.addShortcut(menuButton); - this.menu.addEntry({ - el: $.el('span', { - textContent: 'Header' - }), - order: 107, - subEntries: [ - { - el: barFixedToggler - }, { - el: headerToggler - }, { - el: scrollHeaderToggler - }, { - el: barPositionToggler - }, { - el: linkJustifyToggler - }, { - el: footerToggler - }, { - el: shortcutToggler - }, { - el: customNavToggler - }, { - el: editCustomNav - } - ] - }); - $.on(window, 'load popstate', Header.hashScroll); - $.on(d, 'CreateNotification', this.createNotification); - $.asap((function() { - return d.body; - }), (function(_this) { - return function() { - if (!Main.isThisPageLegit()) { - return; - } - $.asap((function() { - return $.id('boardNavMobile') || d.readyState !== 'loading'; - }), function() { - var a, footer; - footer = $.id('boardNavDesktop').cloneNode(true); - footer.id = 'boardNavDesktopFoot'; - $('#navtopright', footer).id = 'navbotright'; - $('#settingsWindowLink', footer).id = 'settingsWindowLinkBot'; - Header.bottomBoardList = $('.boardList', footer); - if (a = $("a[href*='/" + g.BOARD + "/']", footer)) { - a.className = 'current'; - } - Main.ready(function() { - var absbot, oldFooter; - if ((oldFooter = $.id('boardNavDesktopFoot'))) { - return $.replace($('.boardList', oldFooter), Header.bottomBoardList); - } else if ((absbot = $.id('absbot'))) { - $.before(absbot, footer); - return $.globalEval('window.cloneTopNav = function() {};'); - } - }); - return Header.setBoardList(); - }); - $.prepend(d.body, _this.bar); - $.add(d.body, Header.hover); - _this.setBarPosition(Conf['Bottom Header']); - return _this; - }; - })(this)); - Main.ready((function(_this) { - return function() { - var cs; - if (g.VIEW === 'catalog' || !Conf['Disable Native Extension']) { - cs = $.el('a', { - href: 'javascript:;' - }); - if (g.VIEW === 'catalog') { - cs.title = cs.textContent = 'Catalog Settings'; - cs.className = 'fa fa-book'; - } else { - cs.title = cs.textContent = '4chan Settings'; - cs.className = 'fa fa-leaf'; - } - $.on(cs, 'click', function() { - return $.id('settingsWindowLink').click(); - }); - return _this.addShortcut(cs); - } - }; - })(this)); - return this.enableDesktopNotifications(); - }, - bar: $.el('div', { - id: 'header-bar' - }), - noticesRoot: $.el('div', { - id: 'notifications' - }), - shortcuts: $.el('span', { - id: 'shortcuts' - }), - hover: $.el('div', { - id: 'hoverUI' - }), - toggle: $.el('div', { - id: 'scroll-marker' - }), - setBoardList: function() { - var a, boardList, btn, chr, k, len1, len2, node, nodes, q, ref, ref1, spacer, span; - Header.boardList = boardList = $.el('span', { - id: 'board-list' - }); - $.extend(boardList, { - innerHTML: "" - }); - btn = $('.hide-board-list-button', boardList); - $.on(btn, 'click', Header.toggleBoardList); - nodes = []; - spacer = function() { - return $.el('span', { - className: 'spacer' - }); - }; - ref = $('#boardNavDesktop > .boardList').childNodes; - for (k = 0, len1 = ref.length; k < len1; k++) { - node = ref[k]; - switch (node.nodeName) { - case '#text': - ref1 = node.nodeValue; - for (q = 0, len2 = ref1.length; q < len2; q++) { - chr = ref1[q]; - span = $.el('span', { - textContent: chr - }); - if (chr === ' ') { - span.className = 'space'; - } - if (chr === ']') { - nodes.push(spacer()); - } - nodes.push(span); - if (chr === '[') { - nodes.push(spacer()); - } - } - break; - case 'A': - a = node.cloneNode(true); - if (a.pathname.split('/')[1] === g.BOARD.ID) { - a.className = 'current'; - } - nodes.push(a); - } - } - $.add($('.boardList', boardList), nodes); - $.add(Header.bar, [Header.boardList, Header.shortcuts, Header.noticesRoot, Header.toggle]); - Header.setCustomNav(Conf['Custom Board Navigation']); - Header.generateBoardList(Conf['boardnav']); - $.sync('Custom Board Navigation', Header.setCustomNav); - return $.sync('boardnav', Header.generateBoardList); - }, - generateBoardList: function(boardnav) { - var as, list, nodes, re, t; - list = $('#custom-board-list', Header.boardList); - $.rmAll(list); - if (!boardnav) { - return; - } - boardnav = boardnav.replace(/(\r\n|\n|\r)/g, ' '); - as = $$('#full-board-list a[title]', Header.boardList); - re = /[\w@]+(-(all|title|replace|full|index|catalog|archive|expired|(mode|sort|text):"[^"]+"(,"[^"]+")?))*|[^\w@]+/g; - nodes = (function() { - var k, len1, ref, results; - ref = boardnav.match(re); - results = []; - for (k = 0, len1 = ref.length; k < len1; k++) { - t = ref[k]; - results.push(Header.mapCustomNavigation(t, as)); - } - return results; - })(); - $.add(list, nodes); - return $.ready(CatalogLinks.initBoardList); - }, - mapCustomNavigation: function(t, as) { - var a, boardID, href, indexOptions, m, text, url; - if (/^[^\w@]/.test(t)) { - return $.tn(t); - } - text = url = null; - t = t.replace(/-text:"([^"]+)"(?:,"([^"]+)")?/g, function(m0, m1, m2) { - text = m1; - url = m2; - return ''; - }); - indexOptions = []; - t = t.replace(/-(?:mode|sort):"([^"]+)"/g, function(m0, m1) { - indexOptions.push(m1.toLowerCase().replace(/\ /g, '-')); - return ''; - }); - indexOptions = indexOptions.join('/'); - if (/^toggle-all/.test(t)) { - a = $.el('a', { - className: 'show-board-list-button', - textContent: text || '+', - href: 'javascript:;' - }); - $.on(a, 'click', Header.toggleBoardList); - return a; - } - if (/^external/.test(t)) { - a = $.el('a', { - href: url || 'javascript:;', - textContent: text || '+', - className: 'external' - }); - return a; - } - boardID = t.split('-')[0]; - if (boardID === 'current') { - boardID = g.BOARD.ID; - } - a = (function() { - var k, len1, ref; - if (boardID === '@') { - return $.el('a', { - href: 'https://twitter.com/4chan', - title: '4chan Twitter', - textContent: '@' - }); - } - for (k = 0, len1 = as.length; k < len1; k++) { - a = as[k]; - if (a.textContent === boardID) { - return a.cloneNode(true); - } - } - a = $.el('a', { - href: "/" + boardID + "/", - textContent: boardID - }); - if ((ref = g.VIEW) === 'catalog' || ref === 'archive') { - a.href += g.VIEW; - } - if (boardID === g.BOARD.ID) { - a.className = 'current'; - } - return a; - })(); - a.textContent = /-title/.test(t) || /-replace/.test(t) && boardID === g.BOARD.ID ? a.title || a.textContent : /-full/.test(t) ? ("/" + boardID + "/") + (a.title ? " - " + a.title : '') : text || boardID; - if (m = t.match(/-(index|catalog)/)) { - if (!(boardID === 'f' && m[1] === 'catalog')) { - a.dataset.only = m[1]; - a.href = CatalogLinks[m[1]](boardID); - if (m[1] === 'catalog') { - $.addClass(a, 'catalog'); - } - } else { - return a.firstChild; - } - } - if (Conf['JSON Index'] && indexOptions) { - a.dataset.indexOptions = indexOptions; - if (a.hostname === 'boards.4chan.org' && a.pathname.split('/')[2] === '') { - a.href += (a.hash ? '/' : '#') + indexOptions; - } - } - if (/-archive/.test(t)) { - if (href = Redirect.to('board', { - boardID: boardID - })) { - a.href = href; - } else { - return a.firstChild; - } - } - if (/-expired/.test(t)) { - if (boardID !== 'b' && boardID !== 'f' && boardID !== 'trash') { - a.href = "/" + boardID + "/archive"; - } else { - return a.firstChild; - } - } - if (boardID === '@') { - $.addClass(a, 'navSmall'); - } - return a; - }, - toggleBoardList: function() { - var bar, custom, full, showBoardList; - bar = Header.bar; - custom = $('#custom-board-list', bar); - full = $('#full-board-list', bar); - showBoardList = !full.hidden; - custom.hidden = !showBoardList; - return full.hidden = showBoardList; - }, - setLinkJustify: function(centered) { - Header.linkJustifyToggler.checked = centered; - if (centered) { - return $.addClass(doc, 'centered-links'); - } else { - return $.rmClass(doc, 'centered-links'); - } - }, - toggleLinkJustify: function() { - var centered; - $.event('CloseMenu'); - centered = this.nodeName === 'INPUT' ? this.checked : void 0; - Header.setLinkJustify(centered); - return $.set('Centered links', centered); - }, - setBarFixed: function(fixed) { - Header.barFixedToggler.checked = fixed; - if (fixed) { - $.addClass(doc, 'fixed'); - return $.addClass(Header.bar, 'dialog'); - } else { - $.rmClass(doc, 'fixed'); - return $.rmClass(Header.bar, 'dialog'); - } - }, - toggleBarFixed: function() { - $.event('CloseMenu'); - Header.setBarFixed(this.checked); - Conf['Fixed Header'] = this.checked; - return $.set('Fixed Header', this.checked); - }, - setShortcutIcons: function(show) { - Header.shortcutToggler.checked = show; - if (show) { - return $.addClass(doc, 'shortcut-icons'); - } else { - return $.rmClass(doc, 'shortcut-icons'); - } - }, - toggleShortcutIcons: function() { - $.event('CloseMenu'); - Header.setShortcutIcons(this.checked); - Conf['Shortcut Icons'] = this.checked; - return $.set('Shortcut Icons', this.checked); - }, - setBarVisibility: function(hide) { - Header.headerToggler.checked = hide; - $.event('CloseMenu'); - (hide ? $.addClass : $.rmClass)(Header.bar, 'autohide'); - return (hide ? $.addClass : $.rmClass)(doc, 'autohide'); - }, - toggleBarVisibility: function() { - var hide, message; - hide = this.nodeName === 'INPUT' ? this.checked : !$.hasClass(Header.bar, 'autohide'); - Conf['Header auto-hide'] = hide; - $.set('Header auto-hide', hide); - Header.setBarVisibility(hide); - message = "The header bar will " + (hide ? 'automatically hide itself.' : 'remain visible.'); - return new Notice('info', message, 2); - }, - setHideBarOnScroll: function(hide) { - Header.scrollHeaderToggler.checked = hide; - if (hide) { - $.on(window, 'scroll', Header.hideBarOnScroll); - return; - } - $.off(window, 'scroll', Header.hideBarOnScroll); - $.rmClass(Header.bar, 'scroll'); - if (!Conf['Header auto-hide']) { - return $.rmClass(Header.bar, 'autohide'); - } - }, - toggleHideBarOnScroll: function() { - var hide; - hide = this.checked; - $.cb.checked.call(this); - return Header.setHideBarOnScroll(hide); - }, - hideBarOnScroll: function() { - var offsetY; - offsetY = window.pageYOffset; - if (offsetY > (Header.previousOffset || 0)) { - $.addClass(Header.bar, 'autohide', 'scroll'); - } else { - $.rmClass(Header.bar, 'autohide', 'scroll'); - } - return Header.previousOffset = offsetY; - }, - setBarPosition: function(bottom) { - var args; - Header.barPositionToggler.checked = bottom; - $.event('CloseMenu'); - args = bottom ? ['bottom-header', 'top-header', 'after'] : ['top-header', 'bottom-header', 'add']; - $.addClass(doc, args[0]); - $.rmClass(doc, args[1]); - return $[args[2]](Header.bar, Header.noticesRoot); - }, - toggleBarPosition: function() { - $.cb.checked.call(this); - return Header.setBarPosition(this.checked); - }, - setFooterVisibility: function(hide) { - Header.footerToggler.checked = hide; - return doc.classList.toggle('hide-bottom-board-list', hide); - }, - toggleFooterVisibility: function() { - var hide, message; - $.event('CloseMenu'); - hide = this.nodeName === 'INPUT' ? this.checked : $.hasClass(doc, 'hide-bottom-board-list'); - Header.setFooterVisibility(hide); - $.set('Bottom Board List', hide); - message = hide ? 'The bottom navigation will now be hidden.' : 'The bottom navigation will remain visible.'; - return new Notice('info', message, 2); - }, - setCustomNav: function(show) { - var btn, cust, full, ref; - Header.customNavToggler.checked = show; - cust = $('#custom-board-list', Header.bar); - full = $('#full-board-list', Header.bar); - btn = $('.hide-board-list-container', full); - return ref = show ? [false, true, false] : [true, false, true], cust.hidden = ref[0], full.hidden = ref[1], btn.hidden = ref[2], ref; - }, - toggleCustomNav: function() { - $.cb.checked.call(this); - return Header.setCustomNav(this.checked); - }, - editCustomNav: function() { - var settings; - Settings.open('Advanced'); - settings = $.id('fourchanx-settings'); - return $('[name=boardnav]', settings).focus(); - }, - hashScroll: function(e) { - var el, hash; - if (e) { - if (e.state) { - return; - } - if (!history.state) { - history.replaceState({}, ''); - } - } - if ((hash = location.hash.slice(1))) { - ReplyPruning.showIfHidden(hash); - if ((el = $.id(hash))) { - return $.queueTask(function() { - return Header.scrollTo(el); - }); - } - } - }, - scrollTo: function(root, down, needed) { - var height, x; - if (!root.offsetParent) { - return; - } - if (down) { - x = Header.getBottomOf(root); - if (Conf['Fixed Header'] && Conf['Header auto-hide on scroll'] && Conf['Bottom header']) { - height = Header.bar.getBoundingClientRect().height; - if (x <= 0) { - if (!Header.isHidden()) { - x += height; - } - } else { - if (Header.isHidden()) { - x -= height; - } - } - } - if (!(needed && x >= 0)) { - return window.scrollBy(0, -x); - } - } else { - x = Header.getTopOf(root); - if (Conf['Fixed Header'] && Conf['Header auto-hide on scroll'] && !Conf['Bottom header']) { - height = Header.bar.getBoundingClientRect().height; - if (x >= 0) { - if (!Header.isHidden()) { - x += height; - } - } else { - if (Header.isHidden()) { - x -= height; - } - } - } - if (!(needed && x >= 0)) { - return window.scrollBy(0, x); - } - } - }, - scrollToIfNeeded: function(root, down) { - return Header.scrollTo(root, down, true); - }, - getTopOf: function(root) { - var headRect, top; - top = root.getBoundingClientRect().top; - if (Conf['Fixed Header'] && !Conf['Bottom Header']) { - headRect = Header.toggle.getBoundingClientRect(); - top -= headRect.top + headRect.height; - } - return top; - }, - getBottomOf: function(root) { - var bottom, clientHeight, headRect; - clientHeight = doc.clientHeight; - bottom = clientHeight - root.getBoundingClientRect().bottom; - if (Conf['Fixed Header'] && Conf['Bottom Header']) { - headRect = Header.toggle.getBoundingClientRect(); - bottom -= clientHeight - headRect.bottom + headRect.height; - } - return bottom; - }, - isNodeVisible: function(node) { - var height; - if (d.hidden || !doc.contains(node)) { - return false; - } - height = node.getBoundingClientRect().height; - return Header.getTopOf(node) + height >= 0 && Header.getBottomOf(node) + height >= 0; - }, - isHidden: function() { - var top; - top = Header.bar.getBoundingClientRect().top; - if (Conf['Bottom header']) { - return top === doc.clientHeight; - } else { - return top < 0; - } - }, - addShortcut: function(el) { - var shortcut; - shortcut = $.el('span', { - className: 'shortcut brackets-wrap' - }); - $.add(shortcut, el); - return $.prepend(Header.shortcuts, shortcut); - }, - rmShortcut: function(el) { - return $.rm(el.parentElement); - }, - menuToggle: function(e) { - return Header.menu.toggle(e, this, g); - }, - createNotification: function(e) { - var content, lifetime, notice, ref, type; - ref = e.detail, type = ref.type, content = ref.content, lifetime = ref.lifetime; - return notice = new Notice(type, content, lifetime); - }, - areNotificationsEnabled: false, - enableDesktopNotifications: function() { - var authorize, disable, el, notice, ref; - if (!(window.Notification && Conf['Desktop Notifications'])) { - return; - } - switch (Notification.permission) { - case 'granted': - Header.areNotificationsEnabled = true; - return; - case 'denied': - return; - } - el = $.el('span', { - innerHTML: "4chan X needs your permission to show desktop notifications. [FAQ]
or " - }); - ref = $$('button', el), authorize = ref[0], disable = ref[1]; - $.on(authorize, 'click', function() { - return Notification.requestPermission(function(status) { - Header.areNotificationsEnabled = status === 'granted'; - if (status === 'default') { - return; - } - return notice.close(); - }); - }); - $.on(disable, 'click', function() { - $.set('Desktop Notifications', false); - return notice.close(); - }); - return notice = new Notice('info', el); - } - }; - - Index = { - showHiddenThreads: false, - changed: {}, - init: function() { - var anchorEntry, input, k, label, len1, len2, name, pinEntry, q, ref, ref1, ref2, ref3, ref4, ref5, ref6, refNavEntry, repliesEntry, select, sortEntry; - if (g.BOARD.ID === 'f' || !Conf['JSON Index'] || g.VIEW !== 'index') { - return; - } - CatalogThread.callbacks.push({ - name: 'Catalog Features', - cb: this.catalogNode - }); - this.search = ((ref = history.state) != null ? ref.searched : void 0) || ''; - if ((ref1 = history.state) != null ? ref1.mode : void 0) { - Conf['Index Mode'] = (ref2 = history.state) != null ? ref2.mode : void 0; - } - this.currentSort = (ref3 = history.state) != null ? ref3.sort : void 0; - this.currentSort || (this.currentSort = typeof Conf['Index Sort'] === 'object' ? Conf['Index Sort'][g.BOARD.ID] || 'bump' : Conf['Index Sort']); - this.currentPage = this.getCurrentPage(); - this.processHash(); - $.addClass(doc, 'index-loading', (Conf['Index Mode'].replace(/\ /g, '-')) + "-mode"); - $.on(window, 'popstate', this.cb.popstate); - $.on(d, 'scroll', Index.scroll); - this.button = $.el('a', { - className: 'index-refresh-shortcut fa fa-refresh', - title: 'Refresh', - href: 'javascript:;', - textContent: 'Refresh Index' - }); - $.on(this.button, 'click', function() { - return Index.update(); - }); - Header.addShortcut(this.button, 1); - repliesEntry = { - el: UI.checkbox('Show Replies', 'Show replies') - }; - sortEntry = { - el: UI.checkbox('Per-Board Sort Type', 'Per-board sort type', typeof Conf['Index Sort'] === 'object') - }; - pinEntry = { - el: UI.checkbox('Pin Watched Threads', 'Pin watched threads') - }; - anchorEntry = { - el: UI.checkbox('Anchor Hidden Threads', 'Anchor hidden threads') - }; - refNavEntry = { - el: UI.checkbox('Refreshed Navigation', 'Refreshed navigation') - }; - sortEntry.el.title = 'Set the sorting order of each board independently.'; - pinEntry.el.title = 'Move watched threads to the start of the index.'; - anchorEntry.el.title = 'Move hidden threads to the end of the index.'; - refNavEntry.el.title = 'Refresh index when navigating through pages.'; - ref4 = [repliesEntry, pinEntry, anchorEntry, refNavEntry]; - for (k = 0, len1 = ref4.length; k < len1; k++) { - label = ref4[k]; - input = label.el.firstChild; - name = input.name; - $.on(input, 'change', $.cb.checked); - switch (name) { - case 'Show Replies': - $.on(input, 'change', this.cb.replies); - break; - case 'Pin Watched Threads': - case 'Anchor Hidden Threads': - $.on(input, 'change', this.cb.resort); - } - } - $.on(sortEntry.el.firstChild, 'change', this.cb.perBoardSort); - Header.menu.addEntry({ - el: $.el('span', { - textContent: 'Index Navigation' - }), - order: 100, - subEntries: [repliesEntry, sortEntry, pinEntry, anchorEntry, refNavEntry] - }); - this.navLinks = $.el('div', { - className: 'navLinks json-index' - }); - $.extend(this.navLinks, { - innerHTML: "Index Catalog Archive Bottom ×" - }); - $('.cataloglink a', this.navLinks).href = CatalogLinks.catalog(); - if ((ref5 = g.BOARD.ID) === 'b' || ref5 === 'trash') { - $('.archlistlink', this.navLinks).hidden = true; - } - $.on($('#index-last-refresh a', this.navLinks), 'click', this.cb.refreshFront); - this.searchInput = $('#index-search', this.navLinks); - this.setupSearch(); - $.on(this.searchInput, 'input', this.onSearchInput); - $.on($('#index-search-clear', this.navLinks), 'click', this.clearSearch); - this.hideLabel = $('#hidden-label', this.navLinks); - $.on($('#hidden-toggle a', this.navLinks), 'click', this.cb.toggleHiddenThreads); - this.selectMode = $('#index-mode', this.navLinks); - this.selectSort = $('#index-sort', this.navLinks); - this.selectSize = $('#index-size', this.navLinks); - $.on(this.selectMode, 'change', this.cb.mode); - $.on(this.selectSort, 'change', this.cb.sort); - $.on(this.selectSize, 'change', $.cb.value); - $.on(this.selectSize, 'change', this.cb.size); - ref6 = [this.selectMode, this.selectSize]; - for (q = 0, len2 = ref6.length; q < len2; q++) { - select = ref6[q]; - select.value = Conf[select.name]; - } - this.selectSort.value = Index.currentSort; - this.root = $.el('div', { - className: 'board json-index' - }); - this.cb.size(); - this.pagelist = $.el('div', { - className: 'pagelist json-index' - }); - $.extend(this.pagelist, { - innerHTML: "
" - }); - $('.cataloglink a', this.pagelist).href = CatalogLinks.catalog(); - $.on(this.pagelist, 'click', this.cb.pageNav); - this.update(true); - $.onExists(doc, 'title + *', function() { - return d.title = d.title.replace(/\ -\ Page\ \d+/, ''); - }); - $.onExists(doc, '.board > .thread > .postContainer, .board + *', function() { - var board, el, len3, len4, ref7, ref8, threadRoot, topNavPos, u, v; - Index.hat = $('.board > .thread > img:first-child'); - if (Index.hat) { - if (Index.nodes) { - ref7 = Index.nodes; - for (u = 0, len3 = ref7.length; u < len3; u++) { - threadRoot = ref7[u]; - $.prepend(threadRoot, Index.hat.cloneNode(false)); - } - } - $.addClass(doc, 'hats-enabled'); - $.addStyle(".catalog-thread::after {background-image: url(" + Index.hat.src + ");}"); - } - board = $('.board'); - $.replace(board, Index.root); - $.event('PostsInserted'); - try { - d.implementation.createDocument(null, null, null).appendChild(board); - } catch (_error) {} - ref8 = $$('.navLinks'); - for (v = 0, len4 = ref8.length; v < len4; v++) { - el = ref8[v]; - $.rm(el); - } - $.rm($.id('ctrl-top')); - topNavPos = $.id('delform').previousElementSibling; - $.before(topNavPos, $.el('hr')); - return $.before(topNavPos, Index.navLinks); - }); - return Main.ready(function() { - var pagelist; - if ((pagelist = $('.pagelist'))) { - $.replace(pagelist, Index.pagelist); - } - return $.rmClass(doc, 'index-loading'); - }); - }, - scroll: function() { - var nodes, pageNum; - if (Index.req || !Index.liveThreadData || Conf['Index Mode'] !== 'infinite' || (window.scrollY <= doc.scrollHeight - (300 + window.innerHeight))) { - return; - } - if (Index.pageNum == null) { - Index.pageNum = Index.currentPage; - } - pageNum = ++Index.pageNum; - if (pageNum > Index.pagesNum) { - return Index.endNotice(); - } - nodes = Index.buildSinglePage(pageNum); - if (Conf['Show Replies']) { - Index.buildReplies(nodes); - } - return Index.buildStructure(nodes); - }, - endNotice: (function() { - var notify, reset; - notify = false; - reset = function() { - return notify = false; - }; - return function() { - if (notify) { - return; - } - notify = true; - new Notice('info', "Last page reached.", 2); - return setTimeout(reset, 3 * $.SECOND); - }; - })(), - menu: { - init: function() { - if (g.VIEW !== 'index' || !Conf['JSON Index'] || !Conf['Menu'] || !Conf['Thread Hiding Link'] || g.BOARD.ID === 'f') { - return; - } - return Menu.menu.addEntry({ - el: $.el('a', { - href: 'javascript:;', - className: 'has-shortcut-text' - }, { - innerHTML: "Shift+click" - }), - order: 20, - open: function(arg) { - var thread; - thread = arg.thread; - if (Conf['Index Mode'] !== 'catalog') { - return false; - } - this.el.firstElementChild.textContent = thread.isHidden ? 'Unhide' : 'Hide'; - if (this.cb) { - $.off(this.el, 'click', this.cb); - } - this.cb = function() { - $.event('CloseMenu'); - return Index.toggleHide(thread); - }; - $.on(this.el, 'click', this.cb); - return true; - } - }); - } - }, - catalogNode: function() { - return $.on(this.nodes.thumb.parentNode, 'click', Index.onClick); - }, - onClick: function(e) { - var thread; - if (e.button !== 0) { - return; - } - thread = g.threads[this.parentNode.dataset.fullID]; - if (e.shiftKey) { - Index.toggleHide(thread); - } else { - return; - } - return e.preventDefault(); - }, - toggleHide: function(thread) { - $.rm(thread.catalogView.nodes.root); - if (Index.showHiddenThreads) { - ThreadHiding.show(thread); - if (!ThreadHiding.db.get({ - boardID: thread.board.ID, - threadID: thread.ID - })) { - return; - } - } else { - ThreadHiding.hide(thread); - } - return ThreadHiding.saveHiddenState(thread); - }, - cycleSortType: function() { - var i, k, len1, type, types; - types = slice.call(Index.selectSort.options).filter(function(option) { - return !option.disabled; - }); - for (i = k = 0, len1 = types.length; k < len1; i = ++k) { - type = types[i]; - if (type.selected) { - break; - } - } - types[(i + 1) % types.length].selected = true; - return $.event('change', null, Index.selectSort); - }, - cb: { - toggleHiddenThreads: function() { - $('#hidden-toggle a', Index.navLinks).textContent = (Index.showHiddenThreads = !Index.showHiddenThreads) ? 'Hide' : 'Show'; - Index.sort(); - return Index.buildIndex(); - }, - mode: function() { - Index.pushState({ - mode: this.value - }); - return Index.pageLoad(false); - }, - sort: function() { - Index.pushState({ - sort: this.value - }); - return Index.pageLoad(false); - }, - resort: function() { - Index.sort(); - return Index.buildIndex(); - }, - perBoardSort: function() { - Conf['Index Sort'] = this.checked ? {} : ''; - return Index.saveSort(); - }, - size: function(e) { - if (Conf['Index Mode'] !== 'catalog') { - $.rmClass(Index.root, 'catalog-small'); - $.rmClass(Index.root, 'catalog-large'); - } else if (Conf['Index Size'] === 'small') { - $.addClass(Index.root, 'catalog-small'); - $.rmClass(Index.root, 'catalog-large'); - } else { - $.addClass(Index.root, 'catalog-large'); - $.rmClass(Index.root, 'catalog-small'); - } - if (e) { - return Index.buildIndex(); - } - }, - replies: function() { - Index.buildThreads(); - Index.sort(); - return Index.buildIndex(); - }, - popstate: function(e) { - var mode, nCommands, page, ref, searched, sort; - if (e != null ? e.state : void 0) { - ref = e.state, searched = ref.searched, mode = ref.mode, sort = ref.sort; - page = Index.getCurrentPage(); - Index.setState({ - search: searched, - mode: mode, - sort: sort, - page: page - }); - return Index.pageLoad(false); - } else { - nCommands = Index.processHash(); - if (Conf['Refreshed Navigation'] && nCommands) { - return Index.update(); - } else { - return Index.pageLoad(); - } - } - }, - pageNav: function(e) { - var a; - if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0) { - return; - } - switch (e.target.nodeName) { - case 'BUTTON': - e.target.blur(); - a = e.target.parentNode; - break; - case 'A': - a = e.target; - break; - default: - return; - } - if (a.textContent === 'Catalog') { - return; - } - e.preventDefault(); - return Index.userPageNav(+a.pathname.split(/\/+/)[2] || 1); - }, - refreshFront: function() { - Index.pushState({ - page: 1 - }); - return Index.update(); - } - }, - scrollToIndex: function() { - return Header.scrollToIfNeeded((Index.navLinks.getBoundingClientRect().height ? Index.navLinks : Index.root)); - }, - getCurrentPage: function() { - return +window.location.pathname.split(/\/+/)[2] || 1; - }, - userPageNav: function(page) { - Index.pushState({ - page: page - }); - if (Conf['Refreshed Navigation']) { - return Index.update(); - } else { - return Index.pageLoad(); - } - }, - hashCommands: { - mode: { - 'paged': 'paged', - 'infinite-scrolling': 'infinite', - 'infinite': 'infinite', - 'all-threads': 'all pages', - 'all-pages': 'all pages', - 'catalog': 'catalog' - }, - sort: { - 'bump-order': 'bump', - 'last-reply': 'lastreply', - 'last-long-reply': 'lastlong', - 'creation-date': 'birth', - 'reply-count': 'replycount', - 'file-count': 'filecount' - } - }, - processHash: function() { - var command, commands, hash, k, leftover, len1, mode, ref, sort, state; - hash = ((ref = location.href.match(/#.*/)) != null ? ref[0] : void 0) || ''; - state = { - replace: true - }; - commands = hash.slice(1).split('/'); - leftover = []; - for (k = 0, len1 = commands.length; k < len1; k++) { - command = commands[k]; - if ((mode = Index.hashCommands.mode[command])) { - state.mode = mode; - } else if (command === 'index') { - state.mode = Conf['Previous Index Mode']; - state.page = 1; - } else if ((sort = Index.hashCommands.sort[command])) { - state.sort = sort; - } else if (/^s=/.test(command)) { - state.search = decodeURIComponent(command.slice(2)).replace(/\+/g, ' ').trim(); - } else { - leftover.push(command); - } - } - hash = leftover.join('/'); - if (hash) { - state.hash = "#" + hash; - } - Index.pushState(state); - return commands.length - leftover.length; - }, - pushState: function(state) { - var hash, pageBeforeSearch, pathname, ref, replace, search; - search = state.search, hash = state.hash, replace = state.replace; - pageBeforeSearch = (ref = history.state) != null ? ref.oldpage : void 0; - if ((search != null) && search !== Index.search) { - state.page = search ? 1 : pageBeforeSearch || 1; - if (!search) { - pageBeforeSearch = void 0; - } else if (!Index.search) { - pageBeforeSearch = Index.currentPage; - } - } - Index.setState(state); - pathname = Index.currentPage === 1 ? "/" + g.BOARD + "/" : "/" + g.BOARD + "/" + Index.currentPage; - hash || (hash = ''); - return history[replace ? 'replaceState' : 'pushState']({ - mode: Conf['Index Mode'], - sort: Index.currentSort, - searched: Index.search, - oldpage: pageBeforeSearch - }, '', location.protocol + "//" + location.host + pathname + hash); - }, - setState: function(arg) { - var hash, mode, page, ref, search, sort; - search = arg.search, mode = arg.mode, sort = arg.sort, page = arg.page, hash = arg.hash; - if ((search != null) && search !== Index.search) { - Index.changed.search = true; - Index.search = search; - } - if ((mode != null) && mode !== Conf['Index Mode']) { - Index.changed.mode = true; - Conf['Index Mode'] = mode; - $.set('Index Mode', mode); - if (!(mode === 'catalog' || Conf['Previous Index Mode'] === mode)) { - Conf['Previous Index Mode'] = mode; - $.set('Previous Index Mode', mode); - } - } - if ((sort != null) && sort !== Index.currentSort) { - Index.changed.sort = true; - Index.currentSort = sort; - Index.saveSort(); - } - if ((ref = Conf['Index Mode']) === 'all pages' || ref === 'catalog') { - page = 1; - } - if ((page != null) && page !== Index.currentPage) { - Index.changed.page = true; - Index.currentPage = page; - } - if (hash != null) { - return Index.changed.hash = true; - } - }, - saveSort: function() { - if (typeof Conf['Index Sort'] === 'object') { - Conf['Index Sort'][g.BOARD.ID] = Index.currentSort; - } else { - Conf['Index Sort'] = Index.currentSort; - } - return $.set('Index Sort', Conf['Index Sort']); - }, - pageLoad: function(scroll) { - var hash, mode, page, ref, search, sort, threads; - if (scroll == null) { - scroll = true; - } - if (!Index.liveThreadData) { - return; - } - ref = Index.changed, threads = ref.threads, search = ref.search, mode = ref.mode, sort = ref.sort, page = ref.page, hash = ref.hash; - if (threads || search || sort) { - Index.sort(); - } - if (threads || search) { - Index.buildPagelist(); - } - if (search) { - Index.setupSearch(); - } - if (mode) { - Index.setupMode(); - } - if (sort) { - Index.setupSort(); - } - if (threads || search || mode || page || sort) { - Index.buildIndex(); - } - if (threads || search || mode || page) { - Index.setPage(); - } - if (scroll && !hash) { - Index.scrollToIndex(); - } - if (hash) { - Header.hashScroll(); - } - return Index.changed = {}; - }, - setupMode: function() { - var k, len1, mode, ref; - ref = ['paged', 'infinite', 'all pages', 'catalog']; - for (k = 0, len1 = ref.length; k < len1; k++) { - mode = ref[k]; - $[mode === Conf['Index Mode'] ? 'addClass' : 'rmClass'](doc, (mode.replace(/\ /g, '-')) + "-mode"); - } - Index.selectMode.value = Conf['Index Mode']; - Index.cb.size(); - Index.showHiddenThreads = false; - return $('#hidden-toggle a', Index.navLinks).textContent = 'Show'; - }, - setupSort: function() { - return Index.selectSort.value = Index.currentSort; - }, - getPagesNum: function() { - if (Index.search) { - return Math.ceil(Index.sortedNodes.length / Index.threadsNumPerPage); - } else { - return Index.pagesNum; - } - }, - getMaxPageNum: function() { - return Math.max(1, Index.getPagesNum()); - }, - buildPagelist: function() { - var a, i, k, maxPageNum, nodes, pagesRoot, ref; - pagesRoot = $('.pages', Index.pagelist); - maxPageNum = Index.getMaxPageNum(); - if (pagesRoot.childElementCount !== maxPageNum) { - nodes = []; - for (i = k = 1, ref = maxPageNum; k <= ref; i = k += 1) { - a = $.el('a', { - textContent: i, - href: i === 1 ? './' : i - }); - nodes.push($.tn('['), a, $.tn('] ')); - } - $.rmAll(pagesRoot); - return $.add(pagesRoot, nodes); - } - }, - setPage: function() { - var a, href, maxPageNum, next, pageNum, pagesRoot, prev, strong; - pageNum = Index.currentPage; - maxPageNum = Index.getMaxPageNum(); - pagesRoot = $('.pages', Index.pagelist); - prev = pagesRoot.previousSibling.firstChild; - next = pagesRoot.nextSibling.firstChild; - href = Math.max(pageNum - 1, 1); - prev.href = href === 1 ? './' : href; - prev.firstChild.disabled = href === pageNum; - href = Math.min(pageNum + 1, maxPageNum); - next.href = href === 1 ? './' : href; - next.firstChild.disabled = href === pageNum; - if (strong = $('strong', pagesRoot)) { - if (+strong.textContent === pageNum) { - return; - } - $.replace(strong, strong.firstChild); - } else { - strong = $.el('strong'); - } - a = pagesRoot.children[pageNum - 1]; - $.before(a, strong); - return $.add(strong, a); - }, - updateHideLabel: function() { - var hiddenCount, ref, ref1, thread, threadID; - hiddenCount = 0; - ref = g.BOARD.threads; - for (threadID in ref) { - thread = ref[threadID]; - if (thread.isHidden) { - if (ref1 = thread.ID, indexOf.call(Index.liveThreadIDs, ref1) >= 0) { - hiddenCount++; - } - } - } - if (!hiddenCount) { - Index.hideLabel.hidden = true; - if (Index.showHiddenThreads) { - Index.cb.toggleHiddenThreads(); - } - return; - } - Index.hideLabel.hidden = false; - return $('#hidden-count', Index.navLinks).textContent = hiddenCount === 1 ? '1 hidden thread' : hiddenCount + " hidden threads"; - }, - update: function(firstTime) { - var now, ref, ref1; - if ((ref = Index.req) != null) { - ref.abort(); - } - if ((ref1 = Index.notice) != null) { - ref1.close(); - } - if (Conf['Index Refresh Notifications'] && d.readyState !== 'loading') { - Index.notice = new Notice('info', 'Refreshing index...'); - } else { - now = Date.now(); - $.ready(function() { - return Index.nTimeout = setTimeout((function() { - if (Index.req && !Index.notice) { - return Index.notice = new Notice('info', 'Refreshing index...'); - } - }), 3 * $.SECOND - (Date.now() - now)); - }); - } - if (!firstTime && d.readyState !== 'loading' && !$('.board + *')) { - location.reload(); - return; - } - Index.req = $.ajax("//a.4cdn.org/" + g.BOARD + "/catalog.json", { - onabort: Index.load, - onloadend: Index.load - }, { - whenModified: 'Index' - }); - return $.addClass(Index.button, 'fa-spin'); - }, - load: function(e) { - var err, nTimeout, notice, ref, req, timeEl; - $.rmClass(Index.button, 'fa-spin'); - req = Index.req, notice = Index.notice, nTimeout = Index.nTimeout; - if (nTimeout) { - clearTimeout(nTimeout); - } - delete Index.nTimeout; - delete Index.req; - delete Index.notice; - if (e.type === 'abort') { - req.onloadend = null; - if (notice != null) { - notice.close(); - } - return; - } - if ((ref = req.status) !== 200 && ref !== 304) { - err = "Index refresh failed. Error " + req.statusText + " (" + req.status + ")"; - if (notice) { - notice.setType('warning'); - notice.el.lastElementChild.textContent = err; - setTimeout(notice.close, $.SECOND); - } else { - new Notice('warning', err, 1); - } - return; - } - try { - if (req.status === 200) { - Index.parse(req.response); - } else if (req.status === 304) { - Index.pageLoad(); - } - } catch (_error) { - err = _error; - c.error("Index failure: " + err.message, err.stack); - if (notice) { - notice.setType('error'); - notice.el.lastElementChild.textContent = 'Index refresh failed.'; - setTimeout(notice.close, $.SECOND); - } else { - new Notice('error', 'Index refresh failed.', 1); - } - return; - } - if (notice) { - if (Conf['Index Refresh Notifications']) { - notice.setType('success'); - notice.el.lastElementChild.textContent = 'Index refreshed!'; - setTimeout(notice.close, $.SECOND); - } else { - notice.close(); - } - } - timeEl = $('#index-last-refresh time', Index.navLinks); - timeEl.dataset.utc = Date.parse(req.getResponseHeader('Last-Modified')); - return RelativeDates.update(timeEl); - }, - parse: function(pages) { - $.cleanCache(function(url) { - return /^\/\/a\.4cdn\.org\//.test(url); - }); - Index.parseThreadList(pages); - Index.buildThreads(); - Index.changed.threads = true; - return Index.pageLoad(); - }, - parseThreadList: function(pages) { - var ref; - Index.pagesNum = pages.length; - Index.threadsNumPerPage = ((ref = pages[0]) != null ? ref.threads.length : void 0) || 1; - Index.liveThreadData = pages.reduce((function(arr, next) { - return arr.concat(next.threads); - }), []); - Index.liveThreadIDs = Index.liveThreadData.map(function(data) { - return data.no; - }); - g.BOARD.threads.forEach(function(thread) { - var ref1; - if (ref1 = thread.ID, indexOf.call(Index.liveThreadIDs, ref1) < 0) { - return thread.collect(); - } - }); - }, - buildThreads: function() { - var err, errors, i, k, len1, posts, ref, thread, threadData, threadRoot, threads; - if (!Index.liveThreadData) { - return; - } - Index.nodes = []; - threads = []; - posts = []; - ref = Index.liveThreadData; - for (i = k = 0, len1 = ref.length; k < len1; i = ++k) { - threadData = ref[i]; - try { - threadRoot = Build.thread(g.BOARD, threadData); - if (Index.hat) { - $.prepend(threadRoot, Index.hat.cloneNode(false)); - } - if (thread = g.BOARD.threads[threadData.no]) { - thread.setCount('post', threadData.replies + 1, threadData.bumplimit); - thread.setCount('file', threadData.images + !!threadData.ext, threadData.imagelimit); - thread.setStatus('Sticky', !!threadData.sticky); - thread.setStatus('Closed', !!threadData.closed); - } else { - thread = new Thread(threadData.no, g.BOARD); - threads.push(thread); - } - Index.nodes.push(threadRoot); - if (!(thread.OP && !thread.OP.isFetchedQuote)) { - posts.push(new Post($('.opContainer', threadRoot), thread, g.BOARD)); - } - thread.setPage(Math.floor(i / Index.threadsNumPerPage) + 1); - } catch (_error) { - err = _error; - if (!errors) { - errors = []; - } - errors.push({ - message: "Parsing of Thread No." + thread + " failed. Thread will be skipped.", - error: err - }); - } - } - if (errors) { - Main.handleErrors(errors); - } - $.nodes(Index.nodes); - Main.callbackNodes(Thread, threads); - Main.callbackNodes(Post, posts); - Index.updateHideLabel(); - return $.event('IndexRefresh'); - }, - buildReplies: function(threadRoots) { - var data, err, errors, i, k, lastReplies, len1, len2, node, nodes, post, posts, q, thread, threadRoot; - posts = []; - for (k = 0, len1 = threadRoots.length; k < len1; k++) { - threadRoot = threadRoots[k]; - thread = Get.threadFromRoot(threadRoot); - i = Index.liveThreadIDs.indexOf(thread.ID); - if (!(lastReplies = Index.liveThreadData[i].last_replies)) { - continue; - } - nodes = []; - for (q = 0, len2 = lastReplies.length; q < len2; q++) { - data = lastReplies[q]; - if ((post = thread.posts[data.no]) && !post.isFetchedQuote) { - nodes.push(post.nodes.root); - continue; - } - nodes.push(node = Build.postFromObject(data, thread.board.ID)); - try { - posts.push(new Post(node, thread, thread.board)); - } catch (_error) { - err = _error; - if (!errors) { - errors = []; - } - errors.push({ - message: "Parsing of Post No." + data.no + " failed. Post will be skipped.", - error: err - }); - } - } - $.add(threadRoot, nodes); - } - if (errors) { - Main.handleErrors(errors); - } - return Main.callbackNodes(Post, posts); - }, - buildCatalogViews: function() { - var catalogThreads, k, len1, thread, threads; - threads = Index.sortedNodes.map(function(threadRoot) { - return Get.threadFromRoot(threadRoot); - }).filter(function(thread) { - return !thread.isHidden !== Index.showHiddenThreads; - }); - catalogThreads = []; - for (k = 0, len1 = threads.length; k < len1; k++) { - thread = threads[k]; - if (!thread.catalogView) { - catalogThreads.push(new CatalogThread(Build.catalogThread(thread), thread)); - } - } - Main.callbackNodes(CatalogThread, catalogThreads); - return threads.map(function(thread) { - return thread.catalogView.nodes.root; - }); - }, - sizeCatalogViews: function(nodes) { - var height, k, len1, node, ratio, ref, size, thumb, width; - size = Conf['Index Size'] === 'small' ? 150 : 250; - for (k = 0, len1 = nodes.length; k < len1; k++) { - node = nodes[k]; - thumb = $('.catalog-thumb', node); - ref = thumb.dataset, width = ref.width, height = ref.height; - if (!width) { - continue; - } - ratio = size / Math.max(width, height); - thumb.style.width = width * ratio + 'px'; - thumb.style.height = height * ratio + 'px'; - } - }, - sort: function() { - var k, lastlong, len1, liveThreadData, liveThreadIDs, nodes, sortedNodes, sortedThreadIDs, threadID; - liveThreadIDs = Index.liveThreadIDs, liveThreadData = Index.liveThreadData; - if (!liveThreadData) { - return; - } - sortedThreadIDs = (function() { - switch (Index.currentSort) { - case 'lastreply': - return slice.call(liveThreadData).sort(function(a, b) { - var num; - if ((num = a.last_replies)) { - a = num[num.length - 1]; - } - if ((num = b.last_replies)) { - b = num[num.length - 1]; - } - return b.no - a.no; - }).map(function(post) { - return post.no; - }); - case 'lastlong': - lastlong = function(thread) { - var i, k, r, ref; - ref = thread.last_replies || []; - for (i = k = ref.length - 1; k >= 0; i = k += -1) { - r = ref[i]; - if (r.com && Build.parseComment(r.com).replace(/[^a-z]/ig, '').length >= 100) { - return r; - } - } - return thread; - }; - return slice.call(liveThreadData).sort(function(a, b) { - return lastlong(b).no - lastlong(a).no; - }).map(function(post) { - return post.no; - }); - case 'bump': - return liveThreadIDs; - case 'birth': - return slice.call(liveThreadIDs).sort(function(a, b) { - return b - a; - }); - case 'replycount': - return slice.call(liveThreadData).sort(function(a, b) { - return b.replies - a.replies; - }).map(function(post) { - return post.no; - }); - case 'filecount': - return slice.call(liveThreadData).sort(function(a, b) { - return b.images - a.images; - }).map(function(post) { - return post.no; - }); - } - })(); - Index.sortedNodes = sortedNodes = []; - nodes = Index.nodes; - for (k = 0, len1 = sortedThreadIDs.length; k < len1; k++) { - threadID = sortedThreadIDs[k]; - sortedNodes.push(nodes[Index.liveThreadIDs.indexOf(threadID)]); - } - if (Index.search && (nodes = Index.querySearch(Index.search))) { - Index.sortedNodes = nodes; - } - Index.sortOnTop(function(thread) { - return thread.isSticky; - }); - Index.sortOnTop(function(thread) { - return thread.isOnTop || Conf['Pin Watched Threads'] && ThreadWatcher.isWatched(thread); - }); - if (Conf['Anchor Hidden Threads']) { - return Index.sortOnTop(function(thread) { - return !thread.isHidden; - }); - } - }, - sortOnTop: function(match) { - var bottomNodes, k, len1, ref, threadRoot, topNodes; - topNodes = []; - bottomNodes = []; - ref = Index.sortedNodes; - for (k = 0, len1 = ref.length; k < len1; k++) { - threadRoot = ref[k]; - (match(Get.threadFromRoot(threadRoot)) ? topNodes : bottomNodes).push(threadRoot); - } - return Index.sortedNodes = topNodes.concat(bottomNodes); - }, - buildIndex: function() { - var i, nodes, page, post; - if (!Index.liveThreadData) { - return; - } - switch (Conf['Index Mode']) { - case 'all pages': - nodes = Index.sortedNodes; - break; - case 'catalog': - nodes = Index.buildCatalogViews(); - Index.sizeCatalogViews(nodes); - break; - default: - if (Index.followedThreadID != null) { - i = 0; - while (Index.followedThreadID !== Get.threadFromRoot(Index.sortedNodes[i]).ID) { - i++; - } - page = Math.floor(i / Index.threadsNumPerPage) + 1; - if (page !== Index.currentPage) { - Index.currentPage = page; - Index.pushState({ - page: page - }); - Index.setPage(); - } - } - nodes = Index.buildSinglePage(Index.currentPage); - } - delete Index.pageNum; - $.rmAll(Index.root); - $.rmAll(Header.hover); - if (Conf['Index Mode'] === 'catalog') { - return $.add(Index.root, nodes); - } else { - if (Conf['Show Replies']) { - Index.buildReplies(nodes); - } - Index.buildStructure(nodes); - if ((Index.followedThreadID != null) && (post = g.posts[g.BOARD + "." + Index.followedThreadID])) { - return Header.scrollTo(post.nodes.root); - } - } - }, - buildSinglePage: function(pageNum) { - var nodesPerPage, offset; - nodesPerPage = Index.threadsNumPerPage; - offset = nodesPerPage * (pageNum - 1); - return Index.sortedNodes.slice(offset, offset + nodesPerPage); - }, - buildStructure: function(nodes) { - var k, len1, node, thumb; - for (k = 0, len1 = nodes.length; k < len1; k++) { - node = nodes[k]; - if (thumb = $('img[data-src]', node)) { - thumb.src = thumb.dataset.src; - thumb.removeAttribute('data-src'); - } - $.add(Index.root, [node, $.el('hr')]); - } - if (doc.contains(Index.root)) { - $.event('PostsInserted'); - } - return ThreadHiding.onIndexBuild(nodes); - }, - clearSearch: function() { - Index.searchInput.value = ''; - Index.onSearchInput(); - return Index.searchInput.focus(); - }, - setupSearch: function() { - Index.searchInput.value = Index.search; - if (Index.search) { - return Index.searchInput.dataset.searching = 1; - } else { - return Index.searchInput.removeAttribute('data-searching'); - } - }, - onSearchInput: function() { - var search; - search = Index.searchInput.value.trim(); - if (search === Index.search) { - return; - } - Index.pushState({ - search: search, - replace: !!search === !!Index.search - }); - return Index.pageLoad(false); - }, - querySearch: function(query) { - var keywords; - if (!(keywords = query.toLowerCase().match(/\S+/g))) { - return; - } - return Index.sortedNodes.filter(function(threadRoot) { - return Index.searchMatch(Get.threadFromRoot(threadRoot), keywords); - }); - }, - searchMatch: function(thread, keywords) { - var file, info, k, key, keyword, len1, len2, q, ref, ref1, text; - ref = thread.OP, info = ref.info, file = ref.file; - text = []; - ref1 = ['comment', 'subject', 'name', 'tripcode', 'email']; - for (k = 0, len1 = ref1.length; k < len1; k++) { - key = ref1[k]; - if (key in info) { - text.push(info[key]); - } - } - if (file) { - text.push(file.name); - } - text = text.join(' ').toLowerCase(); - for (q = 0, len2 = keywords.length; q < len2; q++) { - keyword = keywords[q]; - if (-1 === text.indexOf(keyword)) { - return false; - } - } - return true; - } - }; - - Build = { - staticPath: '//s.4cdn.org/image/', - gifIcon: window.devicePixelRatio >= 2 ? '@2x.gif' : '.gif', - spoilerRange: {}, - unescape: function(text) { - if (text == null) { - return text; - } - return text.replace(/<[^>]*>/g, '').replace(/&(amp|#039|quot|lt|gt|#44);/g, function(c) { - return { - '&': '&', - ''': "'", - '"': '"', - '<': '<', - '>': '>', - ',': ',' - }[c]; - }); - }, - shortFilename: function(filename) { - var ext, threshold; - threshold = 30; - ext = filename.match(/\.?[^\.]*$/)[0]; - if (filename.length - ext.length > threshold) { - return filename.slice(0, threshold - 5) + "(...)" + ext; - } else { - return filename; - } - }, - spoilerThumb: function(boardID) { - var spoilerRange; - if (spoilerRange = Build.spoilerRange[boardID]) { - return Build.staticPath + "spoiler-" + boardID + (Math.floor(1 + spoilerRange * Math.random())) + ".png"; - } else { - return Build.staticPath + "spoiler.png"; - } - }, - sameThread: function(boardID, threadID) { - return g.VIEW === 'thread' && g.BOARD.ID === boardID && g.THREADID === +threadID; - }, - postURL: function(boardID, threadID, postID) { - if (Build.sameThread(boardID, threadID)) { - return "#p" + postID; - } else { - return "/" + boardID + "/thread/" + threadID + "#p" + postID; - } - }, - parseJSON: function(data, boardID) { - var o; - o = { - postID: data.no, - threadID: data.resto || data.no, - boardID: boardID, - isReply: !!data.resto, - isSticky: !!data.sticky, - isClosed: !!data.closed, - isArchived: !!data.archived, - fileDeleted: !!data.filedeleted - }; - o.info = { - subject: Build.unescape(data.sub), - email: Build.unescape(data.email), - name: Build.unescape(data.name) || '', - tripcode: data.trip, - uniqueID: data.id, - flagCode: data.country, - flag: Build.unescape(data.country_name), - dateUTC: data.time, - dateText: data.now, - commentHTML: { - innerHTML: data.com || '' - } - }; - if (data.capcode) { - o.info.capcode = data.capcode.replace(/_highlight$/, '').replace(/_/g, ' ').replace(/\b\w/g, function(c) { - return c.toUpperCase(); - }); - o.capcodeHighlight = /_highlight$/.test(data.capcode); - delete o.info.uniqueID; - } - if (data.ext) { - o.file = { - name: (Build.unescape(data.filename)) + data.ext, - url: boardID === 'f' ? location.protocol + "//i.4cdn.org/" + boardID + "/" + (encodeURIComponent(data.filename)) + data.ext : location.protocol + "//i.4cdn.org/" + boardID + "/" + data.tim + data.ext, - height: data.h, - width: data.w, - MD5: data.md5, - size: $.bytesToString(data.fsize), - thumbURL: location.protocol + "//i.4cdn.org/" + boardID + "/" + data.tim + "s.jpg", - theight: data.tn_h, - twidth: data.tn_w, - isSpoiler: !!data.spoiler, - tag: data.tag - }; - if (!/\.pdf$/.test(o.file.url)) { - o.file.dimensions = o.file.width + "x" + o.file.height; - } - } - return o; - }, - parseComment: function(html) { - html = html.replace(//gi, '\n').replace(/\n\nRolled [^<]*<\/b>/i, '').replace(/]*>/g, ''); - return Build.unescape(html); - }, - postFromObject: function(data, boardID, suppressThumb) { - var o; - o = Build.parseJSON(data, boardID); - return Build.post(o, suppressThumb); - }, - post: function(o, suppressThumb) { - var boardID, capcode, capcodeDescription, capcodeLC, capcodeLong, capcodePlural, commentHTML, container, dateText, dateUTC, email, file, fileBlock, fileThumb, fileURL, flag, flagCode, gifIcon, href, k, len1, match, name, postClass, postID, postInfo, postLink, protocol, quote, quoteLink, ref, ref1, shortFilename, staticPath, subject, threadID, tripcode, uniqueID, wholePost; - postID = o.postID, threadID = o.threadID, boardID = o.boardID, file = o.file; - ref = o.info, subject = ref.subject, email = ref.email, name = ref.name, tripcode = ref.tripcode, capcode = ref.capcode, uniqueID = ref.uniqueID, flagCode = ref.flagCode, flag = ref.flag, dateUTC = ref.dateUTC, dateText = ref.dateText, commentHTML = ref.commentHTML; - staticPath = Build.staticPath, gifIcon = Build.gifIcon; - - /* Post Info */ - if (capcode) { - capcodeLC = capcode.toLowerCase(); - if (capcode === 'Founder') { - capcodePlural = 'the Founder'; - capcodeDescription = "4chan's Founder"; - } else { - capcodeLong = { - 'Admin': 'Administrator', - 'Mod': 'Moderator' - }[capcode] || capcode; - capcodePlural = capcodeLong + "s"; - capcodeDescription = "a 4chan " + capcodeLong; - } - } - postLink = Build.postURL(boardID, threadID, postID); - quoteLink = Build.sameThread(boardID, threadID) ? "javascript:quote('" + (+postID) + "');" : "/" + boardID + "/thread/" + threadID + "#q" + postID; - postInfo = { - innerHTML: "
" + (!o.isReply || boardID === "f" || subject ? "" + E(subject || "") + " " : "") + "" + (email ? "" : "") + "" + E(name) + "" + (tripcode ? " " + E(tripcode) + "" : "") + (capcode ? " ## " + E(capcode) + "" : "") + (email ? "" : "") + (boardID === "f" && !o.isReply || capcode ? "" : " ") + (capcode ? " \""" : "") + (uniqueID && !capcode ? " (ID: " + E(uniqueID) + ")" : "") + (flagCode ? " " : "") + " " + E(dateText) + " No." + E(postID) + "" + (o.isSticky ? " \"Sticky\"" : "") + (o.isClosed && !o.isArchived ? " \"Closed\"" : "") + (o.isArchived ? " \"Archived\"" : "") + (!o.isReply && g.VIEW === "index" ? "   [Reply]" : "") + "
" - }; - - /* File Info */ - if (file) { - protocol = /^https?:(?=\/\/i\.4cdn\.org\/)/; - fileURL = file.url.replace(protocol, ''); - shortFilename = Build.shortFilename(file.name); - fileThumb = file.isSpoiler ? Build.spoilerThumb(boardID) : file.thumbURL.replace(protocol, ''); - } - fileBlock = { - innerHTML: (file ? "
" + (boardID === "f" ? "
File: " + E(file.name) + "-(" + E(file.size) + ", " + E(file.dimensions) + (file.tag ? ", " + E(file.tag) : "") + ")
" : "
File: " + (file.isSpoiler ? "Spoiler Image" : E(shortFilename)) + " (" + E(file.size) + ", " + E(file.dimensions || "PDF") + ")
") + "
" : (o.fileDeleted ? "
\"File
" : "")) - }; - - /* Whole Post */ - postClass = o.isReply ? 'reply' : 'op'; - wholePost = { - innerHTML: (o.isReply ? "
>>
" : "") + "
" + (o.isReply ? postInfo.innerHTML + fileBlock.innerHTML : fileBlock.innerHTML + postInfo.innerHTML) + "
" + commentHTML.innerHTML + "
" - }; - container = $.el('div', { - className: "postContainer " + postClass + "Container", - id: "pc" + postID - }); - $.extend(container, wholePost); - ref1 = $$('.quotelink', container); - for (k = 0, len1 = ref1.length; k < len1; k++) { - quote = ref1[k]; - href = quote.getAttribute('href'); - if ((href[0] === '#') && !(Build.sameThread(boardID, threadID))) { - quote.href = ("/" + boardID + "/thread/" + threadID) + href; - } else if ((match = href.match(/^\/([^\/]+)\/thread\/(\d+)/)) && (Build.sameThread(match[1], match[2]))) { - quote.href = href.match(/(#[^#]*)?$/)[0] || '#'; - } else if (/^\d+(#|$)/.test(href) && !(g.VIEW === 'thread' && g.BOARD.ID === boardID)) { - quote.href = "/" + boardID + "/thread/" + href; - } - } - return container; - }, - summaryText: function(status, posts, files) { - var text; - text = ''; - if (status) { - text += status + " "; - } - text += posts + " post" + (posts > 1 ? 's' : ''); - if (+files) { - text += " and " + files + " image repl" + (files > 1 ? 'ies' : 'y'); - } - return text += " " + (status === '-' ? 'shown' : 'omitted') + "."; - }, - summary: function(boardID, threadID, posts, files) { - return $.el('a', { - className: 'summary', - textContent: Build.summaryText('', posts, files), - href: "/" + boardID + "/thread/" + threadID - }); - }, - thread: function(board, data, full) { - var OP, root; - Build.spoilerRange[board] = data.custom_spoiler; - if (OP = board.posts[data.no]) { - if (OP.isFetchedQuote) { - OP = null; - } - } - if (OP && (root = OP.nodes.root.parentNode)) { - $.rmAll(root); - } else { - root = $.el('div', { - className: 'thread', - id: "t" + data.no - }); - } - $.add(root, Build[full ? 'fullThread' : 'excerptThread'](board, data, OP)); - return root; - }, - excerptThread: function(board, data, OP) { - var files, nodes, posts, ref; - nodes = [OP ? OP.nodes.root : Build.postFromObject(data, board.ID, true)]; - if (data.omitted_posts || !Conf['Show Replies'] && data.replies) { - ref = Conf['Show Replies'] ? [ - data.omitted_posts, data.images - data.last_replies.filter(function(data) { - return !!data.ext; - }).length - ] : [data.replies, data.images], posts = ref[0], files = ref[1]; - nodes.push(Build.summary(board.ID, data.no, posts, files)); - } - return nodes; - }, - fullThread: function(board, data) { - return Build.postFromObject(data, board.ID); - }, - catalogThread: function(thread) { - var br, cc, comment, data, exif, fileCount, gifIcon, href, imgClass, k, len1, len2, len3, len4, pageCount, postCount, pp, q, quote, ref, ref1, ref2, ref3, ref4, root, spoilerRange, src, staticPath, u, v; - staticPath = Build.staticPath, gifIcon = Build.gifIcon; - data = Index.liveThreadData[Index.liveThreadIDs.indexOf(thread.ID)]; - if (data.spoiler && !Conf['Reveal Spoiler Thumbnails']) { - src = staticPath + "spoiler"; - if (spoilerRange = Build.spoilerRange[thread.board]) { - src += ("-" + thread.board) + Math.floor(1 + spoilerRange * Math.random()); - } - src += '.png'; - imgClass = 'spoiler-file'; - } else if (data.filedeleted) { - src = staticPath + "filedeleted-res" + gifIcon; - imgClass = 'deleted-file'; - } else if (thread.OP.file) { - src = thread.OP.file.thumbURL; - } else { - src = staticPath + "nofile.png"; - imgClass = 'no-file'; - } - postCount = data.replies + 1; - fileCount = data.images + !!data.ext; - pageCount = Math.floor(Index.liveThreadIDs.indexOf(thread.ID) / Index.threadsNumPerPage) + 1; - comment = { - innerHTML: data.com || '' - }; - root = $.el('div', { - className: 'catalog-thread' - }); - $.extend(root, { - innerHTML: "
" + E(postCount) + " / " + E(fileCount) + " / " + E(pageCount) + "
" + (thread.OP.info.subject ? "
" + E(thread.OP.info.subject) + "
" : "") + "
" + comment.innerHTML + "
" - }); - root.dataset.fullID = thread.fullID; - if (thread.OP.highlights) { - $.addClass.apply($, [root].concat(slice.call(thread.OP.highlights))); - } - ref = $$('.quotelink', root.lastElementChild); - for (k = 0, len1 = ref.length; k < len1; k++) { - quote = ref[k]; - href = quote.getAttribute('href'); - if (href[0] === '#') { - quote.href = ("/" + thread.board + "/thread/" + thread.ID) + href; - } - } - ref1 = $$('.abbr, .exif', root.lastElementChild); - for (q = 0, len2 = ref1.length; q < len2; q++) { - exif = ref1[q]; - $.rm(exif); - } - ref2 = $$('.prettyprint', root.lastElementChild); - for (u = 0, len3 = ref2.length; u < len3; u++) { - pp = ref2[u]; - cc = $.el('span', { - className: 'catalog-code' - }); - $.add(cc, slice.call(pp.childNodes)); - $.replace(pp, cc); - } - ref3 = $$('br', root.lastElementChild); - for (v = 0, len4 = ref3.length; v < len4; v++) { - br = ref3[v]; - if (((ref4 = br.previousSibling) != null ? ref4.nodeName : void 0) === 'BR') { - $.rm(br); - } - } - if (thread.isSticky) { - $.add($('.catalog-icons', root), $.el('img', { - src: staticPath + "sticky" + gifIcon, - className: 'stickyIcon', - title: 'Sticky' - })); - } - if (thread.isClosed) { - $.add($('.catalog-icons', root), $.el('img', { - src: staticPath + "closed" + gifIcon, - className: 'closedIcon', - title: 'Closed' - })); - } - if (data.bumplimit) { - $.addClass($('.post-count', root), 'warning'); - } - if (data.imagelimit) { - $.addClass($('.file-count', root), 'warning'); - } - return root; - } - }; - - Get = { - threadExcerpt: function(thread) { - var OP, excerpt, ref; - OP = thread.OP; - excerpt = ("/" + thread.board + "/ - ") + (((ref = OP.info.subject) != null ? ref.trim() : void 0) || OP.info.commentDisplay.replace(/\n+/g, ' // ') || OP.info.nameBlock); - if (excerpt.length > 73) { - return excerpt.slice(0, 70) + "..."; - } - return excerpt; - }, - threadFromRoot: function(root) { - return g.threads[g.BOARD + "." + root.id.slice(1)]; - }, - threadFromNode: function(node) { - return Get.threadFromRoot($.x('ancestor::div[@class="thread"]', node)); - }, - postFromRoot: function(root) { - var index, post; - if (root == null) { - return null; - } - post = g.posts[root.dataset.fullID]; - index = root.dataset.clone; - if (index) { - return post.clones[index]; - } else { - return post; - } - }, - postFromNode: function(root) { - return Get.postFromRoot($.x('(ancestor::div[contains(@class,"postContainer")][1]|following::div[contains(@class,"postContainer")][1])', root)); - }, - postDataFromLink: function(link) { - var boardID, path, postID, ref, threadID; - if (link.hostname === 'boards.4chan.org') { - path = link.pathname.split(/\/+/); - boardID = path[1]; - threadID = path[3]; - postID = link.hash.slice(2); - } else { - ref = link.dataset, boardID = ref.boardID, threadID = ref.threadID, postID = ref.postID; - threadID || (threadID = 0); - } - return { - boardID: boardID, - threadID: +threadID, - postID: +postID - }; - }, - allQuotelinksLinkingTo: function(post) { - var fullID, handleQuotes, k, len1, posts, qPost, quote, quotelinks, ref; - quotelinks = []; - posts = g.posts; - fullID = post.fullID; - handleQuotes = function(qPost, type) { - var clone, k, len1, ref; - quotelinks.push.apply(quotelinks, qPost.nodes[type]); - ref = qPost.clones; - for (k = 0, len1 = ref.length; k < len1; k++) { - clone = ref[k]; - quotelinks.push.apply(quotelinks, clone.nodes[type]); - } - }; - posts.forEach(function(qPost) { - if (indexOf.call(qPost.quotes, fullID) >= 0) { - return handleQuotes(qPost, 'quotelinks'); - } - }); - if (Conf['Quote Backlinks']) { - ref = post.quotes; - for (k = 0, len1 = ref.length; k < len1; k++) { - quote = ref[k]; - if (qPost = posts[quote]) { - handleQuotes(qPost, 'backlinks'); - } - } - } - return quotelinks.filter(function(quotelink) { - var boardID, postID, ref1; - ref1 = Get.postDataFromLink(quotelink), boardID = ref1.boardID, postID = ref1.postID; - return boardID === post.board.ID && postID === post.ID; - }); - }, - scriptData: function() { - var k, len1, ref, script; - ref = $$('script:not([src])', d.head); - for (k = 0, len1 = ref.length; k < len1; k++) { - script = ref[k]; - if (/\bcooldowns *=/.test(script.textContent)) { - return script.textContent; - } - } - return ''; - } - }; - - UI = (function() { - var Menu, checkbox, dialog, drag, dragend, dragstart, hover, hoverend, hoverstart, touchend, touchmove; - dialog = function(id, position, properties) { - var child, el, k, len1, move, ref; - el = $.el('div', { - className: 'dialog', - id: id - }); - $.extend(el, properties); - el.style.cssText = position; - $.get(id + ".position", position, function(item) { - return el.style.cssText = item[id + ".position"]; - }); - move = $('.move', el); - $.on(move, 'touchstart mousedown', dragstart); - ref = move.children; - for (k = 0, len1 = ref.length; k < len1; k++) { - child = ref[k]; - if (!child.tagName) { - continue; - } - $.on(child, 'touchstart mousedown', function(e) { - return e.stopPropagation(); - }); - } - return el; - }; - Menu = (function() { - var currentMenu, lastToggledButton; - - currentMenu = null; - - lastToggledButton = null; - - function Menu(type1) { - this.type = type1; - this.addEntry = bind(this.addEntry, this); - this.onFocus = bind(this.onFocus, this); - this.keybinds = bind(this.keybinds, this); - this.close = bind(this.close, this); - $.on(d, 'AddMenuEntry', (function(_this) { - return function(arg) { - var detail; - detail = arg.detail; - if (detail.type !== _this.type) { - return; - } - delete detail.open; - return _this.addEntry(detail); - }; - })(this)); - this.entries = []; - } - - Menu.prototype.makeMenu = function() { - var menu; - menu = $.el('div', { - className: 'dialog', - id: 'menu', - tabIndex: 0 - }); - $.on(menu, 'click', function(e) { - return e.stopPropagation(); - }); - $.on(menu, 'keydown', this.keybinds); - return menu; - }; - - Menu.prototype.toggle = function(e, button, data) { - var previousButton; - e.preventDefault(); - e.stopPropagation(); - if (currentMenu) { - previousButton = lastToggledButton; - currentMenu.close(); - if (previousButton === button) { - return; - } - } - if (!this.entries.length) { - return; - } - return this.open(button, data); - }; - - Menu.prototype.open = function(button, data) { - var bLeft, bRect, bTop, bottom, cHeight, cWidth, entry, k, left, len1, mRect, menu, ref, ref1, ref2, right, style, top; - menu = this.menu = this.makeMenu(); - currentMenu = this; - lastToggledButton = button; - this.entries.sort(function(first, second) { - return first.order - second.order; - }); - ref = this.entries; - for (k = 0, len1 = ref.length; k < len1; k++) { - entry = ref[k]; - this.insertEntry(entry, menu, data); - } - $.addClass(lastToggledButton, 'active'); - $.on(d, 'click CloseMenu', this.close); - if (this.type !== 'gallery') { - $.on(d, 'scroll', this.close); - } - $.add(button, menu); - mRect = menu.getBoundingClientRect(); - bRect = button.getBoundingClientRect(); - bTop = window.scrollY + bRect.top; - bLeft = window.scrollX + bRect.left; - cHeight = doc.clientHeight; - cWidth = doc.clientWidth; - ref1 = bRect.top + bRect.height + mRect.height < cHeight ? [bRect.bottom, null] : [null, cHeight - bRect.top], top = ref1[0], bottom = ref1[1]; - ref2 = bRect.left + mRect.width < cWidth ? [bRect.left, null] : [null, cWidth - bRect.right], left = ref2[0], right = ref2[1]; - style = menu.style; - style.top = top + "px"; - style.right = right + "px"; - style.bottom = bottom + "px"; - style.left = left + "px"; - if (right) { - $.addClass(menu, 'left'); - } - entry = $('.entry', menu); - this.focus(entry); - return menu.focus(); - }; - - Menu.prototype.insertEntry = function(entry, parent, data) { - var err, k, len1, ref, subEntry, submenu; - if (typeof entry.open === 'function') { - try { - if (!entry.open(data)) { - return; - } - } catch (_error) { - err = _error; - Main.handleErrors({ - message: "Error in building the " + this.type + " menu.", - error: err - }); - return; - } - } - $.add(parent, entry.el); - if (!entry.subEntries) { - return; - } - if (submenu = $('.submenu', entry.el)) { - $.rm(submenu); - } - submenu = $.el('div', { - className: 'dialog submenu' - }); - ref = entry.subEntries; - for (k = 0, len1 = ref.length; k < len1; k++) { - subEntry = ref[k]; - this.insertEntry(subEntry, submenu, data); - } - $.add(entry.el, submenu); - }; - - Menu.prototype.close = function() { - $.rm(this.menu); - delete this.menu; - $.rmClass(lastToggledButton, 'active'); - currentMenu = null; - lastToggledButton = null; - return $.off(d, 'click scroll CloseMenu', this.close); - }; - - Menu.prototype.findNextEntry = function(entry, direction) { - var entries; - entries = slice.call(entry.parentNode.children); - entries.sort(function(first, second) { - return first.style.order - second.style.order; - }); - return entries[entries.indexOf(entry) + direction]; - }; - - Menu.prototype.keybinds = function(e) { - var entry, next, nextPrev, subEntry, submenu; - entry = $('.focused', this.menu); - while (subEntry = $('.focused', entry)) { - entry = subEntry; - } - switch (e.keyCode) { - case 27: - lastToggledButton.focus(); - this.close(); - break; - case 13: - case 32: - entry.click(); - break; - case 38: - if (next = this.findNextEntry(entry, -1)) { - this.focus(next); - } - break; - case 40: - if (next = this.findNextEntry(entry, +1)) { - this.focus(next); - } - break; - case 39: - if ((submenu = $('.submenu', entry)) && (next = submenu.firstElementChild)) { - while (nextPrev = this.findNextEntry(next, -1)) { - next = nextPrev; - } - this.focus(next); - } - break; - case 37: - if (next = $.x('parent::*[contains(@class,"submenu")]/parent::*', entry)) { - this.focus(next); - } - break; - default: - return; - } - e.preventDefault(); - return e.stopPropagation(); - }; - - Menu.prototype.onFocus = function(e) { - e.stopPropagation(); - return this.focus(e.target); - }; - - Menu.prototype.focus = function(entry) { - var bottom, cHeight, cWidth, eRect, focused, k, left, len1, ref, ref1, ref2, right, sRect, style, submenu, top; - while (focused = $.x('parent::*/child::*[contains(@class,"focused")]', entry)) { - $.rmClass(focused, 'focused'); - } - ref = $$('.focused', entry); - for (k = 0, len1 = ref.length; k < len1; k++) { - focused = ref[k]; - $.rmClass(focused, 'focused'); - } - $.addClass(entry, 'focused'); - if (!(submenu = $('.submenu', entry))) { - return; - } - sRect = submenu.getBoundingClientRect(); - eRect = entry.getBoundingClientRect(); - cHeight = doc.clientHeight; - cWidth = doc.clientWidth; - ref1 = eRect.top + sRect.height < cHeight ? ['0px', 'auto'] : ['auto', '0px'], top = ref1[0], bottom = ref1[1]; - ref2 = eRect.right + sRect.width < cWidth - 150 ? ['100%', 'auto'] : ['auto', '100%'], left = ref2[0], right = ref2[1]; - style = submenu.style; - style.top = top; - style.bottom = bottom; - style.left = left; - return style.right = right; - }; - - Menu.prototype.addEntry = function(entry) { - this.parseEntry(entry); - return this.entries.push(entry); - }; - - Menu.prototype.parseEntry = function(entry) { - var el, k, len1, subEntries, subEntry; - el = entry.el, subEntries = entry.subEntries; - $.addClass(el, 'entry'); - $.on(el, 'focus mouseover', this.onFocus); - el.style.order = entry.order || 100; - if (!subEntries) { - return; - } - $.addClass(el, 'has-submenu'); - for (k = 0, len1 = subEntries.length; k < len1; k++) { - subEntry = subEntries[k]; - this.parseEntry(subEntry); - } - }; - - return Menu; - - })(); - dragstart = function(e) { - var el, isTouching, o, rect, ref, screenHeight, screenWidth; - if (e.type === 'mousedown' && e.button !== 0) { - return; - } - e.preventDefault(); - if (isTouching = e.type === 'touchstart') { - e = e.changedTouches[e.changedTouches.length - 1]; - } - el = $.x('ancestor::div[contains(@class,"dialog")][1]', this); - rect = el.getBoundingClientRect(); - screenHeight = doc.clientHeight; - screenWidth = doc.clientWidth; - o = { - id: el.id, - style: el.style, - dx: e.clientX - rect.left, - dy: e.clientY - rect.top, - height: screenHeight - rect.height, - width: screenWidth - rect.width, - screenHeight: screenHeight, - screenWidth: screenWidth, - isTouching: isTouching - }; - ref = Conf['Header auto-hide'] || !Conf['Fixed Header'] ? [0, 0] : Conf['Bottom Header'] ? [0, Header.bar.getBoundingClientRect().height] : [Header.bar.getBoundingClientRect().height, 0], o.topBorder = ref[0], o.bottomBorder = ref[1]; - if (isTouching) { - o.identifier = e.identifier; - o.move = touchmove.bind(o); - o.up = touchend.bind(o); - $.on(d, 'touchmove', o.move); - return $.on(d, 'touchend touchcancel', o.up); - } else { - o.move = drag.bind(o); - o.up = dragend.bind(o); - $.on(d, 'mousemove', o.move); - return $.on(d, 'mouseup', o.up); - } - }; - touchmove = function(e) { - var k, len1, ref, touch; - ref = e.changedTouches; - for (k = 0, len1 = ref.length; k < len1; k++) { - touch = ref[k]; - if (touch.identifier === this.identifier) { - drag.call(this, touch); - return; - } - } - }; - drag = function(e) { - var bottom, clientX, clientY, left, right, style, top; - clientX = e.clientX, clientY = e.clientY; - left = clientX - this.dx; - left = left < 10 ? 0 : this.width - left < 10 ? null : left / this.screenWidth * 100 + '%'; - top = clientY - this.dy; - top = top < (10 + this.topBorder) ? this.topBorder + 'px' : this.height - top < (10 + this.bottomBorder) ? null : top / this.screenHeight * 100 + '%'; - right = left === null ? 0 : null; - bottom = top === null ? this.bottomBorder + 'px' : null; - style = this.style; - style.left = left; - style.right = right; - style.top = top; - return style.bottom = bottom; - }; - touchend = function(e) { - var k, len1, ref, touch; - ref = e.changedTouches; - for (k = 0, len1 = ref.length; k < len1; k++) { - touch = ref[k]; - if (touch.identifier === this.identifier) { - dragend.call(this); - return; - } - } - }; - dragend = function() { - if (this.isTouching) { - $.off(d, 'touchmove', this.move); - $.off(d, 'touchend touchcancel', this.up); - } else { - $.off(d, 'mousemove', this.move); - $.off(d, 'mouseup', this.up); - } - return $.set(this.id + ".position", this.style.cssText); - }; - hoverstart = function(arg) { - var cb, el, endEvents, height, latestEvent, noRemove, o, ref, root; - root = arg.root, el = arg.el, latestEvent = arg.latestEvent, endEvents = arg.endEvents, height = arg.height, cb = arg.cb, noRemove = arg.noRemove; - o = { - root: root, - el: el, - style: el.style, - isImage: (ref = el.nodeName) === 'IMG' || ref === 'VIDEO', - cb: cb, - endEvents: endEvents, - latestEvent: latestEvent, - clientHeight: doc.clientHeight, - clientWidth: doc.clientWidth, - height: height, - noRemove: noRemove - }; - o.hover = hover.bind(o); - o.hoverend = hoverend.bind(o); - o.hover(o.latestEvent); - new MutationObserver(function() { - if (el.parentNode) { - return o.hover(o.latestEvent); - } - }).observe(el, { - childList: true - }); - $.on(root, endEvents, o.hoverend); - if ($.x('ancestor::div[contains(@class,"inline")][1]', root)) { - $.on(d, 'keydown', o.hoverend); - } - $.on(root, 'mousemove', o.hover); - o.workaround = function(e) { - if (!root.contains(e.target)) { - return o.hoverend(e); - } - }; - return $.on(doc, 'mousemove', o.workaround); - }; - hoverstart.padding = 25; - hover = function(e) { - var clientX, clientY, height, left, ref, right, style, threshold, top; - this.latestEvent = e; - height = (this.height || this.el.offsetHeight) + hoverstart.padding; - clientX = e.clientX, clientY = e.clientY; - top = this.isImage ? Math.max(0, clientY * (this.clientHeight - height) / this.clientHeight) : Math.max(0, Math.min(this.clientHeight - height, clientY - 120)); - threshold = this.clientWidth / 2; - if (!this.isImage) { - threshold = Math.max(threshold, this.clientWidth - 400); - } - ref = clientX <= threshold ? [clientX + 45 + 'px', null] : [null, this.clientWidth - clientX + 45 + 'px'], left = ref[0], right = ref[1]; - style = this.style; - style.top = top + 'px'; - style.left = left; - return style.right = right; - }; - hoverend = function(e) { - if (e.type === 'keydown' && e.keyCode !== 13 || e.target.nodeName === "TEXTAREA") { - return; - } - if (!this.noRemove) { - $.rm(this.el); - } - $.off(this.root, this.endEvents, this.hoverend); - $.off(d, 'keydown', this.hoverend); - $.off(this.root, 'mousemove', this.hover); - $.off(doc, 'mousemove', this.workaround); - if (this.cb) { - return this.cb.call(this); - } - }; - checkbox = function(name, text, checked) { - var input, label; - if (checked == null) { - checked = Conf[name]; - } - label = $.el('label'); - input = $.el('input', { - type: 'checkbox', - name: name, - checked: checked - }); - $.add(label, [input, $.tn(" " + text)]); - return label; - }; - return { - dialog: dialog, - Menu: Menu, - hover: hoverstart, - checkbox: checkbox - }; - })(); - - CrossOrigin = (function() { - return { - binary: function(url, cb, headers) { - var options, ref, workaround; - if (headers == null) { - headers = {}; - } - url = url.replace(/^((?:https?:)?\/\/(?:\w+\.)?4c(?:ha|d)n\.org)\/adv\//, '$1//adv/'); - workaround = $.engine === 'gecko' && (typeof GM_info !== "undefined" && GM_info !== null) && /^[0-2]\.|^3\.[01](?!\d)/.test(GM_info.version); - workaround || (workaround = /PaleMoon\//.test(navigator.userAgent)); - workaround || (workaround = (typeof GM_info !== "undefined" && GM_info !== null ? (ref = GM_info.script) != null ? ref.includeJSB : void 0 : void 0) != null); - options = { - method: "GET", - url: url, - headers: headers, - onload: function(xhr) { - var contentDisposition, contentType, data, i, r, ref1, ref2; - if (workaround) { - r = xhr.responseText; - data = new Uint8Array(r.length); - i = 0; - while (i < r.length) { - data[i] = r.charCodeAt(i); - i++; - } - } else { - data = new Uint8Array(xhr.response); - } - if (typeof xhr.responseHeaders === 'object') { - contentType = xhr.responseHeaders['Content-Type']; - contentDisposition = xhr.responseHeaders['Content-Disposition']; - } else { - contentType = (ref1 = xhr.responseHeaders.match(/Content-Type:\s*(.*)/i)) != null ? ref1[1] : void 0; - contentDisposition = (ref2 = xhr.responseHeaders.match(/Content-Disposition:\s*(.*)/i)) != null ? ref2[1] : void 0; - } - return cb(data, contentType, contentDisposition); - }, - onerror: function() { - return cb(null); - }, - onabort: function() { - return cb(null); - } - }; - if (workaround) { - options.overrideMimeType = options.mimeType = 'text/plain; charset=x-user-defined'; - } else { - options.responseType = 'arraybuffer'; - } - return GM_xmlhttpRequest(options); - }, - file: function(url, cb) { - return CrossOrigin.binary(url, function(data, contentType, contentDisposition) { - var blob, match, mime, name, ref, ref1, ref2, ref3; - if (data == null) { - return cb(null); - } - name = (ref = url.match(/([^\/]+)\/*$/)) != null ? ref[1] : void 0; - mime = (contentType != null ? contentType.match(/[^;]*/)[0] : void 0) || 'application/octet-stream'; - match = (contentDisposition != null ? (ref1 = contentDisposition.match(/\bfilename\s*=\s*"((\\"|[^"])+)"/i)) != null ? ref1[1] : void 0 : void 0) || (contentType != null ? (ref2 = contentType.match(/\bname\s*=\s*"((\\"|[^"])+)"/i)) != null ? ref2[1] : void 0 : void 0); - if (match) { - name = match.replace(/\\"/g, '"'); - } - if ((typeof GM_info !== "undefined" && GM_info !== null ? (ref3 = GM_info.script) != null ? ref3.includeJSB : void 0 : void 0) != null) { - mime = QR.typeFromExtension[name.match(/[^.]*$/)[0].toLowerCase()] || 'application/octet-stream'; - } - blob = new Blob([data], { - type: mime - }); - blob.name = name; - return cb(blob); - }); - }, - json: (function() { - var callbacks, responses; - callbacks = {}; - responses = {}; - return function(url, cb) { - if (responses[url]) { - cb(responses[url]); - return; - } - if (callbacks[url]) { - callbacks[url].push(cb); - return; - } - callbacks[url] = [cb]; - return GM_xmlhttpRequest({ - method: "GET", - url: url + '', - onload: function(xhr) { - var k, len1, ref, response; - response = JSON.parse(xhr.responseText); - ref = callbacks[url]; - for (k = 0, len1 = ref.length; k < len1; k++) { - cb = ref[k]; - cb(response); - } - delete callbacks[url]; - return responses[url] = response; - }, - onerror: function() { - return delete callbacks[url]; - }, - onabort: function() { - return delete callbacks[url]; - } - }); - }; - })() - }; - })(); - - Anonymize = { - init: function() { - var ref; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread' || ref === 'archive') && Conf['Anonymize'])) { - return; - } - if (g.VIEW === 'archive') { - return this.archive(); - } - return Post.callbacks.push({ - name: 'Anonymize', - cb: this.node - }); - }, - node: function() { - var email, name, ref, tripcode; - if (this.info.capcode || this.isClone) { - return; - } - ref = this.nodes, name = ref.name, tripcode = ref.tripcode, email = ref.email; - if (this.info.name !== 'Anonymous') { - name.textContent = 'Anonymous'; - } - if (tripcode) { - $.rm(tripcode); - delete this.nodes.tripcode; - } - if (this.info.email) { - $.replace(email, name); - return delete this.nodes.email; - } - }, - archive: function() { - return $.ready(function() { - var k, len1, len2, name, q, ref, ref1, trip; - ref = $$('.name'); - for (k = 0, len1 = ref.length; k < len1; k++) { - name = ref[k]; - name.textContent = 'Anonymous'; - } - ref1 = $$('.postertrip'); - for (q = 0, len2 = ref1.length; q < len2; q++) { - trip = ref1[q]; - $.rm(trip); - } - }); - } - }; - - Filter = { - filters: {}, - init: function() { - var boards, err, excludes, filter, hl, k, key, len1, line, op, ref, ref1, ref2, ref3, ref4, ref5, ref6, regexp, stub, top; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Filter'])) { - return; - } - if (!Conf['Filtered Backlinks']) { - $.addClass(doc, 'hide-backlinks'); - } - for (key in Config.filter) { - this.filters[key] = []; - ref1 = Conf[key].split('\n'); - for (k = 0, len1 = ref1.length; k < len1; k++) { - line = ref1[k]; - if (line[0] === '#') { - continue; - } - if (!(regexp = line.match(/\/(.+)\/(\w*)/))) { - continue; - } - filter = line.replace(regexp[0], ''); - boards = ((ref2 = filter.match(/boards:([^;]+)/)) != null ? ref2[1].toLowerCase() : void 0) || 'global'; - boards = boards === 'global' ? null : boards.split(','); - if (boards === null) { - excludes = ((ref3 = filter.match(/exclude:([^;]+)/)) != null ? ref3[1].toLowerCase().split(',') : void 0) || null; - } - if (key === 'uniqueID' || key === 'MD5') { - regexp = regexp[1]; - } else { - try { - regexp = RegExp(regexp[1], regexp[2]); - } catch (_error) { - err = _error; - new Notice('warning', [$.tn("Invalid " + key + " filter:"), $.el('br'), $.tn(line), $.el('br'), $.tn(err.message)], 60); - continue; - } - } - op = ((ref4 = filter.match(/[^t]op:(yes|no|only)/)) != null ? ref4[1] : void 0) || 'yes'; - stub = (function() { - var ref5; - switch ((ref5 = filter.match(/stub:(yes|no)/)) != null ? ref5[1] : void 0) { - case 'yes': - return true; - case 'no': - return false; - default: - return Conf['Stubs']; - } - })(); - if (hl = /highlight/.test(filter)) { - hl = ((ref5 = filter.match(/highlight:([\w-]+)/)) != null ? ref5[1] : void 0) || 'filter-highlight'; - top = ((ref6 = filter.match(/top:(yes|no)/)) != null ? ref6[1] : void 0) || 'yes'; - top = top === 'yes'; - } - this.filters[key].push(this.createFilter(regexp, boards, excludes, op, stub, hl, top)); - } - if (!this.filters[key].length) { - delete this.filters[key]; - } - } - if (!Object.keys(this.filters).length) { - return; - } - return Post.callbacks.push({ - name: 'Filter', - cb: this.node - }); - }, - createFilter: function(regexp, boards, excludes, op, stub, hl, top) { - var settings, test; - test = typeof regexp === 'string' ? function(value) { - return regexp === value; - } : function(value) { - return regexp.test(value); - }; - settings = { - hide: !hl, - stub: stub, - "class": hl, - top: top - }; - return function(value, boardID, isReply) { - if (boards && indexOf.call(boards, boardID) < 0) { - return false; - } - if (excludes && indexOf.call(excludes, boardID) >= 0) { - return false; - } - if (isReply && op === 'only' || !isReply && op === 'no') { - return false; - } - if (!test(value)) { - return false; - } - return settings; - }; - }, - node: function() { - var filter, k, key, len1, ref, ref1, result, value; - if (this.isClone) { - return; - } - for (key in Filter.filters) { - if ((value = Filter[key](this)) != null) { - ref = Filter.filters[key]; - for (k = 0, len1 = ref.length; k < len1; k++) { - filter = ref[k]; - if (!(result = filter(value, this.board.ID, this.isReply))) { - continue; - } - if (result.hide && !this.isFetchedQuote) { - if (this.isReply) { - PostHiding.hide(this, result.stub); - } else if (g.VIEW === 'index') { - ThreadHiding.hide(this.thread, result.stub); - } else { - continue; - } - return; - } - $.addClass(this.nodes.root, result["class"]); - if (!(this.highlights && (ref1 = result["class"], indexOf.call(this.highlights, ref1) >= 0))) { - (this.highlights || (this.highlights = [])).push(result["class"]); - } - if (!this.isReply && result.top) { - this.thread.isOnTop = true; - } - } - } - } - }, - isHidden: function(post) { - var filter, k, key, len1, ref, result, value; - for (key in Filter.filters) { - if ((value = Filter[key](post)) != null) { - ref = Filter.filters[key]; - for (k = 0, len1 = ref.length; k < len1; k++) { - filter = ref[k]; - if (result = filter(value, post.boardID, post.isReply)) { - if (result.hide) { - return true; - } - } - } - } - } - return false; - }, - postID: function(post) { - var ref; - return "" + ((ref = post.ID) != null ? ref : post.postID); - }, - name: function(post) { - return post.info.name; - }, - uniqueID: function(post) { - return post.info.uniqueID; - }, - tripcode: function(post) { - return post.info.tripcode; - }, - capcode: function(post) { - return post.info.capcode; - }, - subject: function(post) { - return post.info.subject; - }, - comment: function(post) { - var base1; - return (base1 = post.info).comment != null ? base1.comment : base1.comment = Build.parseComment(post.info.commentHTML.innerHTML); - }, - flag: function(post) { - return post.info.flag; - }, - filename: function(post) { - var ref; - return (ref = post.file) != null ? ref.name : void 0; - }, - dimensions: function(post) { - var ref; - return (ref = post.file) != null ? ref.dimensions : void 0; - }, - filesize: function(post) { - var ref; - return (ref = post.file) != null ? ref.size : void 0; - }, - MD5: function(post) { - var ref; - return (ref = post.file) != null ? ref.MD5 : void 0; - }, - menu: { - init: function() { - var div, entry, k, len1, ref, ref1, type; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Filter'])) { - return; - } - div = $.el('div', { - textContent: 'Filter' - }); - entry = { - el: div, - order: 50, - open: function(post) { - Filter.menu.post = post; - return true; - }, - subEntries: [] - }; - ref1 = [['Name', 'name'], ['Unique ID', 'uniqueID'], ['Tripcode', 'tripcode'], ['Capcode', 'capcode'], ['Subject', 'subject'], ['Comment', 'comment'], ['Flag', 'flag'], ['Filename', 'filename'], ['Image dimensions', 'dimensions'], ['Filesize', 'filesize'], ['Image MD5', 'MD5']]; - for (k = 0, len1 = ref1.length; k < len1; k++) { - type = ref1[k]; - entry.subEntries.push(Filter.menu.createSubEntry(type[0], type[1])); - } - return Menu.menu.addEntry(entry); - }, - createSubEntry: function(text, type) { - var el; - el = $.el('a', { - href: 'javascript:;', - textContent: text - }); - el.dataset.type = type; - $.on(el, 'click', Filter.menu.makeFilter); - return { - el: el, - open: function(post) { - var value; - value = Filter[type](post); - return value != null; - } - }; - }, - makeFilter: function() { - var re, type, value; - type = this.dataset.type; - value = Filter[type](Filter.menu.post); - re = type === 'uniqueID' || type === 'MD5' ? value : value.replace(/\/|\\|\^|\$|\n|\.|\(|\)|\{|\}|\[|\]|\?|\*|\+|\|/g, function(c) { - if (c === '\n') { - return '\\n'; - } else if (c === '\\') { - return '\\\\'; - } else { - return "\\" + c; - } - }); - re = type === 'uniqueID' || type === 'MD5' ? "/" + re + "/" : "/^" + re + "$/"; - return $.get(type, Conf[type], function(item) { - var save, section, select, ta, tl; - save = item[type]; - save = save ? save + "\n" + re : re; - $.set(type, save); - Settings.open('Filter'); - section = $('.section-container'); - select = $('select[name=filter]', section); - select.value = type; - Settings.selectFilter.call(select); - ta = $('textarea', section); - tl = ta.textLength; - ta.setSelectionRange(tl, tl); - return ta.focus(); - }); - } - } - }; - - PostHiding = { - init: function() { - var ref; - if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Reply Hiding Buttons'] && !(Conf['Menu'] && Conf['Reply Hiding Link'])) { - return; - } - if (Conf['Reply Hiding Buttons']) { - $.addClass(doc, "reply-hide"); - } - this.db = new DataBoard('hiddenPosts'); - return Post.callbacks.push({ - name: 'Reply Hiding', - cb: this.node - }); - }, - node: function() { - var data, sideArrows; - if (!this.isReply || this.isClone || this.isFetchedQuote) { - return; - } - if (data = PostHiding.db.get({ - boardID: this.board.ID, - threadID: this.thread.ID, - postID: this.ID - })) { - if (data.thisPost) { - PostHiding.hide(this, data.makeStub, data.hideRecursively); - } else { - Recursive.apply(PostHiding.hide, this, data.makeStub, true); - Recursive.add(PostHiding.hide, this, data.makeStub, true); - } - } - if (!Conf['Reply Hiding Buttons']) { - return; - } - sideArrows = $('.sideArrows', this.nodes.root); - $.replace(sideArrows.firstChild, PostHiding.makeButton(this, 'hide')); - return sideArrows.removeAttribute('class'); - }, - menu: { - init: function() { - var apply, div, hideStubLink, makeStub, ref, replies, thisPost; - if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Menu'] || !Conf['Reply Hiding Link']) { - return; - } - div = $.el('div', { - className: 'hide-reply-link', - textContent: 'Hide' - }); - apply = $.el('a', { - textContent: 'Apply', - href: 'javascript:;' - }); - $.on(apply, 'click', PostHiding.menu.hide); - thisPost = UI.checkbox('thisPost', 'This post', true); - replies = UI.checkbox('replies', 'Hide replies', Conf['Recursive Hiding']); - makeStub = UI.checkbox('makeStub', 'Make stub', Conf['Stubs']); - Menu.menu.addEntry({ - el: div, - order: 20, - open: function(post) { - if (!post.isReply || post.isClone || post.isHidden) { - return false; - } - PostHiding.menu.post = post; - return true; - }, - subEntries: [ - { - el: apply - }, { - el: thisPost - }, { - el: replies - }, { - el: makeStub - } - ] - }); - div = $.el('div', { - className: 'show-reply-link', - textContent: 'Show' - }); - apply = $.el('a', { - textContent: 'Apply', - href: 'javascript:;' - }); - $.on(apply, 'click', PostHiding.menu.show); - thisPost = UI.checkbox('thisPost', 'This post', false); - replies = UI.checkbox('replies', 'Show replies', false); - hideStubLink = $.el('a', { - textContent: 'Hide stub', - href: 'javascript:;' - }); - $.on(hideStubLink, 'click', PostHiding.menu.hideStub); - Menu.menu.addEntry({ - el: div, - order: 20, - open: function(post) { - var data; - if (!post.isReply || post.isClone || !post.isHidden) { - return false; - } - if (!(data = PostHiding.db.get({ - boardID: post.board.ID, - threadID: post.thread.ID, - postID: post.ID - }))) { - return false; - } - PostHiding.menu.post = post; - thisPost.firstChild.checked = post.isHidden; - replies.firstChild.checked = (data != null ? data.hideRecursively : void 0) != null ? data.hideRecursively : Conf['Recursive Hiding']; - return true; - }, - subEntries: [ - { - el: apply - }, { - el: thisPost - }, { - el: replies - } - ] - }); - return Menu.menu.addEntry({ - el: hideStubLink, - order: 15, - open: function(post) { - var data; - if (!post.isReply || post.isClone || !post.isHidden) { - return false; - } - if (!(data = PostHiding.db.get({ - boardID: post.board.ID, - threadID: post.thread.ID, - postID: post.ID - }))) { - return false; - } - return PostHiding.menu.post = post; - } - }); - }, - hide: function() { - var makeStub, parent, post, replies, thisPost; - parent = this.parentNode; - thisPost = $('input[name=thisPost]', parent).checked; - replies = $('input[name=replies]', parent).checked; - makeStub = $('input[name=makeStub]', parent).checked; - post = PostHiding.menu.post; - if (thisPost) { - PostHiding.hide(post, makeStub, replies); - } else if (replies) { - Recursive.apply(PostHiding.hide, post, makeStub, true); - Recursive.add(PostHiding.hide, post, makeStub, true); - } else { - return; - } - PostHiding.saveHiddenState(post, true, thisPost, makeStub, replies); - return $.event('CloseMenu'); - }, - show: function() { - var data, parent, post, replies, thisPost; - parent = this.parentNode; - thisPost = $('input[name=thisPost]', parent).checked; - replies = $('input[name=replies]', parent).checked; - post = PostHiding.menu.post; - if (thisPost) { - PostHiding.show(post, replies); - } else if (replies) { - Recursive.apply(PostHiding.show, post, true); - Recursive.rm(PostHiding.hide, post, true); - } else { - return; - } - if (data = PostHiding.db.get({ - boardID: post.board.ID, - threadID: post.thread.ID, - postID: post.ID - })) { - PostHiding.saveHiddenState(post, !(thisPost && replies), !thisPost, data.makeStub, !replies); - } - return $.event('CloseMenu'); - }, - hideStub: function() { - var data, post; - post = PostHiding.menu.post; - if (data = PostHiding.db.get({ - boardID: post.board.ID, - threadID: post.thread.ID, - postID: post.ID - })) { - PostHiding.show(post, data.hideRecursively); - PostHiding.hide(post, false, data.hideRecursively); - PostHiding.saveHiddenState(post, true, true, false, data.hideRecursively); - } - $.event('CloseMenu'); - } - }, - makeButton: function(post, type) { - var a, span; - span = $.el('span', { - className: "fa fa-" + (type === 'hide' ? 'minus' : 'plus') + "-square-o", - textContent: "" - }); - a = $.el('a', { - className: type + "-reply-button", - href: 'javascript:;' - }); - $.add(a, span); - $.on(a, 'click', PostHiding.toggle); - return a; - }, - saveHiddenState: function(post, isHiding, thisPost, makeStub, hideRecursively) { - var data; - data = { - boardID: post.board.ID, - threadID: post.thread.ID, - postID: post.ID - }; - if (isHiding) { - data.val = { - thisPost: thisPost !== false, - makeStub: makeStub, - hideRecursively: hideRecursively - }; - return PostHiding.db.set(data); - } else { - return PostHiding.db["delete"](data); - } - }, - toggle: function() { - var post; - post = Get.postFromNode(this); - PostHiding[(post.isHidden ? 'show' : 'hide')](post); - return PostHiding.saveHiddenState(post, post.isHidden); - }, - hide: function(post, makeStub, hideRecursively) { - var a, k, len1, quotelink, ref; - if (makeStub == null) { - makeStub = Conf['Stubs']; - } - if (hideRecursively == null) { - hideRecursively = Conf['Recursive Hiding']; - } - if (post.isHidden) { - return; - } - post.isHidden = true; - if (hideRecursively) { - Recursive.apply(PostHiding.hide, post, makeStub, true); - Recursive.add(PostHiding.hide, post, makeStub, true); - } - ref = Get.allQuotelinksLinkingTo(post); - for (k = 0, len1 = ref.length; k < len1; k++) { - quotelink = ref[k]; - $.addClass(quotelink, 'filtered'); - } - if (!makeStub) { - post.nodes.root.hidden = true; - return; - } - a = PostHiding.makeButton(post, 'show'); - $.add(a, $.tn(" " + post.info.nameBlock)); - post.nodes.stub = $.el('div', { - className: 'stub' - }); - $.add(post.nodes.stub, a); - if (Conf['Menu']) { - $.add(post.nodes.stub, Menu.makeButton(post)); - } - return $.prepend(post.nodes.root, post.nodes.stub); - }, - show: function(post, showRecursively) { - var k, len1, quotelink, ref; - if (showRecursively == null) { - showRecursively = Conf['Recursive Hiding']; - } - if (post.nodes.stub) { - $.rm(post.nodes.stub); - delete post.nodes.stub; - } else { - post.nodes.root.hidden = false; - } - post.isHidden = false; - if (showRecursively) { - Recursive.apply(PostHiding.show, post, true); - Recursive.rm(PostHiding.hide, post); - } - ref = Get.allQuotelinksLinkingTo(post); - for (k = 0, len1 = ref.length; k < len1; k++) { - quotelink = ref[k]; - $.rmClass(quotelink, 'filtered'); - } - } - }; - - Recursive = { - recursives: {}, - init: function() { - var ref; - if ((ref = g.VIEW) !== 'index' && ref !== 'thread') { - return; - } - return Post.callbacks.push({ - name: 'Recursive', - cb: this.node - }); - }, - node: function() { - var i, k, len1, len2, obj, q, quote, recursive, ref, ref1; - if (this.isClone || this.isFetchedQuote) { - return; - } - ref = this.quotes; - for (k = 0, len1 = ref.length; k < len1; k++) { - quote = ref[k]; - if (obj = Recursive.recursives[quote]) { - ref1 = obj.recursives; - for (i = q = 0, len2 = ref1.length; q < len2; i = ++q) { - recursive = ref1[i]; - recursive.apply(null, [this].concat(slice.call(obj.args[i]))); - } - } - } - }, - add: function() { - var args, base1, name1, obj, post, recursive; - recursive = arguments[0], post = arguments[1], args = 3 <= arguments.length ? slice.call(arguments, 2) : []; - obj = (base1 = Recursive.recursives)[name1 = post.fullID] || (base1[name1] = { - recursives: [], - args: [] - }); - obj.recursives.push(recursive); - return obj.args.push(args); - }, - rm: function(recursive, post) { - var i, k, len1, obj, rec, ref; - if (!(obj = Recursive.recursives[post.fullID])) { - return; - } - ref = obj.recursives; - for (i = k = 0, len1 = ref.length; k < len1; i = ++k) { - rec = ref[i]; - if (!(rec === recursive)) { - continue; - } - obj.recursives.splice(i, 1); - obj.args.splice(i, 1); - } - }, - apply: function() { - var args, fullID, post, recursive; - recursive = arguments[0], post = arguments[1], args = 3 <= arguments.length ? slice.call(arguments, 2) : []; - fullID = post.fullID; - return g.posts.forEach(function(post) { - if (indexOf.call(post.quotes, fullID) >= 0) { - return recursive.apply(null, [post].concat(slice.call(args))); - } - }); - } - }; - - ThreadHiding = { - init: function() { - var ref; - if (((ref = g.VIEW) !== 'index' && ref !== 'catalog') || !Conf['Thread Hiding Buttons'] && !(Conf['Menu'] && Conf['Thread Hiding Link']) && !Conf['JSON Index']) { - return; - } - this.db = new DataBoard('hiddenThreads'); - if (g.VIEW === 'catalog') { - return this.catalogWatch(); - } - this.catalogSet(g.BOARD); - return Post.callbacks.push({ - name: 'Thread Hiding', - cb: this.node - }); - }, - catalogSet: function(board) { - var hiddenThreads, threadID; - if (!$.hasStorage) { - return; - } - hiddenThreads = ThreadHiding.db.get({ - boardID: board.ID, - defaultValue: {} - }); - for (threadID in hiddenThreads) { - hiddenThreads[threadID] = true; - } - return localStorage.setItem("4chan-hide-t-" + board, JSON.stringify(hiddenThreads)); - }, - catalogWatch: function() { - if (!$.hasStorage) { - return; - } - this.hiddenThreads = JSON.parse(localStorage.getItem("4chan-hide-t-" + g.BOARD)) || {}; - return Main.ready(function() { - return new MutationObserver(ThreadHiding.catalogSave).observe($.id('threads'), { - attributes: true, - subtree: true, - attributeFilter: ['style'] - }); - }); - }, - catalogSave: function() { - var hiddenThreads2, threadID; - hiddenThreads2 = JSON.parse(localStorage.getItem("4chan-hide-t-" + g.BOARD)) || {}; - for (threadID in hiddenThreads2) { - if (!(threadID in ThreadHiding.hiddenThreads)) { - ThreadHiding.db.set({ - boardID: g.BOARD.ID, - threadID: threadID, - val: { - makeStub: Conf['Stubs'] - } - }); - } - } - for (threadID in ThreadHiding.hiddenThreads) { - if (!(threadID in hiddenThreads2)) { - ThreadHiding.db["delete"]({ - boardID: g.BOARD.ID, - threadID: threadID - }); - } - } - return ThreadHiding.hiddenThreads = hiddenThreads2; - }, - node: function() { - var data; - if (this.isReply || this.isClone || this.isFetchedQuote) { - return; - } - if (data = ThreadHiding.db.get({ - boardID: this.board.ID, - threadID: this.ID - })) { - ThreadHiding.hide(this.thread, data.makeStub); - } - if (!Conf['Thread Hiding Buttons']) { - return; - } - return $.prepend(this.nodes.root, ThreadHiding.makeButton(this.thread, 'hide')); - }, - onIndexBuild: function(nodes) { - var k, len1, root, thread; - for (k = 0, len1 = nodes.length; k < len1; k++) { - root = nodes[k]; - thread = Get.threadFromRoot(root); - if (thread.isHidden && thread.stub && !root.contains(thread.stub)) { - ThreadHiding.makeStub(thread, root); - } - } - }, - menu: { - init: function() { - var apply, div, hideStubLink, makeStub; - if (g.VIEW !== 'index' || !Conf['Menu'] || !Conf['Thread Hiding Link']) { - return; - } - div = $.el('div', { - className: 'hide-thread-link', - textContent: 'Hide' - }); - apply = $.el('a', { - textContent: 'Apply', - href: 'javascript:;' - }); - $.on(apply, 'click', ThreadHiding.menu.hide); - makeStub = UI.checkbox('Stubs', 'Make stub'); - Menu.menu.addEntry({ - el: div, - order: 20, - open: function(arg) { - var isReply, thread; - thread = arg.thread, isReply = arg.isReply; - if (isReply || thread.isHidden || Conf['JSON Index'] && Conf['Index Mode'] === 'catalog') { - return false; - } - ThreadHiding.menu.thread = thread; - return true; - }, - subEntries: [ - { - el: apply - }, { - el: makeStub - } - ] - }); - div = $.el('a', { - className: 'show-thread-link', - textContent: 'Show', - href: 'javascript:;' - }); - $.on(div, 'click', ThreadHiding.menu.show); - Menu.menu.addEntry({ - el: div, - order: 20, - open: function(arg) { - var isReply, thread; - thread = arg.thread, isReply = arg.isReply; - if (isReply || !thread.isHidden || Conf['JSON Index'] && Conf['Index Mode'] === 'catalog') { - return false; - } - ThreadHiding.menu.thread = thread; - return true; - } - }); - hideStubLink = $.el('a', { - textContent: 'Hide stub', - href: 'javascript:;' - }); - $.on(hideStubLink, 'click', ThreadHiding.menu.hideStub); - return Menu.menu.addEntry({ - el: hideStubLink, - order: 15, - open: function(arg) { - var isReply, thread; - thread = arg.thread, isReply = arg.isReply; - if (isReply || !thread.isHidden || Conf['JSON Index'] && Conf['Index Mode'] === 'catalog') { - return false; - } - return ThreadHiding.menu.thread = thread; - } - }); - }, - hide: function() { - var makeStub, thread; - makeStub = $('input', this.parentNode).checked; - thread = ThreadHiding.menu.thread; - ThreadHiding.hide(thread, makeStub); - ThreadHiding.saveHiddenState(thread, makeStub); - return $.event('CloseMenu'); - }, - show: function() { - var thread; - thread = ThreadHiding.menu.thread; - ThreadHiding.show(thread); - ThreadHiding.saveHiddenState(thread); - return $.event('CloseMenu'); - }, - hideStub: function() { - var thread; - thread = ThreadHiding.menu.thread; - ThreadHiding.show(thread); - ThreadHiding.hide(thread, false); - ThreadHiding.saveHiddenState(thread, false); - $.event('CloseMenu'); - } - }, - makeButton: function(thread, type) { - var a; - a = $.el('a', { - className: type + "-thread-button", - href: 'javascript:;' - }); - $.extend(a, { - innerHTML: "" - }); - a.dataset.fullID = thread.fullID; - $.on(a, 'click', ThreadHiding.toggle); - return a; - }, - makeStub: function(thread, root) { - var a, numReplies, summary; - numReplies = $$('.thread > .replyContainer', root).length; - if (summary = $('.summary', root)) { - numReplies += +summary.textContent.match(/\d+/); - } - a = ThreadHiding.makeButton(thread, 'show'); - $.add(a, $.tn(" " + thread.OP.info.nameBlock + " (" + (numReplies === 1 ? '1 reply' : numReplies + " replies") + ")")); - thread.stub = $.el('div', { - className: 'stub' - }); - if (Conf['Menu']) { - $.add(thread.stub, [a, Menu.makeButton(thread.OP)]); - } else { - $.add(thread.stub, a); - } - return $.prepend(root, thread.stub); - }, - saveHiddenState: function(thread, makeStub) { - if (thread.isHidden) { - ThreadHiding.db.set({ - boardID: thread.board.ID, - threadID: thread.ID, - val: { - makeStub: makeStub - } - }); - } else { - ThreadHiding.db["delete"]({ - boardID: thread.board.ID, - threadID: thread.ID - }); - } - return ThreadHiding.catalogSet(thread.board); - }, - toggle: function(thread) { - if (!(thread instanceof Thread)) { - thread = g.threads[this.dataset.fullID]; - } - if (thread.isHidden) { - ThreadHiding.show(thread); - } else { - ThreadHiding.hide(thread); - } - return ThreadHiding.saveHiddenState(thread); - }, - hide: function(thread, makeStub) { - var threadRoot; - if (makeStub == null) { - makeStub = Conf['Stubs']; - } - if (thread.isHidden) { - return; - } - threadRoot = thread.OP.nodes.root.parentNode; - thread.isHidden = true; - if (Conf['JSON Index']) { - Index.updateHideLabel(); - } - if (!makeStub) { - return threadRoot.hidden = true; - } - return ThreadHiding.makeStub(thread, threadRoot); - }, - show: function(thread) { - var threadRoot; - if (thread.stub) { - $.rm(thread.stub); - delete thread.stub; - } - threadRoot = thread.OP.nodes.root.parentNode; - threadRoot.hidden = thread.isHidden = false; - if (Conf['JSON Index']) { - return Index.updateHideLabel(); - } - } - }; - - QuoteBacklink = { - containers: {}, - init: function() { - var ref; - if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Quote Backlinks']) { - return; - } - Post.callbacks.push({ - name: 'Quote Backlinking Part 1', - cb: this.firstNode - }); - return Post.callbacks.push({ - name: 'Quote Backlinking Part 2', - cb: this.secondNode - }); - }, - firstNode: function() { - var a, clone, container, containers, hash, k, len1, len2, len3, link, markYours, nodes, post, q, quote, ref, ref1, ref2, u; - if (this.isClone || !this.quotes.length || this.isRebuilt) { - return; - } - markYours = Conf['Mark Quotes of You'] && ((ref = QuoteYou.db) != null ? ref.get({ - boardID: this.board.ID, - threadID: this.thread.ID, - postID: this.ID - }) : void 0); - a = $.el('a', { - href: Build.postURL(this.board.ID, this.thread.ID, this.ID), - className: this.isHidden ? 'filtered backlink' : 'backlink', - textContent: Conf['backlink'].replace(/%(?:id|%)/g, (function(_this) { - return function(x) { - return { - '%id': _this.ID, - '%%': '%' - }[x]; - }; - })(this)) + (markYours ? '\u00A0(You)' : '') - }); - ref1 = this.quotes; - for (k = 0, len1 = ref1.length; k < len1; k++) { - quote = ref1[k]; - containers = [QuoteBacklink.getContainer(quote)]; - if ((post = g.posts[quote]) && post.nodes.backlinkContainer) { - ref2 = post.clones; - for (q = 0, len2 = ref2.length; q < len2; q++) { - clone = ref2[q]; - containers.push(clone.nodes.backlinkContainer); - } - } - for (u = 0, len3 = containers.length; u < len3; u++) { - container = containers[u]; - link = a.cloneNode(true); - nodes = container.firstChild ? [$.tn(' '), link] : [link]; - if (Conf['Quote Previewing']) { - $.on(link, 'mouseover', QuotePreview.mouseover); - } - if (Conf['Quote Inlining']) { - $.on(link, 'click', QuoteInline.toggle); - if (Conf['Quote Hash Navigation']) { - hash = QuoteInline.qiQuote(link, $.hasClass(link, 'filtered')); - nodes.push(hash); - } - } - $.add(container, nodes); - } - } - }, - secondNode: function() { - var container; - if (this.isClone && (this.origin.isReply || Conf['OP Backlinks'])) { - this.nodes.backlinkContainer = $('.container', this.nodes.info); - return; - } - if (!(this.isReply || Conf['OP Backlinks'])) { - return; - } - container = QuoteBacklink.getContainer(this.fullID); - this.nodes.backlinkContainer = container; - return $.add(this.nodes.info, container); - }, - getContainer: function(id) { - var base1; - return (base1 = this.containers)[id] || (base1[id] = $.el('span', { - className: 'container' - })); - } - }; - - QuoteCT = { - init: function() { - var ref; - if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Mark Cross-thread Quotes']) { - return; - } - if (Conf['Comment Expansion']) { - ExpandComment.callbacks.push(this.node); - } - this.text = '\u00A0(Cross-thread)'; - return Post.callbacks.push({ - name: 'Mark Cross-thread Quotes', - cb: this.node - }); - }, - node: function() { - var board, boardID, k, len1, quotelink, ref, ref1, ref2, thread, threadID; - if (this.isClone && this.thread === this.context.thread) { - return; - } - ref = this.context, board = ref.board, thread = ref.thread; - ref1 = this.nodes.quotelinks; - for (k = 0, len1 = ref1.length; k < len1; k++) { - quotelink = ref1[k]; - ref2 = Get.postDataFromLink(quotelink), boardID = ref2.boardID, threadID = ref2.threadID; - if (!threadID) { - continue; - } - if (this.isClone) { - quotelink.textContent = quotelink.textContent.replace(QuoteCT.text, ''); - } - if (boardID === board.ID && threadID !== thread.ID) { - $.add(quotelink, $.tn(QuoteCT.text)); - } - } - } - }; - - QuoteInline = { - init: function() { - var ref; - if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Quote Inlining']) { - return; - } - if (Conf['Comment Expansion']) { - ExpandComment.callbacks.push(this.node); - } - return Post.callbacks.push({ - name: 'Quote Inlining', - cb: this.node - }); - }, - node: function() { - var isClone, k, len1, len2, link, process, q, ref, ref1; - process = QuoteInline.process; - isClone = this.isClone; - ref = this.nodes.quotelinks; - for (k = 0, len1 = ref.length; k < len1; k++) { - link = ref[k]; - process(link, isClone); - } - ref1 = this.nodes.backlinks; - for (q = 0, len2 = ref1.length; q < len2; q++) { - link = ref1[q]; - process(link, isClone); - } - }, - process: function(link, clone) { - if (Conf['Quote Hash Navigation']) { - if (!clone) { - $.after(link, QuoteInline.qiQuote(link, $.hasClass(link, 'filtered'))); - } - } - return $.on(link, 'click', QuoteInline.toggle); - }, - qiQuote: function(link, hidden) { - var name; - name = "hashlink"; - if (hidden) { - name += " filtered"; - } - return $.el('a', { - className: name, - textContent: '#', - href: link.href - }); - }, - toggle: function(e) { - var boardID, context, postID, quoter, ref, ref1, threadID; - if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0) { - return; - } - ref = Get.postDataFromLink(this), boardID = ref.boardID, threadID = ref.threadID, postID = ref.postID; - if (Conf['Inline Cross-thread Quotes Only'] && g.VIEW === 'thread' && ((ref1 = g.posts[boardID + "." + postID]) != null ? ref1.nodes.root.offsetParent : void 0)) { - return; - } - e.preventDefault(); - quoter = Get.postFromNode(this); - context = quoter.context; - if ($.hasClass(this, 'inlined')) { - QuoteInline.rm(this, boardID, threadID, postID, context); - } else { - if ($.x("ancestor::div[@data-full-i-d='" + boardID + "." + postID + "']", this)) { - return; - } - QuoteInline.add(this, boardID, threadID, postID, context, quoter); - } - return this.classList.toggle('inlined'); - }, - findRoot: function(quotelink, isBacklink) { - if (isBacklink) { - return quotelink.parentNode.parentNode; - } else { - return $.x('ancestor-or-self::*[parent::blockquote][1]', quotelink); - } - }, - add: function(quotelink, boardID, threadID, postID, context, quoter) { - var inline, isBacklink, post, qroot, root; - isBacklink = $.hasClass(quotelink, 'backlink'); - inline = $.el('div', { - className: 'inline' - }); - inline.dataset.fullID = boardID + "." + postID; - root = QuoteInline.findRoot(quotelink, isBacklink); - $.after(root, inline); - qroot = $.x('ancestor::*[contains(@class,"postContainer")][1]', root); - $.addClass(qroot, 'hasInline'); - new Fetcher(boardID, threadID, postID, inline, quoter); - if (!((post = g.posts[boardID + "." + postID]) && context.thread === post.thread)) { - return; - } - if (isBacklink && Conf['Forward Hiding']) { - $.addClass(post.nodes.root, 'forwarded'); - post.forwarded++ || (post.forwarded = 1); - } - if (!Unread.posts) { - return; - } - return Unread.readSinglePost(post); - }, - rm: function(quotelink, boardID, threadID, postID, context) { - var el, inlined, isBacklink, post, qroot, ref, root; - isBacklink = $.hasClass(quotelink, 'backlink'); - root = QuoteInline.findRoot(quotelink, isBacklink); - root = $.x("following-sibling::div[@data-full-i-d='" + boardID + "." + postID + "'][1]", root); - qroot = $.x('ancestor::*[contains(@class,"postContainer")][1]', root); - $.rm(root); - if (!$('.inline', qroot)) { - $.rmClass(qroot, 'hasInline'); - } - if (!(el = root.firstElementChild)) { - return; - } - post = g.posts[boardID + "." + postID]; - post.rmClone(el.dataset.clone); - if (Conf['Forward Hiding'] && isBacklink && context.thread === g.threads[boardID + "." + threadID] && !--post.forwarded) { - delete post.forwarded; - $.rmClass(post.nodes.root, 'forwarded'); - } - while (inlined = $('.inlined', el)) { - ref = Get.postDataFromLink(inlined), boardID = ref.boardID, threadID = ref.threadID, postID = ref.postID; - QuoteInline.rm(inlined, boardID, threadID, postID, context); - $.rmClass(inlined, 'inlined'); - } - } - }; - - QuoteOP = { - init: function() { - var ref; - if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Mark OP Quotes']) { - return; - } - if (Conf['Comment Expansion']) { - ExpandComment.callbacks.push(this.node); - } - this.text = '\u00A0(OP)'; - return Post.callbacks.push({ - name: 'Mark OP Quotes', - cb: this.node - }); - }, - node: function() { - var boardID, fullID, i, postID, quotelink, quotelinks, quotes, ref, ref1; - if (this.isClone && this.thread === this.context.thread) { - return; - } - if (!(quotes = this.quotes).length) { - return; - } - quotelinks = this.nodes.quotelinks; - if (this.isClone && (ref = this.thread.fullID, indexOf.call(quotes, ref) >= 0)) { - i = 0; - while (quotelink = quotelinks[i++]) { - quotelink.textContent = quotelink.textContent.replace(QuoteOP.text, ''); - } - } - fullID = this.context.thread.fullID; - if (indexOf.call(quotes, fullID) < 0) { - return; - } - i = 0; - while (quotelink = quotelinks[i++]) { - ref1 = Get.postDataFromLink(quotelink), boardID = ref1.boardID, postID = ref1.postID; - if ((boardID + "." + postID) === fullID) { - $.add(quotelink, $.tn(QuoteOP.text)); - } - } - } - }; - - QuotePreview = { - init: function() { - var ref; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Quote Previewing'])) { - return; - } - if (Conf['Comment Expansion']) { - ExpandComment.callbacks.push(this.node); - } - return Post.callbacks.push({ - name: 'Quote Previewing', - cb: this.node - }); - }, - node: function() { - var k, len1, link, ref; - ref = this.nodes.quotelinks.concat(slice.call(this.nodes.backlinks)); - for (k = 0, len1 = ref.length; k < len1; k++) { - link = ref[k]; - $.on(link, 'mouseover', QuotePreview.mouseover); - } - }, - mouseover: function(e) { - var boardID, k, len1, origin, post, postID, posts, qp, ref, threadID; - if ($.hasClass(this, 'inlined') || !d.contains(this)) { - return; - } - ref = Get.postDataFromLink(this), boardID = ref.boardID, threadID = ref.threadID, postID = ref.postID; - qp = $.el('div', { - id: 'qp', - className: 'dialog' - }); - $.add(Header.hover, qp); - new Fetcher(boardID, threadID, postID, qp, Get.postFromNode(this)); - UI.hover({ - root: this, - el: qp, - latestEvent: e, - endEvents: 'mouseout click', - cb: QuotePreview.mouseout - }); - if (Conf['Quote Highlighting'] && (origin = g.posts[boardID + "." + postID])) { - posts = [origin].concat(origin.clones); - posts.pop(); - for (k = 0, len1 = posts.length; k < len1; k++) { - post = posts[k]; - $.addClass(post.nodes.post, 'qphl'); - } - } - }, - mouseout: function() { - var clone, k, len1, post, ref, root; - if (!(root = this.el.firstElementChild)) { - return; - } - clone = Get.postFromRoot(root); - post = clone.origin; - post.rmClone(root.dataset.clone); - if (!Conf['Quote Highlighting']) { - return; - } - ref = [post].concat(post.clones); - for (k = 0, len1 = ref.length; k < len1; k++) { - post = ref[k]; - $.rmClass(post.nodes.post, 'qphl'); - } - } - }; - - QuoteStrikeThrough = { - init: function() { - var ref; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && (Conf['Reply Hiding Buttons'] || (Conf['Menu'] && Conf['Reply Hiding Link']) || Conf['Filter']))) { - return; - } - return Post.callbacks.push({ - name: 'Strike-through Quotes', - cb: this.node - }); - }, - node: function() { - var boardID, k, len1, postID, quotelink, ref, ref1, ref2; - if (this.isClone) { - return; - } - ref = this.nodes.quotelinks; - for (k = 0, len1 = ref.length; k < len1; k++) { - quotelink = ref[k]; - ref1 = Get.postDataFromLink(quotelink), boardID = ref1.boardID, postID = ref1.postID; - if ((ref2 = g.posts[boardID + "." + postID]) != null ? ref2.isHidden : void 0) { - $.addClass(quotelink, 'filtered'); - } - } - } - }; - - - /* - <3 aeosynth - */ - - QuoteThreading = { - init: function() { - if (!(Conf['Quote Threading'] && g.VIEW === 'thread')) { - return; - } - this.controls = $.el('label', { - innerHTML: " Threading" - }); - this.threadNewLink = $.el('span', { - className: 'brackets-wrap threadnewlink', - hidden: true - }); - $.extend(this.threadNewLink, { - innerHTML: "Thread New Posts" - }); - this.input = $('input', this.controls); - this.input.checked = Conf['Thread Quotes']; - $.on(this.input, 'change', this.setEnabled); - $.on(this.input, 'change', this.rethread); - $.on(this.threadNewLink.firstElementChild, 'click', this.rethread); - $.on(d, '4chanXInitFinished', (function(_this) { - return function() { - return _this.ready = true; - }; - })(this)); - Header.menu.addEntry(this.entry = { - el: this.controls, - order: 99 - }); - Thread.callbacks.push({ - name: 'Quote Threading', - cb: this.setThread - }); - return Post.callbacks.push({ - name: 'Quote Threading', - cb: this.node - }); - }, - parent: {}, - children: {}, - inserted: {}, - setEnabled: function() { - var other, ref; - other = (ref = ReplyPruning.inputs) != null ? ref.enabled : void 0; - if (this.checked && (other != null ? other.checked : void 0)) { - other.checked = false; - $.event('change', null, other); - } - return $.cb.checked.call(this); - }, - setThread: function() { - QuoteThreading.thread = this; - return $.asap((function() { - return !Conf['Thread Updater'] || $('.navLinksBot > .updatelink'); - }), function() { - var navLinksBot; - if ((navLinksBot = $('.navLinksBot'))) { - return $.add(navLinksBot, [$.tn(' '), QuoteThreading.threadNewLink]); - } - }); - }, - node: function() { - var ancestor, k, lastParent, len1, parent, parents, quote, ref; - if (this.isFetchedQuote || this.isClone || !this.isReply) { - return; - } - parents = new Set(); - lastParent = null; - ref = this.quotes; - for (k = 0, len1 = ref.length; k < len1; k++) { - quote = ref[k]; - if (parent = g.posts[quote]) { - if (!parent.isFetchedQuote && parent.isReply && parent.ID < this.ID) { - parents.add(parent.ID); - if (!lastParent || parent.ID > lastParent.ID) { - lastParent = parent; - } - } - } - } - if (!lastParent) { - return; - } - ancestor = lastParent; - while (ancestor = QuoteThreading.parent[ancestor.fullID]) { - parents["delete"](ancestor.ID); - } - if (parents.size === 1) { - return QuoteThreading.parent[this.fullID] = lastParent; - } - }, - descendants: function(post) { - var child, children, k, len1, posts; - posts = [post]; - if (children = QuoteThreading.children[post.fullID]) { - for (k = 0, len1 = children.length; k < len1; k++) { - child = children[k]; - posts = posts.concat(QuoteThreading.descendants(child)); - } - } - return posts; - }, - insert: function(post) { - var base1, child, children, descendants, i, k, len1, name1, next, nodes, order, parent, prev, prev2, q, threadContainer, u, x; - if (!(Conf['Thread Quotes'] && (parent = QuoteThreading.parent[post.fullID]) && !QuoteThreading.inserted[post.fullID])) { - return false; - } - descendants = QuoteThreading.descendants(post); - if (!Unread.posts.has(parent.ID)) { - if ((function() { - var k, len1, x; - for (k = 0, len1 = descendants.length; k < len1; k++) { - x = descendants[k]; - if (Unread.posts.has(x.ID)) { - return true; - } - } - })()) { - QuoteThreading.threadNewLink.hidden = false; - return false; - } - } - order = Unread.order; - children = ((base1 = QuoteThreading.children)[name1 = parent.fullID] || (base1[name1] = [])); - threadContainer = parent.nodes.threadContainer || $.el('div', { - className: 'threadContainer' - }); - nodes = [post.nodes.root]; - if (post.nodes.threadContainer) { - nodes.push(post.nodes.threadContainer); - } - i = children.length; - for (k = children.length - 1; k >= 0; k += -1) { - child = children[k]; - if (child.ID >= post.ID) { - i--; - } - } - if (i !== children.length) { - next = children[i]; - for (q = 0, len1 = descendants.length; q < len1; q++) { - x = descendants[q]; - order.before(order[next.ID], order[x.ID]); - } - children.splice(i, 0, post); - $.before(next.nodes.root, nodes); - } else { - prev = parent; - while ((prev2 = QuoteThreading.children[prev.fullID]) && prev2.length) { - prev = prev2[prev2.length - 1]; - } - for (u = descendants.length - 1; u >= 0; u += -1) { - x = descendants[u]; - order.after(order[prev.ID], order[x.ID]); - } - children.push(post); - $.add(threadContainer, nodes); - } - QuoteThreading.inserted[post.fullID] = true; - if (!parent.nodes.threadContainer) { - parent.nodes.threadContainer = threadContainer; - $.addClass(parent.nodes.root, 'threadOP'); - $.after(parent.nodes.root, threadContainer); - } - return true; - }, - rethread: function() { - var nodes, posts, thread; - if (!QuoteThreading.ready) { - return; - } - thread = QuoteThreading.thread; - posts = thread.posts; - QuoteThreading.threadNewLink.hidden = true; - if (Conf['Thread Quotes']) { - posts.forEach(QuoteThreading.insert); - } else { - nodes = []; - Unread.order = new RandomAccessList(); - QuoteThreading.inserted = {}; - posts.forEach(function(post) { - if (post.isFetchedQuote) { - return; - } - Unread.order.push(post); - if (post.isReply) { - nodes.push(post.nodes.root); - } - if (QuoteThreading.children[post.fullID]) { - delete QuoteThreading.children[post.fullID]; - $.rmClass(post.nodes.root, 'threadOP'); - $.rm(post.nodes.threadContainer); - return delete post.nodes.threadContainer; - } - }); - $.add(thread.OP.nodes.root.parentNode, nodes); - } - Unread.position = Unread.order.first; - Unread.updatePosition(); - Unread.setLine(true); - Unread.read(); - return Unread.update(); - } - }; - - QuoteYou = { - init: function() { - var ref; - if (!Conf['Remember Your Posts']) { - return; - } - this.db = new DataBoard('yourPosts'); - $.sync('Remember Your Posts', function(enabled) { - return Conf['Remember Your Posts'] = enabled; - }); - $.on(d, 'QRPostSuccessful', function(e) { - var boardID, postID, ref, threadID; - $.forceSync('Remember Your Posts'); - if (Conf['Remember Your Posts']) { - ref = e.detail, boardID = ref.boardID, threadID = ref.threadID, postID = ref.postID; - return QuoteYou.db.set({ - boardID: boardID, - threadID: threadID, - postID: postID, - val: true - }); - } - }); - if ((ref = g.VIEW) !== 'index' && ref !== 'thread') { - return; - } - if (Conf['Highlight Own Posts']) { - $.addClass(doc, 'highlight-own'); - } - if (Conf['Highlight Posts Quoting You']) { - $.addClass(doc, 'highlight-you'); - } - if (Conf['Comment Expansion']) { - ExpandComment.callbacks.push(this.node); - } - this.text = '\u00A0(You)'; - return Post.callbacks.push({ - name: 'Mark Quotes of You', - cb: this.node - }); - }, - node: function() { - var k, len1, quotelink, ref; - if (this.isClone) { - return; - } - if (QuoteYou.db.get({ - boardID: this.board.ID, - threadID: this.thread.ID, - postID: this.ID - })) { - $.addClass(this.nodes.root, 'yourPost'); - } - if (!this.quotes.length) { - return; - } - ref = this.nodes.quotelinks; - for (k = 0, len1 = ref.length; k < len1; k++) { - quotelink = ref[k]; - if (!(QuoteYou.db.get(Get.postDataFromLink(quotelink)))) { - continue; - } - if (Conf['Mark Quotes of You']) { - $.add(quotelink, $.tn(QuoteYou.text)); - } - $.addClass(quotelink, 'you'); - $.addClass(this.nodes.root, 'quotesYou'); - } - }, - cb: { - seek: function(type) { - var highlight, post, posts, result, str; - if (highlight = $('.highlight')) { - $.rmClass(highlight, 'highlight'); - } - if (!(QuoteYou.lastRead && doc.contains(QuoteYou.lastRead) && $.hasClass(QuoteYou.lastRead, 'quotesYou'))) { - if (!(post = QuoteYou.lastRead = $('.quotesYou'))) { - new Notice('warning', 'No posts are currently quoting you, loser.', 20); - return; - } - if (QuoteYou.cb.scroll(post)) { - return; - } - } else { - post = QuoteYou.lastRead; - } - str = type + "::div[contains(@class,'quotesYou')]"; - while ((post = (result = $.X(str, post)).snapshotItem(type === 'preceding' ? result.snapshotLength - 1 : 0))) { - if (QuoteYou.cb.scroll(post)) { - return; - } - } - posts = $$('.quotesYou'); - return QuoteYou.cb.scroll(posts[type === 'following' ? 0 : posts.length - 1]); - }, - scroll: function(root) { - var post; - post = $('.post', root); - if (!post.getBoundingClientRect().height) { - return false; - } else { - QuoteYou.lastRead = root; - window.location = "#" + post.id; - Header.scrollTo(post); - $.addClass(post, 'highlight'); - return true; - } - } - } - }; - - Quotify = { - init: function() { - var ref; - if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Resurrect Quotes']) { - return; - } - if (Conf['Comment Expansion']) { - ExpandComment.callbacks.push(this.node); - } - return Post.callbacks.push({ - name: 'Resurrect Quotes', - cb: this.node - }); - }, - node: function() { - var deadlink, k, len1, ref; - if (this.isClone) { - return; - } - ref = $$('.deadlink', this.nodes.comment); - for (k = 0, len1 = ref.length; k < len1; k++) { - deadlink = ref[k]; - Quotify.parseDeadlink.call(this, deadlink); - } - }, - parseDeadlink: function(deadlink) { - var a, boardID, fetchable, m, post, postID, quote, quoteID, redirect, ref; - if ($.hasClass(deadlink.parentNode, 'prettyprint')) { - Quotify.fixDeadlink(deadlink); - return; - } - quote = deadlink.textContent; - if (!(postID = (ref = quote.match(/\d+$/)) != null ? ref[0] : void 0)) { - return; - } - if (postID[0] === '0') { - Quotify.fixDeadlink(deadlink); - return; - } - boardID = (m = quote.match(/^>>>\/([a-z\d]+)/)) ? m[1] : this.board.ID; - quoteID = boardID + "." + postID; - if (post = g.posts[quoteID]) { - if (!post.isDead) { - a = $.el('a', { - href: Build.postURL(boardID, post.thread.ID, postID), - className: 'quotelink', - textContent: quote - }); - } else { - a = $.el('a', { - href: Build.postURL(boardID, post.thread.ID, postID), - className: 'quotelink deadlink', - textContent: quote + "\u00A0(Dead)" - }); - $.extend(a.dataset, { - boardID: boardID, - threadID: post.thread.ID, - postID: postID - }); - } - } else { - redirect = Redirect.to('thread', { - boardID: boardID, - threadID: 0, - postID: postID - }); - fetchable = Redirect.to('post', { - boardID: boardID, - postID: postID - }); - if (redirect || fetchable) { - a = $.el('a', { - href: redirect || 'javascript:;', - className: 'deadlink', - textContent: quote + "\u00A0(Dead)" - }); - if (fetchable) { - $.addClass(a, 'quotelink'); - $.extend(a.dataset, { - boardID: boardID, - postID: postID - }); - } - } - } - if (indexOf.call(this.quotes, quoteID) < 0) { - this.quotes.push(quoteID); - } - if (!a) { - deadlink.textContent = quote + "\u00A0(Dead)"; - return; - } - $.replace(deadlink, a); - if ($.hasClass(a, 'quotelink')) { - return this.nodes.quotelinks.push(a); - } - }, - fixDeadlink: function(deadlink) { - var el, green; - if (!(el = deadlink.previousSibling) || el.nodeName === 'BR') { - green = $.el('span', { - className: 'quote' - }); - $.before(deadlink, green); - $.add(green, deadlink); - } - return $.replace(deadlink, slice.call(deadlink.childNodes)); - } - }; - - QR = { - mimeTypes: ['image/jpeg', 'image/png', 'image/gif', 'application/pdf', 'application/vnd.adobe.flash.movie', 'application/x-shockwave-flash', 'video/webm'], - validExtension: /\.(jpe?g|png|gif|pdf|swf|webm)$/i, - typeFromExtension: { - 'jpg': 'image/jpeg', - 'jpeg': 'image/jpeg', - 'png': 'image/png', - 'gif': 'image/gif', - 'pdf': 'application/pdf', - 'swf': 'application/vnd.adobe.flash.movie', - 'webm': 'video/webm' - }, - extensionFromType: { - 'image/jpeg': 'jpg', - 'image/png': 'png', - 'image/gif': 'gif', - 'application/pdf': 'pdf', - 'application/vnd.adobe.flash.movie': 'swf', - 'application/x-shockwave-flash': 'swf', - 'video/webm': 'webm' - }, - init: function() { - var sc, version; - if (!Conf['Quick Reply']) { - return; - } - this.posts = []; - if (g.VIEW === 'archive') { - return; - } - version = Conf['Use Recaptcha v1'] && Main.jsEnabled ? 'v1' : 'v2'; - this.captcha = Captcha[version]; - $.on(d, '4chanXInitFinished', this.initReady); - Post.callbacks.push({ - name: 'Quick Reply', - cb: this.node - }); - if (Conf['QR Shortcut']) { - this.shortcut = sc = $.el('a', { - className: 'qr-shortcut fa fa-comment-o disabled', - textContent: 'QR', - title: 'Quick Reply', - href: 'javascript:;' - }); - $.on(sc, 'click', function() { - if (!QR.postingIsEnabled) { - return; - } - if (Conf['Persistent QR'] || !QR.nodes || QR.nodes.el.hidden) { - QR.open(); - return QR.nodes.com.focus(); - } else { - return QR.close(); - } - }); - return Header.addShortcut(sc); - } - }, - initReady: function() { - var link, linkBot, navLinksBot, origToggle; - $.off(d, '4chanXInitFinished', this.initReady); - QR.postingIsEnabled = !!$.id('postForm'); - if (!QR.postingIsEnabled) { - return; - } - link = $.el('h1', { - className: "qr-link-container" - }); - $.extend(link, { - innerHTML: "" + (g.VIEW === "thread" ? "Reply to Thread" : "Start a Thread") + "" - }); - QR.link = link.firstElementChild; - $.on(link.firstChild, 'click', function() { - QR.open(); - return QR.nodes.com.focus(); - }); - if (Conf['Bottom QR Link'] && g.VIEW === 'thread') { - linkBot = $.el('div', { - className: "brackets-wrap qr-link-container-bottom" - }); - $.extend(linkBot, { - innerHTML: "Reply to Thread" - }); - $.on(linkBot.firstElementChild, 'click', function() { - QR.open(); - return QR.nodes.com.focus(); - }); - if ((navLinksBot = $('.navLinksBot'))) { - $.prepend(navLinksBot, linkBot); - } - } - origToggle = $.id('togglePostFormLink'); - $.before(origToggle, link); - origToggle.firstElementChild.textContent = 'Original Form'; - $.on(d, 'QRGetFile', QR.getFile); - $.on(d, 'QRSetFile', QR.setFile); - $.on(d, 'paste', QR.paste); - $.on(d, 'dragover', QR.dragOver); - $.on(d, 'drop', QR.dropFile); - $.on(d, 'dragstart dragend', QR.drag); - $.on(d, 'IndexRefresh', QR.generatePostableThreadsList); - $.on(d, 'ThreadUpdate', QR.statusCheck); - if (!Conf['Persistent QR']) { - return; - } - QR.open(); - if (Conf['Auto Hide QR']) { - return QR.hide(); - } - }, - statusCheck: function() { - var thread; - if (!QR.nodes) { - return; - } - thread = QR.posts[0].thread; - if (thread !== 'new' && g.threads[g.BOARD + "." + thread].isDead) { - return QR.abort(); - } else { - return QR.status(); - } - }, - node: function() { - $.on(this.nodes.quote, 'click', QR.quote); - if (this.isFetchedQuote) { - return QR.generatePostableThreadsList(); - } - }, - open: function() { - var err; - if (QR.nodes) { - if (QR.nodes.el.hidden) { - QR.captcha.setup(); - } - QR.nodes.el.hidden = false; - QR.unhide(); - } else { - try { - QR.dialog(); - } catch (_error) { - err = _error; - delete QR.nodes; - Main.handleErrors({ - message: 'Quick Reply dialog creation crashed.', - error: err - }); - return; - } - } - if (Conf['QR Shortcut']) { - return $.rmClass(QR.shortcut, 'disabled'); - } - }, - close: function() { - var k, len1, post, ref; - if (QR.req) { - QR.abort(); - return; - } - QR.nodes.el.hidden = true; - QR.cleanNotifications(); - d.activeElement.blur(); - $.rmClass(QR.nodes.el, 'dump'); - if (Conf['QR Shortcut']) { - $.addClass(QR.shortcut, 'disabled'); - } - new QR.post(true); - ref = QR.posts.splice(0, QR.posts.length - 1); - for (k = 0, len1 = ref.length; k < len1; k++) { - post = ref[k]; - post["delete"](); - } - QR.cooldown.auto = false; - QR.status(); - return QR.captcha.destroy(); - }, - focus: function() { - return $.queueTask(function() { - if (!QR.inBubble()) { - QR.hasFocus = d.activeElement && QR.nodes.el.contains(d.activeElement); - return QR.nodes.el.classList.toggle('focus', QR.hasFocus); - } - }); - }, - inBubble: function() { - var bubbles, ref; - bubbles = $$('iframe[src^="https://www.google.com/recaptcha/api2/frame"]'); - return (ref = d.activeElement, indexOf.call(bubbles, ref) >= 0) || bubbles.some(function(el) { - return getComputedStyle(el).visibility !== 'hidden' && el.getBoundingClientRect().bottom > 0; - }); - }, - hide: function() { - d.activeElement.blur(); - $.addClass(QR.nodes.el, 'autohide'); - return QR.nodes.autohide.checked = true; - }, - unhide: function() { - $.rmClass(QR.nodes.el, 'autohide'); - return QR.nodes.autohide.checked = false; - }, - toggleHide: function() { - if (this.checked) { - return QR.hide(); - } else { - return QR.unhide(); - } - }, - toggleSJIS: function(e) { - e.preventDefault(); - Conf['sjisPreview'] = !Conf['sjisPreview']; - $.set('sjisPreview', Conf['sjisPreview']); - return QR.nodes.el.classList.toggle('sjis-preview', Conf['sjisPreview']); - }, - texPreviewShow: function() { - if ($.hasClass(QR.nodes.el, 'tex-preview')) { - return QR.texPreviewHide(); - } - $.addClass(QR.nodes.el, 'tex-preview'); - QR.nodes.texPreview.textContent = QR.nodes.com.value; - return $.event('mathjax', null, QR.nodes.texPreview); - }, - texPreviewHide: function() { - return $.rmClass(QR.nodes.el, 'tex-preview'); - }, - setCustomCooldown: function(enabled) { - Conf['customCooldownEnabled'] = enabled; - QR.cooldown.customCooldown = enabled; - return QR.nodes.customCooldown.classList.toggle('disabled', !enabled); - }, - toggleCustomCooldown: function() { - var enabled; - enabled = $.hasClass(this, 'disabled'); - QR.setCustomCooldown(enabled); - return $.set('customCooldownEnabled', enabled); - }, - error: function(err, focusOverride) { - var el, notice, notif; - QR.open(); - if (typeof err === 'string') { - el = $.tn(err); - } else { - el = err; - el.removeAttribute('style'); - } - notice = new Notice('warning', el); - QR.notifications.push(notice); - if (!Header.areNotificationsEnabled) { - if (d.hidden && !QR.cooldown.auto) { - return alert(el.textContent); - } - } else if (d.hidden || !(focusOverride || d.hasFocus())) { - try { - notif = new Notification(el.textContent, { - body: el.textContent, - icon: Favicon.logo - }); - notif.onclick = function() { - return $.global(function() { - return window.focus(); - }); - }; - if ($.engine !== 'gecko') { - notif.onclose = function() { - return notice.close(); - }; - return notif.onshow = function() { - return setTimeout(function() { - notif.onclose = null; - return notif.close(); - }, 7 * $.SECOND); - }; - } - } catch (_error) {} - } - }, - notifications: [], - cleanNotifications: function() { - var k, len1, notification, ref; - ref = QR.notifications; - for (k = 0, len1 = ref.length; k < len1; k++) { - notification = ref[k]; - notification.close(); - } - return QR.notifications = []; - }, - status: function() { - var disabled, status, thread, value; - if (!QR.nodes) { - return; - } - thread = QR.posts[0].thread; - if (thread !== 'new' && g.threads[g.BOARD + "." + thread].isDead) { - value = 'Dead'; - disabled = true; - QR.cooldown.auto = false; - } - value = QR.req ? QR.req.progress : QR.cooldown.seconds || value; - status = QR.nodes.status; - status.value = !value ? 'Submit' : QR.cooldown.auto ? "Auto " + value : value; - return status.disabled = disabled || false; - }, - openPost: function() { - var index; - QR.open(); - if (QR.selected.isLocked) { - index = QR.posts.indexOf(QR.selected); - (QR.posts[index + 1] || new QR.post()).select(); - $.addClass(QR.nodes.el, 'dump'); - return QR.cooldown.auto = true; - } - }, - quote: function(e) { - var aa, ancestor, caretPos, com, frag, insideCode, k, len1, len2, len3, len4, len5, len6, node, post, q, range, ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, sel, text, thread, u, v, z; - if (e != null) { - e.preventDefault(); - } - if (!QR.postingIsEnabled) { - return; - } - sel = d.getSelection(); - post = Get.postFromNode(this); - text = post.board.ID === g.BOARD.ID ? ">>" + post + "\n" : ">>>/" + post.board + "/" + post + "\n"; - if (sel.toString().trim() && post === Get.postFromNode(sel.anchorNode)) { - range = sel.getRangeAt(0); - frag = range.cloneContents(); - ancestor = range.commonAncestorContainer; - if ($.x('ancestor-or-self::*[self::s or contains(@class,"removed-spoiler")]', ancestor)) { - $.prepend(frag, $.tn('[spoiler]')); - $.add(frag, $.tn('[/spoiler]')); - } - if (insideCode = $.x('ancestor-or-self::pre[contains(@class,"prettyprint")]', ancestor)) { - $.prepend(frag, $.tn('[code]')); - $.add(frag, $.tn('[/code]')); - } - ref = $$((insideCode ? 'br' : '.prettyprint br'), frag); - for (k = 0, len1 = ref.length; k < len1; k++) { - node = ref[k]; - $.replace(node, $.tn('\n')); - } - ref1 = $$('br', frag); - for (q = 0, len2 = ref1.length; q < len2; q++) { - node = ref1[q]; - if (node !== frag.lastChild) { - $.replace(node, $.tn('\n>')); - } - } - ref2 = $$('s, .removed-spoiler', frag); - for (u = 0, len3 = ref2.length; u < len3; u++) { - node = ref2[u]; - $.replace(node, [$.tn('[spoiler]')].concat(slice.call(node.childNodes), [$.tn('[/spoiler]')])); - } - ref3 = $$('.prettyprint', frag); - for (v = 0, len4 = ref3.length; v < len4; v++) { - node = ref3[v]; - $.replace(node, [$.tn('[code]')].concat(slice.call(node.childNodes), [$.tn('[/code]')])); - } - ref4 = $$('.linkify[data-original]', frag); - for (z = 0, len5 = ref4.length; z < len5; z++) { - node = ref4[z]; - $.replace(node, $.tn(node.dataset.original)); - } - ref5 = $$('.embedder', frag); - for (aa = 0, len6 = ref5.length; aa < len6; aa++) { - node = ref5[aa]; - if (((ref6 = node.previousSibling) != null ? ref6.nodeValue : void 0) === ' ') { - $.rm(node.previousSibling); - } - $.rm(node); - } - text += ">" + (frag.textContent.trim()) + "\n"; - } - QR.openPost(); - ref7 = QR.nodes, com = ref7.com, thread = ref7.thread; - if (!com.value) { - thread.value = Get.threadFromNode(this); - } - caretPos = com.selectionStart; - com.value = com.value.slice(0, caretPos) + text + com.value.slice(com.selectionEnd); - range = caretPos + text.length; - com.setSelectionRange(range, range); - com.focus(); - QR.selected.save(com); - return QR.selected.save(thread); - }, - characterCount: function() { - var count, counter; - counter = QR.nodes.charCount; - count = QR.nodes.com.value.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, '_').length; - counter.textContent = count; - counter.hidden = count < QR.max_comment / 2; - return (count > QR.max_comment ? $.addClass : $.rmClass)(counter, 'warning'); - }, - getFile: function() { - var ref; - return $.event('QRFile', (ref = QR.selected) != null ? ref.file : void 0); - }, - setFile: function(e) { - var file, name, ref, source; - ref = e.detail, file = ref.file, name = ref.name, source = ref.source; - if (name != null) { - file.name = name; - } - if (source != null) { - file.source = source; - } - QR.open(); - return QR.handleFiles([file]); - }, - drag: function(e) { - var toggle; - toggle = e.type === 'dragstart' ? $.off : $.on; - toggle(d, 'dragover', QR.dragOver); - return toggle(d, 'drop', QR.dropFile); - }, - dragOver: function(e) { - e.preventDefault(); - return e.dataTransfer.dropEffect = 'copy'; - }, - dropFile: function(e) { - if (!e.dataTransfer.files.length) { - return; - } - e.preventDefault(); - QR.open(); - return QR.handleFiles(e.dataTransfer.files); - }, - paste: function(e) { - var blob, files, item, k, len1, ref; - if (!e.clipboardData.items) { - return; - } - files = []; - ref = e.clipboardData.items; - for (k = 0, len1 = ref.length; k < len1; k++) { - item = ref[k]; - if (!(item.kind === 'file')) { - continue; - } - blob = item.getAsFile(); - blob.name = 'file'; - if (blob.type) { - blob.name += '.' + blob.type.split('/')[1]; - } - files.push(blob); - } - if (!files.length) { - return; - } - QR.open(); - QR.handleFiles(files); - return $.addClass(QR.nodes.el, 'dump'); - }, - pasteFF: function() { - var arr, blob, bstr, i, images, img, k, len1, m, pasteArea, q, ref, src; - pasteArea = QR.nodes.pasteArea; - if (!pasteArea.childNodes.length) { - return; - } - images = $$('img', pasteArea); - $.rmAll(pasteArea); - for (k = 0, len1 = images.length; k < len1; k++) { - img = images[k]; - src = img.src; - if (m = src.match(/data:(image\/(\w+));base64,(.+)/)) { - bstr = atob(m[3]); - arr = new Uint8Array(bstr.length); - for (i = q = 0, ref = bstr.length; 0 <= ref ? q < ref : q > ref; i = 0 <= ref ? ++q : --q) { - arr[i] = bstr.charCodeAt(i); - } - blob = new Blob([arr], { - type: m[1] - }); - blob.name = "file." + m[2]; - QR.handleFiles([blob]); - } else if (/^https?:\/\//.test(src)) { - QR.handleUrl(src); - } - } - }, - handleUrl: function(urlDefault) { - var url; - url = prompt('Enter a URL:', urlDefault); - if (url === null) { - return; - } - QR.nodes.fileButton.focus(); - return CrossOrigin.file(url, function(blob) { - if (blob && !/^text\//.test(blob.type)) { - return QR.handleFiles([blob]); - } else { - return QR.error("Can't load file."); - } - }); - }, - handleFiles: function(files) { - var file, k, len1; - if (this !== QR) { - files = slice.call(this.files); - this.value = null; - } - if (!files.length) { - return; - } - QR.cleanNotifications(); - for (k = 0, len1 = files.length; k < len1; k++) { - file = files[k]; - QR.handleFile(file, files.length); - } - if (files.length !== 1) { - $.addClass(QR.nodes.el, 'dump'); - } - if (d.activeElement === QR.nodes.fileButton && $.hasClass(QR.nodes.fileSubmit, 'has-file')) { - return QR.nodes.filename.focus(); - } - }, - handleFile: function(file, nfiles) { - var isText, post; - isText = /^text\//.test(file.type); - if (nfiles === 1) { - post = QR.selected; - } else { - post = QR.posts[QR.posts.length - 1]; - if ((isText ? post.com || post.pasting : post.file)) { - post = new QR.post(); - } - } - return post[isText ? 'pasteText' : 'setFile'](file); - }, - openFileInput: function() { - if (QR.nodes.fileButton.disabled) { - return; - } - QR.nodes.fileInput.click(); - return QR.nodes.fileButton.focus(); - }, - generatePostableThreadsList: function() { - var k, len1, list, options, ref, thread, val; - if (!QR.nodes) { - return; - } - list = QR.nodes.thread; - options = [list.firstElementChild]; - ref = g.BOARD.threads.keys; - for (k = 0, len1 = ref.length; k < len1; k++) { - thread = ref[k]; - options.push($.el('option', { - value: thread, - textContent: "Thread " + thread - })); - } - val = list.value; - $.rmAll(list); - $.add(list, options); - list.value = val; - if (list.value === val) { - return; - } - list.value = g.VIEW === 'thread' ? g.THREADID : 'new'; - return (g.VIEW === 'thread' ? $.addClass : $.rmClass)(QR.nodes.el, 'reply-to-thread'); - }, - dialog: function() { - var dialog, event, i, items, m, match_max, match_min, name, node, nodes, ref, rules, save, scriptData, setNode; - QR.nodes = nodes = { - el: dialog = UI.dialog('qr', 'top: 50px; right: 0px;', { - innerHTML: "
×
No selected file
" - }) - }; - setNode = function(name, query) { - return nodes[name] = $(query, dialog); - }; - setNode('move', '.move'); - setNode('autohide', '#autohide'); - setNode('close', '.close'); - setNode('thread', 'select'); - setNode('form', 'form'); - setNode('sjisToggle', '#sjis-toggle'); - setNode('texButton', '#tex-preview-button'); - setNode('name', '[data-name=name]'); - setNode('email', '[data-name=email]'); - setNode('sub', '[data-name=sub]'); - setNode('com', '[data-name=com]'); - setNode('charCount', '#char-count'); - setNode('texPreview', '#tex-preview'); - setNode('dumpList', '#dump-list'); - setNode('addPost', '#add-post'); - setNode('oekaki', '.oekaki'); - setNode('drawButton', '#qr-draw-button'); - setNode('fileSubmit', '#file-n-submit'); - setNode('fileButton', '#qr-file-button'); - setNode('noFile', '#qr-no-file'); - setNode('filename', '#qr-filename'); - setNode('spoiler', '#qr-file-spoiler'); - setNode('oekakiButton', '#qr-oekaki-button'); - setNode('fileRM', '#qr-filerm'); - setNode('urlButton', '#url-button'); - setNode('pasteArea', '#paste-area'); - setNode('customCooldown', '#custom-cooldown-button'); - setNode('dumpButton', '#dump-button'); - setNode('status', '[type=submit]'); - setNode('flashTag', '[name=filetag]'); - setNode('fileInput', '[type=file]'); - rules = $('ul.rules').textContent.trim(); - match_min = rules.match(/.+smaller than (\d+)x(\d+).+/); - match_max = rules.match(/.+greater than (\d+)x(\d+).+/); - QR.min_width = +(match_min != null ? match_min[1] : void 0) || 1; - QR.min_height = +(match_min != null ? match_min[2] : void 0) || 1; - QR.max_width = +(match_max != null ? match_max[1] : void 0) || 10000; - QR.max_height = +(match_max != null ? match_max[2] : void 0) || 10000; - scriptData = Get.scriptData(); - QR.max_size = (m = scriptData.match(/\bmaxFilesize *= *(\d+)\b/)) ? +m[1] : 4194304; - QR.max_size_video = (m = scriptData.match(/\bmaxWebmFilesize *= *(\d+)\b/)) ? +m[1] : QR.max_size; - QR.max_comment = (m = scriptData.match(/\bcomlen *= *(\d+)\b/)) ? +m[1] : 2000; - QR.max_width_video = QR.max_height_video = 2048; - QR.max_duration_video = (ref = g.BOARD.ID) === 'gif' || ref === 'wsg' ? 300 : 120; - if (Conf['Show New Thread Option in Threads']) { - $.addClass(QR.nodes.el, 'show-new-thread-option'); - } - if (Conf['Show Name and Subject']) { - $.addClass(QR.nodes.name, 'force-show'); - $.addClass(QR.nodes.sub, 'force-show'); - QR.nodes.email.placeholder = 'E-mail'; - } - QR.forcedAnon = !!$('form[name="post"] input[name="name"][type="hidden"]'); - if (QR.forcedAnon) { - $.addClass(QR.nodes.el, 'forced-anon'); - } - QR.spoiler = !!$('.postForm input[name=spoiler]'); - if (QR.spoiler) { - $.addClass(QR.nodes.el, 'has-spoiler'); - } - if (g.BOARD.ID === 'jp' && Conf['sjisPreview']) { - $.addClass(QR.nodes.el, 'sjis-preview'); - } - if (parseInt(Conf['customCooldown'], 10) > 0) { - $.addClass(QR.nodes.fileSubmit, 'custom-cooldown'); - $.get('customCooldownEnabled', Conf['customCooldownEnabled'], function(arg) { - var customCooldownEnabled; - customCooldownEnabled = arg.customCooldownEnabled; - QR.setCustomCooldown(customCooldownEnabled); - return $.sync('customCooldownEnabled', QR.setCustomCooldown); - }); - } - $.on(nodes.autohide, 'change', QR.toggleHide); - $.on(nodes.close, 'click', QR.close); - $.on(nodes.form, 'submit', QR.submit); - $.on(nodes.sjisToggle, 'click', QR.toggleSJIS); - $.on(nodes.texButton, 'mousedown', QR.texPreviewShow); - $.on(nodes.texButton, 'mouseup', QR.texPreviewHide); - $.on(nodes.addPost, 'click', function() { - return new QR.post(true); - }); - $.on(nodes.drawButton, 'click', QR.oekaki.draw); - $.on(nodes.fileButton, 'click', QR.openFileInput); - $.on(nodes.noFile, 'click', QR.openFileInput); - $.on(nodes.filename, 'focus', function() { - return $.addClass(this.parentNode, 'focus'); - }); - $.on(nodes.filename, 'blur', function() { - return $.rmClass(this.parentNode, 'focus'); - }); - $.on(nodes.spoiler, 'change', function() { - return QR.selected.nodes.spoiler.click(); - }); - $.on(nodes.oekakiButton, 'click', QR.oekaki.button); - $.on(nodes.fileRM, 'click', function() { - return QR.selected.rmFile(); - }); - $.on(nodes.urlButton, 'click', function() { - return QR.handleUrl(''); - }); - $.on(nodes.customCooldown, 'click', QR.toggleCustomCooldown); - $.on(nodes.dumpButton, 'click', function() { - return nodes.el.classList.toggle('dump'); - }); - $.on(nodes.fileInput, 'change', QR.handleFiles); - window.addEventListener('focus', QR.focus, true); - window.addEventListener('blur', QR.focus, true); - $.on(d, 'click', QR.focus); - if ($.engine === 'gecko') { - nodes.pasteArea.hidden = false; - new MutationObserver(QR.pasteFF).observe(nodes.pasteArea, { - childList: true - }); - } - items = ['thread', 'name', 'email', 'sub', 'com', 'filename']; - i = 0; - save = function() { - return QR.selected.save(this); - }; - while (name = items[i++]) { - if (!(node = nodes[name])) { - continue; - } - event = node.nodeName === 'SELECT' ? 'change' : 'input'; - $.on(nodes[name], event, save); - } - if ($.engine === 'gecko' && Conf['Remember QR Size']) { - $.get('QR Size', '', function(item) { - return nodes.com.style.cssText = item['QR Size']; - }); - $.on(nodes.com, 'mouseup', function(e) { - if (e.button !== 0) { - return; - } - return $.set('QR Size', this.style.cssText); - }); - } - QR.generatePostableThreadsList(); - QR.persona.init(); - new QR.post(true); - QR.status(); - QR.cooldown.setup(); - QR.captcha.init(); - $.add(d.body, dialog); - QR.captcha.setup(); - QR.oekaki.setup(); - return $.event('QRDialogCreation', null, dialog); - }, - submit: function(e) { - var captcha, cb, err, extra, filetag, formData, options, post, ref, textOnly, thread, threadID; - if (e != null) { - e.preventDefault(); - } - if (QR.req) { - QR.abort(); - return; - } - if (QR.cooldown.seconds) { - QR.cooldown.auto = !QR.cooldown.auto; - QR.status(); - return; - } - post = QR.posts[0]; - post.forceSave(); - threadID = post.thread; - thread = g.BOARD.threads[threadID]; - if (g.BOARD.ID === 'f' && threadID === 'new') { - filetag = QR.nodes.flashTag.value; - } - if (threadID === 'new') { - threadID = null; - if (g.BOARD.ID === 'vg' && !post.sub) { - err = 'New threads require a subject.'; - } else if (!($.hasClass(d.body, 'text_only') || post.file || (textOnly = !!$('input[name=textonly]', $.id('postForm'))))) { - err = 'No file selected.'; - } - } else if (g.BOARD.threads[threadID].isClosed) { - err = 'You can\'t reply to this thread anymore.'; - } else if (!(post.com || post.file)) { - err = 'No comment or file.'; - } else if (post.file && thread.fileLimit) { - err = 'Max limit of image replies has been reached.'; - } - if (g.BOARD.ID === 'r9k' && !((ref = post.com) != null ? ref.match(/[a-z-]/i) : void 0)) { - err || (err = 'Original comment required.'); - } - if (QR.captcha.isEnabled && !err) { - captcha = QR.captcha.getOne(); - if (!captcha) { - err = 'No valid captcha.'; - QR.captcha.setup(!QR.cooldown.auto || d.activeElement === QR.nodes.status); - } - } - QR.cleanNotifications(); - if (err) { - QR.cooldown.auto = false; - QR.status(); - QR.error(err); - return; - } - QR.cooldown.auto = QR.posts.length > 1; - if (Conf['Auto Hide QR'] && !QR.cooldown.auto) { - QR.hide(); - } - if (!QR.cooldown.auto && $.x('ancestor::div[@id="qr"]', d.activeElement)) { - d.activeElement.blur(); - } - post.lock(); - formData = { - resto: threadID, - name: !QR.forcedAnon ? post.name : void 0, - email: post.email, - sub: !(QR.forcedAnon || threadID) ? post.sub : void 0, - com: post.com, - upfile: post.file, - filetag: filetag, - spoiler: post.spoiler, - textonly: textOnly, - mode: 'regist', - pwd: QR.persona.pwd - }; - options = { - responseType: 'document', - withCredentials: true, - onload: QR.response, - onerror: function() { - delete QR.req; - post.unlock(); - QR.cooldown.auto = false; - QR.status(); - return QR.error($.el('span', { - innerHTML: "4chan X encountered an error while posting. [Banned?] [More info]" - })); - } - }; - extra = { - form: $.formData(formData), - upCallbacks: { - onload: function() { - QR.req.isUploadFinished = true; - QR.req.progress = '...'; - return QR.status(); - }, - onprogress: function(e) { - QR.req.progress = (Math.round(e.loaded / e.total * 100)) + "%"; - return QR.status(); - } - } - }; - cb = function(response) { - if (response != null) { - if (response.challenge != null) { - extra.form.append('recaptcha_challenge_field', response.challenge); - extra.form.append('recaptcha_response_field', response.response); - } else { - extra.form.append('g-recaptcha-response', response.response); - } - } - QR.req = $.ajax("https://sys.4chan.org/" + g.BOARD + "/post", options, extra); - return QR.req.progress = '...'; - }; - if (typeof captcha === 'function') { - QR.req = { - progress: '...', - abort: function() { - return cb = null; - } - }; - captcha(function(response) { - if (response) { - return typeof cb === "function" ? cb(response) : void 0; - } else { - delete QR.req; - post.unlock(); - QR.cooldown.auto = !!QR.captcha.captchas.length; - return QR.status(); - } - }); - } else { - cb(captcha); - } - return QR.status(); - }, - response: function() { - var URL, _, ban, err, h1, isReply, lastPostToThread, m, open, post, postID, postsCount, ref, ref1, ref2, req, resDoc, seconds, threadID; - req = QR.req; - delete QR.req; - post = QR.posts[0]; - post.unlock(); - resDoc = req.response; - if (ban = $('.banType', resDoc)) { - err = $.el('span', ban.textContent.toLowerCase() === 'banned' ? { - innerHTML: "You are banned on " + $(".board", resDoc).innerHTML + "! ;_;
Click here to see the reason." - } : { - innerHTML: "You were issued a warning on " + $(".board", resDoc).innerHTML + " as " + $(".nameBlock", resDoc).innerHTML + ".
Reason: " + $(".reason", resDoc).innerHTML - }); - } else if (err = resDoc.getElementById('errmsg')) { - if ((ref = $('a', err)) != null) { - ref.target = '_blank'; - } - } else if (resDoc.title !== 'Post successful!') { - err = 'Connection error with sys.4chan.org.'; - } else if (req.status !== 200) { - err = "Error " + req.statusText + " (" + req.status + ")"; - } - if (err) { - if (/captcha|verification/i.test(err.textContent) || err === 'Connection error with sys.4chan.org.') { - if (/mistyped/i.test(err.textContent)) { - err = $.el('span', { - innerHTML: "You mistyped the CAPTCHA, or the CAPTCHA malfunctioned [complain here]." - }); - } else if (/expired/i.test(err.textContent)) { - err = 'This CAPTCHA is no longer valid because it has expired.'; - } - QR.cooldown.auto = QR.captcha.isEnabled || err === 'Connection error with sys.4chan.org.'; - QR.cooldown.addDelay(post, 2); - } else if (err.textContent && (m = err.textContent.match(/(?:(\d+)\s+minutes?\s+)?(\d+)\s+second/i)) && !/duplicate|hour/i.test(err.textContent)) { - QR.cooldown.auto = !/have\s+been\s+muted/i.test(err.textContent); - seconds = 60 * (+(m[1] || 0)) + (+m[2]); - if (/muted/i.test(err.textContent)) { - QR.cooldown.addMute(seconds); - } else { - QR.cooldown.addDelay(post, seconds); - } - } else { - QR.cooldown.auto = false; - } - QR.captcha.setup(QR.cooldown.auto && ((ref1 = d.activeElement) === QR.nodes.status || ref1 === d.body)); - if (QR.captcha.isEnabled && !QR.captcha.captchas.length) { - QR.cooldown.auto = false; - } - QR.status(); - QR.error(err); - return; - } - h1 = $('h1', resDoc); - QR.cleanNotifications(); - if (Conf['Posting Success Notifications']) { - QR.notifications.push(new Notice('success', h1.textContent, 5)); - } - ref2 = h1.nextSibling.textContent.match(/thread:(\d+),no:(\d+)/), _ = ref2[0], threadID = ref2[1], postID = ref2[2]; - postID = +postID; - threadID = +threadID || postID; - isReply = threadID !== postID; - $.event('QRPostSuccessful', { - boardID: g.BOARD.ID, - threadID: threadID, - postID: postID - }); - $.event('QRPostSuccessful_', { - boardID: g.BOARD.ID, - threadID: threadID, - postID: postID - }); - postsCount = QR.posts.length - 1; - QR.cooldown.auto = postsCount && isReply; - lastPostToThread = !((function() { - var k, len1, p, ref3; - ref3 = QR.posts.slice(1); - for (k = 0, len1 = ref3.length; k < len1; k++) { - p = ref3[k]; - if (p.thread === post.thread) { - return true; - } - } - })()); - if (!(Conf['Persistent QR'] || postsCount)) { - QR.close(); - } else { - post.rm(); - QR.captcha.setup(d.activeElement === QR.nodes.status); - } - QR.cooldown.add(threadID, postID); - URL = threadID === postID ? window.location.origin + "/" + g.BOARD + "/thread/" + threadID : g.VIEW === 'index' && lastPostToThread && Conf['Open Post in New Tab'] ? window.location.origin + "/" + g.BOARD + "/thread/" + threadID + "#p" + postID : void 0; - if (URL) { - open = Conf['Open Post in New Tab'] || postsCount ? function() { - return $.open(URL); - } : function() { - return window.location = URL; - }; - if (threadID === postID) { - QR.waitForThread(URL, open); - } else { - open(); - } - } - return QR.status(); - }, - waitForThread: function(url, cb) { - var attempts, check; - attempts = 0; - check = function() { - return $.ajax(url, { - onloadend: function() { - attempts++; - if (attempts >= 6 || this.status === 200) { - return cb(); - } else { - return setTimeout(check, attempts * $.SECOND); - } - } - }, { - type: 'HEAD' - }); - }; - return check(); - }, - abort: function() { - if (QR.req && !QR.req.isUploadFinished) { - QR.req.abort(); - delete QR.req; - QR.posts[0].unlock(); - QR.cooldown.auto = false; - QR.notifications.push(new Notice('info', 'QR upload aborted.', 5)); - } - return QR.status(); - } - }; - - Captcha = {}; - - Captcha.fixes = { - imageKeys: '789456123uiojklm'.split('').concat(['Comma', 'Period']), - imageKeys16: '7890uiopjkl'.split('').concat(['Semicolon', 'm', 'Comma', 'Period', 'Slash']), - css: '.rc-imageselect-target > div:focus, .rc-image-tile-target:focus {\n outline: 2px solid #4a90e2;\n}\n.rc-imageselect-target td:focus {\n box-shadow: inset 0 0 0 2px #4a90e2;\n outline: none;\n}\n.rc-button-default:focus {\n box-shadow: inset 0 0 0 2px #0063d6;\n}', - cssNoscript: '.fbc-payload-imageselect {\n position: relative;\n}\n.fbc-payload-imageselect > label {\n position: absolute;\n display: block;\n height: 93.3px;\n width: 93.3px;\n}\nlabel[data-row="0"] {top: 0px;}\nlabel[data-row="1"] {top: 93.3px;}\nlabel[data-row="2"] {top: 186.6px;}\nlabel[data-col="0"] {left: 0px;}\nlabel[data-col="1"] {left: 93.3px;}\nlabel[data-col="2"] {left: 186.6px;}\n.fbc-payload-imageselect > input:focus + label {\n outline: 2px solid #4a90e2;\n}\n.fbc-button-verify input:focus {\n box-shadow: inset 0 0 0 2px #0063d6;\n}\nbody.focus .fbc {\n box-shadow: inset 0 0 0 2px #4a90e2;\n}', - init: function() { - switch (location.pathname.split('/')[3]) { - case 'anchor': - return this.initMain(); - case 'frame': - return this.initPopup(); - case 'fallback': - return this.initNoscript(); - } - }, - initMain: function() { - var a, k, len1, ref; - $.onExists(d.body, '#recaptcha-anchor', function(checkbox) { - var focus; - focus = function() { - var ref; - if (d.hasFocus() && ((ref = d.activeElement) === d.documentElement || ref === d.body)) { - return checkbox.focus(); - } - }; - focus(); - return $.on(window, 'focus', function() { - return $.queueTask(focus); - }); - }); - ref = $$('.rc-anchor-pt a'); - for (k = 0, len1 = ref.length; k < len1; k++) { - a = ref[k]; - a.tabIndex = -1; - } - }, - initPopup: function() { - $.addStyle(this.css); - this.fixImages(); - new MutationObserver((function(_this) { - return function() { - return _this.fixImages(); - }; - })(this)).observe(d.body, { - childList: true, - subtree: true - }); - return $.on(d, 'keydown', this.keybinds.bind(this)); - }, - initNoscript: function() { - var data, ref, token; - this.noscript = true; - data = (token = (ref = $('.fbc-verification-token > textarea')) != null ? ref.value : void 0) ? { - token: token - } : { - working: true - }; - new Connection(window.parent, '*').send(data); - d.body.classList.toggle('focus', d.hasFocus()); - $.on(window, 'focus blur', function() { - return d.body.classList.toggle('focus', d.hasFocus()); - }); - this.images = $$('.fbc-payload-imageselect > input'); - this.width = 3; - if (this.images.length !== 9) { - return; - } - $.addStyle(this.cssNoscript); - this.addLabels(); - $.on(d, 'keydown', this.keybinds.bind(this)); - return $.on($('.fbc-imageselect-challenge > form'), 'submit', this.checkForm.bind(this)); - }, - fixImages: function() { - var img, k, len1, ref; - this.images = $$('.rc-image-tile-target'); - if (!this.images.length) { - this.images = $$('.rc-imageselect-target > div, .rc-imageselect-target td'); - } - this.width = $$('.rc-imageselect-target tr:first-of-type td').length || Math.round(Math.sqrt(this.images.length)); - ref = this.images; - for (k = 0, len1 = ref.length; k < len1; k++) { - img = ref[k]; - img.tabIndex = 0; - } - if (this.images.length === 9) { - this.addTooltips(this.images); - } else { - this.addTooltips16(this.images); - } - return this.complaintLinks(); - }, - complaintLinks: function() { - var errmsg, k, len1, link, ref; - ref = $$('.rc-imageselect-incorrect-response, .rc-imageselect-error-select-one, .rc-imageselect-error-select-more, .rc-imageselect-error-dynamic-more'); - for (k = 0, len1 = ref.length; k < len1; k++) { - errmsg = ref[k]; - if (!$('a', errmsg)) { - link = $.el('a', { - href: 'https://www.4chan-x.net/captchas.html', - target: '_blank', - textContent: '[complain]' - }); - $.add(errmsg, [$.tn(' '), link]); - } - } - }, - addLabels: function() { - var checkbox, i, imageSelect, label, labels; - imageSelect = $('.fbc-payload-imageselect'); - labels = (function() { - var k, len1, ref, results; - ref = this.images; - results = []; - for (i = k = 0, len1 = ref.length; k < len1; i = ++k) { - checkbox = ref[i]; - checkbox.id = "checkbox-" + i; - label = $.el('label', { - htmlFor: checkbox.id - }); - label.dataset.row = Math.floor(i / 3); - label.dataset.col = i % 3; - $.after(checkbox, label); - results.push(label); - } - return results; - }).call(this); - return this.addTooltips(labels); - }, - addTooltips: function(nodes) { - var i, k, len1, node; - for (i = k = 0, len1 = nodes.length; k < len1; i = ++k) { - node = nodes[i]; - node.title = this.imageKeys[i] + " or " + (this.imageKeys[i + 9][0].toUpperCase()) + this.imageKeys[i + 9].slice(1); - } - }, - addTooltips16: function(nodes) { - var i, k, key, len1, node, ref; - ref = this.imageKeys16; - for (i = k = 0, len1 = ref.length; k < len1; i = ++k) { - key = ref[i]; - if (i % 4 < this.width && (node = nodes[nodes.length - (4 - Math.floor(i / 4)) * this.width + (i % 4)])) { - node.title = "" + (key[0].toUpperCase()) + key.slice(1); - } - } - }, - checkForm: function(e) { - var checkbox, k, len1, n, ref; - n = 0; - ref = this.images; - for (k = 0, len1 = ref.length; k < len1; k++) { - checkbox = ref[k]; - if (checkbox.checked) { - n++; - } - } - if (n === 0) { - return e.preventDefault(); - } - }, - keybinds: function(e) { - var dx, i, img, key, last, n, reload, verify, w, x; - if (!(this.images && doc.contains(this.images[0]))) { - return; - } - n = this.images.length; - w = this.width; - last = n + w - 1; - reload = $('#recaptcha-reload-button, .fbc-button-reload'); - verify = $('#recaptcha-verify-button, .fbc-button-verify > input'); - x = this.images.indexOf(d.activeElement); - if (x < 0) { - x = d.activeElement === verify ? last : n; - } - key = Keybinds.keyCode(e); - if (!this.noscript && key === 'Space' && x < n) { - this.images[x].click(); - } else if (n === 9 && (i = this.imageKeys.indexOf(key)) >= 0) { - this.images[i % 9].click(); - verify.focus(); - } else if (n !== 9 && (i = this.imageKeys16.indexOf(key)) >= 0 && i % 4 < w && (img = this.images[n - (4 - Math.floor(i / 4)) * w + (i % 4)])) { - img.click(); - verify.focus(); - } else if (dx = { - 'Up': n, - 'Down': w, - 'Left': last, - 'Right': 1 - }[key]) { - x = (x + dx) % (n + w); - if ((n < x && x < last)) { - x = dx === last ? n : last; - } - (this.images[x] || (x === n ? reload : void 0) || (x === last ? verify : void 0)).focus(); - } else { - return; - } - e.preventDefault(); - return e.stopPropagation(); - } - }; - - Captcha.replace = { - init: function() { - if (!(d.cookie.indexOf('pass_enabled=1') < 0)) { - return; - } - if (location.hostname === 'sys.4chan.org' && /[?&]altc\b/.test(location.search) && Main.jsEnabled) { - $.onExists(doc, 'script[src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"]', function() { - $.global(function() { - return window.el.onload = null; - }); - return Captcha.v1.create(); - }); - return; - } - if (((Conf['Use Recaptcha v1'] && location.hostname === 'boards.4chan.org') || (Conf['Use Recaptcha v1 in Reports'] && location.hostname === 'sys.4chan.org')) && Main.jsEnabled) { - $.ready(Captcha.replace.v1); - return; - } - if (Conf['Force Noscript Captcha'] && Main.jsEnabled) { - $.ready(Captcha.replace.noscript); - return; - } - if (Conf['captchaLanguage'].trim() || Conf['Captcha Fixes']) { - if (location.hostname === 'boards.4chan.org') { - return $.onExists(doc, '#captchaFormPart', function(node) { - return $.onExists(node, 'iframe', Captcha.replace.iframe); - }); - } else { - return $.onExists(doc, 'iframe', Captcha.replace.iframe); - } - } - }, - noscript: function() { - var insert, noscript, original, span, toggle; - if (!((original = $('#g-recaptcha, #captchaContainerAlt')) && (noscript = $('noscript')))) { - return; - } - span = $.el('span', { - id: 'captcha-forced-noscript' - }); - $.replace(noscript, span); - $.rm(original); - insert = function() { - span.innerHTML = noscript.textContent; - return Captcha.replace.iframe($('iframe', span)); - }; - if ((toggle = $('#togglePostFormLink a, #form-link'))) { - return $.on(toggle, 'click', insert); - } else { - return insert(); - } - }, - v1: function() { - var form, link; - if (!$.id('g-recaptcha')) { - return; - } - Captcha.v1.replace(); - if ((link = $.id('form-link'))) { - return $.on(link, 'click', function() { - return Captcha.v1.create(); - }); - } else if (location.hostname === 'boards.4chan.org') { - form = $.id('postForm'); - return form.addEventListener('focus', (function() { - return Captcha.v1.create(); - }), true); - } else { - return Captcha.v1.create(); - } - }, - iframe: function(iframe) { - var lang, src; - if ((lang = Conf['captchaLanguage'].trim())) { - src = /[?&]hl=/.test(iframe.src) ? iframe.src.replace(/([?&]hl=)[^&]*/, '$1' + encodeURIComponent(lang)) : iframe.src + ("&hl=" + (encodeURIComponent(lang))); - if (iframe.src !== src) { - iframe.src = src; - } - } - return Captcha.replace.autocopy(iframe); - }, - autocopy: function(iframe) { - if (!(Conf['Captcha Fixes'] && /^https:\/\/www\.google\.com\/recaptcha\/api\/fallback\?/.test(iframe.src))) { - return; - } - return new Connection(iframe, 'https://www.google.com', { - working: function() { - var ref, ref1; - if ((ref = $.id('qr')) != null ? ref.contains(iframe) : void 0) { - return (ref1 = $('#qr .captcha-container textarea')) != null ? ref1.parentNode.hidden = true : void 0; - } - }, - token: function(token) { - var node, textarea; - node = iframe; - while ((node = node.parentNode)) { - if ((textarea = $('textarea', node))) { - break; - } - } - textarea.value = token; - return $.event('input', null, textarea); - } - }); - } - }; - - Captcha.v1 = { - blank: "data:image/svg+xml,", - init: function() { - var imgContainer, input; - if (d.cookie.indexOf('pass_enabled=1') >= 0) { - return; - } - if (!(this.isEnabled = !!$('#g-recaptcha, #captchaContainerAlt'))) { - return; - } - imgContainer = $.el('div', { - className: 'captcha-img', - title: 'Reload reCAPTCHA' - }); - $.extend(imgContainer, { - innerHTML: "" - }); - input = $.el('input', { - className: 'captcha-input field', - title: 'Verification', - autocomplete: 'off', - spellcheck: false - }); - this.nodes = { - img: imgContainer.firstChild, - input: input - }; - $.on(input, 'blur', QR.focusout); - $.on(input, 'focus', QR.focusin); - $.on(input, 'keydown', QR.captcha.keydown.bind(QR.captcha)); - $.on(this.nodes.img.parentNode, 'click', QR.captcha.reload.bind(QR.captcha)); - $.addClass(QR.nodes.el, 'has-captcha', 'captcha-v1'); - $.after(QR.nodes.com.parentNode, [imgContainer, input]); - this.captchas = []; - $.get('captchas', [], function(arg) { - var captchas; - captchas = arg.captchas; - QR.captcha.sync(captchas); - return QR.captcha.clear(); - }); - $.sync('captchas', this.sync); - this.replace(); - this.beforeSetup(); - if (Conf['Auto-load captcha']) { - this.setup(); - } - new MutationObserver(this.afterSetup).observe($.id('captchaContainerAlt'), { - childList: true - }); - return this.afterSetup(); - }, - replace: function() { - var container, old; - if (this.script) { - return; - } - if (!(this.script = $('script[src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"]', d.head))) { - this.script = $.el('script', { - src: '//www.google.com/recaptcha/api/js/recaptcha_ajax.js' - }); - $.add(d.head, this.script); - } - if (old = $.id('g-recaptcha')) { - container = $.el('div', { - id: 'captchaContainerAlt' - }); - return $.replace(old, container); - } - }, - create: function() { - var cont, lang; - cont = $.id('captchaContainerAlt'); - if (this.occupied) { - return; - } - this.occupied = true; - if ((lang = Conf['captchaLanguage'].trim())) { - cont.dataset.lang = lang; - } - $.onExists(cont, '#recaptcha_image', function(image) { - return $.on(image, 'click', function() { - if ($.id('recaptcha_challenge_image')) { - return $.global(function() { - return window.Recaptcha.reload(); - }); - } - }); - }); - $.onExists(cont, '#recaptcha_response_field', function(field) { - $.on(field, 'keydown', function(e) { - if (e.keyCode === 8 && !field.value) { - return $.global(function() { - return window.Recaptcha.reload(); - }); - } - }); - if (location.hostname === 'sys.4chan.org') { - return field.focus(); - } - }); - return $.global(function() { - var container, options, script; - container = document.getElementById('captchaContainerAlt'); - options = { - theme: 'clean', - tabindex: { - "boards.4chan.org": 5 - }[location.hostname], - lang: container.dataset.lang - }; - if (window.Recaptcha) { - return window.Recaptcha.create('6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc', container, options); - } else { - script = document.head.querySelector('script[src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"]'); - return script.addEventListener('load', function() { - return window.Recaptcha.create('6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc', container, options); - }, false); - } - }); - }, - cb: { - focus: function() { - return QR.captcha.setup(false, true); - } - }, - beforeSetup: function() { - var img, input, ref; - ref = this.nodes, img = ref.img, input = ref.input; - img.parentNode.hidden = true; - img.src = this.blank; - input.value = ''; - input.placeholder = 'Focus to load reCAPTCHA'; - this.count(); - return $.on(input, 'focus click', this.cb.focus); - }, - needed: function() { - var captchaCount, postsCount; - captchaCount = this.captchas.length; - if (QR.req) { - captchaCount++; - } - postsCount = QR.posts.length; - if (postsCount === 1 && !Conf['Auto-load captcha'] && !QR.posts[0].com && !QR.posts[0].file) { - postsCount = 0; - } - return captchaCount < postsCount; - }, - onNewPost: function() {}, - onPostChange: function() {}, - setup: function(focus, force) { - if (!(this.isEnabled && (force || this.needed()))) { - return; - } - this.create(); - if (focus) { - $.addClass(QR.nodes.el, 'focus'); - return this.nodes.input.focus(); - } - }, - afterSetup: function() { - var challenge, img, input, ref, setLifetime; - if (!(challenge = $.id('recaptcha_challenge_field_holder'))) { - return; - } - if (challenge === QR.captcha.nodes.challenge) { - return; - } - setLifetime = function(e) { - return QR.captcha.lifetime = e.detail; - }; - $.on(window, 'captcha:timeout', setLifetime); - $.global(function() { - return window.dispatchEvent(new CustomEvent('captcha:timeout', { - detail: window.RecaptchaState.timeout - })); - }); - $.off(window, 'captcha:timeout', setLifetime); - ref = QR.captcha.nodes, img = ref.img, input = ref.input; - img.parentNode.hidden = false; - input.placeholder = 'Verification'; - QR.captcha.count(); - $.off(input, 'focus click', QR.captcha.cb.focus); - QR.captcha.nodes.challenge = challenge; - new MutationObserver(QR.captcha.load.bind(QR.captcha)).observe(challenge, { - childList: true, - subtree: true, - attributes: true - }); - QR.captcha.load(); - if (QR.nodes.el.getBoundingClientRect().bottom > doc.clientHeight) { - QR.nodes.el.style.top = null; - return QR.nodes.el.style.bottom = '0px'; - } - }, - destroy: function() { - if (!this.script) { - return; - } - $.global(function() { - return window.Recaptcha.destroy(); - }); - delete this.occupied; - if (this.nodes) { - return this.beforeSetup(); - } - }, - sync: function(captchas) { - if (captchas == null) { - captchas = []; - } - QR.captcha.captchas = captchas; - return QR.captcha.count(); - }, - getOne: function() { - var captcha, challenge, response, timeout; - this.clear(); - if (captcha = this.captchas.shift()) { - this.count(); - $.set('captchas', this.captchas); - return captcha; - } else { - challenge = this.nodes.img.alt; - timeout = this.timeout; - if (/\S/.test(response = this.nodes.input.value)) { - this.destroy(); - return { - challenge: challenge, - response: response, - timeout: timeout - }; - } else { - return null; - } - } - }, - save: function() { - var response; - if (!/\S/.test(response = this.nodes.input.value)) { - return; - } - this.nodes.input.value = ''; - this.captchas.push({ - challenge: this.nodes.img.alt, - response: response, - timeout: this.timeout - }); - this.captchas.sort(function(a, b) { - return a.timeout - b.timeout; - }); - this.count(); - this.destroy(); - this.setup(false, true); - return $.set('captchas', this.captchas); - }, - clear: function() { - var captcha, i, k, len1, now, ref; - if (!this.captchas.length) { - return; - } - $.forceSync('captchas'); - now = Date.now(); - ref = this.captchas; - for (i = k = 0, len1 = ref.length; k < len1; i = ++k) { - captcha = ref[i]; - if (captcha.timeout > now) { - break; - } - } - if (!i) { - return; - } - this.captchas = this.captchas.slice(i); - this.count(); - return $.set('captchas', this.captchas); - }, - load: function() { - var challenge, challenge_image; - if ($('#captchaContainerAlt[class~="recaptcha_is_showing_audio"]')) { - this.nodes.img.src = this.blank; - return; - } - if (!this.nodes.challenge.firstChild) { - return; - } - if (!(challenge_image = $.id('recaptcha_challenge_image'))) { - return; - } - this.timeout = Date.now() + this.lifetime * $.SECOND - $.MINUTE; - challenge = this.nodes.challenge.firstChild.value; - this.nodes.img.alt = challenge; - this.nodes.img.src = challenge_image.src; - this.nodes.input.value = ''; - return this.clear(); - }, - count: function() { - var count, placeholder; - count = this.captchas ? this.captchas.length : 0; - placeholder = this.nodes.input.placeholder.replace(/\ \(.*\)$/, ''); - placeholder += (function() { - switch (count) { - case 0: - if (placeholder === 'Verification') { - return ' (Shift + Enter to cache)'; - } else { - return ''; - } - break; - case 1: - return ' (1 cached captcha)'; - default: - return " (" + count + " cached captchas)"; - } - })(); - this.nodes.input.placeholder = placeholder; - this.nodes.input.alt = count; - clearTimeout(this.timer); - if (count) { - return this.timer = setTimeout(this.clear.bind(this), this.captchas[0].timeout - Date.now()); - } - }, - reload: function(focus) { - $.global(function() { - if (window.Recaptcha.type === 'image') { - window.Recaptcha.reload(); - } else { - window.Recaptcha.switch_type('image'); - } - return window.Recaptcha.should_focus = false; - }); - if (focus) { - return this.nodes.input.focus(); - } - }, - keydown: function(e) { - if (e.keyCode === 8 && !this.nodes.input.value) { - this.reload(); - } else if (e.keyCode === 13 && e.shiftKey) { - this.save(); - } else { - return; - } - return e.preventDefault(); - } - }; - - Captcha.v2 = { - lifetime: 2 * $.MINUTE, - init: function() { - var counter, root; - if (d.cookie.indexOf('pass_enabled=1') >= 0) { - return; - } - if (!(this.isEnabled = !!$('#g-recaptcha, #captchaContainerAlt, #captcha-forced-noscript'))) { - return; - } - if ((this.noscript = Conf['Force Noscript Captcha'] || !Main.jsEnabled)) { - $.addClass(QR.nodes.el, 'noscript-captcha'); - } - this.captchas = []; - $.get('captchas', [], function(arg) { - var captchas; - captchas = arg.captchas; - return QR.captcha.sync(captchas); - }); - $.sync('captchas', this.sync.bind(this)); - root = $.el('div', { - className: 'captcha-root' - }); - $.extend(root, { - innerHTML: "
" - }); - counter = $('.captcha-counter > a', root); - this.nodes = { - root: root, - counter: counter - }; - this.count(); - $.addClass(QR.nodes.el, 'has-captcha', 'captcha-v2'); - $.after(QR.nodes.com.parentNode, root); - $.on(counter, 'click', this.toggle.bind(this)); - $.on(counter, 'keydown', (function(_this) { - return function(e) { - if (Keybinds.keyCode(e) !== 'Space') { - return; - } - _this.toggle(); - e.preventDefault(); - return e.stopPropagation(); - }; - })(this)); - return $.on(window, 'captcha:success', (function(_this) { - return function() { - return $.queueTask(function() { - return _this.save(false); - }); - }; - })(this)); - }, - timeouts: {}, - postsCount: 0, - noscriptURL: function() { - var lang, url; - url = 'https://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc'; - if ((lang = Conf['captchaLanguage'].trim())) { - url += "&hl=" + (encodeURIComponent(lang)); - } - return url; - }, - needed: function() { - var captchaCount; - captchaCount = this.captchas.length; - if (QR.req) { - captchaCount++; - } - this.postsCount = QR.posts.length; - if (this.postsCount === 1 && !Conf['Auto-load captcha'] && !QR.posts[0].com && !QR.posts[0].file) { - this.postsCount = 0; - } - return captchaCount < this.postsCount; - }, - onNewPost: function() { - return this.setup(); - }, - onPostChange: function() { - if (this.postsCount === 0) { - this.setup(); - } - if (QR.posts.length === 1 && !Conf['Auto-load captcha'] && !QR.posts[0].com && !QR.posts[0].file) { - return this.postsCount = 0; - } - }, - toggle: function() { - if (this.nodes.container && !this.timeouts.destroy) { - return this.destroy(); - } else { - return this.setup(true, true); - } - }, - setup: function(focus, force) { - if (!(this.isEnabled && (this.needed() || force))) { - return; - } - if (focus) { - $.addClass(QR.nodes.el, 'focus'); - this.nodes.counter.focus(); - } - if (this.timeouts.destroy) { - clearTimeout(this.timeouts.destroy); - delete this.timeouts.destroy; - return this.reload(); - } - if (this.nodes.container) { - $.queueTask((function(_this) { - return function() { - var iframe; - if (_this.nodes.container && d.activeElement === _this.nodes.counter && (iframe = $('iframe', _this.nodes.container))) { - iframe.focus(); - return QR.focus(); - } - }; - })(this)); - return; - } - this.nodes.container = $.el('div', { - className: 'captcha-container' - }); - $.prepend(this.nodes.root, this.nodes.container); - new MutationObserver(this.afterSetup.bind(this)).observe(this.nodes.container, { - childList: true, - subtree: true - }); - if (this.noscript) { - return this.setupNoscript(); - } else { - return this.setupJS(); - } - }, - setupNoscript: function() { - var div, iframe, textarea; - iframe = $.el('iframe', { - id: 'qr-captcha-iframe', - src: this.noscriptURL() - }); - div = $.el('div'); - textarea = $.el('textarea'); - $.add(div, textarea); - return $.add(this.nodes.container, [iframe, div]); - }, - setupJS: function() { - return $.global(function() { - var cbNative, render; - render = function() { - var classList, container; - classList = document.documentElement.classList; - container = document.querySelector('#qr .captcha-container'); - return container.dataset.widgetID = window.grecaptcha.render(container, { - sitekey: '6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc', - theme: classList.contains('tomorrow') || classList.contains('dark-captcha') ? 'dark' : 'light', - callback: function(response) { - return window.dispatchEvent(new CustomEvent('captcha:success', { - detail: response - })); - } - }); - }; - if (window.grecaptcha) { - return render(); - } else { - cbNative = window.onRecaptchaLoaded; - return window.onRecaptchaLoaded = function() { - render(); - return cbNative(); - }; - } - }); - }, - afterSetup: function(mutations) { - var iframe, k, len1, len2, mutation, node, q, ref, textarea; - for (k = 0, len1 = mutations.length; k < len1; k++) { - mutation = mutations[k]; - ref = mutation.addedNodes; - for (q = 0, len2 = ref.length; q < len2; q++) { - node = ref[q]; - if ((iframe = $.x('./descendant-or-self::iframe', node))) { - this.setupIFrame(iframe); - } - if ((textarea = $.x('./descendant-or-self::textarea', node))) { - this.setupTextArea(textarea); - } - } - } - }, - setupIFrame: function(iframe) { - if (!doc.contains(iframe)) { - return; - } - Captcha.replace.iframe(iframe); - $.addClass(QR.nodes.el, 'captcha-open'); - this.fixQRPosition(); - $.on(iframe, 'load', this.fixQRPosition); - if (d.activeElement === this.nodes.counter) { - iframe.focus(); - } - return $.global(function() { - var f; - f = document.querySelector('#qr iframe'); - return f.focus = f.blur = function() {}; - }); - }, - fixQRPosition: function() { - if (QR.nodes.el.getBoundingClientRect().bottom > doc.clientHeight) { - QR.nodes.el.style.top = null; - return QR.nodes.el.style.bottom = '0px'; - } - }, - setupTextArea: function(textarea) { - return $.one(textarea, 'input', (function(_this) { - return function() { - return _this.save(true); - }; - })(this)); - }, - destroy: function() { - var garbage, i, ins, node, ref; - if (!this.isEnabled) { - return; - } - delete this.timeouts.destroy; - $.rmClass(QR.nodes.el, 'captcha-open'); - if (this.nodes.container) { - $.rm(this.nodes.container); - } - delete this.nodes.container; - garbage = $.X('//iframe[starts-with(@src, "https://www.google.com/recaptcha/api2/frame")]/ancestor-or-self::*[parent::body]'); - i = 0; - while (node = garbage.snapshotItem(i++)) { - if (((ref = (ins = node.nextSibling)) != null ? ref.nodeName : void 0) === 'INS') { - $.rm(ins); - } - $.rm(node); - } - }, - sync: function(captchas) { - if (captchas == null) { - captchas = []; - } - this.captchas = captchas; - this.clear(); - return this.count(); - }, - getOne: function() { - var captcha; - this.clear(); - if ((captcha = this.captchas.shift())) { - $.set('captchas', this.captchas); - this.count(); - return captcha; - } else { - return null; - } - }, - save: function(pasted, token) { - var base1, focus, ref; - $.forceSync('captchas'); - this.captchas.push({ - response: token || $('textarea', this.nodes.container).value, - timeout: Date.now() + this.lifetime - }); - this.captchas.sort(function(a, b) { - return a.timeout - b.timeout; - }); - $.set('captchas', this.captchas); - this.count(); - focus = ((ref = d.activeElement) != null ? ref.nodeName : void 0) === 'IFRAME' && /https?:\/\/www\.google\.com\/recaptcha\//.test(d.activeElement.src); - if (this.needed()) { - if (focus) { - if (QR.cooldown.auto || Conf['Post on Captcha Completion']) { - this.nodes.counter.focus(); - } else { - QR.nodes.status.focus(); - } - } - this.reload(); - } else { - if (pasted) { - this.destroy(); - } else { - if ((base1 = this.timeouts).destroy == null) { - base1.destroy = setTimeout(this.destroy.bind(this), 3 * $.SECOND); - } - } - if (focus) { - QR.nodes.status.focus(); - } - } - if (Conf['Post on Captcha Completion'] && !QR.cooldown.auto) { - return QR.submit(); - } - }, - clear: function() { - var captcha, i, k, len1, now, ref; - if (!this.captchas.length) { - return; - } - $.forceSync('captchas'); - now = Date.now(); - ref = this.captchas; - for (i = k = 0, len1 = ref.length; k < len1; i = ++k) { - captcha = ref[i]; - if (captcha.timeout > now) { - break; - } - } - if (!i) { - return; - } - this.captchas = this.captchas.slice(i); - this.count(); - $.set('captchas', this.captchas); - return this.setup(d.activeElement === QR.nodes.status); - }, - count: function() { - this.nodes.counter.textContent = "Captchas: " + this.captchas.length; - clearTimeout(this.timeouts.clear); - if (this.captchas.length) { - return this.timeouts.clear = setTimeout(this.clear.bind(this), this.captchas[0].timeout - Date.now()); - } - }, - reload: function() { - if ($('iframe[src^="https://www.google.com/recaptcha/api/fallback?"]', this.nodes.container)) { - this.destroy(); - return this.setup(false, true); - } else { - return $.global(function() { - var container; - container = document.querySelector('#qr .captcha-container'); - return window.grecaptcha.reset(container.dataset.widgetID); - }); - } - } - }; - - PassLink = { - init: function() { - if (!Conf['Pass Link']) { - return; - } - return Main.ready(this.ready); - }, - ready: function() { - var passLink, styleSelector; - if (!(styleSelector = $.id('styleSelector'))) { - return; - } - passLink = $.el('span', { - className: 'brackets-wrap pass-link-container' - }); - $.extend(passLink, { - innerHTML: "4chan Pass" - }); - $.on(passLink.firstElementChild, 'click', function() { - return window.open('//sys.4chan.org/auth', Date.now(), 'width=500,height=280,toolbar=0'); - }); - return $.before(styleSelector.previousSibling, [passLink, $.tn('\u00A0\u00A0')]); - } - }; - - PostSuccessful = { - init: function() { - if (!Conf['Remember Your Posts']) { - return; - } - return $.ready(this.ready); - }, - ready: function() { - var _, db, postID, ref, threadID; - if (d.title !== 'Post successful!') { - return; - } - ref = $('h1').nextSibling.textContent.match(/thread:(\d+),no:(\d+)/), _ = ref[0], threadID = ref[1], postID = ref[2]; - postID = +postID; - threadID = +threadID || postID; - db = new DataBoard('yourPosts'); - return db.set({ - boardID: g.BOARD.ID, - threadID: threadID, - postID: postID, - val: true - }); - } - }; - - QR.cooldown = { - seconds: 0, - delays: { - thread: 0, - reply: 0, - image: 0, - reply_intra: 0, - image_intra: 0, - deletion: 60, - thread_global: 300 - }, - init: function() { - if (!Conf['Quick Reply']) { - return; - } - this.data = Conf['cooldowns']; - return $.sync('cooldowns', this.sync); - }, - setup: function() { - var delay, m, ref, type; - if (m = Get.scriptData().match(/\bcooldowns *= *({[^}]+})/)) { - $.extend(QR.cooldown.delays, JSON.parse(m[1])); - } - QR.cooldown.maxDelay = 0; - ref = QR.cooldown.delays; - for (type in ref) { - delay = ref[type]; - if (type !== 'thread' && type !== 'thread_global') { - QR.cooldown.maxDelay = Math.max(QR.cooldown.maxDelay, delay); - } - } - QR.cooldown.isSetup = true; - return QR.cooldown.start(); - }, - start: function() { - var data; - data = QR.cooldown.data; - if (!(Conf['Cooldown'] && QR.cooldown.isSetup && !QR.cooldown.isCounting && Object.keys(data[g.BOARD.ID] || {}).length + Object.keys(data.global || {}).length > 0)) { - return; - } - QR.cooldown.isCounting = true; - return QR.cooldown.count(); - }, - sync: function(data) { - QR.cooldown.data = data || {}; - return QR.cooldown.start(); - }, - add: function(threadID, postID) { - var boardID, start; - if (!Conf['Cooldown']) { - return; - } - start = Date.now(); - boardID = g.BOARD.ID; - QR.cooldown.set(boardID, start, { - threadID: threadID, - postID: postID - }); - if (threadID === postID) { - QR.cooldown.set('global', start, { - boardID: boardID, - threadID: threadID, - postID: postID - }); - } - return QR.cooldown.start(); - }, - addDelay: function(post, delay) { - var cooldown; - if (!Conf['Cooldown']) { - return; - } - cooldown = QR.cooldown.categorize(post); - cooldown.delay = delay; - QR.cooldown.set(g.BOARD.ID, Date.now(), cooldown); - return QR.cooldown.start(); - }, - addMute: function(delay) { - if (!Conf['Cooldown']) { - return; - } - QR.cooldown.set(g.BOARD.ID, Date.now(), { - type: 'mute', - delay: delay - }); - return QR.cooldown.start(); - }, - "delete": function(post) { - var base1, cooldown, cooldowns, id, name1; - if (!QR.cooldown.data) { - return; - } - $.forceSync('cooldowns'); - cooldowns = ((base1 = QR.cooldown.data)[name1 = post.board.ID] || (base1[name1] = {})); - for (id in cooldowns) { - cooldown = cooldowns[id]; - if ((cooldown.delay == null) && cooldown.threadID === post.thread.ID && cooldown.postID === post.ID) { - delete cooldowns[id]; - } - } - return QR.cooldown.save([post.board.ID]); - }, - secondsDeletion: function(post) { - var cooldown, cooldowns, seconds, start; - if (!(QR.cooldown.data && Conf['Cooldown'])) { - return 0; - } - cooldowns = QR.cooldown.data[post.board.ID] || {}; - for (start in cooldowns) { - cooldown = cooldowns[start]; - if ((cooldown.delay == null) && cooldown.threadID === post.thread.ID && cooldown.postID === post.ID) { - seconds = QR.cooldown.delays.deletion - Math.floor((Date.now() - start) / $.SECOND); - return Math.max(seconds, 0); - } - } - return 0; - }, - categorize: function(post) { - if (post.thread === 'new') { - return { - type: 'thread' - }; - } else { - return { - type: !!post.file ? 'image' : 'reply', - threadID: +post.thread - }; - } - }, - set: function(scope, id, value) { - var base1, cooldowns; - $.forceSync('cooldowns'); - cooldowns = ((base1 = QR.cooldown.data)[scope] || (base1[scope] = {})); - cooldowns[id] = value; - return $.set('cooldowns', QR.cooldown.data); - }, - save: function(scopes) { - var data, k, len1, scope; - data = QR.cooldown.data; - for (k = 0, len1 = scopes.length; k < len1; k++) { - scope = scopes[k]; - if (scope in data && !Object.keys(data[scope]).length) { - delete data[scope]; - } - } - return $.set('cooldowns', data); - }, - count: function() { - var base1, cooldown, cooldowns, elapsed, k, len1, maxDelay, nCooldowns, now, ref, ref1, save, scope, seconds, start, suffix, threadID, type, update; - $.forceSync('cooldowns'); - save = []; - nCooldowns = 0; - now = Date.now(); - ref = QR.cooldown.categorize(QR.posts[0]), type = ref.type, threadID = ref.threadID; - seconds = 0; - if (Conf['Cooldown']) { - ref1 = [g.BOARD.ID, 'global']; - for (k = 0, len1 = ref1.length; k < len1; k++) { - scope = ref1[k]; - cooldowns = ((base1 = QR.cooldown.data)[scope] || (base1[scope] = {})); - for (start in cooldowns) { - cooldown = cooldowns[start]; - start = +start; - elapsed = Math.floor((now - start) / $.SECOND); - if (elapsed < 0) { - delete cooldowns[start]; - save.push(scope); - continue; - } - if (cooldown.delay != null) { - if (cooldown.delay <= elapsed) { - delete cooldowns[start]; - save.push(scope); - } else if ((cooldown.type === type && cooldown.threadID === threadID) || cooldown.type === 'mute') { - seconds = Math.max(seconds, cooldown.delay - elapsed); - } - continue; - } - maxDelay = cooldown.threadID !== cooldown.postID ? QR.cooldown.maxDelay : QR.cooldown.delays[scope === 'global' ? 'thread_global' : 'thread']; - if (QR.cooldown.customCooldown) { - maxDelay = Math.max(maxDelay, parseInt(Conf['customCooldown'], 10)); - } - if (maxDelay <= elapsed) { - delete cooldowns[start]; - save.push(scope); - continue; - } - if ((type === 'thread') === (cooldown.threadID === cooldown.postID) && cooldown.boardID !== g.BOARD.ID) { - suffix = scope === 'global' ? '_global' : type !== 'thread' && threadID === cooldown.threadID ? '_intra' : ''; - seconds = Math.max(seconds, QR.cooldown.delays[type + suffix] - elapsed); - } - if (QR.cooldown.customCooldown) { - seconds = Math.max(seconds, parseInt(Conf['customCooldown'], 10) - elapsed); - } - } - nCooldowns += Object.keys(cooldowns).length; - } - } - if (save.length) { - QR.cooldown.save(save); - } - if (nCooldowns) { - clearTimeout(QR.cooldown.timeout); - QR.cooldown.timeout = setTimeout(QR.cooldown.count, $.SECOND); - } else { - delete QR.cooldown.isCounting; - } - update = seconds !== QR.cooldown.seconds; - QR.cooldown.seconds = seconds; - if (update) { - QR.status(); - } - if (seconds === 0 && QR.cooldown.auto && !QR.req) { - return QR.submit(); - } - } - }; - - QR.oekaki = { - menu: { - init: function() { - var a, ref; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Edit Link'] && Conf['Quick Reply'])) { - return; - } - a = $.el('a', { - className: 'edit-link', - href: 'javascript:;', - textContent: 'Edit image' - }); - $.on(a, 'click', this.editFile); - return Menu.menu.addEntry({ - el: a, - order: 95, - open: function(post) { - var file; - QR.oekaki.menu.post = post; - file = post.file; - return QR.postingIsEnabled && !!file && (file.isImage || file.isVideo); - } - }); - }, - editFile: function() { - var currentTime, isVideo, post, ref; - post = QR.oekaki.menu.post; - QR.quote.call(post.nodes.post); - isVideo = post.file.isVideo; - currentTime = ((ref = post.file.fullImage) != null ? ref.currentTime : void 0) || 0; - return CrossOrigin.file(post.file.url, function(blob) { - var video; - if (!blob) { - return QR.error("Can't load file."); - } else if (isVideo) { - video = $.el('video'); - $.on(video, 'loadedmetadata', function() { - $.on(video, 'seeked', function() { - var canvas; - canvas = $.el('canvas', { - width: video.videoWidth, - height: video.videoHeight - }); - canvas.getContext('2d').drawImage(video, 0, 0); - return canvas.toBlob(function(snapshot) { - snapshot.name = post.file.name.replace(/\.\w+$/, '') + '.png'; - QR.handleFiles([snapshot]); - return QR.oekaki.edit(); - }); - }); - return video.currentTime = currentTime; - }); - return video.src = URL.createObjectURL(blob); - } else { - blob.name = post.file.name; - QR.handleFiles([blob]); - return QR.oekaki.edit(); - } - }); - } - }, - setup: function() { - return $.global(function() { - var FCX; - FCX = window.FCX; - FCX.oekakiCB = function() { - return window.Tegaki.flatten().toBlob(function(file) { - var source; - source = "oekaki-" + (Date.now()); - FCX.oekakiLatest = source; - return document.dispatchEvent(new CustomEvent('QRSetFile', { - bubbles: true, - detail: { - file: file, - name: FCX.oekakiName, - source: source - } - })); - }); - }; - if (window.Tegaki) { - return document.querySelector('#qr .oekaki').hidden = false; - } - }); - }, - load: function(cb) { - var n, onload, script, style; - if ($('script[src^="//s.4cdn.org/js/painter"]', d.head)) { - return cb(); - } else { - style = $.el('link', { - rel: 'stylesheet', - href: "//s.4cdn.org/css/painter." + (Date.now()) + ".css" - }); - script = $.el('script', { - src: "//s.4cdn.org/js/painter.min." + (Date.now()) + ".js" - }); - n = 0; - onload = function() { - if (++n === 2) { - return cb(); - } - }; - $.on(style, 'load', onload); - $.on(script, 'load', onload); - return $.add(d.head, [style, script]); - } - }, - draw: function() { - return $.global(function() { - var FCX, Tegaki; - Tegaki = window.Tegaki, FCX = window.FCX; - if (Tegaki.bg) { - Tegaki.destroy(); - } - FCX.oekakiName = 'tegaki.png'; - return Tegaki.open({ - onDone: FCX.oekakiCB, - onCancel: function() { - return Tegaki.bgColor = '#ffffff'; - }, - width: +document.querySelector('#qr [name=oekaki-width]').value, - height: +document.querySelector('#qr [name=oekaki-height]').value, - bgColor: document.querySelector('#qr [name=oekaki-bg]').checked ? document.querySelector('#qr [name=oekaki-bgcolor]').value : 'transparent' - }); - }); - }, - button: function() { - if (QR.selected.file) { - return QR.oekaki.edit(); - } else { - return QR.oekaki.toggle(); - } - }, - edit: function() { - return QR.oekaki.load(function() { - return $.global(function() { - var FCX, Tegaki, cb, error, name, source; - Tegaki = window.Tegaki, FCX = window.FCX; - name = document.getElementById('qr-filename').value.replace(/\.\w+$/, '') + '.png'; - source = document.getElementById('file-n-submit').dataset.source; - error = function(content) { - return document.dispatchEvent(new CustomEvent('CreateNotification', { - bubbles: true, - detail: { - type: 'warning', - content: content, - lifetime: 20 - } - })); - }; - cb = function(e) { - var file, isVideo; - document.removeEventListener('QRFile', cb, false); - if (!e.detail) { - return error('No file to edit.'); - } - if (!/^(image|video)\//.test(e.detail.type)) { - return error('Not an image.'); - } - isVideo = /^video\//.test(e.detail.type); - file = document.createElement(isVideo ? 'video' : 'img'); - file.addEventListener('error', function() { - return error('Could not open file.', false); - }); - file.addEventListener((isVideo ? 'loadeddata' : 'load'), function() { - if (Tegaki.bg) { - Tegaki.destroy(); - } - FCX.oekakiName = name; - Tegaki.open({ - onDone: FCX.oekakiCB, - onCancel: function() { - return Tegaki.bgColor = '#ffffff'; - }, - width: file.naturalWidth || file.videoWidth, - height: file.naturalHeight || file.videoHeight, - bgColor: 'transparent' - }); - return Tegaki.activeCtx.drawImage(file, 0, 0); - }, false); - return file.src = URL.createObjectURL(e.detail); - }; - if (Tegaki.bg && Tegaki.onDoneCb === FCX.oekakiCB && source === FCX.oekakiLatest) { - FCX.oekakiName = name; - return Tegaki.resume(); - } else { - document.addEventListener('QRFile', cb, false); - return document.dispatchEvent(new CustomEvent('QRGetFile', { - bubbles: true - })); - } - }); - }); - }, - toggle: function() { - return QR.oekaki.load(function() { - return QR.nodes.oekaki.hidden = !QR.nodes.oekaki.hidden; - }); - } - }; - - QR.persona = { - pwd: '', - always: {}, - init: function() { - QR.persona.getPassword(); - return $.get('QR.personas', Conf['QR.personas'], function(arg) { - var arr, item, k, len1, personas, ref, type, types; - personas = arg['QR.personas']; - types = { - name: [], - email: [], - sub: [] - }; - ref = personas.split('\n'); - for (k = 0, len1 = ref.length; k < len1; k++) { - item = ref[k]; - QR.persona.parseItem(item.trim(), types); - } - for (type in types) { - arr = types[type]; - QR.persona.loadPersonas(type, arr); - } - }); - }, - parseItem: function(item, types) { - var boards, match, ref, ref1, ref2, type, val; - if (item[0] === '#') { - return; - } - if (!(match = item.match(/(name|options|email|subject|password):"(.*)"/i))) { - return; - } - ref = match, match = ref[0], type = ref[1], val = ref[2]; - item = item.replace(match, ''); - boards = ((ref1 = item.match(/boards:([^;]+)/i)) != null ? ref1[1].toLowerCase() : void 0) || 'global'; - if (boards !== 'global' && (ref2 = g.BOARD.ID, indexOf.call(boards.split(','), ref2) < 0)) { - return; - } - if (type === 'password') { - QR.persona.pwd = val; - return; - } - if (type === 'options') { - type = 'email'; - } - if (type === 'subject') { - type = 'sub'; - } - if (/always/i.test(item)) { - QR.persona.always[type] = val; - } - if (indexOf.call(types[type], val) < 0) { - return types[type].push(val); - } - }, - loadPersonas: function(type, arr) { - var k, len1, list, val; - list = $("#list-" + type, QR.nodes.el); - for (k = 0, len1 = arr.length; k < len1; k++) { - val = arr[k]; - if (val) { - $.add(list, $.el('option', { - textContent: val - })); - } - } - }, - getPassword: function() { - var input, m, ref; - if (!QR.persona.pwd) { - QR.persona.pwd = (m = d.cookie.match(/4chan_pass=([^;]+)/)) ? decodeURIComponent(m[1]) : (input = $.id('postPassword')) ? input.value : ((ref = $.id('delPassword')) != null ? ref.value : void 0) || ''; - } - return QR.persona.pwd; - }, - get: function(cb) { - return $.get('QR.persona', {}, function(arg) { - var persona; - persona = arg['QR.persona']; - return cb(persona); - }); - }, - set: function(post) { - return $.get('QR.persona', {}, function(arg) { - var persona; - persona = arg['QR.persona']; - persona = { - name: post.name - }; - return $.set('QR.persona', persona); - }); - } - }; - - QR.post = (function() { - function _Class(select) { - this.select = bind(this.select, this); - var el, event, k, label, len1, len2, prev, q, ref, ref1; - el = $.el('a', { - className: 'qr-preview', - draggable: true, - href: 'javascript:;' - }); - $.extend(el, { - innerHTML: "" - }); - this.nodes = { - el: el, - rm: el.firstChild, - spoiler: $('.qr-preview-spoiler input', el), - span: el.lastChild - }; - $.on(el, 'click', this.select); - $.on(this.nodes.rm, 'click', (function(_this) { - return function(e) { - e.stopPropagation(); - return _this.rm(); - }; - })(this)); - $.on(this.nodes.spoiler, 'change', (function(_this) { - return function(e) { - _this.spoiler = e.target.checked; - if (_this === QR.selected) { - return QR.nodes.spoiler.checked = _this.spoiler; - } - }; - })(this)); - ref = $$('label', el); - for (k = 0, len1 = ref.length; k < len1; k++) { - label = ref[k]; - $.on(label, 'click', function(e) { - return e.stopPropagation(); - }); - } - $.add(QR.nodes.dumpList, el); - ref1 = ['dragStart', 'dragEnter', 'dragLeave', 'dragOver', 'dragEnd', 'drop']; - for (q = 0, len2 = ref1.length; q < len2; q++) { - event = ref1[q]; - $.on(el, event.toLowerCase(), this[event]); - } - this.thread = g.VIEW === 'thread' ? g.THREADID : 'new'; - prev = QR.posts[QR.posts.length - 1]; - QR.posts.push(this); - this.nodes.spoiler.checked = this.spoiler = prev && Conf['Remember Spoiler'] ? prev.spoiler : false; - QR.persona.get((function(_this) { - return function(persona) { - _this.name = 'name' in QR.persona.always ? QR.persona.always.name : prev ? prev.name : persona.name; - _this.email = 'email' in QR.persona.always ? QR.persona.always.email : ''; - _this.sub = 'sub' in QR.persona.always ? QR.persona.always.sub : ''; - if (QR.selected === _this) { - return _this.load(); - } - }; - })(this)); - if (select) { - this.select(); - } - this.unlock(); - $.queueTask(function() { - return QR.captcha.onNewPost(); - }); - } - - _Class.prototype.rm = function() { - var index; - this["delete"](); - index = QR.posts.indexOf(this); - if (QR.posts.length === 1) { - new QR.post(true); - $.rmClass(QR.nodes.el, 'dump'); - } else if (this === QR.selected) { - (QR.posts[index - 1] || QR.posts[index + 1]).select(); - } - QR.posts.splice(index, 1); - return QR.status(); - }; - - _Class.prototype["delete"] = function() { - $.rm(this.nodes.el); - URL.revokeObjectURL(this.URL); - return this.dismissErrors(); - }; - - _Class.prototype.lock = function(lock) { - var k, len1, name, node, ref; - if (lock == null) { - lock = true; - } - this.isLocked = lock; - if (this !== QR.selected) { - return; - } - ref = ['thread', 'name', 'email', 'sub', 'com', 'fileButton', 'filename', 'spoiler']; - for (k = 0, len1 = ref.length; k < len1; k++) { - name = ref[k]; - if (node = QR.nodes[name]) { - node.disabled = lock; - } - } - this.nodes.rm.style.visibility = lock ? 'hidden' : ''; - this.nodes.spoiler.disabled = lock; - return this.nodes.el.draggable = !lock; - }; - - _Class.prototype.unlock = function() { - return this.lock(false); - }; - - _Class.prototype.select = function() { - var rectEl, rectList; - if (QR.selected) { - QR.selected.nodes.el.removeAttribute('id'); - QR.selected.forceSave(); - } - QR.selected = this; - this.lock(this.isLocked); - this.nodes.el.id = 'selected'; - rectEl = this.nodes.el.getBoundingClientRect(); - rectList = this.nodes.el.parentNode.getBoundingClientRect(); - this.nodes.el.parentNode.scrollLeft += rectEl.left + rectEl.width / 2 - rectList.left - rectList.width / 2; - return this.load(); - }; - - _Class.prototype.load = function() { - var k, len1, name, node, ref; - ref = ['thread', 'name', 'email', 'sub', 'com', 'filename']; - for (k = 0, len1 = ref.length; k < len1; k++) { - name = ref[k]; - if (!(node = QR.nodes[name])) { - continue; - } - node.value = this[name] || node.dataset["default"] || ''; - } - (this.thread !== 'new' ? $.addClass : $.rmClass)(QR.nodes.el, 'reply-to-thread'); - this.showFileData(); - return QR.characterCount(); - }; - - _Class.prototype.save = function(input) { - var name, ref; - if (input.type === 'checkbox') { - this.spoiler = input.checked; - return; - } - name = input.dataset.name; - this[name] = input.value || input.dataset["default"] || null; - switch (name) { - case 'thread': - (this.thread !== 'new' ? $.addClass : $.rmClass)(QR.nodes.el, 'reply-to-thread'); - return QR.status(); - case 'com': - this.updateComment(); - if (QR.cooldown.auto && this === QR.posts[0] && (0 < (ref = QR.cooldown.seconds) && ref <= 5)) { - return QR.cooldown.auto = false; - } - break; - case 'filename': - if (!this.file) { - return; - } - this.saveFilename(); - return this.updateFilename(); - case 'name': - return QR.persona.set(this); - } - }; - - _Class.prototype.forceSave = function() { - var k, len1, name, node, ref; - if (this !== QR.selected) { - return; - } - ref = ['thread', 'name', 'email', 'sub', 'com', 'filename', 'spoiler']; - for (k = 0, len1 = ref.length; k < len1; k++) { - name = ref[k]; - if (!(node = QR.nodes[name])) { - continue; - } - this.save(node); - } - }; - - _Class.prototype.setComment = function(com) { - this.com = com || null; - if (this === QR.selected) { - QR.nodes.com.value = this.com; - } - return this.updateComment(); - }; - - _Class.prototype.updateComment = function() { - if (this === QR.selected) { - QR.characterCount(); - } - this.nodes.span.textContent = this.com; - return $.queueTask(function() { - return QR.captcha.onPostChange(); - }); - }; - - _Class.rmErrored = function(e) { - var error, errors, k, len1, post, q, ref; - e.stopPropagation(); - ref = QR.posts; - for (k = ref.length - 1; k >= 0; k += -1) { - post = ref[k]; - if (errors = post.errors) { - for (q = 0, len1 = errors.length; q < len1; q++) { - error = errors[q]; - if (!(doc.contains(error))) { - continue; - } - post.rm(); - break; - } - } - } - }; - - _Class.prototype.error = function(className, message) { - var div, ref, rm, rmAll; - div = $.el('div', { - className: className - }); - $.extend(div, { - innerHTML: E(message) + "
[delete] [delete all]" - }); - (this.errors || (this.errors = [])).push(div); - ref = $$('a', div), rm = ref[0], rmAll = ref[1]; - $.on(div, 'click', (function(_this) { - return function() { - if (indexOf.call(QR.posts, _this) >= 0) { - return _this.select(); - } - }; - })(this)); - $.on(rm, 'click', (function(_this) { - return function(e) { - e.stopPropagation(); - if (indexOf.call(QR.posts, _this) >= 0) { - return _this.rm(); - } - }; - })(this)); - $.on(rmAll, 'click', QR.post.rmErrored); - return QR.error(div, true); - }; - - _Class.prototype.fileError = function(message) { - return this.error('file-error', this.filename + ": " + message); - }; - - _Class.prototype.dismissErrors = function(test) { - var error, k, len1, ref; - if (test == null) { - test = function() { - return true; - }; - } - if (this.errors) { - ref = this.errors; - for (k = 0, len1 = ref.length; k < len1; k++) { - error = ref[k]; - if (doc.contains(error) && test(error)) { - error.parentNode.previousElementSibling.click(); - } - } - } - }; - - _Class.prototype.setFile = function(file1) { - var ext, ref; - this.file = file1; - if (Conf['Randomize Filename'] && g.BOARD.ID !== 'f') { - this.filename = "" + (Date.now() - Math.floor(Math.random() * 365 * $.DAY)); - if (ext = this.file.name.match(QR.validExtension)) { - this.filename += ext[0]; - } - } else { - this.filename = this.file.name; - } - this.filesize = $.bytesToString(this.file.size); - this.checkSize(); - $.addClass(this.nodes.el, 'has-file'); - $.queueTask(function() { - return QR.captcha.onPostChange(); - }); - URL.revokeObjectURL(this.URL); - this.saveFilename(); - if (this === QR.selected) { - this.showFileData(); - } else { - this.updateFilename(); - } - this.nodes.el.style.backgroundImage = null; - if (ref = this.file.type, indexOf.call(QR.mimeTypes, ref) < 0) { - return this.fileError('Unsupported file type.'); - } else if (/^(image|video)\//.test(this.file.type)) { - return this.readFile(); - } - }; - - _Class.prototype.checkSize = function() { - var max; - max = QR.max_size; - if (/^video\//.test(this.file.type)) { - max = Math.min(max, QR.max_size_video); - } - if (this.file.size > max) { - return this.fileError("File too large (file: " + this.filesize + ", max: " + ($.bytesToString(max)) + ")."); - } - }; - - _Class.prototype.readFile = function() { - var el, event, isVideo, onerror, onload; - isVideo = /^video\//.test(this.file.type); - el = $.el(isVideo ? 'video' : 'img'); - if (isVideo && !el.canPlayType(this.file.type)) { - return; - } - event = isVideo ? 'loadeddata' : 'load'; - onload = (function(_this) { - return function() { - $.off(el, event, onload); - $.off(el, 'error', onerror); - _this.checkDimensions(el); - return _this.setThumbnail(el); - }; - })(this); - onerror = (function(_this) { - return function() { - $.off(el, event, onload); - $.off(el, 'error', onerror); - _this.fileError((isVideo ? 'Video' : 'Image') + " appears corrupt"); - return URL.revokeObjectURL(el.src); - }; - })(this); - $.on(el, event, onload); - $.on(el, 'error', onerror); - return el.src = URL.createObjectURL(this.file); - }; - - _Class.prototype.checkDimensions = function(el) { - var duration, height, max_height, max_width, ref, videoHeight, videoWidth, width; - if (el.tagName === 'IMG') { - height = el.height, width = el.width; - if (height > QR.max_height || width > QR.max_width) { - this.fileError("Image too large (image: " + height + "x" + width + "px, max: " + QR.max_height + "x" + QR.max_width + "px)"); - } - if (height < QR.min_height || width < QR.min_width) { - return this.fileError("Image too small (image: " + height + "x" + width + "px, min: " + QR.min_height + "x" + QR.min_width + "px)"); - } - } else { - videoHeight = el.videoHeight, videoWidth = el.videoWidth, duration = el.duration; - max_height = Math.min(QR.max_height, QR.max_height_video); - max_width = Math.min(QR.max_width, QR.max_width_video); - if (videoHeight > max_height || videoWidth > max_width) { - this.fileError("Video too large (video: " + videoHeight + "x" + videoWidth + "px, max: " + max_height + "x" + max_width + "px)"); - } - if (videoHeight < QR.min_height || videoWidth < QR.min_width) { - this.fileError("Video too small (video: " + videoHeight + "x" + videoWidth + "px, min: " + QR.min_height + "x" + QR.min_width + "px)"); - } - if (!isFinite(duration)) { - this.fileError('Video lacks duration metadata (try remuxing)'); - } else if (duration > QR.max_duration_video) { - this.fileError("Video too long (video: " + duration + "s, max: " + QR.max_duration_video + "s)"); - } - if (((ref = g.BOARD.ID) !== 'gif' && ref !== 'wsg') && $.hasAudio(el)) { - return this.fileError('Audio not allowed'); - } - } - }; - - _Class.prototype.setThumbnail = function(el) { - var cv, height, isVideo, s, width; - isVideo = el.tagName === 'VIDEO'; - s = 90 * 2 * window.devicePixelRatio; - if (this.file.type === 'image/gif') { - s *= 3; - } - if (isVideo) { - height = el.videoHeight; - width = el.videoWidth; - } else { - height = el.height, width = el.width; - if (height < s || width < s) { - this.URL = el.src; - this.nodes.el.style.backgroundImage = "url(" + this.URL + ")"; - return; - } - } - if (height <= width) { - width = s / height * width; - height = s; - } else { - height = s / width * height; - width = s; - } - cv = $.el('canvas'); - cv.height = height; - cv.width = width; - cv.getContext('2d').drawImage(el, 0, 0, width, height); - URL.revokeObjectURL(el.src); - return cv.toBlob((function(_this) { - return function(blob) { - _this.URL = URL.createObjectURL(blob); - return _this.nodes.el.style.backgroundImage = "url(" + _this.URL + ")"; - }; - })(this)); - }; - - _Class.prototype.rmFile = function() { - if (this.isLocked) { - return; - } - delete this.file; - delete this.filename; - delete this.filesize; - this.nodes.el.removeAttribute('title'); - QR.nodes.filename.removeAttribute('title'); - this.nodes.el.style.backgroundImage = null; - $.rmClass(this.nodes.el, 'has-file'); - this.showFileData(); - URL.revokeObjectURL(this.URL); - return this.dismissErrors(function(error) { - return $.hasClass(error, 'file-error'); - }); - }; - - _Class.prototype.saveFilename = function() { - this.file.newName = (this.filename || '').replace(/[\/\\]/g, '-'); - if (!QR.validExtension.test(this.filename)) { - return this.file.newName += "." + (QR.extensionFromType[this.file.type] || 'jpg'); - } - }; - - _Class.prototype.updateFilename = function() { - var long; - long = this.filename + " (" + this.filesize + ")"; - this.nodes.el.title = long; - if (this !== QR.selected) { - return; - } - return QR.nodes.filename.title = long; - }; - - _Class.prototype.showFileData = function() { - var ref; - if (this.file) { - this.updateFilename(); - QR.nodes.filename.value = this.filename; - $.addClass(QR.nodes.oekaki, 'has-file'); - $.addClass(QR.nodes.fileSubmit, 'has-file'); - } else { - $.rmClass(QR.nodes.oekaki, 'has-file'); - $.rmClass(QR.nodes.fileSubmit, 'has-file'); - } - if (((ref = this.file) != null ? ref.source : void 0) != null) { - QR.nodes.fileSubmit.dataset.source = this.file.source; - } else { - QR.nodes.fileSubmit.removeAttribute('data-source'); - } - return QR.nodes.spoiler.checked = this.spoiler; - }; - - _Class.prototype.pasteText = function(file) { - var reader; - this.pasting = true; - reader = new FileReader(); - reader.onload = (function(_this) { - return function(e) { - var result; - result = e.target.result; - _this.setComment((_this.com ? _this.com + "\n" + result : result)); - return delete _this.pasting; - }; - })(this); - return reader.readAsText(file); - }; - - _Class.prototype.dragStart = function(e) { - var left, ref, top; - ref = this.getBoundingClientRect(), left = ref.left, top = ref.top; - e.dataTransfer.setDragImage(this, e.clientX - left, e.clientY - top); - return $.addClass(this, 'drag'); - }; - - _Class.prototype.dragEnd = function() { - return $.rmClass(this, 'drag'); - }; - - _Class.prototype.dragEnter = function() { - return $.addClass(this, 'over'); - }; - - _Class.prototype.dragLeave = function() { - return $.rmClass(this, 'over'); - }; - - _Class.prototype.dragOver = function(e) { - e.preventDefault(); - return e.dataTransfer.dropEffect = 'move'; - }; - - _Class.prototype.drop = function() { - var el, index, newIndex, oldIndex, post; - $.rmClass(this, 'over'); - if (!this.draggable) { - return; - } - el = $('.drag', this.parentNode); - index = function(el) { - return slice.call(el.parentNode.children).indexOf(el); - }; - oldIndex = index(el); - newIndex = index(this); - (oldIndex < newIndex ? $.after : $.before)(this, el); - post = QR.posts.splice(oldIndex, 1)[0]; - QR.posts.splice(newIndex, 0, post); - return QR.status(); - }; - - return _Class; - - })(); - - FappeTyme = { - init: function() { - var el, k, lc, len1, ref, ref1, type; - if (!((Conf['Fappe Tyme'] || Conf['Werk Tyme']) && ((ref = g.VIEW) === 'index' || ref === 'thread'))) { - return; - } - this.nodes = {}; - this.enabled = { - fappe: false, - werk: Conf['werk'] - }; - ref1 = ["Fappe", "Werk"]; - for (k = 0, len1 = ref1.length; k < len1; k++) { - type = ref1[k]; - if (!Conf[type + " Tyme"]) { - continue; - } - lc = type.toLowerCase(); - el = UI.checkbox(lc, type + " Tyme", false); - el.title = type + " Tyme"; - this.nodes[lc] = el.firstElementChild; - if (Conf[lc]) { - this.set(lc, true); - } - $.on(this.nodes[lc], 'change', this.toggle.bind(this, lc)); - Header.menu.addEntry({ - el: el, - order: 97 - }); - } - if (Conf['Werk Tyme']) { - $.sync('werk', this.set.bind(this, 'werk')); - } - Post.callbacks.push({ - name: 'Fappe Tyme', - cb: this.node - }); - return CatalogThread.callbacks.push({ - name: 'Werk Tyme', - cb: this.catalogNode - }); - }, - node: function() { - return this.nodes.root.classList.toggle('noFile', !this.file); - }, - catalogNode: function() { - var file, filename; - file = this.thread.OP.file; - if (!file) { - return; - } - filename = $.el('div', { - textContent: file.name, - className: 'werkTyme-filename' - }); - return $.add(this.nodes.thumb.parentNode, filename); - }, - set: function(type, enabled) { - this.enabled[type] = this.nodes[type].checked = enabled; - return $[(enabled ? 'add' : 'rm') + "Class"](doc, type + "Tyme"); - }, - toggle: function(type) { - this.set(type, !this.enabled[type]); - if (type === 'werk') { - return $.cb.checked.call(this.nodes[type]); - } - } - }; - - Gallery = { - init: function() { - var el, ref; - if (!(this.enabled = Conf['Gallery'] && ((ref = g.VIEW) === 'index' || ref === 'thread') && g.BOARD.ID !== 'f')) { - return; - } - this.delay = Conf['Slide Delay']; - el = $.el('a', { - href: 'javascript:;', - id: 'appchan-gal', - title: 'Gallery', - className: 'fa fa-picture-o', - textContent: 'Gallery' - }); - $.on(el, 'click', this.cb.toggle); - Header.addShortcut(el); - return Post.callbacks.push({ - name: 'Gallery', - cb: this.node - }); - }, - node: function() { - var ref; - if (!((ref = this.file) != null ? ref.thumb : void 0)) { - return; - } - if (Gallery.nodes) { - Gallery.generateThumb(this); - Gallery.nodes.total.textContent = Gallery.images.length; - } - if (!Conf['Image Expansion']) { - return $.on(this.file.thumb.parentNode, 'click', Gallery.cb.image); - } - }, - build: function(image) { - var candidate, cb, dialog, entry, file, k, key, len1, len2, menuButton, nodes, post, q, ref, ref1, ref2, ref3, thumb, value; - cb = Gallery.cb; - if (Conf['Fullscreen Gallery']) { - $.one(d, 'fullscreenchange mozfullscreenchange webkitfullscreenchange', function() { - return $.on(d, 'fullscreenchange mozfullscreenchange webkitfullscreenchange', cb.close); - }); - if (typeof doc.mozRequestFullScreen === "function") { - doc.mozRequestFullScreen(); - } - if (typeof doc.webkitRequestFullScreen === "function") { - doc.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT); - } - } - Gallery.images = []; - nodes = Gallery.nodes = {}; - Gallery.fullIDs = {}; - Gallery.slideshow = false; - nodes.el = dialog = $.el('div', { - id: 'a-gallery' - }); - $.extend(dialog, { - innerHTML: "
" - }); - ref = { - buttons: '.gal-buttons', - frame: '.gal-image', - name: '.gal-name', - count: '.count', - total: '.total', - thumbs: '.gal-thumbnails', - next: '.gal-image a', - current: '.gal-image img' - }; - for (key in ref) { - value = ref[key]; - nodes[key] = $(value, dialog); - } - menuButton = $('.menu-button', dialog); - nodes.menu = new UI.Menu('gallery'); - $.on(nodes.frame, 'click', cb.blank); - if (Conf['Mouse Wheel Volume']) { - $.on(nodes.frame, 'wheel', Volume.wheel); - } - $.on(nodes.next, 'click', cb.click); - $.on(nodes.name, 'click', ImageCommon.download); - $.on($('.gal-prev', dialog), 'click', cb.prev); - $.on($('.gal-next', dialog), 'click', cb.next); - $.on($('.gal-start', dialog), 'click', cb.start); - $.on($('.gal-stop', dialog), 'click', cb.stop); - $.on($('.gal-close', dialog), 'click', cb.close); - $.on(menuButton, 'click', function(e) { - return nodes.menu.toggle(e, this, g); - }); - ref1 = Gallery.menu.createSubEntries(); - for (k = 0, len1 = ref1.length; k < len1; k++) { - entry = ref1[k]; - entry.order = 0; - nodes.menu.addEntry(entry); - } - $.on(d, 'keydown', cb.keybinds); - if (Conf['Keybinds']) { - $.off(d, 'keydown', Keybinds.keydown); - } - $.on(window, 'resize', Gallery.cb.setHeight); - ref2 = $$('.post .file'); - for (q = 0, len2 = ref2.length; q < len2; q++) { - file = ref2[q]; - post = Get.postFromNode(file); - if (!((ref3 = post.file) != null ? ref3.thumb : void 0)) { - continue; - } - Gallery.generateThumb(post); - if (!image && Gallery.fullIDs[post.fullID]) { - candidate = post.file.thumb.parentNode; - if (Header.getTopOf(candidate) + candidate.getBoundingClientRect().height >= 0) { - image = candidate; - } - } - } - $.addClass(doc, 'gallery-open'); - $.add(d.body, dialog); - nodes.thumbs.scrollTop = 0; - nodes.current.parentElement.scrollTop = 0; - if (image) { - thumb = $("[href='" + image.href + "']", nodes.thumbs); - } - thumb || (thumb = Gallery.images[Gallery.images.length - 1]); - if (thumb) { - Gallery.open(thumb); - } - doc.style.overflow = 'hidden'; - return nodes.total.textContent = Gallery.images.length; - }, - generateThumb: function(post) { - var thumb, thumbImg; - if (post.isClone || post.isHidden) { - return; - } - if (!(post.file && post.file.thumb && (post.file.isImage || post.file.isVideo || Conf['PDF in Gallery']))) { - return; - } - if (Gallery.fullIDs[post.fullID]) { - return; - } - Gallery.fullIDs[post.fullID] = true; - thumb = $.el('a', { - className: 'gal-thumb', - href: post.file.url, - target: '_blank', - title: post.file.name - }); - thumb.dataset.id = Gallery.images.length; - thumb.dataset.post = post.fullID; - thumbImg = post.file.thumb.cloneNode(false); - thumbImg.style.cssText = ''; - $.add(thumb, thumbImg); - $.on(thumb, 'click', Gallery.cb.open); - Gallery.images.push(thumb); - return $.add(Gallery.nodes.thumbs, thumb); - }, - load: function(thumb, errorCB) { - var elType, ext, file; - ext = thumb.href.match(/\w*$/); - elType = { - 'webm': 'video', - 'pdf': 'iframe' - }[ext] || 'img'; - file = $.el(elType, { - title: thumb.title - }); - $.extend(file.dataset, thumb.dataset); - $.on(file, 'error', errorCB); - file.src = thumb.href; - return file; - }, - open: function(thumb) { - var el, file, newID, nodes, oldID, post, ref; - nodes = Gallery.nodes; - oldID = +nodes.current.dataset.id; - newID = +thumb.dataset.id; - if (el = Gallery.images[oldID]) { - $.rmClass(el, 'gal-highlight'); - } - $.addClass(thumb, 'gal-highlight'); - nodes.thumbs.scrollTop = thumb.offsetTop + thumb.offsetHeight / 2 - nodes.thumbs.clientHeight / 2; - if (((ref = Gallery.cache) != null ? ref.dataset.id : void 0) === '' + newID) { - file = Gallery.cache; - $.off(file, 'error', Gallery.cacheError); - $.on(file, 'error', Gallery.error); - } else { - file = Gallery.load(thumb, Gallery.error); - } - $.off(nodes.current, 'error', Gallery.error); - ImageCommon.pause(nodes.current); - $.replace(nodes.current, file); - nodes.current = file; - if (file.nodeName === 'VIDEO') { - file.loop = true; - Volume.setup(file); - if (Conf['Autoplay']) { - file.play(); - } - if (Conf['Show Controls']) { - ImageCommon.addControls(file); - } - } - doc.classList.toggle('gal-pdf', file.nodeName === 'IFRAME'); - Gallery.cb.setHeight(); - nodes.count.textContent = +thumb.dataset.id + 1; - nodes.name.download = nodes.name.textContent = thumb.title; - nodes.name.href = thumb.href; - nodes.frame.scrollTop = 0; - nodes.next.focus(); - if (Gallery.slideshow && (newID > oldID || (oldID === Gallery.images.length - 1 && newID === 0))) { - Gallery.setupTimer(); - } else { - Gallery.cb.stop(); - } - if (Conf['Scroll to Post'] && (post = g.posts[file.dataset.post])) { - Header.scrollTo(post.nodes.root); - } - if (isNaN(oldID) || newID === (oldID + 1) % Gallery.images.length) { - return Gallery.cache = Gallery.load(Gallery.images[(newID + 1) % Gallery.images.length], Gallery.cacheError); - } - }, - error: function() { - var ref; - if (((ref = this.error) != null ? ref.code : void 0) === MediaError.MEDIA_ERR_DECODE) { - return new Notice('error', 'Corrupt or unplayable video', 30); - } - if (this.src.split('/')[2] !== 'i.4cdn.org') { - return; - } - return ImageCommon.error(this, g.posts[this.dataset.post], null, (function(_this) { - return function(url) { - if (!url) { - return; - } - Gallery.images[_this.dataset.id].href = url; - if (Gallery.nodes.current === _this) { - return _this.src = url; - } - }; - })(this)); - }, - cacheError: function() { - return delete Gallery.cache; - }, - cleanupTimer: function() { - var current; - clearTimeout(Gallery.timeoutID); - current = Gallery.nodes.current; - $.off(current, 'canplaythrough load', Gallery.startTimer); - return $.off(current, 'ended', Gallery.cb.next); - }, - startTimer: function() { - return Gallery.timeoutID = setTimeout(Gallery.checkTimer, Gallery.delay * $.SECOND); - }, - setupTimer: function() { - var current, isVideo; - Gallery.cleanupTimer(); - current = Gallery.nodes.current; - isVideo = current.nodeName === 'VIDEO'; - if (isVideo) { - current.play(); - } - if ((isVideo ? current.readyState >= 4 : current.complete) || current.nodeName === 'IFRAME') { - return Gallery.startTimer(); - } else { - return $.on(current, (isVideo ? 'canplaythrough' : 'load'), Gallery.startTimer); - } - }, - checkTimer: function() { - var current; - current = Gallery.nodes.current; - if (current.nodeName === 'VIDEO' && !current.paused) { - $.on(current, 'ended', Gallery.cb.next); - return current.loop = false; - } else { - return Gallery.cb.next(); - } - }, - cb: { - keybinds: function(e) { - var cb, key; - if (!(key = Keybinds.keyCode(e))) { - return; - } - cb = (function() { - switch (key) { - case Conf['Close']: - case Conf['Open Gallery']: - return Gallery.cb.close; - case 'Right': - return Gallery.cb.next; - case 'Enter': - return Gallery.cb.advance; - case 'Left': - case '': - return Gallery.cb.prev; - case Conf['Pause']: - return Gallery.cb.pause; - case Conf['Slideshow']: - return Gallery.cb.toggleSlideshow; - } - })(); - if (!cb) { - return; - } - e.stopPropagation(); - e.preventDefault(); - return cb(); - }, - open: function(e) { - if (e) { - e.preventDefault(); - } - if (this) { - return Gallery.open(this); - } - }, - image: function(e) { - e.preventDefault(); - e.stopPropagation(); - return Gallery.build(this); - }, - prev: function() { - return Gallery.cb.open.call(Gallery.images[+Gallery.nodes.current.dataset.id - 1] || Gallery.images[Gallery.images.length - 1]); - }, - next: function() { - return Gallery.cb.open.call(Gallery.images[+Gallery.nodes.current.dataset.id + 1] || Gallery.images[0]); - }, - click: function(e) { - if (ImageCommon.onControls(e)) { - return; - } - e.preventDefault(); - return Gallery.cb.advance(); - }, - advance: function() { - if (!Conf['Autoplay'] && Gallery.nodes.current.paused) { - return Gallery.nodes.current.play(); - } else { - return Gallery.cb.next(); - } - }, - toggle: function() { - return (Gallery.nodes ? Gallery.cb.close : Gallery.build)(); - }, - blank: function(e) { - if (e.target === this) { - return Gallery.cb.close(); - } - }, - toggleSlideshow: function() { - return Gallery.cb[Gallery.slideshow ? 'stop' : 'start'](); - }, - pause: function() { - var current; - Gallery.cb.stop(); - current = Gallery.nodes.current; - if (current.nodeName === 'VIDEO') { - return current[current.paused ? 'play' : 'pause'](); - } - }, - start: function() { - $.addClass(Gallery.nodes.buttons, 'gal-playing'); - Gallery.slideshow = true; - return Gallery.setupTimer(); - }, - stop: function() { - var current; - if (!Gallery.slideshow) { - return; - } - Gallery.cleanupTimer(); - current = Gallery.nodes.current; - if (current.nodeName === 'VIDEO') { - current.loop = true; - } - $.rmClass(Gallery.nodes.buttons, 'gal-playing'); - return Gallery.slideshow = false; - }, - close: function() { - $.off(Gallery.nodes.current, 'error', Gallery.error); - ImageCommon.pause(Gallery.nodes.current); - $.rm(Gallery.nodes.el); - $.rmClass(doc, 'gallery-open'); - if (Conf['Fullscreen Gallery']) { - $.off(d, 'fullscreenchange mozfullscreenchange webkitfullscreenchange', Gallery.cb.close); - if (typeof d.mozCancelFullScreen === "function") { - d.mozCancelFullScreen(); - } - if (typeof d.webkitExitFullscreen === "function") { - d.webkitExitFullscreen(); - } - } - delete Gallery.nodes; - delete Gallery.fullIDs; - doc.style.overflow = ''; - $.off(d, 'keydown', Gallery.cb.keybinds); - if (Conf['Keybinds']) { - $.on(d, 'keydown', Keybinds.keydown); - } - $.off(window, 'resize', Gallery.cb.setHeight); - return clearTimeout(Gallery.timeoutID); - }, - setFitness: function() { - return (this.checked ? $.addClass : $.rmClass)(doc, "gal-" + (this.name.toLowerCase().replace(/\s+/g, '-'))); - }, - setHeight: $.debounce(100, function() { - var current, dim, frame, height, minHeight, ref, ref1, ref2, style, width; - ref = Gallery.nodes, current = ref.current, frame = ref.frame; - style = current.style; - if (Conf['Stretch to Fit'] && (dim = (ref1 = g.posts[current.dataset.post]) != null ? ref1.file.dimensions : void 0)) { - ref2 = dim.split('x'), width = ref2[0], height = ref2[1]; - minHeight = Math.min(doc.clientHeight - 25, height / width * frame.clientWidth); - style.minHeight = minHeight + 'px'; - return style.minWidth = (width / height * minHeight) + 'px'; - } else { - return style.minHeight = style.minWidth = null; - } - }), - setDelay: function() { - return Gallery.delay = +this.value; - } - }, - menu: { - init: function() { - var el; - if (!Gallery.enabled) { - return; - } - el = $.el('span', { - textContent: 'Gallery', - className: 'gallery-link' - }); - return Header.menu.addEntry({ - el: el, - order: 105, - subEntries: Gallery.menu.createSubEntries() - }); - }, - createSubEntry: function(name) { - var input, label; - label = UI.checkbox(name, name); - input = label.firstElementChild; - if (name === 'Hide Thumbnails' || name === 'Fit Width' || name === 'Fit Height') { - $.on(input, 'change', Gallery.cb.setFitness); - } - $.event('change', null, input); - $.on(input, 'change', $.cb.checked); - if (name === 'Hide Thumbnails' || name === 'Fit Width' || name === 'Fit Height' || name === 'Stretch to Fit') { - $.on(input, 'change', Gallery.cb.setHeight); - } - return { - el: label - }; - }, - createSubEntries: function() { - var delayInput, delayLabel, item, subEntries; - subEntries = (function() { - var k, len1, ref, results; - ref = ['Hide Thumbnails', 'Fit Width', 'Fit Height', 'Stretch to Fit', 'Scroll to Post']; - results = []; - for (k = 0, len1 = ref.length; k < len1; k++) { - item = ref[k]; - results.push(Gallery.menu.createSubEntry(item)); - } - return results; - })(); - delayLabel = $.el('label', { - innerHTML: "Slide Delay: " - }); - delayInput = delayLabel.firstElementChild; - delayInput.value = Gallery.delay; - $.on(delayInput, 'change', Gallery.cb.setDelay); - $.on(delayInput, 'change', $.cb.value); - subEntries.push({ - el: delayLabel - }); - return subEntries; - } - } - }; - - ImageCommon = { - pause: function(video) { - if (video.nodeName !== 'VIDEO') { - return; - } - video.pause(); - $.off(video, 'volumechange', Volume.change); - return video.muted = true; - }, - rewind: function(el) { - if (el.nodeName === 'VIDEO') { - if (el.readyState >= el.HAVE_METADATA) { - return el.currentTime = 0; - } - } else if (/\.gif$/.test(el.src)) { - return $.queueTask(function() { - return el.src = el.src; - }); - } - }, - pushCache: function(el) { - ImageCommon.cache = el; - return $.on(el, 'error', ImageCommon.cacheError); - }, - popCache: function() { - var el; - el = ImageCommon.cache; - $.off(el, 'error', ImageCommon.cacheError); - delete ImageCommon.cache; - return el; - }, - cacheError: function() { - if (ImageCommon.cache === this) { - return delete ImageCommon.cache; - } - }, - decodeError: function(file, post) { - var message, ref; - if (((ref = file.error) != null ? ref.code : void 0) !== MediaError.MEDIA_ERR_DECODE) { - return false; - } - if (!(message = $('.warning', post.file.thumb.parentNode))) { - message = $.el('div', { - className: 'warning' - }); - $.after(post.file.thumb, message); - } - message.textContent = 'Error: Corrupt or unplayable video'; - return true; - }, - error: function(file, post, delay, cb) { - var URL, redirect, src, timeoutID; - src = post.file.url.split('/'); - URL = Redirect.to('file', { - boardID: post.board.ID, - filename: src[src.length - 1] - }); - if (!(Conf['404 Redirect'] && URL && Redirect.securityCheck(URL))) { - URL = null; - } - if ((post.isDead || post.file.isDead) && file.src.split('/')[2] === 'i.4cdn.org') { - return cb(URL); - } - if (delay != null) { - timeoutID = setTimeout((function() { - return cb(URL); - }), delay); - } - if (post.isDead || post.file.isDead) { - return; - } - redirect = function() { - if (file.src.split('/')[2] === 'i.4cdn.org') { - if (delay != null) { - clearTimeout(timeoutID); - } - return cb(URL); - } - }; - return $.ajax("//a.4cdn.org/" + post.board + "/thread/" + post.thread + ".json", { - onload: function() { - var k, len1, postObj, ref; - if (this.status === 404) { - post.kill(); - } - if (this.status !== 200) { - return redirect(); - } - ref = this.response.posts; - for (k = 0, len1 = ref.length; k < len1; k++) { - postObj = ref[k]; - if (postObj.no === post.ID) { - break; - } - } - if (postObj.no !== post.ID) { - post.kill(); - return redirect(); - } else if (postObj.filedeleted) { - post.kill(true); - return redirect(); - } else { - return URL = post.file.url; - } - } - }); - }, - addControls: function(video) { - var handler; - handler = function() { - var t; - $.off(video, 'mouseover', handler); - t = new Date().getTime(); - return $.asap((function() { - return $.engine !== 'gecko' || (video.readyState >= 3 && video.currentTime <= Math.max(0.1, video.duration - 0.5)) || new Date().getTime() >= t + 1000; - }), function() { - return video.controls = true; - }); - }; - return $.on(video, 'mouseover', handler); - }, - onControls: function(e) { - return (Conf['Show Controls'] && Conf['Click Passthrough'] && e.target.nodeName === 'VIDEO') || (e.target.controls && e.target.getBoundingClientRect().bottom - e.clientY < 35); - }, - download: function(e) { - if (this.protocol === 'blob:') { - return true; - } - e.preventDefault(); - return CrossOrigin.file(this.href, (function(_this) { - return function(blob) { - if (blob) { - _this.href = URL.createObjectURL(blob); - return _this.click(); - } else { - return new Notice('error', "Could not download " + _this.href, 30); - } - }; - })(this)); - } - }; - - ImageExpand = { - init: function() { - var ref; - if (!(this.enabled = Conf['Image Expansion'] && ((ref = g.VIEW) === 'index' || ref === 'thread') && g.BOARD.ID !== 'f')) { - return; - } - this.EAI = $.el('a', { - className: 'expand-all-shortcut fa fa-expand', - textContent: 'EAI', - title: 'Expand All Images', - href: 'javascript:;' - }); - $.on(this.EAI, 'click', this.cb.toggleAll); - Header.addShortcut(this.EAI, 3); - $.on(d, 'scroll visibilitychange', this.cb.playVideos); - this.videoControls = $.el('span', { - className: 'video-controls' - }); - $.extend(this.videoControls, { - innerHTML: " contract" - }); - return Post.callbacks.push({ - name: 'Image Expansion', - cb: this.node - }); - }, - node: function() { - var ref; - if (!(this.file && (this.file.isImage || this.file.isVideo))) { - return; - } - $.on(this.file.thumb.parentNode, 'click', ImageExpand.cb.toggle); - if (this.isClone) { - if (this.file.isExpanding) { - ImageExpand.contract(this); - return ImageExpand.expand(this); - } else if (this.file.isExpanded && this.file.isVideo) { - Volume.setup(this.file.fullImage); - ImageExpand.setupVideoCB(this); - return ImageExpand.setupVideo(this, !((ref = this.origin.file.fullImage) != null ? ref.paused : void 0) || this.origin.file.wasPlaying, this.file.fullImage.controls); - } - } else if (ImageExpand.on && !this.isHidden && !this.isFetchedQuote && (Conf['Expand spoilers'] || !this.file.isSpoiler) && (Conf['Expand videos'] || !this.file.isVideo)) { - return ImageExpand.expand(this); - } - }, - cb: { - toggle: function(e) { - var file, post, ref; - if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0) { - return; - } - post = Get.postFromNode(this); - file = post.file; - if (file.isExpanded && ImageCommon.onControls(e)) { - return; - } - e.preventDefault(); - if (!Conf['Autoplay'] && ((ref = file.fullImage) != null ? ref.paused : void 0)) { - return file.fullImage.play(); - } else { - return ImageExpand.toggle(post); - } - }, - toggleAll: function() { - var func, toggle; - $.event('CloseMenu'); - toggle = function(post) { - var file; - file = post.file; - if (!(file && (file.isImage || file.isVideo) && doc.contains(post.nodes.root))) { - return; - } - if (ImageExpand.on && (!Conf['Expand spoilers'] && file.isSpoiler || !Conf['Expand videos'] && file.isVideo || Conf['Expand from here'] && Header.getTopOf(file.thumb) < 0)) { - return; - } - return $.queueTask(func, post); - }; - if (ImageExpand.on = $.hasClass(ImageExpand.EAI, 'expand-all-shortcut')) { - ImageExpand.EAI.className = 'contract-all-shortcut fa fa-compress'; - ImageExpand.EAI.title = 'Contract All Images'; - func = ImageExpand.expand; - } else { - ImageExpand.EAI.className = 'expand-all-shortcut fa fa-expand'; - ImageExpand.EAI.title = 'Expand All Images'; - func = ImageExpand.contract; - } - return g.posts.forEach(function(post) { - var k, len1, ref; - ref = [post].concat(slice.call(post.clones)); - for (k = 0, len1 = ref.length; k < len1; k++) { - post = ref[k]; - toggle(post); - } - }); - }, - playVideos: function() { - return g.posts.forEach(function(post) { - var file, k, len1, ref, video, visible; - ref = [post].concat(slice.call(post.clones)); - for (k = 0, len1 = ref.length; k < len1; k++) { - post = ref[k]; - file = post.file; - if (!(file && file.isVideo && file.isExpanded)) { - continue; - } - video = file.fullImage; - visible = ($.hasAudio(video) && !video.muted) || Header.isNodeVisible(video); - if (visible && file.wasPlaying) { - delete file.wasPlaying; - video.play(); - } else if (!visible && !video.paused) { - file.wasPlaying = true; - video.pause(); - } - } - }); - }, - setFitness: function() { - return $[this.checked ? 'addClass' : 'rmClass'](doc, this.name.toLowerCase().replace(/\s+/g, '-')); - } - }, - toggle: function(post) { - var next; - if (!(post.file.isExpanding || post.file.isExpanded)) { - post.file.scrollIntoView = Conf['Scroll into view']; - ImageExpand.expand(post); - return; - } - ImageExpand.contract(post); - if (Conf['Advance on contract']) { - next = post.nodes.root; - while (next = $.x("following::div[contains(@class,'postContainer')][1]", next)) { - if (!($('.stub', next) || next.offsetHeight === 0)) { - break; - } - } - if (next) { - return Header.scrollTo(next); - } - } - }, - contract: function(post) { - var bottom, cb, el, eventName, file, k, len1, oldHeight, ref, ref1, scrollY, top, x; - file = post.file; - if (el = file.fullImage) { - top = Header.getTopOf(el); - bottom = top + el.getBoundingClientRect().height; - oldHeight = d.body.clientHeight; - scrollY = window.scrollY; - } - $.rmClass(post.nodes.root, 'expanded-image'); - $.rmClass(file.thumb, 'expanding'); - $.rm(file.videoControls); - file.thumb.parentNode.href = file.url; - file.thumb.parentNode.target = '_blank'; - ref = ['isExpanding', 'isExpanded', 'videoControls', 'wasPlaying', 'scrollIntoView']; - for (k = 0, len1 = ref.length; k < len1; k++) { - x = ref[k]; - delete file[x]; - } - if (!el) { - return; - } - if (doc.contains(el)) { - if (bottom <= 0) { - window.scroll(0, scrollY + d.body.clientHeight - oldHeight); - } else { - Header.scrollToIfNeeded(post.nodes.root); - } - if (window.scrollX > 0) { - window.scroll(0, window.scrollY); - } - } - $.off(el, 'error', ImageExpand.error); - ImageCommon.pushCache(el); - if (file.isVideo) { - ImageCommon.pause(el); - ref1 = ImageExpand.videoCB; - for (eventName in ref1) { - cb = ref1[eventName]; - $.off(el, eventName, cb); - } - } - if (Conf['Restart when Opened']) { - ImageCommon.rewind(file.thumb); - } - delete file.fullImage; - return $.queueTask(function() { - if (file.isExpanding || file.isExpanded) { - return; - } - $.rmClass(el, 'full-image'); - if (el.id) { - return; - } - return $.rm(el); - }); - }, - expand: function(post, src) { - var el, file, isVideo, ref, thumb; - file = post.file; - thumb = file.thumb, isVideo = file.isVideo; - if (post.isHidden || file.isExpanding || file.isExpanded) { - return; - } - $.addClass(thumb, 'expanding'); - file.isExpanding = true; - if (file.fullImage) { - el = file.fullImage; - } else if (((ref = ImageCommon.cache) != null ? ref.dataset.fullID : void 0) === post.fullID) { - el = file.fullImage = ImageCommon.popCache(); - $.on(el, 'error', ImageExpand.error); - if (Conf['Restart when Opened'] && el.id !== 'ihover') { - ImageCommon.rewind(el); - } - el.removeAttribute('id'); - } else { - el = file.fullImage = $.el((isVideo ? 'video' : 'img')); - el.dataset.fullID = post.fullID; - $.on(el, 'error', ImageExpand.error); - el.src = src || file.url; - } - el.className = 'full-image'; - $.after(thumb, el); - if (isVideo) { - if (Conf['Show Controls'] && Conf['Click Passthrough'] && !file.videoControls) { - file.videoControls = ImageExpand.videoControls.cloneNode(true); - $.add(file.text, file.videoControls); - } - thumb.parentNode.removeAttribute('href'); - thumb.parentNode.removeAttribute('target'); - el.loop = true; - Volume.setup(el); - ImageExpand.setupVideoCB(post); - } - if (!isVideo) { - return $.asap((function() { - return el.naturalHeight; - }), function() { - return ImageExpand.completeExpand(post); - }); - } else if (el.readyState >= el.HAVE_METADATA) { - return ImageExpand.completeExpand(post); - } else { - return $.on(el, 'loadedmetadata', function() { - return ImageExpand.completeExpand(post); - }); - } - }, - completeExpand: function(post) { - var bottom, file, imageBottom, oldHeight, scrollY; - file = post.file; - if (!file.isExpanding) { - return; - } - bottom = Header.getTopOf(file.thumb) + file.thumb.getBoundingClientRect().height; - oldHeight = d.body.clientHeight; - scrollY = window.scrollY; - $.addClass(post.nodes.root, 'expanded-image'); - $.rmClass(file.thumb, 'expanding'); - file.isExpanded = true; - delete file.isExpanding; - if (doc.contains(post.nodes.root) && bottom <= 0) { - window.scroll(window.scrollX, scrollY + d.body.clientHeight - oldHeight); - } - if (file.scrollIntoView) { - delete file.scrollIntoView; - imageBottom = Math.min(doc.clientHeight - file.fullImage.getBoundingClientRect().bottom - 25, Header.getBottomOf(file.fullImage)); - if (imageBottom < 0) { - window.scrollBy(0, Math.min(-imageBottom, Header.getTopOf(file.fullImage))); - } - } - if (file.isVideo) { - return ImageExpand.setupVideo(post, Conf['Autoplay'], Conf['Show Controls']); - } - }, - setupVideo: function(post, playing, controls) { - var fullImage; - fullImage = post.file.fullImage; - if (!playing) { - fullImage.controls = controls; - return; - } - fullImage.controls = false; - $.asap((function() { - return doc.contains(fullImage); - }), function() { - if (!d.hidden && Header.isNodeVisible(fullImage)) { - return fullImage.play(); - } else { - return post.file.wasPlaying = true; - } - }); - if (controls) { - return ImageCommon.addControls(fullImage); - } - }, - videoCB: (function() { - var mousedown; - mousedown = false; - return { - mouseover: function() { - return mousedown = false; - }, - mousedown: function(e) { - if (e.button === 0) { - return mousedown = true; - } - }, - mouseup: function(e) { - if (e.button === 0) { - return mousedown = false; - } - }, - mouseout: function(e) { - if (mousedown && e.clientX <= this.getBoundingClientRect().left) { - return ImageExpand.toggle(Get.postFromNode(this)); - } - } - }; - })(), - setupVideoCB: function(post) { - var cb, eventName, ref; - ref = ImageExpand.videoCB; - for (eventName in ref) { - cb = ref[eventName]; - $.on(post.file.fullImage, eventName, cb); - } - if (post.file.videoControls) { - return $.on(post.file.videoControls.firstElementChild, 'click', function() { - return ImageExpand.toggle(post); - }); - } - }, - error: function() { - var post; - post = Get.postFromNode(this); - $.rm(this); - delete post.file.fullImage; - if (!(post.file.isExpanding || post.file.isExpanded)) { - return; - } - if (ImageCommon.decodeError(this, post)) { - return ImageExpand.contract(post); - } - if (this.src.split('/')[2] !== 'i.4cdn.org') { - return ImageExpand.contract(post); - } - return ImageCommon.error(this, post, 10 * $.SECOND, function(URL) { - if (post.file.isExpanding || post.file.isExpanded) { - ImageExpand.contract(post); - if (URL) { - return ImageExpand.expand(post, URL); - } - } - }); - }, - menu: { - init: function() { - var conf, createSubEntry, el, name, ref, subEntries; - if (!ImageExpand.enabled) { - return; - } - el = $.el('span', { - textContent: 'Image Expansion', - className: 'image-expansion-link' - }); - createSubEntry = ImageExpand.menu.createSubEntry; - subEntries = []; - ref = Config.imageExpansion; - for (name in ref) { - conf = ref[name]; - subEntries.push(createSubEntry(name, conf[1])); - } - return Header.menu.addEntry({ - el: el, - order: 105, - subEntries: subEntries - }); - }, - createSubEntry: function(name, desc) { - var input, label; - label = UI.checkbox(name, name); - label.title = desc; - input = label.firstElementChild; - if (name === 'Fit width' || name === 'Fit height') { - $.on(input, 'change', ImageExpand.cb.setFitness); - } - $.event('change', null, input); - $.on(input, 'change', $.cb.checked); - return { - el: label - }; - } - } - }; - - ImageHover = { - init: function() { - var ref; - if ((ref = g.VIEW) !== 'index' && ref !== 'thread') { - return; - } - if (Conf['Image Hover']) { - Post.callbacks.push({ - name: 'Image Hover', - cb: this.node - }); - } - if (Conf['Image Hover in Catalog']) { - return CatalogThread.callbacks.push({ - name: 'Image Hover', - cb: this.catalogNode - }); - } - }, - node: function() { - if (!(this.file && (this.file.isImage || this.file.isVideo))) { - return; - } - return $.on(this.file.thumb, 'mouseover', ImageHover.mouseover(this)); - }, - catalogNode: function() { - var file; - file = this.thread.OP.file; - if (!(file && (file.isImage || file.isVideo))) { - return; - } - return $.on(this.nodes.thumb, 'mouseover', ImageHover.mouseover(this.thread.OP)); - }, - mouseover: function(post) { - return function(e) { - var el, error, file, height, isVideo, left, maxHeight, maxWidth, ref, ref1, ref2, right, scale, width, x; - if (!doc.contains(this)) { - return; - } - file = post.file; - isVideo = file.isVideo; - if (file.isExpanding || file.isExpanded) { - return; - } - error = ImageHover.error(post); - if (((ref = ImageCommon.cache) != null ? ref.dataset.fullID : void 0) === post.fullID) { - el = ImageCommon.popCache(); - $.on(el, 'error', error); - } else { - el = $.el((isVideo ? 'video' : 'img')); - el.dataset.fullID = post.fullID; - $.on(el, 'error', error); - el.src = file.url; - } - if (Conf['Restart when Opened']) { - ImageCommon.rewind(el); - ImageCommon.rewind(this); - } - el.id = 'ihover'; - $.add(Header.hover, el); - if (isVideo) { - el.loop = true; - el.controls = false; - Volume.setup(el); - if (Conf['Autoplay']) { - el.play(); - } - } - ref1 = (function() { - var k, len1, ref1, results; - ref1 = file.dimensions.split('x'); - results = []; - for (k = 0, len1 = ref1.length; k < len1; k++) { - x = ref1[k]; - results.push(+x); - } - return results; - })(), width = ref1[0], height = ref1[1]; - ref2 = this.getBoundingClientRect(), left = ref2.left, right = ref2.right; - maxWidth = Math.max(left, doc.clientWidth - right); - maxHeight = doc.clientHeight - UI.hover.padding; - scale = Math.min(1, maxWidth / width, maxHeight / height); - el.style.maxWidth = (scale * width) + "px"; - el.style.maxHeight = (scale * height) + "px"; - return UI.hover({ - root: this, - el: el, - latestEvent: e, - endEvents: 'mouseout click', - height: scale * height, - noRemove: true, - cb: function() { - $.off(el, 'error', error); - ImageCommon.pushCache(el); - ImageCommon.pause(el); - $.rm(el); - return el.removeAttribute('style'); - } - }); - }; - }, - error: function(post) { - return function() { - if (ImageCommon.decodeError(this, post)) { - return; - } - return ImageCommon.error(this, post, 3 * $.SECOND, (function(_this) { - return function(URL) { - if (URL) { - return _this.src = URL + (_this.src === URL ? '?' + Date.now() : ''); - } else { - return $.rm(_this); - } - }; - })(this)); - }; - } - }; - - ImageLoader = { - init: function() { - var prefetch, ref; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && g.BOARD.ID !== 'f')) { - return; - } - if (!(Conf['Image Prefetching'] || Conf['Replace JPG'] || Conf['Replace PNG'] || Conf['Replace GIF'] || Conf['Replace WEBM'])) { - return; - } - Post.callbacks.push({ - name: 'Image Replace', - cb: this.node - }); - $.on(d, 'PostsInserted', function() { - return g.posts.forEach(ImageLoader.prefetch); - }); - if (Conf['Replace WEBM']) { - $.on(d, 'scroll visibilitychange 4chanXInitFinished PostsInserted', this.playVideos); - } - if (!Conf['Image Prefetching']) { - return; - } - prefetch = $.el('label', { - innerHTML: " Prefetch Images" - }); - this.el = prefetch.firstElementChild; - $.on(this.el, 'change', this.toggle); - return Header.menu.addEntry({ - el: prefetch, - order: 98 - }); - }, - node: function() { - if (this.isClone || !this.file) { - return; - } - if (Conf['Replace WEBM'] && this.file.isVideo) { - ImageLoader.replaceVideo(this); - } - return ImageLoader.prefetch(this); - }, - replaceVideo: function(post) { - var attr, file, k, len1, ref, thumb, video; - file = post.file; - thumb = file.thumb; - video = $.el('video', { - preload: 'none', - loop: true, - muted: true, - poster: thumb.src || thumb.dataset.src, - textContent: thumb.alt, - className: thumb.className - }); - video.setAttribute('muted', 'muted'); - video.dataset.md5 = thumb.dataset.md5; - ref = ['height', 'width', 'maxHeight', 'maxWidth']; - for (k = 0, len1 = ref.length; k < len1; k++) { - attr = ref[k]; - video.style[attr] = thumb.style[attr]; - } - video.src = file.url; - $.replace(thumb, video); - file.thumb = video; - return file.videoThumb = true; - }, - prefetch: function(post) { - var clone, el, file, isImage, isVideo, k, len1, match, ref, replace, thumb, type, url; - file = post.file; - if (!file) { - return; - } - isImage = file.isImage, isVideo = file.isVideo, thumb = file.thumb, url = file.url; - if (file.isPrefetched || !(isImage || isVideo) || post.isHidden || post.thread.isHidden) { - return; - } - type = (match = url.match(/\.([^.]+)$/)[1].toUpperCase()) === 'JPEG' ? 'JPG' : match; - replace = Conf["Replace " + type] && !/spoiler/.test(thumb.src || thumb.dataset.src); - if (!(replace || Conf['prefetch'])) { - return; - } - if (![post].concat(slice.call(post.clones)).some(function(clone) { - return doc.contains(clone.nodes.root); - })) { - return; - } - file.isPrefetched = true; - if (file.videoThumb) { - ref = post.clones; - for (k = 0, len1 = ref.length; k < len1; k++) { - clone = ref[k]; - clone.file.thumb.preload = 'auto'; - } - thumb.preload = 'auto'; - if ($.engine === 'gecko') { - $.on(thumb, 'loadeddata', function() { - return this.removeAttribute('poster'); - }); - } - return; - } - el = $.el(isImage ? 'img' : 'video'); - if (replace && isImage) { - $.on(el, 'load', function() { - var len2, q, ref1; - ref1 = post.clones; - for (q = 0, len2 = ref1.length; q < len2; q++) { - clone = ref1[q]; - clone.file.thumb.src = url; - } - thumb.src = url; - return thumb.removeAttribute('data-src'); - }); - } - return el.src = url; - }, - toggle: function() { - if (Conf['prefetch'] = this.checked) { - g.posts.forEach(ImageLoader.prefetch); - } - }, - playVideos: function() { - var qpClone, ref; - qpClone = (ref = $.id('qp')) != null ? ref.firstElementChild : void 0; - return g.posts.forEach(function(post) { - var k, len1, ref1, ref2, thumb; - ref1 = [post].concat(slice.call(post.clones)); - for (k = 0, len1 = ref1.length; k < len1; k++) { - post = ref1[k]; - if (!((ref2 = post.file) != null ? ref2.videoThumb : void 0)) { - continue; - } - thumb = post.file.thumb; - if (Header.isNodeVisible(thumb) || post.nodes.root === qpClone) { - thumb.play(); - } else { - thumb.pause(); - } - } - }); - } - }; - - Metadata = { - init: function() { - var ref; - if (!(Conf['WEBM Metadata'] && ((ref = g.VIEW) === 'index' || ref === 'thread') && g.BOARD.ID !== 'f')) { - return; - } - return Post.callbacks.push({ - name: 'WEBM Metadata', - cb: this.node - }); - }, - node: function() { - var el; - if (!(this.file && /webm$/i.test(this.file.url))) { - return; - } - if (this.isClone) { - el = $('.webm-title', this.file.text); - } else { - el = $.el('span', { - className: 'webm-title' - }); - $.extend(el, { - innerHTML: "" - }); - $.add(this.file.text, [$.tn('\u00A0'), el]); - } - if (el.children.length === 1) { - return $.one(el.lastElementChild, 'mouseover focus', Metadata.load); - } - }, - load: function() { - $.rmClass(this.parentNode, 'error'); - $.addClass(this.parentNode, 'loading'); - return CrossOrigin.binary(Get.postFromNode(this).file.url, (function(_this) { - return function(data) { - var output, title; - $.rmClass(_this.parentNode, 'loading'); - if (data != null) { - title = Metadata.parse(data); - output = $.el('span', { - textContent: title || '' - }); - if (title == null) { - $.addClass(_this.parentNode, 'not-found'); - } - $.before(_this, output); - _this.parentNode.tabIndex = 0; - if (d.activeElement === _this) { - _this.parentNode.focus(); - } - return _this.tabIndex = -1; - } else { - $.addClass(_this.parentNode, 'error'); - return $.one(_this, 'click', Metadata.load); - } - }; - })(this), { - Range: 'bytes=0-9999' - }); - }, - parse: function(data) { - var element, i, readInt, size, title; - readInt = function() { - var len, n; - n = data[i++]; - len = 0; - while (n < (0x80 >> len)) { - len++; - } - n ^= 0x80 >> len; - while (len-- && i < data.length) { - n = (n << 8) ^ data[i++]; - } - return n; - }; - i = 0; - while (i < data.length) { - element = readInt(); - size = readInt(); - if (element === 0x3BA9) { - title = ''; - while (size-- && i < data.length) { - title += String.fromCharCode(data[i++]); - } - return decodeURIComponent(escape(title)); - } else if (element !== 0x8538067 && element !== 0x549A966) { - i += size; - } - } - return null; - } - }; - - RevealSpoilers = { - init: function() { - var ref; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Reveal Spoiler Thumbnails'])) { - return; - } - return Post.callbacks.push({ - name: 'Reveal Spoiler Thumbnails', - cb: this.node - }); - }, - node: function() { - var thumb; - if (!(!this.isClone && this.file && this.file.thumb && this.file.isSpoiler)) { - return; - } - thumb = this.file.thumb; - thumb.removeAttribute('style'); - thumb.style.maxHeight = thumb.style.maxWidth = this.isReply ? '125px' : '250px'; - if (thumb.src) { - return thumb.src = this.file.thumbURL; - } else { - return thumb.dataset.src = this.file.thumbURL; - } - } - }; - - Sauce = { - init: function() { - var err, k, len1, link, links, ref, ref1; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Sauce'])) { - return; - } - links = []; - ref1 = Conf['sauces'].split('\n'); - for (k = 0, len1 = ref1.length; k < len1; k++) { - link = ref1[k]; - try { - if (link[0] !== '#') { - links.push(link.trim()); - } - } catch (_error) { - err = _error; - } - } - if (!links.length) { - return; - } - this.links = links; - this.link = $.el('a', { - target: '_blank', - className: 'sauce' - }); - return Post.callbacks.push({ - name: 'Sauce', - cb: this.node - }); - }, - sandbox: function(url) { - return E.url({ - innerHTML: "[sb] " + E(url) + "" - }); - }, - rmOrigin: function(e) { - if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0) { - return; - } - $.open(this.href); - return e.preventDefault(); - }, - createSauceLink: function(link, post) { - var a, ext, i, k, key, len1, m, part, parts, ref, ref1, ref2, skip, url; - if (!(link = link.trim())) { - return null; - } - parts = {}; - ref = link.split(/;(?=(?:text|boards|types|sandbox):?)/); - for (i = k = 0, len1 = ref.length; k < len1; i = ++k) { - part = ref[i]; - if (i === 0) { - parts['url'] = part; - } else { - m = part.match(/^(\w*):?(.*)$/); - parts[m[1]] = m[2]; - } - } - parts['text'] || (parts['text'] = ((ref1 = parts['url'].match(/(\w+)\.\w+\//)) != null ? ref1[1] : void 0) || '?'); - ext = post.file.url.match(/[^.]*$/)[0]; - skip = false; - for (key in parts) { - parts[key] = parts[key].replace(/%(T?URL|IMG|[sh]?MD5|board|name|%|semi)/g, function(_, parameter) { - var type; - type = Sauce.formatters[parameter](post, ext); - if (type == null) { - skip = true; - return ''; - } - if (key === 'url' && (parameter !== '%' && parameter !== 'semi')) { - if (/^javascript:/i.test(parts['url'])) { - type = JSON.stringify(type); - } - type = encodeURIComponent(type); - } - return type; - }); - } - if (skip) { - return null; - } - if (!(!parts['boards'] || (ref2 = post.board.ID, indexOf.call(parts['boards'].split(','), ref2) >= 0))) { - return null; - } - if (!(!parts['types'] || indexOf.call(parts['types'].split(','), ext) >= 0)) { - return null; - } - url = parts['url']; - if (parts['sandbox'] != null) { - url = Sauce.sandbox(url); - } - a = Sauce.link.cloneNode(true); - a.href = url; - a.textContent = parts['text']; - if (/^javascript:/i.test(parts['url'])) { - a.removeAttribute('target'); - } - if (parts['sandbox'] != null) { - $.on(a, 'click', Sauce.rmOrigin); - } - return a; - }, - node: function() { - var k, len1, link, node, nodes, ref; - if (this.isClone || !this.file) { - return; - } - nodes = []; - ref = Sauce.links; - for (k = 0, len1 = ref.length; k < len1; k++) { - link = ref[k]; - if (node = Sauce.createSauceLink(link, this)) { - nodes.push($.tn('\u00A0'), node); - } - } - return $.add(this.file.text, nodes); - }, - formatters: { - TURL: function(post) { - return post.file.thumbURL; - }, - URL: function(post) { - return post.file.url; - }, - IMG: function(post, ext) { - if (ext === 'gif' || ext === 'jpg' || ext === 'png') { - return post.file.url; - } else { - return post.file.thumbURL; - } - }, - MD5: function(post) { - return post.file.MD5; - }, - sMD5: function(post) { - var ref; - return (ref = post.file.MD5) != null ? ref.replace(/[+\/=]/g, function(c) { - return { - '+': '-', - '/': '_', - '=': '' - }[c]; - }) : void 0; - }, - hMD5: function(post) { - if (post.file.MD5) { - return ((function() { - var k, len1, ref, results; - ref = atob(post.file.MD5); - results = []; - for (k = 0, len1 = ref.length; k < len1; k++) { - c = ref[k]; - results.push(("0" + (c.charCodeAt(0).toString(16))).slice(-2)); - } - return results; - })()).join(''); - } - }, - board: function(post) { - return post.board.ID; - }, - name: function(post) { - return post.file.name; - }, - '%': function() { - return '%'; - }, - semi: function() { - return ';'; - } - } - }; - - Volume = { - init: function() { - var ref, ref1, unmuteEntry, volumeEntry; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && (Conf['Image Expansion'] || Conf['Image Hover'] || Conf['Image Hover in Catalog'] || Conf['Gallery']))) { - return; - } - $.sync('Allow Sound', function(x) { - var ref1; - Conf['Allow Sound'] = x; - return (ref1 = Volume.inputs) != null ? ref1.unmute.checked = x : void 0; - }); - $.sync('Default Volume', function(x) { - var ref1; - Conf['Default Volume'] = x; - return (ref1 = Volume.inputs) != null ? ref1.volume.value = x : void 0; - }); - if (Conf['Mouse Wheel Volume']) { - Post.callbacks.push({ - name: 'Mouse Wheel Volume', - cb: this.node - }); - } - if ((ref1 = g.BOARD.ID) !== 'gif' && ref1 !== 'wsg') { - return; - } - if (Conf['Mouse Wheel Volume']) { - CatalogThread.callbacks.push({ - name: 'Mouse Wheel Volume', - cb: this.catalogNode - }); - } - unmuteEntry = UI.checkbox('Allow Sound', 'Allow Sound'); - unmuteEntry.title = Config.main['Images and Videos']['Allow Sound'][1]; - volumeEntry = $.el('label', { - title: 'Default volume for videos.' - }); - $.extend(volumeEntry, { - innerHTML: " Volume" - }); - this.inputs = { - unmute: unmuteEntry.firstElementChild, - volume: volumeEntry.firstElementChild - }; - $.on(this.inputs.unmute, 'change', $.cb.checked); - $.on(this.inputs.volume, 'change', $.cb.value); - Header.menu.addEntry({ - el: unmuteEntry, - order: 200 - }); - return Header.menu.addEntry({ - el: volumeEntry, - order: 201 - }); - }, - setup: function(video) { - video.muted = !Conf['Allow Sound']; - video.volume = Conf['Default Volume']; - return $.on(video, 'volumechange', Volume.change); - }, - change: function() { - var items, key, muted, val, volume; - muted = this.muted, volume = this.volume; - items = { - 'Allow Sound': !muted, - 'Default Volume': volume - }; - for (key in items) { - val = items[key]; - if (Conf[key] === val) { - delete items[key]; - } - } - $.set(items); - $.extend(Conf, items); - if (Volume.inputs) { - Volume.inputs.unmute.checked = !muted; - return Volume.inputs.volume.value = volume; - } - }, - node: function() { - var ref, ref1; - if (!(((ref = this.board.ID) === 'gif' || ref === 'wsg') && ((ref1 = this.file) != null ? ref1.isVideo : void 0))) { - return; - } - $.on(this.file.thumb, 'wheel', Volume.wheel.bind(Header.hover)); - return $.on($('a', this.file.text), 'wheel', Volume.wheel.bind(this.file.thumb.parentNode)); - }, - catalogNode: function() { - var file; - file = this.thread.OP.file; - if (!(file != null ? file.isVideo : void 0)) { - return; - } - return $.on(this.nodes.thumb, 'wheel', Volume.wheel.bind(Header.hover)); - }, - wheel: function(e) { - var el, volume; - if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) { - return; - } - if (!(el = $('video:not([data-md5])', this))) { - return; - } - if (el.muted || !$.hasAudio(el)) { - return; - } - volume = el.volume + 0.1; - if (e.deltaY < 0) { - volume *= 1.1; - } - if (e.deltaY > 0) { - volume /= 1.1; - } - el.volume = $.minmax(volume - 0.1, 0, 1); - return e.preventDefault(); - } - }; - - Embedding = { - init: function() { - var k, len1, ref, type; - if (!(Conf['Embedding'] || Conf['Link Title'])) { - return; - } - this.types = {}; - ref = this.ordered_types; - for (k = 0, len1 = ref.length; k < len1; k++) { - type = ref[k]; - this.types[type.key] = type; - } - if (Conf['Floating Embeds']) { - this.dialog = UI.dialog('embedding', 'top: 50px; right: 0px;', { - innerHTML: "
" - }); - this.media = $('#media-embed', this.dialog); - $.one(d, '4chanXInitFinished', this.ready); - } - if (Conf['Link Title']) { - return $.on(d, '4chanXInitFinished PostsInserted', function() { - var key, ref1, ref2, service; - ref1 = Embedding.types; - for (key in ref1) { - service = ref1[key]; - if ((ref2 = service.title) != null ? ref2.batchSize : void 0) { - Embedding.flushTitles(service.title); - } - } - }); - } - }, - events: function(post) { - var el, i, items; - if (!Conf['Embedding']) { - return; - } - i = 0; - items = $$('.embedder', post.nodes.comment); - while (el = items[i++]) { - $.on(el, 'click', Embedding.cb.toggle); - if ($.hasClass(el, 'embedded')) { - Embedding.cb.toggle.call(el); - } - } - }, - process: function(link, post) { - var data; - if (!(Conf['Embedding'] || Conf['Link Title'])) { - return; - } - if ($.x('ancestor::pre', link)) { - return; - } - if (data = Embedding.services(link)) { - data.post = post; - if (Conf['Embedding']) { - Embedding.embed(data); - } - if (Conf['Link Title']) { - return Embedding.title(data); - } - } - }, - services: function(link) { - var href, k, len1, match, ref, type; - href = link.href; - ref = Embedding.ordered_types; - for (k = 0, len1 = ref.length; k < len1; k++) { - type = ref[k]; - if (!(match = type.regExp.exec(href))) { - continue; - } - if (type.dummy) { - return; - } - return { - key: type.key, - uid: match[1], - options: match[2], - link: link - }; - } - }, - embed: function(data) { - var embed, href, key, link, name, options, post, ref, uid, value; - key = data.key, uid = data.uid, options = data.options, link = data.link, post = data.post; - href = link.href; - if (Embedding.types[key].httpOnly && location.protocol !== 'http:') { - return; - } - $.addClass(link, key.toLowerCase()); - embed = $.el('a', { - className: 'embedder', - href: 'javascript:;', - textContent: '(embed)' - }); - ref = { - key: key, - uid: uid, - options: options, - href: href - }; - for (name in ref) { - value = ref[name]; - embed.dataset[name] = value; - } - $.on(embed, 'click', Embedding.cb.toggle); - $.after(link, [$.tn(' '), embed]); - if (Conf['Auto-embed'] && !Conf['Floating Embeds'] && !post.isFetchedQuote && key !== 'TwitchTV') { - return $.asap((function() { - return doc.contains(embed); - }), function() { - return Embedding.cb.toggle.call(embed); - }); - } - }, - ready: function() { - $.addClass(Embedding.dialog, 'empty'); - $.on($('.close', Embedding.dialog), 'click', Embedding.closeFloat); - $.on($('.move', Embedding.dialog), 'mousedown', Embedding.dragEmbed); - $.on($('.jump', Embedding.dialog), 'click', function() { - if (doc.contains(Embedding.lastEmbed)) { - return Header.scrollTo(Embedding.lastEmbed); - } - }); - return $.add(d.body, Embedding.dialog); - }, - closeFloat: function() { - delete Embedding.lastEmbed; - $.addClass(Embedding.dialog, 'empty'); - return $.replace(Embedding.media.firstChild, $.el('div')); - }, - dragEmbed: function() { - var style; - style = Embedding.media.style; - if (Embedding.dragEmbed.mouseup) { - $.off(d, 'mouseup', Embedding.dragEmbed); - Embedding.dragEmbed.mouseup = false; - style.visibility = ''; - return; - } - $.on(d, 'mouseup', Embedding.dragEmbed); - Embedding.dragEmbed.mouseup = true; - return style.visibility = 'hidden'; - }, - title: function(data) { - var key, link, options, post, service, uid; - key = data.key, uid = data.uid, options = data.options, link = data.link, post = data.post; - if (!(service = Embedding.types[key].title)) { - return; - } - $.addClass(link, key.toLowerCase()); - if (service.batchSize) { - (service.queue || (service.queue = [])).push(data); - if (service.queue.length >= service.batchSize) { - return Embedding.flushTitles(service); - } - } else { - if (!$.cache(service.api(uid), (function() { - return Embedding.cb.title(this, data); - }), { - responseType: 'json' - })) { - return $.extend(link, { - innerHTML: "[" + E(key) + "] Title Link Blocked (are you using NoScript?)" - }); - } - } - }, - flushTitles: function(service) { - var cb, data, k, len1, queue; - queue = service.queue; - if (!(queue != null ? queue.length : void 0)) { - return; - } - service.queue = []; - cb = function() { - var data, k, len1; - for (k = 0, len1 = queue.length; k < len1; k++) { - data = queue[k]; - Embedding.cb.title(this, data); - } - }; - if (!$.cache(service.api((function() { - var k, len1, results; - results = []; - for (k = 0, len1 = queue.length; k < len1; k++) { - data = queue[k]; - results.push(data.uid); - } - return results; - })()), cb, { - responseType: 'json' - })) { - for (k = 0, len1 = queue.length; k < len1; k++) { - data = queue[k]; - $.extend(data.link, { - innerHTML: "[" + E(data.key) + "] Title Link Blocked (are you using NoScript?)" - }); - } - } - }, - cb: { - toggle: function(e) { - var div; - if (e != null) { - e.preventDefault(); - } - if (Conf['Floating Embeds']) { - if (!(div = Embedding.media.firstChild)) { - return; - } - $.replace(div, Embedding.cb.embed(this)); - Embedding.lastEmbed = Get.postFromNode(this).nodes.root; - $.rmClass(Embedding.dialog, 'empty'); - return; - } - if ($.hasClass(this, "embedded")) { - $.rm(this.nextElementSibling); - this.textContent = '(embed)'; - } else { - $.after(this, Embedding.cb.embed(this)); - this.textContent = '(unembed)'; - } - return $.toggleClass(this, 'embedded'); - }, - embed: function(a) { - var container, el, type; - container = $.el('div'); - $.add(container, el = (type = Embedding.types[a.dataset.key]).el(a)); - el.style.cssText = type.style != null ? type.style : 'border: none; width: 640px; height: 360px;'; - return container; - }, - title: function(req, data) { - var base1, k, key, len1, len2, link, link2, options, post, post2, q, ref, ref1, service, status, text, uid; - key = data.key, uid = data.uid, options = data.options, link = data.link, post = data.post; - status = req.status; - service = Embedding.types[key].title; - text = "[" + key + "] " + ((function() { - switch (status) { - case 200: - case 304: - return service.text(req.response, uid); - case 404: - return "Not Found"; - case 403: - return "Forbidden or Private"; - default: - return status + "'d"; - } - })()); - link.dataset.original = link.textContent; - link.textContent = text; - ref = post.clones; - for (k = 0, len1 = ref.length; k < len1; k++) { - post2 = ref[k]; - ref1 = $$('a.linkify', post2.nodes.comment); - for (q = 0, len2 = ref1.length; q < len2; q++) { - link2 = ref1[q]; - if (!(link2.href === link.href)) { - continue; - } - if ((base1 = link2.dataset).original == null) { - base1.original = link2.textContent; - } - link2.textContent = text; - } - } - } - }, - ordered_types: [ - { - key: 'audio', - regExp: /\.(?:mp3|ogg|wav)(?:\?|$)/i, - style: '', - el: function(a) { - return $.el('audio', { - controls: true, - preload: 'auto', - src: a.dataset.href - }); - } - }, { - key: 'Dailymotion', - regExp: /^\w+:\/\/(?:(?:www\.)?dailymotion\.com\/(?:embed\/)?video|dai\.ly)\/([A-Za-z0-9]+)[^?]*(.*)/, - el: function(a) { - var el, options, start; - options = (start = a.dataset.options.match(/[?&](start=\d+)/)) ? "?" + start[1] : ''; - el = $.el('iframe', { - src: "//www.dailymotion.com/embed/video/" + a.dataset.uid + options - }); - el.setAttribute("allowfullscreen", "true"); - return el; - }, - title: { - api: function(uid) { - return "https://api.dailymotion.com/video/" + uid; - }, - text: function(_) { - return _.title; - } - } - }, { - key: 'Gist', - regExp: /^\w+:\/\/gist\.github\.com\/(?:[\w\-]+\/)?(\w+)/, - el: function(a) { - var content, el; - el = $.el('iframe'); - el.setAttribute('sandbox', 'allow-scripts'); - content = { - innerHTML: "" + E(a.dataset.uid) + "" - }; - el.src = E.url(content); - return el; - }, - title: { - api: function(uid) { - return "https://api.github.com/gists/" + uid; - }, - text: function(arg) { - var file, files; - files = arg.files; - for (file in files) { - if (files.hasOwnProperty(file)) { - return file; - } - } - } - } - }, { - key: 'image', - regExp: /\.(?:gif|png|jpg|jpeg|bmp)(?:\?|$)/i, - style: '', - el: function(a) { - return $.el('div', { - innerHTML: "" - }); - } - }, { - key: 'InstallGentoo', - regExp: /^\w+:\/\/paste\.installgentoo\.com\/view\/(?:raw\/|download\/|embed\/)?(\w+)/, - el: function(a) { - return $.el('iframe', { - src: "https://paste.installgentoo.com/view/embed/" + a.dataset.uid - }); - } - }, { - key: 'Twitter', - regExp: /^\w+:\/\/(?:www\.)?twitter\.com\/(\w+\/status\/\d+)/, - el: function(a) { - return $.el('iframe', { - src: "https://twitframe.com/show?url=https://twitter.com/" + a.dataset.uid - }); - } - }, { - key: 'LiveLeak', - regExp: /^\w+:\/\/(?:\w+\.)?liveleak\.com\/.*\?.*i=(\w+)/, - httpOnly: true, - el: function(a) { - var el; - el = $.el('iframe', { - src: "http://www.liveleak.com/ll_embed?i=" + a.dataset.uid - }); - el.setAttribute("allowfullscreen", "true"); - return el; - } - }, { - key: 'Pastebin', - regExp: /^\w+:\/\/(?:\w+\.)?pastebin\.com\/(?!u\/)(?:[\w\.]+\?i\=)?(\w+)/, - httpOnly: true, - el: function(a) { - var div; - return div = $.el('iframe', { - src: "http://pastebin.com/embed_iframe.php?i=" + a.dataset.uid - }); - } - }, { - key: 'Gfycat', - regExp: /^\w+:\/\/(?:www\.)?gfycat\.com\/(?:iframe\/)?(\w+)/, - el: function(a) { - var div; - return div = $.el('iframe', { - src: "//gfycat.com/iframe/" + a.dataset.uid - }); - } - }, { - key: 'SoundCloud', - regExp: /^\w+:\/\/(?:www\.)?(?:soundcloud\.com\/|snd\.sc\/)([\w\-\/]+)/, - style: 'border: 0; width: 500px; height: 400px;', - el: function(a) { - return $.el('iframe', { - src: "https://w.soundcloud.com/player/?visual=true&show_comments=false&url=https%3A%2F%2Fsoundcloud.com%2F" + (encodeURIComponent(a.dataset.uid)) - }); - }, - title: { - api: function(uid) { - return "//soundcloud.com/oembed?format=json&url=https%3A%2F%2Fsoundcloud.com%2F" + (encodeURIComponent(uid)); - }, - text: function(_) { - return _.title; - } - } - }, { - key: 'StrawPoll', - regExp: /^\w+:\/\/(?:www\.)?strawpoll\.me\/(?:embed_\d+\/)?(\d+(?:\/r)?)/, - style: 'border: 0; width: 600px; height: 406px;', - el: function(a) { - return $.el('iframe', { - src: "//strawpoll.me/embed_1/" + a.dataset.uid - }); - } - }, { - key: 'TwitchTV', - regExp: /^\w+:\/\/(?:www\.)?twitch\.tv\/(\w[^#\&\?]*)/, - style: "border: none; width: 620px; height: 378px;", - el: function(a) { - var _, channel, flashvars, id, idprefix, k, len1, obj, part, ref, result, seconds, start, type; - if (result = /(\w+)\/([bcv])\/(\d+)/i.exec(a.dataset.uid)) { - _ = result[0], channel = result[1], type = result[2], id = result[3]; - idprefix = type === 'b' ? 'a' : type; - flashvars = "channel=" + channel + "&start_volume=25&auto_play=false&videoId=" + idprefix + id; - if (start = a.dataset.href.match(/\bt=(\w+)/)) { - seconds = 0; - ref = start[1].match(/\d+[hms]/g); - for (k = 0, len1 = ref.length; k < len1; k++) { - part = ref[k]; - seconds += +part.slice(0, -1) * { - 'h': 3600, - 'm': 60, - 's': 1 - }[part.slice(-1)]; - } - flashvars += "&initial_time=" + seconds; - } - } else { - channel = (/(\w+)/.exec(a.dataset.uid))[0]; - flashvars = "channel=" + channel + "&start_volume=25&auto_play=false"; - } - obj = $.el('object', { - data: '//www-cdn.jtvnw.net/swflibs/TwitchPlayer.swf' - }); - $.extend(obj, { - innerHTML: "" - }); - obj.children[1].value = flashvars; - return obj; - } - }, { - key: 'Vocaroo', - regExp: /^\w+:\/\/(?:www\.)?vocaroo\.com\/i\/(\w+)/, - style: '', - el: function(a) { - var el, type; - el = $.el('audio', { - controls: true, - preload: 'auto' - }); - type = el.canPlayType('audio/webm') ? 'webm' : 'mp3'; - el.src = "http://vocaroo.com/media_command.php?media=" + a.dataset.uid + "&command=download_" + type; - return el; - } - }, { - key: 'Vimeo', - regExp: /^\w+:\/\/(?:www\.)?vimeo\.com\/(\d+)/, - el: function(a) { - return $.el('iframe', { - src: "//player.vimeo.com/video/" + a.dataset.uid + "?wmode=opaque" - }); - }, - title: { - api: function(uid) { - return "https://vimeo.com/api/oembed.json?url=https://vimeo.com/" + uid; - }, - text: function(_) { - return _.title; - } - } - }, { - key: 'Vine', - regExp: /^\w+:\/\/(?:www\.)?vine\.co\/v\/(\w+)/, - style: 'border: none; width: 500px; height: 500px;', - el: function(a) { - return $.el('iframe', { - src: "https://vine.co/v/" + a.dataset.uid + "/card" - }); - } - }, { - key: 'YouTube', - regExp: /^\w+:\/\/(?:youtu.be\/|[\w.]*youtube[\w.]*\/.*(?:v=|\bembed\/|\bv\/))([\w\-]{11})(.*)/, - el: function(a) { - var el, start; - start = a.dataset.options.match(/\b(?:star)?t\=(\w+)/); - if (start) { - start = start[1]; - } - if (start && !/^\d+$/.test(start)) { - start += ' 0h0m0s'; - start = 3600 * start.match(/(\d+)h/)[1] + 60 * start.match(/(\d+)m/)[1] + 1 * start.match(/(\d+)s/)[1]; - } - el = $.el('iframe', { - src: "//www.youtube.com/embed/" + a.dataset.uid + "?wmode=opaque" + (start ? '&start=' + start : '') - }); - el.setAttribute("allowfullscreen", "true"); - return el; - }, - title: { - batchSize: 50, - api: function(uids) { - var ids, key; - ids = encodeURIComponent(uids.join(',')); - key = 'AIzaSyB5_zaen_-46Uhz1xGR-lz1YoUMHqCD6CE'; - return "https://www.googleapis.com/youtube/v3/videos?part=snippet&id=" + ids + "&fields=items%28id%2Csnippet%28title%29%29&key=" + key; - }, - text: function(data, uid) { - var item, k, len1, ref; - ref = data.items; - for (k = 0, len1 = ref.length; k < len1; k++) { - item = ref[k]; - if (item.id === uid) { - return item.snippet.title; - } - } - return 'Not Found'; - } - } - }, { - key: 'Loopvid', - regExp: /^\w+:\/\/(?:www\.)?loopvid.appspot.com\/#?((?:pf|kd|lv|gd|gh|db|dx|nn|cp|wu|ig|ky|mf|pc|gc)\/[\w\-\/]+(,[\w\-\/]+)*|fc\/\w+\/\d+)/, - style: 'max-width: 80vw; max-height: 80vh;', - el: function(a) { - var _, base, el, host, k, len1, len2, name, names, q, ref, ref1, type, types, url; - el = $.el('video', { - controls: true, - preload: 'auto', - loop: true - }); - ref = a.dataset.uid.match(/(\w+)\/(.*)/), _ = ref[0], host = ref[1], names = ref[2]; - types = (function() { - switch (host) { - case 'gd': - case 'wu': - case 'fc': - return ['']; - case 'gc': - return ['giant', 'fat', 'zippy']; - default: - return ['.webm', '.mp4']; - } - })(); - ref1 = names.split(','); - for (k = 0, len1 = ref1.length; k < len1; k++) { - name = ref1[k]; - for (q = 0, len2 = types.length; q < len2; q++) { - type = types[q]; - base = "" + name + type; - url = (function() { - switch (host) { - case 'pf': - return "https://web.archive.org/web/2/http://a.pomf.se/" + base; - case 'kd': - return "http://kastden.org/loopvid/" + base; - case 'lv': - return "http://kastden.org/_loopvid_media/lv/" + base; - case 'gd': - return "https://docs.google.com/uc?export=download&id=" + base; - case 'gh': - return "https://googledrive.com/host/" + base; - case 'db': - return "https://dl.dropboxusercontent.com/u/" + base; - case 'dx': - return "https://dl.dropboxusercontent.com/" + base; - case 'nn': - return "http://naenara.eu/loopvids/" + base; - case 'cp': - return "https://copy.com/" + base; - case 'wu': - return "http://webmup.com/" + base + "/vid.webm"; - case 'ig': - return "https://i.imgur.com/" + base; - case 'ky': - return "https://kiyo.me/" + base; - case 'mf': - return "https://d.maxfile.ro/" + base; - case 'pc': - return "http://a.pomf.cat/" + base; - case 'fc': - return "//i.4cdn.org/" + base + ".webm"; - case 'gc': - return "https://" + type + ".gfycat.com/" + name + ".webm"; - } - })(); - $.add(el, $.el('source', { - src: url - })); - } - } - return el; - } - }, { - key: 'Clyp', - regExp: /^\w+:\/\/(?:www\.)?clyp\.it\/(\w+)/, - style: '', - el: function(a) { - var el, type; - el = $.el('audio', { - controls: true, - preload: 'auto' - }); - type = el.canPlayType('audio/ogg') ? 'ogg' : 'mp3'; - el.src = "https://clyp.it/" + a.dataset.uid + "." + type; - return el; - } - }, { - key: 'Loopvid-dummy', - regExp: /^\w+:\/\/(?:www\.)?loopvid.appspot.com\//, - dummy: true - }, { - key: 'MediaFire-dummy', - regExp: /^\w+:\/\/(?:www\.)?mediafire.com\//, - dummy: true - }, { - key: 'video', - regExp: /\.(?:ogv|webm|mp4)(?:\?|$)/i, - style: 'max-width: 80vw; max-height: 80vh;', - el: function(a) { - return $.el('video', { - controls: true, - preload: 'auto', - src: a.dataset.href, - loop: /^https?:\/\/i\.4cdn\.org\//.test(a.dataset.href) - }); - } - } - ] - }; - - Linkify = { - init: function() { - var ref; - if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Linkify']) { - return; - } - if (Conf['Comment Expansion']) { - ExpandComment.callbacks.push(this.node); - } - Post.callbacks.push({ - name: 'Linkify', - cb: this.node - }); - CatalogThread.callbacks.push({ - name: 'Linkify', - cb: this.catalogNode - }); - return Embedding.init(); - }, - node: function() { - var k, len1, len2, link, links, q, ref; - if (this.isClone) { - return Embedding.events(this); - } - if (!Linkify.regString.test(this.info.comment)) { - return; - } - ref = $$('a[href^="http://i.4cdn.org/"], a[href^="https://i.4cdn.org/"]', this.nodes.comment); - for (k = 0, len1 = ref.length; k < len1; k++) { - link = ref[k]; - $.addClass(link, 'linkify'); - Embedding.process(link, this); - } - links = Linkify.process(this.nodes.comment); - for (q = 0, len2 = links.length; q < len2; q++) { - link = links[q]; - Embedding.process(link, this); - } - }, - catalogNode: function() { - if (!Linkify.regString.test(this.thread.OP.info.comment)) { - return; - } - return Linkify.process(this.nodes.comment); - }, - process: function(node) { - var data, end, endNode, i, index, length, links, part1, part2, ref, ref1, result, saved, snapshot, space, test, word; - test = /[^\s"]+/g; - space = /[\s"]/; - snapshot = $.X('.//br|.//text()', node); - i = 0; - links = []; - while (node = snapshot.snapshotItem(i++)) { - data = node.data; - if (!data || node.parentElement.nodeName === "A") { - continue; - } - while (result = test.exec(data)) { - index = result.index; - endNode = node; - word = result[0]; - if ((length = index + word.length) === data.length) { - test.lastIndex = 0; - while ((saved = snapshot.snapshotItem(i++))) { - if (saved.nodeName === 'BR') { - if ((part1 = word.match(/(https?:\/\/)?([a-z\d-]+\.)*[a-z\d-]+$/i)) && (part2 = (ref = snapshot.snapshotItem(i)) != null ? (ref1 = ref.data) != null ? ref1.match(/^(\.[a-z\d-]+)*\//i) : void 0 : void 0) && (part1[0] + part2[0]).search(Linkify.regString) === 0) { - continue; - } else { - break; - } - } - endNode = saved; - data = saved.data; - if (end = space.exec(data)) { - word += data.slice(0, end.index); - test.lastIndex = length = end.index; - i--; - break; - } else { - length = data.length; - word += data; - } - } - } - if (Linkify.regString.test(word)) { - links.push(Linkify.makeRange(node, endNode, index, length)); - } - if (!(test.lastIndex && node === endNode)) { - break; - } - } - } - i = links.length; - while (i--) { - links[i] = Linkify.makeLink(links[i]); - } - return links; - }, - regString: /((https?|mailto|git|magnet|ftp|irc):([a-z\d%\/?])|([-a-z\d]+[.])+(aero|asia|biz|cat|com|coop|dance|info|int|jobs|mobi|moe|museum|name|net|org|post|pro|tel|travel|xxx|xyz|edu|gov|mil|[a-z]{2})([:\/]|(?![^\s"]))|[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}|[-\w\d.@]+@[a-z\d.-]+\.[a-z\d])/i, - makeRange: function(startNode, endNode, startOffset, endOffset) { - var range; - range = document.createRange(); - range.setStart(startNode, startOffset); - range.setEnd(endNode, endOffset); - return range; - }, - makeLink: function(range) { - var a, encodedDomain, i, t, text; - text = range.toString(); - i = text.search(Linkify.regString); - if (i > 0) { - text = text.slice(i); - while (range.startOffset + i >= range.startContainer.data.length) { - i--; - } - if (i) { - range.setStart(range.startContainer, range.startOffset + i); - } - } - i = 0; - while (/[)\]}>.,]/.test(t = text.charAt(text.length - (1 + i)))) { - if (!(/[.,]/.test(t) || (text.match(/[()\[\]{}<>]/g)).length % 2)) { - break; - } - i++; - } - if (i) { - text = text.slice(0, -i); - while (range.endOffset - i < 0) { - i--; - } - if (i) { - range.setEnd(range.endContainer, range.endOffset - i); - } - } - if (!/((mailto|magnet):|.+:\/\/)/.test(text)) { - text = (/@/.test(text) ? 'mailto:' : 'http://') + text; - } - if (encodedDomain = text.match(/^(https?:\/\/[^\/]*%[0-9a-f]{2})(.*)$/i)) { - text = encodedDomain[1].replace(/%([0-9a-f]{2})/ig, function(x, y) { - if (y === '25') { - return x; - } else { - return String.fromCharCode(parseInt(y, 16)); - } - }) + encodedDomain[2]; - } - a = $.el('a', { - className: 'linkify', - rel: 'nofollow noreferrer', - target: '_blank', - href: text - }); - $.add(a, range.extractContents()); - range.insertNode(a); - return a; - } - }; - - ArchiveLink = { - init: function() { - var div, entry, k, len1, ref, ref1, type; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Archive Link'])) { - return; - } - div = $.el('div', { - textContent: 'Archive' - }); - entry = { - el: div, - order: 90, - open: function(arg) { - var ID, board, thread; - ID = arg.ID, thread = arg.thread, board = arg.board; - return !!Redirect.to('thread', { - postID: ID, - threadID: thread.ID, - boardID: board.ID - }); - }, - subEntries: [] - }; - ref1 = [['Post', 'post'], ['Name', 'name'], ['Tripcode', 'tripcode'], ['Capcode', 'capcode'], ['Subject', 'subject'], ['Filename', 'filename'], ['Image MD5', 'MD5']]; - for (k = 0, len1 = ref1.length; k < len1; k++) { - type = ref1[k]; - entry.subEntries.push(this.createSubEntry(type[0], type[1])); - } - return Menu.menu.addEntry(entry); - }, - createSubEntry: function(text, type) { - var el, open; - el = $.el('a', { - textContent: text, - target: '_blank' - }); - open = type === 'post' ? function(arg) { - var ID, board, thread; - ID = arg.ID, thread = arg.thread, board = arg.board; - el.href = Redirect.to('thread', { - postID: ID, - threadID: thread.ID, - boardID: board.ID - }); - return true; - } : function(post) { - var value; - value = Filter[type](post); - if (!value) { - return false; - } - el.href = Redirect.to('search', { - boardID: post.board.ID, - type: type, - value: value, - isSearch: true - }); - return true; - }; - return { - el: el, - open: open - }; - } - }; - - DeleteLink = { - auto: [{}, {}], - init: function() { - var div, fileEl, fileEntry, postEl, postEntry, ref; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Delete Link'])) { - return; - } - div = $.el('div', { - className: 'delete-link', - textContent: 'Delete' - }); - postEl = $.el('a', { - className: 'delete-post', - href: 'javascript:;' - }); - fileEl = $.el('a', { - className: 'delete-file', - href: 'javascript:;' - }); - this.nodes = { - menu: div.firstChild, - links: [postEl, fileEl] - }; - postEntry = { - el: postEl, - open: function() { - postEl.textContent = DeleteLink.linkText(false); - $.on(postEl, 'click', DeleteLink.toggle); - return true; - } - }; - fileEntry = { - el: fileEl, - open: function(arg) { - var file; - file = arg.file; - if (!file || file.isDead) { - return false; - } - fileEl.textContent = DeleteLink.linkText(true); - $.on(fileEl, 'click', DeleteLink.toggle); - return true; - } - }; - return Menu.menu.addEntry({ - el: div, - order: 40, - open: function(post) { - if (post.isDead) { - return false; - } - DeleteLink.post = post; - DeleteLink.nodes.menu.textContent = DeleteLink.menuText(); - DeleteLink.cooldown.start(post); - return true; - }, - subEntries: [postEntry, fileEntry] - }); - }, - menuText: function() { - var seconds; - if (seconds = DeleteLink.cooldown.seconds[DeleteLink.post.fullID]) { - return "Delete (" + seconds + ")"; - } else { - return 'Delete'; - } - }, - linkText: function(fileOnly) { - var text; - text = fileOnly ? 'File' : 'Post'; - if (DeleteLink.auto[+fileOnly][DeleteLink.post.fullID]) { - text = "Deleting " + (text.toLowerCase()) + "..."; - } - return text; - }, - toggle: function() { - var auto, fileOnly, post; - post = DeleteLink.post; - fileOnly = $.hasClass(this, 'delete-file'); - auto = DeleteLink.auto[+fileOnly]; - if (auto[post.fullID]) { - delete auto[post.fullID]; - } else { - auto[post.fullID] = true; - } - this.textContent = DeleteLink.linkText(fileOnly); - if (!DeleteLink.cooldown.seconds[post.fullID]) { - return DeleteLink["delete"](post, fileOnly); - } - }, - "delete": function(post, fileOnly) { - var form, link; - link = DeleteLink.nodes.links[+fileOnly]; - delete DeleteLink.auto[+fileOnly][post.fullID]; - if (post.fullID === DeleteLink.post.fullID) { - $.off(link, 'click', DeleteLink.toggle); - } - form = { - mode: 'usrdel', - onlyimgdel: fileOnly, - pwd: QR.persona.getPassword() - }; - form[post.ID] = 'delete'; - return $.ajax($.id('delform').action.replace("/" + g.BOARD + "/", "/" + post.board + "/"), { - responseType: 'document', - withCredentials: true, - onload: function() { - return DeleteLink.load(link, post, fileOnly, this.response); - }, - onerror: function() { - return DeleteLink.error(link, post); - } - }, { - form: $.formData(form) - }); - }, - load: function(link, post, fileOnly, resDoc) { - var el, msg; - link.textContent = DeleteLink.linkText(fileOnly); - if (resDoc.title === '4chan - Banned') { - el = $.el('span', { - innerHTML: "You can't delete posts because you are banned." - }); - return new Notice('warning', el, 20); - } else if (msg = resDoc.getElementById('errmsg')) { - new Notice('warning', msg.textContent, 20); - if (post.fullID === DeleteLink.post.fullID) { - $.on(link, 'click', DeleteLink.toggle); - } - if (QR.cooldown.data && Conf['Cooldown'] && /\bwait\b/i.test(msg.textContent)) { - DeleteLink.cooldown.start(post, 5); - DeleteLink.auto[+fileOnly][post.fullID] = true; - return DeleteLink.nodes.links[+fileOnly].textContent = DeleteLink.linkText(fileOnly); - } - } else { - if (!fileOnly) { - QR.cooldown["delete"](post); - } - if (resDoc.title === 'Updating index...') { - (post.origin || post).kill(fileOnly); - } - if (post.fullID === DeleteLink.post.fullID) { - return link.textContent = 'Deleted'; - } - } - }, - error: function(link, post) { - new Notice('warning', 'Connection error, please retry.', 20); - if (post.fullID === DeleteLink.post.fullID) { - return $.on(link, 'click', DeleteLink.toggle); - } - }, - cooldown: { - seconds: {}, - start: function(post, seconds) { - if (DeleteLink.cooldown.seconds[post.fullID] != null) { - return; - } - if (seconds == null) { - seconds = QR.cooldown.secondsDeletion(post); - } - if (seconds > 0) { - DeleteLink.cooldown.seconds[post.fullID] = seconds; - return DeleteLink.cooldown.count(post); - } - }, - count: function(post) { - var fileOnly, k, len1, ref; - if (post.fullID === DeleteLink.post.fullID) { - DeleteLink.nodes.menu.textContent = DeleteLink.menuText(); - } - if (DeleteLink.cooldown.seconds[post.fullID] > 0 && Conf['Cooldown']) { - DeleteLink.cooldown.seconds[post.fullID]--; - setTimeout(DeleteLink.cooldown.count, 1000, post); - } else { - delete DeleteLink.cooldown.seconds[post.fullID]; - ref = [false, true]; - for (k = 0, len1 = ref.length; k < len1; k++) { - fileOnly = ref[k]; - if (DeleteLink.auto[+fileOnly][post.fullID]) { - DeleteLink["delete"](post, fileOnly); - } - } - } - } - } - }; - - DownloadLink = { - init: function() { - var a, ref; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Download Link'])) { - return; - } - a = $.el('a', { - className: 'download-link', - textContent: 'Download file' - }); - $.on(a, 'click', ImageCommon.download); - return Menu.menu.addEntry({ - el: a, - order: 100, - open: function(arg) { - var file; - file = arg.file; - if (!file) { - return false; - } - a.href = file.url; - a.download = file.name; - return true; - } - }); - } - }; - - Menu = { - init: function() { - var ref; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'])) { - return; - } - this.button = $.el('a', { - className: 'menu-button', - href: 'javascript:;' - }); - $.extend(this.button, { - innerHTML: "" - }); - this.menu = new UI.Menu('post'); - Post.callbacks.push({ - name: 'Menu', - cb: this.node - }); - return CatalogThread.callbacks.push({ - name: 'Menu', - cb: this.catalogNode - }); - }, - node: function() { - if (this.isClone) { - Menu.makeButton(this, $('.menu-button', this.nodes.info)); - return; - } - return $.add(this.nodes.info, Menu.makeButton(this)); - }, - catalogNode: function() { - return $.after(this.nodes.icons, Menu.makeButton(this.thread.OP)); - }, - makeButton: function(post, button) { - button || (button = Menu.button.cloneNode(true)); - $.on(button, 'click', function(e) { - return Menu.menu.toggle(e, this, post); - }); - return button; - } - }; - - ReportLink = { - init: function() { - var a, ref; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Report Link'])) { - return; - } - a = $.el('a', { - className: 'report-link', - href: 'javascript:;' - }); - $.on(a, 'click', ReportLink.report); - return Menu.menu.addEntry({ - el: a, - order: 10, - open: function(post) { - if (!(post.isDead || (post.thread.isDead && !post.thread.isArchived))) { - a.textContent = 'Report'; - ReportLink.url = "//sys.4chan.org/" + post.board + "/imgboard.php?mode=report&no=" + post; - if ((Conf['Use Recaptcha v1 in Reports'] && Main.jsEnabled) || d.cookie.indexOf('pass_enabled=1') >= 0) { - ReportLink.url += '&altc=1'; - ReportLink.dims = 'width=350,height=275'; - } else { - ReportLink.dims = 'width=400,height=550'; - } - } else if (Conf['Archive Report']) { - a.textContent = 'Report to archive'; - ReportLink.url = Redirect.to('report', { - boardID: post.board.ID, - postID: post.ID - }); - ReportLink.dims = 'width=700,height=475'; - } else { - ReportLink.url = ''; - } - return !!ReportLink.url; - } - }); - }, - report: function() { - var dims, id, set, url; - url = ReportLink.url, dims = ReportLink.dims; - id = Date.now(); - set = "toolbar=0,scrollbars=1,location=0,status=1,menubar=0,resizable=1," + dims; - return window.open(url, id, set); - } - }; - - Favicon = { - init: function() { - return $.asap((function() { - return d.head && (Favicon.el = $('link[rel="shortcut icon"]', d.head)); - }), Favicon.initAsap); - }, - initAsap: function() { - var href; - Favicon.el.type = 'image/x-icon'; - href = Favicon.el.href; - Favicon.SFW = /ws\.ico$/.test(href); - Favicon["default"] = href; - return Favicon["switch"](); - }, - "switch": function() { - var f, i, items, t; - items = { - ferongr: ['iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEX///9zBQC/AADpDAP/gID/q6voCwJJTwpOAAAAAXRSTlMAQObYZgAAAGJJREFUeF5Fi7ENg0AQBCfa/AFdDh2gdwPIogMK2E2+/xLslwOvdqRJhv+GQQPUCtJM7svankLrq/I+TY5e6Ueh1jyBMX7AFJi9vwfyVO4CbbO6jNYpp9GyVPbdkFhVgAQ2H0NOE5jk9DT8AAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAxUlEQVR42q1TOwrCQBB9s0FRtJI0WoqFtSLYegoP4gVSeJsUHsHSI3iFeIqRXXgwrhlXwYHHhLwPTB7B36abBCV+0pA4DUBQUNZYQptGtW3jtoKyxgoe0yrBCoyZfL/5ioQ3URZOXW9I341l3oo+NXEZiW4CEuIzvPECopED4OaZ3RNmeAm4u+a8Jr5f17VyVoL8fr8qcltzwlyyj2iqcgPOQ9ExkHAITgD75bYBe0A5S4H/P9htuWMF3QXoQpwaKeT+lnsC6JE5I6aq6fEAAAAASUVORK5CYII=', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEX///8AcH4AtswA2PJ55fKi6fIA1/FtpPADAAAAAXRSTlMAQObYZgAAAGJJREFUeF5Fi7ENg0AQBCfa/AFdDh2gdwPIogMK2E2+/xLslwOvdqRJhv+GQQPUCtJM7svankLrq/I+TY5e6Ueh1jyBMX7AFJi9vwfyVO4CbbO6jNYpp9GyVPbdkFhVgAQ2H0NOE5jk9DT8AAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAxElEQVQ4y2NgoBq4/vE/HJOsBiRQUIfA2AzBqQYqUfn00/9FLz+BaQxDCKqBmX7jExijKEDSDJPHrnnbGQhGV4RmOFwdVkNwhQMheYwQxhaIi7b9Z9A3gWAQm2BUoQOgRhgA8o7j1ozLC4LCyAZcx6kZI5qg4kLKqggDFFWxJySsUQVzlb4pwgAJaTRvokcVNgOqOv8zcHBCsL07DgNg8YsczzA5MxtUL+DMD8g0slxI/H8GQ/P/DJKyeKIRpglXZsIiBwBhP5O+VbI/JgAAAABJRU5ErkJggg==', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEX///8oeQBJ3ABV/wHM/7Lu/+ZU/gAqUP3dAAAAAXRSTlMAQObYZgAAAGJJREFUeF5Fi7ENg0AQBCfa/AFdDh2gdwPIogMK2E2+/xLslwOvdqRJhv+GQQPUCtJM7svankLrq/I+TY5e6Ueh1jyBMX7AFJi9vwfyVO4CbbO6jNYpp9GyVPbdkFhVgAQ2H0NOE5jk9DT8AAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAx0lEQVQ4y2NgoBYI+cfwH4ZJVgMS0KhEYGyG4FQDkzjzf9P/d/+fgWl0QwiqgSkI/c8IxsgKkDXD5LFq9rwDweiK0A2HqcNqCK5wICSPEcLYAtH+AMN/IXMIBrEJRie6OEgjDAC5x3FqxuUFNiEUA67j1IweTTBxBQ1puAG86jgSEraogskJWSBcwCGF5k30qMJmgMFEhv/MXBAs5oLDAFj8IsczTE7UEeECbhU8+QGZRpaTi2b4L2zF8J9TGk80wjThykzY5AAW/2O1C2mIbgAAAABJRU5ErkJggg=='], - 'xat-': ['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'], - Mayhem: ['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'], - '4chanJS': ['iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAD1BMVEUBAAAAAAD/AABnZ2f///8nFk05AAAAAXRSTlMAQObYZgAAAEFJREFUeNqNjgEKACAMAjvX/98cAkkxgmSgO8Bt/Ai4ApJ6KKhzF3OiEMDASrGB/QWgPEHsUpN+Ng9xAETMYhDrWmeHAMcmvycWAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAD1BMVEUBAAAAAAD/AAD///9nZ2f77Y6hAAAAAXRSTlMAQObYZgAAAEBJREFUeF6NjQEKACAMAnfW/98cAxFiBIngOsTqR8B1IGkeG9p5i7XabgAGZNigXgA8aoCUxvzWAIcBItGiSEwdccYA3BuRAWkAAAAASUVORK5CYII=', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAD1BMVEUBAAAAAAAul8NnZ2f////82iC9AAAAAXRSTlMAQObYZgAAAEFJREFUeNqNjgEKACAMAjvX/98cAkkxgmSgO8Bt/Ai4ApJ6KKhzF3OiEMDASrGB/QWgPEHsUpN+Ng9xAETMYhDrWmeHAMcmvycWAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAD1BMVEUBAAAAAAAul8P///9nZ2cgIeMlAAAAAXRSTlMAQObYZgAAAEBJREFUeF6NjQEKACAMAnfW/98cAxFiBIngOsTqR8B1IGkeG9p5i7XabgAGZNigXgA8aoCUxvzWAIcBItGiSEwdccYA3BuRAWkAAAAASUVORK5CYII=', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAElBMVEUBAAAAAABmzDNlyjJnZ2f///+6o7dfAAAAAXRSTlMAQObYZgAAAERJREFUeF6NjkEKADEIA51o///lJZfQxUsHITogWi8AvwZJuxmYa25xDooBLEwOWFTYAsYVhdorLZt9Ng9xCUTCUCQ2H3F4ANrZ2WNiAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAElBMVEUBAAAAAABmzDP///9lyjJnZ2cIHys9AAAAAXRSTlMAQObYZgAAAENJREFUeF6NjUEKwEAMAjNm9/9fLkEslFwqgjoEUn8EfAqSdrkwzj6ieyyTkQEVGWRvANfO1iEX620AjgBEwqR4Y+sBeGAA6d+vQ4IAAAAASUVORK5CYII='], - Original: ['iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAADFBMVEX/////AAD///8AAABBZmS3AAAAAXRSTlMAQObYZgAAAExJREFUeF4tyrENgDAMAMFXKuQswQLBG3mOlBnFS1gwDfIYLpEivvjq2MlqjmYvYg5jWEzCwtDSQlwcXKCVLrpFbvLvvSf9uZJ2HusDtJAY7Tkn1oYAAAAASUVORK5CYII=', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAhElEQVR42q1RwQnAMAjMu5M4guAKXa4j5dUROo5tipSDcrFChUONd0di2m/hEGVOHDyIPufgwAFASDkpoSzmBrkJ2UMyR9LsJ3rvrqo3Rt1YMIMhhNnOxLMnoMFBxHyJAr2IOBFzA8U+6pLBdmEJTA0aMVjpDd6Loks0s5HZNwYx8tfZCZ0kll7ORffZAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAADFBMVEX///8ul8P///8AAACaqgkzAAAAAXRSTlMAQObYZgAAAExJREFUeF4tyrENgDAMAMFXKuQswQLBG3mOlBnFS1gwDfIYLpEivvjq2MlqjmYvYg5jWEzCwtDSQlwcXKCVLrpFbvLvvSf9uZJ2HusDtJAY7Tkn1oYAAAAASUVORK5CYII=', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAALVBMVEUAAAAAAAAAAAAAAAABBQcHFx4KISoNLToaVW4oKCgul8M4ODg7OzvBwcH///8uS/CdAAAAA3RSTlMAx9dmesIgAAAAV0lEQVR42m2NWw6AIBAD1eILZO5/XI0UAgm7H9tOsu0yGWAQSOoFijHOxOANGqm/LczpOaXs4gISrPZ+gc2+hO5w2xdwgOjBFUIF+sEJrhUl9JFr+badFwR+BfqlmGUJAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAADFBMVEX///9mzDP///8AAACT0n1lAAAAAXRSTlMAQObYZgAAAExJREFUeF4tyrENgDAMAMFXKuQswQLBG3mOlBnFS1gwDfIYLpEivvjq2MlqjmYvYg5jWEzCwtDSQlwcXKCVLrpFbvLvvSf9uZJ2HusDtJAY7Tkn1oYAAAAASUVORK5CYII=', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAALVBMVEUAAAAAAAAAAAAAAAAECAIQIAgWLAsePA8oKCg4ODg6dB07OztmzDPBwcH///+rsf3XAAAAA3RSTlMAx9dmesIgAAAAV0lEQVR42m2NWw6AIBAD1eIDhbn/cTVSCCTsfmw7ybbLZIBBIKkXKKU0E4M3aKT+tjCn5xiziwuIsNr7BTb7ErrDZV/AAaIHdwgV6AcnuFaU0Eeu5dt2XiUyBjCQ2bIrAAAAAElFTkSuQmCC'], - 'Metro': ['iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAC/AABrZQDiAAAAAXRSTlMAQObYZgAAABJJREFUCB1jZGBgrMNAQEEc4gCSfAX5bRw/NQAAAABJRU5ErkJggg==', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAAAAAAAAAAHAAAdAAApAAAsAAA4AABsAACQAAC/AAD///9SVhtjAAAAA3RSTlMAPse+s4iwAAAAM0lEQVQIW2NggAGuVasWgDBpDDAQUoSaob0Jao73lgVojOitUEazBZRRvR3KmJa5AO4KAGBtLuMAuhIIAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAAA1/GhpCidAAAAAXRSTlMAQObYZgAAABJJREFUCB1jZGBgrMNAQEEc4gCSfAX5bRw/NQAAAABJRU5ErkJggg==', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAAAAAAAAAAACAkAISUALzQAMTcAQEcAeokAorYA1/H///8BrzTFAAAAA3RSTlMAPse+s4iwAAAAM0lEQVQIW2NggAGuVasWgDBpDDAQUoSaob0Jao73lgVojOitUEazBZRRvR3KmJa5AO4KAGBtLuMAuhIIAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAABV/wErM5hwAAAAAXRSTlMAQObYZgAAABJJREFUCB1jZGBgrMNAQEEc4gCSfAX5bRw/NQAAAABJRU5ErkJggg==', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAAAAAAAAAADCgANKAASOAATOwAZTAAwkQBAwQBV/wH////+Fmy4AAAAA3RSTlMAPse+s4iwAAAAM0lEQVQIW2NggAGuVasWgDBpDDAQUoSaob0Jao73lgVojOitUEazBZRRvR3KmJa5AO4KAGBtLuMAuhIIAAAAAElFTkSuQmCC'] - }[Conf['favicon']]; - f = Favicon; - t = 'data:image/png;base64,'; - i = 0; - while (items[i]) { - items[i] = t + items[i++]; - } - f.unreadDead = items[0], f.unreadDeadY = items[1], f.unreadSFW = items[2], f.unreadSFWY = items[3], f.unreadNSFW = items[4], f.unreadNSFWY = items[5]; - return f.update(); - }, - update: function() { - if (this.SFW) { - this.unread = this.unreadSFW; - return this.unreadY = this.unreadSFWY; - } else { - this.unread = this.unreadNSFW; - return this.unreadY = this.unreadNSFWY; - } - }, - dead: 'data:image/gif;base64,R0lGODlhEAAQAKECAAAAAP8AAP///////yH5BAEKAAIALAAAAAAQABAAAAIvlI+pq+D9DAgUoFkPDlbs7lFZKIJOJJ3MyraoB14jFpOcVMpzrnF3OKlZYsMWowAAOw==', - logo: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACAAgMAAAC+UIlYAAAACVBMVEUAAGcAAABmzDNZt9VtAAAAAXRSTlMAQObYZgAAAGlJREFUWMPtlkEKADEIA/tJP9lXLttQto2yHxgDHozTi0ToGK2WKZZ+HAQQMZc+xBwI4EZ+wAC2IfPuSIDOZJrSZQEAX9eVJhhwIuUYAnQe8rhAEMAZlTI2MID9f5Clyh0JeE1V1ZEAvB4qDfwuJTSGRAAAAABJRU5ErkJggg==' - }; - - MarkNewIPs = { - init: function() { - if (g.VIEW !== 'thread' || !Conf['Mark New IPs']) { - return; - } - return Thread.callbacks.push({ - name: 'Mark New IPs', - cb: this.node - }); - }, - node: function() { - MarkNewIPs.ipCount = this.ipCount; - MarkNewIPs.postCount = this.posts.keys.length; - return $.on(d, 'ThreadUpdate', MarkNewIPs.onUpdate); - }, - onUpdate: function(e) { - var deletedPosts, fullID, i, ipCount, k, len1, len2, newPosts, postCount, q, ref; - ref = e.detail, ipCount = ref.ipCount, postCount = ref.postCount, newPosts = ref.newPosts, deletedPosts = ref.deletedPosts; - if (ipCount == null) { - return; - } - switch (ipCount - MarkNewIPs.ipCount) { - case postCount - MarkNewIPs.postCount + deletedPosts.length: - i = MarkNewIPs.ipCount; - for (k = 0, len1 = newPosts.length; k < len1; k++) { - fullID = newPosts[k]; - MarkNewIPs.markNew(g.posts[fullID], ++i); - } - break; - case -deletedPosts.length: - for (q = 0, len2 = newPosts.length; q < len2; q++) { - fullID = newPosts[q]; - MarkNewIPs.markOld(g.posts[fullID]); - } - } - MarkNewIPs.ipCount = ipCount; - return MarkNewIPs.postCount = postCount; - }, - markNew: function(post, ipCount) { - var counter, suffix; - suffix = (Math.floor(ipCount / 10)) % 10 === 1 ? 'th' : ['st', 'nd', 'rd'][ipCount % 10 - 1] || 'th'; - counter = $.el('span', { - className: 'ip-counter', - textContent: "(" + ipCount + ")" - }); - post.nodes.nameBlock.title = "This is the " + ipCount + suffix + " IP in the thread."; - $.add(post.nodes.nameBlock, [$.tn(' '), counter]); - return $.addClass(post.nodes.root, 'new-ip'); - }, - markOld: function(post) { - post.nodes.nameBlock.title = 'Not the first post from this IP.'; - return $.addClass(post.nodes.root, 'old-ip'); - } - }; - - ReplyPruning = { - init: function() { - var el, label; - if (!(g.VIEW === 'thread' && Conf['Reply Pruning'])) { - return; - } - this.active = !(Conf['Quote Threading'] && Conf['Thread Quotes']); - this.container = $.frag(); - this.summary = $.el('span', { - hidden: true, - className: 'summary' - }); - this.summary.style.cursor = 'pointer'; - $.on(this.summary, 'click', (function(_this) { - return function() { - _this.inputs.enabled.checked = !_this.inputs.enabled.checked; - return $.event('change', null, _this.inputs.enabled); - }; - })(this)); - label = UI.checkbox('Prune Replies', 'Show Last', this.active); - el = $.el('span', { - title: 'Maximum number of replies to show.' - }, { - innerHTML: " " - }); - $.prepend(el, label); - this.inputs = { - enabled: label.firstElementChild, - replies: el.lastElementChild - }; - $.on(this.inputs.enabled, 'change', this.setEnabled); - $.on(this.inputs.replies, 'change', $.cb.value); - Header.menu.addEntry({ - el: el, - order: 190 - }); - return Thread.callbacks.push({ - name: 'Reply Pruning', - cb: this.node - }); - }, - position: 0, - hidden: 0, - hiddenFiles: 0, - total: 0, - totalFiles: 0, - setEnabled: function() { - var other; - other = QuoteThreading.input; - if (this.checked && (other != null ? other.checked : void 0)) { - other.checked = false; - $.event('change', null, other); - } - return ReplyPruning.active = this.checked; - }, - showIfHidden: function(id) { - var ref; - if ((ref = ReplyPruning.container) != null ? ref.getElementById(id) : void 0) { - ReplyPruning.inputs.enabled.checked = false; - return $.event('change', null, ReplyPruning.inputs.enabled); - } - }, - node: function() { - var ref; - ReplyPruning.thread = this; - this.posts.forEach(function(post) { - if (post.isReply) { - ReplyPruning.total++; - if (post.file) { - return ReplyPruning.totalFiles++; - } - } - }); - if (ReplyPruning.active && /^#p\d+$/.test(location.hash) && (0 <= (ref = this.posts.keys.indexOf(location.hash.slice(2))) && ref < 1 + Math.max(ReplyPruning.total - +Conf["Max Replies"], 0))) { - ReplyPruning.active = ReplyPruning.inputs.enabled.checked = false; - } - $.after(this.OP.nodes.root, ReplyPruning.summary); - $.on(ReplyPruning.inputs.enabled, 'change', ReplyPruning.update); - $.on(ReplyPruning.inputs.replies, 'change', ReplyPruning.update); - $.on(d, 'ThreadUpdate', ReplyPruning.updateCount); - $.on(d, 'ThreadUpdate', ReplyPruning.update); - return ReplyPruning.update(); - }, - updateCount: function(e) { - var fullID, k, len1, ref; - if (e.detail[404]) { - return; - } - ref = e.detail.newPosts; - for (k = 0, len1 = ref.length; k < len1; k++) { - fullID = ref[k]; - ReplyPruning.total++; - if (g.posts[fullID].file) { - ReplyPruning.totalFiles++; - } - } - }, - update: function() { - var frag, hidden2, post, posts; - hidden2 = ReplyPruning.active ? Math.max(ReplyPruning.total - +Conf["Max Replies"], 0) : 0; - posts = ReplyPruning.thread.posts; - if (ReplyPruning.hidden < hidden2) { - while (ReplyPruning.hidden < hidden2 && ReplyPruning.position < posts.keys.length) { - post = posts[posts.keys[ReplyPruning.position++]]; - if (post.isReply && !post.isFetchedQuote) { - $.add(ReplyPruning.container, post.nodes.root); - ReplyPruning.hidden++; - if (post.file) { - ReplyPruning.hiddenFiles++; - } - } - } - } else if (ReplyPruning.hidden > hidden2) { - frag = $.frag(); - while (ReplyPruning.hidden > hidden2 && ReplyPruning.position > 0) { - post = posts[posts.keys[--ReplyPruning.position]]; - if (post.isReply && !post.isFetchedQuote) { - $.prepend(frag, post.nodes.root); - ReplyPruning.hidden--; - if (post.file) { - ReplyPruning.hiddenFiles--; - } - } - } - $.after(ReplyPruning.summary, frag); - $.event('PostsInserted'); - } - ReplyPruning.summary.textContent = ReplyPruning.active ? Build.summaryText('+', ReplyPruning.hidden, ReplyPruning.hiddenFiles) : Build.summaryText('-', ReplyPruning.total, ReplyPruning.totalFiles); - return ReplyPruning.summary.hidden = ReplyPruning.total <= +Conf["Max Replies"]; - } - }; - - ThreadExcerpt = { - init: function() { - if (g.BOARD.ID !== 'f' || g.VIEW !== 'thread' || !Conf['Thread Excerpt']) { - return; - } - return Thread.callbacks.push({ - name: 'Thread Excerpt', - cb: this.node - }); - }, - node: function() { - return d.title = Get.threadExcerpt(this); - } - }; - - ThreadStats = { - init: function() { - var sc, statsHTML, statsTitle; - if (g.VIEW !== 'thread' || !Conf['Thread Stats']) { - return; - } - statsHTML = { - innerHTML: "? / ?" + (Conf["IP Count in Stats"] ? " / ?" : "") + (Conf["Page Count in Stats"] ? " / ?" : "") - }; - statsTitle = 'Posts / Files'; - if (Conf['IP Count in Stats']) { - statsTitle += ' / IPs'; - } - if (Conf['Page Count in Stats']) { - statsTitle += (g.BOARD.ID === 'f' ? ' / Purge Position' : ' / Page'); - } - if (Conf['Updater and Stats in Header']) { - this.dialog = sc = $.el('span', { - id: 'thread-stats', - title: statsTitle - }); - $.extend(sc, statsHTML); - $.ready(function() { - return Header.addShortcut(sc); - }); - } else { - this.dialog = sc = UI.dialog('thread-stats', 'bottom: 0px; right: 0px;', { - innerHTML: "
" + statsHTML.innerHTML + "
" - }); - $.addClass(doc, 'float'); - $.ready(function() { - return $.add(d.body, sc); - }); - } - this.postCountEl = $('#post-count', sc); - this.fileCountEl = $('#file-count', sc); - this.ipCountEl = $('#ip-count', sc); - this.pageCountEl = $('#page-count', sc); - if (this.pageCountEl) { - $.on(this.pageCountEl, 'click', ThreadStats.fetchPage); - } - return Thread.callbacks.push({ - name: 'Thread Stats', - cb: this.node - }); - }, - node: function() { - var fileCount, postCount; - postCount = 0; - fileCount = 0; - this.posts.forEach(function(post) { - postCount++; - if (post.file) { - fileCount++; - } - if (ThreadStats.pageCountEl) { - return ThreadStats.lastPost = post.info.date; - } - }); - ThreadStats.thread = this; - ThreadStats.fetchPage(); - ThreadStats.update(postCount, fileCount, this.ipCount); - return $.on(d, 'ThreadUpdate', ThreadStats.onUpdate); - }, - onUpdate: function(e) { - var fileCount, ipCount, newPosts, postCount, ref, ref1; - if (e.detail[404]) { - return; - } - ref = e.detail, postCount = ref.postCount, fileCount = ref.fileCount, ipCount = ref.ipCount, newPosts = ref.newPosts; - ThreadStats.update(postCount, fileCount, ipCount); - if (!ThreadStats.pageCountEl) { - return; - } - if (newPosts.length) { - ThreadStats.lastPost = g.posts[newPosts[newPosts.length - 1]].info.date; - } - if (g.BOARD.ID !== 'f' && ((ref1 = ThreadStats.pageCountEl) != null ? ref1.textContent : void 0) !== '1') { - return ThreadStats.fetchPage(); - } - }, - update: function(postCount, fileCount, ipCount) { - var fileCountEl, ipCountEl, postCountEl, thread; - thread = ThreadStats.thread, postCountEl = ThreadStats.postCountEl, fileCountEl = ThreadStats.fileCountEl, ipCountEl = ThreadStats.ipCountEl; - postCountEl.textContent = postCount; - fileCountEl.textContent = fileCount; - if ((ipCount != null) && ipCountEl) { - ipCountEl.textContent = ipCount; - } - (thread.postLimit && !thread.isSticky ? $.addClass : $.rmClass)(postCountEl, 'warning'); - return (thread.fileLimit && !thread.isSticky ? $.addClass : $.rmClass)(fileCountEl, 'warning'); - }, - fetchPage: function() { - if (!ThreadStats.pageCountEl) { - return; - } - clearTimeout(ThreadStats.timeout); - if (ThreadStats.thread.isDead) { - ThreadStats.pageCountEl.textContent = 'Dead'; - $.addClass(ThreadStats.pageCountEl, 'warning'); - return; - } - ThreadStats.timeout = setTimeout(ThreadStats.fetchPage, 2 * $.MINUTE); - return $.ajax("//a.4cdn.org/" + ThreadStats.thread.board + "/threads.json", { - onload: ThreadStats.onThreadsLoad - }, { - whenModified: 'ThreadStats' - }); - }, - onThreadsLoad: function() { - var k, len1, len2, len3, page, purgePos, q, ref, ref1, ref2, thread, u; - if (this.status === 200) { - ref = this.response; - for (k = 0, len1 = ref.length; k < len1; k++) { - page = ref[k]; - if (g.BOARD.ID === 'f') { - purgePos = 1; - ref1 = page.threads; - for (q = 0, len2 = ref1.length; q < len2; q++) { - thread = ref1[q]; - if (thread.no < ThreadStats.thread.ID) { - purgePos++; - } - } - ThreadStats.pageCountEl.textContent = purgePos; - } else { - ref2 = page.threads; - for (u = 0, len3 = ref2.length; u < len3; u++) { - thread = ref2[u]; - if (!(thread.no === ThreadStats.thread.ID)) { - continue; - } - ThreadStats.pageCountEl.textContent = page.page; - (page.page === this.response.length ? $.addClass : $.rmClass)(ThreadStats.pageCountEl, 'warning'); - ThreadStats.lastPageUpdate = new Date(thread.last_modified * $.SECOND); - ThreadStats.retry(); - return; - } - } - } - } else if (this.status === 304) { - return ThreadStats.retry(); - } - }, - retry: function() { - var ref; - if (g.BOARD.ID !== 'f' && ThreadStats.lastPost > ThreadStats.lastPageUpdate && ((ref = ThreadStats.pageCountEl) != null ? ref.textContent : void 0) !== '1') { - clearTimeout(ThreadStats.timeout); - return ThreadStats.timeout = setTimeout(ThreadStats.fetchPage, 5 * $.SECOND); - } - } - }; - - ThreadUpdater = { - init: function() { - var conf, el, input, name, ref, sc, subEntries, updateLink; - if (g.VIEW !== 'thread' || !Conf['Thread Updater']) { - return; - } - this.audio = $.el('audio', { - src: ThreadUpdater.beep - }); - if (Conf['Updater and Stats in Header']) { - this.dialog = sc = $.el('span', { - id: 'updater' - }); - $.extend(sc, { - innerHTML: "" - }); - $.ready(function() { - return Header.addShortcut(sc); - }); - } else { - this.dialog = sc = UI.dialog('updater', 'bottom: 0px; left: 0px;', { - innerHTML: "
" - }); - $.addClass(doc, 'float'); - $.ready(function() { - return $.add(d.body, sc); - }); - } - this.checkPostCount = 0; - this.timer = $('#update-timer', sc); - this.status = $('#update-status', sc); - $.on(this.timer, 'click', this.update); - $.on(this.status, 'click', this.update); - updateLink = $.el('span', { - className: 'brackets-wrap updatelink' - }); - $.extend(updateLink, { - innerHTML: "Update" - }); - Main.ready(function() { - var navLinksBot; - if ((navLinksBot = $('.navLinksBot'))) { - return $.add(navLinksBot, [$.tn(' '), updateLink]); - } - }); - $.on(updateLink.firstElementChild, 'click', this.update); - subEntries = []; - ref = Config.updater.checkbox; - for (name in ref) { - conf = ref[name]; - el = UI.checkbox(name, name); - el.title = conf[1]; - input = el.firstElementChild; - $.on(input, 'change', $.cb.checked); - if (input.name === 'Scroll BG') { - $.on(input, 'change', this.cb.scrollBG); - this.cb.scrollBG(); - } else if (input.name === 'Auto Update') { - $.on(input, 'change', this.setInterval); - } - subEntries.push({ - el: el - }); - } - this.settings = $.el('span', { - innerHTML: "Interval" - }); - $.on(this.settings, 'click', this.intervalShortcut); - subEntries.push({ - el: this.settings - }); - Header.menu.addEntry(this.entry = { - el: $.el('span', { - textContent: 'Updater' - }), - order: 110, - subEntries: subEntries - }); - return Thread.callbacks.push({ - name: 'Thread Updater', - cb: this.node - }); - }, - node: function() { - ThreadUpdater.thread = this; - ThreadUpdater.root = this.OP.nodes.root.parentNode; - ThreadUpdater.outdateCount = 0; - ThreadUpdater.postIDs = []; - ThreadUpdater.fileIDs = []; - this.posts.forEach(function(post) { - ThreadUpdater.postIDs.push(post.ID); - if (post.file) { - return ThreadUpdater.fileIDs.push(post.ID); - } - }); - ThreadUpdater.cb.interval.call($.el('input', { - value: Conf['Interval'] - })); - $.on(d, 'QRPostSuccessful', ThreadUpdater.cb.checkpost); - $.on(d, 'visibilitychange', ThreadUpdater.cb.visibility); - return ThreadUpdater.setInterval(); - }, - - /* - http://freesound.org/people/pierrecartoons1979/sounds/90112/ - cc-by-nc-3.0 - */ - beep: 'data:audio/wav;base64,UklGRjQDAABXQVZFZm10IBAAAAABAAEAgD4AAIA+AAABAAgAc21wbDwAAABBAAADAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkYXRhzAIAAGMms8em0tleMV4zIpLVo8nhfSlcPR102Ki+5JspVEkdVtKzs+K1NEhUIT7DwKrcy0g6WygsrM2k1NpiLl0zIY/WpMrjgCdbPhxw2Kq+5Z4qUkkdU9K1s+K5NkVTITzBwqnczko3WikrqM+l1NxlLF0zIIvXpsnjgydZPhxs2ay95aIrUEkdUdC3suK8N0NUIjq+xKrcz002WioppdGm091pK1w0IIjYp8jkhydXPxxq2K295aUrTkoeTs65suK+OUFUIzi7xqrb0VA0WSoootKm0t5tKlo1H4TYqMfkiydWQBxm16+85actTEseS8y7seHAPD9TIza5yKra01QyWSson9On0d5wKVk2H4DYqcfkjidUQB1j1rG75KsvSkseScu8seDCPz1TJDW2yara1FYxWSwnm9Sn0N9zKVg2H33ZqsXkkihSQR1g1bK65K0wSEsfR8i+seDEQTxUJTOzy6rY1VowWC0mmNWoz993KVc3H3rYq8TklSlRQh1d1LS647AyR0wgRMbAsN/GRDpTJTKwzKrX1l4vVy4lldWpzt97KVY4IXbUr8LZljVPRCxhw7W3z6ZISkw1VK+4sMWvXEhSPk6buay9sm5JVkZNiLWqtrJ+TldNTnquqbCwilZXU1BwpKirrpNgWFhTaZmnpquZbFlbVmWOpaOonHZcXlljhaGhpZ1+YWBdYn2cn6GdhmdhYGN3lp2enIttY2Jjco+bnJuOdGZlZXCImJqakHpoZ2Zug5WYmZJ/bGlobX6RlpeSg3BqaW16jZSVkoZ0bGtteImSk5KIeG5tbnaFkJKRinxxbm91gY2QkIt/c3BwdH6Kj4+LgnZxcXR8iI2OjIR5c3J0e4WLjYuFe3VzdHmCioyLhn52dHR5gIiKioeAeHV1eH+GiYqHgXp2dnh9hIiJh4J8eHd4fIKHiIeDfXl4eHyBhoeHhH96eHmA', - playBeep: function() { - var audio; - audio = ThreadUpdater.audio; - if (audio.paused) { - return audio.play(); - } else { - return $.one(audio, 'ended', ThreadUpdater.playBeep); - } - }, - cb: { - checkpost: function(e) { - if (e.detail.threadID !== ThreadUpdater.thread.ID) { - return; - } - ThreadUpdater.postID = e.detail.postID; - ThreadUpdater.checkPostCount = 0; - ThreadUpdater.outdateCount = 0; - return ThreadUpdater.setInterval(); - }, - visibility: function() { - if (d.hidden) { - return; - } - ThreadUpdater.outdateCount = 0; - if (ThreadUpdater.seconds > ThreadUpdater.interval) { - return ThreadUpdater.setInterval(); - } - }, - scrollBG: function() { - return ThreadUpdater.scrollBG = Conf['Scroll BG'] ? function() { - return true; - } : function() { - return !d.hidden; - }; - }, - interval: function(e) { - var val; - val = parseInt(this.value, 10); - if (val < 1) { - val = 1; - } - ThreadUpdater.interval = this.value = val; - if (e) { - return $.cb.value.call(this); - } - }, - load: function() { - var req; - req = ThreadUpdater.req; - switch (req.status) { - case 200: - ThreadUpdater.parse(req); - if (ThreadUpdater.thread.isArchived) { - return ThreadUpdater.kill(); - } else { - return ThreadUpdater.setInterval(); - } - break; - case 404: - return $.ajax("//a.4cdn.org/" + ThreadUpdater.thread.board + "/catalog.json", { - onloadend: function() { - var confirmed, k, len1, len2, page, q, ref, ref1, thread; - if (this.status === 200) { - confirmed = true; - ref = this.response; - for (k = 0, len1 = ref.length; k < len1; k++) { - page = ref[k]; - ref1 = page.threads; - for (q = 0, len2 = ref1.length; q < len2; q++) { - thread = ref1[q]; - if (thread.no === ThreadUpdater.thread.ID) { - confirmed = false; - break; - } - } - } - } else { - confirmed = false; - } - if (confirmed) { - return ThreadUpdater.kill(); - } else { - return ThreadUpdater.error(req); - } - } - }); - default: - return ThreadUpdater.error(req); - } - } - }, - kill: function() { - ThreadUpdater.thread.kill(); - ThreadUpdater.setInterval(); - return $.event('ThreadUpdate', { - 404: true, - threadID: ThreadUpdater.thread.fullID - }); - }, - error: function(req) { - if (req.status === 304) { - ThreadUpdater.set('status', ''); - } - ThreadUpdater.setInterval(); - if (!req.status) { - return ThreadUpdater.set('status', 'Connection Failed', 'warning'); - } else if (req.status !== 304) { - return ThreadUpdater.set('status', req.statusText + " (" + req.status + ")", 'warning'); - } - }, - setInterval: function() { - var cur, interval, j, limit; - clearTimeout(ThreadUpdater.timeoutID); - if (ThreadUpdater.thread.isDead) { - ThreadUpdater.set('status', (ThreadUpdater.thread.isArchived ? 'Archived' : '404'), 'warning'); - ThreadUpdater.set('timer', ''); - return; - } - if (ThreadUpdater.postID && ThreadUpdater.checkPostCount < 5) { - ThreadUpdater.set('timer', '...', 'loading'); - ThreadUpdater.timeoutID = setTimeout(ThreadUpdater.update, ++ThreadUpdater.checkPostCount * $.SECOND); - return; - } - if (!Conf['Auto Update']) { - ThreadUpdater.set('timer', 'Update'); - return; - } - interval = ThreadUpdater.interval; - if (Conf['Optional Increase']) { - limit = d.hidden ? 10 : 5; - j = Math.min(ThreadUpdater.outdateCount, limit); - cur = (Math.floor(interval * 0.1) || 1) * j * j; - ThreadUpdater.seconds = $.minmax(cur, interval, 300); - } else { - ThreadUpdater.seconds = interval; - } - return ThreadUpdater.timeout(); - }, - intervalShortcut: function() { - var settings; - Settings.open('Advanced'); - settings = $.id('fourchanx-settings'); - return $('input[name=Interval]', settings).focus(); - }, - set: function(name, text, klass) { - var el, node; - el = ThreadUpdater[name]; - if (node = el.firstChild) { - node.data = text; - } else { - el.textContent = text; - } - return el.className = klass != null ? klass : (text === '' ? 'empty' : ''); - }, - timeout: function() { - if (ThreadUpdater.seconds) { - ThreadUpdater.set('timer', ThreadUpdater.seconds); - ThreadUpdater.timeoutID = setTimeout(ThreadUpdater.timeout, 1000); - } else { - ThreadUpdater.outdateCount++; - ThreadUpdater.update(); - } - return ThreadUpdater.seconds--; - }, - update: function() { - var ref; - clearTimeout(ThreadUpdater.timeoutID); - ThreadUpdater.set('timer', '...', 'loading'); - if ((ref = ThreadUpdater.req) != null) { - ref.abort(); - } - return ThreadUpdater.req = $.ajax("//a.4cdn.org/" + ThreadUpdater.thread.board + "/thread/" + ThreadUpdater.thread + ".json", { - onloadend: ThreadUpdater.cb.load, - timeout: $.MINUTE - }, { - whenModified: 'ThreadUpdater' - }); - }, - updateThreadStatus: function(type, status) { - var change, hasChanged; - if (!(hasChanged = ThreadUpdater.thread["is" + type] !== status)) { - return; - } - ThreadUpdater.thread.setStatus(type, status); - if (type === 'Closed' && ThreadUpdater.thread.isArchived) { - return; - } - change = type === 'Sticky' ? status ? 'now a sticky' : 'not a sticky anymore' : status ? 'now closed' : 'not closed anymore'; - return new Notice('info', "The thread is " + change + ".", 30); - }, - parse: function(req) { - var ID, OP, board, deletedFiles, deletedPosts, files, firstPost, index, ipCountEl, k, lastPost, len1, len2, len3, len4, newPosts, node, post, postObject, postObjects, posts, q, ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, scroll, thread, u, unreadCount, unreadQYCount, v; - postObjects = req.response.posts; - OP = postObjects[0]; - thread = ThreadUpdater.thread; - board = thread.board; - ref = ThreadUpdater.postIDs, lastPost = ref[ref.length - 1]; - if (postObjects[postObjects.length - 1].no < lastPost && new Date(req.getResponseHeader('Last-Modified')) - thread.posts[lastPost].info.date < 30 * $.SECOND) { - return; - } - Build.spoilerRange[board] = OP.custom_spoiler; - thread.setStatus('Archived', !!OP.archived); - ThreadUpdater.updateThreadStatus('Sticky', !!OP.sticky); - ThreadUpdater.updateThreadStatus('Closed', !!OP.closed); - thread.postLimit = !!OP.bumplimit; - thread.fileLimit = !!OP.imagelimit; - if (OP.unique_ips != null) { - thread.ipCount = OP.unique_ips; - } - posts = []; - index = []; - files = []; - newPosts = []; - for (k = 0, len1 = postObjects.length; k < len1; k++) { - postObject = postObjects[k]; - ID = postObject.no; - index.push(ID); - if (postObject.fsize) { - files.push(ID); - } - if (ID <= lastPost) { - continue; - } - if ((post = thread.posts[ID]) && !post.isFetchedQuote) { - post.resurrect(); - continue; - } - newPosts.push(board + "." + ID); - node = Build.postFromObject(postObject, board.ID); - posts.push(new Post(node, thread, board)); - if (ThreadUpdater.postID === ID) { - delete ThreadUpdater.postID; - } - } - deletedPosts = []; - ref1 = ThreadUpdater.postIDs; - for (q = 0, len2 = ref1.length; q < len2; q++) { - ID = ref1[q]; - if (!(indexOf.call(index, ID) < 0)) { - continue; - } - thread.posts[ID].kill(); - deletedPosts.push(board + "." + ID); - } - ThreadUpdater.postIDs = index; - deletedFiles = []; - ref2 = ThreadUpdater.fileIDs; - for (u = 0, len3 = ref2.length; u < len3; u++) { - ID = ref2[u]; - if (!(!(indexOf.call(files, ID) >= 0 || (ref3 = board + "." + ID, indexOf.call(deletedPosts, ref3) >= 0)))) { - continue; - } - thread.posts[ID].kill(true); - deletedFiles.push(board + "." + ID); - } - ThreadUpdater.fileIDs = files; - if (!posts.length) { - ThreadUpdater.set('status', ''); - } else { - ThreadUpdater.set('status', "+" + posts.length, 'new'); - ThreadUpdater.outdateCount = 0; - unreadCount = (ref4 = Unread.posts) != null ? ref4.size : void 0; - unreadQYCount = (ref5 = Unread.postsQuotingYou) != null ? ref5.size : void 0; - Main.callbackNodes(Post, posts); - if (d.hidden || !d.hasFocus()) { - if (Conf['Beep Quoting You'] && ((ref6 = Unread.postsQuotingYou) != null ? ref6.size : void 0) > unreadQYCount) { - ThreadUpdater.playBeep(); - if (Conf['Beep']) { - ThreadUpdater.playBeep(); - } - } else if (Conf['Beep'] && ((ref7 = Unread.posts) != null ? ref7.size : void 0) > 0 && unreadCount === 0) { - ThreadUpdater.playBeep(); - } - } - scroll = Conf['Auto Scroll'] && ThreadUpdater.scrollBG() && ThreadUpdater.root.getBoundingClientRect().bottom - doc.clientHeight < 25; - firstPost = null; - for (v = 0, len4 = posts.length; v < len4; v++) { - post = posts[v]; - if (!QuoteThreading.insert(post)) { - firstPost || (firstPost = post.nodes.root); - $.add(ThreadUpdater.root, post.nodes.root); - } - } - $.event('PostsInserted'); - if (scroll) { - if (Conf['Bottom Scroll']) { - window.scrollTo(0, d.body.clientHeight); - } else { - if (firstPost) { - Header.scrollTo(firstPost); - } - } - } - } - if ((OP.unique_ips != null) && (ipCountEl = $.id('unique-ips'))) { - ipCountEl.textContent = OP.unique_ips; - ipCountEl.previousSibling.textContent = ipCountEl.previousSibling.textContent.replace(/\b(?:is|are)\b/, OP.unique_ips === 1 ? 'is' : 'are'); - ipCountEl.nextSibling.textContent = ipCountEl.nextSibling.textContent.replace(/\bposters?\b/, OP.unique_ips === 1 ? 'poster' : 'posters'); - } - return $.event('ThreadUpdate', { - 404: false, - threadID: thread.fullID, - newPosts: newPosts, - deletedPosts: deletedPosts, - deletedFiles: deletedFiles, - postCount: OP.replies + 1, - fileCount: OP.images + !!OP.fsize, - ipCount: OP.unique_ips - }); - } - }; - - ThreadWatcher = { - init: function() { - var sc; - if (!(this.enabled = Conf['Thread Watcher'])) { - return; - } - this.shortcut = sc = $.el('a', { - id: 'watcher-link', - textContent: 'Watcher', - title: 'Thread Watcher', - href: 'javascript:;', - className: 'disabled fa fa-eye' - }); - this.db = new DataBoard('watchedThreads', this.refresh, true); - this.dialog = UI.dialog('thread-watcher', 'top: 50px; left: 0px;', { - innerHTML: "
Thread Watcher ×
" - }); - this.status = $('#watcher-status', this.dialog); - this.list = this.dialog.lastElementChild; - this.refreshButton = $('.refresh', this.dialog); - this.closeButton = $('.move > .close', this.dialog); - this.unreaddb = Unread.db || new DataBoard('lastReadPosts'); - this.unreadEnabled = Conf['Remember Last Read Post']; - $.on(d, 'QRPostSuccessful', this.cb.post); - $.on(sc, 'click', this.toggleWatcher); - $.on(this.refreshButton, 'click', this.buttonFetchAll); - $.on(this.closeButton, 'click', this.toggleWatcher); - $.on(d, '4chanXInitFinished', this.ready); - switch (g.VIEW) { - case 'index': - $.on(d, 'IndexRefresh', this.cb.onIndexRefresh); - break; - case 'thread': - $.on(d, 'ThreadUpdate', this.cb.onThreadRefresh); - } - if (Conf['Fixed Thread Watcher']) { - $.addClass(doc, 'fixed-watcher'); - } - if (Conf['Toggleable Thread Watcher']) { - this.dialog.hidden = true; - Header.addShortcut(sc); - $.addClass(doc, 'toggleable-watcher'); - } - ThreadWatcher.fetchAuto(); - if (g.VIEW === 'index' && Conf['JSON Index'] && Conf['Menu'] && g.BOARD.ID !== 'f') { - Menu.menu.addEntry({ - el: $.el('a', { - href: 'javascript:;', - className: 'has-shortcut-text' - }, { - innerHTML: "Alt+click" - }), - order: 6, - open: function(arg) { - var thread; - thread = arg.thread; - if (Conf['Index Mode'] !== 'catalog') { - return false; - } - this.el.firstElementChild.textContent = ThreadWatcher.isWatched(thread) ? 'Unwatch' : 'Watch'; - if (this.cb) { - $.off(this.el, 'click', this.cb); - } - this.cb = function() { - $.event('CloseMenu'); - return ThreadWatcher.toggle(thread); - }; - $.on(this.el, 'click', this.cb); - return true; - } - }); - } - Post.callbacks.push({ - name: 'Thread Watcher', - cb: this.node - }); - return CatalogThread.callbacks.push({ - name: 'Thread Watcher', - cb: this.catalogNode - }); - }, - isWatched: function(thread) { - var ref; - return (ref = ThreadWatcher.db) != null ? ref.get({ - boardID: thread.board.ID, - threadID: thread.ID - }) : void 0; - }, - node: function() { - var toggler; - if (this.isReply) { - return; - } - if (this.isClone) { - toggler = $('.watch-thread-link', this.nodes.post); - } else { - toggler = $.el('a', { - href: 'javascript:;', - className: 'watch-thread-link' - }); - $.before($('input', this.nodes.post), toggler); - } - return $.on(toggler, 'click', ThreadWatcher.cb.toggle); - }, - catalogNode: function() { - if (ThreadWatcher.isWatched(this.thread)) { - $.addClass(this.nodes.root, 'watched'); - } - $.on(this.nodes.thumb.parentNode, 'click', (function(_this) { - return function(e) { - if (!(e.button === 0 && e.altKey)) { - return; - } - ThreadWatcher.toggle(_this.thread); - return e.preventDefault(); - }; - })(this)); - return $.on(this.nodes.thumb.parentNode, 'mousedown', function(e) { - if (e.button === 0 && e.altKey) { - return e.preventDefault(); - } - }); - }, - ready: function() { - $.off(d, '4chanXInitFinished', ThreadWatcher.ready); - if (!Main.isThisPageLegit()) { - return; - } - ThreadWatcher.refresh(); - $.add(d.body, ThreadWatcher.dialog); - if (!Conf['Auto Watch']) { - return; - } - return $.get('AutoWatch', 0, function(arg) { - var AutoWatch, thread; - AutoWatch = arg.AutoWatch; - if (!(thread = g.BOARD.threads[AutoWatch])) { - return; - } - ThreadWatcher.add(thread); - return $["delete"]('AutoWatch'); - }); - }, - toggleWatcher: function() { - $.toggleClass(ThreadWatcher.shortcut, 'disabled'); - return ThreadWatcher.dialog.hidden = !ThreadWatcher.dialog.hidden; - }, - cb: { - openAll: function() { - var a, k, len1, ref; - if ($.hasClass(this, 'disabled')) { - return; - } - ref = $$('a[title]', ThreadWatcher.list); - for (k = 0, len1 = ref.length; k < len1; k++) { - a = ref[k]; - $.open(a.href); - } - return $.event('CloseMenu'); - }, - pruneDeads: function() { - var boardID, data, k, len1, ref, ref1, threadID; - if ($.hasClass(this, 'disabled')) { - return; - } - ThreadWatcher.db.forceSync(); - ref = ThreadWatcher.getAll(); - for (k = 0, len1 = ref.length; k < len1; k++) { - ref1 = ref[k], boardID = ref1.boardID, threadID = ref1.threadID, data = ref1.data; - if (!data.isDead) { - continue; - } - delete ThreadWatcher.db.data.boards[boardID][threadID]; - ThreadWatcher.db.deleteIfEmpty({ - boardID: boardID - }); - } - ThreadWatcher.db.save(); - ThreadWatcher.refresh(); - return $.event('CloseMenu'); - }, - toggle: function() { - var thread; - thread = Get.postFromNode(this).thread; - Index.followedThreadID = thread.ID; - ThreadWatcher.toggle(thread); - return delete Index.followedThreadID; - }, - rm: function() { - var boardID, ref, threadID; - ref = this.parentNode.dataset.fullID.split('.'), boardID = ref[0], threadID = ref[1]; - return ThreadWatcher.rm(boardID, +threadID); - }, - post: function(e) { - var boardID, postID, ref, threadID; - ref = e.detail, boardID = ref.boardID, threadID = ref.threadID, postID = ref.postID; - if (postID === threadID) { - if (Conf['Auto Watch']) { - return $.set('AutoWatch', threadID); - } - } else if (Conf['Auto Watch Reply']) { - return ThreadWatcher.add(g.threads[boardID + '.' + threadID]); - } - }, - onIndexRefresh: function() { - var boardID, data, db, ref, threadID; - db = ThreadWatcher.db; - boardID = g.BOARD.ID; - db.forceSync(); - ref = db.data.boards[boardID]; - for (threadID in ref) { - data = ref[threadID]; - if (!(data != null ? data.isDead : void 0) && !(threadID in g.BOARD.threads)) { - if (Conf['Auto Prune'] || !(data && typeof data === 'object')) { - db["delete"]({ - boardID: boardID, - threadID: threadID - }); - } else { - if (ThreadWatcher.unreadEnabled && Conf['Show Unread Count']) { - ThreadWatcher.fetchStatus({ - boardID: boardID, - threadID: threadID, - data: data - }); - } - data.isDead = true; - db.set({ - boardID: boardID, - threadID: threadID, - val: data - }); - } - } - } - return ThreadWatcher.refresh(); - }, - onThreadRefresh: function(e) { - var thread; - thread = g.threads[e.detail.threadID]; - if (!(e.detail[404] && ThreadWatcher.db.get({ - boardID: thread.board.ID, - threadID: thread.ID - }))) { - return; - } - return ThreadWatcher.add(thread); - } - }, - requests: [], - fetched: 0, - clearRequests: function() { - ThreadWatcher.requests = []; - ThreadWatcher.fetched = 0; - ThreadWatcher.status.textContent = ''; - return $.rmClass(ThreadWatcher.refreshButton, 'fa-spin'); - }, - abort: function() { - var k, len1, ref, req; - ref = ThreadWatcher.requests; - for (k = 0, len1 = ref.length; k < len1; k++) { - req = ref[k]; - if (req.readyState !== 4) { - req.abort(); - } - } - return ThreadWatcher.clearRequests(); - }, - fetchAuto: function() { - var db, interval, now; - clearTimeout(ThreadWatcher.timeout); - if (!Conf['Auto Update Thread Watcher']) { - return; - } - db = ThreadWatcher.db; - interval = ThreadWatcher.unreadEnabled && Conf['Show Unread Count'] ? 5 * $.MINUTE : 2 * $.HOUR; - now = Date.now(); - if (now >= (db.data.lastChecked || 0) + interval) { - db.data.lastChecked = now; - ThreadWatcher.fetchAllStatus(); - db.save(); - } - return ThreadWatcher.timeout = setTimeout(ThreadWatcher.fetchAuto, interval); - }, - buttonFetchAll: function() { - if (ThreadWatcher.requests.length) { - return ThreadWatcher.abort(); - } else { - return ThreadWatcher.fetchAllStatus(); - } - }, - fetchAllStatus: function() { - var k, len1, ref, thread, threads; - ThreadWatcher.db.forceSync(); - ThreadWatcher.unreaddb.forceSync(); - if ((ref = QuoteYou.db) != null) { - ref.forceSync(); - } - if (!(threads = ThreadWatcher.getAll()).length) { - return; - } - for (k = 0, len1 = threads.length; k < len1; k++) { - thread = threads[k]; - ThreadWatcher.fetchStatus(thread); - } - }, - fetchStatus: function(thread, force) { - var boardID, data, req, threadID; - boardID = thread.boardID, threadID = thread.threadID, data = thread.data; - if (data.isDead && !force) { - return; - } - if (ThreadWatcher.requests.length === 0) { - ThreadWatcher.status.textContent = '...'; - $.addClass(ThreadWatcher.refreshButton, 'fa-spin'); - } - req = $.ajax("//a.4cdn.org/" + boardID + "/thread/" + threadID + ".json", { - onloadend: function() { - return ThreadWatcher.parseStatus.call(this, thread); - }, - timeout: $.MINUTE - }, { - whenModified: force ? false : 'ThreadWatcher' - }); - return ThreadWatcher.requests.push(req); - }, - parseStatus: function(arg) { - var boardID, data, isDead, k, lastReadPost, len1, match, postObj, quotesYou, quotingYou, ref, ref1, regexp, threadID, unread; - boardID = arg.boardID, threadID = arg.threadID, data = arg.data; - ThreadWatcher.fetched++; - if (ThreadWatcher.fetched === ThreadWatcher.requests.length) { - ThreadWatcher.clearRequests(); - } else { - ThreadWatcher.status.textContent = (Math.round(ThreadWatcher.fetched / ThreadWatcher.requests.length * 100)) + "%"; - } - if (this.status === 200 && this.response) { - isDead = !!this.response.posts[0].archived; - if (isDead && Conf['Auto Prune']) { - ThreadWatcher.db["delete"]({ - boardID: boardID, - threadID: threadID - }); - ThreadWatcher.refresh(); - return; - } - lastReadPost = ThreadWatcher.unreaddb.get({ - boardID: boardID, - threadID: threadID, - defaultValue: 0 - }); - unread = quotingYou = 0; - ref = this.response.posts; - for (k = 0, len1 = ref.length; k < len1; k++) { - postObj = ref[k]; - if (!(postObj.no > lastReadPost)) { - continue; - } - if ((ref1 = QuoteYou.db) != null ? ref1.get({ - boardID: boardID, - threadID: threadID, - postID: postObj.no - }) : void 0) { - continue; - } - unread++; - if (!(QuoteYou.db && postObj.com)) { - continue; - } - quotesYou = false; - regexp = /]*\bhref="(?:\/([^\/]+)\/thread\/)?(\d+)?(?:#p(\d+))?"/g; - while (match = regexp.exec(postObj.com)) { - if (QuoteYou.db.get({ - boardID: match[1] || boardID, - threadID: match[2] || threadID, - postID: match[3] || match[2] || threadID - })) { - quotesYou = true; - break; - } - } - if (quotesYou && !Filter.isHidden(Build.parseJSON(postObj, boardID))) { - quotingYou++; - } - } - if (isDead !== data.isDead || unread !== data.unread || quotingYou !== data.quotingYou) { - data.isDead = isDead; - data.unread = unread; - data.quotingYou = quotingYou; - ThreadWatcher.db.set({ - boardID: boardID, - threadID: threadID, - val: data - }); - return ThreadWatcher.refresh(); - } - } else if (this.status === 404) { - if (Conf['Auto Prune']) { - ThreadWatcher.db["delete"]({ - boardID: boardID, - threadID: threadID - }); - } else { - data.isDead = true; - delete data.unread; - delete data.quotingYou; - ThreadWatcher.db.set({ - boardID: boardID, - threadID: threadID, - val: data - }); - } - return ThreadWatcher.refresh(); - } - }, - getAll: function() { - var all, boardID, data, ref, threadID, threads; - all = []; - ref = ThreadWatcher.db.data.boards; - for (boardID in ref) { - threads = ref[boardID]; - if (Conf['Current Board'] && boardID !== g.BOARD.ID) { - continue; - } - for (threadID in threads) { - data = threads[threadID]; - if (data && typeof data === 'object') { - all.push({ - boardID: boardID, - threadID: threadID, - data: data - }); - } - } - } - return all; - }, - makeLine: function(boardID, threadID, data) { - var count, div, fullID, link, title, x; - x = $.el('a', { - className: 'fa fa-times', - href: 'javascript:;' - }); - $.on(x, 'click', ThreadWatcher.cb.rm); - link = $.el('a', { - href: "/" + boardID + "/thread/" + threadID, - title: data.excerpt, - className: 'watcher-link' - }); - if (ThreadWatcher.unreadEnabled && Conf['Show Unread Count'] && (data.unread != null)) { - count = $.el('span', { - textContent: "(" + data.unread + ")", - className: 'watcher-unread' - }); - $.add(link, count); - } - title = $.el('span', { - textContent: data.excerpt, - className: 'watcher-title' - }); - $.add(link, title); - div = $.el('div'); - fullID = boardID + "." + threadID; - div.dataset.fullID = fullID; - if (g.VIEW === 'thread' && fullID === (g.BOARD + "." + g.THREADID)) { - $.addClass(div, 'current'); - } - if (data.isDead) { - $.addClass(div, 'dead-thread'); - } - if (ThreadWatcher.unreadEnabled && Conf['Show Unread Count']) { - if (data.unread === 0) { - $.addClass(div, 'replies-read'); - } - if (data.unread) { - $.addClass(div, 'replies-unread'); - } - if (data.quotingYou) { - $.addClass(div, 'replies-quoting-you'); - } - } - $.add(div, [x, $.tn(' '), link]); - return div; - }, - refresh: function() { - var boardID, data, k, len1, len2, list, nodes, q, ref, ref1, ref2, refresher, threadID; - nodes = []; - ref = ThreadWatcher.getAll(); - for (k = 0, len1 = ref.length; k < len1; k++) { - ref1 = ref[k], boardID = ref1.boardID, threadID = ref1.threadID, data = ref1.data; - nodes.push(ThreadWatcher.makeLine(boardID, threadID, data)); - } - list = ThreadWatcher.list; - $.rmAll(list); - $.add(list, nodes); - g.threads.forEach(function(thread) { - var helper, len2, post, q, ref2, toggler; - helper = ThreadWatcher.isWatched(thread) ? ['addClass', 'Unwatch'] : ['rmClass', 'Watch']; - if (thread.OP) { - ref2 = [thread.OP].concat(slice.call(thread.OP.clones)); - for (q = 0, len2 = ref2.length; q < len2; q++) { - post = ref2[q]; - toggler = $('.watch-thread-link', post.nodes.post); - $[helper[0]](toggler, 'watched'); - toggler.title = helper[1] + " Thread"; - } - } - if (thread.catalogView) { - return $[helper[0]](thread.catalogView.nodes.root, 'watched'); - } - }); - ThreadWatcher.refreshIcon(); - ref2 = ThreadWatcher.menu.refreshers; - for (q = 0, len2 = ref2.length; q < len2; q++) { - refresher = ref2[q]; - refresher(); - } - if (Index.nodes && Conf['Pin Watched Threads']) { - Index.sort(); - return Index.buildIndex(); - } - }, - refreshIcon: function() { - var className, k, len1, ref; - ref = ['replies-unread', 'replies-quoting-you']; - for (k = 0, len1 = ref.length; k < len1; k++) { - className = ref[k]; - ThreadWatcher.shortcut.classList.toggle(className, !!$("." + className, ThreadWatcher.dialog)); - } - }, - update: function(boardID, threadID, newData) { - var data, key, line, n, newLine, ref, val; - if (!(data = (ref = ThreadWatcher.db) != null ? ref.get({ - boardID: boardID, - threadID: threadID - }) : void 0)) { - return; - } - if (newData.isDead && Conf['Auto Prune']) { - ThreadWatcher.db["delete"]({ - boardID: boardID, - threadID: threadID - }); - ThreadWatcher.refresh(); - return; - } - n = 0; - for (key in newData) { - val = newData[key]; - if (data[key] !== val) { - n++; - } - } - if (!n) { - return; - } - ThreadWatcher.db.forceSync(); - if (!(data = ThreadWatcher.db.get({ - boardID: boardID, - threadID: threadID - }))) { - return; - } - $.extend(data, newData); - ThreadWatcher.db.set({ - boardID: boardID, - threadID: threadID, - val: data - }); - if (line = $("#watched-threads > [data-full-i-d='" + boardID + "." + threadID + "']", ThreadWatcher.dialog)) { - newLine = ThreadWatcher.makeLine(boardID, threadID, data); - $.replace(line, newLine); - return ThreadWatcher.refreshIcon(); - } else { - return ThreadWatcher.refresh(); - } - }, - set404: function(boardID, threadID, cb) { - var data, ref; - if (!(data = (ref = ThreadWatcher.db) != null ? ref.get({ - boardID: boardID, - threadID: threadID - }) : void 0)) { - return cb(); - } - if (Conf['Auto Prune']) { - ThreadWatcher.db["delete"]({ - boardID: boardID, - threadID: threadID - }); - return cb(); - } - if (data.isDead && !((data.unread != null) || (data.quotingYou != null))) { - return cb(); - } - data.isDead = true; - delete data.unread; - delete data.quotingYou; - return ThreadWatcher.db.set({ - boardID: boardID, - threadID: threadID, - val: data - }, cb); - }, - toggle: function(thread) { - var boardID, threadID; - boardID = thread.board.ID; - threadID = thread.ID; - if (ThreadWatcher.db.get({ - boardID: boardID, - threadID: threadID - })) { - return ThreadWatcher.rm(boardID, threadID); - } else { - return ThreadWatcher.add(thread); - } - }, - add: function(thread) { - var boardID, data, threadID; - data = {}; - boardID = thread.board.ID; - threadID = thread.ID; - if (thread.isDead) { - if (Conf['Auto Prune'] && ThreadWatcher.db.get({ - boardID: boardID, - threadID: threadID - })) { - ThreadWatcher.rm(boardID, threadID); - return; - } - data.isDead = true; - } - data.excerpt = Get.threadExcerpt(thread); - ThreadWatcher.db.set({ - boardID: boardID, - threadID: threadID, - val: data - }); - ThreadWatcher.refresh(); - if (ThreadWatcher.unreadEnabled && Conf['Show Unread Count']) { - return ThreadWatcher.fetchStatus({ - boardID: boardID, - threadID: threadID, - data: data - }, true); - } - }, - rm: function(boardID, threadID) { - ThreadWatcher.db["delete"]({ - boardID: boardID, - threadID: threadID - }); - return ThreadWatcher.refresh(); - }, - menu: { - refreshers: [], - init: function() { - var menu; - if (!Conf['Thread Watcher']) { - return; - } - menu = this.menu = new UI.Menu('thread watcher'); - $.on($('.menu-button', ThreadWatcher.dialog), 'click', function(e) { - return menu.toggle(e, this, ThreadWatcher); - }); - this.addHeaderMenuEntry(); - return this.addMenuEntries(); - }, - addHeaderMenuEntry: function() { - var entryEl; - if (g.VIEW !== 'thread') { - return; - } - entryEl = $.el('a', { - href: 'javascript:;' - }); - Header.menu.addEntry({ - el: entryEl, - order: 60 - }); - $.on(entryEl, 'click', function() { - return ThreadWatcher.toggle(g.threads[g.BOARD + "." + g.THREADID]); - }); - return this.refreshers.push(function() { - var addClass, ref, rmClass, text; - ref = $('.current', ThreadWatcher.list) ? ['unwatch-thread', 'watch-thread', 'Unwatch thread'] : ['watch-thread', 'unwatch-thread', 'Watch thread'], addClass = ref[0], rmClass = ref[1], text = ref[2]; - $.addClass(entryEl, addClass); - $.rmClass(entryEl, rmClass); - return entryEl.textContent = text; - }); - }, - addMenuEntries: function() { - var cb, conf, entries, entry, k, len1, name, ref, ref1, refresh, subEntries; - entries = []; - entries.push({ - cb: ThreadWatcher.cb.openAll, - entry: { - el: $.el('a', { - textContent: 'Open all threads' - }) - }, - refresh: function() { - return (ThreadWatcher.list.firstElementChild ? $.rmClass : $.addClass)(this.el, 'disabled'); - } - }); - entries.push({ - cb: ThreadWatcher.cb.pruneDeads, - entry: { - el: $.el('a', { - textContent: 'Prune dead threads' - }) - }, - refresh: function() { - return ($('.dead-thread', ThreadWatcher.list) ? $.rmClass : $.addClass)(this.el, 'disabled'); - } - }); - subEntries = []; - ref = Config.threadWatcher; - for (name in ref) { - conf = ref[name]; - subEntries.push(this.createSubEntry(name, conf[1])); - } - entries.push({ - entry: { - el: $.el('span', { - textContent: 'Settings' - }), - subEntries: subEntries - } - }); - for (k = 0, len1 = entries.length; k < len1; k++) { - ref1 = entries[k], entry = ref1.entry, cb = ref1.cb, refresh = ref1.refresh; - if (entry.el.nodeName === 'A') { - entry.el.href = 'javascript:;'; - } - if (cb) { - $.on(entry.el, 'click', cb); - } - if (refresh) { - this.refreshers.push(refresh.bind(entry)); - } - this.menu.addEntry(entry); - } - }, - createSubEntry: function(name, desc) { - var entry, input; - entry = { - type: 'thread watcher', - el: UI.checkbox(name, name.replace(' Thread Watcher', '')) - }; - entry.el.title = desc; - input = entry.el.firstElementChild; - if (name === 'Show Unread Count' && !ThreadWatcher.unreadEnabled) { - input.disabled = true; - $.addClass(entry.el, 'disabled'); - entry.el.title += '\n[Remember Last Read Post is disabled.]'; - } - $.on(input, 'change', $.cb.checked); - if (name === 'Current Board' || name === 'Show Unread Count') { - $.on(input, 'change', ThreadWatcher.refresh); - } - if (name === 'Show Unread Count' || name === 'Auto Update Thread Watcher') { - $.on(input, 'change', ThreadWatcher.fetchAuto); - } - return entry; - } - } - }; - - Unread = { - init: function() { - if (!(g.VIEW === 'thread' && (Conf['Unread Count'] || Conf['Unread Favicon'] || Conf['Unread Line'] || Conf['Remember Last Read Post'] || Conf['Desktop Notifications'] || Conf['Quote Threading']))) { - return; - } - if (Conf['Remember Last Read Post']) { - $.sync('Remember Last Read Post', function(enabled) { - return Conf['Remember Last Read Post'] = enabled; - }); - this.db = new DataBoard('lastReadPosts', this.sync); - } - this.hr = $.el('hr', { - id: 'unread-line' - }); - this.posts = new Set(); - this.postsQuotingYou = new Set(); - this.order = new RandomAccessList(); - this.position = null; - Thread.callbacks.push({ - name: 'Unread', - cb: this.node - }); - return Post.callbacks.push({ - name: 'Unread', - cb: this.addPost - }); - }, - node: function() { - var ID, k, len1, ref, ref1; - Unread.thread = this; - Unread.title = d.title; - Unread.lastReadPost = ((ref = Unread.db) != null ? ref.get({ - boardID: this.board.ID, - threadID: this.ID - }) : void 0) || 0; - Unread.readCount = 0; - ref1 = this.posts.keys; - for (k = 0, len1 = ref1.length; k < len1; k++) { - ID = ref1[k]; - if (+ID <= Unread.lastReadPost) { - Unread.readCount++; - } - } - $.one(d, '4chanXInitFinished', Unread.ready); - return $.on(d, 'ThreadUpdate', Unread.onUpdate); - }, - ready: function() { - if (Conf['Remember Last Read Post'] && Conf['Scroll to Last Read Post']) { - Unread.scroll(); - } - Unread.setLine(true); - Unread.read(); - Unread.update(); - $.on(d, 'scroll visibilitychange', Unread.read); - if (Conf['Unread Line']) { - return $.on(d, 'visibilitychange', Unread.setLine); - } - }, - positionPrev: function() { - if (Unread.position) { - return Unread.position.prev; - } else { - return Unread.order.last; - } - }, - scroll: function() { - var hash, position, ref, root; - if ((hash = location.hash.match(/\d+/)) && hash[0] in Unread.thread.posts) { - return; - } - ReplyPruning.showIfHidden((ref = Unread.position) != null ? ref.data.nodes.root.id : void 0); - position = Unread.positionPrev(); - while (position) { - root = position.data.nodes.root; - if (!root.getBoundingClientRect().height) { - position = position.prev; - } else { - Header.scrollToIfNeeded(root, true); - break; - } - } - }, - sync: function() { - var ID, i, k, lastReadPost, postIDs, ref, ref1; - if (Unread.lastReadPost == null) { - return; - } - lastReadPost = Unread.db.get({ - boardID: Unread.thread.board.ID, - threadID: Unread.thread.ID, - defaultValue: 0 - }); - if (!(Unread.lastReadPost < lastReadPost)) { - return; - } - Unread.lastReadPost = lastReadPost; - postIDs = Unread.thread.posts.keys; - for (i = k = ref = Unread.readCount, ref1 = postIDs.length; k < ref1; i = k += 1) { - ID = +postIDs[i]; - if (!Unread.thread.posts[ID].isFetchedQuote) { - if (ID > Unread.lastReadPost) { - break; - } - Unread.posts["delete"](ID); - Unread.postsQuotingYou["delete"](ID); - } - Unread.readCount++; - } - Unread.updatePosition(); - Unread.setLine(); - return Unread.update(); - }, - addPost: function() { - var ref; - if (this.isFetchedQuote || this.isClone) { - return; - } - Unread.order.push(this); - if (this.ID <= Unread.lastReadPost || this.isHidden || ((ref = QuoteYou.db) != null ? ref.get({ - boardID: this.board.ID, - threadID: this.thread.ID, - postID: this.ID - }) : void 0)) { - return; - } - Unread.posts.add(this.ID); - Unread.addPostQuotingYou(this); - return Unread.position != null ? Unread.position : Unread.position = Unread.order[this.ID]; - }, - addPostQuotingYou: function(post) { - var k, len1, quotelink, ref, ref1; - ref = post.nodes.quotelinks; - for (k = 0, len1 = ref.length; k < len1; k++) { - quotelink = ref[k]; - if (!((ref1 = QuoteYou.db) != null ? ref1.get(Get.postDataFromLink(quotelink)) : void 0)) { - continue; - } - Unread.postsQuotingYou.add(post.ID); - Unread.openNotification(post); - return; - } - }, - openNotification: function(post) { - var notif; - if (!Header.areNotificationsEnabled) { - return; - } - try { - notif = new Notification(post.info.nameBlock + " replied to you", { - body: post.info.commentDisplay, - icon: Favicon.logo - }); - notif.onclick = function() { - Header.scrollToIfNeeded(post.nodes.root, true); - return $.global(function() { - return window.focus(); - }); - }; - return notif.onshow = function() { - return setTimeout(function() { - return notif.close(); - }, 7 * $.SECOND); - }; - } catch (_error) {} - }, - onUpdate: function(e) { - if (!e.detail[404]) { - Unread.setLine(); - Unread.read(); - } - return Unread.update(); - }, - readSinglePost: function(post) { - var ID; - ID = post.ID; - if (!Unread.posts.has(ID)) { - return; - } - Unread.posts["delete"](ID); - Unread.postsQuotingYou["delete"](ID); - Unread.updatePosition(); - Unread.saveLastReadPost(); - return Unread.update(); - }, - read: $.debounce(100, function(e) { - var ID, count, data, ref, ref1, root; - if (!Unread.posts.size && Unread.readCount !== Unread.thread.posts.keys.length) { - Unread.saveLastReadPost(); - } - if (d.hidden || !Unread.posts.size) { - return; - } - count = 0; - while (Unread.position) { - ref = Unread.position, ID = ref.ID, data = ref.data; - root = data.nodes.root; - if (!(!root.getBoundingClientRect().height || Header.getBottomOf(root) > -1)) { - break; - } - count++; - Unread.posts["delete"](ID); - Unread.postsQuotingYou["delete"](ID); - if ((ref1 = QuoteYou.db) != null ? ref1.get({ - boardID: data.board.ID, - threadID: data.thread.ID, - postID: ID - }) : void 0) { - QuoteYou.lastRead = root; - } - Unread.position = Unread.position.next; - } - if (!count) { - return; - } - Unread.updatePosition(); - Unread.saveLastReadPost(); - if (e) { - return Unread.update(); - } - }), - updatePosition: function() { - while (Unread.position && !Unread.posts.has(Unread.position.ID)) { - Unread.position = Unread.position.next; - } - }, - saveLastReadPost: $.debounce(2 * $.SECOND, function() { - var ID, i, k, postIDs, ref, ref1; - $.forceSync('Remember Last Read Post'); - if (!(Conf['Remember Last Read Post'] && Unread.db)) { - return; - } - postIDs = Unread.thread.posts.keys; - for (i = k = ref = Unread.readCount, ref1 = postIDs.length; k < ref1; i = k += 1) { - ID = +postIDs[i]; - if (!Unread.thread.posts[ID].isFetchedQuote) { - if (Unread.posts.has(ID)) { - break; - } - Unread.lastReadPost = ID; - } - Unread.readCount++; - } - if (Unread.thread.isDead && !Unread.thread.isArchived) { - return; - } - Unread.db.forceSync(); - return Unread.db.set({ - boardID: Unread.thread.board.ID, - threadID: Unread.thread.ID, - val: Unread.lastReadPost - }); - }), - setLine: function(force) { - if (!Conf['Unread Line']) { - return; - } - if (Unread.hr.hidden || d.hidden || (force === true)) { - if ((Unread.linePosition = Unread.positionPrev())) { - $.after(Unread.linePosition.data.nodes.root, Unread.hr); - } else { - $.rm(Unread.hr); - } - } - return Unread.hr.hidden = Unread.linePosition === Unread.order.last; - }, - update: function() { - var count, countQuotingYou, isDead, titleCount, titleDead, titleQuotingYou; - count = Unread.posts.size; - countQuotingYou = Unread.postsQuotingYou.size; - if (Conf['Unread Count']) { - titleQuotingYou = Conf['Quoted Title'] && countQuotingYou ? '(!) ' : ''; - titleCount = count || !Conf['Hide Unread Count at (0)'] ? "(" + count + ") " : ''; - titleDead = Unread.thread.isDead ? Unread.title.replace('-', (Unread.thread.isArchived ? '- Archived -' : '- 404 -')) : Unread.title; - d.title = "" + titleQuotingYou + titleCount + titleDead; - } - $.forceSync('Remember Last Read Post'); - if (Conf['Remember Last Read Post'] && (!Unread.thread.isDead || Unread.thread.isArchived)) { - ThreadWatcher.update(Unread.thread.board.ID, Unread.thread.ID, { - isDead: Unread.thread.isDead, - unread: count, - quotingYou: countQuotingYou - }); - } - if (Conf['Unread Favicon']) { - isDead = Unread.thread.isDead; - Favicon.el.href = countQuotingYou ? Favicon[isDead ? 'unreadDeadY' : 'unreadY'] : count ? Favicon[isDead ? 'unreadDead' : 'unread'] : Favicon[isDead ? 'dead' : 'default']; - return $.add(d.head, Favicon.el); - } - } - }; - - Redirect = { - init: function() { - var archive, archives, boardID, boards, data, files, id, k, len1, len2, name, o, q, record, ref, ref1, software, type, uid, withCredentials; - o = { - thread: {}, - post: {}, - file: {}, - report: {} - }; - archives = {}; - ref = Redirect.archives; - for (k = 0, len1 = ref.length; k < len1; k++) { - data = ref[k]; - uid = data.uid, name = data.name, boards = data.boards, files = data.files, software = data.software, withCredentials = data.withCredentials; - archives[JSON.stringify(uid != null ? uid : name)] = data; - for (q = 0, len2 = boards.length; q < len2; q++) { - boardID = boards[q]; - if (!withCredentials) { - if (!(boardID in o.thread)) { - o.thread[boardID] = data; - } - if (!(boardID in o.post || software !== 'foolfuuka')) { - o.post[boardID] = data; - } - if (!(boardID in o.file || indexOf.call(files, boardID) < 0)) { - o.file[boardID] = data; - } - } - if (name === 'fgts') { - o.report[boardID] = data; - } - } - } - ref1 = Conf['selectedArchives']; - for (boardID in ref1) { - record = ref1[boardID]; - for (type in record) { - id = record[type]; - if (id === null) { - delete o[type][boardID]; - } else if (archive = archives[JSON.stringify(id)]) { - boards = type === 'file' ? archive.files : archive.boards; - if (indexOf.call(boards, boardID) >= 0) { - o[type][boardID] = archive; - } - } - } - } - return Redirect.data = o; - }, - archives: [{"uid":3,"name":"4plebs","domain":"archive.4plebs.org","http":true,"https":true,"software":"foolfuuka","boards":["adv","f","hr","o","pol","s4s","sp","tg","trv","tv","x"],"files":["adv","f","hr","o","pol","s4s","sp","tg","trv","tv","x"]},{"uid":4,"name":"Nyafuu Archive","domain":"archive.nyafuu.org","http":true,"https":true,"software":"foolfuuka","boards":["c","e","news","w","wg","wsr"],"files":["c","e","news","w","wg","wsr"]},{"uid":8,"name":"Rebecca Black Tech","domain":"rbt.asia","http":false,"https":true,"software":"fuuka","boards":["cgl","g","mu"],"files":["cgl","g","mu"]},{"uid":10,"name":"warosu","domain":"warosu.org","http":false,"https":true,"software":"fuuka","boards":["3","biz","cgl","ck","diy","fa","g","ic","jp","lit","sci","tg","vr"],"files":["3","biz","cgl","ck","diy","fa","g","ic","jp","lit","sci","tg","vr"]},{"uid":15,"name":"fgts","domain":"fgts.jp","http":true,"https":true,"software":"foolfuuka","boards":["asp","b","cm","gd","h","hc","hm","n","out","p","po","qa","r","s","soc","toy","vp","y"],"files":["asp","b","cm","gd","h","hc","hm","n","out","p","po","qa","r","s","soc","toy","vp","y"]},{"uid":23,"name":"Desustorage","domain":"desustorage.org","http":true,"https":true,"software":"foolfuuka","boards":["a","aco","an","c","co","d","fit","gif","his","int","k","m","mlp","qa","r9k","tg","trash","vr","wsg"],"files":["a","aco","an","c","co","d","fit","gif","his","int","k","m","mlp","qa","r9k","tg","trash","vr","wsg"]},{"uid":24,"name":"fireden.net","domain":"boards.fireden.net","http":false,"https":true,"software":"foolfuuka","boards":["a","cm","ic","sci","tg","v","vg","y"],"files":["a","cm","ic","sci","tg","v","vg","y"]},{"uid":25,"name":"arch.b4k.co","domain":"arch.b4k.co","http":true,"https":true,"software":"foolfuuka","boards":["g","jp","mlp","v"],"files":[]},{"uid":5,"name":"Love is Over","domain":"deploy.loveisover.me","http":true,"https":false,"software":"foolfuuka","boards":["c","d","e","i","lgbt","t","u"],"files":["c","d","e","i","lgbt","t","u"],"search":[]},{"uid":28,"name":"bstats","domain":"archive.b-stats.org","http":true,"https":true,"software":"foolfuuka","boards":["f","cm","hm","lgbt","news","trash","y"],"files":[]}], - to: function(dest, data) { - var archive; - archive = (dest === 'search' || dest === 'board' ? Redirect.data.thread : Redirect.data[dest])[data.boardID]; - if (!archive) { - return ''; - } - return Redirect[dest](archive, data); - }, - protocol: function(archive) { - var protocol; - protocol = location.protocol; - if (!archive[protocol.slice(0, -1)]) { - protocol = protocol === 'https:' ? 'http:' : 'https:'; - } - return protocol + "//"; - }, - thread: function(archive, arg) { - var boardID, path, postID, threadID; - boardID = arg.boardID, threadID = arg.threadID, postID = arg.postID; - path = threadID ? boardID + "/thread/" + threadID : boardID + "/post/" + postID; - if (archive.software === 'foolfuuka') { - path += '/'; - } - if (threadID && postID) { - path += archive.software === 'foolfuuka' ? "#" + postID : "#p" + postID; - } - return "" + (Redirect.protocol(archive)) + archive.domain + "/" + path; - }, - post: function(archive, arg) { - var boardID, postID, protocol, url; - boardID = arg.boardID, postID = arg.postID; - protocol = Redirect.protocol(archive); - url = "" + protocol + archive.domain + "/_/api/chan/post/?board=" + boardID + "&num=" + postID; - if (!Redirect.securityCheck(url)) { - return ''; - } - return url; - }, - file: function(archive, arg) { - var boardID, filename; - boardID = arg.boardID, filename = arg.filename; - return "" + (Redirect.protocol(archive)) + archive.domain + "/" + boardID + "/full_image/" + filename; - }, - board: function(archive, arg) { - var boardID; - boardID = arg.boardID; - return "" + (Redirect.protocol(archive)) + archive.domain + "/" + boardID + "/"; - }, - search: function(archive, arg) { - var boardID, path, type, value; - boardID = arg.boardID, type = arg.type, value = arg.value; - type = type === 'name' ? 'username' : type === 'MD5' ? 'image' : type; - if (type === 'capcode') { - value = { - 'Developer': 'dev' - }[value] || value.toLowerCase(); - } else if (type === 'image') { - value = value.replace(/[+\/=]/g, function(c) { - return { - '+': '-', - '/': '_', - '=': '' - }[c]; - }); - } - value = encodeURIComponent(value); - path = archive.software === 'foolfuuka' ? boardID + "/search/" + type + "/" + value + "/" : type === 'image' ? boardID + "/image/" + value : boardID + "/?task=search2&search_" + type + "=" + value; - return "" + (Redirect.protocol(archive)) + archive.domain + "/" + path; - }, - report: function(archive, arg) { - var boardID, postID; - boardID = arg.boardID, postID = arg.postID; - return "https://so.fgts.jp/report/?board=" + boardID + "&no=" + postID; - }, - securityCheck: function(url) { - return /^https:\/\//.test(url) || location.protocol === 'http:' || Conf['Exempt Archives from Encryption']; - }, - navigate: function(dest, data, alternative) { - var url; - if (!Redirect.data) { - Redirect.init(); - } - url = Redirect.to(dest, data); - if (url && (Redirect.securityCheck(url) || confirm("Redirect to " + url + "?\n\nYour connection will not be encrypted."))) { - return location.replace(url); - } else if (alternative) { - return location.replace(alternative); - } - } - }; - - PSAHiding = { - init: function() { - if (!Conf['Announcement Hiding']) { - return; - } - $.addClass(doc, 'hide-announcement'); - return $.one(d, '4chanXInitFinished', this.setup); - }, - setup: function() { - var btn, entry, hr, psa, ref; - if (!(psa = PSAHiding.psa = $.id('globalMessage'))) { - $.rmClass(doc, 'hide-announcement'); - return; - } - if ((hr = (ref = $.id('globalToggle')) != null ? ref.previousElementSibling : void 0) && hr.nodeName === 'HR') { - PSAHiding.hr = hr; - } - entry = { - el: $.el('a', { - textContent: 'Show announcement', - className: 'show-announcement', - href: 'javascript:;' - }), - order: 50, - open: function() { - return PSAHiding.hidden; - } - }; - Header.menu.addEntry(entry); - $.on(entry.el, 'click', PSAHiding.toggle); - PSAHiding.btn = btn = $.el('span', { - title: 'Mark announcement as read and hide.', - className: 'hide-announcement' - }); - $.extend(btn, { - innerHTML: "[Dismiss]" - }); - $.on(btn, 'click', PSAHiding.toggle); - $.get('hiddenPSA', 0, function(arg) { - var hiddenPSA; - hiddenPSA = arg.hiddenPSA; - PSAHiding.sync(hiddenPSA); - $.add(psa, btn); - return $.rmClass(doc, 'hide-announcement'); - }); - return $.sync('hiddenPSA', PSAHiding.sync); - }, - toggle: function() { - var UTC; - if ($.hasClass(this, 'hide-announcement')) { - UTC = +$.id('globalMessage').dataset.utc; - $.set('hiddenPSA', UTC); - } else { - $.event('CloseMenu'); - $["delete"]('hiddenPSA'); - } - return PSAHiding.sync(UTC); - }, - sync: function(UTC) { - var psa, ref; - psa = PSAHiding.psa; - PSAHiding.hidden = PSAHiding.btn.hidden = (UTC != null) && UTC >= +psa.dataset.utc; - if (PSAHiding.hidden) { - $.rm(psa); - } else { - $.after($.id('globalToggle'), psa); - } - if ((ref = PSAHiding.hr) != null) { - ref.hidden = PSAHiding.hidden; - } - } - }; - - AntiAutoplay = { - init: function() { - var audio, k, len1, ref; - if (!Conf['Disable Autoplaying Sounds']) { - return; - } - $.addClass(doc, 'anti-autoplay'); - ref = $$('audio[autoplay]', doc); - for (k = 0, len1 = ref.length; k < len1; k++) { - audio = ref[k]; - this.stop(audio); - } - window.addEventListener('loadstart', ((function(_this) { - return function(e) { - return _this.stop(e.target); - }; - })(this)), true); - Post.callbacks.push({ - name: 'Disable Autoplaying Sounds', - cb: this.node - }); - CatalogThread.callbacks.push({ - name: 'Disable Autoplaying Sounds', - cb: this.node - }); - return $.ready((function(_this) { - return function() { - return _this.process(d.body); - }; - })(this)); - }, - stop: function(audio) { - if (!audio.autoplay) { - return; - } - audio.pause(); - audio.autoplay = false; - if (audio.controls) { - return; - } - audio.controls = true; - return $.addClass(audio, 'controls-added'); - }, - node: function() { - return AntiAutoplay.process(this.nodes.root); - }, - process: function(root) { - var iframe, k, len1, len2, object, q, ref, ref1; - ref = $$('iframe[src*="youtube"][src*="autoplay=1"]', root); - for (k = 0, len1 = ref.length; k < len1; k++) { - iframe = ref[k]; - iframe.src = iframe.src.replace(/\?autoplay=1&?/, '?').replace('&autoplay=1', ''); - $.addClass(iframe, 'autoplay-removed'); - } - ref1 = $$('object[data*="youtube"][data*="autoplay=1"]', root); - for (q = 0, len2 = ref1.length; q < len2; q++) { - object = ref1[q]; - object.data = object.data.replace(/\?autoplay=1&?/, '?').replace('&autoplay=1', ''); - $.addClass(object, 'autoplay-removed'); - } - } - }; - - Banner = { - banners: ["0.jpg","1.jpg","2.jpg","4.jpg","6.jpg","7.jpg","8.jpg","9.jpg","10.jpg","11.jpg","12.jpg","13.jpg","14.jpg","16.jpg","17.jpg","18.jpg","19.jpg","20.jpg","21.jpg","22.jpg","24.jpg","25.jpg","26.jpg","28.jpg","29.jpg","33.jpg","38.jpg","39.jpg","43.jpg","44.jpg","45.jpg","46.jpg","47.jpg","52.jpg","54.jpg","57.jpg","59.jpg","60.jpg","61.jpg","64.jpg","66.jpg","67.jpg","69.jpg","71.jpg","72.jpg","76.jpg","77.jpg","81.jpg","82.jpg","83.jpg","84.jpg","88.jpg","90.jpg","91.jpg","96.jpg","98.jpg","99.jpg","100.jpg","104.jpg","106.jpg","116.jpg","119.jpg","137.jpg","140.jpg","148.jpg","149.jpg","150.jpg","154.jpg","156.jpg","157.jpg","158.jpg","159.jpg","161.jpg","162.jpg","164.jpg","165.jpg","166.jpg","167.jpg","168.jpg","169.jpg","170.jpg","171.jpg","172.jpg","173.jpg","174.jpg","175.jpg","176.jpg","178.jpg","179.jpg","180.jpg","181.jpg","182.jpg","183.jpg","186.jpg","189.jpg","190.jpg","192.jpg","193.jpg","194.jpg","197.jpg","198.jpg","200.jpg","201.jpg","202.jpg","203.jpg","205.jpg","206.jpg","207.jpg","208.jpg","210.jpg","213.jpg","214.jpg","215.jpg","216.jpg","218.jpg","219.jpg","220.jpg","221.jpg","222.jpg","223.jpg","224.jpg","227.jpg","0.png","1.png","2.png","3.png","5.png","6.png","9.png","10.png","11.png","12.png","14.png","16.png","19.png","20.png","21.png","22.png","23.png","24.png","26.png","27.png","28.png","29.png","30.png","31.png","32.png","33.png","34.png","37.png","39.png","40.png","41.png","42.png","43.png","44.png","45.png","48.png","49.png","50.png","51.png","52.png","53.png","57.png","58.png","59.png","64.png","66.png","67.png","68.png","69.png","70.png","71.png","72.png","76.png","78.png","79.png","81.png","82.png","85.png","86.png","87.png","89.png","95.png","98.png","100.png","101.png","102.png","105.png","106.png","107.png","109.png","110.png","111.png","112.png","113.png","114.png","115.png","116.png","118.png","119.png","120.png","121.png","122.png","123.png","126.png","128.png","130.png","134.png","136.png","138.png","139.png","140.png","142.png","145.png","146.png","149.png","150.png","151.png","152.png","153.png","154.png","155.png","156.png","157.png","158.png","159.png","160.png","163.png","164.png","165.png","166.png","167.png","168.png","169.png","170.png","171.png","172.png","173.png","174.png","178.png","179.png","180.png","181.png","182.png","184.png","186.png","188.png","190.png","192.png","193.png","194.png","195.png","196.png","197.png","198.png","200.png","202.png","203.png","205.png","206.png","207.png","209.png","212.png","213.png","214.png","216.png","217.png","218.png","219.png","220.png","221.png","222.png","223.png","224.png","225.png","226.png","229.png","231.png","232.png","233.png","234.png","235.png","237.png","238.png","239.png","240.png","241.png","242.png","244.png","245.png","246.png","247.png","248.png","249.png","250.png","253.png","254.png","255.png","256.png","257.png","258.png","259.png","260.png","262.png","268.png","0.gif","1.gif","2.gif","3.gif","4.gif","5.gif","6.gif","7.gif","8.gif","9.gif","10.gif","12.gif","13.gif","14.gif","15.gif","16.gif","18.gif","19.gif","20.gif","21.gif","22.gif","23.gif","24.gif","28.gif","29.gif","30.gif","33.gif","34.gif","35.gif","36.gif","37.gif","39.gif","40.gif","42.gif","44.gif","45.gif","46.gif","48.gif","50.gif","52.gif","54.gif","55.gif","57.gif","58.gif","59.gif","60.gif","61.gif","63.gif","64.gif","66.gif","67.gif","68.gif","69.gif","70.gif","72.gif","73.gif","75.gif","76.gif","77.gif","78.gif","80.gif","81.gif","82.gif","83.gif","86.gif","87.gif","88.gif","92.gif","93.gif","94.gif","95.gif","96.gif","97.gif","98.gif","99.gif","100.gif","101.gif","102.gif","103.gif","104.gif","105.gif","106.gif","108.gif","109.gif","110.gif","111.gif","112.gif","113.gif","115.gif","116.gif","117.gif","118.gif","119.gif","120.gif","122.gif","123.gif","124.gif","127.gif","129.gif","130.gif","131.gif","134.gif","135.gif","136.gif","138.gif","139.gif","141.gif","144.gif","146.gif","148.gif","149.gif","153.gif","154.gif","155.gif","157.gif","158.gif","159.gif","160.gif","161.gif","162.gif","164.gif","166.gif","167.gif","168.gif","169.gif","170.gif","171.gif","172.gif","173.gif","174.gif","175.gif","176.gif","177.gif","178.gif","181.gif","182.gif","183.gif","185.gif","186.gif","187.gif","188.gif","189.gif","190.gif","191.gif","192.gif","193.gif","195.gif","196.gif","197.gif","200.gif","201.gif","202.gif","203.gif","204.gif","205.gif","206.gif","207.gif","208.gif","209.gif","210.gif","211.gif","212.gif","213.gif","214.gif","215.gif","216.gif","217.gif","219.gif","220.gif","221.gif","222.gif","224.gif","225.gif","226.gif","227.gif","228.gif","230.gif","232.gif","233.gif","234.gif","235.gif","238.gif","240.gif","241.gif","243.gif","244.gif","245.gif","246.gif","247.gif","249.gif","250.gif","251.gif","253.gif"], - init: function() { - if (Conf['Custom Board Titles']) { - this.db = new DataBoard('customTitles', null, true); - } - $.asap((function() { - return d.body; - }), function() { - return $.asap((function() { - return $('hr'); - }), Banner.ready); - }); - if (g.BOARD.ID !== 'f') { - return Main.ready(function() { - return $.queueTask(Banner.load); - }); - } - }, - ready: function() { - var banner, children; - banner = $(".boardBanner"); - children = banner.children; - if (g.BOARD.ID !== 'f' && g.VIEW === 'thread' && Conf['Remove Thread Excerpt']) { - Banner.setTitle(children[1].textContent); - } - children[0].title = "Click to change"; - $.on(children[0], 'click', Banner.cb.toggle); - if (Conf['Custom Board Titles']) { - Banner.custom(children[1]); - if (children[2]) { - return Banner.custom(children[2]); - } - } - }, - load: function() { - var bannerCnt, img; - bannerCnt = $.id('bannerCnt'); - if (!bannerCnt.firstChild) { - img = $.el('img', { - alt: '4chan', - src: '//s.4cdn.org/image/title/' + bannerCnt.dataset.src - }); - return $.add(bannerCnt, img); - } - }, - setTitle: function(title) { - if (Unread.title != null) { - Unread.title = title; - return Unread.update(); - } else { - return d.title = title; - } - }, - cb: { - toggle: function() { - var banner, i, ref; - if (!((ref = Banner.choices) != null ? ref.length : void 0)) { - Banner.choices = Banner.banners.slice(); - } - i = Math.floor(Banner.choices.length * Math.random()); - banner = Banner.choices.splice(i, 1); - return $('img', this.parentNode).src = "//s.4cdn.org/image/title/" + banner; - }, - click: function(e) { - var base1, br, k, len1, name1, ref; - if (!(e.ctrlKey || e.metaKey)) { - return; - } - if ((base1 = Banner.original)[name1 = this.className] == null) { - base1[name1] = this.cloneNode(true); - } - this.contentEditable = true; - ref = $$('br', this); - for (k = 0, len1 = ref.length; k < len1; k++) { - br = ref[k]; - $.replace(br, $.tn('\n')); - } - return this.focus(); - }, - keydown: function(e) { - e.stopPropagation(); - if (!e.shiftKey && e.keyCode === 13) { - return this.blur(); - } - }, - blur: function() { - var br, k, len1, ref; - ref = $$('br', this); - for (k = 0, len1 = ref.length; k < len1; k++) { - br = ref[k]; - $.replace(br, $.tn('\n')); - } - if (this.textContent = this.textContent.replace(/\n*$/, '')) { - this.contentEditable = false; - return Banner.db.set({ - boardID: g.BOARD.ID, - threadID: this.className, - val: { - title: this.textContent, - orig: Banner.original[this.className].textContent - } - }); - } else { - $.rmAll(this); - $.add(this, slice.call(Banner.original[this.className].cloneNode(true).childNodes)); - return Banner.db["delete"]({ - boardID: g.BOARD.ID, - threadID: this.className - }); - } - } - }, - original: {}, - custom: function(child) { - var className, data, event, items, k, len1, ref, string, string2; - className = child.className; - child.title = "Ctrl/\u2318+click to edit board " + (className.slice(5).toLowerCase()); - child.spellcheck = false; - ref = ['click', 'keydown', 'blur']; - for (k = 0, len1 = ref.length; k < len1; k++) { - event = ref[k]; - $.on(child, event, Banner.cb[event]); - } - string = g.BOARD + "." + className; - string2 = string + ".orig"; - items = {}; - items[string] = ''; - items[string2] = child.textContent; - $.get(items, function(items) { - if (items[string]) { - Banner.db.set({ - boardID: g.BOARD.ID, - threadID: className, - val: { - title: items[string], - orig: items[string2] - } - }); - } - return $["delete"]([string, string2]); - }); - if (data = Banner.db.get({ - boardID: g.BOARD.ID, - threadID: className - })) { - if (Conf['Persistent Custom Board Titles'] || data.orig === child.textContent) { - Banner.original[className] = child.cloneNode(true); - return child.textContent = data.title; - } else { - return Banner.db["delete"]({ - boardID: g.BOARD.ID, - threadID: className - }); - } - } - } - }; - - CatalogLinks = { - init: function() { - var el, input, selector; - if ((Conf['External Catalog'] || Conf['JSON Index']) && !(Conf['JSON Index'] && g.VIEW === 'index')) { - selector = (function() { - switch (g.VIEW) { - case 'thread': - case 'archive': - return '.navLinks.desktop > a'; - case 'catalog': - return '.navLinks > :first-child > a'; - case 'index': - return '#ctrl-top > a, .cataloglink > a'; - } - })(); - $.ready(function() { - var catalogLink, k, len1, link, ref; - ref = $$(selector); - for (k = 0, len1 = ref.length; k < len1; k++) { - link = ref[k]; - switch (link.pathname.replace(/\/+/g, '/')) { - case "/" + g.BOARD + "/": - if (Conf['JSON Index']) { - link.textContent = 'Index'; - } - link.href = CatalogLinks.index(); - break; - case "/" + g.BOARD + "/catalog": - link.href = CatalogLinks.catalog(); - } - if (g.VIEW === 'catalog' && Conf['JSON Index'] && Conf['Use 4chan X Catalog']) { - catalogLink = link.parentNode.cloneNode(true); - catalogLink.firstElementChild.textContent = '4chan X Catalog'; - catalogLink.firstElementChild.href = CatalogLinks.catalog(); - $.after(link.parentNode, [$.tn(' '), catalogLink]); - } - } - }); - } - if (Conf['JSON Index'] && Conf['Use 4chan X Catalog']) { - Post.callbacks.push({ - name: 'Catalog Link Rewrite', - cb: this.node - }); - CatalogThread.callbacks.push({ - name: 'Catalog Link Rewrite', - cb: this.node - }); - } - if (Conf['Catalog Links']) { - CatalogLinks.el = el = UI.checkbox('Header catalog links', 'Catalog Links'); - el.id = 'toggleCatalog'; - input = $('input', el); - $.on(input, 'change', this.toggle); - $.sync('Header catalog links', CatalogLinks.set); - return Header.menu.addEntry({ - el: el, - order: 95 - }); - } - }, - node: function() { - var a, k, len1, m, ref; - ref = $$('a', this.nodes.comment); - for (k = 0, len1 = ref.length; k < len1; k++) { - a = ref[k]; - if (m = a.href.match(/^https?:\/\/boards\.4chan\.org\/([^\/]+)\/catalog(#s=.*)?/)) { - a.href = "//boards.4chan.org/" + m[1] + "/" + (m[2] || '#catalog'); - } - } - }, - initBoardList: function() { - if (!CatalogLinks.el) { - return; - } - return CatalogLinks.set(Conf['Header catalog links']); - }, - toggle: function() { - $.event('CloseMenu'); - $.set('Header catalog links', this.checked); - return CatalogLinks.set(this.checked); - }, - set: function(useCatalog) { - var a, board, k, len1, ref, ref1; - ref = $$('a:not([data-only])', Header.boardList).concat($$('a', Header.bottomBoardList)); - for (k = 0, len1 = ref.length; k < len1; k++) { - a = ref[k]; - if (((ref1 = a.hostname) !== 'boards.4chan.org' && ref1 !== 'catalog.neet.tv') || !(board = a.pathname.split('/')[1]) || (board === 'f' || board === 'status' || board === '4chan') || a.pathname.split('/')[2] === 'archive' || $.hasClass(a, 'external')) { - continue; - } - a.href = useCatalog ? CatalogLinks.catalog(board) : "/" + board + "/"; - if (a.dataset.indexOptions && a.hostname === 'boards.4chan.org' && a.pathname.split('/')[2] === '') { - a.href += (a.hash ? '/' : '#') + a.dataset.indexOptions; - } - } - CatalogLinks.el.title = "Turn catalog links " + (useCatalog ? 'off' : 'on') + "."; - return $('input', CatalogLinks.el).checked = useCatalog; - }, - catalog: function(board) { - if (board == null) { - board = g.BOARD.ID; - } - if (Conf['External Catalog'] && (board === 'a' || board === 'c' || board === 'g' || board === 'biz' || board === 'k' || board === 'm' || board === 'o' || board === 'p' || board === 'v' || board === 'vg' || board === 'vr' || board === 'w' || board === 'wg' || board === 'cm' || board === '3' || board === 'adv' || board === 'an' || board === 'asp' || board === 'cgl' || board === 'ck' || board === 'co' || board === 'diy' || board === 'fa' || board === 'fit' || board === 'gd' || board === 'int' || board === 'jp' || board === 'lit' || board === 'mlp' || board === 'mu' || board === 'n' || board === 'out' || board === 'po' || board === 'sci' || board === 'sp' || board === 'tg' || board === 'toy' || board === 'trv' || board === 'tv' || board === 'vp' || board === 'wsg' || board === 'x' || board === 'f' || board === 'pol' || board === 's4s' || board === 'lgbt')) { - return "http://catalog.neet.tv/" + board + "/"; - } else if (Conf['JSON Index'] && Conf['Use 4chan X Catalog']) { - if (g.BOARD.ID === board && g.VIEW === 'index') { - return '#catalog'; - } else { - return "/" + board + "/#catalog"; - } - } else { - return "/" + board + "/catalog"; - } - }, - index: function(board) { - if (board == null) { - board = g.BOARD.ID; - } - if (Conf['JSON Index'] && board !== 'f') { - if (g.BOARD.ID === board && g.VIEW === 'index') { - return '#index'; - } else { - return "/" + board + "/#index"; - } - } else { - return "/" + board + "/"; - } - } - }; - - CustomCSS = { - init: function() { - if (!Conf['Custom CSS']) { - return; - } - return this.addStyle(); - }, - addStyle: function() { - return this.style = $.addStyle(Conf['usercss'], 'custom-css', '#fourchanx-css'); - }, - rmStyle: function() { - if (this.style) { - $.rm(this.style); - return delete this.style; - } - }, - update: function() { - if (!this.style) { - return this.addStyle(); - } - return this.style.textContent = Conf['usercss']; - } - }; - - ExpandComment = { - init: function() { - if (g.VIEW !== 'index' || !Conf['Comment Expansion'] || Conf['JSON Index']) { - return; - } - if (g.BOARD.ID === 'g') { - this.callbacks.push(Fourchan.code); - } - if (g.BOARD.ID === 'sci') { - this.callbacks.push(Fourchan.math); - } - return Post.callbacks.push({ - name: 'Comment Expansion', - cb: this.node - }); - }, - node: function() { - var a; - if (a = $('.abbr > a:not([onclick])', this.nodes.comment)) { - return $.on(a, 'click', ExpandComment.cb); - } - }, - callbacks: [], - cb: function(e) { - e.preventDefault(); - return ExpandComment.expand(Get.postFromNode(this)); - }, - expand: function(post) { - var a; - if (post.nodes.longComment && !post.nodes.longComment.parentNode) { - $.replace(post.nodes.shortComment, post.nodes.longComment); - post.nodes.comment = post.nodes.longComment; - return; - } - if (!(a = $('.abbr > a', post.nodes.comment))) { - return; - } - a.textContent = "Post No." + post + " Loading..."; - return $.cache("//a.4cdn.org" + (a.pathname.split(/\/+/).splice(0, 4).join('/')) + ".json", function() { - return ExpandComment.parse(this, a, post); - }); - }, - contract: function(post) { - var a; - if (!post.nodes.shortComment) { - return; - } - a = $('.abbr > a', post.nodes.shortComment); - a.textContent = 'here'; - $.replace(post.nodes.longComment, post.nodes.shortComment); - return post.nodes.comment = post.nodes.shortComment; - }, - parse: function(req, a, post) { - var callback, clone, comment, href, k, len1, len2, len3, postObj, posts, q, quote, ref, ref1, spoilerRange, status, u; - status = req.status; - if (status !== 200 && status !== 304) { - a.textContent = "Error " + req.statusText + " (" + status + ")"; - return; - } - posts = req.response.posts; - if (spoilerRange = posts[0].custom_spoiler) { - Build.spoilerRange[g.BOARD] = spoilerRange; - } - for (k = 0, len1 = posts.length; k < len1; k++) { - postObj = posts[k]; - if (postObj.no === post.ID) { - break; - } - } - if (postObj.no !== post.ID) { - a.textContent = "Post No." + post + " not found."; - return; - } - comment = post.nodes.comment; - clone = comment.cloneNode(false); - clone.innerHTML = postObj.com; - ref = $$('.quotelink', clone); - for (q = 0, len2 = ref.length; q < len2; q++) { - quote = ref[q]; - href = quote.getAttribute('href'); - if (href[0] === '/') { - continue; - } - if (href[0] === '#') { - quote.href = "" + (a.pathname.split(/\/+/).splice(0, 4).join('/')) + href; - } else { - quote.href = (a.pathname.split(/\/+/).splice(0, 3).join('/')) + "/" + href; - } - } - post.nodes.shortComment = comment; - $.replace(comment, clone); - post.nodes.comment = post.nodes.longComment = clone; - post.parseComment(); - post.parseQuotes(); - ref1 = ExpandComment.callbacks; - for (u = 0, len3 = ref1.length; u < len3; u++) { - callback = ref1[u]; - callback.call(post); - } - } - }; - - ExpandThread = { - statuses: {}, - init: function() { - if (g.VIEW === 'thread' || !Conf['Thread Expansion']) { - return; - } - if (Conf['JSON Index']) { - return $.on(d, 'IndexRefresh', this.onIndexRefresh); - } else { - return Thread.callbacks.push({ - name: 'Expand Thread', - cb: function() { - return ExpandThread.setButton(this); - } - }); - } - }, - setButton: function(thread) { - var a; - if (!(a = $.x('following-sibling::*[contains(@class,"summary")][1]', thread.OP.nodes.root))) { - return; - } - a.textContent = Build.summaryText.apply(Build, ['+'].concat(slice.call(a.textContent.match(/\d+/g)))); - a.style.cursor = 'pointer'; - return $.on(a, 'click', ExpandThread.cbToggle); - }, - disconnect: function(refresh) { - var ref, ref1, status, threadID; - if (g.VIEW === 'thread' || !Conf['Thread Expansion']) { - return; - } - ref = ExpandThread.statuses; - for (threadID in ref) { - status = ref[threadID]; - if ((ref1 = status.req) != null) { - ref1.abort(); - } - delete ExpandThread.statuses[threadID]; - } - if (!refresh) { - return $.off(d, 'IndexRefresh', this.onIndexRefresh); - } - }, - onIndexRefresh: function() { - ExpandThread.disconnect(true); - return g.BOARD.threads.forEach(function(thread) { - return ExpandThread.setButton(thread); - }); - }, - cbToggle: function(e) { - if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0) { - return; - } - e.preventDefault(); - return ExpandThread.toggle(Get.threadFromNode(this)); - }, - toggle: function(thread) { - var a, threadRoot; - threadRoot = thread.OP.nodes.root.parentNode; - if (!(a = $('.summary', threadRoot))) { - return; - } - if (thread.ID in ExpandThread.statuses) { - return ExpandThread.contract(thread, a, threadRoot); - } else { - return ExpandThread.expand(thread, a); - } - }, - expand: function(thread, a) { - var status; - ExpandThread.statuses[thread] = status = {}; - a.textContent = Build.summaryText.apply(Build, ['...'].concat(slice.call(a.textContent.match(/\d+/g)))); - return status.req = $.cache("//a.4cdn.org/" + thread.board + "/thread/" + thread + ".json", function() { - delete status.req; - return ExpandThread.parse(this, thread, a); - }); - }, - contract: function(thread, a, threadRoot) { - var filesCount, inlined, k, len1, num, postsCount, replies, reply, status; - status = ExpandThread.statuses[thread]; - delete ExpandThread.statuses[thread]; - if (status.req) { - status.req.abort(); - if (a) { - a.textContent = Build.summaryText.apply(Build, ['+'].concat(slice.call(a.textContent.match(/\d+/g)))); - } - return; - } - replies = $$('.thread > .replyContainer', threadRoot); - if (!Conf['JSON Index'] || Conf['Show Replies']) { - num = (function() { - if (thread.isSticky) { - return 1; - } else { - switch (g.BOARD.ID) { - case 'b': - case 'vg': - return 3; - case 't': - return 1; - default: - return 5; - } - } - })(); - replies = replies.slice(0, -num); - } - postsCount = 0; - filesCount = 0; - for (k = 0, len1 = replies.length; k < len1; k++) { - reply = replies[k]; - if (Conf['Quote Inlining']) { - while (inlined = $('.inlined', reply)) { - inlined.click(); - } - } - postsCount++; - if ('file' in Get.postFromRoot(reply)) { - filesCount++; - } - $.rm(reply); - } - return a.textContent = Build.summaryText('+', postsCount, filesCount); - }, - parse: function(req, thread, a) { - var filesCount, k, len1, post, postData, posts, postsCount, postsRoot, ref, ref1, root; - if ((ref = req.status) !== 200 && ref !== 304) { - a.textContent = "Error " + req.statusText + " (" + req.status + ")"; - return; - } - Build.spoilerRange[thread.board] = req.response.posts[0].custom_spoiler; - posts = []; - postsRoot = []; - filesCount = 0; - ref1 = req.response.posts; - for (k = 0, len1 = ref1.length; k < len1; k++) { - postData = ref1[k]; - if (postData.no === thread.ID) { - continue; - } - if ((post = thread.posts[postData.no]) && !post.isFetchedQuote) { - if ('file' in post) { - filesCount++; - } - postsRoot.push(post.nodes.root); - continue; - } - root = Build.postFromObject(postData, thread.board.ID); - post = new Post(root, thread, thread.board); - if ('file' in post) { - filesCount++; - } - posts.push(post); - postsRoot.push(root); - } - Main.callbackNodes(Post, posts); - $.after(a, postsRoot); - $.event('PostsInserted'); - postsCount = postsRoot.length; - return a.textContent = Build.summaryText('-', postsCount, filesCount); - } - }; - - FileInfo = { - init: function() { - var ref; - if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['File Info Formatting']) { - return; - } - return Post.callbacks.push({ - name: 'File Info Formatting', - cb: this.node - }); - }, - node: function() { - var info, oldInfo; - if (!this.file || this.isClone) { - return; - } - oldInfo = $.el('span', { - className: 'fileText-original' - }); - $.prepend(this.file.link.parentNode, oldInfo); - $.add(oldInfo, [this.file.link.previousSibling, this.file.link, this.file.link.nextSibling]); - info = $.el('span', { - className: 'file-info' - }); - FileInfo.format(Conf['fileInfo'], this, info); - return $.prepend(this.file.text, info); - }, - format: function(formatString, post, outputNode) { - var output; - output = []; - formatString.replace(/%(.)|[^%]+/g, function(s, c) { - output.push(c in FileInfo.formatters ? FileInfo.formatters[c].call(post) : { - innerHTML: E(s) - }); - return ''; - }); - return $.extend(outputNode, { - innerHTML: E.cat(output) - }); - }, - formatters: { - t: function() { - return { - innerHTML: E(this.file.url.match(/[^/]*$/)[0]) - }; - }, - T: function() { - return { - innerHTML: "" + FileInfo.formatters.t.call(this).innerHTML + "" - }; - }, - l: function() { - return { - innerHTML: "" + FileInfo.formatters.n.call(this).innerHTML + "" - }; - }, - L: function() { - return { - innerHTML: "" + FileInfo.formatters.N.call(this).innerHTML + "" - }; - }, - n: function() { - var fullname, shortname; - fullname = this.file.name; - shortname = Build.shortFilename(this.file.name, this.isReply); - if (fullname === shortname) { - return { - innerHTML: E(fullname) - }; - } else { - return { - innerHTML: "" + E(shortname) + "" + E(fullname) + "" - }; - } - }, - N: function() { - return { - innerHTML: E(this.file.name) - }; - }, - p: function() { - return { - innerHTML: (this.file.isSpoiler ? "Spoiler, " : "") - }; - }, - s: function() { - return { - innerHTML: E(this.file.size) - }; - }, - B: function() { - return { - innerHTML: E(Math.round(this.file.sizeInBytes)) + " Bytes" - }; - }, - K: function() { - return { - innerHTML: E(Math.round(this.file.sizeInBytes/1024)) + " KB" - }; - }, - M: function() { - return { - innerHTML: E(Math.round(this.file.sizeInBytes/1048576*100)/100) + " MB" - }; - }, - r: function() { - return { - innerHTML: E(this.file.dimensions || "PDF") - }; - }, - g: function() { - return { - innerHTML: (this.file.tag ? ", " + E(this.file.tag) : "") - }; - }, - '%': function() { - return { - innerHTML: "%" - }; - } - } - }; - - Flash = { - init: function() { - if (g.BOARD.ID === 'f' && Conf['Enable Native Flash Embedding']) { - return $.ready(Flash.initReady); - } - }, - initReady: function() { - if ($.hasStorage) { - return $.global(function() { - if (JSON.parse(localStorage['4chan-settings'] || '{}').disableAll) { - return window.SWFEmbed.init(); - } - }); - } else { - if (g.VIEW === 'thread') { - $.global(function() { - return window.Main.tid = location.pathname.split(/\/+/)[3]; - }); - } - return $.global(function() { - return window.SWFEmbed.init(); - }); - } - } - }; - - Fourchan = { - init: function() { - var ref; - if ((ref = g.VIEW) !== 'index' && ref !== 'thread') { - return; - } - if (g.BOARD.ID === 'g') { - $.on(window, 'prettyprint:cb', function(e) { - var post, pre; - if (!(post = g.posts[e.detail.ID])) { - return; - } - if (!(pre = $$('.prettyprint', post.nodes.comment)[e.detail.i])) { - return; - } - if (!$.hasClass(pre, 'prettyprinted')) { - pre.innerHTML = e.detail.html; - return $.addClass(pre, 'prettyprinted'); - } - }); - $.globalEval('window.addEventListener(\'prettyprint\', function(e) {\n window.dispatchEvent(new CustomEvent(\'prettyprint:cb\', {\n detail: {\n ID: e.detail.ID,\n i: e.detail.i,\n html: prettyPrintOne(e.detail.html)\n }\n }));\n}, false);'); - Post.callbacks.push({ - name: 'Parse /g/ code', - cb: this.code - }); - } - if (g.BOARD.ID === 'sci') { - $.global(function() { - return window.addEventListener('mathjax', function(e) { - if (window.MathJax) { - return window.MathJax.Hub.Queue(['Typeset', window.MathJax.Hub, e.target]); - } else { - if (!document.querySelector('script[src^="//cdn.mathjax.org/"]')) { - window.loadMathJax(); - window.loadMathJax = function() {}; - } - if (!e.target.classList.contains('postMessage')) { - return document.querySelector('script[src^="//cdn.mathjax.org/"]').addEventListener('load', function() { - return window.MathJax.Hub.Queue(['Typeset', window.MathJax.Hub, e.target]); - }, false); - } - } - }, false); - }); - Post.callbacks.push({ - name: 'Parse /sci/ math', - cb: this.math - }); - CatalogThread.callbacks.push({ - name: 'Parse /sci/ math', - cb: this.math - }); - } - return Main.ready(function() { - return $.global(function() { - var k, len1, node, ref1; - window.clickable_ids = false; - ref1 = document.querySelectorAll('.posteruid, .capcode'); - for (k = 0, len1 = ref1.length; k < len1; k++) { - node = ref1[k]; - node.removeEventListener('click', window.idClick, false); - } - }); - }); - }, - code: function() { - if (this.isClone) { - return; - } - return $.ready((function(_this) { - return function() { - var i, k, len1, pre, ref; - ref = $$('.prettyprint', _this.nodes.comment); - for (i = k = 0, len1 = ref.length; k < len1; i = ++k) { - pre = ref[i]; - if (!$.hasClass(pre, 'prettyprinted')) { - $.event('prettyprint', { - ID: _this.fullID, - i: i, - html: pre.innerHTML - }, window); - } - } - }; - })(this)); - }, - math: function() { - var cb, k, len1, wbr, wbrs; - if (!/\[(math|eqn)\]/.test(this.nodes.comment.textContent)) { - return; - } - if ((wbrs = $$('wbr', this.nodes.comment)).length) { - for (k = 0, len1 = wbrs.length; k < len1; k++) { - wbr = wbrs[k]; - $.rm(wbr); - } - this.nodes.comment.normalize(); - } - cb = (function(_this) { - return function() { - if (!doc.contains(_this.nodes.comment)) { - return; - } - $.off(d, 'PostsInserted', cb); - return $.event('mathjax', null, _this.nodes.comment); - }; - })(this); - $.on(d, 'PostsInserted', cb); - return cb(); - } - }; - - IDColor = { - init: function() { - var ref; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Color User IDs'])) { - return; - } - this.ids = { - Heaven: [0, 0, 0, '#fff'] - }; - return Post.callbacks.push({ - name: 'Color User IDs', - cb: this.node - }); - }, - node: function() { - var rgb, span, style, uid; - if (this.isClone || !((uid = this.info.uniqueID) && (span = $('span.hand', this.nodes.uniqueID)))) { - return; - } - rgb = IDColor.ids[uid] || IDColor.compute(uid); - style = span.style; - style.color = rgb[3]; - style.backgroundColor = "rgb(" + rgb[0] + "," + rgb[1] + "," + rgb[2] + ")"; - return $.addClass(span, 'painted'); - }, - compute: function(uid) { - var hash, rgb; - hash = IDColor.hash(uid); - rgb = [(hash >> 24) & 0xFF, (hash >> 16) & 0xFF, (hash >> 8) & 0xFF]; - rgb.push((rgb[0] * 0.299 + rgb[1] * 0.587 + rgb[2] * 0.114) > 125 ? '#000' : '#fff'); - return this.ids[uid] = rgb; - }, - hash: function(uid) { - var i, msg; - msg = 0; - i = 0; - while (i < 8) { - msg = (msg << 5) - msg + uid.charCodeAt(i++); - } - return msg; - } - }; - - IDHighlight = { - init: function() { - var ref; - if ((ref = g.VIEW) !== 'index' && ref !== 'thread') { - return; - } - return Post.callbacks.push({ - name: 'Highlight by User ID', - cb: this.node - }); - }, - uniqueID: null, - node: function() { - if (this.nodes.uniqueID) { - $.on(this.nodes.uniqueID, 'click', IDHighlight.click(this)); - } - if (this.nodes.capcode) { - $.on(this.nodes.capcode, 'click', IDHighlight.click(this)); - } - if (!this.isClone) { - return IDHighlight.set(this); - } - }, - set: function(post) { - var match; - match = (post.info.uniqueID || post.info.capcode) === IDHighlight.uniqueID; - return $[match ? 'addClass' : 'rmClass'](post.nodes.post, 'highlight'); - }, - click: function(post) { - return function() { - var uniqueID; - uniqueID = post.info.uniqueID || post.info.capcode; - IDHighlight.uniqueID = IDHighlight.uniqueID === uniqueID ? null : uniqueID; - return g.posts.forEach(IDHighlight.set); - }; - } - }; - - Keybinds = { - init: function() { - var hotkey, init; - if (!Conf['Keybinds']) { - return; - } - for (hotkey in Config.hotkeys) { - $.sync(hotkey, Keybinds.sync); - } - init = function() { - var k, len1, node, ref; - $.off(d, '4chanXInitFinished', init); - $.on(d, 'keydown', Keybinds.keydown); - ref = $$('[accesskey]'); - for (k = 0, len1 = ref.length; k < len1; k++) { - node = ref[k]; - node.removeAttribute('accesskey'); - } - }; - return $.on(d, '4chanXInitFinished', init); - }, - sync: function(key, hotkey) { - return Conf[hotkey] = key; - }, - keydown: function(e) { - var form, k, key, len1, notification, notifications, op, ref, ref1, ref2, ref3, ref4, ref5, searchInput, target, thread, threadRoot; - if (!(key = Keybinds.keyCode(e))) { - return; - } - target = e.target; - if ((ref = target.nodeName) === 'INPUT' || ref === 'TEXTAREA') { - if (!(/(Esc|Alt|Ctrl|Meta|Shift\+\w{2,})/.test(key) && !/^Alt\+(\d|Up|Down|Left|Right)$/.test(key))) { - return; - } - } - if (!(((ref1 = g.VIEW) !== 'index' && ref1 !== 'thread') || g.VIEW === 'index' && Conf['JSON Index'] && Conf['Index Mode'] === 'catalog' || g.VIEW === 'index' && g.BOARD.ID === 'f')) { - threadRoot = Nav.getThread(); - if (op = $('.op', threadRoot)) { - thread = Get.postFromNode(op).thread; - } - } - switch (key) { - case Conf['Toggle board list']: - if (!Conf['Custom Board Navigation']) { - return; - } - Header.toggleBoardList(); - break; - case Conf['Toggle header']: - Header.toggleBarVisibility(); - break; - case Conf['Open empty QR']: - if (!QR.postingIsEnabled) { - return; - } - Keybinds.qr(); - break; - case Conf['Open QR']: - if (!(QR.postingIsEnabled && threadRoot)) { - return; - } - Keybinds.qr(threadRoot); - break; - case Conf['Open settings']: - Settings.open(); - break; - case Conf['Close']: - if (Settings.dialog) { - Settings.close(); - } else if ((notifications = $$('.notification')).length) { - for (k = 0, len1 = notifications.length; k < len1; k++) { - notification = notifications[k]; - $('.close', notification).click(); - } - } else if (QR.nodes && !(QR.nodes.el.hidden || window.getComputedStyle(QR.nodes.form).display === 'none')) { - if (Conf['Persistent QR']) { - QR.hide(); - } else { - QR.close(); - } - } else if (Embedding.lastEmbed) { - Embedding.closeFloat(); - } else { - return; - } - break; - case Conf['Spoiler tags']: - if (target.nodeName !== 'TEXTAREA') { - return; - } - Keybinds.tags('spoiler', target); - break; - case Conf['Code tags']: - if (target.nodeName !== 'TEXTAREA') { - return; - } - Keybinds.tags('code', target); - break; - case Conf['Eqn tags']: - if (target.nodeName !== 'TEXTAREA') { - return; - } - Keybinds.tags('eqn', target); - break; - case Conf['Math tags']: - if (target.nodeName !== 'TEXTAREA') { - return; - } - Keybinds.tags('math', target); - break; - case Conf['SJIS tags']: - if (target.nodeName !== 'TEXTAREA') { - return; - } - Keybinds.tags('sjis', target); - break; - case Conf['Toggle sage']: - if (!(QR.nodes && !QR.nodes.el.hidden)) { - return; - } - Keybinds.sage(); - break; - case Conf['Submit QR']: - if (!(QR.nodes && !QR.nodes.el.hidden)) { - return; - } - if (!QR.status()) { - QR.submit(); - } - break; - case Conf['Update']: - switch (g.VIEW) { - case 'thread': - if (!Conf['Thread Updater']) { - return; - } - ThreadUpdater.update(); - break; - case 'index': - if (!(Conf['JSON Index'] && g.BOARD.ID !== 'f')) { - return; - } - Index.update(); - break; - default: - return; - } - break; - case Conf['Watch']: - if (!(ThreadWatcher.enabled && thread)) { - return; - } - ThreadWatcher.toggle(thread); - break; - case Conf['Update thread watcher']: - if (!ThreadWatcher.enabled) { - return; - } - ThreadWatcher.buttonFetchAll(); - break; - case Conf['Expand image']: - if (!(ImageExpand.enabled && threadRoot)) { - return; - } - Keybinds.img(threadRoot); - break; - case Conf['Expand images']: - if (!(ImageExpand.enabled && threadRoot)) { - return; - } - Keybinds.img(threadRoot, true); - break; - case Conf['Open Gallery']: - if (!Gallery.enabled) { - return; - } - Gallery.cb.toggle(); - break; - case Conf['fappeTyme']: - if (!(Conf['Fappe Tyme'] && ((ref2 = g.VIEW) === 'index' || ref2 === 'thread'))) { - return; - } - FappeTyme.toggle('fappe'); - break; - case Conf['werkTyme']: - if (!(Conf['Werk Tyme'] && ((ref3 = g.VIEW) === 'index' || ref3 === 'thread'))) { - return; - } - FappeTyme.toggle('werk'); - break; - case Conf['Front page']: - if (Conf['JSON Index'] && g.VIEW === 'index' && g.BOARD.ID !== 'f') { - Index.userPageNav(1); - } else { - window.location = "/" + g.BOARD + "/"; - } - break; - case Conf['Open front page']: - $.open("/" + g.BOARD + "/"); - break; - case Conf['Next page']: - if (!(g.VIEW === 'index' && g.BOARD.ID !== 'f')) { - return; - } - if (Conf['JSON Index']) { - if ((ref4 = Conf['Index Mode']) !== 'paged' && ref4 !== 'infinite') { - return; - } - $('.next button', Index.pagelist).click(); - } else { - if (form = $('.next form')) { - window.location = form.action; - } - } - break; - case Conf['Previous page']: - if (!(g.VIEW === 'index' && g.BOARD.ID !== 'f')) { - return; - } - if (Conf['JSON Index']) { - if ((ref5 = Conf['Index Mode']) !== 'paged' && ref5 !== 'infinite') { - return; - } - $('.prev button', Index.pagelist).click(); - } else { - if (form = $('.prev form')) { - window.location = form.action; - } - } - break; - case Conf['Search form']: - if (!(g.VIEW === 'index' && g.BOARD.ID !== 'f')) { - return; - } - searchInput = Conf['JSON Index'] ? Index.searchInput : $.id('search-box'); - Header.scrollToIfNeeded(searchInput); - searchInput.focus(); - break; - case Conf['Paged mode']: - if (!(Conf['JSON Index'] && g.BOARD.ID !== 'f')) { - return; - } - window.location = g.VIEW === 'index' ? '#paged' : "/" + g.BOARD + "/#paged"; - break; - case Conf['Infinite scrolling mode']: - if (!(Conf['JSON Index'] && g.BOARD.ID !== 'f')) { - return; - } - window.location = g.VIEW === 'index' ? '#infinite' : "/" + g.BOARD + "/#infinite"; - break; - case Conf['All pages mode']: - if (!(Conf['JSON Index'] && g.BOARD.ID !== 'f')) { - return; - } - window.location = g.VIEW === 'index' ? '#all-pages' : "/" + g.BOARD + "/#all-pages"; - break; - case Conf['Open catalog']: - if (g.BOARD.ID === 'f') { - return; - } - window.location = CatalogLinks.catalog(); - break; - case Conf['Cycle sort type']: - if (!(Conf['JSON Index'] && g.VIEW === 'index' && g.BOARD.ID !== 'f')) { - return; - } - Index.cycleSortType(); - break; - case Conf['Next thread']: - if (!(g.VIEW === 'index' && threadRoot)) { - return; - } - Nav.scroll(+1); - break; - case Conf['Previous thread']: - if (!(g.VIEW === 'index' && threadRoot)) { - return; - } - Nav.scroll(-1); - break; - case Conf['Expand thread']: - if (!(g.VIEW === 'index' && threadRoot)) { - return; - } - ExpandThread.toggle(thread); - break; - case Conf['Open thread']: - if (!(g.VIEW === 'index' && threadRoot)) { - return; - } - Keybinds.open(thread); - break; - case Conf['Open thread tab']: - if (!(g.VIEW === 'index' && threadRoot)) { - return; - } - Keybinds.open(thread, true); - break; - case Conf['Next reply']: - if (!threadRoot) { - return; - } - Keybinds.hl(+1, threadRoot); - break; - case Conf['Previous reply']: - if (!threadRoot) { - return; - } - Keybinds.hl(-1, threadRoot); - break; - case Conf['Deselect reply']: - if (!threadRoot) { - return; - } - Keybinds.hl(0, threadRoot); - break; - case Conf['Hide']: - if (!thread) { - return; - } - if (ThreadHiding.db) { - ThreadHiding.toggle(thread); - } - break; - case Conf['Previous Post Quoting You']: - if (!(threadRoot && QuoteYou.db)) { - return; - } - QuoteYou.cb.seek('preceding'); - break; - case Conf['Next Post Quoting You']: - if (!(threadRoot && QuoteYou.db)) { - return; - } - QuoteYou.cb.seek('following'); - break; - default: - return; - } - e.preventDefault(); - return e.stopPropagation(); - }, - keyCode: function(e) { - var kc, key; - key = (function() { - switch (kc = e.keyCode) { - case 8: - return ''; - case 13: - return 'Enter'; - case 27: - return 'Esc'; - case 32: - return 'Space'; - case 37: - return 'Left'; - case 38: - return 'Up'; - case 39: - return 'Right'; - case 40: - return 'Down'; - case 188: - return 'Comma'; - case 190: - return 'Period'; - case 191: - return 'Slash'; - case 59: - case 186: - return 'Semicolon'; - default: - if ((48 <= kc && kc <= 57) || (65 <= kc && kc <= 90)) { - return String.fromCharCode(kc).toLowerCase(); - } else if ((96 <= kc && kc <= 105)) { - return String.fromCharCode(kc - 48).toLowerCase(); - } else { - return null; - } - } - })(); - if (key) { - if (e.altKey) { - key = 'Alt+' + key; - } - if (e.ctrlKey) { - key = 'Ctrl+' + key; - } - if (e.metaKey) { - key = 'Meta+' + key; - } - if (e.shiftKey) { - key = 'Shift+' + key; - } - } - return key; - }, - qr: function(thread) { - QR.open(); - if (thread != null) { - QR.quote.call($('input', $('.post.highlight', thread) || thread)); - } - return QR.nodes.com.focus(); - }, - tags: function(tag, ta) { - var range, selEnd, selStart, supported, value; - supported = (function() { - switch (tag) { - case 'spoiler': - return !!$('.postForm input[name=spoiler]'); - case 'code': - return g.BOARD.ID === 'g'; - case 'math': - case 'eqn': - return g.BOARD.ID === 'sci'; - case 'sjis': - return g.BOARD.ID === 'jp'; - } - })(); - if (!supported) { - new Notice('warning', "[" + tag + "] tags are not supported on /" + g.BOARD + "/.", 20); - } - value = ta.value; - selStart = ta.selectionStart; - selEnd = ta.selectionEnd; - ta.value = value.slice(0, selStart) + ("[" + tag + "]") + value.slice(selStart, selEnd) + ("[/" + tag + "]") + value.slice(selEnd); - range = ("[" + tag + "]").length + selEnd; - ta.setSelectionRange(range, range); - return $.event('input', null, ta); - }, - sage: function() { - var isSage; - isSage = /sage/i.test(QR.nodes.email.value); - return QR.nodes.email.value = isSage ? "" : "sage"; - }, - img: function(thread, all) { - var post; - if (all) { - return ImageExpand.cb.toggleAll(); - } else { - post = Get.postFromNode($('.post.highlight', thread) || $('.op', thread)); - return ImageExpand.toggle(post); - } - }, - open: function(thread, tab) { - var url; - if (g.VIEW !== 'index') { - return; - } - url = "/" + thread.board + "/thread/" + thread; - if (tab) { - return $.open(url); - } else { - return location.href = url; - } - }, - hl: function(delta, thread) { - var axis, height, k, len1, next, postEl, replies, reply, root; - postEl = $('.reply.highlight', thread); - if (!delta) { - if (postEl) { - $.rmClass(postEl, 'highlight'); - } - return; - } - if (postEl) { - height = postEl.getBoundingClientRect().height; - if (Header.getTopOf(postEl) >= -height && Header.getBottomOf(postEl) >= -height) { - root = postEl.parentNode; - axis = delta === +1 ? 'following' : 'preceding'; - if (!(next = $.x(axis + "-sibling::div[contains(@class,'replyContainer') and not(@hidden) and not(child::div[@class='stub'])][1]/child::div[contains(@class,'reply')]", root))) { - return; - } - Header.scrollToIfNeeded(next, delta === +1); - this.focus(next); - $.rmClass(postEl, 'highlight'); - return; - } - $.rmClass(postEl, 'highlight'); - } - replies = $$('.reply', thread); - if (delta === -1) { - replies.reverse(); - } - for (k = 0, len1 = replies.length; k < len1; k++) { - reply = replies[k]; - if (delta === +1 && Header.getTopOf(reply) > 0 || delta === -1 && Header.getBottomOf(reply) > 0) { - this.focus(reply); - return; - } - } - }, - focus: function(post) { - return $.addClass(post, 'highlight'); - } - }; - - Nav = { - init: function() { - var append, next, prev, span; - switch (g.VIEW) { - case 'index': - if (!Conf['Index Navigation']) { - return; - } - break; - case 'thread': - if (!Conf['Reply Navigation']) { - return; - } - break; - default: - return; - } - span = $.el('span', { - id: 'navlinks' - }); - prev = $.el('a', { - textContent: 'â–²', - href: 'javascript:;' - }); - next = $.el('a', { - textContent: 'â–¼', - href: 'javascript:;' - }); - $.on(prev, 'click', this.prev); - $.on(next, 'click', this.next); - $.add(span, [prev, $.tn(' '), next]); - append = function() { - $.off(d, '4chanXInitFinished', append); - return $.add(d.body, span); - }; - return $.on(d, '4chanXInitFinished', append); - }, - prev: function() { - if (g.VIEW === 'thread') { - return window.scrollTo(0, 0); - } else { - return Nav.scroll(-1); - } - }, - next: function() { - if (g.VIEW === 'thread') { - return window.scrollTo(0, d.body.scrollHeight); - } else { - return Nav.scroll(+1); - } - }, - getThread: function() { - var k, len1, ref, thread, threadRoot; - ref = $$('.thread'); - for (k = 0, len1 = ref.length; k < len1; k++) { - threadRoot = ref[k]; - thread = Get.threadFromRoot(threadRoot); - if (thread.isHidden && !thread.stub) { - continue; - } - if (Header.getTopOf(threadRoot) >= -threadRoot.getBoundingClientRect().height) { - return threadRoot; - } - } - return $('.board'); - }, - scroll: function(delta) { - var axis, extra, next, ref, thread, top; - if ((ref = d.activeElement) != null) { - ref.blur(); - } - thread = Nav.getThread(); - axis = delta === +1 ? 'following' : 'preceding'; - if (next = $.x(axis + "-sibling::div[contains(@class,'thread') and not(@hidden)][1]", thread)) { - top = Header.getTopOf(thread); - if (delta === +1 && top < 5 || delta === -1 && top > -5) { - thread = next; - } - } - extra = Header.getTopOf(thread) + doc.clientHeight - d.body.getBoundingClientRect().bottom; - if (extra > 0) { - d.body.style.marginBottom = extra + "px"; - } - Header.scrollTo(thread); - if (extra > 0 && !Nav.haveExtra) { - Nav.haveExtra = true; - return $.on(d, 'scroll', Nav.removeExtra); - } - }, - removeExtra: function() { - var extra; - extra = doc.clientHeight - d.body.getBoundingClientRect().bottom; - if (extra > 0) { - return d.body.style.marginBottom = extra + "px"; - } else { - d.body.style.marginBottom = null; - delete Nav.haveExtra; - return $.off(d, 'scroll', Nav.removeExtra); - } - } - }; - - NormalizeURL = { - init: function() { - var pathname; - if (!Conf['Normalize URL']) { - return; - } - pathname = location.pathname.split(/\/+/); - switch (g.VIEW) { - case 'thread': - pathname[2] = 'thread'; - pathname = pathname.slice(0, 4); - break; - case 'index': - pathname = pathname.slice(0, 3); - } - pathname = pathname.join('/'); - if (location.pathname !== pathname) { - return history.replaceState(history.state, '', location.protocol + "//" + location.host + pathname + location.hash); - } - } - }; - - RelativeDates = { - INTERVAL: $.MINUTE / 2, - init: function() { - var ref; - if (((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Relative Post Dates'] && !Conf['Relative Date Title'] || g.VIEW === 'index' && Conf['JSON Index'] && g.BOARD.ID !== 'f') { - this.flush(); - $.on(d, 'visibilitychange ThreadUpdate', this.flush); - } - if (Conf['Relative Post Dates']) { - return Post.callbacks.push({ - name: 'Relative Post Dates', - cb: this.node - }); - } - }, - node: function() { - var dateEl; - dateEl = this.nodes.date; - if (Conf['Relative Date Title']) { - $.on(dateEl, 'mouseover', (function(_this) { - return function() { - return RelativeDates.hover(_this); - }; - })(this)); - return; - } - if (this.isClone) { - return; - } - dateEl.title = dateEl.textContent; - return RelativeDates.update(this); - }, - relative: function(diff, now, date) { - var days, months, number, rounded, unit, years; - unit = (number = diff / $.DAY) >= 1 ? (years = now.getYear() - date.getYear(), months = now.getMonth() - date.getMonth(), days = now.getDate() - date.getDate(), years > 1 ? (number = years - (months < 0 || months === 0 && days < 0), 'year') : years === 1 && (months > 0 || months === 0 && days >= 0) ? (number = years, 'year') : (months = months + 12 * years) > 1 ? (number = months - (days < 0), 'month') : months === 1 && days >= 0 ? (number = months, 'month') : 'day') : (number = diff / $.HOUR) >= 1 ? 'hour' : (number = diff / $.MINUTE) >= 1 ? 'minute' : (number = Math.max(0, diff) / $.SECOND, 'second'); - rounded = Math.round(number); - if (rounded !== 1) { - unit += 's'; - } - return rounded + " " + unit + " ago"; - }, - stale: [], - flush: function() { - var data, k, len1, now, ref; - if (d.hidden) { - return; - } - now = new Date(); - ref = RelativeDates.stale; - for (k = 0, len1 = ref.length; k < len1; k++) { - data = ref[k]; - RelativeDates.update(data, now); - } - RelativeDates.stale = []; - clearTimeout(RelativeDates.timeout); - return RelativeDates.timeout = setTimeout(RelativeDates.flush, RelativeDates.INTERVAL); - }, - hover: function(post) { - var date, diff, now; - date = post.info.date; - now = new Date(); - diff = now - date; - return post.nodes.date.title = RelativeDates.relative(diff, now, date); - }, - update: function(data, now) { - var date, diff, isPost, k, len1, ref, relative, singlePost; - isPost = data instanceof Post; - date = isPost ? data.info.date : new Date(+data.dataset.utc); - now || (now = new Date()); - diff = now - date; - relative = RelativeDates.relative(diff, now, date); - if (isPost) { - ref = [data].concat(data.clones); - for (k = 0, len1 = ref.length; k < len1; k++) { - singlePost = ref[k]; - singlePost.nodes.date.firstChild.textContent = relative; - } - } else { - data.firstChild.textContent = relative; - } - return RelativeDates.setOwnTimeout(diff, data); - }, - setOwnTimeout: function(diff, data) { - var delay; - delay = diff < $.MINUTE ? $.SECOND - (diff + $.SECOND / 2) % $.SECOND : diff < $.HOUR ? $.MINUTE - (diff + $.MINUTE / 2) % $.MINUTE : diff < $.DAY ? $.HOUR - (diff + $.HOUR / 2) % $.HOUR : $.DAY - (diff + $.DAY / 2) % $.DAY; - return setTimeout(RelativeDates.markStale, delay, data); - }, - markStale: function(data) { - if (indexOf.call(RelativeDates.stale, data) >= 0) { - return; - } - if (data instanceof Post && !g.posts[data.fullID]) { - return; - } - return RelativeDates.stale.push(data); - } - }; - - RemoveSpoilers = { - init: function() { - if (Conf['Reveal Spoilers']) { - $.addClass(doc, 'reveal-spoilers'); - } - if (!Conf['Remove Spoilers']) { - return; - } - Post.callbacks.push({ - name: 'Reveal Spoilers', - cb: this.node - }); - CatalogThread.callbacks.push({ - name: 'Reveal Spoilers', - cb: this.node - }); - if (g.VIEW === 'archive') { - return $.ready(function() { - return RemoveSpoilers.unspoiler($.id('arc-list')); - }); - } - }, - node: function() { - return RemoveSpoilers.unspoiler(this.nodes.comment); - }, - unspoiler: function(el) { - var k, len1, span, spoiler, spoilers; - spoilers = $$('s', el); - for (k = 0, len1 = spoilers.length; k < len1; k++) { - spoiler = spoilers[k]; - span = $.el('span', { - className: 'removed-spoiler' - }); - $.replace(spoiler, span); - $.add(span, slice.call(spoiler.childNodes)); - } - } - }; - - Report = { - css: "#g-recaptcha,\n" + -":root:not(.js-enabled) #captchaContainerAlt {\n" + -" height: auto;\n" + -"}\n" + -"#captchaContainerAlt td:nth-child(2) {\n" + -" display: table-cell !important;\n" + -"}", - init: function() { - var match; - if (!(match = location.search.match(/\bno=(\d+)/))) { - return; - } - Captcha.replace.init(); - this.postID = +match[1]; - return $.ready(this.ready); - }, - ready: function() { - var passAd, prev, ref; - $.addStyle(Report.css); - if (Conf['Archive Report']) { - Report.archive(); - } - if ((passAd = $('a[href="https://www.4chan.org/pass"]'))) { - $.extend(passAd, { - textContent: 'Complain', - href: 'https://www.4chan-x.net/captchas.html', - tabIndex: -1 - }); - passAd.parentNode.normalize(); - if (((ref = (prev = passAd.previousSibling)) != null ? ref.nodeType : void 0) === Node.TEXT_NODE) { - prev.nodeValue = prev.nodeValue.replace(/4chan Pass[^\.]*\./i, 'reCAPTCHA malfunctioning?'); - } - $.after(passAd, [ - $.tn('] ['), $.el('a', { - href: 'mailto:4chanpass@4chan.org?subject=4chan%20Pass%20-%20Purchase%20Support', - textContent: 'Email 4chan', - target: '_blank', - tabIndex: -1 - }) - ]); - } - if (!Conf['Use Recaptcha v1 in Reports'] && !Conf['Force Noscript Captcha'] && Main.jsEnabled) { - return new MutationObserver(function() { - Report.fit('iframe[src^="https://www.google.com/recaptcha/api2/frame"]'); - return Report.fit('body'); - }).observe(d.body, { - childList: true, - attributes: true, - subtree: true - }); - } else { - return Report.fit('body'); - } - }, - fit: function(selector) { - var dy, el; - if (!((el = $(selector, doc)) && getComputedStyle(el).visibility !== 'hidden')) { - return; - } - dy = el.getBoundingClientRect().bottom - doc.clientHeight + 8; - if (dy > 0) { - return window.resizeBy(0, dy); - } - }, - archive: function() { - var link, message, types, url; - Redirect.init(); - if (!(url = Redirect.to('report', { - boardID: g.BOARD.ID, - postID: Report.postID - }))) { - return; - } - if ((message = $('h3')) && /Report submitted!/.test(message.textContent)) { - if (location.hash === '#redirect') { - $.globalEval('self.close = function(){};'); - window.resizeTo(700, 475); - location.replace(url); - } - return; - } - link = $.el('a', { - href: url, - textContent: 'Report to archive' - }); - $.on(link, 'click', function(e) { - if (!(e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0)) { - return window.resizeTo(700, 475); - } - }); - $.add(d.body, [$.tn(' ['), link, $.tn(']')]); - if (types = $.id('reportTypes')) { - return $.on(types, 'change', function(e) { - return $('form').action = e.target.value === 'illegal' ? '#redirect' : ''; - }); - } - } - }; - - ThreadLinks = { - init: function() { - if (!(g.VIEW === 'index' && Conf['Open Threads in New Tab'])) { - return; - } - Post.callbacks.push({ - name: 'Thread Links', - cb: this.node - }); - return CatalogThread.callbacks.push({ - name: 'Thread Links', - cb: this.catalogNode - }); - }, - node: function() { - if (this.isReply || this.isClone) { - return; - } - return ThreadLinks.process($('.replylink', this.nodes.info)); - }, - catalogNode: function() { - return ThreadLinks.process(this.nodes.thumb.parentNode); - }, - process: function(link) { - return link.target = '_blank'; - } - }; - - Time = { - init: function() { - var ref; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Time Formatting'])) { - return; - } - return Post.callbacks.push({ - name: 'Time Formatting', - cb: this.node - }); - }, - node: function() { - if (this.isClone) { - return; - } - return this.nodes.date.textContent = Time.format(Conf['time'], this.info.date); - }, - format: function(formatString, date) { - return formatString.replace(/%(.)/g, function(s, c) { - if (c in Time.formatters) { - return Time.formatters[c].call(date); - } else { - return s; - } - }); - }, - day: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], - month: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], - zeroPad: function(n) { - if (n < 10) { - return "0" + n; - } else { - return n; - } - }, - formatters: { - a: function() { - return Time.day[this.getDay()].slice(0, 3); - }, - A: function() { - return Time.day[this.getDay()]; - }, - b: function() { - return Time.month[this.getMonth()].slice(0, 3); - }, - B: function() { - return Time.month[this.getMonth()]; - }, - d: function() { - return Time.zeroPad(this.getDate()); - }, - e: function() { - return this.getDate(); - }, - H: function() { - return Time.zeroPad(this.getHours()); - }, - I: function() { - return Time.zeroPad(this.getHours() % 12 || 12); - }, - k: function() { - return this.getHours(); - }, - l: function() { - return this.getHours() % 12 || 12; - }, - m: function() { - return Time.zeroPad(this.getMonth() + 1); - }, - M: function() { - return Time.zeroPad(this.getMinutes()); - }, - p: function() { - if (this.getHours() < 12) { - return 'AM'; - } else { - return 'PM'; - } - }, - P: function() { - if (this.getHours() < 12) { - return 'am'; - } else { - return 'pm'; - } - }, - S: function() { - return Time.zeroPad(this.getSeconds()); - }, - y: function() { - return this.getFullYear().toString().slice(2); - }, - Y: function() { - return this.getFullYear(); - }, - '%': function() { - return '%'; - } - } - }; - - Settings = { - init: function() { - var add, link, settings; - link = $.el('a', { - className: 'settings-link fa fa-wrench', - textContent: 'Settings', - title: '4chan X Settings', - href: 'javascript:;' - }); - $.on(link, 'click', Settings.open); - Header.addShortcut(link); - add = this.addSection; - add('Main', this.main); - add('Filter', this.filter); - add('Sauce', this.sauce); - add('Advanced', this.advanced); - add('Keybinds', this.keybinds); - $.on(d, 'AddSettingsSection', Settings.addSection); - $.on(d, 'OpenSettings', function(e) { - return Settings.open(e.detail); - }); - if (Conf['Disable Native Extension']) { - if ($.hasStorage) { - settings = JSON.parse(localStorage.getItem('4chan-settings')) || {}; - if (settings.disableAll) { - return; - } - settings.disableAll = true; - return localStorage.setItem('4chan-settings', JSON.stringify(settings)); - } else { - return $.onExists(doc, 'body', function() { - return $.global(function() { - return window.Config.disableAll = true; - }); - }); - } - } - }, - open: function(openSection) { - var dialog, k, len1, link, links, overlay, ref, section, sectionToOpen; - if (Settings.overlay) { - return; - } - $.event('CloseMenu'); - Settings.dialog = dialog = $.el('div', { - id: 'fourchanx-settings', - className: 'dialog' - }); - $.extend(dialog, { - innerHTML: "
" - }); - Settings.overlay = overlay = $.el('div', { - id: 'overlay' - }); - $.on($('.export', dialog), 'click', Settings["export"]); - $.on($('.import', dialog), 'click', Settings["import"]); - $.on($('.reset', dialog), 'click', Settings.reset); - $.on($('input', dialog), 'change', Settings.onImport); - links = []; - ref = Settings.sections; - for (k = 0, len1 = ref.length; k < len1; k++) { - section = ref[k]; - link = $.el('a', { - className: "tab-" + section.hyphenatedTitle, - textContent: section.title, - href: 'javascript:;' - }); - $.on(link, 'click', Settings.openSection.bind(section)); - links.push(link, $.tn(' | ')); - if (section.title === openSection) { - sectionToOpen = link; - } - } - links.pop(); - $.add($('.sections-list', dialog), links); - if (openSection !== 'none') { - (sectionToOpen ? sectionToOpen : links[0]).click(); - } - $.on($('.close', dialog), 'click', Settings.close); - $.on(overlay, 'click', Settings.close); - $.add(d.body, [overlay, dialog]); - return $.event('OpenSettings', null, dialog); - }, - close: function() { - var ref; - if (!Settings.dialog) { - return; - } - if ((ref = d.activeElement) != null) { - ref.blur(); - } - $.rm(Settings.overlay); - $.rm(Settings.dialog); - delete Settings.overlay; - return delete Settings.dialog; - }, - sections: [], - addSection: function(title, open) { - var hyphenatedTitle, ref; - if (typeof title !== 'string') { - ref = title.detail, title = ref.title, open = ref.open; - } - hyphenatedTitle = title.toLowerCase().replace(/\s+/g, '-'); - return Settings.sections.push({ - title: title, - hyphenatedTitle: hyphenatedTitle, - open: open - }); - }, - openSection: function() { - var section, selected; - if (selected = $('.tab-selected', Settings.dialog)) { - $.rmClass(selected, 'tab-selected'); - } - $.addClass($(".tab-" + this.hyphenatedTitle, Settings.dialog), 'tab-selected'); - section = $('section', Settings.dialog); - $.rmAll(section); - section.className = "section-" + this.hyphenatedTitle; - this.open(section, g); - section.scrollTop = 0; - return $.event('OpenSettings', null, section); - }, - warnings: { - localStorage: function(cb) { - var why; - if ($.cantSync) { - why = $.cantSet ? 'save your settings' : 'synchronize settings between tabs'; - return cb($.el('li', { - textContent: "4chan X needs local storage to " + why + ".\nEnable it on boards.4chan.org in your browser's privacy settings (may be listed as part of \"local data\" or \"cookies\")." - })); - } - }, - ads: function(cb) { - return $.onExists(doc, '.ad-cnt', function(ad) { - return $.onExists(ad, 'img', function() { - return cb($.el('li', { - innerHTML: "To protect yourself from malicious ads, you should block ads on 4chan." - })); - }); - }); - } - }, - main: function(section) { - var addWarning, arr, button, container, containers, description, div, fs, input, inputs, items, key, level, obj, ref, ref1, warning, warnings; - warnings = $.el('fieldset', { - hidden: true - }, { - innerHTML: "Warnings
    " - }); - addWarning = function(item) { - $.add($('ul', warnings), item); - return warnings.hidden = false; - }; - ref = Settings.warnings; - for (key in ref) { - warning = ref[key]; - warning(addWarning); - } - $.add(section, warnings); - items = {}; - inputs = {}; - ref1 = Config.main; - for (key in ref1) { - obj = ref1[key]; - fs = $.el('fieldset', { - innerHTML: "" + E(key) + "" - }); - containers = [fs]; - for (key in obj) { - arr = obj[key]; - description = arr[1]; - div = $.el('div', { - innerHTML: ": " + E(description) + "" - }); - if ($.engine !== 'gecko' && key === 'Remember QR Size') { - div.hidden = true; - } - input = $('input', div); - $.on(input, 'change', function() { - this.parentNode.parentNode.dataset.checked = this.checked; - return $.cb.checked.call(this); - }); - items[key] = Conf[key]; - inputs[key] = input; - level = arr[2] || 0; - if (containers.length <= level) { - container = $.el('div', { - className: 'suboption-list' - }); - $.add(containers[containers.length - 1].lastElementChild, container); - containers[level] = container; - } else if (containers.length > level + 1) { - containers.splice(level + 1, containers.length - (level + 1)); - } - $.add(containers[level], div); - } - $.add(section, fs); - } - $.get(items, function(items) { - var val; - for (key in items) { - val = items[key]; - inputs[key].checked = val; - inputs[key].parentNode.parentNode.dataset.checked = val; - } - }); - div = $.el('div', { - innerHTML: ": Clear manually-hidden threads and posts on all boards. Reload the page to apply." - }); - button = $('button', div); - $.get({ - hiddenThreads: {}, - hiddenPosts: {} - }, function(arg) { - var ID, board, hiddenNum, hiddenPosts, hiddenThreads, ref2, ref3, thread; - hiddenThreads = arg.hiddenThreads, hiddenPosts = arg.hiddenPosts; - hiddenNum = 0; - ref2 = hiddenThreads.boards; - for (ID in ref2) { - board = ref2[ID]; - hiddenNum += Object.keys(board).length; - } - ref3 = hiddenPosts.boards; - for (ID in ref3) { - board = ref3[ID]; - for (ID in board) { - thread = board[ID]; - hiddenNum += Object.keys(thread).length; - } - } - return button.textContent = "Hidden: " + hiddenNum; - }); - $.on(button, 'click', function() { - this.textContent = 'Hidden: 0'; - return $.get('hiddenThreads', {}, function(arg) { - var boardID, hiddenThreads; - hiddenThreads = arg.hiddenThreads; - if ($.hasStorage) { - for (boardID in hiddenThreads.boards) { - localStorage.removeItem("4chan-hide-t-" + boardID); - } - } - return $["delete"](['hiddenThreads', 'hiddenPosts']); - }); - }); - return $.after($('input[name="Stubs"]', section).parentNode.parentNode, div); - }, - "export": function() { - return $.get(Conf, function(Conf) { - return Settings.downloadExport({ - version: g.VERSION, - date: Date.now(), - Conf: Conf - }); - }); - }, - downloadExport: function(data) { - var a, p; - a = $.el('a', { - download: "4chan X v" + g.VERSION + "-" + data.date + ".json", - href: "data:application/json;base64," + (btoa(unescape(encodeURIComponent(JSON.stringify(data, null, 2))))) - }); - p = $('.imp-exp-result', Settings.dialog); - $.rmAll(p); - $.add(p, a); - return a.click(); - }, - "import": function() { - return $('input[type=file]', this.parentNode).click(); - }, - onImport: function() { - var file, output, reader; - if (!(file = this.files[0])) { - return; - } - this.value = null; - output = $('.imp-exp-result'); - if (!confirm('Your current settings will be entirely overwritten, are you sure?')) { - output.textContent = 'Import aborted.'; - return; - } - reader = new FileReader(); - reader.onload = function(e) { - var err; - try { - return Settings.loadSettings(JSON.parse(e.target.result), function(err) { - if (err) { - return output.textContent = 'Import failed due to an error.'; - } else if (confirm('Import successful. Reload now?')) { - return window.location.reload(); - } - }); - } catch (_error) { - err = _error; - output.textContent = 'Import failed due to an error.'; - return c.error(err.stack); - } - }; - return reader.readAsText(file); - }, - convertFrom: { - loadletter: function(data) { - var base1, boardID, convertSettings, key, ref, ref1, threadData, threadID, threads, val; - convertSettings = function(data, map) { - var newKey, prevKey; - for (prevKey in map) { - newKey = map[prevKey]; - if (newKey) { - data.Conf[newKey] = data.Conf[prevKey]; - } - delete data.Conf[prevKey]; - } - return data; - }; - data = convertSettings(data, { - 'Disable 4chan\'s extension': 'Disable Native Extension', - 'Comment Auto-Expansion': '', - 'Remove Slug': '', - 'Check for Updates': '', - 'Recursive Filtering': 'Recursive Hiding', - 'Reply Hiding': 'Reply Hiding Buttons', - 'Thread Hiding': 'Thread Hiding Buttons', - 'Show Stubs': 'Stubs', - 'Image Auto-Gif': 'Replace GIF', - 'Reveal Spoilers': 'Reveal Spoiler Thumbnails', - 'Expand From Current': 'Expand from here', - 'Post in Title': 'Thread Excerpt', - 'Current Page': 'Page Count in Stats', - 'Current Page Position': '', - 'Alternative captcha': 'Use Recaptcha v1', - 'Auto Submit': 'Post on Captcha Completion', - 'Open Reply in New Tab': 'Open Post in New Tab', - 'Remember QR size': 'Remember QR Size', - 'Remember Subject': '', - 'Quote Inline': 'Quote Inlining', - 'Quote Preview': 'Quote Previewing', - 'Indicate OP quote': 'Mark OP Quotes', - 'Indicate You quote': 'Mark Quotes of You', - 'Indicate Cross-thread Quotes': 'Mark Cross-thread Quotes', - 'uniqueid': 'uniqueID', - 'mod': 'capcode', - 'email': '', - 'country': 'flag', - 'md5': 'MD5', - 'openEmptyQR': 'Open empty QR', - 'openQR': 'Open QR', - 'openOptions': 'Open settings', - 'close': 'Close', - 'spoiler': 'Spoiler tags', - 'sageru': 'Toggle sage', - 'code': 'Code tags', - 'submit': 'Submit QR', - 'watch': 'Watch', - 'update': 'Update', - 'unreadCountTo0': '', - 'expandAllImages': 'Expand images', - 'expandImage': 'Expand image', - 'zero': 'Front page', - 'nextPage': 'Next page', - 'previousPage': 'Previous page', - 'nextThread': 'Next thread', - 'previousThread': 'Previous thread', - 'expandThread': 'Expand thread', - 'openThreadTab': 'Open thread', - 'openThread': 'Open thread tab', - 'nextReply': 'Next reply', - 'previousReply': 'Previous reply', - 'hide': 'Hide', - 'Scrolling': 'Auto Scroll', - 'Verbose': '' - }); - data.Conf.sauces = data.Conf.sauces.replace(/\$\d/g, function(c) { - switch (c) { - case '$1': - return '%TURL'; - case '$2': - return '%URL'; - case '$3': - return '%MD5'; - case '$4': - return '%board'; - default: - return c; - } - }); - ref = Config.hotkeys; - for (key in ref) { - val = ref[key]; - if (key in data.Conf) { - data.Conf[key] = data.Conf[key].replace(/ctrl|alt|meta/g, function(s) { - return "" + (s[0].toUpperCase()) + s.slice(1); - }).replace(/(^|.+\+)[A-Z]$/g, function(s) { - return "Shift+" + s.slice(0, -1) + (s.slice(-1).toLowerCase()); - }); - } - } - if (data.WatchedThreads) { - data.Conf['watchedThreads'] = { - boards: {} - }; - ref1 = data.WatchedThreads; - for (boardID in ref1) { - threads = ref1[boardID]; - for (threadID in threads) { - threadData = threads[threadID]; - ((base1 = data.Conf['watchedThreads'].boards)[boardID] || (base1[boardID] = {}))[threadID] = { - excerpt: threadData.textContent - }; - } - } - } - return data; - } - }, - upgrade: function(data, version) { - var boardID, changes, compareString, k, key, len1, name, record, ref, ref1, ref2, ref3, ref4, ref5, rice, set, type, uids, value; - changes = {}; - set = function(key, value) { - return data[key] = changes[key] = value; - }; - compareString = version.replace(/\d+/g, function(x) { - return ('0000' + x).slice(-5); - }); - if (compareString < '00001.00011.00008.00000') { - if (data['Fixed Thread Watcher'] == null) { - set('Fixed Thread Watcher', (ref = data['Toggleable Thread Watcher']) != null ? ref : true); - } - if (data['Exempt Archives from Encryption'] == null) { - set('Exempt Archives from Encryption', (ref1 = data['Except Archives from Encryption']) != null ? ref1 : false); - } - } - if (compareString < '00001.00011.00010.00001') { - if (data['selectedArchives'] != null) { - uids = { - "Moe": 0, - "4plebs Archive": 3, - "Nyafuu Archive": 4, - "Love is Over": 5, - "Rebecca Black Tech": 8, - "warosu": 10, - "fgts": 15, - "not4plebs": 22, - "DesuStorage": 23, - "fireden.net": 24, - "disabled": null - }; - ref2 = data['selectedArchives']; - for (boardID in ref2) { - record = ref2[boardID]; - for (type in record) { - name = record[type]; - if (name in uids) { - record[type] = uids[name]; - } - } - } - set('selectedArchives', data['selectedArchives']); - } - } - if (compareString < '00001.00011.00016.00000') { - if ((rice = Config['usercss'].match(/\/\* Board title rice \*\/(?:\n.+)*/)[0])) { - if ((data['usercss'] != null) && data['usercss'].indexOf(rice) < 0) { - set('usercss', rice + '\n\n' + data['usercss']); - } - } - } - if (compareString < '00001.00011.00017.00000') { - ref3 = ['Persistent QR', 'Color User IDs', 'Fappe Tyme', 'Werk Tyme', 'Highlight Posts Quoting You', 'Highlight Own Posts']; - for (k = 0, len1 = ref3.length; k < len1; k++) { - key = ref3[k]; - if (data[key] == null) { - set(key, key === 'Persistent QR'); - } - } - } - if (compareString < '00001.00011.00017.00006') { - if (data['sauces'] != null) { - set('sauces', data['sauces'].replace(/^(#?\s*)http:\/\/iqdb\.org\//mg, '$1//iqdb.org/')); - } - } - if (compareString < '00001.00011.00019.00003' && !Settings.overlay) { - $.queueTask(function() { - return Settings.warnings.ads(function(item) { - return new Notice('warning', slice.call(item.childNodes)); - }); - }); - } - if (compareString < '00001.00011.00020.00003') { - ref4 = { - 'Inline Cross-thread Quotes Only': false, - 'Pass Link': true - }; - for (key in ref4) { - value = ref4[key]; - if (data[key] == null) { - set(key, value); - } - } - } - if (compareString < '00001.00011.00021.00003') { - if (data['Remember Your Posts'] == null) { - set('Remember Your Posts', (ref5 = data['Mark Quotes of You']) != null ? ref5 : true); - } - } - if (compareString < '00001.00011.00022.00000') { - if (data['sauces'] != null) { - set('sauces', data['sauces'].replace(/^(#?\s*https:\/\/www\.google\.com\/searchbyimage\?image_url=%(?:IMG|URL))%3Fs\.jpg/mg, '$1')); - set('sauces', data['sauces'].replace(/^#?\s*https:\/\/www\.google\.com\/searchbyimage\?image_url=%(?:IMG|T?URL)(?=$|;)/mg, '$&&safe=off')); - } - } - if (compareString < '00001.00011.00022.00002') { - if ((data['Use Recaptcha v1 in Reports'] == null) && data['Use Recaptcha v1'] && !data['Use Recaptcha v2 in Reports']) { - set('Use Recaptcha v1 in Reports', true); - } - } - if (compareString < '00001.00011.00024.00000') { - if ((data['JSON Navigation'] != null) && (data['JSON Index'] == null)) { - set('JSON Index', data['JSON Navigation']); - } - } - if (compareString < '00001.00011.00026.00000') { - if ((data['Oekaki Links'] != null) && (data['Edit Link'] == null)) { - set('Edit Link', data['Oekaki Links']); - } - if (data['Inline Cross-thread Quotes Only'] == null) { - set('Inline Cross-thread Quotes Only', true); - } - } - if (compareString < '00001.00011.00030.00000') { - if (data['Quote Threading'] && (data['Thread Quotes'] == null)) { - set('Thread Quotes', true); - } - } - return changes; - }, - loadSettings: function(data, cb) { - if (data.version.split('.')[0] === '2') { - data = Settings.convertFrom.loadletter(data); - } else if (data.version !== g.VERSION) { - Settings.upgrade(data.Conf, data.version); - } - return $.clear(function(err) { - if (err) { - return cb(err); - } - return $.set(data.Conf, cb); - }); - }, - reset: function() { - if (confirm('Your current settings will be entirely wiped, are you sure?')) { - return $.clear(function(err) { - if (err) { - return $('.imp-exp-result').textContent = 'Import failed due to an error.'; - } else if (confirm('Reset successful. Reload now?')) { - return window.location.reload(); - } - }); - } - }, - filter: function(section) { - var select; - $.extend(section, { - innerHTML: "
    " - }); - select = $('select', section); - $.on(select, 'change', Settings.selectFilter); - return Settings.selectFilter.call(select); - }, - selectFilter: function() { - var div, name, ta; - div = this.nextElementSibling; - if ((name = this.value) !== 'guide') { - $.rmAll(div); - ta = $.el('textarea', { - name: name, - className: 'field', - spellcheck: false - }); - $.get(name, Conf[name], function(item) { - return ta.value = item[name]; - }); - $.on(ta, 'change', $.cb.value); - $.add(div, ta); - return; - } - $.extend(div, { - innerHTML: "
    Filter is disabled.

    Use regular expressions, one per line.
    Lines starting with a # will be ignored.
    For example, /weeaboo/i will filter posts containing the string \`weeaboo\`, case-insensitive.
    MD5 filtering uses exact string matching, not regular expressions.

      You can use these settings with each regular expression, separate them with semicolons:
    • Per boards, separate them with commas. It is global if not specified.
      For example: boards:a,jp;.
    • In case of a global rule, select boards to be excluded from the filter.
      For example: exclude:vg,v;.
    • Filter OPs only along with their threads (\`only\`), replies only (\`no\`), or both (\`yes\`, this is default).
      For example: op:only;, op:no; or op:yes;.
    • Overrule the \`Show Stubs\` setting if specified: create a stub (\`yes\`) or not (\`no\`).
      For example: stub:yes; or stub:no;.
    • Highlight instead of hiding. You can specify a class name to use with a userstyle.
      For example: highlight; or highlight:wallpaper;.
    • Highlighted OPs will have their threads put on top of the board index by default.
      For example: top:yes; or top:no;.

    Note: If you're using the native catalog rather than 4chan X's catalog, 4chan X's filters do not apply there.
    The native catalog has its own separate filter list.

    " - }); - return $('.warning', div).hidden = Conf['Filter']; - }, - sauce: function(section) { - var ta; - $.extend(section, { - innerHTML: "
    Sauce is disabled.
    Lines starting with a # will be ignored.
    You can specify a display text by appending ;text:[text] to the URL.
    You can specify the applicable boards by appending ;boards:[board1],[board2].
    You can specify the applicable file types by appending ;types:[extension1],[extension2].
    You can open links with scripts and popups disabled by appending ;sandbox.
      These parameters will be replaced by their corresponding values:
    • %TURL: Thumbnail URL.
    • %URL: Full image URL.
    • %IMG: Full image URL for GIF, JPG, and PNG; thumbnail URL for other types.
    • %MD5: MD5 hash in base64.
    • %sMD5: MD5 hash in base64 using - and _.
    • %hMD5: MD5 hash in hexadecimal.
    • %name: Original file name.
    • %board: Current board.
    • %%, %semi: Literal % and ;.
    " - }); - $('.warning', section).hidden = Conf['Sauce']; - ta = $('textarea', section); - $.get('sauces', Conf['sauces'], function(item) { - return ta.value = item['sauces']; - }); - return $.on(ta, 'change', $.cb.value); - }, - advanced: function(section) { - var aa, ab, applyCSS, archBoards, archive, boardID, boardOptions, boardSelect, boards, customCSS, files, i, input, inputs, interval, item, items, k, len1, len2, len3, len4, len5, len6, len7, name, o, q, ref, ref1, ref2, ref3, ref4, ref5, ref6, row, rows, software, ta, table, u, uid, v, warning, withCredentials, z; - $.extend(section, { - innerHTML: "
    Archiver
    404 Redirect is disabled.
    Thread redirectionPost fetchingFile redirection
    Captcha Language
    Choose from list of language codes. Leave blank to autoselect.
    Custom Board Navigation
    New lines will be converted into spaces.

    In the following examples for /g/, g can be changed to a different board ID (a, b, etc...), the current board (current), or the Twitter link (@).
    Board link: g
    Archive link: g-archive
    Internal archive link: g-expired
    Title link: g-title
    Board link (Replace with title when on that board): g-replace
    Full text link: g-full
    Custom text link: g-text:"Install Gentoo"
    Index-only link: g-index
    Catalog-only link: g-catalog
    Index mode: g-mode:"infinite scrolling"
    Index sort: g-sort:"creation date"
    External link: external-text:"Google","http://www.google.com"
    Combinations are possible: g-index-text:"Technology Index"
    Full board list toggle: toggle-all

    [ toggle-all ] [current-title] [g-title / a-title / jp-title] [x / wsg / h] [t-text:"Piracy"]
    will give you
    [ + ] [Technology] [Technology / Anime & Manga / Otaku Culture] [x / wsg / h] [Piracy]
    if you are on /g/.
    Time Formatting is disabled.
    :
    Day: %a, %A, %d, %e
    Month: %m, %b, %B
    Year: %y, %Y
    Hour: %k, %H, %l, %I, %p, %P
    Minute: %M
    Second: %S
    Literal %: %%
    Quote Backlinks formatting is disabled.
    :
    File Info Formatting is disabled.
    :
    Link: %l (truncated), %L (untruncated), %T (4chan filename)
    Filename: %n (truncated), %N (untruncated), %t (4chan filename)
    Spoiler indicator: %p
    Size: %B (Bytes), %K (KB), %M (MB), %s (4chan default)
    Resolution: %r (Displays 'PDF' for PDF files)
    Tag: %g
    Literal %: %%
    Quick Reply Personas

    One item per line.
    Items will be added in the relevant input's auto-completion list.
    Password items will always be used, since there is no password input.
    Lines starting with a # will be ignored.

      You can use these settings with each item, separate them with semicolons:
    • Possible items are: name, options (or equivalently email), subject and password.
    • Wrap values of items with quotes, like this: options:"sage".
    • Force values as defaults with the always keyword, for example: options:"sage";always.
    • Select specific boards for an item, separated with commas, for example: options:"sage";boards:jp;always.
    Unread Favicon is disabled.
    Thread Updater is disabled.
    Interval: seconds
    Custom Cooldown Time
    Seconds:
    " - }); - ref = $$('.warning', section); - for (k = 0, len1 = ref.length; k < len1; k++) { - warning = ref[k]; - warning.hidden = Conf[warning.dataset.feature]; - } - items = {}; - inputs = {}; - ref1 = ['captchaLanguage', 'boardnav', 'time', 'backlink', 'fileInfo', 'favicon', 'usercss', 'customCooldown']; - for (q = 0, len2 = ref1.length; q < len2; q++) { - name = ref1[q]; - input = $("[name='" + name + "']", section); - items[name] = Conf[name]; - inputs[name] = input; - if (name === 'usercss') { - $.on(input, 'change', $.cb.value); - } else if (name === 'favicon') { - $.on(input, 'change', $.cb.value); - $.on(input, 'change', Settings[name]); - } else { - $.on(input, 'input', $.cb.value); - if (name in Settings) { - $.on(input, 'input', Settings[name]); - } - } - } - ta = $('.personafield', section); - $.get('QR.personas', Conf['QR.personas'], function(item) { - return ta.value = item['QR.personas']; - }); - $.on(ta, 'change', $.cb.value); - $.get(items, function(items) { - var key, val; - for (key in items) { - val = items[key]; - input = inputs[key]; - input.value = val; - if (key in Settings && key !== 'usercss') { - Settings[key].call(input); - } - } - }); - interval = $('input[name="Interval"]', section); - customCSS = $('input[name="Custom CSS"]', section); - applyCSS = $('#apply-css', section); - interval.value = Conf['Interval']; - customCSS.checked = Conf['Custom CSS']; - inputs['usercss'].disabled = !Conf['Custom CSS']; - applyCSS.disabled = !Conf['Custom CSS']; - $.on(interval, 'change', ThreadUpdater.cb.interval); - $.on(customCSS, 'change', Settings.togglecss); - $.on(applyCSS, 'click', Settings.usercss); - archBoards = {}; - ref2 = Redirect.archives; - for (u = 0, len3 = ref2.length; u < len3; u++) { - ref3 = ref2[u], uid = ref3.uid, name = ref3.name, boards = ref3.boards, files = ref3.files, software = ref3.software, withCredentials = ref3.withCredentials; - for (v = 0, len4 = boards.length; v < len4; v++) { - boardID = boards[v]; - o = archBoards[boardID] || (archBoards[boardID] = { - thread: [[], []], - post: [[], []], - file: [[], []] - }); - i = +(!!withCredentials); - archive = [uid != null ? uid : name, name]; - o.thread[i].push(archive); - if (software === 'foolfuuka') { - o.post[i].push(archive); - } - if (indexOf.call(files, boardID) >= 0) { - o.file[i].push(archive); - } - } - } - for (boardID in archBoards) { - o = archBoards[boardID]; - ref4 = ['thread', 'post', 'file']; - for (z = 0, len5 = ref4.length; z < len5; z++) { - item = ref4[z]; - i = o[item][0].length ? 1 : 0; - o[item][i].push([null, 'disabled']); - o[item] = o[item][0].concat(o[item][1]); - } - } - rows = []; - boardOptions = []; - ref5 = Object.keys(archBoards).sort(); - for (aa = 0, len6 = ref5.length; aa < len6; aa++) { - boardID = ref5[aa]; - row = $.el('tr', { - className: "board-" + boardID - }); - row.hidden = boardID !== g.BOARD.ID; - boardOptions.push($.el('option', { - textContent: "/" + boardID + "/", - value: "board-" + boardID, - selected: boardID === g.BOARD.ID - })); - o = archBoards[boardID]; - ref6 = ['thread', 'post', 'file']; - for (ab = 0, len7 = ref6.length; ab < len7; ab++) { - item = ref6[ab]; - $.add(row, Settings.addArchiveCell(boardID, o, item)); - } - rows.push(row); - } - if (!(g.BOARD.ID in archBoards)) { - rows[0].hidden = false; - } - $.add($('tbody', section), rows); - boardSelect = $('#archive-board-select', section); - $.add(boardSelect, boardOptions); - table = $('#archive-table', section); - $.on(boardSelect, 'change', function() { - $('tbody > :not([hidden])', table).hidden = true; - return $("tbody > ." + this.value, table).hidden = false; - }); - $.get('selectedArchives', Conf['selectedArchives'], function(arg) { - var data, id, select, selectedArchives, type; - selectedArchives = arg.selectedArchives; - for (boardID in selectedArchives) { - data = selectedArchives[boardID]; - for (type in data) { - id = data[type]; - if (select = $("select[data-boardid='" + boardID + "'][data-type='" + type + "']", section)) { - select.value = JSON.stringify(id); - } - } - } - }); - }, - addArchiveCell: function(boardID, data, type) { - var archive, i, length, options, select, td; - length = data[type].length; - td = $.el('td', { - className: 'archive-cell' - }); - if (!length) { - td.textContent = '--'; - return td; - } - options = []; - i = 0; - while (i < length) { - archive = data[type][i++]; - options.push($.el('option', { - value: JSON.stringify(archive[0]), - textContent: archive[1] - })); - } - $.extend(td, { - innerHTML: "" - }); - select = td.firstElementChild; - if (!(select.disabled = length === 1)) { - select.setAttribute('data-boardid', boardID); - select.setAttribute('data-type', type); - $.on(select, 'change', Settings.saveSelectedArchive); - } - $.add(select, options); - return td; - }, - saveSelectedArchive: function() { - return $.get('selectedArchives', Conf['selectedArchives'], (function(_this) { - return function(arg) { - var name1, selectedArchives; - selectedArchives = arg.selectedArchives; - (selectedArchives[name1 = _this.dataset.boardid] || (selectedArchives[name1] = {}))[_this.dataset.type] = JSON.parse(_this.value); - return $.set('selectedArchives', selectedArchives); - }; - })(this)); - }, - boardnav: function() { - return Header.generateBoardList(this.value); - }, - time: function() { - return this.nextElementSibling.textContent = Time.format(this.value, new Date()); - }, - backlink: function() { - return this.nextElementSibling.textContent = this.value.replace(/%(?:id|%)/g, function(x) { - return { - '%id': '123456789', - '%%': '%' - }[x]; - }); - }, - fileInfo: function() { - var data; - data = { - isReply: true, - file: { - url: '//i.4cdn.org/g/1334437723720.jpg', - name: 'd9bb2efc98dd0df141a94399ff5880b7.jpg', - size: '276 KB', - sizeInBytes: 276 * 1024, - dimensions: '1280x720', - isImage: true, - isVideo: false, - isSpoiler: true, - tag: 'Loop' - } - }; - return FileInfo.format(this.value, data, this.nextElementSibling); - }, - favicon: function() { - var img; - Favicon["switch"](); - if (g.VIEW === 'thread' && Conf['Unread Favicon']) { - Unread.update(); - } - img = this.nextElementSibling.children; - img[0].src = Favicon["default"]; - img[1].src = Favicon.unreadSFW; - img[2].src = Favicon.unreadNSFW; - return img[3].src = Favicon.unreadDead; - }, - togglecss: function() { - if ($('textarea[name=usercss]', $.x('ancestor::fieldset[1]', this)).disabled = $.id('apply-css').disabled = !this.checked) { - CustomCSS.rmStyle(); - } else { - CustomCSS.addStyle(); - } - return $.cb.checked.call(this); - }, - usercss: function() { - return CustomCSS.update(); - }, - keybinds: function(section) { - var arr, input, inputs, items, key, ref, tbody, tr; - $.extend(section, { - innerHTML: "
    Keybinds are disabled.
    Allowed keys: a-z, 0-9, Ctrl, Shift, Alt, Meta, Enter, Esc, Up, Down, Right, Left.
    Press Backspace to disable a keybind.
    ActionsKeybinds
    " - }); - $('.warning', section).hidden = Conf['Keybinds']; - tbody = $('tbody', section); - items = {}; - inputs = {}; - ref = Config.hotkeys; - for (key in ref) { - arr = ref[key]; - tr = $.el('tr', { - innerHTML: "" + E(arr[1]) + "" - }); - input = $('input', tr); - input.name = key; - input.spellcheck = false; - items[key] = Conf[key]; - inputs[key] = input; - $.on(input, 'keydown', Settings.keybind); - $.add(tbody, tr); - } - return $.get(items, function(items) { - var val; - for (key in items) { - val = items[key]; - inputs[key].value = val; - } - }); - }, - keybind: function(e) { - var key; - if (e.keyCode === 9) { - return; - } - e.preventDefault(); - e.stopPropagation(); - if ((key = Keybinds.keyCode(e)) == null) { - return; - } - this.value = key; - return $.cb.value.call(this); - } - }; - - Main = { - init: function() { - var db, flatten, items, k, key, len1, ref; - if (d.body && !$('title', d.head)) { - return; - } - if (window['4chan X antidup']) { - return; - } - window['4chan X antidup'] = true; - if (location.hostname === 'www.google.com') { - $.get('Captcha Fixes', true, function(arg) { - var enabled; - enabled = arg['Captcha Fixes']; - if (enabled) { - return $.ready(function() { - return Captcha.fixes.init(); - }); - } - }); - return; - } - $.global(function() { - var k, len1, nuke, prop, ref; - nuke = function(obj, prop) { - try { - return Object.defineProperty(obj, prop, { - configurable: false, - get: function() { - throw new Error(); - }, - set: function() { - throw new Error(); - } - }); - } catch (_error) {} - }; - ref = ['atOptions', 'adsterra_key', 'EpmadsConfig', 'epmads_key', 'EpomConfig', 'epom_key', 'exoDocumentProtocol']; - for (k = 0, len1 = ref.length; k < len1; k++) { - prop = ref[k]; - nuke(window, prop); - } - }); - $.on(window, 'beforescriptexecute', function(e) { - var host, ref, ref1; - host = (ref = e.target.src.split('/')[2]) != null ? (ref1 = ref.match(/[^.]+\.[^.]+$/)) != null ? ref1[0] : void 0 : void 0; - if (host === 'bnhtml.com' || host === 'ecpmrocks.com' || host === 'advertisation.com' || host === 'exoclick.com') { - return e.preventDefault(); - } - }); - $.on(d, '4chanXInitFinished', function() { - if (Main.expectInitFinished) { - return delete Main.expectInitFinished; - } else { - new Notice('error', 'Error: Multiple copies of 4chan X are enabled.'); - return $.addClass(doc, 'tainted'); - } - }); - flatten = function(parent, obj) { - var key, val; - if (obj instanceof Array) { - Conf[parent] = obj[0]; - } else if (typeof obj === 'object') { - for (key in obj) { - val = obj[key]; - flatten(key, val); - } - } else { - Conf[parent] = obj; - } - }; - flatten(null, Config); - ref = DataBoard.keys; - for (k = 0, len1 = ref.length; k < len1; k++) { - db = ref[k]; - Conf[db] = { - boards: {} - }; - } - Conf['selectedArchives'] = {}; - Conf['cooldowns'] = {}; - Conf['Index Sort'] = {}; - Conf['Except Archives from Encryption'] = false; - Conf['JSON Navigation'] = true; - Conf['Oekaki Links'] = true; - items = {}; - for (key in Conf) { - items[key] = void 0; - } - items['previousversion'] = void 0; - return $.get(items, function(items) { - return $.asap((function() { - return doc = d.documentElement; - }), function() { - var ref1, val; - if ($.cantSet) { - - } else if (items.previousversion == null) { - Main.ready(function() { - $.set('previousversion', g.VERSION); - return Settings.open(); - }); - } else if (items.previousversion !== g.VERSION) { - Main.upgrade(items); - } - for (key in Conf) { - val = Conf[key]; - Conf[key] = (ref1 = items[key]) != null ? ref1 : val; - } - return Main.initFeatures(); - }); - }); - }, - upgrade: function(items) { - var changes, previousversion; - previousversion = items.previousversion; - changes = Settings.upgrade(items, previousversion); - items.previousversion = changes.previousversion = g.VERSION; - return $.set(changes, function() { - var el, ref; - if ((ref = items['Show Updated Notifications']) != null ? ref : true) { - el = $.el('span', { - innerHTML: "4chan X has been updated to version " + E(g.VERSION) + "." - }); - return new Notice('info', el, 15); - } - }); - }, - initFeatures: function() { - var err, feature, hostname, k, len1, match, name, pathname, ref, ref1, ref2, ref3, search; - hostname = location.hostname, search = location.search; - pathname = location.pathname.split(/\/+/); - if (hostname !== 'www.4chan.org') { - g.BOARD = new Board(pathname[1]); - } - if (hostname === 'boards.4chan.org' || hostname === 'sys.4chan.org' || hostname === 'www.4chan.org') { - $.global(function() { - document.documentElement.classList.add('js-enabled'); - return window.FCX = {}; - }); - Main.jsEnabled = $.hasClass(doc, 'js-enabled'); - } - switch (hostname) { - case 'www.4chan.org': - $.onExists(doc, 'body', function() { - return $.addStyle(Main.cssWWW); - }); - Captcha.replace.init(); - return; - case 'sys.4chan.org': - if (pathname[2] === 'imgboard.php') { - if (/\bmode=report\b/.test(search)) { - Report.init(); - } else if ((match = search.match(/\bres=(\d+)/))) { - $.ready(function() { - var ref; - if (Conf['404 Redirect'] && ((ref = $.id('errmsg')) != null ? ref.textContent : void 0) === 'Error: Specified thread does not exist.') { - return Redirect.navigate('thread', { - boardID: g.BOARD.ID, - postID: +match[1] - }); - } - }); - } - } else if (pathname[2] === 'post') { - PostSuccessful.init(); - } - return; - case 'i.4cdn.org': - if (!(pathname[2] && !/s\.jpg$/.test(pathname[2]))) { - return; - } - $.asap((function() { - return d.readyState !== 'loading'; - }), function() { - var ref, video; - if (Conf['404 Redirect'] && ((ref = d.title) === '4chan - Temporarily Offline' || ref === '4chan - 404 Not Found')) { - return Redirect.navigate('file', { - boardID: g.BOARD.ID, - filename: pathname[pathname.length - 1] - }); - } else if (video = $('video')) { - if (Conf['Volume in New Tab']) { - Volume.setup(video); - } - if (Conf['Loop in New Tab']) { - video.loop = true; - video.controls = false; - video.play(); - return ImageCommon.addControls(video); - } - } - }); - return; - } - if ((ref = pathname[2]) === 'thread' || ref === 'res') { - g.VIEW = 'thread'; - g.THREADID = +pathname[3]; - } else if ((ref1 = pathname[2]) === 'catalog' || ref1 === 'archive') { - g.VIEW = pathname[2]; - } else if (pathname[2].match(/^\d*$/)) { - g.VIEW = 'index'; - } else { - return; - } - g.threads = new SimpleDict(); - g.posts = new SimpleDict(); - $.onExists(doc, 'body', Main.initStyle); - ref2 = Main.features; - for (k = 0, len1 = ref2.length; k < len1; k++) { - ref3 = ref2[k], name = ref3[0], feature = ref3[1]; - try { - feature.init(); - } catch (_error) { - err = _error; - Main.handleErrors({ - message: "\"" + name + "\" initialization crashed.", - error: err - }); - } - } - return $.ready(Main.initReady); - }, - initStyle: function() { - var keyboard, ref; - if (!Main.isThisPageLegit()) { - return; - } - if ((ref = $('link[href*=mobile]', d.head)) != null) { - ref.disabled = true; - } - $.addClass(doc, 'fourchan-x', 'seaweedchan'); - $.addClass(doc, g.VIEW === 'thread' ? 'thread-view' : g.VIEW); - if ($.engine) { - $.addClass(doc, $.engine); - } - $.onExists(doc, '.ad-cnt', function(ad) { - return $.onExists(ad, 'img', function() { - return $.addClass(doc, 'ads-loaded'); - }); - }); - if (Conf['Autohiding Scrollbar']) { - $.addClass(doc, 'autohiding-scrollbar'); - } - $.ready(function() { - if (d.body.clientHeight > doc.clientHeight && (window.innerWidth === doc.clientWidth) !== Conf['Autohiding Scrollbar']) { - Conf['Autohiding Scrollbar'] = !Conf['Autohiding Scrollbar']; - $.set('Autohiding Scrollbar', Conf['Autohiding Scrollbar']); - return $.toggleClass(doc, 'autohiding-scrollbar'); - } - }); - $.addStyle(Main.css, 'fourchanx-css'); - Main.bgColorStyle = $.el('style', { - id: 'fourchanx-bgcolor-css' - }); - keyboard = false; - $.on(d, 'mousedown', function() { - return keyboard = false; - }); - $.on(d, 'keydown', function(e) { - if (e.keyCode === 9) { - return keyboard = true; - } - }); - window.addEventListener('focus', (function() { - return doc.classList.toggle('keyboard-focus', keyboard); - }), true); - return Main.setClass(); - }, - setClass: function() { - var mainStyleSheet, setStyle, style, styleSheets; - if (g.VIEW === 'catalog') { - $.addClass(doc, $.id('base-css').href.match(/catalog_(\w+)/)[1].replace('_new', '').replace(/_+/g, '-')); - return; - } - style = 'yotsuba-b'; - mainStyleSheet = $('link[title=switch]', d.head); - styleSheets = $$('link[rel="alternate stylesheet"]', d.head); - setStyle = function() { - var bgColor, div, k, len1, styleSheet; - $.rmClass(doc, style); - style = null; - for (k = 0, len1 = styleSheets.length; k < len1; k++) { - styleSheet = styleSheets[k]; - if (styleSheet.href === (mainStyleSheet != null ? mainStyleSheet.href : void 0)) { - style = styleSheet.title.toLowerCase().replace('new', '').trim().replace(/\s+/g, '-'); - break; - } - } - if (style) { - $.addClass(doc, style); - return $.rm(Main.bgColorStyle); - } else { - div = $.el('div', { - className: 'reply' - }); - div.style.cssText = 'position: absolute; visibility: hidden;'; - $.add(d.body, div); - bgColor = window.getComputedStyle(div).backgroundColor; - $.rm(div); - Main.bgColorStyle.textContent = ".dialog, .suboption-list > div:last-of-type {\n background-color: " + bgColor + ";\n}"; - return $.after($.id('fourchanx-css'), Main.bgColorStyle); - } - }; - setStyle(); - if (!mainStyleSheet) { - return; - } - return new MutationObserver(setStyle).observe(mainStyleSheet, { - attributes: true, - attributeFilter: ['href'] - }); - }, - initReady: function() { - var msg, ref, ref1, ref2; - if (g.VIEW === 'thread' && (((ref = d.title) === '4chan - Temporarily Offline' || ref === '4chan - 404 Not Found') || ($('.board') && !$('.opContainer')))) { - ThreadWatcher.set404(g.BOARD.ID, g.THREADID, function() { - if (Conf['404 Redirect']) { - return Redirect.navigate('thread', { - boardID: g.BOARD.ID, - threadID: g.THREADID, - postID: +location.hash.match(/\d+/) - }, "/" + g.BOARD + "/"); - } - }); - return; - } - if ((ref1 = d.title) === '4chan - Temporarily Offline' || ref1 === '4chan - 404 Not Found') { - return; - } - if (((ref2 = g.VIEW) === 'index' || ref2 === 'thread') && !$('.board + *')) { - msg = $.el('div', { - innerHTML: "The page didn't load completely.
    Some features may not work unless you reload." - }); - $.on($('a', msg), 'click', function() { - return location.reload(); - }); - new Notice('warning', msg); - } - if (!(Conf['JSON Index'] && g.VIEW === 'index')) { - return Main.initThread(); - } else { - Main.expectInitFinished = true; - return $.event('4chanXInitFinished'); - } - }, - initThread: function() { - var board, err, errors, k, len1, len2, m, postRoot, posts, q, ref, ref1, scriptData, thread, threadRoot, threads; - if ((board = $('.board'))) { - threads = []; - posts = []; - ref = $$('.board > .thread', board); - for (k = 0, len1 = ref.length; k < len1; k++) { - threadRoot = ref[k]; - thread = new Thread(+threadRoot.id.slice(1), g.BOARD); - threads.push(thread); - ref1 = $$('.thread > .postContainer', threadRoot); - for (q = 0, len2 = ref1.length; q < len2; q++) { - postRoot = ref1[q]; - if ($('.postMessage', postRoot)) { - try { - posts.push(new Post(postRoot, thread, g.BOARD)); - } catch (_error) { - err = _error; - if (!errors) { - errors = []; - } - errors.push({ - message: "Parsing of Post No." + (postRoot.id.match(/\d+/)) + " failed. Post will be skipped.", - error: err - }); - } - } - } - } - if (errors) { - Main.handleErrors(errors); - } - if (g.VIEW === 'thread') { - scriptData = Get.scriptData(); - threads[0].postLimit = /\bbumplimit *= *1\b/.test(scriptData); - threads[0].fileLimit = /\bimagelimit *= *1\b/.test(scriptData); - threads[0].ipCount = (m = scriptData.match(/\bunique_ips *= *(\d+)\b/)) ? +m[1] : void 0; - } - Main.callbackNodes(Thread, threads); - return Main.callbackNodesDB(Post, posts, function() { - var len3, post, u; - for (u = 0, len3 = posts.length; u < len3; u++) { - post = posts[u]; - QuoteThreading.insert(post); - } - Main.expectInitFinished = true; - return $.event('4chanXInitFinished'); - }); - } else { - Main.expectInitFinished = true; - return $.event('4chanXInitFinished'); - } - }, - callbackNodes: function(klass, nodes) { - var cb, i, node; - i = 0; - cb = klass.callbacks; - while (node = nodes[i++]) { - cb.execute(node); - } - }, - callbackNodesDB: function(klass, nodes, cb) { - var cbs, fn, i, softTask; - i = 0; - cbs = klass.callbacks; - fn = function() { - var node; - if (!(node = nodes[i])) { - return false; - } - cbs.execute(node); - return ++i % 25; - }; - softTask = function() { - while (fn()) { - continue; - } - if (!nodes[i]) { - if (cb) { - cb(); - } - return; - } - return setTimeout(softTask, 0); - }; - return softTask(); - }, - handleErrors: function(errors) { - var div, error, k, len1, logs; - if (!(errors instanceof Array)) { - error = errors; - } else if (errors.length === 1) { - error = errors[0]; - } - if (error) { - new Notice('error', Main.parseError(error, Main.reportLink([error])), 15); - return; - } - div = $.el('div', { - innerHTML: E(errors.length) + " errors occurred." + Main.reportLink(errors).innerHTML + " [show]" - }); - $.on(div.lastElementChild, 'click', function() { - var ref; - return ref = this.textContent === 'show' ? ['hide', false] : ['show', true], this.textContent = ref[0], logs.hidden = ref[1], ref; - }); - logs = $.el('div', { - hidden: true - }); - for (k = 0, len1 = errors.length; k < len1; k++) { - error = errors[k]; - $.add(logs, Main.parseError(error)); - } - return new Notice('error', [div, logs], 30); - }, - parseError: function(data, reportLink) { - var context, error, lines, message, ref, ref1; - c.error(data.message, data.error.stack); - message = $.el('div', { - innerHTML: E(data.message) + (reportLink ? reportLink.innerHTML : "") - }); - error = $.el('div', { - textContent: (data.error.name || 'Error') + ": " + (data.error.message || 'see console for details') - }); - lines = ((ref = data.error.stack) != null ? (ref1 = ref.match(/\d+(?=:\d+\)?$)/mg)) != null ? ref1.join().replace(/^/, ' at ') : void 0 : void 0) || ''; - context = $.el('div', { - textContent: "(4chan X ccd0 v" + g.VERSION + " userscript on " + $.engine + lines + ")" - }); - return [message, error, context]; - }, - reportLink: function(errors) { - var data, details, ref, title, url; - data = errors[0]; - title = data.message; - if (errors.length > 1) { - title += " (+" + (errors.length - 1) + " other errors)"; - } - details = "[Please describe the steps needed to reproduce this error.]\n\nScript: 4chan X ccd0 v" + g.VERSION + " userscript\nUser agent: " + navigator.userAgent + "\nURL: " + location.href + "\n\n" + data.error + "\n" + (((ref = data.error.stack) != null ? ref.replace(data.error.toString(), '').trim() : void 0) || ''); - details = details.replace(/file:\/{3}.+\//g, ''); - url = "https://gitreports.com/issue/ccd0/4chan-x?issue_title=" + (encodeURIComponent(title)) + "&details=" + (encodeURIComponent(details)); - return { - innerHTML: " [report]" - }; - }, - isThisPageLegit: function() { - var ref; - if (!('thisPageIsLegit' in Main)) { - Main.thisPageIsLegit = location.hostname === 'boards.4chan.org' && !$('link[href*="favicon-status.ico"]', d.head) && ((ref = d.title) !== '4chan - Temporarily Offline' && ref !== '4chan - Error' && ref !== '504 Gateway Time-out'); - } - return Main.thisPageIsLegit; - }, - ready: function(cb) { - return $.ready(function() { - if (Main.isThisPageLegit()) { - return cb(); - } - }); - }, - css: "/*!\n" + -" * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome\n" + +boards: +"/*!\n" + +" * Font Awesome 4.6.1 by @davegandy - http://fontawesome.io - @fontawesome\n" + " * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n" + " */\n" + "@font-face {\n" + " font-family: FontAwesome;\n" + -" src: url('data:application/font-woff;base64,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') format('woff');\n" + +" src: url('data:application/font-woff;base64,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') format('woff');\n" + " font-weight: 400;\n" + " font-style: normal;\n" + "}\n" + -".fa::before {\n" + -" font-family: FontAwesome;\n" + -" font-weight: 400;\n" + -" font-style: normal;\n" + -" -webkit-font-smoothing: antialiased;\n" + -" text-decoration: inherit;\n" + -" speak: none;\n" + -" display: inline-block;\n" + -" font-size: 13px;\n" + -" visibility: visible;\n" + -"}\n" + -":root:not(.shortcut-icons) #shortcuts .fa::before {\n" + -" display: none;\n" + -"}\n" + -":root.shortcut-icons #shortcuts .fa::before {\n" + -" font-size: 15px !important;\n" + -" margin-top: -3px !important;\n" + -" position: relative;\n" + -" top: 1px;\n" + -"}\n" + -":root.shortcut-icons #shortcuts .fa, .menu-button .fa {\n" + -" font-size: 0;\n" + -" visibility: hidden;\n" + -"}\n" + -":root.shortcut-icons .shortcut.brackets-wrap::after,\n" + -":root.shortcut-icons .shortcut.brackets-wrap::before {\n" + -" display: none;\n" + -"}\n" + -":root.shortcut-icons #shortcuts a .fa,\n" + -".menu-button .fa,\n" + -".hide-reply-button .fa,\n" + -".hide-thread-button .fa {\n" + -" display: inline;\n" + -"}\n" + ".fa-glass:before {content: \"\\f000\";}\n" + ".fa-music:before {content: \"\\f001\";}\n" + ".fa-search:before {content: \"\\f002\";}\n" + @@ -19237,6 +1099,63 @@ ".fa-bluetooth:before {content: \"\\f293\";}\n" + ".fa-bluetooth-b:before {content: \"\\f294\";}\n" + ".fa-percent:before {content: \"\\f295\";}\n" + +".fa-gitlab:before {content: \"\\f296\";}\n" + +".fa-wpbeginner:before {content: \"\\f297\";}\n" + +".fa-wpforms:before {content: \"\\f298\";}\n" + +".fa-envira:before {content: \"\\f299\";}\n" + +".fa-universal-access:before {content: \"\\f29a\";}\n" + +".fa-wheelchair-alt:before {content: \"\\f29b\";}\n" + +".fa-question-circle-o:before {content: \"\\f29c\";}\n" + +".fa-blind:before {content: \"\\f29d\";}\n" + +".fa-audio-description:before {content: \"\\f29e\";}\n" + +".fa-volume-control-phone:before {content: \"\\f2a0\";}\n" + +".fa-braille:before {content: \"\\f2a1\";}\n" + +".fa-assistive-listening-systems:before {content: \"\\f2a2\";}\n" + +".fa-asl-interpreting:before, .fa-american-sign-language-interpreting:before {content: \"\\f2a3\";}\n" + +".fa-deafness:before, .fa-hard-of-hearing:before, .fa-deaf:before {content: \"\\f2a4\";}\n" + +".fa-glide:before {content: \"\\f2a5\";}\n" + +".fa-glide-g:before {content: \"\\f2a6\";}\n" + +".fa-signing:before, .fa-sign-language:before {content: \"\\f2a7\";}\n" + +".fa-low-vision:before {content: \"\\f2a8\";}\n" + +".fa-viadeo:before {content: \"\\f2a9\";}\n" + +".fa-viadeo-square:before {content: \"\\f2aa\";}\n" + +".fa-snapchat:before {content: \"\\f2ab\";}\n" + +".fa-snapchat-ghost:before {content: \"\\f2ac\";}\n" + +".fa-snapchat-square:before {content: \"\\f2ad\";}\n" + +".fa::before {\n" + +" font-family: FontAwesome;\n" + +" font-weight: 400;\n" + +" font-style: normal;\n" + +" -webkit-font-smoothing: antialiased;\n" + +" text-decoration: inherit;\n" + +" speak: none;\n" + +" display: inline-block;\n" + +" font-size: 13px;\n" + +" visibility: visible;\n" + +"}\n" + +":root:not(.shortcut-icons) #shortcuts .fa::before {\n" + +" display: none;\n" + +"}\n" + +":root.shortcut-icons #shortcuts .fa::before {\n" + +" font-size: 15px !important;\n" + +" margin-top: -3px !important;\n" + +" position: relative;\n" + +" top: 1px;\n" + +"}\n" + +":root.shortcut-icons #shortcuts .fa, .menu-button .fa {\n" + +" font-size: 0;\n" + +" visibility: hidden;\n" + +"}\n" + +":root.shortcut-icons .shortcut.brackets-wrap::after,\n" + +":root.shortcut-icons .shortcut.brackets-wrap::before {\n" + +" display: none;\n" + +"}\n" + +":root.shortcut-icons #shortcuts a .fa,\n" + +".menu-button .fa,\n" + +".hide-reply-button .fa,\n" + +".hide-thread-button .fa {\n" + +" display: inline;\n" + +"}\n" + ".fa-spin::before {\n" + " -webkit-animation:spin 2s infinite linear;\n" + " -moz-animation:spin 2s infinite linear;\n" + @@ -20093,7 +2012,7 @@ ":root.float #updater {\n" + " padding: 0px 3px;\n" + "}\n" + -":root:not(.float) #updater {\n" + +":root:not(.float).shortcut-icons #updater {\n" + " display: inline-block;\n" + " min-width: 12pt;\n" + " text-align: right;\n" + @@ -21046,75 +2965,6 @@ ".boardSubtitle[contenteditable=\"true\"] {\n" + " cursor: text !important;\n" + "}\n" + -"/* Link Title Favicons */\n" + -".linkify.audio {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAitJREFUOE9jYCAWKJWwavr0KyXWb/FIbDtUFFyzJx6nVofE2Xo5nXsj0rqPNSR0nVkR2Hjmgmfd+U9Otdf+m5Vf/6+SfeU/R9ChVVgNYDRtlfJuuPA/rPfe/4QpD/6nznj0P27Kw/9unff/69Xf+69c/+C/SO7N/0z+OAxgMmmRCe++/r9i3ev/KWvf/vdY8PK/bt/9/wrNV3/IN5y/IVt1YqNg4pGTTP4HsbuA2bhZ2qvpyn+xjIObxAp3VwqlrgngLFyryVy5nhPmZJHANS2cwYexG8BmVC/pWn3hP4NZlzWuQDJI3dIiFnUUuwEsQAOcq87jNcC7fHeLUtJxHF4AGmBWeAavAWH1+1rUUk7giAWjOknllON4DXAs2NEiG4/DBQxAF/CFHfrPYI4jDFSLuJVjNrUJhB/B7gIGo1pJRt99GAZYJK7wLJ1z7Xzl4vu/7aqv/GRBj0bjqAX2qb0nJ7mXH17C4HcUxQA+hymWtSue/C5a9up/9Ozn/7Vr7v1nRY7GqMb91T3b3v6vWvPmf/S0p/9ZQk+DDLCBRSOz06Jqk+o7/21nvfqvsebDf7kZL/5zBaxphkezd+OFn7HzXvz3Wvjmv9a8N//5Ek//ZTBpVYUrMG2X5wjcdl68+uI/wa5Lr3hSNjczGFeywOVZ/bbcVGp//F9izfv/Ql03f3P4LC/HSEQquYwMFnUCDJ7dzBhyjGZNQpye89M5gpfnMvtNUyE2h4PUAQBovvT7lyNljwAAAABJRU5ErkJggg==') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.clyp {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAwUExURTSY22ey5E2l4KbS75rM7Y3F64C/6f///8zl9nS45r/f9PL5/UGe3bPY8Vqr4v///wNjrzUAAAABYktHRA8YugDZAAAAB3RJTUUH4AINEi85AIH95AAAAE9JREFUCNdjYMAGGBWgDGYHCM2a3hkAZmi0dzSBaKaO9o5moCqmLiCjYzNQyw4QowIodQzI6E0AKcpo72gE6+Jyb1kAMehUA9RktgdYbQYAjGIVNGGXBJkAAAAASUVORK5CYII=') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.dailymotion {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAnUExURQBk3ff6/trp+kKO5wZt3xx54q7P9Ozz/IS17zOG5WKh653E8sbc9/GbbcoAAABZSURBVAjXY2BAASyhDhAGc9oECMOjyAAiESEEYrBYpLWBGcwHxcvBjDDxHelghpF0yDQwY3kVgweEUeEQDWbMEepqAjO8FMsLIeYsU8o+BrbCdWboTAe4AwALXxWGjW41FwAAAABJRU5ErkJggg==') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.gfycat {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAjVBMVEWn3gCo3gSr3w2t4BSu4Bav4Ri35C+45DK45DO55DXA50rA50vB50zC6E/D6FTF6VjG6VvL62vN7G/P7XbQ7XfW74vY8JDa8ZTe8qDe8qLf86Pi9Kzj9K7k9LHp9sDp98Lq98Ps+Mr0++L5/O75/fD6/fH6/fL6/fP7/fT7/fb8/ff8/vj8/vn+/v7///91X4cfAAAAcklEQVR42o3M2xKBUACF4aVQckrIuRJK6H//x2sme4/MuPDfre9i6c/Cc3U5Dj87BuAxsXvGu6JvIIXEHRWwNHCHQNrCzkAFkbSBg4EM8i+Yw7PXBa3zRfuxVyf/Bis7nKwGKAcWxgC8prI5Sc315OlnDfzpDar2S9/oAAAAAElFTkSuQmCC') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.gist {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABblBMVEXc3NykpKTW1tbb29ugoKCdnZ0AAAACAgIEDRcKCgoMDAwODg4QIzYRDAoTExMUDwwVAg0WICsaEw8aGhoiCBklGxUmERwwKCQ7LSU7Ozs8LSZFLyNINi1JNyxJNy1KSklMOi5VR1FXV1daQTRkZGRseYZwU0F4eHh7dnR8bWV/YE6IdGiKcGCKkJaNgYeNjY2RdGOScWCUcWCZmZmhoaGkpKSoqKirfmaurq6xsbG1tbW6urq+vr7AbmzBb23CwsLGxsbHx8fHyMjJycnJysrMzMzOiYbPi4fQ0NDRoYbT09PU1NTW1tbY2NjZqIzZ2dnb29vd3d3f39/i4uLktZrk5OTl5eXm5ubn5+fo6Ojq6urs7OzttKLu7u7wuqbw8PDx8fHz8/P4+Pj5+fn7uZj8vpz9ya79ybD/tZf/upr/wZ//w6H/xKH/xaL/xrH/yqj/y7T/zqv/z7D/07D/17n/2Lv/2Lz/3L//38n/4Mk3Q/ZuAAAABnRSTlMSFcbGzc5MNKFvAAAA1klEQVQoz2NgYPZHAswMDEwRSclwkBTBxOARn4gE4j0YXBOiJNUDg7y8Ar1UlOITXBkcY73Z2Li42dg42dn4wmIdGeyjQ7nZoEA4PNqewSZKlw0O9KJsGKwjBdl4ZeWkJGQUhNjEIq0ZrMI5+D0ri7Jz8itCRAXCrRgsQ3mUy+xicrPSbfO0REItGSyCVaVL3ONSU9LcCtQUgy0YzIJ85M1LizMzCsv9xF2CzBhMAwN99TV1DI0MtDWcAgNNGUycA5CAswkDi5kDwrMOZiwMjKzGSICVEQDhZj0UQV7PewAAAABJRU5ErkJggg==') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.image {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAs5JREFUOE+lk/tvi1EYx98/xT8gW4REIpGFMEQWl2FiM9ZMZhm2xRAyOsmujFFmdFRHu0tWm87UypxStr69zPauN5e5rHVp3IYhbOvHy+wHEQlxkm+ek+d8nm9OznkeSfrfldmgJC7QyUlTymsJTfuTZ25z4HdWYwyLreYhtpgekGPw0+kKvo1Eo+IXRSIiEhkWZuc9tqnsJD9EqTUopCxjSGTpB0iueczSo1HyW8cpsExQ1DbxI2pt45j9cXpexul4FEd79RnZphAa/SD7WvuFtO6UItbU9LC+YQxNI2w0wwYT5LRAdhOU3oBTIXC9gXP3oUSGgz2vST3gYHejR0jptT1C332f8yrUEYHrz8CgxDnpm6DKCUfc0KnmXa/AEVPPwnDcD0cvetA2uYRk67Ive/lpjO7YBO1PPuF8Df3vwf4cbNE4tqdw7YVq8HYyHx6FvhE1hkMEg8HDUqvFkjT4aIjMqkqyqkswDSrcfBfH+Q561YLAZ/B+BLda6FXlU/cPv0AoEPhuoP1h4Av7Wbh9E/Py15NWWUjeSR3nZDfeN+N0DY9hG/7K1eGP3P0S5/EYRFUF/IOTBrUXHPm9fT6mr1xEwupkZqxbzLyiDJYUZ5NSnkdqdSHpxyrYdFpPgdmAsdfJwPMI/Yr65bf7tZLGGBQ7DNdJWFtIYvoOZmbuZE7OXpIKKli86zAr9p9gTVktWTVnKTI2U95uRWe3U2IJUDbVB5p6hVm5x5m9Vc/cnedZUNzC8lILaQesZBy6hEZ3maKzgvJWFzVWD9XtXvVGQbSWASFtMATVRlJIKbOTWtlJXaeXepuPM1f6MNp9GLt8mLvvYLmp0OhQ2Fwvk6m7xaqDTvY0eYWUVtcnllXfYlGpnfklVuraHHg8HjxuN+6fktUHlWWZPaZeUo/ILK0UKttBcbNbSB9GP0yLxWJJUxoZGUn80zD9C/vXQ/4NHY10h3M1zmQAAAAASUVORK5CYII=') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.installgentoo {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABcVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3dIYAAAAAAAAAAAAbGh4BBAcCBgoBBgoCBwsCCQ/QzucCCA7MyuXZ1eUBBQmTh8fo5/i9svIAAADh3vQAAAACCA0CCQ8CCQ4DDBQbGCUDChDr6vgAAAAAAAAREBIDCxK6tdfe2fTv7/cDCxIDDBQEDRUHDhgMJjXk4PZdXWdLUFoUNEYOKDgSMUMRLUBneI4eTGj08/QmW3onW3rTzvfOx/giU3IiVHMkWHdEaYJobHv3+PokWHpua6TNy9xZgZ+1quz8/foQKj0XPFInWn0nW38tZ4o6fqg8gq48grA9hrU/i7pAhrNAiLdBjLtEjr1FksNIjr5Il8pImMtKWnNqhL97odKFqti5q/q5rPq60+nCt/vLw/vPx/jV0vHY0/rc1/rg2/vh3fzn4fzu6/vx8vf19Pv19Pz49/v5+Pv8/Pv8/fr9/vv+/frziVtUAAAAT3RSTlMABQYHCAoNDhARGRobL0ZOV1xdXV5fYGBmZnB0eX2MjZSaoaGio6mqqqustLq7zubo6Ojo6evt7u/x8fLy9/f4+Pj5+vr6+vr6+/39/v7+XKgUSwAAAMhJREFUKM9jYGDg4OZmZgABKINT1dBAhBHIYFMxMBIDisjbhoZbCTExsCu5hoeY8DEwcOkEx8fY6MqpucTGB0izglVEplcU5/gmRYWBVQDNMK+s0hN3SvMyBpsBNJxXw0NfwTEjVQZqHQMHj5RfWW5mliSEC7TPzK6yJD/bXZQRzGdXcisqLy309okA2Q4Eis4peQWmstqBCdGW/CABraC45ERBBs3A6Fh/AbAKTwsHa34QZW8NVsGuLqwswQSjQICTmYMFQaEDAAF8JHLfKGswAAAAAElFTkSuQmCC') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.liveleak {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAlNJREFUGBkFwU2LVmUYAODrPu8Z5x1xSpRBXQyFoLsBE+wfiO5atJOgnf9DUPwFgtGinUgEaQsRhHYuMtpEiEWuG5iNjuOcj+c8z911xXcXL/68c3Dw1fzhg0QgEQAAEYGUKXFie9vxlSs/xk/rdavjGEkmkWSih65z4osv9GfOiK6LzEyZ2uGh4dUrmzs72ddlUUhkoiMr4PT167589Mh6c1N0nSRlqrX67dat+PDyZXRT19m5edPnt28rGFHxMcJ6d9fprS1/37tneP3aemPD1uamUydPOru3p5DdGOH0tWsu3LhhxIQJM2qEpRT/Pn3q/du3AhARSmvGTH0lplKMrVkiYpVpQaJlighzhDkzhmEA0fcWoqAfyaFW4zTlgCABxlrNmY4ylUzLsiREprFWc0T2M+ZSjKWY0AEaltZUjJixZJIpuk5pTWlNP2BYFvOyKJkCAKU1tTXHrZlqVWolUxdhxsfVSj9FmJfFMM9GdICGGa01HyMstYpMIFPJVNDPmYZSTOPoOEKHzNRlKpmWWh1j6TpLa2SKTKVWU6Z+Qolwdm/P9QcPZKa2LH69e9eIMs+WCL/cv2/98CGZPrt61am+V9APq1X89eyZ/968obVYaiXT4dGREgG+vnPHeHgYMsH2+fP+efEihtVKv7SWw/6+9/v7KYLMhIywTJPamvOXLomukyRsrNf+ePzYkpl9dJ3SWgSCSCQCfz5/7pMLF2yfO6eLiAQcHRz4/cmT+HR7O+Ob3d0fNt69+7a2BiICQCJbA0EgE5lpvbXl1OXL3/8Pfax4+6SjSukAAAAASUVORK5CYII=') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.pastebin {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAB1FBMVEUAAAAAAAAAAABWYWwAAABbY3BbYm5dZnFdZXJeZnMEBAQHCAhYYGpdZnFdZnBgaHIlJyomKCooKi09QkdESU5eZGtdYmhdYmleY2lrcXdqb3Rqb3Rqb3SSmJ+SlJeWmJutr7GtrrCWm6ChpKhbW1tmZmZvb290dHR3d3d4eHh5eXl6enp8fHx+gIJ/f3+CgoKDg4OEhISFhYWHh4eKioqKjI2Li4uMjIyOjo6Pj4+QkJCRkZGSkpKUlJSVl5mWlpaYmZqZm52ampqbm5ucnJydnZ2enp6fn5+hoaGioqKkpKSkpaalpaWmp6mmp6qnqauoqKioqquoqq2qqqqrrK2srKysra6srrCsrrGurq6vr6+wsLCxsbGysrKztLa0tLS1t7m2tra3t7e4uLi5ubm6urq7u7u8vLy9vb2+vr7AwMDAwsTBwcHExcfFxcXFxsnGxsbHx8fIyMjJycnMzMzNzc3Ozs7O0NLPz8/Q0NDR0dHR09XT09PV1dXV1dbV1tfV19rW1tbX19fX19jY2tzZ2dnZ2tva2tra3N3a3N7c3Nze3t7f39/f4OHg4ODi4uLl5+jm5ubs7Ozs7e3u7u7v7+/v8PDw8PDx8fHy8vLz8/P29vYSoLMZAAAAJHRSTlMABAUGCwsNHCAiLzMzMzZEYGJwgIuOnJycnqmqq9bc3+/w8fkZ0N/uAAAA/klEQVQoU2NgYGDl5YMDdgYGBmZZ3964CYFtIR3e9Q7K/AwMHI55KfaFmcHWMy3K3MwlGRg4wz0zdYpcorRbNbL0LaWAAp3ts2umV8wo6MupTauQBgqUG03VL7W3sfZSb1erAgm02M+yzYrVCXUy6zapAQlUx/dEdyX3J3ZHVUYVywAF8o2rDNN1Go2jzGLMokAC2QbuSc42mXmaOXop9iAtCXrJ5qXWjT59Abl2ESJAAX/tSIMMiyrrqQ3T6uS5gQK6kSqpqkUermGTexQFmYACflqR+hlWZSamzQpCLEDPsSmVVDT1TJw0JUhOAMRnYOARFRMTE5cQF+ZiBPIAII5B3EVG0b4AAAAASUVORK5CYII=') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.soundcloud {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABsklEQVQ4y5WTy2pUQRCGv2rbzDjJeAlIBmOyipGIIJqFEBDElwh4yULGeRFXPoEIBl/AvQ/gC2RnxCAoxijiwks852S6+3dxzslcHJCpTXVX11/Xv0097gLPgVNMJxnQNfX4zsqleWbnpoMf/oa9d988MM9MC/rp+E0a+A0dsVobMNMCOO8B6McRoABJI+A6gJmN3D2A8jgEBCEkSEMBrcrsDAzDWWn3AjgKFaDMmgRqniGFgsaDp1jrLOngDf1XT1D+A1dFc4MKAkkiCVKjjVu7g9+4Rzx4i1u6hjXbuMWr0O5QPNvCu7IaCZwEKQukLGDrm5x8uI0tr6MkiGlkiv7yLfzN+6S5i6QsIMABkEfcxhbWWYMkVAOjxvYAjc3HNHrbKI9VBQBFwF25XQKSBjqIf1YBuAurEMrczgDygD6/x2LCpFLXLUyQ+PoldphhBhYfIX09XU1+Flaukz7uYqs3SHs7cG4BmTsmkBUF9mmXEwa28BNLPaQPLepuNcbGSWQquQC2/Kdcox1FUGkcB0ykck1nA2+wTzMs8stGnP4rbWGw74EuS/GFQWfK7/wF6P4F7fzIAYkdmdEAAAAASUVORK5CYII=') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.twitchtv {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAYUExURf///2RBpWRBpWRBpWRBpWRBpWRBpf///+zQyUYAAAAGdFJOUwFdZX0lTzs4r5oAAAABYktHRAcWYYjrAAAAB3RJTUUH4AINEi42iSXRNAAAAD1JREFUCNdjYEiDAAZGGIMtjQEEUBlMCWoEGci6mGEMsxQgIy0BiB3AjLS0FAYQIw0kwABipoI1AhkBQBIAFCIXxiHgq80AAAAASUVORK5CYII=') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.twitter {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAEsUExURf///1Cf21Gg3FGi31Gh3VKj4FGh3lKj4VKk4lKl41Ol5FOn51Sp6VSo6FOn5lCf21Gg3FGh3VGi31Gi31Gh3lGg3FGg3FGg3FGg3FGh3lGg3FGi31Kk4lKj4FGh3lGi31Kk4lGh3lGg3FGh3lOm5FOm5VGi31Kj4VSo6FGi31Gh3VGg3FKj4FOn51Gi31So6FWr7VOl5FGi31On51Sq6lKk4lOo51Sp6VOm5FSq61Ws7VOn51Oo51Sq61Ol5FOm5FSq61Wr7VOo51On51Sr7FWs7VSp6lGg3FGh3VOm5FWr7VSp6lKj4VOm5FSo6FSr7FWs7VWs7VWr7VSq6lOo51Om5FOo51So6FOm5VOl5FSq61Ws7VSr7FSp6lSp6VWs7lWr7VKk4lSq6v///6E3MNsAAABVdFJOUwAAAAAAAAAAAAAAAAAAAB0Ii+3xnBVTJhfsMKb+qTEp9GwBF/7lLAbo0m4pLkUTdvk2Ev3+EZnOBo/3Z8ffCRzH/D0OqPxiLnvx3UI8m9n1++GwXQZNS29BAAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ACDRIwBwy67tEAAADKSURBVBjTY2BAB4xogIGRH8IQEBQSFhEVE2eQkJQC8ZmkQ8PCI2Rk5RjkIxUUlRgZlVWioqNjYlXVGNQ14iI1tbR14qLj4+MTdJkZ9PQNosJCE0OjgPz4KEMWBiPjhPiEmKQokIJ4E1MmBmazhHg4MGdlYmCzsLSC8ROsmRkZmFht4Eps7ViADmOzd4DyHZ2YmYACTOzOLmATXd04mIBOd/eQ9owFCXh5c7KB/MLi4+vnHxAYFBzCwcYEEmBi5uLm4eHl42RmAnsSAMZBLgZiFUQ5AAAAAElFTkSuQmCC') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.video {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAxgDGAP8nNqN7AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gMZBjQQLEEqGwAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAA5SURBVDjLY2AYaMDIwMDwn1JD/lPCZhpwL+B1wf///ykzgBhDiAoDfIYQZQAjIyP5BuDTPJqQqAQAvW0ZAMk8+EEAAAAASUVORK5CYII=') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.vimeo {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAYFBMVEUAAAAIdZUKh6sLlLkLmr4LmsAMp88NrdYVW3MZj7Acstkrt9s1e5E7vN5EfI9JvdtKwuBijp5kpbl30eiDt8aG1uqRr7qTyNehxM+k4PCy3enB3OTg6Ovv9PXw+fz////L9U5WAAAAAXRSTlMAQObYZgAAAIFJREFUeNplz90OwiAMBWAQpAoyxclkP3je/y0H2AQXz0WT8100rRD6kNI9/cRroemQL3hXhoujZYj4OHoAmBvYGcBISwbWBvfXCrytnIDUQMkbsBpagMA7zhtQdyTFQAmIG7IkYniiZuh3XGsPqoOZkMOJOpAcLqUzNFGGu/57fwc1hgtp0mVSyQAAAABJRU5ErkJggg==') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.vine {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAHCUExURQAAAAC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+j////54tRLAAAACUdFJOUwAAAEK+9/e+QQIDAwEqzskfUZmUNHz2mrT++V1w+f5tCanNFUDwfEjtjAyyvg027Hki27QMBJzaHE/1+FkNsN0iZvv6bxyAlB589lQeyud0KB8PQO+ZBUrc+eXgcRG/3CoATe316Wxw/P6BAgBt+fp4IAwh0d4zM9q7Fm76qi605EMSrvfX/PRtAivF9IAJNMLxhA2KYlJ9AAAAAWJLR0SVCGB6gwAAAAd0SU1FB+ACDRI2MOJd7FgAAADrSURBVBjTLY9VWwJgGEPfiYWBha2YYHcHditgd3d3odjdivvBfgK727nYsyPiCrw03j6+fv6AaAMCgyAI1lElJBQSFh6hBxDJqOiY2Lh4SEKiIQlITmFqWrqRJkhGJrOA7Bzm5uUXsBBSVMySUpSVs6KyqrqmFmKuY30D0NjU3NLa1t6h9jvZ1Q30WGi19fb1KzAwyKFhYGSUY+MTkwpMTXNmFpibX+Di0rICWFldW9/A5tb2zu7ePtTrg0MeHePklPYzuDRw7uDF5RWvbwC32O0d7x8en55f4DHF6xv5/vHp6f/k6/vH+evuf1LAObptvSvrAAAAAElFTkSuQmCC') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.vocaroo {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAw9JREFUOE9jYMABuMwYmCyTJKUCGlSnFSy02TTzeOyCiQcDViX26qVz2TAyYtWmEMwuoZ3M7V40LcB79pHkc0svpvzY8jD//87nxf+3Pyn8v/ZO8v+VNyP/2mZJumI1QCWSI8232Hjumitlfw5+qPp/9l8TCt76JP//xkdx/wsXWCzjtWFkwTCkbWFe9plPk/+ga4Txz/xt/D/hkN//gMXif21a+NbyWjIwoRiy6GDT5rP/mlFsPfyp5n/NpOj/22+0gMUXXIz/H7hC/L/bFKFbPDZMrHAD5H35OPt2J9zacDv/f3V7xv9FhwrBGubsT/1//Pjx/1GJ/mD+/nfl/1v3Ovy3KRJNQbHdOlXCvOO03/+pm1P/v3v37n90hhtYw9HPtf8Xb2v937cmHswHeWPRxYj/LvkK3igGKARwicTO07118H3V/5kbi/4vPZMJtK3s/6YH2f+Pfq1B8VbjWrdnMu5s4nAD9CNFhKwz5DTUvLl419zKvAcLtG1P84BRl/b/5M/6/6f/NPzf/qzo84yj0Uus0xUU4Zor54bm9+4OfZG02OCuoAMTb9ZkC9ull1Nvrr2Z+XvRpaRfc65H/68F+jl9svEhzyLFWoccWVc+eyTHq/twydjlKRln7jX9bNMkMJnbhoFRL1xCqmKx6/yi2fYXa/c5/e846PV/5fW0/7OPx/yfcjzop34ulxdGGvDuU8mMXaX507lBuiN6ueadmQeT/p/93vf/1O+G//sP5fw/eL3o/5JLif8zVxs+Tlir9S26UyeFQQvJGBE7FvaFZ9LfN+1y+WjbItSb3GmXvXd15v8zroH/HxgE/D+aGPx/18vi/z07PeZNPRKxe/Kh0Ae8toxscCO4zBkYXArk9C1SxJUYjBkYPPIVtbbuTftz3cz//2O9wP/75iSAXdO72/dt2HL5F6YlfBW4MiJYXMiBiW3t7azHBx+V/t89N+H/8a+1//e9K/9attDp5LQjYX8SuvVL8RoAkmxa65299Erq1FnHo0qrl7t4BddriIs4MrM3rfWcFd+pGwVSAwBZ0bKP8yrZPAAAAABJRU5ErkJggg==') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.youtube {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABIklEQVQoz53LvUrDUBjG8bOoOammSf1IoBSvoCB4JeIqOHgBLt6AIMRBBQelWurQ2kERnMRBsBUcIp5FJSBI5oQsJVkkUHh8W0o5nhaFHvjBgef/Mq+Q46RJBMkI/vE+aOus956tnEswIZe1LV0QyJ5sE2GzgZfVMtRNIdiDpccEssdlB1mW4bvTwdvWJtRdErM7U+8S/FJykCRJX5qm+KpVce8UMNLRLbulz4iSjTAMh6Iowsd5BeNadp3nUF0VlxAEwZBotXC0Usa4ll3meZdA1iguwvf9vpvDA2wvmKgYGtSud8suDB4TyGr2PF49D/vra9jRZ1BVdknMzgwuCGSnZEObwu6sBnVTCHZiaC7BhFx2PKdxUidiAH/4lLo9Mv0DELVs9qsOHXwAAAAASUVORK5CYII=') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + "/* Embedding */\n" + "#embedding {\n" + " padding: 1px 4px 1px 4px;\n" + @@ -21874,6 +3724,75 @@ "{\n" + " background-image: url(\"data:image/svg+xml,\");\n" + "}\n" + +"/* Link Title Favicons */\n" + +".linkify.audio {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAitJREFUOE9jYCAWKJWwavr0KyXWb/FIbDtUFFyzJx6nVofE2Xo5nXsj0rqPNSR0nVkR2Hjmgmfd+U9Otdf+m5Vf/6+SfeU/R9ChVVgNYDRtlfJuuPA/rPfe/4QpD/6nznj0P27Kw/9unff/69Xf+69c/+C/SO7N/0z+OAxgMmmRCe++/r9i3ev/KWvf/vdY8PK/bt/9/wrNV3/IN5y/IVt1YqNg4pGTTP4HsbuA2bhZ2qvpyn+xjIObxAp3VwqlrgngLFyryVy5nhPmZJHANS2cwYexG8BmVC/pWn3hP4NZlzWuQDJI3dIiFnUUuwEsQAOcq87jNcC7fHeLUtJxHF4AGmBWeAavAWH1+1rUUk7giAWjOknllON4DXAs2NEiG4/DBQxAF/CFHfrPYI4jDFSLuJVjNrUJhB/B7gIGo1pJRt99GAZYJK7wLJ1z7Xzl4vu/7aqv/GRBj0bjqAX2qb0nJ7mXH17C4HcUxQA+hymWtSue/C5a9up/9Ozn/7Vr7v1nRY7GqMb91T3b3v6vWvPmf/S0p/9ZQk+DDLCBRSOz06Jqk+o7/21nvfqvsebDf7kZL/5zBaxphkezd+OFn7HzXvz3Wvjmv9a8N//5Ek//ZTBpVYUrMG2X5wjcdl68+uI/wa5Lr3hSNjczGFeywOVZ/bbcVGp//F9izfv/Ql03f3P4LC/HSEQquYwMFnUCDJ7dzBhyjGZNQpye89M5gpfnMvtNUyE2h4PUAQBovvT7lyNljwAAAABJRU5ErkJggg==') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.clyp {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAwUExURTSY22ey5E2l4KbS75rM7Y3F64C/6f///8zl9nS45r/f9PL5/UGe3bPY8Vqr4v///wNjrzUAAAABYktHRA8YugDZAAAAB3RJTUUH4AINEi85AIH95AAAAE9JREFUCNdjYMAGGBWgDGYHCM2a3hkAZmi0dzSBaKaO9o5moCqmLiCjYzNQyw4QowIodQzI6E0AKcpo72gE6+Jyb1kAMehUA9RktgdYbQYAjGIVNGGXBJkAAAAASUVORK5CYII=') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.dailymotion {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAnUExURQBk3ff6/trp+kKO5wZt3xx54q7P9Ozz/IS17zOG5WKh653E8sbc9/GbbcoAAABZSURBVAjXY2BAASyhDhAGc9oECMOjyAAiESEEYrBYpLWBGcwHxcvBjDDxHelghpF0yDQwY3kVgweEUeEQDWbMEepqAjO8FMsLIeYsU8o+BrbCdWboTAe4AwALXxWGjW41FwAAAABJRU5ErkJggg==') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.gfycat {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAjVBMVEWn3gCo3gSr3w2t4BSu4Bav4Ri35C+45DK45DO55DXA50rA50vB50zC6E/D6FTF6VjG6VvL62vN7G/P7XbQ7XfW74vY8JDa8ZTe8qDe8qLf86Pi9Kzj9K7k9LHp9sDp98Lq98Ps+Mr0++L5/O75/fD6/fH6/fL6/fP7/fT7/fb8/ff8/vj8/vn+/v7///91X4cfAAAAcklEQVR42o3M2xKBUACF4aVQckrIuRJK6H//x2sme4/MuPDfre9i6c/Cc3U5Dj87BuAxsXvGu6JvIIXEHRWwNHCHQNrCzkAFkbSBg4EM8i+Yw7PXBa3zRfuxVyf/Bis7nKwGKAcWxgC8prI5Sc315OlnDfzpDar2S9/oAAAAAElFTkSuQmCC') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.gist {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABblBMVEXc3NykpKTW1tbb29ugoKCdnZ0AAAACAgIEDRcKCgoMDAwODg4QIzYRDAoTExMUDwwVAg0WICsaEw8aGhoiCBklGxUmERwwKCQ7LSU7Ozs8LSZFLyNINi1JNyxJNy1KSklMOi5VR1FXV1daQTRkZGRseYZwU0F4eHh7dnR8bWV/YE6IdGiKcGCKkJaNgYeNjY2RdGOScWCUcWCZmZmhoaGkpKSoqKirfmaurq6xsbG1tbW6urq+vr7AbmzBb23CwsLGxsbHx8fHyMjJycnJysrMzMzOiYbPi4fQ0NDRoYbT09PU1NTW1tbY2NjZqIzZ2dnb29vd3d3f39/i4uLktZrk5OTl5eXm5ubn5+fo6Ojq6urs7OzttKLu7u7wuqbw8PDx8fHz8/P4+Pj5+fn7uZj8vpz9ya79ybD/tZf/upr/wZ//w6H/xKH/xaL/xrH/yqj/y7T/zqv/z7D/07D/17n/2Lv/2Lz/3L//38n/4Mk3Q/ZuAAAABnRSTlMSFcbGzc5MNKFvAAAA1klEQVQoz2NgYPZHAswMDEwRSclwkBTBxOARn4gE4j0YXBOiJNUDg7y8Ar1UlOITXBkcY73Z2Li42dg42dn4wmIdGeyjQ7nZoEA4PNqewSZKlw0O9KJsGKwjBdl4ZeWkJGQUhNjEIq0ZrMI5+D0ri7Jz8itCRAXCrRgsQ3mUy+xicrPSbfO0REItGSyCVaVL3ONSU9LcCtQUgy0YzIJ85M1LizMzCsv9xF2CzBhMAwN99TV1DI0MtDWcAgNNGUycA5CAswkDi5kDwrMOZiwMjKzGSICVEQDhZj0UQV7PewAAAABJRU5ErkJggg==') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.image {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAs5JREFUOE+lk/tvi1EYx98/xT8gW4REIpGFMEQWl2FiM9ZMZhm2xRAyOsmujFFmdFRHu0tWm87UypxStr69zPauN5e5rHVp3IYhbOvHy+wHEQlxkm+ek+d8nm9OznkeSfrfldmgJC7QyUlTymsJTfuTZ25z4HdWYwyLreYhtpgekGPw0+kKvo1Eo+IXRSIiEhkWZuc9tqnsJD9EqTUopCxjSGTpB0iueczSo1HyW8cpsExQ1DbxI2pt45j9cXpexul4FEd79RnZphAa/SD7WvuFtO6UItbU9LC+YQxNI2w0wwYT5LRAdhOU3oBTIXC9gXP3oUSGgz2vST3gYHejR0jptT1C332f8yrUEYHrz8CgxDnpm6DKCUfc0KnmXa/AEVPPwnDcD0cvetA2uYRk67Ive/lpjO7YBO1PPuF8Df3vwf4cbNE4tqdw7YVq8HYyHx6FvhE1hkMEg8HDUqvFkjT4aIjMqkqyqkswDSrcfBfH+Q561YLAZ/B+BLda6FXlU/cPv0AoEPhuoP1h4Av7Wbh9E/Py15NWWUjeSR3nZDfeN+N0DY9hG/7K1eGP3P0S5/EYRFUF/IOTBrUXHPm9fT6mr1xEwupkZqxbzLyiDJYUZ5NSnkdqdSHpxyrYdFpPgdmAsdfJwPMI/Yr65bf7tZLGGBQ7DNdJWFtIYvoOZmbuZE7OXpIKKli86zAr9p9gTVktWTVnKTI2U95uRWe3U2IJUDbVB5p6hVm5x5m9Vc/cnedZUNzC8lILaQesZBy6hEZ3maKzgvJWFzVWD9XtXvVGQbSWASFtMATVRlJIKbOTWtlJXaeXepuPM1f6MNp9GLt8mLvvYLmp0OhQ2Fwvk6m7xaqDTvY0eYWUVtcnllXfYlGpnfklVuraHHg8HjxuN+6fktUHlWWZPaZeUo/ILK0UKttBcbNbSB9GP0yLxWJJUxoZGUn80zD9C/vXQ/4NHY10h3M1zmQAAAAASUVORK5CYII=') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.installgentoo {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABcVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3dIYAAAAAAAAAAAAbGh4BBAcCBgoBBgoCBwsCCQ/QzucCCA7MyuXZ1eUBBQmTh8fo5/i9svIAAADh3vQAAAACCA0CCQ8CCQ4DDBQbGCUDChDr6vgAAAAAAAAREBIDCxK6tdfe2fTv7/cDCxIDDBQEDRUHDhgMJjXk4PZdXWdLUFoUNEYOKDgSMUMRLUBneI4eTGj08/QmW3onW3rTzvfOx/giU3IiVHMkWHdEaYJobHv3+PokWHpua6TNy9xZgZ+1quz8/foQKj0XPFInWn0nW38tZ4o6fqg8gq48grA9hrU/i7pAhrNAiLdBjLtEjr1FksNIjr5Il8pImMtKWnNqhL97odKFqti5q/q5rPq60+nCt/vLw/vPx/jV0vHY0/rc1/rg2/vh3fzn4fzu6/vx8vf19Pv19Pz49/v5+Pv8/Pv8/fr9/vv+/frziVtUAAAAT3RSTlMABQYHCAoNDhARGRobL0ZOV1xdXV5fYGBmZnB0eX2MjZSaoaGio6mqqqustLq7zubo6Ojo6evt7u/x8fLy9/f4+Pj5+vr6+vr6+/39/v7+XKgUSwAAAMhJREFUKM9jYGDg4OZmZgABKINT1dBAhBHIYFMxMBIDisjbhoZbCTExsCu5hoeY8DEwcOkEx8fY6MqpucTGB0izglVEplcU5/gmRYWBVQDNMK+s0hN3SvMyBpsBNJxXw0NfwTEjVQZqHQMHj5RfWW5mliSEC7TPzK6yJD/bXZQRzGdXcisqLy309okA2Q4Eis4peQWmstqBCdGW/CABraC45ERBBs3A6Fh/AbAKTwsHa34QZW8NVsGuLqwswQSjQICTmYMFQaEDAAF8JHLfKGswAAAAAElFTkSuQmCC') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.liveleak {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAlNJREFUGBkFwU2LVmUYAODrPu8Z5x1xSpRBXQyFoLsBE+wfiO5atJOgnf9DUPwFgtGinUgEaQsRhHYuMtpEiEWuG5iNjuOcj+c8z911xXcXL/68c3Dw1fzhg0QgEQAAEYGUKXFie9vxlSs/xk/rdavjGEkmkWSih65z4osv9GfOiK6LzEyZ2uGh4dUrmzs72ddlUUhkoiMr4PT167589Mh6c1N0nSRlqrX67dat+PDyZXRT19m5edPnt28rGFHxMcJ6d9fprS1/37tneP3aemPD1uamUydPOru3p5DdGOH0tWsu3LhhxIQJM2qEpRT/Pn3q/du3AhARSmvGTH0lplKMrVkiYpVpQaJlighzhDkzhmEA0fcWoqAfyaFW4zTlgCABxlrNmY4ylUzLsiREprFWc0T2M+ZSjKWY0AEaltZUjJixZJIpuk5pTWlNP2BYFvOyKJkCAKU1tTXHrZlqVWolUxdhxsfVSj9FmJfFMM9GdICGGa01HyMstYpMIFPJVNDPmYZSTOPoOEKHzNRlKpmWWh1j6TpLa2SKTKVWU6Z+Qolwdm/P9QcPZKa2LH69e9eIMs+WCL/cv2/98CGZPrt61am+V9APq1X89eyZ/968obVYaiXT4dGREgG+vnPHeHgYMsH2+fP+efEihtVKv7SWw/6+9/v7KYLMhIywTJPamvOXLomukyRsrNf+ePzYkpl9dJ3SWgSCSCQCfz5/7pMLF2yfO6eLiAQcHRz4/cmT+HR7O+Ob3d0fNt69+7a2BiICQCJbA0EgE5lpvbXl1OXL3/8Pfax4+6SjSukAAAAASUVORK5CYII=') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.pastebin {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAB1FBMVEUAAAAAAAAAAABWYWwAAABbY3BbYm5dZnFdZXJeZnMEBAQHCAhYYGpdZnFdZnBgaHIlJyomKCooKi09QkdESU5eZGtdYmhdYmleY2lrcXdqb3Rqb3Rqb3SSmJ+SlJeWmJutr7GtrrCWm6ChpKhbW1tmZmZvb290dHR3d3d4eHh5eXl6enp8fHx+gIJ/f3+CgoKDg4OEhISFhYWHh4eKioqKjI2Li4uMjIyOjo6Pj4+QkJCRkZGSkpKUlJSVl5mWlpaYmZqZm52ampqbm5ucnJydnZ2enp6fn5+hoaGioqKkpKSkpaalpaWmp6mmp6qnqauoqKioqquoqq2qqqqrrK2srKysra6srrCsrrGurq6vr6+wsLCxsbGysrKztLa0tLS1t7m2tra3t7e4uLi5ubm6urq7u7u8vLy9vb2+vr7AwMDAwsTBwcHExcfFxcXFxsnGxsbHx8fIyMjJycnMzMzNzc3Ozs7O0NLPz8/Q0NDR0dHR09XT09PV1dXV1dbV1tfV19rW1tbX19fX19jY2tzZ2dnZ2tva2tra3N3a3N7c3Nze3t7f39/f4OHg4ODi4uLl5+jm5ubs7Ozs7e3u7u7v7+/v8PDw8PDx8fHy8vLz8/P29vYSoLMZAAAAJHRSTlMABAUGCwsNHCAiLzMzMzZEYGJwgIuOnJycnqmqq9bc3+/w8fkZ0N/uAAAA/klEQVQoU2NgYGDl5YMDdgYGBmZZ3964CYFtIR3e9Q7K/AwMHI55KfaFmcHWMy3K3MwlGRg4wz0zdYpcorRbNbL0LaWAAp3ts2umV8wo6MupTauQBgqUG03VL7W3sfZSb1erAgm02M+yzYrVCXUy6zapAQlUx/dEdyX3J3ZHVUYVywAF8o2rDNN1Go2jzGLMokAC2QbuSc42mXmaOXop9iAtCXrJ5qXWjT59Abl2ESJAAX/tSIMMiyrrqQ3T6uS5gQK6kSqpqkUermGTexQFmYACflqR+hlWZSamzQpCLEDPsSmVVDT1TJw0JUhOAMRnYOARFRMTE5cQF+ZiBPIAII5B3EVG0b4AAAAASUVORK5CYII=') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.soundcloud {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABsklEQVQ4y5WTy2pUQRCGv2rbzDjJeAlIBmOyipGIIJqFEBDElwh4yULGeRFXPoEIBl/AvQ/gC2RnxCAoxijiwks852S6+3dxzslcHJCpTXVX11/Xv0097gLPgVNMJxnQNfX4zsqleWbnpoMf/oa9d988MM9MC/rp+E0a+A0dsVobMNMCOO8B6McRoABJI+A6gJmN3D2A8jgEBCEkSEMBrcrsDAzDWWn3AjgKFaDMmgRqniGFgsaDp1jrLOngDf1XT1D+A1dFc4MKAkkiCVKjjVu7g9+4Rzx4i1u6hjXbuMWr0O5QPNvCu7IaCZwEKQukLGDrm5x8uI0tr6MkiGlkiv7yLfzN+6S5i6QsIMABkEfcxhbWWYMkVAOjxvYAjc3HNHrbKI9VBQBFwF25XQKSBjqIf1YBuAurEMrczgDygD6/x2LCpFLXLUyQ+PoldphhBhYfIX09XU1+Flaukz7uYqs3SHs7cG4BmTsmkBUF9mmXEwa28BNLPaQPLepuNcbGSWQquQC2/Kdcox1FUGkcB0ykck1nA2+wTzMs8stGnP4rbWGw74EuS/GFQWfK7/wF6P4F7fzIAYkdmdEAAAAASUVORK5CYII=') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.twitchtv {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAYUExURf///2RBpWRBpWRBpWRBpWRBpWRBpf///+zQyUYAAAAGdFJOUwFdZX0lTzs4r5oAAAABYktHRAcWYYjrAAAAB3RJTUUH4AINEi42iSXRNAAAAD1JREFUCNdjYEiDAAZGGIMtjQEEUBlMCWoEGci6mGEMsxQgIy0BiB3AjLS0FAYQIw0kwABipoI1AhkBQBIAFCIXxiHgq80AAAAASUVORK5CYII=') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.twitter {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAEsUExURf///1Cf21Gg3FGi31Gh3VKj4FGh3lKj4VKk4lKl41Ol5FOn51Sp6VSo6FOn5lCf21Gg3FGh3VGi31Gi31Gh3lGg3FGg3FGg3FGg3FGh3lGg3FGi31Kk4lKj4FGh3lGi31Kk4lGh3lGg3FGh3lOm5FOm5VGi31Kj4VSo6FGi31Gh3VGg3FKj4FOn51Gi31So6FWr7VOl5FGi31On51Sq6lKk4lOo51Sp6VOm5FSq61Ws7VOn51Oo51Sq61Ol5FOm5FSq61Wr7VOo51On51Sr7FWs7VSp6lGg3FGh3VOm5FWr7VSp6lKj4VOm5FSo6FSr7FWs7VWs7VWr7VSq6lOo51Om5FOo51So6FOm5VOl5FSq61Ws7VSr7FSp6lSp6VWs7lWr7VKk4lSq6v///6E3MNsAAABVdFJOUwAAAAAAAAAAAAAAAAAAAB0Ii+3xnBVTJhfsMKb+qTEp9GwBF/7lLAbo0m4pLkUTdvk2Ev3+EZnOBo/3Z8ffCRzH/D0OqPxiLnvx3UI8m9n1++GwXQZNS29BAAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ACDRIwBwy67tEAAADKSURBVBjTY2BAB4xogIGRH8IQEBQSFhEVE2eQkJQC8ZmkQ8PCI2Rk5RjkIxUUlRgZlVWioqNjYlXVGNQ14iI1tbR14qLj4+MTdJkZ9PQNosJCE0OjgPz4KEMWBiPjhPiEmKQokIJ4E1MmBmazhHg4MGdlYmCzsLSC8ROsmRkZmFht4Eps7ViADmOzd4DyHZ2YmYACTOzOLmATXd04mIBOd/eQ9owFCXh5c7KB/MLi4+vnHxAYFBzCwcYEEmBi5uLm4eHl42RmAnsSAMZBLgZiFUQ5AAAAAElFTkSuQmCC') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.video {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAxgDGAP8nNqN7AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gMZBjQQLEEqGwAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAA5SURBVDjLY2AYaMDIwMDwn1JD/lPCZhpwL+B1wf///ykzgBhDiAoDfIYQZQAjIyP5BuDTPJqQqAQAvW0ZAMk8+EEAAAAASUVORK5CYII=') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.vimeo {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAYFBMVEUAAAAIdZUKh6sLlLkLmr4LmsAMp88NrdYVW3MZj7Acstkrt9s1e5E7vN5EfI9JvdtKwuBijp5kpbl30eiDt8aG1uqRr7qTyNehxM+k4PCy3enB3OTg6Ovv9PXw+fz////L9U5WAAAAAXRSTlMAQObYZgAAAIFJREFUeNplz90OwiAMBWAQpAoyxclkP3je/y0H2AQXz0WT8100rRD6kNI9/cRroemQL3hXhoujZYj4OHoAmBvYGcBISwbWBvfXCrytnIDUQMkbsBpagMA7zhtQdyTFQAmIG7IkYniiZuh3XGsPqoOZkMOJOpAcLqUzNFGGu/57fwc1hgtp0mVSyQAAAABJRU5ErkJggg==') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.vine {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAHCUExURQAAAAC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+j////54tRLAAAACUdFJOUwAAAEK+9/e+QQIDAwEqzskfUZmUNHz2mrT++V1w+f5tCanNFUDwfEjtjAyyvg027Hki27QMBJzaHE/1+FkNsN0iZvv6bxyAlB589lQeyud0KB8PQO+ZBUrc+eXgcRG/3CoATe316Wxw/P6BAgBt+fp4IAwh0d4zM9q7Fm76qi605EMSrvfX/PRtAivF9IAJNMLxhA2KYlJ9AAAAAWJLR0SVCGB6gwAAAAd0SU1FB+ACDRI2MOJd7FgAAADrSURBVBjTLY9VWwJgGEPfiYWBha2YYHcHditgd3d3odjdivvBfgK727nYsyPiCrw03j6+fv6AaAMCgyAI1lElJBQSFh6hBxDJqOiY2Lh4SEKiIQlITmFqWrqRJkhGJrOA7Bzm5uUXsBBSVMySUpSVs6KyqrqmFmKuY30D0NjU3NLa1t6h9jvZ1Q30WGi19fb1KzAwyKFhYGSUY+MTkwpMTXNmFpibX+Di0rICWFldW9/A5tb2zu7ePtTrg0MeHePklPYzuDRw7uDF5RWvbwC32O0d7x8en55f4DHF6xv5/vHp6f/k6/vH+evuf1LAObptvSvrAAAAAElFTkSuQmCC') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.vocaroo {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAw9JREFUOE9jYMABuMwYmCyTJKUCGlSnFSy02TTzeOyCiQcDViX26qVz2TAyYtWmEMwuoZ3M7V40LcB79pHkc0svpvzY8jD//87nxf+3Pyn8v/ZO8v+VNyP/2mZJumI1QCWSI8232Hjumitlfw5+qPp/9l8TCt76JP//xkdx/wsXWCzjtWFkwTCkbWFe9plPk/+ga4Txz/xt/D/hkN//gMXif21a+NbyWjIwoRiy6GDT5rP/mlFsPfyp5n/NpOj/22+0gMUXXIz/H7hC/L/bFKFbPDZMrHAD5H35OPt2J9zacDv/f3V7xv9FhwrBGubsT/1//Pjx/1GJ/mD+/nfl/1v3Ovy3KRJNQbHdOlXCvOO03/+pm1P/v3v37n90hhtYw9HPtf8Xb2v937cmHswHeWPRxYj/LvkK3igGKARwicTO07118H3V/5kbi/4vPZMJtK3s/6YH2f+Pfq1B8VbjWrdnMu5s4nAD9CNFhKwz5DTUvLl419zKvAcLtG1P84BRl/b/5M/6/6f/NPzf/qzo84yj0Uus0xUU4Zor54bm9+4OfZG02OCuoAMTb9ZkC9ull1Nvrr2Z+XvRpaRfc65H/68F+jl9svEhzyLFWoccWVc+eyTHq/twydjlKRln7jX9bNMkMJnbhoFRL1xCqmKx6/yi2fYXa/c5/e846PV/5fW0/7OPx/yfcjzop34ulxdGGvDuU8mMXaX507lBuiN6ueadmQeT/p/93vf/1O+G//sP5fw/eL3o/5JLif8zVxs+Tlir9S26UyeFQQvJGBE7FvaFZ9LfN+1y+WjbItSb3GmXvXd15v8zroH/HxgE/D+aGPx/18vi/z07PeZNPRKxe/Kh0Ae8toxscCO4zBkYXArk9C1SxJUYjBkYPPIVtbbuTftz3cz//2O9wP/75iSAXdO72/dt2HL5F6YlfBW4MiJYXMiBiW3t7azHBx+V/t89N+H/8a+1//e9K/9attDp5LQjYX8SuvVL8RoAkmxa65299Erq1FnHo0qrl7t4BddriIs4MrM3rfWcFd+pGwVSAwBZ0bKP8yrZPAAAAABJRU5ErkJggg==') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.youtube {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABIklEQVQoz53LvUrDUBjG8bOoOammSf1IoBSvoCB4JeIqOHgBLt6AIMRBBQelWurQ2kERnMRBsBUcIp5FJSBI5oQsJVkkUHh8W0o5nhaFHvjBgef/Mq+Q46RJBMkI/vE+aOus956tnEswIZe1LV0QyJ5sE2GzgZfVMtRNIdiDpccEssdlB1mW4bvTwdvWJtRdErM7U+8S/FJykCRJX5qm+KpVce8UMNLRLbulz4iSjTAMh6Iowsd5BeNadp3nUF0VlxAEwZBotXC0Usa4ll3meZdA1iguwvf9vpvDA2wvmKgYGtSud8suDB4TyGr2PF49D/vra9jRZ1BVdknMzgwuCGSnZEObwu6sBnVTCHZiaC7BhFx2PKdxUidiAH/4lLo9Mv0DELVs9qsOHXwAAAAASUVORK5CYII=') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + "/* XXX Moved to end of stylesheet to avoid breaking whole stylesheet in Maxthon. */\n" + "@supports (text-decoration-style: dashed) or (-moz-text-decoration-style: dashed) {\n" + " .quotelink.forwardlink,\n" + @@ -21883,13 +3802,18839 @@ " text-decoration-style: dashed;\n" + " border-bottom: none;\n" + " }\n" + -"}", - cssWWW: "#captcha-cnt {\n" + +"}\n", + +report: +"#g-recaptcha,\n" + +":root:not(.js-enabled) #captchaContainerAlt {\n" + " height: auto;\n" + -"}", - features: [['Polyfill', Polyfill], ['Normalize URL', NormalizeURL], ['Captcha Configuration', Captcha.replace], ['Redirect', Redirect], ['Header', Header], ['Catalog Links', CatalogLinks], ['Settings', Settings], ['Index Generator', Index], ['Disable Autoplay', AntiAutoplay], ['Announcement Hiding', PSAHiding], ['Fourchan thingies', Fourchan], ['Color User IDs', IDColor], ['Highlight by User ID', IDHighlight], ['Custom CSS', CustomCSS], ['Thread Links', ThreadLinks], ['Linkify', Linkify], ['Reveal Spoilers', RemoveSpoilers], ['Resurrect Quotes', Quotify], ['Filter', Filter], ['Thread Hiding Buttons', ThreadHiding], ['Reply Hiding Buttons', PostHiding], ['Recursive', Recursive], ['Strike-through Quotes', QuoteStrikeThrough], ['Quick Reply', QR], ['Cooldown', QR.cooldown], ['Pass Link', PassLink], ['Menu', Menu], ['Index Generator (Menu)', Index.menu], ['Report Link', ReportLink], ['Thread Hiding (Menu)', ThreadHiding.menu], ['Reply Hiding (Menu)', PostHiding.menu], ['Delete Link', DeleteLink], ['Filter (Menu)', Filter.menu], ['Edit Link', QR.oekaki.menu], ['Download Link', DownloadLink], ['Archive Link', ArchiveLink], ['Quote Inlining', QuoteInline], ['Quote Previewing', QuotePreview], ['Quote Backlinks', QuoteBacklink], ['Mark Quotes of You', QuoteYou], ['Mark OP Quotes', QuoteOP], ['Mark Cross-thread Quotes', QuoteCT], ['Anonymize', Anonymize], ['Time Formatting', Time], ['Relative Post Dates', RelativeDates], ['File Info Formatting', FileInfo], ['Fappe Tyme', FappeTyme], ['Gallery', Gallery], ['Gallery (menu)', Gallery.menu], ['Sauce', Sauce], ['Image Expansion', ImageExpand], ['Image Expansion (Menu)', ImageExpand.menu], ['Reveal Spoiler Thumbnails', RevealSpoilers], ['Image Loading', ImageLoader], ['Image Hover', ImageHover], ['Volume Control', Volume], ['WEBM Metadata', Metadata], ['Comment Expansion', ExpandComment], ['Thread Expansion', ExpandThread], ['Thread Excerpt', ThreadExcerpt], ['Favicon', Favicon], ['Unread', Unread], ['Quote Threading', QuoteThreading], ['Thread Stats', ThreadStats], ['Thread Updater', ThreadUpdater], ['Thread Watcher', ThreadWatcher], ['Thread Watcher (Menu)', ThreadWatcher.menu], ['Mark New IPs', MarkNewIPs], ['Index Navigation', Nav], ['Keybinds', Keybinds], ['Banner', Banner], ['Flash Features', Flash], ['Reply Pruning', ReplyPruning]] +"}\n" + +"#captchaContainerAlt td:nth-child(2) {\n" + +" display: table-cell !important;\n" + +"}\n", + +www: +"#captcha-cnt {\n" + +" height: auto;\n" + +"}\n" + +}; + +$ = (function() { + var $, + slice = [].slice, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + $ = function(selector, root) { + if (root == null) { + root = d.body; + } + return root.querySelector(selector); }; - Main.init(); + $.DAY = 24 * ($.HOUR = 60 * ($.MINUTE = 60 * ($.SECOND = 1000))); + + $.id = function(id) { + return d.getElementById(id); + }; + + $.ready = function(fc) { + var cb; + if (d.readyState !== 'loading') { + $.queueTask(fc); + return; + } + cb = function() { + $.off(d, 'DOMContentLoaded', cb); + return fc(); + }; + return $.on(d, 'DOMContentLoaded', cb); + }; + + $.formData = function(form) { + var fd, key, val; + if (form instanceof HTMLFormElement) { + return new FormData(form); + } + fd = new FormData(); + for (key in form) { + val = form[key]; + if (val) { + if (typeof val === 'object' && 'newName' in val) { + fd.append(key, val, val.newName); + } else { + fd.append(key, val); + } + } + } + return fd; + }; + + $.extend = function(object, properties) { + var key, val; + for (key in properties) { + val = properties[key]; + object[key] = val; + } + }; + + $.ajax = (function() { + var blockedError, blockedURLs, lastModified; + lastModified = {}; + blockedURLs = {}; + blockedError = function(url) { + var message; + if (blockedURLs[url]) { + return; + } + blockedURLs[url] = true; + message = $.el('div', { + innerHTML: "4chan X was blocked from loading the following URL:

    [More info]" + }); + $('span', message).textContent = (/^\/\//.test(url) ? location.protocol : '') + url; + return new Notice('warning', message, 30, function() { + return delete blockedURLs[url]; + }); + }; + return function(url, options, extra) { + var err, event, form, i, len, r, ref, ref1, type, upCallbacks, whenModified; + if (options == null) { + options = {}; + } + if (extra == null) { + extra = {}; + } + type = extra.type, whenModified = extra.whenModified, upCallbacks = extra.upCallbacks, form = extra.form; + url = url.replace(/^((?:https?:)?\/\/(?:\w+\.)?4c(?:ha|d)n\.org)\/adv\//, '$1//adv/'); + r = new XMLHttpRequest(); + type || (type = form && 'post' || 'get'); + try { + r.open(type, url, true); + } catch (_error) { + err = _error; + blockedError(url); + ref = ['error', 'loadend']; + for (i = 0, len = ref.length; i < len; i++) { + event = ref[i]; + r["on" + event] = options["on" + event]; + $.queueTask($.event, event, null, r); + } + return; + } + if (whenModified) { + if (((ref1 = lastModified[whenModified]) != null ? ref1[url] : void 0) != null) { + r.setRequestHeader('If-Modified-Since', lastModified[whenModified][url]); + } + $.on(r, 'load', function() { + return (lastModified[whenModified] || (lastModified[whenModified] = {}))[url] = r.getResponseHeader('Last-Modified'); + }); + } + if (/\.json$/.test(url)) { + if (options.responseType == null) { + options.responseType = 'json'; + } + } + $.extend(r, options); + if (options.responseType === 'json' && r.responseType !== 'json' && delete r.response) { + Object.defineProperty(r, 'response', { + configurable: true, + enumerable: true, + get: function() { + return JSON.parse(r.responseText); + } + }); + } + $.extend(r.upload, upCallbacks); + r.send(form); + return r; + }; + })(); + + (function() { + var reqs; + reqs = {}; + $.cache = function(url, cb, options) { + var err, req, rm; + if (req = reqs[url]) { + if (req.readyState === 4) { + $.queueTask(function() { + return cb.call(req, req.evt, true); + }); + } else { + req.callbacks.push(cb); + } + return req; + } + rm = function() { + return delete reqs[url]; + }; + try { + if (!(req = $.ajax(url, options))) { + return; + } + } catch (_error) { + err = _error; + return; + } + $.on(req, 'load', function(e) { + var fn1, i, len, ref; + this.evt = e; + ref = this.callbacks; + fn1 = (function(_this) { + return function(cb) { + return $.queueTask(function() { + return cb.call(_this, e, false); + }); + }; + })(this); + for (i = 0, len = ref.length; i < len; i++) { + cb = ref[i]; + fn1(cb); + } + return delete this.callbacks; + }); + $.on(req, 'abort error', rm); + req.callbacks = [cb]; + return reqs[url] = req; + }; + return $.cleanCache = function(testf) { + var url; + for (url in reqs) { + if (testf(url)) { + delete reqs[url]; + } + } + }; + })(); + + $.cb = { + checked: function() { + $.set(this.name, this.checked); + return Conf[this.name] = this.checked; + }, + value: function() { + $.set(this.name, this.value.trim()); + return Conf[this.name] = this.value; + } + }; + + $.asap = function(test, cb) { + if (test()) { + return cb(); + } else { + return setTimeout($.asap, 25, test, cb); + } + }; + + $.onExists = function(root, selector, cb) { + var el, observer; + if (el = $(selector, root)) { + return cb(el); + } + if ($.engine === 'edge' && d.readyState === 'loading') { + $.asap((function() { + return d.readyState !== 'loading' || $(selector, root); + }), function() { + return $.onExists(root, selector, cb); + }); + return; + } + observer = new MutationObserver(function() { + if (el = $(selector, root)) { + observer.disconnect(); + return cb(el); + } + }); + return observer.observe(root, { + childList: true, + subtree: true + }); + }; + + $.addStyle = function(css, id, test) { + var style; + if (test == null) { + test = 'head'; + } + style = $.el('style', { + textContent: css + }); + if (id != null) { + style.id = id; + } + $.onExists(doc, test, function() { + return $.add(d.head, style); + }); + return style; + }; + + $.x = function(path, root) { + root || (root = d.body); + return d.evaluate(path, root, null, 8, null).singleNodeValue; + }; + + $.X = function(path, root) { + root || (root = d.body); + return d.evaluate(path, root, null, 7, null); + }; + + $.addClass = function() { + var className, classNames, el, i, len; + el = arguments[0], classNames = 2 <= arguments.length ? slice.call(arguments, 1) : []; + for (i = 0, len = classNames.length; i < len; i++) { + className = classNames[i]; + el.classList.add(className); + } + }; + + $.rmClass = function() { + var className, classNames, el, i, len; + el = arguments[0], classNames = 2 <= arguments.length ? slice.call(arguments, 1) : []; + for (i = 0, len = classNames.length; i < len; i++) { + className = classNames[i]; + el.classList.remove(className); + } + }; + + $.toggleClass = function(el, className) { + return el.classList.toggle(className); + }; + + $.hasClass = function(el, className) { + return indexOf.call(el.classList, className) >= 0; + }; + + $.rm = function(el) { + return el != null ? el.remove() : void 0; + }; + + $.rmAll = function(root) { + return root.textContent = null; + }; + + $.tn = function(s) { + return d.createTextNode(s); + }; + + $.frag = function() { + return d.createDocumentFragment(); + }; + + $.nodes = function(nodes) { + var frag, i, len, node; + if (!(nodes instanceof Array)) { + return nodes; + } + frag = $.frag(); + for (i = 0, len = nodes.length; i < len; i++) { + node = nodes[i]; + frag.appendChild(node); + } + return frag; + }; + + $.add = function(parent, el) { + return parent.appendChild($.nodes(el)); + }; + + $.prepend = function(parent, el) { + return parent.insertBefore($.nodes(el), parent.firstChild); + }; + + $.after = function(root, el) { + return root.parentNode.insertBefore($.nodes(el), root.nextSibling); + }; + + $.before = function(root, el) { + return root.parentNode.insertBefore($.nodes(el), root); + }; + + $.replace = function(root, el) { + return root.parentNode.replaceChild($.nodes(el), root); + }; + + $.el = function(tag, properties, properties2) { + var el; + el = d.createElement(tag); + if (properties) { + $.extend(el, properties); + } + if (properties2) { + $.extend(el, properties2); + } + return el; + }; + + $.on = function(el, events, handler) { + var event, i, len, ref; + ref = events.split(' '); + for (i = 0, len = ref.length; i < len; i++) { + event = ref[i]; + el.addEventListener(event, handler, false); + } + }; + + $.off = function(el, events, handler) { + var event, i, len, ref; + ref = events.split(' '); + for (i = 0, len = ref.length; i < len; i++) { + event = ref[i]; + el.removeEventListener(event, handler, false); + } + }; + + $.one = function(el, events, handler) { + var cb; + cb = function(e) { + $.off(el, events, cb); + return handler.call(this, e); + }; + return $.on(el, events, cb); + }; + + $.event = function(event, detail, root) { + if (root == null) { + root = d; + } + if ((detail != null) && typeof cloneInto === 'function') { + detail = cloneInto(detail, d.defaultView); + } + return root.dispatchEvent(new CustomEvent(event, { + bubbles: true, + detail: detail + })); + }; + + (function() { + var clone, err, ref, unsafeConstructors; + if (!(/PaleMoon\//.test(navigator.userAgent) && +(typeof GM_info !== "undefined" && GM_info !== null ? (ref = GM_info.version) != null ? ref.split('.')[0] : void 0 : void 0) >= 2 && typeof cloneInto === 'undefined')) { + return; + } + try { + return new CustomEvent('x', { + detail: {} + }); + } catch (_error) { + err = _error; + unsafeConstructors = { + Object: unsafeWindow.Object, + Array: unsafeWindow.Array + }; + clone = function(obj) { + var constructor, key, obj2, val; + if ((obj != null) && typeof obj === 'object' && (constructor = unsafeConstructors[obj.constructor.name])) { + obj2 = new constructor(); + for (key in obj) { + val = obj[key]; + obj2[key] = clone(val); + } + return obj2; + } else { + return obj; + } + }; + return $.event = function(event, detail, root) { + if (root == null) { + root = d; + } + return root.dispatchEvent(new CustomEvent(event, { + bubbles: true, + detail: clone(detail) + })); + }; + } + })(); + + $.open = typeof GM_openInTab !== "undefined" && GM_openInTab !== null ? GM_openInTab : function(url) { + return window.open(url, '_blank'); + }; + + $.debounce = function(wait, fn) { + var args, exec, lastCall, that, timeout; + lastCall = 0; + timeout = null; + that = null; + args = null; + exec = function() { + lastCall = Date.now(); + return fn.apply(that, args); + }; + return function() { + args = arguments; + that = this; + if (lastCall < Date.now() - wait) { + return exec(); + } + clearTimeout(timeout); + return timeout = setTimeout(exec, wait); + }; + }; + + $.queueTask = (function() { + var execTask, taskChannel, taskQueue; + taskQueue = []; + execTask = function() { + var args, func, task; + task = taskQueue.shift(); + func = task[0]; + args = Array.prototype.slice.call(task, 1); + return func.apply(func, args); + }; + if (window.MessageChannel) { + taskChannel = new MessageChannel(); + taskChannel.port1.onmessage = execTask; + return function() { + taskQueue.push(arguments); + return taskChannel.port2.postMessage(null); + }; + } else { + return function() { + taskQueue.push(arguments); + return setTimeout(execTask, 0); + }; + } + })(); + + $.globalEval = function(code) { + var script; + script = $.el('script', { + textContent: code + }); + $.add(d.head || doc, script); + return $.rm(script); + }; + + $.global = function(fn) { + if (doc) { + return $.globalEval("(" + fn + ")();"); + } else { + return fn(); + } + }; + + $.bytesToString = function(size) { + var unit; + unit = 0; + while (size >= 1024) { + size /= 1024; + unit++; + } + size = unit > 1 ? Math.round(size * 100) / 100 : Math.round(size); + return size + " " + ['B', 'KB', 'MB', 'GB'][unit]; + }; + + $.minmax = function(value, min, max) { + return (value < min ? min : value > max ? max : value); + }; + + $.hasAudio = function(video) { + return video.mozHasAudio || !!video.webkitAudioDecodedByteCount; + }; + + $.engine = (function() { + if (/Edge\//.test(navigator.userAgent)) { + return 'edge'; + } + if (/Chrome\//.test(navigator.userAgent)) { + return 'blink'; + } + if (/WebKit\//.test(navigator.userAgent)) { + return 'webkit'; + } + if (/Gecko\/|Goanna/.test(navigator.userAgent)) { + return 'gecko'; + } + })(); + + $.platform = 'userscript'; + + try { + localStorage.getItem('x'); + $.hasStorage = true; + } catch (_error) { + $.hasStorage = false; + } + + $.item = function(key, val) { + var item; + item = {}; + item[key] = val; + return item; + }; + + $.syncing = {}; + + if (typeof GM_deleteValue !== "undefined" && GM_deleteValue !== null) { + $.getValue = GM_getValue; + $.listValues = function() { + return GM_listValues(); + }; + } else if ($.hasStorage) { + $.getValue = function(key) { + return localStorage[key]; + }; + $.listValues = function() { + var key, results; + results = []; + for (key in localStorage) { + if (key.slice(0, g.NAMESPACE.length) === g.NAMESPACE) { + results.push(key); + } + } + return results; + }; + } else { + $.getValue = function() {}; + $.listValues = function() { + return []; + }; + } + + if (typeof GM_addValueChangeListener !== "undefined" && GM_addValueChangeListener !== null) { + $.setValue = GM_setValue; + $.deleteValue = GM_deleteValue; + } else if (typeof GM_deleteValue !== "undefined" && GM_deleteValue !== null) { + $.oldValue = {}; + $.setValue = function(key, val) { + GM_setValue(key, val); + if (key in $.syncing) { + $.oldValue[key] = val; + if ($.hasStorage) { + return localStorage[key] = val; + } + } + }; + $.deleteValue = function(key) { + GM_deleteValue(key); + if (key in $.syncing) { + delete $.oldValue[key]; + if ($.hasStorage) { + return localStorage.removeItem(key); + } + } + }; + if (!$.hasStorage) { + $.cantSync = true; + } + } else if ($.hasStorage) { + $.oldValue = {}; + $.setValue = function(key, val) { + if (key in $.syncing) { + $.oldValue[key] = val; + } + return localStorage[key] = val; + }; + $.deleteValue = function(key) { + if (key in $.syncing) { + delete $.oldValue[key]; + } + return localStorage.removeItem(key); + }; + } else { + $.setValue = function() {}; + $.deleteValue = function() {}; + $.cantSync = $.cantSet = true; + } + + if (typeof GM_addValueChangeListener !== "undefined" && GM_addValueChangeListener !== null) { + $.sync = function(key, cb) { + return $.syncing[key] = GM_addValueChangeListener(g.NAMESPACE + key, function(key2, oldValue, newValue, remote) { + if (remote) { + if (newValue !== void 0) { + newValue = JSON.parse(newValue); + } + return cb(newValue, key); + } + }); + }; + $.forceSync = function() {}; + } else if ((typeof GM_deleteValue !== "undefined" && GM_deleteValue !== null) || $.hasStorage) { + $.sync = function(key, cb) { + key = g.NAMESPACE + key; + $.syncing[key] = cb; + return $.oldValue[key] = $.getValue(key); + }; + (function() { + var onChange; + onChange = function(arg) { + var cb, key, newValue; + key = arg.key, newValue = arg.newValue; + if (!(cb = $.syncing[key])) { + return; + } + if (newValue != null) { + if (newValue === $.oldValue[key]) { + return; + } + $.oldValue[key] = newValue; + return cb(JSON.parse(newValue), key.slice(g.NAMESPACE.length)); + } else { + if ($.oldValue[key] == null) { + return; + } + delete $.oldValue[key]; + return cb(void 0, key.slice(g.NAMESPACE.length)); + } + }; + $.on(window, 'storage', onChange); + return $.forceSync = function(key) { + key = g.NAMESPACE + key; + return onChange({ + key: key, + newValue: $.getValue(key) + }); + }; + })(); + } else { + $.sync = function() {}; + $.forceSync = function() {}; + } + + $["delete"] = function(keys) { + var i, key, len; + if (!(keys instanceof Array)) { + keys = [keys]; + } + for (i = 0, len = keys.length; i < len; i++) { + key = keys[i]; + $.deleteValue(g.NAMESPACE + key); + } + }; + + $.get = function(key, val, cb) { + var items; + if (typeof cb === 'function') { + items = $.item(key, val); + } else { + items = key; + cb = val; + } + return $.queueTask(function() { + for (key in items) { + if (val = $.getValue(g.NAMESPACE + key)) { + items[key] = JSON.parse(val); + } + } + return cb(items); + }); + }; + + $.set = function(keys, val, cb) { + var key, value; + if (typeof keys === 'string') { + $.setValue(g.NAMESPACE + keys, JSON.stringify(val)); + } else { + for (key in keys) { + value = keys[key]; + $.setValue(g.NAMESPACE + key, JSON.stringify(value)); + } + cb = val; + } + return typeof cb === "function" ? cb() : void 0; + }; + + $.clear = function(cb) { + var id; + $["delete"](Object.keys(Conf)); + $["delete"](['previousversion', 'AutoWatch', 'QR Size', 'captchas', 'QR.persona', 'hiddenPSA']); + $["delete"]((function() { + var i, len, ref, results; + ref = ['embedding', 'updater', 'thread-stats', 'thread-watcher', 'qr']; + results = []; + for (i = 0, len = ref.length; i < len; i++) { + id = ref[i]; + results.push(id + ".position"); + } + return results; + })()); + try { + $["delete"]($.listValues().map(function(key) { + return key.replace(g.NAMESPACE, ''); + })); + } catch (_error) {} + return typeof cb === "function" ? cb() : void 0; + }; + + return $; + +}).call(this); + +$$ = (function() { + var slice = [].slice; + + return function(selector, root) { + if (root == null) { + root = d.body; + } + return slice.call(root.querySelectorAll(selector)); + }; + +}).call(this); + +CrossOrigin = (function() { + var CrossOrigin; + + CrossOrigin = { + binary: function(url, cb, headers) { + var options, ref, workaround; + if (headers == null) { + headers = {}; + } + url = url.replace(/^((?:https?:)?\/\/(?:\w+\.)?4c(?:ha|d)n\.org)\/adv\//, '$1//adv/'); + workaround = $.engine === 'gecko' && (typeof GM_info !== "undefined" && GM_info !== null) && /^[0-2]\.|^3\.[01](?!\d)/.test(GM_info.version); + workaround || (workaround = /PaleMoon\//.test(navigator.userAgent)); + workaround || (workaround = (typeof GM_info !== "undefined" && GM_info !== null ? (ref = GM_info.script) != null ? ref.includeJSB : void 0 : void 0) != null); + options = { + method: "GET", + url: url, + headers: headers, + onload: function(xhr) { + var contentDisposition, contentType, data, i, r, ref1, ref2; + if (workaround) { + r = xhr.responseText; + data = new Uint8Array(r.length); + i = 0; + while (i < r.length) { + data[i] = r.charCodeAt(i); + i++; + } + } else { + data = new Uint8Array(xhr.response); + } + if (typeof xhr.responseHeaders === 'object') { + contentType = xhr.responseHeaders['Content-Type']; + contentDisposition = xhr.responseHeaders['Content-Disposition']; + } else { + contentType = (ref1 = xhr.responseHeaders.match(/Content-Type:\s*(.*)/i)) != null ? ref1[1] : void 0; + contentDisposition = (ref2 = xhr.responseHeaders.match(/Content-Disposition:\s*(.*)/i)) != null ? ref2[1] : void 0; + } + return cb(data, contentType, contentDisposition); + }, + onerror: function() { + return cb(null); + }, + onabort: function() { + return cb(null); + } + }; + if (workaround) { + options.overrideMimeType = options.mimeType = 'text/plain; charset=x-user-defined'; + } else { + options.responseType = 'arraybuffer'; + } + return GM_xmlhttpRequest(options); + }, + file: function(url, cb) { + return CrossOrigin.binary(url, function(data, contentType, contentDisposition) { + var blob, match, mime, name, ref, ref1, ref2, ref3; + if (data == null) { + return cb(null); + } + name = (ref = url.match(/([^\/]+)\/*$/)) != null ? ref[1] : void 0; + mime = (contentType != null ? contentType.match(/[^;]*/)[0] : void 0) || 'application/octet-stream'; + match = (contentDisposition != null ? (ref1 = contentDisposition.match(/\bfilename\s*=\s*"((\\"|[^"])+)"/i)) != null ? ref1[1] : void 0 : void 0) || (contentType != null ? (ref2 = contentType.match(/\bname\s*=\s*"((\\"|[^"])+)"/i)) != null ? ref2[1] : void 0 : void 0); + if (match) { + name = match.replace(/\\"/g, '"'); + } + if ((typeof GM_info !== "undefined" && GM_info !== null ? (ref3 = GM_info.script) != null ? ref3.includeJSB : void 0 : void 0) != null) { + mime = QR.typeFromExtension[name.match(/[^.]*$/)[0].toLowerCase()] || 'application/octet-stream'; + } + blob = new Blob([data], { + type: mime + }); + blob.name = name; + return cb(blob); + }); + }, + json: (function() { + var callbacks, responses; + callbacks = {}; + responses = {}; + return function(url, cb) { + if (responses[url]) { + cb(responses[url]); + return; + } + if (callbacks[url]) { + callbacks[url].push(cb); + return; + } + callbacks[url] = [cb]; + return GM_xmlhttpRequest({ + method: "GET", + url: url + '', + onload: function(xhr) { + var j, len, ref, response; + response = JSON.parse(xhr.responseText); + ref = callbacks[url]; + for (j = 0, len = ref.length; j < len; j++) { + cb = ref[j]; + cb(response); + } + delete callbacks[url]; + return responses[url] = response; + }, + onerror: function() { + return delete callbacks[url]; + }, + onabort: function() { + return delete callbacks[url]; + } + }); + }; + })() + }; + + return CrossOrigin; + +}).call(this); + +Board = (function() { + var Board; + + Board = (function() { + Board.prototype.toString = function() { + return this.ID; + }; + + function Board(ID) { + this.ID = ID; + this.threads = new SimpleDict(); + this.posts = new SimpleDict(); + g.boards[this] = this; + } + + return Board; + + })(); + + return Board; + +}).call(this); + +Callbacks = (function() { + var Callbacks; + + Callbacks = (function() { + Callbacks.Post = new Callbacks('Post'); + + Callbacks.Thread = new Callbacks('Thread'); + + Callbacks.CatalogThread = new Callbacks('Catalog Thread'); + + function Callbacks(type) { + this.type = type; + this.keys = []; + } + + Callbacks.prototype.push = function(arg) { + var cb, name; + name = arg.name, cb = arg.cb; + if (!this[name]) { + this.keys.push(name); + } + return this[name] = cb; + }; + + Callbacks.prototype.execute = function(node, keys) { + var err, errors, i, len, name, ref; + if (keys == null) { + keys = this.keys; + } + for (i = 0, len = keys.length; i < len; i++) { + name = keys[i]; + try { + if ((ref = this[name]) != null) { + ref.call(node); + } + } catch (_error) { + err = _error; + if (!errors) { + errors = []; + } + errors.push({ + message: ['"', name, '" crashed on node ', this.type, ' No.', node.ID, ' (', node.board, ').'].join(''), + error: err + }); + } + } + if (errors) { + return Main.handleErrors(errors); + } + }; + + return Callbacks; + + })(); + + return Callbacks; + +}).call(this); + +CatalogThread = (function() { + var CatalogThread; + + CatalogThread = (function() { + CatalogThread.prototype.toString = function() { + return this.ID; + }; + + function CatalogThread(root, thread) { + this.thread = thread; + this.ID = this.thread.ID; + this.board = this.thread.board; + this.nodes = { + root: root, + thumb: $('.catalog-thumb', root), + icons: $('.catalog-icons', root), + postCount: $('.post-count', root), + fileCount: $('.file-count', root), + pageCount: $('.page-count', root), + comment: $('.comment', root) + }; + this.thread.catalogView = this; + } + + return CatalogThread; + + })(); + + return CatalogThread; + +}).call(this); + +Connection = (function() { + var Connection, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; + + Connection = (function() { + function Connection(target, origin, cb) { + this.target = target; + this.origin = origin; + this.cb = cb != null ? cb : {}; + this.onMessage = bind(this.onMessage, this); + this.send = bind(this.send, this); + $.on(window, 'message', this.onMessage); + } + + Connection.prototype.targetWindow = function() { + if (this.target instanceof window.HTMLIFrameElement) { + return this.target.contentWindow; + } else { + return this.target; + } + }; + + Connection.prototype.send = function(data) { + return this.targetWindow().postMessage("" + g.NAMESPACE + (JSON.stringify(data)), this.origin); + }; + + Connection.prototype.onMessage = function(e) { + var base, data, type, value; + if (!(e.source === this.targetWindow() && e.origin === this.origin && typeof e.data === 'string' && e.data.slice(0, g.NAMESPACE.length) === g.NAMESPACE)) { + return; + } + data = JSON.parse(e.data.slice(g.NAMESPACE.length)); + for (type in data) { + value = data[type]; + if (typeof (base = this.cb)[type] === "function") { + base[type](value); + } + } + }; + + return Connection; + + })(); + + return Connection; + +}).call(this); + +DataBoard = (function() { + var DataBoard, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; + + DataBoard = (function() { + DataBoard.keys = ['hiddenThreads', 'hiddenPosts', 'lastReadPosts', 'yourPosts', 'watchedThreads', 'customTitles']; + + function DataBoard(key, sync, dontClean) { + var init; + this.key = key; + this.onSync = bind(this.onSync, this); + this.data = Conf[this.key]; + $.sync(this.key, this.onSync); + if (!dontClean) { + this.clean(); + } + if (!sync) { + return; + } + init = (function(_this) { + return function() { + $.off(d, '4chanXInitFinished', init); + return _this.sync = sync; + }; + })(this); + $.on(d, '4chanXInitFinished', init); + } + + DataBoard.prototype.save = function(cb) { + return $.set(this.key, this.data, cb); + }; + + DataBoard.prototype["delete"] = function(arg) { + var boardID, postID, ref, threadID; + boardID = arg.boardID, threadID = arg.threadID, postID = arg.postID; + $.forceSync(this.key); + if (postID) { + if (!((ref = this.data.boards[boardID]) != null ? ref[threadID] : void 0)) { + return; + } + delete this.data.boards[boardID][threadID][postID]; + this.deleteIfEmpty({ + boardID: boardID, + threadID: threadID + }); + } else if (threadID) { + if (!this.data.boards[boardID]) { + return; + } + delete this.data.boards[boardID][threadID]; + this.deleteIfEmpty({ + boardID: boardID + }); + } else { + delete this.data.boards[boardID]; + } + return this.save(); + }; + + DataBoard.prototype.deleteIfEmpty = function(arg) { + var boardID, threadID; + boardID = arg.boardID, threadID = arg.threadID; + $.forceSync(this.key); + if (threadID) { + if (!Object.keys(this.data.boards[boardID][threadID]).length) { + delete this.data.boards[boardID][threadID]; + return this.deleteIfEmpty({ + boardID: boardID + }); + } + } else if (!Object.keys(this.data.boards[boardID]).length) { + return delete this.data.boards[boardID]; + } + }; + + DataBoard.prototype.set = function(arg, cb) { + var base, base1, base2, boardID, postID, threadID, val; + boardID = arg.boardID, threadID = arg.threadID, postID = arg.postID, val = arg.val; + $.forceSync(this.key); + if (postID !== void 0) { + ((base = ((base1 = this.data.boards)[boardID] || (base1[boardID] = {})))[threadID] || (base[threadID] = {}))[postID] = val; + } else if (threadID !== void 0) { + ((base2 = this.data.boards)[boardID] || (base2[boardID] = {}))[threadID] = val; + } else { + this.data.boards[boardID] = val; + } + return this.save(cb); + }; + + DataBoard.prototype.get = function(arg) { + var ID, board, boardID, defaultValue, i, len, postID, thread, threadID, val; + boardID = arg.boardID, threadID = arg.threadID, postID = arg.postID, defaultValue = arg.defaultValue; + if (board = this.data.boards[boardID]) { + if (threadID == null) { + if (postID != null) { + for (thread = i = 0, len = board.length; i < len; thread = ++i) { + ID = board[thread]; + if (postID in thread) { + val = thread[postID]; + break; + } + } + } else { + val = board; + } + } else if (thread = board[threadID]) { + val = postID != null ? thread[postID] : thread; + } + } + return val || defaultValue; + }; + + DataBoard.prototype.forceSync = function() { + return $.forceSync(this.key); + }; + + DataBoard.prototype.clean = function() { + var boardID, now, ref, val; + $.forceSync(this.key); + ref = this.data.boards; + for (boardID in ref) { + val = ref[boardID]; + this.deleteIfEmpty({ + boardID: boardID + }); + } + now = Date.now(); + if ((this.data.lastChecked || 0) < now - 2 * $.HOUR) { + this.data.lastChecked = now; + for (boardID in this.data.boards) { + this.ajaxClean(boardID); + } + } + }; + + DataBoard.prototype.ajaxClean = function(boardID) { + return $.cache("//a.4cdn.org/" + boardID + "/threads.json", (function(_this) { + return function(e1) { + var ref; + if ((ref = e1.target.status) !== 200 && ref !== 404) { + return; + } + return $.cache("//a.4cdn.org/" + boardID + "/archive.json", function(e2) { + var ref1; + if ((ref1 = e2.target.status) !== 200 && ref1 !== 404) { + return; + } + return _this.ajaxCleanParse(boardID, e1.target.response, e2.target.response); + }); + }; + })(this)); + }; + + DataBoard.prototype.ajaxCleanParse = function(boardID, response1, response2) { + var ID, board, i, j, k, len, len1, len2, page, ref, thread, threads; + if (!(board = this.data.boards[boardID])) { + return; + } + threads = {}; + if (response1) { + for (i = 0, len = response1.length; i < len; i++) { + page = response1[i]; + ref = page.threads; + for (j = 0, len1 = ref.length; j < len1; j++) { + thread = ref[j]; + ID = thread.no; + if (ID in board) { + threads[ID] = board[ID]; + } + } + } + } + if (response2) { + for (k = 0, len2 = response2.length; k < len2; k++) { + ID = response2[k]; + if (ID in board) { + threads[ID] = board[ID]; + } + } + } + this.data.boards[boardID] = threads; + this.deleteIfEmpty({ + boardID: boardID + }); + return this.save(); + }; + + DataBoard.prototype.onSync = function(data) { + this.data = data || { + boards: {} + }; + return typeof this.sync === "function" ? this.sync() : void 0; + }; + + return DataBoard; + + })(); + + return DataBoard; + +}).call(this); + +Fetcher = (function() { + var Fetcher, + slice = [].slice; + + Fetcher = (function() { + function Fetcher(boardID1, threadID, postID1, root, quoter) { + var post; + this.boardID = boardID1; + this.threadID = threadID; + this.postID = postID1; + this.root = root; + this.quoter = quoter; + if (post = g.posts[this.boardID + "." + this.postID]) { + this.insert(post); + return; + } + this.root.textContent = "Loading post No." + this.postID + "..."; + if (this.threadID) { + $.cache("//a.4cdn.org/" + this.boardID + "/thread/" + this.threadID + ".json", (function(_this) { + return function(e, isCached) { + return _this.fetchedPost(e.target, isCached); + }; + })(this)); + } else { + this.archivedPost(); + } + } + + Fetcher.prototype.insert = function(post) { + var boardID, clone, k, len, nodes, postID, quote, ref, ref1; + if (!this.root.parentNode) { + return; + } + clone = post.addClone(this.quoter.context, $.hasClass(this.root, 'dialog')); + Main.callbackNodes('Post', [clone]); + nodes = clone.nodes; + $.rmAll(nodes.root); + $.add(nodes.root, nodes.post); + ref = clone.nodes.quotelinks.concat(slice.call(clone.nodes.backlinks)); + for (k = 0, len = ref.length; k < len; k++) { + quote = ref[k]; + ref1 = Get.postDataFromLink(quote), boardID = ref1.boardID, postID = ref1.postID; + if (postID === this.quoter.ID && boardID === this.quoter.board.ID) { + $.addClass(quote, 'forwardlink'); + } + } + $.rmAll(this.root); + $.add(this.root, nodes.root); + return $.event('PostsInserted'); + }; + + Fetcher.prototype.fetchedPost = function(req, isCached) { + var api, board, k, len, post, posts, status, thread; + if (post = g.posts[this.boardID + "." + this.postID]) { + this.insert(post); + return; + } + status = req.status; + if (status !== 200 && status !== 304) { + if (this.archivedPost()) { + return; + } + $.addClass(this.root, 'warning'); + this.root.textContent = status === 404 ? "Thread No." + this.threadID + " 404'd." : "Error " + req.statusText + " (" + req.status + ")."; + return; + } + posts = req.response.posts; + Build.spoilerRange[this.boardID] = posts[0].custom_spoiler; + for (k = 0, len = posts.length; k < len; k++) { + post = posts[k]; + if (post.no === this.postID) { + break; + } + } + if (post.no !== this.postID) { + if (isCached) { + api = "//a.4cdn.org/" + this.boardID + "/thread/" + this.threadID + ".json"; + $.cleanCache(function(url) { + return url === api; + }); + $.cache(api, (function(_this) { + return function(e) { + return _this.fetchedPost(e.target, false); + }; + })(this)); + return; + } + if (this.archivedPost()) { + return; + } + $.addClass(this.root, 'warning'); + this.root.textContent = "Post No." + this.postID + " was not found."; + return; + } + board = g.boards[this.boardID] || new Board(this.boardID); + thread = g.threads[this.boardID + "." + this.threadID] || new Thread(this.threadID, board); + post = new Post(Build.postFromObject(post, this.boardID), thread, board); + post.isFetchedQuote = true; + Main.callbackNodes('Post', [post]); + return this.insert(post); + }; + + Fetcher.prototype.archivedPost = function() { + var archive, url; + if (!Conf['Resurrect Quotes']) { + return false; + } + if (!(url = Redirect.to('post', { + boardID: this.boardID, + postID: this.postID + }))) { + return false; + } + archive = Redirect.data.post[this.boardID]; + if (/^https:\/\//.test(url) || location.protocol === 'http:') { + $.cache(url, (function(_this) { + return function(e) { + return _this.parseArchivedPost(e.target.response, url, archive); + }; + })(this), { + responseType: 'json', + withCredentials: archive.withCredentials + }); + return true; + } else if (Conf['Exempt Archives from Encryption']) { + CrossOrigin.json(url, (function(_this) { + return function(response) { + var key, media, ref; + media = response.media; + if (media) { + for (key in media) { + if (/_link$/.test(key)) { + if (!((ref = media[key]) != null ? ref.match(/^http:\/\//) : void 0)) { + delete media[key]; + } + } + } + } + return _this.parseArchivedPost(response, url, archive); + }; + })(this)); + return true; + } + return false; + }; + + Fetcher.prototype.parseArchivedPost = function(data, url, archive) { + var board, comment, greentext, i, j, key, o, post, ref, ref1, text, text2, thread, val; + if (post = g.posts[this.boardID + "." + this.postID]) { + this.insert(post); + return; + } + if (data == null) { + $.addClass(this.root, 'warning'); + this.root.textContent = "Error fetching Post No." + this.postID + " from " + archive.name + "."; + return; + } + if (data.error) { + $.addClass(this.root, 'warning'); + this.root.textContent = data.error; + return; + } + comment = (data.comment || '').split(/(\n|\[\/?(?:b|spoiler|code|moot|banned)\])/); + comment = (function() { + var k, len, results; + results = []; + for (i = k = 0, len = comment.length; k < len; i = ++k) { + text = comment[i]; + if (i % 2 === 1) { + results.push(this.archiveTags[text]); + } else { + greentext = text[0] === '>'; + text = text.replace(/(\[\/?[a-z]+):lit(\])/g, '$1$2'); + text = (function() { + var l, len1, ref, results1; + ref = text.split(/(>>(?:>\/[a-z\d]+\/)?\d+)/g); + results1 = []; + for (j = l = 0, len1 = ref.length; l < len1; j = ++l) { + text2 = ref[j]; + results1.push({ + innerHTML: ((j % 2) ? "" + E(text2) + "" : E(text2)) + }); + } + return results1; + })(); + text = { + innerHTML: ((greentext) ? "" + E.cat(text) + "" : E.cat(text)) + }; + results.push(text); + } + } + return results; + }).call(this); + comment = { + innerHTML: E.cat(comment) + }; + this.threadID = +data.thread_num; + o = { + postID: this.postID, + threadID: this.threadID, + boardID: this.boardID, + isReply: this.postID !== this.threadID + }; + o.info = { + subject: data.title, + email: data.email, + name: data.name || '', + tripcode: data.trip, + capcode: (function() { + switch (data.capcode) { + case 'M': + return 'Mod'; + case 'A': + return 'Admin'; + case 'D': + return 'Developer'; + } + })(), + uniqueID: data.poster_hash, + flagCode: data.poster_country, + flag: data.poster_country_name, + dateUTC: data.timestamp, + dateText: data.fourchan_date, + commentHTML: comment + }; + if (o.info.capcode) { + delete o.info.uniqueID; + } + if ((ref = data.media) != null ? ref.media_filename : void 0) { + ref1 = data.media; + for (key in ref1) { + val = ref1[key]; + if (/_link$/.test(key) && (val != null ? val[0] : void 0) === '/') { + data.media[key] = url.split('/', 3).join('/') + val; + } + } + o.file = { + name: data.media.media_filename, + url: data.media.media_link || data.media.remote_media_link || (location.protocol + "//i.4cdn.org/" + this.boardID + "/" + (encodeURIComponent(data.media[this.boardID === 'f' ? 'media_filename' : 'media_orig']))), + height: data.media.media_h, + width: data.media.media_w, + MD5: data.media.media_hash, + size: $.bytesToString(data.media.media_size), + thumbURL: data.media.thumb_link || (location.protocol + "//i.4cdn.org/" + this.boardID + "/" + data.media.preview_orig), + theight: data.media.preview_h, + twidth: data.media.preview_w, + isSpoiler: data.media.spoiler === '1' + }; + if (!/\.pdf$/.test(o.file.url)) { + o.file.dimensions = o.file.width + "x" + o.file.height; + } + if (this.boardID === 'f' && data.media.exif) { + o.file.tag = JSON.parse(data.media.exif).Tag; + } + } + board = g.boards[this.boardID] || new Board(this.boardID); + thread = g.threads[this.boardID + "." + this.threadID] || new Thread(this.threadID, board); + post = new Post(Build.post(o), thread, board); + post.kill(); + if (post.file) { + post.file.thumbURL = o.file.thumbURL; + } + post.isFetchedQuote = true; + Main.callbackNodes('Post', [post]); + return this.insert(post); + }; + + Fetcher.prototype.archiveTags = { + '\n': { + innerHTML: "
    " + }, + '[b]': { + innerHTML: "" + }, + '[/b]': { + innerHTML: "" + }, + '[spoiler]': { + innerHTML: "" + }, + '[/spoiler]': { + innerHTML: "" + }, + '[code]': { + innerHTML: "
    "
    +      },
    +      '[/code]': {
    +        innerHTML: "
    " + }, + '[moot]': { + innerHTML: "
    " + }, + '[/moot]': { + innerHTML: "
    " + }, + '[banned]': { + innerHTML: "" + }, + '[/banned]': { + innerHTML: "" + } + }; + + return Fetcher; + + })(); + + return Fetcher; + +}).call(this); + +Notice = (function() { + var Notice, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; + + Notice = (function() { + function Notice(type, content, timeout, onclose) { + this.timeout = timeout; + this.onclose = onclose; + this.close = bind(this.close, this); + this.add = bind(this.add, this); + this.el = $.el('div', { + innerHTML: "
    " + }); + this.el.style.opacity = 0; + this.setType(type); + $.on(this.el.firstElementChild, 'click', this.close); + if (typeof content === 'string') { + content = $.tn(content); + } + $.add(this.el.lastElementChild, content); + $.ready(this.add); + } + + Notice.prototype.setType = function(type) { + return this.el.className = "notification " + type; + }; + + Notice.prototype.add = function() { + if (this.closed) { + return; + } + if (d.hidden) { + $.on(d, 'visibilitychange', this.add); + return; + } + $.off(d, 'visibilitychange', this.add); + $.add(Header.noticesRoot, this.el); + this.el.clientHeight; + this.el.style.opacity = 1; + if (this.timeout) { + return setTimeout(this.close, this.timeout * $.SECOND); + } + }; + + Notice.prototype.close = function() { + this.closed = true; + $.off(d, 'visibilitychange', this.add); + $.rm(this.el); + return typeof this.onclose === "function" ? this.onclose() : void 0; + }; + + return Notice; + + })(); + + return Notice; + +}).call(this); + +Post = (function() { + var Post, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + Post = (function() { + Post.prototype.toString = function() { + return this.ID; + }; + + function Post(root, thread, board) { + var capcode, clone, date, email, flag, info, j, len, name, post, ref, subject, tripcode, uniqueID; + this.thread = thread; + this.board = board; + this.ID = +root.id.slice(2); + this.fullID = this.board + "." + this.ID; + this.context = this; + root.dataset.fullID = this.fullID; + post = $('.post', root); + info = $('.postInfo', post); + this.nodes = { + root: root, + post: post, + info: info, + nameBlock: $('.nameBlock', info), + quote: $('.postNum > a:nth-of-type(2)', info), + comment: $('.postMessage', post), + links: [], + quotelinks: [] + }; + if ($.engine === 'edge') { + Object.defineProperty(this.nodes, 'backlinks', { + configurable: true, + enumerable: true, + get: function() { + return info.getElementsByClassName('backlink'); + } + }); + } else { + this.nodes.backlinks = info.getElementsByClassName('backlink'); + } + if (!(this.isReply = $.hasClass(post, 'reply'))) { + this.thread.OP = this; + this.thread.isArchived = !!$('.archivedIcon', info); + this.thread.isSticky = !!$('.stickyIcon', info); + this.thread.isClosed = this.thread.isArchived || !!$('.closedIcon', info); + if (this.thread.isArchived) { + this.thread.kill(); + } + } + this.info = {}; + this.info.nameBlock = Conf['Anonymize'] ? 'Anonymous' : this.nodes.nameBlock.textContent.trim(); + if (subject = $('.subject', info)) { + this.nodes.subject = subject; + this.info.subject = subject.textContent || void 0; + } + if (name = $('.name', info)) { + this.nodes.name = name; + this.info.name = name.textContent; + } + if (email = $('.useremail', info)) { + this.nodes.email = email; + this.info.email = decodeURIComponent(email.href.slice(7)); + } + if (tripcode = $('.postertrip', info)) { + this.nodes.tripcode = tripcode; + this.info.tripcode = tripcode.textContent; + } + if (uniqueID = $('.posteruid', info)) { + this.nodes.uniqueID = uniqueID; + this.info.uniqueID = uniqueID.firstElementChild.textContent; + } + if (capcode = $('.capcode.hand', info)) { + this.nodes.capcode = capcode; + this.info.capcode = capcode.textContent.replace('## ', ''); + } + if (flag = $('.flag, .countryFlag', info)) { + this.nodes.flag = flag; + this.info.flag = flag.title; + } + if (date = $('.dateTime', info)) { + this.nodes.date = date; + this.info.date = new Date(date.dataset.utc * 1000); + } + this.parseComment(); + this.parseQuotes(); + this.parseFile(); + this.isDead = false; + this.isHidden = false; + this.clones = []; + if (g.posts[this.fullID]) { + this.isRebuilt = true; + this.clones = g.posts[this.fullID].clones; + ref = this.clones; + for (j = 0, len = ref.length; j < len; j++) { + clone = ref[j]; + clone.origin = this; + } + } + this.board.posts.push(this.ID, this); + this.thread.posts.push(this.ID, this); + g.posts.push(this.fullID, this); + } + + Post.prototype.parseComment = function() { + var abbr, bq, commentDisplay, j, k, len, len1, node, ref, spoilers; + this.nodes.comment.normalize(); + bq = this.nodes.comment.cloneNode(true); + ref = $$('.abbr + br, .exif, b, .fortune', bq); + for (j = 0, len = ref.length; j < len; j++) { + node = ref[j]; + $.rm(node); + } + if (abbr = $('.abbr', bq)) { + $.rm(abbr); + } + this.info.comment = this.nodesToText(bq); + if (abbr) { + this.info.comment = this.info.comment.replace(/\n\n$/, ''); + } + commentDisplay = this.info.comment; + if (!(Conf['Remove Spoilers'] || Conf['Reveal Spoilers'])) { + spoilers = $$('s', bq); + if (spoilers.length) { + for (k = 0, len1 = spoilers.length; k < len1; k++) { + node = spoilers[k]; + $.replace(node, $.tn('[spoiler]')); + } + commentDisplay = this.nodesToText(bq); + } + } + return this.info.commentDisplay = commentDisplay.trim().replace(/\s+$/gm, ''); + }; + + Post.prototype.nodesToText = function(bq) { + var i, node, nodes, text; + text = ""; + nodes = $.X('.//br|.//text()', bq); + i = 0; + while (node = nodes.snapshotItem(i++)) { + text += node.data || '\n'; + } + return text; + }; + + Post.prototype.parseQuotes = function() { + var j, len, quotelink, ref; + this.quotes = []; + ref = $$(':not(pre) > .quotelink', this.nodes.comment); + for (j = 0, len = ref.length; j < len; j++) { + quotelink = ref[j]; + this.parseQuote(quotelink); + } + }; + + Post.prototype.parseQuote = function(quotelink) { + var fullID, match; + match = quotelink.href.match(/^https?:\/\/boards\.4chan\.org\/+([^\/]+)\/+(?:res|thread)\/+\d+(?:\/[^#]*)?#p(\d+)$/); + if (!(match || (this.isClone && quotelink.dataset.postID))) { + return; + } + this.nodes.quotelinks.push(quotelink); + if (this.isClone) { + return; + } + fullID = match[1] + "." + match[2]; + if (indexOf.call(this.quotes, fullID) < 0) { + return this.quotes.push(fullID); + } + }; + + Post.prototype.parseFile = function() { + var fileEl, fileText, info, link, m, ref, ref1, ref2, size, thumb, unit; + if (!(fileEl = $('.file', this.nodes.post))) { + return; + } + if (!(link = $('.fileText > a, .fileText-original > a', fileEl))) { + return; + } + if (!(info = (ref = link.nextSibling) != null ? ref.textContent.match(/\(([\d.]+ [KMG]?B).*\)/) : void 0)) { + return; + } + fileText = fileEl.firstElementChild; + this.file = { + text: fileText, + link: link, + url: link.href, + name: fileText.title || link.title || link.textContent, + size: info[1], + isImage: /(jpg|png|gif)$/i.test(link.href), + isVideo: /webm$/i.test(link.href), + dimensions: (ref1 = info[0].match(/\d+x\d+/)) != null ? ref1[0] : void 0, + tag: (ref2 = info[0].match(/,[^,]*, ([a-z]+)\)/i)) != null ? ref2[1] : void 0 + }; + size = +this.file.size.match(/[\d.]+/)[0]; + unit = ['B', 'KB', 'MB', 'GB'].indexOf(this.file.size.match(/\w+$/)[0]); + while (unit-- > 0) { + size *= 1024; + } + this.file.sizeInBytes = size; + if ((thumb = $('.fileThumb > [data-md5]', fileEl))) { + return $.extend(this.file, { + thumb: thumb, + thumbURL: (m = link.href.match(/\d+(?=\.\w+$)/)) ? location.protocol + "//i.4cdn.org/" + this.board + "/" + m[0] + "s.jpg" : void 0, + MD5: thumb.dataset.md5, + isSpoiler: $.hasClass(thumb.parentNode, 'imgspoiler') + }); + } + }; + + Post.prototype.kill = function(file) { + var clone, j, k, len, len1, quotelink, ref, ref1, strong; + if (file) { + if (this.isDead || this.file.isDead) { + return; + } + this.file.isDead = true; + $.addClass(this.nodes.root, 'deleted-file'); + } else { + if (this.isDead) { + return; + } + this.isDead = true; + $.rmClass(this.nodes.root, 'deleted-file'); + $.addClass(this.nodes.root, 'deleted-post'); + } + if (!(strong = $('strong.warning', this.nodes.info))) { + strong = $.el('strong', { + className: 'warning' + }); + $.after($('input', this.nodes.info), strong); + } + strong.textContent = file ? '[File deleted]' : '[Deleted]'; + if (this.isClone) { + return; + } + ref = this.clones; + for (j = 0, len = ref.length; j < len; j++) { + clone = ref[j]; + clone.kill(file); + } + if (file) { + return; + } + ref1 = Get.allQuotelinksLinkingTo(this); + for (k = 0, len1 = ref1.length; k < len1; k++) { + quotelink = ref1[k]; + if (!(!$.hasClass(quotelink, 'deadlink'))) { + continue; + } + quotelink.textContent = quotelink.textContent + '\u00A0(Dead)'; + $.addClass(quotelink, 'deadlink'); + } + }; + + Post.prototype.resurrect = function() { + var clone, j, k, len, len1, quotelink, ref, ref1, strong; + this.isDead = false; + $.rmClass(this.nodes.root, 'deleted-post'); + strong = $('strong.warning', this.nodes.info); + if (this.file && this.file.isDead) { + strong.textContent = '[File deleted]'; + } else { + $.rm(strong); + } + if (this.isClone) { + return; + } + ref = this.clones; + for (j = 0, len = ref.length; j < len; j++) { + clone = ref[j]; + clone.resurrect(); + } + ref1 = Get.allQuotelinksLinkingTo(this); + for (k = 0, len1 = ref1.length; k < len1; k++) { + quotelink = ref1[k]; + if (!($.hasClass(quotelink, 'deadlink'))) { + continue; + } + quotelink.textContent = quotelink.textContent.replace('\u00A0(Dead)', ''); + $.rmClass(quotelink, 'deadlink'); + } + }; + + Post.prototype.collect = function() { + g.posts.rm(this.fullID); + this.thread.posts.rm(this); + return this.board.posts.rm(this); + }; + + Post.prototype.addClone = function(context, contractThumb) { + return new Post.Clone(this, context, contractThumb); + }; + + Post.prototype.rmClone = function(index) { + var clone, j, len, ref; + this.clones.splice(index, 1); + ref = this.clones.slice(index); + for (j = 0, len = ref.length; j < len; j++) { + clone = ref[j]; + clone.nodes.root.dataset.clone = index++; + } + }; + + return Post; + + })(); + + return Post; + +}).call(this); + +(function() { + var extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty, + slice = [].slice; + + Post.Clone = (function(superClass) { + extend(_Class, superClass); + + _Class.prototype.isClone = true; + + function _Class(origin, context, contractThumb) { + var base, file, i, info, inline, inlined, j, k, key, l, len, len1, len2, len3, node, nodes, post, ref, ref1, ref2, ref3, ref4, ref5, root, val; + this.origin = origin; + this.context = context; + ref = ['ID', 'fullID', 'board', 'thread', 'info', 'quotes', 'isReply']; + for (i = 0, len = ref.length; i < len; i++) { + key = ref[i]; + this[key] = this.origin[key]; + } + nodes = this.origin.nodes; + root = contractThumb ? this.cloneWithoutVideo(nodes.root) : nodes.root.cloneNode(true); + (base = Post.Clone).prefix || (base.prefix = 0); + ref1 = [root].concat(slice.call($$('[id]', root))); + for (j = 0, len1 = ref1.length; j < len1; j++) { + node = ref1[j]; + node.id = Post.Clone.prefix + node.id; + } + Post.Clone.prefix++; + post = $('.post', root); + info = $('.postInfo', post); + this.nodes = { + root: root, + post: post, + info: info, + nameBlock: $('.nameBlock', info), + quote: $('.postNum > a:nth-of-type(2)', info), + comment: $('.postMessage', post), + quotelinks: [] + }; + if ($.engine === 'edge') { + Object.defineProperty(this.nodes, 'backlinks', { + configurable: true, + enumerable: true, + get: function() { + return info.getElementsByClassName('backlink'); + } + }); + } else { + this.nodes.backlinks = info.getElementsByClassName('backlink'); + } + ref2 = $$('.inline', post); + for (k = 0, len2 = ref2.length; k < len2; k++) { + inline = ref2[k]; + $.rm(inline); + } + ref3 = $$('.inlined', post); + for (l = 0, len3 = ref3.length; l < len3; l++) { + inlined = ref3[l]; + $.rmClass(inlined, 'inlined'); + } + root.hidden = false; + $.rmClass(root, 'forwarded'); + $.rmClass(post, 'highlight'); + if (nodes.subject) { + this.nodes.subject = $('.subject', info); + } + if (nodes.name) { + this.nodes.name = $('.name', info); + } + if (nodes.email) { + this.nodes.email = $('.useremail', info); + } + if (nodes.tripcode) { + this.nodes.tripcode = $('.postertrip', info); + } + if (nodes.uniqueID) { + this.nodes.uniqueID = $('.posteruid', info); + } + if (nodes.capcode) { + this.nodes.capcode = $('.capcode.hand', info); + } + if (nodes.flag) { + this.nodes.flag = $('.flag, .countryFlag', info); + } + if (nodes.date) { + this.nodes.date = $('.dateTime', info); + } + this.parseQuotes(); + this.quotes = slice.call(this.origin.quotes); + if (this.origin.file) { + this.file = {}; + ref4 = this.origin.file; + for (key in ref4) { + val = ref4[key]; + this.file[key] = val; + } + file = $('.file', post); + this.file.text = file.firstElementChild; + this.file.link = $('.fileText > a, .fileText-original', file); + this.file.thumb = $('.fileThumb > [data-md5]', file); + this.file.fullImage = $('.full-image', file); + this.file.videoControls = $('.video-controls', this.file.text); + if (this.file.videoThumb) { + this.file.thumb.muted = true; + } + if ((ref5 = this.file.thumb) != null ? ref5.dataset.src : void 0) { + this.file.thumb.src = this.file.thumb.dataset.src; + this.file.thumb.removeAttribute('data-src'); + } + if (this.file.thumb && contractThumb) { + ImageExpand.contract(this); + } + } + if (this.origin.isDead) { + this.isDead = true; + } + root.dataset.clone = this.origin.clones.push(this) - 1; + } + + _Class.prototype.cloneWithoutVideo = function(node) { + var child, clone, i, len, ref; + if (node.tagName === 'VIDEO' && !node.dataset.md5) { + return []; + } else if (node.nodeType === Node.ELEMENT_NODE && $('video', node)) { + clone = node.cloneNode(false); + ref = node.childNodes; + for (i = 0, len = ref.length; i < len; i++) { + child = ref[i]; + $.add(clone, this.cloneWithoutVideo(child)); + } + return clone; + } else { + return node.cloneNode(true); + } + }; + + return _Class; + + })(Post); + +}).call(this); + +RandomAccessList = (function() { + var RandomAccessList; + + RandomAccessList = (function() { + function RandomAccessList(items) { + var i, item, len; + this.length = 0; + if (items) { + for (i = 0, len = items.length; i < len; i++) { + item = items[i]; + this.push(item); + } + } + } + + RandomAccessList.prototype.push = function(data) { + var ID, item, last; + ID = data.ID; + ID || (ID = data.id); + if (this[ID]) { + return; + } + last = this.last; + this[ID] = item = { + prev: last, + next: null, + data: data, + ID: ID + }; + item.prev = last; + this.last = last ? last.next = item : this.first = item; + return this.length++; + }; + + RandomAccessList.prototype.before = function(root, item) { + var prev; + if (item.next === root || item === root) { + return; + } + this.rmi(item); + prev = root.prev; + root.prev = item; + item.next = root; + item.prev = prev; + if (prev) { + return prev.next = item; + } else { + return this.first = item; + } + }; + + RandomAccessList.prototype.after = function(root, item) { + var next; + if (item.prev === root || item === root) { + return; + } + this.rmi(item); + next = root.next; + root.next = item; + item.prev = root; + item.next = next; + if (next) { + return next.prev = item; + } else { + return this.last = item; + } + }; + + RandomAccessList.prototype.prepend = function(item) { + var first; + first = this.first; + if (item === first || !this[item.ID]) { + return; + } + this.rmi(item); + item.next = first; + if (first) { + first.prev = item; + } else { + this.last = item; + } + this.first = item; + return delete item.prev; + }; + + RandomAccessList.prototype.shift = function() { + return this.rm(this.first.ID); + }; + + RandomAccessList.prototype.order = function() { + var item, order; + order = [item = this.first]; + while (item = item.next) { + order.push(item); + } + return order; + }; + + RandomAccessList.prototype.rm = function(ID) { + var item; + item = this[ID]; + if (!item) { + return; + } + delete this[ID]; + this.length--; + this.rmi(item); + delete item.next; + return delete item.prev; + }; + + RandomAccessList.prototype.rmi = function(item) { + var next, prev; + prev = item.prev, next = item.next; + if (prev) { + prev.next = next; + } else { + this.first = next; + } + if (next) { + return next.prev = prev; + } else { + return this.last = prev; + } + }; + + return RandomAccessList; + + })(); + + return RandomAccessList; + +}).call(this); + +ShimSet = (function() { + var ShimSet; + + ShimSet = (function() { + function ShimSet() { + this.elements = {}; + this.size = 0; + } + + ShimSet.prototype.has = function(value) { + return value in this.elements; + }; + + ShimSet.prototype.add = function(value) { + if (this.elements[value]) { + return; + } + this.elements[value] = true; + return this.size++; + }; + + ShimSet.prototype["delete"] = function(value) { + if (!this.elements[value]) { + return; + } + delete this.elements[value]; + return this.size--; + }; + + return ShimSet; + + })(); + + if (!('Set' in window)) { + window.Set = ShimSet; + } + + return ShimSet; + +}).call(this); + +SimpleDict = (function() { + var SimpleDict, + slice = [].slice; + + SimpleDict = (function() { + function SimpleDict() { + this.keys = []; + } + + SimpleDict.prototype.push = function(key, data) { + key = "" + key; + if (!this[key]) { + this.keys.push(key); + } + return this[key] = data; + }; + + SimpleDict.prototype.rm = function(key) { + var i; + key = "" + key; + if ((i = this.keys.indexOf(key)) !== -1) { + this.keys.splice(i, 1); + return delete this[key]; + } + }; + + SimpleDict.prototype.forEach = function(fn) { + var j, key, len, ref; + ref = slice.call(this.keys); + for (j = 0, len = ref.length; j < len; j++) { + key = ref[j]; + fn(this[key]); + } + }; + + return SimpleDict; + + })(); + + return SimpleDict; + +}).call(this); + +Thread = (function() { + var Thread; + + Thread = (function() { + Thread.prototype.toString = function() { + return this.ID; + }; + + function Thread(ID, board) { + this.ID = ID; + this.board = board; + this.fullID = this.board + "." + this.ID; + this.posts = new SimpleDict(); + this.isDead = false; + this.isHidden = false; + this.isOnTop = false; + this.isSticky = false; + this.isClosed = false; + this.isArchived = false; + this.postLimit = false; + this.fileLimit = false; + this.ipCount = void 0; + this.OP = null; + this.catalogView = null; + this.board.threads.push(this.ID, this); + g.threads.push(this.fullID, this); + } + + Thread.prototype.setPage = function(pageNum) { + var icon, info, quote, ref; + ref = this.OP.nodes, info = ref.info, quote = ref.quote; + if (!(icon = $('.page-num', info))) { + icon = $.el('span', { + className: 'page-num' + }); + $.after(quote, [$.tn(' '), icon]); + } + icon.title = "This thread is on page " + pageNum + " in the original index."; + icon.textContent = "[" + pageNum + "]"; + if (this.catalogView) { + return this.catalogView.nodes.pageCount.textContent = pageNum; + } + }; + + Thread.prototype.setCount = function(type, count, reachedLimit) { + var el; + if (!this.catalogView) { + return; + } + el = this.catalogView.nodes[type + "Count"]; + el.textContent = count; + return (reachedLimit ? $.addClass : $.rmClass)(el, 'warning'); + }; + + Thread.prototype.setStatus = function(type, status) { + var name; + name = "is" + type; + if (this[name] === status) { + return; + } + this[name] = status; + if (!this.OP) { + return; + } + this.setIcon('Sticky', this.isSticky); + this.setIcon('Closed', this.isClosed && !this.isArchived); + return this.setIcon('Archived', this.isArchived); + }; + + Thread.prototype.setIcon = function(type, status) { + var icon, root, typeLC; + typeLC = type.toLowerCase(); + icon = $("." + typeLC + "Icon", this.OP.nodes.info); + if (!!icon === status) { + return; + } + if (!status) { + $.rm(icon.previousSibling); + $.rm(icon); + if (this.catalogView) { + $.rm($("." + typeLC + "Icon", this.catalogView.nodes.icons)); + } + return; + } + icon = $.el('img', { + src: "" + Build.staticPath + typeLC + Build.gifIcon, + alt: type, + title: type, + className: typeLC + "Icon retina" + }); + root = type !== 'Sticky' && this.isSticky ? $('.stickyIcon', this.OP.nodes.info) : $('.page-num', this.OP.nodes.info) || this.OP.nodes.quote; + $.after(root, [$.tn(' '), icon]); + if (!this.catalogView) { + return; + } + return (type === 'Sticky' && this.isClosed ? $.prepend : $.add)(this.catalogView.nodes.icons, icon.cloneNode()); + }; + + Thread.prototype.kill = function() { + return this.isDead = true; + }; + + Thread.prototype.collect = function() { + this.posts.forEach(function(post) { + return post.collect(); + }); + g.threads.rm(this.fullID); + return this.board.threads.rm(this); + }; + + return Thread; + + })(); + + return Thread; + +}).call(this); + +Redirect = (function() { + var Redirect, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + Redirect = { + init: function() { + var archive, archives, boardID, boards, data, files, i, id, j, len, len1, name, o, record, ref, ref1, software, type, uid, withCredentials; + o = { + thread: {}, + post: {}, + file: {}, + report: {} + }; + archives = {}; + ref = Redirect.archives; + for (i = 0, len = ref.length; i < len; i++) { + data = ref[i]; + uid = data.uid, name = data.name, boards = data.boards, files = data.files, software = data.software, withCredentials = data.withCredentials; + archives[JSON.stringify(uid != null ? uid : name)] = data; + for (j = 0, len1 = boards.length; j < len1; j++) { + boardID = boards[j]; + if (!withCredentials) { + if (!(boardID in o.thread)) { + o.thread[boardID] = data; + } + if (!(boardID in o.post || software !== 'foolfuuka')) { + o.post[boardID] = data; + } + if (!(boardID in o.file || indexOf.call(files, boardID) < 0)) { + o.file[boardID] = data; + } + } + if (name === 'fgts') { + o.report[boardID] = data; + } + } + } + ref1 = Conf['selectedArchives']; + for (boardID in ref1) { + record = ref1[boardID]; + for (type in record) { + id = record[type]; + if (id === null) { + delete o[type][boardID]; + } else if (archive = archives[JSON.stringify(id)]) { + boards = type === 'file' ? archive.files : archive.boards; + if (indexOf.call(boards, boardID) >= 0) { + o[type][boardID] = archive; + } + } + } + } + return Redirect.data = o; + }, + archives: [ + { "uid": 3, "name": "4plebs", "domain": "archive.4plebs.org", "http": true, "https": true, "software": "foolfuuka", "boards": [ "adv", "f", "hr", "o", "pol", "s4s", "sp", "tg", "trv", "tv", "x" ], "files": [ "adv", "f", "hr", "o", "pol", "s4s", "sp", "tg", "trv", "tv", "x" ] }, + { "uid": 4, "name": "Nyafuu Archive", "domain": "archive.nyafuu.org", "http": true, "https": true, "software": "foolfuuka", "boards": [ "c", "e", "news", "w", "wg", "wsr" ], "files": [ "c", "e", "news", "w", "wg", "wsr" ] }, + { "uid": 8, "name": "Rebecca Black Tech", "domain": "rbt.asia", "http": false, "https": true, "software": "fuuka", "boards": [ "cgl", "g", "mu" ], "files": [ "cgl", "g", "mu" ] }, + { "uid": 10, "name": "warosu", "domain": "warosu.org", "http": false, "https": true, "software": "fuuka", "boards": [ "3", "biz", "cgl", "ck", "diy", "fa", "g", "ic", "jp", "lit", "sci", "tg", "vr" ], "files": [ "3", "biz", "cgl", "ck", "diy", "fa", "g", "ic", "jp", "lit", "sci", "tg", "vr" ] }, + { "uid": 15, "name": "fgts", "domain": "fgts.jp", "http": true, "https": true, "software": "foolfuuka", "boards": [ "asp", "b", "cm", "gd", "h", "hc", "hm", "n", "out", "p", "po", "qa", "r", "s", "soc", "toy", "vp", "y" ], "files": [ "asp", "b", "cm", "gd", "h", "hc", "hm", "n", "out", "p", "po", "qa", "r", "s", "soc", "toy", "vp", "y" ] }, + { "uid": 23, "name": "Desustorage", "domain": "desustorage.org", "http": true, "https": true, "software": "foolfuuka", "boards": [ "a", "aco", "an", "c", "co", "d", "fit", "gif", "his", "int", "k", "m", "mlp", "qa", "r9k", "tg", "trash", "vr", "wsg" ], "files": [ "a", "aco", "an", "c", "co", "d", "fit", "gif", "his", "int", "k", "m", "mlp", "qa", "r9k", "tg", "trash", "vr", "wsg" ] }, + { "uid": 24, "name": "fireden.net", "domain": "boards.fireden.net", "http": false, "https": true, "software": "foolfuuka", "boards": [ "a", "cm", "ic", "sci", "tg", "v", "vg", "y" ], "files": [ "a", "cm", "ic", "sci", "tg", "v", "vg", "y" ] }, + { "uid": 25, "name": "arch.b4k.co", "domain": "arch.b4k.co", "http": true, "https": true, "software": "foolfuuka", "boards": [ "g", "jp", "mlp", "v" ], "files": [] }, + { "uid": 5, "name": "Love is Over", "domain": "deploy.loveisover.me", "http": true, "https": false, "software": "foolfuuka", "boards": [ "c", "d", "e", "i", "lgbt", "t", "u" ], "files": [ "c", "d", "e", "i", "lgbt", "t", "u" ], "search": [] }, + { "uid": 28, "name": "bstats", "domain": "archive.b-stats.org", "http": true, "https": true, "software": "foolfuuka", "boards": [ "f", "cm", "hm", "lgbt", "news", "trash", "y" ], "files": [] } + ], + to: function(dest, data) { + var archive; + archive = (dest === 'search' || dest === 'board' ? Redirect.data.thread : Redirect.data[dest])[data.boardID]; + if (!archive) { + return ''; + } + return Redirect[dest](archive, data); + }, + protocol: function(archive) { + var protocol; + protocol = location.protocol; + if (!archive[protocol.slice(0, -1)]) { + protocol = protocol === 'https:' ? 'http:' : 'https:'; + } + return protocol + "//"; + }, + thread: function(archive, arg) { + var boardID, path, postID, threadID; + boardID = arg.boardID, threadID = arg.threadID, postID = arg.postID; + path = threadID ? boardID + "/thread/" + threadID : boardID + "/post/" + postID; + if (archive.software === 'foolfuuka') { + path += '/'; + } + if (threadID && postID) { + path += archive.software === 'foolfuuka' ? "#" + postID : "#p" + postID; + } + return "" + (Redirect.protocol(archive)) + archive.domain + "/" + path; + }, + post: function(archive, arg) { + var boardID, postID, protocol, url; + boardID = arg.boardID, postID = arg.postID; + protocol = Redirect.protocol(archive); + url = "" + protocol + archive.domain + "/_/api/chan/post/?board=" + boardID + "&num=" + postID; + if (!Redirect.securityCheck(url)) { + return ''; + } + return url; + }, + file: function(archive, arg) { + var boardID, filename; + boardID = arg.boardID, filename = arg.filename; + return "" + (Redirect.protocol(archive)) + archive.domain + "/" + boardID + "/full_image/" + filename; + }, + board: function(archive, arg) { + var boardID; + boardID = arg.boardID; + return "" + (Redirect.protocol(archive)) + archive.domain + "/" + boardID + "/"; + }, + search: function(archive, arg) { + var boardID, path, type, value; + boardID = arg.boardID, type = arg.type, value = arg.value; + type = type === 'name' ? 'username' : type === 'MD5' ? 'image' : type; + if (type === 'capcode') { + value = { + 'Developer': 'dev' + }[value] || value.toLowerCase(); + } else if (type === 'image') { + value = value.replace(/[+\/=]/g, function(c) { + return { + '+': '-', + '/': '_', + '=': '' + }[c]; + }); + } + value = encodeURIComponent(value); + path = archive.software === 'foolfuuka' ? boardID + "/search/" + type + "/" + value + "/" : type === 'image' ? boardID + "/image/" + value : boardID + "/?task=search2&search_" + type + "=" + value; + return "" + (Redirect.protocol(archive)) + archive.domain + "/" + path; + }, + report: function(archive, arg) { + var boardID, postID; + boardID = arg.boardID, postID = arg.postID; + return "https://so.fgts.jp/report/?board=" + boardID + "&no=" + postID; + }, + securityCheck: function(url) { + return /^https:\/\//.test(url) || location.protocol === 'http:' || Conf['Exempt Archives from Encryption']; + }, + navigate: function(dest, data, alternative) { + var url; + if (!Redirect.data) { + Redirect.init(); + } + url = Redirect.to(dest, data); + if (url && (Redirect.securityCheck(url) || confirm("Redirect to " + url + "?\n\nYour connection will not be encrypted."))) { + return location.replace(url); + } else if (alternative) { + return location.replace(alternative); + } + } + }; + + return Redirect; + +}).call(this); + +Anonymize = (function() { + var Anonymize; + + Anonymize = { + init: function() { + var ref; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread' || ref === 'archive') && Conf['Anonymize'])) { + return; + } + if (g.VIEW === 'archive') { + return this.archive(); + } + return Callbacks.Post.push({ + name: 'Anonymize', + cb: this.node + }); + }, + node: function() { + var email, name, ref, tripcode; + if (this.info.capcode || this.isClone) { + return; + } + ref = this.nodes, name = ref.name, tripcode = ref.tripcode, email = ref.email; + if (this.info.name !== 'Anonymous') { + name.textContent = 'Anonymous'; + } + if (tripcode) { + $.rm(tripcode); + delete this.nodes.tripcode; + } + if (this.info.email) { + $.replace(email, name); + return delete this.nodes.email; + } + }, + archive: function() { + return $.ready(function() { + var i, j, len, len1, name, ref, ref1, trip; + ref = $$('.name'); + for (i = 0, len = ref.length; i < len; i++) { + name = ref[i]; + name.textContent = 'Anonymous'; + } + ref1 = $$('.postertrip'); + for (j = 0, len1 = ref1.length; j < len1; j++) { + trip = ref1[j]; + $.rm(trip); + } + }); + } + }; + + return Anonymize; + +}).call(this); + +Filter = (function() { + var Filter, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + Filter = { + filters: {}, + init: function() { + var boards, err, excludes, filter, hl, i, key, len, line, op, ref, ref1, ref2, ref3, ref4, ref5, ref6, regexp, stub, top; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Filter'])) { + return; + } + if (!Conf['Filtered Backlinks']) { + $.addClass(doc, 'hide-backlinks'); + } + for (key in Config.filter) { + this.filters[key] = []; + ref1 = Conf[key].split('\n'); + for (i = 0, len = ref1.length; i < len; i++) { + line = ref1[i]; + if (line[0] === '#') { + continue; + } + if (!(regexp = line.match(/\/(.+)\/(\w*)/))) { + continue; + } + filter = line.replace(regexp[0], ''); + boards = ((ref2 = filter.match(/boards:([^;]+)/)) != null ? ref2[1].toLowerCase() : void 0) || 'global'; + boards = boards === 'global' ? null : boards.split(','); + if (boards === null) { + excludes = ((ref3 = filter.match(/exclude:([^;]+)/)) != null ? ref3[1].toLowerCase().split(',') : void 0) || null; + } + if (key === 'uniqueID' || key === 'MD5') { + regexp = regexp[1]; + } else { + try { + regexp = RegExp(regexp[1], regexp[2]); + } catch (_error) { + err = _error; + new Notice('warning', [$.tn("Invalid " + key + " filter:"), $.el('br'), $.tn(line), $.el('br'), $.tn(err.message)], 60); + continue; + } + } + op = ((ref4 = filter.match(/[^t]op:(yes|no|only)/)) != null ? ref4[1] : void 0) || 'yes'; + stub = (function() { + var ref5; + switch ((ref5 = filter.match(/stub:(yes|no)/)) != null ? ref5[1] : void 0) { + case 'yes': + return true; + case 'no': + return false; + default: + return Conf['Stubs']; + } + })(); + if (hl = /highlight/.test(filter)) { + hl = ((ref5 = filter.match(/highlight:([\w-]+)/)) != null ? ref5[1] : void 0) || 'filter-highlight'; + top = ((ref6 = filter.match(/top:(yes|no)/)) != null ? ref6[1] : void 0) || 'yes'; + top = top === 'yes'; + } + this.filters[key].push(this.createFilter(regexp, boards, excludes, op, stub, hl, top)); + } + if (!this.filters[key].length) { + delete this.filters[key]; + } + } + if (!Object.keys(this.filters).length) { + return; + } + return Callbacks.Post.push({ + name: 'Filter', + cb: this.node + }); + }, + createFilter: function(regexp, boards, excludes, op, stub, hl, top) { + var settings, test; + test = typeof regexp === 'string' ? function(value) { + return regexp === value; + } : function(value) { + return regexp.test(value); + }; + settings = { + hide: !hl, + stub: stub, + "class": hl, + top: top + }; + return function(value, boardID, isReply) { + if (boards && indexOf.call(boards, boardID) < 0) { + return false; + } + if (excludes && indexOf.call(excludes, boardID) >= 0) { + return false; + } + if (isReply && op === 'only' || !isReply && op === 'no') { + return false; + } + if (!test(value)) { + return false; + } + return settings; + }; + }, + node: function() { + var filter, i, key, len, ref, ref1, result, value; + if (this.isClone) { + return; + } + for (key in Filter.filters) { + if ((value = Filter[key](this)) != null) { + ref = Filter.filters[key]; + for (i = 0, len = ref.length; i < len; i++) { + filter = ref[i]; + if (!(result = filter(value, this.board.ID, this.isReply))) { + continue; + } + if (result.hide && !this.isFetchedQuote) { + if (this.isReply) { + PostHiding.hide(this, result.stub); + } else if (g.VIEW === 'index') { + ThreadHiding.hide(this.thread, result.stub); + } else { + continue; + } + return; + } + $.addClass(this.nodes.root, result["class"]); + if (!(this.highlights && (ref1 = result["class"], indexOf.call(this.highlights, ref1) >= 0))) { + (this.highlights || (this.highlights = [])).push(result["class"]); + } + if (!this.isReply && result.top) { + this.thread.isOnTop = true; + } + } + } + } + }, + isHidden: function(post) { + var filter, i, key, len, ref, result, value; + for (key in Filter.filters) { + if ((value = Filter[key](post)) != null) { + ref = Filter.filters[key]; + for (i = 0, len = ref.length; i < len; i++) { + filter = ref[i]; + if (result = filter(value, post.boardID, post.isReply)) { + if (result.hide) { + return true; + } + } + } + } + } + return false; + }, + postID: function(post) { + var ref; + return "" + ((ref = post.ID) != null ? ref : post.postID); + }, + name: function(post) { + return post.info.name; + }, + uniqueID: function(post) { + return post.info.uniqueID; + }, + tripcode: function(post) { + return post.info.tripcode; + }, + capcode: function(post) { + return post.info.capcode; + }, + subject: function(post) { + return post.info.subject; + }, + comment: function(post) { + var base; + return (base = post.info).comment != null ? base.comment : base.comment = Build.parseComment(post.info.commentHTML.innerHTML); + }, + flag: function(post) { + return post.info.flag; + }, + filename: function(post) { + var ref; + return (ref = post.file) != null ? ref.name : void 0; + }, + dimensions: function(post) { + var ref; + return (ref = post.file) != null ? ref.dimensions : void 0; + }, + filesize: function(post) { + var ref; + return (ref = post.file) != null ? ref.size : void 0; + }, + MD5: function(post) { + var ref; + return (ref = post.file) != null ? ref.MD5 : void 0; + }, + menu: { + init: function() { + var div, entry, i, len, ref, ref1, type; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Filter'])) { + return; + } + div = $.el('div', { + textContent: 'Filter' + }); + entry = { + el: div, + order: 50, + open: function(post) { + Filter.menu.post = post; + return true; + }, + subEntries: [] + }; + ref1 = [['Name', 'name'], ['Unique ID', 'uniqueID'], ['Tripcode', 'tripcode'], ['Capcode', 'capcode'], ['Subject', 'subject'], ['Comment', 'comment'], ['Flag', 'flag'], ['Filename', 'filename'], ['Image dimensions', 'dimensions'], ['Filesize', 'filesize'], ['Image MD5', 'MD5']]; + for (i = 0, len = ref1.length; i < len; i++) { + type = ref1[i]; + entry.subEntries.push(Filter.menu.createSubEntry(type[0], type[1])); + } + return Menu.menu.addEntry(entry); + }, + createSubEntry: function(text, type) { + var el; + el = $.el('a', { + href: 'javascript:;', + textContent: text + }); + el.dataset.type = type; + $.on(el, 'click', Filter.menu.makeFilter); + return { + el: el, + open: function(post) { + var value; + value = Filter[type](post); + return value != null; + } + }; + }, + makeFilter: function() { + var re, type, value; + type = this.dataset.type; + value = Filter[type](Filter.menu.post); + re = type === 'uniqueID' || type === 'MD5' ? value : value.replace(/\/|\\|\^|\$|\n|\.|\(|\)|\{|\}|\[|\]|\?|\*|\+|\|/g, function(c) { + if (c === '\n') { + return '\\n'; + } else if (c === '\\') { + return '\\\\'; + } else { + return "\\" + c; + } + }); + re = type === 'uniqueID' || type === 'MD5' ? "/" + re + "/" : "/^" + re + "$/"; + return $.get(type, Conf[type], function(item) { + var save, section, select, ta, tl; + save = item[type]; + save = save ? save + "\n" + re : re; + $.set(type, save); + Settings.open('Filter'); + section = $('.section-container'); + select = $('select[name=filter]', section); + select.value = type; + Settings.selectFilter.call(select); + ta = $('textarea', section); + tl = ta.textLength; + ta.setSelectionRange(tl, tl); + return ta.focus(); + }); + } + } + }; + + return Filter; + +}).call(this); + +PostHiding = (function() { + var PostHiding; + + PostHiding = { + init: function() { + var ref; + if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Reply Hiding Buttons'] && !(Conf['Menu'] && Conf['Reply Hiding Link'])) { + return; + } + if (Conf['Reply Hiding Buttons']) { + $.addClass(doc, "reply-hide"); + } + this.db = new DataBoard('hiddenPosts'); + return Callbacks.Post.push({ + name: 'Reply Hiding', + cb: this.node + }); + }, + node: function() { + var data, sideArrows; + if (!this.isReply || this.isClone || this.isFetchedQuote) { + return; + } + if (data = PostHiding.db.get({ + boardID: this.board.ID, + threadID: this.thread.ID, + postID: this.ID + })) { + if (data.thisPost) { + PostHiding.hide(this, data.makeStub, data.hideRecursively); + } else { + Recursive.apply(PostHiding.hide, this, data.makeStub, true); + Recursive.add(PostHiding.hide, this, data.makeStub, true); + } + } + if (!Conf['Reply Hiding Buttons']) { + return; + } + sideArrows = $('.sideArrows', this.nodes.root); + $.replace(sideArrows.firstChild, PostHiding.makeButton(this, 'hide')); + return sideArrows.removeAttribute('class'); + }, + menu: { + init: function() { + var apply, div, hideStubLink, makeStub, ref, replies, thisPost; + if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Menu'] || !Conf['Reply Hiding Link']) { + return; + } + div = $.el('div', { + className: 'hide-reply-link', + textContent: 'Hide' + }); + apply = $.el('a', { + textContent: 'Apply', + href: 'javascript:;' + }); + $.on(apply, 'click', PostHiding.menu.hide); + thisPost = UI.checkbox('thisPost', 'This post', true); + replies = UI.checkbox('replies', 'Hide replies', Conf['Recursive Hiding']); + makeStub = UI.checkbox('makeStub', 'Make stub', Conf['Stubs']); + Menu.menu.addEntry({ + el: div, + order: 20, + open: function(post) { + if (!post.isReply || post.isClone || post.isHidden) { + return false; + } + PostHiding.menu.post = post; + return true; + }, + subEntries: [ + { + el: apply + }, { + el: thisPost + }, { + el: replies + }, { + el: makeStub + } + ] + }); + div = $.el('div', { + className: 'show-reply-link', + textContent: 'Show' + }); + apply = $.el('a', { + textContent: 'Apply', + href: 'javascript:;' + }); + $.on(apply, 'click', PostHiding.menu.show); + thisPost = UI.checkbox('thisPost', 'This post', false); + replies = UI.checkbox('replies', 'Show replies', false); + hideStubLink = $.el('a', { + textContent: 'Hide stub', + href: 'javascript:;' + }); + $.on(hideStubLink, 'click', PostHiding.menu.hideStub); + Menu.menu.addEntry({ + el: div, + order: 20, + open: function(post) { + var data; + if (!post.isReply || post.isClone || !post.isHidden) { + return false; + } + if (!(data = PostHiding.db.get({ + boardID: post.board.ID, + threadID: post.thread.ID, + postID: post.ID + }))) { + return false; + } + PostHiding.menu.post = post; + thisPost.firstChild.checked = post.isHidden; + replies.firstChild.checked = (data != null ? data.hideRecursively : void 0) != null ? data.hideRecursively : Conf['Recursive Hiding']; + return true; + }, + subEntries: [ + { + el: apply + }, { + el: thisPost + }, { + el: replies + } + ] + }); + return Menu.menu.addEntry({ + el: hideStubLink, + order: 15, + open: function(post) { + var data; + if (!post.isReply || post.isClone || !post.isHidden) { + return false; + } + if (!(data = PostHiding.db.get({ + boardID: post.board.ID, + threadID: post.thread.ID, + postID: post.ID + }))) { + return false; + } + return PostHiding.menu.post = post; + } + }); + }, + hide: function() { + var makeStub, parent, post, replies, thisPost; + parent = this.parentNode; + thisPost = $('input[name=thisPost]', parent).checked; + replies = $('input[name=replies]', parent).checked; + makeStub = $('input[name=makeStub]', parent).checked; + post = PostHiding.menu.post; + if (thisPost) { + PostHiding.hide(post, makeStub, replies); + } else if (replies) { + Recursive.apply(PostHiding.hide, post, makeStub, true); + Recursive.add(PostHiding.hide, post, makeStub, true); + } else { + return; + } + PostHiding.saveHiddenState(post, true, thisPost, makeStub, replies); + return $.event('CloseMenu'); + }, + show: function() { + var data, parent, post, replies, thisPost; + parent = this.parentNode; + thisPost = $('input[name=thisPost]', parent).checked; + replies = $('input[name=replies]', parent).checked; + post = PostHiding.menu.post; + if (thisPost) { + PostHiding.show(post, replies); + } else if (replies) { + Recursive.apply(PostHiding.show, post, true); + Recursive.rm(PostHiding.hide, post, true); + } else { + return; + } + if (data = PostHiding.db.get({ + boardID: post.board.ID, + threadID: post.thread.ID, + postID: post.ID + })) { + PostHiding.saveHiddenState(post, !(thisPost && replies), !thisPost, data.makeStub, !replies); + } + return $.event('CloseMenu'); + }, + hideStub: function() { + var data, post; + post = PostHiding.menu.post; + if (data = PostHiding.db.get({ + boardID: post.board.ID, + threadID: post.thread.ID, + postID: post.ID + })) { + PostHiding.show(post, data.hideRecursively); + PostHiding.hide(post, false, data.hideRecursively); + PostHiding.saveHiddenState(post, true, true, false, data.hideRecursively); + } + $.event('CloseMenu'); + } + }, + makeButton: function(post, type) { + var a, span; + span = $.el('span', { + className: "fa fa-" + (type === 'hide' ? 'minus' : 'plus') + "-square-o", + textContent: "" + }); + a = $.el('a', { + className: type + "-reply-button", + href: 'javascript:;' + }); + $.add(a, span); + $.on(a, 'click', PostHiding.toggle); + return a; + }, + saveHiddenState: function(post, isHiding, thisPost, makeStub, hideRecursively) { + var data; + data = { + boardID: post.board.ID, + threadID: post.thread.ID, + postID: post.ID + }; + if (isHiding) { + data.val = { + thisPost: thisPost !== false, + makeStub: makeStub, + hideRecursively: hideRecursively + }; + return PostHiding.db.set(data); + } else { + return PostHiding.db["delete"](data); + } + }, + toggle: function() { + var post; + post = Get.postFromNode(this); + PostHiding[(post.isHidden ? 'show' : 'hide')](post); + return PostHiding.saveHiddenState(post, post.isHidden); + }, + hide: function(post, makeStub, hideRecursively) { + var a, i, len, quotelink, ref; + if (makeStub == null) { + makeStub = Conf['Stubs']; + } + if (hideRecursively == null) { + hideRecursively = Conf['Recursive Hiding']; + } + if (post.isHidden) { + return; + } + post.isHidden = true; + if (hideRecursively) { + Recursive.apply(PostHiding.hide, post, makeStub, true); + Recursive.add(PostHiding.hide, post, makeStub, true); + } + ref = Get.allQuotelinksLinkingTo(post); + for (i = 0, len = ref.length; i < len; i++) { + quotelink = ref[i]; + $.addClass(quotelink, 'filtered'); + } + if (!makeStub) { + post.nodes.root.hidden = true; + return; + } + a = PostHiding.makeButton(post, 'show'); + $.add(a, $.tn(" " + post.info.nameBlock)); + post.nodes.stub = $.el('div', { + className: 'stub' + }); + $.add(post.nodes.stub, a); + if (Conf['Menu']) { + $.add(post.nodes.stub, Menu.makeButton(post)); + } + return $.prepend(post.nodes.root, post.nodes.stub); + }, + show: function(post, showRecursively) { + var i, len, quotelink, ref; + if (showRecursively == null) { + showRecursively = Conf['Recursive Hiding']; + } + if (post.nodes.stub) { + $.rm(post.nodes.stub); + delete post.nodes.stub; + } else { + post.nodes.root.hidden = false; + } + post.isHidden = false; + if (showRecursively) { + Recursive.apply(PostHiding.show, post, true); + Recursive.rm(PostHiding.hide, post); + } + ref = Get.allQuotelinksLinkingTo(post); + for (i = 0, len = ref.length; i < len; i++) { + quotelink = ref[i]; + $.rmClass(quotelink, 'filtered'); + } + } + }; + + return PostHiding; + +}).call(this); + +Recursive = (function() { + var Recursive, + slice = [].slice, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + Recursive = { + recursives: {}, + init: function() { + var ref; + if ((ref = g.VIEW) !== 'index' && ref !== 'thread') { + return; + } + return Callbacks.Post.push({ + name: 'Recursive', + cb: this.node + }); + }, + node: function() { + var i, j, k, len, len1, obj, quote, recursive, ref, ref1; + if (this.isClone || this.isFetchedQuote) { + return; + } + ref = this.quotes; + for (j = 0, len = ref.length; j < len; j++) { + quote = ref[j]; + if (obj = Recursive.recursives[quote]) { + ref1 = obj.recursives; + for (i = k = 0, len1 = ref1.length; k < len1; i = ++k) { + recursive = ref1[i]; + recursive.apply(null, [this].concat(slice.call(obj.args[i]))); + } + } + } + }, + add: function() { + var args, base, name, obj, post, recursive; + recursive = arguments[0], post = arguments[1], args = 3 <= arguments.length ? slice.call(arguments, 2) : []; + obj = (base = Recursive.recursives)[name = post.fullID] || (base[name] = { + recursives: [], + args: [] + }); + obj.recursives.push(recursive); + return obj.args.push(args); + }, + rm: function(recursive, post) { + var i, j, len, obj, rec, ref; + if (!(obj = Recursive.recursives[post.fullID])) { + return; + } + ref = obj.recursives; + for (i = j = 0, len = ref.length; j < len; i = ++j) { + rec = ref[i]; + if (!(rec === recursive)) { + continue; + } + obj.recursives.splice(i, 1); + obj.args.splice(i, 1); + } + }, + apply: function() { + var args, fullID, post, recursive; + recursive = arguments[0], post = arguments[1], args = 3 <= arguments.length ? slice.call(arguments, 2) : []; + fullID = post.fullID; + return g.posts.forEach(function(post) { + if (indexOf.call(post.quotes, fullID) >= 0) { + return recursive.apply(null, [post].concat(slice.call(args))); + } + }); + } + }; + + return Recursive; + +}).call(this); + +ThreadHiding = (function() { + var ThreadHiding; + + ThreadHiding = { + init: function() { + var ref; + if (((ref = g.VIEW) !== 'index' && ref !== 'catalog') || !Conf['Thread Hiding Buttons'] && !(Conf['Menu'] && Conf['Thread Hiding Link']) && !Conf['JSON Index']) { + return; + } + this.db = new DataBoard('hiddenThreads'); + if (g.VIEW === 'catalog') { + return this.catalogWatch(); + } + this.catalogSet(g.BOARD); + return Callbacks.Post.push({ + name: 'Thread Hiding', + cb: this.node + }); + }, + catalogSet: function(board) { + var hiddenThreads, threadID; + if (!$.hasStorage) { + return; + } + hiddenThreads = ThreadHiding.db.get({ + boardID: board.ID, + defaultValue: {} + }); + for (threadID in hiddenThreads) { + hiddenThreads[threadID] = true; + } + return localStorage.setItem("4chan-hide-t-" + board, JSON.stringify(hiddenThreads)); + }, + catalogWatch: function() { + if (!$.hasStorage) { + return; + } + this.hiddenThreads = JSON.parse(localStorage.getItem("4chan-hide-t-" + g.BOARD)) || {}; + return Main.ready(function() { + return new MutationObserver(ThreadHiding.catalogSave).observe($.id('threads'), { + attributes: true, + subtree: true, + attributeFilter: ['style'] + }); + }); + }, + catalogSave: function() { + var hiddenThreads2, threadID; + hiddenThreads2 = JSON.parse(localStorage.getItem("4chan-hide-t-" + g.BOARD)) || {}; + for (threadID in hiddenThreads2) { + if (!(threadID in ThreadHiding.hiddenThreads)) { + ThreadHiding.db.set({ + boardID: g.BOARD.ID, + threadID: threadID, + val: { + makeStub: Conf['Stubs'] + } + }); + } + } + for (threadID in ThreadHiding.hiddenThreads) { + if (!(threadID in hiddenThreads2)) { + ThreadHiding.db["delete"]({ + boardID: g.BOARD.ID, + threadID: threadID + }); + } + } + return ThreadHiding.hiddenThreads = hiddenThreads2; + }, + node: function() { + var data; + if (this.isReply || this.isClone || this.isFetchedQuote) { + return; + } + if (data = ThreadHiding.db.get({ + boardID: this.board.ID, + threadID: this.ID + })) { + ThreadHiding.hide(this.thread, data.makeStub); + } + if (!Conf['Thread Hiding Buttons']) { + return; + } + return $.prepend(this.nodes.root, ThreadHiding.makeButton(this.thread, 'hide')); + }, + onIndexBuild: function(nodes) { + var i, len, root, thread; + for (i = 0, len = nodes.length; i < len; i++) { + root = nodes[i]; + thread = Get.threadFromRoot(root); + if (thread.isHidden && thread.stub && !root.contains(thread.stub)) { + ThreadHiding.makeStub(thread, root); + } + } + }, + menu: { + init: function() { + var apply, div, hideStubLink, makeStub; + if (g.VIEW !== 'index' || !Conf['Menu'] || !Conf['Thread Hiding Link']) { + return; + } + div = $.el('div', { + className: 'hide-thread-link', + textContent: 'Hide' + }); + apply = $.el('a', { + textContent: 'Apply', + href: 'javascript:;' + }); + $.on(apply, 'click', ThreadHiding.menu.hide); + makeStub = UI.checkbox('Stubs', 'Make stub'); + Menu.menu.addEntry({ + el: div, + order: 20, + open: function(arg) { + var isReply, thread; + thread = arg.thread, isReply = arg.isReply; + if (isReply || thread.isHidden || Conf['JSON Index'] && Conf['Index Mode'] === 'catalog') { + return false; + } + ThreadHiding.menu.thread = thread; + return true; + }, + subEntries: [ + { + el: apply + }, { + el: makeStub + } + ] + }); + div = $.el('a', { + className: 'show-thread-link', + textContent: 'Show', + href: 'javascript:;' + }); + $.on(div, 'click', ThreadHiding.menu.show); + Menu.menu.addEntry({ + el: div, + order: 20, + open: function(arg) { + var isReply, thread; + thread = arg.thread, isReply = arg.isReply; + if (isReply || !thread.isHidden || Conf['JSON Index'] && Conf['Index Mode'] === 'catalog') { + return false; + } + ThreadHiding.menu.thread = thread; + return true; + } + }); + hideStubLink = $.el('a', { + textContent: 'Hide stub', + href: 'javascript:;' + }); + $.on(hideStubLink, 'click', ThreadHiding.menu.hideStub); + return Menu.menu.addEntry({ + el: hideStubLink, + order: 15, + open: function(arg) { + var isReply, thread; + thread = arg.thread, isReply = arg.isReply; + if (isReply || !thread.isHidden || Conf['JSON Index'] && Conf['Index Mode'] === 'catalog') { + return false; + } + return ThreadHiding.menu.thread = thread; + } + }); + }, + hide: function() { + var makeStub, thread; + makeStub = $('input', this.parentNode).checked; + thread = ThreadHiding.menu.thread; + ThreadHiding.hide(thread, makeStub); + ThreadHiding.saveHiddenState(thread, makeStub); + return $.event('CloseMenu'); + }, + show: function() { + var thread; + thread = ThreadHiding.menu.thread; + ThreadHiding.show(thread); + ThreadHiding.saveHiddenState(thread); + return $.event('CloseMenu'); + }, + hideStub: function() { + var thread; + thread = ThreadHiding.menu.thread; + ThreadHiding.show(thread); + ThreadHiding.hide(thread, false); + ThreadHiding.saveHiddenState(thread, false); + $.event('CloseMenu'); + } + }, + makeButton: function(thread, type) { + var a; + a = $.el('a', { + className: type + "-thread-button", + href: 'javascript:;' + }); + $.extend(a, { + innerHTML: "" + }); + a.dataset.fullID = thread.fullID; + $.on(a, 'click', ThreadHiding.toggle); + return a; + }, + makeStub: function(thread, root) { + var a, numReplies, summary; + numReplies = $$('.thread > .replyContainer', root).length; + if (summary = $('.summary', root)) { + numReplies += +summary.textContent.match(/\d+/); + } + a = ThreadHiding.makeButton(thread, 'show'); + $.add(a, $.tn(" " + thread.OP.info.nameBlock + " (" + (numReplies === 1 ? '1 reply' : numReplies + " replies") + ")")); + thread.stub = $.el('div', { + className: 'stub' + }); + if (Conf['Menu']) { + $.add(thread.stub, [a, Menu.makeButton(thread.OP)]); + } else { + $.add(thread.stub, a); + } + return $.prepend(root, thread.stub); + }, + saveHiddenState: function(thread, makeStub) { + if (thread.isHidden) { + ThreadHiding.db.set({ + boardID: thread.board.ID, + threadID: thread.ID, + val: { + makeStub: makeStub + } + }); + } else { + ThreadHiding.db["delete"]({ + boardID: thread.board.ID, + threadID: thread.ID + }); + } + return ThreadHiding.catalogSet(thread.board); + }, + toggle: function(thread) { + if (!(thread instanceof Thread)) { + thread = g.threads[this.dataset.fullID]; + } + if (thread.isHidden) { + ThreadHiding.show(thread); + } else { + ThreadHiding.hide(thread); + } + return ThreadHiding.saveHiddenState(thread); + }, + hide: function(thread, makeStub) { + var threadRoot; + if (makeStub == null) { + makeStub = Conf['Stubs']; + } + if (thread.isHidden) { + return; + } + threadRoot = thread.OP.nodes.root.parentNode; + thread.isHidden = true; + if (Conf['JSON Index']) { + Index.updateHideLabel(); + } + if (!makeStub) { + return threadRoot.hidden = true; + } + return ThreadHiding.makeStub(thread, threadRoot); + }, + show: function(thread) { + var threadRoot; + if (thread.stub) { + $.rm(thread.stub); + delete thread.stub; + } + threadRoot = thread.OP.nodes.root.parentNode; + threadRoot.hidden = thread.isHidden = false; + if (Conf['JSON Index']) { + return Index.updateHideLabel(); + } + } + }; + + return ThreadHiding; + +}).call(this); + +Build = (function() { + var Build, + slice = [].slice; + + Build = { + staticPath: '//s.4cdn.org/image/', + gifIcon: window.devicePixelRatio >= 2 ? '@2x.gif' : '.gif', + spoilerRange: {}, + unescape: function(text) { + if (text == null) { + return text; + } + return text.replace(/<[^>]*>/g, '').replace(/&(amp|#039|quot|lt|gt|#44);/g, function(c) { + return { + '&': '&', + ''': "'", + '"': '"', + '<': '<', + '>': '>', + ',': ',' + }[c]; + }); + }, + shortFilename: function(filename) { + var ext, threshold; + threshold = 30; + ext = filename.match(/\.?[^\.]*$/)[0]; + if (filename.length - ext.length > threshold) { + return filename.slice(0, threshold - 5) + "(...)" + ext; + } else { + return filename; + } + }, + spoilerThumb: function(boardID) { + var spoilerRange; + if (spoilerRange = Build.spoilerRange[boardID]) { + return Build.staticPath + "spoiler-" + boardID + (Math.floor(1 + spoilerRange * Math.random())) + ".png"; + } else { + return Build.staticPath + "spoiler.png"; + } + }, + sameThread: function(boardID, threadID) { + return g.VIEW === 'thread' && g.BOARD.ID === boardID && g.THREADID === +threadID; + }, + postURL: function(boardID, threadID, postID) { + if (Build.sameThread(boardID, threadID)) { + return "#p" + postID; + } else { + return "/" + boardID + "/thread/" + threadID + "#p" + postID; + } + }, + parseJSON: function(data, boardID) { + var o; + o = { + postID: data.no, + threadID: data.resto || data.no, + boardID: boardID, + isReply: !!data.resto, + isSticky: !!data.sticky, + isClosed: !!data.closed, + isArchived: !!data.archived, + fileDeleted: !!data.filedeleted + }; + o.info = { + subject: Build.unescape(data.sub), + email: Build.unescape(data.email), + name: Build.unescape(data.name) || '', + tripcode: data.trip, + uniqueID: data.id, + flagCode: data.country, + flag: Build.unescape(data.country_name), + dateUTC: data.time, + dateText: data.now, + commentHTML: { + innerHTML: data.com || '' + } + }; + if (data.capcode) { + o.info.capcode = data.capcode.replace(/_highlight$/, '').replace(/_/g, ' ').replace(/\b\w/g, function(c) { + return c.toUpperCase(); + }); + o.capcodeHighlight = /_highlight$/.test(data.capcode); + delete o.info.uniqueID; + } + if (data.ext) { + o.file = { + name: (Build.unescape(data.filename)) + data.ext, + url: boardID === 'f' ? location.protocol + "//i.4cdn.org/" + boardID + "/" + (encodeURIComponent(data.filename)) + data.ext : location.protocol + "//i.4cdn.org/" + boardID + "/" + data.tim + data.ext, + height: data.h, + width: data.w, + MD5: data.md5, + size: $.bytesToString(data.fsize), + thumbURL: location.protocol + "//i.4cdn.org/" + boardID + "/" + data.tim + "s.jpg", + theight: data.tn_h, + twidth: data.tn_w, + isSpoiler: !!data.spoiler, + tag: data.tag + }; + if (!/\.pdf$/.test(o.file.url)) { + o.file.dimensions = o.file.width + "x" + o.file.height; + } + } + return o; + }, + parseComment: function(html) { + html = html.replace(//gi, '\n').replace(/\n\nRolled [^<]*<\/b>/i, '').replace(/]*>/g, ''); + return Build.unescape(html); + }, + postFromObject: function(data, boardID, suppressThumb) { + var o; + o = Build.parseJSON(data, boardID); + return Build.post(o, suppressThumb); + }, + post: function(o, suppressThumb) { + var boardID, capcode, capcodeDescription, capcodeLC, capcodeLong, capcodePlural, commentHTML, container, dateText, dateUTC, email, file, fileBlock, fileThumb, fileURL, flag, flagCode, gifIcon, href, i, len, match, name, postClass, postID, postInfo, postLink, protocol, quote, quoteLink, ref, ref1, shortFilename, staticPath, subject, threadID, tripcode, uniqueID, wholePost; + postID = o.postID, threadID = o.threadID, boardID = o.boardID, file = o.file; + ref = o.info, subject = ref.subject, email = ref.email, name = ref.name, tripcode = ref.tripcode, capcode = ref.capcode, uniqueID = ref.uniqueID, flagCode = ref.flagCode, flag = ref.flag, dateUTC = ref.dateUTC, dateText = ref.dateText, commentHTML = ref.commentHTML; + staticPath = Build.staticPath, gifIcon = Build.gifIcon; + + /* Post Info */ + if (capcode) { + capcodeLC = capcode.toLowerCase(); + if (capcode === 'Founder') { + capcodePlural = 'the Founder'; + capcodeDescription = "4chan's Founder"; + } else { + capcodeLong = { + 'Admin': 'Administrator', + 'Mod': 'Moderator' + }[capcode] || capcode; + capcodePlural = capcodeLong + "s"; + capcodeDescription = "a 4chan " + capcodeLong; + } + } + postLink = Build.postURL(boardID, threadID, postID); + quoteLink = Build.sameThread(boardID, threadID) ? "javascript:quote('" + (+postID) + "');" : "/" + boardID + "/thread/" + threadID + "#q" + postID; + postInfo = { + innerHTML: "
    " + ((!o.isReply || boardID === "f" || subject) ? "" + E(subject || "") + " " : "") + "" + ((email) ? "" : "") + "" + E(name) + "" + ((tripcode) ? " " + E(tripcode) + "" : "") + ((capcode) ? " ## " + E(capcode) + "" : "") + ((email) ? "" : "") + ((boardID === "f" && !o.isReply || capcode) ? "" : " ") + ((capcode) ? " \""" : "") + ((uniqueID && !capcode) ? " (ID: " + E(uniqueID) + ")" : "") + ((flagCode) ? " " : "") + " " + E(dateText) + " No." + E(postID) + "" + ((o.isSticky) ? " \"Sticky\"" : "") + ((o.isClosed && !o.isArchived) ? " \"Closed\"" : "") + ((o.isArchived) ? " \"Archived\"" : "") + ((!o.isReply && g.VIEW === "index") ? "   [Reply]" : "") + "
    " + }; + + /* File Info */ + if (file) { + protocol = /^https?:(?=\/\/i\.4cdn\.org\/)/; + fileURL = file.url.replace(protocol, ''); + shortFilename = Build.shortFilename(file.name); + fileThumb = file.isSpoiler ? Build.spoilerThumb(boardID) : file.thumbURL.replace(protocol, ''); + } + fileBlock = { + innerHTML: ((file) ? "
    " + ((boardID === "f") ? "
    File: " + E(file.name) + "-(" + E(file.size) + ", " + E(file.dimensions) + ((file.tag) ? ", " + E(file.tag) : "") + ")
    " : "
    File: " + ((file.isSpoiler) ? "Spoiler Image" : E(shortFilename)) + " (" + E(file.size) + ", " + E(file.dimensions || "PDF") + ")
    ") + "
    " : ((o.fileDeleted) ? "
    \"File
    " : "")) + }; + + /* Whole Post */ + postClass = o.isReply ? 'reply' : 'op'; + wholePost = { + innerHTML: ((o.isReply) ? "
    >>
    " : "") + "
    " + ((o.isReply) ? (postInfo).innerHTML + (fileBlock).innerHTML : (fileBlock).innerHTML + (postInfo).innerHTML) + "
    " + (commentHTML).innerHTML + "
    " + }; + container = $.el('div', { + className: "postContainer " + postClass + "Container", + id: "pc" + postID + }); + $.extend(container, wholePost); + ref1 = $$('.quotelink', container); + for (i = 0, len = ref1.length; i < len; i++) { + quote = ref1[i]; + href = quote.getAttribute('href'); + if ((href[0] === '#') && !(Build.sameThread(boardID, threadID))) { + quote.href = ("/" + boardID + "/thread/" + threadID) + href; + } else if ((match = href.match(/^\/([^\/]+)\/thread\/(\d+)/)) && (Build.sameThread(match[1], match[2]))) { + quote.href = href.match(/(#[^#]*)?$/)[0] || '#'; + } else if (/^\d+(#|$)/.test(href) && !(g.VIEW === 'thread' && g.BOARD.ID === boardID)) { + quote.href = "/" + boardID + "/thread/" + href; + } + } + return container; + }, + summaryText: function(status, posts, files) { + var text; + text = ''; + if (status) { + text += status + " "; + } + text += posts + " post" + (posts > 1 ? 's' : ''); + if (+files) { + text += " and " + files + " image repl" + (files > 1 ? 'ies' : 'y'); + } + return text += " " + (status === '-' ? 'shown' : 'omitted') + "."; + }, + summary: function(boardID, threadID, posts, files) { + return $.el('a', { + className: 'summary', + textContent: Build.summaryText('', posts, files), + href: "/" + boardID + "/thread/" + threadID + }); + }, + thread: function(board, data, full) { + var OP, root; + Build.spoilerRange[board] = data.custom_spoiler; + if (OP = board.posts[data.no]) { + if (OP.isFetchedQuote) { + OP = null; + } + } + if (OP && (root = OP.nodes.root.parentNode)) { + $.rmAll(root); + } else { + root = $.el('div', { + className: 'thread', + id: "t" + data.no + }); + } + $.add(root, Build[full ? 'fullThread' : 'excerptThread'](board, data, OP)); + return root; + }, + excerptThread: function(board, data, OP) { + var files, nodes, posts, ref; + nodes = [OP ? OP.nodes.root : Build.postFromObject(data, board.ID, true)]; + if (data.omitted_posts || !Conf['Show Replies'] && data.replies) { + ref = Conf['Show Replies'] ? [ + data.omitted_posts, data.images - data.last_replies.filter(function(data) { + return !!data.ext; + }).length + ] : [data.replies, data.images], posts = ref[0], files = ref[1]; + nodes.push(Build.summary(board.ID, data.no, posts, files)); + } + return nodes; + }, + fullThread: function(board, data) { + return Build.postFromObject(data, board.ID); + }, + catalogThread: function(thread) { + var br, cc, comment, data, exif, fileCount, gifIcon, href, i, imgClass, j, k, l, len, len1, len2, len3, pageCount, postCount, pp, quote, ref, ref1, ref2, ref3, ref4, root, spoilerRange, src, staticPath; + staticPath = Build.staticPath, gifIcon = Build.gifIcon; + data = Index.liveThreadData[Index.liveThreadIDs.indexOf(thread.ID)]; + if (data.spoiler && !Conf['Reveal Spoiler Thumbnails']) { + src = staticPath + "spoiler"; + if (spoilerRange = Build.spoilerRange[thread.board]) { + src += ("-" + thread.board) + Math.floor(1 + spoilerRange * Math.random()); + } + src += '.png'; + imgClass = 'spoiler-file'; + } else if (data.filedeleted) { + src = staticPath + "filedeleted-res" + gifIcon; + imgClass = 'deleted-file'; + } else if (thread.OP.file) { + src = thread.OP.file.thumbURL; + } else { + src = staticPath + "nofile.png"; + imgClass = 'no-file'; + } + postCount = data.replies + 1; + fileCount = data.images + !!data.ext; + pageCount = Math.floor(Index.liveThreadIDs.indexOf(thread.ID) / Index.threadsNumPerPage) + 1; + comment = { + innerHTML: data.com || '' + }; + root = $.el('div', { + className: 'catalog-thread' + }); + $.extend(root, { + innerHTML: "
    " + E(postCount) + " / " + E(fileCount) + " / " + E(pageCount) + "
    " + ((thread.OP.info.subject) ? "
    " + E(thread.OP.info.subject) + "
    " : "") + "
    " + (comment).innerHTML + "
    " + }); + root.dataset.fullID = thread.fullID; + if (thread.OP.highlights) { + $.addClass.apply($, [root].concat(slice.call(thread.OP.highlights))); + } + ref = $$('.quotelink', root.lastElementChild); + for (i = 0, len = ref.length; i < len; i++) { + quote = ref[i]; + href = quote.getAttribute('href'); + if (href[0] === '#') { + quote.href = ("/" + thread.board + "/thread/" + thread.ID) + href; + } + } + ref1 = $$('.abbr, .exif', root.lastElementChild); + for (j = 0, len1 = ref1.length; j < len1; j++) { + exif = ref1[j]; + $.rm(exif); + } + ref2 = $$('.prettyprint', root.lastElementChild); + for (k = 0, len2 = ref2.length; k < len2; k++) { + pp = ref2[k]; + cc = $.el('span', { + className: 'catalog-code' + }); + $.add(cc, slice.call(pp.childNodes)); + $.replace(pp, cc); + } + ref3 = $$('br', root.lastElementChild); + for (l = 0, len3 = ref3.length; l < len3; l++) { + br = ref3[l]; + if (((ref4 = br.previousSibling) != null ? ref4.nodeName : void 0) === 'BR') { + $.rm(br); + } + } + if (thread.isSticky) { + $.add($('.catalog-icons', root), $.el('img', { + src: staticPath + "sticky" + gifIcon, + className: 'stickyIcon', + title: 'Sticky' + })); + } + if (thread.isClosed) { + $.add($('.catalog-icons', root), $.el('img', { + src: staticPath + "closed" + gifIcon, + className: 'closedIcon', + title: 'Closed' + })); + } + if (data.bumplimit) { + $.addClass($('.post-count', root), 'warning'); + } + if (data.imagelimit) { + $.addClass($('.file-count', root), 'warning'); + } + return root; + } + }; + + return Build; + +}).call(this); + +(function() { + + +}).call(this); + +Get = (function() { + var Get, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + Get = { + threadExcerpt: function(thread) { + var OP, excerpt, ref; + OP = thread.OP; + excerpt = ("/" + thread.board + "/ - ") + (((ref = OP.info.subject) != null ? ref.trim() : void 0) || OP.info.commentDisplay.replace(/\n+/g, ' // ') || OP.info.nameBlock); + if (excerpt.length > 73) { + return excerpt.slice(0, 70) + "..."; + } + return excerpt; + }, + threadFromRoot: function(root) { + return g.threads[g.BOARD + "." + root.id.slice(1)]; + }, + threadFromNode: function(node) { + return Get.threadFromRoot($.x('ancestor::div[@class="thread"]', node)); + }, + postFromRoot: function(root) { + var index, post; + if (root == null) { + return null; + } + post = g.posts[root.dataset.fullID]; + index = root.dataset.clone; + if (index) { + return post.clones[index]; + } else { + return post; + } + }, + postFromNode: function(root) { + return Get.postFromRoot($.x('(ancestor::div[contains(@class,"postContainer")][1]|following::div[contains(@class,"postContainer")][1])', root)); + }, + postDataFromLink: function(link) { + var boardID, path, postID, ref, threadID; + if (link.hostname === 'boards.4chan.org') { + path = link.pathname.split(/\/+/); + boardID = path[1]; + threadID = path[3]; + postID = link.hash.slice(2); + } else { + ref = link.dataset, boardID = ref.boardID, threadID = ref.threadID, postID = ref.postID; + threadID || (threadID = 0); + } + return { + boardID: boardID, + threadID: +threadID, + postID: +postID + }; + }, + allQuotelinksLinkingTo: function(post) { + var fullID, handleQuotes, i, len, posts, qPost, quote, quotelinks, ref; + quotelinks = []; + posts = g.posts; + fullID = post.fullID; + handleQuotes = function(qPost, type) { + var clone, i, len, ref; + quotelinks.push.apply(quotelinks, qPost.nodes[type]); + ref = qPost.clones; + for (i = 0, len = ref.length; i < len; i++) { + clone = ref[i]; + quotelinks.push.apply(quotelinks, clone.nodes[type]); + } + }; + posts.forEach(function(qPost) { + if (indexOf.call(qPost.quotes, fullID) >= 0) { + return handleQuotes(qPost, 'quotelinks'); + } + }); + if (Conf['Quote Backlinks']) { + ref = post.quotes; + for (i = 0, len = ref.length; i < len; i++) { + quote = ref[i]; + if (qPost = posts[quote]) { + handleQuotes(qPost, 'backlinks'); + } + } + } + return quotelinks.filter(function(quotelink) { + var boardID, postID, ref1; + ref1 = Get.postDataFromLink(quotelink), boardID = ref1.boardID, postID = ref1.postID; + return boardID === post.board.ID && postID === post.ID; + }); + }, + scriptData: function() { + var i, len, ref, script; + ref = $$('script:not([src])', d.head); + for (i = 0, len = ref.length; i < len; i++) { + script = ref[i]; + if (/\bcooldowns *=/.test(script.textContent)) { + return script.textContent; + } + } + return ''; + } + }; + + return Get; + +}).call(this); + +Header = (function() { + var Header; + + Header = { + init: function() { + var barFixedToggler, barPositionToggler, box, customNavToggler, editCustomNav, footerToggler, headerToggler, linkJustifyToggler, menuButton, scrollHeaderToggler, shortcutToggler; + this.menu = new UI.Menu('header'); + menuButton = $.el('span', { + className: 'menu-button' + }); + $.extend(menuButton, { + innerHTML: "" + }); + box = UI.checkbox; + barFixedToggler = box('Fixed Header', 'Fixed Header'); + headerToggler = box('Header auto-hide', 'Auto-hide header'); + scrollHeaderToggler = box('Header auto-hide on scroll', 'Auto-hide header on scroll'); + barPositionToggler = box('Bottom Header', 'Bottom header'); + linkJustifyToggler = box('Centered links', 'Centered links'); + customNavToggler = box('Custom Board Navigation', 'Custom board navigation'); + footerToggler = box('Bottom Board List', 'Hide bottom board list'); + shortcutToggler = box('Shortcut Icons', 'Shortcut Icons'); + editCustomNav = $.el('a', { + textContent: 'Edit custom board navigation', + href: 'javascript:;' + }); + this.barFixedToggler = barFixedToggler.firstElementChild; + this.scrollHeaderToggler = scrollHeaderToggler.firstElementChild; + this.barPositionToggler = barPositionToggler.firstElementChild; + this.linkJustifyToggler = linkJustifyToggler.firstElementChild; + this.headerToggler = headerToggler.firstElementChild; + this.footerToggler = footerToggler.firstElementChild; + this.shortcutToggler = shortcutToggler.firstElementChild; + this.customNavToggler = customNavToggler.firstElementChild; + $.on(menuButton, 'click', this.menuToggle); + $.on(this.headerToggler, 'change', this.toggleBarVisibility); + $.on(this.barFixedToggler, 'change', this.toggleBarFixed); + $.on(this.barPositionToggler, 'change', this.toggleBarPosition); + $.on(this.scrollHeaderToggler, 'change', this.toggleHideBarOnScroll); + $.on(this.linkJustifyToggler, 'change', this.toggleLinkJustify); + $.on(this.footerToggler, 'change', this.toggleFooterVisibility); + $.on(this.shortcutToggler, 'change', this.toggleShortcutIcons); + $.on(this.customNavToggler, 'change', this.toggleCustomNav); + $.on(editCustomNav, 'click', this.editCustomNav); + this.setBarFixed(Conf['Fixed Header']); + this.setHideBarOnScroll(Conf['Header auto-hide on scroll']); + this.setBarVisibility(Conf['Header auto-hide']); + this.setLinkJustify(Conf['Centered links']); + this.setShortcutIcons(Conf['Shortcut Icons']); + this.setFooterVisibility(Conf['Bottom Board List']); + $.sync('Fixed Header', this.setBarFixed); + $.sync('Header auto-hide on scroll', this.setHideBarOnScroll); + $.sync('Bottom Header', this.setBarPosition); + $.sync('Shortcut Icons', this.setShortcutIcons); + $.sync('Header auto-hide', this.setBarVisibility); + $.sync('Centered links', this.setLinkJustify); + $.sync('Bottom Board List', this.setFooterVisibility); + this.addShortcut(menuButton); + this.menu.addEntry({ + el: $.el('span', { + textContent: 'Header' + }), + order: 107, + subEntries: [ + { + el: barFixedToggler + }, { + el: headerToggler + }, { + el: scrollHeaderToggler + }, { + el: barPositionToggler + }, { + el: linkJustifyToggler + }, { + el: footerToggler + }, { + el: shortcutToggler + }, { + el: customNavToggler + }, { + el: editCustomNav + } + ] + }); + $.on(window, 'load popstate', Header.hashScroll); + $.on(d, 'CreateNotification', this.createNotification); + $.asap((function() { + return d.body; + }), (function(_this) { + return function() { + if (!Main.isThisPageLegit()) { + return; + } + $.asap((function() { + return $.id('boardNavMobile') || d.readyState !== 'loading'; + }), function() { + var a, footer; + footer = $.id('boardNavDesktop').cloneNode(true); + footer.id = 'boardNavDesktopFoot'; + $('#navtopright', footer).id = 'navbotright'; + $('#settingsWindowLink', footer).id = 'settingsWindowLinkBot'; + Header.bottomBoardList = $('.boardList', footer); + if (a = $("a[href*='/" + g.BOARD + "/']", footer)) { + a.className = 'current'; + } + Main.ready(function() { + var absbot, oldFooter; + if ((oldFooter = $.id('boardNavDesktopFoot'))) { + return $.replace($('.boardList', oldFooter), Header.bottomBoardList); + } else if ((absbot = $.id('absbot'))) { + $.before(absbot, footer); + return $.globalEval('window.cloneTopNav = function() {};'); + } + }); + return Header.setBoardList(); + }); + $.prepend(d.body, _this.bar); + $.add(d.body, Header.hover); + _this.setBarPosition(Conf['Bottom Header']); + return _this; + }; + })(this)); + Main.ready((function(_this) { + return function() { + var cs; + if (g.VIEW === 'catalog' || !Conf['Disable Native Extension']) { + cs = $.el('a', { + href: 'javascript:;' + }); + if (g.VIEW === 'catalog') { + cs.title = cs.textContent = 'Catalog Settings'; + cs.className = 'fa fa-book'; + } else { + cs.title = cs.textContent = '4chan Settings'; + cs.className = 'fa fa-leaf'; + } + $.on(cs, 'click', function() { + return $.id('settingsWindowLink').click(); + }); + return _this.addShortcut(cs); + } + }; + })(this)); + return this.enableDesktopNotifications(); + }, + bar: $.el('div', { + id: 'header-bar' + }), + noticesRoot: $.el('div', { + id: 'notifications' + }), + shortcuts: $.el('span', { + id: 'shortcuts' + }), + hover: $.el('div', { + id: 'hoverUI' + }), + toggle: $.el('div', { + id: 'scroll-marker' + }), + setBoardList: function() { + var a, boardList, btn, chr, i, j, len, len1, node, nodes, ref, ref1, spacer, span; + Header.boardList = boardList = $.el('span', { + id: 'board-list' + }); + $.extend(boardList, { + innerHTML: "" + }); + btn = $('.hide-board-list-button', boardList); + $.on(btn, 'click', Header.toggleBoardList); + nodes = []; + spacer = function() { + return $.el('span', { + className: 'spacer' + }); + }; + ref = $('#boardNavDesktop > .boardList').childNodes; + for (i = 0, len = ref.length; i < len; i++) { + node = ref[i]; + switch (node.nodeName) { + case '#text': + ref1 = node.nodeValue; + for (j = 0, len1 = ref1.length; j < len1; j++) { + chr = ref1[j]; + span = $.el('span', { + textContent: chr + }); + if (chr === ' ') { + span.className = 'space'; + } + if (chr === ']') { + nodes.push(spacer()); + } + nodes.push(span); + if (chr === '[') { + nodes.push(spacer()); + } + } + break; + case 'A': + a = node.cloneNode(true); + if (a.pathname.split('/')[1] === g.BOARD.ID) { + a.className = 'current'; + } + nodes.push(a); + } + } + $.add($('.boardList', boardList), nodes); + $.add(Header.bar, [Header.boardList, Header.shortcuts, Header.noticesRoot, Header.toggle]); + Header.setCustomNav(Conf['Custom Board Navigation']); + Header.generateBoardList(Conf['boardnav']); + $.sync('Custom Board Navigation', Header.setCustomNav); + return $.sync('boardnav', Header.generateBoardList); + }, + generateBoardList: function(boardnav) { + var as, list, nodes, re, t; + list = $('#custom-board-list', Header.boardList); + $.rmAll(list); + if (!boardnav) { + return; + } + boardnav = boardnav.replace(/(\r\n|\n|\r)/g, ' '); + as = $$('#full-board-list a[title]', Header.boardList); + re = /[\w@]+(-(all|title|replace|full|index|catalog|archive|expired|(mode|sort|text):"[^"]+"(,"[^"]+")?))*|[^\w@]+/g; + nodes = (function() { + var i, len, ref, results; + ref = boardnav.match(re); + results = []; + for (i = 0, len = ref.length; i < len; i++) { + t = ref[i]; + results.push(Header.mapCustomNavigation(t, as)); + } + return results; + })(); + $.add(list, nodes); + return $.ready(CatalogLinks.initBoardList); + }, + mapCustomNavigation: function(t, as) { + var a, boardID, href, indexOptions, m, text, url; + if (/^[^\w@]/.test(t)) { + return $.tn(t); + } + text = url = null; + t = t.replace(/-text:"([^"]+)"(?:,"([^"]+)")?/g, function(m0, m1, m2) { + text = m1; + url = m2; + return ''; + }); + indexOptions = []; + t = t.replace(/-(?:mode|sort):"([^"]+)"/g, function(m0, m1) { + indexOptions.push(m1.toLowerCase().replace(/\ /g, '-')); + return ''; + }); + indexOptions = indexOptions.join('/'); + if (/^toggle-all/.test(t)) { + a = $.el('a', { + className: 'show-board-list-button', + textContent: text || '+', + href: 'javascript:;' + }); + $.on(a, 'click', Header.toggleBoardList); + return a; + } + if (/^external/.test(t)) { + a = $.el('a', { + href: url || 'javascript:;', + textContent: text || '+', + className: 'external' + }); + return a; + } + boardID = t.split('-')[0]; + if (boardID === 'current') { + boardID = g.BOARD.ID; + } + a = (function() { + var i, len, ref; + if (boardID === '@') { + return $.el('a', { + href: 'https://twitter.com/4chan', + title: '4chan Twitter', + textContent: '@' + }); + } + for (i = 0, len = as.length; i < len; i++) { + a = as[i]; + if (a.textContent === boardID) { + return a.cloneNode(true); + } + } + a = $.el('a', { + href: "/" + boardID + "/", + textContent: boardID + }); + if ((ref = g.VIEW) === 'catalog' || ref === 'archive') { + a.href += g.VIEW; + } + if (boardID === g.BOARD.ID) { + a.className = 'current'; + } + return a; + })(); + a.textContent = /-title/.test(t) || /-replace/.test(t) && boardID === g.BOARD.ID ? a.title || a.textContent : /-full/.test(t) ? ("/" + boardID + "/") + (a.title ? " - " + a.title : '') : text || boardID; + if (m = t.match(/-(index|catalog)/)) { + if (!(boardID === 'f' && m[1] === 'catalog')) { + a.dataset.only = m[1]; + a.href = CatalogLinks[m[1]](boardID); + if (m[1] === 'catalog') { + $.addClass(a, 'catalog'); + } + } else { + return a.firstChild; + } + } + if (Conf['JSON Index'] && indexOptions) { + a.dataset.indexOptions = indexOptions; + if (a.hostname === 'boards.4chan.org' && a.pathname.split('/')[2] === '') { + a.href += (a.hash ? '/' : '#') + indexOptions; + } + } + if (/-archive/.test(t)) { + if (href = Redirect.to('board', { + boardID: boardID + })) { + a.href = href; + } else { + return a.firstChild; + } + } + if (/-expired/.test(t)) { + if (boardID !== 'b' && boardID !== 'f' && boardID !== 'trash') { + a.href = "/" + boardID + "/archive"; + } else { + return a.firstChild; + } + } + if (boardID === '@') { + $.addClass(a, 'navSmall'); + } + return a; + }, + toggleBoardList: function() { + var bar, custom, full, showBoardList; + bar = Header.bar; + custom = $('#custom-board-list', bar); + full = $('#full-board-list', bar); + showBoardList = !full.hidden; + custom.hidden = !showBoardList; + return full.hidden = showBoardList; + }, + setLinkJustify: function(centered) { + Header.linkJustifyToggler.checked = centered; + if (centered) { + return $.addClass(doc, 'centered-links'); + } else { + return $.rmClass(doc, 'centered-links'); + } + }, + toggleLinkJustify: function() { + var centered; + $.event('CloseMenu'); + centered = this.nodeName === 'INPUT' ? this.checked : void 0; + Header.setLinkJustify(centered); + return $.set('Centered links', centered); + }, + setBarFixed: function(fixed) { + Header.barFixedToggler.checked = fixed; + if (fixed) { + $.addClass(doc, 'fixed'); + return $.addClass(Header.bar, 'dialog'); + } else { + $.rmClass(doc, 'fixed'); + return $.rmClass(Header.bar, 'dialog'); + } + }, + toggleBarFixed: function() { + $.event('CloseMenu'); + Header.setBarFixed(this.checked); + Conf['Fixed Header'] = this.checked; + return $.set('Fixed Header', this.checked); + }, + setShortcutIcons: function(show) { + Header.shortcutToggler.checked = show; + if (show) { + return $.addClass(doc, 'shortcut-icons'); + } else { + return $.rmClass(doc, 'shortcut-icons'); + } + }, + toggleShortcutIcons: function() { + $.event('CloseMenu'); + Header.setShortcutIcons(this.checked); + Conf['Shortcut Icons'] = this.checked; + return $.set('Shortcut Icons', this.checked); + }, + setBarVisibility: function(hide) { + Header.headerToggler.checked = hide; + $.event('CloseMenu'); + (hide ? $.addClass : $.rmClass)(Header.bar, 'autohide'); + return (hide ? $.addClass : $.rmClass)(doc, 'autohide'); + }, + toggleBarVisibility: function() { + var hide, message; + hide = this.nodeName === 'INPUT' ? this.checked : !$.hasClass(Header.bar, 'autohide'); + Conf['Header auto-hide'] = hide; + $.set('Header auto-hide', hide); + Header.setBarVisibility(hide); + message = "The header bar will " + (hide ? 'automatically hide itself.' : 'remain visible.'); + return new Notice('info', message, 2); + }, + setHideBarOnScroll: function(hide) { + Header.scrollHeaderToggler.checked = hide; + if (hide) { + $.on(window, 'scroll', Header.hideBarOnScroll); + return; + } + $.off(window, 'scroll', Header.hideBarOnScroll); + $.rmClass(Header.bar, 'scroll'); + if (!Conf['Header auto-hide']) { + return $.rmClass(Header.bar, 'autohide'); + } + }, + toggleHideBarOnScroll: function() { + var hide; + hide = this.checked; + $.cb.checked.call(this); + return Header.setHideBarOnScroll(hide); + }, + hideBarOnScroll: function() { + var offsetY; + offsetY = window.pageYOffset; + if (offsetY > (Header.previousOffset || 0)) { + $.addClass(Header.bar, 'autohide', 'scroll'); + } else { + $.rmClass(Header.bar, 'autohide', 'scroll'); + } + return Header.previousOffset = offsetY; + }, + setBarPosition: function(bottom) { + var args; + Header.barPositionToggler.checked = bottom; + $.event('CloseMenu'); + args = bottom ? ['bottom-header', 'top-header', 'after'] : ['top-header', 'bottom-header', 'add']; + $.addClass(doc, args[0]); + $.rmClass(doc, args[1]); + return $[args[2]](Header.bar, Header.noticesRoot); + }, + toggleBarPosition: function() { + $.cb.checked.call(this); + return Header.setBarPosition(this.checked); + }, + setFooterVisibility: function(hide) { + Header.footerToggler.checked = hide; + return doc.classList.toggle('hide-bottom-board-list', hide); + }, + toggleFooterVisibility: function() { + var hide, message; + $.event('CloseMenu'); + hide = this.nodeName === 'INPUT' ? this.checked : $.hasClass(doc, 'hide-bottom-board-list'); + Header.setFooterVisibility(hide); + $.set('Bottom Board List', hide); + message = hide ? 'The bottom navigation will now be hidden.' : 'The bottom navigation will remain visible.'; + return new Notice('info', message, 2); + }, + setCustomNav: function(show) { + var btn, cust, full, ref; + Header.customNavToggler.checked = show; + cust = $('#custom-board-list', Header.bar); + full = $('#full-board-list', Header.bar); + btn = $('.hide-board-list-container', full); + return ref = show ? [false, true, false] : [true, false, true], cust.hidden = ref[0], full.hidden = ref[1], btn.hidden = ref[2], ref; + }, + toggleCustomNav: function() { + $.cb.checked.call(this); + return Header.setCustomNav(this.checked); + }, + editCustomNav: function() { + var settings; + Settings.open('Advanced'); + settings = $.id('fourchanx-settings'); + return $('[name=boardnav]', settings).focus(); + }, + hashScroll: function(e) { + var el, hash; + if (e) { + if (e.state) { + return; + } + if (!history.state) { + history.replaceState({}, ''); + } + } + if ((hash = location.hash.slice(1))) { + ReplyPruning.showIfHidden(hash); + if ((el = $.id(hash))) { + return $.queueTask(function() { + return Header.scrollTo(el); + }); + } + } + }, + scrollTo: function(root, down, needed) { + var height, x; + if (!root.offsetParent) { + return; + } + if (down) { + x = Header.getBottomOf(root); + if (Conf['Fixed Header'] && Conf['Header auto-hide on scroll'] && Conf['Bottom header']) { + height = Header.bar.getBoundingClientRect().height; + if (x <= 0) { + if (!Header.isHidden()) { + x += height; + } + } else { + if (Header.isHidden()) { + x -= height; + } + } + } + if (!(needed && x >= 0)) { + return window.scrollBy(0, -x); + } + } else { + x = Header.getTopOf(root); + if (Conf['Fixed Header'] && Conf['Header auto-hide on scroll'] && !Conf['Bottom header']) { + height = Header.bar.getBoundingClientRect().height; + if (x >= 0) { + if (!Header.isHidden()) { + x += height; + } + } else { + if (Header.isHidden()) { + x -= height; + } + } + } + if (!(needed && x >= 0)) { + return window.scrollBy(0, x); + } + } + }, + scrollToIfNeeded: function(root, down) { + return Header.scrollTo(root, down, true); + }, + getTopOf: function(root) { + var headRect, top; + top = root.getBoundingClientRect().top; + if (Conf['Fixed Header'] && !Conf['Bottom Header']) { + headRect = Header.toggle.getBoundingClientRect(); + top -= headRect.top + headRect.height; + } + return top; + }, + getBottomOf: function(root) { + var bottom, clientHeight, headRect; + clientHeight = doc.clientHeight; + bottom = clientHeight - root.getBoundingClientRect().bottom; + if (Conf['Fixed Header'] && Conf['Bottom Header']) { + headRect = Header.toggle.getBoundingClientRect(); + bottom -= clientHeight - headRect.bottom + headRect.height; + } + return bottom; + }, + isNodeVisible: function(node) { + var height; + if (d.hidden || !doc.contains(node)) { + return false; + } + height = node.getBoundingClientRect().height; + return Header.getTopOf(node) + height >= 0 && Header.getBottomOf(node) + height >= 0; + }, + isHidden: function() { + var top; + top = Header.bar.getBoundingClientRect().top; + if (Conf['Bottom header']) { + return top === doc.clientHeight; + } else { + return top < 0; + } + }, + addShortcut: function(el) { + var shortcut; + shortcut = $.el('span', { + className: 'shortcut brackets-wrap' + }); + $.add(shortcut, el); + return $.prepend(Header.shortcuts, shortcut); + }, + rmShortcut: function(el) { + return $.rm(el.parentElement); + }, + menuToggle: function(e) { + return Header.menu.toggle(e, this, g); + }, + createNotification: function(e) { + var content, lifetime, notice, ref, type; + ref = e.detail, type = ref.type, content = ref.content, lifetime = ref.lifetime; + return notice = new Notice(type, content, lifetime); + }, + areNotificationsEnabled: false, + enableDesktopNotifications: function() { + var authorize, disable, el, notice, ref; + if (!(window.Notification && Conf['Desktop Notifications'])) { + return; + } + switch (Notification.permission) { + case 'granted': + Header.areNotificationsEnabled = true; + return; + case 'denied': + return; + } + el = $.el('span', { + innerHTML: "4chan X needs your permission to show desktop notifications. [FAQ]
    or " + }); + ref = $$('button', el), authorize = ref[0], disable = ref[1]; + $.on(authorize, 'click', function() { + return Notification.requestPermission(function(status) { + Header.areNotificationsEnabled = status === 'granted'; + if (status === 'default') { + return; + } + return notice.close(); + }); + }); + $.on(disable, 'click', function() { + $.set('Desktop Notifications', false); + return notice.close(); + }); + return notice = new Notice('info', el); + } + }; + + return Header; + +}).call(this); + +Index = (function() { + var Index, + slice = [].slice, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + Index = { + showHiddenThreads: false, + changed: {}, + init: function() { + var anchorEntry, input, j, k, label, len, len1, name, pinEntry, ref, ref1, ref2, ref3, ref4, ref5, ref6, refNavEntry, repliesEntry, select, sortEntry; + if (g.BOARD.ID === 'f' || !Conf['JSON Index'] || g.VIEW !== 'index') { + return; + } + Callbacks.CatalogThread.push({ + name: 'Catalog Features', + cb: this.catalogNode + }); + this.search = ((ref = history.state) != null ? ref.searched : void 0) || ''; + if ((ref1 = history.state) != null ? ref1.mode : void 0) { + Conf['Index Mode'] = (ref2 = history.state) != null ? ref2.mode : void 0; + } + this.currentSort = (ref3 = history.state) != null ? ref3.sort : void 0; + this.currentSort || (this.currentSort = typeof Conf['Index Sort'] === 'object' ? Conf['Index Sort'][g.BOARD.ID] || 'bump' : Conf['Index Sort']); + this.currentPage = this.getCurrentPage(); + this.processHash(); + $.addClass(doc, 'index-loading', (Conf['Index Mode'].replace(/\ /g, '-')) + "-mode"); + $.on(window, 'popstate', this.cb.popstate); + $.on(d, 'scroll', Index.scroll); + this.button = $.el('a', { + className: 'index-refresh-shortcut fa fa-refresh', + title: 'Refresh', + href: 'javascript:;', + textContent: 'Refresh Index' + }); + $.on(this.button, 'click', function() { + return Index.update(); + }); + Header.addShortcut(this.button, 1); + repliesEntry = { + el: UI.checkbox('Show Replies', 'Show replies') + }; + sortEntry = { + el: UI.checkbox('Per-Board Sort Type', 'Per-board sort type', typeof Conf['Index Sort'] === 'object') + }; + pinEntry = { + el: UI.checkbox('Pin Watched Threads', 'Pin watched threads') + }; + anchorEntry = { + el: UI.checkbox('Anchor Hidden Threads', 'Anchor hidden threads') + }; + refNavEntry = { + el: UI.checkbox('Refreshed Navigation', 'Refreshed navigation') + }; + sortEntry.el.title = 'Set the sorting order of each board independently.'; + pinEntry.el.title = 'Move watched threads to the start of the index.'; + anchorEntry.el.title = 'Move hidden threads to the end of the index.'; + refNavEntry.el.title = 'Refresh index when navigating through pages.'; + ref4 = [repliesEntry, pinEntry, anchorEntry, refNavEntry]; + for (j = 0, len = ref4.length; j < len; j++) { + label = ref4[j]; + input = label.el.firstChild; + name = input.name; + $.on(input, 'change', $.cb.checked); + switch (name) { + case 'Show Replies': + $.on(input, 'change', this.cb.replies); + break; + case 'Pin Watched Threads': + case 'Anchor Hidden Threads': + $.on(input, 'change', this.cb.resort); + } + } + $.on(sortEntry.el.firstChild, 'change', this.cb.perBoardSort); + Header.menu.addEntry({ + el: $.el('span', { + textContent: 'Index Navigation' + }), + order: 100, + subEntries: [repliesEntry, sortEntry, pinEntry, anchorEntry, refNavEntry] + }); + this.navLinks = $.el('div', { + className: 'navLinks json-index' + }); + $.extend(this.navLinks, { + innerHTML: "Index Catalog Archive Bottom ×" + }); + $('.cataloglink a', this.navLinks).href = CatalogLinks.catalog(); + if ((ref5 = g.BOARD.ID) === 'b' || ref5 === 'trash') { + $('.archlistlink', this.navLinks).hidden = true; + } + $.on($('#index-last-refresh a', this.navLinks), 'click', this.cb.refreshFront); + this.searchInput = $('#index-search', this.navLinks); + this.setupSearch(); + $.on(this.searchInput, 'input', this.onSearchInput); + $.on($('#index-search-clear', this.navLinks), 'click', this.clearSearch); + this.hideLabel = $('#hidden-label', this.navLinks); + $.on($('#hidden-toggle a', this.navLinks), 'click', this.cb.toggleHiddenThreads); + this.selectMode = $('#index-mode', this.navLinks); + this.selectSort = $('#index-sort', this.navLinks); + this.selectSize = $('#index-size', this.navLinks); + $.on(this.selectMode, 'change', this.cb.mode); + $.on(this.selectSort, 'change', this.cb.sort); + $.on(this.selectSize, 'change', $.cb.value); + $.on(this.selectSize, 'change', this.cb.size); + ref6 = [this.selectMode, this.selectSize]; + for (k = 0, len1 = ref6.length; k < len1; k++) { + select = ref6[k]; + select.value = Conf[select.name]; + } + this.selectSort.value = Index.currentSort; + this.root = $.el('div', { + className: 'board json-index' + }); + this.cb.size(); + this.pagelist = $.el('div', { + className: 'pagelist json-index' + }); + $.extend(this.pagelist, { + innerHTML: "
    " + }); + $('.cataloglink a', this.pagelist).href = CatalogLinks.catalog(); + $.on(this.pagelist, 'click', this.cb.pageNav); + this.update(true); + $.onExists(doc, 'title + *', function() { + return d.title = d.title.replace(/\ -\ Page\ \d+/, ''); + }); + $.onExists(doc, '.board > .thread > .postContainer, .board + *', function() { + var board, el, l, len2, len3, m, ref7, ref8, threadRoot, topNavPos; + Index.hat = $('.board > .thread > img:first-child'); + if (Index.hat) { + if (Index.nodes) { + ref7 = Index.nodes; + for (l = 0, len2 = ref7.length; l < len2; l++) { + threadRoot = ref7[l]; + $.prepend(threadRoot, Index.hat.cloneNode(false)); + } + } + $.addClass(doc, 'hats-enabled'); + $.addStyle(".catalog-thread::after {background-image: url(" + Index.hat.src + ");}"); + } + board = $('.board'); + $.replace(board, Index.root); + $.event('PostsInserted'); + try { + d.implementation.createDocument(null, null, null).appendChild(board); + } catch (_error) {} + ref8 = $$('.navLinks'); + for (m = 0, len3 = ref8.length; m < len3; m++) { + el = ref8[m]; + $.rm(el); + } + $.rm($.id('ctrl-top')); + topNavPos = $.id('delform').previousElementSibling; + $.before(topNavPos, $.el('hr')); + return $.before(topNavPos, Index.navLinks); + }); + return Main.ready(function() { + var pagelist; + if ((pagelist = $('.pagelist'))) { + $.replace(pagelist, Index.pagelist); + } + return $.rmClass(doc, 'index-loading'); + }); + }, + scroll: function() { + var nodes, pageNum; + if (Index.req || !Index.liveThreadData || Conf['Index Mode'] !== 'infinite' || (window.scrollY <= doc.scrollHeight - (300 + window.innerHeight))) { + return; + } + if (Index.pageNum == null) { + Index.pageNum = Index.currentPage; + } + pageNum = ++Index.pageNum; + if (pageNum > Index.pagesNum) { + return Index.endNotice(); + } + nodes = Index.buildSinglePage(pageNum); + if (Conf['Show Replies']) { + Index.buildReplies(nodes); + } + return Index.buildStructure(nodes); + }, + endNotice: (function() { + var notify, reset; + notify = false; + reset = function() { + return notify = false; + }; + return function() { + if (notify) { + return; + } + notify = true; + new Notice('info', "Last page reached.", 2); + return setTimeout(reset, 3 * $.SECOND); + }; + })(), + menu: { + init: function() { + if (g.VIEW !== 'index' || !Conf['JSON Index'] || !Conf['Menu'] || !Conf['Thread Hiding Link'] || g.BOARD.ID === 'f') { + return; + } + return Menu.menu.addEntry({ + el: $.el('a', { + href: 'javascript:;', + className: 'has-shortcut-text' + }, { + innerHTML: "Shift+click" + }), + order: 20, + open: function(arg) { + var thread; + thread = arg.thread; + if (Conf['Index Mode'] !== 'catalog') { + return false; + } + this.el.firstElementChild.textContent = thread.isHidden ? 'Unhide' : 'Hide'; + if (this.cb) { + $.off(this.el, 'click', this.cb); + } + this.cb = function() { + $.event('CloseMenu'); + return Index.toggleHide(thread); + }; + $.on(this.el, 'click', this.cb); + return true; + } + }); + } + }, + catalogNode: function() { + return $.on(this.nodes.thumb.parentNode, 'click', Index.onClick); + }, + onClick: function(e) { + var thread; + if (e.button !== 0) { + return; + } + thread = g.threads[this.parentNode.dataset.fullID]; + if (e.shiftKey) { + Index.toggleHide(thread); + } else { + return; + } + return e.preventDefault(); + }, + toggleHide: function(thread) { + $.rm(thread.catalogView.nodes.root); + if (Index.showHiddenThreads) { + ThreadHiding.show(thread); + if (!ThreadHiding.db.get({ + boardID: thread.board.ID, + threadID: thread.ID + })) { + return; + } + } else { + ThreadHiding.hide(thread); + } + return ThreadHiding.saveHiddenState(thread); + }, + cycleSortType: function() { + var i, j, len, type, types; + types = slice.call(Index.selectSort.options).filter(function(option) { + return !option.disabled; + }); + for (i = j = 0, len = types.length; j < len; i = ++j) { + type = types[i]; + if (type.selected) { + break; + } + } + types[(i + 1) % types.length].selected = true; + return $.event('change', null, Index.selectSort); + }, + cb: { + toggleHiddenThreads: function() { + $('#hidden-toggle a', Index.navLinks).textContent = (Index.showHiddenThreads = !Index.showHiddenThreads) ? 'Hide' : 'Show'; + Index.sort(); + return Index.buildIndex(); + }, + mode: function() { + Index.pushState({ + mode: this.value + }); + return Index.pageLoad(false); + }, + sort: function() { + Index.pushState({ + sort: this.value + }); + return Index.pageLoad(false); + }, + resort: function() { + Index.sort(); + return Index.buildIndex(); + }, + perBoardSort: function() { + Conf['Index Sort'] = this.checked ? {} : ''; + return Index.saveSort(); + }, + size: function(e) { + if (Conf['Index Mode'] !== 'catalog') { + $.rmClass(Index.root, 'catalog-small'); + $.rmClass(Index.root, 'catalog-large'); + } else if (Conf['Index Size'] === 'small') { + $.addClass(Index.root, 'catalog-small'); + $.rmClass(Index.root, 'catalog-large'); + } else { + $.addClass(Index.root, 'catalog-large'); + $.rmClass(Index.root, 'catalog-small'); + } + if (e) { + return Index.buildIndex(); + } + }, + replies: function() { + Index.buildThreads(); + Index.sort(); + return Index.buildIndex(); + }, + popstate: function(e) { + var mode, nCommands, page, ref, searched, sort; + if (e != null ? e.state : void 0) { + ref = e.state, searched = ref.searched, mode = ref.mode, sort = ref.sort; + page = Index.getCurrentPage(); + Index.setState({ + search: searched, + mode: mode, + sort: sort, + page: page + }); + return Index.pageLoad(false); + } else { + nCommands = Index.processHash(); + if (Conf['Refreshed Navigation'] && nCommands) { + return Index.update(); + } else { + return Index.pageLoad(); + } + } + }, + pageNav: function(e) { + var a; + if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0) { + return; + } + switch (e.target.nodeName) { + case 'BUTTON': + e.target.blur(); + a = e.target.parentNode; + break; + case 'A': + a = e.target; + break; + default: + return; + } + if (a.textContent === 'Catalog') { + return; + } + e.preventDefault(); + return Index.userPageNav(+a.pathname.split(/\/+/)[2] || 1); + }, + refreshFront: function() { + Index.pushState({ + page: 1 + }); + return Index.update(); + } + }, + scrollToIndex: function() { + return Header.scrollToIfNeeded((Index.navLinks.getBoundingClientRect().height ? Index.navLinks : Index.root)); + }, + getCurrentPage: function() { + return +window.location.pathname.split(/\/+/)[2] || 1; + }, + userPageNav: function(page) { + Index.pushState({ + page: page + }); + if (Conf['Refreshed Navigation']) { + return Index.update(); + } else { + return Index.pageLoad(); + } + }, + hashCommands: { + mode: { + 'paged': 'paged', + 'infinite-scrolling': 'infinite', + 'infinite': 'infinite', + 'all-threads': 'all pages', + 'all-pages': 'all pages', + 'catalog': 'catalog' + }, + sort: { + 'bump-order': 'bump', + 'last-reply': 'lastreply', + 'last-long-reply': 'lastlong', + 'creation-date': 'birth', + 'reply-count': 'replycount', + 'file-count': 'filecount' + } + }, + processHash: function() { + var command, commands, hash, j, leftover, len, mode, ref, sort, state; + hash = ((ref = location.href.match(/#.*/)) != null ? ref[0] : void 0) || ''; + state = { + replace: true + }; + commands = hash.slice(1).split('/'); + leftover = []; + for (j = 0, len = commands.length; j < len; j++) { + command = commands[j]; + if ((mode = Index.hashCommands.mode[command])) { + state.mode = mode; + } else if (command === 'index') { + state.mode = Conf['Previous Index Mode']; + state.page = 1; + } else if ((sort = Index.hashCommands.sort[command])) { + state.sort = sort; + } else if (/^s=/.test(command)) { + state.search = decodeURIComponent(command.slice(2)).replace(/\+/g, ' ').trim(); + } else { + leftover.push(command); + } + } + hash = leftover.join('/'); + if (hash) { + state.hash = "#" + hash; + } + Index.pushState(state); + return commands.length - leftover.length; + }, + pushState: function(state) { + var hash, pageBeforeSearch, pathname, ref, replace, search; + search = state.search, hash = state.hash, replace = state.replace; + pageBeforeSearch = (ref = history.state) != null ? ref.oldpage : void 0; + if ((search != null) && search !== Index.search) { + state.page = search ? 1 : pageBeforeSearch || 1; + if (!search) { + pageBeforeSearch = void 0; + } else if (!Index.search) { + pageBeforeSearch = Index.currentPage; + } + } + Index.setState(state); + pathname = Index.currentPage === 1 ? "/" + g.BOARD + "/" : "/" + g.BOARD + "/" + Index.currentPage; + hash || (hash = ''); + return history[replace ? 'replaceState' : 'pushState']({ + mode: Conf['Index Mode'], + sort: Index.currentSort, + searched: Index.search, + oldpage: pageBeforeSearch + }, '', location.protocol + "//" + location.host + pathname + hash); + }, + setState: function(arg) { + var hash, mode, page, ref, search, sort; + search = arg.search, mode = arg.mode, sort = arg.sort, page = arg.page, hash = arg.hash; + if ((search != null) && search !== Index.search) { + Index.changed.search = true; + Index.search = search; + } + if ((mode != null) && mode !== Conf['Index Mode']) { + Index.changed.mode = true; + Conf['Index Mode'] = mode; + $.set('Index Mode', mode); + if (!(mode === 'catalog' || Conf['Previous Index Mode'] === mode)) { + Conf['Previous Index Mode'] = mode; + $.set('Previous Index Mode', mode); + } + } + if ((sort != null) && sort !== Index.currentSort) { + Index.changed.sort = true; + Index.currentSort = sort; + Index.saveSort(); + } + if ((ref = Conf['Index Mode']) === 'all pages' || ref === 'catalog') { + page = 1; + } + if ((page != null) && page !== Index.currentPage) { + Index.changed.page = true; + Index.currentPage = page; + } + if (hash != null) { + return Index.changed.hash = true; + } + }, + saveSort: function() { + if (typeof Conf['Index Sort'] === 'object') { + Conf['Index Sort'][g.BOARD.ID] = Index.currentSort; + } else { + Conf['Index Sort'] = Index.currentSort; + } + return $.set('Index Sort', Conf['Index Sort']); + }, + pageLoad: function(scroll) { + var hash, mode, page, ref, search, sort, threads; + if (scroll == null) { + scroll = true; + } + if (!Index.liveThreadData) { + return; + } + ref = Index.changed, threads = ref.threads, search = ref.search, mode = ref.mode, sort = ref.sort, page = ref.page, hash = ref.hash; + if (threads || search || sort) { + Index.sort(); + } + if (threads || search) { + Index.buildPagelist(); + } + if (search) { + Index.setupSearch(); + } + if (mode) { + Index.setupMode(); + } + if (sort) { + Index.setupSort(); + } + if (threads || search || mode || page || sort) { + Index.buildIndex(); + } + if (threads || search || mode || page) { + Index.setPage(); + } + if (scroll && !hash) { + Index.scrollToIndex(); + } + if (hash) { + Header.hashScroll(); + } + return Index.changed = {}; + }, + setupMode: function() { + var j, len, mode, ref; + ref = ['paged', 'infinite', 'all pages', 'catalog']; + for (j = 0, len = ref.length; j < len; j++) { + mode = ref[j]; + $[mode === Conf['Index Mode'] ? 'addClass' : 'rmClass'](doc, (mode.replace(/\ /g, '-')) + "-mode"); + } + Index.selectMode.value = Conf['Index Mode']; + Index.cb.size(); + Index.showHiddenThreads = false; + return $('#hidden-toggle a', Index.navLinks).textContent = 'Show'; + }, + setupSort: function() { + return Index.selectSort.value = Index.currentSort; + }, + getPagesNum: function() { + if (Index.search) { + return Math.ceil(Index.sortedNodes.length / Index.threadsNumPerPage); + } else { + return Index.pagesNum; + } + }, + getMaxPageNum: function() { + return Math.max(1, Index.getPagesNum()); + }, + buildPagelist: function() { + var a, i, j, maxPageNum, nodes, pagesRoot, ref; + pagesRoot = $('.pages', Index.pagelist); + maxPageNum = Index.getMaxPageNum(); + if (pagesRoot.childElementCount !== maxPageNum) { + nodes = []; + for (i = j = 1, ref = maxPageNum; j <= ref; i = j += 1) { + a = $.el('a', { + textContent: i, + href: i === 1 ? './' : i + }); + nodes.push($.tn('['), a, $.tn('] ')); + } + $.rmAll(pagesRoot); + return $.add(pagesRoot, nodes); + } + }, + setPage: function() { + var a, href, maxPageNum, next, pageNum, pagesRoot, prev, strong; + pageNum = Index.currentPage; + maxPageNum = Index.getMaxPageNum(); + pagesRoot = $('.pages', Index.pagelist); + prev = pagesRoot.previousSibling.firstChild; + next = pagesRoot.nextSibling.firstChild; + href = Math.max(pageNum - 1, 1); + prev.href = href === 1 ? './' : href; + prev.firstChild.disabled = href === pageNum; + href = Math.min(pageNum + 1, maxPageNum); + next.href = href === 1 ? './' : href; + next.firstChild.disabled = href === pageNum; + if (strong = $('strong', pagesRoot)) { + if (+strong.textContent === pageNum) { + return; + } + $.replace(strong, strong.firstChild); + } else { + strong = $.el('strong'); + } + a = pagesRoot.children[pageNum - 1]; + $.before(a, strong); + return $.add(strong, a); + }, + updateHideLabel: function() { + var hiddenCount, ref, ref1, thread, threadID; + hiddenCount = 0; + ref = g.BOARD.threads; + for (threadID in ref) { + thread = ref[threadID]; + if (thread.isHidden) { + if (ref1 = thread.ID, indexOf.call(Index.liveThreadIDs, ref1) >= 0) { + hiddenCount++; + } + } + } + if (!hiddenCount) { + Index.hideLabel.hidden = true; + if (Index.showHiddenThreads) { + Index.cb.toggleHiddenThreads(); + } + return; + } + Index.hideLabel.hidden = false; + return $('#hidden-count', Index.navLinks).textContent = hiddenCount === 1 ? '1 hidden thread' : hiddenCount + " hidden threads"; + }, + update: function(firstTime) { + var now, ref, ref1; + if ((ref = Index.req) != null) { + ref.abort(); + } + if ((ref1 = Index.notice) != null) { + ref1.close(); + } + if (Conf['Index Refresh Notifications'] && d.readyState !== 'loading') { + Index.notice = new Notice('info', 'Refreshing index...'); + } else { + now = Date.now(); + $.ready(function() { + return Index.nTimeout = setTimeout((function() { + if (Index.req && !Index.notice) { + return Index.notice = new Notice('info', 'Refreshing index...'); + } + }), 3 * $.SECOND - (Date.now() - now)); + }); + } + if (!firstTime && d.readyState !== 'loading' && !$('.board + *')) { + location.reload(); + return; + } + Index.req = $.ajax("//a.4cdn.org/" + g.BOARD + "/catalog.json", { + onabort: Index.load, + onloadend: Index.load + }, { + whenModified: 'Index' + }); + return $.addClass(Index.button, 'fa-spin'); + }, + load: function(e) { + var err, nTimeout, notice, ref, req, timeEl; + $.rmClass(Index.button, 'fa-spin'); + req = Index.req, notice = Index.notice, nTimeout = Index.nTimeout; + if (nTimeout) { + clearTimeout(nTimeout); + } + delete Index.nTimeout; + delete Index.req; + delete Index.notice; + if (e.type === 'abort') { + req.onloadend = null; + if (notice != null) { + notice.close(); + } + return; + } + if ((ref = req.status) !== 200 && ref !== 304) { + err = "Index refresh failed. Error " + req.statusText + " (" + req.status + ")"; + if (notice) { + notice.setType('warning'); + notice.el.lastElementChild.textContent = err; + setTimeout(notice.close, $.SECOND); + } else { + new Notice('warning', err, 1); + } + return; + } + try { + if (req.status === 200) { + Index.parse(req.response); + } else if (req.status === 304) { + Index.pageLoad(); + } + } catch (_error) { + err = _error; + c.error("Index failure: " + err.message, err.stack); + if (notice) { + notice.setType('error'); + notice.el.lastElementChild.textContent = 'Index refresh failed.'; + setTimeout(notice.close, $.SECOND); + } else { + new Notice('error', 'Index refresh failed.', 1); + } + return; + } + if (notice) { + if (Conf['Index Refresh Notifications']) { + notice.setType('success'); + notice.el.lastElementChild.textContent = 'Index refreshed!'; + setTimeout(notice.close, $.SECOND); + } else { + notice.close(); + } + } + timeEl = $('#index-last-refresh time', Index.navLinks); + timeEl.dataset.utc = Date.parse(req.getResponseHeader('Last-Modified')); + return RelativeDates.update(timeEl); + }, + parse: function(pages) { + $.cleanCache(function(url) { + return /^\/\/a\.4cdn\.org\//.test(url); + }); + Index.parseThreadList(pages); + Index.buildThreads(); + Index.changed.threads = true; + return Index.pageLoad(); + }, + parseThreadList: function(pages) { + var ref; + Index.pagesNum = pages.length; + Index.threadsNumPerPage = ((ref = pages[0]) != null ? ref.threads.length : void 0) || 1; + Index.liveThreadData = pages.reduce((function(arr, next) { + return arr.concat(next.threads); + }), []); + Index.liveThreadIDs = Index.liveThreadData.map(function(data) { + return data.no; + }); + g.BOARD.threads.forEach(function(thread) { + var ref1; + if (ref1 = thread.ID, indexOf.call(Index.liveThreadIDs, ref1) < 0) { + return thread.collect(); + } + }); + }, + buildThreads: function() { + var err, errors, i, j, len, posts, ref, thread, threadData, threadRoot, threads; + if (!Index.liveThreadData) { + return; + } + Index.nodes = []; + threads = []; + posts = []; + ref = Index.liveThreadData; + for (i = j = 0, len = ref.length; j < len; i = ++j) { + threadData = ref[i]; + try { + threadRoot = Build.thread(g.BOARD, threadData); + if (Index.hat) { + $.prepend(threadRoot, Index.hat.cloneNode(false)); + } + if (thread = g.BOARD.threads[threadData.no]) { + thread.setCount('post', threadData.replies + 1, threadData.bumplimit); + thread.setCount('file', threadData.images + !!threadData.ext, threadData.imagelimit); + thread.setStatus('Sticky', !!threadData.sticky); + thread.setStatus('Closed', !!threadData.closed); + } else { + thread = new Thread(threadData.no, g.BOARD); + threads.push(thread); + } + Index.nodes.push(threadRoot); + if (!(thread.OP && !thread.OP.isFetchedQuote)) { + posts.push(new Post($('.opContainer', threadRoot), thread, g.BOARD)); + } + thread.setPage(Math.floor(i / Index.threadsNumPerPage) + 1); + } catch (_error) { + err = _error; + if (!errors) { + errors = []; + } + errors.push({ + message: "Parsing of Thread No." + thread + " failed. Thread will be skipped.", + error: err + }); + } + } + if (errors) { + Main.handleErrors(errors); + } + $.nodes(Index.nodes); + Main.callbackNodes('Thread', threads); + Main.callbackNodes('Post', posts); + Index.updateHideLabel(); + return $.event('IndexRefresh'); + }, + buildReplies: function(threadRoots) { + var data, err, errors, i, j, k, lastReplies, len, len1, node, nodes, post, posts, thread, threadRoot; + posts = []; + for (j = 0, len = threadRoots.length; j < len; j++) { + threadRoot = threadRoots[j]; + thread = Get.threadFromRoot(threadRoot); + i = Index.liveThreadIDs.indexOf(thread.ID); + if (!(lastReplies = Index.liveThreadData[i].last_replies)) { + continue; + } + nodes = []; + for (k = 0, len1 = lastReplies.length; k < len1; k++) { + data = lastReplies[k]; + if ((post = thread.posts[data.no]) && !post.isFetchedQuote) { + nodes.push(post.nodes.root); + continue; + } + nodes.push(node = Build.postFromObject(data, thread.board.ID)); + try { + posts.push(new Post(node, thread, thread.board)); + } catch (_error) { + err = _error; + if (!errors) { + errors = []; + } + errors.push({ + message: "Parsing of Post No." + data.no + " failed. Post will be skipped.", + error: err + }); + } + } + $.add(threadRoot, nodes); + } + if (errors) { + Main.handleErrors(errors); + } + return Main.callbackNodes('Post', posts); + }, + buildCatalogViews: function() { + var catalogThreads, j, len, thread, threads; + threads = Index.sortedNodes.map(function(threadRoot) { + return Get.threadFromRoot(threadRoot); + }).filter(function(thread) { + return !thread.isHidden !== Index.showHiddenThreads; + }); + catalogThreads = []; + for (j = 0, len = threads.length; j < len; j++) { + thread = threads[j]; + if (!thread.catalogView) { + catalogThreads.push(new CatalogThread(Build.catalogThread(thread), thread)); + } + } + Main.callbackNodes('CatalogThread', catalogThreads); + return threads.map(function(thread) { + return thread.catalogView.nodes.root; + }); + }, + sizeCatalogViews: function(nodes) { + var height, j, len, node, ratio, ref, size, thumb, width; + size = Conf['Index Size'] === 'small' ? 150 : 250; + for (j = 0, len = nodes.length; j < len; j++) { + node = nodes[j]; + thumb = $('.catalog-thumb', node); + ref = thumb.dataset, width = ref.width, height = ref.height; + if (!width) { + continue; + } + ratio = size / Math.max(width, height); + thumb.style.width = width * ratio + 'px'; + thumb.style.height = height * ratio + 'px'; + } + }, + sort: function() { + var j, lastlong, len, liveThreadData, liveThreadIDs, nodes, sortedNodes, sortedThreadIDs, threadID; + liveThreadIDs = Index.liveThreadIDs, liveThreadData = Index.liveThreadData; + if (!liveThreadData) { + return; + } + sortedThreadIDs = (function() { + switch (Index.currentSort) { + case 'lastreply': + return slice.call(liveThreadData).sort(function(a, b) { + var num; + if ((num = a.last_replies)) { + a = num[num.length - 1]; + } + if ((num = b.last_replies)) { + b = num[num.length - 1]; + } + return b.no - a.no; + }).map(function(post) { + return post.no; + }); + case 'lastlong': + lastlong = function(thread) { + var i, j, r, ref; + ref = thread.last_replies || []; + for (i = j = ref.length - 1; j >= 0; i = j += -1) { + r = ref[i]; + if (r.com && Build.parseComment(r.com).replace(/[^a-z]/ig, '').length >= 100) { + return r; + } + } + return thread; + }; + return slice.call(liveThreadData).sort(function(a, b) { + return lastlong(b).no - lastlong(a).no; + }).map(function(post) { + return post.no; + }); + case 'bump': + return liveThreadIDs; + case 'birth': + return slice.call(liveThreadIDs).sort(function(a, b) { + return b - a; + }); + case 'replycount': + return slice.call(liveThreadData).sort(function(a, b) { + return b.replies - a.replies; + }).map(function(post) { + return post.no; + }); + case 'filecount': + return slice.call(liveThreadData).sort(function(a, b) { + return b.images - a.images; + }).map(function(post) { + return post.no; + }); + } + })(); + Index.sortedNodes = sortedNodes = []; + nodes = Index.nodes; + for (j = 0, len = sortedThreadIDs.length; j < len; j++) { + threadID = sortedThreadIDs[j]; + sortedNodes.push(nodes[Index.liveThreadIDs.indexOf(threadID)]); + } + if (Index.search && (nodes = Index.querySearch(Index.search))) { + Index.sortedNodes = nodes; + } + Index.sortOnTop(function(thread) { + return thread.isSticky; + }); + Index.sortOnTop(function(thread) { + return thread.isOnTop || Conf['Pin Watched Threads'] && ThreadWatcher.isWatched(thread); + }); + if (Conf['Anchor Hidden Threads']) { + return Index.sortOnTop(function(thread) { + return !thread.isHidden; + }); + } + }, + sortOnTop: function(match) { + var bottomNodes, j, len, ref, threadRoot, topNodes; + topNodes = []; + bottomNodes = []; + ref = Index.sortedNodes; + for (j = 0, len = ref.length; j < len; j++) { + threadRoot = ref[j]; + (match(Get.threadFromRoot(threadRoot)) ? topNodes : bottomNodes).push(threadRoot); + } + return Index.sortedNodes = topNodes.concat(bottomNodes); + }, + buildIndex: function() { + var i, nodes, page, post; + if (!Index.liveThreadData) { + return; + } + switch (Conf['Index Mode']) { + case 'all pages': + nodes = Index.sortedNodes; + break; + case 'catalog': + nodes = Index.buildCatalogViews(); + Index.sizeCatalogViews(nodes); + break; + default: + if (Index.followedThreadID != null) { + i = 0; + while (Index.followedThreadID !== Get.threadFromRoot(Index.sortedNodes[i]).ID) { + i++; + } + page = Math.floor(i / Index.threadsNumPerPage) + 1; + if (page !== Index.currentPage) { + Index.currentPage = page; + Index.pushState({ + page: page + }); + Index.setPage(); + } + } + nodes = Index.buildSinglePage(Index.currentPage); + } + delete Index.pageNum; + $.rmAll(Index.root); + $.rmAll(Header.hover); + if (Conf['Index Mode'] === 'catalog') { + return $.add(Index.root, nodes); + } else { + if (Conf['Show Replies']) { + Index.buildReplies(nodes); + } + Index.buildStructure(nodes); + if ((Index.followedThreadID != null) && (post = g.posts[g.BOARD + "." + Index.followedThreadID])) { + return Header.scrollTo(post.nodes.root); + } + } + }, + buildSinglePage: function(pageNum) { + var nodesPerPage, offset; + nodesPerPage = Index.threadsNumPerPage; + offset = nodesPerPage * (pageNum - 1); + return Index.sortedNodes.slice(offset, offset + nodesPerPage); + }, + buildStructure: function(nodes) { + var j, len, node, thumb; + for (j = 0, len = nodes.length; j < len; j++) { + node = nodes[j]; + if (thumb = $('img[data-src]', node)) { + thumb.src = thumb.dataset.src; + thumb.removeAttribute('data-src'); + } + $.add(Index.root, [node, $.el('hr')]); + } + if (doc.contains(Index.root)) { + $.event('PostsInserted'); + } + return ThreadHiding.onIndexBuild(nodes); + }, + clearSearch: function() { + Index.searchInput.value = ''; + Index.onSearchInput(); + return Index.searchInput.focus(); + }, + setupSearch: function() { + Index.searchInput.value = Index.search; + if (Index.search) { + return Index.searchInput.dataset.searching = 1; + } else { + return Index.searchInput.removeAttribute('data-searching'); + } + }, + onSearchInput: function() { + var search; + search = Index.searchInput.value.trim(); + if (search === Index.search) { + return; + } + Index.pushState({ + search: search, + replace: !!search === !!Index.search + }); + return Index.pageLoad(false); + }, + querySearch: function(query) { + var keywords; + if (!(keywords = query.toLowerCase().match(/\S+/g))) { + return; + } + return Index.sortedNodes.filter(function(threadRoot) { + return Index.searchMatch(Get.threadFromRoot(threadRoot), keywords); + }); + }, + searchMatch: function(thread, keywords) { + var file, info, j, k, key, keyword, len, len1, ref, ref1, text; + ref = thread.OP, info = ref.info, file = ref.file; + text = []; + ref1 = ['comment', 'subject', 'name', 'tripcode', 'email']; + for (j = 0, len = ref1.length; j < len; j++) { + key = ref1[j]; + if (key in info) { + text.push(info[key]); + } + } + if (file) { + text.push(file.name); + } + text = text.join(' ').toLowerCase(); + for (k = 0, len1 = keywords.length; k < len1; k++) { + keyword = keywords[k]; + if (-1 === text.indexOf(keyword)) { + return false; + } + } + return true; + } + }; + + return Index; + +}).call(this); + +Polyfill = (function() { + var Polyfill; + + Polyfill = { + init: function() { + return this.toBlob(); + }, + toBlob: function() { + if (HTMLCanvasElement.prototype.toBlob) { + return; + } + HTMLCanvasElement.prototype.toBlob = function(cb, type, encoderOptions) { + var data, i, j, l, ref, ui8a, url; + if (type == null) { + type = 'image/png'; + } + url = this.toDataURL(type, encoderOptions); + data = atob(url.slice(url.indexOf(',') + 1)); + l = data.length; + ui8a = new Uint8Array(l); + for (i = j = 0, ref = l; j < ref; i = j += 1) { + ui8a[i] = data.charCodeAt(i); + } + return cb(new Blob([ui8a], { + type: type + })); + }; + return $.globalEval("HTMLCanvasElement.prototype.toBlob = (" + HTMLCanvasElement.prototype.toBlob + ");"); + } + }; + + return Polyfill; + +}).call(this); + +Settings = (function() { + var Settings, + slice = [].slice, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + Settings = { + init: function() { + var add, link, settings; + link = $.el('a', { + className: 'settings-link fa fa-wrench', + textContent: 'Settings', + title: '4chan X Settings', + href: 'javascript:;' + }); + $.on(link, 'click', Settings.open); + Header.addShortcut(link); + add = this.addSection; + add('Main', this.main); + add('Filter', this.filter); + add('Sauce', this.sauce); + add('Advanced', this.advanced); + add('Keybinds', this.keybinds); + $.on(d, 'AddSettingsSection', Settings.addSection); + $.on(d, 'OpenSettings', function(e) { + return Settings.open(e.detail); + }); + if (Conf['Disable Native Extension']) { + if ($.hasStorage) { + settings = JSON.parse(localStorage.getItem('4chan-settings')) || {}; + if (settings.disableAll) { + return; + } + settings.disableAll = true; + return localStorage.setItem('4chan-settings', JSON.stringify(settings)); + } else { + return $.onExists(doc, 'body', function() { + return $.global(function() { + return window.Config.disableAll = true; + }); + }); + } + } + }, + open: function(openSection) { + var dialog, j, len, link, links, overlay, ref, section, sectionToOpen; + if (Settings.overlay) { + return; + } + $.event('CloseMenu'); + Settings.dialog = dialog = $.el('div', { + id: 'fourchanx-settings', + className: 'dialog' + }); + $.extend(dialog, { + innerHTML: "
    " + }); + Settings.overlay = overlay = $.el('div', { + id: 'overlay' + }); + $.on($('.export', dialog), 'click', Settings["export"]); + $.on($('.import', dialog), 'click', Settings["import"]); + $.on($('.reset', dialog), 'click', Settings.reset); + $.on($('input', dialog), 'change', Settings.onImport); + links = []; + ref = Settings.sections; + for (j = 0, len = ref.length; j < len; j++) { + section = ref[j]; + link = $.el('a', { + className: "tab-" + section.hyphenatedTitle, + textContent: section.title, + href: 'javascript:;' + }); + $.on(link, 'click', Settings.openSection.bind(section)); + links.push(link, $.tn(' | ')); + if (section.title === openSection) { + sectionToOpen = link; + } + } + links.pop(); + $.add($('.sections-list', dialog), links); + if (openSection !== 'none') { + (sectionToOpen ? sectionToOpen : links[0]).click(); + } + $.on($('.close', dialog), 'click', Settings.close); + $.on(overlay, 'click', Settings.close); + $.add(d.body, [overlay, dialog]); + return $.event('OpenSettings', null, dialog); + }, + close: function() { + var ref; + if (!Settings.dialog) { + return; + } + if ((ref = d.activeElement) != null) { + ref.blur(); + } + $.rm(Settings.overlay); + $.rm(Settings.dialog); + delete Settings.overlay; + return delete Settings.dialog; + }, + sections: [], + addSection: function(title, open) { + var hyphenatedTitle, ref; + if (typeof title !== 'string') { + ref = title.detail, title = ref.title, open = ref.open; + } + hyphenatedTitle = title.toLowerCase().replace(/\s+/g, '-'); + return Settings.sections.push({ + title: title, + hyphenatedTitle: hyphenatedTitle, + open: open + }); + }, + openSection: function() { + var section, selected; + if (selected = $('.tab-selected', Settings.dialog)) { + $.rmClass(selected, 'tab-selected'); + } + $.addClass($(".tab-" + this.hyphenatedTitle, Settings.dialog), 'tab-selected'); + section = $('section', Settings.dialog); + $.rmAll(section); + section.className = "section-" + this.hyphenatedTitle; + this.open(section, g); + section.scrollTop = 0; + return $.event('OpenSettings', null, section); + }, + warnings: { + localStorage: function(cb) { + var why; + if ($.cantSync) { + why = $.cantSet ? 'save your settings' : 'synchronize settings between tabs'; + return cb($.el('li', { + textContent: "4chan X needs local storage to " + why + ".\nEnable it on boards.4chan.org in your browser's privacy settings (may be listed as part of \"local data\" or \"cookies\")." + })); + } + }, + ads: function(cb) { + return $.onExists(doc, '.ad-cnt', function(ad) { + return $.onExists(ad, 'img', function() { + return cb($.el('li', { + innerHTML: "To protect yourself from malicious ads, you should block ads on 4chan." + })); + }); + }); + } + }, + main: function(section) { + var addWarning, arr, button, container, containers, description, div, fs, input, inputs, items, key, level, obj, ref, ref1, warning, warnings; + warnings = $.el('fieldset', { + hidden: true + }, { + innerHTML: "Warnings
      " + }); + addWarning = function(item) { + $.add($('ul', warnings), item); + return warnings.hidden = false; + }; + ref = Settings.warnings; + for (key in ref) { + warning = ref[key]; + warning(addWarning); + } + $.add(section, warnings); + items = {}; + inputs = {}; + ref1 = Config.main; + for (key in ref1) { + obj = ref1[key]; + fs = $.el('fieldset', { + innerHTML: "" + E(key) + "" + }); + containers = [fs]; + for (key in obj) { + arr = obj[key]; + description = arr[1]; + div = $.el('div', { + innerHTML: ": " + E(description) + "" + }); + if ($.engine !== 'gecko' && key === 'Remember QR Size') { + div.hidden = true; + } + input = $('input', div); + $.on(input, 'change', function() { + this.parentNode.parentNode.dataset.checked = this.checked; + return $.cb.checked.call(this); + }); + items[key] = Conf[key]; + inputs[key] = input; + level = arr[2] || 0; + if (containers.length <= level) { + container = $.el('div', { + className: 'suboption-list' + }); + $.add(containers[containers.length - 1].lastElementChild, container); + containers[level] = container; + } else if (containers.length > level + 1) { + containers.splice(level + 1, containers.length - (level + 1)); + } + $.add(containers[level], div); + } + $.add(section, fs); + } + $.get(items, function(items) { + var val; + for (key in items) { + val = items[key]; + inputs[key].checked = val; + inputs[key].parentNode.parentNode.dataset.checked = val; + } + }); + div = $.el('div', { + innerHTML: ": Clear manually-hidden threads and posts on all boards. Reload the page to apply." + }); + button = $('button', div); + $.get({ + hiddenThreads: {}, + hiddenPosts: {} + }, function(arg) { + var ID, board, hiddenNum, hiddenPosts, hiddenThreads, ref2, ref3, thread; + hiddenThreads = arg.hiddenThreads, hiddenPosts = arg.hiddenPosts; + hiddenNum = 0; + ref2 = hiddenThreads.boards; + for (ID in ref2) { + board = ref2[ID]; + hiddenNum += Object.keys(board).length; + } + ref3 = hiddenPosts.boards; + for (ID in ref3) { + board = ref3[ID]; + for (ID in board) { + thread = board[ID]; + hiddenNum += Object.keys(thread).length; + } + } + return button.textContent = "Hidden: " + hiddenNum; + }); + $.on(button, 'click', function() { + this.textContent = 'Hidden: 0'; + return $.get('hiddenThreads', {}, function(arg) { + var boardID, hiddenThreads; + hiddenThreads = arg.hiddenThreads; + if ($.hasStorage) { + for (boardID in hiddenThreads.boards) { + localStorage.removeItem("4chan-hide-t-" + boardID); + } + } + return $["delete"](['hiddenThreads', 'hiddenPosts']); + }); + }); + return $.after($('input[name="Stubs"]', section).parentNode.parentNode, div); + }, + "export": function() { + return $.get(Conf, function(Conf) { + return Settings.downloadExport({ + version: g.VERSION, + date: Date.now(), + Conf: Conf + }); + }); + }, + downloadExport: function(data) { + var a, p; + a = $.el('a', { + download: "4chan X v" + g.VERSION + "-" + data.date + ".json", + href: "data:application/json;base64," + (btoa(unescape(encodeURIComponent(JSON.stringify(data, null, 2))))) + }); + p = $('.imp-exp-result', Settings.dialog); + $.rmAll(p); + $.add(p, a); + return a.click(); + }, + "import": function() { + return $('input[type=file]', this.parentNode).click(); + }, + onImport: function() { + var file, output, reader; + if (!(file = this.files[0])) { + return; + } + this.value = null; + output = $('.imp-exp-result'); + if (!confirm('Your current settings will be entirely overwritten, are you sure?')) { + output.textContent = 'Import aborted.'; + return; + } + reader = new FileReader(); + reader.onload = function(e) { + var err; + try { + return Settings.loadSettings(JSON.parse(e.target.result), function(err) { + if (err) { + return output.textContent = 'Import failed due to an error.'; + } else if (confirm('Import successful. Reload now?')) { + return window.location.reload(); + } + }); + } catch (_error) { + err = _error; + output.textContent = 'Import failed due to an error.'; + return c.error(err.stack); + } + }; + return reader.readAsText(file); + }, + convertFrom: { + loadletter: function(data) { + var base, boardID, convertSettings, key, ref, ref1, threadData, threadID, threads, val; + convertSettings = function(data, map) { + var newKey, prevKey; + for (prevKey in map) { + newKey = map[prevKey]; + if (newKey) { + data.Conf[newKey] = data.Conf[prevKey]; + } + delete data.Conf[prevKey]; + } + return data; + }; + data = convertSettings(data, { + 'Disable 4chan\'s extension': 'Disable Native Extension', + 'Comment Auto-Expansion': '', + 'Remove Slug': '', + 'Check for Updates': '', + 'Recursive Filtering': 'Recursive Hiding', + 'Reply Hiding': 'Reply Hiding Buttons', + 'Thread Hiding': 'Thread Hiding Buttons', + 'Show Stubs': 'Stubs', + 'Image Auto-Gif': 'Replace GIF', + 'Reveal Spoilers': 'Reveal Spoiler Thumbnails', + 'Expand From Current': 'Expand from here', + 'Post in Title': 'Thread Excerpt', + 'Current Page': 'Page Count in Stats', + 'Current Page Position': '', + 'Alternative captcha': 'Use Recaptcha v1', + 'Auto Submit': 'Post on Captcha Completion', + 'Open Reply in New Tab': 'Open Post in New Tab', + 'Remember QR size': 'Remember QR Size', + 'Remember Subject': '', + 'Quote Inline': 'Quote Inlining', + 'Quote Preview': 'Quote Previewing', + 'Indicate OP quote': 'Mark OP Quotes', + 'Indicate You quote': 'Mark Quotes of You', + 'Indicate Cross-thread Quotes': 'Mark Cross-thread Quotes', + 'uniqueid': 'uniqueID', + 'mod': 'capcode', + 'email': '', + 'country': 'flag', + 'md5': 'MD5', + 'openEmptyQR': 'Open empty QR', + 'openQR': 'Open QR', + 'openOptions': 'Open settings', + 'close': 'Close', + 'spoiler': 'Spoiler tags', + 'sageru': 'Toggle sage', + 'code': 'Code tags', + 'submit': 'Submit QR', + 'watch': 'Watch', + 'update': 'Update', + 'unreadCountTo0': '', + 'expandAllImages': 'Expand images', + 'expandImage': 'Expand image', + 'zero': 'Front page', + 'nextPage': 'Next page', + 'previousPage': 'Previous page', + 'nextThread': 'Next thread', + 'previousThread': 'Previous thread', + 'expandThread': 'Expand thread', + 'openThreadTab': 'Open thread', + 'openThread': 'Open thread tab', + 'nextReply': 'Next reply', + 'previousReply': 'Previous reply', + 'hide': 'Hide', + 'Scrolling': 'Auto Scroll', + 'Verbose': '' + }); + data.Conf.sauces = data.Conf.sauces.replace(/\$\d/g, function(c) { + switch (c) { + case '$1': + return '%TURL'; + case '$2': + return '%URL'; + case '$3': + return '%MD5'; + case '$4': + return '%board'; + default: + return c; + } + }); + ref = Config.hotkeys; + for (key in ref) { + val = ref[key]; + if (key in data.Conf) { + data.Conf[key] = data.Conf[key].replace(/ctrl|alt|meta/g, function(s) { + return "" + (s[0].toUpperCase()) + s.slice(1); + }).replace(/(^|.+\+)[A-Z]$/g, function(s) { + return "Shift+" + s.slice(0, -1) + (s.slice(-1).toLowerCase()); + }); + } + } + if (data.WatchedThreads) { + data.Conf['watchedThreads'] = { + boards: {} + }; + ref1 = data.WatchedThreads; + for (boardID in ref1) { + threads = ref1[boardID]; + for (threadID in threads) { + threadData = threads[threadID]; + ((base = data.Conf['watchedThreads'].boards)[boardID] || (base[boardID] = {}))[threadID] = { + excerpt: threadData.textContent + }; + } + } + } + return data; + } + }, + upgrade: function(data, version) { + var boardID, changes, compareString, j, key, len, name, record, ref, ref1, ref2, ref3, ref4, ref5, rice, set, type, uids, value; + changes = {}; + set = function(key, value) { + return data[key] = changes[key] = value; + }; + compareString = version.replace(/\d+/g, function(x) { + return ('0000' + x).slice(-5); + }); + if (compareString < '00001.00011.00008.00000') { + if (data['Fixed Thread Watcher'] == null) { + set('Fixed Thread Watcher', (ref = data['Toggleable Thread Watcher']) != null ? ref : true); + } + if (data['Exempt Archives from Encryption'] == null) { + set('Exempt Archives from Encryption', (ref1 = data['Except Archives from Encryption']) != null ? ref1 : false); + } + } + if (compareString < '00001.00011.00010.00001') { + if (data['selectedArchives'] != null) { + uids = { + "Moe": 0, + "4plebs Archive": 3, + "Nyafuu Archive": 4, + "Love is Over": 5, + "Rebecca Black Tech": 8, + "warosu": 10, + "fgts": 15, + "not4plebs": 22, + "DesuStorage": 23, + "fireden.net": 24, + "disabled": null + }; + ref2 = data['selectedArchives']; + for (boardID in ref2) { + record = ref2[boardID]; + for (type in record) { + name = record[type]; + if (name in uids) { + record[type] = uids[name]; + } + } + } + set('selectedArchives', data['selectedArchives']); + } + } + if (compareString < '00001.00011.00016.00000') { + if ((rice = Config['usercss'].match(/\/\* Board title rice \*\/(?:\n.+)*/)[0])) { + if ((data['usercss'] != null) && data['usercss'].indexOf(rice) < 0) { + set('usercss', rice + '\n\n' + data['usercss']); + } + } + } + if (compareString < '00001.00011.00017.00000') { + ref3 = ['Persistent QR', 'Color User IDs', 'Fappe Tyme', 'Werk Tyme', 'Highlight Posts Quoting You', 'Highlight Own Posts']; + for (j = 0, len = ref3.length; j < len; j++) { + key = ref3[j]; + if (data[key] == null) { + set(key, key === 'Persistent QR'); + } + } + } + if (compareString < '00001.00011.00017.00006') { + if (data['sauces'] != null) { + set('sauces', data['sauces'].replace(/^(#?\s*)http:\/\/iqdb\.org\//mg, '$1//iqdb.org/')); + } + } + if (compareString < '00001.00011.00019.00003' && !Settings.overlay) { + $.queueTask(function() { + return Settings.warnings.ads(function(item) { + return new Notice('warning', slice.call(item.childNodes)); + }); + }); + } + if (compareString < '00001.00011.00020.00003') { + ref4 = { + 'Inline Cross-thread Quotes Only': false, + 'Pass Link': true + }; + for (key in ref4) { + value = ref4[key]; + if (data[key] == null) { + set(key, value); + } + } + } + if (compareString < '00001.00011.00021.00003') { + if (data['Remember Your Posts'] == null) { + set('Remember Your Posts', (ref5 = data['Mark Quotes of You']) != null ? ref5 : true); + } + } + if (compareString < '00001.00011.00022.00000') { + if (data['sauces'] != null) { + set('sauces', data['sauces'].replace(/^(#?\s*https:\/\/www\.google\.com\/searchbyimage\?image_url=%(?:IMG|URL))%3Fs\.jpg/mg, '$1')); + set('sauces', data['sauces'].replace(/^#?\s*https:\/\/www\.google\.com\/searchbyimage\?image_url=%(?:IMG|T?URL)(?=$|;)/mg, '$&&safe=off')); + } + } + if (compareString < '00001.00011.00022.00002') { + if ((data['Use Recaptcha v1 in Reports'] == null) && data['Use Recaptcha v1'] && !data['Use Recaptcha v2 in Reports']) { + set('Use Recaptcha v1 in Reports', true); + } + } + if (compareString < '00001.00011.00024.00000') { + if ((data['JSON Navigation'] != null) && (data['JSON Index'] == null)) { + set('JSON Index', data['JSON Navigation']); + } + } + if (compareString < '00001.00011.00026.00000') { + if ((data['Oekaki Links'] != null) && (data['Edit Link'] == null)) { + set('Edit Link', data['Oekaki Links']); + } + if (data['Inline Cross-thread Quotes Only'] == null) { + set('Inline Cross-thread Quotes Only', true); + } + } + if (compareString < '00001.00011.00030.00000') { + if (data['Quote Threading'] && (data['Thread Quotes'] == null)) { + set('Thread Quotes', true); + } + } + return changes; + }, + loadSettings: function(data, cb) { + if (data.version.split('.')[0] === '2') { + data = Settings.convertFrom.loadletter(data); + } else if (data.version !== g.VERSION) { + Settings.upgrade(data.Conf, data.version); + } + return $.clear(function(err) { + if (err) { + return cb(err); + } + return $.set(data.Conf, cb); + }); + }, + reset: function() { + if (confirm('Your current settings will be entirely wiped, are you sure?')) { + return $.clear(function(err) { + if (err) { + return $('.imp-exp-result').textContent = 'Import failed due to an error.'; + } else if (confirm('Reset successful. Reload now?')) { + return window.location.reload(); + } + }); + } + }, + filter: function(section) { + var select; + $.extend(section, { + innerHTML: "
      " + }); + select = $('select', section); + $.on(select, 'change', Settings.selectFilter); + return Settings.selectFilter.call(select); + }, + selectFilter: function() { + var div, name, ta; + div = this.nextElementSibling; + if ((name = this.value) !== 'guide') { + $.rmAll(div); + ta = $.el('textarea', { + name: name, + className: 'field', + spellcheck: false + }); + $.get(name, Conf[name], function(item) { + return ta.value = item[name]; + }); + $.on(ta, 'change', $.cb.value); + $.add(div, ta); + return; + } + $.extend(div, { + innerHTML: "
      Filter is disabled.

      Use regular expressions, one per line.
      Lines starting with a # will be ignored.
      For example, /weeaboo/i will filter posts containing the string \`weeaboo\`, case-insensitive.
      MD5 filtering uses exact string matching, not regular expressions.

        You can use these settings with each regular expression, separate them with semicolons:
      • Per boards, separate them with commas. It is global if not specified.
        For example: boards:a,jp;.
      • In case of a global rule, select boards to be excluded from the filter.
        For example: exclude:vg,v;.
      • Filter OPs only along with their threads (\`only\`), replies only (\`no\`), or both (\`yes\`, this is default).
        For example: op:only;, op:no; or op:yes;.
      • Overrule the \`Show Stubs\` setting if specified: create a stub (\`yes\`) or not (\`no\`).
        For example: stub:yes; or stub:no;.
      • Highlight instead of hiding. You can specify a class name to use with a userstyle.
        For example: highlight; or highlight:wallpaper;.
      • Highlighted OPs will have their threads put on top of the board index by default.
        For example: top:yes; or top:no;.

      Note: If you're using the native catalog rather than 4chan X's catalog, 4chan X's filters do not apply there.
      The native catalog has its own separate filter list.

      " + }); + return $('.warning', div).hidden = Conf['Filter']; + }, + sauce: function(section) { + var ta; + $.extend(section, { + innerHTML: "
      Sauce is disabled.
      Lines starting with a # will be ignored.
      You can specify a display text by appending ;text:[text] to the URL.
      You can specify the applicable boards by appending ;boards:[board1],[board2].
      You can specify the applicable file types by appending ;types:[extension1],[extension2].
      You can open links with scripts and popups disabled by appending ;sandbox.
        These parameters will be replaced by their corresponding values:
      • %TURL: Thumbnail URL.
      • %URL: Full image URL.
      • %IMG: Full image URL for GIF, JPG, and PNG; thumbnail URL for other types.
      • %MD5: MD5 hash in base64.
      • %sMD5: MD5 hash in base64 using - and _.
      • %hMD5: MD5 hash in hexadecimal.
      • %name: Original file name.
      • %board: Current board.
      • %%, %semi: Literal % and ;.
      " + }); + $('.warning', section).hidden = Conf['Sauce']; + ta = $('textarea', section); + $.get('sauces', Conf['sauces'], function(item) { + return ta.value = item['sauces']; + }); + return $.on(ta, 'change', $.cb.value); + }, + advanced: function(section) { + var applyCSS, archBoards, archive, boardID, boardOptions, boardSelect, boards, customCSS, files, i, input, inputs, interval, item, items, j, k, l, len, len1, len2, len3, len4, len5, len6, m, n, name, o, q, r, ref, ref1, ref2, ref3, ref4, ref5, ref6, row, rows, software, ta, table, uid, warning, withCredentials; + $.extend(section, { + innerHTML: "
      Archiver
      404 Redirect is disabled.
      Thread redirectionPost fetchingFile redirection
      Captcha Language
      Choose from list of language codes. Leave blank to autoselect.
      Custom Board Navigation
      New lines will be converted into spaces.

      In the following examples for /g/, g can be changed to a different board ID (a, b, etc...), the current board (current), or the Twitter link (@).
      Board link: g
      Archive link: g-archive
      Internal archive link: g-expired
      Title link: g-title
      Board link (Replace with title when on that board): g-replace
      Full text link: g-full
      Custom text link: g-text:"Install Gentoo"
      Index-only link: g-index
      Catalog-only link: g-catalog
      Index mode: g-mode:"infinite scrolling"
      Index sort: g-sort:"creation date"
      External link: external-text:"Google","http://www.google.com"
      Combinations are possible: g-index-text:"Technology Index"
      Full board list toggle: toggle-all

      [ toggle-all ] [current-title] [g-title / a-title / jp-title] [x / wsg / h] [t-text:"Piracy"]
      will give you
      [ + ] [Technology] [Technology / Anime & Manga / Otaku Culture] [x / wsg / h] [Piracy]
      if you are on /g/.
      Time Formatting is disabled.
      :
      Day: %a, %A, %d, %e
      Month: %m, %b, %B
      Year: %y, %Y
      Hour: %k, %H, %l, %I, %p, %P
      Minute: %M
      Second: %S
      Literal %: %%
      Quote Backlinks formatting is disabled.
      :
      File Info Formatting is disabled.
      :
      Link: %l (truncated), %L (untruncated), %T (4chan filename)
      Filename: %n (truncated), %N (untruncated), %t (4chan filename)
      Spoiler indicator: %p
      Size: %B (Bytes), %K (KB), %M (MB), %s (4chan default)
      Resolution: %r (Displays 'PDF' for PDF files)
      Tag: %g
      Literal %: %%
      Quick Reply Personas

      One item per line.
      Items will be added in the relevant input's auto-completion list.
      Password items will always be used, since there is no password input.
      Lines starting with a # will be ignored.

        You can use these settings with each item, separate them with semicolons:
      • Possible items are: name, options (or equivalently email), subject and password.
      • Wrap values of items with quotes, like this: options:"sage".
      • Force values as defaults with the always keyword, for example: options:"sage";always.
      • Select specific boards for an item, separated with commas, for example: options:"sage";boards:jp;always.
      Unread Favicon is disabled.
      Thread Updater is disabled.
      Interval: seconds
      Custom Cooldown Time
      Seconds:
      " + }); + ref = $$('.warning', section); + for (j = 0, len = ref.length; j < len; j++) { + warning = ref[j]; + warning.hidden = Conf[warning.dataset.feature]; + } + items = {}; + inputs = {}; + ref1 = ['captchaLanguage', 'boardnav', 'time', 'backlink', 'fileInfo', 'favicon', 'usercss', 'customCooldown']; + for (k = 0, len1 = ref1.length; k < len1; k++) { + name = ref1[k]; + input = $("[name='" + name + "']", section); + items[name] = Conf[name]; + inputs[name] = input; + if (name === 'usercss') { + $.on(input, 'change', $.cb.value); + } else if (name === 'favicon') { + $.on(input, 'change', $.cb.value); + $.on(input, 'change', Settings[name]); + } else { + $.on(input, 'input', $.cb.value); + if (name in Settings) { + $.on(input, 'input', Settings[name]); + } + } + } + ta = $('.personafield', section); + $.get('QR.personas', Conf['QR.personas'], function(item) { + return ta.value = item['QR.personas']; + }); + $.on(ta, 'change', $.cb.value); + $.get(items, function(items) { + var key, val; + for (key in items) { + val = items[key]; + input = inputs[key]; + input.value = val; + if (key in Settings && key !== 'usercss') { + Settings[key].call(input); + } + } + }); + interval = $('input[name="Interval"]', section); + customCSS = $('input[name="Custom CSS"]', section); + applyCSS = $('#apply-css', section); + interval.value = Conf['Interval']; + customCSS.checked = Conf['Custom CSS']; + inputs['usercss'].disabled = !Conf['Custom CSS']; + applyCSS.disabled = !Conf['Custom CSS']; + $.on(interval, 'change', ThreadUpdater.cb.interval); + $.on(customCSS, 'change', Settings.togglecss); + $.on(applyCSS, 'click', Settings.usercss); + archBoards = {}; + ref2 = Redirect.archives; + for (l = 0, len2 = ref2.length; l < len2; l++) { + ref3 = ref2[l], uid = ref3.uid, name = ref3.name, boards = ref3.boards, files = ref3.files, software = ref3.software, withCredentials = ref3.withCredentials; + for (m = 0, len3 = boards.length; m < len3; m++) { + boardID = boards[m]; + o = archBoards[boardID] || (archBoards[boardID] = { + thread: [[], []], + post: [[], []], + file: [[], []] + }); + i = +(!!withCredentials); + archive = [uid != null ? uid : name, name]; + o.thread[i].push(archive); + if (software === 'foolfuuka') { + o.post[i].push(archive); + } + if (indexOf.call(files, boardID) >= 0) { + o.file[i].push(archive); + } + } + } + for (boardID in archBoards) { + o = archBoards[boardID]; + ref4 = ['thread', 'post', 'file']; + for (n = 0, len4 = ref4.length; n < len4; n++) { + item = ref4[n]; + i = o[item][0].length ? 1 : 0; + o[item][i].push([null, 'disabled']); + o[item] = o[item][0].concat(o[item][1]); + } + } + rows = []; + boardOptions = []; + ref5 = Object.keys(archBoards).sort(); + for (q = 0, len5 = ref5.length; q < len5; q++) { + boardID = ref5[q]; + row = $.el('tr', { + className: "board-" + boardID + }); + row.hidden = boardID !== g.BOARD.ID; + boardOptions.push($.el('option', { + textContent: "/" + boardID + "/", + value: "board-" + boardID, + selected: boardID === g.BOARD.ID + })); + o = archBoards[boardID]; + ref6 = ['thread', 'post', 'file']; + for (r = 0, len6 = ref6.length; r < len6; r++) { + item = ref6[r]; + $.add(row, Settings.addArchiveCell(boardID, o, item)); + } + rows.push(row); + } + if (!(g.BOARD.ID in archBoards)) { + rows[0].hidden = false; + } + $.add($('tbody', section), rows); + boardSelect = $('#archive-board-select', section); + $.add(boardSelect, boardOptions); + table = $('#archive-table', section); + $.on(boardSelect, 'change', function() { + $('tbody > :not([hidden])', table).hidden = true; + return $("tbody > ." + this.value, table).hidden = false; + }); + $.get('selectedArchives', Conf['selectedArchives'], function(arg) { + var data, id, select, selectedArchives, type; + selectedArchives = arg.selectedArchives; + for (boardID in selectedArchives) { + data = selectedArchives[boardID]; + for (type in data) { + id = data[type]; + if (select = $("select[data-boardid='" + boardID + "'][data-type='" + type + "']", section)) { + select.value = JSON.stringify(id); + } + } + } + }); + }, + addArchiveCell: function(boardID, data, type) { + var archive, i, length, options, select, td; + length = data[type].length; + td = $.el('td', { + className: 'archive-cell' + }); + if (!length) { + td.textContent = '--'; + return td; + } + options = []; + i = 0; + while (i < length) { + archive = data[type][i++]; + options.push($.el('option', { + value: JSON.stringify(archive[0]), + textContent: archive[1] + })); + } + $.extend(td, { + innerHTML: "" + }); + select = td.firstElementChild; + if (!(select.disabled = length === 1)) { + select.setAttribute('data-boardid', boardID); + select.setAttribute('data-type', type); + $.on(select, 'change', Settings.saveSelectedArchive); + } + $.add(select, options); + return td; + }, + saveSelectedArchive: function() { + return $.get('selectedArchives', Conf['selectedArchives'], (function(_this) { + return function(arg) { + var name1, selectedArchives; + selectedArchives = arg.selectedArchives; + (selectedArchives[name1 = _this.dataset.boardid] || (selectedArchives[name1] = {}))[_this.dataset.type] = JSON.parse(_this.value); + return $.set('selectedArchives', selectedArchives); + }; + })(this)); + }, + boardnav: function() { + return Header.generateBoardList(this.value); + }, + time: function() { + return this.nextElementSibling.textContent = Time.format(this.value, new Date()); + }, + backlink: function() { + return this.nextElementSibling.textContent = this.value.replace(/%(?:id|%)/g, function(x) { + return { + '%id': '123456789', + '%%': '%' + }[x]; + }); + }, + fileInfo: function() { + var data; + data = { + isReply: true, + file: { + url: '//i.4cdn.org/g/1334437723720.jpg', + name: 'd9bb2efc98dd0df141a94399ff5880b7.jpg', + size: '276 KB', + sizeInBytes: 276 * 1024, + dimensions: '1280x720', + isImage: true, + isVideo: false, + isSpoiler: true, + tag: 'Loop' + } + }; + return FileInfo.format(this.value, data, this.nextElementSibling); + }, + favicon: function() { + var img; + Favicon["switch"](); + if (g.VIEW === 'thread' && Conf['Unread Favicon']) { + Unread.update(); + } + img = this.nextElementSibling.children; + img[0].src = Favicon["default"]; + img[1].src = Favicon.unreadSFW; + img[2].src = Favicon.unreadNSFW; + return img[3].src = Favicon.unreadDead; + }, + togglecss: function() { + if ($('textarea[name=usercss]', $.x('ancestor::fieldset[1]', this)).disabled = $.id('apply-css').disabled = !this.checked) { + CustomCSS.rmStyle(); + } else { + CustomCSS.addStyle(); + } + return $.cb.checked.call(this); + }, + usercss: function() { + return CustomCSS.update(); + }, + keybinds: function(section) { + var arr, input, inputs, items, key, ref, tbody, tr; + $.extend(section, { + innerHTML: "
      Keybinds are disabled.
      Allowed keys: a-z, 0-9, Ctrl, Shift, Alt, Meta, Enter, Esc, Up, Down, Right, Left.
      Press Backspace to disable a keybind.
      ActionsKeybinds
      " + }); + $('.warning', section).hidden = Conf['Keybinds']; + tbody = $('tbody', section); + items = {}; + inputs = {}; + ref = Config.hotkeys; + for (key in ref) { + arr = ref[key]; + tr = $.el('tr', { + innerHTML: "" + E(arr[1]) + "" + }); + input = $('input', tr); + input.name = key; + input.spellcheck = false; + items[key] = Conf[key]; + inputs[key] = input; + $.on(input, 'keydown', Settings.keybind); + $.add(tbody, tr); + } + return $.get(items, function(items) { + var val; + for (key in items) { + val = items[key]; + inputs[key].value = val; + } + }); + }, + keybind: function(e) { + var key; + if (e.keyCode === 9) { + return; + } + e.preventDefault(); + e.stopPropagation(); + if ((key = Keybinds.keyCode(e)) == null) { + return; + } + this.value = key; + return $.cb.value.call(this); + } + }; + + return Settings; + +}).call(this); + +UI = (function() { + var Menu, checkbox, dialog, drag, dragend, dragstart, hover, hoverend, hoverstart, touchend, touchmove, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + slice = [].slice; + + dialog = function(id, position, properties) { + var child, el, i, len, move, ref; + el = $.el('div', { + className: 'dialog', + id: id + }); + $.extend(el, properties); + el.style.cssText = position; + $.get(id + ".position", position, function(item) { + return el.style.cssText = item[id + ".position"]; + }); + move = $('.move', el); + $.on(move, 'touchstart mousedown', dragstart); + ref = move.children; + for (i = 0, len = ref.length; i < len; i++) { + child = ref[i]; + if (!child.tagName) { + continue; + } + $.on(child, 'touchstart mousedown', function(e) { + return e.stopPropagation(); + }); + } + return el; + }; + + Menu = (function() { + var currentMenu, lastToggledButton; + + currentMenu = null; + + lastToggledButton = null; + + function Menu(type) { + this.type = type; + this.addEntry = bind(this.addEntry, this); + this.onFocus = bind(this.onFocus, this); + this.keybinds = bind(this.keybinds, this); + this.close = bind(this.close, this); + this.setPosition = bind(this.setPosition, this); + $.on(d, 'AddMenuEntry', (function(_this) { + return function(arg) { + var detail; + detail = arg.detail; + if (detail.type !== _this.type) { + return; + } + delete detail.open; + return _this.addEntry(detail); + }; + })(this)); + this.entries = []; + } + + Menu.prototype.makeMenu = function() { + var menu; + menu = $.el('div', { + className: 'dialog', + id: 'menu', + tabIndex: 0 + }); + $.on(menu, 'click', function(e) { + return e.stopPropagation(); + }); + $.on(menu, 'keydown', this.keybinds); + return menu; + }; + + Menu.prototype.toggle = function(e, button, data) { + var previousButton; + e.preventDefault(); + e.stopPropagation(); + if (currentMenu) { + previousButton = lastToggledButton; + currentMenu.close(); + if (previousButton === button) { + return; + } + } + if (!this.entries.length) { + return; + } + return this.open(button, data); + }; + + Menu.prototype.open = function(button, data) { + var entry, i, len, menu, ref; + menu = this.menu = this.makeMenu(); + currentMenu = this; + lastToggledButton = button; + this.entries.sort(function(first, second) { + return first.order - second.order; + }); + ref = this.entries; + for (i = 0, len = ref.length; i < len; i++) { + entry = ref[i]; + this.insertEntry(entry, menu, data); + } + $.addClass(lastToggledButton, 'active'); + $.on(d, 'click CloseMenu', this.close); + $.on(d, 'scroll', this.setPosition); + $.on(window, 'resize', this.setPosition); + $.add(button, menu); + this.setPosition(); + entry = $('.entry', menu); + this.focus(entry); + return menu.focus(); + }; + + Menu.prototype.setPosition = function() { + var bLeft, bRect, bTop, bottom, cHeight, cWidth, left, mRect, ref, ref1, right, top; + mRect = this.menu.getBoundingClientRect(); + bRect = lastToggledButton.getBoundingClientRect(); + bTop = window.scrollY + bRect.top; + bLeft = window.scrollX + bRect.left; + cHeight = doc.clientHeight; + cWidth = doc.clientWidth; + ref = bRect.top + bRect.height + mRect.height < cHeight ? [bRect.bottom + "px", ''] : ['', (cHeight - bRect.top) + "px"], top = ref[0], bottom = ref[1]; + ref1 = bRect.left + mRect.width < cWidth ? [bRect.left + "px", ''] : ['', (cWidth - bRect.right) + "px"], left = ref1[0], right = ref1[1]; + $.extend(this.menu.style, { + top: top, + right: right, + bottom: bottom, + left: left + }); + return this.menu.classList.toggle('left', right); + }; + + Menu.prototype.insertEntry = function(entry, parent, data) { + var err, i, len, ref, subEntry, submenu; + if (typeof entry.open === 'function') { + try { + if (!entry.open(data)) { + return; + } + } catch (_error) { + err = _error; + Main.handleErrors({ + message: "Error in building the " + this.type + " menu.", + error: err + }); + return; + } + } + $.add(parent, entry.el); + if (!entry.subEntries) { + return; + } + if (submenu = $('.submenu', entry.el)) { + $.rm(submenu); + } + submenu = $.el('div', { + className: 'dialog submenu' + }); + ref = entry.subEntries; + for (i = 0, len = ref.length; i < len; i++) { + subEntry = ref[i]; + this.insertEntry(subEntry, submenu, data); + } + $.add(entry.el, submenu); + }; + + Menu.prototype.close = function() { + $.rm(this.menu); + delete this.menu; + $.rmClass(lastToggledButton, 'active'); + currentMenu = null; + lastToggledButton = null; + $.off(d, 'click scroll CloseMenu', this.close); + $.off(d, 'scroll', this.setPosition); + return $.off(window, 'resize', this.setPosition); + }; + + Menu.prototype.findNextEntry = function(entry, direction) { + var entries; + entries = slice.call(entry.parentNode.children); + entries.sort(function(first, second) { + return first.style.order - second.style.order; + }); + return entries[entries.indexOf(entry) + direction]; + }; + + Menu.prototype.keybinds = function(e) { + var entry, next, nextPrev, subEntry, submenu; + entry = $('.focused', this.menu); + while (subEntry = $('.focused', entry)) { + entry = subEntry; + } + switch (e.keyCode) { + case 27: + lastToggledButton.focus(); + this.close(); + break; + case 13: + case 32: + entry.click(); + break; + case 38: + if (next = this.findNextEntry(entry, -1)) { + this.focus(next); + } + break; + case 40: + if (next = this.findNextEntry(entry, +1)) { + this.focus(next); + } + break; + case 39: + if ((submenu = $('.submenu', entry)) && (next = submenu.firstElementChild)) { + while (nextPrev = this.findNextEntry(next, -1)) { + next = nextPrev; + } + this.focus(next); + } + break; + case 37: + if (next = $.x('parent::*[contains(@class,"submenu")]/parent::*', entry)) { + this.focus(next); + } + break; + default: + return; + } + e.preventDefault(); + return e.stopPropagation(); + }; + + Menu.prototype.onFocus = function(e) { + e.stopPropagation(); + return this.focus(e.target); + }; + + Menu.prototype.focus = function(entry) { + var bottom, cHeight, cWidth, eRect, focused, i, left, len, ref, ref1, ref2, right, sRect, style, submenu, top; + while (focused = $.x('parent::*/child::*[contains(@class,"focused")]', entry)) { + $.rmClass(focused, 'focused'); + } + ref = $$('.focused', entry); + for (i = 0, len = ref.length; i < len; i++) { + focused = ref[i]; + $.rmClass(focused, 'focused'); + } + $.addClass(entry, 'focused'); + if (!(submenu = $('.submenu', entry))) { + return; + } + sRect = submenu.getBoundingClientRect(); + eRect = entry.getBoundingClientRect(); + cHeight = doc.clientHeight; + cWidth = doc.clientWidth; + ref1 = eRect.top + sRect.height < cHeight ? ['0px', 'auto'] : ['auto', '0px'], top = ref1[0], bottom = ref1[1]; + ref2 = eRect.right + sRect.width < cWidth - 150 ? ['100%', 'auto'] : ['auto', '100%'], left = ref2[0], right = ref2[1]; + style = submenu.style; + style.top = top; + style.bottom = bottom; + style.left = left; + return style.right = right; + }; + + Menu.prototype.addEntry = function(entry) { + this.parseEntry(entry); + return this.entries.push(entry); + }; + + Menu.prototype.parseEntry = function(entry) { + var el, i, len, subEntries, subEntry; + el = entry.el, subEntries = entry.subEntries; + $.addClass(el, 'entry'); + $.on(el, 'focus mouseover', this.onFocus); + el.style.order = entry.order || 100; + if (!subEntries) { + return; + } + $.addClass(el, 'has-submenu'); + for (i = 0, len = subEntries.length; i < len; i++) { + subEntry = subEntries[i]; + this.parseEntry(subEntry); + } + }; + + return Menu; + + })(); + + dragstart = function(e) { + var el, isTouching, o, rect, ref, screenHeight, screenWidth; + if (e.type === 'mousedown' && e.button !== 0) { + return; + } + e.preventDefault(); + if (isTouching = e.type === 'touchstart') { + e = e.changedTouches[e.changedTouches.length - 1]; + } + el = $.x('ancestor::div[contains(@class,"dialog")][1]', this); + rect = el.getBoundingClientRect(); + screenHeight = doc.clientHeight; + screenWidth = doc.clientWidth; + o = { + id: el.id, + style: el.style, + dx: e.clientX - rect.left, + dy: e.clientY - rect.top, + height: screenHeight - rect.height, + width: screenWidth - rect.width, + screenHeight: screenHeight, + screenWidth: screenWidth, + isTouching: isTouching + }; + ref = Conf['Header auto-hide'] || !Conf['Fixed Header'] ? [0, 0] : Conf['Bottom Header'] ? [0, Header.bar.getBoundingClientRect().height] : [Header.bar.getBoundingClientRect().height, 0], o.topBorder = ref[0], o.bottomBorder = ref[1]; + if (isTouching) { + o.identifier = e.identifier; + o.move = touchmove.bind(o); + o.up = touchend.bind(o); + $.on(d, 'touchmove', o.move); + return $.on(d, 'touchend touchcancel', o.up); + } else { + o.move = drag.bind(o); + o.up = dragend.bind(o); + $.on(d, 'mousemove', o.move); + return $.on(d, 'mouseup', o.up); + } + }; + + touchmove = function(e) { + var i, len, ref, touch; + ref = e.changedTouches; + for (i = 0, len = ref.length; i < len; i++) { + touch = ref[i]; + if (touch.identifier === this.identifier) { + drag.call(this, touch); + return; + } + } + }; + + drag = function(e) { + var bottom, clientX, clientY, left, right, style, top; + clientX = e.clientX, clientY = e.clientY; + left = clientX - this.dx; + left = left < 10 ? 0 : this.width - left < 10 ? null : left / this.screenWidth * 100 + '%'; + top = clientY - this.dy; + top = top < (10 + this.topBorder) ? this.topBorder + 'px' : this.height - top < (10 + this.bottomBorder) ? null : top / this.screenHeight * 100 + '%'; + right = left === null ? 0 : null; + bottom = top === null ? this.bottomBorder + 'px' : null; + style = this.style; + style.left = left; + style.right = right; + style.top = top; + return style.bottom = bottom; + }; + + touchend = function(e) { + var i, len, ref, touch; + ref = e.changedTouches; + for (i = 0, len = ref.length; i < len; i++) { + touch = ref[i]; + if (touch.identifier === this.identifier) { + dragend.call(this); + return; + } + } + }; + + dragend = function() { + if (this.isTouching) { + $.off(d, 'touchmove', this.move); + $.off(d, 'touchend touchcancel', this.up); + } else { + $.off(d, 'mousemove', this.move); + $.off(d, 'mouseup', this.up); + } + return $.set(this.id + ".position", this.style.cssText); + }; + + hoverstart = function(arg) { + var cb, el, endEvents, height, latestEvent, noRemove, o, ref, root; + root = arg.root, el = arg.el, latestEvent = arg.latestEvent, endEvents = arg.endEvents, height = arg.height, cb = arg.cb, noRemove = arg.noRemove; + o = { + root: root, + el: el, + style: el.style, + isImage: (ref = el.nodeName) === 'IMG' || ref === 'VIDEO', + cb: cb, + endEvents: endEvents, + latestEvent: latestEvent, + clientHeight: doc.clientHeight, + clientWidth: doc.clientWidth, + height: height, + noRemove: noRemove + }; + o.hover = hover.bind(o); + o.hoverend = hoverend.bind(o); + o.hover(o.latestEvent); + new MutationObserver(function() { + if (el.parentNode) { + return o.hover(o.latestEvent); + } + }).observe(el, { + childList: true + }); + $.on(root, endEvents, o.hoverend); + if ($.x('ancestor::div[contains(@class,"inline")][1]', root)) { + $.on(d, 'keydown', o.hoverend); + } + $.on(root, 'mousemove', o.hover); + o.workaround = function(e) { + if (!root.contains(e.target)) { + return o.hoverend(e); + } + }; + return $.on(doc, 'mousemove', o.workaround); + }; + + hoverstart.padding = 25; + + hover = function(e) { + var clientX, clientY, height, left, ref, right, style, threshold, top; + this.latestEvent = e; + height = (this.height || this.el.offsetHeight) + hoverstart.padding; + clientX = e.clientX, clientY = e.clientY; + top = this.isImage ? Math.max(0, clientY * (this.clientHeight - height) / this.clientHeight) : Math.max(0, Math.min(this.clientHeight - height, clientY - 120)); + threshold = this.clientWidth / 2; + if (!this.isImage) { + threshold = Math.max(threshold, this.clientWidth - 400); + } + ref = clientX <= threshold ? [clientX + 45 + 'px', null] : [null, this.clientWidth - clientX + 45 + 'px'], left = ref[0], right = ref[1]; + style = this.style; + style.top = top + 'px'; + style.left = left; + return style.right = right; + }; + + hoverend = function(e) { + if (e.type === 'keydown' && e.keyCode !== 13 || e.target.nodeName === "TEXTAREA") { + return; + } + if (!this.noRemove) { + $.rm(this.el); + } + $.off(this.root, this.endEvents, this.hoverend); + $.off(d, 'keydown', this.hoverend); + $.off(this.root, 'mousemove', this.hover); + $.off(doc, 'mousemove', this.workaround); + if (this.cb) { + return this.cb.call(this); + } + }; + + checkbox = function(name, text, checked) { + var input, label; + if (checked == null) { + checked = Conf[name]; + } + label = $.el('label'); + input = $.el('input', { + type: 'checkbox', + name: name, + checked: checked + }); + $.add(label, [input, $.tn(" " + text)]); + return label; + }; + + return { + dialog: dialog, + Menu: Menu, + hover: hoverstart, + checkbox: checkbox + }; + +}).call(this); + +FappeTyme = (function() { + var FappeTyme; + + FappeTyme = { + init: function() { + var el, i, lc, len, ref, ref1, type; + if (!((Conf['Fappe Tyme'] || Conf['Werk Tyme']) && ((ref = g.VIEW) === 'index' || ref === 'thread'))) { + return; + } + this.nodes = {}; + this.enabled = { + fappe: false, + werk: Conf['werk'] + }; + ref1 = ["Fappe", "Werk"]; + for (i = 0, len = ref1.length; i < len; i++) { + type = ref1[i]; + if (!Conf[type + " Tyme"]) { + continue; + } + lc = type.toLowerCase(); + el = UI.checkbox(lc, type + " Tyme", false); + el.title = type + " Tyme"; + this.nodes[lc] = el.firstElementChild; + if (Conf[lc]) { + this.set(lc, true); + } + $.on(this.nodes[lc], 'change', this.toggle.bind(this, lc)); + Header.menu.addEntry({ + el: el, + order: 97 + }); + } + if (Conf['Werk Tyme']) { + $.sync('werk', this.set.bind(this, 'werk')); + } + Callbacks.Post.push({ + name: 'Fappe Tyme', + cb: this.node + }); + return Callbacks.CatalogThread.push({ + name: 'Werk Tyme', + cb: this.catalogNode + }); + }, + node: function() { + return this.nodes.root.classList.toggle('noFile', !this.file); + }, + catalogNode: function() { + var file, filename; + file = this.thread.OP.file; + if (!file) { + return; + } + filename = $.el('div', { + textContent: file.name, + className: 'werkTyme-filename' + }); + return $.add(this.nodes.thumb.parentNode, filename); + }, + set: function(type, enabled) { + this.enabled[type] = this.nodes[type].checked = enabled; + return $[(enabled ? 'add' : 'rm') + "Class"](doc, type + "Tyme"); + }, + toggle: function(type) { + this.set(type, !this.enabled[type]); + if (type === 'werk') { + return $.cb.checked.call(this.nodes[type]); + } + } + }; + + return FappeTyme; + +}).call(this); + +Gallery = (function() { + var Gallery; + + Gallery = { + init: function() { + var el, ref; + if (!(this.enabled = Conf['Gallery'] && ((ref = g.VIEW) === 'index' || ref === 'thread') && g.BOARD.ID !== 'f')) { + return; + } + this.delay = Conf['Slide Delay']; + el = $.el('a', { + href: 'javascript:;', + id: 'appchan-gal', + title: 'Gallery', + className: 'fa fa-picture-o', + textContent: 'Gallery' + }); + $.on(el, 'click', this.cb.toggle); + Header.addShortcut(el); + return Callbacks.Post.push({ + name: 'Gallery', + cb: this.node + }); + }, + node: function() { + var ref; + if (!((ref = this.file) != null ? ref.thumb : void 0)) { + return; + } + if (Gallery.nodes) { + Gallery.generateThumb(this); + Gallery.nodes.total.textContent = Gallery.images.length; + } + if (!Conf['Image Expansion']) { + return $.on(this.file.thumb.parentNode, 'click', Gallery.cb.image); + } + }, + build: function(image) { + var candidate, cb, dialog, entry, file, i, j, key, len, len1, menuButton, nodes, post, ref, ref1, ref2, ref3, thumb, value; + cb = Gallery.cb; + if (Conf['Fullscreen Gallery']) { + $.one(d, 'fullscreenchange mozfullscreenchange webkitfullscreenchange', function() { + return $.on(d, 'fullscreenchange mozfullscreenchange webkitfullscreenchange', cb.close); + }); + if (typeof doc.mozRequestFullScreen === "function") { + doc.mozRequestFullScreen(); + } + if (typeof doc.webkitRequestFullScreen === "function") { + doc.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT); + } + } + Gallery.images = []; + nodes = Gallery.nodes = {}; + Gallery.fullIDs = {}; + Gallery.slideshow = false; + nodes.el = dialog = $.el('div', { + id: 'a-gallery' + }); + $.extend(dialog, { + innerHTML: "
      " + }); + ref = { + buttons: '.gal-buttons', + frame: '.gal-image', + name: '.gal-name', + count: '.count', + total: '.total', + thumbs: '.gal-thumbnails', + next: '.gal-image a', + current: '.gal-image img' + }; + for (key in ref) { + value = ref[key]; + nodes[key] = $(value, dialog); + } + menuButton = $('.menu-button', dialog); + nodes.menu = new UI.Menu('gallery'); + $.on(nodes.frame, 'click', cb.blank); + if (Conf['Mouse Wheel Volume']) { + $.on(nodes.frame, 'wheel', Volume.wheel); + } + $.on(nodes.next, 'click', cb.click); + $.on(nodes.name, 'click', ImageCommon.download); + $.on($('.gal-prev', dialog), 'click', cb.prev); + $.on($('.gal-next', dialog), 'click', cb.next); + $.on($('.gal-start', dialog), 'click', cb.start); + $.on($('.gal-stop', dialog), 'click', cb.stop); + $.on($('.gal-close', dialog), 'click', cb.close); + $.on(menuButton, 'click', function(e) { + return nodes.menu.toggle(e, this, g); + }); + ref1 = Gallery.menu.createSubEntries(); + for (i = 0, len = ref1.length; i < len; i++) { + entry = ref1[i]; + entry.order = 0; + nodes.menu.addEntry(entry); + } + $.on(d, 'keydown', cb.keybinds); + if (Conf['Keybinds']) { + $.off(d, 'keydown', Keybinds.keydown); + } + $.on(window, 'resize', Gallery.cb.setHeight); + ref2 = $$('.post .file'); + for (j = 0, len1 = ref2.length; j < len1; j++) { + file = ref2[j]; + post = Get.postFromNode(file); + if (!((ref3 = post.file) != null ? ref3.thumb : void 0)) { + continue; + } + Gallery.generateThumb(post); + if (!image && Gallery.fullIDs[post.fullID]) { + candidate = post.file.thumb.parentNode; + if (Header.getTopOf(candidate) + candidate.getBoundingClientRect().height >= 0) { + image = candidate; + } + } + } + $.addClass(doc, 'gallery-open'); + $.add(d.body, dialog); + nodes.thumbs.scrollTop = 0; + nodes.current.parentElement.scrollTop = 0; + if (image) { + thumb = $("[href='" + image.href + "']", nodes.thumbs); + } + thumb || (thumb = Gallery.images[Gallery.images.length - 1]); + if (thumb) { + Gallery.open(thumb); + } + doc.style.overflow = 'hidden'; + return nodes.total.textContent = Gallery.images.length; + }, + generateThumb: function(post) { + var thumb, thumbImg; + if (post.isClone || post.isHidden) { + return; + } + if (!(post.file && post.file.thumb && (post.file.isImage || post.file.isVideo || Conf['PDF in Gallery']))) { + return; + } + if (Gallery.fullIDs[post.fullID]) { + return; + } + Gallery.fullIDs[post.fullID] = true; + thumb = $.el('a', { + className: 'gal-thumb', + href: post.file.url, + target: '_blank', + title: post.file.name + }); + thumb.dataset.id = Gallery.images.length; + thumb.dataset.post = post.fullID; + thumbImg = post.file.thumb.cloneNode(false); + thumbImg.style.cssText = ''; + $.add(thumb, thumbImg); + $.on(thumb, 'click', Gallery.cb.open); + Gallery.images.push(thumb); + return $.add(Gallery.nodes.thumbs, thumb); + }, + load: function(thumb, errorCB) { + var elType, ext, file; + ext = thumb.href.match(/\w*$/); + elType = { + 'webm': 'video', + 'pdf': 'iframe' + }[ext] || 'img'; + file = $.el(elType, { + title: thumb.title + }); + $.extend(file.dataset, thumb.dataset); + $.on(file, 'error', errorCB); + file.src = thumb.href; + return file; + }, + open: function(thumb) { + var el, file, newID, nodes, oldID, post, ref; + nodes = Gallery.nodes; + oldID = +nodes.current.dataset.id; + newID = +thumb.dataset.id; + if (el = Gallery.images[oldID]) { + $.rmClass(el, 'gal-highlight'); + } + $.addClass(thumb, 'gal-highlight'); + nodes.thumbs.scrollTop = thumb.offsetTop + thumb.offsetHeight / 2 - nodes.thumbs.clientHeight / 2; + if (((ref = Gallery.cache) != null ? ref.dataset.id : void 0) === '' + newID) { + file = Gallery.cache; + $.off(file, 'error', Gallery.cacheError); + $.on(file, 'error', Gallery.error); + } else { + file = Gallery.load(thumb, Gallery.error); + } + $.off(nodes.current, 'error', Gallery.error); + ImageCommon.pause(nodes.current); + $.replace(nodes.current, file); + nodes.current = file; + if (file.nodeName === 'VIDEO') { + file.loop = true; + Volume.setup(file); + if (Conf['Autoplay']) { + file.play(); + } + if (Conf['Show Controls']) { + ImageCommon.addControls(file); + } + } + doc.classList.toggle('gal-pdf', file.nodeName === 'IFRAME'); + Gallery.cb.setHeight(); + nodes.count.textContent = +thumb.dataset.id + 1; + nodes.name.download = nodes.name.textContent = thumb.title; + nodes.name.href = thumb.href; + nodes.frame.scrollTop = 0; + nodes.next.focus(); + if (Gallery.slideshow && (newID > oldID || (oldID === Gallery.images.length - 1 && newID === 0))) { + Gallery.setupTimer(); + } else { + Gallery.cb.stop(); + } + if (Conf['Scroll to Post'] && (post = g.posts[file.dataset.post])) { + Header.scrollTo(post.nodes.root); + } + if (isNaN(oldID) || newID === (oldID + 1) % Gallery.images.length) { + return Gallery.cache = Gallery.load(Gallery.images[(newID + 1) % Gallery.images.length], Gallery.cacheError); + } + }, + error: function() { + var ref; + if (((ref = this.error) != null ? ref.code : void 0) === MediaError.MEDIA_ERR_DECODE) { + return new Notice('error', 'Corrupt or unplayable video', 30); + } + if (this.src.split('/')[2] !== 'i.4cdn.org') { + return; + } + return ImageCommon.error(this, g.posts[this.dataset.post], null, (function(_this) { + return function(url) { + if (!url) { + return; + } + Gallery.images[_this.dataset.id].href = url; + if (Gallery.nodes.current === _this) { + return _this.src = url; + } + }; + })(this)); + }, + cacheError: function() { + return delete Gallery.cache; + }, + cleanupTimer: function() { + var current; + clearTimeout(Gallery.timeoutID); + current = Gallery.nodes.current; + $.off(current, 'canplaythrough load', Gallery.startTimer); + return $.off(current, 'ended', Gallery.cb.next); + }, + startTimer: function() { + return Gallery.timeoutID = setTimeout(Gallery.checkTimer, Gallery.delay * $.SECOND); + }, + setupTimer: function() { + var current, isVideo; + Gallery.cleanupTimer(); + current = Gallery.nodes.current; + isVideo = current.nodeName === 'VIDEO'; + if (isVideo) { + current.play(); + } + if ((isVideo ? current.readyState >= 4 : current.complete) || current.nodeName === 'IFRAME') { + return Gallery.startTimer(); + } else { + return $.on(current, (isVideo ? 'canplaythrough' : 'load'), Gallery.startTimer); + } + }, + checkTimer: function() { + var current; + current = Gallery.nodes.current; + if (current.nodeName === 'VIDEO' && !current.paused) { + $.on(current, 'ended', Gallery.cb.next); + return current.loop = false; + } else { + return Gallery.cb.next(); + } + }, + cb: { + keybinds: function(e) { + var cb, key; + if (!(key = Keybinds.keyCode(e))) { + return; + } + cb = (function() { + switch (key) { + case Conf['Close']: + case Conf['Open Gallery']: + return Gallery.cb.close; + case 'Right': + return Gallery.cb.next; + case 'Enter': + return Gallery.cb.advance; + case 'Left': + case '': + return Gallery.cb.prev; + case Conf['Pause']: + return Gallery.cb.pause; + case Conf['Slideshow']: + return Gallery.cb.toggleSlideshow; + } + })(); + if (!cb) { + return; + } + e.stopPropagation(); + e.preventDefault(); + return cb(); + }, + open: function(e) { + if (e) { + e.preventDefault(); + } + if (this) { + return Gallery.open(this); + } + }, + image: function(e) { + e.preventDefault(); + e.stopPropagation(); + return Gallery.build(this); + }, + prev: function() { + return Gallery.cb.open.call(Gallery.images[+Gallery.nodes.current.dataset.id - 1] || Gallery.images[Gallery.images.length - 1]); + }, + next: function() { + return Gallery.cb.open.call(Gallery.images[+Gallery.nodes.current.dataset.id + 1] || Gallery.images[0]); + }, + click: function(e) { + if (ImageCommon.onControls(e)) { + return; + } + e.preventDefault(); + return Gallery.cb.advance(); + }, + advance: function() { + if (!Conf['Autoplay'] && Gallery.nodes.current.paused) { + return Gallery.nodes.current.play(); + } else { + return Gallery.cb.next(); + } + }, + toggle: function() { + return (Gallery.nodes ? Gallery.cb.close : Gallery.build)(); + }, + blank: function(e) { + if (e.target === this) { + return Gallery.cb.close(); + } + }, + toggleSlideshow: function() { + return Gallery.cb[Gallery.slideshow ? 'stop' : 'start'](); + }, + pause: function() { + var current; + Gallery.cb.stop(); + current = Gallery.nodes.current; + if (current.nodeName === 'VIDEO') { + return current[current.paused ? 'play' : 'pause'](); + } + }, + start: function() { + $.addClass(Gallery.nodes.buttons, 'gal-playing'); + Gallery.slideshow = true; + return Gallery.setupTimer(); + }, + stop: function() { + var current; + if (!Gallery.slideshow) { + return; + } + Gallery.cleanupTimer(); + current = Gallery.nodes.current; + if (current.nodeName === 'VIDEO') { + current.loop = true; + } + $.rmClass(Gallery.nodes.buttons, 'gal-playing'); + return Gallery.slideshow = false; + }, + close: function() { + $.off(Gallery.nodes.current, 'error', Gallery.error); + ImageCommon.pause(Gallery.nodes.current); + $.rm(Gallery.nodes.el); + $.rmClass(doc, 'gallery-open'); + if (Conf['Fullscreen Gallery']) { + $.off(d, 'fullscreenchange mozfullscreenchange webkitfullscreenchange', Gallery.cb.close); + if (typeof d.mozCancelFullScreen === "function") { + d.mozCancelFullScreen(); + } + if (typeof d.webkitExitFullscreen === "function") { + d.webkitExitFullscreen(); + } + } + delete Gallery.nodes; + delete Gallery.fullIDs; + doc.style.overflow = ''; + $.off(d, 'keydown', Gallery.cb.keybinds); + if (Conf['Keybinds']) { + $.on(d, 'keydown', Keybinds.keydown); + } + $.off(window, 'resize', Gallery.cb.setHeight); + return clearTimeout(Gallery.timeoutID); + }, + setFitness: function() { + return (this.checked ? $.addClass : $.rmClass)(doc, "gal-" + (this.name.toLowerCase().replace(/\s+/g, '-'))); + }, + setHeight: $.debounce(100, function() { + var current, dim, frame, height, minHeight, ref, ref1, ref2, style, width; + ref = Gallery.nodes, current = ref.current, frame = ref.frame; + style = current.style; + if (Conf['Stretch to Fit'] && (dim = (ref1 = g.posts[current.dataset.post]) != null ? ref1.file.dimensions : void 0)) { + ref2 = dim.split('x'), width = ref2[0], height = ref2[1]; + minHeight = Math.min(doc.clientHeight - 25, height / width * frame.clientWidth); + style.minHeight = minHeight + 'px'; + return style.minWidth = (width / height * minHeight) + 'px'; + } else { + return style.minHeight = style.minWidth = null; + } + }), + setDelay: function() { + return Gallery.delay = +this.value; + } + }, + menu: { + init: function() { + var el; + if (!Gallery.enabled) { + return; + } + el = $.el('span', { + textContent: 'Gallery', + className: 'gallery-link' + }); + return Header.menu.addEntry({ + el: el, + order: 105, + subEntries: Gallery.menu.createSubEntries() + }); + }, + createSubEntry: function(name) { + var input, label; + label = UI.checkbox(name, name); + input = label.firstElementChild; + if (name === 'Hide Thumbnails' || name === 'Fit Width' || name === 'Fit Height') { + $.on(input, 'change', Gallery.cb.setFitness); + } + $.event('change', null, input); + $.on(input, 'change', $.cb.checked); + if (name === 'Hide Thumbnails' || name === 'Fit Width' || name === 'Fit Height' || name === 'Stretch to Fit') { + $.on(input, 'change', Gallery.cb.setHeight); + } + return { + el: label + }; + }, + createSubEntries: function() { + var delayInput, delayLabel, item, subEntries; + subEntries = (function() { + var i, len, ref, results; + ref = ['Hide Thumbnails', 'Fit Width', 'Fit Height', 'Stretch to Fit', 'Scroll to Post']; + results = []; + for (i = 0, len = ref.length; i < len; i++) { + item = ref[i]; + results.push(Gallery.menu.createSubEntry(item)); + } + return results; + })(); + delayLabel = $.el('label', { + innerHTML: "Slide Delay: " + }); + delayInput = delayLabel.firstElementChild; + delayInput.value = Gallery.delay; + $.on(delayInput, 'change', Gallery.cb.setDelay); + $.on(delayInput, 'change', $.cb.value); + subEntries.push({ + el: delayLabel + }); + return subEntries; + } + } + }; + + return Gallery; + +}).call(this); + +ImageCommon = (function() { + var ImageCommon; + + ImageCommon = { + pause: function(video) { + if (video.nodeName !== 'VIDEO') { + return; + } + video.pause(); + $.off(video, 'volumechange', Volume.change); + return video.muted = true; + }, + rewind: function(el) { + if (el.nodeName === 'VIDEO') { + if (el.readyState >= el.HAVE_METADATA) { + return el.currentTime = 0; + } + } else if (/\.gif$/.test(el.src)) { + return $.queueTask(function() { + return el.src = el.src; + }); + } + }, + pushCache: function(el) { + ImageCommon.cache = el; + return $.on(el, 'error', ImageCommon.cacheError); + }, + popCache: function() { + var el; + el = ImageCommon.cache; + $.off(el, 'error', ImageCommon.cacheError); + delete ImageCommon.cache; + return el; + }, + cacheError: function() { + if (ImageCommon.cache === this) { + return delete ImageCommon.cache; + } + }, + decodeError: function(file, post) { + var message, ref; + if (((ref = file.error) != null ? ref.code : void 0) !== MediaError.MEDIA_ERR_DECODE) { + return false; + } + if (!(message = $('.warning', post.file.thumb.parentNode))) { + message = $.el('div', { + className: 'warning' + }); + $.after(post.file.thumb, message); + } + message.textContent = 'Error: Corrupt or unplayable video'; + return true; + }, + error: function(file, post, delay, cb) { + var URL, redirect, src, timeoutID; + src = post.file.url.split('/'); + URL = Redirect.to('file', { + boardID: post.board.ID, + filename: src[src.length - 1] + }); + if (!(Conf['404 Redirect'] && URL && Redirect.securityCheck(URL))) { + URL = null; + } + if ((post.isDead || post.file.isDead) && file.src.split('/')[2] === 'i.4cdn.org') { + return cb(URL); + } + if (delay != null) { + timeoutID = setTimeout((function() { + return cb(URL); + }), delay); + } + if (post.isDead || post.file.isDead) { + return; + } + redirect = function() { + if (file.src.split('/')[2] === 'i.4cdn.org') { + if (delay != null) { + clearTimeout(timeoutID); + } + return cb(URL); + } + }; + return $.ajax("//a.4cdn.org/" + post.board + "/thread/" + post.thread + ".json", { + onload: function() { + var i, len, postObj, ref; + if (this.status === 404) { + post.kill(!post.isClone); + } + if (this.status !== 200) { + return redirect(); + } + ref = this.response.posts; + for (i = 0, len = ref.length; i < len; i++) { + postObj = ref[i]; + if (postObj.no === post.ID) { + break; + } + } + if (postObj.no !== post.ID) { + post.kill(); + return redirect(); + } else if (postObj.filedeleted) { + post.kill(true); + return redirect(); + } else { + return URL = post.file.url; + } + } + }); + }, + addControls: function(video) { + var handler; + handler = function() { + var t; + $.off(video, 'mouseover', handler); + t = new Date().getTime(); + return $.asap((function() { + return $.engine !== 'gecko' || (video.readyState >= 3 && video.currentTime <= Math.max(0.1, video.duration - 0.5)) || new Date().getTime() >= t + 1000; + }), function() { + return video.controls = true; + }); + }; + return $.on(video, 'mouseover', handler); + }, + onControls: function(e) { + return (Conf['Show Controls'] && Conf['Click Passthrough'] && e.target.nodeName === 'VIDEO') || (e.target.controls && e.target.getBoundingClientRect().bottom - e.clientY < 35); + }, + download: function(e) { + if (this.protocol === 'blob:') { + return true; + } + e.preventDefault(); + return CrossOrigin.file(this.href, (function(_this) { + return function(blob) { + if (blob) { + _this.href = URL.createObjectURL(blob); + return _this.click(); + } else { + return new Notice('error', "Could not download " + _this.href, 30); + } + }; + })(this)); + } + }; + + return ImageCommon; + +}).call(this); + +ImageExpand = (function() { + var ImageExpand, + slice = [].slice; + + ImageExpand = { + init: function() { + var ref; + if (!(this.enabled = Conf['Image Expansion'] && ((ref = g.VIEW) === 'index' || ref === 'thread') && g.BOARD.ID !== 'f')) { + return; + } + this.EAI = $.el('a', { + className: 'expand-all-shortcut fa fa-expand', + textContent: 'EAI', + title: 'Expand All Images', + href: 'javascript:;' + }); + $.on(this.EAI, 'click', this.cb.toggleAll); + Header.addShortcut(this.EAI, 3); + $.on(d, 'scroll visibilitychange', this.cb.playVideos); + this.videoControls = $.el('span', { + className: 'video-controls' + }); + $.extend(this.videoControls, { + innerHTML: " contract" + }); + return Callbacks.Post.push({ + name: 'Image Expansion', + cb: this.node + }); + }, + node: function() { + var ref; + if (!(this.file && (this.file.isImage || this.file.isVideo))) { + return; + } + $.on(this.file.thumb.parentNode, 'click', ImageExpand.cb.toggle); + if (this.isClone) { + if (this.file.isExpanding) { + ImageExpand.contract(this); + return ImageExpand.expand(this); + } else if (this.file.isExpanded && this.file.isVideo) { + Volume.setup(this.file.fullImage); + ImageExpand.setupVideoCB(this); + return ImageExpand.setupVideo(this, !((ref = this.origin.file.fullImage) != null ? ref.paused : void 0) || this.origin.file.wasPlaying, this.file.fullImage.controls); + } + } else if (ImageExpand.on && !this.isHidden && !this.isFetchedQuote && (Conf['Expand spoilers'] || !this.file.isSpoiler) && (Conf['Expand videos'] || !this.file.isVideo)) { + return ImageExpand.expand(this); + } + }, + cb: { + toggle: function(e) { + var file, post, ref; + if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0) { + return; + } + post = Get.postFromNode(this); + file = post.file; + if (file.isExpanded && ImageCommon.onControls(e)) { + return; + } + e.preventDefault(); + if (!Conf['Autoplay'] && ((ref = file.fullImage) != null ? ref.paused : void 0)) { + return file.fullImage.play(); + } else { + return ImageExpand.toggle(post); + } + }, + toggleAll: function() { + var func, toggle; + $.event('CloseMenu'); + toggle = function(post) { + var file; + file = post.file; + if (!(file && (file.isImage || file.isVideo) && doc.contains(post.nodes.root))) { + return; + } + if (ImageExpand.on && (!Conf['Expand spoilers'] && file.isSpoiler || !Conf['Expand videos'] && file.isVideo || Conf['Expand from here'] && Header.getTopOf(file.thumb) < 0)) { + return; + } + return $.queueTask(func, post); + }; + if (ImageExpand.on = $.hasClass(ImageExpand.EAI, 'expand-all-shortcut')) { + ImageExpand.EAI.className = 'contract-all-shortcut fa fa-compress'; + ImageExpand.EAI.title = 'Contract All Images'; + func = ImageExpand.expand; + } else { + ImageExpand.EAI.className = 'expand-all-shortcut fa fa-expand'; + ImageExpand.EAI.title = 'Expand All Images'; + func = ImageExpand.contract; + } + return g.posts.forEach(function(post) { + var i, len, ref; + ref = [post].concat(slice.call(post.clones)); + for (i = 0, len = ref.length; i < len; i++) { + post = ref[i]; + toggle(post); + } + }); + }, + playVideos: function() { + return g.posts.forEach(function(post) { + var file, i, len, ref, video, visible; + ref = [post].concat(slice.call(post.clones)); + for (i = 0, len = ref.length; i < len; i++) { + post = ref[i]; + file = post.file; + if (!(file && file.isVideo && file.isExpanded)) { + continue; + } + video = file.fullImage; + visible = ($.hasAudio(video) && !video.muted) || Header.isNodeVisible(video); + if (visible && file.wasPlaying) { + delete file.wasPlaying; + video.play(); + } else if (!visible && !video.paused) { + file.wasPlaying = true; + video.pause(); + } + } + }); + }, + setFitness: function() { + return $[this.checked ? 'addClass' : 'rmClass'](doc, this.name.toLowerCase().replace(/\s+/g, '-')); + } + }, + toggle: function(post) { + var next; + if (!(post.file.isExpanding || post.file.isExpanded)) { + post.file.scrollIntoView = Conf['Scroll into view']; + ImageExpand.expand(post); + return; + } + ImageExpand.contract(post); + if (Conf['Advance on contract']) { + next = post.nodes.root; + while (next = $.x("following::div[contains(@class,'postContainer')][1]", next)) { + if (!($('.stub', next) || next.offsetHeight === 0)) { + break; + } + } + if (next) { + return Header.scrollTo(next); + } + } + }, + contract: function(post) { + var bottom, cb, el, eventName, file, i, len, oldHeight, ref, ref1, scrollY, top, x; + file = post.file; + if (el = file.fullImage) { + top = Header.getTopOf(el); + bottom = top + el.getBoundingClientRect().height; + oldHeight = d.body.clientHeight; + scrollY = window.scrollY; + } + $.rmClass(post.nodes.root, 'expanded-image'); + $.rmClass(file.thumb, 'expanding'); + $.rm(file.videoControls); + file.thumb.parentNode.href = file.url; + file.thumb.parentNode.target = '_blank'; + ref = ['isExpanding', 'isExpanded', 'videoControls', 'wasPlaying', 'scrollIntoView']; + for (i = 0, len = ref.length; i < len; i++) { + x = ref[i]; + delete file[x]; + } + if (!el) { + return; + } + if (doc.contains(el)) { + if (bottom <= 0) { + window.scroll(0, scrollY + d.body.clientHeight - oldHeight); + } else { + Header.scrollToIfNeeded(post.nodes.root); + } + if (window.scrollX > 0) { + window.scroll(0, window.scrollY); + } + } + $.off(el, 'error', ImageExpand.error); + ImageCommon.pushCache(el); + if (file.isVideo) { + ImageCommon.pause(el); + ref1 = ImageExpand.videoCB; + for (eventName in ref1) { + cb = ref1[eventName]; + $.off(el, eventName, cb); + } + } + if (Conf['Restart when Opened']) { + ImageCommon.rewind(file.thumb); + } + delete file.fullImage; + return $.queueTask(function() { + if (file.isExpanding || file.isExpanded) { + return; + } + $.rmClass(el, 'full-image'); + if (el.id) { + return; + } + return $.rm(el); + }); + }, + expand: function(post, src) { + var el, file, isVideo, ref, thumb; + file = post.file; + thumb = file.thumb, isVideo = file.isVideo; + if (post.isHidden || file.isExpanding || file.isExpanded) { + return; + } + $.addClass(thumb, 'expanding'); + file.isExpanding = true; + if (file.fullImage) { + el = file.fullImage; + } else if (((ref = ImageCommon.cache) != null ? ref.dataset.fullID : void 0) === post.fullID) { + el = file.fullImage = ImageCommon.popCache(); + $.on(el, 'error', ImageExpand.error); + if (Conf['Restart when Opened'] && el.id !== 'ihover') { + ImageCommon.rewind(el); + } + el.removeAttribute('id'); + } else { + el = file.fullImage = $.el((isVideo ? 'video' : 'img')); + el.dataset.fullID = post.fullID; + $.on(el, 'error', ImageExpand.error); + el.src = src || file.url; + } + el.className = 'full-image'; + $.after(thumb, el); + if (isVideo) { + if (Conf['Show Controls'] && Conf['Click Passthrough'] && !file.videoControls) { + file.videoControls = ImageExpand.videoControls.cloneNode(true); + $.add(file.text, file.videoControls); + } + thumb.parentNode.removeAttribute('href'); + thumb.parentNode.removeAttribute('target'); + el.loop = true; + Volume.setup(el); + ImageExpand.setupVideoCB(post); + } + if (!isVideo) { + return $.asap((function() { + return el.naturalHeight; + }), function() { + return ImageExpand.completeExpand(post); + }); + } else if (el.readyState >= el.HAVE_METADATA) { + return ImageExpand.completeExpand(post); + } else { + return $.on(el, 'loadedmetadata', function() { + return ImageExpand.completeExpand(post); + }); + } + }, + completeExpand: function(post) { + var bottom, file, imageBottom, oldHeight, scrollY; + file = post.file; + if (!file.isExpanding) { + return; + } + bottom = Header.getTopOf(file.thumb) + file.thumb.getBoundingClientRect().height; + oldHeight = d.body.clientHeight; + scrollY = window.scrollY; + $.addClass(post.nodes.root, 'expanded-image'); + $.rmClass(file.thumb, 'expanding'); + file.isExpanded = true; + delete file.isExpanding; + if (doc.contains(post.nodes.root) && bottom <= 0) { + window.scroll(window.scrollX, scrollY + d.body.clientHeight - oldHeight); + } + if (file.scrollIntoView) { + delete file.scrollIntoView; + imageBottom = Math.min(doc.clientHeight - file.fullImage.getBoundingClientRect().bottom - 25, Header.getBottomOf(file.fullImage)); + if (imageBottom < 0) { + window.scrollBy(0, Math.min(-imageBottom, Header.getTopOf(file.fullImage))); + } + } + if (file.isVideo) { + return ImageExpand.setupVideo(post, Conf['Autoplay'], Conf['Show Controls']); + } + }, + setupVideo: function(post, playing, controls) { + var fullImage; + fullImage = post.file.fullImage; + if (!playing) { + fullImage.controls = controls; + return; + } + fullImage.controls = false; + $.asap((function() { + return doc.contains(fullImage); + }), function() { + if (!d.hidden && Header.isNodeVisible(fullImage)) { + return fullImage.play(); + } else { + return post.file.wasPlaying = true; + } + }); + if (controls) { + return ImageCommon.addControls(fullImage); + } + }, + videoCB: (function() { + var mousedown; + mousedown = false; + return { + mouseover: function() { + return mousedown = false; + }, + mousedown: function(e) { + if (e.button === 0) { + return mousedown = true; + } + }, + mouseup: function(e) { + if (e.button === 0) { + return mousedown = false; + } + }, + mouseout: function(e) { + if (mousedown && e.clientX <= this.getBoundingClientRect().left) { + return ImageExpand.toggle(Get.postFromNode(this)); + } + } + }; + })(), + setupVideoCB: function(post) { + var cb, eventName, ref; + ref = ImageExpand.videoCB; + for (eventName in ref) { + cb = ref[eventName]; + $.on(post.file.fullImage, eventName, cb); + } + if (post.file.videoControls) { + return $.on(post.file.videoControls.firstElementChild, 'click', function() { + return ImageExpand.toggle(post); + }); + } + }, + error: function() { + var post; + post = Get.postFromNode(this); + $.rm(this); + delete post.file.fullImage; + if (!(post.file.isExpanding || post.file.isExpanded)) { + return; + } + if (ImageCommon.decodeError(this, post)) { + return ImageExpand.contract(post); + } + if (this.src.split('/')[2] !== 'i.4cdn.org') { + return ImageExpand.contract(post); + } + return ImageCommon.error(this, post, 10 * $.SECOND, function(URL) { + if (post.file.isExpanding || post.file.isExpanded) { + ImageExpand.contract(post); + if (URL) { + return ImageExpand.expand(post, URL); + } + } + }); + }, + menu: { + init: function() { + var conf, createSubEntry, el, name, ref, subEntries; + if (!ImageExpand.enabled) { + return; + } + el = $.el('span', { + textContent: 'Image Expansion', + className: 'image-expansion-link' + }); + createSubEntry = ImageExpand.menu.createSubEntry; + subEntries = []; + ref = Config.imageExpansion; + for (name in ref) { + conf = ref[name]; + subEntries.push(createSubEntry(name, conf[1])); + } + return Header.menu.addEntry({ + el: el, + order: 105, + subEntries: subEntries + }); + }, + createSubEntry: function(name, desc) { + var input, label; + label = UI.checkbox(name, name); + label.title = desc; + input = label.firstElementChild; + if (name === 'Fit width' || name === 'Fit height') { + $.on(input, 'change', ImageExpand.cb.setFitness); + } + $.event('change', null, input); + $.on(input, 'change', $.cb.checked); + return { + el: label + }; + } + } + }; + + return ImageExpand; + +}).call(this); + +ImageHover = (function() { + var ImageHover; + + ImageHover = { + init: function() { + var ref; + if ((ref = g.VIEW) !== 'index' && ref !== 'thread') { + return; + } + if (Conf['Image Hover']) { + Callbacks.Post.push({ + name: 'Image Hover', + cb: this.node + }); + } + if (Conf['Image Hover in Catalog']) { + return Callbacks.CatalogThread.push({ + name: 'Image Hover', + cb: this.catalogNode + }); + } + }, + node: function() { + if (!(this.file && (this.file.isImage || this.file.isVideo))) { + return; + } + return $.on(this.file.thumb, 'mouseover', ImageHover.mouseover(this)); + }, + catalogNode: function() { + var file; + file = this.thread.OP.file; + if (!(file && (file.isImage || file.isVideo))) { + return; + } + return $.on(this.nodes.thumb, 'mouseover', ImageHover.mouseover(this.thread.OP)); + }, + mouseover: function(post) { + return function(e) { + var el, error, file, height, isVideo, left, maxHeight, maxWidth, ref, ref1, ref2, right, scale, width, x; + if (!doc.contains(this)) { + return; + } + file = post.file; + isVideo = file.isVideo; + if (file.isExpanding || file.isExpanded) { + return; + } + error = ImageHover.error(post); + if (((ref = ImageCommon.cache) != null ? ref.dataset.fullID : void 0) === post.fullID) { + el = ImageCommon.popCache(); + $.on(el, 'error', error); + } else { + el = $.el((isVideo ? 'video' : 'img')); + el.dataset.fullID = post.fullID; + $.on(el, 'error', error); + el.src = file.url; + } + if (Conf['Restart when Opened']) { + ImageCommon.rewind(el); + ImageCommon.rewind(this); + } + el.id = 'ihover'; + $.add(Header.hover, el); + if (isVideo) { + el.loop = true; + el.controls = false; + Volume.setup(el); + if (Conf['Autoplay']) { + el.play(); + } + } + ref1 = (function() { + var i, len, ref1, results; + ref1 = file.dimensions.split('x'); + results = []; + for (i = 0, len = ref1.length; i < len; i++) { + x = ref1[i]; + results.push(+x); + } + return results; + })(), width = ref1[0], height = ref1[1]; + ref2 = this.getBoundingClientRect(), left = ref2.left, right = ref2.right; + maxWidth = Math.max(left, doc.clientWidth - right); + maxHeight = doc.clientHeight - UI.hover.padding; + scale = Math.min(1, maxWidth / width, maxHeight / height); + el.style.maxWidth = (scale * width) + "px"; + el.style.maxHeight = (scale * height) + "px"; + return UI.hover({ + root: this, + el: el, + latestEvent: e, + endEvents: 'mouseout click', + height: scale * height, + noRemove: true, + cb: function() { + $.off(el, 'error', error); + ImageCommon.pushCache(el); + ImageCommon.pause(el); + $.rm(el); + return el.removeAttribute('style'); + } + }); + }; + }, + error: function(post) { + return function() { + if (ImageCommon.decodeError(this, post)) { + return; + } + return ImageCommon.error(this, post, 3 * $.SECOND, (function(_this) { + return function(URL) { + if (URL) { + return _this.src = URL + (_this.src === URL ? '?' + Date.now() : ''); + } else { + return $.rm(_this); + } + }; + })(this)); + }; + } + }; + + return ImageHover; + +}).call(this); + +ImageLoader = (function() { + var ImageLoader, + slice = [].slice; + + ImageLoader = { + init: function() { + var prefetch, ref; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && g.BOARD.ID !== 'f')) { + return; + } + if (!(Conf['Image Prefetching'] || Conf['Replace JPG'] || Conf['Replace PNG'] || Conf['Replace GIF'] || Conf['Replace WEBM'])) { + return; + } + Callbacks.Post.push({ + name: 'Image Replace', + cb: this.node + }); + $.on(d, 'PostsInserted', function() { + return g.posts.forEach(ImageLoader.prefetch); + }); + if (Conf['Replace WEBM']) { + $.on(d, 'scroll visibilitychange 4chanXInitFinished PostsInserted', this.playVideos); + } + if (!Conf['Image Prefetching']) { + return; + } + prefetch = $.el('label', { + innerHTML: " Prefetch Images" + }); + this.el = prefetch.firstElementChild; + $.on(this.el, 'change', this.toggle); + return Header.menu.addEntry({ + el: prefetch, + order: 98 + }); + }, + node: function() { + if (this.isClone || !this.file) { + return; + } + if (Conf['Replace WEBM'] && this.file.isVideo) { + ImageLoader.replaceVideo(this); + } + return ImageLoader.prefetch(this); + }, + replaceVideo: function(post) { + var attr, file, i, len, ref, thumb, video; + file = post.file; + thumb = file.thumb; + video = $.el('video', { + preload: 'none', + loop: true, + muted: true, + poster: thumb.src || thumb.dataset.src, + textContent: thumb.alt, + className: thumb.className + }); + video.setAttribute('muted', 'muted'); + video.dataset.md5 = thumb.dataset.md5; + ref = ['height', 'width', 'maxHeight', 'maxWidth']; + for (i = 0, len = ref.length; i < len; i++) { + attr = ref[i]; + video.style[attr] = thumb.style[attr]; + } + video.src = file.url; + $.replace(thumb, video); + file.thumb = video; + return file.videoThumb = true; + }, + prefetch: function(post) { + var clone, el, file, i, isImage, isVideo, len, match, ref, replace, thumb, type, url; + file = post.file; + if (!file) { + return; + } + isImage = file.isImage, isVideo = file.isVideo, thumb = file.thumb, url = file.url; + if (file.isPrefetched || !(isImage || isVideo) || post.isHidden || post.thread.isHidden) { + return; + } + type = (match = url.match(/\.([^.]+)$/)[1].toUpperCase()) === 'JPEG' ? 'JPG' : match; + replace = Conf["Replace " + type] && !/spoiler/.test(thumb.src || thumb.dataset.src); + if (!(replace || Conf['prefetch'])) { + return; + } + if (![post].concat(slice.call(post.clones)).some(function(clone) { + return doc.contains(clone.nodes.root); + })) { + return; + } + file.isPrefetched = true; + if (file.videoThumb) { + ref = post.clones; + for (i = 0, len = ref.length; i < len; i++) { + clone = ref[i]; + clone.file.thumb.preload = 'auto'; + } + thumb.preload = 'auto'; + if ($.engine === 'gecko') { + $.on(thumb, 'loadeddata', function() { + return this.removeAttribute('poster'); + }); + } + return; + } + el = $.el(isImage ? 'img' : 'video'); + if (replace && isImage) { + $.on(el, 'load', function() { + var j, len1, ref1; + ref1 = post.clones; + for (j = 0, len1 = ref1.length; j < len1; j++) { + clone = ref1[j]; + clone.file.thumb.src = url; + } + thumb.src = url; + return thumb.removeAttribute('data-src'); + }); + } + return el.src = url; + }, + toggle: function() { + if (Conf['prefetch'] = this.checked) { + g.posts.forEach(ImageLoader.prefetch); + } + }, + playVideos: function() { + var qpClone, ref; + qpClone = (ref = $.id('qp')) != null ? ref.firstElementChild : void 0; + return g.posts.forEach(function(post) { + var i, len, ref1, ref2, thumb; + ref1 = [post].concat(slice.call(post.clones)); + for (i = 0, len = ref1.length; i < len; i++) { + post = ref1[i]; + if (!((ref2 = post.file) != null ? ref2.videoThumb : void 0)) { + continue; + } + thumb = post.file.thumb; + if (Header.isNodeVisible(thumb) || post.nodes.root === qpClone) { + thumb.play(); + } else { + thumb.pause(); + } + } + }); + } + }; + + return ImageLoader; + +}).call(this); + +Metadata = (function() { + var Metadata; + + Metadata = { + init: function() { + var ref; + if (!(Conf['WEBM Metadata'] && ((ref = g.VIEW) === 'index' || ref === 'thread') && g.BOARD.ID !== 'f')) { + return; + } + return Callbacks.Post.push({ + name: 'WEBM Metadata', + cb: this.node + }); + }, + node: function() { + var el; + if (!(this.file && /webm$/i.test(this.file.url))) { + return; + } + if (this.isClone) { + el = $('.webm-title', this.file.text); + } else { + el = $.el('span', { + className: 'webm-title' + }); + $.extend(el, { + innerHTML: "" + }); + $.add(this.file.text, [$.tn('\u00A0'), el]); + } + if (el.children.length === 1) { + return $.one(el.lastElementChild, 'mouseover focus', Metadata.load); + } + }, + load: function() { + $.rmClass(this.parentNode, 'error'); + $.addClass(this.parentNode, 'loading'); + return CrossOrigin.binary(Get.postFromNode(this).file.url, (function(_this) { + return function(data) { + var output, title; + $.rmClass(_this.parentNode, 'loading'); + if (data != null) { + title = Metadata.parse(data); + output = $.el('span', { + textContent: title || '' + }); + if (title == null) { + $.addClass(_this.parentNode, 'not-found'); + } + $.before(_this, output); + _this.parentNode.tabIndex = 0; + if (d.activeElement === _this) { + _this.parentNode.focus(); + } + return _this.tabIndex = -1; + } else { + $.addClass(_this.parentNode, 'error'); + return $.one(_this, 'click', Metadata.load); + } + }; + })(this), { + Range: 'bytes=0-9999' + }); + }, + parse: function(data) { + var element, i, readInt, size, title; + readInt = function() { + var len, n; + n = data[i++]; + len = 0; + while (n < (0x80 >> len)) { + len++; + } + n ^= 0x80 >> len; + while (len-- && i < data.length) { + n = (n << 8) ^ data[i++]; + } + return n; + }; + i = 0; + while (i < data.length) { + element = readInt(); + size = readInt(); + if (element === 0x3BA9) { + title = ''; + while (size-- && i < data.length) { + title += String.fromCharCode(data[i++]); + } + return decodeURIComponent(escape(title)); + } else if (element !== 0x8538067 && element !== 0x549A966) { + i += size; + } + } + return null; + } + }; + + return Metadata; + +}).call(this); + +RevealSpoilers = (function() { + var RevealSpoilers; + + RevealSpoilers = { + init: function() { + var ref; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Reveal Spoiler Thumbnails'])) { + return; + } + return Callbacks.Post.push({ + name: 'Reveal Spoiler Thumbnails', + cb: this.node + }); + }, + node: function() { + var thumb; + if (!(!this.isClone && this.file && this.file.thumb && this.file.isSpoiler)) { + return; + } + thumb = this.file.thumb; + thumb.removeAttribute('style'); + thumb.style.maxHeight = thumb.style.maxWidth = this.isReply ? '125px' : '250px'; + if (thumb.src) { + return thumb.src = this.file.thumbURL; + } else { + return thumb.dataset.src = this.file.thumbURL; + } + } + }; + + return RevealSpoilers; + +}).call(this); + +Sauce = (function() { + var Sauce, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + Sauce = { + init: function() { + var err, j, len, link, links, ref, ref1; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Sauce'])) { + return; + } + links = []; + ref1 = Conf['sauces'].split('\n'); + for (j = 0, len = ref1.length; j < len; j++) { + link = ref1[j]; + try { + if (link[0] !== '#') { + links.push(link.trim()); + } + } catch (_error) { + err = _error; + } + } + if (!links.length) { + return; + } + this.links = links; + this.link = $.el('a', { + target: '_blank', + className: 'sauce' + }); + return Callbacks.Post.push({ + name: 'Sauce', + cb: this.node + }); + }, + sandbox: function(url) { + return E.url({ + innerHTML: "[sb] " + E(url) + "" + }); + }, + rmOrigin: function(e) { + if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0) { + return; + } + $.open(this.href); + return e.preventDefault(); + }, + createSauceLink: function(link, post) { + var a, ext, i, j, key, len, m, part, parts, ref, ref1, ref2, skip, url; + if (!(link = link.trim())) { + return null; + } + parts = {}; + ref = link.split(/;(?=(?:text|boards|types|sandbox):?)/); + for (i = j = 0, len = ref.length; j < len; i = ++j) { + part = ref[i]; + if (i === 0) { + parts['url'] = part; + } else { + m = part.match(/^(\w*):?(.*)$/); + parts[m[1]] = m[2]; + } + } + parts['text'] || (parts['text'] = ((ref1 = parts['url'].match(/(\w+)\.\w+\//)) != null ? ref1[1] : void 0) || '?'); + ext = post.file.url.match(/[^.]*$/)[0]; + skip = false; + for (key in parts) { + parts[key] = parts[key].replace(/%(T?URL|IMG|[sh]?MD5|board|name|%|semi)/g, function(_, parameter) { + var type; + type = Sauce.formatters[parameter](post, ext); + if (type == null) { + skip = true; + return ''; + } + if (key === 'url' && (parameter !== '%' && parameter !== 'semi')) { + if (/^javascript:/i.test(parts['url'])) { + type = JSON.stringify(type); + } + type = encodeURIComponent(type); + } + return type; + }); + } + if (skip) { + return null; + } + if (!(!parts['boards'] || (ref2 = post.board.ID, indexOf.call(parts['boards'].split(','), ref2) >= 0))) { + return null; + } + if (!(!parts['types'] || indexOf.call(parts['types'].split(','), ext) >= 0)) { + return null; + } + url = parts['url']; + if (parts['sandbox'] != null) { + url = Sauce.sandbox(url); + } + a = Sauce.link.cloneNode(true); + a.href = url; + a.textContent = parts['text']; + if (/^javascript:/i.test(parts['url'])) { + a.removeAttribute('target'); + } + if (parts['sandbox'] != null) { + $.on(a, 'click', Sauce.rmOrigin); + } + return a; + }, + node: function() { + var j, len, link, node, nodes, ref; + if (this.isClone || !this.file) { + return; + } + nodes = []; + ref = Sauce.links; + for (j = 0, len = ref.length; j < len; j++) { + link = ref[j]; + if (node = Sauce.createSauceLink(link, this)) { + nodes.push($.tn('\u00A0'), node); + } + } + return $.add(this.file.text, nodes); + }, + formatters: { + TURL: function(post) { + return post.file.thumbURL; + }, + URL: function(post) { + return post.file.url; + }, + IMG: function(post, ext) { + if (ext === 'gif' || ext === 'jpg' || ext === 'png') { + return post.file.url; + } else { + return post.file.thumbURL; + } + }, + MD5: function(post) { + return post.file.MD5; + }, + sMD5: function(post) { + var ref; + return (ref = post.file.MD5) != null ? ref.replace(/[+\/=]/g, function(c) { + return { + '+': '-', + '/': '_', + '=': '' + }[c]; + }) : void 0; + }, + hMD5: function(post) { + var c; + if (post.file.MD5) { + return ((function() { + var j, len, ref, results; + ref = atob(post.file.MD5); + results = []; + for (j = 0, len = ref.length; j < len; j++) { + c = ref[j]; + results.push(("0" + (c.charCodeAt(0).toString(16))).slice(-2)); + } + return results; + })()).join(''); + } + }, + board: function(post) { + return post.board.ID; + }, + name: function(post) { + return post.file.name; + }, + '%': function() { + return '%'; + }, + semi: function() { + return ';'; + } + } + }; + + return Sauce; + +}).call(this); + +Volume = (function() { + var Volume; + + Volume = { + init: function() { + var ref, ref1, unmuteEntry, volumeEntry; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && (Conf['Image Expansion'] || Conf['Image Hover'] || Conf['Image Hover in Catalog'] || Conf['Gallery']))) { + return; + } + $.sync('Allow Sound', function(x) { + var ref1; + Conf['Allow Sound'] = x; + return (ref1 = Volume.inputs) != null ? ref1.unmute.checked = x : void 0; + }); + $.sync('Default Volume', function(x) { + var ref1; + Conf['Default Volume'] = x; + return (ref1 = Volume.inputs) != null ? ref1.volume.value = x : void 0; + }); + if (Conf['Mouse Wheel Volume']) { + Callbacks.Post.push({ + name: 'Mouse Wheel Volume', + cb: this.node + }); + } + if ((ref1 = g.BOARD.ID) !== 'gif' && ref1 !== 'wsg') { + return; + } + if (Conf['Mouse Wheel Volume']) { + Callbacks.CatalogThread.push({ + name: 'Mouse Wheel Volume', + cb: this.catalogNode + }); + } + unmuteEntry = UI.checkbox('Allow Sound', 'Allow Sound'); + unmuteEntry.title = Config.main['Images and Videos']['Allow Sound'][1]; + volumeEntry = $.el('label', { + title: 'Default volume for videos.' + }); + $.extend(volumeEntry, { + innerHTML: " Volume" + }); + this.inputs = { + unmute: unmuteEntry.firstElementChild, + volume: volumeEntry.firstElementChild + }; + $.on(this.inputs.unmute, 'change', $.cb.checked); + $.on(this.inputs.volume, 'change', $.cb.value); + Header.menu.addEntry({ + el: unmuteEntry, + order: 200 + }); + return Header.menu.addEntry({ + el: volumeEntry, + order: 201 + }); + }, + setup: function(video) { + video.muted = !Conf['Allow Sound']; + video.volume = Conf['Default Volume']; + return $.on(video, 'volumechange', Volume.change); + }, + change: function() { + var items, key, muted, val, volume; + muted = this.muted, volume = this.volume; + items = { + 'Allow Sound': !muted, + 'Default Volume': volume + }; + for (key in items) { + val = items[key]; + if (Conf[key] === val) { + delete items[key]; + } + } + $.set(items); + $.extend(Conf, items); + if (Volume.inputs) { + Volume.inputs.unmute.checked = !muted; + return Volume.inputs.volume.value = volume; + } + }, + node: function() { + var ref, ref1; + if (!(((ref = this.board.ID) === 'gif' || ref === 'wsg') && ((ref1 = this.file) != null ? ref1.isVideo : void 0))) { + return; + } + $.on(this.file.thumb, 'wheel', Volume.wheel.bind(Header.hover)); + return $.on($('a', this.file.text), 'wheel', Volume.wheel.bind(this.file.thumb.parentNode)); + }, + catalogNode: function() { + var file; + file = this.thread.OP.file; + if (!(file != null ? file.isVideo : void 0)) { + return; + } + return $.on(this.nodes.thumb, 'wheel', Volume.wheel.bind(Header.hover)); + }, + wheel: function(e) { + var el, volume; + if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) { + return; + } + if (!(el = $('video:not([data-md5])', this))) { + return; + } + if (el.muted || !$.hasAudio(el)) { + return; + } + volume = el.volume + 0.1; + if (e.deltaY < 0) { + volume *= 1.1; + } + if (e.deltaY > 0) { + volume /= 1.1; + } + el.volume = $.minmax(volume - 0.1, 0, 1); + return e.preventDefault(); + } + }; + + return Volume; + +}).call(this); + +Embedding = (function() { + var Embedding; + + Embedding = { + init: function() { + var j, len, ref, type; + if (!(Conf['Embedding'] || Conf['Link Title'])) { + return; + } + this.types = {}; + ref = this.ordered_types; + for (j = 0, len = ref.length; j < len; j++) { + type = ref[j]; + this.types[type.key] = type; + } + if (Conf['Floating Embeds']) { + this.dialog = UI.dialog('embedding', 'top: 50px; right: 0px;', { + innerHTML: "
      " + }); + this.media = $('#media-embed', this.dialog); + $.one(d, '4chanXInitFinished', this.ready); + } + if (Conf['Link Title']) { + return $.on(d, '4chanXInitFinished PostsInserted', function() { + var key, ref1, ref2, service; + ref1 = Embedding.types; + for (key in ref1) { + service = ref1[key]; + if ((ref2 = service.title) != null ? ref2.batchSize : void 0) { + Embedding.flushTitles(service.title); + } + } + }); + } + }, + events: function(post) { + var el, i, items; + if (!Conf['Embedding']) { + return; + } + i = 0; + items = $$('.embedder', post.nodes.comment); + while (el = items[i++]) { + $.on(el, 'click', Embedding.cb.toggle); + if ($.hasClass(el, 'embedded')) { + Embedding.cb.toggle.call(el); + } + } + }, + process: function(link, post) { + var data; + if (!(Conf['Embedding'] || Conf['Link Title'])) { + return; + } + if ($.x('ancestor::pre', link)) { + return; + } + if (data = Embedding.services(link)) { + data.post = post; + if (Conf['Embedding']) { + Embedding.embed(data); + } + if (Conf['Link Title']) { + return Embedding.title(data); + } + } + }, + services: function(link) { + var href, j, len, match, ref, type; + href = link.href; + ref = Embedding.ordered_types; + for (j = 0, len = ref.length; j < len; j++) { + type = ref[j]; + if (!(match = type.regExp.exec(href))) { + continue; + } + if (type.dummy) { + return; + } + return { + key: type.key, + uid: match[1], + options: match[2], + link: link + }; + } + }, + embed: function(data) { + var embed, href, key, link, name, options, post, ref, uid, value; + key = data.key, uid = data.uid, options = data.options, link = data.link, post = data.post; + href = link.href; + if (Embedding.types[key].httpOnly && location.protocol !== 'http:') { + return; + } + $.addClass(link, key.toLowerCase()); + embed = $.el('a', { + className: 'embedder', + href: 'javascript:;', + textContent: '(embed)' + }); + ref = { + key: key, + uid: uid, + options: options, + href: href + }; + for (name in ref) { + value = ref[name]; + embed.dataset[name] = value; + } + $.on(embed, 'click', Embedding.cb.toggle); + $.after(link, [$.tn(' '), embed]); + if (Conf['Auto-embed'] && !Conf['Floating Embeds'] && !post.isFetchedQuote && key !== 'TwitchTV') { + return $.asap((function() { + return doc.contains(embed); + }), function() { + return Embedding.cb.toggle.call(embed); + }); + } + }, + ready: function() { + $.addClass(Embedding.dialog, 'empty'); + $.on($('.close', Embedding.dialog), 'click', Embedding.closeFloat); + $.on($('.move', Embedding.dialog), 'mousedown', Embedding.dragEmbed); + $.on($('.jump', Embedding.dialog), 'click', function() { + if (doc.contains(Embedding.lastEmbed)) { + return Header.scrollTo(Embedding.lastEmbed); + } + }); + return $.add(d.body, Embedding.dialog); + }, + closeFloat: function() { + delete Embedding.lastEmbed; + $.addClass(Embedding.dialog, 'empty'); + return $.replace(Embedding.media.firstChild, $.el('div')); + }, + dragEmbed: function() { + var style; + style = Embedding.media.style; + if (Embedding.dragEmbed.mouseup) { + $.off(d, 'mouseup', Embedding.dragEmbed); + Embedding.dragEmbed.mouseup = false; + style.visibility = ''; + return; + } + $.on(d, 'mouseup', Embedding.dragEmbed); + Embedding.dragEmbed.mouseup = true; + return style.visibility = 'hidden'; + }, + title: function(data) { + var key, link, options, post, service, uid; + key = data.key, uid = data.uid, options = data.options, link = data.link, post = data.post; + if (!(service = Embedding.types[key].title)) { + return; + } + $.addClass(link, key.toLowerCase()); + if (service.batchSize) { + (service.queue || (service.queue = [])).push(data); + if (service.queue.length >= service.batchSize) { + return Embedding.flushTitles(service); + } + } else { + if (!$.cache(service.api(uid), (function() { + return Embedding.cb.title(this, data); + }), { + responseType: 'json' + })) { + return $.extend(link, { + innerHTML: "[" + E(key) + "] Title Link Blocked (are you using NoScript?)" + }); + } + } + }, + flushTitles: function(service) { + var cb, data, j, len, queue; + queue = service.queue; + if (!(queue != null ? queue.length : void 0)) { + return; + } + service.queue = []; + cb = function() { + var data, j, len; + for (j = 0, len = queue.length; j < len; j++) { + data = queue[j]; + Embedding.cb.title(this, data); + } + }; + if (!$.cache(service.api((function() { + var j, len, results; + results = []; + for (j = 0, len = queue.length; j < len; j++) { + data = queue[j]; + results.push(data.uid); + } + return results; + })()), cb, { + responseType: 'json' + })) { + for (j = 0, len = queue.length; j < len; j++) { + data = queue[j]; + $.extend(data.link, { + innerHTML: "[" + E(data.key) + "] Title Link Blocked (are you using NoScript?)" + }); + } + } + }, + cb: { + toggle: function(e) { + var div; + if (e != null) { + e.preventDefault(); + } + if (Conf['Floating Embeds']) { + if (!(div = Embedding.media.firstChild)) { + return; + } + $.replace(div, Embedding.cb.embed(this)); + Embedding.lastEmbed = Get.postFromNode(this).nodes.root; + $.rmClass(Embedding.dialog, 'empty'); + return; + } + if ($.hasClass(this, "embedded")) { + $.rm(this.nextElementSibling); + this.textContent = '(embed)'; + } else { + $.after(this, Embedding.cb.embed(this)); + this.textContent = '(unembed)'; + } + return $.toggleClass(this, 'embedded'); + }, + embed: function(a) { + var container, el, type; + container = $.el('div'); + $.add(container, el = (type = Embedding.types[a.dataset.key]).el(a)); + el.style.cssText = type.style != null ? type.style : 'border: none; width: 640px; height: 360px;'; + return container; + }, + title: function(req, data) { + var base1, j, k, key, len, len1, link, link2, options, post, post2, ref, ref1, service, status, text, uid; + key = data.key, uid = data.uid, options = data.options, link = data.link, post = data.post; + status = req.status; + service = Embedding.types[key].title; + text = "[" + key + "] " + ((function() { + switch (status) { + case 200: + case 304: + return service.text(req.response, uid); + case 404: + return "Not Found"; + case 403: + return "Forbidden or Private"; + default: + return status + "'d"; + } + })()); + link.dataset.original = link.textContent; + link.textContent = text; + ref = post.clones; + for (j = 0, len = ref.length; j < len; j++) { + post2 = ref[j]; + ref1 = $$('a.linkify', post2.nodes.comment); + for (k = 0, len1 = ref1.length; k < len1; k++) { + link2 = ref1[k]; + if (!(link2.href === link.href)) { + continue; + } + if ((base1 = link2.dataset).original == null) { + base1.original = link2.textContent; + } + link2.textContent = text; + } + } + } + }, + ordered_types: [ + { + key: 'audio', + regExp: /\.(?:mp3|ogg|wav)(?:\?|$)/i, + style: '', + el: function(a) { + return $.el('audio', { + controls: true, + preload: 'auto', + src: a.dataset.href + }); + } + }, { + key: 'Dailymotion', + regExp: /^\w+:\/\/(?:(?:www\.)?dailymotion\.com\/(?:embed\/)?video|dai\.ly)\/([A-Za-z0-9]+)[^?]*(.*)/, + el: function(a) { + var el, options, start; + options = (start = a.dataset.options.match(/[?&](start=\d+)/)) ? "?" + start[1] : ''; + el = $.el('iframe', { + src: "//www.dailymotion.com/embed/video/" + a.dataset.uid + options + }); + el.setAttribute("allowfullscreen", "true"); + return el; + }, + title: { + api: function(uid) { + return "https://api.dailymotion.com/video/" + uid; + }, + text: function(_) { + return _.title; + } + } + }, { + key: 'Gist', + regExp: /^\w+:\/\/gist\.github\.com\/(?:[\w\-]+\/)?(\w+)/, + el: function(a) { + var content, el; + el = $.el('iframe'); + el.setAttribute('sandbox', 'allow-scripts'); + content = { + innerHTML: "" + E(a.dataset.uid) + "" + }; + el.src = E.url(content); + return el; + }, + title: { + api: function(uid) { + return "https://api.github.com/gists/" + uid; + }, + text: function(arg) { + var file, files; + files = arg.files; + for (file in files) { + if (files.hasOwnProperty(file)) { + return file; + } + } + } + } + }, { + key: 'image', + regExp: /\.(?:gif|png|jpg|jpeg|bmp)(?:\?|$)/i, + style: '', + el: function(a) { + return $.el('div', { + innerHTML: "" + }); + } + }, { + key: 'InstallGentoo', + regExp: /^\w+:\/\/paste\.installgentoo\.com\/view\/(?:raw\/|download\/|embed\/)?(\w+)/, + el: function(a) { + return $.el('iframe', { + src: "https://paste.installgentoo.com/view/embed/" + a.dataset.uid + }); + } + }, { + key: 'Twitter', + regExp: /^\w+:\/\/(?:www\.)?twitter\.com\/(\w+\/status\/\d+)/, + el: function(a) { + return $.el('iframe', { + src: "https://twitframe.com/show?url=https://twitter.com/" + a.dataset.uid + }); + } + }, { + key: 'LiveLeak', + regExp: /^\w+:\/\/(?:\w+\.)?liveleak\.com\/.*\?.*i=(\w+)/, + httpOnly: true, + el: function(a) { + var el; + el = $.el('iframe', { + src: "http://www.liveleak.com/ll_embed?i=" + a.dataset.uid + }); + el.setAttribute("allowfullscreen", "true"); + return el; + } + }, { + key: 'Pastebin', + regExp: /^\w+:\/\/(?:\w+\.)?pastebin\.com\/(?!u\/)(?:[\w\.]+\?i\=)?(\w+)/, + httpOnly: true, + el: function(a) { + var div; + return div = $.el('iframe', { + src: "http://pastebin.com/embed_iframe.php?i=" + a.dataset.uid + }); + } + }, { + key: 'Gfycat', + regExp: /^\w+:\/\/(?:www\.)?gfycat\.com\/(?:iframe\/)?(\w+)/, + el: function(a) { + var div; + return div = $.el('iframe', { + src: "//gfycat.com/iframe/" + a.dataset.uid + }); + } + }, { + key: 'SoundCloud', + regExp: /^\w+:\/\/(?:www\.)?(?:soundcloud\.com\/|snd\.sc\/)([\w\-\/]+)/, + style: 'border: 0; width: 500px; height: 400px;', + el: function(a) { + return $.el('iframe', { + src: "https://w.soundcloud.com/player/?visual=true&show_comments=false&url=https%3A%2F%2Fsoundcloud.com%2F" + (encodeURIComponent(a.dataset.uid)) + }); + }, + title: { + api: function(uid) { + return "//soundcloud.com/oembed?format=json&url=https%3A%2F%2Fsoundcloud.com%2F" + (encodeURIComponent(uid)); + }, + text: function(_) { + return _.title; + } + } + }, { + key: 'StrawPoll', + regExp: /^\w+:\/\/(?:www\.)?strawpoll\.me\/(?:embed_\d+\/)?(\d+(?:\/r)?)/, + style: 'border: 0; width: 600px; height: 406px;', + el: function(a) { + return $.el('iframe', { + src: "//strawpoll.me/embed_1/" + a.dataset.uid + }); + } + }, { + key: 'TwitchTV', + regExp: /^\w+:\/\/(?:www\.)?twitch\.tv\/(\w[^#\&\?]*)/, + style: "border: none; width: 620px; height: 378px;", + el: function(a) { + var _, channel, flashvars, id, idprefix, j, len, obj, part, ref, result, seconds, start, type; + if (result = /(\w+)\/([bcv])\/(\d+)/i.exec(a.dataset.uid)) { + _ = result[0], channel = result[1], type = result[2], id = result[3]; + idprefix = type === 'b' ? 'a' : type; + flashvars = "channel=" + channel + "&start_volume=25&auto_play=false&videoId=" + idprefix + id; + if (start = a.dataset.href.match(/\bt=(\w+)/)) { + seconds = 0; + ref = start[1].match(/\d+[hms]/g); + for (j = 0, len = ref.length; j < len; j++) { + part = ref[j]; + seconds += +part.slice(0, -1) * { + 'h': 3600, + 'm': 60, + 's': 1 + }[part.slice(-1)]; + } + flashvars += "&initial_time=" + seconds; + } + } else { + channel = (/(\w+)/.exec(a.dataset.uid))[0]; + flashvars = "channel=" + channel + "&start_volume=25&auto_play=false"; + } + obj = $.el('object', { + data: '//www-cdn.jtvnw.net/swflibs/TwitchPlayer.swf' + }); + $.extend(obj, { + innerHTML: "" + }); + obj.children[1].value = flashvars; + return obj; + } + }, { + key: 'Vocaroo', + regExp: /^\w+:\/\/(?:www\.)?vocaroo\.com\/i\/(\w+)/, + style: '', + el: function(a) { + var el, type; + el = $.el('audio', { + controls: true, + preload: 'auto' + }); + type = el.canPlayType('audio/webm') ? 'webm' : 'mp3'; + el.src = "http://vocaroo.com/media_command.php?media=" + a.dataset.uid + "&command=download_" + type; + return el; + } + }, { + key: 'Vimeo', + regExp: /^\w+:\/\/(?:www\.)?vimeo\.com\/(\d+)/, + el: function(a) { + return $.el('iframe', { + src: "//player.vimeo.com/video/" + a.dataset.uid + "?wmode=opaque" + }); + }, + title: { + api: function(uid) { + return "https://vimeo.com/api/oembed.json?url=https://vimeo.com/" + uid; + }, + text: function(_) { + return _.title; + } + } + }, { + key: 'Vine', + regExp: /^\w+:\/\/(?:www\.)?vine\.co\/v\/(\w+)/, + style: 'border: none; width: 500px; height: 500px;', + el: function(a) { + return $.el('iframe', { + src: "https://vine.co/v/" + a.dataset.uid + "/card" + }); + } + }, { + key: 'YouTube', + regExp: /^\w+:\/\/(?:youtu.be\/|[\w.]*youtube[\w.]*\/.*(?:v=|\bembed\/|\bv\/))([\w\-]{11})(.*)/, + el: function(a) { + var el, start; + start = a.dataset.options.match(/\b(?:star)?t\=(\w+)/); + if (start) { + start = start[1]; + } + if (start && !/^\d+$/.test(start)) { + start += ' 0h0m0s'; + start = 3600 * start.match(/(\d+)h/)[1] + 60 * start.match(/(\d+)m/)[1] + 1 * start.match(/(\d+)s/)[1]; + } + el = $.el('iframe', { + src: "//www.youtube.com/embed/" + a.dataset.uid + "?wmode=opaque" + (start ? '&start=' + start : '') + }); + el.setAttribute("allowfullscreen", "true"); + return el; + }, + title: { + batchSize: 50, + api: function(uids) { + var ids, key; + ids = encodeURIComponent(uids.join(',')); + key = 'AIzaSyB5_zaen_-46Uhz1xGR-lz1YoUMHqCD6CE'; + return "https://www.googleapis.com/youtube/v3/videos?part=snippet&id=" + ids + "&fields=items%28id%2Csnippet%28title%29%29&key=" + key; + }, + text: function(data, uid) { + var item, j, len, ref; + ref = data.items; + for (j = 0, len = ref.length; j < len; j++) { + item = ref[j]; + if (item.id === uid) { + return item.snippet.title; + } + } + return 'Not Found'; + } + } + }, { + key: 'Loopvid', + regExp: /^\w+:\/\/(?:www\.)?loopvid.appspot.com\/#?((?:pf|kd|lv|gd|gh|db|dx|nn|cp|wu|ig|ky|mf|pc|gc)\/[\w\-\/]+(,[\w\-\/]+)*|fc\/\w+\/\d+)/, + style: 'max-width: 80vw; max-height: 80vh;', + el: function(a) { + var _, base, el, host, j, k, len, len1, name, names, ref, ref1, type, types, url; + el = $.el('video', { + controls: true, + preload: 'auto', + loop: true + }); + ref = a.dataset.uid.match(/(\w+)\/(.*)/), _ = ref[0], host = ref[1], names = ref[2]; + types = (function() { + switch (host) { + case 'gd': + case 'wu': + case 'fc': + return ['']; + case 'gc': + return ['giant', 'fat', 'zippy']; + default: + return ['.webm', '.mp4']; + } + })(); + ref1 = names.split(','); + for (j = 0, len = ref1.length; j < len; j++) { + name = ref1[j]; + for (k = 0, len1 = types.length; k < len1; k++) { + type = types[k]; + base = "" + name + type; + url = (function() { + switch (host) { + case 'pf': + return "https://web.archive.org/web/2/http://a.pomf.se/" + base; + case 'kd': + return "http://kastden.org/loopvid/" + base; + case 'lv': + return "http://kastden.org/_loopvid_media/lv/" + base; + case 'gd': + return "https://docs.google.com/uc?export=download&id=" + base; + case 'gh': + return "https://googledrive.com/host/" + base; + case 'db': + return "https://dl.dropboxusercontent.com/u/" + base; + case 'dx': + return "https://dl.dropboxusercontent.com/" + base; + case 'nn': + return "http://naenara.eu/loopvids/" + base; + case 'cp': + return "https://copy.com/" + base; + case 'wu': + return "http://webmup.com/" + base + "/vid.webm"; + case 'ig': + return "https://i.imgur.com/" + base; + case 'ky': + return "https://kiyo.me/" + base; + case 'mf': + return "https://d.maxfile.ro/" + base; + case 'pc': + return "http://a.pomf.cat/" + base; + case 'fc': + return "//i.4cdn.org/" + base + ".webm"; + case 'gc': + return "https://" + type + ".gfycat.com/" + name + ".webm"; + } + })(); + $.add(el, $.el('source', { + src: url + })); + } + } + return el; + } + }, { + key: 'Clyp', + regExp: /^\w+:\/\/(?:www\.)?clyp\.it\/(\w+)/, + style: '', + el: function(a) { + var el, type; + el = $.el('audio', { + controls: true, + preload: 'auto' + }); + type = el.canPlayType('audio/ogg') ? 'ogg' : 'mp3'; + el.src = "https://clyp.it/" + a.dataset.uid + "." + type; + return el; + } + }, { + key: 'Loopvid-dummy', + regExp: /^\w+:\/\/(?:www\.)?loopvid.appspot.com\//, + dummy: true + }, { + key: 'MediaFire-dummy', + regExp: /^\w+:\/\/(?:www\.)?mediafire.com\//, + dummy: true + }, { + key: 'video', + regExp: /\.(?:ogv|webm|mp4)(?:\?|$)/i, + style: 'max-width: 80vw; max-height: 80vh;', + el: function(a) { + return $.el('video', { + controls: true, + preload: 'auto', + src: a.dataset.href, + loop: /^https?:\/\/i\.4cdn\.org\//.test(a.dataset.href) + }); + } + } + ] + }; + + return Embedding; + +}).call(this); + +Linkify = (function() { + var Linkify; + + Linkify = { + init: function() { + var ref; + if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Linkify']) { + return; + } + if (Conf['Comment Expansion']) { + ExpandComment.callbacks.push(this.node); + } + Callbacks.Post.push({ + name: 'Linkify', + cb: this.node + }); + Callbacks.CatalogThread.push({ + name: 'Linkify', + cb: this.catalogNode + }); + return Embedding.init(); + }, + node: function() { + var j, k, len, len1, link, links, ref; + if (this.isClone) { + return Embedding.events(this); + } + if (!Linkify.regString.test(this.info.comment)) { + return; + } + ref = $$('a[href^="http://i.4cdn.org/"], a[href^="https://i.4cdn.org/"]', this.nodes.comment); + for (j = 0, len = ref.length; j < len; j++) { + link = ref[j]; + $.addClass(link, 'linkify'); + Embedding.process(link, this); + } + links = Linkify.process(this.nodes.comment); + for (k = 0, len1 = links.length; k < len1; k++) { + link = links[k]; + Embedding.process(link, this); + } + }, + catalogNode: function() { + if (!Linkify.regString.test(this.thread.OP.info.comment)) { + return; + } + return Linkify.process(this.nodes.comment); + }, + process: function(node) { + var data, end, endNode, i, index, length, links, part1, part2, ref, ref1, result, saved, snapshot, space, test, word; + test = /[^\s"]+/g; + space = /[\s"]/; + snapshot = $.X('.//br|.//text()', node); + i = 0; + links = []; + while (node = snapshot.snapshotItem(i++)) { + data = node.data; + if (!data || node.parentElement.nodeName === "A") { + continue; + } + while (result = test.exec(data)) { + index = result.index; + endNode = node; + word = result[0]; + if ((length = index + word.length) === data.length) { + test.lastIndex = 0; + while ((saved = snapshot.snapshotItem(i++))) { + if (saved.nodeName === 'BR') { + if ((part1 = word.match(/(https?:\/\/)?([a-z\d-]+\.)*[a-z\d-]+$/i)) && (part2 = (ref = snapshot.snapshotItem(i)) != null ? (ref1 = ref.data) != null ? ref1.match(/^(\.[a-z\d-]+)*\//i) : void 0 : void 0) && (part1[0] + part2[0]).search(Linkify.regString) === 0) { + continue; + } else { + break; + } + } + endNode = saved; + data = saved.data; + if (end = space.exec(data)) { + word += data.slice(0, end.index); + test.lastIndex = length = end.index; + i--; + break; + } else { + length = data.length; + word += data; + } + } + } + if (Linkify.regString.test(word)) { + links.push(Linkify.makeRange(node, endNode, index, length)); + } + if (!(test.lastIndex && node === endNode)) { + break; + } + } + } + i = links.length; + while (i--) { + links[i] = Linkify.makeLink(links[i]); + } + return links; + }, + regString: /((https?|mailto|git|magnet|ftp|irc):([a-z\d%\/?])|([-a-z\d]+[.])+(aero|asia|biz|cat|com|coop|dance|info|int|jobs|mobi|moe|museum|name|net|org|post|pro|tel|travel|xxx|xyz|edu|gov|mil|[a-z]{2})([:\/]|(?![^\s"]))|[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}|[-\w\d.@]+@[a-z\d.-]+\.[a-z\d])/i, + makeRange: function(startNode, endNode, startOffset, endOffset) { + var range; + range = document.createRange(); + range.setStart(startNode, startOffset); + range.setEnd(endNode, endOffset); + return range; + }, + makeLink: function(range) { + var a, encodedDomain, i, t, text; + text = range.toString(); + i = text.search(Linkify.regString); + if (i > 0) { + text = text.slice(i); + while (range.startOffset + i >= range.startContainer.data.length) { + i--; + } + if (i) { + range.setStart(range.startContainer, range.startOffset + i); + } + } + i = 0; + while (/[)\]}>.,]/.test(t = text.charAt(text.length - (1 + i)))) { + if (!(/[.,]/.test(t) || (text.match(/[()\[\]{}<>]/g)).length % 2)) { + break; + } + i++; + } + if (i) { + text = text.slice(0, -i); + while (range.endOffset - i < 0) { + i--; + } + if (i) { + range.setEnd(range.endContainer, range.endOffset - i); + } + } + if (!/((mailto|magnet):|.+:\/\/)/.test(text)) { + text = (/@/.test(text) ? 'mailto:' : 'http://') + text; + } + if (encodedDomain = text.match(/^(https?:\/\/[^\/]*%[0-9a-f]{2})(.*)$/i)) { + text = encodedDomain[1].replace(/%([0-9a-f]{2})/ig, function(x, y) { + if (y === '25') { + return x; + } else { + return String.fromCharCode(parseInt(y, 16)); + } + }) + encodedDomain[2]; + } + a = $.el('a', { + className: 'linkify', + rel: 'nofollow noreferrer', + target: '_blank', + href: text + }); + $.add(a, range.extractContents()); + range.insertNode(a); + return a; + } + }; + + return Linkify; + +}).call(this); + +ArchiveLink = (function() { + var ArchiveLink; + + ArchiveLink = { + init: function() { + var div, entry, i, len, ref, ref1, type; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Archive Link'])) { + return; + } + div = $.el('div', { + textContent: 'Archive' + }); + entry = { + el: div, + order: 90, + open: function(arg) { + var ID, board, thread; + ID = arg.ID, thread = arg.thread, board = arg.board; + return !!Redirect.to('thread', { + postID: ID, + threadID: thread.ID, + boardID: board.ID + }); + }, + subEntries: [] + }; + ref1 = [['Post', 'post'], ['Name', 'name'], ['Tripcode', 'tripcode'], ['Capcode', 'capcode'], ['Subject', 'subject'], ['Filename', 'filename'], ['Image MD5', 'MD5']]; + for (i = 0, len = ref1.length; i < len; i++) { + type = ref1[i]; + entry.subEntries.push(this.createSubEntry(type[0], type[1])); + } + return Menu.menu.addEntry(entry); + }, + createSubEntry: function(text, type) { + var el, open; + el = $.el('a', { + textContent: text, + target: '_blank' + }); + open = type === 'post' ? function(arg) { + var ID, board, thread; + ID = arg.ID, thread = arg.thread, board = arg.board; + el.href = Redirect.to('thread', { + postID: ID, + threadID: thread.ID, + boardID: board.ID + }); + return true; + } : function(post) { + var value; + value = Filter[type](post); + if (!value) { + return false; + } + el.href = Redirect.to('search', { + boardID: post.board.ID, + type: type, + value: value, + isSearch: true + }); + return true; + }; + return { + el: el, + open: open + }; + } + }; + + return ArchiveLink; + +}).call(this); + +DeleteLink = (function() { + var DeleteLink; + + DeleteLink = { + auto: [{}, {}], + init: function() { + var div, fileEl, fileEntry, postEl, postEntry, ref; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Delete Link'])) { + return; + } + div = $.el('div', { + className: 'delete-link', + textContent: 'Delete' + }); + postEl = $.el('a', { + className: 'delete-post', + href: 'javascript:;' + }); + fileEl = $.el('a', { + className: 'delete-file', + href: 'javascript:;' + }); + this.nodes = { + menu: div.firstChild, + links: [postEl, fileEl] + }; + postEntry = { + el: postEl, + open: function() { + postEl.textContent = DeleteLink.linkText(false); + $.on(postEl, 'click', DeleteLink.toggle); + return true; + } + }; + fileEntry = { + el: fileEl, + open: function(arg) { + var file; + file = arg.file; + if (!file || file.isDead) { + return false; + } + fileEl.textContent = DeleteLink.linkText(true); + $.on(fileEl, 'click', DeleteLink.toggle); + return true; + } + }; + return Menu.menu.addEntry({ + el: div, + order: 40, + open: function(post) { + if (post.isDead) { + return false; + } + DeleteLink.post = post; + DeleteLink.nodes.menu.textContent = DeleteLink.menuText(); + DeleteLink.cooldown.start(post); + return true; + }, + subEntries: [postEntry, fileEntry] + }); + }, + menuText: function() { + var seconds; + if (seconds = DeleteLink.cooldown.seconds[DeleteLink.post.fullID]) { + return "Delete (" + seconds + ")"; + } else { + return 'Delete'; + } + }, + linkText: function(fileOnly) { + var text; + text = fileOnly ? 'File' : 'Post'; + if (DeleteLink.auto[+fileOnly][DeleteLink.post.fullID]) { + text = "Deleting " + (text.toLowerCase()) + "..."; + } + return text; + }, + toggle: function() { + var auto, fileOnly, post; + post = DeleteLink.post; + fileOnly = $.hasClass(this, 'delete-file'); + auto = DeleteLink.auto[+fileOnly]; + if (auto[post.fullID]) { + delete auto[post.fullID]; + } else { + auto[post.fullID] = true; + } + this.textContent = DeleteLink.linkText(fileOnly); + if (!DeleteLink.cooldown.seconds[post.fullID]) { + return DeleteLink["delete"](post, fileOnly); + } + }, + "delete": function(post, fileOnly) { + var form, link; + link = DeleteLink.nodes.links[+fileOnly]; + delete DeleteLink.auto[+fileOnly][post.fullID]; + if (post.fullID === DeleteLink.post.fullID) { + $.off(link, 'click', DeleteLink.toggle); + } + form = { + mode: 'usrdel', + onlyimgdel: fileOnly, + pwd: QR.persona.getPassword() + }; + form[post.ID] = 'delete'; + return $.ajax($.id('delform').action.replace("/" + g.BOARD + "/", "/" + post.board + "/"), { + responseType: 'document', + withCredentials: true, + onload: function() { + return DeleteLink.load(link, post, fileOnly, this.response); + }, + onerror: function() { + return DeleteLink.error(link, post); + } + }, { + form: $.formData(form) + }); + }, + load: function(link, post, fileOnly, resDoc) { + var el, msg; + link.textContent = DeleteLink.linkText(fileOnly); + if (resDoc.title === '4chan - Banned') { + el = $.el('span', { + innerHTML: "You can't delete posts because you are banned." + }); + return new Notice('warning', el, 20); + } else if (msg = resDoc.getElementById('errmsg')) { + new Notice('warning', msg.textContent, 20); + if (post.fullID === DeleteLink.post.fullID) { + $.on(link, 'click', DeleteLink.toggle); + } + if (QR.cooldown.data && Conf['Cooldown'] && /\bwait\b/i.test(msg.textContent)) { + DeleteLink.cooldown.start(post, 5); + DeleteLink.auto[+fileOnly][post.fullID] = true; + return DeleteLink.nodes.links[+fileOnly].textContent = DeleteLink.linkText(fileOnly); + } + } else { + if (!fileOnly) { + QR.cooldown["delete"](post); + } + if (resDoc.title === 'Updating index...') { + (post.origin || post).kill(fileOnly); + } + if (post.fullID === DeleteLink.post.fullID) { + return link.textContent = 'Deleted'; + } + } + }, + error: function(link, post) { + new Notice('warning', 'Connection error, please retry.', 20); + if (post.fullID === DeleteLink.post.fullID) { + return $.on(link, 'click', DeleteLink.toggle); + } + }, + cooldown: { + seconds: {}, + start: function(post, seconds) { + if (DeleteLink.cooldown.seconds[post.fullID] != null) { + return; + } + if (seconds == null) { + seconds = QR.cooldown.secondsDeletion(post); + } + if (seconds > 0) { + DeleteLink.cooldown.seconds[post.fullID] = seconds; + return DeleteLink.cooldown.count(post); + } + }, + count: function(post) { + var fileOnly, i, len, ref; + if (post.fullID === DeleteLink.post.fullID) { + DeleteLink.nodes.menu.textContent = DeleteLink.menuText(); + } + if (DeleteLink.cooldown.seconds[post.fullID] > 0 && Conf['Cooldown']) { + DeleteLink.cooldown.seconds[post.fullID]--; + setTimeout(DeleteLink.cooldown.count, 1000, post); + } else { + delete DeleteLink.cooldown.seconds[post.fullID]; + ref = [false, true]; + for (i = 0, len = ref.length; i < len; i++) { + fileOnly = ref[i]; + if (DeleteLink.auto[+fileOnly][post.fullID]) { + DeleteLink["delete"](post, fileOnly); + } + } + } + } + } + }; + + return DeleteLink; + +}).call(this); + +DownloadLink = (function() { + var DownloadLink; + + DownloadLink = { + init: function() { + var a, ref; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Download Link'])) { + return; + } + a = $.el('a', { + className: 'download-link', + textContent: 'Download file' + }); + $.on(a, 'click', ImageCommon.download); + return Menu.menu.addEntry({ + el: a, + order: 100, + open: function(arg) { + var file; + file = arg.file; + if (!file) { + return false; + } + a.href = file.url; + a.download = file.name; + return true; + } + }); + } + }; + + return DownloadLink; + +}).call(this); + +Menu = (function() { + var Menu; + + Menu = { + init: function() { + var ref; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'])) { + return; + } + this.button = $.el('a', { + className: 'menu-button', + href: 'javascript:;' + }); + $.extend(this.button, { + innerHTML: "" + }); + this.menu = new UI.Menu('post'); + Callbacks.Post.push({ + name: 'Menu', + cb: this.node + }); + return Callbacks.CatalogThread.push({ + name: 'Menu', + cb: this.catalogNode + }); + }, + node: function() { + if (this.isClone) { + Menu.makeButton(this, $('.menu-button', this.nodes.info)); + return; + } + return $.add(this.nodes.info, Menu.makeButton(this)); + }, + catalogNode: function() { + return $.after(this.nodes.icons, Menu.makeButton(this.thread.OP)); + }, + makeButton: function(post, button) { + button || (button = Menu.button.cloneNode(true)); + $.on(button, 'click', function(e) { + return Menu.menu.toggle(e, this, post); + }); + return button; + } + }; + + return Menu; + +}).call(this); + +ReportLink = (function() { + var ReportLink; + + ReportLink = { + init: function() { + var a, ref; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Report Link'])) { + return; + } + a = $.el('a', { + className: 'report-link', + href: 'javascript:;' + }); + $.on(a, 'click', ReportLink.report); + return Menu.menu.addEntry({ + el: a, + order: 10, + open: function(post) { + if (!(post.isDead || (post.thread.isDead && !post.thread.isArchived))) { + a.textContent = 'Report'; + ReportLink.url = "//sys.4chan.org/" + post.board + "/imgboard.php?mode=report&no=" + post; + if ((Conf['Use Recaptcha v1 in Reports'] && Main.jsEnabled) || d.cookie.indexOf('pass_enabled=1') >= 0) { + ReportLink.url += '&altc=1'; + ReportLink.dims = 'width=350,height=275'; + } else { + ReportLink.dims = 'width=400,height=550'; + } + } else if (Conf['Archive Report']) { + a.textContent = 'Report to archive'; + ReportLink.url = Redirect.to('report', { + boardID: post.board.ID, + postID: post.ID + }); + ReportLink.dims = 'width=700,height=475'; + } else { + ReportLink.url = ''; + } + return !!ReportLink.url; + } + }); + }, + report: function() { + var dims, id, set, url; + url = ReportLink.url, dims = ReportLink.dims; + id = Date.now(); + set = "toolbar=0,scrollbars=1,location=0,status=1,menubar=0,resizable=1," + dims; + return window.open(url, id, set); + } + }; + + return ReportLink; + +}).call(this); + +AntiAutoplay = (function() { + var AntiAutoplay; + + AntiAutoplay = { + init: function() { + var audio, i, len, ref; + if (!Conf['Disable Autoplaying Sounds']) { + return; + } + $.addClass(doc, 'anti-autoplay'); + ref = $$('audio[autoplay]', doc); + for (i = 0, len = ref.length; i < len; i++) { + audio = ref[i]; + this.stop(audio); + } + window.addEventListener('loadstart', ((function(_this) { + return function(e) { + return _this.stop(e.target); + }; + })(this)), true); + Callbacks.Post.push({ + name: 'Disable Autoplaying Sounds', + cb: this.node + }); + Callbacks.CatalogThread.push({ + name: 'Disable Autoplaying Sounds', + cb: this.node + }); + return $.ready((function(_this) { + return function() { + return _this.process(d.body); + }; + })(this)); + }, + stop: function(audio) { + if (!audio.autoplay) { + return; + } + audio.pause(); + audio.autoplay = false; + if (audio.controls) { + return; + } + audio.controls = true; + return $.addClass(audio, 'controls-added'); + }, + node: function() { + return AntiAutoplay.process(this.nodes.root); + }, + process: function(root) { + var i, iframe, j, len, len1, object, ref, ref1; + ref = $$('iframe[src*="youtube"][src*="autoplay=1"]', root); + for (i = 0, len = ref.length; i < len; i++) { + iframe = ref[i]; + iframe.src = iframe.src.replace(/\?autoplay=1&?/, '?').replace('&autoplay=1', ''); + $.addClass(iframe, 'autoplay-removed'); + } + ref1 = $$('object[data*="youtube"][data*="autoplay=1"]', root); + for (j = 0, len1 = ref1.length; j < len1; j++) { + object = ref1[j]; + object.data = object.data.replace(/\?autoplay=1&?/, '?').replace('&autoplay=1', ''); + $.addClass(object, 'autoplay-removed'); + } + } + }; + + return AntiAutoplay; + +}).call(this); + +Banner = (function() { + var Banner, + slice = [].slice; + + Banner = { + banners: ["0.jpg","1.jpg","2.jpg","4.jpg","6.jpg","7.jpg","8.jpg","9.jpg","10.jpg","11.jpg","12.jpg","13.jpg","14.jpg","16.jpg","17.jpg","18.jpg","19.jpg","20.jpg","21.jpg","22.jpg","24.jpg","25.jpg","26.jpg","28.jpg","29.jpg","33.jpg","38.jpg","39.jpg","43.jpg","44.jpg","45.jpg","46.jpg","47.jpg","52.jpg","54.jpg","57.jpg","59.jpg","60.jpg","61.jpg","64.jpg","66.jpg","67.jpg","69.jpg","71.jpg","72.jpg","76.jpg","77.jpg","81.jpg","82.jpg","83.jpg","84.jpg","88.jpg","90.jpg","91.jpg","96.jpg","98.jpg","99.jpg","100.jpg","104.jpg","106.jpg","116.jpg","119.jpg","137.jpg","140.jpg","148.jpg","149.jpg","150.jpg","154.jpg","156.jpg","157.jpg","158.jpg","159.jpg","161.jpg","162.jpg","164.jpg","165.jpg","166.jpg","167.jpg","168.jpg","169.jpg","170.jpg","171.jpg","172.jpg","173.jpg","174.jpg","175.jpg","176.jpg","178.jpg","179.jpg","180.jpg","181.jpg","182.jpg","183.jpg","186.jpg","189.jpg","190.jpg","192.jpg","193.jpg","194.jpg","197.jpg","198.jpg","200.jpg","201.jpg","202.jpg","203.jpg","205.jpg","206.jpg","207.jpg","208.jpg","210.jpg","213.jpg","214.jpg","215.jpg","216.jpg","218.jpg","219.jpg","220.jpg","221.jpg","222.jpg","223.jpg","224.jpg","227.jpg","0.png","1.png","2.png","3.png","5.png","6.png","9.png","10.png","11.png","12.png","14.png","16.png","19.png","20.png","21.png","22.png","23.png","24.png","26.png","27.png","28.png","29.png","30.png","31.png","32.png","33.png","34.png","37.png","39.png","40.png","41.png","42.png","43.png","44.png","45.png","48.png","49.png","50.png","51.png","52.png","53.png","57.png","58.png","59.png","64.png","66.png","67.png","68.png","69.png","70.png","71.png","72.png","76.png","78.png","79.png","81.png","82.png","85.png","86.png","87.png","89.png","95.png","98.png","100.png","101.png","102.png","105.png","106.png","107.png","109.png","110.png","111.png","112.png","113.png","114.png","115.png","116.png","118.png","119.png","120.png","121.png","122.png","123.png","126.png","128.png","130.png","134.png","136.png","138.png","139.png","140.png","142.png","145.png","146.png","149.png","150.png","151.png","152.png","153.png","154.png","155.png","156.png","157.png","158.png","159.png","160.png","163.png","164.png","165.png","166.png","167.png","168.png","169.png","170.png","171.png","172.png","173.png","174.png","178.png","179.png","180.png","181.png","182.png","184.png","186.png","188.png","190.png","192.png","193.png","194.png","195.png","196.png","197.png","198.png","200.png","202.png","203.png","205.png","206.png","207.png","209.png","212.png","213.png","214.png","216.png","217.png","218.png","219.png","220.png","221.png","222.png","223.png","224.png","225.png","226.png","229.png","231.png","232.png","233.png","234.png","235.png","237.png","238.png","239.png","240.png","241.png","242.png","244.png","245.png","246.png","247.png","248.png","249.png","250.png","253.png","254.png","255.png","256.png","257.png","258.png","259.png","260.png","262.png","268.png","0.gif","1.gif","2.gif","3.gif","4.gif","5.gif","6.gif","7.gif","8.gif","9.gif","10.gif","12.gif","13.gif","14.gif","15.gif","16.gif","18.gif","19.gif","20.gif","21.gif","22.gif","23.gif","24.gif","28.gif","29.gif","30.gif","33.gif","34.gif","35.gif","36.gif","37.gif","39.gif","40.gif","42.gif","44.gif","45.gif","46.gif","48.gif","50.gif","52.gif","54.gif","55.gif","57.gif","58.gif","59.gif","60.gif","61.gif","63.gif","64.gif","66.gif","67.gif","68.gif","69.gif","70.gif","72.gif","73.gif","75.gif","76.gif","77.gif","78.gif","80.gif","81.gif","82.gif","83.gif","86.gif","87.gif","88.gif","92.gif","93.gif","94.gif","95.gif","96.gif","97.gif","98.gif","99.gif","100.gif","101.gif","102.gif","103.gif","104.gif","105.gif","106.gif","108.gif","109.gif","110.gif","111.gif","112.gif","113.gif","115.gif","116.gif","117.gif","118.gif","119.gif","120.gif","122.gif","123.gif","124.gif","127.gif","129.gif","130.gif","131.gif","134.gif","135.gif","136.gif","138.gif","139.gif","141.gif","144.gif","146.gif","148.gif","149.gif","153.gif","154.gif","155.gif","157.gif","158.gif","159.gif","160.gif","161.gif","162.gif","164.gif","166.gif","167.gif","168.gif","169.gif","170.gif","171.gif","172.gif","173.gif","174.gif","175.gif","176.gif","177.gif","178.gif","181.gif","182.gif","183.gif","185.gif","186.gif","187.gif","188.gif","189.gif","190.gif","191.gif","192.gif","193.gif","195.gif","196.gif","197.gif","200.gif","201.gif","202.gif","203.gif","204.gif","205.gif","206.gif","207.gif","208.gif","209.gif","210.gif","211.gif","212.gif","213.gif","214.gif","215.gif","216.gif","217.gif","219.gif","220.gif","221.gif","222.gif","224.gif","225.gif","226.gif","227.gif","228.gif","230.gif","232.gif","233.gif","234.gif","235.gif","238.gif","240.gif","241.gif","243.gif","244.gif","245.gif","246.gif","247.gif","249.gif","250.gif","251.gif","253.gif"], + init: function() { + if (Conf['Custom Board Titles']) { + this.db = new DataBoard('customTitles', null, true); + } + $.asap((function() { + return d.body; + }), function() { + return $.asap((function() { + return $('hr'); + }), Banner.ready); + }); + if (g.BOARD.ID !== 'f') { + return Main.ready(function() { + return $.queueTask(Banner.load); + }); + } + }, + ready: function() { + var banner, children; + banner = $(".boardBanner"); + children = banner.children; + if (g.BOARD.ID !== 'f' && g.VIEW === 'thread' && Conf['Remove Thread Excerpt']) { + Banner.setTitle(children[1].textContent); + } + children[0].title = "Click to change"; + $.on(children[0], 'click', Banner.cb.toggle); + if (Conf['Custom Board Titles']) { + Banner.custom(children[1]); + if (children[2]) { + return Banner.custom(children[2]); + } + } + }, + load: function() { + var bannerCnt, img; + bannerCnt = $.id('bannerCnt'); + if (!bannerCnt.firstChild) { + img = $.el('img', { + alt: '4chan', + src: '//s.4cdn.org/image/title/' + bannerCnt.dataset.src + }); + return $.add(bannerCnt, img); + } + }, + setTitle: function(title) { + if (Unread.title != null) { + Unread.title = title; + return Unread.update(); + } else { + return d.title = title; + } + }, + cb: { + toggle: function() { + var banner, i, ref; + if (!((ref = Banner.choices) != null ? ref.length : void 0)) { + Banner.choices = Banner.banners.slice(); + } + i = Math.floor(Banner.choices.length * Math.random()); + banner = Banner.choices.splice(i, 1); + return $('img', this.parentNode).src = "//s.4cdn.org/image/title/" + banner; + }, + click: function(e) { + var base, br, j, len, name, ref; + if (!(e.ctrlKey || e.metaKey)) { + return; + } + if ((base = Banner.original)[name = this.className] == null) { + base[name] = this.cloneNode(true); + } + this.contentEditable = true; + ref = $$('br', this); + for (j = 0, len = ref.length; j < len; j++) { + br = ref[j]; + $.replace(br, $.tn('\n')); + } + return this.focus(); + }, + keydown: function(e) { + e.stopPropagation(); + if (!e.shiftKey && e.keyCode === 13) { + return this.blur(); + } + }, + blur: function() { + var br, j, len, ref; + ref = $$('br', this); + for (j = 0, len = ref.length; j < len; j++) { + br = ref[j]; + $.replace(br, $.tn('\n')); + } + if (this.textContent = this.textContent.replace(/\n*$/, '')) { + this.contentEditable = false; + return Banner.db.set({ + boardID: g.BOARD.ID, + threadID: this.className, + val: { + title: this.textContent, + orig: Banner.original[this.className].textContent + } + }); + } else { + $.rmAll(this); + $.add(this, slice.call(Banner.original[this.className].cloneNode(true).childNodes)); + return Banner.db["delete"]({ + boardID: g.BOARD.ID, + threadID: this.className + }); + } + } + }, + original: {}, + custom: function(child) { + var className, data, event, items, j, len, ref, string, string2; + className = child.className; + child.title = "Ctrl/\u2318+click to edit board " + (className.slice(5).toLowerCase()); + child.spellcheck = false; + ref = ['click', 'keydown', 'blur']; + for (j = 0, len = ref.length; j < len; j++) { + event = ref[j]; + $.on(child, event, Banner.cb[event]); + } + string = g.BOARD + "." + className; + string2 = string + ".orig"; + items = {}; + items[string] = ''; + items[string2] = child.textContent; + $.get(items, function(items) { + if (items[string]) { + Banner.db.set({ + boardID: g.BOARD.ID, + threadID: className, + val: { + title: items[string], + orig: items[string2] + } + }); + } + return $["delete"]([string, string2]); + }); + if (data = Banner.db.get({ + boardID: g.BOARD.ID, + threadID: className + })) { + if (Conf['Persistent Custom Board Titles'] || data.orig === child.textContent) { + Banner.original[className] = child.cloneNode(true); + return child.textContent = data.title; + } else { + return Banner.db["delete"]({ + boardID: g.BOARD.ID, + threadID: className + }); + } + } + } + }; + + return Banner; + +}).call(this); + +CatalogLinks = (function() { + var CatalogLinks; + + CatalogLinks = { + init: function() { + var el, input, selector; + if ((Conf['External Catalog'] || Conf['JSON Index']) && !(Conf['JSON Index'] && g.VIEW === 'index')) { + selector = (function() { + switch (g.VIEW) { + case 'thread': + case 'archive': + return '.navLinks.desktop > a'; + case 'catalog': + return '.navLinks > :first-child > a'; + case 'index': + return '#ctrl-top > a, .cataloglink > a'; + } + })(); + $.ready(function() { + var catalogLink, i, len, link, ref; + ref = $$(selector); + for (i = 0, len = ref.length; i < len; i++) { + link = ref[i]; + switch (link.pathname.replace(/\/+/g, '/')) { + case "/" + g.BOARD + "/": + if (Conf['JSON Index']) { + link.textContent = 'Index'; + } + link.href = CatalogLinks.index(); + break; + case "/" + g.BOARD + "/catalog": + link.href = CatalogLinks.catalog(); + } + if (g.VIEW === 'catalog' && Conf['JSON Index'] && Conf['Use 4chan X Catalog']) { + catalogLink = link.parentNode.cloneNode(true); + catalogLink.firstElementChild.textContent = '4chan X Catalog'; + catalogLink.firstElementChild.href = CatalogLinks.catalog(); + $.after(link.parentNode, [$.tn(' '), catalogLink]); + } + } + }); + } + if (Conf['JSON Index'] && Conf['Use 4chan X Catalog']) { + Callbacks.Post.push({ + name: 'Catalog Link Rewrite', + cb: this.node + }); + Callbacks.CatalogThread.push({ + name: 'Catalog Link Rewrite', + cb: this.node + }); + } + if (Conf['Catalog Links']) { + CatalogLinks.el = el = UI.checkbox('Header catalog links', 'Catalog Links'); + el.id = 'toggleCatalog'; + input = $('input', el); + $.on(input, 'change', this.toggle); + $.sync('Header catalog links', CatalogLinks.set); + return Header.menu.addEntry({ + el: el, + order: 95 + }); + } + }, + node: function() { + var a, i, len, m, ref; + ref = $$('a', this.nodes.comment); + for (i = 0, len = ref.length; i < len; i++) { + a = ref[i]; + if (m = a.href.match(/^https?:\/\/boards\.4chan\.org\/([^\/]+)\/catalog(#s=.*)?/)) { + a.href = "//boards.4chan.org/" + m[1] + "/" + (m[2] || '#catalog'); + } + } + }, + initBoardList: function() { + if (!CatalogLinks.el) { + return; + } + return CatalogLinks.set(Conf['Header catalog links']); + }, + toggle: function() { + $.event('CloseMenu'); + $.set('Header catalog links', this.checked); + return CatalogLinks.set(this.checked); + }, + set: function(useCatalog) { + var a, board, i, len, ref, ref1; + ref = $$('a:not([data-only])', Header.boardList).concat($$('a', Header.bottomBoardList)); + for (i = 0, len = ref.length; i < len; i++) { + a = ref[i]; + if (((ref1 = a.hostname) !== 'boards.4chan.org' && ref1 !== 'catalog.neet.tv') || !(board = a.pathname.split('/')[1]) || (board === 'f' || board === 'status' || board === '4chan') || a.pathname.split('/')[2] === 'archive' || $.hasClass(a, 'external')) { + continue; + } + a.href = useCatalog ? CatalogLinks.catalog(board) : "/" + board + "/"; + if (a.dataset.indexOptions && a.hostname === 'boards.4chan.org' && a.pathname.split('/')[2] === '') { + a.href += (a.hash ? '/' : '#') + a.dataset.indexOptions; + } + } + CatalogLinks.el.title = "Turn catalog links " + (useCatalog ? 'off' : 'on') + "."; + return $('input', CatalogLinks.el).checked = useCatalog; + }, + catalog: function(board) { + if (board == null) { + board = g.BOARD.ID; + } + if (Conf['External Catalog'] && (board === 'a' || board === 'c' || board === 'g' || board === 'biz' || board === 'k' || board === 'm' || board === 'o' || board === 'p' || board === 'v' || board === 'vg' || board === 'vr' || board === 'w' || board === 'wg' || board === 'cm' || board === '3' || board === 'adv' || board === 'an' || board === 'asp' || board === 'cgl' || board === 'ck' || board === 'co' || board === 'diy' || board === 'fa' || board === 'fit' || board === 'gd' || board === 'int' || board === 'jp' || board === 'lit' || board === 'mlp' || board === 'mu' || board === 'n' || board === 'out' || board === 'po' || board === 'sci' || board === 'sp' || board === 'tg' || board === 'toy' || board === 'trv' || board === 'tv' || board === 'vp' || board === 'wsg' || board === 'x' || board === 'f' || board === 'pol' || board === 's4s' || board === 'lgbt')) { + return "http://catalog.neet.tv/" + board + "/"; + } else if (Conf['JSON Index'] && Conf['Use 4chan X Catalog']) { + if (g.BOARD.ID === board && g.VIEW === 'index') { + return '#catalog'; + } else { + return "/" + board + "/#catalog"; + } + } else { + return "/" + board + "/catalog"; + } + }, + index: function(board) { + if (board == null) { + board = g.BOARD.ID; + } + if (Conf['JSON Index'] && board !== 'f') { + if (g.BOARD.ID === board && g.VIEW === 'index') { + return '#index'; + } else { + return "/" + board + "/#index"; + } + } else { + return "/" + board + "/"; + } + } + }; + + return CatalogLinks; + +}).call(this); + +CustomCSS = (function() { + var CustomCSS; + + CustomCSS = { + init: function() { + if (!Conf['Custom CSS']) { + return; + } + return this.addStyle(); + }, + addStyle: function() { + return this.style = $.addStyle(Conf['usercss'], 'custom-css', '#fourchanx-css'); + }, + rmStyle: function() { + if (this.style) { + $.rm(this.style); + return delete this.style; + } + }, + update: function() { + if (!this.style) { + return this.addStyle(); + } + return this.style.textContent = Conf['usercss']; + } + }; + + return CustomCSS; + +}).call(this); + +ExpandComment = (function() { + var ExpandComment; + + ExpandComment = { + init: function() { + if (g.VIEW !== 'index' || !Conf['Comment Expansion'] || Conf['JSON Index']) { + return; + } + if (g.BOARD.ID === 'g') { + this.callbacks.push(Fourchan.code); + } + if (g.BOARD.ID === 'sci') { + this.callbacks.push(Fourchan.math); + } + return Callbacks.Post.push({ + name: 'Comment Expansion', + cb: this.node + }); + }, + node: function() { + var a; + if (a = $('.abbr > a:not([onclick])', this.nodes.comment)) { + return $.on(a, 'click', ExpandComment.cb); + } + }, + callbacks: [], + cb: function(e) { + e.preventDefault(); + return ExpandComment.expand(Get.postFromNode(this)); + }, + expand: function(post) { + var a; + if (post.nodes.longComment && !post.nodes.longComment.parentNode) { + $.replace(post.nodes.shortComment, post.nodes.longComment); + post.nodes.comment = post.nodes.longComment; + return; + } + if (!(a = $('.abbr > a', post.nodes.comment))) { + return; + } + a.textContent = "Post No." + post + " Loading..."; + return $.cache("//a.4cdn.org" + (a.pathname.split(/\/+/).splice(0, 4).join('/')) + ".json", function() { + return ExpandComment.parse(this, a, post); + }); + }, + contract: function(post) { + var a; + if (!post.nodes.shortComment) { + return; + } + a = $('.abbr > a', post.nodes.shortComment); + a.textContent = 'here'; + $.replace(post.nodes.longComment, post.nodes.shortComment); + return post.nodes.comment = post.nodes.shortComment; + }, + parse: function(req, a, post) { + var callback, clone, comment, href, i, j, k, len, len1, len2, postObj, posts, quote, ref, ref1, spoilerRange, status; + status = req.status; + if (status !== 200 && status !== 304) { + a.textContent = "Error " + req.statusText + " (" + status + ")"; + return; + } + posts = req.response.posts; + if (spoilerRange = posts[0].custom_spoiler) { + Build.spoilerRange[g.BOARD] = spoilerRange; + } + for (i = 0, len = posts.length; i < len; i++) { + postObj = posts[i]; + if (postObj.no === post.ID) { + break; + } + } + if (postObj.no !== post.ID) { + a.textContent = "Post No." + post + " not found."; + return; + } + comment = post.nodes.comment; + clone = comment.cloneNode(false); + clone.innerHTML = postObj.com; + ref = $$('.quotelink', clone); + for (j = 0, len1 = ref.length; j < len1; j++) { + quote = ref[j]; + href = quote.getAttribute('href'); + if (href[0] === '/') { + continue; + } + if (href[0] === '#') { + quote.href = "" + (a.pathname.split(/\/+/).splice(0, 4).join('/')) + href; + } else { + quote.href = (a.pathname.split(/\/+/).splice(0, 3).join('/')) + "/" + href; + } + } + post.nodes.shortComment = comment; + $.replace(comment, clone); + post.nodes.comment = post.nodes.longComment = clone; + post.parseComment(); + post.parseQuotes(); + ref1 = ExpandComment.callbacks; + for (k = 0, len2 = ref1.length; k < len2; k++) { + callback = ref1[k]; + callback.call(post); + } + } + }; + + return ExpandComment; + +}).call(this); + +ExpandThread = (function() { + var ExpandThread, + slice = [].slice; + + ExpandThread = { + statuses: {}, + init: function() { + if (g.VIEW === 'thread' || !Conf['Thread Expansion']) { + return; + } + if (Conf['JSON Index']) { + return $.on(d, 'IndexRefresh', this.onIndexRefresh); + } else { + return Callbacks.Thread.push({ + name: 'Expand Thread', + cb: function() { + return ExpandThread.setButton(this); + } + }); + } + }, + setButton: function(thread) { + var a; + if (!(a = $.x('following-sibling::*[contains(@class,"summary")][1]', thread.OP.nodes.root))) { + return; + } + a.textContent = Build.summaryText.apply(Build, ['+'].concat(slice.call(a.textContent.match(/\d+/g)))); + a.style.cursor = 'pointer'; + return $.on(a, 'click', ExpandThread.cbToggle); + }, + disconnect: function(refresh) { + var ref, ref1, status, threadID; + if (g.VIEW === 'thread' || !Conf['Thread Expansion']) { + return; + } + ref = ExpandThread.statuses; + for (threadID in ref) { + status = ref[threadID]; + if ((ref1 = status.req) != null) { + ref1.abort(); + } + delete ExpandThread.statuses[threadID]; + } + if (!refresh) { + return $.off(d, 'IndexRefresh', this.onIndexRefresh); + } + }, + onIndexRefresh: function() { + ExpandThread.disconnect(true); + return g.BOARD.threads.forEach(function(thread) { + return ExpandThread.setButton(thread); + }); + }, + cbToggle: function(e) { + if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0) { + return; + } + e.preventDefault(); + return ExpandThread.toggle(Get.threadFromNode(this)); + }, + toggle: function(thread) { + var a, threadRoot; + threadRoot = thread.OP.nodes.root.parentNode; + if (!(a = $('.summary', threadRoot))) { + return; + } + if (thread.ID in ExpandThread.statuses) { + return ExpandThread.contract(thread, a, threadRoot); + } else { + return ExpandThread.expand(thread, a); + } + }, + expand: function(thread, a) { + var status; + ExpandThread.statuses[thread] = status = {}; + a.textContent = Build.summaryText.apply(Build, ['...'].concat(slice.call(a.textContent.match(/\d+/g)))); + return status.req = $.cache("//a.4cdn.org/" + thread.board + "/thread/" + thread + ".json", function() { + delete status.req; + return ExpandThread.parse(this, thread, a); + }); + }, + contract: function(thread, a, threadRoot) { + var filesCount, i, inlined, len, num, postsCount, replies, reply, status; + status = ExpandThread.statuses[thread]; + delete ExpandThread.statuses[thread]; + if (status.req) { + status.req.abort(); + if (a) { + a.textContent = Build.summaryText.apply(Build, ['+'].concat(slice.call(a.textContent.match(/\d+/g)))); + } + return; + } + replies = $$('.thread > .replyContainer', threadRoot); + if (!Conf['JSON Index'] || Conf['Show Replies']) { + num = (function() { + if (thread.isSticky) { + return 1; + } else { + switch (g.BOARD.ID) { + case 'b': + case 'vg': + return 3; + case 't': + return 1; + default: + return 5; + } + } + })(); + replies = replies.slice(0, -num); + } + postsCount = 0; + filesCount = 0; + for (i = 0, len = replies.length; i < len; i++) { + reply = replies[i]; + if (Conf['Quote Inlining']) { + while (inlined = $('.inlined', reply)) { + inlined.click(); + } + } + postsCount++; + if ('file' in Get.postFromRoot(reply)) { + filesCount++; + } + $.rm(reply); + } + return a.textContent = Build.summaryText('+', postsCount, filesCount); + }, + parse: function(req, thread, a) { + var filesCount, i, len, post, postData, posts, postsCount, postsRoot, ref, ref1, root; + if ((ref = req.status) !== 200 && ref !== 304) { + a.textContent = "Error " + req.statusText + " (" + req.status + ")"; + return; + } + Build.spoilerRange[thread.board] = req.response.posts[0].custom_spoiler; + posts = []; + postsRoot = []; + filesCount = 0; + ref1 = req.response.posts; + for (i = 0, len = ref1.length; i < len; i++) { + postData = ref1[i]; + if (postData.no === thread.ID) { + continue; + } + if ((post = thread.posts[postData.no]) && !post.isFetchedQuote) { + if ('file' in post) { + filesCount++; + } + postsRoot.push(post.nodes.root); + continue; + } + root = Build.postFromObject(postData, thread.board.ID); + post = new Post(root, thread, thread.board); + if ('file' in post) { + filesCount++; + } + posts.push(post); + postsRoot.push(root); + } + Main.callbackNodes('Post', posts); + $.after(a, postsRoot); + $.event('PostsInserted'); + postsCount = postsRoot.length; + return a.textContent = Build.summaryText('-', postsCount, filesCount); + } + }; + + return ExpandThread; + +}).call(this); + +FileInfo = (function() { + var FileInfo; + + FileInfo = { + init: function() { + var ref; + if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['File Info Formatting']) { + return; + } + return Callbacks.Post.push({ + name: 'File Info Formatting', + cb: this.node + }); + }, + node: function() { + var info, oldInfo; + if (!this.file || this.isClone) { + return; + } + oldInfo = $.el('span', { + className: 'fileText-original' + }); + $.prepend(this.file.link.parentNode, oldInfo); + $.add(oldInfo, [this.file.link.previousSibling, this.file.link, this.file.link.nextSibling]); + info = $.el('span', { + className: 'file-info' + }); + FileInfo.format(Conf['fileInfo'], this, info); + return $.prepend(this.file.text, info); + }, + format: function(formatString, post, outputNode) { + var output; + output = []; + formatString.replace(/%(.)|[^%]+/g, function(s, c) { + output.push(c in FileInfo.formatters ? FileInfo.formatters[c].call(post) : { + innerHTML: E(s) + }); + return ''; + }); + return $.extend(outputNode, { + innerHTML: E.cat(output) + }); + }, + formatters: { + t: function() { + return { + innerHTML: E(this.file.url.match(/[^/]*$/)[0]) + }; + }, + T: function() { + return { + innerHTML: "" + (FileInfo.formatters.t.call(this)).innerHTML + "" + }; + }, + l: function() { + return { + innerHTML: "" + (FileInfo.formatters.n.call(this)).innerHTML + "" + }; + }, + L: function() { + return { + innerHTML: "" + (FileInfo.formatters.N.call(this)).innerHTML + "" + }; + }, + n: function() { + var fullname, shortname; + fullname = this.file.name; + shortname = Build.shortFilename(this.file.name, this.isReply); + if (fullname === shortname) { + return { + innerHTML: E(fullname) + }; + } else { + return { + innerHTML: "" + E(shortname) + "" + E(fullname) + "" + }; + } + }, + N: function() { + return { + innerHTML: E(this.file.name) + }; + }, + p: function() { + return { + innerHTML: ((this.file.isSpoiler) ? "Spoiler, " : "") + }; + }, + s: function() { + return { + innerHTML: E(this.file.size) + }; + }, + B: function() { + return { + innerHTML: E(Math.round(this.file.sizeInBytes)) + " Bytes" + }; + }, + K: function() { + return { + innerHTML: E(Math.round(this.file.sizeInBytes/1024)) + " KB" + }; + }, + M: function() { + return { + innerHTML: E(Math.round(this.file.sizeInBytes/1048576*100)/100) + " MB" + }; + }, + r: function() { + return { + innerHTML: E(this.file.dimensions || "PDF") + }; + }, + g: function() { + return { + innerHTML: ((this.file.tag) ? ", " + E(this.file.tag) : "") + }; + }, + '%': function() { + return { + innerHTML: "%" + }; + } + } + }; + + return FileInfo; + +}).call(this); + +Flash = (function() { + var Flash; + + Flash = { + init: function() { + if (g.BOARD.ID === 'f' && Conf['Enable Native Flash Embedding']) { + return $.ready(Flash.initReady); + } + }, + initReady: function() { + if ($.hasStorage) { + return $.global(function() { + if (JSON.parse(localStorage['4chan-settings'] || '{}').disableAll) { + return window.SWFEmbed.init(); + } + }); + } else { + if (g.VIEW === 'thread') { + $.global(function() { + return window.Main.tid = location.pathname.split(/\/+/)[3]; + }); + } + return $.global(function() { + return window.SWFEmbed.init(); + }); + } + } + }; + + return Flash; + +}).call(this); + +Fourchan = (function() { + var Fourchan; + + Fourchan = { + init: function() { + var ref; + if ((ref = g.VIEW) !== 'index' && ref !== 'thread') { + return; + } + if (g.BOARD.ID === 'g') { + $.on(window, 'prettyprint:cb', function(e) { + var post, pre; + if (!(post = g.posts[e.detail.ID])) { + return; + } + if (!(pre = $$('.prettyprint', post.nodes.comment)[e.detail.i])) { + return; + } + if (!$.hasClass(pre, 'prettyprinted')) { + pre.innerHTML = e.detail.html; + return $.addClass(pre, 'prettyprinted'); + } + }); + $.globalEval('window.addEventListener(\'prettyprint\', function(e) {\n window.dispatchEvent(new CustomEvent(\'prettyprint:cb\', {\n detail: {\n ID: e.detail.ID,\n i: e.detail.i,\n html: prettyPrintOne(e.detail.html)\n }\n }));\n}, false);'); + Callbacks.Post.push({ + name: 'Parse /g/ code', + cb: this.code + }); + } + if (g.BOARD.ID === 'sci') { + $.global(function() { + return window.addEventListener('mathjax', function(e) { + if (window.MathJax) { + return window.MathJax.Hub.Queue(['Typeset', window.MathJax.Hub, e.target]); + } else { + if (!document.querySelector('script[src^="//cdn.mathjax.org/"]')) { + window.loadMathJax(); + window.loadMathJax = function() {}; + } + if (!e.target.classList.contains('postMessage')) { + return document.querySelector('script[src^="//cdn.mathjax.org/"]').addEventListener('load', function() { + return window.MathJax.Hub.Queue(['Typeset', window.MathJax.Hub, e.target]); + }, false); + } + } + }, false); + }); + Callbacks.Post.push({ + name: 'Parse /sci/ math', + cb: this.math + }); + Callbacks.CatalogThread.push({ + name: 'Parse /sci/ math', + cb: this.math + }); + } + return Main.ready(function() { + return $.global(function() { + var j, len, node, ref1; + window.clickable_ids = false; + ref1 = document.querySelectorAll('.posteruid, .capcode'); + for (j = 0, len = ref1.length; j < len; j++) { + node = ref1[j]; + node.removeEventListener('click', window.idClick, false); + } + }); + }); + }, + code: function() { + if (this.isClone) { + return; + } + return $.ready((function(_this) { + return function() { + var i, j, len, pre, ref; + ref = $$('.prettyprint', _this.nodes.comment); + for (i = j = 0, len = ref.length; j < len; i = ++j) { + pre = ref[i]; + if (!$.hasClass(pre, 'prettyprinted')) { + $.event('prettyprint', { + ID: _this.fullID, + i: i, + html: pre.innerHTML + }, window); + } + } + }; + })(this)); + }, + math: function() { + var cb, j, len, wbr, wbrs; + if (!/\[(math|eqn)\]/.test(this.nodes.comment.textContent)) { + return; + } + if ((wbrs = $$('wbr', this.nodes.comment)).length) { + for (j = 0, len = wbrs.length; j < len; j++) { + wbr = wbrs[j]; + $.rm(wbr); + } + this.nodes.comment.normalize(); + } + cb = (function(_this) { + return function() { + if (!doc.contains(_this.nodes.comment)) { + return; + } + $.off(d, 'PostsInserted', cb); + return $.event('mathjax', null, _this.nodes.comment); + }; + })(this); + $.on(d, 'PostsInserted', cb); + return cb(); + } + }; + + return Fourchan; + +}).call(this); + +IDColor = (function() { + var IDColor; + + IDColor = { + init: function() { + var ref; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Color User IDs'])) { + return; + } + this.ids = { + Heaven: [0, 0, 0, '#fff'] + }; + return Callbacks.Post.push({ + name: 'Color User IDs', + cb: this.node + }); + }, + node: function() { + var rgb, span, style, uid; + if (this.isClone || !((uid = this.info.uniqueID) && (span = $('span.hand', this.nodes.uniqueID)))) { + return; + } + rgb = IDColor.ids[uid] || IDColor.compute(uid); + style = span.style; + style.color = rgb[3]; + style.backgroundColor = "rgb(" + rgb[0] + "," + rgb[1] + "," + rgb[2] + ")"; + return $.addClass(span, 'painted'); + }, + compute: function(uid) { + var hash, rgb; + hash = IDColor.hash(uid); + rgb = [(hash >> 24) & 0xFF, (hash >> 16) & 0xFF, (hash >> 8) & 0xFF]; + rgb.push((rgb[0] * 0.299 + rgb[1] * 0.587 + rgb[2] * 0.114) > 125 ? '#000' : '#fff'); + return this.ids[uid] = rgb; + }, + hash: function(uid) { + var i, msg; + msg = 0; + i = 0; + while (i < 8) { + msg = (msg << 5) - msg + uid.charCodeAt(i++); + } + return msg; + } + }; + + return IDColor; + +}).call(this); + +IDHighlight = (function() { + var IDHighlight; + + IDHighlight = { + init: function() { + var ref; + if ((ref = g.VIEW) !== 'index' && ref !== 'thread') { + return; + } + return Callbacks.Post.push({ + name: 'Highlight by User ID', + cb: this.node + }); + }, + uniqueID: null, + node: function() { + if (this.nodes.uniqueID) { + $.on(this.nodes.uniqueID, 'click', IDHighlight.click(this)); + } + if (this.nodes.capcode) { + $.on(this.nodes.capcode, 'click', IDHighlight.click(this)); + } + if (!this.isClone) { + return IDHighlight.set(this); + } + }, + set: function(post) { + var match; + match = (post.info.uniqueID || post.info.capcode) === IDHighlight.uniqueID; + return $[match ? 'addClass' : 'rmClass'](post.nodes.post, 'highlight'); + }, + click: function(post) { + return function() { + var uniqueID; + uniqueID = post.info.uniqueID || post.info.capcode; + IDHighlight.uniqueID = IDHighlight.uniqueID === uniqueID ? null : uniqueID; + return g.posts.forEach(IDHighlight.set); + }; + } + }; + + return IDHighlight; + +}).call(this); + +Keybinds = (function() { + var Keybinds; + + Keybinds = { + init: function() { + var hotkey, init; + if (!Conf['Keybinds']) { + return; + } + for (hotkey in Config.hotkeys) { + $.sync(hotkey, Keybinds.sync); + } + init = function() { + var i, len, node, ref; + $.off(d, '4chanXInitFinished', init); + $.on(d, 'keydown', Keybinds.keydown); + ref = $$('[accesskey]'); + for (i = 0, len = ref.length; i < len; i++) { + node = ref[i]; + node.removeAttribute('accesskey'); + } + }; + return $.on(d, '4chanXInitFinished', init); + }, + sync: function(key, hotkey) { + return Conf[hotkey] = key; + }, + keydown: function(e) { + var form, i, key, len, notification, notifications, op, ref, ref1, ref2, ref3, ref4, ref5, searchInput, target, thread, threadRoot; + if (!(key = Keybinds.keyCode(e))) { + return; + } + target = e.target; + if ((ref = target.nodeName) === 'INPUT' || ref === 'TEXTAREA') { + if (!(/(Esc|Alt|Ctrl|Meta|Shift\+\w{2,})/.test(key) && !/^Alt\+(\d|Up|Down|Left|Right)$/.test(key))) { + return; + } + } + if (!(((ref1 = g.VIEW) !== 'index' && ref1 !== 'thread') || g.VIEW === 'index' && Conf['JSON Index'] && Conf['Index Mode'] === 'catalog' || g.VIEW === 'index' && g.BOARD.ID === 'f')) { + threadRoot = Nav.getThread(); + if (op = $('.op', threadRoot)) { + thread = Get.postFromNode(op).thread; + } + } + switch (key) { + case Conf['Toggle board list']: + if (!Conf['Custom Board Navigation']) { + return; + } + Header.toggleBoardList(); + break; + case Conf['Toggle header']: + Header.toggleBarVisibility(); + break; + case Conf['Open empty QR']: + if (!QR.postingIsEnabled) { + return; + } + Keybinds.qr(); + break; + case Conf['Open QR']: + if (!(QR.postingIsEnabled && threadRoot)) { + return; + } + Keybinds.qr(threadRoot); + break; + case Conf['Open settings']: + Settings.open(); + break; + case Conf['Close']: + if (Settings.dialog) { + Settings.close(); + } else if ((notifications = $$('.notification')).length) { + for (i = 0, len = notifications.length; i < len; i++) { + notification = notifications[i]; + $('.close', notification).click(); + } + } else if (QR.nodes && !(QR.nodes.el.hidden || window.getComputedStyle(QR.nodes.form).display === 'none')) { + if (Conf['Persistent QR']) { + QR.hide(); + } else { + QR.close(); + } + } else if (Embedding.lastEmbed) { + Embedding.closeFloat(); + } else { + return; + } + break; + case Conf['Spoiler tags']: + if (target.nodeName !== 'TEXTAREA') { + return; + } + Keybinds.tags('spoiler', target); + break; + case Conf['Code tags']: + if (target.nodeName !== 'TEXTAREA') { + return; + } + Keybinds.tags('code', target); + break; + case Conf['Eqn tags']: + if (target.nodeName !== 'TEXTAREA') { + return; + } + Keybinds.tags('eqn', target); + break; + case Conf['Math tags']: + if (target.nodeName !== 'TEXTAREA') { + return; + } + Keybinds.tags('math', target); + break; + case Conf['SJIS tags']: + if (target.nodeName !== 'TEXTAREA') { + return; + } + Keybinds.tags('sjis', target); + break; + case Conf['Toggle sage']: + if (!(QR.nodes && !QR.nodes.el.hidden)) { + return; + } + Keybinds.sage(); + break; + case Conf['Submit QR']: + if (!(QR.nodes && !QR.nodes.el.hidden)) { + return; + } + if (!QR.status()) { + QR.submit(); + } + break; + case Conf['Update']: + switch (g.VIEW) { + case 'thread': + if (!Conf['Thread Updater']) { + return; + } + ThreadUpdater.update(); + break; + case 'index': + if (!(Conf['JSON Index'] && g.BOARD.ID !== 'f')) { + return; + } + Index.update(); + break; + default: + return; + } + break; + case Conf['Watch']: + if (!(ThreadWatcher.enabled && thread)) { + return; + } + ThreadWatcher.toggle(thread); + break; + case Conf['Update thread watcher']: + if (!ThreadWatcher.enabled) { + return; + } + ThreadWatcher.buttonFetchAll(); + break; + case Conf['Expand image']: + if (!(ImageExpand.enabled && threadRoot)) { + return; + } + Keybinds.img(threadRoot); + break; + case Conf['Expand images']: + if (!(ImageExpand.enabled && threadRoot)) { + return; + } + Keybinds.img(threadRoot, true); + break; + case Conf['Open Gallery']: + if (!Gallery.enabled) { + return; + } + Gallery.cb.toggle(); + break; + case Conf['fappeTyme']: + if (!(Conf['Fappe Tyme'] && ((ref2 = g.VIEW) === 'index' || ref2 === 'thread'))) { + return; + } + FappeTyme.toggle('fappe'); + break; + case Conf['werkTyme']: + if (!(Conf['Werk Tyme'] && ((ref3 = g.VIEW) === 'index' || ref3 === 'thread'))) { + return; + } + FappeTyme.toggle('werk'); + break; + case Conf['Front page']: + if (Conf['JSON Index'] && g.VIEW === 'index' && g.BOARD.ID !== 'f') { + Index.userPageNav(1); + } else { + window.location = "/" + g.BOARD + "/"; + } + break; + case Conf['Open front page']: + $.open("/" + g.BOARD + "/"); + break; + case Conf['Next page']: + if (!(g.VIEW === 'index' && g.BOARD.ID !== 'f')) { + return; + } + if (Conf['JSON Index']) { + if ((ref4 = Conf['Index Mode']) !== 'paged' && ref4 !== 'infinite') { + return; + } + $('.next button', Index.pagelist).click(); + } else { + if (form = $('.next form')) { + window.location = form.action; + } + } + break; + case Conf['Previous page']: + if (!(g.VIEW === 'index' && g.BOARD.ID !== 'f')) { + return; + } + if (Conf['JSON Index']) { + if ((ref5 = Conf['Index Mode']) !== 'paged' && ref5 !== 'infinite') { + return; + } + $('.prev button', Index.pagelist).click(); + } else { + if (form = $('.prev form')) { + window.location = form.action; + } + } + break; + case Conf['Search form']: + if (!(g.VIEW === 'index' && g.BOARD.ID !== 'f')) { + return; + } + searchInput = Conf['JSON Index'] ? Index.searchInput : $.id('search-box'); + Header.scrollToIfNeeded(searchInput); + searchInput.focus(); + break; + case Conf['Paged mode']: + if (!(Conf['JSON Index'] && g.BOARD.ID !== 'f')) { + return; + } + window.location = g.VIEW === 'index' ? '#paged' : "/" + g.BOARD + "/#paged"; + break; + case Conf['Infinite scrolling mode']: + if (!(Conf['JSON Index'] && g.BOARD.ID !== 'f')) { + return; + } + window.location = g.VIEW === 'index' ? '#infinite' : "/" + g.BOARD + "/#infinite"; + break; + case Conf['All pages mode']: + if (!(Conf['JSON Index'] && g.BOARD.ID !== 'f')) { + return; + } + window.location = g.VIEW === 'index' ? '#all-pages' : "/" + g.BOARD + "/#all-pages"; + break; + case Conf['Open catalog']: + if (g.BOARD.ID === 'f') { + return; + } + window.location = CatalogLinks.catalog(); + break; + case Conf['Cycle sort type']: + if (!(Conf['JSON Index'] && g.VIEW === 'index' && g.BOARD.ID !== 'f')) { + return; + } + Index.cycleSortType(); + break; + case Conf['Next thread']: + if (!(g.VIEW === 'index' && threadRoot)) { + return; + } + Nav.scroll(+1); + break; + case Conf['Previous thread']: + if (!(g.VIEW === 'index' && threadRoot)) { + return; + } + Nav.scroll(-1); + break; + case Conf['Expand thread']: + if (!(g.VIEW === 'index' && threadRoot)) { + return; + } + ExpandThread.toggle(thread); + break; + case Conf['Open thread']: + if (!(g.VIEW === 'index' && threadRoot)) { + return; + } + Keybinds.open(thread); + break; + case Conf['Open thread tab']: + if (!(g.VIEW === 'index' && threadRoot)) { + return; + } + Keybinds.open(thread, true); + break; + case Conf['Next reply']: + if (!threadRoot) { + return; + } + Keybinds.hl(+1, threadRoot); + break; + case Conf['Previous reply']: + if (!threadRoot) { + return; + } + Keybinds.hl(-1, threadRoot); + break; + case Conf['Deselect reply']: + if (!threadRoot) { + return; + } + Keybinds.hl(0, threadRoot); + break; + case Conf['Hide']: + if (!thread) { + return; + } + if (ThreadHiding.db) { + ThreadHiding.toggle(thread); + } + break; + case Conf['Previous Post Quoting You']: + if (!(threadRoot && QuoteYou.db)) { + return; + } + QuoteYou.cb.seek('preceding'); + break; + case Conf['Next Post Quoting You']: + if (!(threadRoot && QuoteYou.db)) { + return; + } + QuoteYou.cb.seek('following'); + break; + default: + return; + } + e.preventDefault(); + return e.stopPropagation(); + }, + keyCode: function(e) { + var kc, key; + key = (function() { + switch (kc = e.keyCode) { + case 8: + return ''; + case 13: + return 'Enter'; + case 27: + return 'Esc'; + case 32: + return 'Space'; + case 37: + return 'Left'; + case 38: + return 'Up'; + case 39: + return 'Right'; + case 40: + return 'Down'; + case 188: + return 'Comma'; + case 190: + return 'Period'; + case 191: + return 'Slash'; + case 59: + case 186: + return 'Semicolon'; + default: + if ((48 <= kc && kc <= 57) || (65 <= kc && kc <= 90)) { + return String.fromCharCode(kc).toLowerCase(); + } else if ((96 <= kc && kc <= 105)) { + return String.fromCharCode(kc - 48).toLowerCase(); + } else { + return null; + } + } + })(); + if (key) { + if (e.altKey) { + key = 'Alt+' + key; + } + if (e.ctrlKey) { + key = 'Ctrl+' + key; + } + if (e.metaKey) { + key = 'Meta+' + key; + } + if (e.shiftKey) { + key = 'Shift+' + key; + } + } + return key; + }, + qr: function(thread) { + QR.open(); + if (thread != null) { + QR.quote.call($('input', $('.post.highlight', thread) || thread)); + } + return QR.nodes.com.focus(); + }, + tags: function(tag, ta) { + var range, selEnd, selStart, supported, value; + supported = (function() { + switch (tag) { + case 'spoiler': + return !!$('.postForm input[name=spoiler]'); + case 'code': + return g.BOARD.ID === 'g'; + case 'math': + case 'eqn': + return g.BOARD.ID === 'sci'; + case 'sjis': + return g.BOARD.ID === 'jp'; + } + })(); + if (!supported) { + new Notice('warning', "[" + tag + "] tags are not supported on /" + g.BOARD + "/.", 20); + } + value = ta.value; + selStart = ta.selectionStart; + selEnd = ta.selectionEnd; + ta.value = value.slice(0, selStart) + ("[" + tag + "]") + value.slice(selStart, selEnd) + ("[/" + tag + "]") + value.slice(selEnd); + range = ("[" + tag + "]").length + selEnd; + ta.setSelectionRange(range, range); + return $.event('input', null, ta); + }, + sage: function() { + var isSage; + isSage = /sage/i.test(QR.nodes.email.value); + return QR.nodes.email.value = isSage ? "" : "sage"; + }, + img: function(thread, all) { + var post; + if (all) { + return ImageExpand.cb.toggleAll(); + } else { + post = Get.postFromNode($('.post.highlight', thread) || $('.op', thread)); + return ImageExpand.toggle(post); + } + }, + open: function(thread, tab) { + var url; + if (g.VIEW !== 'index') { + return; + } + url = "/" + thread.board + "/thread/" + thread; + if (tab) { + return $.open(url); + } else { + return location.href = url; + } + }, + hl: function(delta, thread) { + var axis, height, i, len, next, postEl, replies, reply, root; + postEl = $('.reply.highlight', thread); + if (!delta) { + if (postEl) { + $.rmClass(postEl, 'highlight'); + } + return; + } + if (postEl) { + height = postEl.getBoundingClientRect().height; + if (Header.getTopOf(postEl) >= -height && Header.getBottomOf(postEl) >= -height) { + root = postEl.parentNode; + axis = delta === +1 ? 'following' : 'preceding'; + if (!(next = $.x(axis + "-sibling::div[contains(@class,'replyContainer') and not(@hidden) and not(child::div[@class='stub'])][1]/child::div[contains(@class,'reply')]", root))) { + return; + } + Header.scrollToIfNeeded(next, delta === +1); + this.focus(next); + $.rmClass(postEl, 'highlight'); + return; + } + $.rmClass(postEl, 'highlight'); + } + replies = $$('.reply', thread); + if (delta === -1) { + replies.reverse(); + } + for (i = 0, len = replies.length; i < len; i++) { + reply = replies[i]; + if (delta === +1 && Header.getTopOf(reply) > 0 || delta === -1 && Header.getBottomOf(reply) > 0) { + this.focus(reply); + return; + } + } + }, + focus: function(post) { + return $.addClass(post, 'highlight'); + } + }; + + return Keybinds; + +}).call(this); + +Nav = (function() { + var Nav; + + Nav = { + init: function() { + var append, next, prev, span; + switch (g.VIEW) { + case 'index': + if (!Conf['Index Navigation']) { + return; + } + break; + case 'thread': + if (!Conf['Reply Navigation']) { + return; + } + break; + default: + return; + } + span = $.el('span', { + id: 'navlinks' + }); + prev = $.el('a', { + textContent: 'â–²', + href: 'javascript:;' + }); + next = $.el('a', { + textContent: 'â–¼', + href: 'javascript:;' + }); + $.on(prev, 'click', this.prev); + $.on(next, 'click', this.next); + $.add(span, [prev, $.tn(' '), next]); + append = function() { + $.off(d, '4chanXInitFinished', append); + return $.add(d.body, span); + }; + return $.on(d, '4chanXInitFinished', append); + }, + prev: function() { + if (g.VIEW === 'thread') { + return window.scrollTo(0, 0); + } else { + return Nav.scroll(-1); + } + }, + next: function() { + if (g.VIEW === 'thread') { + return window.scrollTo(0, d.body.scrollHeight); + } else { + return Nav.scroll(+1); + } + }, + getThread: function() { + var i, len, ref, thread, threadRoot; + ref = $$('.thread'); + for (i = 0, len = ref.length; i < len; i++) { + threadRoot = ref[i]; + thread = Get.threadFromRoot(threadRoot); + if (thread.isHidden && !thread.stub) { + continue; + } + if (Header.getTopOf(threadRoot) >= -threadRoot.getBoundingClientRect().height) { + return threadRoot; + } + } + return $('.board'); + }, + scroll: function(delta) { + var axis, extra, next, ref, thread, top; + if ((ref = d.activeElement) != null) { + ref.blur(); + } + thread = Nav.getThread(); + axis = delta === +1 ? 'following' : 'preceding'; + if (next = $.x(axis + "-sibling::div[contains(@class,'thread') and not(@hidden)][1]", thread)) { + top = Header.getTopOf(thread); + if (delta === +1 && top < 5 || delta === -1 && top > -5) { + thread = next; + } + } + extra = Header.getTopOf(thread) + doc.clientHeight - d.body.getBoundingClientRect().bottom; + if (extra > 0) { + d.body.style.marginBottom = extra + "px"; + } + Header.scrollTo(thread); + if (extra > 0 && !Nav.haveExtra) { + Nav.haveExtra = true; + return $.on(d, 'scroll', Nav.removeExtra); + } + }, + removeExtra: function() { + var extra; + extra = doc.clientHeight - d.body.getBoundingClientRect().bottom; + if (extra > 0) { + return d.body.style.marginBottom = extra + "px"; + } else { + d.body.style.marginBottom = null; + delete Nav.haveExtra; + return $.off(d, 'scroll', Nav.removeExtra); + } + } + }; + + return Nav; + +}).call(this); + +NormalizeURL = (function() { + var NormalizeURL; + + NormalizeURL = { + init: function() { + var pathname; + if (!Conf['Normalize URL']) { + return; + } + pathname = location.pathname.split(/\/+/); + switch (g.VIEW) { + case 'thread': + pathname[2] = 'thread'; + pathname = pathname.slice(0, 4); + break; + case 'index': + pathname = pathname.slice(0, 3); + } + pathname = pathname.join('/'); + if (location.pathname !== pathname) { + return history.replaceState(history.state, '', location.protocol + "//" + location.host + pathname + location.hash); + } + } + }; + + return NormalizeURL; + +}).call(this); + +PSAHiding = (function() { + var PSAHiding; + + PSAHiding = { + init: function() { + if (!Conf['Announcement Hiding']) { + return; + } + $.addClass(doc, 'hide-announcement'); + return $.one(d, '4chanXInitFinished', this.setup); + }, + setup: function() { + var btn, entry, hr, psa, ref; + if (!(psa = PSAHiding.psa = $.id('globalMessage'))) { + $.rmClass(doc, 'hide-announcement'); + return; + } + if ((hr = (ref = $.id('globalToggle')) != null ? ref.previousElementSibling : void 0) && hr.nodeName === 'HR') { + PSAHiding.hr = hr; + } + entry = { + el: $.el('a', { + textContent: 'Show announcement', + className: 'show-announcement', + href: 'javascript:;' + }), + order: 50, + open: function() { + return PSAHiding.hidden; + } + }; + Header.menu.addEntry(entry); + $.on(entry.el, 'click', PSAHiding.toggle); + PSAHiding.btn = btn = $.el('span', { + title: 'Mark announcement as read and hide.', + className: 'hide-announcement' + }); + $.extend(btn, { + innerHTML: "[Dismiss]" + }); + $.on(btn, 'click', PSAHiding.toggle); + $.get('hiddenPSA', 0, function(arg) { + var hiddenPSA; + hiddenPSA = arg.hiddenPSA; + PSAHiding.sync(hiddenPSA); + $.add(psa, btn); + return $.rmClass(doc, 'hide-announcement'); + }); + return $.sync('hiddenPSA', PSAHiding.sync); + }, + toggle: function() { + var UTC; + if ($.hasClass(this, 'hide-announcement')) { + UTC = +$.id('globalMessage').dataset.utc; + $.set('hiddenPSA', UTC); + } else { + $.event('CloseMenu'); + $["delete"]('hiddenPSA'); + } + return PSAHiding.sync(UTC); + }, + sync: function(UTC) { + var psa, ref; + psa = PSAHiding.psa; + PSAHiding.hidden = PSAHiding.btn.hidden = (UTC != null) && UTC >= +psa.dataset.utc; + if (PSAHiding.hidden) { + $.rm(psa); + } else { + $.after($.id('globalToggle'), psa); + } + if ((ref = PSAHiding.hr) != null) { + ref.hidden = PSAHiding.hidden; + } + } + }; + + return PSAHiding; + +}).call(this); + +RelativeDates = (function() { + var RelativeDates, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + RelativeDates = { + INTERVAL: $.MINUTE / 2, + init: function() { + var ref; + if (((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Relative Post Dates'] && !Conf['Relative Date Title'] || g.VIEW === 'index' && Conf['JSON Index'] && g.BOARD.ID !== 'f') { + this.flush(); + $.on(d, 'visibilitychange ThreadUpdate', this.flush); + } + if (Conf['Relative Post Dates']) { + return Callbacks.Post.push({ + name: 'Relative Post Dates', + cb: this.node + }); + } + }, + node: function() { + var dateEl; + dateEl = this.nodes.date; + if (Conf['Relative Date Title']) { + $.on(dateEl, 'mouseover', (function(_this) { + return function() { + return RelativeDates.hover(_this); + }; + })(this)); + return; + } + if (this.isClone) { + return; + } + dateEl.title = dateEl.textContent; + return RelativeDates.update(this); + }, + relative: function(diff, now, date) { + var days, months, number, rounded, unit, years; + unit = (number = diff / $.DAY) >= 1 ? (years = now.getYear() - date.getYear(), months = now.getMonth() - date.getMonth(), days = now.getDate() - date.getDate(), years > 1 ? (number = years - (months < 0 || months === 0 && days < 0), 'year') : years === 1 && (months > 0 || months === 0 && days >= 0) ? (number = years, 'year') : (months = months + 12 * years) > 1 ? (number = months - (days < 0), 'month') : months === 1 && days >= 0 ? (number = months, 'month') : 'day') : (number = diff / $.HOUR) >= 1 ? 'hour' : (number = diff / $.MINUTE) >= 1 ? 'minute' : (number = Math.max(0, diff) / $.SECOND, 'second'); + rounded = Math.round(number); + if (rounded !== 1) { + unit += 's'; + } + return rounded + " " + unit + " ago"; + }, + stale: [], + flush: function() { + var data, i, len, now, ref; + if (d.hidden) { + return; + } + now = new Date(); + ref = RelativeDates.stale; + for (i = 0, len = ref.length; i < len; i++) { + data = ref[i]; + RelativeDates.update(data, now); + } + RelativeDates.stale = []; + clearTimeout(RelativeDates.timeout); + return RelativeDates.timeout = setTimeout(RelativeDates.flush, RelativeDates.INTERVAL); + }, + hover: function(post) { + var date, diff, now; + date = post.info.date; + now = new Date(); + diff = now - date; + return post.nodes.date.title = RelativeDates.relative(diff, now, date); + }, + update: function(data, now) { + var date, diff, i, isPost, len, ref, relative, singlePost; + isPost = data instanceof Post; + date = isPost ? data.info.date : new Date(+data.dataset.utc); + now || (now = new Date()); + diff = now - date; + relative = RelativeDates.relative(diff, now, date); + if (isPost) { + ref = [data].concat(data.clones); + for (i = 0, len = ref.length; i < len; i++) { + singlePost = ref[i]; + singlePost.nodes.date.firstChild.textContent = relative; + } + } else { + data.firstChild.textContent = relative; + } + return RelativeDates.setOwnTimeout(diff, data); + }, + setOwnTimeout: function(diff, data) { + var delay; + delay = diff < $.MINUTE ? $.SECOND - (diff + $.SECOND / 2) % $.SECOND : diff < $.HOUR ? $.MINUTE - (diff + $.MINUTE / 2) % $.MINUTE : diff < $.DAY ? $.HOUR - (diff + $.HOUR / 2) % $.HOUR : $.DAY - (diff + $.DAY / 2) % $.DAY; + return setTimeout(RelativeDates.markStale, delay, data); + }, + markStale: function(data) { + if (indexOf.call(RelativeDates.stale, data) >= 0) { + return; + } + if (data instanceof Post && !g.posts[data.fullID]) { + return; + } + return RelativeDates.stale.push(data); + } + }; + + return RelativeDates; + +}).call(this); + +RemoveSpoilers = (function() { + var RemoveSpoilers, + slice = [].slice; + + RemoveSpoilers = { + init: function() { + if (Conf['Reveal Spoilers']) { + $.addClass(doc, 'reveal-spoilers'); + } + if (!Conf['Remove Spoilers']) { + return; + } + Callbacks.Post.push({ + name: 'Reveal Spoilers', + cb: this.node + }); + Callbacks.CatalogThread.push({ + name: 'Reveal Spoilers', + cb: this.node + }); + if (g.VIEW === 'archive') { + return $.ready(function() { + return RemoveSpoilers.unspoiler($.id('arc-list')); + }); + } + }, + node: function() { + return RemoveSpoilers.unspoiler(this.nodes.comment); + }, + unspoiler: function(el) { + var i, len, span, spoiler, spoilers; + spoilers = $$('s', el); + for (i = 0, len = spoilers.length; i < len; i++) { + spoiler = spoilers[i]; + span = $.el('span', { + className: 'removed-spoiler' + }); + $.replace(spoiler, span); + $.add(span, slice.call(spoiler.childNodes)); + } + } + }; + + return RemoveSpoilers; + +}).call(this); + +Report = (function() { + var Report; + + Report = { + init: function() { + var match; + if (!(match = location.search.match(/\bno=(\d+)/))) { + return; + } + Captcha.replace.init(); + this.postID = +match[1]; + return $.ready(this.ready); + }, + ready: function() { + var passAd, prev, ref; + $.addStyle(CSS.report); + if (Conf['Archive Report']) { + Report.archive(); + } + if ((passAd = $('a[href="https://www.4chan.org/pass"]'))) { + $.extend(passAd, { + textContent: 'Complain', + href: 'https://www.4chan-x.net/captchas.html', + tabIndex: -1 + }); + passAd.parentNode.normalize(); + if (((ref = (prev = passAd.previousSibling)) != null ? ref.nodeType : void 0) === Node.TEXT_NODE) { + prev.nodeValue = prev.nodeValue.replace(/4chan Pass[^\.]*\./i, 'reCAPTCHA malfunctioning?'); + } + $.after(passAd, [ + $.tn('] ['), $.el('a', { + href: 'mailto:4chanpass@4chan.org?subject=4chan%20Pass%20-%20Purchase%20Support', + textContent: 'Email 4chan', + target: '_blank', + tabIndex: -1 + }) + ]); + } + if (!Conf['Use Recaptcha v1 in Reports'] && !Conf['Force Noscript Captcha'] && Main.jsEnabled) { + return new MutationObserver(function() { + Report.fit('iframe[src^="https://www.google.com/recaptcha/api2/frame"]'); + return Report.fit('body'); + }).observe(d.body, { + childList: true, + attributes: true, + subtree: true + }); + } else { + return Report.fit('body'); + } + }, + fit: function(selector) { + var dy, el; + if (!((el = $(selector, doc)) && getComputedStyle(el).visibility !== 'hidden')) { + return; + } + dy = el.getBoundingClientRect().bottom - doc.clientHeight + 8; + if (dy > 0) { + return window.resizeBy(0, dy); + } + }, + archive: function() { + var link, message, types, url; + Redirect.init(); + if (!(url = Redirect.to('report', { + boardID: g.BOARD.ID, + postID: Report.postID + }))) { + return; + } + if ((message = $('h3')) && /Report submitted!/.test(message.textContent)) { + if (location.hash === '#redirect') { + $.globalEval('self.close = function(){};'); + window.resizeTo(700, 475); + location.replace(url); + } + return; + } + link = $.el('a', { + href: url, + textContent: 'Report to archive' + }); + $.on(link, 'click', function(e) { + if (!(e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0)) { + return window.resizeTo(700, 475); + } + }); + $.add(d.body, [$.tn(' ['), link, $.tn(']')]); + if (types = $.id('reportTypes')) { + return $.on(types, 'change', function(e) { + return $('form').action = e.target.value === 'illegal' ? '#redirect' : ''; + }); + } + } + }; + + return Report; + +}).call(this); + +ThreadLinks = (function() { + var ThreadLinks; + + ThreadLinks = { + init: function() { + if (!(g.VIEW === 'index' && Conf['Open Threads in New Tab'])) { + return; + } + Callbacks.Post.push({ + name: 'Thread Links', + cb: this.node + }); + return Callbacks.CatalogThread.push({ + name: 'Thread Links', + cb: this.catalogNode + }); + }, + node: function() { + if (this.isReply || this.isClone) { + return; + } + return ThreadLinks.process($('.replylink', this.nodes.info)); + }, + catalogNode: function() { + return ThreadLinks.process(this.nodes.thumb.parentNode); + }, + process: function(link) { + return link.target = '_blank'; + } + }; + + return ThreadLinks; + +}).call(this); + +Time = (function() { + var Time; + + Time = { + init: function() { + var ref; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Time Formatting'])) { + return; + } + return Callbacks.Post.push({ + name: 'Time Formatting', + cb: this.node + }); + }, + node: function() { + if (this.isClone) { + return; + } + return this.nodes.date.textContent = Time.format(Conf['time'], this.info.date); + }, + format: function(formatString, date) { + return formatString.replace(/%(.)/g, function(s, c) { + if (c in Time.formatters) { + return Time.formatters[c].call(date); + } else { + return s; + } + }); + }, + day: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + month: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + zeroPad: function(n) { + if (n < 10) { + return "0" + n; + } else { + return n; + } + }, + formatters: { + a: function() { + return Time.day[this.getDay()].slice(0, 3); + }, + A: function() { + return Time.day[this.getDay()]; + }, + b: function() { + return Time.month[this.getMonth()].slice(0, 3); + }, + B: function() { + return Time.month[this.getMonth()]; + }, + d: function() { + return Time.zeroPad(this.getDate()); + }, + e: function() { + return this.getDate(); + }, + H: function() { + return Time.zeroPad(this.getHours()); + }, + I: function() { + return Time.zeroPad(this.getHours() % 12 || 12); + }, + k: function() { + return this.getHours(); + }, + l: function() { + return this.getHours() % 12 || 12; + }, + m: function() { + return Time.zeroPad(this.getMonth() + 1); + }, + M: function() { + return Time.zeroPad(this.getMinutes()); + }, + p: function() { + if (this.getHours() < 12) { + return 'AM'; + } else { + return 'PM'; + } + }, + P: function() { + if (this.getHours() < 12) { + return 'am'; + } else { + return 'pm'; + } + }, + S: function() { + return Time.zeroPad(this.getSeconds()); + }, + y: function() { + return this.getFullYear().toString().slice(2); + }, + Y: function() { + return this.getFullYear(); + }, + '%': function() { + return '%'; + } + } + }; + + return Time; + +}).call(this); + +Favicon = (function() { + var Favicon; + + Favicon = { + init: function() { + return $.asap((function() { + return d.head && (Favicon.el = $('link[rel="shortcut icon"]', d.head)); + }), Favicon.initAsap); + }, + initAsap: function() { + var href; + Favicon.el.type = 'image/x-icon'; + href = Favicon.el.href; + Favicon.SFW = /ws\.ico$/.test(href); + Favicon["default"] = href; + return Favicon["switch"](); + }, + "switch": function() { + var f, i, items, t; + items = { + ferongr: ['iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEX///9zBQC/AADpDAP/gID/q6voCwJJTwpOAAAAAXRSTlMAQObYZgAAAGJJREFUeF5Fi7ENg0AQBCfa/AFdDh2gdwPIogMK2E2+/xLslwOvdqRJhv+GQQPUCtJM7svankLrq/I+TY5e6Ueh1jyBMX7AFJi9vwfyVO4CbbO6jNYpp9GyVPbdkFhVgAQ2H0NOE5jk9DT8AAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAxUlEQVR42q1TOwrCQBB9s0FRtJI0WoqFtSLYegoP4gVSeJsUHsHSI3iFeIqRXXgwrhlXwYHHhLwPTB7B36abBCV+0pA4DUBQUNZYQptGtW3jtoKyxgoe0yrBCoyZfL/5ioQ3URZOXW9I341l3oo+NXEZiW4CEuIzvPECopED4OaZ3RNmeAm4u+a8Jr5f17VyVoL8fr8qcltzwlyyj2iqcgPOQ9ExkHAITgD75bYBe0A5S4H/P9htuWMF3QXoQpwaKeT+lnsC6JE5I6aq6fEAAAAASUVORK5CYII=', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEX///8AcH4AtswA2PJ55fKi6fIA1/FtpPADAAAAAXRSTlMAQObYZgAAAGJJREFUeF5Fi7ENg0AQBCfa/AFdDh2gdwPIogMK2E2+/xLslwOvdqRJhv+GQQPUCtJM7svankLrq/I+TY5e6Ueh1jyBMX7AFJi9vwfyVO4CbbO6jNYpp9GyVPbdkFhVgAQ2H0NOE5jk9DT8AAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAxElEQVQ4y2NgoBq4/vE/HJOsBiRQUIfA2AzBqQYqUfn00/9FLz+BaQxDCKqBmX7jExijKEDSDJPHrnnbGQhGV4RmOFwdVkNwhQMheYwQxhaIi7b9Z9A3gWAQm2BUoQOgRhgA8o7j1ozLC4LCyAZcx6kZI5qg4kLKqggDFFWxJySsUQVzlb4pwgAJaTRvokcVNgOqOv8zcHBCsL07DgNg8YsczzA5MxtUL+DMD8g0slxI/H8GQ/P/DJKyeKIRpglXZsIiBwBhP5O+VbI/JgAAAABJRU5ErkJggg==', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEX///8oeQBJ3ABV/wHM/7Lu/+ZU/gAqUP3dAAAAAXRSTlMAQObYZgAAAGJJREFUeF5Fi7ENg0AQBCfa/AFdDh2gdwPIogMK2E2+/xLslwOvdqRJhv+GQQPUCtJM7svankLrq/I+TY5e6Ueh1jyBMX7AFJi9vwfyVO4CbbO6jNYpp9GyVPbdkFhVgAQ2H0NOE5jk9DT8AAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAx0lEQVQ4y2NgoBYI+cfwH4ZJVgMS0KhEYGyG4FQDkzjzf9P/d/+fgWl0QwiqgSkI/c8IxsgKkDXD5LFq9rwDweiK0A2HqcNqCK5wICSPEcLYAtH+AMN/IXMIBrEJRie6OEgjDAC5x3FqxuUFNiEUA67j1IweTTBxBQ1puAG86jgSEraogskJWSBcwCGF5k30qMJmgMFEhv/MXBAs5oLDAFj8IsczTE7UEeECbhU8+QGZRpaTi2b4L2zF8J9TGk80wjThykzY5AAW/2O1C2mIbgAAAABJRU5ErkJggg=='], + 'xat-': ['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'], + Mayhem: ['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'], + '4chanJS': ['iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAD1BMVEUBAAAAAAD/AABnZ2f///8nFk05AAAAAXRSTlMAQObYZgAAAEFJREFUeNqNjgEKACAMAjvX/98cAkkxgmSgO8Bt/Ai4ApJ6KKhzF3OiEMDASrGB/QWgPEHsUpN+Ng9xAETMYhDrWmeHAMcmvycWAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAD1BMVEUBAAAAAAD/AAD///9nZ2f77Y6hAAAAAXRSTlMAQObYZgAAAEBJREFUeF6NjQEKACAMAnfW/98cAxFiBIngOsTqR8B1IGkeG9p5i7XabgAGZNigXgA8aoCUxvzWAIcBItGiSEwdccYA3BuRAWkAAAAASUVORK5CYII=', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAD1BMVEUBAAAAAAAul8NnZ2f////82iC9AAAAAXRSTlMAQObYZgAAAEFJREFUeNqNjgEKACAMAjvX/98cAkkxgmSgO8Bt/Ai4ApJ6KKhzF3OiEMDASrGB/QWgPEHsUpN+Ng9xAETMYhDrWmeHAMcmvycWAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAD1BMVEUBAAAAAAAul8P///9nZ2cgIeMlAAAAAXRSTlMAQObYZgAAAEBJREFUeF6NjQEKACAMAnfW/98cAxFiBIngOsTqR8B1IGkeG9p5i7XabgAGZNigXgA8aoCUxvzWAIcBItGiSEwdccYA3BuRAWkAAAAASUVORK5CYII=', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAElBMVEUBAAAAAABmzDNlyjJnZ2f///+6o7dfAAAAAXRSTlMAQObYZgAAAERJREFUeF6NjkEKADEIA51o///lJZfQxUsHITogWi8AvwZJuxmYa25xDooBLEwOWFTYAsYVhdorLZt9Ng9xCUTCUCQ2H3F4ANrZ2WNiAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAElBMVEUBAAAAAABmzDP///9lyjJnZ2cIHys9AAAAAXRSTlMAQObYZgAAAENJREFUeF6NjUEKwEAMAjNm9/9fLkEslFwqgjoEUn8EfAqSdrkwzj6ieyyTkQEVGWRvANfO1iEX620AjgBEwqR4Y+sBeGAA6d+vQ4IAAAAASUVORK5CYII='], + Original: ['iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAADFBMVEX/////AAD///8AAABBZmS3AAAAAXRSTlMAQObYZgAAAExJREFUeF4tyrENgDAMAMFXKuQswQLBG3mOlBnFS1gwDfIYLpEivvjq2MlqjmYvYg5jWEzCwtDSQlwcXKCVLrpFbvLvvSf9uZJ2HusDtJAY7Tkn1oYAAAAASUVORK5CYII=', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAhElEQVR42q1RwQnAMAjMu5M4guAKXa4j5dUROo5tipSDcrFChUONd0di2m/hEGVOHDyIPufgwAFASDkpoSzmBrkJ2UMyR9LsJ3rvrqo3Rt1YMIMhhNnOxLMnoMFBxHyJAr2IOBFzA8U+6pLBdmEJTA0aMVjpDd6Loks0s5HZNwYx8tfZCZ0kll7ORffZAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAADFBMVEX///8ul8P///8AAACaqgkzAAAAAXRSTlMAQObYZgAAAExJREFUeF4tyrENgDAMAMFXKuQswQLBG3mOlBnFS1gwDfIYLpEivvjq2MlqjmYvYg5jWEzCwtDSQlwcXKCVLrpFbvLvvSf9uZJ2HusDtJAY7Tkn1oYAAAAASUVORK5CYII=', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAALVBMVEUAAAAAAAAAAAAAAAABBQcHFx4KISoNLToaVW4oKCgul8M4ODg7OzvBwcH///8uS/CdAAAAA3RSTlMAx9dmesIgAAAAV0lEQVR42m2NWw6AIBAD1eILZO5/XI0UAgm7H9tOsu0yGWAQSOoFijHOxOANGqm/LczpOaXs4gISrPZ+gc2+hO5w2xdwgOjBFUIF+sEJrhUl9JFr+badFwR+BfqlmGUJAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAADFBMVEX///9mzDP///8AAACT0n1lAAAAAXRSTlMAQObYZgAAAExJREFUeF4tyrENgDAMAMFXKuQswQLBG3mOlBnFS1gwDfIYLpEivvjq2MlqjmYvYg5jWEzCwtDSQlwcXKCVLrpFbvLvvSf9uZJ2HusDtJAY7Tkn1oYAAAAASUVORK5CYII=', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAALVBMVEUAAAAAAAAAAAAAAAAECAIQIAgWLAsePA8oKCg4ODg6dB07OztmzDPBwcH///+rsf3XAAAAA3RSTlMAx9dmesIgAAAAV0lEQVR42m2NWw6AIBAD1eIDhbn/cTVSCCTsfmw7ybbLZIBBIKkXKKU0E4M3aKT+tjCn5xiziwuIsNr7BTb7ErrDZV/AAaIHdwgV6AcnuFaU0Eeu5dt2XiUyBjCQ2bIrAAAAAElFTkSuQmCC'], + 'Metro': ['iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAC/AABrZQDiAAAAAXRSTlMAQObYZgAAABJJREFUCB1jZGBgrMNAQEEc4gCSfAX5bRw/NQAAAABJRU5ErkJggg==', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAAAAAAAAAAHAAAdAAApAAAsAAA4AABsAACQAAC/AAD///9SVhtjAAAAA3RSTlMAPse+s4iwAAAAM0lEQVQIW2NggAGuVasWgDBpDDAQUoSaob0Jao73lgVojOitUEazBZRRvR3KmJa5AO4KAGBtLuMAuhIIAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAAA1/GhpCidAAAAAXRSTlMAQObYZgAAABJJREFUCB1jZGBgrMNAQEEc4gCSfAX5bRw/NQAAAABJRU5ErkJggg==', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAAAAAAAAAAACAkAISUALzQAMTcAQEcAeokAorYA1/H///8BrzTFAAAAA3RSTlMAPse+s4iwAAAAM0lEQVQIW2NggAGuVasWgDBpDDAQUoSaob0Jao73lgVojOitUEazBZRRvR3KmJa5AO4KAGBtLuMAuhIIAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAABV/wErM5hwAAAAAXRSTlMAQObYZgAAABJJREFUCB1jZGBgrMNAQEEc4gCSfAX5bRw/NQAAAABJRU5ErkJggg==', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAAAAAAAAAADCgANKAASOAATOwAZTAAwkQBAwQBV/wH////+Fmy4AAAAA3RSTlMAPse+s4iwAAAAM0lEQVQIW2NggAGuVasWgDBpDDAQUoSaob0Jao73lgVojOitUEazBZRRvR3KmJa5AO4KAGBtLuMAuhIIAAAAAElFTkSuQmCC'] + }[Conf['favicon']]; + f = Favicon; + t = 'data:image/png;base64,'; + i = 0; + while (items[i]) { + items[i] = t + items[i++]; + } + f.unreadDead = items[0], f.unreadDeadY = items[1], f.unreadSFW = items[2], f.unreadSFWY = items[3], f.unreadNSFW = items[4], f.unreadNSFWY = items[5]; + return f.update(); + }, + update: function() { + if (this.SFW) { + this.unread = this.unreadSFW; + return this.unreadY = this.unreadSFWY; + } else { + this.unread = this.unreadNSFW; + return this.unreadY = this.unreadNSFWY; + } + }, + dead: 'data:image/gif;base64,R0lGODlhEAAQAKECAAAAAP8AAP///////yH5BAEKAAIALAAAAAAQABAAAAIvlI+pq+D9DAgUoFkPDlbs7lFZKIJOJJ3MyraoB14jFpOcVMpzrnF3OKlZYsMWowAAOw==', + logo: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACAAgMAAAC+UIlYAAAACVBMVEUAAGcAAABmzDNZt9VtAAAAAXRSTlMAQObYZgAAAGlJREFUWMPtlkEKADEIA/tJP9lXLttQto2yHxgDHozTi0ToGK2WKZZ+HAQQMZc+xBwI4EZ+wAC2IfPuSIDOZJrSZQEAX9eVJhhwIuUYAnQe8rhAEMAZlTI2MID9f5Clyh0JeE1V1ZEAvB4qDfwuJTSGRAAAAABJRU5ErkJggg==' + }; + + return Favicon; + +}).call(this); + +MarkNewIPs = (function() { + var MarkNewIPs; + + MarkNewIPs = { + init: function() { + if (g.VIEW !== 'thread' || !Conf['Mark New IPs']) { + return; + } + return Callbacks.Thread.push({ + name: 'Mark New IPs', + cb: this.node + }); + }, + node: function() { + MarkNewIPs.ipCount = this.ipCount; + MarkNewIPs.postCount = this.posts.keys.length; + return $.on(d, 'ThreadUpdate', MarkNewIPs.onUpdate); + }, + onUpdate: function(e) { + var deletedPosts, fullID, i, ipCount, j, k, len, len1, newPosts, postCount, ref; + ref = e.detail, ipCount = ref.ipCount, postCount = ref.postCount, newPosts = ref.newPosts, deletedPosts = ref.deletedPosts; + if (ipCount == null) { + return; + } + switch (ipCount - MarkNewIPs.ipCount) { + case postCount - MarkNewIPs.postCount + deletedPosts.length: + i = MarkNewIPs.ipCount; + for (j = 0, len = newPosts.length; j < len; j++) { + fullID = newPosts[j]; + MarkNewIPs.markNew(g.posts[fullID], ++i); + } + break; + case -deletedPosts.length: + for (k = 0, len1 = newPosts.length; k < len1; k++) { + fullID = newPosts[k]; + MarkNewIPs.markOld(g.posts[fullID]); + } + } + MarkNewIPs.ipCount = ipCount; + return MarkNewIPs.postCount = postCount; + }, + markNew: function(post, ipCount) { + var counter, suffix; + suffix = (Math.floor(ipCount / 10)) % 10 === 1 ? 'th' : ['st', 'nd', 'rd'][ipCount % 10 - 1] || 'th'; + counter = $.el('span', { + className: 'ip-counter', + textContent: "(" + ipCount + ")" + }); + post.nodes.nameBlock.title = "This is the " + ipCount + suffix + " IP in the thread."; + $.add(post.nodes.nameBlock, [$.tn(' '), counter]); + return $.addClass(post.nodes.root, 'new-ip'); + }, + markOld: function(post) { + post.nodes.nameBlock.title = 'Not the first post from this IP.'; + return $.addClass(post.nodes.root, 'old-ip'); + } + }; + + return MarkNewIPs; + +}).call(this); + +ReplyPruning = (function() { + var ReplyPruning; + + ReplyPruning = { + init: function() { + var el, label; + if (!(g.VIEW === 'thread' && Conf['Reply Pruning'])) { + return; + } + this.active = !(Conf['Quote Threading'] && Conf['Thread Quotes']); + this.container = $.frag(); + this.summary = $.el('span', { + hidden: true, + className: 'summary' + }); + this.summary.style.cursor = 'pointer'; + $.on(this.summary, 'click', (function(_this) { + return function() { + _this.inputs.enabled.checked = !_this.inputs.enabled.checked; + return $.event('change', null, _this.inputs.enabled); + }; + })(this)); + label = UI.checkbox('Prune Replies', 'Show Last', this.active); + el = $.el('span', { + title: 'Maximum number of replies to show.' + }, { + innerHTML: " " + }); + $.prepend(el, label); + this.inputs = { + enabled: label.firstElementChild, + replies: el.lastElementChild + }; + $.on(this.inputs.enabled, 'change', this.setEnabled); + $.on(this.inputs.replies, 'change', $.cb.value); + Header.menu.addEntry({ + el: el, + order: 190 + }); + return Callbacks.Thread.push({ + name: 'Reply Pruning', + cb: this.node + }); + }, + position: 0, + hidden: 0, + hiddenFiles: 0, + total: 0, + totalFiles: 0, + setEnabled: function() { + var other; + other = QuoteThreading.input; + if (this.checked && (other != null ? other.checked : void 0)) { + other.checked = false; + $.event('change', null, other); + } + return ReplyPruning.active = this.checked; + }, + showIfHidden: function(id) { + var ref; + if ((ref = ReplyPruning.container) != null ? ref.getElementById(id) : void 0) { + ReplyPruning.inputs.enabled.checked = false; + return $.event('change', null, ReplyPruning.inputs.enabled); + } + }, + node: function() { + var ref; + ReplyPruning.thread = this; + this.posts.forEach(function(post) { + if (post.isReply) { + ReplyPruning.total++; + if (post.file) { + return ReplyPruning.totalFiles++; + } + } + }); + if (ReplyPruning.active && /^#p\d+$/.test(location.hash) && (0 <= (ref = this.posts.keys.indexOf(location.hash.slice(2))) && ref < 1 + Math.max(ReplyPruning.total - +Conf["Max Replies"], 0))) { + ReplyPruning.active = ReplyPruning.inputs.enabled.checked = false; + } + $.after(this.OP.nodes.root, ReplyPruning.summary); + $.on(ReplyPruning.inputs.enabled, 'change', ReplyPruning.update); + $.on(ReplyPruning.inputs.replies, 'change', ReplyPruning.update); + $.on(d, 'ThreadUpdate', ReplyPruning.updateCount); + $.on(d, 'ThreadUpdate', ReplyPruning.update); + return ReplyPruning.update(); + }, + updateCount: function(e) { + var fullID, i, len, ref; + if (e.detail[404]) { + return; + } + ref = e.detail.newPosts; + for (i = 0, len = ref.length; i < len; i++) { + fullID = ref[i]; + ReplyPruning.total++; + if (g.posts[fullID].file) { + ReplyPruning.totalFiles++; + } + } + }, + update: function() { + var boardTop, frag, hidden2, oldPos, post, posts; + hidden2 = ReplyPruning.active ? Math.max(ReplyPruning.total - +Conf["Max Replies"], 0) : 0; + oldPos = d.body.clientHeight - window.scrollY; + posts = ReplyPruning.thread.posts; + if (ReplyPruning.hidden < hidden2) { + while (ReplyPruning.hidden < hidden2 && ReplyPruning.position < posts.keys.length) { + post = posts[posts.keys[ReplyPruning.position++]]; + if (post.isReply && !post.isFetchedQuote) { + $.add(ReplyPruning.container, post.nodes.root); + ReplyPruning.hidden++; + if (post.file) { + ReplyPruning.hiddenFiles++; + } + } + } + } else if (ReplyPruning.hidden > hidden2) { + frag = $.frag(); + while (ReplyPruning.hidden > hidden2 && ReplyPruning.position > 0) { + post = posts[posts.keys[--ReplyPruning.position]]; + if (post.isReply && !post.isFetchedQuote) { + $.prepend(frag, post.nodes.root); + ReplyPruning.hidden--; + if (post.file) { + ReplyPruning.hiddenFiles--; + } + } + } + $.after(ReplyPruning.summary, frag); + $.event('PostsInserted'); + } + ReplyPruning.summary.textContent = ReplyPruning.active ? Build.summaryText('+', ReplyPruning.hidden, ReplyPruning.hiddenFiles) : Build.summaryText('-', ReplyPruning.total, ReplyPruning.totalFiles); + ReplyPruning.summary.hidden = ReplyPruning.total <= +Conf["Max Replies"]; + if ((boardTop = Header.getTopOf($('.board'))) < 0) { + return window.scroll(window.scrollX, Math.max(d.body.clientHeight - oldPos, window.scrollY + boardTop)); + } + } + }; + + return ReplyPruning; + +}).call(this); + +ThreadExcerpt = (function() { + var ThreadExcerpt; + + ThreadExcerpt = { + init: function() { + if (g.BOARD.ID !== 'f' || g.VIEW !== 'thread' || !Conf['Thread Excerpt']) { + return; + } + return Callbacks.Thread.push({ + name: 'Thread Excerpt', + cb: this.node + }); + }, + node: function() { + return d.title = Get.threadExcerpt(this); + } + }; + + return ThreadExcerpt; + +}).call(this); + +ThreadStats = (function() { + var ThreadStats; + + ThreadStats = { + init: function() { + var sc, statsHTML, statsTitle; + if (g.VIEW !== 'thread' || !Conf['Thread Stats']) { + return; + } + statsHTML = { + innerHTML: "? / ?" + ((Conf["IP Count in Stats"]) ? " / ?" : "") + ((Conf["Page Count in Stats"]) ? " / ?" : "") + }; + statsTitle = 'Posts / Files'; + if (Conf['IP Count in Stats']) { + statsTitle += ' / IPs'; + } + if (Conf['Page Count in Stats']) { + statsTitle += (g.BOARD.ID === 'f' ? ' / Purge Position' : ' / Page'); + } + if (Conf['Updater and Stats in Header']) { + this.dialog = sc = $.el('span', { + id: 'thread-stats', + title: statsTitle + }); + $.extend(sc, statsHTML); + $.ready(function() { + return Header.addShortcut(sc); + }); + } else { + this.dialog = sc = UI.dialog('thread-stats', 'bottom: 0px; right: 0px;', { + innerHTML: "
      " + (statsHTML).innerHTML + "
      " + }); + $.addClass(doc, 'float'); + $.ready(function() { + return $.add(d.body, sc); + }); + } + this.postCountEl = $('#post-count', sc); + this.fileCountEl = $('#file-count', sc); + this.ipCountEl = $('#ip-count', sc); + this.pageCountEl = $('#page-count', sc); + if (this.pageCountEl) { + $.on(this.pageCountEl, 'click', ThreadStats.fetchPage); + } + return Callbacks.Thread.push({ + name: 'Thread Stats', + cb: this.node + }); + }, + node: function() { + var fileCount, postCount; + postCount = 0; + fileCount = 0; + this.posts.forEach(function(post) { + postCount++; + if (post.file) { + fileCount++; + } + if (ThreadStats.pageCountEl) { + return ThreadStats.lastPost = post.info.date; + } + }); + ThreadStats.thread = this; + ThreadStats.fetchPage(); + ThreadStats.update(postCount, fileCount, this.ipCount); + return $.on(d, 'ThreadUpdate', ThreadStats.onUpdate); + }, + onUpdate: function(e) { + var fileCount, ipCount, newPosts, postCount, ref, ref1; + if (e.detail[404]) { + return; + } + ref = e.detail, postCount = ref.postCount, fileCount = ref.fileCount, ipCount = ref.ipCount, newPosts = ref.newPosts; + ThreadStats.update(postCount, fileCount, ipCount); + if (!ThreadStats.pageCountEl) { + return; + } + if (newPosts.length) { + ThreadStats.lastPost = g.posts[newPosts[newPosts.length - 1]].info.date; + } + if (g.BOARD.ID !== 'f' && ((ref1 = ThreadStats.pageCountEl) != null ? ref1.textContent : void 0) !== '1') { + return ThreadStats.fetchPage(); + } + }, + update: function(postCount, fileCount, ipCount) { + var fileCountEl, ipCountEl, postCountEl, thread; + thread = ThreadStats.thread, postCountEl = ThreadStats.postCountEl, fileCountEl = ThreadStats.fileCountEl, ipCountEl = ThreadStats.ipCountEl; + postCountEl.textContent = postCount; + fileCountEl.textContent = fileCount; + if ((ipCount != null) && ipCountEl) { + ipCountEl.textContent = ipCount; + } + (thread.postLimit && !thread.isSticky ? $.addClass : $.rmClass)(postCountEl, 'warning'); + return (thread.fileLimit && !thread.isSticky ? $.addClass : $.rmClass)(fileCountEl, 'warning'); + }, + fetchPage: function() { + if (!ThreadStats.pageCountEl) { + return; + } + clearTimeout(ThreadStats.timeout); + if (ThreadStats.thread.isDead) { + ThreadStats.pageCountEl.textContent = 'Dead'; + $.addClass(ThreadStats.pageCountEl, 'warning'); + return; + } + ThreadStats.timeout = setTimeout(ThreadStats.fetchPage, 2 * $.MINUTE); + return $.ajax("//a.4cdn.org/" + ThreadStats.thread.board + "/threads.json", { + onload: ThreadStats.onThreadsLoad + }, { + whenModified: 'ThreadStats' + }); + }, + onThreadsLoad: function() { + var i, j, k, len, len1, len2, page, purgePos, ref, ref1, ref2, thread; + if (this.status === 200) { + ref = this.response; + for (i = 0, len = ref.length; i < len; i++) { + page = ref[i]; + if (g.BOARD.ID === 'f') { + purgePos = 1; + ref1 = page.threads; + for (j = 0, len1 = ref1.length; j < len1; j++) { + thread = ref1[j]; + if (thread.no < ThreadStats.thread.ID) { + purgePos++; + } + } + ThreadStats.pageCountEl.textContent = purgePos; + } else { + ref2 = page.threads; + for (k = 0, len2 = ref2.length; k < len2; k++) { + thread = ref2[k]; + if (!(thread.no === ThreadStats.thread.ID)) { + continue; + } + ThreadStats.pageCountEl.textContent = page.page; + (page.page === this.response.length ? $.addClass : $.rmClass)(ThreadStats.pageCountEl, 'warning'); + ThreadStats.lastPageUpdate = new Date(thread.last_modified * $.SECOND); + ThreadStats.retry(); + return; + } + } + } + } else if (this.status === 304) { + return ThreadStats.retry(); + } + }, + retry: function() { + var ref; + if (g.BOARD.ID !== 'f' && ThreadStats.lastPost > ThreadStats.lastPageUpdate && ((ref = ThreadStats.pageCountEl) != null ? ref.textContent : void 0) !== '1') { + clearTimeout(ThreadStats.timeout); + return ThreadStats.timeout = setTimeout(ThreadStats.fetchPage, 5 * $.SECOND); + } + } + }; + + return ThreadStats; + +}).call(this); + +ThreadUpdater = (function() { + var ThreadUpdater, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + ThreadUpdater = { + init: function() { + var conf, el, input, name, ref, sc, subEntries, updateLink; + if (g.VIEW !== 'thread' || !Conf['Thread Updater']) { + return; + } + this.audio = $.el('audio', { + src: ThreadUpdater.beep + }); + if (Conf['Updater and Stats in Header']) { + this.dialog = sc = $.el('span', { + id: 'updater' + }); + $.extend(sc, { + innerHTML: "" + }); + $.ready(function() { + return Header.addShortcut(sc); + }); + } else { + this.dialog = sc = UI.dialog('updater', 'bottom: 0px; left: 0px;', { + innerHTML: "
      " + }); + $.addClass(doc, 'float'); + $.ready(function() { + return $.add(d.body, sc); + }); + } + this.checkPostCount = 0; + this.timer = $('#update-timer', sc); + this.status = $('#update-status', sc); + $.on(this.timer, 'click', this.update); + $.on(this.status, 'click', this.update); + updateLink = $.el('span', { + className: 'brackets-wrap updatelink' + }); + $.extend(updateLink, { + innerHTML: "Update" + }); + Main.ready(function() { + var navLinksBot; + if ((navLinksBot = $('.navLinksBot'))) { + return $.add(navLinksBot, [$.tn(' '), updateLink]); + } + }); + $.on(updateLink.firstElementChild, 'click', this.update); + subEntries = []; + ref = Config.updater.checkbox; + for (name in ref) { + conf = ref[name]; + el = UI.checkbox(name, name); + el.title = conf[1]; + input = el.firstElementChild; + $.on(input, 'change', $.cb.checked); + if (input.name === 'Scroll BG') { + $.on(input, 'change', this.cb.scrollBG); + this.cb.scrollBG(); + } else if (input.name === 'Auto Update') { + $.on(input, 'change', this.setInterval); + } + subEntries.push({ + el: el + }); + } + this.settings = $.el('span', { + innerHTML: "Interval" + }); + $.on(this.settings, 'click', this.intervalShortcut); + subEntries.push({ + el: this.settings + }); + Header.menu.addEntry(this.entry = { + el: $.el('span', { + textContent: 'Updater' + }), + order: 110, + subEntries: subEntries + }); + return Callbacks.Thread.push({ + name: 'Thread Updater', + cb: this.node + }); + }, + node: function() { + ThreadUpdater.thread = this; + ThreadUpdater.root = this.OP.nodes.root.parentNode; + ThreadUpdater.outdateCount = 0; + ThreadUpdater.postIDs = []; + ThreadUpdater.fileIDs = []; + this.posts.forEach(function(post) { + ThreadUpdater.postIDs.push(post.ID); + if (post.file) { + return ThreadUpdater.fileIDs.push(post.ID); + } + }); + ThreadUpdater.cb.interval.call($.el('input', { + value: Conf['Interval'] + })); + $.on(d, 'QRPostSuccessful', ThreadUpdater.cb.checkpost); + $.on(d, 'visibilitychange', ThreadUpdater.cb.visibility); + return ThreadUpdater.setInterval(); + }, + + /* + http://freesound.org/people/pierrecartoons1979/sounds/90112/ + cc-by-nc-3.0 + */ + beep: 'data:audio/wav;base64,UklGRjQDAABXQVZFZm10IBAAAAABAAEAgD4AAIA+AAABAAgAc21wbDwAAABBAAADAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkYXRhzAIAAGMms8em0tleMV4zIpLVo8nhfSlcPR102Ki+5JspVEkdVtKzs+K1NEhUIT7DwKrcy0g6WygsrM2k1NpiLl0zIY/WpMrjgCdbPhxw2Kq+5Z4qUkkdU9K1s+K5NkVTITzBwqnczko3WikrqM+l1NxlLF0zIIvXpsnjgydZPhxs2ay95aIrUEkdUdC3suK8N0NUIjq+xKrcz002WioppdGm091pK1w0IIjYp8jkhydXPxxq2K295aUrTkoeTs65suK+OUFUIzi7xqrb0VA0WSoootKm0t5tKlo1H4TYqMfkiydWQBxm16+85actTEseS8y7seHAPD9TIza5yKra01QyWSson9On0d5wKVk2H4DYqcfkjidUQB1j1rG75KsvSkseScu8seDCPz1TJDW2yara1FYxWSwnm9Sn0N9zKVg2H33ZqsXkkihSQR1g1bK65K0wSEsfR8i+seDEQTxUJTOzy6rY1VowWC0mmNWoz993KVc3H3rYq8TklSlRQh1d1LS647AyR0wgRMbAsN/GRDpTJTKwzKrX1l4vVy4lldWpzt97KVY4IXbUr8LZljVPRCxhw7W3z6ZISkw1VK+4sMWvXEhSPk6buay9sm5JVkZNiLWqtrJ+TldNTnquqbCwilZXU1BwpKirrpNgWFhTaZmnpquZbFlbVmWOpaOonHZcXlljhaGhpZ1+YWBdYn2cn6GdhmdhYGN3lp2enIttY2Jjco+bnJuOdGZlZXCImJqakHpoZ2Zug5WYmZJ/bGlobX6RlpeSg3BqaW16jZSVkoZ0bGtteImSk5KIeG5tbnaFkJKRinxxbm91gY2QkIt/c3BwdH6Kj4+LgnZxcXR8iI2OjIR5c3J0e4WLjYuFe3VzdHmCioyLhn52dHR5gIiKioeAeHV1eH+GiYqHgXp2dnh9hIiJh4J8eHd4fIKHiIeDfXl4eHyBhoeHhH96eHmA', + playBeep: function() { + var audio; + audio = ThreadUpdater.audio; + if (audio.paused) { + return audio.play(); + } else { + return $.one(audio, 'ended', ThreadUpdater.playBeep); + } + }, + cb: { + checkpost: function(e) { + if (e.detail.threadID !== ThreadUpdater.thread.ID) { + return; + } + ThreadUpdater.postID = e.detail.postID; + ThreadUpdater.checkPostCount = 0; + ThreadUpdater.outdateCount = 0; + return ThreadUpdater.setInterval(); + }, + visibility: function() { + if (d.hidden) { + return; + } + ThreadUpdater.outdateCount = 0; + if (ThreadUpdater.seconds > ThreadUpdater.interval) { + return ThreadUpdater.setInterval(); + } + }, + scrollBG: function() { + return ThreadUpdater.scrollBG = Conf['Scroll BG'] ? function() { + return true; + } : function() { + return !d.hidden; + }; + }, + interval: function(e) { + var val; + val = parseInt(this.value, 10); + if (val < 1) { + val = 1; + } + ThreadUpdater.interval = this.value = val; + if (e) { + return $.cb.value.call(this); + } + }, + load: function() { + var req; + req = ThreadUpdater.req; + switch (req.status) { + case 200: + ThreadUpdater.parse(req); + if (ThreadUpdater.thread.isArchived) { + return ThreadUpdater.kill(); + } else { + return ThreadUpdater.setInterval(); + } + break; + case 404: + return $.ajax("//a.4cdn.org/" + ThreadUpdater.thread.board + "/catalog.json", { + onloadend: function() { + var confirmed, i, k, len, len1, page, ref, ref1, thread; + if (this.status === 200) { + confirmed = true; + ref = this.response; + for (i = 0, len = ref.length; i < len; i++) { + page = ref[i]; + ref1 = page.threads; + for (k = 0, len1 = ref1.length; k < len1; k++) { + thread = ref1[k]; + if (thread.no === ThreadUpdater.thread.ID) { + confirmed = false; + break; + } + } + } + } else { + confirmed = false; + } + if (confirmed) { + return ThreadUpdater.kill(); + } else { + return ThreadUpdater.error(req); + } + } + }); + default: + return ThreadUpdater.error(req); + } + } + }, + kill: function() { + ThreadUpdater.thread.kill(); + ThreadUpdater.setInterval(); + return $.event('ThreadUpdate', { + 404: true, + threadID: ThreadUpdater.thread.fullID + }); + }, + error: function(req) { + if (req.status === 304) { + ThreadUpdater.set('status', ''); + } + ThreadUpdater.setInterval(); + if (!req.status) { + return ThreadUpdater.set('status', 'Connection Failed', 'warning'); + } else if (req.status !== 304) { + return ThreadUpdater.set('status', req.statusText + " (" + req.status + ")", 'warning'); + } + }, + setInterval: function() { + var cur, interval, j, limit; + clearTimeout(ThreadUpdater.timeoutID); + if (ThreadUpdater.thread.isDead) { + ThreadUpdater.set('status', (ThreadUpdater.thread.isArchived ? 'Archived' : '404'), 'warning'); + ThreadUpdater.set('timer', ''); + return; + } + if (ThreadUpdater.postID && ThreadUpdater.checkPostCount < 5) { + ThreadUpdater.set('timer', '...', 'loading'); + ThreadUpdater.timeoutID = setTimeout(ThreadUpdater.update, ++ThreadUpdater.checkPostCount * $.SECOND); + return; + } + if (!Conf['Auto Update']) { + ThreadUpdater.set('timer', 'Update'); + return; + } + interval = ThreadUpdater.interval; + if (Conf['Optional Increase']) { + limit = d.hidden ? 10 : 5; + j = Math.min(ThreadUpdater.outdateCount, limit); + cur = (Math.floor(interval * 0.1) || 1) * j * j; + ThreadUpdater.seconds = $.minmax(cur, interval, 300); + } else { + ThreadUpdater.seconds = interval; + } + return ThreadUpdater.timeout(); + }, + intervalShortcut: function() { + var settings; + Settings.open('Advanced'); + settings = $.id('fourchanx-settings'); + return $('input[name=Interval]', settings).focus(); + }, + set: function(name, text, klass) { + var el, node; + el = ThreadUpdater[name]; + if (node = el.firstChild) { + node.data = text; + } else { + el.textContent = text; + } + return el.className = klass != null ? klass : (text === '' ? 'empty' : ''); + }, + timeout: function() { + if (ThreadUpdater.seconds) { + ThreadUpdater.set('timer', ThreadUpdater.seconds); + ThreadUpdater.timeoutID = setTimeout(ThreadUpdater.timeout, 1000); + } else { + ThreadUpdater.outdateCount++; + ThreadUpdater.update(); + } + return ThreadUpdater.seconds--; + }, + update: function() { + var ref; + clearTimeout(ThreadUpdater.timeoutID); + ThreadUpdater.set('timer', '...', 'loading'); + if ((ref = ThreadUpdater.req) != null) { + ref.abort(); + } + return ThreadUpdater.req = $.ajax("//a.4cdn.org/" + ThreadUpdater.thread.board + "/thread/" + ThreadUpdater.thread + ".json", { + onloadend: ThreadUpdater.cb.load, + timeout: $.MINUTE + }, { + whenModified: 'ThreadUpdater' + }); + }, + updateThreadStatus: function(type, status) { + var change, hasChanged; + if (!(hasChanged = ThreadUpdater.thread["is" + type] !== status)) { + return; + } + ThreadUpdater.thread.setStatus(type, status); + if (type === 'Closed' && ThreadUpdater.thread.isArchived) { + return; + } + change = type === 'Sticky' ? status ? 'now a sticky' : 'not a sticky anymore' : status ? 'now closed' : 'not closed anymore'; + return new Notice('info', "The thread is " + change + ".", 30); + }, + parse: function(req) { + var ID, OP, board, deletedFiles, deletedPosts, files, firstPost, i, index, ipCountEl, k, l, lastPost, len, len1, len2, len3, m, newPosts, node, post, postObject, postObjects, posts, ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, scroll, thread, unreadCount, unreadQYCount; + postObjects = req.response.posts; + OP = postObjects[0]; + thread = ThreadUpdater.thread; + board = thread.board; + ref = ThreadUpdater.postIDs, lastPost = ref[ref.length - 1]; + if (postObjects[postObjects.length - 1].no < lastPost && new Date(req.getResponseHeader('Last-Modified')) - thread.posts[lastPost].info.date < 30 * $.SECOND) { + return; + } + Build.spoilerRange[board] = OP.custom_spoiler; + thread.setStatus('Archived', !!OP.archived); + ThreadUpdater.updateThreadStatus('Sticky', !!OP.sticky); + ThreadUpdater.updateThreadStatus('Closed', !!OP.closed); + thread.postLimit = !!OP.bumplimit; + thread.fileLimit = !!OP.imagelimit; + if (OP.unique_ips != null) { + thread.ipCount = OP.unique_ips; + } + posts = []; + index = []; + files = []; + newPosts = []; + for (i = 0, len = postObjects.length; i < len; i++) { + postObject = postObjects[i]; + ID = postObject.no; + index.push(ID); + if (postObject.fsize) { + files.push(ID); + } + if (ID <= lastPost) { + continue; + } + if ((post = thread.posts[ID]) && !post.isFetchedQuote) { + post.resurrect(); + continue; + } + newPosts.push(board + "." + ID); + node = Build.postFromObject(postObject, board.ID); + posts.push(new Post(node, thread, board)); + if (ThreadUpdater.postID === ID) { + delete ThreadUpdater.postID; + } + } + deletedPosts = []; + ref1 = ThreadUpdater.postIDs; + for (k = 0, len1 = ref1.length; k < len1; k++) { + ID = ref1[k]; + if (!(indexOf.call(index, ID) < 0)) { + continue; + } + thread.posts[ID].kill(); + deletedPosts.push(board + "." + ID); + } + ThreadUpdater.postIDs = index; + deletedFiles = []; + ref2 = ThreadUpdater.fileIDs; + for (l = 0, len2 = ref2.length; l < len2; l++) { + ID = ref2[l]; + if (!(!(indexOf.call(files, ID) >= 0 || (ref3 = board + "." + ID, indexOf.call(deletedPosts, ref3) >= 0)))) { + continue; + } + thread.posts[ID].kill(true); + deletedFiles.push(board + "." + ID); + } + ThreadUpdater.fileIDs = files; + if (!posts.length) { + ThreadUpdater.set('status', ''); + } else { + ThreadUpdater.set('status', "+" + posts.length, 'new'); + ThreadUpdater.outdateCount = 0; + unreadCount = (ref4 = Unread.posts) != null ? ref4.size : void 0; + unreadQYCount = (ref5 = Unread.postsQuotingYou) != null ? ref5.size : void 0; + Main.callbackNodes('Post', posts); + if (d.hidden || !d.hasFocus()) { + if (Conf['Beep Quoting You'] && ((ref6 = Unread.postsQuotingYou) != null ? ref6.size : void 0) > unreadQYCount) { + ThreadUpdater.playBeep(); + if (Conf['Beep']) { + ThreadUpdater.playBeep(); + } + } else if (Conf['Beep'] && ((ref7 = Unread.posts) != null ? ref7.size : void 0) > 0 && unreadCount === 0) { + ThreadUpdater.playBeep(); + } + } + scroll = Conf['Auto Scroll'] && ThreadUpdater.scrollBG() && ThreadUpdater.root.getBoundingClientRect().bottom - doc.clientHeight < 25; + firstPost = null; + for (m = 0, len3 = posts.length; m < len3; m++) { + post = posts[m]; + if (!QuoteThreading.insert(post)) { + firstPost || (firstPost = post.nodes.root); + $.add(ThreadUpdater.root, post.nodes.root); + } + } + $.event('PostsInserted'); + if (scroll) { + if (Conf['Bottom Scroll']) { + window.scrollTo(0, d.body.clientHeight); + } else { + if (firstPost) { + Header.scrollTo(firstPost); + } + } + } + } + if ((OP.unique_ips != null) && (ipCountEl = $.id('unique-ips'))) { + ipCountEl.textContent = OP.unique_ips; + ipCountEl.previousSibling.textContent = ipCountEl.previousSibling.textContent.replace(/\b(?:is|are)\b/, OP.unique_ips === 1 ? 'is' : 'are'); + ipCountEl.nextSibling.textContent = ipCountEl.nextSibling.textContent.replace(/\bposters?\b/, OP.unique_ips === 1 ? 'poster' : 'posters'); + } + return $.event('ThreadUpdate', { + 404: false, + threadID: thread.fullID, + newPosts: newPosts, + deletedPosts: deletedPosts, + deletedFiles: deletedFiles, + postCount: OP.replies + 1, + fileCount: OP.images + !!OP.fsize, + ipCount: OP.unique_ips + }); + } + }; + + return ThreadUpdater; + +}).call(this); + +ThreadWatcher = (function() { + var ThreadWatcher, + slice = [].slice; + + ThreadWatcher = { + init: function() { + var sc; + if (!(this.enabled = Conf['Thread Watcher'])) { + return; + } + this.shortcut = sc = $.el('a', { + id: 'watcher-link', + textContent: 'Watcher', + title: 'Thread Watcher', + href: 'javascript:;', + className: 'disabled fa fa-eye' + }); + this.db = new DataBoard('watchedThreads', this.refresh, true); + this.dialog = UI.dialog('thread-watcher', 'top: 50px; left: 0px;', { + innerHTML: "
      Thread Watcher ×
      " + }); + this.status = $('#watcher-status', this.dialog); + this.list = this.dialog.lastElementChild; + this.refreshButton = $('.refresh', this.dialog); + this.closeButton = $('.move > .close', this.dialog); + this.unreaddb = Unread.db || new DataBoard('lastReadPosts'); + this.unreadEnabled = Conf['Remember Last Read Post']; + $.on(d, 'QRPostSuccessful', this.cb.post); + $.on(sc, 'click', this.toggleWatcher); + $.on(this.refreshButton, 'click', this.buttonFetchAll); + $.on(this.closeButton, 'click', this.toggleWatcher); + $.on(d, '4chanXInitFinished', this.ready); + switch (g.VIEW) { + case 'index': + $.on(d, 'IndexRefresh', this.cb.onIndexRefresh); + break; + case 'thread': + $.on(d, 'ThreadUpdate', this.cb.onThreadRefresh); + } + if (Conf['Fixed Thread Watcher']) { + $.addClass(doc, 'fixed-watcher'); + } + if (Conf['Toggleable Thread Watcher']) { + this.dialog.hidden = true; + Header.addShortcut(sc); + $.addClass(doc, 'toggleable-watcher'); + } + ThreadWatcher.fetchAuto(); + if (g.VIEW === 'index' && Conf['JSON Index'] && Conf['Menu'] && g.BOARD.ID !== 'f') { + Menu.menu.addEntry({ + el: $.el('a', { + href: 'javascript:;', + className: 'has-shortcut-text' + }, { + innerHTML: "Alt+click" + }), + order: 6, + open: function(arg) { + var thread; + thread = arg.thread; + if (Conf['Index Mode'] !== 'catalog') { + return false; + } + this.el.firstElementChild.textContent = ThreadWatcher.isWatched(thread) ? 'Unwatch' : 'Watch'; + if (this.cb) { + $.off(this.el, 'click', this.cb); + } + this.cb = function() { + $.event('CloseMenu'); + return ThreadWatcher.toggle(thread); + }; + $.on(this.el, 'click', this.cb); + return true; + } + }); + } + Callbacks.Post.push({ + name: 'Thread Watcher', + cb: this.node + }); + return Callbacks.CatalogThread.push({ + name: 'Thread Watcher', + cb: this.catalogNode + }); + }, + isWatched: function(thread) { + var ref; + return (ref = ThreadWatcher.db) != null ? ref.get({ + boardID: thread.board.ID, + threadID: thread.ID + }) : void 0; + }, + node: function() { + var toggler; + if (this.isReply) { + return; + } + if (this.isClone) { + toggler = $('.watch-thread-link', this.nodes.post); + } else { + toggler = $.el('a', { + href: 'javascript:;', + className: 'watch-thread-link' + }); + $.before($('input', this.nodes.post), toggler); + } + return $.on(toggler, 'click', ThreadWatcher.cb.toggle); + }, + catalogNode: function() { + if (ThreadWatcher.isWatched(this.thread)) { + $.addClass(this.nodes.root, 'watched'); + } + $.on(this.nodes.thumb.parentNode, 'click', (function(_this) { + return function(e) { + if (!(e.button === 0 && e.altKey)) { + return; + } + ThreadWatcher.toggle(_this.thread); + return e.preventDefault(); + }; + })(this)); + return $.on(this.nodes.thumb.parentNode, 'mousedown', function(e) { + if (e.button === 0 && e.altKey) { + return e.preventDefault(); + } + }); + }, + ready: function() { + $.off(d, '4chanXInitFinished', ThreadWatcher.ready); + if (!Main.isThisPageLegit()) { + return; + } + ThreadWatcher.refresh(); + $.add(d.body, ThreadWatcher.dialog); + if (!Conf['Auto Watch']) { + return; + } + return $.get('AutoWatch', 0, function(arg) { + var AutoWatch, thread; + AutoWatch = arg.AutoWatch; + if (!(thread = g.BOARD.threads[AutoWatch])) { + return; + } + ThreadWatcher.add(thread); + return $["delete"]('AutoWatch'); + }); + }, + toggleWatcher: function() { + $.toggleClass(ThreadWatcher.shortcut, 'disabled'); + return ThreadWatcher.dialog.hidden = !ThreadWatcher.dialog.hidden; + }, + cb: { + openAll: function() { + var a, i, len, ref; + if ($.hasClass(this, 'disabled')) { + return; + } + ref = $$('a[title]', ThreadWatcher.list); + for (i = 0, len = ref.length; i < len; i++) { + a = ref[i]; + $.open(a.href); + } + return $.event('CloseMenu'); + }, + pruneDeads: function() { + var boardID, data, i, len, ref, ref1, threadID; + if ($.hasClass(this, 'disabled')) { + return; + } + ThreadWatcher.db.forceSync(); + ref = ThreadWatcher.getAll(); + for (i = 0, len = ref.length; i < len; i++) { + ref1 = ref[i], boardID = ref1.boardID, threadID = ref1.threadID, data = ref1.data; + if (!data.isDead) { + continue; + } + delete ThreadWatcher.db.data.boards[boardID][threadID]; + ThreadWatcher.db.deleteIfEmpty({ + boardID: boardID + }); + } + ThreadWatcher.db.save(); + ThreadWatcher.refresh(); + return $.event('CloseMenu'); + }, + toggle: function() { + var thread; + thread = Get.postFromNode(this).thread; + Index.followedThreadID = thread.ID; + ThreadWatcher.toggle(thread); + return delete Index.followedThreadID; + }, + rm: function() { + var boardID, ref, threadID; + ref = this.parentNode.dataset.fullID.split('.'), boardID = ref[0], threadID = ref[1]; + return ThreadWatcher.rm(boardID, +threadID); + }, + post: function(e) { + var boardID, postID, ref, threadID; + ref = e.detail, boardID = ref.boardID, threadID = ref.threadID, postID = ref.postID; + if (postID === threadID) { + if (Conf['Auto Watch']) { + return $.set('AutoWatch', threadID); + } + } else if (Conf['Auto Watch Reply']) { + return ThreadWatcher.add(g.threads[boardID + '.' + threadID]); + } + }, + onIndexRefresh: function() { + var boardID, data, db, ref, threadID; + db = ThreadWatcher.db; + boardID = g.BOARD.ID; + db.forceSync(); + ref = db.data.boards[boardID]; + for (threadID in ref) { + data = ref[threadID]; + if (!(data != null ? data.isDead : void 0) && !(threadID in g.BOARD.threads)) { + if (Conf['Auto Prune'] || !(data && typeof data === 'object')) { + db["delete"]({ + boardID: boardID, + threadID: threadID + }); + } else { + if (ThreadWatcher.unreadEnabled && Conf['Show Unread Count']) { + ThreadWatcher.fetchStatus({ + boardID: boardID, + threadID: threadID, + data: data + }); + } + data.isDead = true; + db.set({ + boardID: boardID, + threadID: threadID, + val: data + }); + } + } + } + return ThreadWatcher.refresh(); + }, + onThreadRefresh: function(e) { + var thread; + thread = g.threads[e.detail.threadID]; + if (!(e.detail[404] && ThreadWatcher.db.get({ + boardID: thread.board.ID, + threadID: thread.ID + }))) { + return; + } + return ThreadWatcher.add(thread); + } + }, + requests: [], + fetched: 0, + clearRequests: function() { + ThreadWatcher.requests = []; + ThreadWatcher.fetched = 0; + ThreadWatcher.status.textContent = ''; + return $.rmClass(ThreadWatcher.refreshButton, 'fa-spin'); + }, + abort: function() { + var i, len, ref, req; + ref = ThreadWatcher.requests; + for (i = 0, len = ref.length; i < len; i++) { + req = ref[i]; + if (req.readyState !== 4) { + req.abort(); + } + } + return ThreadWatcher.clearRequests(); + }, + fetchAuto: function() { + var db, interval, now; + clearTimeout(ThreadWatcher.timeout); + if (!Conf['Auto Update Thread Watcher']) { + return; + } + db = ThreadWatcher.db; + interval = ThreadWatcher.unreadEnabled && Conf['Show Unread Count'] ? 5 * $.MINUTE : 2 * $.HOUR; + now = Date.now(); + if (now >= (db.data.lastChecked || 0) + interval) { + db.data.lastChecked = now; + ThreadWatcher.fetchAllStatus(); + db.save(); + } + return ThreadWatcher.timeout = setTimeout(ThreadWatcher.fetchAuto, interval); + }, + buttonFetchAll: function() { + if (ThreadWatcher.requests.length) { + return ThreadWatcher.abort(); + } else { + return ThreadWatcher.fetchAllStatus(); + } + }, + fetchAllStatus: function() { + var i, len, ref, thread, threads; + ThreadWatcher.db.forceSync(); + ThreadWatcher.unreaddb.forceSync(); + if ((ref = QuoteYou.db) != null) { + ref.forceSync(); + } + if (!(threads = ThreadWatcher.getAll()).length) { + return; + } + for (i = 0, len = threads.length; i < len; i++) { + thread = threads[i]; + ThreadWatcher.fetchStatus(thread); + } + }, + fetchStatus: function(thread, force) { + var boardID, data, req, threadID; + boardID = thread.boardID, threadID = thread.threadID, data = thread.data; + if (data.isDead && !force) { + return; + } + if (ThreadWatcher.requests.length === 0) { + ThreadWatcher.status.textContent = '...'; + $.addClass(ThreadWatcher.refreshButton, 'fa-spin'); + } + req = $.ajax("//a.4cdn.org/" + boardID + "/thread/" + threadID + ".json", { + onloadend: function() { + return ThreadWatcher.parseStatus.call(this, thread); + }, + timeout: $.MINUTE + }, { + whenModified: force ? false : 'ThreadWatcher' + }); + return ThreadWatcher.requests.push(req); + }, + parseStatus: function(arg) { + var boardID, data, i, isDead, lastReadPost, len, match, postObj, quotesYou, quotingYou, ref, ref1, regexp, threadID, unread; + boardID = arg.boardID, threadID = arg.threadID, data = arg.data; + ThreadWatcher.fetched++; + if (ThreadWatcher.fetched === ThreadWatcher.requests.length) { + ThreadWatcher.clearRequests(); + } else { + ThreadWatcher.status.textContent = (Math.round(ThreadWatcher.fetched / ThreadWatcher.requests.length * 100)) + "%"; + } + if (this.status === 200 && this.response) { + isDead = !!this.response.posts[0].archived; + if (isDead && Conf['Auto Prune']) { + ThreadWatcher.db["delete"]({ + boardID: boardID, + threadID: threadID + }); + ThreadWatcher.refresh(); + return; + } + lastReadPost = ThreadWatcher.unreaddb.get({ + boardID: boardID, + threadID: threadID, + defaultValue: 0 + }); + unread = quotingYou = 0; + ref = this.response.posts; + for (i = 0, len = ref.length; i < len; i++) { + postObj = ref[i]; + if (!(postObj.no > lastReadPost)) { + continue; + } + if ((ref1 = QuoteYou.db) != null ? ref1.get({ + boardID: boardID, + threadID: threadID, + postID: postObj.no + }) : void 0) { + continue; + } + unread++; + if (!(QuoteYou.db && postObj.com)) { + continue; + } + quotesYou = false; + regexp = /]*\bhref="(?:\/([^\/]+)\/thread\/)?(\d+)?(?:#p(\d+))?"/g; + while (match = regexp.exec(postObj.com)) { + if (QuoteYou.db.get({ + boardID: match[1] || boardID, + threadID: match[2] || threadID, + postID: match[3] || match[2] || threadID + })) { + quotesYou = true; + break; + } + } + if (quotesYou && !Filter.isHidden(Build.parseJSON(postObj, boardID))) { + quotingYou++; + } + } + if (isDead !== data.isDead || unread !== data.unread || quotingYou !== data.quotingYou) { + data.isDead = isDead; + data.unread = unread; + data.quotingYou = quotingYou; + ThreadWatcher.db.set({ + boardID: boardID, + threadID: threadID, + val: data + }); + return ThreadWatcher.refresh(); + } + } else if (this.status === 404) { + if (Conf['Auto Prune']) { + ThreadWatcher.db["delete"]({ + boardID: boardID, + threadID: threadID + }); + } else { + data.isDead = true; + delete data.unread; + delete data.quotingYou; + ThreadWatcher.db.set({ + boardID: boardID, + threadID: threadID, + val: data + }); + } + return ThreadWatcher.refresh(); + } + }, + getAll: function() { + var all, boardID, data, ref, threadID, threads; + all = []; + ref = ThreadWatcher.db.data.boards; + for (boardID in ref) { + threads = ref[boardID]; + if (Conf['Current Board'] && boardID !== g.BOARD.ID) { + continue; + } + for (threadID in threads) { + data = threads[threadID]; + if (data && typeof data === 'object') { + all.push({ + boardID: boardID, + threadID: threadID, + data: data + }); + } + } + } + return all; + }, + makeLine: function(boardID, threadID, data) { + var count, div, fullID, link, title, x; + x = $.el('a', { + className: 'fa fa-times', + href: 'javascript:;' + }); + $.on(x, 'click', ThreadWatcher.cb.rm); + link = $.el('a', { + href: "/" + boardID + "/thread/" + threadID, + title: data.excerpt, + className: 'watcher-link' + }); + if (ThreadWatcher.unreadEnabled && Conf['Show Unread Count'] && (data.unread != null)) { + count = $.el('span', { + textContent: "(" + data.unread + ")", + className: 'watcher-unread' + }); + $.add(link, count); + } + title = $.el('span', { + textContent: data.excerpt, + className: 'watcher-title' + }); + $.add(link, title); + div = $.el('div'); + fullID = boardID + "." + threadID; + div.dataset.fullID = fullID; + if (g.VIEW === 'thread' && fullID === (g.BOARD + "." + g.THREADID)) { + $.addClass(div, 'current'); + } + if (data.isDead) { + $.addClass(div, 'dead-thread'); + } + if (ThreadWatcher.unreadEnabled && Conf['Show Unread Count']) { + if (data.unread === 0) { + $.addClass(div, 'replies-read'); + } + if (data.unread) { + $.addClass(div, 'replies-unread'); + } + if (data.quotingYou) { + $.addClass(div, 'replies-quoting-you'); + } + } + $.add(div, [x, $.tn(' '), link]); + return div; + }, + refresh: function() { + var boardID, data, i, j, len, len1, list, nodes, ref, ref1, ref2, refresher, threadID; + nodes = []; + ref = ThreadWatcher.getAll(); + for (i = 0, len = ref.length; i < len; i++) { + ref1 = ref[i], boardID = ref1.boardID, threadID = ref1.threadID, data = ref1.data; + nodes.push(ThreadWatcher.makeLine(boardID, threadID, data)); + } + list = ThreadWatcher.list; + $.rmAll(list); + $.add(list, nodes); + g.threads.forEach(function(thread) { + var helper, j, len1, post, ref2, toggler; + helper = ThreadWatcher.isWatched(thread) ? ['addClass', 'Unwatch'] : ['rmClass', 'Watch']; + if (thread.OP) { + ref2 = [thread.OP].concat(slice.call(thread.OP.clones)); + for (j = 0, len1 = ref2.length; j < len1; j++) { + post = ref2[j]; + toggler = $('.watch-thread-link', post.nodes.post); + $[helper[0]](toggler, 'watched'); + toggler.title = helper[1] + " Thread"; + } + } + if (thread.catalogView) { + return $[helper[0]](thread.catalogView.nodes.root, 'watched'); + } + }); + ThreadWatcher.refreshIcon(); + ref2 = ThreadWatcher.menu.refreshers; + for (j = 0, len1 = ref2.length; j < len1; j++) { + refresher = ref2[j]; + refresher(); + } + if (Index.nodes && Conf['Pin Watched Threads']) { + Index.sort(); + return Index.buildIndex(); + } + }, + refreshIcon: function() { + var className, i, len, ref; + ref = ['replies-unread', 'replies-quoting-you']; + for (i = 0, len = ref.length; i < len; i++) { + className = ref[i]; + ThreadWatcher.shortcut.classList.toggle(className, !!$("." + className, ThreadWatcher.dialog)); + } + }, + update: function(boardID, threadID, newData) { + var data, key, line, n, newLine, ref, val; + if (!(data = (ref = ThreadWatcher.db) != null ? ref.get({ + boardID: boardID, + threadID: threadID + }) : void 0)) { + return; + } + if (newData.isDead && Conf['Auto Prune']) { + ThreadWatcher.db["delete"]({ + boardID: boardID, + threadID: threadID + }); + ThreadWatcher.refresh(); + return; + } + n = 0; + for (key in newData) { + val = newData[key]; + if (data[key] !== val) { + n++; + } + } + if (!n) { + return; + } + ThreadWatcher.db.forceSync(); + if (!(data = ThreadWatcher.db.get({ + boardID: boardID, + threadID: threadID + }))) { + return; + } + $.extend(data, newData); + ThreadWatcher.db.set({ + boardID: boardID, + threadID: threadID, + val: data + }); + if (line = $("#watched-threads > [data-full-i-d='" + boardID + "." + threadID + "']", ThreadWatcher.dialog)) { + newLine = ThreadWatcher.makeLine(boardID, threadID, data); + $.replace(line, newLine); + return ThreadWatcher.refreshIcon(); + } else { + return ThreadWatcher.refresh(); + } + }, + set404: function(boardID, threadID, cb) { + var data, ref; + if (!(data = (ref = ThreadWatcher.db) != null ? ref.get({ + boardID: boardID, + threadID: threadID + }) : void 0)) { + return cb(); + } + if (Conf['Auto Prune']) { + ThreadWatcher.db["delete"]({ + boardID: boardID, + threadID: threadID + }); + return cb(); + } + if (data.isDead && !((data.unread != null) || (data.quotingYou != null))) { + return cb(); + } + data.isDead = true; + delete data.unread; + delete data.quotingYou; + return ThreadWatcher.db.set({ + boardID: boardID, + threadID: threadID, + val: data + }, cb); + }, + toggle: function(thread) { + var boardID, threadID; + boardID = thread.board.ID; + threadID = thread.ID; + if (ThreadWatcher.db.get({ + boardID: boardID, + threadID: threadID + })) { + return ThreadWatcher.rm(boardID, threadID); + } else { + return ThreadWatcher.add(thread); + } + }, + add: function(thread) { + var boardID, data, threadID; + data = {}; + boardID = thread.board.ID; + threadID = thread.ID; + if (thread.isDead) { + if (Conf['Auto Prune'] && ThreadWatcher.db.get({ + boardID: boardID, + threadID: threadID + })) { + ThreadWatcher.rm(boardID, threadID); + return; + } + data.isDead = true; + } + data.excerpt = Get.threadExcerpt(thread); + ThreadWatcher.db.set({ + boardID: boardID, + threadID: threadID, + val: data + }); + ThreadWatcher.refresh(); + if (ThreadWatcher.unreadEnabled && Conf['Show Unread Count']) { + return ThreadWatcher.fetchStatus({ + boardID: boardID, + threadID: threadID, + data: data + }, true); + } + }, + rm: function(boardID, threadID) { + ThreadWatcher.db["delete"]({ + boardID: boardID, + threadID: threadID + }); + return ThreadWatcher.refresh(); + }, + menu: { + refreshers: [], + init: function() { + var menu; + if (!Conf['Thread Watcher']) { + return; + } + menu = this.menu = new UI.Menu('thread watcher'); + $.on($('.menu-button', ThreadWatcher.dialog), 'click', function(e) { + return menu.toggle(e, this, ThreadWatcher); + }); + this.addHeaderMenuEntry(); + return this.addMenuEntries(); + }, + addHeaderMenuEntry: function() { + var entryEl; + if (g.VIEW !== 'thread') { + return; + } + entryEl = $.el('a', { + href: 'javascript:;' + }); + Header.menu.addEntry({ + el: entryEl, + order: 60 + }); + $.on(entryEl, 'click', function() { + return ThreadWatcher.toggle(g.threads[g.BOARD + "." + g.THREADID]); + }); + return this.refreshers.push(function() { + var addClass, ref, rmClass, text; + ref = $('.current', ThreadWatcher.list) ? ['unwatch-thread', 'watch-thread', 'Unwatch thread'] : ['watch-thread', 'unwatch-thread', 'Watch thread'], addClass = ref[0], rmClass = ref[1], text = ref[2]; + $.addClass(entryEl, addClass); + $.rmClass(entryEl, rmClass); + return entryEl.textContent = text; + }); + }, + addMenuEntries: function() { + var cb, conf, entries, entry, i, len, name, ref, ref1, refresh, subEntries; + entries = []; + entries.push({ + cb: ThreadWatcher.cb.openAll, + entry: { + el: $.el('a', { + textContent: 'Open all threads' + }) + }, + refresh: function() { + return (ThreadWatcher.list.firstElementChild ? $.rmClass : $.addClass)(this.el, 'disabled'); + } + }); + entries.push({ + cb: ThreadWatcher.cb.pruneDeads, + entry: { + el: $.el('a', { + textContent: 'Prune dead threads' + }) + }, + refresh: function() { + return ($('.dead-thread', ThreadWatcher.list) ? $.rmClass : $.addClass)(this.el, 'disabled'); + } + }); + subEntries = []; + ref = Config.threadWatcher; + for (name in ref) { + conf = ref[name]; + subEntries.push(this.createSubEntry(name, conf[1])); + } + entries.push({ + entry: { + el: $.el('span', { + textContent: 'Settings' + }), + subEntries: subEntries + } + }); + for (i = 0, len = entries.length; i < len; i++) { + ref1 = entries[i], entry = ref1.entry, cb = ref1.cb, refresh = ref1.refresh; + if (entry.el.nodeName === 'A') { + entry.el.href = 'javascript:;'; + } + if (cb) { + $.on(entry.el, 'click', cb); + } + if (refresh) { + this.refreshers.push(refresh.bind(entry)); + } + this.menu.addEntry(entry); + } + }, + createSubEntry: function(name, desc) { + var entry, input; + entry = { + type: 'thread watcher', + el: UI.checkbox(name, name.replace(' Thread Watcher', '')) + }; + entry.el.title = desc; + input = entry.el.firstElementChild; + if (name === 'Show Unread Count' && !ThreadWatcher.unreadEnabled) { + input.disabled = true; + $.addClass(entry.el, 'disabled'); + entry.el.title += '\n[Remember Last Read Post is disabled.]'; + } + $.on(input, 'change', $.cb.checked); + if (name === 'Current Board' || name === 'Show Unread Count') { + $.on(input, 'change', ThreadWatcher.refresh); + } + if (name === 'Show Unread Count' || name === 'Auto Update Thread Watcher') { + $.on(input, 'change', ThreadWatcher.fetchAuto); + } + return entry; + } + } + }; + + return ThreadWatcher; + +}).call(this); + +Unread = (function() { + var Unread; + + Unread = { + init: function() { + if (!(g.VIEW === 'thread' && (Conf['Unread Count'] || Conf['Unread Favicon'] || Conf['Unread Line'] || Conf['Remember Last Read Post'] || Conf['Desktop Notifications'] || Conf['Quote Threading']))) { + return; + } + if (Conf['Remember Last Read Post']) { + $.sync('Remember Last Read Post', function(enabled) { + return Conf['Remember Last Read Post'] = enabled; + }); + this.db = new DataBoard('lastReadPosts', this.sync); + } + this.hr = $.el('hr', { + id: 'unread-line' + }); + this.posts = new Set(); + this.postsQuotingYou = new Set(); + this.order = new RandomAccessList(); + this.position = null; + Callbacks.Thread.push({ + name: 'Unread', + cb: this.node + }); + return Callbacks.Post.push({ + name: 'Unread', + cb: this.addPost + }); + }, + node: function() { + var ID, j, len, ref, ref1; + Unread.thread = this; + Unread.title = d.title; + Unread.lastReadPost = ((ref = Unread.db) != null ? ref.get({ + boardID: this.board.ID, + threadID: this.ID + }) : void 0) || 0; + Unread.readCount = 0; + ref1 = this.posts.keys; + for (j = 0, len = ref1.length; j < len; j++) { + ID = ref1[j]; + if (+ID <= Unread.lastReadPost) { + Unread.readCount++; + } + } + $.one(d, '4chanXInitFinished', Unread.ready); + return $.on(d, 'ThreadUpdate', Unread.onUpdate); + }, + ready: function() { + if (Conf['Remember Last Read Post'] && Conf['Scroll to Last Read Post']) { + Unread.scroll(); + } + Unread.setLine(true); + Unread.read(); + Unread.update(); + $.on(d, 'scroll visibilitychange', Unread.read); + if (Conf['Unread Line']) { + return $.on(d, 'visibilitychange', Unread.setLine); + } + }, + positionPrev: function() { + if (Unread.position) { + return Unread.position.prev; + } else { + return Unread.order.last; + } + }, + scroll: function() { + var hash, position, ref, root; + if ((hash = location.hash.match(/\d+/)) && hash[0] in Unread.thread.posts) { + return; + } + ReplyPruning.showIfHidden((ref = Unread.position) != null ? ref.data.nodes.root.id : void 0); + position = Unread.positionPrev(); + while (position) { + root = position.data.nodes.root; + if (!root.getBoundingClientRect().height) { + position = position.prev; + } else { + Header.scrollToIfNeeded(root, true); + break; + } + } + }, + sync: function() { + var ID, i, j, lastReadPost, postIDs, ref, ref1; + if (Unread.lastReadPost == null) { + return; + } + lastReadPost = Unread.db.get({ + boardID: Unread.thread.board.ID, + threadID: Unread.thread.ID, + defaultValue: 0 + }); + if (!(Unread.lastReadPost < lastReadPost)) { + return; + } + Unread.lastReadPost = lastReadPost; + postIDs = Unread.thread.posts.keys; + for (i = j = ref = Unread.readCount, ref1 = postIDs.length; j < ref1; i = j += 1) { + ID = +postIDs[i]; + if (!Unread.thread.posts[ID].isFetchedQuote) { + if (ID > Unread.lastReadPost) { + break; + } + Unread.posts["delete"](ID); + Unread.postsQuotingYou["delete"](ID); + } + Unread.readCount++; + } + Unread.updatePosition(); + Unread.setLine(); + return Unread.update(); + }, + addPost: function() { + var ref; + if (this.isFetchedQuote || this.isClone) { + return; + } + Unread.order.push(this); + if (this.ID <= Unread.lastReadPost || this.isHidden || ((ref = QuoteYou.db) != null ? ref.get({ + boardID: this.board.ID, + threadID: this.thread.ID, + postID: this.ID + }) : void 0)) { + return; + } + Unread.posts.add(this.ID); + Unread.addPostQuotingYou(this); + return Unread.position != null ? Unread.position : Unread.position = Unread.order[this.ID]; + }, + addPostQuotingYou: function(post) { + var j, len, quotelink, ref, ref1; + ref = post.nodes.quotelinks; + for (j = 0, len = ref.length; j < len; j++) { + quotelink = ref[j]; + if (!((ref1 = QuoteYou.db) != null ? ref1.get(Get.postDataFromLink(quotelink)) : void 0)) { + continue; + } + Unread.postsQuotingYou.add(post.ID); + Unread.openNotification(post); + return; + } + }, + openNotification: function(post) { + var notif; + if (!Header.areNotificationsEnabled) { + return; + } + try { + notif = new Notification(post.info.nameBlock + " replied to you", { + body: post.info.commentDisplay, + icon: Favicon.logo + }); + notif.onclick = function() { + Header.scrollToIfNeeded(post.nodes.root, true); + return $.global(function() { + return window.focus(); + }); + }; + return notif.onshow = function() { + return setTimeout(function() { + return notif.close(); + }, 7 * $.SECOND); + }; + } catch (_error) {} + }, + onUpdate: function(e) { + if (!e.detail[404]) { + Unread.setLine(); + Unread.read(); + } + return Unread.update(); + }, + readSinglePost: function(post) { + var ID; + ID = post.ID; + if (!Unread.posts.has(ID)) { + return; + } + Unread.posts["delete"](ID); + Unread.postsQuotingYou["delete"](ID); + Unread.updatePosition(); + Unread.saveLastReadPost(); + return Unread.update(); + }, + read: $.debounce(100, function(e) { + var ID, count, data, ref, ref1, root; + if (!Unread.posts.size && Unread.readCount !== Unread.thread.posts.keys.length) { + Unread.saveLastReadPost(); + } + if (d.hidden || !Unread.posts.size) { + return; + } + count = 0; + while (Unread.position) { + ref = Unread.position, ID = ref.ID, data = ref.data; + root = data.nodes.root; + if (!(!root.getBoundingClientRect().height || Header.getBottomOf(root) > -1)) { + break; + } + count++; + Unread.posts["delete"](ID); + Unread.postsQuotingYou["delete"](ID); + if ((ref1 = QuoteYou.db) != null ? ref1.get({ + boardID: data.board.ID, + threadID: data.thread.ID, + postID: ID + }) : void 0) { + QuoteYou.lastRead = root; + } + Unread.position = Unread.position.next; + } + if (!count) { + return; + } + Unread.updatePosition(); + Unread.saveLastReadPost(); + if (e) { + return Unread.update(); + } + }), + updatePosition: function() { + while (Unread.position && !Unread.posts.has(Unread.position.ID)) { + Unread.position = Unread.position.next; + } + }, + saveLastReadPost: $.debounce(2 * $.SECOND, function() { + var ID, i, j, postIDs, ref, ref1; + $.forceSync('Remember Last Read Post'); + if (!(Conf['Remember Last Read Post'] && Unread.db)) { + return; + } + postIDs = Unread.thread.posts.keys; + for (i = j = ref = Unread.readCount, ref1 = postIDs.length; j < ref1; i = j += 1) { + ID = +postIDs[i]; + if (!Unread.thread.posts[ID].isFetchedQuote) { + if (Unread.posts.has(ID)) { + break; + } + Unread.lastReadPost = ID; + } + Unread.readCount++; + } + if (Unread.thread.isDead && !Unread.thread.isArchived) { + return; + } + Unread.db.forceSync(); + return Unread.db.set({ + boardID: Unread.thread.board.ID, + threadID: Unread.thread.ID, + val: Unread.lastReadPost + }); + }), + setLine: function(force) { + if (!Conf['Unread Line']) { + return; + } + if (Unread.hr.hidden || d.hidden || (force === true)) { + if ((Unread.linePosition = Unread.positionPrev())) { + $.after(Unread.linePosition.data.nodes.root, Unread.hr); + } else { + $.rm(Unread.hr); + } + } + return Unread.hr.hidden = Unread.linePosition === Unread.order.last; + }, + update: function() { + var count, countQuotingYou, isDead, titleCount, titleDead, titleQuotingYou; + count = Unread.posts.size; + countQuotingYou = Unread.postsQuotingYou.size; + if (Conf['Unread Count']) { + titleQuotingYou = Conf['Quoted Title'] && countQuotingYou ? '(!) ' : ''; + titleCount = count || !Conf['Hide Unread Count at (0)'] ? "(" + count + ") " : ''; + titleDead = Unread.thread.isDead ? Unread.title.replace('-', (Unread.thread.isArchived ? '- Archived -' : '- 404 -')) : Unread.title; + d.title = "" + titleQuotingYou + titleCount + titleDead; + } + $.forceSync('Remember Last Read Post'); + if (Conf['Remember Last Read Post'] && (!Unread.thread.isDead || Unread.thread.isArchived)) { + ThreadWatcher.update(Unread.thread.board.ID, Unread.thread.ID, { + isDead: Unread.thread.isDead, + unread: count, + quotingYou: countQuotingYou + }); + } + if (Conf['Unread Favicon']) { + isDead = Unread.thread.isDead; + Favicon.el.href = countQuotingYou ? Favicon[isDead ? 'unreadDeadY' : 'unreadY'] : count ? Favicon[isDead ? 'unreadDead' : 'unread'] : Favicon[isDead ? 'dead' : 'default']; + return $.add(d.head, Favicon.el); + } + } + }; + + return Unread; + +}).call(this); + +Captcha = {}; + +(function() { + Captcha.fixes = { + imageKeys: '789456123uiojklm'.split('').concat(['Comma', 'Period']), + imageKeys16: '7890uiopjkl'.split('').concat(['Semicolon', 'm', 'Comma', 'Period', 'Slash']), + css: '.rc-imageselect-target > div:focus, .rc-image-tile-target:focus {\n outline: 2px solid #4a90e2;\n}\n.rc-imageselect-target td:focus {\n box-shadow: inset 0 0 0 2px #4a90e2;\n outline: none;\n}\n.rc-button-default:focus {\n box-shadow: inset 0 0 0 2px #0063d6;\n}', + cssNoscript: '.fbc-payload-imageselect {\n position: relative;\n}\n.fbc-payload-imageselect > label {\n position: absolute;\n display: block;\n height: 93.3px;\n width: 93.3px;\n}\nlabel[data-row="0"] {top: 0px;}\nlabel[data-row="1"] {top: 93.3px;}\nlabel[data-row="2"] {top: 186.6px;}\nlabel[data-col="0"] {left: 0px;}\nlabel[data-col="1"] {left: 93.3px;}\nlabel[data-col="2"] {left: 186.6px;}\n.fbc-payload-imageselect > input:focus + label {\n outline: 2px solid #4a90e2;\n}\n.fbc-button-verify input:focus {\n box-shadow: inset 0 0 0 2px #0063d6;\n}\nbody.focus .fbc {\n box-shadow: inset 0 0 0 2px #4a90e2;\n}', + init: function() { + switch (location.pathname.split('/')[3]) { + case 'anchor': + return this.initMain(); + case 'frame': + return this.initPopup(); + case 'fallback': + return this.initNoscript(); + } + }, + initMain: function() { + var a, j, len, ref; + $.onExists(d.body, '#recaptcha-anchor', function(checkbox) { + var focus; + focus = function() { + var ref; + if (d.hasFocus() && ((ref = d.activeElement) === d.documentElement || ref === d.body)) { + return checkbox.focus(); + } + }; + focus(); + return $.on(window, 'focus', function() { + return $.queueTask(focus); + }); + }); + ref = $$('.rc-anchor-pt a'); + for (j = 0, len = ref.length; j < len; j++) { + a = ref[j]; + a.tabIndex = -1; + } + }, + initPopup: function() { + $.addStyle(this.css); + this.fixImages(); + new MutationObserver((function(_this) { + return function() { + return _this.fixImages(); + }; + })(this)).observe(d.body, { + childList: true, + subtree: true + }); + return $.on(d, 'keydown', this.keybinds.bind(this)); + }, + initNoscript: function() { + var data, ref, token; + this.noscript = true; + data = (token = (ref = $('.fbc-verification-token > textarea')) != null ? ref.value : void 0) ? { + token: token + } : { + working: true + }; + new Connection(window.parent, '*').send(data); + d.body.classList.toggle('focus', d.hasFocus()); + $.on(window, 'focus blur', function() { + return d.body.classList.toggle('focus', d.hasFocus()); + }); + this.images = $$('.fbc-payload-imageselect > input'); + this.width = 3; + if (this.images.length !== 9) { + return; + } + $.addStyle(this.cssNoscript); + this.addLabels(); + $.on(d, 'keydown', this.keybinds.bind(this)); + return $.on($('.fbc-imageselect-challenge > form'), 'submit', this.checkForm.bind(this)); + }, + fixImages: function() { + var img, j, len, ref; + this.images = $$('.rc-image-tile-target'); + if (!this.images.length) { + this.images = $$('.rc-imageselect-target > div, .rc-imageselect-target td'); + } + this.width = $$('.rc-imageselect-target tr:first-of-type td').length || Math.round(Math.sqrt(this.images.length)); + ref = this.images; + for (j = 0, len = ref.length; j < len; j++) { + img = ref[j]; + img.tabIndex = 0; + } + if (this.images.length === 9) { + this.addTooltips(this.images); + } else { + this.addTooltips16(this.images); + } + return this.complaintLinks(); + }, + complaintLinks: function() { + var errmsg, j, len, link, ref; + ref = $$('.rc-imageselect-incorrect-response, .rc-imageselect-error-select-one, .rc-imageselect-error-select-more, .rc-imageselect-error-dynamic-more'); + for (j = 0, len = ref.length; j < len; j++) { + errmsg = ref[j]; + if (!$('a', errmsg)) { + link = $.el('a', { + href: 'https://www.4chan-x.net/captchas.html', + target: '_blank', + textContent: '[complain]' + }); + $.add(errmsg, [$.tn(' '), link]); + } + } + }, + addLabels: function() { + var checkbox, i, imageSelect, label, labels; + imageSelect = $('.fbc-payload-imageselect'); + labels = (function() { + var j, len, ref, results; + ref = this.images; + results = []; + for (i = j = 0, len = ref.length; j < len; i = ++j) { + checkbox = ref[i]; + checkbox.id = "checkbox-" + i; + label = $.el('label', { + htmlFor: checkbox.id + }); + label.dataset.row = Math.floor(i / 3); + label.dataset.col = i % 3; + $.after(checkbox, label); + results.push(label); + } + return results; + }).call(this); + return this.addTooltips(labels); + }, + addTooltips: function(nodes) { + var i, j, len, node; + for (i = j = 0, len = nodes.length; j < len; i = ++j) { + node = nodes[i]; + node.title = this.imageKeys[i] + " or " + (this.imageKeys[i + 9][0].toUpperCase()) + this.imageKeys[i + 9].slice(1); + } + }, + addTooltips16: function(nodes) { + var i, j, key, len, node, ref; + ref = this.imageKeys16; + for (i = j = 0, len = ref.length; j < len; i = ++j) { + key = ref[i]; + if (i % 4 < this.width && (node = nodes[nodes.length - (4 - Math.floor(i / 4)) * this.width + (i % 4)])) { + node.title = "" + (key[0].toUpperCase()) + key.slice(1); + } + } + }, + checkForm: function(e) { + var checkbox, j, len, n, ref; + n = 0; + ref = this.images; + for (j = 0, len = ref.length; j < len; j++) { + checkbox = ref[j]; + if (checkbox.checked) { + n++; + } + } + if (n === 0) { + return e.preventDefault(); + } + }, + keybinds: function(e) { + var dx, i, img, key, last, n, reload, verify, w, x; + if (!(this.images && doc.contains(this.images[0]))) { + return; + } + n = this.images.length; + w = this.width; + last = n + w - 1; + reload = $('#recaptcha-reload-button, .fbc-button-reload'); + verify = $('#recaptcha-verify-button, .fbc-button-verify > input'); + x = this.images.indexOf(d.activeElement); + if (x < 0) { + x = d.activeElement === verify ? last : n; + } + key = Keybinds.keyCode(e); + if (!this.noscript && key === 'Space' && x < n) { + this.images[x].click(); + } else if (n === 9 && (i = this.imageKeys.indexOf(key)) >= 0) { + this.images[i % 9].click(); + verify.focus(); + } else if (n !== 9 && (i = this.imageKeys16.indexOf(key)) >= 0 && i % 4 < w && (img = this.images[n - (4 - Math.floor(i / 4)) * w + (i % 4)])) { + img.click(); + verify.focus(); + } else if (dx = { + 'Up': n, + 'Down': w, + 'Left': last, + 'Right': 1 + }[key]) { + x = (x + dx) % (n + w); + if ((n < x && x < last)) { + x = dx === last ? n : last; + } + (this.images[x] || (x === n ? reload : void 0) || (x === last ? verify : void 0)).focus(); + } else { + return; + } + e.preventDefault(); + return e.stopPropagation(); + } + }; + +}).call(this); + +(function() { + Captcha.replace = { + init: function() { + if (!(d.cookie.indexOf('pass_enabled=1') < 0)) { + return; + } + if (location.hostname === 'sys.4chan.org' && /[?&]altc\b/.test(location.search) && Main.jsEnabled) { + $.onExists(doc, 'script[src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"]', function() { + $.global(function() { + return window.el.onload = null; + }); + return Captcha.v1.create(); + }); + return; + } + if (((Conf['Use Recaptcha v1'] && location.hostname === 'boards.4chan.org') || (Conf['Use Recaptcha v1 in Reports'] && location.hostname === 'sys.4chan.org')) && Main.jsEnabled) { + $.ready(Captcha.replace.v1); + return; + } + if (Conf['Force Noscript Captcha'] && Main.jsEnabled) { + $.ready(Captcha.replace.noscript); + return; + } + if (Conf['captchaLanguage'].trim() || Conf['Captcha Fixes']) { + if (location.hostname === 'boards.4chan.org') { + return $.onExists(doc, '#captchaFormPart', function(node) { + return $.onExists(node, 'iframe', Captcha.replace.iframe); + }); + } else { + return $.onExists(doc, 'iframe', Captcha.replace.iframe); + } + } + }, + noscript: function() { + var insert, noscript, original, span, toggle; + if (!((original = $('#g-recaptcha, #captchaContainerAlt')) && (noscript = $('noscript')))) { + return; + } + span = $.el('span', { + id: 'captcha-forced-noscript' + }); + $.replace(noscript, span); + $.rm(original); + insert = function() { + span.innerHTML = noscript.textContent; + return Captcha.replace.iframe($('iframe', span)); + }; + if ((toggle = $('#togglePostFormLink a, #form-link'))) { + return $.on(toggle, 'click', insert); + } else { + return insert(); + } + }, + v1: function() { + var form, link; + if (!$.id('g-recaptcha')) { + return; + } + Captcha.v1.replace(); + if ((link = $.id('form-link'))) { + return $.on(link, 'click', function() { + return Captcha.v1.create(); + }); + } else if (location.hostname === 'boards.4chan.org') { + form = $.id('postForm'); + return form.addEventListener('focus', (function() { + return Captcha.v1.create(); + }), true); + } else { + return Captcha.v1.create(); + } + }, + iframe: function(iframe) { + var lang, src; + if ((lang = Conf['captchaLanguage'].trim())) { + src = /[?&]hl=/.test(iframe.src) ? iframe.src.replace(/([?&]hl=)[^&]*/, '$1' + encodeURIComponent(lang)) : iframe.src + ("&hl=" + (encodeURIComponent(lang))); + if (iframe.src !== src) { + iframe.src = src; + } + } + return Captcha.replace.autocopy(iframe); + }, + autocopy: function(iframe) { + if (!(Conf['Captcha Fixes'] && /^https:\/\/www\.google\.com\/recaptcha\/api\/fallback\?/.test(iframe.src))) { + return; + } + return new Connection(iframe, 'https://www.google.com', { + working: function() { + var ref, ref1; + if ((ref = $.id('qr')) != null ? ref.contains(iframe) : void 0) { + return (ref1 = $('#qr .captcha-container textarea')) != null ? ref1.parentNode.hidden = true : void 0; + } + }, + token: function(token) { + var node, textarea; + node = iframe; + while ((node = node.parentNode)) { + if ((textarea = $('textarea', node))) { + break; + } + } + textarea.value = token; + return $.event('input', null, textarea); + } + }); + } + }; + +}).call(this); + +(function() { + Captcha.v1 = { + blank: "data:image/svg+xml,", + init: function() { + var imgContainer, input; + if (d.cookie.indexOf('pass_enabled=1') >= 0) { + return; + } + if (!(this.isEnabled = !!$('#g-recaptcha, #captchaContainerAlt'))) { + return; + } + imgContainer = $.el('div', { + className: 'captcha-img', + title: 'Reload reCAPTCHA' + }); + $.extend(imgContainer, { + innerHTML: "" + }); + input = $.el('input', { + className: 'captcha-input field', + title: 'Verification', + autocomplete: 'off', + spellcheck: false + }); + this.nodes = { + img: imgContainer.firstChild, + input: input + }; + $.on(input, 'blur', QR.focusout); + $.on(input, 'focus', QR.focusin); + $.on(input, 'keydown', QR.captcha.keydown.bind(QR.captcha)); + $.on(this.nodes.img.parentNode, 'click', QR.captcha.reload.bind(QR.captcha)); + $.addClass(QR.nodes.el, 'has-captcha', 'captcha-v1'); + $.after(QR.nodes.com.parentNode, [imgContainer, input]); + this.captchas = []; + $.get('captchas', [], function(arg) { + var captchas; + captchas = arg.captchas; + QR.captcha.sync(captchas); + return QR.captcha.clear(); + }); + $.sync('captchas', this.sync); + this.replace(); + this.beforeSetup(); + if (Conf['Auto-load captcha']) { + this.setup(); + } + new MutationObserver(this.afterSetup).observe($.id('captchaContainerAlt'), { + childList: true + }); + return this.afterSetup(); + }, + replace: function() { + var container, old; + if (this.script) { + return; + } + if (!(this.script = $('script[src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"]', d.head))) { + this.script = $.el('script', { + src: '//www.google.com/recaptcha/api/js/recaptcha_ajax.js' + }); + $.add(d.head, this.script); + } + if (old = $.id('g-recaptcha')) { + container = $.el('div', { + id: 'captchaContainerAlt' + }); + return $.replace(old, container); + } + }, + create: function() { + var cont, lang; + cont = $.id('captchaContainerAlt'); + if (this.occupied) { + return; + } + this.occupied = true; + if ((lang = Conf['captchaLanguage'].trim())) { + cont.dataset.lang = lang; + } + $.onExists(cont, '#recaptcha_image', function(image) { + return $.on(image, 'click', function() { + if ($.id('recaptcha_challenge_image')) { + return $.global(function() { + return window.Recaptcha.reload(); + }); + } + }); + }); + $.onExists(cont, '#recaptcha_response_field', function(field) { + $.on(field, 'keydown', function(e) { + if (e.keyCode === 8 && !field.value) { + return $.global(function() { + return window.Recaptcha.reload(); + }); + } + }); + if (location.hostname === 'sys.4chan.org') { + return field.focus(); + } + }); + return $.global(function() { + var container, options, script; + container = document.getElementById('captchaContainerAlt'); + options = { + theme: 'clean', + tabindex: { + "boards.4chan.org": 5 + }[location.hostname], + lang: container.dataset.lang + }; + if (window.Recaptcha) { + return window.Recaptcha.create('6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc', container, options); + } else { + script = document.head.querySelector('script[src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"]'); + return script.addEventListener('load', function() { + return window.Recaptcha.create('6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc', container, options); + }, false); + } + }); + }, + cb: { + focus: function() { + return QR.captcha.setup(false, true); + } + }, + beforeSetup: function() { + var img, input, ref; + ref = this.nodes, img = ref.img, input = ref.input; + img.parentNode.hidden = true; + img.src = this.blank; + input.value = ''; + input.placeholder = 'Focus to load reCAPTCHA'; + this.count(); + return $.on(input, 'focus click', this.cb.focus); + }, + needed: function() { + var captchaCount, postsCount; + captchaCount = this.captchas.length; + if (QR.req) { + captchaCount++; + } + postsCount = QR.posts.length; + if (postsCount === 1 && !Conf['Auto-load captcha'] && !QR.posts[0].com && !QR.posts[0].file) { + postsCount = 0; + } + return captchaCount < postsCount; + }, + onNewPost: function() {}, + onPostChange: function() {}, + setup: function(focus, force) { + if (!(this.isEnabled && (force || this.needed()))) { + return; + } + this.create(); + if (focus) { + $.addClass(QR.nodes.el, 'focus'); + return this.nodes.input.focus(); + } + }, + afterSetup: function() { + var challenge, img, input, ref, setLifetime; + if (!(challenge = $.id('recaptcha_challenge_field_holder'))) { + return; + } + if (challenge === QR.captcha.nodes.challenge) { + return; + } + setLifetime = function(e) { + return QR.captcha.lifetime = e.detail; + }; + $.on(window, 'captcha:timeout', setLifetime); + $.global(function() { + return window.dispatchEvent(new CustomEvent('captcha:timeout', { + detail: window.RecaptchaState.timeout + })); + }); + $.off(window, 'captcha:timeout', setLifetime); + ref = QR.captcha.nodes, img = ref.img, input = ref.input; + img.parentNode.hidden = false; + input.placeholder = 'Verification'; + QR.captcha.count(); + $.off(input, 'focus click', QR.captcha.cb.focus); + QR.captcha.nodes.challenge = challenge; + new MutationObserver(QR.captcha.load.bind(QR.captcha)).observe(challenge, { + childList: true, + subtree: true, + attributes: true + }); + QR.captcha.load(); + if (QR.nodes.el.getBoundingClientRect().bottom > doc.clientHeight) { + QR.nodes.el.style.top = null; + return QR.nodes.el.style.bottom = '0px'; + } + }, + destroy: function() { + if (!this.script) { + return; + } + $.global(function() { + return window.Recaptcha.destroy(); + }); + delete this.occupied; + if (this.nodes) { + return this.beforeSetup(); + } + }, + sync: function(captchas) { + if (captchas == null) { + captchas = []; + } + QR.captcha.captchas = captchas; + return QR.captcha.count(); + }, + getOne: function() { + var captcha, challenge, response, timeout; + this.clear(); + if (captcha = this.captchas.shift()) { + this.count(); + $.set('captchas', this.captchas); + return captcha; + } else { + challenge = this.nodes.img.alt; + timeout = this.timeout; + if (/\S/.test(response = this.nodes.input.value)) { + this.destroy(); + return { + challenge: challenge, + response: response, + timeout: timeout + }; + } else { + return null; + } + } + }, + save: function() { + var response; + if (!/\S/.test(response = this.nodes.input.value)) { + return; + } + this.nodes.input.value = ''; + this.captchas.push({ + challenge: this.nodes.img.alt, + response: response, + timeout: this.timeout + }); + this.captchas.sort(function(a, b) { + return a.timeout - b.timeout; + }); + this.count(); + this.destroy(); + this.setup(false, true); + return $.set('captchas', this.captchas); + }, + clear: function() { + var captcha, i, j, len, now, ref; + if (!this.captchas.length) { + return; + } + $.forceSync('captchas'); + now = Date.now(); + ref = this.captchas; + for (i = j = 0, len = ref.length; j < len; i = ++j) { + captcha = ref[i]; + if (captcha.timeout > now) { + break; + } + } + if (!i) { + return; + } + this.captchas = this.captchas.slice(i); + this.count(); + return $.set('captchas', this.captchas); + }, + load: function() { + var challenge, challenge_image; + if ($('#captchaContainerAlt[class~="recaptcha_is_showing_audio"]')) { + this.nodes.img.src = this.blank; + return; + } + if (!this.nodes.challenge.firstChild) { + return; + } + if (!(challenge_image = $.id('recaptcha_challenge_image'))) { + return; + } + this.timeout = Date.now() + this.lifetime * $.SECOND - $.MINUTE; + challenge = this.nodes.challenge.firstChild.value; + this.nodes.img.alt = challenge; + this.nodes.img.src = challenge_image.src; + this.nodes.input.value = ''; + return this.clear(); + }, + count: function() { + var count, placeholder; + count = this.captchas ? this.captchas.length : 0; + placeholder = this.nodes.input.placeholder.replace(/\ \(.*\)$/, ''); + placeholder += (function() { + switch (count) { + case 0: + if (placeholder === 'Verification') { + return ' (Shift + Enter to cache)'; + } else { + return ''; + } + break; + case 1: + return ' (1 cached captcha)'; + default: + return " (" + count + " cached captchas)"; + } + })(); + this.nodes.input.placeholder = placeholder; + this.nodes.input.alt = count; + clearTimeout(this.timer); + if (count) { + return this.timer = setTimeout(this.clear.bind(this), this.captchas[0].timeout - Date.now()); + } + }, + reload: function(focus) { + $.global(function() { + if (window.Recaptcha.type === 'image') { + window.Recaptcha.reload(); + } else { + window.Recaptcha.switch_type('image'); + } + return window.Recaptcha.should_focus = false; + }); + if (focus) { + return this.nodes.input.focus(); + } + }, + keydown: function(e) { + if (e.keyCode === 8 && !this.nodes.input.value) { + this.reload(); + } else if (e.keyCode === 13 && e.shiftKey) { + this.save(); + } else { + return; + } + return e.preventDefault(); + } + }; + +}).call(this); + +(function() { + Captcha.v2 = { + lifetime: 2 * $.MINUTE, + init: function() { + var counter, root; + if (d.cookie.indexOf('pass_enabled=1') >= 0) { + return; + } + if (!(this.isEnabled = !!$('#g-recaptcha, #captchaContainerAlt, #captcha-forced-noscript'))) { + return; + } + if ((this.noscript = Conf['Force Noscript Captcha'] || !Main.jsEnabled)) { + $.addClass(QR.nodes.el, 'noscript-captcha'); + } + this.captchas = []; + $.get('captchas', [], function(arg) { + var captchas; + captchas = arg.captchas; + return QR.captcha.sync(captchas); + }); + $.sync('captchas', this.sync.bind(this)); + root = $.el('div', { + className: 'captcha-root' + }); + $.extend(root, { + innerHTML: "
      " + }); + counter = $('.captcha-counter > a', root); + this.nodes = { + root: root, + counter: counter + }; + this.count(); + $.addClass(QR.nodes.el, 'has-captcha', 'captcha-v2'); + $.after(QR.nodes.com.parentNode, root); + $.on(counter, 'click', this.toggle.bind(this)); + $.on(counter, 'keydown', (function(_this) { + return function(e) { + if (Keybinds.keyCode(e) !== 'Space') { + return; + } + _this.toggle(); + e.preventDefault(); + return e.stopPropagation(); + }; + })(this)); + return $.on(window, 'captcha:success', (function(_this) { + return function() { + return $.queueTask(function() { + return _this.save(false); + }); + }; + })(this)); + }, + timeouts: {}, + postsCount: 0, + noscriptURL: function() { + var lang, url; + url = 'https://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc'; + if ((lang = Conf['captchaLanguage'].trim())) { + url += "&hl=" + (encodeURIComponent(lang)); + } + return url; + }, + needed: function() { + var captchaCount; + captchaCount = this.captchas.length; + if (QR.req) { + captchaCount++; + } + this.postsCount = QR.posts.length; + if (this.postsCount === 1 && !Conf['Auto-load captcha'] && !QR.posts[0].com && !QR.posts[0].file) { + this.postsCount = 0; + } + return captchaCount < this.postsCount; + }, + onNewPost: function() { + return this.setup(); + }, + onPostChange: function() { + if (this.postsCount === 0) { + this.setup(); + } + if (QR.posts.length === 1 && !Conf['Auto-load captcha'] && !QR.posts[0].com && !QR.posts[0].file) { + return this.postsCount = 0; + } + }, + toggle: function() { + if (this.nodes.container && !this.timeouts.destroy) { + return this.destroy(); + } else { + return this.setup(true, true); + } + }, + setup: function(focus, force) { + if (!(this.isEnabled && (this.needed() || force))) { + return; + } + if (focus) { + $.addClass(QR.nodes.el, 'focus'); + this.nodes.counter.focus(); + } + if (this.timeouts.destroy) { + clearTimeout(this.timeouts.destroy); + delete this.timeouts.destroy; + return this.reload(); + } + if (this.nodes.container) { + $.queueTask((function(_this) { + return function() { + var iframe; + if (_this.nodes.container && d.activeElement === _this.nodes.counter && (iframe = $('iframe', _this.nodes.container))) { + iframe.focus(); + return QR.focus(); + } + }; + })(this)); + return; + } + this.nodes.container = $.el('div', { + className: 'captcha-container' + }); + $.prepend(this.nodes.root, this.nodes.container); + new MutationObserver(this.afterSetup.bind(this)).observe(this.nodes.container, { + childList: true, + subtree: true + }); + if (this.noscript) { + return this.setupNoscript(); + } else { + return this.setupJS(); + } + }, + setupNoscript: function() { + var div, iframe, textarea; + iframe = $.el('iframe', { + id: 'qr-captcha-iframe', + src: this.noscriptURL() + }); + div = $.el('div'); + textarea = $.el('textarea'); + $.add(div, textarea); + return $.add(this.nodes.container, [iframe, div]); + }, + setupJS: function() { + return $.global(function() { + var cbNative, render; + render = function() { + var classList, container; + classList = document.documentElement.classList; + container = document.querySelector('#qr .captcha-container'); + return container.dataset.widgetID = window.grecaptcha.render(container, { + sitekey: '6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc', + theme: classList.contains('tomorrow') || classList.contains('dark-captcha') ? 'dark' : 'light', + callback: function(response) { + return window.dispatchEvent(new CustomEvent('captcha:success', { + detail: response + })); + } + }); + }; + if (window.grecaptcha) { + return render(); + } else { + cbNative = window.onRecaptchaLoaded; + return window.onRecaptchaLoaded = function() { + render(); + return cbNative(); + }; + } + }); + }, + afterSetup: function(mutations) { + var iframe, j, k, len, len1, mutation, node, ref, textarea; + for (j = 0, len = mutations.length; j < len; j++) { + mutation = mutations[j]; + ref = mutation.addedNodes; + for (k = 0, len1 = ref.length; k < len1; k++) { + node = ref[k]; + if ((iframe = $.x('./descendant-or-self::iframe', node))) { + this.setupIFrame(iframe); + } + if ((textarea = $.x('./descendant-or-self::textarea', node))) { + this.setupTextArea(textarea); + } + } + } + }, + setupIFrame: function(iframe) { + if (!doc.contains(iframe)) { + return; + } + Captcha.replace.iframe(iframe); + $.addClass(QR.nodes.el, 'captcha-open'); + this.fixQRPosition(); + $.on(iframe, 'load', this.fixQRPosition); + if (d.activeElement === this.nodes.counter) { + iframe.focus(); + } + return $.global(function() { + var f; + f = document.querySelector('#qr iframe'); + return f.focus = f.blur = function() {}; + }); + }, + fixQRPosition: function() { + if (QR.nodes.el.getBoundingClientRect().bottom > doc.clientHeight) { + QR.nodes.el.style.top = null; + return QR.nodes.el.style.bottom = '0px'; + } + }, + setupTextArea: function(textarea) { + return $.one(textarea, 'input', (function(_this) { + return function() { + return _this.save(true); + }; + })(this)); + }, + destroy: function() { + var garbage, i, ins, node, ref; + if (!this.isEnabled) { + return; + } + delete this.timeouts.destroy; + $.rmClass(QR.nodes.el, 'captcha-open'); + if (this.nodes.container) { + $.rm(this.nodes.container); + } + delete this.nodes.container; + garbage = $.X('//iframe[starts-with(@src, "https://www.google.com/recaptcha/api2/frame")]/ancestor-or-self::*[parent::body]'); + i = 0; + while (node = garbage.snapshotItem(i++)) { + if (((ref = (ins = node.nextSibling)) != null ? ref.nodeName : void 0) === 'INS') { + $.rm(ins); + } + $.rm(node); + } + }, + sync: function(captchas) { + if (captchas == null) { + captchas = []; + } + this.captchas = captchas; + this.clear(); + return this.count(); + }, + getOne: function() { + var captcha; + this.clear(); + if ((captcha = this.captchas.shift())) { + $.set('captchas', this.captchas); + this.count(); + return captcha; + } else { + return null; + } + }, + save: function(pasted, token) { + var base, focus, ref; + $.forceSync('captchas'); + this.captchas.push({ + response: token || $('textarea', this.nodes.container).value, + timeout: Date.now() + this.lifetime + }); + this.captchas.sort(function(a, b) { + return a.timeout - b.timeout; + }); + $.set('captchas', this.captchas); + this.count(); + focus = ((ref = d.activeElement) != null ? ref.nodeName : void 0) === 'IFRAME' && /https?:\/\/www\.google\.com\/recaptcha\//.test(d.activeElement.src); + if (this.needed()) { + if (focus) { + if (QR.cooldown.auto || Conf['Post on Captcha Completion']) { + this.nodes.counter.focus(); + } else { + QR.nodes.status.focus(); + } + } + this.reload(); + } else { + if (pasted) { + this.destroy(); + } else { + if ((base = this.timeouts).destroy == null) { + base.destroy = setTimeout(this.destroy.bind(this), 3 * $.SECOND); + } + } + if (focus) { + QR.nodes.status.focus(); + } + } + if (Conf['Post on Captcha Completion'] && !QR.cooldown.auto) { + return QR.submit(); + } + }, + clear: function() { + var captcha, i, j, len, now, ref; + if (!this.captchas.length) { + return; + } + $.forceSync('captchas'); + now = Date.now(); + ref = this.captchas; + for (i = j = 0, len = ref.length; j < len; i = ++j) { + captcha = ref[i]; + if (captcha.timeout > now) { + break; + } + } + if (!i) { + return; + } + this.captchas = this.captchas.slice(i); + this.count(); + $.set('captchas', this.captchas); + return this.setup(d.activeElement === QR.nodes.status); + }, + count: function() { + this.nodes.counter.textContent = "Captchas: " + this.captchas.length; + clearTimeout(this.timeouts.clear); + if (this.captchas.length) { + return this.timeouts.clear = setTimeout(this.clear.bind(this), this.captchas[0].timeout - Date.now()); + } + }, + reload: function() { + if ($('iframe[src^="https://www.google.com/recaptcha/api/fallback?"]', this.nodes.container)) { + this.destroy(); + return this.setup(false, true); + } else { + return $.global(function() { + var container; + container = document.querySelector('#qr .captcha-container'); + return window.grecaptcha.reset(container.dataset.widgetID); + }); + } + } + }; + +}).call(this); + +PassLink = (function() { + var PassLink; + + PassLink = { + init: function() { + if (!Conf['Pass Link']) { + return; + } + return Main.ready(this.ready); + }, + ready: function() { + var passLink, styleSelector; + if (!(styleSelector = $.id('styleSelector'))) { + return; + } + passLink = $.el('span', { + className: 'brackets-wrap pass-link-container' + }); + $.extend(passLink, { + innerHTML: "4chan Pass" + }); + $.on(passLink.firstElementChild, 'click', function() { + return window.open('//sys.4chan.org/auth', Date.now(), 'width=500,height=280,toolbar=0'); + }); + return $.before(styleSelector.previousSibling, [passLink, $.tn('\u00A0\u00A0')]); + } + }; + + return PassLink; + +}).call(this); + +PostSuccessful = (function() { + var PostSuccessful; + + PostSuccessful = { + init: function() { + if (!Conf['Remember Your Posts']) { + return; + } + return $.ready(this.ready); + }, + ready: function() { + var _, db, postID, ref, threadID; + if (d.title !== 'Post successful!') { + return; + } + ref = $('h1').nextSibling.textContent.match(/thread:(\d+),no:(\d+)/), _ = ref[0], threadID = ref[1], postID = ref[2]; + postID = +postID; + threadID = +threadID || postID; + db = new DataBoard('yourPosts'); + return db.set({ + boardID: g.BOARD.ID, + threadID: threadID, + postID: postID, + val: true + }); + } + }; + + return PostSuccessful; + +}).call(this); + +QR = (function() { + var QR, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, + slice = [].slice; + + QR = { + mimeTypes: ['image/jpeg', 'image/png', 'image/gif', 'application/pdf', 'application/vnd.adobe.flash.movie', 'application/x-shockwave-flash', 'video/webm'], + validExtension: /\.(jpe?g|png|gif|pdf|swf|webm)$/i, + typeFromExtension: { + 'jpg': 'image/jpeg', + 'jpeg': 'image/jpeg', + 'png': 'image/png', + 'gif': 'image/gif', + 'pdf': 'application/pdf', + 'swf': 'application/vnd.adobe.flash.movie', + 'webm': 'video/webm' + }, + extensionFromType: { + 'image/jpeg': 'jpg', + 'image/png': 'png', + 'image/gif': 'gif', + 'application/pdf': 'pdf', + 'application/vnd.adobe.flash.movie': 'swf', + 'application/x-shockwave-flash': 'swf', + 'video/webm': 'webm' + }, + init: function() { + var sc, version; + if (!Conf['Quick Reply']) { + return; + } + this.posts = []; + if (g.VIEW === 'archive') { + return; + } + version = Conf['Use Recaptcha v1'] && Main.jsEnabled ? 'v1' : 'v2'; + this.captcha = Captcha[version]; + $.on(d, '4chanXInitFinished', this.initReady); + Callbacks.Post.push({ + name: 'Quick Reply', + cb: this.node + }); + if (Conf['QR Shortcut']) { + this.shortcut = sc = $.el('a', { + className: 'qr-shortcut fa fa-comment-o disabled', + textContent: 'QR', + title: 'Quick Reply', + href: 'javascript:;' + }); + $.on(sc, 'click', function() { + if (!QR.postingIsEnabled) { + return; + } + if (Conf['Persistent QR'] || !QR.nodes || QR.nodes.el.hidden) { + QR.open(); + return QR.nodes.com.focus(); + } else { + return QR.close(); + } + }); + return Header.addShortcut(sc); + } + }, + initReady: function() { + var link, linkBot, navLinksBot, origToggle; + $.off(d, '4chanXInitFinished', this.initReady); + QR.postingIsEnabled = !!$.id('postForm'); + if (!QR.postingIsEnabled) { + return; + } + link = $.el('h1', { + className: "qr-link-container" + }); + $.extend(link, { + innerHTML: "" + ((g.VIEW === "thread") ? "Reply to Thread" : "Start a Thread") + "" + }); + QR.link = link.firstElementChild; + $.on(link.firstChild, 'click', function() { + QR.open(); + return QR.nodes.com.focus(); + }); + if (Conf['Bottom QR Link'] && g.VIEW === 'thread') { + linkBot = $.el('div', { + className: "brackets-wrap qr-link-container-bottom" + }); + $.extend(linkBot, { + innerHTML: "Reply to Thread" + }); + $.on(linkBot.firstElementChild, 'click', function() { + QR.open(); + return QR.nodes.com.focus(); + }); + if ((navLinksBot = $('.navLinksBot'))) { + $.prepend(navLinksBot, linkBot); + } + } + origToggle = $.id('togglePostFormLink'); + $.before(origToggle, link); + origToggle.firstElementChild.textContent = 'Original Form'; + $.on(d, 'QRGetFile', QR.getFile); + $.on(d, 'QRSetFile', QR.setFile); + $.on(d, 'paste', QR.paste); + $.on(d, 'dragover', QR.dragOver); + $.on(d, 'drop', QR.dropFile); + $.on(d, 'dragstart dragend', QR.drag); + $.on(d, 'IndexRefresh', QR.generatePostableThreadsList); + $.on(d, 'ThreadUpdate', QR.statusCheck); + if (!Conf['Persistent QR']) { + return; + } + QR.open(); + if (Conf['Auto Hide QR']) { + return QR.hide(); + } + }, + statusCheck: function() { + var thread; + if (!QR.nodes) { + return; + } + thread = QR.posts[0].thread; + if (thread !== 'new' && g.threads[g.BOARD + "." + thread].isDead) { + return QR.abort(); + } else { + return QR.status(); + } + }, + node: function() { + $.on(this.nodes.quote, 'click', QR.quote); + if (this.isFetchedQuote) { + return QR.generatePostableThreadsList(); + } + }, + open: function() { + var err; + if (QR.nodes) { + if (QR.nodes.el.hidden) { + QR.captcha.setup(); + } + QR.nodes.el.hidden = false; + QR.unhide(); + } else { + try { + QR.dialog(); + } catch (_error) { + err = _error; + delete QR.nodes; + Main.handleErrors({ + message: 'Quick Reply dialog creation crashed.', + error: err + }); + return; + } + } + if (Conf['QR Shortcut']) { + return $.rmClass(QR.shortcut, 'disabled'); + } + }, + close: function() { + var j, len, post, ref; + if (QR.req) { + QR.abort(); + return; + } + QR.nodes.el.hidden = true; + QR.cleanNotifications(); + d.activeElement.blur(); + $.rmClass(QR.nodes.el, 'dump'); + if (Conf['QR Shortcut']) { + $.addClass(QR.shortcut, 'disabled'); + } + new QR.post(true); + ref = QR.posts.splice(0, QR.posts.length - 1); + for (j = 0, len = ref.length; j < len; j++) { + post = ref[j]; + post["delete"](); + } + QR.cooldown.auto = false; + QR.status(); + return QR.captcha.destroy(); + }, + focus: function() { + return $.queueTask(function() { + if (!QR.inBubble()) { + QR.hasFocus = d.activeElement && QR.nodes.el.contains(d.activeElement); + return QR.nodes.el.classList.toggle('focus', QR.hasFocus); + } + }); + }, + inBubble: function() { + var bubbles, ref; + bubbles = $$('iframe[src^="https://www.google.com/recaptcha/api2/frame"]'); + return (ref = d.activeElement, indexOf.call(bubbles, ref) >= 0) || bubbles.some(function(el) { + return getComputedStyle(el).visibility !== 'hidden' && el.getBoundingClientRect().bottom > 0; + }); + }, + hide: function() { + d.activeElement.blur(); + $.addClass(QR.nodes.el, 'autohide'); + return QR.nodes.autohide.checked = true; + }, + unhide: function() { + $.rmClass(QR.nodes.el, 'autohide'); + return QR.nodes.autohide.checked = false; + }, + toggleHide: function() { + if (this.checked) { + return QR.hide(); + } else { + return QR.unhide(); + } + }, + toggleSJIS: function(e) { + e.preventDefault(); + Conf['sjisPreview'] = !Conf['sjisPreview']; + $.set('sjisPreview', Conf['sjisPreview']); + return QR.nodes.el.classList.toggle('sjis-preview', Conf['sjisPreview']); + }, + texPreviewShow: function() { + if ($.hasClass(QR.nodes.el, 'tex-preview')) { + return QR.texPreviewHide(); + } + $.addClass(QR.nodes.el, 'tex-preview'); + QR.nodes.texPreview.textContent = QR.nodes.com.value; + return $.event('mathjax', null, QR.nodes.texPreview); + }, + texPreviewHide: function() { + return $.rmClass(QR.nodes.el, 'tex-preview'); + }, + setCustomCooldown: function(enabled) { + Conf['customCooldownEnabled'] = enabled; + QR.cooldown.customCooldown = enabled; + return QR.nodes.customCooldown.classList.toggle('disabled', !enabled); + }, + toggleCustomCooldown: function() { + var enabled; + enabled = $.hasClass(this, 'disabled'); + QR.setCustomCooldown(enabled); + return $.set('customCooldownEnabled', enabled); + }, + error: function(err, focusOverride) { + var el, notice, notif; + QR.open(); + if (typeof err === 'string') { + el = $.tn(err); + } else { + el = err; + el.removeAttribute('style'); + } + notice = new Notice('warning', el); + QR.notifications.push(notice); + if (!Header.areNotificationsEnabled) { + if (d.hidden && !QR.cooldown.auto) { + return alert(el.textContent); + } + } else if (d.hidden || !(focusOverride || d.hasFocus())) { + try { + notif = new Notification(el.textContent, { + body: el.textContent, + icon: Favicon.logo + }); + notif.onclick = function() { + return $.global(function() { + return window.focus(); + }); + }; + if ($.engine !== 'gecko') { + notif.onclose = function() { + return notice.close(); + }; + return notif.onshow = function() { + return setTimeout(function() { + notif.onclose = null; + return notif.close(); + }, 7 * $.SECOND); + }; + } + } catch (_error) {} + } + }, + notifications: [], + cleanNotifications: function() { + var j, len, notification, ref; + ref = QR.notifications; + for (j = 0, len = ref.length; j < len; j++) { + notification = ref[j]; + notification.close(); + } + return QR.notifications = []; + }, + status: function() { + var disabled, status, thread, value; + if (!QR.nodes) { + return; + } + thread = QR.posts[0].thread; + if (thread !== 'new' && g.threads[g.BOARD + "." + thread].isDead) { + value = 'Dead'; + disabled = true; + QR.cooldown.auto = false; + } + value = QR.req ? QR.req.progress : QR.cooldown.seconds || value; + status = QR.nodes.status; + status.value = !value ? 'Submit' : QR.cooldown.auto ? "Auto " + value : value; + return status.disabled = disabled || false; + }, + openPost: function() { + var index; + QR.open(); + if (QR.selected.isLocked) { + index = QR.posts.indexOf(QR.selected); + (QR.posts[index + 1] || new QR.post()).select(); + $.addClass(QR.nodes.el, 'dump'); + return QR.cooldown.auto = true; + } + }, + quote: function(e) { + var ancestor, caretPos, com, frag, insideCode, j, k, l, len, len1, len2, len3, len4, len5, n, node, o, post, q, range, ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, sel, text, thread; + if (e != null) { + e.preventDefault(); + } + if (!QR.postingIsEnabled) { + return; + } + sel = d.getSelection(); + post = Get.postFromNode(this); + text = post.board.ID === g.BOARD.ID ? ">>" + post + "\n" : ">>>/" + post.board + "/" + post + "\n"; + if (sel.toString().trim() && post === Get.postFromNode(sel.anchorNode)) { + range = sel.getRangeAt(0); + frag = range.cloneContents(); + ancestor = range.commonAncestorContainer; + if ($.x('ancestor-or-self::*[self::s or contains(@class,"removed-spoiler")]', ancestor)) { + $.prepend(frag, $.tn('[spoiler]')); + $.add(frag, $.tn('[/spoiler]')); + } + if (insideCode = $.x('ancestor-or-self::pre[contains(@class,"prettyprint")]', ancestor)) { + $.prepend(frag, $.tn('[code]')); + $.add(frag, $.tn('[/code]')); + } + ref = $$((insideCode ? 'br' : '.prettyprint br'), frag); + for (j = 0, len = ref.length; j < len; j++) { + node = ref[j]; + $.replace(node, $.tn('\n')); + } + ref1 = $$('br', frag); + for (k = 0, len1 = ref1.length; k < len1; k++) { + node = ref1[k]; + if (node !== frag.lastChild) { + $.replace(node, $.tn('\n>')); + } + } + ref2 = $$('s, .removed-spoiler', frag); + for (l = 0, len2 = ref2.length; l < len2; l++) { + node = ref2[l]; + $.replace(node, [$.tn('[spoiler]')].concat(slice.call(node.childNodes), [$.tn('[/spoiler]')])); + } + ref3 = $$('.prettyprint', frag); + for (n = 0, len3 = ref3.length; n < len3; n++) { + node = ref3[n]; + $.replace(node, [$.tn('[code]')].concat(slice.call(node.childNodes), [$.tn('[/code]')])); + } + ref4 = $$('.linkify[data-original]', frag); + for (o = 0, len4 = ref4.length; o < len4; o++) { + node = ref4[o]; + $.replace(node, $.tn(node.dataset.original)); + } + ref5 = $$('.embedder', frag); + for (q = 0, len5 = ref5.length; q < len5; q++) { + node = ref5[q]; + if (((ref6 = node.previousSibling) != null ? ref6.nodeValue : void 0) === ' ') { + $.rm(node.previousSibling); + } + $.rm(node); + } + text += ">" + (frag.textContent.trim()) + "\n"; + } + QR.openPost(); + ref7 = QR.nodes, com = ref7.com, thread = ref7.thread; + if (!com.value) { + thread.value = Get.threadFromNode(this); + } + caretPos = com.selectionStart; + com.value = com.value.slice(0, caretPos) + text + com.value.slice(com.selectionEnd); + range = caretPos + text.length; + com.setSelectionRange(range, range); + com.focus(); + QR.selected.save(com); + return QR.selected.save(thread); + }, + characterCount: function() { + var count, counter; + counter = QR.nodes.charCount; + count = QR.nodes.com.value.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, '_').length; + counter.textContent = count; + counter.hidden = count < QR.max_comment / 2; + return (count > QR.max_comment ? $.addClass : $.rmClass)(counter, 'warning'); + }, + getFile: function() { + var ref; + return $.event('QRFile', (ref = QR.selected) != null ? ref.file : void 0); + }, + setFile: function(e) { + var file, name, ref, source; + ref = e.detail, file = ref.file, name = ref.name, source = ref.source; + if (name != null) { + file.name = name; + } + if (source != null) { + file.source = source; + } + QR.open(); + return QR.handleFiles([file]); + }, + drag: function(e) { + var toggle; + toggle = e.type === 'dragstart' ? $.off : $.on; + toggle(d, 'dragover', QR.dragOver); + return toggle(d, 'drop', QR.dropFile); + }, + dragOver: function(e) { + e.preventDefault(); + return e.dataTransfer.dropEffect = 'copy'; + }, + dropFile: function(e) { + if (!e.dataTransfer.files.length) { + return; + } + e.preventDefault(); + QR.open(); + return QR.handleFiles(e.dataTransfer.files); + }, + paste: function(e) { + var blob, files, item, j, len, ref; + if (!e.clipboardData.items) { + return; + } + files = []; + ref = e.clipboardData.items; + for (j = 0, len = ref.length; j < len; j++) { + item = ref[j]; + if (!(item.kind === 'file')) { + continue; + } + blob = item.getAsFile(); + blob.name = 'file'; + if (blob.type) { + blob.name += '.' + blob.type.split('/')[1]; + } + files.push(blob); + } + if (!files.length) { + return; + } + QR.open(); + QR.handleFiles(files); + return $.addClass(QR.nodes.el, 'dump'); + }, + pasteFF: function() { + var arr, blob, bstr, i, images, img, j, k, len, m, pasteArea, ref, src; + pasteArea = QR.nodes.pasteArea; + if (!pasteArea.childNodes.length) { + return; + } + images = $$('img', pasteArea); + $.rmAll(pasteArea); + for (j = 0, len = images.length; j < len; j++) { + img = images[j]; + src = img.src; + if (m = src.match(/data:(image\/(\w+));base64,(.+)/)) { + bstr = atob(m[3]); + arr = new Uint8Array(bstr.length); + for (i = k = 0, ref = bstr.length; 0 <= ref ? k < ref : k > ref; i = 0 <= ref ? ++k : --k) { + arr[i] = bstr.charCodeAt(i); + } + blob = new Blob([arr], { + type: m[1] + }); + blob.name = "file." + m[2]; + QR.handleFiles([blob]); + } else if (/^https?:\/\//.test(src)) { + QR.handleUrl(src); + } + } + }, + handleUrl: function(urlDefault) { + var url; + url = prompt('Enter a URL:', urlDefault); + if (url === null) { + return; + } + QR.nodes.fileButton.focus(); + return CrossOrigin.file(url, function(blob) { + if (blob && !/^text\//.test(blob.type)) { + return QR.handleFiles([blob]); + } else { + return QR.error("Can't load file."); + } + }); + }, + handleFiles: function(files) { + var file, j, len; + if (this !== QR) { + files = slice.call(this.files); + this.value = null; + } + if (!files.length) { + return; + } + QR.cleanNotifications(); + for (j = 0, len = files.length; j < len; j++) { + file = files[j]; + QR.handleFile(file, files.length); + } + if (files.length !== 1) { + $.addClass(QR.nodes.el, 'dump'); + } + if (d.activeElement === QR.nodes.fileButton && $.hasClass(QR.nodes.fileSubmit, 'has-file')) { + return QR.nodes.filename.focus(); + } + }, + handleFile: function(file, nfiles) { + var isText, post; + isText = /^text\//.test(file.type); + if (nfiles === 1) { + post = QR.selected; + } else { + post = QR.posts[QR.posts.length - 1]; + if ((isText ? post.com || post.pasting : post.file)) { + post = new QR.post(); + } + } + return post[isText ? 'pasteText' : 'setFile'](file); + }, + openFileInput: function() { + if (QR.nodes.fileButton.disabled) { + return; + } + QR.nodes.fileInput.click(); + return QR.nodes.fileButton.focus(); + }, + generatePostableThreadsList: function() { + var j, len, list, options, ref, thread, val; + if (!QR.nodes) { + return; + } + list = QR.nodes.thread; + options = [list.firstElementChild]; + ref = g.BOARD.threads.keys; + for (j = 0, len = ref.length; j < len; j++) { + thread = ref[j]; + options.push($.el('option', { + value: thread, + textContent: "Thread " + thread + })); + } + val = list.value; + $.rmAll(list); + $.add(list, options); + list.value = val; + if (list.value === val) { + return; + } + list.value = g.VIEW === 'thread' ? g.THREADID : 'new'; + return (g.VIEW === 'thread' ? $.addClass : $.rmClass)(QR.nodes.el, 'reply-to-thread'); + }, + dialog: function() { + var dialog, event, i, items, m, match_max, match_min, name, node, nodes, ref, rules, save, scriptData, setNode; + QR.nodes = nodes = { + el: dialog = UI.dialog('qr', 'top: 50px; right: 0px;', { + innerHTML: "
      ×
      No selected file
      " + }) + }; + setNode = function(name, query) { + return nodes[name] = $(query, dialog); + }; + setNode('move', '.move'); + setNode('autohide', '#autohide'); + setNode('close', '.close'); + setNode('thread', 'select'); + setNode('form', 'form'); + setNode('sjisToggle', '#sjis-toggle'); + setNode('texButton', '#tex-preview-button'); + setNode('name', '[data-name=name]'); + setNode('email', '[data-name=email]'); + setNode('sub', '[data-name=sub]'); + setNode('com', '[data-name=com]'); + setNode('charCount', '#char-count'); + setNode('texPreview', '#tex-preview'); + setNode('dumpList', '#dump-list'); + setNode('addPost', '#add-post'); + setNode('oekaki', '.oekaki'); + setNode('drawButton', '#qr-draw-button'); + setNode('fileSubmit', '#file-n-submit'); + setNode('fileButton', '#qr-file-button'); + setNode('noFile', '#qr-no-file'); + setNode('filename', '#qr-filename'); + setNode('spoiler', '#qr-file-spoiler'); + setNode('oekakiButton', '#qr-oekaki-button'); + setNode('fileRM', '#qr-filerm'); + setNode('urlButton', '#url-button'); + setNode('pasteArea', '#paste-area'); + setNode('customCooldown', '#custom-cooldown-button'); + setNode('dumpButton', '#dump-button'); + setNode('status', '[type=submit]'); + setNode('flashTag', '[name=filetag]'); + setNode('fileInput', '[type=file]'); + rules = $('ul.rules').textContent.trim(); + match_min = rules.match(/.+smaller than (\d+)x(\d+).+/); + match_max = rules.match(/.+greater than (\d+)x(\d+).+/); + QR.min_width = +(match_min != null ? match_min[1] : void 0) || 1; + QR.min_height = +(match_min != null ? match_min[2] : void 0) || 1; + QR.max_width = +(match_max != null ? match_max[1] : void 0) || 10000; + QR.max_height = +(match_max != null ? match_max[2] : void 0) || 10000; + scriptData = Get.scriptData(); + QR.max_size = (m = scriptData.match(/\bmaxFilesize *= *(\d+)\b/)) ? +m[1] : 4194304; + QR.max_size_video = (m = scriptData.match(/\bmaxWebmFilesize *= *(\d+)\b/)) ? +m[1] : QR.max_size; + QR.max_comment = (m = scriptData.match(/\bcomlen *= *(\d+)\b/)) ? +m[1] : 2000; + QR.max_width_video = QR.max_height_video = 2048; + QR.max_duration_video = (ref = g.BOARD.ID) === 'gif' || ref === 'wsg' ? 300 : 120; + if (Conf['Show New Thread Option in Threads']) { + $.addClass(QR.nodes.el, 'show-new-thread-option'); + } + if (Conf['Show Name and Subject']) { + $.addClass(QR.nodes.name, 'force-show'); + $.addClass(QR.nodes.sub, 'force-show'); + QR.nodes.email.placeholder = 'E-mail'; + } + QR.forcedAnon = !!$('form[name="post"] input[name="name"][type="hidden"]'); + if (QR.forcedAnon) { + $.addClass(QR.nodes.el, 'forced-anon'); + } + QR.spoiler = !!$('.postForm input[name=spoiler]'); + if (QR.spoiler) { + $.addClass(QR.nodes.el, 'has-spoiler'); + } + if (g.BOARD.ID === 'jp' && Conf['sjisPreview']) { + $.addClass(QR.nodes.el, 'sjis-preview'); + } + if (parseInt(Conf['customCooldown'], 10) > 0) { + $.addClass(QR.nodes.fileSubmit, 'custom-cooldown'); + $.get('customCooldownEnabled', Conf['customCooldownEnabled'], function(arg) { + var customCooldownEnabled; + customCooldownEnabled = arg.customCooldownEnabled; + QR.setCustomCooldown(customCooldownEnabled); + return $.sync('customCooldownEnabled', QR.setCustomCooldown); + }); + } + $.on(nodes.autohide, 'change', QR.toggleHide); + $.on(nodes.close, 'click', QR.close); + $.on(nodes.form, 'submit', QR.submit); + $.on(nodes.sjisToggle, 'click', QR.toggleSJIS); + $.on(nodes.texButton, 'mousedown', QR.texPreviewShow); + $.on(nodes.texButton, 'mouseup', QR.texPreviewHide); + $.on(nodes.addPost, 'click', function() { + return new QR.post(true); + }); + $.on(nodes.drawButton, 'click', QR.oekaki.draw); + $.on(nodes.fileButton, 'click', QR.openFileInput); + $.on(nodes.noFile, 'click', QR.openFileInput); + $.on(nodes.filename, 'focus', function() { + return $.addClass(this.parentNode, 'focus'); + }); + $.on(nodes.filename, 'blur', function() { + return $.rmClass(this.parentNode, 'focus'); + }); + $.on(nodes.spoiler, 'change', function() { + return QR.selected.nodes.spoiler.click(); + }); + $.on(nodes.oekakiButton, 'click', QR.oekaki.button); + $.on(nodes.fileRM, 'click', function() { + return QR.selected.rmFile(); + }); + $.on(nodes.urlButton, 'click', function() { + return QR.handleUrl(''); + }); + $.on(nodes.customCooldown, 'click', QR.toggleCustomCooldown); + $.on(nodes.dumpButton, 'click', function() { + return nodes.el.classList.toggle('dump'); + }); + $.on(nodes.fileInput, 'change', QR.handleFiles); + window.addEventListener('focus', QR.focus, true); + window.addEventListener('blur', QR.focus, true); + $.on(d, 'click', QR.focus); + if ($.engine === 'gecko') { + nodes.pasteArea.hidden = false; + new MutationObserver(QR.pasteFF).observe(nodes.pasteArea, { + childList: true + }); + } + items = ['thread', 'name', 'email', 'sub', 'com', 'filename']; + i = 0; + save = function() { + return QR.selected.save(this); + }; + while (name = items[i++]) { + if (!(node = nodes[name])) { + continue; + } + event = node.nodeName === 'SELECT' ? 'change' : 'input'; + $.on(nodes[name], event, save); + } + if ($.engine === 'gecko' && Conf['Remember QR Size']) { + $.get('QR Size', '', function(item) { + return nodes.com.style.cssText = item['QR Size']; + }); + $.on(nodes.com, 'mouseup', function(e) { + if (e.button !== 0) { + return; + } + return $.set('QR Size', this.style.cssText); + }); + } + QR.generatePostableThreadsList(); + QR.persona.load(); + new QR.post(true); + QR.status(); + QR.cooldown.setup(); + QR.captcha.init(); + $.add(d.body, dialog); + QR.captcha.setup(); + QR.oekaki.setup(); + return $.event('QRDialogCreation', null, dialog); + }, + submit: function(e) { + var captcha, cb, err, extra, filetag, formData, options, post, ref, textOnly, thread, threadID; + if (e != null) { + e.preventDefault(); + } + if (QR.req) { + QR.abort(); + return; + } + if (QR.cooldown.seconds) { + QR.cooldown.auto = !QR.cooldown.auto; + QR.status(); + return; + } + post = QR.posts[0]; + post.forceSave(); + threadID = post.thread; + thread = g.BOARD.threads[threadID]; + if (g.BOARD.ID === 'f' && threadID === 'new') { + filetag = QR.nodes.flashTag.value; + } + if (threadID === 'new') { + threadID = null; + if (g.BOARD.ID === 'vg' && !post.sub) { + err = 'New threads require a subject.'; + } else if (!($.hasClass(d.body, 'text_only') || post.file || (textOnly = !!$('input[name=textonly]', $.id('postForm'))))) { + err = 'No file selected.'; + } + } else if (g.BOARD.threads[threadID].isClosed) { + err = 'You can\'t reply to this thread anymore.'; + } else if (!(post.com || post.file)) { + err = 'No comment or file.'; + } else if (post.file && thread.fileLimit) { + err = 'Max limit of image replies has been reached.'; + } + if (g.BOARD.ID === 'r9k' && !((ref = post.com) != null ? ref.match(/[a-z-]/i) : void 0)) { + err || (err = 'Original comment required.'); + } + if (QR.captcha.isEnabled && !err) { + captcha = QR.captcha.getOne(); + if (!captcha) { + err = 'No valid captcha.'; + QR.captcha.setup(!QR.cooldown.auto || d.activeElement === QR.nodes.status); + } + } + QR.cleanNotifications(); + if (err) { + QR.cooldown.auto = false; + QR.status(); + QR.error(err); + return; + } + QR.cooldown.auto = QR.posts.length > 1; + if (Conf['Auto Hide QR'] && !QR.cooldown.auto) { + QR.hide(); + } + if (!QR.cooldown.auto && $.x('ancestor::div[@id="qr"]', d.activeElement)) { + d.activeElement.blur(); + } + post.lock(); + formData = { + resto: threadID, + name: !QR.forcedAnon ? post.name : void 0, + email: post.email, + sub: !(QR.forcedAnon || threadID) ? post.sub : void 0, + com: post.com, + upfile: post.file, + filetag: filetag, + spoiler: post.spoiler, + textonly: textOnly, + mode: 'regist', + pwd: QR.persona.getPassword() + }; + options = { + responseType: 'document', + withCredentials: true, + onload: QR.response, + onerror: function() { + delete QR.req; + post.unlock(); + QR.cooldown.auto = false; + QR.status(); + return QR.error($.el('span', { + innerHTML: "Connection error while posting. [More info]" + })); + } + }; + extra = { + form: $.formData(formData), + upCallbacks: { + onload: function() { + QR.req.isUploadFinished = true; + QR.req.progress = '...'; + return QR.status(); + }, + onprogress: function(e) { + QR.req.progress = (Math.round(e.loaded / e.total * 100)) + "%"; + return QR.status(); + } + } + }; + cb = function(response) { + if (response != null) { + if (response.challenge != null) { + extra.form.append('recaptcha_challenge_field', response.challenge); + extra.form.append('recaptcha_response_field', response.response); + } else { + extra.form.append('g-recaptcha-response', response.response); + } + } + QR.req = $.ajax("https://sys.4chan.org/" + g.BOARD + "/post", options, extra); + return QR.req.progress = '...'; + }; + if (typeof captcha === 'function') { + QR.req = { + progress: '...', + abort: function() { + return cb = null; + } + }; + captcha(function(response) { + if (response) { + return typeof cb === "function" ? cb(response) : void 0; + } else { + delete QR.req; + post.unlock(); + QR.cooldown.auto = !!QR.captcha.captchas.length; + return QR.status(); + } + }); + } else { + cb(captcha); + } + return QR.status(); + }, + response: function() { + var URL, _, ban, err, h1, isReply, lastPostToThread, m, open, post, postID, postsCount, ref, ref1, ref2, req, resDoc, seconds, threadID; + req = QR.req; + delete QR.req; + post = QR.posts[0]; + post.unlock(); + resDoc = req.response; + if (ban = $('.banType', resDoc)) { + err = $.el('span', ban.textContent.toLowerCase() === 'banned' ? { + innerHTML: "You are banned on " + ($(".board", resDoc)).innerHTML + "! ;_;
      Click here to see the reason." + } : { + innerHTML: "You were issued a warning on " + ($(".board", resDoc)).innerHTML + " as " + ($(".nameBlock", resDoc)).innerHTML + ".
      Reason: " + ($(".reason", resDoc)).innerHTML + }); + } else if (err = resDoc.getElementById('errmsg')) { + if ((ref = $('a', err)) != null) { + ref.target = '_blank'; + } + } else if (resDoc.title !== 'Post successful!') { + err = 'Connection error with sys.4chan.org.'; + } else if (req.status !== 200) { + err = "Error " + req.statusText + " (" + req.status + ")"; + } + if (err) { + if (/captcha|verification/i.test(err.textContent) || err === 'Connection error with sys.4chan.org.') { + if (/mistyped/i.test(err.textContent)) { + err = $.el('span', { + innerHTML: "You mistyped the CAPTCHA, or the CAPTCHA malfunctioned [complain here]." + }); + } else if (/expired/i.test(err.textContent)) { + err = 'This CAPTCHA is no longer valid because it has expired.'; + } + QR.cooldown.auto = QR.captcha.isEnabled || err === 'Connection error with sys.4chan.org.'; + QR.cooldown.addDelay(post, 2); + } else if (err.textContent && (m = err.textContent.match(/(?:(\d+)\s+minutes?\s+)?(\d+)\s+second/i)) && !/duplicate|hour/i.test(err.textContent)) { + QR.cooldown.auto = !/have\s+been\s+muted/i.test(err.textContent); + seconds = 60 * (+(m[1] || 0)) + (+m[2]); + if (/muted/i.test(err.textContent)) { + QR.cooldown.addMute(seconds); + } else { + QR.cooldown.addDelay(post, seconds); + } + } else { + QR.cooldown.auto = false; + } + QR.captcha.setup(QR.cooldown.auto && ((ref1 = d.activeElement) === QR.nodes.status || ref1 === d.body)); + if (QR.captcha.isEnabled && !QR.captcha.captchas.length) { + QR.cooldown.auto = false; + } + QR.status(); + QR.error(err); + return; + } + h1 = $('h1', resDoc); + QR.cleanNotifications(); + if (Conf['Posting Success Notifications']) { + QR.notifications.push(new Notice('success', h1.textContent, 5)); + } + ref2 = h1.nextSibling.textContent.match(/thread:(\d+),no:(\d+)/), _ = ref2[0], threadID = ref2[1], postID = ref2[2]; + postID = +postID; + threadID = +threadID || postID; + isReply = threadID !== postID; + $.event('QRPostSuccessful', { + boardID: g.BOARD.ID, + threadID: threadID, + postID: postID + }); + $.event('QRPostSuccessful_', { + boardID: g.BOARD.ID, + threadID: threadID, + postID: postID + }); + postsCount = QR.posts.length - 1; + QR.cooldown.auto = postsCount && isReply; + lastPostToThread = !((function() { + var j, len, p, ref3; + ref3 = QR.posts.slice(1); + for (j = 0, len = ref3.length; j < len; j++) { + p = ref3[j]; + if (p.thread === post.thread) { + return true; + } + } + })()); + if (!(Conf['Persistent QR'] || postsCount)) { + QR.close(); + } else { + post.rm(); + QR.captcha.setup(d.activeElement === QR.nodes.status); + } + QR.cooldown.add(threadID, postID); + URL = threadID === postID ? window.location.origin + "/" + g.BOARD + "/thread/" + threadID : g.VIEW === 'index' && lastPostToThread && Conf['Open Post in New Tab'] ? window.location.origin + "/" + g.BOARD + "/thread/" + threadID + "#p" + postID : void 0; + if (URL) { + open = Conf['Open Post in New Tab'] || postsCount ? function() { + return $.open(URL); + } : function() { + return window.location = URL; + }; + if (threadID === postID) { + QR.waitForThread(URL, open); + } else { + open(); + } + } + return QR.status(); + }, + waitForThread: function(url, cb) { + var attempts, check; + attempts = 0; + check = function() { + return $.ajax(url, { + onloadend: function() { + attempts++; + if (attempts >= 6 || this.status === 200) { + return cb(); + } else { + return setTimeout(check, attempts * $.SECOND); + } + } + }, { + type: 'HEAD' + }); + }; + return check(); + }, + abort: function() { + if (QR.req && !QR.req.isUploadFinished) { + QR.req.abort(); + delete QR.req; + QR.posts[0].unlock(); + QR.cooldown.auto = false; + QR.notifications.push(new Notice('info', 'QR upload aborted.', 5)); + } + return QR.status(); + } + }; + + return QR; + +}).call(this); + +(function() { + QR.cooldown = { + seconds: 0, + delays: { + thread: 0, + reply: 0, + image: 0, + reply_intra: 0, + image_intra: 0, + deletion: 60, + thread_global: 300 + }, + init: function() { + if (!Conf['Quick Reply']) { + return; + } + this.data = Conf['cooldowns']; + return $.sync('cooldowns', this.sync); + }, + setup: function() { + var delay, m, ref, type; + if (m = Get.scriptData().match(/\bcooldowns *= *({[^}]+})/)) { + $.extend(QR.cooldown.delays, JSON.parse(m[1])); + } + QR.cooldown.maxDelay = 0; + ref = QR.cooldown.delays; + for (type in ref) { + delay = ref[type]; + if (type !== 'thread' && type !== 'thread_global') { + QR.cooldown.maxDelay = Math.max(QR.cooldown.maxDelay, delay); + } + } + QR.cooldown.isSetup = true; + return QR.cooldown.start(); + }, + start: function() { + var data; + data = QR.cooldown.data; + if (!(Conf['Cooldown'] && QR.cooldown.isSetup && !QR.cooldown.isCounting && Object.keys(data[g.BOARD.ID] || {}).length + Object.keys(data.global || {}).length > 0)) { + return; + } + QR.cooldown.isCounting = true; + return QR.cooldown.count(); + }, + sync: function(data) { + QR.cooldown.data = data || {}; + return QR.cooldown.start(); + }, + add: function(threadID, postID) { + var boardID, start; + if (!Conf['Cooldown']) { + return; + } + start = Date.now(); + boardID = g.BOARD.ID; + QR.cooldown.set(boardID, start, { + threadID: threadID, + postID: postID + }); + if (threadID === postID) { + QR.cooldown.set('global', start, { + boardID: boardID, + threadID: threadID, + postID: postID + }); + } + return QR.cooldown.start(); + }, + addDelay: function(post, delay) { + var cooldown; + if (!Conf['Cooldown']) { + return; + } + cooldown = QR.cooldown.categorize(post); + cooldown.delay = delay; + QR.cooldown.set(g.BOARD.ID, Date.now(), cooldown); + return QR.cooldown.start(); + }, + addMute: function(delay) { + if (!Conf['Cooldown']) { + return; + } + QR.cooldown.set(g.BOARD.ID, Date.now(), { + type: 'mute', + delay: delay + }); + return QR.cooldown.start(); + }, + "delete": function(post) { + var base, cooldown, cooldowns, id, name; + if (!QR.cooldown.data) { + return; + } + $.forceSync('cooldowns'); + cooldowns = ((base = QR.cooldown.data)[name = post.board.ID] || (base[name] = {})); + for (id in cooldowns) { + cooldown = cooldowns[id]; + if ((cooldown.delay == null) && cooldown.threadID === post.thread.ID && cooldown.postID === post.ID) { + delete cooldowns[id]; + } + } + return QR.cooldown.save([post.board.ID]); + }, + secondsDeletion: function(post) { + var cooldown, cooldowns, seconds, start; + if (!(QR.cooldown.data && Conf['Cooldown'])) { + return 0; + } + cooldowns = QR.cooldown.data[post.board.ID] || {}; + for (start in cooldowns) { + cooldown = cooldowns[start]; + if ((cooldown.delay == null) && cooldown.threadID === post.thread.ID && cooldown.postID === post.ID) { + seconds = QR.cooldown.delays.deletion - Math.floor((Date.now() - start) / $.SECOND); + return Math.max(seconds, 0); + } + } + return 0; + }, + categorize: function(post) { + if (post.thread === 'new') { + return { + type: 'thread' + }; + } else { + return { + type: !!post.file ? 'image' : 'reply', + threadID: +post.thread + }; + } + }, + set: function(scope, id, value) { + var base, cooldowns; + $.forceSync('cooldowns'); + cooldowns = ((base = QR.cooldown.data)[scope] || (base[scope] = {})); + cooldowns[id] = value; + return $.set('cooldowns', QR.cooldown.data); + }, + save: function(scopes) { + var data, i, len, scope; + data = QR.cooldown.data; + for (i = 0, len = scopes.length; i < len; i++) { + scope = scopes[i]; + if (scope in data && !Object.keys(data[scope]).length) { + delete data[scope]; + } + } + return $.set('cooldowns', data); + }, + count: function() { + var base, cooldown, cooldowns, elapsed, i, len, maxDelay, nCooldowns, now, ref, ref1, save, scope, seconds, start, suffix, threadID, type, update; + $.forceSync('cooldowns'); + save = []; + nCooldowns = 0; + now = Date.now(); + ref = QR.cooldown.categorize(QR.posts[0]), type = ref.type, threadID = ref.threadID; + seconds = 0; + if (Conf['Cooldown']) { + ref1 = [g.BOARD.ID, 'global']; + for (i = 0, len = ref1.length; i < len; i++) { + scope = ref1[i]; + cooldowns = ((base = QR.cooldown.data)[scope] || (base[scope] = {})); + for (start in cooldowns) { + cooldown = cooldowns[start]; + start = +start; + elapsed = Math.floor((now - start) / $.SECOND); + if (elapsed < 0) { + delete cooldowns[start]; + save.push(scope); + continue; + } + if (cooldown.delay != null) { + if (cooldown.delay <= elapsed) { + delete cooldowns[start]; + save.push(scope); + } else if ((cooldown.type === type && cooldown.threadID === threadID) || cooldown.type === 'mute') { + seconds = Math.max(seconds, cooldown.delay - elapsed); + } + continue; + } + maxDelay = cooldown.threadID !== cooldown.postID ? QR.cooldown.maxDelay : QR.cooldown.delays[scope === 'global' ? 'thread_global' : 'thread']; + if (QR.cooldown.customCooldown) { + maxDelay = Math.max(maxDelay, parseInt(Conf['customCooldown'], 10)); + } + if (maxDelay <= elapsed) { + delete cooldowns[start]; + save.push(scope); + continue; + } + if ((type === 'thread') === (cooldown.threadID === cooldown.postID) && cooldown.boardID !== g.BOARD.ID) { + suffix = scope === 'global' ? '_global' : type !== 'thread' && threadID === cooldown.threadID ? '_intra' : ''; + seconds = Math.max(seconds, QR.cooldown.delays[type + suffix] - elapsed); + } + if (QR.cooldown.customCooldown) { + seconds = Math.max(seconds, parseInt(Conf['customCooldown'], 10) - elapsed); + } + } + nCooldowns += Object.keys(cooldowns).length; + } + } + if (save.length) { + QR.cooldown.save(save); + } + if (nCooldowns) { + clearTimeout(QR.cooldown.timeout); + QR.cooldown.timeout = setTimeout(QR.cooldown.count, $.SECOND); + } else { + delete QR.cooldown.isCounting; + } + update = seconds !== QR.cooldown.seconds; + QR.cooldown.seconds = seconds; + if (update) { + QR.status(); + } + if (seconds === 0 && QR.cooldown.auto && !QR.req) { + return QR.submit(); + } + } + }; + +}).call(this); + +(function() { + QR.oekaki = { + menu: { + init: function() { + var a, ref; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Edit Link'] && Conf['Quick Reply'])) { + return; + } + a = $.el('a', { + className: 'edit-link', + href: 'javascript:;', + textContent: 'Edit image' + }); + $.on(a, 'click', this.editFile); + return Menu.menu.addEntry({ + el: a, + order: 95, + open: function(post) { + var file; + QR.oekaki.menu.post = post; + file = post.file; + return QR.postingIsEnabled && !!file && (file.isImage || file.isVideo); + } + }); + }, + editFile: function() { + var currentTime, isVideo, post, ref; + post = QR.oekaki.menu.post; + QR.quote.call(post.nodes.post); + isVideo = post.file.isVideo; + currentTime = ((ref = post.file.fullImage) != null ? ref.currentTime : void 0) || 0; + return CrossOrigin.file(post.file.url, function(blob) { + var video; + if (!blob) { + return QR.error("Can't load file."); + } else if (isVideo) { + video = $.el('video'); + $.on(video, 'loadedmetadata', function() { + $.on(video, 'seeked', function() { + var canvas; + canvas = $.el('canvas', { + width: video.videoWidth, + height: video.videoHeight + }); + canvas.getContext('2d').drawImage(video, 0, 0); + return canvas.toBlob(function(snapshot) { + snapshot.name = post.file.name.replace(/\.\w+$/, '') + '.png'; + QR.handleFiles([snapshot]); + return QR.oekaki.edit(); + }); + }); + return video.currentTime = currentTime; + }); + return video.src = URL.createObjectURL(blob); + } else { + blob.name = post.file.name; + QR.handleFiles([blob]); + return QR.oekaki.edit(); + } + }); + } + }, + setup: function() { + return $.global(function() { + var FCX; + FCX = window.FCX; + FCX.oekakiCB = function() { + return window.Tegaki.flatten().toBlob(function(file) { + var source; + source = "oekaki-" + (Date.now()); + FCX.oekakiLatest = source; + return document.dispatchEvent(new CustomEvent('QRSetFile', { + bubbles: true, + detail: { + file: file, + name: FCX.oekakiName, + source: source + } + })); + }); + }; + if (window.Tegaki) { + return document.querySelector('#qr .oekaki').hidden = false; + } + }); + }, + load: function(cb) { + var n, onload, script, style; + if ($('script[src^="//s.4cdn.org/js/painter"]', d.head)) { + return cb(); + } else { + style = $.el('link', { + rel: 'stylesheet', + href: "//s.4cdn.org/css/painter." + (Date.now()) + ".css" + }); + script = $.el('script', { + src: "//s.4cdn.org/js/painter.min." + (Date.now()) + ".js" + }); + n = 0; + onload = function() { + if (++n === 2) { + return cb(); + } + }; + $.on(style, 'load', onload); + $.on(script, 'load', onload); + return $.add(d.head, [style, script]); + } + }, + draw: function() { + return $.global(function() { + var FCX, Tegaki; + Tegaki = window.Tegaki, FCX = window.FCX; + if (Tegaki.bg) { + Tegaki.destroy(); + } + FCX.oekakiName = 'tegaki.png'; + return Tegaki.open({ + onDone: FCX.oekakiCB, + onCancel: function() { + return Tegaki.bgColor = '#ffffff'; + }, + width: +document.querySelector('#qr [name=oekaki-width]').value, + height: +document.querySelector('#qr [name=oekaki-height]').value, + bgColor: document.querySelector('#qr [name=oekaki-bg]').checked ? document.querySelector('#qr [name=oekaki-bgcolor]').value : 'transparent' + }); + }); + }, + button: function() { + if (QR.selected.file) { + return QR.oekaki.edit(); + } else { + return QR.oekaki.toggle(); + } + }, + edit: function() { + return QR.oekaki.load(function() { + return $.global(function() { + var FCX, Tegaki, cb, error, name, source; + Tegaki = window.Tegaki, FCX = window.FCX; + name = document.getElementById('qr-filename').value.replace(/\.\w+$/, '') + '.png'; + source = document.getElementById('file-n-submit').dataset.source; + error = function(content) { + return document.dispatchEvent(new CustomEvent('CreateNotification', { + bubbles: true, + detail: { + type: 'warning', + content: content, + lifetime: 20 + } + })); + }; + cb = function(e) { + var file, isVideo; + document.removeEventListener('QRFile', cb, false); + if (!e.detail) { + return error('No file to edit.'); + } + if (!/^(image|video)\//.test(e.detail.type)) { + return error('Not an image.'); + } + isVideo = /^video\//.test(e.detail.type); + file = document.createElement(isVideo ? 'video' : 'img'); + file.addEventListener('error', function() { + return error('Could not open file.', false); + }); + file.addEventListener((isVideo ? 'loadeddata' : 'load'), function() { + if (Tegaki.bg) { + Tegaki.destroy(); + } + FCX.oekakiName = name; + Tegaki.open({ + onDone: FCX.oekakiCB, + onCancel: function() { + return Tegaki.bgColor = '#ffffff'; + }, + width: file.naturalWidth || file.videoWidth, + height: file.naturalHeight || file.videoHeight, + bgColor: 'transparent' + }); + return Tegaki.activeCtx.drawImage(file, 0, 0); + }, false); + return file.src = URL.createObjectURL(e.detail); + }; + if (Tegaki.bg && Tegaki.onDoneCb === FCX.oekakiCB && source === FCX.oekakiLatest) { + FCX.oekakiName = name; + return Tegaki.resume(); + } else { + document.addEventListener('QRFile', cb, false); + return document.dispatchEvent(new CustomEvent('QRGetFile', { + bubbles: true + })); + } + }); + }); + }, + toggle: function() { + return QR.oekaki.load(function() { + return QR.nodes.oekaki.hidden = !QR.nodes.oekaki.hidden; + }); + } + }; + +}).call(this); + +(function() { + var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + QR.persona = { + always: {}, + types: { + name: [], + email: [], + sub: [] + }, + init: function() { + var i, item, len, ref; + if (!(Conf['Quick Reply'] || (Conf['Menu'] && Conf['Delete Link']))) { + return; + } + ref = Conf['QR.personas'].split('\n'); + for (i = 0, len = ref.length; i < len; i++) { + item = ref[i]; + QR.persona.parseItem(item.trim()); + } + }, + parseItem: function(item) { + var boards, match, ref, ref1, ref2, type, val; + if (item[0] === '#') { + return; + } + if (!(match = item.match(/(name|options|email|subject|password):"(.*)"/i))) { + return; + } + ref = match, match = ref[0], type = ref[1], val = ref[2]; + item = item.replace(match, ''); + boards = ((ref1 = item.match(/boards:([^;]+)/i)) != null ? ref1[1].toLowerCase() : void 0) || 'global'; + if (boards !== 'global' && (ref2 = g.BOARD.ID, indexOf.call(boards.split(','), ref2) < 0)) { + return; + } + if (type === 'password') { + QR.persona.pwd = val; + return; + } + if (type === 'options') { + type = 'email'; + } + if (type === 'subject') { + type = 'sub'; + } + if (/always/i.test(item)) { + QR.persona.always[type] = val; + } + if (indexOf.call(QR.persona.types[type], val) < 0) { + return QR.persona.types[type].push(val); + } + }, + load: function() { + var arr, i, len, list, ref, type, val; + ref = QR.persona.types; + for (type in ref) { + arr = ref[type]; + list = $("#list-" + type, QR.nodes.el); + for (i = 0, len = arr.length; i < len; i++) { + val = arr[i]; + if (val) { + $.add(list, $.el('option', { + textContent: val + })); + } + } + } + }, + getPassword: function() { + var m; + if (QR.persona.pwd != null) { + return QR.persona.pwd; + } else if ((m = d.cookie.match(/4chan_pass=([^;]+)/))) { + return decodeURIComponent(m[1]); + } else { + return ''; + } + }, + get: function(cb) { + return $.get('QR.persona', {}, function(arg) { + var persona; + persona = arg['QR.persona']; + return cb(persona); + }); + }, + set: function(post) { + return $.get('QR.persona', {}, function(arg) { + var persona; + persona = arg['QR.persona']; + persona = { + name: post.name + }; + return $.set('QR.persona', persona); + }); + } + }; + +}).call(this); + +(function() { + var bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, + slice = [].slice; + + QR.post = (function() { + function _Class(select) { + this.select = bind(this.select, this); + var el, event, i, j, label, len, len1, prev, ref, ref1; + el = $.el('a', { + className: 'qr-preview', + draggable: true, + href: 'javascript:;' + }); + $.extend(el, { + innerHTML: "" + }); + this.nodes = { + el: el, + rm: el.firstChild, + spoiler: $('.qr-preview-spoiler input', el), + span: el.lastChild + }; + $.on(el, 'click', this.select); + $.on(this.nodes.rm, 'click', (function(_this) { + return function(e) { + e.stopPropagation(); + return _this.rm(); + }; + })(this)); + $.on(this.nodes.spoiler, 'change', (function(_this) { + return function(e) { + _this.spoiler = e.target.checked; + if (_this === QR.selected) { + return QR.nodes.spoiler.checked = _this.spoiler; + } + }; + })(this)); + ref = $$('label', el); + for (i = 0, len = ref.length; i < len; i++) { + label = ref[i]; + $.on(label, 'click', function(e) { + return e.stopPropagation(); + }); + } + $.add(QR.nodes.dumpList, el); + ref1 = ['dragStart', 'dragEnter', 'dragLeave', 'dragOver', 'dragEnd', 'drop']; + for (j = 0, len1 = ref1.length; j < len1; j++) { + event = ref1[j]; + $.on(el, event.toLowerCase(), this[event]); + } + this.thread = g.VIEW === 'thread' ? g.THREADID : 'new'; + prev = QR.posts[QR.posts.length - 1]; + QR.posts.push(this); + this.nodes.spoiler.checked = this.spoiler = prev && Conf['Remember Spoiler'] ? prev.spoiler : false; + QR.persona.get((function(_this) { + return function(persona) { + _this.name = 'name' in QR.persona.always ? QR.persona.always.name : prev ? prev.name : persona.name; + _this.email = 'email' in QR.persona.always ? QR.persona.always.email : ''; + _this.sub = 'sub' in QR.persona.always ? QR.persona.always.sub : ''; + if (QR.selected === _this) { + return _this.load(); + } + }; + })(this)); + if (select) { + this.select(); + } + this.unlock(); + $.queueTask(function() { + return QR.captcha.onNewPost(); + }); + } + + _Class.prototype.rm = function() { + var index; + this["delete"](); + index = QR.posts.indexOf(this); + if (QR.posts.length === 1) { + new QR.post(true); + $.rmClass(QR.nodes.el, 'dump'); + } else if (this === QR.selected) { + (QR.posts[index - 1] || QR.posts[index + 1]).select(); + } + QR.posts.splice(index, 1); + return QR.status(); + }; + + _Class.prototype["delete"] = function() { + $.rm(this.nodes.el); + URL.revokeObjectURL(this.URL); + return this.dismissErrors(); + }; + + _Class.prototype.lock = function(lock) { + var i, len, name, node, ref; + if (lock == null) { + lock = true; + } + this.isLocked = lock; + if (this !== QR.selected) { + return; + } + ref = ['thread', 'name', 'email', 'sub', 'com', 'fileButton', 'filename', 'spoiler']; + for (i = 0, len = ref.length; i < len; i++) { + name = ref[i]; + if (node = QR.nodes[name]) { + node.disabled = lock; + } + } + this.nodes.rm.style.visibility = lock ? 'hidden' : ''; + this.nodes.spoiler.disabled = lock; + return this.nodes.el.draggable = !lock; + }; + + _Class.prototype.unlock = function() { + return this.lock(false); + }; + + _Class.prototype.select = function() { + var rectEl, rectList; + if (QR.selected) { + QR.selected.nodes.el.removeAttribute('id'); + QR.selected.forceSave(); + } + QR.selected = this; + this.lock(this.isLocked); + this.nodes.el.id = 'selected'; + rectEl = this.nodes.el.getBoundingClientRect(); + rectList = this.nodes.el.parentNode.getBoundingClientRect(); + this.nodes.el.parentNode.scrollLeft += rectEl.left + rectEl.width / 2 - rectList.left - rectList.width / 2; + return this.load(); + }; + + _Class.prototype.load = function() { + var i, len, name, node, ref; + ref = ['thread', 'name', 'email', 'sub', 'com', 'filename']; + for (i = 0, len = ref.length; i < len; i++) { + name = ref[i]; + if (!(node = QR.nodes[name])) { + continue; + } + node.value = this[name] || node.dataset["default"] || ''; + } + (this.thread !== 'new' ? $.addClass : $.rmClass)(QR.nodes.el, 'reply-to-thread'); + this.showFileData(); + return QR.characterCount(); + }; + + _Class.prototype.save = function(input) { + var name, ref; + if (input.type === 'checkbox') { + this.spoiler = input.checked; + return; + } + name = input.dataset.name; + this[name] = input.value || input.dataset["default"] || null; + switch (name) { + case 'thread': + (this.thread !== 'new' ? $.addClass : $.rmClass)(QR.nodes.el, 'reply-to-thread'); + return QR.status(); + case 'com': + this.updateComment(); + if (QR.cooldown.auto && this === QR.posts[0] && (0 < (ref = QR.cooldown.seconds) && ref <= 5)) { + return QR.cooldown.auto = false; + } + break; + case 'filename': + if (!this.file) { + return; + } + this.saveFilename(); + return this.updateFilename(); + case 'name': + return QR.persona.set(this); + } + }; + + _Class.prototype.forceSave = function() { + var i, len, name, node, ref; + if (this !== QR.selected) { + return; + } + ref = ['thread', 'name', 'email', 'sub', 'com', 'filename', 'spoiler']; + for (i = 0, len = ref.length; i < len; i++) { + name = ref[i]; + if (!(node = QR.nodes[name])) { + continue; + } + this.save(node); + } + }; + + _Class.prototype.setComment = function(com) { + this.com = com || null; + if (this === QR.selected) { + QR.nodes.com.value = this.com; + } + return this.updateComment(); + }; + + _Class.prototype.updateComment = function() { + if (this === QR.selected) { + QR.characterCount(); + } + this.nodes.span.textContent = this.com; + return $.queueTask(function() { + return QR.captcha.onPostChange(); + }); + }; + + _Class.rmErrored = function(e) { + var error, errors, i, j, len, post, ref; + e.stopPropagation(); + ref = QR.posts; + for (i = ref.length - 1; i >= 0; i += -1) { + post = ref[i]; + if (errors = post.errors) { + for (j = 0, len = errors.length; j < len; j++) { + error = errors[j]; + if (!(doc.contains(error))) { + continue; + } + post.rm(); + break; + } + } + } + }; + + _Class.prototype.error = function(className, message) { + var div, ref, rm, rmAll; + div = $.el('div', { + className: className + }); + $.extend(div, { + innerHTML: E(message) + "
      [delete] [delete all]" + }); + (this.errors || (this.errors = [])).push(div); + ref = $$('a', div), rm = ref[0], rmAll = ref[1]; + $.on(div, 'click', (function(_this) { + return function() { + if (indexOf.call(QR.posts, _this) >= 0) { + return _this.select(); + } + }; + })(this)); + $.on(rm, 'click', (function(_this) { + return function(e) { + e.stopPropagation(); + if (indexOf.call(QR.posts, _this) >= 0) { + return _this.rm(); + } + }; + })(this)); + $.on(rmAll, 'click', QR.post.rmErrored); + return QR.error(div, true); + }; + + _Class.prototype.fileError = function(message) { + return this.error('file-error', this.filename + ": " + message); + }; + + _Class.prototype.dismissErrors = function(test) { + var error, i, len, ref; + if (test == null) { + test = function() { + return true; + }; + } + if (this.errors) { + ref = this.errors; + for (i = 0, len = ref.length; i < len; i++) { + error = ref[i]; + if (doc.contains(error) && test(error)) { + error.parentNode.previousElementSibling.click(); + } + } + } + }; + + _Class.prototype.setFile = function(file1) { + var ext, ref; + this.file = file1; + if (Conf['Randomize Filename'] && g.BOARD.ID !== 'f') { + this.filename = "" + (Date.now() - Math.floor(Math.random() * 365 * $.DAY)); + if (ext = this.file.name.match(QR.validExtension)) { + this.filename += ext[0]; + } + } else { + this.filename = this.file.name; + } + this.filesize = $.bytesToString(this.file.size); + this.checkSize(); + $.addClass(this.nodes.el, 'has-file'); + $.queueTask(function() { + return QR.captcha.onPostChange(); + }); + URL.revokeObjectURL(this.URL); + this.saveFilename(); + if (this === QR.selected) { + this.showFileData(); + } else { + this.updateFilename(); + } + this.nodes.el.style.backgroundImage = null; + if (ref = this.file.type, indexOf.call(QR.mimeTypes, ref) < 0) { + return this.fileError('Unsupported file type.'); + } else if (/^(image|video)\//.test(this.file.type)) { + return this.readFile(); + } + }; + + _Class.prototype.checkSize = function() { + var max; + max = QR.max_size; + if (/^video\//.test(this.file.type)) { + max = Math.min(max, QR.max_size_video); + } + if (this.file.size > max) { + return this.fileError("File too large (file: " + this.filesize + ", max: " + ($.bytesToString(max)) + ")."); + } + }; + + _Class.prototype.readFile = function() { + var el, event, isVideo, onerror, onload; + isVideo = /^video\//.test(this.file.type); + el = $.el(isVideo ? 'video' : 'img'); + if (isVideo && !el.canPlayType(this.file.type)) { + return; + } + event = isVideo ? 'loadeddata' : 'load'; + onload = (function(_this) { + return function() { + $.off(el, event, onload); + $.off(el, 'error', onerror); + _this.checkDimensions(el); + return _this.setThumbnail(el); + }; + })(this); + onerror = (function(_this) { + return function() { + $.off(el, event, onload); + $.off(el, 'error', onerror); + _this.fileError((isVideo ? 'Video' : 'Image') + " appears corrupt"); + return URL.revokeObjectURL(el.src); + }; + })(this); + $.on(el, event, onload); + $.on(el, 'error', onerror); + return el.src = URL.createObjectURL(this.file); + }; + + _Class.prototype.checkDimensions = function(el) { + var duration, height, max_height, max_width, ref, videoHeight, videoWidth, width; + if (el.tagName === 'IMG') { + height = el.height, width = el.width; + if (height > QR.max_height || width > QR.max_width) { + this.fileError("Image too large (image: " + height + "x" + width + "px, max: " + QR.max_height + "x" + QR.max_width + "px)"); + } + if (height < QR.min_height || width < QR.min_width) { + return this.fileError("Image too small (image: " + height + "x" + width + "px, min: " + QR.min_height + "x" + QR.min_width + "px)"); + } + } else { + videoHeight = el.videoHeight, videoWidth = el.videoWidth, duration = el.duration; + max_height = Math.min(QR.max_height, QR.max_height_video); + max_width = Math.min(QR.max_width, QR.max_width_video); + if (videoHeight > max_height || videoWidth > max_width) { + this.fileError("Video too large (video: " + videoHeight + "x" + videoWidth + "px, max: " + max_height + "x" + max_width + "px)"); + } + if (videoHeight < QR.min_height || videoWidth < QR.min_width) { + this.fileError("Video too small (video: " + videoHeight + "x" + videoWidth + "px, min: " + QR.min_height + "x" + QR.min_width + "px)"); + } + if (!isFinite(duration)) { + this.fileError('Video lacks duration metadata (try remuxing)'); + } else if (duration > QR.max_duration_video) { + this.fileError("Video too long (video: " + duration + "s, max: " + QR.max_duration_video + "s)"); + } + if (((ref = g.BOARD.ID) !== 'gif' && ref !== 'wsg') && $.hasAudio(el)) { + return this.fileError('Audio not allowed'); + } + } + }; + + _Class.prototype.setThumbnail = function(el) { + var cv, height, isVideo, s, width; + isVideo = el.tagName === 'VIDEO'; + s = 90 * 2 * window.devicePixelRatio; + if (this.file.type === 'image/gif') { + s *= 3; + } + if (isVideo) { + height = el.videoHeight; + width = el.videoWidth; + } else { + height = el.height, width = el.width; + if (height < s || width < s) { + this.URL = el.src; + this.nodes.el.style.backgroundImage = "url(" + this.URL + ")"; + return; + } + } + if (height <= width) { + width = s / height * width; + height = s; + } else { + height = s / width * height; + width = s; + } + cv = $.el('canvas'); + cv.height = height; + cv.width = width; + cv.getContext('2d').drawImage(el, 0, 0, width, height); + URL.revokeObjectURL(el.src); + return cv.toBlob((function(_this) { + return function(blob) { + _this.URL = URL.createObjectURL(blob); + return _this.nodes.el.style.backgroundImage = "url(" + _this.URL + ")"; + }; + })(this)); + }; + + _Class.prototype.rmFile = function() { + if (this.isLocked) { + return; + } + delete this.file; + delete this.filename; + delete this.filesize; + this.nodes.el.removeAttribute('title'); + QR.nodes.filename.removeAttribute('title'); + this.nodes.el.style.backgroundImage = null; + $.rmClass(this.nodes.el, 'has-file'); + this.showFileData(); + URL.revokeObjectURL(this.URL); + return this.dismissErrors(function(error) { + return $.hasClass(error, 'file-error'); + }); + }; + + _Class.prototype.saveFilename = function() { + this.file.newName = (this.filename || '').replace(/[\/\\]/g, '-'); + if (!QR.validExtension.test(this.filename)) { + return this.file.newName += "." + (QR.extensionFromType[this.file.type] || 'jpg'); + } + }; + + _Class.prototype.updateFilename = function() { + var long; + long = this.filename + " (" + this.filesize + ")"; + this.nodes.el.title = long; + if (this !== QR.selected) { + return; + } + return QR.nodes.filename.title = long; + }; + + _Class.prototype.showFileData = function() { + var ref; + if (this.file) { + this.updateFilename(); + QR.nodes.filename.value = this.filename; + $.addClass(QR.nodes.oekaki, 'has-file'); + $.addClass(QR.nodes.fileSubmit, 'has-file'); + } else { + $.rmClass(QR.nodes.oekaki, 'has-file'); + $.rmClass(QR.nodes.fileSubmit, 'has-file'); + } + if (((ref = this.file) != null ? ref.source : void 0) != null) { + QR.nodes.fileSubmit.dataset.source = this.file.source; + } else { + QR.nodes.fileSubmit.removeAttribute('data-source'); + } + return QR.nodes.spoiler.checked = this.spoiler; + }; + + _Class.prototype.pasteText = function(file) { + var reader; + this.pasting = true; + reader = new FileReader(); + reader.onload = (function(_this) { + return function(e) { + var result; + result = e.target.result; + _this.setComment((_this.com ? _this.com + "\n" + result : result)); + return delete _this.pasting; + }; + })(this); + return reader.readAsText(file); + }; + + _Class.prototype.dragStart = function(e) { + var left, ref, top; + ref = this.getBoundingClientRect(), left = ref.left, top = ref.top; + e.dataTransfer.setDragImage(this, e.clientX - left, e.clientY - top); + return $.addClass(this, 'drag'); + }; + + _Class.prototype.dragEnd = function() { + return $.rmClass(this, 'drag'); + }; + + _Class.prototype.dragEnter = function() { + return $.addClass(this, 'over'); + }; + + _Class.prototype.dragLeave = function() { + return $.rmClass(this, 'over'); + }; + + _Class.prototype.dragOver = function(e) { + e.preventDefault(); + return e.dataTransfer.dropEffect = 'move'; + }; + + _Class.prototype.drop = function() { + var el, index, newIndex, oldIndex, post; + $.rmClass(this, 'over'); + if (!this.draggable) { + return; + } + el = $('.drag', this.parentNode); + index = function(el) { + return slice.call(el.parentNode.children).indexOf(el); + }; + oldIndex = index(el); + newIndex = index(this); + (oldIndex < newIndex ? $.after : $.before)(this, el); + post = QR.posts.splice(oldIndex, 1)[0]; + QR.posts.splice(newIndex, 0, post); + return QR.status(); + }; + + return _Class; + + })(); + +}).call(this); + +QuoteBacklink = (function() { + var QuoteBacklink; + + QuoteBacklink = { + containers: {}, + init: function() { + var ref; + if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Quote Backlinks']) { + return; + } + Callbacks.Post.push({ + name: 'Quote Backlinking Part 1', + cb: this.firstNode + }); + return Callbacks.Post.push({ + name: 'Quote Backlinking Part 2', + cb: this.secondNode + }); + }, + firstNode: function() { + var a, clone, container, containers, hash, i, j, k, len, len1, len2, link, markYours, nodes, post, quote, ref, ref1, ref2; + if (this.isClone || !this.quotes.length || this.isRebuilt) { + return; + } + markYours = Conf['Mark Quotes of You'] && ((ref = QuoteYou.db) != null ? ref.get({ + boardID: this.board.ID, + threadID: this.thread.ID, + postID: this.ID + }) : void 0); + a = $.el('a', { + href: Build.postURL(this.board.ID, this.thread.ID, this.ID), + className: this.isHidden ? 'filtered backlink' : 'backlink', + textContent: Conf['backlink'].replace(/%(?:id|%)/g, (function(_this) { + return function(x) { + return { + '%id': _this.ID, + '%%': '%' + }[x]; + }; + })(this)) + (markYours ? '\u00A0(You)' : '') + }); + ref1 = this.quotes; + for (i = 0, len = ref1.length; i < len; i++) { + quote = ref1[i]; + containers = [QuoteBacklink.getContainer(quote)]; + if ((post = g.posts[quote]) && post.nodes.backlinkContainer) { + ref2 = post.clones; + for (j = 0, len1 = ref2.length; j < len1; j++) { + clone = ref2[j]; + containers.push(clone.nodes.backlinkContainer); + } + } + for (k = 0, len2 = containers.length; k < len2; k++) { + container = containers[k]; + link = a.cloneNode(true); + nodes = container.firstChild ? [$.tn(' '), link] : [link]; + if (Conf['Quote Previewing']) { + $.on(link, 'mouseover', QuotePreview.mouseover); + } + if (Conf['Quote Inlining']) { + $.on(link, 'click', QuoteInline.toggle); + if (Conf['Quote Hash Navigation']) { + hash = QuoteInline.qiQuote(link, $.hasClass(link, 'filtered')); + nodes.push(hash); + } + } + $.add(container, nodes); + } + } + }, + secondNode: function() { + var container; + if (this.isClone && (this.origin.isReply || Conf['OP Backlinks'])) { + this.nodes.backlinkContainer = $('.container', this.nodes.info); + return; + } + if (!(this.isReply || Conf['OP Backlinks'])) { + return; + } + container = QuoteBacklink.getContainer(this.fullID); + this.nodes.backlinkContainer = container; + return $.add(this.nodes.info, container); + }, + getContainer: function(id) { + var base; + return (base = this.containers)[id] || (base[id] = $.el('span', { + className: 'container' + })); + } + }; + + return QuoteBacklink; + +}).call(this); + +QuoteCT = (function() { + var QuoteCT; + + QuoteCT = { + init: function() { + var ref; + if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Mark Cross-thread Quotes']) { + return; + } + if (Conf['Comment Expansion']) { + ExpandComment.callbacks.push(this.node); + } + this.text = '\u00A0(Cross-thread)'; + return Callbacks.Post.push({ + name: 'Mark Cross-thread Quotes', + cb: this.node + }); + }, + node: function() { + var board, boardID, i, len, quotelink, ref, ref1, ref2, thread, threadID; + if (this.isClone && this.thread === this.context.thread) { + return; + } + ref = this.context, board = ref.board, thread = ref.thread; + ref1 = this.nodes.quotelinks; + for (i = 0, len = ref1.length; i < len; i++) { + quotelink = ref1[i]; + ref2 = Get.postDataFromLink(quotelink), boardID = ref2.boardID, threadID = ref2.threadID; + if (!threadID) { + continue; + } + if (this.isClone) { + quotelink.textContent = quotelink.textContent.replace(QuoteCT.text, ''); + } + if (boardID === board.ID && threadID !== thread.ID) { + $.add(quotelink, $.tn(QuoteCT.text)); + } + } + } + }; + + return QuoteCT; + +}).call(this); + +QuoteInline = (function() { + var QuoteInline; + + QuoteInline = { + init: function() { + var ref; + if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Quote Inlining']) { + return; + } + if (Conf['Comment Expansion']) { + ExpandComment.callbacks.push(this.node); + } + return Callbacks.Post.push({ + name: 'Quote Inlining', + cb: this.node + }); + }, + node: function() { + var i, isClone, j, len, len1, link, process, ref, ref1; + process = QuoteInline.process; + isClone = this.isClone; + ref = this.nodes.quotelinks; + for (i = 0, len = ref.length; i < len; i++) { + link = ref[i]; + process(link, isClone); + } + ref1 = this.nodes.backlinks; + for (j = 0, len1 = ref1.length; j < len1; j++) { + link = ref1[j]; + process(link, isClone); + } + }, + process: function(link, clone) { + if (Conf['Quote Hash Navigation']) { + if (!clone) { + $.after(link, QuoteInline.qiQuote(link, $.hasClass(link, 'filtered'))); + } + } + return $.on(link, 'click', QuoteInline.toggle); + }, + qiQuote: function(link, hidden) { + var name; + name = "hashlink"; + if (hidden) { + name += " filtered"; + } + return $.el('a', { + className: name, + textContent: '#', + href: link.href + }); + }, + toggle: function(e) { + var boardID, context, postID, quoter, ref, ref1, threadID; + if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0) { + return; + } + ref = Get.postDataFromLink(this), boardID = ref.boardID, threadID = ref.threadID, postID = ref.postID; + if (Conf['Inline Cross-thread Quotes Only'] && g.VIEW === 'thread' && ((ref1 = g.posts[boardID + "." + postID]) != null ? ref1.nodes.root.offsetParent : void 0)) { + return; + } + e.preventDefault(); + quoter = Get.postFromNode(this); + context = quoter.context; + if ($.hasClass(this, 'inlined')) { + QuoteInline.rm(this, boardID, threadID, postID, context); + } else { + if ($.x("ancestor::div[@data-full-i-d='" + boardID + "." + postID + "']", this)) { + return; + } + QuoteInline.add(this, boardID, threadID, postID, context, quoter); + } + return this.classList.toggle('inlined'); + }, + findRoot: function(quotelink, isBacklink) { + if (isBacklink) { + return quotelink.parentNode.parentNode; + } else { + return $.x('ancestor-or-self::*[parent::blockquote][1]', quotelink); + } + }, + add: function(quotelink, boardID, threadID, postID, context, quoter) { + var inline, isBacklink, post, qroot, root; + isBacklink = $.hasClass(quotelink, 'backlink'); + inline = $.el('div', { + className: 'inline' + }); + inline.dataset.fullID = boardID + "." + postID; + root = QuoteInline.findRoot(quotelink, isBacklink); + $.after(root, inline); + qroot = $.x('ancestor::*[contains(@class,"postContainer")][1]', root); + $.addClass(qroot, 'hasInline'); + new Fetcher(boardID, threadID, postID, inline, quoter); + if (!((post = g.posts[boardID + "." + postID]) && context.thread === post.thread)) { + return; + } + if (isBacklink && Conf['Forward Hiding']) { + $.addClass(post.nodes.root, 'forwarded'); + post.forwarded++ || (post.forwarded = 1); + } + if (!Unread.posts) { + return; + } + return Unread.readSinglePost(post); + }, + rm: function(quotelink, boardID, threadID, postID, context) { + var el, inlined, isBacklink, post, qroot, ref, root; + isBacklink = $.hasClass(quotelink, 'backlink'); + root = QuoteInline.findRoot(quotelink, isBacklink); + root = $.x("following-sibling::div[@data-full-i-d='" + boardID + "." + postID + "'][1]", root); + qroot = $.x('ancestor::*[contains(@class,"postContainer")][1]', root); + $.rm(root); + if (!$('.inline', qroot)) { + $.rmClass(qroot, 'hasInline'); + } + if (!(el = root.firstElementChild)) { + return; + } + post = g.posts[boardID + "." + postID]; + post.rmClone(el.dataset.clone); + if (Conf['Forward Hiding'] && isBacklink && context.thread === g.threads[boardID + "." + threadID] && !--post.forwarded) { + delete post.forwarded; + $.rmClass(post.nodes.root, 'forwarded'); + } + while (inlined = $('.inlined', el)) { + ref = Get.postDataFromLink(inlined), boardID = ref.boardID, threadID = ref.threadID, postID = ref.postID; + QuoteInline.rm(inlined, boardID, threadID, postID, context); + $.rmClass(inlined, 'inlined'); + } + } + }; + + return QuoteInline; + +}).call(this); + +QuoteOP = (function() { + var QuoteOP, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + QuoteOP = { + init: function() { + var ref; + if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Mark OP Quotes']) { + return; + } + if (Conf['Comment Expansion']) { + ExpandComment.callbacks.push(this.node); + } + this.text = '\u00A0(OP)'; + return Callbacks.Post.push({ + name: 'Mark OP Quotes', + cb: this.node + }); + }, + node: function() { + var boardID, fullID, i, postID, quotelink, quotelinks, quotes, ref, ref1; + if (this.isClone && this.thread === this.context.thread) { + return; + } + if (!(quotes = this.quotes).length) { + return; + } + quotelinks = this.nodes.quotelinks; + if (this.isClone && (ref = this.thread.fullID, indexOf.call(quotes, ref) >= 0)) { + i = 0; + while (quotelink = quotelinks[i++]) { + quotelink.textContent = quotelink.textContent.replace(QuoteOP.text, ''); + } + } + fullID = this.context.thread.fullID; + if (indexOf.call(quotes, fullID) < 0) { + return; + } + i = 0; + while (quotelink = quotelinks[i++]) { + ref1 = Get.postDataFromLink(quotelink), boardID = ref1.boardID, postID = ref1.postID; + if ((boardID + "." + postID) === fullID) { + $.add(quotelink, $.tn(QuoteOP.text)); + } + } + } + }; + + return QuoteOP; + +}).call(this); + +QuotePreview = (function() { + var QuotePreview, + slice = [].slice; + + QuotePreview = { + init: function() { + var ref; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Quote Previewing'])) { + return; + } + if (Conf['Comment Expansion']) { + ExpandComment.callbacks.push(this.node); + } + return Callbacks.Post.push({ + name: 'Quote Previewing', + cb: this.node + }); + }, + node: function() { + var i, len, link, ref; + ref = this.nodes.quotelinks.concat(slice.call(this.nodes.backlinks)); + for (i = 0, len = ref.length; i < len; i++) { + link = ref[i]; + $.on(link, 'mouseover', QuotePreview.mouseover); + } + }, + mouseover: function(e) { + var boardID, i, len, origin, post, postID, posts, qp, ref, threadID; + if ($.hasClass(this, 'inlined') || !d.contains(this)) { + return; + } + ref = Get.postDataFromLink(this), boardID = ref.boardID, threadID = ref.threadID, postID = ref.postID; + qp = $.el('div', { + id: 'qp', + className: 'dialog' + }); + $.add(Header.hover, qp); + new Fetcher(boardID, threadID, postID, qp, Get.postFromNode(this)); + UI.hover({ + root: this, + el: qp, + latestEvent: e, + endEvents: 'mouseout click', + cb: QuotePreview.mouseout + }); + if (Conf['Quote Highlighting'] && (origin = g.posts[boardID + "." + postID])) { + posts = [origin].concat(origin.clones); + posts.pop(); + for (i = 0, len = posts.length; i < len; i++) { + post = posts[i]; + $.addClass(post.nodes.post, 'qphl'); + } + } + }, + mouseout: function() { + var clone, i, len, post, ref, root; + if (!(root = this.el.firstElementChild)) { + return; + } + clone = Get.postFromRoot(root); + post = clone.origin; + post.rmClone(root.dataset.clone); + if (!Conf['Quote Highlighting']) { + return; + } + ref = [post].concat(post.clones); + for (i = 0, len = ref.length; i < len; i++) { + post = ref[i]; + $.rmClass(post.nodes.post, 'qphl'); + } + } + }; + + return QuotePreview; + +}).call(this); + +QuoteStrikeThrough = (function() { + var QuoteStrikeThrough; + + QuoteStrikeThrough = { + init: function() { + var ref; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && (Conf['Reply Hiding Buttons'] || (Conf['Menu'] && Conf['Reply Hiding Link']) || Conf['Filter']))) { + return; + } + return Callbacks.Post.push({ + name: 'Strike-through Quotes', + cb: this.node + }); + }, + node: function() { + var boardID, i, len, postID, quotelink, ref, ref1, ref2; + if (this.isClone) { + return; + } + ref = this.nodes.quotelinks; + for (i = 0, len = ref.length; i < len; i++) { + quotelink = ref[i]; + ref1 = Get.postDataFromLink(quotelink), boardID = ref1.boardID, postID = ref1.postID; + if ((ref2 = g.posts[boardID + "." + postID]) != null ? ref2.isHidden : void 0) { + $.addClass(quotelink, 'filtered'); + } + } + } + }; + + return QuoteStrikeThrough; + +}).call(this); + +QuoteThreading = +/* + <3 aeosynth + */ + +(function() { + var QuoteThreading; + + QuoteThreading = { + init: function() { + if (!(Conf['Quote Threading'] && g.VIEW === 'thread')) { + return; + } + this.controls = $.el('label', { + innerHTML: " Threading" + }); + this.threadNewLink = $.el('span', { + className: 'brackets-wrap threadnewlink', + hidden: true + }); + $.extend(this.threadNewLink, { + innerHTML: "Thread New Posts" + }); + this.input = $('input', this.controls); + this.input.checked = Conf['Thread Quotes']; + $.on(this.input, 'change', this.setEnabled); + $.on(this.input, 'change', this.rethread); + $.on(this.threadNewLink.firstElementChild, 'click', this.rethread); + $.on(d, '4chanXInitFinished', (function(_this) { + return function() { + return _this.ready = true; + }; + })(this)); + Header.menu.addEntry(this.entry = { + el: this.controls, + order: 99 + }); + Callbacks.Thread.push({ + name: 'Quote Threading', + cb: this.setThread + }); + return Callbacks.Post.push({ + name: 'Quote Threading', + cb: this.node + }); + }, + parent: {}, + children: {}, + inserted: {}, + setEnabled: function() { + var other, ref; + other = (ref = ReplyPruning.inputs) != null ? ref.enabled : void 0; + if (this.checked && (other != null ? other.checked : void 0)) { + other.checked = false; + $.event('change', null, other); + } + return $.cb.checked.call(this); + }, + setThread: function() { + QuoteThreading.thread = this; + return $.asap((function() { + return !Conf['Thread Updater'] || $('.navLinksBot > .updatelink'); + }), function() { + var navLinksBot; + if ((navLinksBot = $('.navLinksBot'))) { + return $.add(navLinksBot, [$.tn(' '), QuoteThreading.threadNewLink]); + } + }); + }, + node: function() { + var ancestor, j, lastParent, len, parent, parents, quote, ref; + if (this.isFetchedQuote || this.isClone || !this.isReply) { + return; + } + parents = new Set(); + lastParent = null; + ref = this.quotes; + for (j = 0, len = ref.length; j < len; j++) { + quote = ref[j]; + if (parent = g.posts[quote]) { + if (!parent.isFetchedQuote && parent.isReply && parent.ID < this.ID) { + parents.add(parent.ID); + if (!lastParent || parent.ID > lastParent.ID) { + lastParent = parent; + } + } + } + } + if (!lastParent) { + return; + } + ancestor = lastParent; + while (ancestor = QuoteThreading.parent[ancestor.fullID]) { + parents["delete"](ancestor.ID); + } + if (parents.size === 1) { + return QuoteThreading.parent[this.fullID] = lastParent; + } + }, + descendants: function(post) { + var child, children, j, len, posts; + posts = [post]; + if (children = QuoteThreading.children[post.fullID]) { + for (j = 0, len = children.length; j < len; j++) { + child = children[j]; + posts = posts.concat(QuoteThreading.descendants(child)); + } + } + return posts; + }, + insert: function(post) { + var base, child, children, descendants, i, j, k, l, len, name, next, nodes, order, parent, prev, prev2, threadContainer, x; + if (!(Conf['Thread Quotes'] && (parent = QuoteThreading.parent[post.fullID]) && !QuoteThreading.inserted[post.fullID])) { + return false; + } + descendants = QuoteThreading.descendants(post); + if (!Unread.posts.has(parent.ID)) { + if ((function() { + var j, len, x; + for (j = 0, len = descendants.length; j < len; j++) { + x = descendants[j]; + if (Unread.posts.has(x.ID)) { + return true; + } + } + })()) { + QuoteThreading.threadNewLink.hidden = false; + return false; + } + } + order = Unread.order; + children = ((base = QuoteThreading.children)[name = parent.fullID] || (base[name] = [])); + threadContainer = parent.nodes.threadContainer || $.el('div', { + className: 'threadContainer' + }); + nodes = [post.nodes.root]; + if (post.nodes.threadContainer) { + nodes.push(post.nodes.threadContainer); + } + i = children.length; + for (j = children.length - 1; j >= 0; j += -1) { + child = children[j]; + if (child.ID >= post.ID) { + i--; + } + } + if (i !== children.length) { + next = children[i]; + for (k = 0, len = descendants.length; k < len; k++) { + x = descendants[k]; + order.before(order[next.ID], order[x.ID]); + } + children.splice(i, 0, post); + $.before(next.nodes.root, nodes); + } else { + prev = parent; + while ((prev2 = QuoteThreading.children[prev.fullID]) && prev2.length) { + prev = prev2[prev2.length - 1]; + } + for (l = descendants.length - 1; l >= 0; l += -1) { + x = descendants[l]; + order.after(order[prev.ID], order[x.ID]); + } + children.push(post); + $.add(threadContainer, nodes); + } + QuoteThreading.inserted[post.fullID] = true; + if (!parent.nodes.threadContainer) { + parent.nodes.threadContainer = threadContainer; + $.addClass(parent.nodes.root, 'threadOP'); + $.after(parent.nodes.root, threadContainer); + } + return true; + }, + rethread: function() { + var nodes, posts, thread; + if (!QuoteThreading.ready) { + return; + } + thread = QuoteThreading.thread; + posts = thread.posts; + QuoteThreading.threadNewLink.hidden = true; + if (Conf['Thread Quotes']) { + posts.forEach(QuoteThreading.insert); + } else { + nodes = []; + Unread.order = new RandomAccessList(); + QuoteThreading.inserted = {}; + posts.forEach(function(post) { + if (post.isFetchedQuote) { + return; + } + Unread.order.push(post); + if (post.isReply) { + nodes.push(post.nodes.root); + } + if (QuoteThreading.children[post.fullID]) { + delete QuoteThreading.children[post.fullID]; + $.rmClass(post.nodes.root, 'threadOP'); + $.rm(post.nodes.threadContainer); + return delete post.nodes.threadContainer; + } + }); + $.add(thread.OP.nodes.root.parentNode, nodes); + } + Unread.position = Unread.order.first; + Unread.updatePosition(); + Unread.setLine(true); + Unread.read(); + return Unread.update(); + } + }; + + return QuoteThreading; + +}).call(this); + +QuoteYou = (function() { + var QuoteYou; + + QuoteYou = { + init: function() { + var ref; + if (!Conf['Remember Your Posts']) { + return; + } + this.db = new DataBoard('yourPosts'); + $.sync('Remember Your Posts', function(enabled) { + return Conf['Remember Your Posts'] = enabled; + }); + $.on(d, 'QRPostSuccessful', function(e) { + var boardID, postID, ref, threadID; + $.forceSync('Remember Your Posts'); + if (Conf['Remember Your Posts']) { + ref = e.detail, boardID = ref.boardID, threadID = ref.threadID, postID = ref.postID; + return QuoteYou.db.set({ + boardID: boardID, + threadID: threadID, + postID: postID, + val: true + }); + } + }); + if ((ref = g.VIEW) !== 'index' && ref !== 'thread') { + return; + } + if (Conf['Highlight Own Posts']) { + $.addClass(doc, 'highlight-own'); + } + if (Conf['Highlight Posts Quoting You']) { + $.addClass(doc, 'highlight-you'); + } + if (Conf['Comment Expansion']) { + ExpandComment.callbacks.push(this.node); + } + this.text = '\u00A0(You)'; + return Callbacks.Post.push({ + name: 'Mark Quotes of You', + cb: this.node + }); + }, + node: function() { + var i, len, quotelink, ref; + if (this.isClone) { + return; + } + if (QuoteYou.db.get({ + boardID: this.board.ID, + threadID: this.thread.ID, + postID: this.ID + })) { + $.addClass(this.nodes.root, 'yourPost'); + } + if (!this.quotes.length) { + return; + } + ref = this.nodes.quotelinks; + for (i = 0, len = ref.length; i < len; i++) { + quotelink = ref[i]; + if (!(QuoteYou.db.get(Get.postDataFromLink(quotelink)))) { + continue; + } + if (Conf['Mark Quotes of You']) { + $.add(quotelink, $.tn(QuoteYou.text)); + } + $.addClass(quotelink, 'you'); + $.addClass(this.nodes.root, 'quotesYou'); + } + }, + cb: { + seek: function(type) { + var highlight, post, posts, result, str; + if (highlight = $('.highlight')) { + $.rmClass(highlight, 'highlight'); + } + if (!(QuoteYou.lastRead && doc.contains(QuoteYou.lastRead) && $.hasClass(QuoteYou.lastRead, 'quotesYou'))) { + if (!(post = QuoteYou.lastRead = $('.quotesYou'))) { + new Notice('warning', 'No posts are currently quoting you, loser.', 20); + return; + } + if (QuoteYou.cb.scroll(post)) { + return; + } + } else { + post = QuoteYou.lastRead; + } + str = type + "::div[contains(@class,'quotesYou')]"; + while ((post = (result = $.X(str, post)).snapshotItem(type === 'preceding' ? result.snapshotLength - 1 : 0))) { + if (QuoteYou.cb.scroll(post)) { + return; + } + } + posts = $$('.quotesYou'); + return QuoteYou.cb.scroll(posts[type === 'following' ? 0 : posts.length - 1]); + }, + scroll: function(root) { + var post; + post = $('.post', root); + if (!post.getBoundingClientRect().height) { + return false; + } else { + QuoteYou.lastRead = root; + window.location = "#" + post.id; + Header.scrollTo(post); + $.addClass(post, 'highlight'); + return true; + } + } + } + }; + + return QuoteYou; + +}).call(this); + +Quotify = (function() { + var Quotify, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, + slice = [].slice; + + Quotify = { + init: function() { + var ref; + if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Resurrect Quotes']) { + return; + } + if (Conf['Comment Expansion']) { + ExpandComment.callbacks.push(this.node); + } + return Callbacks.Post.push({ + name: 'Resurrect Quotes', + cb: this.node + }); + }, + node: function() { + var deadlink, i, len, ref; + if (this.isClone) { + return; + } + ref = $$('.deadlink', this.nodes.comment); + for (i = 0, len = ref.length; i < len; i++) { + deadlink = ref[i]; + Quotify.parseDeadlink.call(this, deadlink); + } + }, + parseDeadlink: function(deadlink) { + var a, boardID, fetchable, m, post, postID, quote, quoteID, redirect, ref; + if ($.hasClass(deadlink.parentNode, 'prettyprint')) { + Quotify.fixDeadlink(deadlink); + return; + } + quote = deadlink.textContent; + if (!(postID = (ref = quote.match(/\d+$/)) != null ? ref[0] : void 0)) { + return; + } + if (postID[0] === '0') { + Quotify.fixDeadlink(deadlink); + return; + } + boardID = (m = quote.match(/^>>>\/([a-z\d]+)/)) ? m[1] : this.board.ID; + quoteID = boardID + "." + postID; + if (post = g.posts[quoteID]) { + if (!post.isDead) { + a = $.el('a', { + href: Build.postURL(boardID, post.thread.ID, postID), + className: 'quotelink', + textContent: quote + }); + } else { + a = $.el('a', { + href: Build.postURL(boardID, post.thread.ID, postID), + className: 'quotelink deadlink', + textContent: quote + "\u00A0(Dead)" + }); + $.extend(a.dataset, { + boardID: boardID, + threadID: post.thread.ID, + postID: postID + }); + } + } else { + redirect = Redirect.to('thread', { + boardID: boardID, + threadID: 0, + postID: postID + }); + fetchable = Redirect.to('post', { + boardID: boardID, + postID: postID + }); + if (redirect || fetchable) { + a = $.el('a', { + href: redirect || 'javascript:;', + className: 'deadlink', + textContent: quote + "\u00A0(Dead)" + }); + if (fetchable) { + $.addClass(a, 'quotelink'); + $.extend(a.dataset, { + boardID: boardID, + postID: postID + }); + } + } + } + if (indexOf.call(this.quotes, quoteID) < 0) { + this.quotes.push(quoteID); + } + if (!a) { + deadlink.textContent = quote + "\u00A0(Dead)"; + return; + } + $.replace(deadlink, a); + if ($.hasClass(a, 'quotelink')) { + return this.nodes.quotelinks.push(a); + } + }, + fixDeadlink: function(deadlink) { + var el, green; + if (!(el = deadlink.previousSibling) || el.nodeName === 'BR') { + green = $.el('span', { + className: 'quote' + }); + $.before(deadlink, green); + $.add(green, deadlink); + } + return $.replace(deadlink, slice.call(deadlink.childNodes)); + } + }; + + return Quotify; + +}).call(this); + +Main = (function() { + var Main; + + Main = { + init: function() { + var db, flatten, items, j, key, len, ref; + if (d.body && !$('title', d.head)) { + return; + } + if (window['4chan X antidup']) { + return; + } + window['4chan X antidup'] = true; + if (location.hostname === 'www.google.com') { + $.get('Captcha Fixes', true, function(arg) { + var enabled; + enabled = arg['Captcha Fixes']; + if (enabled) { + return $.ready(function() { + return Captcha.fixes.init(); + }); + } + }); + return; + } + $.global(function() { + var j, len, nuke, prop, ref; + nuke = function(obj, prop) { + try { + return Object.defineProperty(obj, prop, { + configurable: false, + get: function() { + throw new Error(); + }, + set: function() { + throw new Error(); + } + }); + } catch (_error) {} + }; + ref = ['atOptions', 'adsterra_key', 'EpmadsConfig', 'epmads_key', 'EpomConfig', 'epom_key', 'exoDocumentProtocol']; + for (j = 0, len = ref.length; j < len; j++) { + prop = ref[j]; + nuke(window, prop); + } + }); + $.on(window, 'beforescriptexecute', function(e) { + var host, ref, ref1; + host = (ref = e.target.src.split('/')[2]) != null ? (ref1 = ref.match(/[^.]+\.[^.]+$/)) != null ? ref1[0] : void 0 : void 0; + if (host === 'bnhtml.com' || host === 'ecpmrocks.com' || host === 'advertisation.com' || host === 'exoclick.com') { + return e.preventDefault(); + } + }); + $.on(d, '4chanXInitFinished', function() { + if (Main.expectInitFinished) { + return delete Main.expectInitFinished; + } else { + new Notice('error', 'Error: Multiple copies of 4chan X are enabled.'); + return $.addClass(doc, 'tainted'); + } + }); + flatten = function(parent, obj) { + var key, val; + if (obj instanceof Array) { + Conf[parent] = obj[0]; + } else if (typeof obj === 'object') { + for (key in obj) { + val = obj[key]; + flatten(key, val); + } + } else { + Conf[parent] = obj; + } + }; + flatten(null, Config); + ref = DataBoard.keys; + for (j = 0, len = ref.length; j < len; j++) { + db = ref[j]; + Conf[db] = { + boards: {} + }; + } + Conf['selectedArchives'] = {}; + Conf['cooldowns'] = {}; + Conf['Index Sort'] = {}; + Conf['Except Archives from Encryption'] = false; + Conf['JSON Navigation'] = true; + Conf['Oekaki Links'] = true; + items = {}; + for (key in Conf) { + items[key] = void 0; + } + items['previousversion'] = void 0; + return $.get(items, function(items) { + return $.asap((function() { + var doc; + return doc = d.documentElement; + }), function() { + var ref1, val; + if ($.cantSet) { + + } else if (items.previousversion == null) { + Main.ready(function() { + $.set('previousversion', g.VERSION); + return Settings.open(); + }); + } else if (items.previousversion !== g.VERSION) { + Main.upgrade(items); + } + for (key in Conf) { + val = Conf[key]; + Conf[key] = (ref1 = items[key]) != null ? ref1 : val; + } + return Main.initFeatures(); + }); + }); + }, + upgrade: function(items) { + var changes, previousversion; + previousversion = items.previousversion; + changes = Settings.upgrade(items, previousversion); + items.previousversion = changes.previousversion = g.VERSION; + return $.set(changes, function() { + var el, ref; + if ((ref = items['Show Updated Notifications']) != null ? ref : true) { + el = $.el('span', { + innerHTML: "4chan X has been updated to version " + E(g.VERSION) + "." + }); + return new Notice('info', el, 15); + } + }); + }, + initFeatures: function() { + var err, feature, hostname, j, len, match, name, pathname, ref, ref1, ref2, ref3, search; + hostname = location.hostname, search = location.search; + pathname = location.pathname.split(/\/+/); + if (hostname !== 'www.4chan.org') { + g.BOARD = new Board(pathname[1]); + } + if (hostname === 'boards.4chan.org' || hostname === 'sys.4chan.org' || hostname === 'www.4chan.org') { + $.global(function() { + document.documentElement.classList.add('js-enabled'); + return window.FCX = {}; + }); + Main.jsEnabled = $.hasClass(doc, 'js-enabled'); + } + switch (hostname) { + case 'www.4chan.org': + $.onExists(doc, 'body', function() { + return $.addStyle(CSS.www); + }); + Captcha.replace.init(); + return; + case 'sys.4chan.org': + if (pathname[2] === 'imgboard.php') { + if (/\bmode=report\b/.test(search)) { + Report.init(); + } else if ((match = search.match(/\bres=(\d+)/))) { + $.ready(function() { + var ref; + if (Conf['404 Redirect'] && ((ref = $.id('errmsg')) != null ? ref.textContent : void 0) === 'Error: Specified thread does not exist.') { + return Redirect.navigate('thread', { + boardID: g.BOARD.ID, + postID: +match[1] + }); + } + }); + } + } else if (pathname[2] === 'post') { + PostSuccessful.init(); + } + return; + case 'i.4cdn.org': + if (!(pathname[2] && !/s\.jpg$/.test(pathname[2]))) { + return; + } + $.asap((function() { + return d.readyState !== 'loading'; + }), function() { + var ref, video; + if (Conf['404 Redirect'] && ((ref = d.title) === '4chan - Temporarily Offline' || ref === '4chan - 404 Not Found')) { + return Redirect.navigate('file', { + boardID: g.BOARD.ID, + filename: pathname[pathname.length - 1] + }); + } else if (video = $('video')) { + if (Conf['Volume in New Tab']) { + Volume.setup(video); + } + if (Conf['Loop in New Tab']) { + video.loop = true; + video.controls = false; + video.play(); + return ImageCommon.addControls(video); + } + } + }); + return; + } + if ((ref = pathname[2]) === 'thread' || ref === 'res') { + g.VIEW = 'thread'; + g.THREADID = +pathname[3]; + } else if ((ref1 = pathname[2]) === 'catalog' || ref1 === 'archive') { + g.VIEW = pathname[2]; + } else if (pathname[2].match(/^\d*$/)) { + g.VIEW = 'index'; + } else { + return; + } + g.threads = new SimpleDict(); + g.posts = new SimpleDict(); + $.onExists(doc, 'body', Main.initStyle); + ref2 = Main.features; + for (j = 0, len = ref2.length; j < len; j++) { + ref3 = ref2[j], name = ref3[0], feature = ref3[1]; + try { + feature.init(); + } catch (_error) { + err = _error; + Main.handleErrors({ + message: "\"" + name + "\" initialization crashed.", + error: err + }); + } + } + return $.ready(Main.initReady); + }, + initStyle: function() { + var keyboard, ref; + if (!Main.isThisPageLegit()) { + return; + } + if ((ref = $('link[href*=mobile]', d.head)) != null) { + ref.disabled = true; + } + $.addClass(doc, 'fourchan-x', 'seaweedchan'); + $.addClass(doc, g.VIEW === 'thread' ? 'thread-view' : g.VIEW); + if ($.engine) { + $.addClass(doc, $.engine); + } + $.onExists(doc, '.ad-cnt', function(ad) { + return $.onExists(ad, 'img', function() { + return $.addClass(doc, 'ads-loaded'); + }); + }); + if (Conf['Autohiding Scrollbar']) { + $.addClass(doc, 'autohiding-scrollbar'); + } + $.ready(function() { + if (d.body.clientHeight > doc.clientHeight && (window.innerWidth === doc.clientWidth) !== Conf['Autohiding Scrollbar']) { + Conf['Autohiding Scrollbar'] = !Conf['Autohiding Scrollbar']; + $.set('Autohiding Scrollbar', Conf['Autohiding Scrollbar']); + return $.toggleClass(doc, 'autohiding-scrollbar'); + } + }); + $.addStyle(CSS.boards, 'fourchanx-css'); + Main.bgColorStyle = $.el('style', { + id: 'fourchanx-bgcolor-css' + }); + keyboard = false; + $.on(d, 'mousedown', function() { + return keyboard = false; + }); + $.on(d, 'keydown', function(e) { + if (e.keyCode === 9) { + return keyboard = true; + } + }); + window.addEventListener('focus', (function() { + return doc.classList.toggle('keyboard-focus', keyboard); + }), true); + return Main.setClass(); + }, + setClass: function() { + var mainStyleSheet, setStyle, style, styleSheets; + if (g.VIEW === 'catalog') { + $.addClass(doc, $.id('base-css').href.match(/catalog_(\w+)/)[1].replace('_new', '').replace(/_+/g, '-')); + return; + } + style = 'yotsuba-b'; + mainStyleSheet = $('link[title=switch]', d.head); + styleSheets = $$('link[rel="alternate stylesheet"]', d.head); + setStyle = function() { + var bgColor, div, j, len, styleSheet; + $.rmClass(doc, style); + style = null; + for (j = 0, len = styleSheets.length; j < len; j++) { + styleSheet = styleSheets[j]; + if (styleSheet.href === (mainStyleSheet != null ? mainStyleSheet.href : void 0)) { + style = styleSheet.title.toLowerCase().replace('new', '').trim().replace(/\s+/g, '-'); + break; + } + } + if (style) { + $.addClass(doc, style); + return $.rm(Main.bgColorStyle); + } else { + div = $.el('div', { + className: 'reply' + }); + div.style.cssText = 'position: absolute; visibility: hidden;'; + $.add(d.body, div); + bgColor = window.getComputedStyle(div).backgroundColor; + $.rm(div); + Main.bgColorStyle.textContent = ".dialog, .suboption-list > div:last-of-type {\n background-color: " + bgColor + ";\n}"; + return $.after($.id('fourchanx-css'), Main.bgColorStyle); + } + }; + setStyle(); + if (!mainStyleSheet) { + return; + } + return new MutationObserver(setStyle).observe(mainStyleSheet, { + attributes: true, + attributeFilter: ['href'] + }); + }, + initReady: function() { + var msg, ref, ref1, ref2; + if (g.VIEW === 'thread' && (((ref = d.title) === '4chan - Temporarily Offline' || ref === '4chan - 404 Not Found') || ($('.board') && !$('.opContainer')))) { + ThreadWatcher.set404(g.BOARD.ID, g.THREADID, function() { + if (Conf['404 Redirect']) { + return Redirect.navigate('thread', { + boardID: g.BOARD.ID, + threadID: g.THREADID, + postID: +location.hash.match(/\d+/) + }, "/" + g.BOARD + "/"); + } + }); + return; + } + if ((ref1 = d.title) === '4chan - Temporarily Offline' || ref1 === '4chan - 404 Not Found') { + return; + } + if (((ref2 = g.VIEW) === 'index' || ref2 === 'thread') && !$('.board + *')) { + msg = $.el('div', { + innerHTML: "The page didn't load completely.
      Some features may not work unless you reload." + }); + $.on($('a', msg), 'click', function() { + return location.reload(); + }); + new Notice('warning', msg); + } + if (!(Conf['JSON Index'] && g.VIEW === 'index')) { + return Main.initThread(); + } else { + Main.expectInitFinished = true; + return $.event('4chanXInitFinished'); + } + }, + initThread: function() { + var board, err, errors, j, k, len, len1, m, postRoot, posts, ref, ref1, scriptData, thread, threadRoot, threads; + if ((board = $('.board'))) { + threads = []; + posts = []; + ref = $$('.board > .thread', board); + for (j = 0, len = ref.length; j < len; j++) { + threadRoot = ref[j]; + thread = new Thread(+threadRoot.id.slice(1), g.BOARD); + threads.push(thread); + ref1 = $$('.thread > .postContainer', threadRoot); + for (k = 0, len1 = ref1.length; k < len1; k++) { + postRoot = ref1[k]; + if ($('.postMessage', postRoot)) { + try { + posts.push(new Post(postRoot, thread, g.BOARD)); + } catch (_error) { + err = _error; + if (!errors) { + errors = []; + } + errors.push({ + message: "Parsing of Post No." + (postRoot.id.match(/\d+/)) + " failed. Post will be skipped.", + error: err + }); + } + } + } + } + if (errors) { + Main.handleErrors(errors); + } + if (g.VIEW === 'thread') { + scriptData = Get.scriptData(); + threads[0].postLimit = /\bbumplimit *= *1\b/.test(scriptData); + threads[0].fileLimit = /\bimagelimit *= *1\b/.test(scriptData); + threads[0].ipCount = (m = scriptData.match(/\bunique_ips *= *(\d+)\b/)) ? +m[1] : void 0; + } + Main.callbackNodes('Thread', threads); + return Main.callbackNodesDB('Post', posts, function() { + var l, len2, post; + for (l = 0, len2 = posts.length; l < len2; l++) { + post = posts[l]; + QuoteThreading.insert(post); + } + Main.expectInitFinished = true; + return $.event('4chanXInitFinished'); + }); + } else { + Main.expectInitFinished = true; + return $.event('4chanXInitFinished'); + } + }, + callbackNodes: function(klass, nodes) { + var cb, i, node; + i = 0; + cb = Callbacks[klass]; + while (node = nodes[i++]) { + cb.execute(node); + } + }, + callbackNodesDB: function(klass, nodes, cb) { + var cbs, fn, i, softTask; + i = 0; + cbs = Callbacks[klass]; + fn = function() { + var node; + if (!(node = nodes[i])) { + return false; + } + cbs.execute(node); + return ++i % 25; + }; + softTask = function() { + while (fn()) { + continue; + } + if (!nodes[i]) { + if (cb) { + cb(); + } + return; + } + return setTimeout(softTask, 0); + }; + return softTask(); + }, + handleErrors: function(errors) { + var div, error, j, len, logs; + if (!(errors instanceof Array)) { + error = errors; + } else if (errors.length === 1) { + error = errors[0]; + } + if (error) { + new Notice('error', Main.parseError(error, Main.reportLink([error])), 15); + return; + } + div = $.el('div', { + innerHTML: E(errors.length) + " errors occurred." + (Main.reportLink(errors)).innerHTML + " [show]" + }); + $.on(div.lastElementChild, 'click', function() { + var ref; + return ref = this.textContent === 'show' ? ['hide', false] : ['show', true], this.textContent = ref[0], logs.hidden = ref[1], ref; + }); + logs = $.el('div', { + hidden: true + }); + for (j = 0, len = errors.length; j < len; j++) { + error = errors[j]; + $.add(logs, Main.parseError(error)); + } + return new Notice('error', [div, logs], 30); + }, + parseError: function(data, reportLink) { + var context, error, lines, message, ref, ref1; + c.error(data.message, data.error.stack); + message = $.el('div', { + innerHTML: E(data.message) + ((reportLink) ? (reportLink).innerHTML : "") + }); + error = $.el('div', { + textContent: (data.error.name || 'Error') + ": " + (data.error.message || 'see console for details') + }); + lines = ((ref = data.error.stack) != null ? (ref1 = ref.match(/\d+(?=:\d+\)?$)/mg)) != null ? ref1.join().replace(/^/, ' at ') : void 0 : void 0) || ''; + context = $.el('div', { + textContent: "(4chan X ccd0 v" + g.VERSION + " " + $.platform + " on " + $.engine + lines + ")" + }); + return [message, error, context]; + }, + reportLink: function(errors) { + var data, details, ref, title, url; + data = errors[0]; + title = data.message; + if (errors.length > 1) { + title += " (+" + (errors.length - 1) + " other errors)"; + } + details = "[Please describe the steps needed to reproduce this error.]\n\nScript: 4chan X ccd0 v" + g.VERSION + " " + $.platform + "\nUser agent: " + navigator.userAgent + "\nURL: " + location.href + "\n\n" + data.error + "\n" + (((ref = data.error.stack) != null ? ref.replace(data.error.toString(), '').trim() : void 0) || ''); + details = details.replace(/file:\/{3}.+\//g, ''); + url = "https://gitreports.com/issue/ccd0/4chan-x?issue_title=" + (encodeURIComponent(title)) + "&details=" + (encodeURIComponent(details)); + return { + innerHTML: " [report]" + }; + }, + isThisPageLegit: function() { + var ref; + if (!('thisPageIsLegit' in Main)) { + Main.thisPageIsLegit = location.hostname === 'boards.4chan.org' && !$('link[href*="favicon-status.ico"]', d.head) && ((ref = d.title) !== '4chan - Temporarily Offline' && ref !== '4chan - Error' && ref !== '504 Gateway Time-out'); + } + return Main.thisPageIsLegit; + }, + ready: function(cb) { + return $.ready(function() { + if (Main.isThisPageLegit()) { + return cb(); + } + }); + }, + features: [['Polyfill', Polyfill], ['Normalize URL', NormalizeURL], ['Captcha Configuration', Captcha.replace], ['Redirect', Redirect], ['Header', Header], ['Catalog Links', CatalogLinks], ['Settings', Settings], ['Index Generator', Index], ['Disable Autoplay', AntiAutoplay], ['Announcement Hiding', PSAHiding], ['Fourchan thingies', Fourchan], ['Color User IDs', IDColor], ['Highlight by User ID', IDHighlight], ['Custom CSS', CustomCSS], ['Thread Links', ThreadLinks], ['Linkify', Linkify], ['Reveal Spoilers', RemoveSpoilers], ['Resurrect Quotes', Quotify], ['Filter', Filter], ['Thread Hiding Buttons', ThreadHiding], ['Reply Hiding Buttons', PostHiding], ['Recursive', Recursive], ['Strike-through Quotes', QuoteStrikeThrough], ['Quick Reply Personas', QR.persona], ['Quick Reply', QR], ['Cooldown', QR.cooldown], ['Pass Link', PassLink], ['Menu', Menu], ['Index Generator (Menu)', Index.menu], ['Report Link', ReportLink], ['Thread Hiding (Menu)', ThreadHiding.menu], ['Reply Hiding (Menu)', PostHiding.menu], ['Delete Link', DeleteLink], ['Filter (Menu)', Filter.menu], ['Edit Link', QR.oekaki.menu], ['Download Link', DownloadLink], ['Archive Link', ArchiveLink], ['Quote Inlining', QuoteInline], ['Quote Previewing', QuotePreview], ['Quote Backlinks', QuoteBacklink], ['Mark Quotes of You', QuoteYou], ['Mark OP Quotes', QuoteOP], ['Mark Cross-thread Quotes', QuoteCT], ['Anonymize', Anonymize], ['Time Formatting', Time], ['Relative Post Dates', RelativeDates], ['File Info Formatting', FileInfo], ['Fappe Tyme', FappeTyme], ['Gallery', Gallery], ['Gallery (menu)', Gallery.menu], ['Sauce', Sauce], ['Image Expansion', ImageExpand], ['Image Expansion (Menu)', ImageExpand.menu], ['Reveal Spoiler Thumbnails', RevealSpoilers], ['Image Loading', ImageLoader], ['Image Hover', ImageHover], ['Volume Control', Volume], ['WEBM Metadata', Metadata], ['Comment Expansion', ExpandComment], ['Thread Expansion', ExpandThread], ['Thread Excerpt', ThreadExcerpt], ['Favicon', Favicon], ['Unread', Unread], ['Quote Threading', QuoteThreading], ['Thread Stats', ThreadStats], ['Thread Updater', ThreadUpdater], ['Thread Watcher', ThreadWatcher], ['Thread Watcher (Menu)', ThreadWatcher.menu], ['Mark New IPs', MarkNewIPs], ['Index Navigation', Nav], ['Keybinds', Keybinds], ['Banner', Banner], ['Flash Features', Flash], ['Reply Pruning', ReplyPruning]] + }; + + return Main; + +}).call(this); + +Main.init(); }).call(this); diff --git a/builds/4chan-X-noupdate.crx b/builds/4chan-X-noupdate.crx index 41f0d6c2821e08c49ab19038a7b7d41ab15b373c..2eebf6d967a28f906813e7907b422b9ac7bbc0c9 100644 GIT binary patch literal 277520 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®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%0AR9eWpiHgH7tY^ThmMeayD%!2!%SwaI4#<3Li znUg<)Mz)dqwzNQ*#04B3;9&aq1F5mz_8fq{!8eOA>E$Um`h<_5mcBq3td-~+j~y4Q z;zTUzSKueOk!uXZAyULv)#2c;>C+SzqDbz7pMz?z)PA$-`II^+YyHOSii@v5Ye;Sj zt;!Pst9BJlt}$_YfoH<2uU@O*>(L+Q?(ptHsO4*J<35K}5ZZpMQ#YZEI2C^RoQ}e0 zeB&+3i$u>>t15il{jF1NkiHZEx4F-Jk(KJJzT)f<#VVr5Eo@~h#U}6O5k8~he@K)$ zzbQEYpL%&iQRjV^uis20f*MZ@dA!Fx&Dq-g*lNbS-g=I6G_#1uX;SHJC z?cLRO|kon`!Q@2WiYpWo~yV*Rn}*8-QqWS4?`(meuCHx&<0JBYGYI zs)8QJuO?&=T;W&cV@bR}T86w1Fnovl%6jET?^=iHsr`#WhnxD*L{Wy_U>5?_Z@)~9 zTugd~dFsbS{7)M$o#64h&1gfzWqqMPkQl+(1>FtlWaGzvL$1JM$xw4x8_#uDhs+oL z-C->{;@C6h!jv3$*`1acE7AIR?{1NUdmc$EUz%B;Zd*0y95o7IIyAxP7tk$K_Q40! z8pKjSLR{)C6&_Eir(oM+g_jBxp=7eemxlnuG#mR9MsMjj20Zqacd#8UM~{d`BJ%bl zO@A#q_%ac?VRCT%7C107fo2NiUe<{}vz2^q+~TepUeQ&deD*7CyOa9^fG2rgB#9e; zDhM>w=K-(gZNQMe*AVxn=+`UYo02~n(~Tgi&&4d|b~EewSK|Hxigb$6y}!xMSvQkg zunuA*<6y8$4R^LNBXRiLf+<0D_F;~>$#~dQar=U1<`nSCp!k>^oDv_})-eRB6{8b4 z)#U4*QwY6Lc@91YzqLT$CQxP!0v(nFl>dTODw#T=N3Q1(bzos)DdTyLx1~)^ccc;j z>)t@z!RUCbFW;>dM{MIs;?Jk zkWLS~w@c{PWcuuI*8@I#vT=IL0GR?3AnliR* zSYT$F)bB#=k{d~Ax@Pv&mqgw2T66bW#)O0O4pDyCna6~;=jgDJGN>y7_=kMPBfH0h zoyd;>%X;v$OE6G}uk~Sl$;cR0;DOs=?IyerMf0Se6UaH*waQCQq{4;3N%2$CwM*nx zyA+fyR5{g`<^76Nm_D}qiRWbph|T7}-l^XiHs@~A8X6Q)uk0oR7NQuiO%G$kNA!6! z`u0-J*K7i9yjkvpv(~ZyS|Uv-@LPh<2j9;L8kf|sGhx4wy^K?v1{PP>CE7KMfdQ!1 zqQA$pPci(ao#wY8Z+5gXu=qrpWB|ADJKD>e=w4{4T7#=Mp=NvP{=|YlZh4Yv?Bik} zxHn)=(@@jK0wR#(E^!Q08U&BQzi@h~G+y?FB5uSy;^VZeO-mg*eSqaaf_r~81-#Rn zrV43<@_cbx6E74fsj&x@jym2y5_)h`YpvZ|PD`i$g2z&$oEy~&kIB+xxa$3Q3-^I+Y zYs$ji!&3^Gkba;;AD(Pb=!871Envr|Z8?9k7uynHP92kP$IF4n08HizA9egR?qxD6 zL@tcn9etf7muY`4MqrK10TIy^*IEerk%7FMqVqyNA$Uur`(~e=7~PqY_S}*u7cCC$ znP~d3=H}E8tYrFEwHZ_o*uC6Zzbl3qUQ=L13raHl^CwfX42}x7?XPKO6qxU2n0|YN z2A`5JNf1+#O8UVNDQ^_<*#wKB0L1-n;M5}dp7>+naS?>W!BOl)MsMyO4qI;1rE=** zc~G3tyjS3whYbFkr9`9J@s&0-LfSoOLER^2I>R|Bj*qT3{IpkFghOvyg-WZx08z7k z^S#caNKH(o<+=Z!%Z7))xWQ=yIk2a|vdMC+y@Ct04&dwFOG0u**b4m~+1!fOnj>Q= z4n|j=RI-Q;*f`oKS5`Q=tCC%0Lk*<%vS%}8As9jh>+0D3zAmxbmKuK;25#+w<9puA zn;-h@*dmKDF^T&A;uXG{Vq`^abH(g1aSUbZk9k&a+{yKsXV`F z=DZVBA`7j9*P@?0WJf;$gNCmgwudWxeBEzoWm|kj9A=9O-}ox9@oE`7LK|X>4F5e& z=(dwRH73WRi@E?36c4mLC{%0CHt%>F`OK(8J!pp><^5ARZvNGR?VE??_0k(CsEOR%3<)v&3QJ0QrCBMG_f(lA47cJA@=;9dN>o6LPIIA>w{+1}<42X-H ztWa0=zz}?0GzOgcHusz*X4bK8(~G<4J|2*OdZA|Np0NfPN>F^3jD{)&l(iLkko7sK z9gb-7H~-g5WTfP#JC@V8q+LDrcG8R`{5Kv2?x(L&(t7dDz89{knlZgq1LQ0!0n5kw zoN(icn&UrPVF5y@-S;#mh{ES0pzlhNKSFkzR{;BDk#!bil%0USA_H$Kpy!WDjt6Tb zRNuQ=wpIJA-PbxNSr!tyvXi>Zf33n0K~+J<>{jHWSSZAx8poitNQjezftc+MzScUJ z$dZV7iKajfxx@wtsihPbYM?KSIM19`gQb{`jGKF;6d&s`Dh;U}eg7%oRZ2?!EpP*l zk2{;iaYTLbwluo30&K(P$bf++KZ<3=Ie&3bt8)d*j=;SAa6pZiANqWv)(N%8P3)RyKZ!P2sSTTumn)OP#M#byy`=3suP}9BW%;F*5E!ZG z0-*vJiC>|oN=d4yN?HeD0``*wvQ{Q2d1N6TToiLM%wInraY_ahjY@iY&}dd)g8ISp zD?{>{;{>S2l}G5*#E#-M-b}%HiF)G~nBzFvRod>SsDjNsy}-}n!>MAdMC-Pd$PIoa z5?|My04@4Zz!7vGv~)p>rM0qzSD-~1{ue73Ye|mseX`!bBGvEg-#iU|={V{kHnM~J zZ6%6c9hwUm@pJq!XkyxWbsnAJ4P(EJN=#~H_%#ta-)^0?0dm_y&q)GaFA` zy-&a47qj-CT#1t`$^65>G=_gl{tSh`9S5$829(tEWExL7A?+LhZWhALFE{(;savs4Ma zS%}vaP)1uqQzEH*vM5DgRU+i!@8o&Ze(#0JWebUr7ifXP3@mU0&%Abkc2ao8%4Hqb zFO=!Kb+BrEjP6JxN?aJ*g&)kZwkoTVxA9T6rgU;n&8l5S-lDK3@ENbWbn$9CXILRQ zt$NK4;i2;59Xidp-vjz4zo#p?82`}>CDBAZ>TvA?**TM=$A!8G@PoC3=EnHgF_|<6 za0CaTWfsC`r8%!0regozo9sQ!MS=oVt;h%CPR^>O%udy?D;*0LFmLQ^J9+v-lk(9g zSX!}{7Kuck)Rkpd@u41$>9q}DRl~v@v{n9c#dT@r$>95C7Di$;!hs)^lx1eB#-?Sx z*JDaZ29$>ogi-)y{;UWxp#r&+Up{U3nDQ_RnMP{|IG_RON(3)p?lZ^4Ex{n)Mnq#b zKLMEDc{x0yLCQ%5H8#1dmdvYG@CjWi zDJbNE;=(f6;uAtLW`j3=k(UO9NE~WE{i;blD|(Qv@8d`NAr>aSthLwueq*5KalTk- zN|e3ppCSe1M5E{f%c7FrbpyaD`O=ONrA!Yf$`N|@l6wEA6#IATsf|(Bq>qF=t0X%V zVj|6rc8H_|U6ie1Jow7~%4>~2Tv&B992;;)5-t^C0FP2wQZz-}qGR|1hXOI7CxGoloUwV?=3V*AP{9`BT??`+C|5SKF|`O;~D!rq3Ifg-fPo_h$IK zH;2Dt`z4Y?!>mFa0{P7lL!%%wp45r>M5U05zQS1XlUm~;p~M+o_!7MPaNENLt}5fw z{Gu>GWnYr|#^}|=A9w5O`9ty|GKe zkrrzqQTu49+_ivd@p!J|I3dtXXiKMq!?dI0EfJ!|sE%e9G}tqy&-_T0^jzb~ky3~i z)T(0#wh9bW(<3Gb>n_U=#cuEu1}-N{?m&e<;P(x^@N8teU{eVnMM|u>Kicazji@caAgE5=C-kGNj5C}=u z!d9o>Z=VQ>MN%x1Gqby2zj3Tjr_Fh-x!?ElSEgI<=Zq~p=MRrAxb@|}TY0W%xtyp9r>C<0m=@AJV1^UElOE}IMK5xl)fn6< z`|4uIAIr?Z7)j6FS$TD8x6^|{PkPBUi+X>vSS^-&a8e$7xrSCN*GEFHtd+OcRz6tL zNqKTw`Qype>wQkQ4tBp)svejz@7k|Qu~*I24(Z*pvny-|n_AmX{N@L&Z z6$kH=_G7=CJFH*Xb;|-ru&^#47As}lMGV>dR%mIpVs*?f6g-pXR;o^dOm2ZD>B)+N-)dJ*VGwt2Zz(W8`b^uyisUW zYkImm;;Tyky}z-XPL*knSG%12(qzW9X1hMEGiqxk6zAhn<5fI0U$&jcp};j~jrmN{ zr>~vHeA;s6>19D3%mwaX=fHfckKNp9Q)b3P_1Jhk<%_58f-m>FkJaL?*KF+5_Jh}Bt(r;FlZE!F){Hek;jxB|Mwz#>}DzNR-LvGOCq=EER zdv82!g~QwI@V?lH)qKAJ?zH+F;~XDO<uWN;gWE}d1Rn>fZc&NU&^G#RUjT}RMHG7*kZqB~iv$FZn+-Z%qGh$xE>9kd0 z+d17GEQE)#X>|JQamjc$pT{qcj#_Lw+tE&K&*WL>U9PsZp(D+vZE5pfGOWjf)oO2? z(L;sZuDgtEOm?rQ0WSh zO>pD0qCMT4OQUJ`ay_M&-XD6W!KwV(JnawVQ+`sKJk^y~IbD(S?;{{6&lcSPG40`|Z8iYYD4*<7GG>KT1WRS3gL#z0^1^s_Lvd(yONv^Y{X~ zD{%YfyigmLT1>jeJXZ(LtL|VaHkJ=3V|FS$91GQYsi~%Gs#_hpD`~fstYzIYMpmJ1 z8vEDDa=5ZfOm*BJDCs&-?lCWi9pUt&^~QV}Yn5EE?6-zE+<;)>_lYCylFi zXM26JAISS^pMUC0je%6P7Ikq}E$6GP{9a@C{mQ;k;h!o}gXgQ&Tz#0U?g!P*V80#g z`wz>~p!%%TrF8v`@1F`?eLr|urgznvQU_9Hi|=;}o!S1myYJ1GrQNc%sK2Kh6TW5^ zy5jzMwyf-yjYWN%ZuI%uTcK0l_w&p0ZutO&@pMDxYsEshydUJ3{9+0EUZooizV=Y) zJnVaeWofZ&=IUm;@ygfqLib_+JXls1%X+Tf%vH5?vTI6r{tlr9aOP`^Tw0e|dd=1R`10oD~kHq@H%mwY7XL z8^^La5Fcivn3g4zd%qhlO#Q)tk@l{L+3f77vBJR(Lc^&8Kva@9Rz3vZcOTYYq03!J*&S%O}2i z;zxVF&F5+okm(0Cez&jg4v*G;-sOR2{Mz9kI=N~m*L>gAOi`(FfO8ir%a^=u*mI?# zx2vsfx&9~{h5fo&Dm_1KEB(epwb_^U&55+%0vXC#s502pyiv^;Hf*6+Db=0y6Ohez z%5t_)XR~EKZw&GUoh=MbrD`Mn)JQj~>7|iV=eZ@bXc*~gG5vJnpY%e0uy+?=;~S-P zwUvJC@{h9uv)h}CWns5GEY|P2>LlH<`2MWW*7weCSzN5ST(zI>h%&oh* z`Yc`F@%;rrS#SmgH@C0kmJhl5AYEUidkemuD>%7*Ikz0-zz6kQx}W3Qy4vbB9$(s8 zXWV}~YHg*ijW*3q{-xi`4?CLK7r3QU9#_lEro{BpY~8IqxlUu}3}?I1%o^s)<3X9x zOU&TFR)JPllN(ieXe>ta*|6|1Zapwsi|N-DyEmNILJN-j{{`y>8%wM)$ea`OQ+AVuBEl&GWJ2v+PFVD#w@7;;`9NS-JP3S@{QHI(jcUT}vuy zj&kTP9L9OkH-mou(Ouq;=9QS9}Z{JeQ$_2OYKJ~TE{Aa-udr^#VI z-solHZ7r7{1jUj#=47u%^W5ueu2Shchl9Q~U$$@gbz`kK^TP2#>}?iePww$=wcJT6 zZv|)H9XYS6J{&PE%jo3OkM&hMH=bJU{jrnl>~o^C1s5Ci!55TT#jp;;{$OUNpVLLB zJ}B2pM{ZLb@f$(TZ7c1k1!Lr8UD>`pj4Cfeoqd}w( ztQ3ldU0n(7Li(+=Ru`vn<-yu8ZDzdgK9-tXsmUCHb~PKQV?GVE$>z&ZEy%8#f2plo zo7c&+`#zb!w3@l%e!qS$Gex$xA06ziF@I#suS>Xf<>@@1Th{u$r*7-5wVbyOR%OW@ ziqAk~0T+ce8jPJ|UpCu=bg3;49{F)|K6#XTuOcrnj_ZuO;>-X^K(@brFD>jfQ+}J3 zO4Da?UhY}4)2Wmg<;ax8fmm4UcG-G+nF}`C9=_T#w`k;B;}=aVcq^;Yke zg~o8wDVJNPHTSU6jp9jMyq%7+Sb0|(!`Ib&x_p?`<>UKX{Z-Uv&DBU9Hkfp2Vz@y6 zEsi9sXPa~9ojYuLQ=oWu^xCdeJ(Z{ZKChH#4}#Fs*PX`+AkckT-Y>eQSZ+Ny?}vul zwIADsW8ZbF%i}J;dwF>pJj@v&vGcrGo$p?%<BT+UE~TZ0q>P4)VfVxW({!t@ zA{GbBV{uW}=8YPcmc;E&?CRr<)nJ~*PQ6<#%@5<*V%!pEnxU1A!@4)xG^U3~Z6~(6 z8s`=@V>y|Luk)E(QEP82{kgzYM6g}CU9Mhz-44pbQ~s%4lzL;%ENRLi|H?9x7g0Y9 zdU}3PmpSIp=r-ERZJ872-1E3UeA*x9BU4$=t@oFOy3d#2?5?Y>4}v%WB4>Z9KR+Mz zb)8|vW^tZhPsdfMF|(?<&f`eZP6uVO>nWTiKHCqf(|BJL?MBb;J;ErOQo6^2t3_VT zDhEzKl@@Q?Wxvxo&X1=~OX=#}p8Qgm`?X3w{nl;k%5rq5Fvdhb?4BQ|gPi!fQ|fzG zbf3!2-K@ZG_U}{nW&EU>UA|n9TbtveBImS?^TKVP`=iILT$DINEeonDJr)MjPP$ff zjsl>i@~I0J<*jv^Iqm7I_%d&~3}4*Owysdoja5DWw3^tRRk=N~*{9Bw>$~c#4Me7g zV!C1NY87GmTA#Mq_S1noKGch|=?thbC)*r#g#PhyBO9xt*ndi|^|o^85cRoJ2%yHQ+r)T_F z;Wy*sz^VxI7yW%$%0Igj&$_zPm&`|(Uo>}*+f)DLi7_1O`OVe0gB~ln43q1&#*cs> zb#ia-WpV2shc)T7^Q1BpW>M+Mr|n~FIaZ4g&G+McGTly#laf&$skZsbZ`%B3#^$B6|YUAjiMzFO&heJYN}i`lZ@Hf z6zVFQ+t(i0=e}lkUJqS;RM6i$uR{9id7xP{@iZDf3GQ_K)KMpehb)GBFPFHPUdo19d% z)A`QhQJ+fu``~HU$rs^~FEFJIH&_)bwatsUm;vny+^}Qg(A{Y-FG|fiRb-)~+4iQ* zcIJxS;qtSQFng=3yub`J9$B(=T(TI50a^WyehmRAyYPGpTCCv;AxnB2Od6q1O zXUaldR@K!jw_d)sS7lRPHOD2#UL9EHo$UfGKv=oCj#+A3tg5&8!wV1{D)L+9q0hg* z<{wI1u`oAYy1OQ4fy=4&a4eN){gK2BdifQ&o-dk_V$vwK?cME%e zC->RqYCL#r7hS<<<_?Rk)$bdxC;rrbwUtTt%`~20pC%h&4lcJUYnFxwv!iu;N4a0= z_MLfNOKaP{qv_l2qfl#4=JUF+REy08XxBAfQAz3N)Wr~c&46n3rmQ@7f0 zY%PP4DvyuvjlH#g-8=Qt(l#ER`fYXEf9$>2J5^WJpASxcdQfW<>1Ec0ub#9fwbt$D zL#sa-w8r3Go-`*fjmg`?&f4r}Gwsk5ccX`);65F9<9B;AS-tJ*Zx-8ov0lZ~^w72) zMQseH%dY(RSeiVygrimK44YuI38S6Lv*zj~+u{aI-)m_eamNch>&Iyl0q_jGcl?or`3&gy+`K07B>7WG$Y zG-Y!3to^8$ct&?jeJ;;|3RPM5?J2WenC?@a6IG|E7sSz9dJFEUH@B1DE>_NyUJ_Ng zvMpH3Te^L2n-t-QUjtW*0(csR_3IMN|NOCH02{U=$r- z`u&&Re_t>R^ZPGfgRQr&txCk!Y^1fV2$r-WHs>PE6@8~@hN)x>B1k?0vI0Fg#MXuA zcpSkZHZEcsQ$|vXGDO+QA8TWn4L!cRU_!CFnDr5qbu_To-HJ1#d;9<6^P6lG5lx`Y(1?>M~ zL4-i4U0v#eMrzYK!=($jJ(KrxWN6&?+ z3CC+UL?{_qH%D-kjODTVAmIRMT@i?9m{pKdxv&(Q$RoHYT|)+u5j0{4T$HjQJrEm5 zDS4p@M6%}!D7%-?}{e3Yj{iHO*k zMTV{sxlTSx@~R_fWWgwpuy5ty0AdcDWE7@=gW0Px`F77oX&;Pfsb@50LGGo51(84# zvN)43V}UH{ba*Vx+O-{ZaU?=jFuaJ^IC=zRMOO4Mt2A6E@EM8%$V&E<_KABCFwz^QV)s-(7*W3Bg?2B^s3 zb|MZadH|HQA`wZt$e|>)vkW>rF6Ie9RNh)FAY13!XZex{6Qy`hJBkA;A!i!sZgD_m z?AeL|LZl^E0XGF$i5R#F!oU|s988q*CCjh@-%u^$NiK?%g&^~bqC{B=3K$|)2}HrP zs9<#(8qt*)EC`k4N-P$JEdG`_EC5Z$F6EIs3futUL+W1+9+M}ciJlJSU6La#EX!R9*2!W6jAvC#@=d2 z4X#Ai%NOxSi41_qMk{wK+EgtP0%~X=-%S<7{}rSBR!Rh09|fe08&TXU@p#5WY+oU9 zq($iTUp^+{5wLqoY#u!Vu1>RqR}fXef;JC$W045}QH>QPEC^d*nm0=MNjDVO=6^&?pS|Dn!VmazUl>~=K1_I*x1)>n(lvFiEDByu;>X1;x!;smy zP{Kpdn7B};`JSlb<7tre<)AvtC=;YQ%Ba(fo{FVrh~zzv9*VuC=;QzbK}P%-_J()> z1O;_-QrL)yoB&Hz7Lq_VbBQcoc%!(^M8qj<8P{#_k2H)cAkIl*5b;{LUTQu(?N*dn z)RpTJ*^k7bt~;_SDj{dw4O?_=NwsZ*GB;G2F^^#mu4;-+=3!D1F;bcepjeei=Th__ z+d?FKVW9!d;z;SUjJ-vP&7)^o7j`OW6LIev)=e?Fiu2@!!#PbdE|D8c0d75c{%viC#g zNDwg;AxDqR(lC~Q$$BQ;7|;S4ln8@Z0DwS76mw<7004&LP%i+vj0GXzH8PI{pxuaa z1q(vG3T4FT3my16d7)784lpk#B7eb;h!_wr2xuH!yBms(tk`7Im2r3?w}$tbKtZAq zV(&-*3PaHFhyW};d?m1v=L=4kiR@HCLQ9n8HN?sXUji0QWK~M^G|7U!5{;<+80ecY zK#C#_CwM6KFD#3n~XDiThviH#*wWGon6D_0auAZTVwY`?&` z9-Wn8OO(U6Ktc^&)uD-^3l5`=QM5h87-uYiZb`&mKt(%Ev542k0vllH#j_BHv_Py2 zuByqR|3&h9_$sG{LnrzNqh{)!V z8Pg(4>Z=$jVIkw3#W665QxW<^zimbvS z(d9lQb$$gb2z_EjEDU8vCBlp-Qz;{{Q1*r#b-^M*=bB*Bnpbe5IeEqcB4vt@1q2O} z{{7*9LBxZEqtiX-EE19a?ix=dN`i>&jWgzbB#6!y>!RA!gEQ>^%dya5RF|}hf z4p=)9k#KkuHQ74BB2niTmlqMBK=zSQpb*RRmKK1{A~E6%3!DT>dz59bD6J8*udr22 z;{DGeq2L?k=t)47E+kA0G^M$WYwm@P0F9D7Fa-%9wYDlbLxJTGswBr7vmBWw0ZC~n zT?Rfyk#QuCRz}&HPMFGX-!0roN4Kwti;2XaYlh^z`aNqM5v+j52obp>SHvtN3|!d| zAxfz8;AXcwi`LMzmk}*vLv%Q^NLczMY>EiLW8$TVjVaM3L>R=C=$eXUOO|R9`3@4F zZo6U(MD#={mO#$OVv#U)(>NYpvdN>$TV$pJ1b5_NtB*%3jar@^vg6dV?bKM!PR5n+%74V88d3iyEAm~oXT zK;*-X1e$BgPSGeNjKrAx05r-iR45_yL?8j1r4R=t(n3DsfF(*s01-&W1c8$Cq*){g z-7%IC743Y9dzR_T{!tegiBUh}j97Xj7|DB#gs-3Rq4|UnlvK8fgt;rO6^=Xu9}s~N zXNO20egVl0)wDIG%xk&uHs5+7naVd+AM1&VGraoe0kz^MnLSTI;f@ZD+ zinoI;%49H#tA#~^>3z7Z;p#N+3X4S42jOTPB4PC&pzdxJOO>cSax_3{mw9{)BAJmO z0rh7H8Z$$p>W_x&xMCb1Mq=yFV8r&(vvjxxccYDYOyjr#RS5H-WJ|F~XuS-S0CK)K zTS6V|0?e@ADb_+G>!?Vay{ZGir6p{M5U6DV$S_1Mh{W3qWH}y*v6@sUMB?FAhi0hM@JmoeeQF7db^QTDQ>ilRsvK5`vwjwZP^5;tbJ z7M)noSbFGJC5r24485`y$iqiM=c$eJsM*(1!y+VL5#S>-|3X6PZI@zh<ktjt|kboq$avg`v2$0x&TO(&#ut?DT zwKiAGvLMIEuw+{LB#VUELuV2BYN&`9AxCxGfDQT*AsMlsyE@=1maRJE?T`@8WkHVu z8ZZPnrtF@xDv1F$EE2DO6jla#TNP~h9;rDJp>HX&ObkR|k@$SSdCYbSsAC2SONwj8 z<&&~VynXL;~+&V(Kv>#=4Nt0x!*y0RDA-CkY~HS8@wu{UP_UJ8 z*tW(_#m>|(Cq>4_f+P3v!cvc#8loSi^)iCiz!&p@@x`M4w}WH0cK~BsYJoLaVau5 zlCg4yh&d(-S_yJXbhas|<3*Cd9*ROB;Qq|gT}L!1cPo;t;*eEUBp(HwOha-ta#|p( zV2lk!eu$)^c-up(v&16lCooT+%sP?mlcS;$HEAUC1Tqx=u#lHiK#bH2qMV7Om`H*K zm(w8!%qS?$A1OK>l3a4m&f5b*Av;Bo>=H==H?~bw4Uy~;(0=PxjiMA5V3GV1041xo zWbDXC9!W6)Fv3Xm5DzZA1#Xqt)SrJ9mW^+=+Lm-a%9v_tbut{`O6LNZOfa@@q$ zJSLHuYKcXXOayXM0j+@r-HQ~P#salQL&;sVT*@2}tAJ`bD;Wk!2^;c$pyp^rpq3$G zkyH~Ch{iMsj=^Lm#(^LuuE7ymY>CY|Y;*cG!XeotXOlR&5;ccplUzV_A_PM5Dovl~ z7&NWQCbo@IxoR9%hD}~o9!*n$(RvgJ#55ogn<8<?i9c`E|DU#KMyti&n8CR;u8TEEO;7)K(-*A+Hre@CFcXsO*A8-H?`|I6wqZ z_Cy#NS8Plqzfiy-nJPPlTojYTWS&^$#)z*RNJ1`ASK^TL5U*^5eHCjiE_s9_39}?|FlB5<)Wzg+-2jp>Hso$9WEf%yH-}`61fhrw z8p#{c71yC`k%ZV^ypkkjXC;Ruj$CVtfm>abRH87;A*mp@f*{00j%0!CSAt^;CK&+b z(iT~S=a3u_kBQKDA(H#yLC{|C;gI}~mElA#X_1)3#v$n-J5>n8qoVCGk~yU{k0u)J ziE%Jo9+Ug6xId|xQ);1dd9+&5lg@_~G|1^-ThoC|dLoPshEGlOOZlMg6z8$j3h(l6GF5ny%DW!lW zhoqETfLJW5^T>$U@&s%Q7F#d{62(!M$rXwSfvp|6v;;9?*Y!TPXm6l#MQlw;_zVUP7u~SQ6|vKu|y;`e6K=Uc%6otY8^Ou&LEFuaWnB%)WotWX}E;)>`yg-aFQr(`(< z$shrWmf%3oF)Zt3=wvEFqPj>ncMi!KSuW`@RveNp0;)~ zgF`Y!fDA@_6pBMqM7)!tgLMLum&=S znB-+Zf{M4oi98l0ZRDEC?uEt@2Zbb$T;cqTSu!9ob>4r{g$$S{0s4usWWWOY#+Yl9 zql7ukD-9-8ABpWtnD(&VIgv>rX(JGVJOR`UK$PW>Op$XHJaQ-oR~CpMlrf3u^?o`L zTT8fzZ(?giB7>3BfIf)40+TWV#xGH>2_7HK3t!12hTCvR-iRU-V?a6d!G&AFahgF2 zNg$C7SyfE(1re(-3P(oI&PM$MD;p%}F z7vLm&5~Hd$c2@7_TBM^c#&_G+?NWEAN zC}~JiiLDD}AWjkm5D5U8B`rz-$uGHr#f&dapp=za2wPPUKI{+bWR43!N*}^LTZhcAsLLCs$1Y41BjlHtA zvLYFlUl%Q<>ML+$oLdXqRD=!eMGuTjR&B3@0BG*TuZXbtQgnFg35<@-n}^#Mka9#- zgIR6<&)OB~WwE|kV8mZ^!}&D}E?3KuTqolRqj#xKmk;a|eo3#x3XV2}ID#`CWpFA* z^N{+V>K4XpgT=hfYAaaaTFbx+q^V4v(8x4w)n8&u(L7^JU>6`Hdt0av3>lndpl-Ms z(RCa{ho9gF&)_#zl{E`jI1p0uKX~S zVi|JVe6bR0ee3+Ze)Rs&jgk(5)SNg9YVQeqP25}V&#AToIjF1?`uQ1mM+7mBn%5-{C^Ag<}u_?@7A6F!});h1xEr<=MVj$ zd-&MPU1)Fz7|Sjjd%%ReA#&i4wG@S4nfsLg|14X)i*^h;yBx|$cLd~_3vLuYljYD3 zvXWo|eDMAH<@NY4VByMO2go{oYPDKl$xEO5RIk?~2iO~>dh%{z9{_&zH9QN-_m`gY z`F!|}^{>~I4X6nQPpFIA*M{qOuhm2@ZjbWL_mGD+1(wFXzjS;1=m$Xl7Fx_NU%WK{ zR46GcufTG6vA?XmxNW3WU=uF$uU4zrt2H8SVA~j`AbB?)n`JN!B18dc!XFrJu*lK7 z(nh6HA*_OrEOq{EVMwlh`7P`HhM6yO6Zyi}{tAvYEMYGHTMVgk@IRE0c%CP2)|nyN z3QRT(h=xfo>FgHFG&mXGQ=ft#2e#u<9f}}hDw6PkLU?F=@#t^yiB>o)97$ zK>FDFOVdmUi;11rE531X-(l3&Y(do+8O3Q9&; zmUCTMFKl0t(X(R-vg+DjQXxgb6l5=pKgIYA{VRGg7GQCil&1ux7U}_9$hRxfFze7O z1fw0mDKkvmDtR{|o>yFn^Q@!L7=|ZFroO?m3>u#QeFempimorb|2PJn3*45KS3nz; z8Lw*P=hWwqNbp%-I!&chSL_!~_E#U`-@b!7v#=5ntkZ|g?OdxTmEke-yRJx(T3lWA za(_itR=@c7qzZ0OAPs#bwK=noE8w=aEs@?DuImZJfbT-Ry8N($X|44<(HoLmAfM%%Sei*QT9U;binRD zIm%Mls2Tq^?2Ujwli(0F{EH-Ih`MorrAtzm6fzcO;MsLL2X}EM*Xx|6o))_gRi!Z%r!Ac79`RA>d27mq4?+^U?9V`Q`tL~^?B@PI1TVc;e zojn_x?F?Y}q1%C^xm+4f|e|omCh)o>80y3PDqs zP%c(*QVDK2*~?FWSwWFV{@B$7x!HM)r2-S=W$yk3D`qBzh>ZePE8hjNY@l8ry9fc4a(H3ucfkerzV}ZBIZ~> zcs&NhUvF@bqn`^Qq`bTHkEnF*3;dk2#Yk)r!C3>LpfXn$Y`AzzP*PSQK$VMAzW`rxXLn$F2Q%#+}tg@(Z1 zgR4L`zIrE|2PeD)R4!LkrHrVYRK@x=TP)tga}WP6mEqrPdoi@?o> z*xv2r3L+pX7h|i42npA@Lnk+3IG20`We4A7#;bY3LqSADH{YU{Nj##Eik6HK5s~`7 zaIjGy<^n{N7fQ!r{S@H6!hOh_?C%U%Z0mTJ)Q}tyS}=_4hW(3|CYN|q;@sw;=o5w! zn7{u1OB@oOq<#(99avAu3+^eR5rxH^JA$|X zq{fx%D1Je3IC@BzUjtuXCw2{K(v$>zUJ-u20e&RZPOI^*_KLHmw>-ssk51#tFz|SFJ@B8THdiQ48a!{zf zS&cK^H{hQ<7i{pipF6|QL}+r`Pw&}ZO3FeqK&!~ZKjHPEeED}7p+z5Jo`-)3Lqxy) z$PjUI!BxtD!Eb6XnD+bV@IS}Jh4{*6FsyHry2yb6gW(6{%O902f58|q`yn&*%`HJP zPZJyfQDfdsKVy=(Z4%ielSVKj+E0wFIAV*xr{cn@&8Y;-71c*+>Q)dNCO9b+1{abe z%S?2+W8?qACZUf73?hLfT*xhUX8aIO_zFK?!^N=4aw{CJf^J|{V&b=>h8>P>whgUq zRt$fYV`iDc zhcJhtPR@ut#e)t7t}aP4Yz1|B016Koxjmi}`~)Yr#@mFD?!8BvVXZ29RsxHSc)W$< zfkhRTp*ZxP5tDjd3urmzkRxidllD#;hGl!`6>?iC2#c7S6916dU-kHdicQbMZ zcMY?Z$sF)Mh5W*o1moxC(C&!KBuWgCRSL1=%?Lmx$wBW`Bw zUo%C>`{3Vq$?W!ch@>rPyZSAq3p*T#yu{(-$Osc*O2++t$C`o<;p$24xeQ*gKwZbS zBKbMK7<&kb*TsrxTsGvU!Cf&IGk562Gi707Ycb}P=oD=nK;Q0Di+C5~-U=QPC!3jG_yBi%rgr$MOWJ7USBxx4eVOwy4vh8a3(Jusf z2dkjT;Jcth30ldnS(`y3izlW_SGdjK$va3GNie)Rrb|sF&rVY@0Uf|L zewHN8(Gx_Me`H0xnB#;8K_R@tvysTcf6#SIFdPqnGWqr@bVWDc! zP(-;{sCc>L3 zL(LbNB)7sjpG+6F3g9N5trkd0;W&DVq>mz`42exRq{}OJUh=~qxX@>|L<}>-hlZiO ze7f}FTdRF3Ad$_CGIChIm5_d)4H>M1^&3=imdxuIrph3_<7-4j><7di zV7iy8%XSJ$j15(<*c!Uw-L*;Na1T>hqN5}*Crc8`=8MV}{8Qrmf6K+-YG0)bd@dPo zkeUL^t0#~NuO=lz{xl9b=8VvnGfeyuy%VdD(z=h(2`1Y#KJOW?6;UU>N)*hQASMBa z-NfAmkQ6Y)?dpD*2v#k_r_<&BoO%qWO!x*KFDTnf(1E7bEMT2o=w`Ykj)4>8wYa;d zLHQ4Me+UGoMtKrf9F$+q0T#7WZcyPy@aZ@BjZJMO0l8B%mb5l!hg+cGUCJMLF#QmR z?))3l42SWPze5>MjE-;ZFP!HoPa0-(2JsT0G5XCVdMI1O$Wd%006J;z{JoC=n@1lS z&^dJ+_m!_3_&u`K4|Hse|DajOMsY@Djb`<9rvDc$61i{<~B< zMPJ(_9Y8X^zvA%>B6ymn8dYp}3%KI(qv`Nq1M2>9iZZ_N`Sl}IJ`$^cMc~I0;uhta z?(5T7*i#;*!0@-h{)0BDus1&=145Cmhtu8aL4y|k`$T?v>X(6>a3Ge140PU0*q$rh zr*ZFTY;x40W0+q*qO?br{#!^F@h0xaAB7a^(86K9|3JU?*7K1PDc~yP7fF`-JT{H~ zf=~l1tHk5y%0y2Hsik|}Grofk`33QdUO+(c{4~uY33H+54uzbYL zAu9vk=_oP@F;~VS#>?PvOYq7>xKG_6bXWdxZ}}3XH@`aAw^XpY&y@nb+{tg@yb*N% zIFksARV*ln6SAW42@RQuILZ`ahM8E14r_nOx&aG^u}OKn_PP{o?AZTE%s)t6t4+JKZ{L6!_jrgl`KVu`FQbxurPLDtcQGz9i2pyd__M z;0}fn4}S6TxGA%QDYHLw$|RjE$<%=0l5>_hASOsk3hH{HU^ghO{9k98qAb9-lt@zk zV@^{Ttqi22PWtr$g|t?BSXbX1n9^w zx&wna(=%aN;X7_d+VHRf1$lTyba*U-9bXAQz7oEALsi$oGE0g_pbuWcOH?fPLh^-R zyH88a5CyG=L;+Ei4=+#`MfOLW0g=$zgc6a_HzIe~gS{nTn zpLQCpAmLr~;Sz1}J|iYd(8buOuB*=kV{y0*%hSH;&4St2yXJA=^0Zc%ENJo6sJXT#xeYWp_enA59HEkb!Cqp7){+OOG`mb zn&+W;f|`4_Sb9l`p55a7C5%6`g5UW+pY4!$q$D}=p8FV+7xufInd!ME#_h}yi)AFp zza_&)%39#m4_qoBHI*&6sRfME^2r~^C9~4TSf(=vR1Ug+cf^-Niq0}?DGN)nS0APD z#8p#b3iDu*k*9vnjaoU5X@AM(pkS3<8pcvnpqQ33bKVnJs=Ljpw(Tl*PF8^6q5W@F z{*5j1d;uue7g*6<+F4&B%^KD+2af6f|AG&*(o%)(D+RX52h*p5)&Rb^TjA{lK+lt4 zQu%I`%B0GG>hEYAA~^3mWa7kR{Xj5nSn>&OKi+K--6;&~4_1Q7C!kCu7=nBxA_ns$ z*t6%6df7UWRk)aKilIgL8RkNgQP48>WQ$Ee|T{wpdDI@sR*9_eEtzr zoSDgT-}hods3&y`Uo=U%miFuKzd*0d7w?mty<4UaTkZZY;D^*sRrWRG@Y`p2$hZ>t z|7RE|=)FN+wM}r$Umzj<_Svyq<#P(a>Gp4*;e`V3ll^|5-RHflgku;6V*dQ?FQ(wE zz|E&=zkP;!0OM%^pHuR0pL<*(%jUWJa<)=tr3{zln7sFQF;mP|*b?}esqh&-%K_CP z%jJt*wwNv6^VuTLYZ)e+=Q;mx2%FCryub6AQkE%{!Ow+)2b%Ffee{Ln`AUW3D7-fkBLItvM0nGO zL%AUdc!YLAb{4t}YcE*d2iMpLf7~&R6NTr|2ITWYEWu|nRS!*HjfE97{ZZg6gJL6i zZ}SPv;2v3-z?aF>A230kvS6*SrpT&~6HoD1ENV{jsMzLUpBYHmFc~O|%DZyqJC%tmOJO(JSBY@Ocp26mU}mfigfd-1 zTLg7zuN^E%aUV!65_3y83Rx6{$u{hoXO8xRm>#qfiAwsP^`z7q@B>l=>bMc7~+ z4Ih6DNbGh0!STj)O?dPw(g#8U*u*d&D4e5Cxg#&uBj!o^Nh2e<`@D8x5 z+q0G8TS}l`%U-i!Ld^%VFK+!@OyGWh6l+U1o5jch0YrYTIYe`Q2l9?|=WIOx1scB#%yM0? z3vU+bTN$fh8~^F0TbmCg{ZG7?a#QCA3~touyQ9t-HH~wrF28Y{TPhf4l(@`bD8B)B z&kCjqWQ5~ZLCO=rZ@e$EH_cBs;Kh7TZ+Md{t`Hwsxv64pumjqIFZ^!c6?GH$JnhWy z<}Pqu-4lRA0cSpNFw*Vrg3tdA6GMJM1vuT&B!*MwI35BlUwh%J*VV#=nl#ORDr&@ryJIKq1XJ!r6(u&n%U zt~A^`R$N#D=GfAGs#3U56)HeY=kG{r>$wkD`84J0=JwohLvKQ zjE`flL8bAdGxmBa3p%vm>oZ9P7XnB$Hs4T?WN>GFJag?0Hz1@Deh@d)o~pw%GZ=Eq zpo1uWY=wNsSJnnfK^5Grdpq$S;=yo}3Ae<&LH84P8T)K+655RbQg@E-hx#S{nNo^4 zh%R85?~@mr%9*19+j-yedR}{2m7PdG5hi^#c@xG(YE2)VZ;FU=rogz$MO@&~$PXd+ zu8QcbYbiSg2p8ulb2}9wZRG37?Gr4i75lPb6j}EC3ex41nA(HqR+uV+NzqdX@~=5E z`kPDQf2I5zFdBe|c{!T$ZxMJ!*Qh)xQdfFbWC+;VW?}{wm^(n@WJmq$wbhyr5 z-ACfJ5ho4}U$F6`7Xw@d3gH=8Au4q)J$`wpt{d<#e0q<(+~7ZFdxt7)f&{k|YHW+> zV|VBE$UvuT3Sc~!1zs8ZjIQi2yX#lYxI3r(`DV4Vp5?ay`qk|TGjNhKK&W-at$G&g zSAy+}{ICn}C;UT>*S8WM31WB zA2h%{d>wEZU?blmZv&x;{oWr2^N!NHb*7pBBEezg$UR!TUtl>LL8QK;OIgV;ex@sYq4T&^jpIM~fg=|^>8%c9XV*lRj}3G47e&|aR$q-Q@TiF(ek(c*u>7}sF1 zbAn`>cO#&i-T zuLUZ(^B#@ov$$*m69|8XF3@e#v30r$Rl0vxxZrh^NO6^LlpGrkk7MIg=i#jkIHm+d zUqOeDVtGc%;Ef6Y0r%xK@uv+|DwKF~yliJym3L^)>cAG%`00K-z`iEl)e4EN% z%fDQLhyvdRSMMCB82B>OP4du%Gnpa6F&c!*MXEaDKmYOEK2&=6RIAm#QmTN3gS?<* zEm)Z)L~;d927+r3RfNl%P!*qNLh-%Q3O+4a{ z3s}PNOM`hqZF|*Ooqtck7dp=B801M_T<_&O!1Mf9cVPH9QUhM}r2d3Mj;lkK7^R?4)26q`wxB++<6L5tM&axQ|mV zX!V+Kb))|lG0R@`JIZt}G+O*q%+iD;9RD+HkPufS4kuzICRz~)xpwI1Xf^GhNPZux zk(Qv+HkSUpRSm8WA(}fT7@pGT8Y4oucdk9(d~RpwgGV)J5iEK};SB_j4>Qjn-F@VB z%4;8y7b*?-mTJ9#)`}x2|m50laRzP1VdC8`gyCEa5fonnNU@YITtZc zF#YLk>|@o0(R~YfzGGjZp*<5te8U9k(l3{KHpE`P@D3KZ{DOv&lV8>tlOqa|5>eo6 zL2-{)k@9@V4-#O9a4}|oIls|ym->%H;|#tlN%Z@L#RbS-k|Ie`6eSQQR6pBV?qQ6; zqZEFXljNQDD>A3Z-fQAf46iuuGfcKsI7S9f>NmgtIkd-j{a*@dhH6O1M+{)W0vE9< z*x*iq7B|e7uBAmC1DFma*9L+vST;kGjXiuKH1f$u%M?>L>!Vf|9I6C1I`ZpAm-c{P zIbnS~Surncd3gLdy$MGW#7JWgnrXwQ`Tif#31As#Y6ve+vfi&*auMkJP<{etJbo_3 ze|#M9JZ=nVIA8+`j%R8GtpOnebyL-}l-IFmatla`w7cjQm-aD(5HhpSnGKy$(!m2? z$nMrek6|EIu7t_czw|RYYR@@E$tMu8_j6C3#| z=%`Eh{wB$>^%G(|{8H@UIT5}<7xv7L^ZW?~>TOO{u$^GnK$IoAbM zv(b!U7()1A6{LcD(6_?Gg(zcFdubXx)v*_TRNOD2AAZ0l^d9ON(Rl>O^W697>#4*i zyu)vLkTH@meXKWXv42eM07gK$zug@!`74=}jUhmvc<(V^5HF={g@%t3-hU?EUvCt9 zhX!nf+^DhYY95nbmPeep(R2?;NcY}ve1xnpGx~&iKa_ky2LQ9OB`hh4CtlFs`KbW- zU+B$d%xk|kAQI)*KuS>PgUXFQmS%yX@`FSXy3whiHbkNKJ!4}?(yetr3AszOSB*lmB&4gI)z2{IO z_!1;AWY9vLlnUFo(m=WsdaaDeNJ%j!*cnB_4_PMZ!v!%l@{-p6E)xR?!`YumoM-YZ z42bBPzkL23k8D~rhO11iy>{LSlIicB(hQP?K`;a-UU<@LJ(&JzmH&fpHHLBct8}T_ z@1;lo5oa7&ySAe)j+v`u=52jORGhsMRADI&(a1!yq!9!p|%0%ZME-xlP5{Yy3 zL#!1pB!N+TdzH;!zNhl(%h``>o{&>RG+#ebRvE{0-~?0j6$&i{L%OQaH3~lc9yyM& z_C8W_S|n65n&2EE28I;9g%hv*3|{5(2o`C?_{?U&N;1m9%vg#I3m^UQgVH%Ej2BlQ z8#7hf!>90dOV3`Os(J5MzQT%7$U{-yr}yVKE=R5yEry;bT_J$#ujgZ?$f{R?5?Zz` zR|zuHP*>#kgvwm>(8MNSl5)6m!6)VV*&q1&oKT)(!xhG3AA7iA^`8z&?6JI!CK$vV zeIMpWRFFUy(f1INX5QgYt)XuKz3ei`$|Ze!wJm5s6+Z@cO2{nFpCyp$q7fTORA^N3 z{^#UK5^V=ewv4K;U{So%0g&wfQ$)@F`1HRwRw*unz+0=EiItiS$cCTVAbvr13;kT; z`6-X|esCv~rTLJ}TZEFjpE$HYy0#{W{RzVzhD_AoQWMG zf|kXgT#sZ+gk{JCl%hv8g>z-7?$Rf8Y`;ctpiMp!k$&h04Q^DKogr z)R(zMoLQF{q7GWJ`{s%&QUvXa3sD(jeN+WLTly2#u|l%mhTJRUMsY8+1hhAnO=M-e z8a-p0V--r$T4L-<7oKw?U7V8u`HEu?;Co?`_Y&5ulJD`f^|tQx!g0 z@hJ{h6+XBKgv`$m?&l@#=Z{!7Coyz8n(b4jyeC*j$_W=qg@Z%niw@JjhZ+29ViE1L zbcatGBf3JcOC;dK7D9JWI5q`l>YuGJ(7}ldN(pwLe&EGfoVzPN9Ng>9yFGAjy|W|E zk7A+Ni-WGeL^4NgYhop{^MDN#GhUB&&~cs}?)1&{sS7NyZ?d|r%RQ!X;12L1?rtE4 z`62D@vegMatdyNNAE<;oaoO60J3;lLih`|R?WKVUhK1~4N+tXt8U#SJhFzq|3Q1nX zYTmdpU>kblh;J52(!4mg3nUpfn!9>E1b+`!6|wpj(N~O;Kg^c6F7S1p81?MRE)g9q z@Z5T(c%OoQScbietv`&t38?7dQ;Mm}Uw3g6iIU^>6qNsYTNb`xewO4)AWc{m;%9Y1 zT1&LN0*X8QU=M%0=1nn2Ox1u zv0YI}Wn~o>lgC;quMxa0rpYu)Ur7PJjY_RmE8|z|+K*QX%#Z%Qr?kjM0tpIF z#dPRP`91hA%U9z|F~~h1vY*)_An0!tDWovid8~c`(}NWUKAmC{cW7a_mb4P|L&m-| z^~eGI79B*^_T4s_t)S|jqZd6H-$S6_Z@*5sKY8DWtO?jUSg~h>{AO;XSLFFwY+PzH zmMdKm5?%@=tOc3=;mZ)Wzp`xME~XItZ8L8vOkXZ$LEj_=C>C+z{GHehHWw<+3y@`t zcky`f)tG~l9|xC>sX*^e<&O9f>$!h`e8}>JyJY1`KebxTR?@^7De!FS~S*Xr}$-^GmgPQCwTz4xNM|73laEoR}n^+lf7GE6qlbN=5D zHlHtef9Er$EK?|hp9=*KG~I5cz4X zTrV~%)I$Y(iWA_jZQ?|@3g7&w2nTR~mk`H70gk_i!d$!%mk|?+ad0$0L68ei>H~dT zd1<8@+W|$KgI@;)I<$j)AzvugKQ7Nf%*iD>NH`yt=@L@y4@!06qmxjogZ(Cv>-^JUFf&k@CFD=AR(v!G4oTdT??6 zS+X7+<-ek|$Naafhsb&h*Ae~!cDhS9L@6)S;AdLt&WQhxMmoQTIN|Oxjs%h&%aYg= zI+>*CV=Z(j>Ko6&BNu*#iSB|rfjoC1k)LazyJG!E+UG8v{w(v{1>Zl>f26(c*6mL;*WHl*^Q?8ZP5mbt>uwA2lLfvI;(vWp9WtGt zXsNpq0@+YU6#H%i`!2yRa0~q-MZa6OF~Z+%ZT{in-))TlZKnILA^thW*03yNpG^GY zc&^GdiCmRs*~9|bwd3y*$bcMH;O+}>1uFz*d%+(kjNQiZBd$^0Y?AkIS-*O*&eu!H zd${ogQXg1T8e8RR%@2rLH{=OKts6moT-3tQ4}$c^t^`SscswM(K?df& zCD0hc7XlNg0vjjXp$)YK>a$qrgkJHpXGnrn2kNS;X&`#z_6VU4LJmv zXvDH$uaxf`aw<4Bz~ePoaP&Hudjd?f9e$X%;?$}R*qfJW!r+Hl{LYp2xmVU!Wu*$+ z*&nBfB=Fc7hXL`KKy1;QXECf>{4HrG0saNlwZvn~?iFkEdfY1b#|#fh`SSdwZg>f* zLKW^JgqLH79A>b-Obci+*}zG_^x>b2mIRM#Xxy zDbh=y88{KJBDlBY8CBOY6;Zwm?ML@8o`|ycTD7mI=#%%GV=R}NLZ&EKMEnL4_=Wz= zFyWw32;6__fiw{Oo5w_Kq=%4y>=5F(YzzTXxLLd(w&<^4p1s5V?m1xL=9iM%;_~Hu zCEvKeu;cHv#UZnx+v1375Y85NTW*3aE|J>$ePMF}IU%Vn?xq;vt#D)A)24`%boGl( zONp`1!gIuU9(VrZ=Dyp^V$6NFk^P{#k6tG=#`1R??!Tn#H^2t|+x{2aS94`Rew@tt z+h`D_Ma;8y;SPwhQmDbt4A46x{w{|v$KGH5P#nH~4{;X8%Q$|-zKG5xDfX)uFrQC~ z`o??k$ZiL@A9dT_PDH#d@zUqVEQxFp-Z0m{0Lw^h zNxUra)gI_rUvy`6ncA<03<#ELBdjw`wp^tzVG;{rtHi{b2QT>IjDvwa{h6-k%VPbo z%uM zcYxZPx%TWInWz8ac@BRP(S3$E2IgR)7 z!)14aPfWl~R2Rpr;L55&p!fhc@OJZaU^7j9`4tvXD;4h5N$vS%&ve>LqYD1lAB|Vd z@e=%0gTGdX_39k{yWn$`mG{Z4KYC#vtCn4mN<;X;i#{B)pmqJQ-tYMNa11|ulA5bG zX>l{F+^9|)=$ zd;HT10xh5wnCb8SGE)oMsA|u#{qA}9+D(CSjf{+ph>VO3wT9MKnHD$eo`koEJ-sUD z2FG%1*&qtkwUi$mNShi@uPUq}8oepmT8zm0Vbj1@{ocx^EiKo-u2&4!>M~7Z(P~|9 zy-P(|ssdS9t7T=aA9C7x453w)$7!K+kax1cWf%34!3kNpycDoXb|&x(Y+7&Zm&@I7 z)0`TT&@;_3j%j0o$4Zk^6RRjU<&YZ}s(l-)n~DIc)z?C{QfIMj1DlPiLo9d8j_}Kl zlI3ZG&t@^LE*5zU>#r;Uv$#!d+{YLLt7En{To$qJuzbb3OC!HI4|kJxm#o@>>^kZn|j4nJ5Jy-TN6!rL;j;&Ix-SDkz| zuPqkG>Q2O0htW}yq|va{T;qCSNQ&(e)+8nuyoEJd9YGs!x}`(2H5-_{;P zu#3wC&+f1C%9xov)+p0;^Mut$HwCLMwW^g@rkiT}OfmKRyvP)-inX%FvVhHUpwxD9 z%r={Y1~HwDZn;YDe9WpNo`ANd=X9krBd=eD+P#g%oC ztvX#BVpy3xV%T<0oR*t~Mzss;vVCAVsZz_DUCgG-1Fg894G-+C-QutIXt~80hF!K# z7}lzbH^IUtQm!Zz$E867>&(c>+1%I^n1e>MSLJTR{(5L{hm+HluhpsY?j$IbWegWr zvam0W7x;uwEo)wtu0!cy!(~GBri(JE9ecao?w4PlGVY56(Azie7ULxQb~qYp@U3v) zq8x;kuBShjfe<)k08OLF_hvAm+a7io#~hA#R2eW09CDQ`EZ=Q{28cW?U6EmxGvqvL zws);8<_IJ9g1juI^Vz0Q;ICz}AeH*etXkHn>ZaJLlp0t?z%ZRMs$|J|2{@ zMVl`&<4tXO)=C!0w}%JqhL{wwIU1cQUfY-bIqo(i=srEFt7TbjoaKSoIBagi$<;1RRJ*Hk zlUuh!=I}myQmcg>S;_XUO#X;d{C_PBvv_5_j-t=r^9$S8tF*PD%qe$hbs^<4$bDJ!%MsUsg=7nC-$az zT<&b1T=3+ixnd}iKb`TzsMezNL6_g?i<+7xG^W9=7GCEUgb>&vQrSe5dvziv_Q zge%w{|Jiy0oJw3BOzLy^RMP;OV*~=YtpstoUfgm z;4=_vm9bdw-wySD^;jQtPIbL`s@DeRdTp#{DJ_@Hf~7yImNB7O!GsR@48Uhx#e_Nd zFf~j7DvfmjA0>-fRlpbO`E`jE;8?&`oSZDDrGi?d3YR{yz#FX+y_~Q|t!qwu{YnSJ zE(KlYOBiL2n}WvI#R`ix*y5txJk+X$iC^@!)ix_VtJ__Zo$1ORb{d_@P;1{P0W+oR^LH0jPLp^Vkj-Je?$8CG6^P8=`$hAs* zXJ6%%X^mMeu?<=2a&58Cwj2Fpj~?ze{P3_TOu6=G#;zI*@Y%{+d9TuKFrJxu?u(ir z)24Q=Ty&-lhPSGKhpeSlaYnuoOrhAY^+6kCb}lucbEOWwE35Rbx<=io+eq9nW3ePm za>M3S-7xc9eZ0sI5uP@M;bD93-nIo!0XVa`A_w%5IwqFP!O_@i$MR?{mHD+?HW{Uy z71YY;a0Z?001<}KADC6MYMW=qu8o_p>st*Qm$KsnD5_M=?V)C!ZuKi&tzVfYW^4t_ zJZYG{1tJx!h)W-Q=mB=oI@tAmz^>Ifb^|)!t=hzL;FGT^SYcp+&kZXMFsxWpuo87F zPOzey>f7W?6W?4EO5jp~-O&73Ayd$*csG^Y5vp-p%C zq$n@0*^9_(;~682a#ONvv}f1Gl3osqBS7-?0oyPpi`_N1xpjNBGL;{QU@{xJRll?f z4WJxSxIL`b=gWMvo1={8ip6)sVS909@p1zU`PdZ8$EK}OqpfIDhyJZS>o%4^3hlRt z++wnR?@&DItr(SlqomuIK8J3tQH_!o-Q*(tJH5}+8mbovesFiirvkg8Cjic*6xrK z>2j2_{4vYb6d7)Oj{Ho}1c{S(y+(C%T}bn*toP=EIo}q_w^D~&ZS3nn<2QTbwBwKM zv7G~Ik)`HIHQQZJXI+upA6HwGts7@W?=|b>dA?9j09~{8{6yqLlV@);HQ%|eYV1iT zFOz(expWIBqf|cB+4YIPm{O@la@G1&*`D?|jm?_Xm1VY!QDxCJ7(mpG>}GNqb_;gS zwm0+gV2X45(W0ml^X|G)->t_*bunx2ZUt*LFYY!S{xHoQPR2anC>9Gs?W!%vO-H-c z8oNtVImwk~zp)V5TwjsbG=`JQ@z_?HY%|ANynz?Y&GcBQb}b&0PKQx-LyYp{vDvCM zg`#B(C6*bICF9K5)y?u;>uj!_OQmJ)$^8CEk-J)_xj0*`<6&N+y9ergJYUa8-EPh_ zRv?5{y7e0y9R=VoP$+)P`G7Sc}SHmXq zs;DZfqBg%-!svqS#6__yE<4n5)!|5b(^Hv_Rm_f6@O(1q%6xdOU$(n#Hh(sOsw1eA z{vo#>x4Ozo$$@ri#Q$BNx6X!GK4a&yHa=H!S*2lM*1*QB@dZ09b5>`Q!!$OJX}bbu z?Tf-qDG4{Tf?1cECFJX43w&;+I%bu#V+*Kb;3H_@(aM7Fo47R4gwKmecfyIurqjUH zA=uka+f$VpHt-q!Yv5Wo_q%f;}e>%gOfKnNXcWc`B?{WmytuWTQGC z-};qnuZc11?PPjub8A-A&x30*S67dCVNxPRy>#LyD_J+rM1yOuum(_uU)louO()YQgiZCk$NFSFB>SWm7kb)XYu))vH3nKpW( zog&nmi?Q9>8EsKn>_~c|PxqaTNf{?nBv)p;EDjImh&^Q4+O3|?U)Jn;fK_U2v1#Xp z+kTgu>`2f*xoI!@>z2sZt&23%vC9$DINCb2$)kK+&BT2LsAMY8=G($Z>{kXi^13aU zfQ@nsO}^>X0>?><#r~*@lvWzg^Ob73R;TtAHb2ZMv#E5})|D!lp6s}J-L9wed|fW{ z+*mORHLcz1Tqw3z;p)Oko8_@$)lm3xk>=%bGjGyh=fRCfnpr%Rn_$n`0Sc#X76<$N zr90_Sg)@1Y&atslJY$?$!~tWN$yR&b$w?=vPif1exH&CP6S@cQ4czw4<83dKcurtf z>KPZVbZb?*&7~b!7#B$!%A3+vTHFS@I3-V7YsKc~1uDCp9r~+H4ku~J*e(t|@v`l8 zPv)_Fny;kcxIk=L*67;r9UFLmkvHb+j<%J~%atlEF5Ld23(MJ|-jaJli=ygnuG?t0 z=^Ri@Dc#tdsBUZATMnCJd9$6(M`LwF_B*%XRO+AP)oPzVROY7vU6}Rf{pD&=*=8rI zWOFh$u20zUwoexZol2dr^Ib~Mt{MZ3wF+3h)@X0Xno-Hqa&}qA$LIXIR_Cuv@T5Psv?7YboOn-`Q;_y;H~v<18z0 zYqTDyvU$8tb!{kQ`SERYJV|w~SDdYOv&O73X$ZG6Ry|RJR^cj)D*QmiCv0bWD`BiW z&vvHOQFg=>xtuUGD)nrYE)ZfD)ao&Kj@*%D>0~i$DG$0SVzseAUrO1^>@YL`GK2An z)(xH!mA_WQ$+w~!4zb#-Y-BXr6v0O>b6cgwZPz`1t576?Pk=PsZ#M0dldcduy3>_< zS5@veRJAYW>XRc!&K6~U+cvn3yaykN-xMT`U2|uqICVd>ncU0Hq#nPLd#0gP+lHn! zR&u4WKlS&_DsRX@?paKsp5r>xB3I;~g{aK0r3$Z{YC`9d-F17IP|P-VY9ES8a^Ib` z_M25_U*h|sdhQ>(&^}>Ohwc^1;PIi9og8}&Xm*+%PyL0|n=PfXypm4zM&6#ca=Adu zr!ym$O=uh9lx+cYRS}eOc8?_cxeu*P#}iG1Dl7R^k-_JzoM{tUpj06B!KVPE|5?-e z1zqc3b&am*U|itShSn)4?`?h1fL1Dy*}oYBI%f=Kd7~;9z!VpaDqk`OV%cP5Xu+zQ zRkLORr2!xUS+i_to73ln&34EOE3_``x^>YN&$88ZEnCp4HN3IK5#W=f+;A`kx)`!< zL1gCYYiQwG<~eAHW0rYCSmx^*w05oYbpd=1n}UHXUfY6U(Fm|%5qzp_ad_hakkA4q zltvwZ_9nE1N#*PTTEL*yORw@pX!Qa*4QAEGP0#Xm1p|TBuR`70%+vvePKSCOSIfc| z?S`!n0da|g8w7s~Csv} z)kWNBthHYGyj~sV=G{GL9~y0tz4K@vPJH4 z(bZ8ukHrp-Ev6vF3MymtV=ijEb%KwIjNL@sdSyI*J?m!Qw>Zz zWyu_!#dDm#R2gbWHAbTvQK8tWiW9wV7O(7j^03$};I+e!BpT##MpA^vYI+mDHCHR8 zh#z+S7Tu)e-Sn)8?bc4Go2UFi8;q1)Q^>F9`DPZ+b1k++_3`6TY%KeS!_uto>eOPVJdjVX1wV{qnd~~>28~nf)JHw8~^t<&XF(F!Zt59A~`ZMBi?h5%0 zVdADnQW|^PHLts71-ldmjZc%krAE=|YVFypW!Z2mHw#vP^rnnw-r^qk#1}R=wnbGJIr--1W#F z^9o+b+VdNw*L0(;j7u7`YTMNkY0j{AYqAphRm^Tx#-&zOxOMT(k&`*{uUamKEgJ0J zu>Qw*8EnvLGxQ`VOo`Jf;RExsx5;&Z7HFGm^+pRD>K!?0e$z`@Sq*p>u&d4HpvAol zN(FJYo(^F~Gk^CkAVsi~+_u|Y$~a6&azRK`W2KU9R;ecJWrDyS|8>-MNZB= zTWztJZ|{qMv6NciTLRz9{;?$WrBZ$*m0KgFoS&U4%b8k%za_sOsDtV{^(B-R{CH^~ zAGPPU?>+nZ;Cm#4e&jN05B3lH^5BAHU|k3YOoMqVt-6G;!Dj^DxgxhJE)z_*mSQgavU_x!cGB6FogzAC5y|U;7^FiOJ9XJNq55yA~ z3+&5-0oH--K-j>u1nWU~K|b`(sgOl#sKW_gI_oOQV43TR+2TbZmh;|T(5XI?J&bRFE7TooTlEIh+yoc#1&5dl&gEtcunWoJjpnp#6ZW-IH6SBx_K|l9ahOBz z5~6fbcir~1Q|nGhVgeL>a!D3=pwCYlwXJ-d)W(f&VR|f256A9hv5=;_t+ZSLrF?kU zNb6;LILVj9E>Ll&`Om9fC@nop#y#|>Z9d_eesZUZXLL49VW092m6ZP2b zmB>6L6Ec0<19g{bbJ9j`-1Nb$QJao*8SEzH*4`+QCom5p-jqi-uGGACwuKGU!{(#g zXdvVBHJ2;NU1G#x{G_hht;Tv^W~+SyqresgY==7+eA6Os4V&GNq)dPfz(58Y9;sBA z%DAG>aB52oc3ZKvn3Vq_OIY+(>wke6jF27bxa^v3d|Xq8=V28YzSl%|wT660ha74^ z+9WQY>`hPt6n6kchsk6>lIJ$sz)HF4a-W+N>ISn~njB6vS$VnV+RJ0N!=1SHZa2+I z!$pfHntK*DRYnxoJPbAkd_z;sF4%3^O1{^`q;X@rKiPvUk+>yB=>lV&4>TwJCHr zlkEfto6K>UFq`vn?>sr<6Wm(mwm5aHWy!xxEwDtH|7%Z3AkljEgD$sS^!F8gAPtTK zSt|`>9j8vU+EC**%Tv_IRR;^)~6uR}E#Tk9uB*eq1d^|ByF~^Hd zqei#$=6R}B&-3e$-(RTgu{3U6i@ZVa z9$1k}P5(P97@daWwuqQQ_F(_t&;R}WK_AFQ$|YkuK(w{+6(zEttz&$4GU+yPn>^q2 zqp;Y@i(%(hkhOU>yUYV7R5lv4GHflHwm=??1Ae_)yIi5#If{kqgd%!3xKi*)WAinRqx`xAvL({@j`zi_3C%!Yqo5( ziOSB7DPIM^lelUNF2tthDPMz4eYvuGyEZu%#LbG>(}m5Z!*)2)*g;=7l{;{vWf8)z zUoBLXjeZ@A4b9FK50$K7Rd5=o8oMjr%}b=zLyB8vPh6V4^GMtj2K&;C?2Fxr)Sb(% z^GZ8Ud&hmdr;YF`ag)pDVyzRzY)M^bi_>hWSNhkpc9vUm-`o^)&D`*?C=Lg7-l**B z2Wy+36mzS#n6C>=zJJ5*YrnPMv}cPAQ1*`YiJGs6a_b~A>ugiZY2C)EC2^}dhL;Vd za5Jm?*qCd(9L0C|@lhIYZf0|8SIuUtJY89g-6$4DIj(xC@k+TYl$xDZUJ@&kOtoD6GbX@8ZXrn0oA{-1DX$*$k;EKxXNQZ~@Vuk&7i(P&FEr8T?e z3iJ7mA6*;bgl#Uxb)j-z-U@U4x-nKVN!g~lEmGBGDK}t=YW>tXvN_#4S+`B?(8RD> zRk;Y+;`pl6ENnZfS=r_AI>rj}wr9%S{G_p(b!&xUp>r^0(U1hYoIQ_ESY4{k8%DL# z8)Mkz$Xzg7U#}XsgRyEI?Rn$KtXh2iB#n<)c1M@ymm795uqL)Y4l!&;twpforL#lk zx;k`ibt+yf?dH6!jWJnj>0{w~Dl6FVG&*2~LN>Rf7VCBQhIOj@1~$N$R=>rJn_Eij z;LUQUSRRdyLa%bd>i*x2>X*br)KreM{JRaWlkc86b$r}m;E@O9ofV}^a@4pM(ADb>Te&J3v|)l-Xh41-lCD;ijI7B~!X^?Y7l47d4q$)9Z4sDiNkQte8B_ z$rFB#0WvCD0+t_T+Zd*g%Yu#ZgQAL+djnCZ-IfTv%Z|jFS-K4%%GWFryXC55emfjb`xhST z?{hd`Gt`UDHb$izaontN?O1Q*XP4e$a{$ldad&Ajj5!yKTag6{cVSew$5^#2&hRxi zsunQLD0BwpR%Igz#HvJzz0H~u32{|4s`RZxT(V2dsMUwr4pyVHfC%||AFI=b(L9w0 zlf!0Ro0-;fP@AgwQNGZXa-m))wR66ubky8gld49E;5bd}>Lp5}ikh%uTU_?kwwE*9 zCbl`IKdxQ1?HK>dl;*2y8Yc7S>dlnHa|x|{gZFE2qU*VBmx}{yp*0u8pWG%* znUL?Q#LQ9~M5)Jj&!f(c7#J12OHB!4!b>Ytn-q@ZQ~}RAv0%HWa;rBZx@C2u_m;=w zqO-59a%x%G)2)tmAa=ZfQRnQWRGIb&>e$6BGE0w4yV5@XG6&RX@1DMxBlb&;*juvYJSY)pIW@>$OIPfM1s zEvVsOI$%ucRuX52IZo{>UDejPGQkgN?o?D3t=v+&;H14JRAb%9Ep)mhNky68a(G_c znYJa=0V8kX1>2JQyG`4enOsdbn?z}TZEJ;bt5k1dmPXeP(`}wuaz}-_?QFBro+(>$ z#Movsm%_NuT^1rI;vK9c4b(bi<(lMRsn^f?sI#{JBD2h)Rm0FUDR~Uha3D z|Cer_AV7L5ZSWW4BgeCVBI_A?#sZ5*nzI*3#w+*8j8H} ze9!lzas;vi^;4-xSFb6sq<9U+Zuk@^^*&Ue9=G|ppc{U|2`d-I zkXY5=P~a4HFG^gx5S$23)K3z91p$>W3e`efr^t zpHjc1(t@d=2smi~!4IjFMQf>_o_~M{)g_VTL6Og2U(in{RRmLd83|6h_wet3r~GzA zgO@>DDFIR-Y)%AabI&OWd>MODf01})XY43w?hU zzovfq<(HJxrp6nlrliDAsc+uzk9qI_hLTFb!T2yZK?YUrIR)p^8CeQ-0iQvWDFx^h zUV19!q^7tRM&+)bP~tcA*X;%ckT{#XcAdE``(0#UaTkP_CcXj96iTVTr_w*YbViFQ zc&y}{N2)tq%*jB)jBJdCO^}e!<#L%!#%%;}g}_im&I8khg?riY1}X6{Xg6`~aGsyqy;ReD6vhL-aBp7iCK#3~B*;APVpvfn=dY(YP zLt5saU>}jH5V9BgbOK^2?co6Zd2uWGa{@+^;w7Dbr*g3T55e!yA`-aZBmuS##bRKJ z9O$1@Crv%^nj!LfaKgfq6~th?yobkoP6(S$M<@vt^4t6tfQ~-Umjv$UfWk;Bd*p#m zq(KhjJ}ssL9WXgsHz<`81(D~RR)Z;^#eca}9jFygMJ)$W12oa#*tC?)>pDHTV0;|?6>PIb zV{bC>H3b;Uayblj^%3mU#iNL|G#;=g#gMKaaUFE}abog1iYWItdw=~1!1?Hw|LB7C z5rXy61?waI5e)px2Ow!Rz*Rx7zcCW69KU?{m4ZRwL`6`4#^_(ae(+G|llo8TCkQpb zh>NET454edtO?Q%_RlZa7YqZ*y5Y>=KL9$MfOju|G!2zirPOQc32@si+-!V`Gnb)i z0Lhzv0_v6m`Lf^JbE*hrY682x%LyQ$09%hv@~6m1!dx~;anC6yj2$3rFffe{Qy{Ma z+UG4W)@Q`8o>L+qe_jD17yRP|^e6wEf;{RuWu6)|40pyJL2LG&SHg?LpQM+!66ai<-iB8Uw~1N4*sHe zS2UPa?4RlMKVA`?|Km0D4@fQG`HP+X@{;*SiG_LezqyR^1xAO;e8FhW0`vq#;7?#5 z4j!Mo>aAaZ+_4FhI@|p#OV&D0JAJqFw+W zRnqQMLdt-A!Y}+S#lo0csq}9=WLzQiYY;Lg{VpVeY!0oAPXXdZs^t@^0mvO`BtTF+ zeZ7}K%-_>0c?J9cwZdv8uXu`OKyV>ybxH%p@>3v3`}{$L+ObmvGD4T&!s)>(LA?m@ zM`t0pUyuj^{U?aUN30mqaFEcVl0Kb=s|mmr6epj9H2}Z=(IJ1pW?*55rN5@oHZ$kv zhEbxu=)B=lixcrQ{nQmcdX0XZi9iv0dVZr@N7f{b6lrXlJB3dVn3d0Y(vQ19g!@J| zT-}+BC&DzSA5VGx1g4Mo#x#K8H@zB9L2xrkQ-OT}TR&C#DZsp=GvX2mSjye>m%CmsiQX=4PQ>Qrt|5*pa6n0 z!8Q5qjcL836Yy(Dks)4wXQW_3fIz?kB=C?fn>=BarL8%Oh@YvX+D`u z60b^Fv%gmYCQAW_V?rdycxGsIq7AH)52#$caBmwKS-=cIEhH*fQJy~u0g-jVOx- zyD#ChU-qj{@J?wLSI;h+mQ4P4^oYv87@8=jGvC=Qs*+$^(CJfjT96GZV5UTBM zTkUQ+NmIX#l(wGLpf{KsGBo=*x!G7oOYkj)oEyVTtBRILvhVO_}h}%n3Ei z7|{2n`}PL=j=Us{#Th`{Wa^>O-Mmqzfs6wqH#uog--GLW!!X7&(99H2E}e-=pU`CZ zt27g0C4NKh4|k+qPw4Ps00Wzc)H>Z{42^eny+E`63gEaIJjMwU9jgQGFLDmC2I&nQ z_G4C_A`hN=rggm4;QBd8}Sf#`4pW)2b4_J2a9 zLh@84r+c)3Xl-XgqrUz*_cd4?9^j;Y4&=MK1K3uhV=zZu@pGS3`3%@)fBqUUOoz0O zd&}=AA%4M7rGPrZOD`xLE;vLweyIe;uF3xwQx2vyURD9;dJ9?3+tFeOgV?xN3m?OU zx^U`8y6_s`)B5jf**#QsuovtmROMHIxX`hm9Bw}bZooXmOCC}(zJVy*7A{FqjUdvX z^9HAo#T&LBY{pPRXR@(#Ocsb`1MT7=gGuY*Lp+V%B@u6=c2i{$b+tfo_?-?lqJVZo zct;7Lb3jncT}Rq^=N}PtaLL`CZMz7vO3Jf!?(f zZ1>qKAc&f7pl-twKrnbMuB^toabEd=nu5gjMt`WJ0*G)XG7=DXq3+z50sYbaMGoxI zaln7jiCZ%^ISHNcq4jJ)qQ9Sx27edAx_&?mcuUSb42O*bG^M0dSl{Lb*gAzN0EpR*UTNV3>Pa;Ur!Q4bd^#$1Ew1y~L^bqMszuNI#{X9+u7>d2h`aI6adJI3lcxrBXE_^4A#u$8zc zircOuhh6K`W7m{~w*0l{BIFK;GiZ)CXi@sTK1z?=lc3iaG(sZ$rs00FVd{n|JI`*H zUSo{OFcPnaw`~qQukN?I5ebb19s@q`OK?H4f%c->&UqoSq&_((>QA9|IG#~K8=)z+ zX%X(0l;Au9-4UHW^Q?0O1?~0F9z#R(vt#JEds)EDl&ck`yzGEll0p?j39$W80_-Z; z!W`(K378;Ywstz^yQDyIDP7YJgs}CuPucIyyO8+GvTv?-K!)TOH2?e1{2YKL^)UsJ zm|&`a!%D}FM4**W^Xx?~zM@0AqcLDxawY`z6+9DhC)c=6rL8O_BlQq z@DThZu)Q(RIPx)40L{6?;J^|m26X1@EEmdg>Tod;Fl*e=5T^ajdtk`PR?Gh;7!ksB2rC!sI&6L3 zNh(82r0Z|z8=;^M9ke~Mns{N*>w#twWFT_d$V7yRCZ_`# z-$DR~TpE?2&;Si47?|$EOn*p2M+QLwe?CAwe0bB6EGX#&Da>3AUZ1NoLxWyi!Ofj` z3n9)_L>F!F*PScdKvm^as5sog=5vL>u_Q{xoK)Xy22{^xLl!+)>KCWoUsHLoouz1F z|AOvsI1T?DI@D%T82keJ+emiAv<52xjHDoPK0guA<)n}PQs{4+c>4Mo_VqP58M3Iz zbjS#YZ2iwEkOBVCmxxq!vH`OO`2b+}_tiOp07HN+{R91V)1uY`9KF{p*cpuP5a|M? zy~ygV<5d7u_T!IEvh&hOl-%SYZE^&d$p*lQ5mHoKD|`amMqUvlx8r?}Hifpt9c`%E zi>bp%YS2G6MuCnoKdSFzjlHJIzqcv4J3GePTJcO@G=67W4npFMwR!dcML@d0sD8oz z-BtlxqkmVEJ6QE8k=cMi{(1 zW(Qm}ADlTyN+W$56?dJ>LEAx6@?CfXix-x0MU+$8^Im|DF}GRIYUNh)Xi2{+tivS! z}Pliv!9$mB(LQKKqQ+U$4^@=|{XacABrQ-`9Kr^CAe z*Vh{e(516ZJx~I!igCwcx54{V2L_OKwoUgzy`aG$>_j}Vz_Jb$gM$otBj58rL%_d! z2zGl%k1rnNUM26@g(Ux-pyc0y1?`voxr@1=gY5tMFUJ>0MlRAO_N|&ll)aPeTBL$DdADQI`O>DGi7bpn$!=O$izGe*vJsAO`iY^o!>} zo#bN?T#pE-h!a!t+Ht@Q(Qnvs10l|-;}`!F@t{IwoVA3U>D&ZJX;CO#OO-<)p@N^@ zFNb;v6}+F%q9G@ERD^dDaQ2>1Gf!dd24z4vg4^#$doq^iIUTREH$5*J~xl?^AJb(fem()wCYSgMzW^D>nwfZ)4T$em<(Q00@VK*L6a;Xrnh z$#@4*+22#u>HA*!*Qoq~qj{MuMsxf(VlyXazm3W1Z{0abg(l;t&mSC@m=9kg!;84~ ziLO-g58FbV1eSMri38zNkmj7s6eMu{Yjj&5x7opB?|MMNMdlO@c|f`DJ!q-}g5^Ph zm_+ey4PjKGhP*>4gqlxpaVZD&@#5d2wjPfWx`Z2LhCz;g=jorqT=#xeAhKZ55FMrw z^2Gfy#yLF_0xGx*o6Bo{4VY`*zo7FL$A&&i4p@oXXWw@;d~eEkAwgb=zmI=|zX_~5 z72JRO{KC8K=qh8u;$egYt!ZGndi4^xVOYX`@J9UsXg1K1MbpA(nNgnadFcgv|MZ<= z26=+qC*PGa018;t)w9Cxjlo3`sPw>DIW#piqFcvH332rB<-0cl^)9~oaD}}n5wQmO z?_CXv`)5WLbWr_>10MeEN{jT{{=jdsgvXAfj(atdocT`?_fsb|U@rV#ta<0XZjk`9 zOF+!MC&x4u)L@ga5q!2(6m+8boy%k}k%)ErcF5 z_v6QpXzYpJ>HjSuamQ^EXF?O3hB*BmT_sjJ?EdVL3wZdJxt}n?%%2{GWr)UO2sZSm zMLr0ebi{)o;2_nHgW&Hlq62DZs;-YTaVIJdMiwaH9-@u`BHe3gXqeH&het~h2mFvT zy(<(V1g9$QiAAziDJ(Ah_CCY(7m@p#PGT3X_>Y%Pbngsb1qxo-3Ukmfxq0xz`%2!K z%Y8+Fre4ui&ETfjZ}&Cy$r+!>!xQf`$A}88U0)NfKkd;~ zy~rNvzA1c8UG`c~cDUt}Sc{*PaP9X`y@rcy$p3V1u17C_gS|lf_BWDxu>5OC=z*cW zbD0WMF?}_2pzXbuhax-H(BkUx0Lo~2cPh!%rPV}xL4G&NmQxJIV zDKZ2FI^#bQQ=Z5~$7)RxG^&fR(6g83tdh|ECr_C}cQ7J12vAycG$f%#C!G#liqb(D z6JQ6HD&%r-x==29tYk6|uf~NBI-}}d08Fo^gzKs9x#34x>?zb%eCXfNOrZ4B1H%%e zt%axp2F^w>i%D{tKgWbbJTj&Pw z-1Q1Xt^j`v=x;G>J8^axiMQz=QnUX{alF=D&I82|0wRs2KmYR!_B9LS%in*(GLdte z&-t$jdMkt*wiTqSd$mBS*T?67e){@%Eb}=Rj0*r`KR`zn(UDD<${M`!5$wcxS`P4P z)I^}SAer7f^$w%rg*+I(FmU1_8oua%{{?(Lq|;x%eE9e0e}4Fy$!0!aVkQ>JATatc z;17llp(xy;2%_K%^Lx53BzGOA2h?(y5ZqZtId?q+^o8vJBl__4aIfU;h}+a}F!l^O zQu_d-=)rsV+y^MNf?0v_7D0b*){E;t5*|zOMO0YHKiN*yQSyyCKx2)HI;tgV#eO1y?6}Kcg_oLIPS`)Uo4WE zp#F!iRsT^6WzawYuLV1OeaFTBh-MHrRz1gR1-BSZsEJ4M0iuU(4t`?64A5zDB>U5M z+{kw=9R7|aq1{kkLOg=E8V^^F+|+(g5kYu)PXlokjDWlL@6h3oE-TM!oD=d=hsL6D<8E{B-%7Zq&N^Y95hdV9Z z<=Zn+K1qC23|>1%#h`=eTZMKn4D3@!x9Puz9G}1a5VV=xF%q?@c{wpNRDd%l8lmo% zBWSyLqjVtmWvn7&6mqxs64OsG^(o_`^Imw4kQ6WOq$gBp0Ldq*yGQlh>{O(_KY#b4 zkRl?p=tcsAU!f`T&X&K1(0+&MPGOK`hEG^`5kbj3hs3Wdks(KNv~9Gc(H4gZ9jKz% zuPBy6$R*eV&tcX|FjD2WI9-4Cf-!iFfBW=!EYNe?L0mnOy zM0kw$>7>RE^1l5LE#go@xUzd5@tXP!G;MEYo<5{l4aJO3sm^`P)YJ2QA%Fs@q5AUV zTmc0f4ko0%N5qprO6KM1>&rnEmGsk7<~a`WEBty#;R!`8j1Ar;Uy261UFZH0It$Ug zqMxE6Rf0S*%)z33F_;_YjbT2M%pU_~Tpsy$tw@PKRyKv2b}vjiLMY1TJn#$`@~9*W zlzNFsHO7^;!6J+!Ujn7PTgHKDgb~D@Xa)i9Wy;Jej2jAYk6{0ZlAhe7ntMqR>|6D4 zNt6^X3B@V$;&w{IN9S-XUKH-S14ZHEqoOBx!6eWsczjfpRb`p?3c3$osaWK#021AC zEkz*E9t-(6$;F8}Tp~u;PVf`QmX=7>et~E2e1Z#KvVb91GyjU;Rry!!))(Y6fqN=o zq1AnkKXbx*~D+d>DCr~taL1b>8(ta@iIs;g`U@{q^{e*%UgCiNQF zl{zhWhhm^GL`gcF>Tu4mYNtCl!0)ADLZl$NDe2sK0_@af)E*!9ThD|w4<9K(27(5? zLMbuTt2EqvI!0MX zvRXmMb?0b?hp&y-*ua@gcs$U~#rtIJm2scpy8#?48UNziV(+daPEB;&ijJ<+K!pn6 z!quUiW1c|zcR1s@jwOLel%akSI?04Wt08?m!T-oRfRx_;a7kbA#DYh6}^ozqOO~^Z!J4`xXp=Tz{wYv==#!R~#V% zrL3C(cX8+u`lL)jo}X|9)ayUkQ1#`xKy?;fyq=4O#Op9{ahS{d05}J!I`XUL0CQ=; zsC^M1VgDZ8eftykZgN?t>(>?J)vm*Kj8VIUd=FX|zKsImNqgzf!S=&WuL%%)A_k_W z69eo181qQ9@ZpuHAo6zczAf?)GW=c2zka?3#_{7N{F zj0T+a-%IgcPp&w-lV5=C(-!~8W$b>##S2P!pBDG%i;3{=gf5bO(qkKTq}#&H50oeH z8<`y)o$am~yQSQ%yI;pE=B9g(USn>u^Ki$We>cY;T!_q^;+a^;*5J`S;=-=o$b}|) z@#(V%P2l9~`$D^>Lh(J5y1KXh*@5Nd z><3P_YnJqhh2sU3TtYA{;Wko^5+IzAoH1&y&Hz6`kv|>A3 zFwYbivaO>of z9?v>Gh3uD6Gk#>LMaCG@8Qj-wg)k2kuJB+|uMyL0+!*e~umH`$*eEfgd26LSy4)Sr zpC59;w;D%Vna9C~{Dq=GgBDVjznAkS>#re;fww48Kz1QwGjPwsqjKyI(Y*Y~lXhaX zE5}jEhaAPCaw4q5*#j*3XH@lLs*w77%6Sc9CXs&zYr+VZcEoczfPffB54!`wT=@0| zv?2BCy=(7CnsL9C;H-NM#;MBjrul$j^h=556zC$3LHnBrdN%a|bI-=nD`h@B|DIhf zpN~6+B=|bJn;|~$nJPVJ<{w>WW^{dBK#!$dDcR@a9cR$*8!D}_d(q;(q232lNWRA> zkH(WUq6e4oehX917}@pwReeWjz^$ebO?&(fl&H<%I~YzFlmr^Q zdjaL|KMN0)1E2*Qo>NCx7XW|q=x^Z}o$`b>_};f3w$;8bs^7Qg+`U5r_u2w}Um-G2 z@)2^2eTS#e$uUp+RibbDLMsIpdWnqI@A}|(osak@9h_eC;8)y1$(NXrEgvEx+&ySS zXJ3jMr+J6TA&kbU*#-2oqhdM&Ii@6hd-H1Xw*;gYVn{#wBQFF{Sn$VxbjDu*zoO$u z1N3WrK7Nhzs5eIV9pigEqPMj1$PB+J86U{SZ?S-gzsH>5+hre|=mhPt=nKft2uQjg zKO?|U!nYj*R?Fz6M?WieIXGhT_n}WT`3G~O7XKCx&EMJsd%v5T{6=Zi#pC(`o4H%a zV}kkMHpWpi^WNJ7&|A#4Fhhhz;s^V89UfFqIHe9O+K69(zx{Fh4rRJmD&bcs-2n{b zI6tCW@Dx0dLjG}|Lm&dN`U1slpyRk#loM_mwUhbuE;Dw4jD&ChFmT`1il7;)(OwZG zFE1ZH#ZFigOjD25h3Md1_2{1GBOmtnzRr}OH36}wqqiS%58PWFu`eK^LZ>=u??^dN z^_@3PW!^RrxSEjDdMv^f`f`anz%QI>48>7bb>qRFgO$(~@?#)&y?)>BBO;51Hw&7C zBhkd)m*S{Hm*|~Wae(J^fVQ0@@{92tcse{ zIrSNJclY-8ylhbNOCaLD|Hc9*T>nexB|c8v&3lH6r4Ljq3@dkA`CYCnR zfs4?=f)H+0E^^v?eB|SN^fZ@<2t_@*+QTvAN{*D_Hc&Vr%#ahqYZwF2XBySXJO`{d zu=GpB;^-xZPhLU>3jc`Rokx%abZo!bNUmcr39t9y+gZ{s?L7fZ*q|ti+n9OlO_$E} z`IHiwy#NIz%&@;dLEiQb`RHA=knXSg^rT&U$px4|C;~rxQCpmgpa{b!(O0jJ0VA99 z7e>uO+m+{t)#ESc^9~r!YvSB3R1g+7JFuq;q!h!uDxcMdx!U(0AO%Px$PK)gT4y50 ziv-!^jm6pU0mbHn>vb3uQ$fK2i#>55?=|(od7U~ecE<#K>j)~B4yU8&xOW-%2)CXe zyYrq+N9%Pa)hkJuqQt#`98u!6DGcQpn(nVIABFGKd2##&esc>y<|C-WyPU)&GN<+9 z*Z6`5tn0p};|HuUV`I`L!fWTp$L*k~Nr`e8tRSdw{1K`_IKJNfy@%p5TQ6eou>nwZA5AV&k&pv6Kvw&Renf zQK{$PYekX1iF}Qoro3)y8W?>F4MKnVnq>R*0v5+yhtf{yjw#QHu#p!-O*^lze@-QA zQ6MPxR(a2>CPOLH5AMEuW}U zckJ(Nj-DgH#P5X$U0rO^*f%tu1MC895cF5CmzPLJ;$2^lqyy_AaE|3r9(m#AlaX>q zsHX(55L2YWYFG50=P)4#BMv}N{{w6%y;40C(nbb^L&xHlq@47CCG7l&*}IAHoZ4wT@9x4~<3A)g)!U;40$ezS z;NQYs_5{u^|MDHnThTTC05!zf2Oy;jnz`Q6N)Us986GD>ck9rAzjqKXv8!{YClrm(O3Yf29BM%KY2ifBYK;O8&PDdjB^AU+%(X zzI@GKnNRVSA4Z-%`nT2tVba4P%Rhfjcx8KNx8rsc-|vXXDdQM90)`tpzf$DX2W>@C z|4*ub1ZzGn3!O;Z=rUnYRi4v3K=YvGaL|E7?+Sn2LFEj5!6++8jQ{!+W^92n_t+q5 zG!38WkGHSc%qyH6i1ZzbGWJv9DU;a5;l5_SV3~h>;j#drOuY8PsH=hVH0j})nsh%?L(?iHi3`M|9vrR31F|LxGC;^0 zyz%pzN&|=hDP*7(;b;9sE6!_GfBEu(0~`>_#V;Rzg=?Qoqkdsr;txM#u;j1Mp5P^C z;-cxDIIwTVe)UdW66QG;tTs3ppY9R{gbZ=sXyB#0v{NuLpnFc{@vbwvOknZ%;u(jB zdp`~joghWoO2C3}AEyJOTj;H;g~;BSMLf?*_)RfoubdicK4CKuysmk7zYcEpzIUe~ z>Qk_`uc6lO){=-zw?7c|1;zFWLaCc*$N1_ne*<1Bx%a}$&KvuXT!6oyL$|@*93;FD z=MRie6Hk!Qd+mb9z_m`=&3nXQbfB5T``(UhaY{!QE(;w;pQxwTQAmBc#Dhjp5~#Y^zzp-+z@cccUNSxrSen>?IVe@Dk_zwK##AGk>?(YwYSb8Z=Q zK~}qlizOEM4c$l&1}x?m^M*gaGSJ9r`4lby&6REm0p6V3)5>o!J$4h$eCHWkpxM0yu zL-NiBg?faw?l6L<5d zI>OWgYZdhtL11vNi~_sHO2RQC*U5VZjHGVxzlHPDaZ>}dvtr^qhFF-G^a_mtg2LzO z=p{H$0M$?7p*#VkyGigmC)jysLXi~qytvyN2_xKx4F;UCPbg#u3sKE-Qahow?7U9y zHTr71bgUYBb6og(jwv&X=^)evO8i5R9cc8V@s`Nj2wxEp;>hv}hsJ2c@#U2ZVNBF# z&K4k4)ZG?1bDDoj3ekzo1lX6C6DN2p&!O`dXyOX5DmQ}zj1I+-gPQ?24S@+!aDgar z6P-c6Y1ocZ9a!)I`1y+{B!Xa|ceDpC^hPVa%$--KCm)0Sk2Xc8)wk`csHZ3P^nN`ou_EO1Z&U)T!{19u^ie3EHxCn_H$UNBx?%DnuEQ8kX&J_6pWYOjA2XxdGAEu1cZ zNuYp0+K!>qg>v~h2mXJ_XS_-p&55QCOFkIeJ3wLp%0!w$R+YD=)6i69=MT^U9?&}X z=>Z_`wum`R-YX~h0J_U0(F5?F7xn)es)pm$m*oEEWd4bF{U7!oa2|BZq>W%~VE;{K z&nZ=5B~_1wNAuq)6?)~Ff8ie0fy~bN6^^mu=G|}Oqm-n}_<(jp1;KMtG4%dt=f%T- zs6r=Rp?RiLfTat7W)8GPJ7Hj70nzyD)qzZ)!M~4as{!)RmJ;MOU>+c_pE3GZw7|Sd zZk!gB6(Z>PG+esWlv#FDTD=_|6e914AdQ+Xn@-Cb&^_k!|`Oy3bq4u?`*bdMi8*!YKD0AsL`q z`^5>25jJYO@eeFf7a0-kjIPd`OT8((W94z<_jnE8(~2`mPSE=o1r1rBx&got-ePnK zXbA3&Lz?6xn$5@kTO9_Fa6BA%^;vY8`wRqLfpXrk^dNd$Y|=dTkuYt6DU0Y#zZZp? zoQ`5E!K>WobBT`SZti=&<<0;T#fqO5l`8HjSdvVES&l>jT$8_y1jnP?djRV3{WT^A zFN2DXMFGWAaqZCFeU{LD67M#NdtBh&Iz#b>V3)DrG4Bbb2f#ZS ze{2{$=NvN-{q8w>$HIwNjjTPs&oD9_ImW|hWT=9XN(2=h7Y4#v22KoJE9A3pH+)V- zEky4|+w(R|@d$d3(H0$eiJTiysSsYpf+Z>y=A(Jj4sqE2-x92}T zInx&~4j{w-Jt*MNlvBT^=vT$qe^iB!koW+8ys_O&BA@41uebJ~aLDf4b@=){`>5l3=(J^lA}7xt2J_QKBT z15$Tr>d>DHxk^G>$BqaJHy>o(iDYk3T|6@w~&jEDCIni0V=08DRLw zt6x<|kKa?V;Y+<_U;y8Dnsmfta+8reD}nk67mD37VN=M18))9KP54L(O{Bj}y`Wo9 zxS}doS-kO2U!jH6c~njPDfJp83BO{{3jm(f$YINj%bQ((AFqF;*zF%skJGr@#FTMv8t)X17pxa=~-d zs2BH;uLYjo0n)7tzmmWUWILz64;+m=^q^xx@!h57)_`A0y}H@ZVhjU6pbmV6$uwB7 zoyq5NxlH1vLS#j6I66c$@ITCQ+6B_p!AiZ-3pn425Ax#h>}jATXbnI~T}Pq=07-N1|c!8mu){J_6q z@tr8KoLgMZm6E&TlN0qPYJPGh;k$)*u_6v~Ld9I;NMtV*q@6cB%o#=lJDjuc?+D*8 zCDGS}CCoF2o$3Aw=|ccY z7#IV9iVl(h#NZd0bi-8O`ee@G%Ywg~5)_ATMacl|>O*1rgS-MkNiNviGj*Z5+p<=zl-O2=X=tCN82R zC)uPfktI3NS+b-^at_(89HdAB^U>CjiuR40 z2Y72txr(!$PD}?qy=!)M@PUIEcj@! z=fXPf5Mg2*8f>Q}cQ%E}+41c~k`nL1%<}wEz+ph=G&oadqM12y?qoCbAh$UU0 z42PzzFn4mvV^@(GyW_zf&au5V>&CZ(x3V?tJ%mv-!a7R0EtoScyLBR9jhbBz2V9EX zO1bB!qSSR=e0SXVft0ZldkFLxo`Q%}{ri?oDo{*H+i4yN7YcepT~ZE038{A!5kPZe zP#sA!|yx&Z;v`D>!1WGnX%p1{SPmaQc~>e*R4@` z(ypP9VII(0%DCxvoBP_d1_oWo&~y)qdS7lDTzyhAgZWf@folmrn`5k^LH^6~^wV;2 z`suVhQ8b_=Eh^g+9v-ItdpRvCRp-1oo;MbCN>&FpG%NPu*2u2Vbnm13ZxBXZWeSo^ zZ5WhVO?*`kRCoAucl2#H%e5JUTIlA8s=kaECJ7z_>@xNt#l{##M8X)Orox8Grw z!xjBM@b8cK_b=bK?UPU*hj(wm2v&Hup zbgsge=QU9g2EJ$U`$2{=PJ8p|ccaE#3Mv2)e|74H~p^7Mc$v_q7vqmj+IX~5W zZo88XIUPR%K(Z?|QiOIJKAh2eS#Y_OOqDqTNXdpTxUVnA4pNkED4OALhthVn%lGRA zA`9Q#j61<;ld|`;hi6dwfx_$WmHL+K)@pvWUhO!Pr4G6nJIJ&~6>dEG-8W`;;s7Se znb`KWCTic%r~mq7US|%RHDAGhgo}w ze2kun5h_^^pO~-fb8$%#*7X?ul=zB-SNP6?8zw4g^>$LS!^T^ZVkQ4(8C!6dq*mo^ zC5?_EH*<8AwDnf*U0L=6KPxx#8;ou-a?v(MX5I@NsVJ2TzEv*6_Pq6vr|+rT<>uC{ zN4Ij^wC(6diuY+Jy1BBB9Fm;#=Mc^Y@$W9gL(+jO?fhV;;QrDIASogp-I)H4Oj1}B zx+S*!?|j2rG{`%@<9+yFwhi4AlGuzwq{%V*Gd85+&SuH&XoT`cjGX4QY6bnT#vjf zq4AemQ>@?3_GA9sO-Wa<^IL91M+7Z1Z7N{ndwY#hV_%_f)QE1L&hRz!Vk&ubDG^Id z`m)5T3l%(V*ynO!o2o4e3P02mWufB=wKoxxF~6fMGW=7t)T+Tv*3}C7V|Bk2McqIm zh@eqI05OWyx5Ekx%_SXDSy2X%kf58~ckk-WvRJ))7loiF&ooMR8a+Hz5CL-Z@_b?R zn;JahI@}k^gxETg41**3PWTQJL08Wf&`V7@+|g)l;1Y8#l?thNZex#b*{&|~4P8h} zBPJ^siiQ>D->G2-&>_hz;*wnbz2gb+1E(bbIf;NQFW_dDbKmlkxxrARx```yrOZZii;$NF&keEW6SMAZ^S7~?VCtDqvQ=C88@TDgWH(P;? zPZ+{pdaoO-ob;Ni{S=EuHJZIhK>ks#&#KKDrA^$os=8e;nv-}AHF1L+5_iDp@TB}` zL-3eyH8q@!qALjiJ&O2Vg_nt8IUN~=%ub5520TR4dAoZ|-51mqpKHpg7=!8Zp2_uR zJt*p^@BgTjHmj8WkN)U?vHqx*>Y@q*k!&9Uqfr7*b_fta;B;}pq~raEvSS^(BRe#W z_Q-jcxkF9d@!iYZQNLn6((xMZ3}>SlOKuOYwrM`>BhbLJs5+8^qi?9%A2J8y%4qG} zv-0$826ifKaT^s{n_G1{BYL1wB~7b**{ql8YjLJwp*rLiHOr`KW*Vf?XWXtJ8CR@K zLpF+u+ch1d3X*BS5$76F<;0X$V;VAO12(G@Hmf40A%mh{v&vvh$uO-37}fQ&3J2^& z=llufhhi9=?aKhgbKj-Vyu0ghK2R#@VdQSY!^qvh!-#FsaACsZhojlLQ|y)3bAaar zN^AGDnSR*h6|V5?s~?l%?e6*%6|Ie2@tk7qAO!W@E9Z2uCu@BGRuaS`t7=y3nwZv` z=tLuwvr`jO-gmIPn@D7Y{rP5Hgs%|Niv&DqerFAVY+di|@;iIKu2++&Q=71LC>g-z za1I+PuTW*}(OQwSV>ODrjZ32{#k}eJ^F!i6&$D*p;$fAPS!JqnU{$xZE$7b;)sPH$0+U52E8QoDMO);A&uZB zgiLUO>HPb%Cr@9Zhmjjrol8GoMxJY(UKMjmi}m0SnF1@QaC_=Meg5>vr!U^Vd-3wg zQ-H7b2BLVI?!ujzKnOv(3z+XYoG!9d2!{KDU;nOqGtFq~BDYgxnXBhCagoH@ohSku z*$LE1^1MbkD2FcYo>4g$A&il9y&`fPNVi_Atx(M$O(yD=^1Mvip!&rS><)FAki{>J z#;SFo&IqZvJmMgwMdDhCs756r#8w!K?6AgA&J_0+na+6FnP>`|46;bG?+=qJU?~{s z*jOfzot}WPi{OMT8T#sRwkIkL#0oB}oCa*f&{O%3KcPTN);xGD<3{NaWqNX$8=O_~ z;Q(v0n>A`3!RaAfxsA!Ul1l?;bD<+ZXab!yfwqR%i@xq6{__z3LA5N?vjcOGtZI`M z6Xg>U82N z-mFcCEdX1!*uwbTU!d30@C*P|yvQ0iE`Z)V*P4IT*3x_E2a{i`BG0!>|VWvwm zR#_MF{ooW@ydB!zYenK);>M_0V0?4<*ay8PLjB63p70BH$vffZp-JTp;y@D>#K?QmlhiOYdBN~M^J!jn3Y z$i^3sLvKG*hsY@u@Hg%g^1VkZ-gq>)fkqDnk?rrIx5g<{YzMv7j-u3OvYg5Kvc9vl z2VLhjSME8KC3s$?(k`s7>YvI)kOciAzVE+?4}`LQxp<5EMzK8Wf+v<~-R#6NndhG{ z8%FfJoTEifm&!WXAl>&S$)6Qc+6%wsTM{r%Ee}mXb--8WwaHvMhNU~R!^tkZ)scz zO_;|@)rH<-Gq=t_#M8GfM+Obc@uI<;!2)WuXV3#0lHqyQ?sTz{QTX1dQnk6^2M3cf+WuxL+h16|*pqcjHL>6)3Fl!(ennRC!dhg`I2J zW1^UOqs3l&tXt0eoIPZg2HAnra_Hp6EDU+oG*NF%6k~6uC|s|1p=17|wCX~utfi|| zCJu%oBIQx( zr~``5-d4M4qf>!FL zH?$btwIsisO9QrgH8~*0S_iFG!!IYV#u$sic8T&%%M<9Dd%hUY)(2RK*$4xD_Y>Kn zB1Z{5R%AVNDy{WXkthKdZ?=iG$FZEu!z^$m7{QF}z&{#eg^Wd}O%?~OIq(Rd)92ka ziL;@lYx6Q38MEH+Kw*tI`hciyCvQR*>LPnG?QGlUzIkk%y^cKeCm}Z4sW`UST%g=F z0JUc#FEF5OtAR2jqzG@9Fn$S5Tf7RLs2qabS^SHT%?e(Yb*$jji?YuCeS0=$gZNc< zw2bS&ig?iaN8L41)AWy;Bom}DRFmbv)S2LDM_%ZQxB{+dQbDLwZa7$-tQ9j+(Am<> zHc;J*8XOP)M(cc#{d(yuP4g7!mrPMxu3BL!|H;-2QivmovA1!eO_|R#4xkvRf&Rq? zmDTa}8|Oi@KsE%NnRJt8mH;Q;BMq3M3}oP0J7i?T~B!^5i0i-a7Rv z_&UHIccknnq1sP<->%$mmU|e)u*l3)WBtfr!urFA%Aam0S87gHSxebV;wdje)u^eLB?9d5A&|; zZ|EyrO$LC>SlHhvZ1c_ zYt~ZasCAIt>1Hj!O7*jKcR4GLYsHecrqz60E+Ea!0Of&C6vzjcU@dJZLSMD}H2WE< z+uaPcXo6JoP{EykfTR`h=ciH5;xEQN}WO_fvCuxCYzT6~DAOYK26z4dCbNqwg&+An%3p-SZ4D(NHn6HcD zVlo+L-_ORA_u1QGawdnmI#wrqU5?oRQPjC*gwfHR;@V)}=9_RVes-ki`?pxvRby4X zk=>;wp_R0%HzOn6ai7W97;@hlTBl1m3hkYNywfoZ0W7G8= zn=Uwkjp=$q&*9N|A`QBC)3`ou+F-| z$@qXJFG4c#Z)!C%xwknfeNxn$dR?v5MO@DD)Mb1@VhRc4365ZlBg0-(0*?QLutc4S z*kXx;D;JoENQRR#pDo!W{O|XiT8`^8jao=bPQ$7Hujxc=B{zFN(EX3C&)6 z`BxwjjjKV(M;le{P5g73K;NrWjg6dda5$Cv$9LcN^%98Vie-F0{+&8DlQq;sO5I#1GgV zs?-Hca%$wa`H6cBvd9G2b=}$qz51!f*LxI9nMr6BRktfazmgPa>3V{$V&$@c?k7JouRw%`)Yo=;fQptopMlY zS|H%L74zUA1#@kD2eSDH+9QQ=D(4jOw9mo&p&!Cn?}sK+dtFhiPj6q|ZWu`S6Xp|9 z(&9TvZugK`X^XZH=H0YRG|4)?gpNt< zM|t9v5J97WX|@XvX}91(({ekUPmjntQ(euBf)&H>$XMSE#>;X5Uakor9%5JSLq&!w z-z+xs`*BpcVLMY7lg+AJUpzi5Chv1USok(NWamcDH%V)+GT$aF{gx><#dNw~>+?~E z?=g6yc!#F6m?az2BgOJp8EWGIf17bgvPehSb;u$~_EBGS8$~3SO-K!0C7mJw=#oyz zh3*aD2msFn^l`wle|+*C=8}c8&ho?1Qc-QtFX)}=2N!p>pA;X888|6vAArNR4@||z zDE2~#E%+6G9cRKm*F5zw);K}3p%;dGM}zyL!D*K{?TYz#^<;GIJ?L()-Ib{WNPXw0 z-iOpSm(>j?OkQ~z=m(j;7K~;C);3@V7g8%q!K^&z|caHf9*aIt>PO)z?Ck0d*&NP*lM= zVTlGi9@uE$pzt4~bu0!9#V{b3=vWNgvInlLE#r64c41(iek|t8wUJ`h*~zM!XHOTC z)x{EOn^ywex5fBFc{*MfQC7bTdJ#ZK)&Z-_4s>}I$}56ns@r@23rGcsq75nRgreQQJ60sLyNpX#%A`a+F|f_V`yRx9=A<7Bo$%0fW8+1U)$ zp`4Krxl*l`yLm$`PW}LYPm7OB(97K%D-^GmpLGhc1BV8_^J#N~*D9vj_tp#JND>e0 zoPJtO&==mc=sA~-!2!hGcs)iBj(wWGn3J$IM$RMCwBhK`-%Z#>$VRKMbq?{_wr%_U z9rnHRd${jye3%)?g>Wf2&o={|m(Uk^s5WyWr)8$FE-t#wAn!xivHa-#TZrg#RnR8} zw-KnJ>eQ6#vFF8{DUReOIuJoH{h|DWeE9R>XsRRhhsn*DVvCJdd@xMo zoDg@aO$9MU=z>&ZhhDq=n8J{(vR+*TnmHEC>*Dn3$7ODz88S1xJ?eN$I@tt6*X8dN zjjL9nwvS3y04ev-%LBW(7u6bs`E3`lfi$jL&lc(ettL$ygQArXt;s>F)75J3$E$Wn z$HGMKqLFmfa(_<#Xgg{kf4J50yAj(aX*D)9xkD_u8(_)s=k=&s9^@BA{b^Bssur`0 z5LNE-@K}WSs=UB@Am&jMNzU-VDImLCpO?56#?_td8~`<43w!mQ?3KTa6Y%tm{XFn; z+(lyLPob%{sM58BouK1YPsW?sI$4R%nm1}dOs_ApY@Ixy1ZTi646FxMEk)2ria%~F zoS04vLeYey^InW7d>5`X!RR>;u(J1Shh2XNT3kES3fua_cC0es@h^}Pzrbb0PoX_h znd#(2@e1pLj{4j%AePs$Y))m_5@2*xtDU4v!y939u_(LzPQeQ|dosMCokoL&b;AxfP6OU91&JJH_a@%&}Ne8*7{D#8P{Fghqu?I8jr+ zA?zHmYC^(!nH}s}nf9C%_PPLpy6Zxe4qW0vcH@lsSwnJ0b70e2Xo1u^$aq26Ht@%9 z$PggWXJ);iz5M&3-83tq_~d5g*Lyx0jT1b%4=f|%gLf<6pk2F53wl)0fFT2LOd*eP zBa*3T_thJ@!4~*xwROHh0uMWOkr^bTT4|ugvrf= z2NgqtMfYP%!u>fqv85Aa?)owc#`TAC3U}LpIkE?k*&57*%2>|#%`S-;3vB1Bs6A>8 z9IO}I#Px?_4aUakWI6=SRxH@2=6^t>|5{EJA|Y@cT}U?vlp|mTnTVQ;PwB!OYl2L{ z{6@5*#!hX8Fyr&)&s-RrF)Y&*Q<1th)FjjA>j@9AlI2y9DwzoVyV}SC zNmc|?f`)7)Y?cOB`c8)q-R90mEMPdQz%cZ}h=WtGJ~~>K^Rf}Lx4Rf97%7qV{Gbs?oq5geRpalIvQ&90t>Bvu%KrqS@+q?}Im&@y$qOh}#=?H-f*oL(i zenQw&u@>LqSmDqYJby;fUra=J@9A=0BwOUBwf1R3R5!AR-9eZdQc+GnG3*XTK1vw& zczi`Dx`KRYreGPn1JM;^PfVzrhP8yaN51C_9Vy8I@ANe!wxSp>$s`}h&->aoALA}O zro^0$ms0-v_Q&TcVNtB$mqZ8%7_s}

      &{k)reDZEav!2p&evAd3-WC5FUYagFLSJ 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 z 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

      $BRd?inoP+m3< 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 diff --git a/builds/4chan-X-noupdate.user.js b/builds/4chan-X-noupdate.user.js index be59133ab..ae3d5477b 100644 --- a/builds/4chan-X-noupdate.user.js +++ b/builds/4chan-X-noupdate.user.js @@ -1,7 +1,6 @@ -// Generated by CoffeeScript // ==UserScript== // @name 4chan X -// @version 1.11.30.3 +// @version 1.11.31.0 // @minGMVer 1.14 // @minFFVer 26 // @namespace 4chan-X @@ -107,7 +106,7 @@ /* * Contains data from external sources: * -* audio/beep.wav from http://freesound.org/people/pierrecartoons1979/sounds/90112/ +* src/Monitoring/ThreadUpdater/beep.wav from http://freesound.org/people/pierrecartoons1979/sounds/90112/ * cc-by-nc-3.0 * * Font Awesome by Dave Gandy (http://fontawesome.io) @@ -119,12 +118,56 @@ 'use strict'; (function() { - var $, $$, Anonymize, AntiAutoplay, ArchiveLink, Banner, Board, Build, Callbacks, Captcha, CatalogLinks, CatalogThread, Clone, Conf, Config, Connection, CrossOrigin, CustomCSS, DataBoard, DeleteLink, DownloadLink, E, Embedding, ExpandComment, ExpandThread, FappeTyme, Favicon, Fetcher, FileInfo, Filter, Flash, Fourchan, Gallery, Get, Header, IDColor, IDHighlight, ImageCommon, ImageExpand, ImageHover, ImageLoader, Index, Keybinds, Linkify, Main, MarkNewIPs, Menu, Metadata, Nav, NormalizeURL, Notice, PSAHiding, PassLink, Polyfill, Post, PostHiding, PostSuccessful, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, RandomAccessList, Recursive, Redirect, RelativeDates, RemoveSpoilers, ReplyPruning, Report, ReportLink, RevealSpoilers, Sauce, Settings, ShimSet, SimpleDict, Thread, ThreadExcerpt, ThreadHiding, ThreadLinks, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, Volume, c, d, doc, g, - slice = [].slice, - indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, - extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, - hasProp = {}.hasOwnProperty, - bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; + +var $, $$, Anonymize, AntiAutoplay, ArchiveLink, Banner, Board, Build, CSS, Callbacks, Captcha, CatalogLinks, CatalogThread, Config, Connection, CrossOrigin, CustomCSS, DataBoard, DeleteLink, DownloadLink, Embedding, ExpandComment, ExpandThread, FappeTyme, Favicon, Fetcher, FileInfo, Filter, Flash, Fourchan, Gallery, Get, Header, IDColor, IDHighlight, ImageCommon, ImageExpand, ImageHover, ImageLoader, Index, Keybinds, Linkify, Main, MarkNewIPs, Menu, Metadata, Nav, NormalizeURL, Notice, PSAHiding, PassLink, Polyfill, Post, PostHiding, PostSuccessful, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, RandomAccessList, Recursive, Redirect, RelativeDates, RemoveSpoilers, ReplyPruning, Report, ReportLink, RevealSpoilers, Sauce, Settings, ShimSet, SimpleDict, Thread, ThreadExcerpt, ThreadHiding, ThreadLinks, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, Volume; + +var Conf, E, c, d, doc, g; + +Conf = {}; +c = console; +d = document; +doc = d.documentElement; + +g = { + VERSION: '1.11.31.0', + NAMESPACE: '4chan X.', + boards: {} +}; + +E = (function() { + var fn, r, regex, str; + str = { + '&': '&', + "'": ''', + '"': '"', + '<': '<', + '>': '>' + }; + r = String.prototype.replace; + regex = /[&"'<>]/g; + fn = function(x) { + return str[x]; + }; + return function(text) { + return r.call(text, regex, fn); + }; +})(); + +E.cat = function(templates) { + var html, i, len; + html = ''; + for (i = 0, len = templates.length; i < len; i++) { + html += templates[i].innerHTML; + } + return html; +}; + +E.url = function(content) { + return "data:text/html;charset=utf-8," + encodeURIComponent(content.innerHTML); +}; + +Config = (function() { + var Config; Config = { main: { @@ -368,7 +411,7 @@ ":root.tomorrow div.boardTitle {\n" + " font-family: sans-serif !important;\n" + " text-shadow: 1px 1px 1px rgba(167,170,168,0.6);\n" + -"}", +"}\n", hotkeys: { 'Toggle board list': ['Ctrl+b', 'Toggle the full board list.'], 'Toggle header': ['Shift+h', 'Toggle the auto-hide option of the header.'], @@ -434,18204 +477,23 @@ 'Autohiding Scrollbar': false }; - Conf = {}; + return Config; - c = console; +}).call(this); - d = document; +CSS = { - doc = d.documentElement; - - g = { - VERSION: '1.11.30.3', - NAMESPACE: '4chan X.', - boards: {} - }; - - E = (function() { - var fn, r, regex, str; - str = { - '&': '&', - "'": ''', - '"': '"', - '<': '<', - '>': '>' - }; - r = String.prototype.replace; - regex = /[&"'<>]/g; - fn = function(x) { - return str[x]; - }; - return function(text) { - return r.call(text, regex, fn); - }; - })(); - - E.cat = function(templates) { - var html, k, len1, x; - html = ''; - for (k = 0, len1 = templates.length; k < len1; k++) { - x = templates[k]; - html += x.innerHTML; - } - return html; - }; - - E.url = function(content) { - return "data:text/html;charset=utf-8," + (encodeURIComponent(content.innerHTML)); - }; - - $ = function(selector, root) { - if (root == null) { - root = d.body; - } - return root.querySelector(selector); - }; - - $.DAY = 24 * ($.HOUR = 60 * ($.MINUTE = 60 * ($.SECOND = 1000))); - - $.id = function(id) { - return d.getElementById(id); - }; - - $.ready = function(fc) { - var cb; - if (d.readyState !== 'loading') { - $.queueTask(fc); - return; - } - cb = function() { - $.off(d, 'DOMContentLoaded', cb); - return fc(); - }; - return $.on(d, 'DOMContentLoaded', cb); - }; - - $.formData = function(form) { - var fd, key, val; - if (form instanceof HTMLFormElement) { - return new FormData(form); - } - fd = new FormData(); - for (key in form) { - val = form[key]; - if (val) { - if (typeof val === 'object' && 'newName' in val) { - fd.append(key, val, val.newName); - } else { - fd.append(key, val); - } - } - } - return fd; - }; - - $.extend = function(object, properties) { - var key, val; - for (key in properties) { - val = properties[key]; - object[key] = val; - } - }; - - $.ajax = (function() { - var blockedError, blockedURLs, lastModified; - lastModified = {}; - blockedURLs = {}; - blockedError = function(url) { - var message; - if (blockedURLs[url]) { - return; - } - blockedURLs[url] = true; - message = $.el('div', { - innerHTML: "4chan X was blocked from loading the following URL:

      [
      More info]" - }); - $('span', message).textContent = (/^\/\//.test(url) ? location.protocol : '') + url; - return new Notice('warning', message, 30, function() { - return delete blockedURLs[url]; - }); - }; - return function(url, options, extra) { - var err, event, form, k, len1, r, ref, ref1, type, upCallbacks, whenModified; - if (options == null) { - options = {}; - } - if (extra == null) { - extra = {}; - } - type = extra.type, whenModified = extra.whenModified, upCallbacks = extra.upCallbacks, form = extra.form; - url = url.replace(/^((?:https?:)?\/\/(?:\w+\.)?4c(?:ha|d)n\.org)\/adv\//, '$1//adv/'); - r = new XMLHttpRequest(); - type || (type = form && 'post' || 'get'); - try { - r.open(type, url, true); - } catch (_error) { - err = _error; - blockedError(url); - ref = ['error', 'loadend']; - for (k = 0, len1 = ref.length; k < len1; k++) { - event = ref[k]; - r["on" + event] = options["on" + event]; - $.queueTask($.event, event, null, r); - } - return; - } - if (whenModified) { - if (((ref1 = lastModified[whenModified]) != null ? ref1[url] : void 0) != null) { - r.setRequestHeader('If-Modified-Since', lastModified[whenModified][url]); - } - $.on(r, 'load', function() { - return (lastModified[whenModified] || (lastModified[whenModified] = {}))[url] = r.getResponseHeader('Last-Modified'); - }); - } - if (/\.json$/.test(url)) { - if (options.responseType == null) { - options.responseType = 'json'; - } - } - $.extend(r, options); - if (options.responseType === 'json' && r.responseType !== 'json' && delete r.response) { - Object.defineProperty(r, 'response', { - configurable: true, - enumerable: true, - get: function() { - return JSON.parse(r.responseText); - } - }); - } - $.extend(r.upload, upCallbacks); - r.send(form); - return r; - }; - })(); - - (function() { - var reqs; - reqs = {}; - $.cache = function(url, cb, options) { - var err, req, rm; - if (req = reqs[url]) { - if (req.readyState === 4) { - $.queueTask(function() { - return cb.call(req, req.evt, true); - }); - } else { - req.callbacks.push(cb); - } - return req; - } - rm = function() { - return delete reqs[url]; - }; - try { - if (!(req = $.ajax(url, options))) { - return; - } - } catch (_error) { - err = _error; - return; - } - $.on(req, 'load', function(e) { - var fn1, k, len1, ref; - this.evt = e; - ref = this.callbacks; - fn1 = (function(_this) { - return function(cb) { - return $.queueTask(function() { - return cb.call(_this, e, false); - }); - }; - })(this); - for (k = 0, len1 = ref.length; k < len1; k++) { - cb = ref[k]; - fn1(cb); - } - return delete this.callbacks; - }); - $.on(req, 'abort error', rm); - req.callbacks = [cb]; - return reqs[url] = req; - }; - return $.cleanCache = function(testf) { - var url; - for (url in reqs) { - if (testf(url)) { - delete reqs[url]; - } - } - }; - })(); - - $.cb = { - checked: function() { - $.set(this.name, this.checked); - return Conf[this.name] = this.checked; - }, - value: function() { - $.set(this.name, this.value.trim()); - return Conf[this.name] = this.value; - } - }; - - $.asap = function(test, cb) { - if (test()) { - return cb(); - } else { - return setTimeout($.asap, 25, test, cb); - } - }; - - $.onExists = function(root, selector, cb) { - var el, observer; - if (el = $(selector, root)) { - return cb(el); - } - if ($.engine === 'edge' && d.readyState === 'loading') { - $.asap((function() { - return d.readyState !== 'loading' || $(selector, root); - }), function() { - return $.onExists(root, selector, cb); - }); - return; - } - observer = new MutationObserver(function() { - if (el = $(selector, root)) { - observer.disconnect(); - return cb(el); - } - }); - return observer.observe(root, { - childList: true, - subtree: true - }); - }; - - $.addStyle = function(css, id, test) { - var style; - if (test == null) { - test = 'head'; - } - style = $.el('style', { - textContent: css - }); - if (id != null) { - style.id = id; - } - $.onExists(doc, test, function() { - return $.add(d.head, style); - }); - return style; - }; - - $.x = function(path, root) { - root || (root = d.body); - return d.evaluate(path, root, null, 8, null).singleNodeValue; - }; - - $.X = function(path, root) { - root || (root = d.body); - return d.evaluate(path, root, null, 7, null); - }; - - $.addClass = function() { - var className, classNames, el, k, len1; - el = arguments[0], classNames = 2 <= arguments.length ? slice.call(arguments, 1) : []; - for (k = 0, len1 = classNames.length; k < len1; k++) { - className = classNames[k]; - el.classList.add(className); - } - }; - - $.rmClass = function() { - var className, classNames, el, k, len1; - el = arguments[0], classNames = 2 <= arguments.length ? slice.call(arguments, 1) : []; - for (k = 0, len1 = classNames.length; k < len1; k++) { - className = classNames[k]; - el.classList.remove(className); - } - }; - - $.toggleClass = function(el, className) { - return el.classList.toggle(className); - }; - - $.hasClass = function(el, className) { - return indexOf.call(el.classList, className) >= 0; - }; - - $.rm = function(el) { - return el != null ? el.remove() : void 0; - }; - - $.rmAll = function(root) { - return root.textContent = null; - }; - - $.tn = function(s) { - return d.createTextNode(s); - }; - - $.frag = function() { - return d.createDocumentFragment(); - }; - - $.nodes = function(nodes) { - var frag, k, len1, node; - if (!(nodes instanceof Array)) { - return nodes; - } - frag = $.frag(); - for (k = 0, len1 = nodes.length; k < len1; k++) { - node = nodes[k]; - frag.appendChild(node); - } - return frag; - }; - - $.add = function(parent, el) { - return parent.appendChild($.nodes(el)); - }; - - $.prepend = function(parent, el) { - return parent.insertBefore($.nodes(el), parent.firstChild); - }; - - $.after = function(root, el) { - return root.parentNode.insertBefore($.nodes(el), root.nextSibling); - }; - - $.before = function(root, el) { - return root.parentNode.insertBefore($.nodes(el), root); - }; - - $.replace = function(root, el) { - return root.parentNode.replaceChild($.nodes(el), root); - }; - - $.el = function(tag, properties, properties2) { - var el; - el = d.createElement(tag); - if (properties) { - $.extend(el, properties); - } - if (properties2) { - $.extend(el, properties2); - } - return el; - }; - - $.on = function(el, events, handler) { - var event, k, len1, ref; - ref = events.split(' '); - for (k = 0, len1 = ref.length; k < len1; k++) { - event = ref[k]; - el.addEventListener(event, handler, false); - } - }; - - $.off = function(el, events, handler) { - var event, k, len1, ref; - ref = events.split(' '); - for (k = 0, len1 = ref.length; k < len1; k++) { - event = ref[k]; - el.removeEventListener(event, handler, false); - } - }; - - $.one = function(el, events, handler) { - var cb; - cb = function(e) { - $.off(el, events, cb); - return handler.call(this, e); - }; - return $.on(el, events, cb); - }; - - $.event = function(event, detail, root) { - if (root == null) { - root = d; - } - if ((detail != null) && typeof cloneInto === 'function') { - detail = cloneInto(detail, d.defaultView); - } - return root.dispatchEvent(new CustomEvent(event, { - bubbles: true, - detail: detail - })); - }; - - (function() { - var clone, err, ref, unsafeConstructors; - if (!(/PaleMoon\//.test(navigator.userAgent) && +(typeof GM_info !== "undefined" && GM_info !== null ? (ref = GM_info.version) != null ? ref.split('.')[0] : void 0 : void 0) >= 2 && typeof cloneInto === 'undefined')) { - return; - } - try { - return new CustomEvent('x', { - detail: {} - }); - } catch (_error) { - err = _error; - unsafeConstructors = { - Object: unsafeWindow.Object, - Array: unsafeWindow.Array - }; - clone = function(obj) { - var constructor, key, obj2, val; - if ((obj != null) && typeof obj === 'object' && (constructor = unsafeConstructors[obj.constructor.name])) { - obj2 = new constructor(); - for (key in obj) { - val = obj[key]; - obj2[key] = clone(val); - } - return obj2; - } else { - return obj; - } - }; - return $.event = function(event, detail, root) { - if (root == null) { - root = d; - } - return root.dispatchEvent(new CustomEvent(event, { - bubbles: true, - detail: clone(detail) - })); - }; - } - })(); - - $.open = typeof GM_openInTab !== "undefined" && GM_openInTab !== null ? GM_openInTab : function(url) { - return window.open(url, '_blank'); - }; - - $.debounce = function(wait, fn) { - var args, exec, lastCall, that, timeout; - lastCall = 0; - timeout = null; - that = null; - args = null; - exec = function() { - lastCall = Date.now(); - return fn.apply(that, args); - }; - return function() { - args = arguments; - that = this; - if (lastCall < Date.now() - wait) { - return exec(); - } - clearTimeout(timeout); - return timeout = setTimeout(exec, wait); - }; - }; - - $.queueTask = (function() { - var execTask, taskChannel, taskQueue; - taskQueue = []; - execTask = function() { - var args, func, task; - task = taskQueue.shift(); - func = task[0]; - args = Array.prototype.slice.call(task, 1); - return func.apply(func, args); - }; - if (window.MessageChannel) { - taskChannel = new MessageChannel(); - taskChannel.port1.onmessage = execTask; - return function() { - taskQueue.push(arguments); - return taskChannel.port2.postMessage(null); - }; - } else { - return function() { - taskQueue.push(arguments); - return setTimeout(execTask, 0); - }; - } - })(); - - $.globalEval = function(code) { - var script; - script = $.el('script', { - textContent: code - }); - $.add(d.head || doc, script); - return $.rm(script); - }; - - $.global = function(fn) { - if (doc) { - return $.globalEval("(" + fn + ")();"); - } else { - return fn(); - } - }; - - $.bytesToString = function(size) { - var unit; - unit = 0; - while (size >= 1024) { - size /= 1024; - unit++; - } - size = unit > 1 ? Math.round(size * 100) / 100 : Math.round(size); - return size + " " + ['B', 'KB', 'MB', 'GB'][unit]; - }; - - $.minmax = function(value, min, max) { - return (value < min ? min : value > max ? max : value); - }; - - $.hasAudio = function(video) { - return video.mozHasAudio || !!video.webkitAudioDecodedByteCount; - }; - - $.engine = (function() { - if (/Edge\//.test(navigator.userAgent)) { - return 'edge'; - } - if (/Chrome\//.test(navigator.userAgent)) { - return 'blink'; - } - if (/WebKit\//.test(navigator.userAgent)) { - return 'webkit'; - } - if (/Gecko\/|Goanna/.test(navigator.userAgent)) { - return 'gecko'; - } - })(); - - try { - localStorage.getItem('x'); - $.hasStorage = true; - } catch (_error) { - $.hasStorage = false; - } - - $.item = function(key, val) { - var item; - item = {}; - item[key] = val; - return item; - }; - - $.syncing = {}; - - if (typeof GM_deleteValue !== "undefined" && GM_deleteValue !== null) { - $.getValue = GM_getValue; - $.listValues = function() { - return GM_listValues(); - }; - } else if ($.hasStorage) { - $.getValue = function(key) { - return localStorage[key]; - }; - $.listValues = function() { - var key, results; - results = []; - for (key in localStorage) { - if (key.slice(0, g.NAMESPACE.length) === g.NAMESPACE) { - results.push(key); - } - } - return results; - }; - } else { - $.getValue = function() {}; - $.listValues = function() { - return []; - }; - } - - if (typeof GM_addValueChangeListener !== "undefined" && GM_addValueChangeListener !== null) { - $.setValue = GM_setValue; - $.deleteValue = GM_deleteValue; - } else if (typeof GM_deleteValue !== "undefined" && GM_deleteValue !== null) { - $.oldValue = {}; - $.setValue = function(key, val) { - GM_setValue(key, val); - if (key in $.syncing) { - $.oldValue[key] = val; - if ($.hasStorage) { - return localStorage[key] = val; - } - } - }; - $.deleteValue = function(key) { - GM_deleteValue(key); - if (key in $.syncing) { - delete $.oldValue[key]; - if ($.hasStorage) { - return localStorage.removeItem(key); - } - } - }; - if (!$.hasStorage) { - $.cantSync = true; - } - } else if ($.hasStorage) { - $.oldValue = {}; - $.setValue = function(key, val) { - if (key in $.syncing) { - $.oldValue[key] = val; - } - return localStorage[key] = val; - }; - $.deleteValue = function(key) { - if (key in $.syncing) { - delete $.oldValue[key]; - } - return localStorage.removeItem(key); - }; - } else { - $.setValue = function() {}; - $.deleteValue = function() {}; - $.cantSync = $.cantSet = true; - } - - if (typeof GM_addValueChangeListener !== "undefined" && GM_addValueChangeListener !== null) { - $.sync = function(key, cb) { - return $.syncing[key] = GM_addValueChangeListener(g.NAMESPACE + key, function(key2, oldValue, newValue, remote) { - if (remote) { - if (newValue !== void 0) { - newValue = JSON.parse(newValue); - } - return cb(newValue, key); - } - }); - }; - $.forceSync = function() {}; - } else if ((typeof GM_deleteValue !== "undefined" && GM_deleteValue !== null) || $.hasStorage) { - $.sync = function(key, cb) { - key = g.NAMESPACE + key; - $.syncing[key] = cb; - return $.oldValue[key] = $.getValue(key); - }; - (function() { - var onChange; - onChange = function(arg) { - var cb, key, newValue; - key = arg.key, newValue = arg.newValue; - if (!(cb = $.syncing[key])) { - return; - } - if (newValue != null) { - if (newValue === $.oldValue[key]) { - return; - } - $.oldValue[key] = newValue; - return cb(JSON.parse(newValue), key.slice(g.NAMESPACE.length)); - } else { - if ($.oldValue[key] == null) { - return; - } - delete $.oldValue[key]; - return cb(void 0, key.slice(g.NAMESPACE.length)); - } - }; - $.on(window, 'storage', onChange); - return $.forceSync = function(key) { - key = g.NAMESPACE + key; - return onChange({ - key: key, - newValue: $.getValue(key) - }); - }; - })(); - } else { - $.sync = function() {}; - $.forceSync = function() {}; - } - - $["delete"] = function(keys) { - var k, key, len1; - if (!(keys instanceof Array)) { - keys = [keys]; - } - for (k = 0, len1 = keys.length; k < len1; k++) { - key = keys[k]; - $.deleteValue(g.NAMESPACE + key); - } - }; - - $.get = function(key, val, cb) { - var items; - if (typeof cb === 'function') { - items = $.item(key, val); - } else { - items = key; - cb = val; - } - return $.queueTask(function() { - for (key in items) { - if (val = $.getValue(g.NAMESPACE + key)) { - items[key] = JSON.parse(val); - } - } - return cb(items); - }); - }; - - $.set = function(keys, val, cb) { - var key, value; - if (typeof keys === 'string') { - $.setValue(g.NAMESPACE + keys, JSON.stringify(val)); - } else { - for (key in keys) { - value = keys[key]; - $.setValue(g.NAMESPACE + key, JSON.stringify(value)); - } - cb = val; - } - return typeof cb === "function" ? cb() : void 0; - }; - - $.clear = function(cb) { - var id; - $["delete"](Object.keys(Conf)); - $["delete"](['previousversion', 'AutoWatch', 'QR Size', 'captchas', 'QR.persona', 'hiddenPSA']); - $["delete"]((function() { - var k, len1, ref, results; - ref = ['embedding', 'updater', 'thread-stats', 'thread-watcher', 'qr']; - results = []; - for (k = 0, len1 = ref.length; k < len1; k++) { - id = ref[k]; - results.push(id + ".position"); - } - return results; - })()); - try { - $["delete"]($.listValues().map(function(key) { - return key.replace(g.NAMESPACE, ''); - })); - } catch (_error) {} - return typeof cb === "function" ? cb() : void 0; - }; - - $$ = function(selector, root) { - if (root == null) { - root = d.body; - } - return slice.call(root.querySelectorAll(selector)); - }; - - Callbacks = (function() { - function Callbacks(type1) { - this.type = type1; - this.keys = []; - } - - Callbacks.prototype.push = function(arg) { - var cb, name; - name = arg.name, cb = arg.cb; - if (!this[name]) { - this.keys.push(name); - } - return this[name] = cb; - }; - - Callbacks.prototype.execute = function(node, keys) { - var err, errors, k, len1, name, ref; - if (keys == null) { - keys = this.keys; - } - for (k = 0, len1 = keys.length; k < len1; k++) { - name = keys[k]; - try { - if ((ref = this[name]) != null) { - ref.call(node); - } - } catch (_error) { - err = _error; - if (!errors) { - errors = []; - } - errors.push({ - message: ['"', name, '" crashed on node ', this.type, ' No.', node.ID, ' (', node.board, ').'].join(''), - error: err - }); - } - } - if (errors) { - return Main.handleErrors(errors); - } - }; - - return Callbacks; - - })(); - - Board = (function() { - Board.prototype.toString = function() { - return this.ID; - }; - - function Board(ID1) { - this.ID = ID1; - this.threads = new SimpleDict(); - this.posts = new SimpleDict(); - g.boards[this] = this; - } - - return Board; - - })(); - - Thread = (function() { - Thread.callbacks = new Callbacks('Thread'); - - Thread.prototype.toString = function() { - return this.ID; - }; - - function Thread(ID1, board1) { - this.ID = ID1; - this.board = board1; - this.fullID = this.board + "." + this.ID; - this.posts = new SimpleDict(); - this.isDead = false; - this.isHidden = false; - this.isOnTop = false; - this.isSticky = false; - this.isClosed = false; - this.isArchived = false; - this.postLimit = false; - this.fileLimit = false; - this.ipCount = void 0; - this.OP = null; - this.catalogView = null; - this.board.threads.push(this.ID, this); - g.threads.push(this.fullID, this); - } - - Thread.prototype.setPage = function(pageNum) { - var icon, info, quote, ref; - ref = this.OP.nodes, info = ref.info, quote = ref.quote; - if (!(icon = $('.page-num', info))) { - icon = $.el('span', { - className: 'page-num' - }); - $.after(quote, [$.tn(' '), icon]); - } - icon.title = "This thread is on page " + pageNum + " in the original index."; - icon.textContent = "[" + pageNum + "]"; - if (this.catalogView) { - return this.catalogView.nodes.pageCount.textContent = pageNum; - } - }; - - Thread.prototype.setCount = function(type, count, reachedLimit) { - var el; - if (!this.catalogView) { - return; - } - el = this.catalogView.nodes[type + "Count"]; - el.textContent = count; - return (reachedLimit ? $.addClass : $.rmClass)(el, 'warning'); - }; - - Thread.prototype.setStatus = function(type, status) { - var name; - name = "is" + type; - if (this[name] === status) { - return; - } - this[name] = status; - if (!this.OP) { - return; - } - this.setIcon('Sticky', this.isSticky); - this.setIcon('Closed', this.isClosed && !this.isArchived); - return this.setIcon('Archived', this.isArchived); - }; - - Thread.prototype.setIcon = function(type, status) { - var icon, root, typeLC; - typeLC = type.toLowerCase(); - icon = $("." + typeLC + "Icon", this.OP.nodes.info); - if (!!icon === status) { - return; - } - if (!status) { - $.rm(icon.previousSibling); - $.rm(icon); - if (this.catalogView) { - $.rm($("." + typeLC + "Icon", this.catalogView.nodes.icons)); - } - return; - } - icon = $.el('img', { - src: "" + Build.staticPath + typeLC + Build.gifIcon, - alt: type, - title: type, - className: typeLC + "Icon retina" - }); - root = type !== 'Sticky' && this.isSticky ? $('.stickyIcon', this.OP.nodes.info) : $('.page-num', this.OP.nodes.info) || this.OP.nodes.quote; - $.after(root, [$.tn(' '), icon]); - if (!this.catalogView) { - return; - } - return (type === 'Sticky' && this.isClosed ? $.prepend : $.add)(this.catalogView.nodes.icons, icon.cloneNode()); - }; - - Thread.prototype.kill = function() { - return this.isDead = true; - }; - - Thread.prototype.collect = function() { - this.posts.forEach(function(post) { - return post.collect(); - }); - g.threads.rm(this.fullID); - return this.board.threads.rm(this); - }; - - return Thread; - - })(); - - CatalogThread = (function() { - CatalogThread.callbacks = new Callbacks('Catalog Thread'); - - CatalogThread.prototype.toString = function() { - return this.ID; - }; - - function CatalogThread(root, thread1) { - this.thread = thread1; - this.ID = this.thread.ID; - this.board = this.thread.board; - this.nodes = { - root: root, - thumb: $('.catalog-thumb', root), - icons: $('.catalog-icons', root), - postCount: $('.post-count', root), - fileCount: $('.file-count', root), - pageCount: $('.page-count', root), - comment: $('.comment', root) - }; - this.thread.catalogView = this; - } - - return CatalogThread; - - })(); - - Post = (function() { - Post.callbacks = new Callbacks('Post'); - - Post.prototype.toString = function() { - return this.ID; - }; - - function Post(root, thread1, board1) { - var capcode, clone, date, email, flag, info, k, len1, name, post, ref, subject, tripcode, uniqueID; - this.thread = thread1; - this.board = board1; - this.ID = +root.id.slice(2); - this.fullID = this.board + "." + this.ID; - this.context = this; - root.dataset.fullID = this.fullID; - post = $('.post', root); - info = $('.postInfo', post); - this.nodes = { - root: root, - post: post, - info: info, - nameBlock: $('.nameBlock', info), - quote: $('.postNum > a:nth-of-type(2)', info), - comment: $('.postMessage', post), - links: [], - quotelinks: [] - }; - if ($.engine === 'edge') { - Object.defineProperty(this.nodes, 'backlinks', { - configurable: true, - enumerable: true, - get: function() { - return info.getElementsByClassName('backlink'); - } - }); - } else { - this.nodes.backlinks = info.getElementsByClassName('backlink'); - } - if (!(this.isReply = $.hasClass(post, 'reply'))) { - this.thread.OP = this; - this.thread.isArchived = !!$('.archivedIcon', info); - this.thread.isSticky = !!$('.stickyIcon', info); - this.thread.isClosed = this.thread.isArchived || !!$('.closedIcon', info); - if (this.thread.isArchived) { - this.thread.kill(); - } - } - this.info = {}; - this.info.nameBlock = Conf['Anonymize'] ? 'Anonymous' : this.nodes.nameBlock.textContent.trim(); - if (subject = $('.subject', info)) { - this.nodes.subject = subject; - this.info.subject = subject.textContent || void 0; - } - if (name = $('.name', info)) { - this.nodes.name = name; - this.info.name = name.textContent; - } - if (email = $('.useremail', info)) { - this.nodes.email = email; - this.info.email = decodeURIComponent(email.href.slice(7)); - } - if (tripcode = $('.postertrip', info)) { - this.nodes.tripcode = tripcode; - this.info.tripcode = tripcode.textContent; - } - if (uniqueID = $('.posteruid', info)) { - this.nodes.uniqueID = uniqueID; - this.info.uniqueID = uniqueID.firstElementChild.textContent; - } - if (capcode = $('.capcode.hand', info)) { - this.nodes.capcode = capcode; - this.info.capcode = capcode.textContent.replace('## ', ''); - } - if (flag = $('.flag, .countryFlag', info)) { - this.nodes.flag = flag; - this.info.flag = flag.title; - } - if (date = $('.dateTime', info)) { - this.nodes.date = date; - this.info.date = new Date(date.dataset.utc * 1000); - } - this.parseComment(); - this.parseQuotes(); - this.parseFile(); - this.isDead = false; - this.isHidden = false; - this.clones = []; - if (g.posts[this.fullID]) { - this.isRebuilt = true; - this.clones = g.posts[this.fullID].clones; - ref = this.clones; - for (k = 0, len1 = ref.length; k < len1; k++) { - clone = ref[k]; - clone.origin = this; - } - } - this.board.posts.push(this.ID, this); - this.thread.posts.push(this.ID, this); - g.posts.push(this.fullID, this); - } - - Post.prototype.parseComment = function() { - var abbr, bq, commentDisplay, k, len1, len2, node, q, ref, spoilers; - this.nodes.comment.normalize(); - bq = this.nodes.comment.cloneNode(true); - ref = $$('.abbr + br, .exif, b, .fortune', bq); - for (k = 0, len1 = ref.length; k < len1; k++) { - node = ref[k]; - $.rm(node); - } - if (abbr = $('.abbr', bq)) { - $.rm(abbr); - } - this.info.comment = this.nodesToText(bq); - if (abbr) { - this.info.comment = this.info.comment.replace(/\n\n$/, ''); - } - commentDisplay = this.info.comment; - if (!(Conf['Remove Spoilers'] || Conf['Reveal Spoilers'])) { - spoilers = $$('s', bq); - if (spoilers.length) { - for (q = 0, len2 = spoilers.length; q < len2; q++) { - node = spoilers[q]; - $.replace(node, $.tn('[spoiler]')); - } - commentDisplay = this.nodesToText(bq); - } - } - return this.info.commentDisplay = commentDisplay.trim().replace(/\s+$/gm, ''); - }; - - Post.prototype.nodesToText = function(bq) { - var i, node, nodes, text; - text = ""; - nodes = $.X('.//br|.//text()', bq); - i = 0; - while (node = nodes.snapshotItem(i++)) { - text += node.data || '\n'; - } - return text; - }; - - Post.prototype.parseQuotes = function() { - var k, len1, quotelink, ref; - this.quotes = []; - ref = $$(':not(pre) > .quotelink', this.nodes.comment); - for (k = 0, len1 = ref.length; k < len1; k++) { - quotelink = ref[k]; - this.parseQuote(quotelink); - } - }; - - Post.prototype.parseQuote = function(quotelink) { - var fullID, match; - match = quotelink.href.match(/^https?:\/\/boards\.4chan\.org\/+([^\/]+)\/+(?:res|thread)\/+\d+(?:\/[^#]*)?#p(\d+)$/); - if (!(match || (this.isClone && quotelink.dataset.postID))) { - return; - } - this.nodes.quotelinks.push(quotelink); - if (this.isClone) { - return; - } - fullID = match[1] + "." + match[2]; - if (indexOf.call(this.quotes, fullID) < 0) { - return this.quotes.push(fullID); - } - }; - - Post.prototype.parseFile = function() { - var fileEl, fileText, info, link, m, ref, ref1, ref2, size, thumb, unit; - if (!(fileEl = $('.file', this.nodes.post))) { - return; - } - if (!(link = $('.fileText > a, .fileText-original > a', fileEl))) { - return; - } - if (!(info = (ref = link.nextSibling) != null ? ref.textContent.match(/\(([\d.]+ [KMG]?B).*\)/) : void 0)) { - return; - } - fileText = fileEl.firstElementChild; - this.file = { - text: fileText, - link: link, - url: link.href, - name: fileText.title || link.title || link.textContent, - size: info[1], - isImage: /(jpg|png|gif)$/i.test(link.href), - isVideo: /webm$/i.test(link.href), - dimensions: (ref1 = info[0].match(/\d+x\d+/)) != null ? ref1[0] : void 0, - tag: (ref2 = info[0].match(/,[^,]*, ([a-z]+)\)/i)) != null ? ref2[1] : void 0 - }; - size = +this.file.size.match(/[\d.]+/)[0]; - unit = ['B', 'KB', 'MB', 'GB'].indexOf(this.file.size.match(/\w+$/)[0]); - while (unit-- > 0) { - size *= 1024; - } - this.file.sizeInBytes = size; - if ((thumb = $('.fileThumb > [data-md5]', fileEl))) { - return $.extend(this.file, { - thumb: thumb, - thumbURL: (m = link.href.match(/\d+(?=\.\w+$)/)) ? location.protocol + "//i.4cdn.org/" + this.board + "/" + m[0] + "s.jpg" : void 0, - MD5: thumb.dataset.md5, - isSpoiler: $.hasClass(thumb.parentNode, 'imgspoiler') - }); - } - }; - - Post.prototype.kill = function(file) { - var clone, k, len1, len2, q, quotelink, ref, ref1, strong; - if (file) { - if (this.file.isDead) { - return; - } - this.file.isDead = true; - $.addClass(this.nodes.root, 'deleted-file'); - } else { - if (this.isDead) { - return; - } - this.isDead = true; - $.addClass(this.nodes.root, 'deleted-post'); - } - if (!(strong = $('strong.warning', this.nodes.info))) { - strong = $.el('strong', { - className: 'warning', - textContent: this.isReply ? '[Deleted]' : '[Dead]' - }); - $.after($('input', this.nodes.info), strong); - } - strong.textContent = file ? '[File deleted]' : '[Deleted]'; - if (this.isClone) { - return; - } - ref = this.clones; - for (k = 0, len1 = ref.length; k < len1; k++) { - clone = ref[k]; - clone.kill(file); - } - if (file) { - return; - } - ref1 = Get.allQuotelinksLinkingTo(this); - for (q = 0, len2 = ref1.length; q < len2; q++) { - quotelink = ref1[q]; - if (!(!$.hasClass(quotelink, 'deadlink'))) { - continue; - } - quotelink.textContent = quotelink.textContent + '\u00A0(Dead)'; - $.addClass(quotelink, 'deadlink'); - } - }; - - Post.prototype.resurrect = function() { - var clone, k, len1, len2, q, quotelink, ref, ref1, strong; - this.isDead = false; - $.rmClass(this.nodes.root, 'deleted-post'); - strong = $('strong.warning', this.nodes.info); - if (this.file && this.file.isDead) { - strong.textContent = '[File deleted]'; - } else { - $.rm(strong); - } - if (this.isClone) { - return; - } - ref = this.clones; - for (k = 0, len1 = ref.length; k < len1; k++) { - clone = ref[k]; - clone.resurrect(); - } - ref1 = Get.allQuotelinksLinkingTo(this); - for (q = 0, len2 = ref1.length; q < len2; q++) { - quotelink = ref1[q]; - if (!($.hasClass(quotelink, 'deadlink'))) { - continue; - } - quotelink.textContent = quotelink.textContent.replace('\u00A0(Dead)', ''); - $.rmClass(quotelink, 'deadlink'); - } - }; - - Post.prototype.collect = function() { - g.posts.rm(this.fullID); - this.thread.posts.rm(this); - return this.board.posts.rm(this); - }; - - Post.prototype.addClone = function(context, contractThumb) { - return new Clone(this, context, contractThumb); - }; - - Post.prototype.rmClone = function(index) { - var clone, k, len1, ref; - this.clones.splice(index, 1); - ref = this.clones.slice(index); - for (k = 0, len1 = ref.length; k < len1; k++) { - clone = ref[k]; - clone.nodes.root.dataset.clone = index++; - } - }; - - return Post; - - })(); - - Clone = (function(superClass) { - extend(Clone, superClass); - - Clone.prototype.isClone = true; - - function Clone(origin1, context1, contractThumb) { - var file, info, inline, inlined, k, key, len1, len2, len3, len4, node, nodes, post, q, ref, ref1, ref2, ref3, ref4, ref5, root, u, v, val; - this.origin = origin1; - this.context = context1; - ref = ['ID', 'fullID', 'board', 'thread', 'info', 'quotes', 'isReply']; - for (k = 0, len1 = ref.length; k < len1; k++) { - key = ref[k]; - this[key] = this.origin[key]; - } - nodes = this.origin.nodes; - root = contractThumb ? this.cloneWithoutVideo(nodes.root) : nodes.root.cloneNode(true); - Clone.prefix || (Clone.prefix = 0); - ref1 = [root].concat(slice.call($$('[id]', root))); - for (q = 0, len2 = ref1.length; q < len2; q++) { - node = ref1[q]; - node.id = Clone.prefix + node.id; - } - Clone.prefix++; - post = $('.post', root); - info = $('.postInfo', post); - this.nodes = { - root: root, - post: post, - info: info, - nameBlock: $('.nameBlock', info), - quote: $('.postNum > a:nth-of-type(2)', info), - comment: $('.postMessage', post), - quotelinks: [] - }; - if ($.engine === 'edge') { - Object.defineProperty(this.nodes, 'backlinks', { - configurable: true, - enumerable: true, - get: function() { - return info.getElementsByClassName('backlink'); - } - }); - } else { - this.nodes.backlinks = info.getElementsByClassName('backlink'); - } - ref2 = $$('.inline', post); - for (u = 0, len3 = ref2.length; u < len3; u++) { - inline = ref2[u]; - $.rm(inline); - } - ref3 = $$('.inlined', post); - for (v = 0, len4 = ref3.length; v < len4; v++) { - inlined = ref3[v]; - $.rmClass(inlined, 'inlined'); - } - root.hidden = false; - $.rmClass(root, 'forwarded'); - $.rmClass(post, 'highlight'); - if (nodes.subject) { - this.nodes.subject = $('.subject', info); - } - if (nodes.name) { - this.nodes.name = $('.name', info); - } - if (nodes.email) { - this.nodes.email = $('.useremail', info); - } - if (nodes.tripcode) { - this.nodes.tripcode = $('.postertrip', info); - } - if (nodes.uniqueID) { - this.nodes.uniqueID = $('.posteruid', info); - } - if (nodes.capcode) { - this.nodes.capcode = $('.capcode.hand', info); - } - if (nodes.flag) { - this.nodes.flag = $('.flag, .countryFlag', info); - } - if (nodes.date) { - this.nodes.date = $('.dateTime', info); - } - this.parseQuotes(); - this.quotes = slice.call(this.origin.quotes); - if (this.origin.file) { - this.file = {}; - ref4 = this.origin.file; - for (key in ref4) { - val = ref4[key]; - this.file[key] = val; - } - file = $('.file', post); - this.file.text = file.firstElementChild; - this.file.link = $('.fileText > a, .fileText-original', file); - this.file.thumb = $('.fileThumb > [data-md5]', file); - this.file.fullImage = $('.full-image', file); - this.file.videoControls = $('.video-controls', this.file.text); - if (this.file.videoThumb) { - this.file.thumb.muted = true; - } - if ((ref5 = this.file.thumb) != null ? ref5.dataset.src : void 0) { - this.file.thumb.src = this.file.thumb.dataset.src; - this.file.thumb.removeAttribute('data-src'); - } - if (this.file.thumb && contractThumb) { - ImageExpand.contract(this); - } - } - if (this.origin.isDead) { - this.isDead = true; - } - root.dataset.clone = this.origin.clones.push(this) - 1; - } - - Clone.prototype.cloneWithoutVideo = function(node) { - var child, clone, k, len1, ref; - if (node.tagName === 'VIDEO' && !node.dataset.md5) { - return []; - } else if (node.nodeType === Node.ELEMENT_NODE && $('video', node)) { - clone = node.cloneNode(false); - ref = node.childNodes; - for (k = 0, len1 = ref.length; k < len1; k++) { - child = ref[k]; - $.add(clone, this.cloneWithoutVideo(child)); - } - return clone; - } else { - return node.cloneNode(true); - } - }; - - return Clone; - - })(Post); - - DataBoard = (function() { - DataBoard.keys = ['hiddenThreads', 'hiddenPosts', 'lastReadPosts', 'yourPosts', 'watchedThreads', 'customTitles']; - - function DataBoard(key1, sync, dontClean) { - var init; - this.key = key1; - this.onSync = bind(this.onSync, this); - this.data = Conf[this.key]; - $.sync(this.key, this.onSync); - if (!dontClean) { - this.clean(); - } - if (!sync) { - return; - } - init = (function(_this) { - return function() { - $.off(d, '4chanXInitFinished', init); - return _this.sync = sync; - }; - })(this); - $.on(d, '4chanXInitFinished', init); - } - - DataBoard.prototype.save = function(cb) { - return $.set(this.key, this.data, cb); - }; - - DataBoard.prototype["delete"] = function(arg) { - var boardID, postID, ref, threadID; - boardID = arg.boardID, threadID = arg.threadID, postID = arg.postID; - $.forceSync(this.key); - if (postID) { - if (!((ref = this.data.boards[boardID]) != null ? ref[threadID] : void 0)) { - return; - } - delete this.data.boards[boardID][threadID][postID]; - this.deleteIfEmpty({ - boardID: boardID, - threadID: threadID - }); - } else if (threadID) { - if (!this.data.boards[boardID]) { - return; - } - delete this.data.boards[boardID][threadID]; - this.deleteIfEmpty({ - boardID: boardID - }); - } else { - delete this.data.boards[boardID]; - } - return this.save(); - }; - - DataBoard.prototype.deleteIfEmpty = function(arg) { - var boardID, threadID; - boardID = arg.boardID, threadID = arg.threadID; - $.forceSync(this.key); - if (threadID) { - if (!Object.keys(this.data.boards[boardID][threadID]).length) { - delete this.data.boards[boardID][threadID]; - return this.deleteIfEmpty({ - boardID: boardID - }); - } - } else if (!Object.keys(this.data.boards[boardID]).length) { - return delete this.data.boards[boardID]; - } - }; - - DataBoard.prototype.set = function(arg, cb) { - var base1, base2, base3, boardID, postID, threadID, val; - boardID = arg.boardID, threadID = arg.threadID, postID = arg.postID, val = arg.val; - $.forceSync(this.key); - if (postID !== void 0) { - ((base1 = ((base2 = this.data.boards)[boardID] || (base2[boardID] = {})))[threadID] || (base1[threadID] = {}))[postID] = val; - } else if (threadID !== void 0) { - ((base3 = this.data.boards)[boardID] || (base3[boardID] = {}))[threadID] = val; - } else { - this.data.boards[boardID] = val; - } - return this.save(cb); - }; - - DataBoard.prototype.get = function(arg) { - var ID, board, boardID, defaultValue, k, len1, postID, thread, threadID, val; - boardID = arg.boardID, threadID = arg.threadID, postID = arg.postID, defaultValue = arg.defaultValue; - if (board = this.data.boards[boardID]) { - if (threadID == null) { - if (postID != null) { - for (thread = k = 0, len1 = board.length; k < len1; thread = ++k) { - ID = board[thread]; - if (postID in thread) { - val = thread[postID]; - break; - } - } - } else { - val = board; - } - } else if (thread = board[threadID]) { - val = postID != null ? thread[postID] : thread; - } - } - return val || defaultValue; - }; - - DataBoard.prototype.forceSync = function() { - return $.forceSync(this.key); - }; - - DataBoard.prototype.clean = function() { - var boardID, now, ref, val; - $.forceSync(this.key); - ref = this.data.boards; - for (boardID in ref) { - val = ref[boardID]; - this.deleteIfEmpty({ - boardID: boardID - }); - } - now = Date.now(); - if ((this.data.lastChecked || 0) < now - 2 * $.HOUR) { - this.data.lastChecked = now; - for (boardID in this.data.boards) { - this.ajaxClean(boardID); - } - } - }; - - DataBoard.prototype.ajaxClean = function(boardID) { - return $.cache("//a.4cdn.org/" + boardID + "/threads.json", (function(_this) { - return function(e1) { - var ref; - if ((ref = e1.target.status) !== 200 && ref !== 404) { - return; - } - return $.cache("//a.4cdn.org/" + boardID + "/archive.json", function(e2) { - var ref1; - if ((ref1 = e2.target.status) !== 200 && ref1 !== 404) { - return; - } - return _this.ajaxCleanParse(boardID, e1.target.response, e2.target.response); - }); - }; - })(this)); - }; - - DataBoard.prototype.ajaxCleanParse = function(boardID, response1, response2) { - var ID, board, k, len1, len2, len3, page, q, ref, thread, threads, u; - if (!(board = this.data.boards[boardID])) { - return; - } - threads = {}; - if (response1) { - for (k = 0, len1 = response1.length; k < len1; k++) { - page = response1[k]; - ref = page.threads; - for (q = 0, len2 = ref.length; q < len2; q++) { - thread = ref[q]; - ID = thread.no; - if (ID in board) { - threads[ID] = board[ID]; - } - } - } - } - if (response2) { - for (u = 0, len3 = response2.length; u < len3; u++) { - ID = response2[u]; - if (ID in board) { - threads[ID] = board[ID]; - } - } - } - this.data.boards[boardID] = threads; - this.deleteIfEmpty({ - boardID: boardID - }); - return this.save(); - }; - - DataBoard.prototype.onSync = function(data) { - this.data = data || { - boards: {} - }; - return typeof this.sync === "function" ? this.sync() : void 0; - }; - - return DataBoard; - - })(); - - Notice = (function() { - function Notice(type, content, timeout1, onclose) { - this.timeout = timeout1; - this.onclose = onclose; - this.close = bind(this.close, this); - this.add = bind(this.add, this); - this.el = $.el('div', { - innerHTML: "

      " - }); - this.el.style.opacity = 0; - this.setType(type); - $.on(this.el.firstElementChild, 'click', this.close); - if (typeof content === 'string') { - content = $.tn(content); - } - $.add(this.el.lastElementChild, content); - $.ready(this.add); - } - - Notice.prototype.setType = function(type) { - return this.el.className = "notification " + type; - }; - - Notice.prototype.add = function() { - if (d.hidden) { - $.on(d, 'visibilitychange', this.add); - return; - } - $.off(d, 'visibilitychange', this.add); - $.add(Header.noticesRoot, this.el); - this.el.clientHeight; - this.el.style.opacity = 1; - if (this.timeout) { - return setTimeout(this.close, this.timeout * $.SECOND); - } - }; - - Notice.prototype.close = function() { - $.off(d, 'visibilitychange', this.add); - $.rm(this.el); - return typeof this.onclose === "function" ? this.onclose() : void 0; - }; - - return Notice; - - })(); - - RandomAccessList = (function() { - function RandomAccessList(items) { - var item, k, len1; - this.length = 0; - if (items) { - for (k = 0, len1 = items.length; k < len1; k++) { - item = items[k]; - this.push(item); - } - } - } - - RandomAccessList.prototype.push = function(data) { - var ID, item, last; - ID = data.ID; - ID || (ID = data.id); - if (this[ID]) { - return; - } - last = this.last; - this[ID] = item = { - prev: last, - next: null, - data: data, - ID: ID - }; - item.prev = last; - this.last = last ? last.next = item : this.first = item; - return this.length++; - }; - - RandomAccessList.prototype.before = function(root, item) { - var prev; - if (item.next === root || item === root) { - return; - } - this.rmi(item); - prev = root.prev; - root.prev = item; - item.next = root; - item.prev = prev; - if (prev) { - return prev.next = item; - } else { - return this.first = item; - } - }; - - RandomAccessList.prototype.after = function(root, item) { - var next; - if (item.prev === root || item === root) { - return; - } - this.rmi(item); - next = root.next; - root.next = item; - item.prev = root; - item.next = next; - if (next) { - return next.prev = item; - } else { - return this.last = item; - } - }; - - RandomAccessList.prototype.prepend = function(item) { - var first; - first = this.first; - if (item === first || !this[item.ID]) { - return; - } - this.rmi(item); - item.next = first; - if (first) { - first.prev = item; - } else { - this.last = item; - } - this.first = item; - return delete item.prev; - }; - - RandomAccessList.prototype.shift = function() { - return this.rm(this.first.ID); - }; - - RandomAccessList.prototype.order = function() { - var item, order; - order = [item = this.first]; - while (item = item.next) { - order.push(item); - } - return order; - }; - - RandomAccessList.prototype.rm = function(ID) { - var item; - item = this[ID]; - if (!item) { - return; - } - delete this[ID]; - this.length--; - this.rmi(item); - delete item.next; - return delete item.prev; - }; - - RandomAccessList.prototype.rmi = function(item) { - var next, prev; - prev = item.prev, next = item.next; - if (prev) { - prev.next = next; - } else { - this.first = next; - } - if (next) { - return next.prev = prev; - } else { - return this.last = prev; - } - }; - - return RandomAccessList; - - })(); - - SimpleDict = (function() { - function SimpleDict() { - this.keys = []; - } - - SimpleDict.prototype.push = function(key, data) { - key = "" + key; - if (!this[key]) { - this.keys.push(key); - } - return this[key] = data; - }; - - SimpleDict.prototype.rm = function(key) { - var i; - key = "" + key; - if ((i = this.keys.indexOf(key)) !== -1) { - this.keys.splice(i, 1); - return delete this[key]; - } - }; - - SimpleDict.prototype.forEach = function(fn) { - var k, key, len1, ref; - ref = slice.call(this.keys); - for (k = 0, len1 = ref.length; k < len1; k++) { - key = ref[k]; - fn(this[key]); - } - }; - - return SimpleDict; - - })(); - - ShimSet = (function() { - function ShimSet() { - this.elements = {}; - this.size = 0; - } - - ShimSet.prototype.has = function(value) { - return value in this.elements; - }; - - ShimSet.prototype.add = function(value) { - if (this.elements[value]) { - return; - } - this.elements[value] = true; - return this.size++; - }; - - ShimSet.prototype["delete"] = function(value) { - if (!this.elements[value]) { - return; - } - delete this.elements[value]; - return this.size--; - }; - - return ShimSet; - - })(); - - if (!('Set' in window)) { - window.Set = ShimSet; - } - - Connection = (function() { - function Connection(target1, origin1, cb1) { - this.target = target1; - this.origin = origin1; - this.cb = cb1 != null ? cb1 : {}; - this.onMessage = bind(this.onMessage, this); - this.send = bind(this.send, this); - $.on(window, 'message', this.onMessage); - } - - Connection.prototype.targetWindow = function() { - if (this.target instanceof window.HTMLIFrameElement) { - return this.target.contentWindow; - } else { - return this.target; - } - }; - - Connection.prototype.send = function(data) { - return this.targetWindow().postMessage("" + g.NAMESPACE + (JSON.stringify(data)), this.origin); - }; - - Connection.prototype.onMessage = function(e) { - var base1, data, type, value; - if (!(e.source === this.targetWindow() && e.origin === this.origin && typeof e.data === 'string' && e.data.slice(0, g.NAMESPACE.length) === g.NAMESPACE)) { - return; - } - data = JSON.parse(e.data.slice(g.NAMESPACE.length)); - for (type in data) { - value = data[type]; - if (typeof (base1 = this.cb)[type] === "function") { - base1[type](value); - } - } - }; - - return Connection; - - })(); - - Fetcher = (function() { - function Fetcher(boardID1, threadID1, postID1, root1, quoter1) { - var post; - this.boardID = boardID1; - this.threadID = threadID1; - this.postID = postID1; - this.root = root1; - this.quoter = quoter1; - if (post = g.posts[this.boardID + "." + this.postID]) { - this.insert(post); - return; - } - this.root.textContent = "Loading post No." + this.postID + "..."; - if (this.threadID) { - $.cache("//a.4cdn.org/" + this.boardID + "/thread/" + this.threadID + ".json", (function(_this) { - return function(e, isCached) { - return _this.fetchedPost(e.target, isCached); - }; - })(this)); - } else { - this.archivedPost(); - } - } - - Fetcher.prototype.insert = function(post) { - var boardID, clone, k, len1, nodes, postID, quote, ref, ref1; - if (!this.root.parentNode) { - return; - } - clone = post.addClone(this.quoter.context, $.hasClass(this.root, 'dialog')); - Main.callbackNodes(Clone, [clone]); - nodes = clone.nodes; - $.rmAll(nodes.root); - $.add(nodes.root, nodes.post); - ref = clone.nodes.quotelinks.concat(slice.call(clone.nodes.backlinks)); - for (k = 0, len1 = ref.length; k < len1; k++) { - quote = ref[k]; - ref1 = Get.postDataFromLink(quote), boardID = ref1.boardID, postID = ref1.postID; - if (postID === this.quoter.ID && boardID === this.quoter.board.ID) { - $.addClass(quote, 'forwardlink'); - } - } - $.rmAll(this.root); - $.add(this.root, nodes.root); - return $.event('PostsInserted'); - }; - - Fetcher.prototype.fetchedPost = function(req, isCached) { - var api, board, k, len1, post, posts, status, thread; - if (post = g.posts[this.boardID + "." + this.postID]) { - this.insert(post); - return; - } - status = req.status; - if (status !== 200 && status !== 304) { - if (this.archivedPost()) { - return; - } - $.addClass(this.root, 'warning'); - this.root.textContent = status === 404 ? "Thread No." + this.threadID + " 404'd." : "Error " + req.statusText + " (" + req.status + ")."; - return; - } - posts = req.response.posts; - Build.spoilerRange[this.boardID] = posts[0].custom_spoiler; - for (k = 0, len1 = posts.length; k < len1; k++) { - post = posts[k]; - if (post.no === this.postID) { - break; - } - } - if (post.no !== this.postID) { - if (isCached) { - api = "//a.4cdn.org/" + this.boardID + "/thread/" + this.threadID + ".json"; - $.cleanCache(function(url) { - return url === api; - }); - $.cache(api, (function(_this) { - return function(e) { - return _this.fetchedPost(e.target, false); - }; - })(this)); - return; - } - if (this.archivedPost()) { - return; - } - $.addClass(this.root, 'warning'); - this.root.textContent = "Post No." + this.postID + " was not found."; - return; - } - board = g.boards[this.boardID] || new Board(this.boardID); - thread = g.threads[this.boardID + "." + this.threadID] || new Thread(this.threadID, board); - post = new Post(Build.postFromObject(post, this.boardID), thread, board); - post.isFetchedQuote = true; - Main.callbackNodes(Post, [post]); - return this.insert(post); - }; - - Fetcher.prototype.archivedPost = function() { - var archive, url; - if (!Conf['Resurrect Quotes']) { - return false; - } - if (!(url = Redirect.to('post', { - boardID: this.boardID, - postID: this.postID - }))) { - return false; - } - archive = Redirect.data.post[this.boardID]; - if (/^https:\/\//.test(url) || location.protocol === 'http:') { - $.cache(url, (function(_this) { - return function(e) { - return _this.parseArchivedPost(e.target.response, url, archive); - }; - })(this), { - responseType: 'json', - withCredentials: archive.withCredentials - }); - return true; - } else if (Conf['Exempt Archives from Encryption']) { - CrossOrigin.json(url, (function(_this) { - return function(response) { - var key, media, ref; - media = response.media; - if (media) { - for (key in media) { - if (/_link$/.test(key)) { - if (!((ref = media[key]) != null ? ref.match(/^http:\/\//) : void 0)) { - delete media[key]; - } - } - } - } - return _this.parseArchivedPost(response, url, archive); - }; - })(this)); - return true; - } - return false; - }; - - Fetcher.prototype.parseArchivedPost = function(data, url, archive) { - var board, comment, greentext, i, j, key, o, post, ref, ref1, text, text2, thread, val; - if (post = g.posts[this.boardID + "." + this.postID]) { - this.insert(post); - return; - } - if (data == null) { - $.addClass(this.root, 'warning'); - this.root.textContent = "Error fetching Post No." + this.postID + " from " + archive.name + "."; - return; - } - if (data.error) { - $.addClass(this.root, 'warning'); - this.root.textContent = data.error; - return; - } - comment = (data.comment || '').split(/(\n|\[\/?(?:b|spoiler|code|moot|banned)\])/); - comment = (function() { - var k, len1, results; - results = []; - for (i = k = 0, len1 = comment.length; k < len1; i = ++k) { - text = comment[i]; - if (i % 2 === 1) { - results.push(this.archiveTags[text]); - } else { - greentext = text[0] === '>'; - text = text.replace(/(\[\/?[a-z]+):lit(\])/g, '$1$2'); - text = (function() { - var len2, q, ref, results1; - ref = text.split(/(>>(?:>\/[a-z\d]+\/)?\d+)/g); - results1 = []; - for (j = q = 0, len2 = ref.length; q < len2; j = ++q) { - text2 = ref[j]; - results1.push({ - innerHTML: (j % 2 ? "" + E(text2) + "" : E(text2)) - }); - } - return results1; - })(); - text = { - innerHTML: (greentext ? "" + E.cat(text) + "" : E.cat(text)) - }; - results.push(text); - } - } - return results; - }).call(this); - comment = { - innerHTML: E.cat(comment) - }; - this.threadID = +data.thread_num; - o = { - postID: this.postID, - threadID: this.threadID, - boardID: this.boardID, - isReply: this.postID !== this.threadID - }; - o.info = { - subject: data.title, - email: data.email, - name: data.name || '', - tripcode: data.trip, - capcode: (function() { - switch (data.capcode) { - case 'M': - return 'Mod'; - case 'A': - return 'Admin'; - case 'D': - return 'Developer'; - } - })(), - uniqueID: data.poster_hash, - flagCode: data.poster_country, - flag: data.poster_country_name, - dateUTC: data.timestamp, - dateText: data.fourchan_date, - commentHTML: comment - }; - if (o.info.capcode) { - delete o.info.uniqueID; - } - if ((ref = data.media) != null ? ref.media_filename : void 0) { - ref1 = data.media; - for (key in ref1) { - val = ref1[key]; - if (/_link$/.test(key) && (val != null ? val[0] : void 0) === '/') { - data.media[key] = url.split('/', 3).join('/') + val; - } - } - o.file = { - name: data.media.media_filename, - url: data.media.media_link || data.media.remote_media_link || (location.protocol + "//i.4cdn.org/" + this.boardID + "/" + (encodeURIComponent(data.media[this.boardID === 'f' ? 'media_filename' : 'media_orig']))), - height: data.media.media_h, - width: data.media.media_w, - MD5: data.media.media_hash, - size: $.bytesToString(data.media.media_size), - thumbURL: data.media.thumb_link || (location.protocol + "//i.4cdn.org/" + this.boardID + "/" + data.media.preview_orig), - theight: data.media.preview_h, - twidth: data.media.preview_w, - isSpoiler: data.media.spoiler === '1' - }; - if (!/\.pdf$/.test(o.file.url)) { - o.file.dimensions = o.file.width + "x" + o.file.height; - } - if (this.boardID === 'f' && data.media.exif) { - o.file.tag = JSON.parse(data.media.exif).Tag; - } - } - board = g.boards[this.boardID] || new Board(this.boardID); - thread = g.threads[this.boardID + "." + this.threadID] || new Thread(this.threadID, board); - post = new Post(Build.post(o), thread, board); - post.kill(); - if (post.file) { - post.file.thumbURL = o.file.thumbURL; - } - post.isFetchedQuote = true; - Main.callbackNodes(Post, [post]); - return this.insert(post); - }; - - Fetcher.prototype.archiveTags = { - '\n': { - innerHTML: "
      " - }, - '[b]': { - innerHTML: "" - }, - '[/b]': { - innerHTML: "" - }, - '[spoiler]': { - innerHTML: "" - }, - '[/spoiler]': { - innerHTML: "" - }, - '[code]': { - innerHTML: "
      "
      -      },
      -      '[/code]': {
      -        innerHTML: "
      " - }, - '[moot]': { - innerHTML: "
      " - }, - '[/moot]': { - innerHTML: "
      " - }, - '[banned]': { - innerHTML: "" - }, - '[/banned]': { - innerHTML: "" - } - }; - - return Fetcher; - - })(); - - Polyfill = { - init: function() { - return this.toBlob(); - }, - toBlob: function() { - if (HTMLCanvasElement.prototype.toBlob) { - return; - } - HTMLCanvasElement.prototype.toBlob = function(cb, type, encoderOptions) { - var data, i, k, l, ref, ui8a, url; - if (type == null) { - type = 'image/png'; - } - url = this.toDataURL(type, encoderOptions); - data = atob(url.slice(url.indexOf(',') + 1)); - l = data.length; - ui8a = new Uint8Array(l); - for (i = k = 0, ref = l; k < ref; i = k += 1) { - ui8a[i] = data.charCodeAt(i); - } - return cb(new Blob([ui8a], { - type: type - })); - }; - return $.globalEval("HTMLCanvasElement.prototype.toBlob = (" + HTMLCanvasElement.prototype.toBlob + ");"); - } - }; - - Header = { - init: function() { - var barFixedToggler, barPositionToggler, box, customNavToggler, editCustomNav, footerToggler, headerToggler, linkJustifyToggler, menuButton, scrollHeaderToggler, shortcutToggler; - this.menu = new UI.Menu('header'); - menuButton = $.el('span', { - className: 'menu-button' - }); - $.extend(menuButton, { - innerHTML: "" - }); - box = UI.checkbox; - barFixedToggler = box('Fixed Header', 'Fixed Header'); - headerToggler = box('Header auto-hide', 'Auto-hide header'); - scrollHeaderToggler = box('Header auto-hide on scroll', 'Auto-hide header on scroll'); - barPositionToggler = box('Bottom Header', 'Bottom header'); - linkJustifyToggler = box('Centered links', 'Centered links'); - customNavToggler = box('Custom Board Navigation', 'Custom board navigation'); - footerToggler = box('Bottom Board List', 'Hide bottom board list'); - shortcutToggler = box('Shortcut Icons', 'Shortcut Icons'); - editCustomNav = $.el('a', { - textContent: 'Edit custom board navigation', - href: 'javascript:;' - }); - this.barFixedToggler = barFixedToggler.firstElementChild; - this.scrollHeaderToggler = scrollHeaderToggler.firstElementChild; - this.barPositionToggler = barPositionToggler.firstElementChild; - this.linkJustifyToggler = linkJustifyToggler.firstElementChild; - this.headerToggler = headerToggler.firstElementChild; - this.footerToggler = footerToggler.firstElementChild; - this.shortcutToggler = shortcutToggler.firstElementChild; - this.customNavToggler = customNavToggler.firstElementChild; - $.on(menuButton, 'click', this.menuToggle); - $.on(this.headerToggler, 'change', this.toggleBarVisibility); - $.on(this.barFixedToggler, 'change', this.toggleBarFixed); - $.on(this.barPositionToggler, 'change', this.toggleBarPosition); - $.on(this.scrollHeaderToggler, 'change', this.toggleHideBarOnScroll); - $.on(this.linkJustifyToggler, 'change', this.toggleLinkJustify); - $.on(this.footerToggler, 'change', this.toggleFooterVisibility); - $.on(this.shortcutToggler, 'change', this.toggleShortcutIcons); - $.on(this.customNavToggler, 'change', this.toggleCustomNav); - $.on(editCustomNav, 'click', this.editCustomNav); - this.setBarFixed(Conf['Fixed Header']); - this.setHideBarOnScroll(Conf['Header auto-hide on scroll']); - this.setBarVisibility(Conf['Header auto-hide']); - this.setLinkJustify(Conf['Centered links']); - this.setShortcutIcons(Conf['Shortcut Icons']); - this.setFooterVisibility(Conf['Bottom Board List']); - $.sync('Fixed Header', this.setBarFixed); - $.sync('Header auto-hide on scroll', this.setHideBarOnScroll); - $.sync('Bottom Header', this.setBarPosition); - $.sync('Shortcut Icons', this.setShortcutIcons); - $.sync('Header auto-hide', this.setBarVisibility); - $.sync('Centered links', this.setLinkJustify); - $.sync('Bottom Board List', this.setFooterVisibility); - this.addShortcut(menuButton); - this.menu.addEntry({ - el: $.el('span', { - textContent: 'Header' - }), - order: 107, - subEntries: [ - { - el: barFixedToggler - }, { - el: headerToggler - }, { - el: scrollHeaderToggler - }, { - el: barPositionToggler - }, { - el: linkJustifyToggler - }, { - el: footerToggler - }, { - el: shortcutToggler - }, { - el: customNavToggler - }, { - el: editCustomNav - } - ] - }); - $.on(window, 'load popstate', Header.hashScroll); - $.on(d, 'CreateNotification', this.createNotification); - $.asap((function() { - return d.body; - }), (function(_this) { - return function() { - if (!Main.isThisPageLegit()) { - return; - } - $.asap((function() { - return $.id('boardNavMobile') || d.readyState !== 'loading'; - }), function() { - var a, footer; - footer = $.id('boardNavDesktop').cloneNode(true); - footer.id = 'boardNavDesktopFoot'; - $('#navtopright', footer).id = 'navbotright'; - $('#settingsWindowLink', footer).id = 'settingsWindowLinkBot'; - Header.bottomBoardList = $('.boardList', footer); - if (a = $("a[href*='/" + g.BOARD + "/']", footer)) { - a.className = 'current'; - } - Main.ready(function() { - var absbot, oldFooter; - if ((oldFooter = $.id('boardNavDesktopFoot'))) { - return $.replace($('.boardList', oldFooter), Header.bottomBoardList); - } else if ((absbot = $.id('absbot'))) { - $.before(absbot, footer); - return $.globalEval('window.cloneTopNav = function() {};'); - } - }); - return Header.setBoardList(); - }); - $.prepend(d.body, _this.bar); - $.add(d.body, Header.hover); - _this.setBarPosition(Conf['Bottom Header']); - return _this; - }; - })(this)); - Main.ready((function(_this) { - return function() { - var cs; - if (g.VIEW === 'catalog' || !Conf['Disable Native Extension']) { - cs = $.el('a', { - href: 'javascript:;' - }); - if (g.VIEW === 'catalog') { - cs.title = cs.textContent = 'Catalog Settings'; - cs.className = 'fa fa-book'; - } else { - cs.title = cs.textContent = '4chan Settings'; - cs.className = 'fa fa-leaf'; - } - $.on(cs, 'click', function() { - return $.id('settingsWindowLink').click(); - }); - return _this.addShortcut(cs); - } - }; - })(this)); - return this.enableDesktopNotifications(); - }, - bar: $.el('div', { - id: 'header-bar' - }), - noticesRoot: $.el('div', { - id: 'notifications' - }), - shortcuts: $.el('span', { - id: 'shortcuts' - }), - hover: $.el('div', { - id: 'hoverUI' - }), - toggle: $.el('div', { - id: 'scroll-marker' - }), - setBoardList: function() { - var a, boardList, btn, chr, k, len1, len2, node, nodes, q, ref, ref1, spacer, span; - Header.boardList = boardList = $.el('span', { - id: 'board-list' - }); - $.extend(boardList, { - innerHTML: "" - }); - btn = $('.hide-board-list-button', boardList); - $.on(btn, 'click', Header.toggleBoardList); - nodes = []; - spacer = function() { - return $.el('span', { - className: 'spacer' - }); - }; - ref = $('#boardNavDesktop > .boardList').childNodes; - for (k = 0, len1 = ref.length; k < len1; k++) { - node = ref[k]; - switch (node.nodeName) { - case '#text': - ref1 = node.nodeValue; - for (q = 0, len2 = ref1.length; q < len2; q++) { - chr = ref1[q]; - span = $.el('span', { - textContent: chr - }); - if (chr === ' ') { - span.className = 'space'; - } - if (chr === ']') { - nodes.push(spacer()); - } - nodes.push(span); - if (chr === '[') { - nodes.push(spacer()); - } - } - break; - case 'A': - a = node.cloneNode(true); - if (a.pathname.split('/')[1] === g.BOARD.ID) { - a.className = 'current'; - } - nodes.push(a); - } - } - $.add($('.boardList', boardList), nodes); - $.add(Header.bar, [Header.boardList, Header.shortcuts, Header.noticesRoot, Header.toggle]); - Header.setCustomNav(Conf['Custom Board Navigation']); - Header.generateBoardList(Conf['boardnav']); - $.sync('Custom Board Navigation', Header.setCustomNav); - return $.sync('boardnav', Header.generateBoardList); - }, - generateBoardList: function(boardnav) { - var as, list, nodes, re, t; - list = $('#custom-board-list', Header.boardList); - $.rmAll(list); - if (!boardnav) { - return; - } - boardnav = boardnav.replace(/(\r\n|\n|\r)/g, ' '); - as = $$('#full-board-list a[title]', Header.boardList); - re = /[\w@]+(-(all|title|replace|full|index|catalog|archive|expired|(mode|sort|text):"[^"]+"(,"[^"]+")?))*|[^\w@]+/g; - nodes = (function() { - var k, len1, ref, results; - ref = boardnav.match(re); - results = []; - for (k = 0, len1 = ref.length; k < len1; k++) { - t = ref[k]; - results.push(Header.mapCustomNavigation(t, as)); - } - return results; - })(); - $.add(list, nodes); - return $.ready(CatalogLinks.initBoardList); - }, - mapCustomNavigation: function(t, as) { - var a, boardID, href, indexOptions, m, text, url; - if (/^[^\w@]/.test(t)) { - return $.tn(t); - } - text = url = null; - t = t.replace(/-text:"([^"]+)"(?:,"([^"]+)")?/g, function(m0, m1, m2) { - text = m1; - url = m2; - return ''; - }); - indexOptions = []; - t = t.replace(/-(?:mode|sort):"([^"]+)"/g, function(m0, m1) { - indexOptions.push(m1.toLowerCase().replace(/\ /g, '-')); - return ''; - }); - indexOptions = indexOptions.join('/'); - if (/^toggle-all/.test(t)) { - a = $.el('a', { - className: 'show-board-list-button', - textContent: text || '+', - href: 'javascript:;' - }); - $.on(a, 'click', Header.toggleBoardList); - return a; - } - if (/^external/.test(t)) { - a = $.el('a', { - href: url || 'javascript:;', - textContent: text || '+', - className: 'external' - }); - return a; - } - boardID = t.split('-')[0]; - if (boardID === 'current') { - boardID = g.BOARD.ID; - } - a = (function() { - var k, len1, ref; - if (boardID === '@') { - return $.el('a', { - href: 'https://twitter.com/4chan', - title: '4chan Twitter', - textContent: '@' - }); - } - for (k = 0, len1 = as.length; k < len1; k++) { - a = as[k]; - if (a.textContent === boardID) { - return a.cloneNode(true); - } - } - a = $.el('a', { - href: "/" + boardID + "/", - textContent: boardID - }); - if ((ref = g.VIEW) === 'catalog' || ref === 'archive') { - a.href += g.VIEW; - } - if (boardID === g.BOARD.ID) { - a.className = 'current'; - } - return a; - })(); - a.textContent = /-title/.test(t) || /-replace/.test(t) && boardID === g.BOARD.ID ? a.title || a.textContent : /-full/.test(t) ? ("/" + boardID + "/") + (a.title ? " - " + a.title : '') : text || boardID; - if (m = t.match(/-(index|catalog)/)) { - if (!(boardID === 'f' && m[1] === 'catalog')) { - a.dataset.only = m[1]; - a.href = CatalogLinks[m[1]](boardID); - if (m[1] === 'catalog') { - $.addClass(a, 'catalog'); - } - } else { - return a.firstChild; - } - } - if (Conf['JSON Index'] && indexOptions) { - a.dataset.indexOptions = indexOptions; - if (a.hostname === 'boards.4chan.org' && a.pathname.split('/')[2] === '') { - a.href += (a.hash ? '/' : '#') + indexOptions; - } - } - if (/-archive/.test(t)) { - if (href = Redirect.to('board', { - boardID: boardID - })) { - a.href = href; - } else { - return a.firstChild; - } - } - if (/-expired/.test(t)) { - if (boardID !== 'b' && boardID !== 'f' && boardID !== 'trash') { - a.href = "/" + boardID + "/archive"; - } else { - return a.firstChild; - } - } - if (boardID === '@') { - $.addClass(a, 'navSmall'); - } - return a; - }, - toggleBoardList: function() { - var bar, custom, full, showBoardList; - bar = Header.bar; - custom = $('#custom-board-list', bar); - full = $('#full-board-list', bar); - showBoardList = !full.hidden; - custom.hidden = !showBoardList; - return full.hidden = showBoardList; - }, - setLinkJustify: function(centered) { - Header.linkJustifyToggler.checked = centered; - if (centered) { - return $.addClass(doc, 'centered-links'); - } else { - return $.rmClass(doc, 'centered-links'); - } - }, - toggleLinkJustify: function() { - var centered; - $.event('CloseMenu'); - centered = this.nodeName === 'INPUT' ? this.checked : void 0; - Header.setLinkJustify(centered); - return $.set('Centered links', centered); - }, - setBarFixed: function(fixed) { - Header.barFixedToggler.checked = fixed; - if (fixed) { - $.addClass(doc, 'fixed'); - return $.addClass(Header.bar, 'dialog'); - } else { - $.rmClass(doc, 'fixed'); - return $.rmClass(Header.bar, 'dialog'); - } - }, - toggleBarFixed: function() { - $.event('CloseMenu'); - Header.setBarFixed(this.checked); - Conf['Fixed Header'] = this.checked; - return $.set('Fixed Header', this.checked); - }, - setShortcutIcons: function(show) { - Header.shortcutToggler.checked = show; - if (show) { - return $.addClass(doc, 'shortcut-icons'); - } else { - return $.rmClass(doc, 'shortcut-icons'); - } - }, - toggleShortcutIcons: function() { - $.event('CloseMenu'); - Header.setShortcutIcons(this.checked); - Conf['Shortcut Icons'] = this.checked; - return $.set('Shortcut Icons', this.checked); - }, - setBarVisibility: function(hide) { - Header.headerToggler.checked = hide; - $.event('CloseMenu'); - (hide ? $.addClass : $.rmClass)(Header.bar, 'autohide'); - return (hide ? $.addClass : $.rmClass)(doc, 'autohide'); - }, - toggleBarVisibility: function() { - var hide, message; - hide = this.nodeName === 'INPUT' ? this.checked : !$.hasClass(Header.bar, 'autohide'); - Conf['Header auto-hide'] = hide; - $.set('Header auto-hide', hide); - Header.setBarVisibility(hide); - message = "The header bar will " + (hide ? 'automatically hide itself.' : 'remain visible.'); - return new Notice('info', message, 2); - }, - setHideBarOnScroll: function(hide) { - Header.scrollHeaderToggler.checked = hide; - if (hide) { - $.on(window, 'scroll', Header.hideBarOnScroll); - return; - } - $.off(window, 'scroll', Header.hideBarOnScroll); - $.rmClass(Header.bar, 'scroll'); - if (!Conf['Header auto-hide']) { - return $.rmClass(Header.bar, 'autohide'); - } - }, - toggleHideBarOnScroll: function() { - var hide; - hide = this.checked; - $.cb.checked.call(this); - return Header.setHideBarOnScroll(hide); - }, - hideBarOnScroll: function() { - var offsetY; - offsetY = window.pageYOffset; - if (offsetY > (Header.previousOffset || 0)) { - $.addClass(Header.bar, 'autohide', 'scroll'); - } else { - $.rmClass(Header.bar, 'autohide', 'scroll'); - } - return Header.previousOffset = offsetY; - }, - setBarPosition: function(bottom) { - var args; - Header.barPositionToggler.checked = bottom; - $.event('CloseMenu'); - args = bottom ? ['bottom-header', 'top-header', 'after'] : ['top-header', 'bottom-header', 'add']; - $.addClass(doc, args[0]); - $.rmClass(doc, args[1]); - return $[args[2]](Header.bar, Header.noticesRoot); - }, - toggleBarPosition: function() { - $.cb.checked.call(this); - return Header.setBarPosition(this.checked); - }, - setFooterVisibility: function(hide) { - Header.footerToggler.checked = hide; - return doc.classList.toggle('hide-bottom-board-list', hide); - }, - toggleFooterVisibility: function() { - var hide, message; - $.event('CloseMenu'); - hide = this.nodeName === 'INPUT' ? this.checked : $.hasClass(doc, 'hide-bottom-board-list'); - Header.setFooterVisibility(hide); - $.set('Bottom Board List', hide); - message = hide ? 'The bottom navigation will now be hidden.' : 'The bottom navigation will remain visible.'; - return new Notice('info', message, 2); - }, - setCustomNav: function(show) { - var btn, cust, full, ref; - Header.customNavToggler.checked = show; - cust = $('#custom-board-list', Header.bar); - full = $('#full-board-list', Header.bar); - btn = $('.hide-board-list-container', full); - return ref = show ? [false, true, false] : [true, false, true], cust.hidden = ref[0], full.hidden = ref[1], btn.hidden = ref[2], ref; - }, - toggleCustomNav: function() { - $.cb.checked.call(this); - return Header.setCustomNav(this.checked); - }, - editCustomNav: function() { - var settings; - Settings.open('Advanced'); - settings = $.id('fourchanx-settings'); - return $('[name=boardnav]', settings).focus(); - }, - hashScroll: function(e) { - var el, hash; - if (e) { - if (e.state) { - return; - } - if (!history.state) { - history.replaceState({}, ''); - } - } - if ((hash = location.hash.slice(1))) { - ReplyPruning.showIfHidden(hash); - if ((el = $.id(hash))) { - return $.queueTask(function() { - return Header.scrollTo(el); - }); - } - } - }, - scrollTo: function(root, down, needed) { - var height, x; - if (!root.offsetParent) { - return; - } - if (down) { - x = Header.getBottomOf(root); - if (Conf['Fixed Header'] && Conf['Header auto-hide on scroll'] && Conf['Bottom header']) { - height = Header.bar.getBoundingClientRect().height; - if (x <= 0) { - if (!Header.isHidden()) { - x += height; - } - } else { - if (Header.isHidden()) { - x -= height; - } - } - } - if (!(needed && x >= 0)) { - return window.scrollBy(0, -x); - } - } else { - x = Header.getTopOf(root); - if (Conf['Fixed Header'] && Conf['Header auto-hide on scroll'] && !Conf['Bottom header']) { - height = Header.bar.getBoundingClientRect().height; - if (x >= 0) { - if (!Header.isHidden()) { - x += height; - } - } else { - if (Header.isHidden()) { - x -= height; - } - } - } - if (!(needed && x >= 0)) { - return window.scrollBy(0, x); - } - } - }, - scrollToIfNeeded: function(root, down) { - return Header.scrollTo(root, down, true); - }, - getTopOf: function(root) { - var headRect, top; - top = root.getBoundingClientRect().top; - if (Conf['Fixed Header'] && !Conf['Bottom Header']) { - headRect = Header.toggle.getBoundingClientRect(); - top -= headRect.top + headRect.height; - } - return top; - }, - getBottomOf: function(root) { - var bottom, clientHeight, headRect; - clientHeight = doc.clientHeight; - bottom = clientHeight - root.getBoundingClientRect().bottom; - if (Conf['Fixed Header'] && Conf['Bottom Header']) { - headRect = Header.toggle.getBoundingClientRect(); - bottom -= clientHeight - headRect.bottom + headRect.height; - } - return bottom; - }, - isNodeVisible: function(node) { - var height; - if (d.hidden || !doc.contains(node)) { - return false; - } - height = node.getBoundingClientRect().height; - return Header.getTopOf(node) + height >= 0 && Header.getBottomOf(node) + height >= 0; - }, - isHidden: function() { - var top; - top = Header.bar.getBoundingClientRect().top; - if (Conf['Bottom header']) { - return top === doc.clientHeight; - } else { - return top < 0; - } - }, - addShortcut: function(el) { - var shortcut; - shortcut = $.el('span', { - className: 'shortcut brackets-wrap' - }); - $.add(shortcut, el); - return $.prepend(Header.shortcuts, shortcut); - }, - rmShortcut: function(el) { - return $.rm(el.parentElement); - }, - menuToggle: function(e) { - return Header.menu.toggle(e, this, g); - }, - createNotification: function(e) { - var content, lifetime, notice, ref, type; - ref = e.detail, type = ref.type, content = ref.content, lifetime = ref.lifetime; - return notice = new Notice(type, content, lifetime); - }, - areNotificationsEnabled: false, - enableDesktopNotifications: function() { - var authorize, disable, el, notice, ref; - if (!(window.Notification && Conf['Desktop Notifications'])) { - return; - } - switch (Notification.permission) { - case 'granted': - Header.areNotificationsEnabled = true; - return; - case 'denied': - return; - } - el = $.el('span', { - innerHTML: "4chan X needs your permission to show desktop notifications. [FAQ]
      or " - }); - ref = $$('button', el), authorize = ref[0], disable = ref[1]; - $.on(authorize, 'click', function() { - return Notification.requestPermission(function(status) { - Header.areNotificationsEnabled = status === 'granted'; - if (status === 'default') { - return; - } - return notice.close(); - }); - }); - $.on(disable, 'click', function() { - $.set('Desktop Notifications', false); - return notice.close(); - }); - return notice = new Notice('info', el); - } - }; - - Index = { - showHiddenThreads: false, - changed: {}, - init: function() { - var anchorEntry, input, k, label, len1, len2, name, pinEntry, q, ref, ref1, ref2, ref3, ref4, ref5, ref6, refNavEntry, repliesEntry, select, sortEntry; - if (g.BOARD.ID === 'f' || !Conf['JSON Index'] || g.VIEW !== 'index') { - return; - } - CatalogThread.callbacks.push({ - name: 'Catalog Features', - cb: this.catalogNode - }); - this.search = ((ref = history.state) != null ? ref.searched : void 0) || ''; - if ((ref1 = history.state) != null ? ref1.mode : void 0) { - Conf['Index Mode'] = (ref2 = history.state) != null ? ref2.mode : void 0; - } - this.currentSort = (ref3 = history.state) != null ? ref3.sort : void 0; - this.currentSort || (this.currentSort = typeof Conf['Index Sort'] === 'object' ? Conf['Index Sort'][g.BOARD.ID] || 'bump' : Conf['Index Sort']); - this.currentPage = this.getCurrentPage(); - this.processHash(); - $.addClass(doc, 'index-loading', (Conf['Index Mode'].replace(/\ /g, '-')) + "-mode"); - $.on(window, 'popstate', this.cb.popstate); - $.on(d, 'scroll', Index.scroll); - this.button = $.el('a', { - className: 'index-refresh-shortcut fa fa-refresh', - title: 'Refresh', - href: 'javascript:;', - textContent: 'Refresh Index' - }); - $.on(this.button, 'click', function() { - return Index.update(); - }); - Header.addShortcut(this.button, 1); - repliesEntry = { - el: UI.checkbox('Show Replies', 'Show replies') - }; - sortEntry = { - el: UI.checkbox('Per-Board Sort Type', 'Per-board sort type', typeof Conf['Index Sort'] === 'object') - }; - pinEntry = { - el: UI.checkbox('Pin Watched Threads', 'Pin watched threads') - }; - anchorEntry = { - el: UI.checkbox('Anchor Hidden Threads', 'Anchor hidden threads') - }; - refNavEntry = { - el: UI.checkbox('Refreshed Navigation', 'Refreshed navigation') - }; - sortEntry.el.title = 'Set the sorting order of each board independently.'; - pinEntry.el.title = 'Move watched threads to the start of the index.'; - anchorEntry.el.title = 'Move hidden threads to the end of the index.'; - refNavEntry.el.title = 'Refresh index when navigating through pages.'; - ref4 = [repliesEntry, pinEntry, anchorEntry, refNavEntry]; - for (k = 0, len1 = ref4.length; k < len1; k++) { - label = ref4[k]; - input = label.el.firstChild; - name = input.name; - $.on(input, 'change', $.cb.checked); - switch (name) { - case 'Show Replies': - $.on(input, 'change', this.cb.replies); - break; - case 'Pin Watched Threads': - case 'Anchor Hidden Threads': - $.on(input, 'change', this.cb.resort); - } - } - $.on(sortEntry.el.firstChild, 'change', this.cb.perBoardSort); - Header.menu.addEntry({ - el: $.el('span', { - textContent: 'Index Navigation' - }), - order: 100, - subEntries: [repliesEntry, sortEntry, pinEntry, anchorEntry, refNavEntry] - }); - this.navLinks = $.el('div', { - className: 'navLinks json-index' - }); - $.extend(this.navLinks, { - innerHTML: "Index Catalog Archive Bottom ×" - }); - $('.cataloglink a', this.navLinks).href = CatalogLinks.catalog(); - if ((ref5 = g.BOARD.ID) === 'b' || ref5 === 'trash') { - $('.archlistlink', this.navLinks).hidden = true; - } - $.on($('#index-last-refresh a', this.navLinks), 'click', this.cb.refreshFront); - this.searchInput = $('#index-search', this.navLinks); - this.setupSearch(); - $.on(this.searchInput, 'input', this.onSearchInput); - $.on($('#index-search-clear', this.navLinks), 'click', this.clearSearch); - this.hideLabel = $('#hidden-label', this.navLinks); - $.on($('#hidden-toggle a', this.navLinks), 'click', this.cb.toggleHiddenThreads); - this.selectMode = $('#index-mode', this.navLinks); - this.selectSort = $('#index-sort', this.navLinks); - this.selectSize = $('#index-size', this.navLinks); - $.on(this.selectMode, 'change', this.cb.mode); - $.on(this.selectSort, 'change', this.cb.sort); - $.on(this.selectSize, 'change', $.cb.value); - $.on(this.selectSize, 'change', this.cb.size); - ref6 = [this.selectMode, this.selectSize]; - for (q = 0, len2 = ref6.length; q < len2; q++) { - select = ref6[q]; - select.value = Conf[select.name]; - } - this.selectSort.value = Index.currentSort; - this.root = $.el('div', { - className: 'board json-index' - }); - this.cb.size(); - this.pagelist = $.el('div', { - className: 'pagelist json-index' - }); - $.extend(this.pagelist, { - innerHTML: "
      " - }); - $('.cataloglink a', this.pagelist).href = CatalogLinks.catalog(); - $.on(this.pagelist, 'click', this.cb.pageNav); - this.update(true); - $.onExists(doc, 'title + *', function() { - return d.title = d.title.replace(/\ -\ Page\ \d+/, ''); - }); - $.onExists(doc, '.board > .thread > .postContainer, .board + *', function() { - var board, el, len3, len4, ref7, ref8, threadRoot, topNavPos, u, v; - Index.hat = $('.board > .thread > img:first-child'); - if (Index.hat) { - if (Index.nodes) { - ref7 = Index.nodes; - for (u = 0, len3 = ref7.length; u < len3; u++) { - threadRoot = ref7[u]; - $.prepend(threadRoot, Index.hat.cloneNode(false)); - } - } - $.addClass(doc, 'hats-enabled'); - $.addStyle(".catalog-thread::after {background-image: url(" + Index.hat.src + ");}"); - } - board = $('.board'); - $.replace(board, Index.root); - $.event('PostsInserted'); - try { - d.implementation.createDocument(null, null, null).appendChild(board); - } catch (_error) {} - ref8 = $$('.navLinks'); - for (v = 0, len4 = ref8.length; v < len4; v++) { - el = ref8[v]; - $.rm(el); - } - $.rm($.id('ctrl-top')); - topNavPos = $.id('delform').previousElementSibling; - $.before(topNavPos, $.el('hr')); - return $.before(topNavPos, Index.navLinks); - }); - return Main.ready(function() { - var pagelist; - if ((pagelist = $('.pagelist'))) { - $.replace(pagelist, Index.pagelist); - } - return $.rmClass(doc, 'index-loading'); - }); - }, - scroll: function() { - var nodes, pageNum; - if (Index.req || !Index.liveThreadData || Conf['Index Mode'] !== 'infinite' || (window.scrollY <= doc.scrollHeight - (300 + window.innerHeight))) { - return; - } - if (Index.pageNum == null) { - Index.pageNum = Index.currentPage; - } - pageNum = ++Index.pageNum; - if (pageNum > Index.pagesNum) { - return Index.endNotice(); - } - nodes = Index.buildSinglePage(pageNum); - if (Conf['Show Replies']) { - Index.buildReplies(nodes); - } - return Index.buildStructure(nodes); - }, - endNotice: (function() { - var notify, reset; - notify = false; - reset = function() { - return notify = false; - }; - return function() { - if (notify) { - return; - } - notify = true; - new Notice('info', "Last page reached.", 2); - return setTimeout(reset, 3 * $.SECOND); - }; - })(), - menu: { - init: function() { - if (g.VIEW !== 'index' || !Conf['JSON Index'] || !Conf['Menu'] || !Conf['Thread Hiding Link'] || g.BOARD.ID === 'f') { - return; - } - return Menu.menu.addEntry({ - el: $.el('a', { - href: 'javascript:;', - className: 'has-shortcut-text' - }, { - innerHTML: "Shift+click" - }), - order: 20, - open: function(arg) { - var thread; - thread = arg.thread; - if (Conf['Index Mode'] !== 'catalog') { - return false; - } - this.el.firstElementChild.textContent = thread.isHidden ? 'Unhide' : 'Hide'; - if (this.cb) { - $.off(this.el, 'click', this.cb); - } - this.cb = function() { - $.event('CloseMenu'); - return Index.toggleHide(thread); - }; - $.on(this.el, 'click', this.cb); - return true; - } - }); - } - }, - catalogNode: function() { - return $.on(this.nodes.thumb.parentNode, 'click', Index.onClick); - }, - onClick: function(e) { - var thread; - if (e.button !== 0) { - return; - } - thread = g.threads[this.parentNode.dataset.fullID]; - if (e.shiftKey) { - Index.toggleHide(thread); - } else { - return; - } - return e.preventDefault(); - }, - toggleHide: function(thread) { - $.rm(thread.catalogView.nodes.root); - if (Index.showHiddenThreads) { - ThreadHiding.show(thread); - if (!ThreadHiding.db.get({ - boardID: thread.board.ID, - threadID: thread.ID - })) { - return; - } - } else { - ThreadHiding.hide(thread); - } - return ThreadHiding.saveHiddenState(thread); - }, - cycleSortType: function() { - var i, k, len1, type, types; - types = slice.call(Index.selectSort.options).filter(function(option) { - return !option.disabled; - }); - for (i = k = 0, len1 = types.length; k < len1; i = ++k) { - type = types[i]; - if (type.selected) { - break; - } - } - types[(i + 1) % types.length].selected = true; - return $.event('change', null, Index.selectSort); - }, - cb: { - toggleHiddenThreads: function() { - $('#hidden-toggle a', Index.navLinks).textContent = (Index.showHiddenThreads = !Index.showHiddenThreads) ? 'Hide' : 'Show'; - Index.sort(); - return Index.buildIndex(); - }, - mode: function() { - Index.pushState({ - mode: this.value - }); - return Index.pageLoad(false); - }, - sort: function() { - Index.pushState({ - sort: this.value - }); - return Index.pageLoad(false); - }, - resort: function() { - Index.sort(); - return Index.buildIndex(); - }, - perBoardSort: function() { - Conf['Index Sort'] = this.checked ? {} : ''; - return Index.saveSort(); - }, - size: function(e) { - if (Conf['Index Mode'] !== 'catalog') { - $.rmClass(Index.root, 'catalog-small'); - $.rmClass(Index.root, 'catalog-large'); - } else if (Conf['Index Size'] === 'small') { - $.addClass(Index.root, 'catalog-small'); - $.rmClass(Index.root, 'catalog-large'); - } else { - $.addClass(Index.root, 'catalog-large'); - $.rmClass(Index.root, 'catalog-small'); - } - if (e) { - return Index.buildIndex(); - } - }, - replies: function() { - Index.buildThreads(); - Index.sort(); - return Index.buildIndex(); - }, - popstate: function(e) { - var mode, nCommands, page, ref, searched, sort; - if (e != null ? e.state : void 0) { - ref = e.state, searched = ref.searched, mode = ref.mode, sort = ref.sort; - page = Index.getCurrentPage(); - Index.setState({ - search: searched, - mode: mode, - sort: sort, - page: page - }); - return Index.pageLoad(false); - } else { - nCommands = Index.processHash(); - if (Conf['Refreshed Navigation'] && nCommands) { - return Index.update(); - } else { - return Index.pageLoad(); - } - } - }, - pageNav: function(e) { - var a; - if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0) { - return; - } - switch (e.target.nodeName) { - case 'BUTTON': - e.target.blur(); - a = e.target.parentNode; - break; - case 'A': - a = e.target; - break; - default: - return; - } - if (a.textContent === 'Catalog') { - return; - } - e.preventDefault(); - return Index.userPageNav(+a.pathname.split(/\/+/)[2] || 1); - }, - refreshFront: function() { - Index.pushState({ - page: 1 - }); - return Index.update(); - } - }, - scrollToIndex: function() { - return Header.scrollToIfNeeded((Index.navLinks.getBoundingClientRect().height ? Index.navLinks : Index.root)); - }, - getCurrentPage: function() { - return +window.location.pathname.split(/\/+/)[2] || 1; - }, - userPageNav: function(page) { - Index.pushState({ - page: page - }); - if (Conf['Refreshed Navigation']) { - return Index.update(); - } else { - return Index.pageLoad(); - } - }, - hashCommands: { - mode: { - 'paged': 'paged', - 'infinite-scrolling': 'infinite', - 'infinite': 'infinite', - 'all-threads': 'all pages', - 'all-pages': 'all pages', - 'catalog': 'catalog' - }, - sort: { - 'bump-order': 'bump', - 'last-reply': 'lastreply', - 'last-long-reply': 'lastlong', - 'creation-date': 'birth', - 'reply-count': 'replycount', - 'file-count': 'filecount' - } - }, - processHash: function() { - var command, commands, hash, k, leftover, len1, mode, ref, sort, state; - hash = ((ref = location.href.match(/#.*/)) != null ? ref[0] : void 0) || ''; - state = { - replace: true - }; - commands = hash.slice(1).split('/'); - leftover = []; - for (k = 0, len1 = commands.length; k < len1; k++) { - command = commands[k]; - if ((mode = Index.hashCommands.mode[command])) { - state.mode = mode; - } else if (command === 'index') { - state.mode = Conf['Previous Index Mode']; - state.page = 1; - } else if ((sort = Index.hashCommands.sort[command])) { - state.sort = sort; - } else if (/^s=/.test(command)) { - state.search = decodeURIComponent(command.slice(2)).replace(/\+/g, ' ').trim(); - } else { - leftover.push(command); - } - } - hash = leftover.join('/'); - if (hash) { - state.hash = "#" + hash; - } - Index.pushState(state); - return commands.length - leftover.length; - }, - pushState: function(state) { - var hash, pageBeforeSearch, pathname, ref, replace, search; - search = state.search, hash = state.hash, replace = state.replace; - pageBeforeSearch = (ref = history.state) != null ? ref.oldpage : void 0; - if ((search != null) && search !== Index.search) { - state.page = search ? 1 : pageBeforeSearch || 1; - if (!search) { - pageBeforeSearch = void 0; - } else if (!Index.search) { - pageBeforeSearch = Index.currentPage; - } - } - Index.setState(state); - pathname = Index.currentPage === 1 ? "/" + g.BOARD + "/" : "/" + g.BOARD + "/" + Index.currentPage; - hash || (hash = ''); - return history[replace ? 'replaceState' : 'pushState']({ - mode: Conf['Index Mode'], - sort: Index.currentSort, - searched: Index.search, - oldpage: pageBeforeSearch - }, '', location.protocol + "//" + location.host + pathname + hash); - }, - setState: function(arg) { - var hash, mode, page, ref, search, sort; - search = arg.search, mode = arg.mode, sort = arg.sort, page = arg.page, hash = arg.hash; - if ((search != null) && search !== Index.search) { - Index.changed.search = true; - Index.search = search; - } - if ((mode != null) && mode !== Conf['Index Mode']) { - Index.changed.mode = true; - Conf['Index Mode'] = mode; - $.set('Index Mode', mode); - if (!(mode === 'catalog' || Conf['Previous Index Mode'] === mode)) { - Conf['Previous Index Mode'] = mode; - $.set('Previous Index Mode', mode); - } - } - if ((sort != null) && sort !== Index.currentSort) { - Index.changed.sort = true; - Index.currentSort = sort; - Index.saveSort(); - } - if ((ref = Conf['Index Mode']) === 'all pages' || ref === 'catalog') { - page = 1; - } - if ((page != null) && page !== Index.currentPage) { - Index.changed.page = true; - Index.currentPage = page; - } - if (hash != null) { - return Index.changed.hash = true; - } - }, - saveSort: function() { - if (typeof Conf['Index Sort'] === 'object') { - Conf['Index Sort'][g.BOARD.ID] = Index.currentSort; - } else { - Conf['Index Sort'] = Index.currentSort; - } - return $.set('Index Sort', Conf['Index Sort']); - }, - pageLoad: function(scroll) { - var hash, mode, page, ref, search, sort, threads; - if (scroll == null) { - scroll = true; - } - if (!Index.liveThreadData) { - return; - } - ref = Index.changed, threads = ref.threads, search = ref.search, mode = ref.mode, sort = ref.sort, page = ref.page, hash = ref.hash; - if (threads || search || sort) { - Index.sort(); - } - if (threads || search) { - Index.buildPagelist(); - } - if (search) { - Index.setupSearch(); - } - if (mode) { - Index.setupMode(); - } - if (sort) { - Index.setupSort(); - } - if (threads || search || mode || page || sort) { - Index.buildIndex(); - } - if (threads || search || mode || page) { - Index.setPage(); - } - if (scroll && !hash) { - Index.scrollToIndex(); - } - if (hash) { - Header.hashScroll(); - } - return Index.changed = {}; - }, - setupMode: function() { - var k, len1, mode, ref; - ref = ['paged', 'infinite', 'all pages', 'catalog']; - for (k = 0, len1 = ref.length; k < len1; k++) { - mode = ref[k]; - $[mode === Conf['Index Mode'] ? 'addClass' : 'rmClass'](doc, (mode.replace(/\ /g, '-')) + "-mode"); - } - Index.selectMode.value = Conf['Index Mode']; - Index.cb.size(); - Index.showHiddenThreads = false; - return $('#hidden-toggle a', Index.navLinks).textContent = 'Show'; - }, - setupSort: function() { - return Index.selectSort.value = Index.currentSort; - }, - getPagesNum: function() { - if (Index.search) { - return Math.ceil(Index.sortedNodes.length / Index.threadsNumPerPage); - } else { - return Index.pagesNum; - } - }, - getMaxPageNum: function() { - return Math.max(1, Index.getPagesNum()); - }, - buildPagelist: function() { - var a, i, k, maxPageNum, nodes, pagesRoot, ref; - pagesRoot = $('.pages', Index.pagelist); - maxPageNum = Index.getMaxPageNum(); - if (pagesRoot.childElementCount !== maxPageNum) { - nodes = []; - for (i = k = 1, ref = maxPageNum; k <= ref; i = k += 1) { - a = $.el('a', { - textContent: i, - href: i === 1 ? './' : i - }); - nodes.push($.tn('['), a, $.tn('] ')); - } - $.rmAll(pagesRoot); - return $.add(pagesRoot, nodes); - } - }, - setPage: function() { - var a, href, maxPageNum, next, pageNum, pagesRoot, prev, strong; - pageNum = Index.currentPage; - maxPageNum = Index.getMaxPageNum(); - pagesRoot = $('.pages', Index.pagelist); - prev = pagesRoot.previousSibling.firstChild; - next = pagesRoot.nextSibling.firstChild; - href = Math.max(pageNum - 1, 1); - prev.href = href === 1 ? './' : href; - prev.firstChild.disabled = href === pageNum; - href = Math.min(pageNum + 1, maxPageNum); - next.href = href === 1 ? './' : href; - next.firstChild.disabled = href === pageNum; - if (strong = $('strong', pagesRoot)) { - if (+strong.textContent === pageNum) { - return; - } - $.replace(strong, strong.firstChild); - } else { - strong = $.el('strong'); - } - a = pagesRoot.children[pageNum - 1]; - $.before(a, strong); - return $.add(strong, a); - }, - updateHideLabel: function() { - var hiddenCount, ref, ref1, thread, threadID; - hiddenCount = 0; - ref = g.BOARD.threads; - for (threadID in ref) { - thread = ref[threadID]; - if (thread.isHidden) { - if (ref1 = thread.ID, indexOf.call(Index.liveThreadIDs, ref1) >= 0) { - hiddenCount++; - } - } - } - if (!hiddenCount) { - Index.hideLabel.hidden = true; - if (Index.showHiddenThreads) { - Index.cb.toggleHiddenThreads(); - } - return; - } - Index.hideLabel.hidden = false; - return $('#hidden-count', Index.navLinks).textContent = hiddenCount === 1 ? '1 hidden thread' : hiddenCount + " hidden threads"; - }, - update: function(firstTime) { - var now, ref, ref1; - if ((ref = Index.req) != null) { - ref.abort(); - } - if ((ref1 = Index.notice) != null) { - ref1.close(); - } - if (Conf['Index Refresh Notifications'] && d.readyState !== 'loading') { - Index.notice = new Notice('info', 'Refreshing index...'); - } else { - now = Date.now(); - $.ready(function() { - return Index.nTimeout = setTimeout((function() { - if (Index.req && !Index.notice) { - return Index.notice = new Notice('info', 'Refreshing index...'); - } - }), 3 * $.SECOND - (Date.now() - now)); - }); - } - if (!firstTime && d.readyState !== 'loading' && !$('.board + *')) { - location.reload(); - return; - } - Index.req = $.ajax("//a.4cdn.org/" + g.BOARD + "/catalog.json", { - onabort: Index.load, - onloadend: Index.load - }, { - whenModified: 'Index' - }); - return $.addClass(Index.button, 'fa-spin'); - }, - load: function(e) { - var err, nTimeout, notice, ref, req, timeEl; - $.rmClass(Index.button, 'fa-spin'); - req = Index.req, notice = Index.notice, nTimeout = Index.nTimeout; - if (nTimeout) { - clearTimeout(nTimeout); - } - delete Index.nTimeout; - delete Index.req; - delete Index.notice; - if (e.type === 'abort') { - req.onloadend = null; - if (notice != null) { - notice.close(); - } - return; - } - if ((ref = req.status) !== 200 && ref !== 304) { - err = "Index refresh failed. Error " + req.statusText + " (" + req.status + ")"; - if (notice) { - notice.setType('warning'); - notice.el.lastElementChild.textContent = err; - setTimeout(notice.close, $.SECOND); - } else { - new Notice('warning', err, 1); - } - return; - } - try { - if (req.status === 200) { - Index.parse(req.response); - } else if (req.status === 304) { - Index.pageLoad(); - } - } catch (_error) { - err = _error; - c.error("Index failure: " + err.message, err.stack); - if (notice) { - notice.setType('error'); - notice.el.lastElementChild.textContent = 'Index refresh failed.'; - setTimeout(notice.close, $.SECOND); - } else { - new Notice('error', 'Index refresh failed.', 1); - } - return; - } - if (notice) { - if (Conf['Index Refresh Notifications']) { - notice.setType('success'); - notice.el.lastElementChild.textContent = 'Index refreshed!'; - setTimeout(notice.close, $.SECOND); - } else { - notice.close(); - } - } - timeEl = $('#index-last-refresh time', Index.navLinks); - timeEl.dataset.utc = Date.parse(req.getResponseHeader('Last-Modified')); - return RelativeDates.update(timeEl); - }, - parse: function(pages) { - $.cleanCache(function(url) { - return /^\/\/a\.4cdn\.org\//.test(url); - }); - Index.parseThreadList(pages); - Index.buildThreads(); - Index.changed.threads = true; - return Index.pageLoad(); - }, - parseThreadList: function(pages) { - var ref; - Index.pagesNum = pages.length; - Index.threadsNumPerPage = ((ref = pages[0]) != null ? ref.threads.length : void 0) || 1; - Index.liveThreadData = pages.reduce((function(arr, next) { - return arr.concat(next.threads); - }), []); - Index.liveThreadIDs = Index.liveThreadData.map(function(data) { - return data.no; - }); - g.BOARD.threads.forEach(function(thread) { - var ref1; - if (ref1 = thread.ID, indexOf.call(Index.liveThreadIDs, ref1) < 0) { - return thread.collect(); - } - }); - }, - buildThreads: function() { - var err, errors, i, k, len1, posts, ref, thread, threadData, threadRoot, threads; - if (!Index.liveThreadData) { - return; - } - Index.nodes = []; - threads = []; - posts = []; - ref = Index.liveThreadData; - for (i = k = 0, len1 = ref.length; k < len1; i = ++k) { - threadData = ref[i]; - try { - threadRoot = Build.thread(g.BOARD, threadData); - if (Index.hat) { - $.prepend(threadRoot, Index.hat.cloneNode(false)); - } - if (thread = g.BOARD.threads[threadData.no]) { - thread.setCount('post', threadData.replies + 1, threadData.bumplimit); - thread.setCount('file', threadData.images + !!threadData.ext, threadData.imagelimit); - thread.setStatus('Sticky', !!threadData.sticky); - thread.setStatus('Closed', !!threadData.closed); - } else { - thread = new Thread(threadData.no, g.BOARD); - threads.push(thread); - } - Index.nodes.push(threadRoot); - if (!(thread.OP && !thread.OP.isFetchedQuote)) { - posts.push(new Post($('.opContainer', threadRoot), thread, g.BOARD)); - } - thread.setPage(Math.floor(i / Index.threadsNumPerPage) + 1); - } catch (_error) { - err = _error; - if (!errors) { - errors = []; - } - errors.push({ - message: "Parsing of Thread No." + thread + " failed. Thread will be skipped.", - error: err - }); - } - } - if (errors) { - Main.handleErrors(errors); - } - $.nodes(Index.nodes); - Main.callbackNodes(Thread, threads); - Main.callbackNodes(Post, posts); - Index.updateHideLabel(); - return $.event('IndexRefresh'); - }, - buildReplies: function(threadRoots) { - var data, err, errors, i, k, lastReplies, len1, len2, node, nodes, post, posts, q, thread, threadRoot; - posts = []; - for (k = 0, len1 = threadRoots.length; k < len1; k++) { - threadRoot = threadRoots[k]; - thread = Get.threadFromRoot(threadRoot); - i = Index.liveThreadIDs.indexOf(thread.ID); - if (!(lastReplies = Index.liveThreadData[i].last_replies)) { - continue; - } - nodes = []; - for (q = 0, len2 = lastReplies.length; q < len2; q++) { - data = lastReplies[q]; - if ((post = thread.posts[data.no]) && !post.isFetchedQuote) { - nodes.push(post.nodes.root); - continue; - } - nodes.push(node = Build.postFromObject(data, thread.board.ID)); - try { - posts.push(new Post(node, thread, thread.board)); - } catch (_error) { - err = _error; - if (!errors) { - errors = []; - } - errors.push({ - message: "Parsing of Post No." + data.no + " failed. Post will be skipped.", - error: err - }); - } - } - $.add(threadRoot, nodes); - } - if (errors) { - Main.handleErrors(errors); - } - return Main.callbackNodes(Post, posts); - }, - buildCatalogViews: function() { - var catalogThreads, k, len1, thread, threads; - threads = Index.sortedNodes.map(function(threadRoot) { - return Get.threadFromRoot(threadRoot); - }).filter(function(thread) { - return !thread.isHidden !== Index.showHiddenThreads; - }); - catalogThreads = []; - for (k = 0, len1 = threads.length; k < len1; k++) { - thread = threads[k]; - if (!thread.catalogView) { - catalogThreads.push(new CatalogThread(Build.catalogThread(thread), thread)); - } - } - Main.callbackNodes(CatalogThread, catalogThreads); - return threads.map(function(thread) { - return thread.catalogView.nodes.root; - }); - }, - sizeCatalogViews: function(nodes) { - var height, k, len1, node, ratio, ref, size, thumb, width; - size = Conf['Index Size'] === 'small' ? 150 : 250; - for (k = 0, len1 = nodes.length; k < len1; k++) { - node = nodes[k]; - thumb = $('.catalog-thumb', node); - ref = thumb.dataset, width = ref.width, height = ref.height; - if (!width) { - continue; - } - ratio = size / Math.max(width, height); - thumb.style.width = width * ratio + 'px'; - thumb.style.height = height * ratio + 'px'; - } - }, - sort: function() { - var k, lastlong, len1, liveThreadData, liveThreadIDs, nodes, sortedNodes, sortedThreadIDs, threadID; - liveThreadIDs = Index.liveThreadIDs, liveThreadData = Index.liveThreadData; - if (!liveThreadData) { - return; - } - sortedThreadIDs = (function() { - switch (Index.currentSort) { - case 'lastreply': - return slice.call(liveThreadData).sort(function(a, b) { - var num; - if ((num = a.last_replies)) { - a = num[num.length - 1]; - } - if ((num = b.last_replies)) { - b = num[num.length - 1]; - } - return b.no - a.no; - }).map(function(post) { - return post.no; - }); - case 'lastlong': - lastlong = function(thread) { - var i, k, r, ref; - ref = thread.last_replies || []; - for (i = k = ref.length - 1; k >= 0; i = k += -1) { - r = ref[i]; - if (r.com && Build.parseComment(r.com).replace(/[^a-z]/ig, '').length >= 100) { - return r; - } - } - return thread; - }; - return slice.call(liveThreadData).sort(function(a, b) { - return lastlong(b).no - lastlong(a).no; - }).map(function(post) { - return post.no; - }); - case 'bump': - return liveThreadIDs; - case 'birth': - return slice.call(liveThreadIDs).sort(function(a, b) { - return b - a; - }); - case 'replycount': - return slice.call(liveThreadData).sort(function(a, b) { - return b.replies - a.replies; - }).map(function(post) { - return post.no; - }); - case 'filecount': - return slice.call(liveThreadData).sort(function(a, b) { - return b.images - a.images; - }).map(function(post) { - return post.no; - }); - } - })(); - Index.sortedNodes = sortedNodes = []; - nodes = Index.nodes; - for (k = 0, len1 = sortedThreadIDs.length; k < len1; k++) { - threadID = sortedThreadIDs[k]; - sortedNodes.push(nodes[Index.liveThreadIDs.indexOf(threadID)]); - } - if (Index.search && (nodes = Index.querySearch(Index.search))) { - Index.sortedNodes = nodes; - } - Index.sortOnTop(function(thread) { - return thread.isSticky; - }); - Index.sortOnTop(function(thread) { - return thread.isOnTop || Conf['Pin Watched Threads'] && ThreadWatcher.isWatched(thread); - }); - if (Conf['Anchor Hidden Threads']) { - return Index.sortOnTop(function(thread) { - return !thread.isHidden; - }); - } - }, - sortOnTop: function(match) { - var bottomNodes, k, len1, ref, threadRoot, topNodes; - topNodes = []; - bottomNodes = []; - ref = Index.sortedNodes; - for (k = 0, len1 = ref.length; k < len1; k++) { - threadRoot = ref[k]; - (match(Get.threadFromRoot(threadRoot)) ? topNodes : bottomNodes).push(threadRoot); - } - return Index.sortedNodes = topNodes.concat(bottomNodes); - }, - buildIndex: function() { - var i, nodes, page, post; - if (!Index.liveThreadData) { - return; - } - switch (Conf['Index Mode']) { - case 'all pages': - nodes = Index.sortedNodes; - break; - case 'catalog': - nodes = Index.buildCatalogViews(); - Index.sizeCatalogViews(nodes); - break; - default: - if (Index.followedThreadID != null) { - i = 0; - while (Index.followedThreadID !== Get.threadFromRoot(Index.sortedNodes[i]).ID) { - i++; - } - page = Math.floor(i / Index.threadsNumPerPage) + 1; - if (page !== Index.currentPage) { - Index.currentPage = page; - Index.pushState({ - page: page - }); - Index.setPage(); - } - } - nodes = Index.buildSinglePage(Index.currentPage); - } - delete Index.pageNum; - $.rmAll(Index.root); - $.rmAll(Header.hover); - if (Conf['Index Mode'] === 'catalog') { - return $.add(Index.root, nodes); - } else { - if (Conf['Show Replies']) { - Index.buildReplies(nodes); - } - Index.buildStructure(nodes); - if ((Index.followedThreadID != null) && (post = g.posts[g.BOARD + "." + Index.followedThreadID])) { - return Header.scrollTo(post.nodes.root); - } - } - }, - buildSinglePage: function(pageNum) { - var nodesPerPage, offset; - nodesPerPage = Index.threadsNumPerPage; - offset = nodesPerPage * (pageNum - 1); - return Index.sortedNodes.slice(offset, offset + nodesPerPage); - }, - buildStructure: function(nodes) { - var k, len1, node, thumb; - for (k = 0, len1 = nodes.length; k < len1; k++) { - node = nodes[k]; - if (thumb = $('img[data-src]', node)) { - thumb.src = thumb.dataset.src; - thumb.removeAttribute('data-src'); - } - $.add(Index.root, [node, $.el('hr')]); - } - if (doc.contains(Index.root)) { - $.event('PostsInserted'); - } - return ThreadHiding.onIndexBuild(nodes); - }, - clearSearch: function() { - Index.searchInput.value = ''; - Index.onSearchInput(); - return Index.searchInput.focus(); - }, - setupSearch: function() { - Index.searchInput.value = Index.search; - if (Index.search) { - return Index.searchInput.dataset.searching = 1; - } else { - return Index.searchInput.removeAttribute('data-searching'); - } - }, - onSearchInput: function() { - var search; - search = Index.searchInput.value.trim(); - if (search === Index.search) { - return; - } - Index.pushState({ - search: search, - replace: !!search === !!Index.search - }); - return Index.pageLoad(false); - }, - querySearch: function(query) { - var keywords; - if (!(keywords = query.toLowerCase().match(/\S+/g))) { - return; - } - return Index.sortedNodes.filter(function(threadRoot) { - return Index.searchMatch(Get.threadFromRoot(threadRoot), keywords); - }); - }, - searchMatch: function(thread, keywords) { - var file, info, k, key, keyword, len1, len2, q, ref, ref1, text; - ref = thread.OP, info = ref.info, file = ref.file; - text = []; - ref1 = ['comment', 'subject', 'name', 'tripcode', 'email']; - for (k = 0, len1 = ref1.length; k < len1; k++) { - key = ref1[k]; - if (key in info) { - text.push(info[key]); - } - } - if (file) { - text.push(file.name); - } - text = text.join(' ').toLowerCase(); - for (q = 0, len2 = keywords.length; q < len2; q++) { - keyword = keywords[q]; - if (-1 === text.indexOf(keyword)) { - return false; - } - } - return true; - } - }; - - Build = { - staticPath: '//s.4cdn.org/image/', - gifIcon: window.devicePixelRatio >= 2 ? '@2x.gif' : '.gif', - spoilerRange: {}, - unescape: function(text) { - if (text == null) { - return text; - } - return text.replace(/<[^>]*>/g, '').replace(/&(amp|#039|quot|lt|gt|#44);/g, function(c) { - return { - '&': '&', - ''': "'", - '"': '"', - '<': '<', - '>': '>', - ',': ',' - }[c]; - }); - }, - shortFilename: function(filename) { - var ext, threshold; - threshold = 30; - ext = filename.match(/\.?[^\.]*$/)[0]; - if (filename.length - ext.length > threshold) { - return filename.slice(0, threshold - 5) + "(...)" + ext; - } else { - return filename; - } - }, - spoilerThumb: function(boardID) { - var spoilerRange; - if (spoilerRange = Build.spoilerRange[boardID]) { - return Build.staticPath + "spoiler-" + boardID + (Math.floor(1 + spoilerRange * Math.random())) + ".png"; - } else { - return Build.staticPath + "spoiler.png"; - } - }, - sameThread: function(boardID, threadID) { - return g.VIEW === 'thread' && g.BOARD.ID === boardID && g.THREADID === +threadID; - }, - postURL: function(boardID, threadID, postID) { - if (Build.sameThread(boardID, threadID)) { - return "#p" + postID; - } else { - return "/" + boardID + "/thread/" + threadID + "#p" + postID; - } - }, - parseJSON: function(data, boardID) { - var o; - o = { - postID: data.no, - threadID: data.resto || data.no, - boardID: boardID, - isReply: !!data.resto, - isSticky: !!data.sticky, - isClosed: !!data.closed, - isArchived: !!data.archived, - fileDeleted: !!data.filedeleted - }; - o.info = { - subject: Build.unescape(data.sub), - email: Build.unescape(data.email), - name: Build.unescape(data.name) || '', - tripcode: data.trip, - uniqueID: data.id, - flagCode: data.country, - flag: Build.unescape(data.country_name), - dateUTC: data.time, - dateText: data.now, - commentHTML: { - innerHTML: data.com || '' - } - }; - if (data.capcode) { - o.info.capcode = data.capcode.replace(/_highlight$/, '').replace(/_/g, ' ').replace(/\b\w/g, function(c) { - return c.toUpperCase(); - }); - o.capcodeHighlight = /_highlight$/.test(data.capcode); - delete o.info.uniqueID; - } - if (data.ext) { - o.file = { - name: (Build.unescape(data.filename)) + data.ext, - url: boardID === 'f' ? location.protocol + "//i.4cdn.org/" + boardID + "/" + (encodeURIComponent(data.filename)) + data.ext : location.protocol + "//i.4cdn.org/" + boardID + "/" + data.tim + data.ext, - height: data.h, - width: data.w, - MD5: data.md5, - size: $.bytesToString(data.fsize), - thumbURL: location.protocol + "//i.4cdn.org/" + boardID + "/" + data.tim + "s.jpg", - theight: data.tn_h, - twidth: data.tn_w, - isSpoiler: !!data.spoiler, - tag: data.tag - }; - if (!/\.pdf$/.test(o.file.url)) { - o.file.dimensions = o.file.width + "x" + o.file.height; - } - } - return o; - }, - parseComment: function(html) { - html = html.replace(//gi, '\n').replace(/\n\nRolled [^<]*<\/b>/i, '').replace(/]*>/g, ''); - return Build.unescape(html); - }, - postFromObject: function(data, boardID, suppressThumb) { - var o; - o = Build.parseJSON(data, boardID); - return Build.post(o, suppressThumb); - }, - post: function(o, suppressThumb) { - var boardID, capcode, capcodeDescription, capcodeLC, capcodeLong, capcodePlural, commentHTML, container, dateText, dateUTC, email, file, fileBlock, fileThumb, fileURL, flag, flagCode, gifIcon, href, k, len1, match, name, postClass, postID, postInfo, postLink, protocol, quote, quoteLink, ref, ref1, shortFilename, staticPath, subject, threadID, tripcode, uniqueID, wholePost; - postID = o.postID, threadID = o.threadID, boardID = o.boardID, file = o.file; - ref = o.info, subject = ref.subject, email = ref.email, name = ref.name, tripcode = ref.tripcode, capcode = ref.capcode, uniqueID = ref.uniqueID, flagCode = ref.flagCode, flag = ref.flag, dateUTC = ref.dateUTC, dateText = ref.dateText, commentHTML = ref.commentHTML; - staticPath = Build.staticPath, gifIcon = Build.gifIcon; - - /* Post Info */ - if (capcode) { - capcodeLC = capcode.toLowerCase(); - if (capcode === 'Founder') { - capcodePlural = 'the Founder'; - capcodeDescription = "4chan's Founder"; - } else { - capcodeLong = { - 'Admin': 'Administrator', - 'Mod': 'Moderator' - }[capcode] || capcode; - capcodePlural = capcodeLong + "s"; - capcodeDescription = "a 4chan " + capcodeLong; - } - } - postLink = Build.postURL(boardID, threadID, postID); - quoteLink = Build.sameThread(boardID, threadID) ? "javascript:quote('" + (+postID) + "');" : "/" + boardID + "/thread/" + threadID + "#q" + postID; - postInfo = { - innerHTML: "
      " + (!o.isReply || boardID === "f" || subject ? "" + E(subject || "") + " " : "") + "" + (email ? "" : "") + "" + E(name) + "" + (tripcode ? " " + E(tripcode) + "" : "") + (capcode ? " ## " + E(capcode) + "" : "") + (email ? "" : "") + (boardID === "f" && !o.isReply || capcode ? "" : " ") + (capcode ? " \""" : "") + (uniqueID && !capcode ? " (ID: " + E(uniqueID) + ")" : "") + (flagCode ? " " : "") + " " + E(dateText) + " No." + E(postID) + "" + (o.isSticky ? " \"Sticky\"" : "") + (o.isClosed && !o.isArchived ? " \"Closed\"" : "") + (o.isArchived ? " \"Archived\"" : "") + (!o.isReply && g.VIEW === "index" ? "   [Reply]" : "") + "
      " - }; - - /* File Info */ - if (file) { - protocol = /^https?:(?=\/\/i\.4cdn\.org\/)/; - fileURL = file.url.replace(protocol, ''); - shortFilename = Build.shortFilename(file.name); - fileThumb = file.isSpoiler ? Build.spoilerThumb(boardID) : file.thumbURL.replace(protocol, ''); - } - fileBlock = { - innerHTML: (file ? "
      " + (boardID === "f" ? "
      File: " + E(file.name) + "-(" + E(file.size) + ", " + E(file.dimensions) + (file.tag ? ", " + E(file.tag) : "") + ")
      " : "
      File: " + (file.isSpoiler ? "Spoiler Image" : E(shortFilename)) + " (" + E(file.size) + ", " + E(file.dimensions || "PDF") + ")
      ") + "
      " : (o.fileDeleted ? "
      \"File
      " : "")) - }; - - /* Whole Post */ - postClass = o.isReply ? 'reply' : 'op'; - wholePost = { - innerHTML: (o.isReply ? "
      >>
      " : "") + "
      " + (o.isReply ? postInfo.innerHTML + fileBlock.innerHTML : fileBlock.innerHTML + postInfo.innerHTML) + "
      " + commentHTML.innerHTML + "
      " - }; - container = $.el('div', { - className: "postContainer " + postClass + "Container", - id: "pc" + postID - }); - $.extend(container, wholePost); - ref1 = $$('.quotelink', container); - for (k = 0, len1 = ref1.length; k < len1; k++) { - quote = ref1[k]; - href = quote.getAttribute('href'); - if ((href[0] === '#') && !(Build.sameThread(boardID, threadID))) { - quote.href = ("/" + boardID + "/thread/" + threadID) + href; - } else if ((match = href.match(/^\/([^\/]+)\/thread\/(\d+)/)) && (Build.sameThread(match[1], match[2]))) { - quote.href = href.match(/(#[^#]*)?$/)[0] || '#'; - } else if (/^\d+(#|$)/.test(href) && !(g.VIEW === 'thread' && g.BOARD.ID === boardID)) { - quote.href = "/" + boardID + "/thread/" + href; - } - } - return container; - }, - summaryText: function(status, posts, files) { - var text; - text = ''; - if (status) { - text += status + " "; - } - text += posts + " post" + (posts > 1 ? 's' : ''); - if (+files) { - text += " and " + files + " image repl" + (files > 1 ? 'ies' : 'y'); - } - return text += " " + (status === '-' ? 'shown' : 'omitted') + "."; - }, - summary: function(boardID, threadID, posts, files) { - return $.el('a', { - className: 'summary', - textContent: Build.summaryText('', posts, files), - href: "/" + boardID + "/thread/" + threadID - }); - }, - thread: function(board, data, full) { - var OP, root; - Build.spoilerRange[board] = data.custom_spoiler; - if (OP = board.posts[data.no]) { - if (OP.isFetchedQuote) { - OP = null; - } - } - if (OP && (root = OP.nodes.root.parentNode)) { - $.rmAll(root); - } else { - root = $.el('div', { - className: 'thread', - id: "t" + data.no - }); - } - $.add(root, Build[full ? 'fullThread' : 'excerptThread'](board, data, OP)); - return root; - }, - excerptThread: function(board, data, OP) { - var files, nodes, posts, ref; - nodes = [OP ? OP.nodes.root : Build.postFromObject(data, board.ID, true)]; - if (data.omitted_posts || !Conf['Show Replies'] && data.replies) { - ref = Conf['Show Replies'] ? [ - data.omitted_posts, data.images - data.last_replies.filter(function(data) { - return !!data.ext; - }).length - ] : [data.replies, data.images], posts = ref[0], files = ref[1]; - nodes.push(Build.summary(board.ID, data.no, posts, files)); - } - return nodes; - }, - fullThread: function(board, data) { - return Build.postFromObject(data, board.ID); - }, - catalogThread: function(thread) { - var br, cc, comment, data, exif, fileCount, gifIcon, href, imgClass, k, len1, len2, len3, len4, pageCount, postCount, pp, q, quote, ref, ref1, ref2, ref3, ref4, root, spoilerRange, src, staticPath, u, v; - staticPath = Build.staticPath, gifIcon = Build.gifIcon; - data = Index.liveThreadData[Index.liveThreadIDs.indexOf(thread.ID)]; - if (data.spoiler && !Conf['Reveal Spoiler Thumbnails']) { - src = staticPath + "spoiler"; - if (spoilerRange = Build.spoilerRange[thread.board]) { - src += ("-" + thread.board) + Math.floor(1 + spoilerRange * Math.random()); - } - src += '.png'; - imgClass = 'spoiler-file'; - } else if (data.filedeleted) { - src = staticPath + "filedeleted-res" + gifIcon; - imgClass = 'deleted-file'; - } else if (thread.OP.file) { - src = thread.OP.file.thumbURL; - } else { - src = staticPath + "nofile.png"; - imgClass = 'no-file'; - } - postCount = data.replies + 1; - fileCount = data.images + !!data.ext; - pageCount = Math.floor(Index.liveThreadIDs.indexOf(thread.ID) / Index.threadsNumPerPage) + 1; - comment = { - innerHTML: data.com || '' - }; - root = $.el('div', { - className: 'catalog-thread' - }); - $.extend(root, { - innerHTML: "
      " + E(postCount) + " / " + E(fileCount) + " / " + E(pageCount) + "
      " + (thread.OP.info.subject ? "
      " + E(thread.OP.info.subject) + "
      " : "") + "
      " + comment.innerHTML + "
      " - }); - root.dataset.fullID = thread.fullID; - if (thread.OP.highlights) { - $.addClass.apply($, [root].concat(slice.call(thread.OP.highlights))); - } - ref = $$('.quotelink', root.lastElementChild); - for (k = 0, len1 = ref.length; k < len1; k++) { - quote = ref[k]; - href = quote.getAttribute('href'); - if (href[0] === '#') { - quote.href = ("/" + thread.board + "/thread/" + thread.ID) + href; - } - } - ref1 = $$('.abbr, .exif', root.lastElementChild); - for (q = 0, len2 = ref1.length; q < len2; q++) { - exif = ref1[q]; - $.rm(exif); - } - ref2 = $$('.prettyprint', root.lastElementChild); - for (u = 0, len3 = ref2.length; u < len3; u++) { - pp = ref2[u]; - cc = $.el('span', { - className: 'catalog-code' - }); - $.add(cc, slice.call(pp.childNodes)); - $.replace(pp, cc); - } - ref3 = $$('br', root.lastElementChild); - for (v = 0, len4 = ref3.length; v < len4; v++) { - br = ref3[v]; - if (((ref4 = br.previousSibling) != null ? ref4.nodeName : void 0) === 'BR') { - $.rm(br); - } - } - if (thread.isSticky) { - $.add($('.catalog-icons', root), $.el('img', { - src: staticPath + "sticky" + gifIcon, - className: 'stickyIcon', - title: 'Sticky' - })); - } - if (thread.isClosed) { - $.add($('.catalog-icons', root), $.el('img', { - src: staticPath + "closed" + gifIcon, - className: 'closedIcon', - title: 'Closed' - })); - } - if (data.bumplimit) { - $.addClass($('.post-count', root), 'warning'); - } - if (data.imagelimit) { - $.addClass($('.file-count', root), 'warning'); - } - return root; - } - }; - - Get = { - threadExcerpt: function(thread) { - var OP, excerpt, ref; - OP = thread.OP; - excerpt = ("/" + thread.board + "/ - ") + (((ref = OP.info.subject) != null ? ref.trim() : void 0) || OP.info.commentDisplay.replace(/\n+/g, ' // ') || OP.info.nameBlock); - if (excerpt.length > 73) { - return excerpt.slice(0, 70) + "..."; - } - return excerpt; - }, - threadFromRoot: function(root) { - return g.threads[g.BOARD + "." + root.id.slice(1)]; - }, - threadFromNode: function(node) { - return Get.threadFromRoot($.x('ancestor::div[@class="thread"]', node)); - }, - postFromRoot: function(root) { - var index, post; - if (root == null) { - return null; - } - post = g.posts[root.dataset.fullID]; - index = root.dataset.clone; - if (index) { - return post.clones[index]; - } else { - return post; - } - }, - postFromNode: function(root) { - return Get.postFromRoot($.x('(ancestor::div[contains(@class,"postContainer")][1]|following::div[contains(@class,"postContainer")][1])', root)); - }, - postDataFromLink: function(link) { - var boardID, path, postID, ref, threadID; - if (link.hostname === 'boards.4chan.org') { - path = link.pathname.split(/\/+/); - boardID = path[1]; - threadID = path[3]; - postID = link.hash.slice(2); - } else { - ref = link.dataset, boardID = ref.boardID, threadID = ref.threadID, postID = ref.postID; - threadID || (threadID = 0); - } - return { - boardID: boardID, - threadID: +threadID, - postID: +postID - }; - }, - allQuotelinksLinkingTo: function(post) { - var fullID, handleQuotes, k, len1, posts, qPost, quote, quotelinks, ref; - quotelinks = []; - posts = g.posts; - fullID = post.fullID; - handleQuotes = function(qPost, type) { - var clone, k, len1, ref; - quotelinks.push.apply(quotelinks, qPost.nodes[type]); - ref = qPost.clones; - for (k = 0, len1 = ref.length; k < len1; k++) { - clone = ref[k]; - quotelinks.push.apply(quotelinks, clone.nodes[type]); - } - }; - posts.forEach(function(qPost) { - if (indexOf.call(qPost.quotes, fullID) >= 0) { - return handleQuotes(qPost, 'quotelinks'); - } - }); - if (Conf['Quote Backlinks']) { - ref = post.quotes; - for (k = 0, len1 = ref.length; k < len1; k++) { - quote = ref[k]; - if (qPost = posts[quote]) { - handleQuotes(qPost, 'backlinks'); - } - } - } - return quotelinks.filter(function(quotelink) { - var boardID, postID, ref1; - ref1 = Get.postDataFromLink(quotelink), boardID = ref1.boardID, postID = ref1.postID; - return boardID === post.board.ID && postID === post.ID; - }); - }, - scriptData: function() { - var k, len1, ref, script; - ref = $$('script:not([src])', d.head); - for (k = 0, len1 = ref.length; k < len1; k++) { - script = ref[k]; - if (/\bcooldowns *=/.test(script.textContent)) { - return script.textContent; - } - } - return ''; - } - }; - - UI = (function() { - var Menu, checkbox, dialog, drag, dragend, dragstart, hover, hoverend, hoverstart, touchend, touchmove; - dialog = function(id, position, properties) { - var child, el, k, len1, move, ref; - el = $.el('div', { - className: 'dialog', - id: id - }); - $.extend(el, properties); - el.style.cssText = position; - $.get(id + ".position", position, function(item) { - return el.style.cssText = item[id + ".position"]; - }); - move = $('.move', el); - $.on(move, 'touchstart mousedown', dragstart); - ref = move.children; - for (k = 0, len1 = ref.length; k < len1; k++) { - child = ref[k]; - if (!child.tagName) { - continue; - } - $.on(child, 'touchstart mousedown', function(e) { - return e.stopPropagation(); - }); - } - return el; - }; - Menu = (function() { - var currentMenu, lastToggledButton; - - currentMenu = null; - - lastToggledButton = null; - - function Menu(type1) { - this.type = type1; - this.addEntry = bind(this.addEntry, this); - this.onFocus = bind(this.onFocus, this); - this.keybinds = bind(this.keybinds, this); - this.close = bind(this.close, this); - $.on(d, 'AddMenuEntry', (function(_this) { - return function(arg) { - var detail; - detail = arg.detail; - if (detail.type !== _this.type) { - return; - } - delete detail.open; - return _this.addEntry(detail); - }; - })(this)); - this.entries = []; - } - - Menu.prototype.makeMenu = function() { - var menu; - menu = $.el('div', { - className: 'dialog', - id: 'menu', - tabIndex: 0 - }); - $.on(menu, 'click', function(e) { - return e.stopPropagation(); - }); - $.on(menu, 'keydown', this.keybinds); - return menu; - }; - - Menu.prototype.toggle = function(e, button, data) { - var previousButton; - e.preventDefault(); - e.stopPropagation(); - if (currentMenu) { - previousButton = lastToggledButton; - currentMenu.close(); - if (previousButton === button) { - return; - } - } - if (!this.entries.length) { - return; - } - return this.open(button, data); - }; - - Menu.prototype.open = function(button, data) { - var bLeft, bRect, bTop, bottom, cHeight, cWidth, entry, k, left, len1, mRect, menu, ref, ref1, ref2, right, style, top; - menu = this.menu = this.makeMenu(); - currentMenu = this; - lastToggledButton = button; - this.entries.sort(function(first, second) { - return first.order - second.order; - }); - ref = this.entries; - for (k = 0, len1 = ref.length; k < len1; k++) { - entry = ref[k]; - this.insertEntry(entry, menu, data); - } - $.addClass(lastToggledButton, 'active'); - $.on(d, 'click CloseMenu', this.close); - if (this.type !== 'gallery') { - $.on(d, 'scroll', this.close); - } - $.add(button, menu); - mRect = menu.getBoundingClientRect(); - bRect = button.getBoundingClientRect(); - bTop = window.scrollY + bRect.top; - bLeft = window.scrollX + bRect.left; - cHeight = doc.clientHeight; - cWidth = doc.clientWidth; - ref1 = bRect.top + bRect.height + mRect.height < cHeight ? [bRect.bottom, null] : [null, cHeight - bRect.top], top = ref1[0], bottom = ref1[1]; - ref2 = bRect.left + mRect.width < cWidth ? [bRect.left, null] : [null, cWidth - bRect.right], left = ref2[0], right = ref2[1]; - style = menu.style; - style.top = top + "px"; - style.right = right + "px"; - style.bottom = bottom + "px"; - style.left = left + "px"; - if (right) { - $.addClass(menu, 'left'); - } - entry = $('.entry', menu); - this.focus(entry); - return menu.focus(); - }; - - Menu.prototype.insertEntry = function(entry, parent, data) { - var err, k, len1, ref, subEntry, submenu; - if (typeof entry.open === 'function') { - try { - if (!entry.open(data)) { - return; - } - } catch (_error) { - err = _error; - Main.handleErrors({ - message: "Error in building the " + this.type + " menu.", - error: err - }); - return; - } - } - $.add(parent, entry.el); - if (!entry.subEntries) { - return; - } - if (submenu = $('.submenu', entry.el)) { - $.rm(submenu); - } - submenu = $.el('div', { - className: 'dialog submenu' - }); - ref = entry.subEntries; - for (k = 0, len1 = ref.length; k < len1; k++) { - subEntry = ref[k]; - this.insertEntry(subEntry, submenu, data); - } - $.add(entry.el, submenu); - }; - - Menu.prototype.close = function() { - $.rm(this.menu); - delete this.menu; - $.rmClass(lastToggledButton, 'active'); - currentMenu = null; - lastToggledButton = null; - return $.off(d, 'click scroll CloseMenu', this.close); - }; - - Menu.prototype.findNextEntry = function(entry, direction) { - var entries; - entries = slice.call(entry.parentNode.children); - entries.sort(function(first, second) { - return first.style.order - second.style.order; - }); - return entries[entries.indexOf(entry) + direction]; - }; - - Menu.prototype.keybinds = function(e) { - var entry, next, nextPrev, subEntry, submenu; - entry = $('.focused', this.menu); - while (subEntry = $('.focused', entry)) { - entry = subEntry; - } - switch (e.keyCode) { - case 27: - lastToggledButton.focus(); - this.close(); - break; - case 13: - case 32: - entry.click(); - break; - case 38: - if (next = this.findNextEntry(entry, -1)) { - this.focus(next); - } - break; - case 40: - if (next = this.findNextEntry(entry, +1)) { - this.focus(next); - } - break; - case 39: - if ((submenu = $('.submenu', entry)) && (next = submenu.firstElementChild)) { - while (nextPrev = this.findNextEntry(next, -1)) { - next = nextPrev; - } - this.focus(next); - } - break; - case 37: - if (next = $.x('parent::*[contains(@class,"submenu")]/parent::*', entry)) { - this.focus(next); - } - break; - default: - return; - } - e.preventDefault(); - return e.stopPropagation(); - }; - - Menu.prototype.onFocus = function(e) { - e.stopPropagation(); - return this.focus(e.target); - }; - - Menu.prototype.focus = function(entry) { - var bottom, cHeight, cWidth, eRect, focused, k, left, len1, ref, ref1, ref2, right, sRect, style, submenu, top; - while (focused = $.x('parent::*/child::*[contains(@class,"focused")]', entry)) { - $.rmClass(focused, 'focused'); - } - ref = $$('.focused', entry); - for (k = 0, len1 = ref.length; k < len1; k++) { - focused = ref[k]; - $.rmClass(focused, 'focused'); - } - $.addClass(entry, 'focused'); - if (!(submenu = $('.submenu', entry))) { - return; - } - sRect = submenu.getBoundingClientRect(); - eRect = entry.getBoundingClientRect(); - cHeight = doc.clientHeight; - cWidth = doc.clientWidth; - ref1 = eRect.top + sRect.height < cHeight ? ['0px', 'auto'] : ['auto', '0px'], top = ref1[0], bottom = ref1[1]; - ref2 = eRect.right + sRect.width < cWidth - 150 ? ['100%', 'auto'] : ['auto', '100%'], left = ref2[0], right = ref2[1]; - style = submenu.style; - style.top = top; - style.bottom = bottom; - style.left = left; - return style.right = right; - }; - - Menu.prototype.addEntry = function(entry) { - this.parseEntry(entry); - return this.entries.push(entry); - }; - - Menu.prototype.parseEntry = function(entry) { - var el, k, len1, subEntries, subEntry; - el = entry.el, subEntries = entry.subEntries; - $.addClass(el, 'entry'); - $.on(el, 'focus mouseover', this.onFocus); - el.style.order = entry.order || 100; - if (!subEntries) { - return; - } - $.addClass(el, 'has-submenu'); - for (k = 0, len1 = subEntries.length; k < len1; k++) { - subEntry = subEntries[k]; - this.parseEntry(subEntry); - } - }; - - return Menu; - - })(); - dragstart = function(e) { - var el, isTouching, o, rect, ref, screenHeight, screenWidth; - if (e.type === 'mousedown' && e.button !== 0) { - return; - } - e.preventDefault(); - if (isTouching = e.type === 'touchstart') { - e = e.changedTouches[e.changedTouches.length - 1]; - } - el = $.x('ancestor::div[contains(@class,"dialog")][1]', this); - rect = el.getBoundingClientRect(); - screenHeight = doc.clientHeight; - screenWidth = doc.clientWidth; - o = { - id: el.id, - style: el.style, - dx: e.clientX - rect.left, - dy: e.clientY - rect.top, - height: screenHeight - rect.height, - width: screenWidth - rect.width, - screenHeight: screenHeight, - screenWidth: screenWidth, - isTouching: isTouching - }; - ref = Conf['Header auto-hide'] || !Conf['Fixed Header'] ? [0, 0] : Conf['Bottom Header'] ? [0, Header.bar.getBoundingClientRect().height] : [Header.bar.getBoundingClientRect().height, 0], o.topBorder = ref[0], o.bottomBorder = ref[1]; - if (isTouching) { - o.identifier = e.identifier; - o.move = touchmove.bind(o); - o.up = touchend.bind(o); - $.on(d, 'touchmove', o.move); - return $.on(d, 'touchend touchcancel', o.up); - } else { - o.move = drag.bind(o); - o.up = dragend.bind(o); - $.on(d, 'mousemove', o.move); - return $.on(d, 'mouseup', o.up); - } - }; - touchmove = function(e) { - var k, len1, ref, touch; - ref = e.changedTouches; - for (k = 0, len1 = ref.length; k < len1; k++) { - touch = ref[k]; - if (touch.identifier === this.identifier) { - drag.call(this, touch); - return; - } - } - }; - drag = function(e) { - var bottom, clientX, clientY, left, right, style, top; - clientX = e.clientX, clientY = e.clientY; - left = clientX - this.dx; - left = left < 10 ? 0 : this.width - left < 10 ? null : left / this.screenWidth * 100 + '%'; - top = clientY - this.dy; - top = top < (10 + this.topBorder) ? this.topBorder + 'px' : this.height - top < (10 + this.bottomBorder) ? null : top / this.screenHeight * 100 + '%'; - right = left === null ? 0 : null; - bottom = top === null ? this.bottomBorder + 'px' : null; - style = this.style; - style.left = left; - style.right = right; - style.top = top; - return style.bottom = bottom; - }; - touchend = function(e) { - var k, len1, ref, touch; - ref = e.changedTouches; - for (k = 0, len1 = ref.length; k < len1; k++) { - touch = ref[k]; - if (touch.identifier === this.identifier) { - dragend.call(this); - return; - } - } - }; - dragend = function() { - if (this.isTouching) { - $.off(d, 'touchmove', this.move); - $.off(d, 'touchend touchcancel', this.up); - } else { - $.off(d, 'mousemove', this.move); - $.off(d, 'mouseup', this.up); - } - return $.set(this.id + ".position", this.style.cssText); - }; - hoverstart = function(arg) { - var cb, el, endEvents, height, latestEvent, noRemove, o, ref, root; - root = arg.root, el = arg.el, latestEvent = arg.latestEvent, endEvents = arg.endEvents, height = arg.height, cb = arg.cb, noRemove = arg.noRemove; - o = { - root: root, - el: el, - style: el.style, - isImage: (ref = el.nodeName) === 'IMG' || ref === 'VIDEO', - cb: cb, - endEvents: endEvents, - latestEvent: latestEvent, - clientHeight: doc.clientHeight, - clientWidth: doc.clientWidth, - height: height, - noRemove: noRemove - }; - o.hover = hover.bind(o); - o.hoverend = hoverend.bind(o); - o.hover(o.latestEvent); - new MutationObserver(function() { - if (el.parentNode) { - return o.hover(o.latestEvent); - } - }).observe(el, { - childList: true - }); - $.on(root, endEvents, o.hoverend); - if ($.x('ancestor::div[contains(@class,"inline")][1]', root)) { - $.on(d, 'keydown', o.hoverend); - } - $.on(root, 'mousemove', o.hover); - o.workaround = function(e) { - if (!root.contains(e.target)) { - return o.hoverend(e); - } - }; - return $.on(doc, 'mousemove', o.workaround); - }; - hoverstart.padding = 25; - hover = function(e) { - var clientX, clientY, height, left, ref, right, style, threshold, top; - this.latestEvent = e; - height = (this.height || this.el.offsetHeight) + hoverstart.padding; - clientX = e.clientX, clientY = e.clientY; - top = this.isImage ? Math.max(0, clientY * (this.clientHeight - height) / this.clientHeight) : Math.max(0, Math.min(this.clientHeight - height, clientY - 120)); - threshold = this.clientWidth / 2; - if (!this.isImage) { - threshold = Math.max(threshold, this.clientWidth - 400); - } - ref = clientX <= threshold ? [clientX + 45 + 'px', null] : [null, this.clientWidth - clientX + 45 + 'px'], left = ref[0], right = ref[1]; - style = this.style; - style.top = top + 'px'; - style.left = left; - return style.right = right; - }; - hoverend = function(e) { - if (e.type === 'keydown' && e.keyCode !== 13 || e.target.nodeName === "TEXTAREA") { - return; - } - if (!this.noRemove) { - $.rm(this.el); - } - $.off(this.root, this.endEvents, this.hoverend); - $.off(d, 'keydown', this.hoverend); - $.off(this.root, 'mousemove', this.hover); - $.off(doc, 'mousemove', this.workaround); - if (this.cb) { - return this.cb.call(this); - } - }; - checkbox = function(name, text, checked) { - var input, label; - if (checked == null) { - checked = Conf[name]; - } - label = $.el('label'); - input = $.el('input', { - type: 'checkbox', - name: name, - checked: checked - }); - $.add(label, [input, $.tn(" " + text)]); - return label; - }; - return { - dialog: dialog, - Menu: Menu, - hover: hoverstart, - checkbox: checkbox - }; - })(); - - CrossOrigin = (function() { - return { - binary: function(url, cb, headers) { - var options, ref, workaround; - if (headers == null) { - headers = {}; - } - url = url.replace(/^((?:https?:)?\/\/(?:\w+\.)?4c(?:ha|d)n\.org)\/adv\//, '$1//adv/'); - workaround = $.engine === 'gecko' && (typeof GM_info !== "undefined" && GM_info !== null) && /^[0-2]\.|^3\.[01](?!\d)/.test(GM_info.version); - workaround || (workaround = /PaleMoon\//.test(navigator.userAgent)); - workaround || (workaround = (typeof GM_info !== "undefined" && GM_info !== null ? (ref = GM_info.script) != null ? ref.includeJSB : void 0 : void 0) != null); - options = { - method: "GET", - url: url, - headers: headers, - onload: function(xhr) { - var contentDisposition, contentType, data, i, r, ref1, ref2; - if (workaround) { - r = xhr.responseText; - data = new Uint8Array(r.length); - i = 0; - while (i < r.length) { - data[i] = r.charCodeAt(i); - i++; - } - } else { - data = new Uint8Array(xhr.response); - } - if (typeof xhr.responseHeaders === 'object') { - contentType = xhr.responseHeaders['Content-Type']; - contentDisposition = xhr.responseHeaders['Content-Disposition']; - } else { - contentType = (ref1 = xhr.responseHeaders.match(/Content-Type:\s*(.*)/i)) != null ? ref1[1] : void 0; - contentDisposition = (ref2 = xhr.responseHeaders.match(/Content-Disposition:\s*(.*)/i)) != null ? ref2[1] : void 0; - } - return cb(data, contentType, contentDisposition); - }, - onerror: function() { - return cb(null); - }, - onabort: function() { - return cb(null); - } - }; - if (workaround) { - options.overrideMimeType = options.mimeType = 'text/plain; charset=x-user-defined'; - } else { - options.responseType = 'arraybuffer'; - } - return GM_xmlhttpRequest(options); - }, - file: function(url, cb) { - return CrossOrigin.binary(url, function(data, contentType, contentDisposition) { - var blob, match, mime, name, ref, ref1, ref2, ref3; - if (data == null) { - return cb(null); - } - name = (ref = url.match(/([^\/]+)\/*$/)) != null ? ref[1] : void 0; - mime = (contentType != null ? contentType.match(/[^;]*/)[0] : void 0) || 'application/octet-stream'; - match = (contentDisposition != null ? (ref1 = contentDisposition.match(/\bfilename\s*=\s*"((\\"|[^"])+)"/i)) != null ? ref1[1] : void 0 : void 0) || (contentType != null ? (ref2 = contentType.match(/\bname\s*=\s*"((\\"|[^"])+)"/i)) != null ? ref2[1] : void 0 : void 0); - if (match) { - name = match.replace(/\\"/g, '"'); - } - if ((typeof GM_info !== "undefined" && GM_info !== null ? (ref3 = GM_info.script) != null ? ref3.includeJSB : void 0 : void 0) != null) { - mime = QR.typeFromExtension[name.match(/[^.]*$/)[0].toLowerCase()] || 'application/octet-stream'; - } - blob = new Blob([data], { - type: mime - }); - blob.name = name; - return cb(blob); - }); - }, - json: (function() { - var callbacks, responses; - callbacks = {}; - responses = {}; - return function(url, cb) { - if (responses[url]) { - cb(responses[url]); - return; - } - if (callbacks[url]) { - callbacks[url].push(cb); - return; - } - callbacks[url] = [cb]; - return GM_xmlhttpRequest({ - method: "GET", - url: url + '', - onload: function(xhr) { - var k, len1, ref, response; - response = JSON.parse(xhr.responseText); - ref = callbacks[url]; - for (k = 0, len1 = ref.length; k < len1; k++) { - cb = ref[k]; - cb(response); - } - delete callbacks[url]; - return responses[url] = response; - }, - onerror: function() { - return delete callbacks[url]; - }, - onabort: function() { - return delete callbacks[url]; - } - }); - }; - })() - }; - })(); - - Anonymize = { - init: function() { - var ref; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread' || ref === 'archive') && Conf['Anonymize'])) { - return; - } - if (g.VIEW === 'archive') { - return this.archive(); - } - return Post.callbacks.push({ - name: 'Anonymize', - cb: this.node - }); - }, - node: function() { - var email, name, ref, tripcode; - if (this.info.capcode || this.isClone) { - return; - } - ref = this.nodes, name = ref.name, tripcode = ref.tripcode, email = ref.email; - if (this.info.name !== 'Anonymous') { - name.textContent = 'Anonymous'; - } - if (tripcode) { - $.rm(tripcode); - delete this.nodes.tripcode; - } - if (this.info.email) { - $.replace(email, name); - return delete this.nodes.email; - } - }, - archive: function() { - return $.ready(function() { - var k, len1, len2, name, q, ref, ref1, trip; - ref = $$('.name'); - for (k = 0, len1 = ref.length; k < len1; k++) { - name = ref[k]; - name.textContent = 'Anonymous'; - } - ref1 = $$('.postertrip'); - for (q = 0, len2 = ref1.length; q < len2; q++) { - trip = ref1[q]; - $.rm(trip); - } - }); - } - }; - - Filter = { - filters: {}, - init: function() { - var boards, err, excludes, filter, hl, k, key, len1, line, op, ref, ref1, ref2, ref3, ref4, ref5, ref6, regexp, stub, top; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Filter'])) { - return; - } - if (!Conf['Filtered Backlinks']) { - $.addClass(doc, 'hide-backlinks'); - } - for (key in Config.filter) { - this.filters[key] = []; - ref1 = Conf[key].split('\n'); - for (k = 0, len1 = ref1.length; k < len1; k++) { - line = ref1[k]; - if (line[0] === '#') { - continue; - } - if (!(regexp = line.match(/\/(.+)\/(\w*)/))) { - continue; - } - filter = line.replace(regexp[0], ''); - boards = ((ref2 = filter.match(/boards:([^;]+)/)) != null ? ref2[1].toLowerCase() : void 0) || 'global'; - boards = boards === 'global' ? null : boards.split(','); - if (boards === null) { - excludes = ((ref3 = filter.match(/exclude:([^;]+)/)) != null ? ref3[1].toLowerCase().split(',') : void 0) || null; - } - if (key === 'uniqueID' || key === 'MD5') { - regexp = regexp[1]; - } else { - try { - regexp = RegExp(regexp[1], regexp[2]); - } catch (_error) { - err = _error; - new Notice('warning', [$.tn("Invalid " + key + " filter:"), $.el('br'), $.tn(line), $.el('br'), $.tn(err.message)], 60); - continue; - } - } - op = ((ref4 = filter.match(/[^t]op:(yes|no|only)/)) != null ? ref4[1] : void 0) || 'yes'; - stub = (function() { - var ref5; - switch ((ref5 = filter.match(/stub:(yes|no)/)) != null ? ref5[1] : void 0) { - case 'yes': - return true; - case 'no': - return false; - default: - return Conf['Stubs']; - } - })(); - if (hl = /highlight/.test(filter)) { - hl = ((ref5 = filter.match(/highlight:([\w-]+)/)) != null ? ref5[1] : void 0) || 'filter-highlight'; - top = ((ref6 = filter.match(/top:(yes|no)/)) != null ? ref6[1] : void 0) || 'yes'; - top = top === 'yes'; - } - this.filters[key].push(this.createFilter(regexp, boards, excludes, op, stub, hl, top)); - } - if (!this.filters[key].length) { - delete this.filters[key]; - } - } - if (!Object.keys(this.filters).length) { - return; - } - return Post.callbacks.push({ - name: 'Filter', - cb: this.node - }); - }, - createFilter: function(regexp, boards, excludes, op, stub, hl, top) { - var settings, test; - test = typeof regexp === 'string' ? function(value) { - return regexp === value; - } : function(value) { - return regexp.test(value); - }; - settings = { - hide: !hl, - stub: stub, - "class": hl, - top: top - }; - return function(value, boardID, isReply) { - if (boards && indexOf.call(boards, boardID) < 0) { - return false; - } - if (excludes && indexOf.call(excludes, boardID) >= 0) { - return false; - } - if (isReply && op === 'only' || !isReply && op === 'no') { - return false; - } - if (!test(value)) { - return false; - } - return settings; - }; - }, - node: function() { - var filter, k, key, len1, ref, ref1, result, value; - if (this.isClone) { - return; - } - for (key in Filter.filters) { - if ((value = Filter[key](this)) != null) { - ref = Filter.filters[key]; - for (k = 0, len1 = ref.length; k < len1; k++) { - filter = ref[k]; - if (!(result = filter(value, this.board.ID, this.isReply))) { - continue; - } - if (result.hide && !this.isFetchedQuote) { - if (this.isReply) { - PostHiding.hide(this, result.stub); - } else if (g.VIEW === 'index') { - ThreadHiding.hide(this.thread, result.stub); - } else { - continue; - } - return; - } - $.addClass(this.nodes.root, result["class"]); - if (!(this.highlights && (ref1 = result["class"], indexOf.call(this.highlights, ref1) >= 0))) { - (this.highlights || (this.highlights = [])).push(result["class"]); - } - if (!this.isReply && result.top) { - this.thread.isOnTop = true; - } - } - } - } - }, - isHidden: function(post) { - var filter, k, key, len1, ref, result, value; - for (key in Filter.filters) { - if ((value = Filter[key](post)) != null) { - ref = Filter.filters[key]; - for (k = 0, len1 = ref.length; k < len1; k++) { - filter = ref[k]; - if (result = filter(value, post.boardID, post.isReply)) { - if (result.hide) { - return true; - } - } - } - } - } - return false; - }, - postID: function(post) { - var ref; - return "" + ((ref = post.ID) != null ? ref : post.postID); - }, - name: function(post) { - return post.info.name; - }, - uniqueID: function(post) { - return post.info.uniqueID; - }, - tripcode: function(post) { - return post.info.tripcode; - }, - capcode: function(post) { - return post.info.capcode; - }, - subject: function(post) { - return post.info.subject; - }, - comment: function(post) { - var base1; - return (base1 = post.info).comment != null ? base1.comment : base1.comment = Build.parseComment(post.info.commentHTML.innerHTML); - }, - flag: function(post) { - return post.info.flag; - }, - filename: function(post) { - var ref; - return (ref = post.file) != null ? ref.name : void 0; - }, - dimensions: function(post) { - var ref; - return (ref = post.file) != null ? ref.dimensions : void 0; - }, - filesize: function(post) { - var ref; - return (ref = post.file) != null ? ref.size : void 0; - }, - MD5: function(post) { - var ref; - return (ref = post.file) != null ? ref.MD5 : void 0; - }, - menu: { - init: function() { - var div, entry, k, len1, ref, ref1, type; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Filter'])) { - return; - } - div = $.el('div', { - textContent: 'Filter' - }); - entry = { - el: div, - order: 50, - open: function(post) { - Filter.menu.post = post; - return true; - }, - subEntries: [] - }; - ref1 = [['Name', 'name'], ['Unique ID', 'uniqueID'], ['Tripcode', 'tripcode'], ['Capcode', 'capcode'], ['Subject', 'subject'], ['Comment', 'comment'], ['Flag', 'flag'], ['Filename', 'filename'], ['Image dimensions', 'dimensions'], ['Filesize', 'filesize'], ['Image MD5', 'MD5']]; - for (k = 0, len1 = ref1.length; k < len1; k++) { - type = ref1[k]; - entry.subEntries.push(Filter.menu.createSubEntry(type[0], type[1])); - } - return Menu.menu.addEntry(entry); - }, - createSubEntry: function(text, type) { - var el; - el = $.el('a', { - href: 'javascript:;', - textContent: text - }); - el.dataset.type = type; - $.on(el, 'click', Filter.menu.makeFilter); - return { - el: el, - open: function(post) { - var value; - value = Filter[type](post); - return value != null; - } - }; - }, - makeFilter: function() { - var re, type, value; - type = this.dataset.type; - value = Filter[type](Filter.menu.post); - re = type === 'uniqueID' || type === 'MD5' ? value : value.replace(/\/|\\|\^|\$|\n|\.|\(|\)|\{|\}|\[|\]|\?|\*|\+|\|/g, function(c) { - if (c === '\n') { - return '\\n'; - } else if (c === '\\') { - return '\\\\'; - } else { - return "\\" + c; - } - }); - re = type === 'uniqueID' || type === 'MD5' ? "/" + re + "/" : "/^" + re + "$/"; - return $.get(type, Conf[type], function(item) { - var save, section, select, ta, tl; - save = item[type]; - save = save ? save + "\n" + re : re; - $.set(type, save); - Settings.open('Filter'); - section = $('.section-container'); - select = $('select[name=filter]', section); - select.value = type; - Settings.selectFilter.call(select); - ta = $('textarea', section); - tl = ta.textLength; - ta.setSelectionRange(tl, tl); - return ta.focus(); - }); - } - } - }; - - PostHiding = { - init: function() { - var ref; - if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Reply Hiding Buttons'] && !(Conf['Menu'] && Conf['Reply Hiding Link'])) { - return; - } - if (Conf['Reply Hiding Buttons']) { - $.addClass(doc, "reply-hide"); - } - this.db = new DataBoard('hiddenPosts'); - return Post.callbacks.push({ - name: 'Reply Hiding', - cb: this.node - }); - }, - node: function() { - var data, sideArrows; - if (!this.isReply || this.isClone || this.isFetchedQuote) { - return; - } - if (data = PostHiding.db.get({ - boardID: this.board.ID, - threadID: this.thread.ID, - postID: this.ID - })) { - if (data.thisPost) { - PostHiding.hide(this, data.makeStub, data.hideRecursively); - } else { - Recursive.apply(PostHiding.hide, this, data.makeStub, true); - Recursive.add(PostHiding.hide, this, data.makeStub, true); - } - } - if (!Conf['Reply Hiding Buttons']) { - return; - } - sideArrows = $('.sideArrows', this.nodes.root); - $.replace(sideArrows.firstChild, PostHiding.makeButton(this, 'hide')); - return sideArrows.removeAttribute('class'); - }, - menu: { - init: function() { - var apply, div, hideStubLink, makeStub, ref, replies, thisPost; - if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Menu'] || !Conf['Reply Hiding Link']) { - return; - } - div = $.el('div', { - className: 'hide-reply-link', - textContent: 'Hide' - }); - apply = $.el('a', { - textContent: 'Apply', - href: 'javascript:;' - }); - $.on(apply, 'click', PostHiding.menu.hide); - thisPost = UI.checkbox('thisPost', 'This post', true); - replies = UI.checkbox('replies', 'Hide replies', Conf['Recursive Hiding']); - makeStub = UI.checkbox('makeStub', 'Make stub', Conf['Stubs']); - Menu.menu.addEntry({ - el: div, - order: 20, - open: function(post) { - if (!post.isReply || post.isClone || post.isHidden) { - return false; - } - PostHiding.menu.post = post; - return true; - }, - subEntries: [ - { - el: apply - }, { - el: thisPost - }, { - el: replies - }, { - el: makeStub - } - ] - }); - div = $.el('div', { - className: 'show-reply-link', - textContent: 'Show' - }); - apply = $.el('a', { - textContent: 'Apply', - href: 'javascript:;' - }); - $.on(apply, 'click', PostHiding.menu.show); - thisPost = UI.checkbox('thisPost', 'This post', false); - replies = UI.checkbox('replies', 'Show replies', false); - hideStubLink = $.el('a', { - textContent: 'Hide stub', - href: 'javascript:;' - }); - $.on(hideStubLink, 'click', PostHiding.menu.hideStub); - Menu.menu.addEntry({ - el: div, - order: 20, - open: function(post) { - var data; - if (!post.isReply || post.isClone || !post.isHidden) { - return false; - } - if (!(data = PostHiding.db.get({ - boardID: post.board.ID, - threadID: post.thread.ID, - postID: post.ID - }))) { - return false; - } - PostHiding.menu.post = post; - thisPost.firstChild.checked = post.isHidden; - replies.firstChild.checked = (data != null ? data.hideRecursively : void 0) != null ? data.hideRecursively : Conf['Recursive Hiding']; - return true; - }, - subEntries: [ - { - el: apply - }, { - el: thisPost - }, { - el: replies - } - ] - }); - return Menu.menu.addEntry({ - el: hideStubLink, - order: 15, - open: function(post) { - var data; - if (!post.isReply || post.isClone || !post.isHidden) { - return false; - } - if (!(data = PostHiding.db.get({ - boardID: post.board.ID, - threadID: post.thread.ID, - postID: post.ID - }))) { - return false; - } - return PostHiding.menu.post = post; - } - }); - }, - hide: function() { - var makeStub, parent, post, replies, thisPost; - parent = this.parentNode; - thisPost = $('input[name=thisPost]', parent).checked; - replies = $('input[name=replies]', parent).checked; - makeStub = $('input[name=makeStub]', parent).checked; - post = PostHiding.menu.post; - if (thisPost) { - PostHiding.hide(post, makeStub, replies); - } else if (replies) { - Recursive.apply(PostHiding.hide, post, makeStub, true); - Recursive.add(PostHiding.hide, post, makeStub, true); - } else { - return; - } - PostHiding.saveHiddenState(post, true, thisPost, makeStub, replies); - return $.event('CloseMenu'); - }, - show: function() { - var data, parent, post, replies, thisPost; - parent = this.parentNode; - thisPost = $('input[name=thisPost]', parent).checked; - replies = $('input[name=replies]', parent).checked; - post = PostHiding.menu.post; - if (thisPost) { - PostHiding.show(post, replies); - } else if (replies) { - Recursive.apply(PostHiding.show, post, true); - Recursive.rm(PostHiding.hide, post, true); - } else { - return; - } - if (data = PostHiding.db.get({ - boardID: post.board.ID, - threadID: post.thread.ID, - postID: post.ID - })) { - PostHiding.saveHiddenState(post, !(thisPost && replies), !thisPost, data.makeStub, !replies); - } - return $.event('CloseMenu'); - }, - hideStub: function() { - var data, post; - post = PostHiding.menu.post; - if (data = PostHiding.db.get({ - boardID: post.board.ID, - threadID: post.thread.ID, - postID: post.ID - })) { - PostHiding.show(post, data.hideRecursively); - PostHiding.hide(post, false, data.hideRecursively); - PostHiding.saveHiddenState(post, true, true, false, data.hideRecursively); - } - $.event('CloseMenu'); - } - }, - makeButton: function(post, type) { - var a, span; - span = $.el('span', { - className: "fa fa-" + (type === 'hide' ? 'minus' : 'plus') + "-square-o", - textContent: "" - }); - a = $.el('a', { - className: type + "-reply-button", - href: 'javascript:;' - }); - $.add(a, span); - $.on(a, 'click', PostHiding.toggle); - return a; - }, - saveHiddenState: function(post, isHiding, thisPost, makeStub, hideRecursively) { - var data; - data = { - boardID: post.board.ID, - threadID: post.thread.ID, - postID: post.ID - }; - if (isHiding) { - data.val = { - thisPost: thisPost !== false, - makeStub: makeStub, - hideRecursively: hideRecursively - }; - return PostHiding.db.set(data); - } else { - return PostHiding.db["delete"](data); - } - }, - toggle: function() { - var post; - post = Get.postFromNode(this); - PostHiding[(post.isHidden ? 'show' : 'hide')](post); - return PostHiding.saveHiddenState(post, post.isHidden); - }, - hide: function(post, makeStub, hideRecursively) { - var a, k, len1, quotelink, ref; - if (makeStub == null) { - makeStub = Conf['Stubs']; - } - if (hideRecursively == null) { - hideRecursively = Conf['Recursive Hiding']; - } - if (post.isHidden) { - return; - } - post.isHidden = true; - if (hideRecursively) { - Recursive.apply(PostHiding.hide, post, makeStub, true); - Recursive.add(PostHiding.hide, post, makeStub, true); - } - ref = Get.allQuotelinksLinkingTo(post); - for (k = 0, len1 = ref.length; k < len1; k++) { - quotelink = ref[k]; - $.addClass(quotelink, 'filtered'); - } - if (!makeStub) { - post.nodes.root.hidden = true; - return; - } - a = PostHiding.makeButton(post, 'show'); - $.add(a, $.tn(" " + post.info.nameBlock)); - post.nodes.stub = $.el('div', { - className: 'stub' - }); - $.add(post.nodes.stub, a); - if (Conf['Menu']) { - $.add(post.nodes.stub, Menu.makeButton(post)); - } - return $.prepend(post.nodes.root, post.nodes.stub); - }, - show: function(post, showRecursively) { - var k, len1, quotelink, ref; - if (showRecursively == null) { - showRecursively = Conf['Recursive Hiding']; - } - if (post.nodes.stub) { - $.rm(post.nodes.stub); - delete post.nodes.stub; - } else { - post.nodes.root.hidden = false; - } - post.isHidden = false; - if (showRecursively) { - Recursive.apply(PostHiding.show, post, true); - Recursive.rm(PostHiding.hide, post); - } - ref = Get.allQuotelinksLinkingTo(post); - for (k = 0, len1 = ref.length; k < len1; k++) { - quotelink = ref[k]; - $.rmClass(quotelink, 'filtered'); - } - } - }; - - Recursive = { - recursives: {}, - init: function() { - var ref; - if ((ref = g.VIEW) !== 'index' && ref !== 'thread') { - return; - } - return Post.callbacks.push({ - name: 'Recursive', - cb: this.node - }); - }, - node: function() { - var i, k, len1, len2, obj, q, quote, recursive, ref, ref1; - if (this.isClone || this.isFetchedQuote) { - return; - } - ref = this.quotes; - for (k = 0, len1 = ref.length; k < len1; k++) { - quote = ref[k]; - if (obj = Recursive.recursives[quote]) { - ref1 = obj.recursives; - for (i = q = 0, len2 = ref1.length; q < len2; i = ++q) { - recursive = ref1[i]; - recursive.apply(null, [this].concat(slice.call(obj.args[i]))); - } - } - } - }, - add: function() { - var args, base1, name1, obj, post, recursive; - recursive = arguments[0], post = arguments[1], args = 3 <= arguments.length ? slice.call(arguments, 2) : []; - obj = (base1 = Recursive.recursives)[name1 = post.fullID] || (base1[name1] = { - recursives: [], - args: [] - }); - obj.recursives.push(recursive); - return obj.args.push(args); - }, - rm: function(recursive, post) { - var i, k, len1, obj, rec, ref; - if (!(obj = Recursive.recursives[post.fullID])) { - return; - } - ref = obj.recursives; - for (i = k = 0, len1 = ref.length; k < len1; i = ++k) { - rec = ref[i]; - if (!(rec === recursive)) { - continue; - } - obj.recursives.splice(i, 1); - obj.args.splice(i, 1); - } - }, - apply: function() { - var args, fullID, post, recursive; - recursive = arguments[0], post = arguments[1], args = 3 <= arguments.length ? slice.call(arguments, 2) : []; - fullID = post.fullID; - return g.posts.forEach(function(post) { - if (indexOf.call(post.quotes, fullID) >= 0) { - return recursive.apply(null, [post].concat(slice.call(args))); - } - }); - } - }; - - ThreadHiding = { - init: function() { - var ref; - if (((ref = g.VIEW) !== 'index' && ref !== 'catalog') || !Conf['Thread Hiding Buttons'] && !(Conf['Menu'] && Conf['Thread Hiding Link']) && !Conf['JSON Index']) { - return; - } - this.db = new DataBoard('hiddenThreads'); - if (g.VIEW === 'catalog') { - return this.catalogWatch(); - } - this.catalogSet(g.BOARD); - return Post.callbacks.push({ - name: 'Thread Hiding', - cb: this.node - }); - }, - catalogSet: function(board) { - var hiddenThreads, threadID; - if (!$.hasStorage) { - return; - } - hiddenThreads = ThreadHiding.db.get({ - boardID: board.ID, - defaultValue: {} - }); - for (threadID in hiddenThreads) { - hiddenThreads[threadID] = true; - } - return localStorage.setItem("4chan-hide-t-" + board, JSON.stringify(hiddenThreads)); - }, - catalogWatch: function() { - if (!$.hasStorage) { - return; - } - this.hiddenThreads = JSON.parse(localStorage.getItem("4chan-hide-t-" + g.BOARD)) || {}; - return Main.ready(function() { - return new MutationObserver(ThreadHiding.catalogSave).observe($.id('threads'), { - attributes: true, - subtree: true, - attributeFilter: ['style'] - }); - }); - }, - catalogSave: function() { - var hiddenThreads2, threadID; - hiddenThreads2 = JSON.parse(localStorage.getItem("4chan-hide-t-" + g.BOARD)) || {}; - for (threadID in hiddenThreads2) { - if (!(threadID in ThreadHiding.hiddenThreads)) { - ThreadHiding.db.set({ - boardID: g.BOARD.ID, - threadID: threadID, - val: { - makeStub: Conf['Stubs'] - } - }); - } - } - for (threadID in ThreadHiding.hiddenThreads) { - if (!(threadID in hiddenThreads2)) { - ThreadHiding.db["delete"]({ - boardID: g.BOARD.ID, - threadID: threadID - }); - } - } - return ThreadHiding.hiddenThreads = hiddenThreads2; - }, - node: function() { - var data; - if (this.isReply || this.isClone || this.isFetchedQuote) { - return; - } - if (data = ThreadHiding.db.get({ - boardID: this.board.ID, - threadID: this.ID - })) { - ThreadHiding.hide(this.thread, data.makeStub); - } - if (!Conf['Thread Hiding Buttons']) { - return; - } - return $.prepend(this.nodes.root, ThreadHiding.makeButton(this.thread, 'hide')); - }, - onIndexBuild: function(nodes) { - var k, len1, root, thread; - for (k = 0, len1 = nodes.length; k < len1; k++) { - root = nodes[k]; - thread = Get.threadFromRoot(root); - if (thread.isHidden && thread.stub && !root.contains(thread.stub)) { - ThreadHiding.makeStub(thread, root); - } - } - }, - menu: { - init: function() { - var apply, div, hideStubLink, makeStub; - if (g.VIEW !== 'index' || !Conf['Menu'] || !Conf['Thread Hiding Link']) { - return; - } - div = $.el('div', { - className: 'hide-thread-link', - textContent: 'Hide' - }); - apply = $.el('a', { - textContent: 'Apply', - href: 'javascript:;' - }); - $.on(apply, 'click', ThreadHiding.menu.hide); - makeStub = UI.checkbox('Stubs', 'Make stub'); - Menu.menu.addEntry({ - el: div, - order: 20, - open: function(arg) { - var isReply, thread; - thread = arg.thread, isReply = arg.isReply; - if (isReply || thread.isHidden || Conf['JSON Index'] && Conf['Index Mode'] === 'catalog') { - return false; - } - ThreadHiding.menu.thread = thread; - return true; - }, - subEntries: [ - { - el: apply - }, { - el: makeStub - } - ] - }); - div = $.el('a', { - className: 'show-thread-link', - textContent: 'Show', - href: 'javascript:;' - }); - $.on(div, 'click', ThreadHiding.menu.show); - Menu.menu.addEntry({ - el: div, - order: 20, - open: function(arg) { - var isReply, thread; - thread = arg.thread, isReply = arg.isReply; - if (isReply || !thread.isHidden || Conf['JSON Index'] && Conf['Index Mode'] === 'catalog') { - return false; - } - ThreadHiding.menu.thread = thread; - return true; - } - }); - hideStubLink = $.el('a', { - textContent: 'Hide stub', - href: 'javascript:;' - }); - $.on(hideStubLink, 'click', ThreadHiding.menu.hideStub); - return Menu.menu.addEntry({ - el: hideStubLink, - order: 15, - open: function(arg) { - var isReply, thread; - thread = arg.thread, isReply = arg.isReply; - if (isReply || !thread.isHidden || Conf['JSON Index'] && Conf['Index Mode'] === 'catalog') { - return false; - } - return ThreadHiding.menu.thread = thread; - } - }); - }, - hide: function() { - var makeStub, thread; - makeStub = $('input', this.parentNode).checked; - thread = ThreadHiding.menu.thread; - ThreadHiding.hide(thread, makeStub); - ThreadHiding.saveHiddenState(thread, makeStub); - return $.event('CloseMenu'); - }, - show: function() { - var thread; - thread = ThreadHiding.menu.thread; - ThreadHiding.show(thread); - ThreadHiding.saveHiddenState(thread); - return $.event('CloseMenu'); - }, - hideStub: function() { - var thread; - thread = ThreadHiding.menu.thread; - ThreadHiding.show(thread); - ThreadHiding.hide(thread, false); - ThreadHiding.saveHiddenState(thread, false); - $.event('CloseMenu'); - } - }, - makeButton: function(thread, type) { - var a; - a = $.el('a', { - className: type + "-thread-button", - href: 'javascript:;' - }); - $.extend(a, { - innerHTML: "" - }); - a.dataset.fullID = thread.fullID; - $.on(a, 'click', ThreadHiding.toggle); - return a; - }, - makeStub: function(thread, root) { - var a, numReplies, summary; - numReplies = $$('.thread > .replyContainer', root).length; - if (summary = $('.summary', root)) { - numReplies += +summary.textContent.match(/\d+/); - } - a = ThreadHiding.makeButton(thread, 'show'); - $.add(a, $.tn(" " + thread.OP.info.nameBlock + " (" + (numReplies === 1 ? '1 reply' : numReplies + " replies") + ")")); - thread.stub = $.el('div', { - className: 'stub' - }); - if (Conf['Menu']) { - $.add(thread.stub, [a, Menu.makeButton(thread.OP)]); - } else { - $.add(thread.stub, a); - } - return $.prepend(root, thread.stub); - }, - saveHiddenState: function(thread, makeStub) { - if (thread.isHidden) { - ThreadHiding.db.set({ - boardID: thread.board.ID, - threadID: thread.ID, - val: { - makeStub: makeStub - } - }); - } else { - ThreadHiding.db["delete"]({ - boardID: thread.board.ID, - threadID: thread.ID - }); - } - return ThreadHiding.catalogSet(thread.board); - }, - toggle: function(thread) { - if (!(thread instanceof Thread)) { - thread = g.threads[this.dataset.fullID]; - } - if (thread.isHidden) { - ThreadHiding.show(thread); - } else { - ThreadHiding.hide(thread); - } - return ThreadHiding.saveHiddenState(thread); - }, - hide: function(thread, makeStub) { - var threadRoot; - if (makeStub == null) { - makeStub = Conf['Stubs']; - } - if (thread.isHidden) { - return; - } - threadRoot = thread.OP.nodes.root.parentNode; - thread.isHidden = true; - if (Conf['JSON Index']) { - Index.updateHideLabel(); - } - if (!makeStub) { - return threadRoot.hidden = true; - } - return ThreadHiding.makeStub(thread, threadRoot); - }, - show: function(thread) { - var threadRoot; - if (thread.stub) { - $.rm(thread.stub); - delete thread.stub; - } - threadRoot = thread.OP.nodes.root.parentNode; - threadRoot.hidden = thread.isHidden = false; - if (Conf['JSON Index']) { - return Index.updateHideLabel(); - } - } - }; - - QuoteBacklink = { - containers: {}, - init: function() { - var ref; - if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Quote Backlinks']) { - return; - } - Post.callbacks.push({ - name: 'Quote Backlinking Part 1', - cb: this.firstNode - }); - return Post.callbacks.push({ - name: 'Quote Backlinking Part 2', - cb: this.secondNode - }); - }, - firstNode: function() { - var a, clone, container, containers, hash, k, len1, len2, len3, link, markYours, nodes, post, q, quote, ref, ref1, ref2, u; - if (this.isClone || !this.quotes.length || this.isRebuilt) { - return; - } - markYours = Conf['Mark Quotes of You'] && ((ref = QuoteYou.db) != null ? ref.get({ - boardID: this.board.ID, - threadID: this.thread.ID, - postID: this.ID - }) : void 0); - a = $.el('a', { - href: Build.postURL(this.board.ID, this.thread.ID, this.ID), - className: this.isHidden ? 'filtered backlink' : 'backlink', - textContent: Conf['backlink'].replace(/%(?:id|%)/g, (function(_this) { - return function(x) { - return { - '%id': _this.ID, - '%%': '%' - }[x]; - }; - })(this)) + (markYours ? '\u00A0(You)' : '') - }); - ref1 = this.quotes; - for (k = 0, len1 = ref1.length; k < len1; k++) { - quote = ref1[k]; - containers = [QuoteBacklink.getContainer(quote)]; - if ((post = g.posts[quote]) && post.nodes.backlinkContainer) { - ref2 = post.clones; - for (q = 0, len2 = ref2.length; q < len2; q++) { - clone = ref2[q]; - containers.push(clone.nodes.backlinkContainer); - } - } - for (u = 0, len3 = containers.length; u < len3; u++) { - container = containers[u]; - link = a.cloneNode(true); - nodes = container.firstChild ? [$.tn(' '), link] : [link]; - if (Conf['Quote Previewing']) { - $.on(link, 'mouseover', QuotePreview.mouseover); - } - if (Conf['Quote Inlining']) { - $.on(link, 'click', QuoteInline.toggle); - if (Conf['Quote Hash Navigation']) { - hash = QuoteInline.qiQuote(link, $.hasClass(link, 'filtered')); - nodes.push(hash); - } - } - $.add(container, nodes); - } - } - }, - secondNode: function() { - var container; - if (this.isClone && (this.origin.isReply || Conf['OP Backlinks'])) { - this.nodes.backlinkContainer = $('.container', this.nodes.info); - return; - } - if (!(this.isReply || Conf['OP Backlinks'])) { - return; - } - container = QuoteBacklink.getContainer(this.fullID); - this.nodes.backlinkContainer = container; - return $.add(this.nodes.info, container); - }, - getContainer: function(id) { - var base1; - return (base1 = this.containers)[id] || (base1[id] = $.el('span', { - className: 'container' - })); - } - }; - - QuoteCT = { - init: function() { - var ref; - if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Mark Cross-thread Quotes']) { - return; - } - if (Conf['Comment Expansion']) { - ExpandComment.callbacks.push(this.node); - } - this.text = '\u00A0(Cross-thread)'; - return Post.callbacks.push({ - name: 'Mark Cross-thread Quotes', - cb: this.node - }); - }, - node: function() { - var board, boardID, k, len1, quotelink, ref, ref1, ref2, thread, threadID; - if (this.isClone && this.thread === this.context.thread) { - return; - } - ref = this.context, board = ref.board, thread = ref.thread; - ref1 = this.nodes.quotelinks; - for (k = 0, len1 = ref1.length; k < len1; k++) { - quotelink = ref1[k]; - ref2 = Get.postDataFromLink(quotelink), boardID = ref2.boardID, threadID = ref2.threadID; - if (!threadID) { - continue; - } - if (this.isClone) { - quotelink.textContent = quotelink.textContent.replace(QuoteCT.text, ''); - } - if (boardID === board.ID && threadID !== thread.ID) { - $.add(quotelink, $.tn(QuoteCT.text)); - } - } - } - }; - - QuoteInline = { - init: function() { - var ref; - if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Quote Inlining']) { - return; - } - if (Conf['Comment Expansion']) { - ExpandComment.callbacks.push(this.node); - } - return Post.callbacks.push({ - name: 'Quote Inlining', - cb: this.node - }); - }, - node: function() { - var isClone, k, len1, len2, link, process, q, ref, ref1; - process = QuoteInline.process; - isClone = this.isClone; - ref = this.nodes.quotelinks; - for (k = 0, len1 = ref.length; k < len1; k++) { - link = ref[k]; - process(link, isClone); - } - ref1 = this.nodes.backlinks; - for (q = 0, len2 = ref1.length; q < len2; q++) { - link = ref1[q]; - process(link, isClone); - } - }, - process: function(link, clone) { - if (Conf['Quote Hash Navigation']) { - if (!clone) { - $.after(link, QuoteInline.qiQuote(link, $.hasClass(link, 'filtered'))); - } - } - return $.on(link, 'click', QuoteInline.toggle); - }, - qiQuote: function(link, hidden) { - var name; - name = "hashlink"; - if (hidden) { - name += " filtered"; - } - return $.el('a', { - className: name, - textContent: '#', - href: link.href - }); - }, - toggle: function(e) { - var boardID, context, postID, quoter, ref, ref1, threadID; - if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0) { - return; - } - ref = Get.postDataFromLink(this), boardID = ref.boardID, threadID = ref.threadID, postID = ref.postID; - if (Conf['Inline Cross-thread Quotes Only'] && g.VIEW === 'thread' && ((ref1 = g.posts[boardID + "." + postID]) != null ? ref1.nodes.root.offsetParent : void 0)) { - return; - } - e.preventDefault(); - quoter = Get.postFromNode(this); - context = quoter.context; - if ($.hasClass(this, 'inlined')) { - QuoteInline.rm(this, boardID, threadID, postID, context); - } else { - if ($.x("ancestor::div[@data-full-i-d='" + boardID + "." + postID + "']", this)) { - return; - } - QuoteInline.add(this, boardID, threadID, postID, context, quoter); - } - return this.classList.toggle('inlined'); - }, - findRoot: function(quotelink, isBacklink) { - if (isBacklink) { - return quotelink.parentNode.parentNode; - } else { - return $.x('ancestor-or-self::*[parent::blockquote][1]', quotelink); - } - }, - add: function(quotelink, boardID, threadID, postID, context, quoter) { - var inline, isBacklink, post, qroot, root; - isBacklink = $.hasClass(quotelink, 'backlink'); - inline = $.el('div', { - className: 'inline' - }); - inline.dataset.fullID = boardID + "." + postID; - root = QuoteInline.findRoot(quotelink, isBacklink); - $.after(root, inline); - qroot = $.x('ancestor::*[contains(@class,"postContainer")][1]', root); - $.addClass(qroot, 'hasInline'); - new Fetcher(boardID, threadID, postID, inline, quoter); - if (!((post = g.posts[boardID + "." + postID]) && context.thread === post.thread)) { - return; - } - if (isBacklink && Conf['Forward Hiding']) { - $.addClass(post.nodes.root, 'forwarded'); - post.forwarded++ || (post.forwarded = 1); - } - if (!Unread.posts) { - return; - } - return Unread.readSinglePost(post); - }, - rm: function(quotelink, boardID, threadID, postID, context) { - var el, inlined, isBacklink, post, qroot, ref, root; - isBacklink = $.hasClass(quotelink, 'backlink'); - root = QuoteInline.findRoot(quotelink, isBacklink); - root = $.x("following-sibling::div[@data-full-i-d='" + boardID + "." + postID + "'][1]", root); - qroot = $.x('ancestor::*[contains(@class,"postContainer")][1]', root); - $.rm(root); - if (!$('.inline', qroot)) { - $.rmClass(qroot, 'hasInline'); - } - if (!(el = root.firstElementChild)) { - return; - } - post = g.posts[boardID + "." + postID]; - post.rmClone(el.dataset.clone); - if (Conf['Forward Hiding'] && isBacklink && context.thread === g.threads[boardID + "." + threadID] && !--post.forwarded) { - delete post.forwarded; - $.rmClass(post.nodes.root, 'forwarded'); - } - while (inlined = $('.inlined', el)) { - ref = Get.postDataFromLink(inlined), boardID = ref.boardID, threadID = ref.threadID, postID = ref.postID; - QuoteInline.rm(inlined, boardID, threadID, postID, context); - $.rmClass(inlined, 'inlined'); - } - } - }; - - QuoteOP = { - init: function() { - var ref; - if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Mark OP Quotes']) { - return; - } - if (Conf['Comment Expansion']) { - ExpandComment.callbacks.push(this.node); - } - this.text = '\u00A0(OP)'; - return Post.callbacks.push({ - name: 'Mark OP Quotes', - cb: this.node - }); - }, - node: function() { - var boardID, fullID, i, postID, quotelink, quotelinks, quotes, ref, ref1; - if (this.isClone && this.thread === this.context.thread) { - return; - } - if (!(quotes = this.quotes).length) { - return; - } - quotelinks = this.nodes.quotelinks; - if (this.isClone && (ref = this.thread.fullID, indexOf.call(quotes, ref) >= 0)) { - i = 0; - while (quotelink = quotelinks[i++]) { - quotelink.textContent = quotelink.textContent.replace(QuoteOP.text, ''); - } - } - fullID = this.context.thread.fullID; - if (indexOf.call(quotes, fullID) < 0) { - return; - } - i = 0; - while (quotelink = quotelinks[i++]) { - ref1 = Get.postDataFromLink(quotelink), boardID = ref1.boardID, postID = ref1.postID; - if ((boardID + "." + postID) === fullID) { - $.add(quotelink, $.tn(QuoteOP.text)); - } - } - } - }; - - QuotePreview = { - init: function() { - var ref; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Quote Previewing'])) { - return; - } - if (Conf['Comment Expansion']) { - ExpandComment.callbacks.push(this.node); - } - return Post.callbacks.push({ - name: 'Quote Previewing', - cb: this.node - }); - }, - node: function() { - var k, len1, link, ref; - ref = this.nodes.quotelinks.concat(slice.call(this.nodes.backlinks)); - for (k = 0, len1 = ref.length; k < len1; k++) { - link = ref[k]; - $.on(link, 'mouseover', QuotePreview.mouseover); - } - }, - mouseover: function(e) { - var boardID, k, len1, origin, post, postID, posts, qp, ref, threadID; - if ($.hasClass(this, 'inlined') || !d.contains(this)) { - return; - } - ref = Get.postDataFromLink(this), boardID = ref.boardID, threadID = ref.threadID, postID = ref.postID; - qp = $.el('div', { - id: 'qp', - className: 'dialog' - }); - $.add(Header.hover, qp); - new Fetcher(boardID, threadID, postID, qp, Get.postFromNode(this)); - UI.hover({ - root: this, - el: qp, - latestEvent: e, - endEvents: 'mouseout click', - cb: QuotePreview.mouseout - }); - if (Conf['Quote Highlighting'] && (origin = g.posts[boardID + "." + postID])) { - posts = [origin].concat(origin.clones); - posts.pop(); - for (k = 0, len1 = posts.length; k < len1; k++) { - post = posts[k]; - $.addClass(post.nodes.post, 'qphl'); - } - } - }, - mouseout: function() { - var clone, k, len1, post, ref, root; - if (!(root = this.el.firstElementChild)) { - return; - } - clone = Get.postFromRoot(root); - post = clone.origin; - post.rmClone(root.dataset.clone); - if (!Conf['Quote Highlighting']) { - return; - } - ref = [post].concat(post.clones); - for (k = 0, len1 = ref.length; k < len1; k++) { - post = ref[k]; - $.rmClass(post.nodes.post, 'qphl'); - } - } - }; - - QuoteStrikeThrough = { - init: function() { - var ref; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && (Conf['Reply Hiding Buttons'] || (Conf['Menu'] && Conf['Reply Hiding Link']) || Conf['Filter']))) { - return; - } - return Post.callbacks.push({ - name: 'Strike-through Quotes', - cb: this.node - }); - }, - node: function() { - var boardID, k, len1, postID, quotelink, ref, ref1, ref2; - if (this.isClone) { - return; - } - ref = this.nodes.quotelinks; - for (k = 0, len1 = ref.length; k < len1; k++) { - quotelink = ref[k]; - ref1 = Get.postDataFromLink(quotelink), boardID = ref1.boardID, postID = ref1.postID; - if ((ref2 = g.posts[boardID + "." + postID]) != null ? ref2.isHidden : void 0) { - $.addClass(quotelink, 'filtered'); - } - } - } - }; - - - /* - <3 aeosynth - */ - - QuoteThreading = { - init: function() { - if (!(Conf['Quote Threading'] && g.VIEW === 'thread')) { - return; - } - this.controls = $.el('label', { - innerHTML: " Threading" - }); - this.threadNewLink = $.el('span', { - className: 'brackets-wrap threadnewlink', - hidden: true - }); - $.extend(this.threadNewLink, { - innerHTML: "Thread New Posts" - }); - this.input = $('input', this.controls); - this.input.checked = Conf['Thread Quotes']; - $.on(this.input, 'change', this.setEnabled); - $.on(this.input, 'change', this.rethread); - $.on(this.threadNewLink.firstElementChild, 'click', this.rethread); - $.on(d, '4chanXInitFinished', (function(_this) { - return function() { - return _this.ready = true; - }; - })(this)); - Header.menu.addEntry(this.entry = { - el: this.controls, - order: 99 - }); - Thread.callbacks.push({ - name: 'Quote Threading', - cb: this.setThread - }); - return Post.callbacks.push({ - name: 'Quote Threading', - cb: this.node - }); - }, - parent: {}, - children: {}, - inserted: {}, - setEnabled: function() { - var other, ref; - other = (ref = ReplyPruning.inputs) != null ? ref.enabled : void 0; - if (this.checked && (other != null ? other.checked : void 0)) { - other.checked = false; - $.event('change', null, other); - } - return $.cb.checked.call(this); - }, - setThread: function() { - QuoteThreading.thread = this; - return $.asap((function() { - return !Conf['Thread Updater'] || $('.navLinksBot > .updatelink'); - }), function() { - var navLinksBot; - if ((navLinksBot = $('.navLinksBot'))) { - return $.add(navLinksBot, [$.tn(' '), QuoteThreading.threadNewLink]); - } - }); - }, - node: function() { - var ancestor, k, lastParent, len1, parent, parents, quote, ref; - if (this.isFetchedQuote || this.isClone || !this.isReply) { - return; - } - parents = new Set(); - lastParent = null; - ref = this.quotes; - for (k = 0, len1 = ref.length; k < len1; k++) { - quote = ref[k]; - if (parent = g.posts[quote]) { - if (!parent.isFetchedQuote && parent.isReply && parent.ID < this.ID) { - parents.add(parent.ID); - if (!lastParent || parent.ID > lastParent.ID) { - lastParent = parent; - } - } - } - } - if (!lastParent) { - return; - } - ancestor = lastParent; - while (ancestor = QuoteThreading.parent[ancestor.fullID]) { - parents["delete"](ancestor.ID); - } - if (parents.size === 1) { - return QuoteThreading.parent[this.fullID] = lastParent; - } - }, - descendants: function(post) { - var child, children, k, len1, posts; - posts = [post]; - if (children = QuoteThreading.children[post.fullID]) { - for (k = 0, len1 = children.length; k < len1; k++) { - child = children[k]; - posts = posts.concat(QuoteThreading.descendants(child)); - } - } - return posts; - }, - insert: function(post) { - var base1, child, children, descendants, i, k, len1, name1, next, nodes, order, parent, prev, prev2, q, threadContainer, u, x; - if (!(Conf['Thread Quotes'] && (parent = QuoteThreading.parent[post.fullID]) && !QuoteThreading.inserted[post.fullID])) { - return false; - } - descendants = QuoteThreading.descendants(post); - if (!Unread.posts.has(parent.ID)) { - if ((function() { - var k, len1, x; - for (k = 0, len1 = descendants.length; k < len1; k++) { - x = descendants[k]; - if (Unread.posts.has(x.ID)) { - return true; - } - } - })()) { - QuoteThreading.threadNewLink.hidden = false; - return false; - } - } - order = Unread.order; - children = ((base1 = QuoteThreading.children)[name1 = parent.fullID] || (base1[name1] = [])); - threadContainer = parent.nodes.threadContainer || $.el('div', { - className: 'threadContainer' - }); - nodes = [post.nodes.root]; - if (post.nodes.threadContainer) { - nodes.push(post.nodes.threadContainer); - } - i = children.length; - for (k = children.length - 1; k >= 0; k += -1) { - child = children[k]; - if (child.ID >= post.ID) { - i--; - } - } - if (i !== children.length) { - next = children[i]; - for (q = 0, len1 = descendants.length; q < len1; q++) { - x = descendants[q]; - order.before(order[next.ID], order[x.ID]); - } - children.splice(i, 0, post); - $.before(next.nodes.root, nodes); - } else { - prev = parent; - while ((prev2 = QuoteThreading.children[prev.fullID]) && prev2.length) { - prev = prev2[prev2.length - 1]; - } - for (u = descendants.length - 1; u >= 0; u += -1) { - x = descendants[u]; - order.after(order[prev.ID], order[x.ID]); - } - children.push(post); - $.add(threadContainer, nodes); - } - QuoteThreading.inserted[post.fullID] = true; - if (!parent.nodes.threadContainer) { - parent.nodes.threadContainer = threadContainer; - $.addClass(parent.nodes.root, 'threadOP'); - $.after(parent.nodes.root, threadContainer); - } - return true; - }, - rethread: function() { - var nodes, posts, thread; - if (!QuoteThreading.ready) { - return; - } - thread = QuoteThreading.thread; - posts = thread.posts; - QuoteThreading.threadNewLink.hidden = true; - if (Conf['Thread Quotes']) { - posts.forEach(QuoteThreading.insert); - } else { - nodes = []; - Unread.order = new RandomAccessList(); - QuoteThreading.inserted = {}; - posts.forEach(function(post) { - if (post.isFetchedQuote) { - return; - } - Unread.order.push(post); - if (post.isReply) { - nodes.push(post.nodes.root); - } - if (QuoteThreading.children[post.fullID]) { - delete QuoteThreading.children[post.fullID]; - $.rmClass(post.nodes.root, 'threadOP'); - $.rm(post.nodes.threadContainer); - return delete post.nodes.threadContainer; - } - }); - $.add(thread.OP.nodes.root.parentNode, nodes); - } - Unread.position = Unread.order.first; - Unread.updatePosition(); - Unread.setLine(true); - Unread.read(); - return Unread.update(); - } - }; - - QuoteYou = { - init: function() { - var ref; - if (!Conf['Remember Your Posts']) { - return; - } - this.db = new DataBoard('yourPosts'); - $.sync('Remember Your Posts', function(enabled) { - return Conf['Remember Your Posts'] = enabled; - }); - $.on(d, 'QRPostSuccessful', function(e) { - var boardID, postID, ref, threadID; - $.forceSync('Remember Your Posts'); - if (Conf['Remember Your Posts']) { - ref = e.detail, boardID = ref.boardID, threadID = ref.threadID, postID = ref.postID; - return QuoteYou.db.set({ - boardID: boardID, - threadID: threadID, - postID: postID, - val: true - }); - } - }); - if ((ref = g.VIEW) !== 'index' && ref !== 'thread') { - return; - } - if (Conf['Highlight Own Posts']) { - $.addClass(doc, 'highlight-own'); - } - if (Conf['Highlight Posts Quoting You']) { - $.addClass(doc, 'highlight-you'); - } - if (Conf['Comment Expansion']) { - ExpandComment.callbacks.push(this.node); - } - this.text = '\u00A0(You)'; - return Post.callbacks.push({ - name: 'Mark Quotes of You', - cb: this.node - }); - }, - node: function() { - var k, len1, quotelink, ref; - if (this.isClone) { - return; - } - if (QuoteYou.db.get({ - boardID: this.board.ID, - threadID: this.thread.ID, - postID: this.ID - })) { - $.addClass(this.nodes.root, 'yourPost'); - } - if (!this.quotes.length) { - return; - } - ref = this.nodes.quotelinks; - for (k = 0, len1 = ref.length; k < len1; k++) { - quotelink = ref[k]; - if (!(QuoteYou.db.get(Get.postDataFromLink(quotelink)))) { - continue; - } - if (Conf['Mark Quotes of You']) { - $.add(quotelink, $.tn(QuoteYou.text)); - } - $.addClass(quotelink, 'you'); - $.addClass(this.nodes.root, 'quotesYou'); - } - }, - cb: { - seek: function(type) { - var highlight, post, posts, result, str; - if (highlight = $('.highlight')) { - $.rmClass(highlight, 'highlight'); - } - if (!(QuoteYou.lastRead && doc.contains(QuoteYou.lastRead) && $.hasClass(QuoteYou.lastRead, 'quotesYou'))) { - if (!(post = QuoteYou.lastRead = $('.quotesYou'))) { - new Notice('warning', 'No posts are currently quoting you, loser.', 20); - return; - } - if (QuoteYou.cb.scroll(post)) { - return; - } - } else { - post = QuoteYou.lastRead; - } - str = type + "::div[contains(@class,'quotesYou')]"; - while ((post = (result = $.X(str, post)).snapshotItem(type === 'preceding' ? result.snapshotLength - 1 : 0))) { - if (QuoteYou.cb.scroll(post)) { - return; - } - } - posts = $$('.quotesYou'); - return QuoteYou.cb.scroll(posts[type === 'following' ? 0 : posts.length - 1]); - }, - scroll: function(root) { - var post; - post = $('.post', root); - if (!post.getBoundingClientRect().height) { - return false; - } else { - QuoteYou.lastRead = root; - window.location = "#" + post.id; - Header.scrollTo(post); - $.addClass(post, 'highlight'); - return true; - } - } - } - }; - - Quotify = { - init: function() { - var ref; - if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Resurrect Quotes']) { - return; - } - if (Conf['Comment Expansion']) { - ExpandComment.callbacks.push(this.node); - } - return Post.callbacks.push({ - name: 'Resurrect Quotes', - cb: this.node - }); - }, - node: function() { - var deadlink, k, len1, ref; - if (this.isClone) { - return; - } - ref = $$('.deadlink', this.nodes.comment); - for (k = 0, len1 = ref.length; k < len1; k++) { - deadlink = ref[k]; - Quotify.parseDeadlink.call(this, deadlink); - } - }, - parseDeadlink: function(deadlink) { - var a, boardID, fetchable, m, post, postID, quote, quoteID, redirect, ref; - if ($.hasClass(deadlink.parentNode, 'prettyprint')) { - Quotify.fixDeadlink(deadlink); - return; - } - quote = deadlink.textContent; - if (!(postID = (ref = quote.match(/\d+$/)) != null ? ref[0] : void 0)) { - return; - } - if (postID[0] === '0') { - Quotify.fixDeadlink(deadlink); - return; - } - boardID = (m = quote.match(/^>>>\/([a-z\d]+)/)) ? m[1] : this.board.ID; - quoteID = boardID + "." + postID; - if (post = g.posts[quoteID]) { - if (!post.isDead) { - a = $.el('a', { - href: Build.postURL(boardID, post.thread.ID, postID), - className: 'quotelink', - textContent: quote - }); - } else { - a = $.el('a', { - href: Build.postURL(boardID, post.thread.ID, postID), - className: 'quotelink deadlink', - textContent: quote + "\u00A0(Dead)" - }); - $.extend(a.dataset, { - boardID: boardID, - threadID: post.thread.ID, - postID: postID - }); - } - } else { - redirect = Redirect.to('thread', { - boardID: boardID, - threadID: 0, - postID: postID - }); - fetchable = Redirect.to('post', { - boardID: boardID, - postID: postID - }); - if (redirect || fetchable) { - a = $.el('a', { - href: redirect || 'javascript:;', - className: 'deadlink', - textContent: quote + "\u00A0(Dead)" - }); - if (fetchable) { - $.addClass(a, 'quotelink'); - $.extend(a.dataset, { - boardID: boardID, - postID: postID - }); - } - } - } - if (indexOf.call(this.quotes, quoteID) < 0) { - this.quotes.push(quoteID); - } - if (!a) { - deadlink.textContent = quote + "\u00A0(Dead)"; - return; - } - $.replace(deadlink, a); - if ($.hasClass(a, 'quotelink')) { - return this.nodes.quotelinks.push(a); - } - }, - fixDeadlink: function(deadlink) { - var el, green; - if (!(el = deadlink.previousSibling) || el.nodeName === 'BR') { - green = $.el('span', { - className: 'quote' - }); - $.before(deadlink, green); - $.add(green, deadlink); - } - return $.replace(deadlink, slice.call(deadlink.childNodes)); - } - }; - - QR = { - mimeTypes: ['image/jpeg', 'image/png', 'image/gif', 'application/pdf', 'application/vnd.adobe.flash.movie', 'application/x-shockwave-flash', 'video/webm'], - validExtension: /\.(jpe?g|png|gif|pdf|swf|webm)$/i, - typeFromExtension: { - 'jpg': 'image/jpeg', - 'jpeg': 'image/jpeg', - 'png': 'image/png', - 'gif': 'image/gif', - 'pdf': 'application/pdf', - 'swf': 'application/vnd.adobe.flash.movie', - 'webm': 'video/webm' - }, - extensionFromType: { - 'image/jpeg': 'jpg', - 'image/png': 'png', - 'image/gif': 'gif', - 'application/pdf': 'pdf', - 'application/vnd.adobe.flash.movie': 'swf', - 'application/x-shockwave-flash': 'swf', - 'video/webm': 'webm' - }, - init: function() { - var sc, version; - if (!Conf['Quick Reply']) { - return; - } - this.posts = []; - if (g.VIEW === 'archive') { - return; - } - version = Conf['Use Recaptcha v1'] && Main.jsEnabled ? 'v1' : 'v2'; - this.captcha = Captcha[version]; - $.on(d, '4chanXInitFinished', this.initReady); - Post.callbacks.push({ - name: 'Quick Reply', - cb: this.node - }); - if (Conf['QR Shortcut']) { - this.shortcut = sc = $.el('a', { - className: 'qr-shortcut fa fa-comment-o disabled', - textContent: 'QR', - title: 'Quick Reply', - href: 'javascript:;' - }); - $.on(sc, 'click', function() { - if (!QR.postingIsEnabled) { - return; - } - if (Conf['Persistent QR'] || !QR.nodes || QR.nodes.el.hidden) { - QR.open(); - return QR.nodes.com.focus(); - } else { - return QR.close(); - } - }); - return Header.addShortcut(sc); - } - }, - initReady: function() { - var link, linkBot, navLinksBot, origToggle; - $.off(d, '4chanXInitFinished', this.initReady); - QR.postingIsEnabled = !!$.id('postForm'); - if (!QR.postingIsEnabled) { - return; - } - link = $.el('h1', { - className: "qr-link-container" - }); - $.extend(link, { - innerHTML: "" + (g.VIEW === "thread" ? "Reply to Thread" : "Start a Thread") + "" - }); - QR.link = link.firstElementChild; - $.on(link.firstChild, 'click', function() { - QR.open(); - return QR.nodes.com.focus(); - }); - if (Conf['Bottom QR Link'] && g.VIEW === 'thread') { - linkBot = $.el('div', { - className: "brackets-wrap qr-link-container-bottom" - }); - $.extend(linkBot, { - innerHTML: "Reply to Thread" - }); - $.on(linkBot.firstElementChild, 'click', function() { - QR.open(); - return QR.nodes.com.focus(); - }); - if ((navLinksBot = $('.navLinksBot'))) { - $.prepend(navLinksBot, linkBot); - } - } - origToggle = $.id('togglePostFormLink'); - $.before(origToggle, link); - origToggle.firstElementChild.textContent = 'Original Form'; - $.on(d, 'QRGetFile', QR.getFile); - $.on(d, 'QRSetFile', QR.setFile); - $.on(d, 'paste', QR.paste); - $.on(d, 'dragover', QR.dragOver); - $.on(d, 'drop', QR.dropFile); - $.on(d, 'dragstart dragend', QR.drag); - $.on(d, 'IndexRefresh', QR.generatePostableThreadsList); - $.on(d, 'ThreadUpdate', QR.statusCheck); - if (!Conf['Persistent QR']) { - return; - } - QR.open(); - if (Conf['Auto Hide QR']) { - return QR.hide(); - } - }, - statusCheck: function() { - var thread; - if (!QR.nodes) { - return; - } - thread = QR.posts[0].thread; - if (thread !== 'new' && g.threads[g.BOARD + "." + thread].isDead) { - return QR.abort(); - } else { - return QR.status(); - } - }, - node: function() { - $.on(this.nodes.quote, 'click', QR.quote); - if (this.isFetchedQuote) { - return QR.generatePostableThreadsList(); - } - }, - open: function() { - var err; - if (QR.nodes) { - if (QR.nodes.el.hidden) { - QR.captcha.setup(); - } - QR.nodes.el.hidden = false; - QR.unhide(); - } else { - try { - QR.dialog(); - } catch (_error) { - err = _error; - delete QR.nodes; - Main.handleErrors({ - message: 'Quick Reply dialog creation crashed.', - error: err - }); - return; - } - } - if (Conf['QR Shortcut']) { - return $.rmClass(QR.shortcut, 'disabled'); - } - }, - close: function() { - var k, len1, post, ref; - if (QR.req) { - QR.abort(); - return; - } - QR.nodes.el.hidden = true; - QR.cleanNotifications(); - d.activeElement.blur(); - $.rmClass(QR.nodes.el, 'dump'); - if (Conf['QR Shortcut']) { - $.addClass(QR.shortcut, 'disabled'); - } - new QR.post(true); - ref = QR.posts.splice(0, QR.posts.length - 1); - for (k = 0, len1 = ref.length; k < len1; k++) { - post = ref[k]; - post["delete"](); - } - QR.cooldown.auto = false; - QR.status(); - return QR.captcha.destroy(); - }, - focus: function() { - return $.queueTask(function() { - if (!QR.inBubble()) { - QR.hasFocus = d.activeElement && QR.nodes.el.contains(d.activeElement); - return QR.nodes.el.classList.toggle('focus', QR.hasFocus); - } - }); - }, - inBubble: function() { - var bubbles, ref; - bubbles = $$('iframe[src^="https://www.google.com/recaptcha/api2/frame"]'); - return (ref = d.activeElement, indexOf.call(bubbles, ref) >= 0) || bubbles.some(function(el) { - return getComputedStyle(el).visibility !== 'hidden' && el.getBoundingClientRect().bottom > 0; - }); - }, - hide: function() { - d.activeElement.blur(); - $.addClass(QR.nodes.el, 'autohide'); - return QR.nodes.autohide.checked = true; - }, - unhide: function() { - $.rmClass(QR.nodes.el, 'autohide'); - return QR.nodes.autohide.checked = false; - }, - toggleHide: function() { - if (this.checked) { - return QR.hide(); - } else { - return QR.unhide(); - } - }, - toggleSJIS: function(e) { - e.preventDefault(); - Conf['sjisPreview'] = !Conf['sjisPreview']; - $.set('sjisPreview', Conf['sjisPreview']); - return QR.nodes.el.classList.toggle('sjis-preview', Conf['sjisPreview']); - }, - texPreviewShow: function() { - if ($.hasClass(QR.nodes.el, 'tex-preview')) { - return QR.texPreviewHide(); - } - $.addClass(QR.nodes.el, 'tex-preview'); - QR.nodes.texPreview.textContent = QR.nodes.com.value; - return $.event('mathjax', null, QR.nodes.texPreview); - }, - texPreviewHide: function() { - return $.rmClass(QR.nodes.el, 'tex-preview'); - }, - setCustomCooldown: function(enabled) { - Conf['customCooldownEnabled'] = enabled; - QR.cooldown.customCooldown = enabled; - return QR.nodes.customCooldown.classList.toggle('disabled', !enabled); - }, - toggleCustomCooldown: function() { - var enabled; - enabled = $.hasClass(this, 'disabled'); - QR.setCustomCooldown(enabled); - return $.set('customCooldownEnabled', enabled); - }, - error: function(err, focusOverride) { - var el, notice, notif; - QR.open(); - if (typeof err === 'string') { - el = $.tn(err); - } else { - el = err; - el.removeAttribute('style'); - } - notice = new Notice('warning', el); - QR.notifications.push(notice); - if (!Header.areNotificationsEnabled) { - if (d.hidden && !QR.cooldown.auto) { - return alert(el.textContent); - } - } else if (d.hidden || !(focusOverride || d.hasFocus())) { - try { - notif = new Notification(el.textContent, { - body: el.textContent, - icon: Favicon.logo - }); - notif.onclick = function() { - return $.global(function() { - return window.focus(); - }); - }; - if ($.engine !== 'gecko') { - notif.onclose = function() { - return notice.close(); - }; - return notif.onshow = function() { - return setTimeout(function() { - notif.onclose = null; - return notif.close(); - }, 7 * $.SECOND); - }; - } - } catch (_error) {} - } - }, - notifications: [], - cleanNotifications: function() { - var k, len1, notification, ref; - ref = QR.notifications; - for (k = 0, len1 = ref.length; k < len1; k++) { - notification = ref[k]; - notification.close(); - } - return QR.notifications = []; - }, - status: function() { - var disabled, status, thread, value; - if (!QR.nodes) { - return; - } - thread = QR.posts[0].thread; - if (thread !== 'new' && g.threads[g.BOARD + "." + thread].isDead) { - value = 'Dead'; - disabled = true; - QR.cooldown.auto = false; - } - value = QR.req ? QR.req.progress : QR.cooldown.seconds || value; - status = QR.nodes.status; - status.value = !value ? 'Submit' : QR.cooldown.auto ? "Auto " + value : value; - return status.disabled = disabled || false; - }, - openPost: function() { - var index; - QR.open(); - if (QR.selected.isLocked) { - index = QR.posts.indexOf(QR.selected); - (QR.posts[index + 1] || new QR.post()).select(); - $.addClass(QR.nodes.el, 'dump'); - return QR.cooldown.auto = true; - } - }, - quote: function(e) { - var aa, ancestor, caretPos, com, frag, insideCode, k, len1, len2, len3, len4, len5, len6, node, post, q, range, ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, sel, text, thread, u, v, z; - if (e != null) { - e.preventDefault(); - } - if (!QR.postingIsEnabled) { - return; - } - sel = d.getSelection(); - post = Get.postFromNode(this); - text = post.board.ID === g.BOARD.ID ? ">>" + post + "\n" : ">>>/" + post.board + "/" + post + "\n"; - if (sel.toString().trim() && post === Get.postFromNode(sel.anchorNode)) { - range = sel.getRangeAt(0); - frag = range.cloneContents(); - ancestor = range.commonAncestorContainer; - if ($.x('ancestor-or-self::*[self::s or contains(@class,"removed-spoiler")]', ancestor)) { - $.prepend(frag, $.tn('[spoiler]')); - $.add(frag, $.tn('[/spoiler]')); - } - if (insideCode = $.x('ancestor-or-self::pre[contains(@class,"prettyprint")]', ancestor)) { - $.prepend(frag, $.tn('[code]')); - $.add(frag, $.tn('[/code]')); - } - ref = $$((insideCode ? 'br' : '.prettyprint br'), frag); - for (k = 0, len1 = ref.length; k < len1; k++) { - node = ref[k]; - $.replace(node, $.tn('\n')); - } - ref1 = $$('br', frag); - for (q = 0, len2 = ref1.length; q < len2; q++) { - node = ref1[q]; - if (node !== frag.lastChild) { - $.replace(node, $.tn('\n>')); - } - } - ref2 = $$('s, .removed-spoiler', frag); - for (u = 0, len3 = ref2.length; u < len3; u++) { - node = ref2[u]; - $.replace(node, [$.tn('[spoiler]')].concat(slice.call(node.childNodes), [$.tn('[/spoiler]')])); - } - ref3 = $$('.prettyprint', frag); - for (v = 0, len4 = ref3.length; v < len4; v++) { - node = ref3[v]; - $.replace(node, [$.tn('[code]')].concat(slice.call(node.childNodes), [$.tn('[/code]')])); - } - ref4 = $$('.linkify[data-original]', frag); - for (z = 0, len5 = ref4.length; z < len5; z++) { - node = ref4[z]; - $.replace(node, $.tn(node.dataset.original)); - } - ref5 = $$('.embedder', frag); - for (aa = 0, len6 = ref5.length; aa < len6; aa++) { - node = ref5[aa]; - if (((ref6 = node.previousSibling) != null ? ref6.nodeValue : void 0) === ' ') { - $.rm(node.previousSibling); - } - $.rm(node); - } - text += ">" + (frag.textContent.trim()) + "\n"; - } - QR.openPost(); - ref7 = QR.nodes, com = ref7.com, thread = ref7.thread; - if (!com.value) { - thread.value = Get.threadFromNode(this); - } - caretPos = com.selectionStart; - com.value = com.value.slice(0, caretPos) + text + com.value.slice(com.selectionEnd); - range = caretPos + text.length; - com.setSelectionRange(range, range); - com.focus(); - QR.selected.save(com); - return QR.selected.save(thread); - }, - characterCount: function() { - var count, counter; - counter = QR.nodes.charCount; - count = QR.nodes.com.value.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, '_').length; - counter.textContent = count; - counter.hidden = count < QR.max_comment / 2; - return (count > QR.max_comment ? $.addClass : $.rmClass)(counter, 'warning'); - }, - getFile: function() { - var ref; - return $.event('QRFile', (ref = QR.selected) != null ? ref.file : void 0); - }, - setFile: function(e) { - var file, name, ref, source; - ref = e.detail, file = ref.file, name = ref.name, source = ref.source; - if (name != null) { - file.name = name; - } - if (source != null) { - file.source = source; - } - QR.open(); - return QR.handleFiles([file]); - }, - drag: function(e) { - var toggle; - toggle = e.type === 'dragstart' ? $.off : $.on; - toggle(d, 'dragover', QR.dragOver); - return toggle(d, 'drop', QR.dropFile); - }, - dragOver: function(e) { - e.preventDefault(); - return e.dataTransfer.dropEffect = 'copy'; - }, - dropFile: function(e) { - if (!e.dataTransfer.files.length) { - return; - } - e.preventDefault(); - QR.open(); - return QR.handleFiles(e.dataTransfer.files); - }, - paste: function(e) { - var blob, files, item, k, len1, ref; - if (!e.clipboardData.items) { - return; - } - files = []; - ref = e.clipboardData.items; - for (k = 0, len1 = ref.length; k < len1; k++) { - item = ref[k]; - if (!(item.kind === 'file')) { - continue; - } - blob = item.getAsFile(); - blob.name = 'file'; - if (blob.type) { - blob.name += '.' + blob.type.split('/')[1]; - } - files.push(blob); - } - if (!files.length) { - return; - } - QR.open(); - QR.handleFiles(files); - return $.addClass(QR.nodes.el, 'dump'); - }, - pasteFF: function() { - var arr, blob, bstr, i, images, img, k, len1, m, pasteArea, q, ref, src; - pasteArea = QR.nodes.pasteArea; - if (!pasteArea.childNodes.length) { - return; - } - images = $$('img', pasteArea); - $.rmAll(pasteArea); - for (k = 0, len1 = images.length; k < len1; k++) { - img = images[k]; - src = img.src; - if (m = src.match(/data:(image\/(\w+));base64,(.+)/)) { - bstr = atob(m[3]); - arr = new Uint8Array(bstr.length); - for (i = q = 0, ref = bstr.length; 0 <= ref ? q < ref : q > ref; i = 0 <= ref ? ++q : --q) { - arr[i] = bstr.charCodeAt(i); - } - blob = new Blob([arr], { - type: m[1] - }); - blob.name = "file." + m[2]; - QR.handleFiles([blob]); - } else if (/^https?:\/\//.test(src)) { - QR.handleUrl(src); - } - } - }, - handleUrl: function(urlDefault) { - var url; - url = prompt('Enter a URL:', urlDefault); - if (url === null) { - return; - } - QR.nodes.fileButton.focus(); - return CrossOrigin.file(url, function(blob) { - if (blob && !/^text\//.test(blob.type)) { - return QR.handleFiles([blob]); - } else { - return QR.error("Can't load file."); - } - }); - }, - handleFiles: function(files) { - var file, k, len1; - if (this !== QR) { - files = slice.call(this.files); - this.value = null; - } - if (!files.length) { - return; - } - QR.cleanNotifications(); - for (k = 0, len1 = files.length; k < len1; k++) { - file = files[k]; - QR.handleFile(file, files.length); - } - if (files.length !== 1) { - $.addClass(QR.nodes.el, 'dump'); - } - if (d.activeElement === QR.nodes.fileButton && $.hasClass(QR.nodes.fileSubmit, 'has-file')) { - return QR.nodes.filename.focus(); - } - }, - handleFile: function(file, nfiles) { - var isText, post; - isText = /^text\//.test(file.type); - if (nfiles === 1) { - post = QR.selected; - } else { - post = QR.posts[QR.posts.length - 1]; - if ((isText ? post.com || post.pasting : post.file)) { - post = new QR.post(); - } - } - return post[isText ? 'pasteText' : 'setFile'](file); - }, - openFileInput: function() { - if (QR.nodes.fileButton.disabled) { - return; - } - QR.nodes.fileInput.click(); - return QR.nodes.fileButton.focus(); - }, - generatePostableThreadsList: function() { - var k, len1, list, options, ref, thread, val; - if (!QR.nodes) { - return; - } - list = QR.nodes.thread; - options = [list.firstElementChild]; - ref = g.BOARD.threads.keys; - for (k = 0, len1 = ref.length; k < len1; k++) { - thread = ref[k]; - options.push($.el('option', { - value: thread, - textContent: "Thread " + thread - })); - } - val = list.value; - $.rmAll(list); - $.add(list, options); - list.value = val; - if (list.value === val) { - return; - } - list.value = g.VIEW === 'thread' ? g.THREADID : 'new'; - return (g.VIEW === 'thread' ? $.addClass : $.rmClass)(QR.nodes.el, 'reply-to-thread'); - }, - dialog: function() { - var dialog, event, i, items, m, match_max, match_min, name, node, nodes, ref, rules, save, scriptData, setNode; - QR.nodes = nodes = { - el: dialog = UI.dialog('qr', 'top: 50px; right: 0px;', { - innerHTML: "
      ×
      No selected file
      " - }) - }; - setNode = function(name, query) { - return nodes[name] = $(query, dialog); - }; - setNode('move', '.move'); - setNode('autohide', '#autohide'); - setNode('close', '.close'); - setNode('thread', 'select'); - setNode('form', 'form'); - setNode('sjisToggle', '#sjis-toggle'); - setNode('texButton', '#tex-preview-button'); - setNode('name', '[data-name=name]'); - setNode('email', '[data-name=email]'); - setNode('sub', '[data-name=sub]'); - setNode('com', '[data-name=com]'); - setNode('charCount', '#char-count'); - setNode('texPreview', '#tex-preview'); - setNode('dumpList', '#dump-list'); - setNode('addPost', '#add-post'); - setNode('oekaki', '.oekaki'); - setNode('drawButton', '#qr-draw-button'); - setNode('fileSubmit', '#file-n-submit'); - setNode('fileButton', '#qr-file-button'); - setNode('noFile', '#qr-no-file'); - setNode('filename', '#qr-filename'); - setNode('spoiler', '#qr-file-spoiler'); - setNode('oekakiButton', '#qr-oekaki-button'); - setNode('fileRM', '#qr-filerm'); - setNode('urlButton', '#url-button'); - setNode('pasteArea', '#paste-area'); - setNode('customCooldown', '#custom-cooldown-button'); - setNode('dumpButton', '#dump-button'); - setNode('status', '[type=submit]'); - setNode('flashTag', '[name=filetag]'); - setNode('fileInput', '[type=file]'); - rules = $('ul.rules').textContent.trim(); - match_min = rules.match(/.+smaller than (\d+)x(\d+).+/); - match_max = rules.match(/.+greater than (\d+)x(\d+).+/); - QR.min_width = +(match_min != null ? match_min[1] : void 0) || 1; - QR.min_height = +(match_min != null ? match_min[2] : void 0) || 1; - QR.max_width = +(match_max != null ? match_max[1] : void 0) || 10000; - QR.max_height = +(match_max != null ? match_max[2] : void 0) || 10000; - scriptData = Get.scriptData(); - QR.max_size = (m = scriptData.match(/\bmaxFilesize *= *(\d+)\b/)) ? +m[1] : 4194304; - QR.max_size_video = (m = scriptData.match(/\bmaxWebmFilesize *= *(\d+)\b/)) ? +m[1] : QR.max_size; - QR.max_comment = (m = scriptData.match(/\bcomlen *= *(\d+)\b/)) ? +m[1] : 2000; - QR.max_width_video = QR.max_height_video = 2048; - QR.max_duration_video = (ref = g.BOARD.ID) === 'gif' || ref === 'wsg' ? 300 : 120; - if (Conf['Show New Thread Option in Threads']) { - $.addClass(QR.nodes.el, 'show-new-thread-option'); - } - if (Conf['Show Name and Subject']) { - $.addClass(QR.nodes.name, 'force-show'); - $.addClass(QR.nodes.sub, 'force-show'); - QR.nodes.email.placeholder = 'E-mail'; - } - QR.forcedAnon = !!$('form[name="post"] input[name="name"][type="hidden"]'); - if (QR.forcedAnon) { - $.addClass(QR.nodes.el, 'forced-anon'); - } - QR.spoiler = !!$('.postForm input[name=spoiler]'); - if (QR.spoiler) { - $.addClass(QR.nodes.el, 'has-spoiler'); - } - if (g.BOARD.ID === 'jp' && Conf['sjisPreview']) { - $.addClass(QR.nodes.el, 'sjis-preview'); - } - if (parseInt(Conf['customCooldown'], 10) > 0) { - $.addClass(QR.nodes.fileSubmit, 'custom-cooldown'); - $.get('customCooldownEnabled', Conf['customCooldownEnabled'], function(arg) { - var customCooldownEnabled; - customCooldownEnabled = arg.customCooldownEnabled; - QR.setCustomCooldown(customCooldownEnabled); - return $.sync('customCooldownEnabled', QR.setCustomCooldown); - }); - } - $.on(nodes.autohide, 'change', QR.toggleHide); - $.on(nodes.close, 'click', QR.close); - $.on(nodes.form, 'submit', QR.submit); - $.on(nodes.sjisToggle, 'click', QR.toggleSJIS); - $.on(nodes.texButton, 'mousedown', QR.texPreviewShow); - $.on(nodes.texButton, 'mouseup', QR.texPreviewHide); - $.on(nodes.addPost, 'click', function() { - return new QR.post(true); - }); - $.on(nodes.drawButton, 'click', QR.oekaki.draw); - $.on(nodes.fileButton, 'click', QR.openFileInput); - $.on(nodes.noFile, 'click', QR.openFileInput); - $.on(nodes.filename, 'focus', function() { - return $.addClass(this.parentNode, 'focus'); - }); - $.on(nodes.filename, 'blur', function() { - return $.rmClass(this.parentNode, 'focus'); - }); - $.on(nodes.spoiler, 'change', function() { - return QR.selected.nodes.spoiler.click(); - }); - $.on(nodes.oekakiButton, 'click', QR.oekaki.button); - $.on(nodes.fileRM, 'click', function() { - return QR.selected.rmFile(); - }); - $.on(nodes.urlButton, 'click', function() { - return QR.handleUrl(''); - }); - $.on(nodes.customCooldown, 'click', QR.toggleCustomCooldown); - $.on(nodes.dumpButton, 'click', function() { - return nodes.el.classList.toggle('dump'); - }); - $.on(nodes.fileInput, 'change', QR.handleFiles); - window.addEventListener('focus', QR.focus, true); - window.addEventListener('blur', QR.focus, true); - $.on(d, 'click', QR.focus); - if ($.engine === 'gecko') { - nodes.pasteArea.hidden = false; - new MutationObserver(QR.pasteFF).observe(nodes.pasteArea, { - childList: true - }); - } - items = ['thread', 'name', 'email', 'sub', 'com', 'filename']; - i = 0; - save = function() { - return QR.selected.save(this); - }; - while (name = items[i++]) { - if (!(node = nodes[name])) { - continue; - } - event = node.nodeName === 'SELECT' ? 'change' : 'input'; - $.on(nodes[name], event, save); - } - if ($.engine === 'gecko' && Conf['Remember QR Size']) { - $.get('QR Size', '', function(item) { - return nodes.com.style.cssText = item['QR Size']; - }); - $.on(nodes.com, 'mouseup', function(e) { - if (e.button !== 0) { - return; - } - return $.set('QR Size', this.style.cssText); - }); - } - QR.generatePostableThreadsList(); - QR.persona.init(); - new QR.post(true); - QR.status(); - QR.cooldown.setup(); - QR.captcha.init(); - $.add(d.body, dialog); - QR.captcha.setup(); - QR.oekaki.setup(); - return $.event('QRDialogCreation', null, dialog); - }, - submit: function(e) { - var captcha, cb, err, extra, filetag, formData, options, post, ref, textOnly, thread, threadID; - if (e != null) { - e.preventDefault(); - } - if (QR.req) { - QR.abort(); - return; - } - if (QR.cooldown.seconds) { - QR.cooldown.auto = !QR.cooldown.auto; - QR.status(); - return; - } - post = QR.posts[0]; - post.forceSave(); - threadID = post.thread; - thread = g.BOARD.threads[threadID]; - if (g.BOARD.ID === 'f' && threadID === 'new') { - filetag = QR.nodes.flashTag.value; - } - if (threadID === 'new') { - threadID = null; - if (g.BOARD.ID === 'vg' && !post.sub) { - err = 'New threads require a subject.'; - } else if (!($.hasClass(d.body, 'text_only') || post.file || (textOnly = !!$('input[name=textonly]', $.id('postForm'))))) { - err = 'No file selected.'; - } - } else if (g.BOARD.threads[threadID].isClosed) { - err = 'You can\'t reply to this thread anymore.'; - } else if (!(post.com || post.file)) { - err = 'No comment or file.'; - } else if (post.file && thread.fileLimit) { - err = 'Max limit of image replies has been reached.'; - } - if (g.BOARD.ID === 'r9k' && !((ref = post.com) != null ? ref.match(/[a-z-]/i) : void 0)) { - err || (err = 'Original comment required.'); - } - if (QR.captcha.isEnabled && !err) { - captcha = QR.captcha.getOne(); - if (!captcha) { - err = 'No valid captcha.'; - QR.captcha.setup(!QR.cooldown.auto || d.activeElement === QR.nodes.status); - } - } - QR.cleanNotifications(); - if (err) { - QR.cooldown.auto = false; - QR.status(); - QR.error(err); - return; - } - QR.cooldown.auto = QR.posts.length > 1; - if (Conf['Auto Hide QR'] && !QR.cooldown.auto) { - QR.hide(); - } - if (!QR.cooldown.auto && $.x('ancestor::div[@id="qr"]', d.activeElement)) { - d.activeElement.blur(); - } - post.lock(); - formData = { - resto: threadID, - name: !QR.forcedAnon ? post.name : void 0, - email: post.email, - sub: !(QR.forcedAnon || threadID) ? post.sub : void 0, - com: post.com, - upfile: post.file, - filetag: filetag, - spoiler: post.spoiler, - textonly: textOnly, - mode: 'regist', - pwd: QR.persona.pwd - }; - options = { - responseType: 'document', - withCredentials: true, - onload: QR.response, - onerror: function() { - delete QR.req; - post.unlock(); - QR.cooldown.auto = false; - QR.status(); - return QR.error($.el('span', { - innerHTML: "4chan X encountered an error while posting. [Banned?] [More info]" - })); - } - }; - extra = { - form: $.formData(formData), - upCallbacks: { - onload: function() { - QR.req.isUploadFinished = true; - QR.req.progress = '...'; - return QR.status(); - }, - onprogress: function(e) { - QR.req.progress = (Math.round(e.loaded / e.total * 100)) + "%"; - return QR.status(); - } - } - }; - cb = function(response) { - if (response != null) { - if (response.challenge != null) { - extra.form.append('recaptcha_challenge_field', response.challenge); - extra.form.append('recaptcha_response_field', response.response); - } else { - extra.form.append('g-recaptcha-response', response.response); - } - } - QR.req = $.ajax("https://sys.4chan.org/" + g.BOARD + "/post", options, extra); - return QR.req.progress = '...'; - }; - if (typeof captcha === 'function') { - QR.req = { - progress: '...', - abort: function() { - return cb = null; - } - }; - captcha(function(response) { - if (response) { - return typeof cb === "function" ? cb(response) : void 0; - } else { - delete QR.req; - post.unlock(); - QR.cooldown.auto = !!QR.captcha.captchas.length; - return QR.status(); - } - }); - } else { - cb(captcha); - } - return QR.status(); - }, - response: function() { - var URL, _, ban, err, h1, isReply, lastPostToThread, m, open, post, postID, postsCount, ref, ref1, ref2, req, resDoc, seconds, threadID; - req = QR.req; - delete QR.req; - post = QR.posts[0]; - post.unlock(); - resDoc = req.response; - if (ban = $('.banType', resDoc)) { - err = $.el('span', ban.textContent.toLowerCase() === 'banned' ? { - innerHTML: "You are banned on " + $(".board", resDoc).innerHTML + "! ;_;
      Click here to see the reason." - } : { - innerHTML: "You were issued a warning on " + $(".board", resDoc).innerHTML + " as " + $(".nameBlock", resDoc).innerHTML + ".
      Reason: " + $(".reason", resDoc).innerHTML - }); - } else if (err = resDoc.getElementById('errmsg')) { - if ((ref = $('a', err)) != null) { - ref.target = '_blank'; - } - } else if (resDoc.title !== 'Post successful!') { - err = 'Connection error with sys.4chan.org.'; - } else if (req.status !== 200) { - err = "Error " + req.statusText + " (" + req.status + ")"; - } - if (err) { - if (/captcha|verification/i.test(err.textContent) || err === 'Connection error with sys.4chan.org.') { - if (/mistyped/i.test(err.textContent)) { - err = $.el('span', { - innerHTML: "You mistyped the CAPTCHA, or the CAPTCHA malfunctioned [complain here]." - }); - } else if (/expired/i.test(err.textContent)) { - err = 'This CAPTCHA is no longer valid because it has expired.'; - } - QR.cooldown.auto = QR.captcha.isEnabled || err === 'Connection error with sys.4chan.org.'; - QR.cooldown.addDelay(post, 2); - } else if (err.textContent && (m = err.textContent.match(/(?:(\d+)\s+minutes?\s+)?(\d+)\s+second/i)) && !/duplicate|hour/i.test(err.textContent)) { - QR.cooldown.auto = !/have\s+been\s+muted/i.test(err.textContent); - seconds = 60 * (+(m[1] || 0)) + (+m[2]); - if (/muted/i.test(err.textContent)) { - QR.cooldown.addMute(seconds); - } else { - QR.cooldown.addDelay(post, seconds); - } - } else { - QR.cooldown.auto = false; - } - QR.captcha.setup(QR.cooldown.auto && ((ref1 = d.activeElement) === QR.nodes.status || ref1 === d.body)); - if (QR.captcha.isEnabled && !QR.captcha.captchas.length) { - QR.cooldown.auto = false; - } - QR.status(); - QR.error(err); - return; - } - h1 = $('h1', resDoc); - QR.cleanNotifications(); - if (Conf['Posting Success Notifications']) { - QR.notifications.push(new Notice('success', h1.textContent, 5)); - } - ref2 = h1.nextSibling.textContent.match(/thread:(\d+),no:(\d+)/), _ = ref2[0], threadID = ref2[1], postID = ref2[2]; - postID = +postID; - threadID = +threadID || postID; - isReply = threadID !== postID; - $.event('QRPostSuccessful', { - boardID: g.BOARD.ID, - threadID: threadID, - postID: postID - }); - $.event('QRPostSuccessful_', { - boardID: g.BOARD.ID, - threadID: threadID, - postID: postID - }); - postsCount = QR.posts.length - 1; - QR.cooldown.auto = postsCount && isReply; - lastPostToThread = !((function() { - var k, len1, p, ref3; - ref3 = QR.posts.slice(1); - for (k = 0, len1 = ref3.length; k < len1; k++) { - p = ref3[k]; - if (p.thread === post.thread) { - return true; - } - } - })()); - if (!(Conf['Persistent QR'] || postsCount)) { - QR.close(); - } else { - post.rm(); - QR.captcha.setup(d.activeElement === QR.nodes.status); - } - QR.cooldown.add(threadID, postID); - URL = threadID === postID ? window.location.origin + "/" + g.BOARD + "/thread/" + threadID : g.VIEW === 'index' && lastPostToThread && Conf['Open Post in New Tab'] ? window.location.origin + "/" + g.BOARD + "/thread/" + threadID + "#p" + postID : void 0; - if (URL) { - open = Conf['Open Post in New Tab'] || postsCount ? function() { - return $.open(URL); - } : function() { - return window.location = URL; - }; - if (threadID === postID) { - QR.waitForThread(URL, open); - } else { - open(); - } - } - return QR.status(); - }, - waitForThread: function(url, cb) { - var attempts, check; - attempts = 0; - check = function() { - return $.ajax(url, { - onloadend: function() { - attempts++; - if (attempts >= 6 || this.status === 200) { - return cb(); - } else { - return setTimeout(check, attempts * $.SECOND); - } - } - }, { - type: 'HEAD' - }); - }; - return check(); - }, - abort: function() { - if (QR.req && !QR.req.isUploadFinished) { - QR.req.abort(); - delete QR.req; - QR.posts[0].unlock(); - QR.cooldown.auto = false; - QR.notifications.push(new Notice('info', 'QR upload aborted.', 5)); - } - return QR.status(); - } - }; - - Captcha = {}; - - Captcha.fixes = { - imageKeys: '789456123uiojklm'.split('').concat(['Comma', 'Period']), - imageKeys16: '7890uiopjkl'.split('').concat(['Semicolon', 'm', 'Comma', 'Period', 'Slash']), - css: '.rc-imageselect-target > div:focus, .rc-image-tile-target:focus {\n outline: 2px solid #4a90e2;\n}\n.rc-imageselect-target td:focus {\n box-shadow: inset 0 0 0 2px #4a90e2;\n outline: none;\n}\n.rc-button-default:focus {\n box-shadow: inset 0 0 0 2px #0063d6;\n}', - cssNoscript: '.fbc-payload-imageselect {\n position: relative;\n}\n.fbc-payload-imageselect > label {\n position: absolute;\n display: block;\n height: 93.3px;\n width: 93.3px;\n}\nlabel[data-row="0"] {top: 0px;}\nlabel[data-row="1"] {top: 93.3px;}\nlabel[data-row="2"] {top: 186.6px;}\nlabel[data-col="0"] {left: 0px;}\nlabel[data-col="1"] {left: 93.3px;}\nlabel[data-col="2"] {left: 186.6px;}\n.fbc-payload-imageselect > input:focus + label {\n outline: 2px solid #4a90e2;\n}\n.fbc-button-verify input:focus {\n box-shadow: inset 0 0 0 2px #0063d6;\n}\nbody.focus .fbc {\n box-shadow: inset 0 0 0 2px #4a90e2;\n}', - init: function() { - switch (location.pathname.split('/')[3]) { - case 'anchor': - return this.initMain(); - case 'frame': - return this.initPopup(); - case 'fallback': - return this.initNoscript(); - } - }, - initMain: function() { - var a, k, len1, ref; - $.onExists(d.body, '#recaptcha-anchor', function(checkbox) { - var focus; - focus = function() { - var ref; - if (d.hasFocus() && ((ref = d.activeElement) === d.documentElement || ref === d.body)) { - return checkbox.focus(); - } - }; - focus(); - return $.on(window, 'focus', function() { - return $.queueTask(focus); - }); - }); - ref = $$('.rc-anchor-pt a'); - for (k = 0, len1 = ref.length; k < len1; k++) { - a = ref[k]; - a.tabIndex = -1; - } - }, - initPopup: function() { - $.addStyle(this.css); - this.fixImages(); - new MutationObserver((function(_this) { - return function() { - return _this.fixImages(); - }; - })(this)).observe(d.body, { - childList: true, - subtree: true - }); - return $.on(d, 'keydown', this.keybinds.bind(this)); - }, - initNoscript: function() { - var data, ref, token; - this.noscript = true; - data = (token = (ref = $('.fbc-verification-token > textarea')) != null ? ref.value : void 0) ? { - token: token - } : { - working: true - }; - new Connection(window.parent, '*').send(data); - d.body.classList.toggle('focus', d.hasFocus()); - $.on(window, 'focus blur', function() { - return d.body.classList.toggle('focus', d.hasFocus()); - }); - this.images = $$('.fbc-payload-imageselect > input'); - this.width = 3; - if (this.images.length !== 9) { - return; - } - $.addStyle(this.cssNoscript); - this.addLabels(); - $.on(d, 'keydown', this.keybinds.bind(this)); - return $.on($('.fbc-imageselect-challenge > form'), 'submit', this.checkForm.bind(this)); - }, - fixImages: function() { - var img, k, len1, ref; - this.images = $$('.rc-image-tile-target'); - if (!this.images.length) { - this.images = $$('.rc-imageselect-target > div, .rc-imageselect-target td'); - } - this.width = $$('.rc-imageselect-target tr:first-of-type td').length || Math.round(Math.sqrt(this.images.length)); - ref = this.images; - for (k = 0, len1 = ref.length; k < len1; k++) { - img = ref[k]; - img.tabIndex = 0; - } - if (this.images.length === 9) { - this.addTooltips(this.images); - } else { - this.addTooltips16(this.images); - } - return this.complaintLinks(); - }, - complaintLinks: function() { - var errmsg, k, len1, link, ref; - ref = $$('.rc-imageselect-incorrect-response, .rc-imageselect-error-select-one, .rc-imageselect-error-select-more, .rc-imageselect-error-dynamic-more'); - for (k = 0, len1 = ref.length; k < len1; k++) { - errmsg = ref[k]; - if (!$('a', errmsg)) { - link = $.el('a', { - href: 'https://www.4chan-x.net/captchas.html', - target: '_blank', - textContent: '[complain]' - }); - $.add(errmsg, [$.tn(' '), link]); - } - } - }, - addLabels: function() { - var checkbox, i, imageSelect, label, labels; - imageSelect = $('.fbc-payload-imageselect'); - labels = (function() { - var k, len1, ref, results; - ref = this.images; - results = []; - for (i = k = 0, len1 = ref.length; k < len1; i = ++k) { - checkbox = ref[i]; - checkbox.id = "checkbox-" + i; - label = $.el('label', { - htmlFor: checkbox.id - }); - label.dataset.row = Math.floor(i / 3); - label.dataset.col = i % 3; - $.after(checkbox, label); - results.push(label); - } - return results; - }).call(this); - return this.addTooltips(labels); - }, - addTooltips: function(nodes) { - var i, k, len1, node; - for (i = k = 0, len1 = nodes.length; k < len1; i = ++k) { - node = nodes[i]; - node.title = this.imageKeys[i] + " or " + (this.imageKeys[i + 9][0].toUpperCase()) + this.imageKeys[i + 9].slice(1); - } - }, - addTooltips16: function(nodes) { - var i, k, key, len1, node, ref; - ref = this.imageKeys16; - for (i = k = 0, len1 = ref.length; k < len1; i = ++k) { - key = ref[i]; - if (i % 4 < this.width && (node = nodes[nodes.length - (4 - Math.floor(i / 4)) * this.width + (i % 4)])) { - node.title = "" + (key[0].toUpperCase()) + key.slice(1); - } - } - }, - checkForm: function(e) { - var checkbox, k, len1, n, ref; - n = 0; - ref = this.images; - for (k = 0, len1 = ref.length; k < len1; k++) { - checkbox = ref[k]; - if (checkbox.checked) { - n++; - } - } - if (n === 0) { - return e.preventDefault(); - } - }, - keybinds: function(e) { - var dx, i, img, key, last, n, reload, verify, w, x; - if (!(this.images && doc.contains(this.images[0]))) { - return; - } - n = this.images.length; - w = this.width; - last = n + w - 1; - reload = $('#recaptcha-reload-button, .fbc-button-reload'); - verify = $('#recaptcha-verify-button, .fbc-button-verify > input'); - x = this.images.indexOf(d.activeElement); - if (x < 0) { - x = d.activeElement === verify ? last : n; - } - key = Keybinds.keyCode(e); - if (!this.noscript && key === 'Space' && x < n) { - this.images[x].click(); - } else if (n === 9 && (i = this.imageKeys.indexOf(key)) >= 0) { - this.images[i % 9].click(); - verify.focus(); - } else if (n !== 9 && (i = this.imageKeys16.indexOf(key)) >= 0 && i % 4 < w && (img = this.images[n - (4 - Math.floor(i / 4)) * w + (i % 4)])) { - img.click(); - verify.focus(); - } else if (dx = { - 'Up': n, - 'Down': w, - 'Left': last, - 'Right': 1 - }[key]) { - x = (x + dx) % (n + w); - if ((n < x && x < last)) { - x = dx === last ? n : last; - } - (this.images[x] || (x === n ? reload : void 0) || (x === last ? verify : void 0)).focus(); - } else { - return; - } - e.preventDefault(); - return e.stopPropagation(); - } - }; - - Captcha.replace = { - init: function() { - if (!(d.cookie.indexOf('pass_enabled=1') < 0)) { - return; - } - if (location.hostname === 'sys.4chan.org' && /[?&]altc\b/.test(location.search) && Main.jsEnabled) { - $.onExists(doc, 'script[src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"]', function() { - $.global(function() { - return window.el.onload = null; - }); - return Captcha.v1.create(); - }); - return; - } - if (((Conf['Use Recaptcha v1'] && location.hostname === 'boards.4chan.org') || (Conf['Use Recaptcha v1 in Reports'] && location.hostname === 'sys.4chan.org')) && Main.jsEnabled) { - $.ready(Captcha.replace.v1); - return; - } - if (Conf['Force Noscript Captcha'] && Main.jsEnabled) { - $.ready(Captcha.replace.noscript); - return; - } - if (Conf['captchaLanguage'].trim() || Conf['Captcha Fixes']) { - if (location.hostname === 'boards.4chan.org') { - return $.onExists(doc, '#captchaFormPart', function(node) { - return $.onExists(node, 'iframe', Captcha.replace.iframe); - }); - } else { - return $.onExists(doc, 'iframe', Captcha.replace.iframe); - } - } - }, - noscript: function() { - var insert, noscript, original, span, toggle; - if (!((original = $('#g-recaptcha, #captchaContainerAlt')) && (noscript = $('noscript')))) { - return; - } - span = $.el('span', { - id: 'captcha-forced-noscript' - }); - $.replace(noscript, span); - $.rm(original); - insert = function() { - span.innerHTML = noscript.textContent; - return Captcha.replace.iframe($('iframe', span)); - }; - if ((toggle = $('#togglePostFormLink a, #form-link'))) { - return $.on(toggle, 'click', insert); - } else { - return insert(); - } - }, - v1: function() { - var form, link; - if (!$.id('g-recaptcha')) { - return; - } - Captcha.v1.replace(); - if ((link = $.id('form-link'))) { - return $.on(link, 'click', function() { - return Captcha.v1.create(); - }); - } else if (location.hostname === 'boards.4chan.org') { - form = $.id('postForm'); - return form.addEventListener('focus', (function() { - return Captcha.v1.create(); - }), true); - } else { - return Captcha.v1.create(); - } - }, - iframe: function(iframe) { - var lang, src; - if ((lang = Conf['captchaLanguage'].trim())) { - src = /[?&]hl=/.test(iframe.src) ? iframe.src.replace(/([?&]hl=)[^&]*/, '$1' + encodeURIComponent(lang)) : iframe.src + ("&hl=" + (encodeURIComponent(lang))); - if (iframe.src !== src) { - iframe.src = src; - } - } - return Captcha.replace.autocopy(iframe); - }, - autocopy: function(iframe) { - if (!(Conf['Captcha Fixes'] && /^https:\/\/www\.google\.com\/recaptcha\/api\/fallback\?/.test(iframe.src))) { - return; - } - return new Connection(iframe, 'https://www.google.com', { - working: function() { - var ref, ref1; - if ((ref = $.id('qr')) != null ? ref.contains(iframe) : void 0) { - return (ref1 = $('#qr .captcha-container textarea')) != null ? ref1.parentNode.hidden = true : void 0; - } - }, - token: function(token) { - var node, textarea; - node = iframe; - while ((node = node.parentNode)) { - if ((textarea = $('textarea', node))) { - break; - } - } - textarea.value = token; - return $.event('input', null, textarea); - } - }); - } - }; - - Captcha.v1 = { - blank: "data:image/svg+xml,", - init: function() { - var imgContainer, input; - if (d.cookie.indexOf('pass_enabled=1') >= 0) { - return; - } - if (!(this.isEnabled = !!$('#g-recaptcha, #captchaContainerAlt'))) { - return; - } - imgContainer = $.el('div', { - className: 'captcha-img', - title: 'Reload reCAPTCHA' - }); - $.extend(imgContainer, { - innerHTML: "" - }); - input = $.el('input', { - className: 'captcha-input field', - title: 'Verification', - autocomplete: 'off', - spellcheck: false - }); - this.nodes = { - img: imgContainer.firstChild, - input: input - }; - $.on(input, 'blur', QR.focusout); - $.on(input, 'focus', QR.focusin); - $.on(input, 'keydown', QR.captcha.keydown.bind(QR.captcha)); - $.on(this.nodes.img.parentNode, 'click', QR.captcha.reload.bind(QR.captcha)); - $.addClass(QR.nodes.el, 'has-captcha', 'captcha-v1'); - $.after(QR.nodes.com.parentNode, [imgContainer, input]); - this.captchas = []; - $.get('captchas', [], function(arg) { - var captchas; - captchas = arg.captchas; - QR.captcha.sync(captchas); - return QR.captcha.clear(); - }); - $.sync('captchas', this.sync); - this.replace(); - this.beforeSetup(); - if (Conf['Auto-load captcha']) { - this.setup(); - } - new MutationObserver(this.afterSetup).observe($.id('captchaContainerAlt'), { - childList: true - }); - return this.afterSetup(); - }, - replace: function() { - var container, old; - if (this.script) { - return; - } - if (!(this.script = $('script[src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"]', d.head))) { - this.script = $.el('script', { - src: '//www.google.com/recaptcha/api/js/recaptcha_ajax.js' - }); - $.add(d.head, this.script); - } - if (old = $.id('g-recaptcha')) { - container = $.el('div', { - id: 'captchaContainerAlt' - }); - return $.replace(old, container); - } - }, - create: function() { - var cont, lang; - cont = $.id('captchaContainerAlt'); - if (this.occupied) { - return; - } - this.occupied = true; - if ((lang = Conf['captchaLanguage'].trim())) { - cont.dataset.lang = lang; - } - $.onExists(cont, '#recaptcha_image', function(image) { - return $.on(image, 'click', function() { - if ($.id('recaptcha_challenge_image')) { - return $.global(function() { - return window.Recaptcha.reload(); - }); - } - }); - }); - $.onExists(cont, '#recaptcha_response_field', function(field) { - $.on(field, 'keydown', function(e) { - if (e.keyCode === 8 && !field.value) { - return $.global(function() { - return window.Recaptcha.reload(); - }); - } - }); - if (location.hostname === 'sys.4chan.org') { - return field.focus(); - } - }); - return $.global(function() { - var container, options, script; - container = document.getElementById('captchaContainerAlt'); - options = { - theme: 'clean', - tabindex: { - "boards.4chan.org": 5 - }[location.hostname], - lang: container.dataset.lang - }; - if (window.Recaptcha) { - return window.Recaptcha.create('6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc', container, options); - } else { - script = document.head.querySelector('script[src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"]'); - return script.addEventListener('load', function() { - return window.Recaptcha.create('6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc', container, options); - }, false); - } - }); - }, - cb: { - focus: function() { - return QR.captcha.setup(false, true); - } - }, - beforeSetup: function() { - var img, input, ref; - ref = this.nodes, img = ref.img, input = ref.input; - img.parentNode.hidden = true; - img.src = this.blank; - input.value = ''; - input.placeholder = 'Focus to load reCAPTCHA'; - this.count(); - return $.on(input, 'focus click', this.cb.focus); - }, - needed: function() { - var captchaCount, postsCount; - captchaCount = this.captchas.length; - if (QR.req) { - captchaCount++; - } - postsCount = QR.posts.length; - if (postsCount === 1 && !Conf['Auto-load captcha'] && !QR.posts[0].com && !QR.posts[0].file) { - postsCount = 0; - } - return captchaCount < postsCount; - }, - onNewPost: function() {}, - onPostChange: function() {}, - setup: function(focus, force) { - if (!(this.isEnabled && (force || this.needed()))) { - return; - } - this.create(); - if (focus) { - $.addClass(QR.nodes.el, 'focus'); - return this.nodes.input.focus(); - } - }, - afterSetup: function() { - var challenge, img, input, ref, setLifetime; - if (!(challenge = $.id('recaptcha_challenge_field_holder'))) { - return; - } - if (challenge === QR.captcha.nodes.challenge) { - return; - } - setLifetime = function(e) { - return QR.captcha.lifetime = e.detail; - }; - $.on(window, 'captcha:timeout', setLifetime); - $.global(function() { - return window.dispatchEvent(new CustomEvent('captcha:timeout', { - detail: window.RecaptchaState.timeout - })); - }); - $.off(window, 'captcha:timeout', setLifetime); - ref = QR.captcha.nodes, img = ref.img, input = ref.input; - img.parentNode.hidden = false; - input.placeholder = 'Verification'; - QR.captcha.count(); - $.off(input, 'focus click', QR.captcha.cb.focus); - QR.captcha.nodes.challenge = challenge; - new MutationObserver(QR.captcha.load.bind(QR.captcha)).observe(challenge, { - childList: true, - subtree: true, - attributes: true - }); - QR.captcha.load(); - if (QR.nodes.el.getBoundingClientRect().bottom > doc.clientHeight) { - QR.nodes.el.style.top = null; - return QR.nodes.el.style.bottom = '0px'; - } - }, - destroy: function() { - if (!this.script) { - return; - } - $.global(function() { - return window.Recaptcha.destroy(); - }); - delete this.occupied; - if (this.nodes) { - return this.beforeSetup(); - } - }, - sync: function(captchas) { - if (captchas == null) { - captchas = []; - } - QR.captcha.captchas = captchas; - return QR.captcha.count(); - }, - getOne: function() { - var captcha, challenge, response, timeout; - this.clear(); - if (captcha = this.captchas.shift()) { - this.count(); - $.set('captchas', this.captchas); - return captcha; - } else { - challenge = this.nodes.img.alt; - timeout = this.timeout; - if (/\S/.test(response = this.nodes.input.value)) { - this.destroy(); - return { - challenge: challenge, - response: response, - timeout: timeout - }; - } else { - return null; - } - } - }, - save: function() { - var response; - if (!/\S/.test(response = this.nodes.input.value)) { - return; - } - this.nodes.input.value = ''; - this.captchas.push({ - challenge: this.nodes.img.alt, - response: response, - timeout: this.timeout - }); - this.captchas.sort(function(a, b) { - return a.timeout - b.timeout; - }); - this.count(); - this.destroy(); - this.setup(false, true); - return $.set('captchas', this.captchas); - }, - clear: function() { - var captcha, i, k, len1, now, ref; - if (!this.captchas.length) { - return; - } - $.forceSync('captchas'); - now = Date.now(); - ref = this.captchas; - for (i = k = 0, len1 = ref.length; k < len1; i = ++k) { - captcha = ref[i]; - if (captcha.timeout > now) { - break; - } - } - if (!i) { - return; - } - this.captchas = this.captchas.slice(i); - this.count(); - return $.set('captchas', this.captchas); - }, - load: function() { - var challenge, challenge_image; - if ($('#captchaContainerAlt[class~="recaptcha_is_showing_audio"]')) { - this.nodes.img.src = this.blank; - return; - } - if (!this.nodes.challenge.firstChild) { - return; - } - if (!(challenge_image = $.id('recaptcha_challenge_image'))) { - return; - } - this.timeout = Date.now() + this.lifetime * $.SECOND - $.MINUTE; - challenge = this.nodes.challenge.firstChild.value; - this.nodes.img.alt = challenge; - this.nodes.img.src = challenge_image.src; - this.nodes.input.value = ''; - return this.clear(); - }, - count: function() { - var count, placeholder; - count = this.captchas ? this.captchas.length : 0; - placeholder = this.nodes.input.placeholder.replace(/\ \(.*\)$/, ''); - placeholder += (function() { - switch (count) { - case 0: - if (placeholder === 'Verification') { - return ' (Shift + Enter to cache)'; - } else { - return ''; - } - break; - case 1: - return ' (1 cached captcha)'; - default: - return " (" + count + " cached captchas)"; - } - })(); - this.nodes.input.placeholder = placeholder; - this.nodes.input.alt = count; - clearTimeout(this.timer); - if (count) { - return this.timer = setTimeout(this.clear.bind(this), this.captchas[0].timeout - Date.now()); - } - }, - reload: function(focus) { - $.global(function() { - if (window.Recaptcha.type === 'image') { - window.Recaptcha.reload(); - } else { - window.Recaptcha.switch_type('image'); - } - return window.Recaptcha.should_focus = false; - }); - if (focus) { - return this.nodes.input.focus(); - } - }, - keydown: function(e) { - if (e.keyCode === 8 && !this.nodes.input.value) { - this.reload(); - } else if (e.keyCode === 13 && e.shiftKey) { - this.save(); - } else { - return; - } - return e.preventDefault(); - } - }; - - Captcha.v2 = { - lifetime: 2 * $.MINUTE, - init: function() { - var counter, root; - if (d.cookie.indexOf('pass_enabled=1') >= 0) { - return; - } - if (!(this.isEnabled = !!$('#g-recaptcha, #captchaContainerAlt, #captcha-forced-noscript'))) { - return; - } - if ((this.noscript = Conf['Force Noscript Captcha'] || !Main.jsEnabled)) { - $.addClass(QR.nodes.el, 'noscript-captcha'); - } - this.captchas = []; - $.get('captchas', [], function(arg) { - var captchas; - captchas = arg.captchas; - return QR.captcha.sync(captchas); - }); - $.sync('captchas', this.sync.bind(this)); - root = $.el('div', { - className: 'captcha-root' - }); - $.extend(root, { - innerHTML: "
      " - }); - counter = $('.captcha-counter > a', root); - this.nodes = { - root: root, - counter: counter - }; - this.count(); - $.addClass(QR.nodes.el, 'has-captcha', 'captcha-v2'); - $.after(QR.nodes.com.parentNode, root); - $.on(counter, 'click', this.toggle.bind(this)); - $.on(counter, 'keydown', (function(_this) { - return function(e) { - if (Keybinds.keyCode(e) !== 'Space') { - return; - } - _this.toggle(); - e.preventDefault(); - return e.stopPropagation(); - }; - })(this)); - return $.on(window, 'captcha:success', (function(_this) { - return function() { - return $.queueTask(function() { - return _this.save(false); - }); - }; - })(this)); - }, - timeouts: {}, - postsCount: 0, - noscriptURL: function() { - var lang, url; - url = 'https://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc'; - if ((lang = Conf['captchaLanguage'].trim())) { - url += "&hl=" + (encodeURIComponent(lang)); - } - return url; - }, - needed: function() { - var captchaCount; - captchaCount = this.captchas.length; - if (QR.req) { - captchaCount++; - } - this.postsCount = QR.posts.length; - if (this.postsCount === 1 && !Conf['Auto-load captcha'] && !QR.posts[0].com && !QR.posts[0].file) { - this.postsCount = 0; - } - return captchaCount < this.postsCount; - }, - onNewPost: function() { - return this.setup(); - }, - onPostChange: function() { - if (this.postsCount === 0) { - this.setup(); - } - if (QR.posts.length === 1 && !Conf['Auto-load captcha'] && !QR.posts[0].com && !QR.posts[0].file) { - return this.postsCount = 0; - } - }, - toggle: function() { - if (this.nodes.container && !this.timeouts.destroy) { - return this.destroy(); - } else { - return this.setup(true, true); - } - }, - setup: function(focus, force) { - if (!(this.isEnabled && (this.needed() || force))) { - return; - } - if (focus) { - $.addClass(QR.nodes.el, 'focus'); - this.nodes.counter.focus(); - } - if (this.timeouts.destroy) { - clearTimeout(this.timeouts.destroy); - delete this.timeouts.destroy; - return this.reload(); - } - if (this.nodes.container) { - $.queueTask((function(_this) { - return function() { - var iframe; - if (_this.nodes.container && d.activeElement === _this.nodes.counter && (iframe = $('iframe', _this.nodes.container))) { - iframe.focus(); - return QR.focus(); - } - }; - })(this)); - return; - } - this.nodes.container = $.el('div', { - className: 'captcha-container' - }); - $.prepend(this.nodes.root, this.nodes.container); - new MutationObserver(this.afterSetup.bind(this)).observe(this.nodes.container, { - childList: true, - subtree: true - }); - if (this.noscript) { - return this.setupNoscript(); - } else { - return this.setupJS(); - } - }, - setupNoscript: function() { - var div, iframe, textarea; - iframe = $.el('iframe', { - id: 'qr-captcha-iframe', - src: this.noscriptURL() - }); - div = $.el('div'); - textarea = $.el('textarea'); - $.add(div, textarea); - return $.add(this.nodes.container, [iframe, div]); - }, - setupJS: function() { - return $.global(function() { - var cbNative, render; - render = function() { - var classList, container; - classList = document.documentElement.classList; - container = document.querySelector('#qr .captcha-container'); - return container.dataset.widgetID = window.grecaptcha.render(container, { - sitekey: '6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc', - theme: classList.contains('tomorrow') || classList.contains('dark-captcha') ? 'dark' : 'light', - callback: function(response) { - return window.dispatchEvent(new CustomEvent('captcha:success', { - detail: response - })); - } - }); - }; - if (window.grecaptcha) { - return render(); - } else { - cbNative = window.onRecaptchaLoaded; - return window.onRecaptchaLoaded = function() { - render(); - return cbNative(); - }; - } - }); - }, - afterSetup: function(mutations) { - var iframe, k, len1, len2, mutation, node, q, ref, textarea; - for (k = 0, len1 = mutations.length; k < len1; k++) { - mutation = mutations[k]; - ref = mutation.addedNodes; - for (q = 0, len2 = ref.length; q < len2; q++) { - node = ref[q]; - if ((iframe = $.x('./descendant-or-self::iframe', node))) { - this.setupIFrame(iframe); - } - if ((textarea = $.x('./descendant-or-self::textarea', node))) { - this.setupTextArea(textarea); - } - } - } - }, - setupIFrame: function(iframe) { - if (!doc.contains(iframe)) { - return; - } - Captcha.replace.iframe(iframe); - $.addClass(QR.nodes.el, 'captcha-open'); - this.fixQRPosition(); - $.on(iframe, 'load', this.fixQRPosition); - if (d.activeElement === this.nodes.counter) { - iframe.focus(); - } - return $.global(function() { - var f; - f = document.querySelector('#qr iframe'); - return f.focus = f.blur = function() {}; - }); - }, - fixQRPosition: function() { - if (QR.nodes.el.getBoundingClientRect().bottom > doc.clientHeight) { - QR.nodes.el.style.top = null; - return QR.nodes.el.style.bottom = '0px'; - } - }, - setupTextArea: function(textarea) { - return $.one(textarea, 'input', (function(_this) { - return function() { - return _this.save(true); - }; - })(this)); - }, - destroy: function() { - var garbage, i, ins, node, ref; - if (!this.isEnabled) { - return; - } - delete this.timeouts.destroy; - $.rmClass(QR.nodes.el, 'captcha-open'); - if (this.nodes.container) { - $.rm(this.nodes.container); - } - delete this.nodes.container; - garbage = $.X('//iframe[starts-with(@src, "https://www.google.com/recaptcha/api2/frame")]/ancestor-or-self::*[parent::body]'); - i = 0; - while (node = garbage.snapshotItem(i++)) { - if (((ref = (ins = node.nextSibling)) != null ? ref.nodeName : void 0) === 'INS') { - $.rm(ins); - } - $.rm(node); - } - }, - sync: function(captchas) { - if (captchas == null) { - captchas = []; - } - this.captchas = captchas; - this.clear(); - return this.count(); - }, - getOne: function() { - var captcha; - this.clear(); - if ((captcha = this.captchas.shift())) { - $.set('captchas', this.captchas); - this.count(); - return captcha; - } else { - return null; - } - }, - save: function(pasted, token) { - var base1, focus, ref; - $.forceSync('captchas'); - this.captchas.push({ - response: token || $('textarea', this.nodes.container).value, - timeout: Date.now() + this.lifetime - }); - this.captchas.sort(function(a, b) { - return a.timeout - b.timeout; - }); - $.set('captchas', this.captchas); - this.count(); - focus = ((ref = d.activeElement) != null ? ref.nodeName : void 0) === 'IFRAME' && /https?:\/\/www\.google\.com\/recaptcha\//.test(d.activeElement.src); - if (this.needed()) { - if (focus) { - if (QR.cooldown.auto || Conf['Post on Captcha Completion']) { - this.nodes.counter.focus(); - } else { - QR.nodes.status.focus(); - } - } - this.reload(); - } else { - if (pasted) { - this.destroy(); - } else { - if ((base1 = this.timeouts).destroy == null) { - base1.destroy = setTimeout(this.destroy.bind(this), 3 * $.SECOND); - } - } - if (focus) { - QR.nodes.status.focus(); - } - } - if (Conf['Post on Captcha Completion'] && !QR.cooldown.auto) { - return QR.submit(); - } - }, - clear: function() { - var captcha, i, k, len1, now, ref; - if (!this.captchas.length) { - return; - } - $.forceSync('captchas'); - now = Date.now(); - ref = this.captchas; - for (i = k = 0, len1 = ref.length; k < len1; i = ++k) { - captcha = ref[i]; - if (captcha.timeout > now) { - break; - } - } - if (!i) { - return; - } - this.captchas = this.captchas.slice(i); - this.count(); - $.set('captchas', this.captchas); - return this.setup(d.activeElement === QR.nodes.status); - }, - count: function() { - this.nodes.counter.textContent = "Captchas: " + this.captchas.length; - clearTimeout(this.timeouts.clear); - if (this.captchas.length) { - return this.timeouts.clear = setTimeout(this.clear.bind(this), this.captchas[0].timeout - Date.now()); - } - }, - reload: function() { - if ($('iframe[src^="https://www.google.com/recaptcha/api/fallback?"]', this.nodes.container)) { - this.destroy(); - return this.setup(false, true); - } else { - return $.global(function() { - var container; - container = document.querySelector('#qr .captcha-container'); - return window.grecaptcha.reset(container.dataset.widgetID); - }); - } - } - }; - - PassLink = { - init: function() { - if (!Conf['Pass Link']) { - return; - } - return Main.ready(this.ready); - }, - ready: function() { - var passLink, styleSelector; - if (!(styleSelector = $.id('styleSelector'))) { - return; - } - passLink = $.el('span', { - className: 'brackets-wrap pass-link-container' - }); - $.extend(passLink, { - innerHTML: "4chan Pass" - }); - $.on(passLink.firstElementChild, 'click', function() { - return window.open('//sys.4chan.org/auth', Date.now(), 'width=500,height=280,toolbar=0'); - }); - return $.before(styleSelector.previousSibling, [passLink, $.tn('\u00A0\u00A0')]); - } - }; - - PostSuccessful = { - init: function() { - if (!Conf['Remember Your Posts']) { - return; - } - return $.ready(this.ready); - }, - ready: function() { - var _, db, postID, ref, threadID; - if (d.title !== 'Post successful!') { - return; - } - ref = $('h1').nextSibling.textContent.match(/thread:(\d+),no:(\d+)/), _ = ref[0], threadID = ref[1], postID = ref[2]; - postID = +postID; - threadID = +threadID || postID; - db = new DataBoard('yourPosts'); - return db.set({ - boardID: g.BOARD.ID, - threadID: threadID, - postID: postID, - val: true - }); - } - }; - - QR.cooldown = { - seconds: 0, - delays: { - thread: 0, - reply: 0, - image: 0, - reply_intra: 0, - image_intra: 0, - deletion: 60, - thread_global: 300 - }, - init: function() { - if (!Conf['Quick Reply']) { - return; - } - this.data = Conf['cooldowns']; - return $.sync('cooldowns', this.sync); - }, - setup: function() { - var delay, m, ref, type; - if (m = Get.scriptData().match(/\bcooldowns *= *({[^}]+})/)) { - $.extend(QR.cooldown.delays, JSON.parse(m[1])); - } - QR.cooldown.maxDelay = 0; - ref = QR.cooldown.delays; - for (type in ref) { - delay = ref[type]; - if (type !== 'thread' && type !== 'thread_global') { - QR.cooldown.maxDelay = Math.max(QR.cooldown.maxDelay, delay); - } - } - QR.cooldown.isSetup = true; - return QR.cooldown.start(); - }, - start: function() { - var data; - data = QR.cooldown.data; - if (!(Conf['Cooldown'] && QR.cooldown.isSetup && !QR.cooldown.isCounting && Object.keys(data[g.BOARD.ID] || {}).length + Object.keys(data.global || {}).length > 0)) { - return; - } - QR.cooldown.isCounting = true; - return QR.cooldown.count(); - }, - sync: function(data) { - QR.cooldown.data = data || {}; - return QR.cooldown.start(); - }, - add: function(threadID, postID) { - var boardID, start; - if (!Conf['Cooldown']) { - return; - } - start = Date.now(); - boardID = g.BOARD.ID; - QR.cooldown.set(boardID, start, { - threadID: threadID, - postID: postID - }); - if (threadID === postID) { - QR.cooldown.set('global', start, { - boardID: boardID, - threadID: threadID, - postID: postID - }); - } - return QR.cooldown.start(); - }, - addDelay: function(post, delay) { - var cooldown; - if (!Conf['Cooldown']) { - return; - } - cooldown = QR.cooldown.categorize(post); - cooldown.delay = delay; - QR.cooldown.set(g.BOARD.ID, Date.now(), cooldown); - return QR.cooldown.start(); - }, - addMute: function(delay) { - if (!Conf['Cooldown']) { - return; - } - QR.cooldown.set(g.BOARD.ID, Date.now(), { - type: 'mute', - delay: delay - }); - return QR.cooldown.start(); - }, - "delete": function(post) { - var base1, cooldown, cooldowns, id, name1; - if (!QR.cooldown.data) { - return; - } - $.forceSync('cooldowns'); - cooldowns = ((base1 = QR.cooldown.data)[name1 = post.board.ID] || (base1[name1] = {})); - for (id in cooldowns) { - cooldown = cooldowns[id]; - if ((cooldown.delay == null) && cooldown.threadID === post.thread.ID && cooldown.postID === post.ID) { - delete cooldowns[id]; - } - } - return QR.cooldown.save([post.board.ID]); - }, - secondsDeletion: function(post) { - var cooldown, cooldowns, seconds, start; - if (!(QR.cooldown.data && Conf['Cooldown'])) { - return 0; - } - cooldowns = QR.cooldown.data[post.board.ID] || {}; - for (start in cooldowns) { - cooldown = cooldowns[start]; - if ((cooldown.delay == null) && cooldown.threadID === post.thread.ID && cooldown.postID === post.ID) { - seconds = QR.cooldown.delays.deletion - Math.floor((Date.now() - start) / $.SECOND); - return Math.max(seconds, 0); - } - } - return 0; - }, - categorize: function(post) { - if (post.thread === 'new') { - return { - type: 'thread' - }; - } else { - return { - type: !!post.file ? 'image' : 'reply', - threadID: +post.thread - }; - } - }, - set: function(scope, id, value) { - var base1, cooldowns; - $.forceSync('cooldowns'); - cooldowns = ((base1 = QR.cooldown.data)[scope] || (base1[scope] = {})); - cooldowns[id] = value; - return $.set('cooldowns', QR.cooldown.data); - }, - save: function(scopes) { - var data, k, len1, scope; - data = QR.cooldown.data; - for (k = 0, len1 = scopes.length; k < len1; k++) { - scope = scopes[k]; - if (scope in data && !Object.keys(data[scope]).length) { - delete data[scope]; - } - } - return $.set('cooldowns', data); - }, - count: function() { - var base1, cooldown, cooldowns, elapsed, k, len1, maxDelay, nCooldowns, now, ref, ref1, save, scope, seconds, start, suffix, threadID, type, update; - $.forceSync('cooldowns'); - save = []; - nCooldowns = 0; - now = Date.now(); - ref = QR.cooldown.categorize(QR.posts[0]), type = ref.type, threadID = ref.threadID; - seconds = 0; - if (Conf['Cooldown']) { - ref1 = [g.BOARD.ID, 'global']; - for (k = 0, len1 = ref1.length; k < len1; k++) { - scope = ref1[k]; - cooldowns = ((base1 = QR.cooldown.data)[scope] || (base1[scope] = {})); - for (start in cooldowns) { - cooldown = cooldowns[start]; - start = +start; - elapsed = Math.floor((now - start) / $.SECOND); - if (elapsed < 0) { - delete cooldowns[start]; - save.push(scope); - continue; - } - if (cooldown.delay != null) { - if (cooldown.delay <= elapsed) { - delete cooldowns[start]; - save.push(scope); - } else if ((cooldown.type === type && cooldown.threadID === threadID) || cooldown.type === 'mute') { - seconds = Math.max(seconds, cooldown.delay - elapsed); - } - continue; - } - maxDelay = cooldown.threadID !== cooldown.postID ? QR.cooldown.maxDelay : QR.cooldown.delays[scope === 'global' ? 'thread_global' : 'thread']; - if (QR.cooldown.customCooldown) { - maxDelay = Math.max(maxDelay, parseInt(Conf['customCooldown'], 10)); - } - if (maxDelay <= elapsed) { - delete cooldowns[start]; - save.push(scope); - continue; - } - if ((type === 'thread') === (cooldown.threadID === cooldown.postID) && cooldown.boardID !== g.BOARD.ID) { - suffix = scope === 'global' ? '_global' : type !== 'thread' && threadID === cooldown.threadID ? '_intra' : ''; - seconds = Math.max(seconds, QR.cooldown.delays[type + suffix] - elapsed); - } - if (QR.cooldown.customCooldown) { - seconds = Math.max(seconds, parseInt(Conf['customCooldown'], 10) - elapsed); - } - } - nCooldowns += Object.keys(cooldowns).length; - } - } - if (save.length) { - QR.cooldown.save(save); - } - if (nCooldowns) { - clearTimeout(QR.cooldown.timeout); - QR.cooldown.timeout = setTimeout(QR.cooldown.count, $.SECOND); - } else { - delete QR.cooldown.isCounting; - } - update = seconds !== QR.cooldown.seconds; - QR.cooldown.seconds = seconds; - if (update) { - QR.status(); - } - if (seconds === 0 && QR.cooldown.auto && !QR.req) { - return QR.submit(); - } - } - }; - - QR.oekaki = { - menu: { - init: function() { - var a, ref; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Edit Link'] && Conf['Quick Reply'])) { - return; - } - a = $.el('a', { - className: 'edit-link', - href: 'javascript:;', - textContent: 'Edit image' - }); - $.on(a, 'click', this.editFile); - return Menu.menu.addEntry({ - el: a, - order: 95, - open: function(post) { - var file; - QR.oekaki.menu.post = post; - file = post.file; - return QR.postingIsEnabled && !!file && (file.isImage || file.isVideo); - } - }); - }, - editFile: function() { - var currentTime, isVideo, post, ref; - post = QR.oekaki.menu.post; - QR.quote.call(post.nodes.post); - isVideo = post.file.isVideo; - currentTime = ((ref = post.file.fullImage) != null ? ref.currentTime : void 0) || 0; - return CrossOrigin.file(post.file.url, function(blob) { - var video; - if (!blob) { - return QR.error("Can't load file."); - } else if (isVideo) { - video = $.el('video'); - $.on(video, 'loadedmetadata', function() { - $.on(video, 'seeked', function() { - var canvas; - canvas = $.el('canvas', { - width: video.videoWidth, - height: video.videoHeight - }); - canvas.getContext('2d').drawImage(video, 0, 0); - return canvas.toBlob(function(snapshot) { - snapshot.name = post.file.name.replace(/\.\w+$/, '') + '.png'; - QR.handleFiles([snapshot]); - return QR.oekaki.edit(); - }); - }); - return video.currentTime = currentTime; - }); - return video.src = URL.createObjectURL(blob); - } else { - blob.name = post.file.name; - QR.handleFiles([blob]); - return QR.oekaki.edit(); - } - }); - } - }, - setup: function() { - return $.global(function() { - var FCX; - FCX = window.FCX; - FCX.oekakiCB = function() { - return window.Tegaki.flatten().toBlob(function(file) { - var source; - source = "oekaki-" + (Date.now()); - FCX.oekakiLatest = source; - return document.dispatchEvent(new CustomEvent('QRSetFile', { - bubbles: true, - detail: { - file: file, - name: FCX.oekakiName, - source: source - } - })); - }); - }; - if (window.Tegaki) { - return document.querySelector('#qr .oekaki').hidden = false; - } - }); - }, - load: function(cb) { - var n, onload, script, style; - if ($('script[src^="//s.4cdn.org/js/painter"]', d.head)) { - return cb(); - } else { - style = $.el('link', { - rel: 'stylesheet', - href: "//s.4cdn.org/css/painter." + (Date.now()) + ".css" - }); - script = $.el('script', { - src: "//s.4cdn.org/js/painter.min." + (Date.now()) + ".js" - }); - n = 0; - onload = function() { - if (++n === 2) { - return cb(); - } - }; - $.on(style, 'load', onload); - $.on(script, 'load', onload); - return $.add(d.head, [style, script]); - } - }, - draw: function() { - return $.global(function() { - var FCX, Tegaki; - Tegaki = window.Tegaki, FCX = window.FCX; - if (Tegaki.bg) { - Tegaki.destroy(); - } - FCX.oekakiName = 'tegaki.png'; - return Tegaki.open({ - onDone: FCX.oekakiCB, - onCancel: function() { - return Tegaki.bgColor = '#ffffff'; - }, - width: +document.querySelector('#qr [name=oekaki-width]').value, - height: +document.querySelector('#qr [name=oekaki-height]').value, - bgColor: document.querySelector('#qr [name=oekaki-bg]').checked ? document.querySelector('#qr [name=oekaki-bgcolor]').value : 'transparent' - }); - }); - }, - button: function() { - if (QR.selected.file) { - return QR.oekaki.edit(); - } else { - return QR.oekaki.toggle(); - } - }, - edit: function() { - return QR.oekaki.load(function() { - return $.global(function() { - var FCX, Tegaki, cb, error, name, source; - Tegaki = window.Tegaki, FCX = window.FCX; - name = document.getElementById('qr-filename').value.replace(/\.\w+$/, '') + '.png'; - source = document.getElementById('file-n-submit').dataset.source; - error = function(content) { - return document.dispatchEvent(new CustomEvent('CreateNotification', { - bubbles: true, - detail: { - type: 'warning', - content: content, - lifetime: 20 - } - })); - }; - cb = function(e) { - var file, isVideo; - document.removeEventListener('QRFile', cb, false); - if (!e.detail) { - return error('No file to edit.'); - } - if (!/^(image|video)\//.test(e.detail.type)) { - return error('Not an image.'); - } - isVideo = /^video\//.test(e.detail.type); - file = document.createElement(isVideo ? 'video' : 'img'); - file.addEventListener('error', function() { - return error('Could not open file.', false); - }); - file.addEventListener((isVideo ? 'loadeddata' : 'load'), function() { - if (Tegaki.bg) { - Tegaki.destroy(); - } - FCX.oekakiName = name; - Tegaki.open({ - onDone: FCX.oekakiCB, - onCancel: function() { - return Tegaki.bgColor = '#ffffff'; - }, - width: file.naturalWidth || file.videoWidth, - height: file.naturalHeight || file.videoHeight, - bgColor: 'transparent' - }); - return Tegaki.activeCtx.drawImage(file, 0, 0); - }, false); - return file.src = URL.createObjectURL(e.detail); - }; - if (Tegaki.bg && Tegaki.onDoneCb === FCX.oekakiCB && source === FCX.oekakiLatest) { - FCX.oekakiName = name; - return Tegaki.resume(); - } else { - document.addEventListener('QRFile', cb, false); - return document.dispatchEvent(new CustomEvent('QRGetFile', { - bubbles: true - })); - } - }); - }); - }, - toggle: function() { - return QR.oekaki.load(function() { - return QR.nodes.oekaki.hidden = !QR.nodes.oekaki.hidden; - }); - } - }; - - QR.persona = { - pwd: '', - always: {}, - init: function() { - QR.persona.getPassword(); - return $.get('QR.personas', Conf['QR.personas'], function(arg) { - var arr, item, k, len1, personas, ref, type, types; - personas = arg['QR.personas']; - types = { - name: [], - email: [], - sub: [] - }; - ref = personas.split('\n'); - for (k = 0, len1 = ref.length; k < len1; k++) { - item = ref[k]; - QR.persona.parseItem(item.trim(), types); - } - for (type in types) { - arr = types[type]; - QR.persona.loadPersonas(type, arr); - } - }); - }, - parseItem: function(item, types) { - var boards, match, ref, ref1, ref2, type, val; - if (item[0] === '#') { - return; - } - if (!(match = item.match(/(name|options|email|subject|password):"(.*)"/i))) { - return; - } - ref = match, match = ref[0], type = ref[1], val = ref[2]; - item = item.replace(match, ''); - boards = ((ref1 = item.match(/boards:([^;]+)/i)) != null ? ref1[1].toLowerCase() : void 0) || 'global'; - if (boards !== 'global' && (ref2 = g.BOARD.ID, indexOf.call(boards.split(','), ref2) < 0)) { - return; - } - if (type === 'password') { - QR.persona.pwd = val; - return; - } - if (type === 'options') { - type = 'email'; - } - if (type === 'subject') { - type = 'sub'; - } - if (/always/i.test(item)) { - QR.persona.always[type] = val; - } - if (indexOf.call(types[type], val) < 0) { - return types[type].push(val); - } - }, - loadPersonas: function(type, arr) { - var k, len1, list, val; - list = $("#list-" + type, QR.nodes.el); - for (k = 0, len1 = arr.length; k < len1; k++) { - val = arr[k]; - if (val) { - $.add(list, $.el('option', { - textContent: val - })); - } - } - }, - getPassword: function() { - var input, m, ref; - if (!QR.persona.pwd) { - QR.persona.pwd = (m = d.cookie.match(/4chan_pass=([^;]+)/)) ? decodeURIComponent(m[1]) : (input = $.id('postPassword')) ? input.value : ((ref = $.id('delPassword')) != null ? ref.value : void 0) || ''; - } - return QR.persona.pwd; - }, - get: function(cb) { - return $.get('QR.persona', {}, function(arg) { - var persona; - persona = arg['QR.persona']; - return cb(persona); - }); - }, - set: function(post) { - return $.get('QR.persona', {}, function(arg) { - var persona; - persona = arg['QR.persona']; - persona = { - name: post.name - }; - return $.set('QR.persona', persona); - }); - } - }; - - QR.post = (function() { - function _Class(select) { - this.select = bind(this.select, this); - var el, event, k, label, len1, len2, prev, q, ref, ref1; - el = $.el('a', { - className: 'qr-preview', - draggable: true, - href: 'javascript:;' - }); - $.extend(el, { - innerHTML: "" - }); - this.nodes = { - el: el, - rm: el.firstChild, - spoiler: $('.qr-preview-spoiler input', el), - span: el.lastChild - }; - $.on(el, 'click', this.select); - $.on(this.nodes.rm, 'click', (function(_this) { - return function(e) { - e.stopPropagation(); - return _this.rm(); - }; - })(this)); - $.on(this.nodes.spoiler, 'change', (function(_this) { - return function(e) { - _this.spoiler = e.target.checked; - if (_this === QR.selected) { - return QR.nodes.spoiler.checked = _this.spoiler; - } - }; - })(this)); - ref = $$('label', el); - for (k = 0, len1 = ref.length; k < len1; k++) { - label = ref[k]; - $.on(label, 'click', function(e) { - return e.stopPropagation(); - }); - } - $.add(QR.nodes.dumpList, el); - ref1 = ['dragStart', 'dragEnter', 'dragLeave', 'dragOver', 'dragEnd', 'drop']; - for (q = 0, len2 = ref1.length; q < len2; q++) { - event = ref1[q]; - $.on(el, event.toLowerCase(), this[event]); - } - this.thread = g.VIEW === 'thread' ? g.THREADID : 'new'; - prev = QR.posts[QR.posts.length - 1]; - QR.posts.push(this); - this.nodes.spoiler.checked = this.spoiler = prev && Conf['Remember Spoiler'] ? prev.spoiler : false; - QR.persona.get((function(_this) { - return function(persona) { - _this.name = 'name' in QR.persona.always ? QR.persona.always.name : prev ? prev.name : persona.name; - _this.email = 'email' in QR.persona.always ? QR.persona.always.email : ''; - _this.sub = 'sub' in QR.persona.always ? QR.persona.always.sub : ''; - if (QR.selected === _this) { - return _this.load(); - } - }; - })(this)); - if (select) { - this.select(); - } - this.unlock(); - $.queueTask(function() { - return QR.captcha.onNewPost(); - }); - } - - _Class.prototype.rm = function() { - var index; - this["delete"](); - index = QR.posts.indexOf(this); - if (QR.posts.length === 1) { - new QR.post(true); - $.rmClass(QR.nodes.el, 'dump'); - } else if (this === QR.selected) { - (QR.posts[index - 1] || QR.posts[index + 1]).select(); - } - QR.posts.splice(index, 1); - return QR.status(); - }; - - _Class.prototype["delete"] = function() { - $.rm(this.nodes.el); - URL.revokeObjectURL(this.URL); - return this.dismissErrors(); - }; - - _Class.prototype.lock = function(lock) { - var k, len1, name, node, ref; - if (lock == null) { - lock = true; - } - this.isLocked = lock; - if (this !== QR.selected) { - return; - } - ref = ['thread', 'name', 'email', 'sub', 'com', 'fileButton', 'filename', 'spoiler']; - for (k = 0, len1 = ref.length; k < len1; k++) { - name = ref[k]; - if (node = QR.nodes[name]) { - node.disabled = lock; - } - } - this.nodes.rm.style.visibility = lock ? 'hidden' : ''; - this.nodes.spoiler.disabled = lock; - return this.nodes.el.draggable = !lock; - }; - - _Class.prototype.unlock = function() { - return this.lock(false); - }; - - _Class.prototype.select = function() { - var rectEl, rectList; - if (QR.selected) { - QR.selected.nodes.el.removeAttribute('id'); - QR.selected.forceSave(); - } - QR.selected = this; - this.lock(this.isLocked); - this.nodes.el.id = 'selected'; - rectEl = this.nodes.el.getBoundingClientRect(); - rectList = this.nodes.el.parentNode.getBoundingClientRect(); - this.nodes.el.parentNode.scrollLeft += rectEl.left + rectEl.width / 2 - rectList.left - rectList.width / 2; - return this.load(); - }; - - _Class.prototype.load = function() { - var k, len1, name, node, ref; - ref = ['thread', 'name', 'email', 'sub', 'com', 'filename']; - for (k = 0, len1 = ref.length; k < len1; k++) { - name = ref[k]; - if (!(node = QR.nodes[name])) { - continue; - } - node.value = this[name] || node.dataset["default"] || ''; - } - (this.thread !== 'new' ? $.addClass : $.rmClass)(QR.nodes.el, 'reply-to-thread'); - this.showFileData(); - return QR.characterCount(); - }; - - _Class.prototype.save = function(input) { - var name, ref; - if (input.type === 'checkbox') { - this.spoiler = input.checked; - return; - } - name = input.dataset.name; - this[name] = input.value || input.dataset["default"] || null; - switch (name) { - case 'thread': - (this.thread !== 'new' ? $.addClass : $.rmClass)(QR.nodes.el, 'reply-to-thread'); - return QR.status(); - case 'com': - this.updateComment(); - if (QR.cooldown.auto && this === QR.posts[0] && (0 < (ref = QR.cooldown.seconds) && ref <= 5)) { - return QR.cooldown.auto = false; - } - break; - case 'filename': - if (!this.file) { - return; - } - this.saveFilename(); - return this.updateFilename(); - case 'name': - return QR.persona.set(this); - } - }; - - _Class.prototype.forceSave = function() { - var k, len1, name, node, ref; - if (this !== QR.selected) { - return; - } - ref = ['thread', 'name', 'email', 'sub', 'com', 'filename', 'spoiler']; - for (k = 0, len1 = ref.length; k < len1; k++) { - name = ref[k]; - if (!(node = QR.nodes[name])) { - continue; - } - this.save(node); - } - }; - - _Class.prototype.setComment = function(com) { - this.com = com || null; - if (this === QR.selected) { - QR.nodes.com.value = this.com; - } - return this.updateComment(); - }; - - _Class.prototype.updateComment = function() { - if (this === QR.selected) { - QR.characterCount(); - } - this.nodes.span.textContent = this.com; - return $.queueTask(function() { - return QR.captcha.onPostChange(); - }); - }; - - _Class.rmErrored = function(e) { - var error, errors, k, len1, post, q, ref; - e.stopPropagation(); - ref = QR.posts; - for (k = ref.length - 1; k >= 0; k += -1) { - post = ref[k]; - if (errors = post.errors) { - for (q = 0, len1 = errors.length; q < len1; q++) { - error = errors[q]; - if (!(doc.contains(error))) { - continue; - } - post.rm(); - break; - } - } - } - }; - - _Class.prototype.error = function(className, message) { - var div, ref, rm, rmAll; - div = $.el('div', { - className: className - }); - $.extend(div, { - innerHTML: E(message) + "
      [delete] [delete all]" - }); - (this.errors || (this.errors = [])).push(div); - ref = $$('a', div), rm = ref[0], rmAll = ref[1]; - $.on(div, 'click', (function(_this) { - return function() { - if (indexOf.call(QR.posts, _this) >= 0) { - return _this.select(); - } - }; - })(this)); - $.on(rm, 'click', (function(_this) { - return function(e) { - e.stopPropagation(); - if (indexOf.call(QR.posts, _this) >= 0) { - return _this.rm(); - } - }; - })(this)); - $.on(rmAll, 'click', QR.post.rmErrored); - return QR.error(div, true); - }; - - _Class.prototype.fileError = function(message) { - return this.error('file-error', this.filename + ": " + message); - }; - - _Class.prototype.dismissErrors = function(test) { - var error, k, len1, ref; - if (test == null) { - test = function() { - return true; - }; - } - if (this.errors) { - ref = this.errors; - for (k = 0, len1 = ref.length; k < len1; k++) { - error = ref[k]; - if (doc.contains(error) && test(error)) { - error.parentNode.previousElementSibling.click(); - } - } - } - }; - - _Class.prototype.setFile = function(file1) { - var ext, ref; - this.file = file1; - if (Conf['Randomize Filename'] && g.BOARD.ID !== 'f') { - this.filename = "" + (Date.now() - Math.floor(Math.random() * 365 * $.DAY)); - if (ext = this.file.name.match(QR.validExtension)) { - this.filename += ext[0]; - } - } else { - this.filename = this.file.name; - } - this.filesize = $.bytesToString(this.file.size); - this.checkSize(); - $.addClass(this.nodes.el, 'has-file'); - $.queueTask(function() { - return QR.captcha.onPostChange(); - }); - URL.revokeObjectURL(this.URL); - this.saveFilename(); - if (this === QR.selected) { - this.showFileData(); - } else { - this.updateFilename(); - } - this.nodes.el.style.backgroundImage = null; - if (ref = this.file.type, indexOf.call(QR.mimeTypes, ref) < 0) { - return this.fileError('Unsupported file type.'); - } else if (/^(image|video)\//.test(this.file.type)) { - return this.readFile(); - } - }; - - _Class.prototype.checkSize = function() { - var max; - max = QR.max_size; - if (/^video\//.test(this.file.type)) { - max = Math.min(max, QR.max_size_video); - } - if (this.file.size > max) { - return this.fileError("File too large (file: " + this.filesize + ", max: " + ($.bytesToString(max)) + ")."); - } - }; - - _Class.prototype.readFile = function() { - var el, event, isVideo, onerror, onload; - isVideo = /^video\//.test(this.file.type); - el = $.el(isVideo ? 'video' : 'img'); - if (isVideo && !el.canPlayType(this.file.type)) { - return; - } - event = isVideo ? 'loadeddata' : 'load'; - onload = (function(_this) { - return function() { - $.off(el, event, onload); - $.off(el, 'error', onerror); - _this.checkDimensions(el); - return _this.setThumbnail(el); - }; - })(this); - onerror = (function(_this) { - return function() { - $.off(el, event, onload); - $.off(el, 'error', onerror); - _this.fileError((isVideo ? 'Video' : 'Image') + " appears corrupt"); - return URL.revokeObjectURL(el.src); - }; - })(this); - $.on(el, event, onload); - $.on(el, 'error', onerror); - return el.src = URL.createObjectURL(this.file); - }; - - _Class.prototype.checkDimensions = function(el) { - var duration, height, max_height, max_width, ref, videoHeight, videoWidth, width; - if (el.tagName === 'IMG') { - height = el.height, width = el.width; - if (height > QR.max_height || width > QR.max_width) { - this.fileError("Image too large (image: " + height + "x" + width + "px, max: " + QR.max_height + "x" + QR.max_width + "px)"); - } - if (height < QR.min_height || width < QR.min_width) { - return this.fileError("Image too small (image: " + height + "x" + width + "px, min: " + QR.min_height + "x" + QR.min_width + "px)"); - } - } else { - videoHeight = el.videoHeight, videoWidth = el.videoWidth, duration = el.duration; - max_height = Math.min(QR.max_height, QR.max_height_video); - max_width = Math.min(QR.max_width, QR.max_width_video); - if (videoHeight > max_height || videoWidth > max_width) { - this.fileError("Video too large (video: " + videoHeight + "x" + videoWidth + "px, max: " + max_height + "x" + max_width + "px)"); - } - if (videoHeight < QR.min_height || videoWidth < QR.min_width) { - this.fileError("Video too small (video: " + videoHeight + "x" + videoWidth + "px, min: " + QR.min_height + "x" + QR.min_width + "px)"); - } - if (!isFinite(duration)) { - this.fileError('Video lacks duration metadata (try remuxing)'); - } else if (duration > QR.max_duration_video) { - this.fileError("Video too long (video: " + duration + "s, max: " + QR.max_duration_video + "s)"); - } - if (((ref = g.BOARD.ID) !== 'gif' && ref !== 'wsg') && $.hasAudio(el)) { - return this.fileError('Audio not allowed'); - } - } - }; - - _Class.prototype.setThumbnail = function(el) { - var cv, height, isVideo, s, width; - isVideo = el.tagName === 'VIDEO'; - s = 90 * 2 * window.devicePixelRatio; - if (this.file.type === 'image/gif') { - s *= 3; - } - if (isVideo) { - height = el.videoHeight; - width = el.videoWidth; - } else { - height = el.height, width = el.width; - if (height < s || width < s) { - this.URL = el.src; - this.nodes.el.style.backgroundImage = "url(" + this.URL + ")"; - return; - } - } - if (height <= width) { - width = s / height * width; - height = s; - } else { - height = s / width * height; - width = s; - } - cv = $.el('canvas'); - cv.height = height; - cv.width = width; - cv.getContext('2d').drawImage(el, 0, 0, width, height); - URL.revokeObjectURL(el.src); - return cv.toBlob((function(_this) { - return function(blob) { - _this.URL = URL.createObjectURL(blob); - return _this.nodes.el.style.backgroundImage = "url(" + _this.URL + ")"; - }; - })(this)); - }; - - _Class.prototype.rmFile = function() { - if (this.isLocked) { - return; - } - delete this.file; - delete this.filename; - delete this.filesize; - this.nodes.el.removeAttribute('title'); - QR.nodes.filename.removeAttribute('title'); - this.nodes.el.style.backgroundImage = null; - $.rmClass(this.nodes.el, 'has-file'); - this.showFileData(); - URL.revokeObjectURL(this.URL); - return this.dismissErrors(function(error) { - return $.hasClass(error, 'file-error'); - }); - }; - - _Class.prototype.saveFilename = function() { - this.file.newName = (this.filename || '').replace(/[\/\\]/g, '-'); - if (!QR.validExtension.test(this.filename)) { - return this.file.newName += "." + (QR.extensionFromType[this.file.type] || 'jpg'); - } - }; - - _Class.prototype.updateFilename = function() { - var long; - long = this.filename + " (" + this.filesize + ")"; - this.nodes.el.title = long; - if (this !== QR.selected) { - return; - } - return QR.nodes.filename.title = long; - }; - - _Class.prototype.showFileData = function() { - var ref; - if (this.file) { - this.updateFilename(); - QR.nodes.filename.value = this.filename; - $.addClass(QR.nodes.oekaki, 'has-file'); - $.addClass(QR.nodes.fileSubmit, 'has-file'); - } else { - $.rmClass(QR.nodes.oekaki, 'has-file'); - $.rmClass(QR.nodes.fileSubmit, 'has-file'); - } - if (((ref = this.file) != null ? ref.source : void 0) != null) { - QR.nodes.fileSubmit.dataset.source = this.file.source; - } else { - QR.nodes.fileSubmit.removeAttribute('data-source'); - } - return QR.nodes.spoiler.checked = this.spoiler; - }; - - _Class.prototype.pasteText = function(file) { - var reader; - this.pasting = true; - reader = new FileReader(); - reader.onload = (function(_this) { - return function(e) { - var result; - result = e.target.result; - _this.setComment((_this.com ? _this.com + "\n" + result : result)); - return delete _this.pasting; - }; - })(this); - return reader.readAsText(file); - }; - - _Class.prototype.dragStart = function(e) { - var left, ref, top; - ref = this.getBoundingClientRect(), left = ref.left, top = ref.top; - e.dataTransfer.setDragImage(this, e.clientX - left, e.clientY - top); - return $.addClass(this, 'drag'); - }; - - _Class.prototype.dragEnd = function() { - return $.rmClass(this, 'drag'); - }; - - _Class.prototype.dragEnter = function() { - return $.addClass(this, 'over'); - }; - - _Class.prototype.dragLeave = function() { - return $.rmClass(this, 'over'); - }; - - _Class.prototype.dragOver = function(e) { - e.preventDefault(); - return e.dataTransfer.dropEffect = 'move'; - }; - - _Class.prototype.drop = function() { - var el, index, newIndex, oldIndex, post; - $.rmClass(this, 'over'); - if (!this.draggable) { - return; - } - el = $('.drag', this.parentNode); - index = function(el) { - return slice.call(el.parentNode.children).indexOf(el); - }; - oldIndex = index(el); - newIndex = index(this); - (oldIndex < newIndex ? $.after : $.before)(this, el); - post = QR.posts.splice(oldIndex, 1)[0]; - QR.posts.splice(newIndex, 0, post); - return QR.status(); - }; - - return _Class; - - })(); - - FappeTyme = { - init: function() { - var el, k, lc, len1, ref, ref1, type; - if (!((Conf['Fappe Tyme'] || Conf['Werk Tyme']) && ((ref = g.VIEW) === 'index' || ref === 'thread'))) { - return; - } - this.nodes = {}; - this.enabled = { - fappe: false, - werk: Conf['werk'] - }; - ref1 = ["Fappe", "Werk"]; - for (k = 0, len1 = ref1.length; k < len1; k++) { - type = ref1[k]; - if (!Conf[type + " Tyme"]) { - continue; - } - lc = type.toLowerCase(); - el = UI.checkbox(lc, type + " Tyme", false); - el.title = type + " Tyme"; - this.nodes[lc] = el.firstElementChild; - if (Conf[lc]) { - this.set(lc, true); - } - $.on(this.nodes[lc], 'change', this.toggle.bind(this, lc)); - Header.menu.addEntry({ - el: el, - order: 97 - }); - } - if (Conf['Werk Tyme']) { - $.sync('werk', this.set.bind(this, 'werk')); - } - Post.callbacks.push({ - name: 'Fappe Tyme', - cb: this.node - }); - return CatalogThread.callbacks.push({ - name: 'Werk Tyme', - cb: this.catalogNode - }); - }, - node: function() { - return this.nodes.root.classList.toggle('noFile', !this.file); - }, - catalogNode: function() { - var file, filename; - file = this.thread.OP.file; - if (!file) { - return; - } - filename = $.el('div', { - textContent: file.name, - className: 'werkTyme-filename' - }); - return $.add(this.nodes.thumb.parentNode, filename); - }, - set: function(type, enabled) { - this.enabled[type] = this.nodes[type].checked = enabled; - return $[(enabled ? 'add' : 'rm') + "Class"](doc, type + "Tyme"); - }, - toggle: function(type) { - this.set(type, !this.enabled[type]); - if (type === 'werk') { - return $.cb.checked.call(this.nodes[type]); - } - } - }; - - Gallery = { - init: function() { - var el, ref; - if (!(this.enabled = Conf['Gallery'] && ((ref = g.VIEW) === 'index' || ref === 'thread') && g.BOARD.ID !== 'f')) { - return; - } - this.delay = Conf['Slide Delay']; - el = $.el('a', { - href: 'javascript:;', - id: 'appchan-gal', - title: 'Gallery', - className: 'fa fa-picture-o', - textContent: 'Gallery' - }); - $.on(el, 'click', this.cb.toggle); - Header.addShortcut(el); - return Post.callbacks.push({ - name: 'Gallery', - cb: this.node - }); - }, - node: function() { - var ref; - if (!((ref = this.file) != null ? ref.thumb : void 0)) { - return; - } - if (Gallery.nodes) { - Gallery.generateThumb(this); - Gallery.nodes.total.textContent = Gallery.images.length; - } - if (!Conf['Image Expansion']) { - return $.on(this.file.thumb.parentNode, 'click', Gallery.cb.image); - } - }, - build: function(image) { - var candidate, cb, dialog, entry, file, k, key, len1, len2, menuButton, nodes, post, q, ref, ref1, ref2, ref3, thumb, value; - cb = Gallery.cb; - if (Conf['Fullscreen Gallery']) { - $.one(d, 'fullscreenchange mozfullscreenchange webkitfullscreenchange', function() { - return $.on(d, 'fullscreenchange mozfullscreenchange webkitfullscreenchange', cb.close); - }); - if (typeof doc.mozRequestFullScreen === "function") { - doc.mozRequestFullScreen(); - } - if (typeof doc.webkitRequestFullScreen === "function") { - doc.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT); - } - } - Gallery.images = []; - nodes = Gallery.nodes = {}; - Gallery.fullIDs = {}; - Gallery.slideshow = false; - nodes.el = dialog = $.el('div', { - id: 'a-gallery' - }); - $.extend(dialog, { - innerHTML: "
      " - }); - ref = { - buttons: '.gal-buttons', - frame: '.gal-image', - name: '.gal-name', - count: '.count', - total: '.total', - thumbs: '.gal-thumbnails', - next: '.gal-image a', - current: '.gal-image img' - }; - for (key in ref) { - value = ref[key]; - nodes[key] = $(value, dialog); - } - menuButton = $('.menu-button', dialog); - nodes.menu = new UI.Menu('gallery'); - $.on(nodes.frame, 'click', cb.blank); - if (Conf['Mouse Wheel Volume']) { - $.on(nodes.frame, 'wheel', Volume.wheel); - } - $.on(nodes.next, 'click', cb.click); - $.on(nodes.name, 'click', ImageCommon.download); - $.on($('.gal-prev', dialog), 'click', cb.prev); - $.on($('.gal-next', dialog), 'click', cb.next); - $.on($('.gal-start', dialog), 'click', cb.start); - $.on($('.gal-stop', dialog), 'click', cb.stop); - $.on($('.gal-close', dialog), 'click', cb.close); - $.on(menuButton, 'click', function(e) { - return nodes.menu.toggle(e, this, g); - }); - ref1 = Gallery.menu.createSubEntries(); - for (k = 0, len1 = ref1.length; k < len1; k++) { - entry = ref1[k]; - entry.order = 0; - nodes.menu.addEntry(entry); - } - $.on(d, 'keydown', cb.keybinds); - if (Conf['Keybinds']) { - $.off(d, 'keydown', Keybinds.keydown); - } - $.on(window, 'resize', Gallery.cb.setHeight); - ref2 = $$('.post .file'); - for (q = 0, len2 = ref2.length; q < len2; q++) { - file = ref2[q]; - post = Get.postFromNode(file); - if (!((ref3 = post.file) != null ? ref3.thumb : void 0)) { - continue; - } - Gallery.generateThumb(post); - if (!image && Gallery.fullIDs[post.fullID]) { - candidate = post.file.thumb.parentNode; - if (Header.getTopOf(candidate) + candidate.getBoundingClientRect().height >= 0) { - image = candidate; - } - } - } - $.addClass(doc, 'gallery-open'); - $.add(d.body, dialog); - nodes.thumbs.scrollTop = 0; - nodes.current.parentElement.scrollTop = 0; - if (image) { - thumb = $("[href='" + image.href + "']", nodes.thumbs); - } - thumb || (thumb = Gallery.images[Gallery.images.length - 1]); - if (thumb) { - Gallery.open(thumb); - } - doc.style.overflow = 'hidden'; - return nodes.total.textContent = Gallery.images.length; - }, - generateThumb: function(post) { - var thumb, thumbImg; - if (post.isClone || post.isHidden) { - return; - } - if (!(post.file && post.file.thumb && (post.file.isImage || post.file.isVideo || Conf['PDF in Gallery']))) { - return; - } - if (Gallery.fullIDs[post.fullID]) { - return; - } - Gallery.fullIDs[post.fullID] = true; - thumb = $.el('a', { - className: 'gal-thumb', - href: post.file.url, - target: '_blank', - title: post.file.name - }); - thumb.dataset.id = Gallery.images.length; - thumb.dataset.post = post.fullID; - thumbImg = post.file.thumb.cloneNode(false); - thumbImg.style.cssText = ''; - $.add(thumb, thumbImg); - $.on(thumb, 'click', Gallery.cb.open); - Gallery.images.push(thumb); - return $.add(Gallery.nodes.thumbs, thumb); - }, - load: function(thumb, errorCB) { - var elType, ext, file; - ext = thumb.href.match(/\w*$/); - elType = { - 'webm': 'video', - 'pdf': 'iframe' - }[ext] || 'img'; - file = $.el(elType, { - title: thumb.title - }); - $.extend(file.dataset, thumb.dataset); - $.on(file, 'error', errorCB); - file.src = thumb.href; - return file; - }, - open: function(thumb) { - var el, file, newID, nodes, oldID, post, ref; - nodes = Gallery.nodes; - oldID = +nodes.current.dataset.id; - newID = +thumb.dataset.id; - if (el = Gallery.images[oldID]) { - $.rmClass(el, 'gal-highlight'); - } - $.addClass(thumb, 'gal-highlight'); - nodes.thumbs.scrollTop = thumb.offsetTop + thumb.offsetHeight / 2 - nodes.thumbs.clientHeight / 2; - if (((ref = Gallery.cache) != null ? ref.dataset.id : void 0) === '' + newID) { - file = Gallery.cache; - $.off(file, 'error', Gallery.cacheError); - $.on(file, 'error', Gallery.error); - } else { - file = Gallery.load(thumb, Gallery.error); - } - $.off(nodes.current, 'error', Gallery.error); - ImageCommon.pause(nodes.current); - $.replace(nodes.current, file); - nodes.current = file; - if (file.nodeName === 'VIDEO') { - file.loop = true; - Volume.setup(file); - if (Conf['Autoplay']) { - file.play(); - } - if (Conf['Show Controls']) { - ImageCommon.addControls(file); - } - } - doc.classList.toggle('gal-pdf', file.nodeName === 'IFRAME'); - Gallery.cb.setHeight(); - nodes.count.textContent = +thumb.dataset.id + 1; - nodes.name.download = nodes.name.textContent = thumb.title; - nodes.name.href = thumb.href; - nodes.frame.scrollTop = 0; - nodes.next.focus(); - if (Gallery.slideshow && (newID > oldID || (oldID === Gallery.images.length - 1 && newID === 0))) { - Gallery.setupTimer(); - } else { - Gallery.cb.stop(); - } - if (Conf['Scroll to Post'] && (post = g.posts[file.dataset.post])) { - Header.scrollTo(post.nodes.root); - } - if (isNaN(oldID) || newID === (oldID + 1) % Gallery.images.length) { - return Gallery.cache = Gallery.load(Gallery.images[(newID + 1) % Gallery.images.length], Gallery.cacheError); - } - }, - error: function() { - var ref; - if (((ref = this.error) != null ? ref.code : void 0) === MediaError.MEDIA_ERR_DECODE) { - return new Notice('error', 'Corrupt or unplayable video', 30); - } - if (this.src.split('/')[2] !== 'i.4cdn.org') { - return; - } - return ImageCommon.error(this, g.posts[this.dataset.post], null, (function(_this) { - return function(url) { - if (!url) { - return; - } - Gallery.images[_this.dataset.id].href = url; - if (Gallery.nodes.current === _this) { - return _this.src = url; - } - }; - })(this)); - }, - cacheError: function() { - return delete Gallery.cache; - }, - cleanupTimer: function() { - var current; - clearTimeout(Gallery.timeoutID); - current = Gallery.nodes.current; - $.off(current, 'canplaythrough load', Gallery.startTimer); - return $.off(current, 'ended', Gallery.cb.next); - }, - startTimer: function() { - return Gallery.timeoutID = setTimeout(Gallery.checkTimer, Gallery.delay * $.SECOND); - }, - setupTimer: function() { - var current, isVideo; - Gallery.cleanupTimer(); - current = Gallery.nodes.current; - isVideo = current.nodeName === 'VIDEO'; - if (isVideo) { - current.play(); - } - if ((isVideo ? current.readyState >= 4 : current.complete) || current.nodeName === 'IFRAME') { - return Gallery.startTimer(); - } else { - return $.on(current, (isVideo ? 'canplaythrough' : 'load'), Gallery.startTimer); - } - }, - checkTimer: function() { - var current; - current = Gallery.nodes.current; - if (current.nodeName === 'VIDEO' && !current.paused) { - $.on(current, 'ended', Gallery.cb.next); - return current.loop = false; - } else { - return Gallery.cb.next(); - } - }, - cb: { - keybinds: function(e) { - var cb, key; - if (!(key = Keybinds.keyCode(e))) { - return; - } - cb = (function() { - switch (key) { - case Conf['Close']: - case Conf['Open Gallery']: - return Gallery.cb.close; - case 'Right': - return Gallery.cb.next; - case 'Enter': - return Gallery.cb.advance; - case 'Left': - case '': - return Gallery.cb.prev; - case Conf['Pause']: - return Gallery.cb.pause; - case Conf['Slideshow']: - return Gallery.cb.toggleSlideshow; - } - })(); - if (!cb) { - return; - } - e.stopPropagation(); - e.preventDefault(); - return cb(); - }, - open: function(e) { - if (e) { - e.preventDefault(); - } - if (this) { - return Gallery.open(this); - } - }, - image: function(e) { - e.preventDefault(); - e.stopPropagation(); - return Gallery.build(this); - }, - prev: function() { - return Gallery.cb.open.call(Gallery.images[+Gallery.nodes.current.dataset.id - 1] || Gallery.images[Gallery.images.length - 1]); - }, - next: function() { - return Gallery.cb.open.call(Gallery.images[+Gallery.nodes.current.dataset.id + 1] || Gallery.images[0]); - }, - click: function(e) { - if (ImageCommon.onControls(e)) { - return; - } - e.preventDefault(); - return Gallery.cb.advance(); - }, - advance: function() { - if (!Conf['Autoplay'] && Gallery.nodes.current.paused) { - return Gallery.nodes.current.play(); - } else { - return Gallery.cb.next(); - } - }, - toggle: function() { - return (Gallery.nodes ? Gallery.cb.close : Gallery.build)(); - }, - blank: function(e) { - if (e.target === this) { - return Gallery.cb.close(); - } - }, - toggleSlideshow: function() { - return Gallery.cb[Gallery.slideshow ? 'stop' : 'start'](); - }, - pause: function() { - var current; - Gallery.cb.stop(); - current = Gallery.nodes.current; - if (current.nodeName === 'VIDEO') { - return current[current.paused ? 'play' : 'pause'](); - } - }, - start: function() { - $.addClass(Gallery.nodes.buttons, 'gal-playing'); - Gallery.slideshow = true; - return Gallery.setupTimer(); - }, - stop: function() { - var current; - if (!Gallery.slideshow) { - return; - } - Gallery.cleanupTimer(); - current = Gallery.nodes.current; - if (current.nodeName === 'VIDEO') { - current.loop = true; - } - $.rmClass(Gallery.nodes.buttons, 'gal-playing'); - return Gallery.slideshow = false; - }, - close: function() { - $.off(Gallery.nodes.current, 'error', Gallery.error); - ImageCommon.pause(Gallery.nodes.current); - $.rm(Gallery.nodes.el); - $.rmClass(doc, 'gallery-open'); - if (Conf['Fullscreen Gallery']) { - $.off(d, 'fullscreenchange mozfullscreenchange webkitfullscreenchange', Gallery.cb.close); - if (typeof d.mozCancelFullScreen === "function") { - d.mozCancelFullScreen(); - } - if (typeof d.webkitExitFullscreen === "function") { - d.webkitExitFullscreen(); - } - } - delete Gallery.nodes; - delete Gallery.fullIDs; - doc.style.overflow = ''; - $.off(d, 'keydown', Gallery.cb.keybinds); - if (Conf['Keybinds']) { - $.on(d, 'keydown', Keybinds.keydown); - } - $.off(window, 'resize', Gallery.cb.setHeight); - return clearTimeout(Gallery.timeoutID); - }, - setFitness: function() { - return (this.checked ? $.addClass : $.rmClass)(doc, "gal-" + (this.name.toLowerCase().replace(/\s+/g, '-'))); - }, - setHeight: $.debounce(100, function() { - var current, dim, frame, height, minHeight, ref, ref1, ref2, style, width; - ref = Gallery.nodes, current = ref.current, frame = ref.frame; - style = current.style; - if (Conf['Stretch to Fit'] && (dim = (ref1 = g.posts[current.dataset.post]) != null ? ref1.file.dimensions : void 0)) { - ref2 = dim.split('x'), width = ref2[0], height = ref2[1]; - minHeight = Math.min(doc.clientHeight - 25, height / width * frame.clientWidth); - style.minHeight = minHeight + 'px'; - return style.minWidth = (width / height * minHeight) + 'px'; - } else { - return style.minHeight = style.minWidth = null; - } - }), - setDelay: function() { - return Gallery.delay = +this.value; - } - }, - menu: { - init: function() { - var el; - if (!Gallery.enabled) { - return; - } - el = $.el('span', { - textContent: 'Gallery', - className: 'gallery-link' - }); - return Header.menu.addEntry({ - el: el, - order: 105, - subEntries: Gallery.menu.createSubEntries() - }); - }, - createSubEntry: function(name) { - var input, label; - label = UI.checkbox(name, name); - input = label.firstElementChild; - if (name === 'Hide Thumbnails' || name === 'Fit Width' || name === 'Fit Height') { - $.on(input, 'change', Gallery.cb.setFitness); - } - $.event('change', null, input); - $.on(input, 'change', $.cb.checked); - if (name === 'Hide Thumbnails' || name === 'Fit Width' || name === 'Fit Height' || name === 'Stretch to Fit') { - $.on(input, 'change', Gallery.cb.setHeight); - } - return { - el: label - }; - }, - createSubEntries: function() { - var delayInput, delayLabel, item, subEntries; - subEntries = (function() { - var k, len1, ref, results; - ref = ['Hide Thumbnails', 'Fit Width', 'Fit Height', 'Stretch to Fit', 'Scroll to Post']; - results = []; - for (k = 0, len1 = ref.length; k < len1; k++) { - item = ref[k]; - results.push(Gallery.menu.createSubEntry(item)); - } - return results; - })(); - delayLabel = $.el('label', { - innerHTML: "Slide Delay: " - }); - delayInput = delayLabel.firstElementChild; - delayInput.value = Gallery.delay; - $.on(delayInput, 'change', Gallery.cb.setDelay); - $.on(delayInput, 'change', $.cb.value); - subEntries.push({ - el: delayLabel - }); - return subEntries; - } - } - }; - - ImageCommon = { - pause: function(video) { - if (video.nodeName !== 'VIDEO') { - return; - } - video.pause(); - $.off(video, 'volumechange', Volume.change); - return video.muted = true; - }, - rewind: function(el) { - if (el.nodeName === 'VIDEO') { - if (el.readyState >= el.HAVE_METADATA) { - return el.currentTime = 0; - } - } else if (/\.gif$/.test(el.src)) { - return $.queueTask(function() { - return el.src = el.src; - }); - } - }, - pushCache: function(el) { - ImageCommon.cache = el; - return $.on(el, 'error', ImageCommon.cacheError); - }, - popCache: function() { - var el; - el = ImageCommon.cache; - $.off(el, 'error', ImageCommon.cacheError); - delete ImageCommon.cache; - return el; - }, - cacheError: function() { - if (ImageCommon.cache === this) { - return delete ImageCommon.cache; - } - }, - decodeError: function(file, post) { - var message, ref; - if (((ref = file.error) != null ? ref.code : void 0) !== MediaError.MEDIA_ERR_DECODE) { - return false; - } - if (!(message = $('.warning', post.file.thumb.parentNode))) { - message = $.el('div', { - className: 'warning' - }); - $.after(post.file.thumb, message); - } - message.textContent = 'Error: Corrupt or unplayable video'; - return true; - }, - error: function(file, post, delay, cb) { - var URL, redirect, src, timeoutID; - src = post.file.url.split('/'); - URL = Redirect.to('file', { - boardID: post.board.ID, - filename: src[src.length - 1] - }); - if (!(Conf['404 Redirect'] && URL && Redirect.securityCheck(URL))) { - URL = null; - } - if ((post.isDead || post.file.isDead) && file.src.split('/')[2] === 'i.4cdn.org') { - return cb(URL); - } - if (delay != null) { - timeoutID = setTimeout((function() { - return cb(URL); - }), delay); - } - if (post.isDead || post.file.isDead) { - return; - } - redirect = function() { - if (file.src.split('/')[2] === 'i.4cdn.org') { - if (delay != null) { - clearTimeout(timeoutID); - } - return cb(URL); - } - }; - return $.ajax("//a.4cdn.org/" + post.board + "/thread/" + post.thread + ".json", { - onload: function() { - var k, len1, postObj, ref; - if (this.status === 404) { - post.kill(); - } - if (this.status !== 200) { - return redirect(); - } - ref = this.response.posts; - for (k = 0, len1 = ref.length; k < len1; k++) { - postObj = ref[k]; - if (postObj.no === post.ID) { - break; - } - } - if (postObj.no !== post.ID) { - post.kill(); - return redirect(); - } else if (postObj.filedeleted) { - post.kill(true); - return redirect(); - } else { - return URL = post.file.url; - } - } - }); - }, - addControls: function(video) { - var handler; - handler = function() { - var t; - $.off(video, 'mouseover', handler); - t = new Date().getTime(); - return $.asap((function() { - return $.engine !== 'gecko' || (video.readyState >= 3 && video.currentTime <= Math.max(0.1, video.duration - 0.5)) || new Date().getTime() >= t + 1000; - }), function() { - return video.controls = true; - }); - }; - return $.on(video, 'mouseover', handler); - }, - onControls: function(e) { - return (Conf['Show Controls'] && Conf['Click Passthrough'] && e.target.nodeName === 'VIDEO') || (e.target.controls && e.target.getBoundingClientRect().bottom - e.clientY < 35); - }, - download: function(e) { - if (this.protocol === 'blob:') { - return true; - } - e.preventDefault(); - return CrossOrigin.file(this.href, (function(_this) { - return function(blob) { - if (blob) { - _this.href = URL.createObjectURL(blob); - return _this.click(); - } else { - return new Notice('error', "Could not download " + _this.href, 30); - } - }; - })(this)); - } - }; - - ImageExpand = { - init: function() { - var ref; - if (!(this.enabled = Conf['Image Expansion'] && ((ref = g.VIEW) === 'index' || ref === 'thread') && g.BOARD.ID !== 'f')) { - return; - } - this.EAI = $.el('a', { - className: 'expand-all-shortcut fa fa-expand', - textContent: 'EAI', - title: 'Expand All Images', - href: 'javascript:;' - }); - $.on(this.EAI, 'click', this.cb.toggleAll); - Header.addShortcut(this.EAI, 3); - $.on(d, 'scroll visibilitychange', this.cb.playVideos); - this.videoControls = $.el('span', { - className: 'video-controls' - }); - $.extend(this.videoControls, { - innerHTML: " contract" - }); - return Post.callbacks.push({ - name: 'Image Expansion', - cb: this.node - }); - }, - node: function() { - var ref; - if (!(this.file && (this.file.isImage || this.file.isVideo))) { - return; - } - $.on(this.file.thumb.parentNode, 'click', ImageExpand.cb.toggle); - if (this.isClone) { - if (this.file.isExpanding) { - ImageExpand.contract(this); - return ImageExpand.expand(this); - } else if (this.file.isExpanded && this.file.isVideo) { - Volume.setup(this.file.fullImage); - ImageExpand.setupVideoCB(this); - return ImageExpand.setupVideo(this, !((ref = this.origin.file.fullImage) != null ? ref.paused : void 0) || this.origin.file.wasPlaying, this.file.fullImage.controls); - } - } else if (ImageExpand.on && !this.isHidden && !this.isFetchedQuote && (Conf['Expand spoilers'] || !this.file.isSpoiler) && (Conf['Expand videos'] || !this.file.isVideo)) { - return ImageExpand.expand(this); - } - }, - cb: { - toggle: function(e) { - var file, post, ref; - if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0) { - return; - } - post = Get.postFromNode(this); - file = post.file; - if (file.isExpanded && ImageCommon.onControls(e)) { - return; - } - e.preventDefault(); - if (!Conf['Autoplay'] && ((ref = file.fullImage) != null ? ref.paused : void 0)) { - return file.fullImage.play(); - } else { - return ImageExpand.toggle(post); - } - }, - toggleAll: function() { - var func, toggle; - $.event('CloseMenu'); - toggle = function(post) { - var file; - file = post.file; - if (!(file && (file.isImage || file.isVideo) && doc.contains(post.nodes.root))) { - return; - } - if (ImageExpand.on && (!Conf['Expand spoilers'] && file.isSpoiler || !Conf['Expand videos'] && file.isVideo || Conf['Expand from here'] && Header.getTopOf(file.thumb) < 0)) { - return; - } - return $.queueTask(func, post); - }; - if (ImageExpand.on = $.hasClass(ImageExpand.EAI, 'expand-all-shortcut')) { - ImageExpand.EAI.className = 'contract-all-shortcut fa fa-compress'; - ImageExpand.EAI.title = 'Contract All Images'; - func = ImageExpand.expand; - } else { - ImageExpand.EAI.className = 'expand-all-shortcut fa fa-expand'; - ImageExpand.EAI.title = 'Expand All Images'; - func = ImageExpand.contract; - } - return g.posts.forEach(function(post) { - var k, len1, ref; - ref = [post].concat(slice.call(post.clones)); - for (k = 0, len1 = ref.length; k < len1; k++) { - post = ref[k]; - toggle(post); - } - }); - }, - playVideos: function() { - return g.posts.forEach(function(post) { - var file, k, len1, ref, video, visible; - ref = [post].concat(slice.call(post.clones)); - for (k = 0, len1 = ref.length; k < len1; k++) { - post = ref[k]; - file = post.file; - if (!(file && file.isVideo && file.isExpanded)) { - continue; - } - video = file.fullImage; - visible = ($.hasAudio(video) && !video.muted) || Header.isNodeVisible(video); - if (visible && file.wasPlaying) { - delete file.wasPlaying; - video.play(); - } else if (!visible && !video.paused) { - file.wasPlaying = true; - video.pause(); - } - } - }); - }, - setFitness: function() { - return $[this.checked ? 'addClass' : 'rmClass'](doc, this.name.toLowerCase().replace(/\s+/g, '-')); - } - }, - toggle: function(post) { - var next; - if (!(post.file.isExpanding || post.file.isExpanded)) { - post.file.scrollIntoView = Conf['Scroll into view']; - ImageExpand.expand(post); - return; - } - ImageExpand.contract(post); - if (Conf['Advance on contract']) { - next = post.nodes.root; - while (next = $.x("following::div[contains(@class,'postContainer')][1]", next)) { - if (!($('.stub', next) || next.offsetHeight === 0)) { - break; - } - } - if (next) { - return Header.scrollTo(next); - } - } - }, - contract: function(post) { - var bottom, cb, el, eventName, file, k, len1, oldHeight, ref, ref1, scrollY, top, x; - file = post.file; - if (el = file.fullImage) { - top = Header.getTopOf(el); - bottom = top + el.getBoundingClientRect().height; - oldHeight = d.body.clientHeight; - scrollY = window.scrollY; - } - $.rmClass(post.nodes.root, 'expanded-image'); - $.rmClass(file.thumb, 'expanding'); - $.rm(file.videoControls); - file.thumb.parentNode.href = file.url; - file.thumb.parentNode.target = '_blank'; - ref = ['isExpanding', 'isExpanded', 'videoControls', 'wasPlaying', 'scrollIntoView']; - for (k = 0, len1 = ref.length; k < len1; k++) { - x = ref[k]; - delete file[x]; - } - if (!el) { - return; - } - if (doc.contains(el)) { - if (bottom <= 0) { - window.scroll(0, scrollY + d.body.clientHeight - oldHeight); - } else { - Header.scrollToIfNeeded(post.nodes.root); - } - if (window.scrollX > 0) { - window.scroll(0, window.scrollY); - } - } - $.off(el, 'error', ImageExpand.error); - ImageCommon.pushCache(el); - if (file.isVideo) { - ImageCommon.pause(el); - ref1 = ImageExpand.videoCB; - for (eventName in ref1) { - cb = ref1[eventName]; - $.off(el, eventName, cb); - } - } - if (Conf['Restart when Opened']) { - ImageCommon.rewind(file.thumb); - } - delete file.fullImage; - return $.queueTask(function() { - if (file.isExpanding || file.isExpanded) { - return; - } - $.rmClass(el, 'full-image'); - if (el.id) { - return; - } - return $.rm(el); - }); - }, - expand: function(post, src) { - var el, file, isVideo, ref, thumb; - file = post.file; - thumb = file.thumb, isVideo = file.isVideo; - if (post.isHidden || file.isExpanding || file.isExpanded) { - return; - } - $.addClass(thumb, 'expanding'); - file.isExpanding = true; - if (file.fullImage) { - el = file.fullImage; - } else if (((ref = ImageCommon.cache) != null ? ref.dataset.fullID : void 0) === post.fullID) { - el = file.fullImage = ImageCommon.popCache(); - $.on(el, 'error', ImageExpand.error); - if (Conf['Restart when Opened'] && el.id !== 'ihover') { - ImageCommon.rewind(el); - } - el.removeAttribute('id'); - } else { - el = file.fullImage = $.el((isVideo ? 'video' : 'img')); - el.dataset.fullID = post.fullID; - $.on(el, 'error', ImageExpand.error); - el.src = src || file.url; - } - el.className = 'full-image'; - $.after(thumb, el); - if (isVideo) { - if (Conf['Show Controls'] && Conf['Click Passthrough'] && !file.videoControls) { - file.videoControls = ImageExpand.videoControls.cloneNode(true); - $.add(file.text, file.videoControls); - } - thumb.parentNode.removeAttribute('href'); - thumb.parentNode.removeAttribute('target'); - el.loop = true; - Volume.setup(el); - ImageExpand.setupVideoCB(post); - } - if (!isVideo) { - return $.asap((function() { - return el.naturalHeight; - }), function() { - return ImageExpand.completeExpand(post); - }); - } else if (el.readyState >= el.HAVE_METADATA) { - return ImageExpand.completeExpand(post); - } else { - return $.on(el, 'loadedmetadata', function() { - return ImageExpand.completeExpand(post); - }); - } - }, - completeExpand: function(post) { - var bottom, file, imageBottom, oldHeight, scrollY; - file = post.file; - if (!file.isExpanding) { - return; - } - bottom = Header.getTopOf(file.thumb) + file.thumb.getBoundingClientRect().height; - oldHeight = d.body.clientHeight; - scrollY = window.scrollY; - $.addClass(post.nodes.root, 'expanded-image'); - $.rmClass(file.thumb, 'expanding'); - file.isExpanded = true; - delete file.isExpanding; - if (doc.contains(post.nodes.root) && bottom <= 0) { - window.scroll(window.scrollX, scrollY + d.body.clientHeight - oldHeight); - } - if (file.scrollIntoView) { - delete file.scrollIntoView; - imageBottom = Math.min(doc.clientHeight - file.fullImage.getBoundingClientRect().bottom - 25, Header.getBottomOf(file.fullImage)); - if (imageBottom < 0) { - window.scrollBy(0, Math.min(-imageBottom, Header.getTopOf(file.fullImage))); - } - } - if (file.isVideo) { - return ImageExpand.setupVideo(post, Conf['Autoplay'], Conf['Show Controls']); - } - }, - setupVideo: function(post, playing, controls) { - var fullImage; - fullImage = post.file.fullImage; - if (!playing) { - fullImage.controls = controls; - return; - } - fullImage.controls = false; - $.asap((function() { - return doc.contains(fullImage); - }), function() { - if (!d.hidden && Header.isNodeVisible(fullImage)) { - return fullImage.play(); - } else { - return post.file.wasPlaying = true; - } - }); - if (controls) { - return ImageCommon.addControls(fullImage); - } - }, - videoCB: (function() { - var mousedown; - mousedown = false; - return { - mouseover: function() { - return mousedown = false; - }, - mousedown: function(e) { - if (e.button === 0) { - return mousedown = true; - } - }, - mouseup: function(e) { - if (e.button === 0) { - return mousedown = false; - } - }, - mouseout: function(e) { - if (mousedown && e.clientX <= this.getBoundingClientRect().left) { - return ImageExpand.toggle(Get.postFromNode(this)); - } - } - }; - })(), - setupVideoCB: function(post) { - var cb, eventName, ref; - ref = ImageExpand.videoCB; - for (eventName in ref) { - cb = ref[eventName]; - $.on(post.file.fullImage, eventName, cb); - } - if (post.file.videoControls) { - return $.on(post.file.videoControls.firstElementChild, 'click', function() { - return ImageExpand.toggle(post); - }); - } - }, - error: function() { - var post; - post = Get.postFromNode(this); - $.rm(this); - delete post.file.fullImage; - if (!(post.file.isExpanding || post.file.isExpanded)) { - return; - } - if (ImageCommon.decodeError(this, post)) { - return ImageExpand.contract(post); - } - if (this.src.split('/')[2] !== 'i.4cdn.org') { - return ImageExpand.contract(post); - } - return ImageCommon.error(this, post, 10 * $.SECOND, function(URL) { - if (post.file.isExpanding || post.file.isExpanded) { - ImageExpand.contract(post); - if (URL) { - return ImageExpand.expand(post, URL); - } - } - }); - }, - menu: { - init: function() { - var conf, createSubEntry, el, name, ref, subEntries; - if (!ImageExpand.enabled) { - return; - } - el = $.el('span', { - textContent: 'Image Expansion', - className: 'image-expansion-link' - }); - createSubEntry = ImageExpand.menu.createSubEntry; - subEntries = []; - ref = Config.imageExpansion; - for (name in ref) { - conf = ref[name]; - subEntries.push(createSubEntry(name, conf[1])); - } - return Header.menu.addEntry({ - el: el, - order: 105, - subEntries: subEntries - }); - }, - createSubEntry: function(name, desc) { - var input, label; - label = UI.checkbox(name, name); - label.title = desc; - input = label.firstElementChild; - if (name === 'Fit width' || name === 'Fit height') { - $.on(input, 'change', ImageExpand.cb.setFitness); - } - $.event('change', null, input); - $.on(input, 'change', $.cb.checked); - return { - el: label - }; - } - } - }; - - ImageHover = { - init: function() { - var ref; - if ((ref = g.VIEW) !== 'index' && ref !== 'thread') { - return; - } - if (Conf['Image Hover']) { - Post.callbacks.push({ - name: 'Image Hover', - cb: this.node - }); - } - if (Conf['Image Hover in Catalog']) { - return CatalogThread.callbacks.push({ - name: 'Image Hover', - cb: this.catalogNode - }); - } - }, - node: function() { - if (!(this.file && (this.file.isImage || this.file.isVideo))) { - return; - } - return $.on(this.file.thumb, 'mouseover', ImageHover.mouseover(this)); - }, - catalogNode: function() { - var file; - file = this.thread.OP.file; - if (!(file && (file.isImage || file.isVideo))) { - return; - } - return $.on(this.nodes.thumb, 'mouseover', ImageHover.mouseover(this.thread.OP)); - }, - mouseover: function(post) { - return function(e) { - var el, error, file, height, isVideo, left, maxHeight, maxWidth, ref, ref1, ref2, right, scale, width, x; - if (!doc.contains(this)) { - return; - } - file = post.file; - isVideo = file.isVideo; - if (file.isExpanding || file.isExpanded) { - return; - } - error = ImageHover.error(post); - if (((ref = ImageCommon.cache) != null ? ref.dataset.fullID : void 0) === post.fullID) { - el = ImageCommon.popCache(); - $.on(el, 'error', error); - } else { - el = $.el((isVideo ? 'video' : 'img')); - el.dataset.fullID = post.fullID; - $.on(el, 'error', error); - el.src = file.url; - } - if (Conf['Restart when Opened']) { - ImageCommon.rewind(el); - ImageCommon.rewind(this); - } - el.id = 'ihover'; - $.add(Header.hover, el); - if (isVideo) { - el.loop = true; - el.controls = false; - Volume.setup(el); - if (Conf['Autoplay']) { - el.play(); - } - } - ref1 = (function() { - var k, len1, ref1, results; - ref1 = file.dimensions.split('x'); - results = []; - for (k = 0, len1 = ref1.length; k < len1; k++) { - x = ref1[k]; - results.push(+x); - } - return results; - })(), width = ref1[0], height = ref1[1]; - ref2 = this.getBoundingClientRect(), left = ref2.left, right = ref2.right; - maxWidth = Math.max(left, doc.clientWidth - right); - maxHeight = doc.clientHeight - UI.hover.padding; - scale = Math.min(1, maxWidth / width, maxHeight / height); - el.style.maxWidth = (scale * width) + "px"; - el.style.maxHeight = (scale * height) + "px"; - return UI.hover({ - root: this, - el: el, - latestEvent: e, - endEvents: 'mouseout click', - height: scale * height, - noRemove: true, - cb: function() { - $.off(el, 'error', error); - ImageCommon.pushCache(el); - ImageCommon.pause(el); - $.rm(el); - return el.removeAttribute('style'); - } - }); - }; - }, - error: function(post) { - return function() { - if (ImageCommon.decodeError(this, post)) { - return; - } - return ImageCommon.error(this, post, 3 * $.SECOND, (function(_this) { - return function(URL) { - if (URL) { - return _this.src = URL + (_this.src === URL ? '?' + Date.now() : ''); - } else { - return $.rm(_this); - } - }; - })(this)); - }; - } - }; - - ImageLoader = { - init: function() { - var prefetch, ref; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && g.BOARD.ID !== 'f')) { - return; - } - if (!(Conf['Image Prefetching'] || Conf['Replace JPG'] || Conf['Replace PNG'] || Conf['Replace GIF'] || Conf['Replace WEBM'])) { - return; - } - Post.callbacks.push({ - name: 'Image Replace', - cb: this.node - }); - $.on(d, 'PostsInserted', function() { - return g.posts.forEach(ImageLoader.prefetch); - }); - if (Conf['Replace WEBM']) { - $.on(d, 'scroll visibilitychange 4chanXInitFinished PostsInserted', this.playVideos); - } - if (!Conf['Image Prefetching']) { - return; - } - prefetch = $.el('label', { - innerHTML: " Prefetch Images" - }); - this.el = prefetch.firstElementChild; - $.on(this.el, 'change', this.toggle); - return Header.menu.addEntry({ - el: prefetch, - order: 98 - }); - }, - node: function() { - if (this.isClone || !this.file) { - return; - } - if (Conf['Replace WEBM'] && this.file.isVideo) { - ImageLoader.replaceVideo(this); - } - return ImageLoader.prefetch(this); - }, - replaceVideo: function(post) { - var attr, file, k, len1, ref, thumb, video; - file = post.file; - thumb = file.thumb; - video = $.el('video', { - preload: 'none', - loop: true, - muted: true, - poster: thumb.src || thumb.dataset.src, - textContent: thumb.alt, - className: thumb.className - }); - video.setAttribute('muted', 'muted'); - video.dataset.md5 = thumb.dataset.md5; - ref = ['height', 'width', 'maxHeight', 'maxWidth']; - for (k = 0, len1 = ref.length; k < len1; k++) { - attr = ref[k]; - video.style[attr] = thumb.style[attr]; - } - video.src = file.url; - $.replace(thumb, video); - file.thumb = video; - return file.videoThumb = true; - }, - prefetch: function(post) { - var clone, el, file, isImage, isVideo, k, len1, match, ref, replace, thumb, type, url; - file = post.file; - if (!file) { - return; - } - isImage = file.isImage, isVideo = file.isVideo, thumb = file.thumb, url = file.url; - if (file.isPrefetched || !(isImage || isVideo) || post.isHidden || post.thread.isHidden) { - return; - } - type = (match = url.match(/\.([^.]+)$/)[1].toUpperCase()) === 'JPEG' ? 'JPG' : match; - replace = Conf["Replace " + type] && !/spoiler/.test(thumb.src || thumb.dataset.src); - if (!(replace || Conf['prefetch'])) { - return; - } - if (![post].concat(slice.call(post.clones)).some(function(clone) { - return doc.contains(clone.nodes.root); - })) { - return; - } - file.isPrefetched = true; - if (file.videoThumb) { - ref = post.clones; - for (k = 0, len1 = ref.length; k < len1; k++) { - clone = ref[k]; - clone.file.thumb.preload = 'auto'; - } - thumb.preload = 'auto'; - if ($.engine === 'gecko') { - $.on(thumb, 'loadeddata', function() { - return this.removeAttribute('poster'); - }); - } - return; - } - el = $.el(isImage ? 'img' : 'video'); - if (replace && isImage) { - $.on(el, 'load', function() { - var len2, q, ref1; - ref1 = post.clones; - for (q = 0, len2 = ref1.length; q < len2; q++) { - clone = ref1[q]; - clone.file.thumb.src = url; - } - thumb.src = url; - return thumb.removeAttribute('data-src'); - }); - } - return el.src = url; - }, - toggle: function() { - if (Conf['prefetch'] = this.checked) { - g.posts.forEach(ImageLoader.prefetch); - } - }, - playVideos: function() { - var qpClone, ref; - qpClone = (ref = $.id('qp')) != null ? ref.firstElementChild : void 0; - return g.posts.forEach(function(post) { - var k, len1, ref1, ref2, thumb; - ref1 = [post].concat(slice.call(post.clones)); - for (k = 0, len1 = ref1.length; k < len1; k++) { - post = ref1[k]; - if (!((ref2 = post.file) != null ? ref2.videoThumb : void 0)) { - continue; - } - thumb = post.file.thumb; - if (Header.isNodeVisible(thumb) || post.nodes.root === qpClone) { - thumb.play(); - } else { - thumb.pause(); - } - } - }); - } - }; - - Metadata = { - init: function() { - var ref; - if (!(Conf['WEBM Metadata'] && ((ref = g.VIEW) === 'index' || ref === 'thread') && g.BOARD.ID !== 'f')) { - return; - } - return Post.callbacks.push({ - name: 'WEBM Metadata', - cb: this.node - }); - }, - node: function() { - var el; - if (!(this.file && /webm$/i.test(this.file.url))) { - return; - } - if (this.isClone) { - el = $('.webm-title', this.file.text); - } else { - el = $.el('span', { - className: 'webm-title' - }); - $.extend(el, { - innerHTML: "" - }); - $.add(this.file.text, [$.tn('\u00A0'), el]); - } - if (el.children.length === 1) { - return $.one(el.lastElementChild, 'mouseover focus', Metadata.load); - } - }, - load: function() { - $.rmClass(this.parentNode, 'error'); - $.addClass(this.parentNode, 'loading'); - return CrossOrigin.binary(Get.postFromNode(this).file.url, (function(_this) { - return function(data) { - var output, title; - $.rmClass(_this.parentNode, 'loading'); - if (data != null) { - title = Metadata.parse(data); - output = $.el('span', { - textContent: title || '' - }); - if (title == null) { - $.addClass(_this.parentNode, 'not-found'); - } - $.before(_this, output); - _this.parentNode.tabIndex = 0; - if (d.activeElement === _this) { - _this.parentNode.focus(); - } - return _this.tabIndex = -1; - } else { - $.addClass(_this.parentNode, 'error'); - return $.one(_this, 'click', Metadata.load); - } - }; - })(this), { - Range: 'bytes=0-9999' - }); - }, - parse: function(data) { - var element, i, readInt, size, title; - readInt = function() { - var len, n; - n = data[i++]; - len = 0; - while (n < (0x80 >> len)) { - len++; - } - n ^= 0x80 >> len; - while (len-- && i < data.length) { - n = (n << 8) ^ data[i++]; - } - return n; - }; - i = 0; - while (i < data.length) { - element = readInt(); - size = readInt(); - if (element === 0x3BA9) { - title = ''; - while (size-- && i < data.length) { - title += String.fromCharCode(data[i++]); - } - return decodeURIComponent(escape(title)); - } else if (element !== 0x8538067 && element !== 0x549A966) { - i += size; - } - } - return null; - } - }; - - RevealSpoilers = { - init: function() { - var ref; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Reveal Spoiler Thumbnails'])) { - return; - } - return Post.callbacks.push({ - name: 'Reveal Spoiler Thumbnails', - cb: this.node - }); - }, - node: function() { - var thumb; - if (!(!this.isClone && this.file && this.file.thumb && this.file.isSpoiler)) { - return; - } - thumb = this.file.thumb; - thumb.removeAttribute('style'); - thumb.style.maxHeight = thumb.style.maxWidth = this.isReply ? '125px' : '250px'; - if (thumb.src) { - return thumb.src = this.file.thumbURL; - } else { - return thumb.dataset.src = this.file.thumbURL; - } - } - }; - - Sauce = { - init: function() { - var err, k, len1, link, links, ref, ref1; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Sauce'])) { - return; - } - links = []; - ref1 = Conf['sauces'].split('\n'); - for (k = 0, len1 = ref1.length; k < len1; k++) { - link = ref1[k]; - try { - if (link[0] !== '#') { - links.push(link.trim()); - } - } catch (_error) { - err = _error; - } - } - if (!links.length) { - return; - } - this.links = links; - this.link = $.el('a', { - target: '_blank', - className: 'sauce' - }); - return Post.callbacks.push({ - name: 'Sauce', - cb: this.node - }); - }, - sandbox: function(url) { - return E.url({ - innerHTML: "[sb] " + E(url) + "" - }); - }, - rmOrigin: function(e) { - if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0) { - return; - } - $.open(this.href); - return e.preventDefault(); - }, - createSauceLink: function(link, post) { - var a, ext, i, k, key, len1, m, part, parts, ref, ref1, ref2, skip, url; - if (!(link = link.trim())) { - return null; - } - parts = {}; - ref = link.split(/;(?=(?:text|boards|types|sandbox):?)/); - for (i = k = 0, len1 = ref.length; k < len1; i = ++k) { - part = ref[i]; - if (i === 0) { - parts['url'] = part; - } else { - m = part.match(/^(\w*):?(.*)$/); - parts[m[1]] = m[2]; - } - } - parts['text'] || (parts['text'] = ((ref1 = parts['url'].match(/(\w+)\.\w+\//)) != null ? ref1[1] : void 0) || '?'); - ext = post.file.url.match(/[^.]*$/)[0]; - skip = false; - for (key in parts) { - parts[key] = parts[key].replace(/%(T?URL|IMG|[sh]?MD5|board|name|%|semi)/g, function(_, parameter) { - var type; - type = Sauce.formatters[parameter](post, ext); - if (type == null) { - skip = true; - return ''; - } - if (key === 'url' && (parameter !== '%' && parameter !== 'semi')) { - if (/^javascript:/i.test(parts['url'])) { - type = JSON.stringify(type); - } - type = encodeURIComponent(type); - } - return type; - }); - } - if (skip) { - return null; - } - if (!(!parts['boards'] || (ref2 = post.board.ID, indexOf.call(parts['boards'].split(','), ref2) >= 0))) { - return null; - } - if (!(!parts['types'] || indexOf.call(parts['types'].split(','), ext) >= 0)) { - return null; - } - url = parts['url']; - if (parts['sandbox'] != null) { - url = Sauce.sandbox(url); - } - a = Sauce.link.cloneNode(true); - a.href = url; - a.textContent = parts['text']; - if (/^javascript:/i.test(parts['url'])) { - a.removeAttribute('target'); - } - if (parts['sandbox'] != null) { - $.on(a, 'click', Sauce.rmOrigin); - } - return a; - }, - node: function() { - var k, len1, link, node, nodes, ref; - if (this.isClone || !this.file) { - return; - } - nodes = []; - ref = Sauce.links; - for (k = 0, len1 = ref.length; k < len1; k++) { - link = ref[k]; - if (node = Sauce.createSauceLink(link, this)) { - nodes.push($.tn('\u00A0'), node); - } - } - return $.add(this.file.text, nodes); - }, - formatters: { - TURL: function(post) { - return post.file.thumbURL; - }, - URL: function(post) { - return post.file.url; - }, - IMG: function(post, ext) { - if (ext === 'gif' || ext === 'jpg' || ext === 'png') { - return post.file.url; - } else { - return post.file.thumbURL; - } - }, - MD5: function(post) { - return post.file.MD5; - }, - sMD5: function(post) { - var ref; - return (ref = post.file.MD5) != null ? ref.replace(/[+\/=]/g, function(c) { - return { - '+': '-', - '/': '_', - '=': '' - }[c]; - }) : void 0; - }, - hMD5: function(post) { - if (post.file.MD5) { - return ((function() { - var k, len1, ref, results; - ref = atob(post.file.MD5); - results = []; - for (k = 0, len1 = ref.length; k < len1; k++) { - c = ref[k]; - results.push(("0" + (c.charCodeAt(0).toString(16))).slice(-2)); - } - return results; - })()).join(''); - } - }, - board: function(post) { - return post.board.ID; - }, - name: function(post) { - return post.file.name; - }, - '%': function() { - return '%'; - }, - semi: function() { - return ';'; - } - } - }; - - Volume = { - init: function() { - var ref, ref1, unmuteEntry, volumeEntry; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && (Conf['Image Expansion'] || Conf['Image Hover'] || Conf['Image Hover in Catalog'] || Conf['Gallery']))) { - return; - } - $.sync('Allow Sound', function(x) { - var ref1; - Conf['Allow Sound'] = x; - return (ref1 = Volume.inputs) != null ? ref1.unmute.checked = x : void 0; - }); - $.sync('Default Volume', function(x) { - var ref1; - Conf['Default Volume'] = x; - return (ref1 = Volume.inputs) != null ? ref1.volume.value = x : void 0; - }); - if (Conf['Mouse Wheel Volume']) { - Post.callbacks.push({ - name: 'Mouse Wheel Volume', - cb: this.node - }); - } - if ((ref1 = g.BOARD.ID) !== 'gif' && ref1 !== 'wsg') { - return; - } - if (Conf['Mouse Wheel Volume']) { - CatalogThread.callbacks.push({ - name: 'Mouse Wheel Volume', - cb: this.catalogNode - }); - } - unmuteEntry = UI.checkbox('Allow Sound', 'Allow Sound'); - unmuteEntry.title = Config.main['Images and Videos']['Allow Sound'][1]; - volumeEntry = $.el('label', { - title: 'Default volume for videos.' - }); - $.extend(volumeEntry, { - innerHTML: " Volume" - }); - this.inputs = { - unmute: unmuteEntry.firstElementChild, - volume: volumeEntry.firstElementChild - }; - $.on(this.inputs.unmute, 'change', $.cb.checked); - $.on(this.inputs.volume, 'change', $.cb.value); - Header.menu.addEntry({ - el: unmuteEntry, - order: 200 - }); - return Header.menu.addEntry({ - el: volumeEntry, - order: 201 - }); - }, - setup: function(video) { - video.muted = !Conf['Allow Sound']; - video.volume = Conf['Default Volume']; - return $.on(video, 'volumechange', Volume.change); - }, - change: function() { - var items, key, muted, val, volume; - muted = this.muted, volume = this.volume; - items = { - 'Allow Sound': !muted, - 'Default Volume': volume - }; - for (key in items) { - val = items[key]; - if (Conf[key] === val) { - delete items[key]; - } - } - $.set(items); - $.extend(Conf, items); - if (Volume.inputs) { - Volume.inputs.unmute.checked = !muted; - return Volume.inputs.volume.value = volume; - } - }, - node: function() { - var ref, ref1; - if (!(((ref = this.board.ID) === 'gif' || ref === 'wsg') && ((ref1 = this.file) != null ? ref1.isVideo : void 0))) { - return; - } - $.on(this.file.thumb, 'wheel', Volume.wheel.bind(Header.hover)); - return $.on($('a', this.file.text), 'wheel', Volume.wheel.bind(this.file.thumb.parentNode)); - }, - catalogNode: function() { - var file; - file = this.thread.OP.file; - if (!(file != null ? file.isVideo : void 0)) { - return; - } - return $.on(this.nodes.thumb, 'wheel', Volume.wheel.bind(Header.hover)); - }, - wheel: function(e) { - var el, volume; - if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) { - return; - } - if (!(el = $('video:not([data-md5])', this))) { - return; - } - if (el.muted || !$.hasAudio(el)) { - return; - } - volume = el.volume + 0.1; - if (e.deltaY < 0) { - volume *= 1.1; - } - if (e.deltaY > 0) { - volume /= 1.1; - } - el.volume = $.minmax(volume - 0.1, 0, 1); - return e.preventDefault(); - } - }; - - Embedding = { - init: function() { - var k, len1, ref, type; - if (!(Conf['Embedding'] || Conf['Link Title'])) { - return; - } - this.types = {}; - ref = this.ordered_types; - for (k = 0, len1 = ref.length; k < len1; k++) { - type = ref[k]; - this.types[type.key] = type; - } - if (Conf['Floating Embeds']) { - this.dialog = UI.dialog('embedding', 'top: 50px; right: 0px;', { - innerHTML: "
      " - }); - this.media = $('#media-embed', this.dialog); - $.one(d, '4chanXInitFinished', this.ready); - } - if (Conf['Link Title']) { - return $.on(d, '4chanXInitFinished PostsInserted', function() { - var key, ref1, ref2, service; - ref1 = Embedding.types; - for (key in ref1) { - service = ref1[key]; - if ((ref2 = service.title) != null ? ref2.batchSize : void 0) { - Embedding.flushTitles(service.title); - } - } - }); - } - }, - events: function(post) { - var el, i, items; - if (!Conf['Embedding']) { - return; - } - i = 0; - items = $$('.embedder', post.nodes.comment); - while (el = items[i++]) { - $.on(el, 'click', Embedding.cb.toggle); - if ($.hasClass(el, 'embedded')) { - Embedding.cb.toggle.call(el); - } - } - }, - process: function(link, post) { - var data; - if (!(Conf['Embedding'] || Conf['Link Title'])) { - return; - } - if ($.x('ancestor::pre', link)) { - return; - } - if (data = Embedding.services(link)) { - data.post = post; - if (Conf['Embedding']) { - Embedding.embed(data); - } - if (Conf['Link Title']) { - return Embedding.title(data); - } - } - }, - services: function(link) { - var href, k, len1, match, ref, type; - href = link.href; - ref = Embedding.ordered_types; - for (k = 0, len1 = ref.length; k < len1; k++) { - type = ref[k]; - if (!(match = type.regExp.exec(href))) { - continue; - } - if (type.dummy) { - return; - } - return { - key: type.key, - uid: match[1], - options: match[2], - link: link - }; - } - }, - embed: function(data) { - var embed, href, key, link, name, options, post, ref, uid, value; - key = data.key, uid = data.uid, options = data.options, link = data.link, post = data.post; - href = link.href; - if (Embedding.types[key].httpOnly && location.protocol !== 'http:') { - return; - } - $.addClass(link, key.toLowerCase()); - embed = $.el('a', { - className: 'embedder', - href: 'javascript:;', - textContent: '(embed)' - }); - ref = { - key: key, - uid: uid, - options: options, - href: href - }; - for (name in ref) { - value = ref[name]; - embed.dataset[name] = value; - } - $.on(embed, 'click', Embedding.cb.toggle); - $.after(link, [$.tn(' '), embed]); - if (Conf['Auto-embed'] && !Conf['Floating Embeds'] && !post.isFetchedQuote && key !== 'TwitchTV') { - return $.asap((function() { - return doc.contains(embed); - }), function() { - return Embedding.cb.toggle.call(embed); - }); - } - }, - ready: function() { - $.addClass(Embedding.dialog, 'empty'); - $.on($('.close', Embedding.dialog), 'click', Embedding.closeFloat); - $.on($('.move', Embedding.dialog), 'mousedown', Embedding.dragEmbed); - $.on($('.jump', Embedding.dialog), 'click', function() { - if (doc.contains(Embedding.lastEmbed)) { - return Header.scrollTo(Embedding.lastEmbed); - } - }); - return $.add(d.body, Embedding.dialog); - }, - closeFloat: function() { - delete Embedding.lastEmbed; - $.addClass(Embedding.dialog, 'empty'); - return $.replace(Embedding.media.firstChild, $.el('div')); - }, - dragEmbed: function() { - var style; - style = Embedding.media.style; - if (Embedding.dragEmbed.mouseup) { - $.off(d, 'mouseup', Embedding.dragEmbed); - Embedding.dragEmbed.mouseup = false; - style.visibility = ''; - return; - } - $.on(d, 'mouseup', Embedding.dragEmbed); - Embedding.dragEmbed.mouseup = true; - return style.visibility = 'hidden'; - }, - title: function(data) { - var key, link, options, post, service, uid; - key = data.key, uid = data.uid, options = data.options, link = data.link, post = data.post; - if (!(service = Embedding.types[key].title)) { - return; - } - $.addClass(link, key.toLowerCase()); - if (service.batchSize) { - (service.queue || (service.queue = [])).push(data); - if (service.queue.length >= service.batchSize) { - return Embedding.flushTitles(service); - } - } else { - if (!$.cache(service.api(uid), (function() { - return Embedding.cb.title(this, data); - }), { - responseType: 'json' - })) { - return $.extend(link, { - innerHTML: "[" + E(key) + "] Title Link Blocked (are you using NoScript?)" - }); - } - } - }, - flushTitles: function(service) { - var cb, data, k, len1, queue; - queue = service.queue; - if (!(queue != null ? queue.length : void 0)) { - return; - } - service.queue = []; - cb = function() { - var data, k, len1; - for (k = 0, len1 = queue.length; k < len1; k++) { - data = queue[k]; - Embedding.cb.title(this, data); - } - }; - if (!$.cache(service.api((function() { - var k, len1, results; - results = []; - for (k = 0, len1 = queue.length; k < len1; k++) { - data = queue[k]; - results.push(data.uid); - } - return results; - })()), cb, { - responseType: 'json' - })) { - for (k = 0, len1 = queue.length; k < len1; k++) { - data = queue[k]; - $.extend(data.link, { - innerHTML: "[" + E(data.key) + "] Title Link Blocked (are you using NoScript?)" - }); - } - } - }, - cb: { - toggle: function(e) { - var div; - if (e != null) { - e.preventDefault(); - } - if (Conf['Floating Embeds']) { - if (!(div = Embedding.media.firstChild)) { - return; - } - $.replace(div, Embedding.cb.embed(this)); - Embedding.lastEmbed = Get.postFromNode(this).nodes.root; - $.rmClass(Embedding.dialog, 'empty'); - return; - } - if ($.hasClass(this, "embedded")) { - $.rm(this.nextElementSibling); - this.textContent = '(embed)'; - } else { - $.after(this, Embedding.cb.embed(this)); - this.textContent = '(unembed)'; - } - return $.toggleClass(this, 'embedded'); - }, - embed: function(a) { - var container, el, type; - container = $.el('div'); - $.add(container, el = (type = Embedding.types[a.dataset.key]).el(a)); - el.style.cssText = type.style != null ? type.style : 'border: none; width: 640px; height: 360px;'; - return container; - }, - title: function(req, data) { - var base1, k, key, len1, len2, link, link2, options, post, post2, q, ref, ref1, service, status, text, uid; - key = data.key, uid = data.uid, options = data.options, link = data.link, post = data.post; - status = req.status; - service = Embedding.types[key].title; - text = "[" + key + "] " + ((function() { - switch (status) { - case 200: - case 304: - return service.text(req.response, uid); - case 404: - return "Not Found"; - case 403: - return "Forbidden or Private"; - default: - return status + "'d"; - } - })()); - link.dataset.original = link.textContent; - link.textContent = text; - ref = post.clones; - for (k = 0, len1 = ref.length; k < len1; k++) { - post2 = ref[k]; - ref1 = $$('a.linkify', post2.nodes.comment); - for (q = 0, len2 = ref1.length; q < len2; q++) { - link2 = ref1[q]; - if (!(link2.href === link.href)) { - continue; - } - if ((base1 = link2.dataset).original == null) { - base1.original = link2.textContent; - } - link2.textContent = text; - } - } - } - }, - ordered_types: [ - { - key: 'audio', - regExp: /\.(?:mp3|ogg|wav)(?:\?|$)/i, - style: '', - el: function(a) { - return $.el('audio', { - controls: true, - preload: 'auto', - src: a.dataset.href - }); - } - }, { - key: 'Dailymotion', - regExp: /^\w+:\/\/(?:(?:www\.)?dailymotion\.com\/(?:embed\/)?video|dai\.ly)\/([A-Za-z0-9]+)[^?]*(.*)/, - el: function(a) { - var el, options, start; - options = (start = a.dataset.options.match(/[?&](start=\d+)/)) ? "?" + start[1] : ''; - el = $.el('iframe', { - src: "//www.dailymotion.com/embed/video/" + a.dataset.uid + options - }); - el.setAttribute("allowfullscreen", "true"); - return el; - }, - title: { - api: function(uid) { - return "https://api.dailymotion.com/video/" + uid; - }, - text: function(_) { - return _.title; - } - } - }, { - key: 'Gist', - regExp: /^\w+:\/\/gist\.github\.com\/(?:[\w\-]+\/)?(\w+)/, - el: function(a) { - var content, el; - el = $.el('iframe'); - el.setAttribute('sandbox', 'allow-scripts'); - content = { - innerHTML: "" + E(a.dataset.uid) + "" - }; - el.src = E.url(content); - return el; - }, - title: { - api: function(uid) { - return "https://api.github.com/gists/" + uid; - }, - text: function(arg) { - var file, files; - files = arg.files; - for (file in files) { - if (files.hasOwnProperty(file)) { - return file; - } - } - } - } - }, { - key: 'image', - regExp: /\.(?:gif|png|jpg|jpeg|bmp)(?:\?|$)/i, - style: '', - el: function(a) { - return $.el('div', { - innerHTML: "" - }); - } - }, { - key: 'InstallGentoo', - regExp: /^\w+:\/\/paste\.installgentoo\.com\/view\/(?:raw\/|download\/|embed\/)?(\w+)/, - el: function(a) { - return $.el('iframe', { - src: "https://paste.installgentoo.com/view/embed/" + a.dataset.uid - }); - } - }, { - key: 'Twitter', - regExp: /^\w+:\/\/(?:www\.)?twitter\.com\/(\w+\/status\/\d+)/, - el: function(a) { - return $.el('iframe', { - src: "https://twitframe.com/show?url=https://twitter.com/" + a.dataset.uid - }); - } - }, { - key: 'LiveLeak', - regExp: /^\w+:\/\/(?:\w+\.)?liveleak\.com\/.*\?.*i=(\w+)/, - httpOnly: true, - el: function(a) { - var el; - el = $.el('iframe', { - src: "http://www.liveleak.com/ll_embed?i=" + a.dataset.uid - }); - el.setAttribute("allowfullscreen", "true"); - return el; - } - }, { - key: 'Pastebin', - regExp: /^\w+:\/\/(?:\w+\.)?pastebin\.com\/(?!u\/)(?:[\w\.]+\?i\=)?(\w+)/, - httpOnly: true, - el: function(a) { - var div; - return div = $.el('iframe', { - src: "http://pastebin.com/embed_iframe.php?i=" + a.dataset.uid - }); - } - }, { - key: 'Gfycat', - regExp: /^\w+:\/\/(?:www\.)?gfycat\.com\/(?:iframe\/)?(\w+)/, - el: function(a) { - var div; - return div = $.el('iframe', { - src: "//gfycat.com/iframe/" + a.dataset.uid - }); - } - }, { - key: 'SoundCloud', - regExp: /^\w+:\/\/(?:www\.)?(?:soundcloud\.com\/|snd\.sc\/)([\w\-\/]+)/, - style: 'border: 0; width: 500px; height: 400px;', - el: function(a) { - return $.el('iframe', { - src: "https://w.soundcloud.com/player/?visual=true&show_comments=false&url=https%3A%2F%2Fsoundcloud.com%2F" + (encodeURIComponent(a.dataset.uid)) - }); - }, - title: { - api: function(uid) { - return "//soundcloud.com/oembed?format=json&url=https%3A%2F%2Fsoundcloud.com%2F" + (encodeURIComponent(uid)); - }, - text: function(_) { - return _.title; - } - } - }, { - key: 'StrawPoll', - regExp: /^\w+:\/\/(?:www\.)?strawpoll\.me\/(?:embed_\d+\/)?(\d+(?:\/r)?)/, - style: 'border: 0; width: 600px; height: 406px;', - el: function(a) { - return $.el('iframe', { - src: "//strawpoll.me/embed_1/" + a.dataset.uid - }); - } - }, { - key: 'TwitchTV', - regExp: /^\w+:\/\/(?:www\.)?twitch\.tv\/(\w[^#\&\?]*)/, - style: "border: none; width: 620px; height: 378px;", - el: function(a) { - var _, channel, flashvars, id, idprefix, k, len1, obj, part, ref, result, seconds, start, type; - if (result = /(\w+)\/([bcv])\/(\d+)/i.exec(a.dataset.uid)) { - _ = result[0], channel = result[1], type = result[2], id = result[3]; - idprefix = type === 'b' ? 'a' : type; - flashvars = "channel=" + channel + "&start_volume=25&auto_play=false&videoId=" + idprefix + id; - if (start = a.dataset.href.match(/\bt=(\w+)/)) { - seconds = 0; - ref = start[1].match(/\d+[hms]/g); - for (k = 0, len1 = ref.length; k < len1; k++) { - part = ref[k]; - seconds += +part.slice(0, -1) * { - 'h': 3600, - 'm': 60, - 's': 1 - }[part.slice(-1)]; - } - flashvars += "&initial_time=" + seconds; - } - } else { - channel = (/(\w+)/.exec(a.dataset.uid))[0]; - flashvars = "channel=" + channel + "&start_volume=25&auto_play=false"; - } - obj = $.el('object', { - data: '//www-cdn.jtvnw.net/swflibs/TwitchPlayer.swf' - }); - $.extend(obj, { - innerHTML: "" - }); - obj.children[1].value = flashvars; - return obj; - } - }, { - key: 'Vocaroo', - regExp: /^\w+:\/\/(?:www\.)?vocaroo\.com\/i\/(\w+)/, - style: '', - el: function(a) { - var el, type; - el = $.el('audio', { - controls: true, - preload: 'auto' - }); - type = el.canPlayType('audio/webm') ? 'webm' : 'mp3'; - el.src = "http://vocaroo.com/media_command.php?media=" + a.dataset.uid + "&command=download_" + type; - return el; - } - }, { - key: 'Vimeo', - regExp: /^\w+:\/\/(?:www\.)?vimeo\.com\/(\d+)/, - el: function(a) { - return $.el('iframe', { - src: "//player.vimeo.com/video/" + a.dataset.uid + "?wmode=opaque" - }); - }, - title: { - api: function(uid) { - return "https://vimeo.com/api/oembed.json?url=https://vimeo.com/" + uid; - }, - text: function(_) { - return _.title; - } - } - }, { - key: 'Vine', - regExp: /^\w+:\/\/(?:www\.)?vine\.co\/v\/(\w+)/, - style: 'border: none; width: 500px; height: 500px;', - el: function(a) { - return $.el('iframe', { - src: "https://vine.co/v/" + a.dataset.uid + "/card" - }); - } - }, { - key: 'YouTube', - regExp: /^\w+:\/\/(?:youtu.be\/|[\w.]*youtube[\w.]*\/.*(?:v=|\bembed\/|\bv\/))([\w\-]{11})(.*)/, - el: function(a) { - var el, start; - start = a.dataset.options.match(/\b(?:star)?t\=(\w+)/); - if (start) { - start = start[1]; - } - if (start && !/^\d+$/.test(start)) { - start += ' 0h0m0s'; - start = 3600 * start.match(/(\d+)h/)[1] + 60 * start.match(/(\d+)m/)[1] + 1 * start.match(/(\d+)s/)[1]; - } - el = $.el('iframe', { - src: "//www.youtube.com/embed/" + a.dataset.uid + "?wmode=opaque" + (start ? '&start=' + start : '') - }); - el.setAttribute("allowfullscreen", "true"); - return el; - }, - title: { - batchSize: 50, - api: function(uids) { - var ids, key; - ids = encodeURIComponent(uids.join(',')); - key = 'AIzaSyB5_zaen_-46Uhz1xGR-lz1YoUMHqCD6CE'; - return "https://www.googleapis.com/youtube/v3/videos?part=snippet&id=" + ids + "&fields=items%28id%2Csnippet%28title%29%29&key=" + key; - }, - text: function(data, uid) { - var item, k, len1, ref; - ref = data.items; - for (k = 0, len1 = ref.length; k < len1; k++) { - item = ref[k]; - if (item.id === uid) { - return item.snippet.title; - } - } - return 'Not Found'; - } - } - }, { - key: 'Loopvid', - regExp: /^\w+:\/\/(?:www\.)?loopvid.appspot.com\/#?((?:pf|kd|lv|gd|gh|db|dx|nn|cp|wu|ig|ky|mf|pc|gc)\/[\w\-\/]+(,[\w\-\/]+)*|fc\/\w+\/\d+)/, - style: 'max-width: 80vw; max-height: 80vh;', - el: function(a) { - var _, base, el, host, k, len1, len2, name, names, q, ref, ref1, type, types, url; - el = $.el('video', { - controls: true, - preload: 'auto', - loop: true - }); - ref = a.dataset.uid.match(/(\w+)\/(.*)/), _ = ref[0], host = ref[1], names = ref[2]; - types = (function() { - switch (host) { - case 'gd': - case 'wu': - case 'fc': - return ['']; - case 'gc': - return ['giant', 'fat', 'zippy']; - default: - return ['.webm', '.mp4']; - } - })(); - ref1 = names.split(','); - for (k = 0, len1 = ref1.length; k < len1; k++) { - name = ref1[k]; - for (q = 0, len2 = types.length; q < len2; q++) { - type = types[q]; - base = "" + name + type; - url = (function() { - switch (host) { - case 'pf': - return "https://web.archive.org/web/2/http://a.pomf.se/" + base; - case 'kd': - return "http://kastden.org/loopvid/" + base; - case 'lv': - return "http://kastden.org/_loopvid_media/lv/" + base; - case 'gd': - return "https://docs.google.com/uc?export=download&id=" + base; - case 'gh': - return "https://googledrive.com/host/" + base; - case 'db': - return "https://dl.dropboxusercontent.com/u/" + base; - case 'dx': - return "https://dl.dropboxusercontent.com/" + base; - case 'nn': - return "http://naenara.eu/loopvids/" + base; - case 'cp': - return "https://copy.com/" + base; - case 'wu': - return "http://webmup.com/" + base + "/vid.webm"; - case 'ig': - return "https://i.imgur.com/" + base; - case 'ky': - return "https://kiyo.me/" + base; - case 'mf': - return "https://d.maxfile.ro/" + base; - case 'pc': - return "http://a.pomf.cat/" + base; - case 'fc': - return "//i.4cdn.org/" + base + ".webm"; - case 'gc': - return "https://" + type + ".gfycat.com/" + name + ".webm"; - } - })(); - $.add(el, $.el('source', { - src: url - })); - } - } - return el; - } - }, { - key: 'Clyp', - regExp: /^\w+:\/\/(?:www\.)?clyp\.it\/(\w+)/, - style: '', - el: function(a) { - var el, type; - el = $.el('audio', { - controls: true, - preload: 'auto' - }); - type = el.canPlayType('audio/ogg') ? 'ogg' : 'mp3'; - el.src = "https://clyp.it/" + a.dataset.uid + "." + type; - return el; - } - }, { - key: 'Loopvid-dummy', - regExp: /^\w+:\/\/(?:www\.)?loopvid.appspot.com\//, - dummy: true - }, { - key: 'MediaFire-dummy', - regExp: /^\w+:\/\/(?:www\.)?mediafire.com\//, - dummy: true - }, { - key: 'video', - regExp: /\.(?:ogv|webm|mp4)(?:\?|$)/i, - style: 'max-width: 80vw; max-height: 80vh;', - el: function(a) { - return $.el('video', { - controls: true, - preload: 'auto', - src: a.dataset.href, - loop: /^https?:\/\/i\.4cdn\.org\//.test(a.dataset.href) - }); - } - } - ] - }; - - Linkify = { - init: function() { - var ref; - if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Linkify']) { - return; - } - if (Conf['Comment Expansion']) { - ExpandComment.callbacks.push(this.node); - } - Post.callbacks.push({ - name: 'Linkify', - cb: this.node - }); - CatalogThread.callbacks.push({ - name: 'Linkify', - cb: this.catalogNode - }); - return Embedding.init(); - }, - node: function() { - var k, len1, len2, link, links, q, ref; - if (this.isClone) { - return Embedding.events(this); - } - if (!Linkify.regString.test(this.info.comment)) { - return; - } - ref = $$('a[href^="http://i.4cdn.org/"], a[href^="https://i.4cdn.org/"]', this.nodes.comment); - for (k = 0, len1 = ref.length; k < len1; k++) { - link = ref[k]; - $.addClass(link, 'linkify'); - Embedding.process(link, this); - } - links = Linkify.process(this.nodes.comment); - for (q = 0, len2 = links.length; q < len2; q++) { - link = links[q]; - Embedding.process(link, this); - } - }, - catalogNode: function() { - if (!Linkify.regString.test(this.thread.OP.info.comment)) { - return; - } - return Linkify.process(this.nodes.comment); - }, - process: function(node) { - var data, end, endNode, i, index, length, links, part1, part2, ref, ref1, result, saved, snapshot, space, test, word; - test = /[^\s"]+/g; - space = /[\s"]/; - snapshot = $.X('.//br|.//text()', node); - i = 0; - links = []; - while (node = snapshot.snapshotItem(i++)) { - data = node.data; - if (!data || node.parentElement.nodeName === "A") { - continue; - } - while (result = test.exec(data)) { - index = result.index; - endNode = node; - word = result[0]; - if ((length = index + word.length) === data.length) { - test.lastIndex = 0; - while ((saved = snapshot.snapshotItem(i++))) { - if (saved.nodeName === 'BR') { - if ((part1 = word.match(/(https?:\/\/)?([a-z\d-]+\.)*[a-z\d-]+$/i)) && (part2 = (ref = snapshot.snapshotItem(i)) != null ? (ref1 = ref.data) != null ? ref1.match(/^(\.[a-z\d-]+)*\//i) : void 0 : void 0) && (part1[0] + part2[0]).search(Linkify.regString) === 0) { - continue; - } else { - break; - } - } - endNode = saved; - data = saved.data; - if (end = space.exec(data)) { - word += data.slice(0, end.index); - test.lastIndex = length = end.index; - i--; - break; - } else { - length = data.length; - word += data; - } - } - } - if (Linkify.regString.test(word)) { - links.push(Linkify.makeRange(node, endNode, index, length)); - } - if (!(test.lastIndex && node === endNode)) { - break; - } - } - } - i = links.length; - while (i--) { - links[i] = Linkify.makeLink(links[i]); - } - return links; - }, - regString: /((https?|mailto|git|magnet|ftp|irc):([a-z\d%\/?])|([-a-z\d]+[.])+(aero|asia|biz|cat|com|coop|dance|info|int|jobs|mobi|moe|museum|name|net|org|post|pro|tel|travel|xxx|xyz|edu|gov|mil|[a-z]{2})([:\/]|(?![^\s"]))|[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}|[-\w\d.@]+@[a-z\d.-]+\.[a-z\d])/i, - makeRange: function(startNode, endNode, startOffset, endOffset) { - var range; - range = document.createRange(); - range.setStart(startNode, startOffset); - range.setEnd(endNode, endOffset); - return range; - }, - makeLink: function(range) { - var a, encodedDomain, i, t, text; - text = range.toString(); - i = text.search(Linkify.regString); - if (i > 0) { - text = text.slice(i); - while (range.startOffset + i >= range.startContainer.data.length) { - i--; - } - if (i) { - range.setStart(range.startContainer, range.startOffset + i); - } - } - i = 0; - while (/[)\]}>.,]/.test(t = text.charAt(text.length - (1 + i)))) { - if (!(/[.,]/.test(t) || (text.match(/[()\[\]{}<>]/g)).length % 2)) { - break; - } - i++; - } - if (i) { - text = text.slice(0, -i); - while (range.endOffset - i < 0) { - i--; - } - if (i) { - range.setEnd(range.endContainer, range.endOffset - i); - } - } - if (!/((mailto|magnet):|.+:\/\/)/.test(text)) { - text = (/@/.test(text) ? 'mailto:' : 'http://') + text; - } - if (encodedDomain = text.match(/^(https?:\/\/[^\/]*%[0-9a-f]{2})(.*)$/i)) { - text = encodedDomain[1].replace(/%([0-9a-f]{2})/ig, function(x, y) { - if (y === '25') { - return x; - } else { - return String.fromCharCode(parseInt(y, 16)); - } - }) + encodedDomain[2]; - } - a = $.el('a', { - className: 'linkify', - rel: 'nofollow noreferrer', - target: '_blank', - href: text - }); - $.add(a, range.extractContents()); - range.insertNode(a); - return a; - } - }; - - ArchiveLink = { - init: function() { - var div, entry, k, len1, ref, ref1, type; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Archive Link'])) { - return; - } - div = $.el('div', { - textContent: 'Archive' - }); - entry = { - el: div, - order: 90, - open: function(arg) { - var ID, board, thread; - ID = arg.ID, thread = arg.thread, board = arg.board; - return !!Redirect.to('thread', { - postID: ID, - threadID: thread.ID, - boardID: board.ID - }); - }, - subEntries: [] - }; - ref1 = [['Post', 'post'], ['Name', 'name'], ['Tripcode', 'tripcode'], ['Capcode', 'capcode'], ['Subject', 'subject'], ['Filename', 'filename'], ['Image MD5', 'MD5']]; - for (k = 0, len1 = ref1.length; k < len1; k++) { - type = ref1[k]; - entry.subEntries.push(this.createSubEntry(type[0], type[1])); - } - return Menu.menu.addEntry(entry); - }, - createSubEntry: function(text, type) { - var el, open; - el = $.el('a', { - textContent: text, - target: '_blank' - }); - open = type === 'post' ? function(arg) { - var ID, board, thread; - ID = arg.ID, thread = arg.thread, board = arg.board; - el.href = Redirect.to('thread', { - postID: ID, - threadID: thread.ID, - boardID: board.ID - }); - return true; - } : function(post) { - var value; - value = Filter[type](post); - if (!value) { - return false; - } - el.href = Redirect.to('search', { - boardID: post.board.ID, - type: type, - value: value, - isSearch: true - }); - return true; - }; - return { - el: el, - open: open - }; - } - }; - - DeleteLink = { - auto: [{}, {}], - init: function() { - var div, fileEl, fileEntry, postEl, postEntry, ref; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Delete Link'])) { - return; - } - div = $.el('div', { - className: 'delete-link', - textContent: 'Delete' - }); - postEl = $.el('a', { - className: 'delete-post', - href: 'javascript:;' - }); - fileEl = $.el('a', { - className: 'delete-file', - href: 'javascript:;' - }); - this.nodes = { - menu: div.firstChild, - links: [postEl, fileEl] - }; - postEntry = { - el: postEl, - open: function() { - postEl.textContent = DeleteLink.linkText(false); - $.on(postEl, 'click', DeleteLink.toggle); - return true; - } - }; - fileEntry = { - el: fileEl, - open: function(arg) { - var file; - file = arg.file; - if (!file || file.isDead) { - return false; - } - fileEl.textContent = DeleteLink.linkText(true); - $.on(fileEl, 'click', DeleteLink.toggle); - return true; - } - }; - return Menu.menu.addEntry({ - el: div, - order: 40, - open: function(post) { - if (post.isDead) { - return false; - } - DeleteLink.post = post; - DeleteLink.nodes.menu.textContent = DeleteLink.menuText(); - DeleteLink.cooldown.start(post); - return true; - }, - subEntries: [postEntry, fileEntry] - }); - }, - menuText: function() { - var seconds; - if (seconds = DeleteLink.cooldown.seconds[DeleteLink.post.fullID]) { - return "Delete (" + seconds + ")"; - } else { - return 'Delete'; - } - }, - linkText: function(fileOnly) { - var text; - text = fileOnly ? 'File' : 'Post'; - if (DeleteLink.auto[+fileOnly][DeleteLink.post.fullID]) { - text = "Deleting " + (text.toLowerCase()) + "..."; - } - return text; - }, - toggle: function() { - var auto, fileOnly, post; - post = DeleteLink.post; - fileOnly = $.hasClass(this, 'delete-file'); - auto = DeleteLink.auto[+fileOnly]; - if (auto[post.fullID]) { - delete auto[post.fullID]; - } else { - auto[post.fullID] = true; - } - this.textContent = DeleteLink.linkText(fileOnly); - if (!DeleteLink.cooldown.seconds[post.fullID]) { - return DeleteLink["delete"](post, fileOnly); - } - }, - "delete": function(post, fileOnly) { - var form, link; - link = DeleteLink.nodes.links[+fileOnly]; - delete DeleteLink.auto[+fileOnly][post.fullID]; - if (post.fullID === DeleteLink.post.fullID) { - $.off(link, 'click', DeleteLink.toggle); - } - form = { - mode: 'usrdel', - onlyimgdel: fileOnly, - pwd: QR.persona.getPassword() - }; - form[post.ID] = 'delete'; - return $.ajax($.id('delform').action.replace("/" + g.BOARD + "/", "/" + post.board + "/"), { - responseType: 'document', - withCredentials: true, - onload: function() { - return DeleteLink.load(link, post, fileOnly, this.response); - }, - onerror: function() { - return DeleteLink.error(link, post); - } - }, { - form: $.formData(form) - }); - }, - load: function(link, post, fileOnly, resDoc) { - var el, msg; - link.textContent = DeleteLink.linkText(fileOnly); - if (resDoc.title === '4chan - Banned') { - el = $.el('span', { - innerHTML: "You can't delete posts because you are banned." - }); - return new Notice('warning', el, 20); - } else if (msg = resDoc.getElementById('errmsg')) { - new Notice('warning', msg.textContent, 20); - if (post.fullID === DeleteLink.post.fullID) { - $.on(link, 'click', DeleteLink.toggle); - } - if (QR.cooldown.data && Conf['Cooldown'] && /\bwait\b/i.test(msg.textContent)) { - DeleteLink.cooldown.start(post, 5); - DeleteLink.auto[+fileOnly][post.fullID] = true; - return DeleteLink.nodes.links[+fileOnly].textContent = DeleteLink.linkText(fileOnly); - } - } else { - if (!fileOnly) { - QR.cooldown["delete"](post); - } - if (resDoc.title === 'Updating index...') { - (post.origin || post).kill(fileOnly); - } - if (post.fullID === DeleteLink.post.fullID) { - return link.textContent = 'Deleted'; - } - } - }, - error: function(link, post) { - new Notice('warning', 'Connection error, please retry.', 20); - if (post.fullID === DeleteLink.post.fullID) { - return $.on(link, 'click', DeleteLink.toggle); - } - }, - cooldown: { - seconds: {}, - start: function(post, seconds) { - if (DeleteLink.cooldown.seconds[post.fullID] != null) { - return; - } - if (seconds == null) { - seconds = QR.cooldown.secondsDeletion(post); - } - if (seconds > 0) { - DeleteLink.cooldown.seconds[post.fullID] = seconds; - return DeleteLink.cooldown.count(post); - } - }, - count: function(post) { - var fileOnly, k, len1, ref; - if (post.fullID === DeleteLink.post.fullID) { - DeleteLink.nodes.menu.textContent = DeleteLink.menuText(); - } - if (DeleteLink.cooldown.seconds[post.fullID] > 0 && Conf['Cooldown']) { - DeleteLink.cooldown.seconds[post.fullID]--; - setTimeout(DeleteLink.cooldown.count, 1000, post); - } else { - delete DeleteLink.cooldown.seconds[post.fullID]; - ref = [false, true]; - for (k = 0, len1 = ref.length; k < len1; k++) { - fileOnly = ref[k]; - if (DeleteLink.auto[+fileOnly][post.fullID]) { - DeleteLink["delete"](post, fileOnly); - } - } - } - } - } - }; - - DownloadLink = { - init: function() { - var a, ref; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Download Link'])) { - return; - } - a = $.el('a', { - className: 'download-link', - textContent: 'Download file' - }); - $.on(a, 'click', ImageCommon.download); - return Menu.menu.addEntry({ - el: a, - order: 100, - open: function(arg) { - var file; - file = arg.file; - if (!file) { - return false; - } - a.href = file.url; - a.download = file.name; - return true; - } - }); - } - }; - - Menu = { - init: function() { - var ref; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'])) { - return; - } - this.button = $.el('a', { - className: 'menu-button', - href: 'javascript:;' - }); - $.extend(this.button, { - innerHTML: "" - }); - this.menu = new UI.Menu('post'); - Post.callbacks.push({ - name: 'Menu', - cb: this.node - }); - return CatalogThread.callbacks.push({ - name: 'Menu', - cb: this.catalogNode - }); - }, - node: function() { - if (this.isClone) { - Menu.makeButton(this, $('.menu-button', this.nodes.info)); - return; - } - return $.add(this.nodes.info, Menu.makeButton(this)); - }, - catalogNode: function() { - return $.after(this.nodes.icons, Menu.makeButton(this.thread.OP)); - }, - makeButton: function(post, button) { - button || (button = Menu.button.cloneNode(true)); - $.on(button, 'click', function(e) { - return Menu.menu.toggle(e, this, post); - }); - return button; - } - }; - - ReportLink = { - init: function() { - var a, ref; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Report Link'])) { - return; - } - a = $.el('a', { - className: 'report-link', - href: 'javascript:;' - }); - $.on(a, 'click', ReportLink.report); - return Menu.menu.addEntry({ - el: a, - order: 10, - open: function(post) { - if (!(post.isDead || (post.thread.isDead && !post.thread.isArchived))) { - a.textContent = 'Report'; - ReportLink.url = "//sys.4chan.org/" + post.board + "/imgboard.php?mode=report&no=" + post; - if ((Conf['Use Recaptcha v1 in Reports'] && Main.jsEnabled) || d.cookie.indexOf('pass_enabled=1') >= 0) { - ReportLink.url += '&altc=1'; - ReportLink.dims = 'width=350,height=275'; - } else { - ReportLink.dims = 'width=400,height=550'; - } - } else if (Conf['Archive Report']) { - a.textContent = 'Report to archive'; - ReportLink.url = Redirect.to('report', { - boardID: post.board.ID, - postID: post.ID - }); - ReportLink.dims = 'width=700,height=475'; - } else { - ReportLink.url = ''; - } - return !!ReportLink.url; - } - }); - }, - report: function() { - var dims, id, set, url; - url = ReportLink.url, dims = ReportLink.dims; - id = Date.now(); - set = "toolbar=0,scrollbars=1,location=0,status=1,menubar=0,resizable=1," + dims; - return window.open(url, id, set); - } - }; - - Favicon = { - init: function() { - return $.asap((function() { - return d.head && (Favicon.el = $('link[rel="shortcut icon"]', d.head)); - }), Favicon.initAsap); - }, - initAsap: function() { - var href; - Favicon.el.type = 'image/x-icon'; - href = Favicon.el.href; - Favicon.SFW = /ws\.ico$/.test(href); - Favicon["default"] = href; - return Favicon["switch"](); - }, - "switch": function() { - var f, i, items, t; - items = { - ferongr: ['iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEX///9zBQC/AADpDAP/gID/q6voCwJJTwpOAAAAAXRSTlMAQObYZgAAAGJJREFUeF5Fi7ENg0AQBCfa/AFdDh2gdwPIogMK2E2+/xLslwOvdqRJhv+GQQPUCtJM7svankLrq/I+TY5e6Ueh1jyBMX7AFJi9vwfyVO4CbbO6jNYpp9GyVPbdkFhVgAQ2H0NOE5jk9DT8AAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAxUlEQVR42q1TOwrCQBB9s0FRtJI0WoqFtSLYegoP4gVSeJsUHsHSI3iFeIqRXXgwrhlXwYHHhLwPTB7B36abBCV+0pA4DUBQUNZYQptGtW3jtoKyxgoe0yrBCoyZfL/5ioQ3URZOXW9I341l3oo+NXEZiW4CEuIzvPECopED4OaZ3RNmeAm4u+a8Jr5f17VyVoL8fr8qcltzwlyyj2iqcgPOQ9ExkHAITgD75bYBe0A5S4H/P9htuWMF3QXoQpwaKeT+lnsC6JE5I6aq6fEAAAAASUVORK5CYII=', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEX///8AcH4AtswA2PJ55fKi6fIA1/FtpPADAAAAAXRSTlMAQObYZgAAAGJJREFUeF5Fi7ENg0AQBCfa/AFdDh2gdwPIogMK2E2+/xLslwOvdqRJhv+GQQPUCtJM7svankLrq/I+TY5e6Ueh1jyBMX7AFJi9vwfyVO4CbbO6jNYpp9GyVPbdkFhVgAQ2H0NOE5jk9DT8AAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAxElEQVQ4y2NgoBq4/vE/HJOsBiRQUIfA2AzBqQYqUfn00/9FLz+BaQxDCKqBmX7jExijKEDSDJPHrnnbGQhGV4RmOFwdVkNwhQMheYwQxhaIi7b9Z9A3gWAQm2BUoQOgRhgA8o7j1ozLC4LCyAZcx6kZI5qg4kLKqggDFFWxJySsUQVzlb4pwgAJaTRvokcVNgOqOv8zcHBCsL07DgNg8YsczzA5MxtUL+DMD8g0slxI/H8GQ/P/DJKyeKIRpglXZsIiBwBhP5O+VbI/JgAAAABJRU5ErkJggg==', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEX///8oeQBJ3ABV/wHM/7Lu/+ZU/gAqUP3dAAAAAXRSTlMAQObYZgAAAGJJREFUeF5Fi7ENg0AQBCfa/AFdDh2gdwPIogMK2E2+/xLslwOvdqRJhv+GQQPUCtJM7svankLrq/I+TY5e6Ueh1jyBMX7AFJi9vwfyVO4CbbO6jNYpp9GyVPbdkFhVgAQ2H0NOE5jk9DT8AAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAx0lEQVQ4y2NgoBYI+cfwH4ZJVgMS0KhEYGyG4FQDkzjzf9P/d/+fgWl0QwiqgSkI/c8IxsgKkDXD5LFq9rwDweiK0A2HqcNqCK5wICSPEcLYAtH+AMN/IXMIBrEJRie6OEgjDAC5x3FqxuUFNiEUA67j1IweTTBxBQ1puAG86jgSEraogskJWSBcwCGF5k30qMJmgMFEhv/MXBAs5oLDAFj8IsczTE7UEeECbhU8+QGZRpaTi2b4L2zF8J9TGk80wjThykzY5AAW/2O1C2mIbgAAAABJRU5ErkJggg=='], - 'xat-': ['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'], - Mayhem: ['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'], - '4chanJS': ['iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAD1BMVEUBAAAAAAD/AABnZ2f///8nFk05AAAAAXRSTlMAQObYZgAAAEFJREFUeNqNjgEKACAMAjvX/98cAkkxgmSgO8Bt/Ai4ApJ6KKhzF3OiEMDASrGB/QWgPEHsUpN+Ng9xAETMYhDrWmeHAMcmvycWAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAD1BMVEUBAAAAAAD/AAD///9nZ2f77Y6hAAAAAXRSTlMAQObYZgAAAEBJREFUeF6NjQEKACAMAnfW/98cAxFiBIngOsTqR8B1IGkeG9p5i7XabgAGZNigXgA8aoCUxvzWAIcBItGiSEwdccYA3BuRAWkAAAAASUVORK5CYII=', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAD1BMVEUBAAAAAAAul8NnZ2f////82iC9AAAAAXRSTlMAQObYZgAAAEFJREFUeNqNjgEKACAMAjvX/98cAkkxgmSgO8Bt/Ai4ApJ6KKhzF3OiEMDASrGB/QWgPEHsUpN+Ng9xAETMYhDrWmeHAMcmvycWAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAD1BMVEUBAAAAAAAul8P///9nZ2cgIeMlAAAAAXRSTlMAQObYZgAAAEBJREFUeF6NjQEKACAMAnfW/98cAxFiBIngOsTqR8B1IGkeG9p5i7XabgAGZNigXgA8aoCUxvzWAIcBItGiSEwdccYA3BuRAWkAAAAASUVORK5CYII=', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAElBMVEUBAAAAAABmzDNlyjJnZ2f///+6o7dfAAAAAXRSTlMAQObYZgAAAERJREFUeF6NjkEKADEIA51o///lJZfQxUsHITogWi8AvwZJuxmYa25xDooBLEwOWFTYAsYVhdorLZt9Ng9xCUTCUCQ2H3F4ANrZ2WNiAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAElBMVEUBAAAAAABmzDP///9lyjJnZ2cIHys9AAAAAXRSTlMAQObYZgAAAENJREFUeF6NjUEKwEAMAjNm9/9fLkEslFwqgjoEUn8EfAqSdrkwzj6ieyyTkQEVGWRvANfO1iEX620AjgBEwqR4Y+sBeGAA6d+vQ4IAAAAASUVORK5CYII='], - Original: ['iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAADFBMVEX/////AAD///8AAABBZmS3AAAAAXRSTlMAQObYZgAAAExJREFUeF4tyrENgDAMAMFXKuQswQLBG3mOlBnFS1gwDfIYLpEivvjq2MlqjmYvYg5jWEzCwtDSQlwcXKCVLrpFbvLvvSf9uZJ2HusDtJAY7Tkn1oYAAAAASUVORK5CYII=', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAhElEQVR42q1RwQnAMAjMu5M4guAKXa4j5dUROo5tipSDcrFChUONd0di2m/hEGVOHDyIPufgwAFASDkpoSzmBrkJ2UMyR9LsJ3rvrqo3Rt1YMIMhhNnOxLMnoMFBxHyJAr2IOBFzA8U+6pLBdmEJTA0aMVjpDd6Loks0s5HZNwYx8tfZCZ0kll7ORffZAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAADFBMVEX///8ul8P///8AAACaqgkzAAAAAXRSTlMAQObYZgAAAExJREFUeF4tyrENgDAMAMFXKuQswQLBG3mOlBnFS1gwDfIYLpEivvjq2MlqjmYvYg5jWEzCwtDSQlwcXKCVLrpFbvLvvSf9uZJ2HusDtJAY7Tkn1oYAAAAASUVORK5CYII=', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAALVBMVEUAAAAAAAAAAAAAAAABBQcHFx4KISoNLToaVW4oKCgul8M4ODg7OzvBwcH///8uS/CdAAAAA3RSTlMAx9dmesIgAAAAV0lEQVR42m2NWw6AIBAD1eILZO5/XI0UAgm7H9tOsu0yGWAQSOoFijHOxOANGqm/LczpOaXs4gISrPZ+gc2+hO5w2xdwgOjBFUIF+sEJrhUl9JFr+badFwR+BfqlmGUJAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAADFBMVEX///9mzDP///8AAACT0n1lAAAAAXRSTlMAQObYZgAAAExJREFUeF4tyrENgDAMAMFXKuQswQLBG3mOlBnFS1gwDfIYLpEivvjq2MlqjmYvYg5jWEzCwtDSQlwcXKCVLrpFbvLvvSf9uZJ2HusDtJAY7Tkn1oYAAAAASUVORK5CYII=', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAALVBMVEUAAAAAAAAAAAAAAAAECAIQIAgWLAsePA8oKCg4ODg6dB07OztmzDPBwcH///+rsf3XAAAAA3RSTlMAx9dmesIgAAAAV0lEQVR42m2NWw6AIBAD1eIDhbn/cTVSCCTsfmw7ybbLZIBBIKkXKKU0E4M3aKT+tjCn5xiziwuIsNr7BTb7ErrDZV/AAaIHdwgV6AcnuFaU0Eeu5dt2XiUyBjCQ2bIrAAAAAElFTkSuQmCC'], - 'Metro': ['iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAC/AABrZQDiAAAAAXRSTlMAQObYZgAAABJJREFUCB1jZGBgrMNAQEEc4gCSfAX5bRw/NQAAAABJRU5ErkJggg==', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAAAAAAAAAAHAAAdAAApAAAsAAA4AABsAACQAAC/AAD///9SVhtjAAAAA3RSTlMAPse+s4iwAAAAM0lEQVQIW2NggAGuVasWgDBpDDAQUoSaob0Jao73lgVojOitUEazBZRRvR3KmJa5AO4KAGBtLuMAuhIIAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAAA1/GhpCidAAAAAXRSTlMAQObYZgAAABJJREFUCB1jZGBgrMNAQEEc4gCSfAX5bRw/NQAAAABJRU5ErkJggg==', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAAAAAAAAAAACAkAISUALzQAMTcAQEcAeokAorYA1/H///8BrzTFAAAAA3RSTlMAPse+s4iwAAAAM0lEQVQIW2NggAGuVasWgDBpDDAQUoSaob0Jao73lgVojOitUEazBZRRvR3KmJa5AO4KAGBtLuMAuhIIAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAABV/wErM5hwAAAAAXRSTlMAQObYZgAAABJJREFUCB1jZGBgrMNAQEEc4gCSfAX5bRw/NQAAAABJRU5ErkJggg==', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAAAAAAAAAADCgANKAASOAATOwAZTAAwkQBAwQBV/wH////+Fmy4AAAAA3RSTlMAPse+s4iwAAAAM0lEQVQIW2NggAGuVasWgDBpDDAQUoSaob0Jao73lgVojOitUEazBZRRvR3KmJa5AO4KAGBtLuMAuhIIAAAAAElFTkSuQmCC'] - }[Conf['favicon']]; - f = Favicon; - t = 'data:image/png;base64,'; - i = 0; - while (items[i]) { - items[i] = t + items[i++]; - } - f.unreadDead = items[0], f.unreadDeadY = items[1], f.unreadSFW = items[2], f.unreadSFWY = items[3], f.unreadNSFW = items[4], f.unreadNSFWY = items[5]; - return f.update(); - }, - update: function() { - if (this.SFW) { - this.unread = this.unreadSFW; - return this.unreadY = this.unreadSFWY; - } else { - this.unread = this.unreadNSFW; - return this.unreadY = this.unreadNSFWY; - } - }, - dead: 'data:image/gif;base64,R0lGODlhEAAQAKECAAAAAP8AAP///////yH5BAEKAAIALAAAAAAQABAAAAIvlI+pq+D9DAgUoFkPDlbs7lFZKIJOJJ3MyraoB14jFpOcVMpzrnF3OKlZYsMWowAAOw==', - logo: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACAAgMAAAC+UIlYAAAACVBMVEUAAGcAAABmzDNZt9VtAAAAAXRSTlMAQObYZgAAAGlJREFUWMPtlkEKADEIA/tJP9lXLttQto2yHxgDHozTi0ToGK2WKZZ+HAQQMZc+xBwI4EZ+wAC2IfPuSIDOZJrSZQEAX9eVJhhwIuUYAnQe8rhAEMAZlTI2MID9f5Clyh0JeE1V1ZEAvB4qDfwuJTSGRAAAAABJRU5ErkJggg==' - }; - - MarkNewIPs = { - init: function() { - if (g.VIEW !== 'thread' || !Conf['Mark New IPs']) { - return; - } - return Thread.callbacks.push({ - name: 'Mark New IPs', - cb: this.node - }); - }, - node: function() { - MarkNewIPs.ipCount = this.ipCount; - MarkNewIPs.postCount = this.posts.keys.length; - return $.on(d, 'ThreadUpdate', MarkNewIPs.onUpdate); - }, - onUpdate: function(e) { - var deletedPosts, fullID, i, ipCount, k, len1, len2, newPosts, postCount, q, ref; - ref = e.detail, ipCount = ref.ipCount, postCount = ref.postCount, newPosts = ref.newPosts, deletedPosts = ref.deletedPosts; - if (ipCount == null) { - return; - } - switch (ipCount - MarkNewIPs.ipCount) { - case postCount - MarkNewIPs.postCount + deletedPosts.length: - i = MarkNewIPs.ipCount; - for (k = 0, len1 = newPosts.length; k < len1; k++) { - fullID = newPosts[k]; - MarkNewIPs.markNew(g.posts[fullID], ++i); - } - break; - case -deletedPosts.length: - for (q = 0, len2 = newPosts.length; q < len2; q++) { - fullID = newPosts[q]; - MarkNewIPs.markOld(g.posts[fullID]); - } - } - MarkNewIPs.ipCount = ipCount; - return MarkNewIPs.postCount = postCount; - }, - markNew: function(post, ipCount) { - var counter, suffix; - suffix = (Math.floor(ipCount / 10)) % 10 === 1 ? 'th' : ['st', 'nd', 'rd'][ipCount % 10 - 1] || 'th'; - counter = $.el('span', { - className: 'ip-counter', - textContent: "(" + ipCount + ")" - }); - post.nodes.nameBlock.title = "This is the " + ipCount + suffix + " IP in the thread."; - $.add(post.nodes.nameBlock, [$.tn(' '), counter]); - return $.addClass(post.nodes.root, 'new-ip'); - }, - markOld: function(post) { - post.nodes.nameBlock.title = 'Not the first post from this IP.'; - return $.addClass(post.nodes.root, 'old-ip'); - } - }; - - ReplyPruning = { - init: function() { - var el, label; - if (!(g.VIEW === 'thread' && Conf['Reply Pruning'])) { - return; - } - this.active = !(Conf['Quote Threading'] && Conf['Thread Quotes']); - this.container = $.frag(); - this.summary = $.el('span', { - hidden: true, - className: 'summary' - }); - this.summary.style.cursor = 'pointer'; - $.on(this.summary, 'click', (function(_this) { - return function() { - _this.inputs.enabled.checked = !_this.inputs.enabled.checked; - return $.event('change', null, _this.inputs.enabled); - }; - })(this)); - label = UI.checkbox('Prune Replies', 'Show Last', this.active); - el = $.el('span', { - title: 'Maximum number of replies to show.' - }, { - innerHTML: " " - }); - $.prepend(el, label); - this.inputs = { - enabled: label.firstElementChild, - replies: el.lastElementChild - }; - $.on(this.inputs.enabled, 'change', this.setEnabled); - $.on(this.inputs.replies, 'change', $.cb.value); - Header.menu.addEntry({ - el: el, - order: 190 - }); - return Thread.callbacks.push({ - name: 'Reply Pruning', - cb: this.node - }); - }, - position: 0, - hidden: 0, - hiddenFiles: 0, - total: 0, - totalFiles: 0, - setEnabled: function() { - var other; - other = QuoteThreading.input; - if (this.checked && (other != null ? other.checked : void 0)) { - other.checked = false; - $.event('change', null, other); - } - return ReplyPruning.active = this.checked; - }, - showIfHidden: function(id) { - var ref; - if ((ref = ReplyPruning.container) != null ? ref.getElementById(id) : void 0) { - ReplyPruning.inputs.enabled.checked = false; - return $.event('change', null, ReplyPruning.inputs.enabled); - } - }, - node: function() { - var ref; - ReplyPruning.thread = this; - this.posts.forEach(function(post) { - if (post.isReply) { - ReplyPruning.total++; - if (post.file) { - return ReplyPruning.totalFiles++; - } - } - }); - if (ReplyPruning.active && /^#p\d+$/.test(location.hash) && (0 <= (ref = this.posts.keys.indexOf(location.hash.slice(2))) && ref < 1 + Math.max(ReplyPruning.total - +Conf["Max Replies"], 0))) { - ReplyPruning.active = ReplyPruning.inputs.enabled.checked = false; - } - $.after(this.OP.nodes.root, ReplyPruning.summary); - $.on(ReplyPruning.inputs.enabled, 'change', ReplyPruning.update); - $.on(ReplyPruning.inputs.replies, 'change', ReplyPruning.update); - $.on(d, 'ThreadUpdate', ReplyPruning.updateCount); - $.on(d, 'ThreadUpdate', ReplyPruning.update); - return ReplyPruning.update(); - }, - updateCount: function(e) { - var fullID, k, len1, ref; - if (e.detail[404]) { - return; - } - ref = e.detail.newPosts; - for (k = 0, len1 = ref.length; k < len1; k++) { - fullID = ref[k]; - ReplyPruning.total++; - if (g.posts[fullID].file) { - ReplyPruning.totalFiles++; - } - } - }, - update: function() { - var frag, hidden2, post, posts; - hidden2 = ReplyPruning.active ? Math.max(ReplyPruning.total - +Conf["Max Replies"], 0) : 0; - posts = ReplyPruning.thread.posts; - if (ReplyPruning.hidden < hidden2) { - while (ReplyPruning.hidden < hidden2 && ReplyPruning.position < posts.keys.length) { - post = posts[posts.keys[ReplyPruning.position++]]; - if (post.isReply && !post.isFetchedQuote) { - $.add(ReplyPruning.container, post.nodes.root); - ReplyPruning.hidden++; - if (post.file) { - ReplyPruning.hiddenFiles++; - } - } - } - } else if (ReplyPruning.hidden > hidden2) { - frag = $.frag(); - while (ReplyPruning.hidden > hidden2 && ReplyPruning.position > 0) { - post = posts[posts.keys[--ReplyPruning.position]]; - if (post.isReply && !post.isFetchedQuote) { - $.prepend(frag, post.nodes.root); - ReplyPruning.hidden--; - if (post.file) { - ReplyPruning.hiddenFiles--; - } - } - } - $.after(ReplyPruning.summary, frag); - $.event('PostsInserted'); - } - ReplyPruning.summary.textContent = ReplyPruning.active ? Build.summaryText('+', ReplyPruning.hidden, ReplyPruning.hiddenFiles) : Build.summaryText('-', ReplyPruning.total, ReplyPruning.totalFiles); - return ReplyPruning.summary.hidden = ReplyPruning.total <= +Conf["Max Replies"]; - } - }; - - ThreadExcerpt = { - init: function() { - if (g.BOARD.ID !== 'f' || g.VIEW !== 'thread' || !Conf['Thread Excerpt']) { - return; - } - return Thread.callbacks.push({ - name: 'Thread Excerpt', - cb: this.node - }); - }, - node: function() { - return d.title = Get.threadExcerpt(this); - } - }; - - ThreadStats = { - init: function() { - var sc, statsHTML, statsTitle; - if (g.VIEW !== 'thread' || !Conf['Thread Stats']) { - return; - } - statsHTML = { - innerHTML: "? / ?" + (Conf["IP Count in Stats"] ? " / ?" : "") + (Conf["Page Count in Stats"] ? " / ?" : "") - }; - statsTitle = 'Posts / Files'; - if (Conf['IP Count in Stats']) { - statsTitle += ' / IPs'; - } - if (Conf['Page Count in Stats']) { - statsTitle += (g.BOARD.ID === 'f' ? ' / Purge Position' : ' / Page'); - } - if (Conf['Updater and Stats in Header']) { - this.dialog = sc = $.el('span', { - id: 'thread-stats', - title: statsTitle - }); - $.extend(sc, statsHTML); - $.ready(function() { - return Header.addShortcut(sc); - }); - } else { - this.dialog = sc = UI.dialog('thread-stats', 'bottom: 0px; right: 0px;', { - innerHTML: "
      " + statsHTML.innerHTML + "
      " - }); - $.addClass(doc, 'float'); - $.ready(function() { - return $.add(d.body, sc); - }); - } - this.postCountEl = $('#post-count', sc); - this.fileCountEl = $('#file-count', sc); - this.ipCountEl = $('#ip-count', sc); - this.pageCountEl = $('#page-count', sc); - if (this.pageCountEl) { - $.on(this.pageCountEl, 'click', ThreadStats.fetchPage); - } - return Thread.callbacks.push({ - name: 'Thread Stats', - cb: this.node - }); - }, - node: function() { - var fileCount, postCount; - postCount = 0; - fileCount = 0; - this.posts.forEach(function(post) { - postCount++; - if (post.file) { - fileCount++; - } - if (ThreadStats.pageCountEl) { - return ThreadStats.lastPost = post.info.date; - } - }); - ThreadStats.thread = this; - ThreadStats.fetchPage(); - ThreadStats.update(postCount, fileCount, this.ipCount); - return $.on(d, 'ThreadUpdate', ThreadStats.onUpdate); - }, - onUpdate: function(e) { - var fileCount, ipCount, newPosts, postCount, ref, ref1; - if (e.detail[404]) { - return; - } - ref = e.detail, postCount = ref.postCount, fileCount = ref.fileCount, ipCount = ref.ipCount, newPosts = ref.newPosts; - ThreadStats.update(postCount, fileCount, ipCount); - if (!ThreadStats.pageCountEl) { - return; - } - if (newPosts.length) { - ThreadStats.lastPost = g.posts[newPosts[newPosts.length - 1]].info.date; - } - if (g.BOARD.ID !== 'f' && ((ref1 = ThreadStats.pageCountEl) != null ? ref1.textContent : void 0) !== '1') { - return ThreadStats.fetchPage(); - } - }, - update: function(postCount, fileCount, ipCount) { - var fileCountEl, ipCountEl, postCountEl, thread; - thread = ThreadStats.thread, postCountEl = ThreadStats.postCountEl, fileCountEl = ThreadStats.fileCountEl, ipCountEl = ThreadStats.ipCountEl; - postCountEl.textContent = postCount; - fileCountEl.textContent = fileCount; - if ((ipCount != null) && ipCountEl) { - ipCountEl.textContent = ipCount; - } - (thread.postLimit && !thread.isSticky ? $.addClass : $.rmClass)(postCountEl, 'warning'); - return (thread.fileLimit && !thread.isSticky ? $.addClass : $.rmClass)(fileCountEl, 'warning'); - }, - fetchPage: function() { - if (!ThreadStats.pageCountEl) { - return; - } - clearTimeout(ThreadStats.timeout); - if (ThreadStats.thread.isDead) { - ThreadStats.pageCountEl.textContent = 'Dead'; - $.addClass(ThreadStats.pageCountEl, 'warning'); - return; - } - ThreadStats.timeout = setTimeout(ThreadStats.fetchPage, 2 * $.MINUTE); - return $.ajax("//a.4cdn.org/" + ThreadStats.thread.board + "/threads.json", { - onload: ThreadStats.onThreadsLoad - }, { - whenModified: 'ThreadStats' - }); - }, - onThreadsLoad: function() { - var k, len1, len2, len3, page, purgePos, q, ref, ref1, ref2, thread, u; - if (this.status === 200) { - ref = this.response; - for (k = 0, len1 = ref.length; k < len1; k++) { - page = ref[k]; - if (g.BOARD.ID === 'f') { - purgePos = 1; - ref1 = page.threads; - for (q = 0, len2 = ref1.length; q < len2; q++) { - thread = ref1[q]; - if (thread.no < ThreadStats.thread.ID) { - purgePos++; - } - } - ThreadStats.pageCountEl.textContent = purgePos; - } else { - ref2 = page.threads; - for (u = 0, len3 = ref2.length; u < len3; u++) { - thread = ref2[u]; - if (!(thread.no === ThreadStats.thread.ID)) { - continue; - } - ThreadStats.pageCountEl.textContent = page.page; - (page.page === this.response.length ? $.addClass : $.rmClass)(ThreadStats.pageCountEl, 'warning'); - ThreadStats.lastPageUpdate = new Date(thread.last_modified * $.SECOND); - ThreadStats.retry(); - return; - } - } - } - } else if (this.status === 304) { - return ThreadStats.retry(); - } - }, - retry: function() { - var ref; - if (g.BOARD.ID !== 'f' && ThreadStats.lastPost > ThreadStats.lastPageUpdate && ((ref = ThreadStats.pageCountEl) != null ? ref.textContent : void 0) !== '1') { - clearTimeout(ThreadStats.timeout); - return ThreadStats.timeout = setTimeout(ThreadStats.fetchPage, 5 * $.SECOND); - } - } - }; - - ThreadUpdater = { - init: function() { - var conf, el, input, name, ref, sc, subEntries, updateLink; - if (g.VIEW !== 'thread' || !Conf['Thread Updater']) { - return; - } - this.audio = $.el('audio', { - src: ThreadUpdater.beep - }); - if (Conf['Updater and Stats in Header']) { - this.dialog = sc = $.el('span', { - id: 'updater' - }); - $.extend(sc, { - innerHTML: "" - }); - $.ready(function() { - return Header.addShortcut(sc); - }); - } else { - this.dialog = sc = UI.dialog('updater', 'bottom: 0px; left: 0px;', { - innerHTML: "
      " - }); - $.addClass(doc, 'float'); - $.ready(function() { - return $.add(d.body, sc); - }); - } - this.checkPostCount = 0; - this.timer = $('#update-timer', sc); - this.status = $('#update-status', sc); - $.on(this.timer, 'click', this.update); - $.on(this.status, 'click', this.update); - updateLink = $.el('span', { - className: 'brackets-wrap updatelink' - }); - $.extend(updateLink, { - innerHTML: "Update" - }); - Main.ready(function() { - var navLinksBot; - if ((navLinksBot = $('.navLinksBot'))) { - return $.add(navLinksBot, [$.tn(' '), updateLink]); - } - }); - $.on(updateLink.firstElementChild, 'click', this.update); - subEntries = []; - ref = Config.updater.checkbox; - for (name in ref) { - conf = ref[name]; - el = UI.checkbox(name, name); - el.title = conf[1]; - input = el.firstElementChild; - $.on(input, 'change', $.cb.checked); - if (input.name === 'Scroll BG') { - $.on(input, 'change', this.cb.scrollBG); - this.cb.scrollBG(); - } else if (input.name === 'Auto Update') { - $.on(input, 'change', this.setInterval); - } - subEntries.push({ - el: el - }); - } - this.settings = $.el('span', { - innerHTML: "Interval" - }); - $.on(this.settings, 'click', this.intervalShortcut); - subEntries.push({ - el: this.settings - }); - Header.menu.addEntry(this.entry = { - el: $.el('span', { - textContent: 'Updater' - }), - order: 110, - subEntries: subEntries - }); - return Thread.callbacks.push({ - name: 'Thread Updater', - cb: this.node - }); - }, - node: function() { - ThreadUpdater.thread = this; - ThreadUpdater.root = this.OP.nodes.root.parentNode; - ThreadUpdater.outdateCount = 0; - ThreadUpdater.postIDs = []; - ThreadUpdater.fileIDs = []; - this.posts.forEach(function(post) { - ThreadUpdater.postIDs.push(post.ID); - if (post.file) { - return ThreadUpdater.fileIDs.push(post.ID); - } - }); - ThreadUpdater.cb.interval.call($.el('input', { - value: Conf['Interval'] - })); - $.on(d, 'QRPostSuccessful', ThreadUpdater.cb.checkpost); - $.on(d, 'visibilitychange', ThreadUpdater.cb.visibility); - return ThreadUpdater.setInterval(); - }, - - /* - http://freesound.org/people/pierrecartoons1979/sounds/90112/ - cc-by-nc-3.0 - */ - beep: 'data:audio/wav;base64,UklGRjQDAABXQVZFZm10IBAAAAABAAEAgD4AAIA+AAABAAgAc21wbDwAAABBAAADAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkYXRhzAIAAGMms8em0tleMV4zIpLVo8nhfSlcPR102Ki+5JspVEkdVtKzs+K1NEhUIT7DwKrcy0g6WygsrM2k1NpiLl0zIY/WpMrjgCdbPhxw2Kq+5Z4qUkkdU9K1s+K5NkVTITzBwqnczko3WikrqM+l1NxlLF0zIIvXpsnjgydZPhxs2ay95aIrUEkdUdC3suK8N0NUIjq+xKrcz002WioppdGm091pK1w0IIjYp8jkhydXPxxq2K295aUrTkoeTs65suK+OUFUIzi7xqrb0VA0WSoootKm0t5tKlo1H4TYqMfkiydWQBxm16+85actTEseS8y7seHAPD9TIza5yKra01QyWSson9On0d5wKVk2H4DYqcfkjidUQB1j1rG75KsvSkseScu8seDCPz1TJDW2yara1FYxWSwnm9Sn0N9zKVg2H33ZqsXkkihSQR1g1bK65K0wSEsfR8i+seDEQTxUJTOzy6rY1VowWC0mmNWoz993KVc3H3rYq8TklSlRQh1d1LS647AyR0wgRMbAsN/GRDpTJTKwzKrX1l4vVy4lldWpzt97KVY4IXbUr8LZljVPRCxhw7W3z6ZISkw1VK+4sMWvXEhSPk6buay9sm5JVkZNiLWqtrJ+TldNTnquqbCwilZXU1BwpKirrpNgWFhTaZmnpquZbFlbVmWOpaOonHZcXlljhaGhpZ1+YWBdYn2cn6GdhmdhYGN3lp2enIttY2Jjco+bnJuOdGZlZXCImJqakHpoZ2Zug5WYmZJ/bGlobX6RlpeSg3BqaW16jZSVkoZ0bGtteImSk5KIeG5tbnaFkJKRinxxbm91gY2QkIt/c3BwdH6Kj4+LgnZxcXR8iI2OjIR5c3J0e4WLjYuFe3VzdHmCioyLhn52dHR5gIiKioeAeHV1eH+GiYqHgXp2dnh9hIiJh4J8eHd4fIKHiIeDfXl4eHyBhoeHhH96eHmA', - playBeep: function() { - var audio; - audio = ThreadUpdater.audio; - if (audio.paused) { - return audio.play(); - } else { - return $.one(audio, 'ended', ThreadUpdater.playBeep); - } - }, - cb: { - checkpost: function(e) { - if (e.detail.threadID !== ThreadUpdater.thread.ID) { - return; - } - ThreadUpdater.postID = e.detail.postID; - ThreadUpdater.checkPostCount = 0; - ThreadUpdater.outdateCount = 0; - return ThreadUpdater.setInterval(); - }, - visibility: function() { - if (d.hidden) { - return; - } - ThreadUpdater.outdateCount = 0; - if (ThreadUpdater.seconds > ThreadUpdater.interval) { - return ThreadUpdater.setInterval(); - } - }, - scrollBG: function() { - return ThreadUpdater.scrollBG = Conf['Scroll BG'] ? function() { - return true; - } : function() { - return !d.hidden; - }; - }, - interval: function(e) { - var val; - val = parseInt(this.value, 10); - if (val < 1) { - val = 1; - } - ThreadUpdater.interval = this.value = val; - if (e) { - return $.cb.value.call(this); - } - }, - load: function() { - var req; - req = ThreadUpdater.req; - switch (req.status) { - case 200: - ThreadUpdater.parse(req); - if (ThreadUpdater.thread.isArchived) { - return ThreadUpdater.kill(); - } else { - return ThreadUpdater.setInterval(); - } - break; - case 404: - return $.ajax("//a.4cdn.org/" + ThreadUpdater.thread.board + "/catalog.json", { - onloadend: function() { - var confirmed, k, len1, len2, page, q, ref, ref1, thread; - if (this.status === 200) { - confirmed = true; - ref = this.response; - for (k = 0, len1 = ref.length; k < len1; k++) { - page = ref[k]; - ref1 = page.threads; - for (q = 0, len2 = ref1.length; q < len2; q++) { - thread = ref1[q]; - if (thread.no === ThreadUpdater.thread.ID) { - confirmed = false; - break; - } - } - } - } else { - confirmed = false; - } - if (confirmed) { - return ThreadUpdater.kill(); - } else { - return ThreadUpdater.error(req); - } - } - }); - default: - return ThreadUpdater.error(req); - } - } - }, - kill: function() { - ThreadUpdater.thread.kill(); - ThreadUpdater.setInterval(); - return $.event('ThreadUpdate', { - 404: true, - threadID: ThreadUpdater.thread.fullID - }); - }, - error: function(req) { - if (req.status === 304) { - ThreadUpdater.set('status', ''); - } - ThreadUpdater.setInterval(); - if (!req.status) { - return ThreadUpdater.set('status', 'Connection Failed', 'warning'); - } else if (req.status !== 304) { - return ThreadUpdater.set('status', req.statusText + " (" + req.status + ")", 'warning'); - } - }, - setInterval: function() { - var cur, interval, j, limit; - clearTimeout(ThreadUpdater.timeoutID); - if (ThreadUpdater.thread.isDead) { - ThreadUpdater.set('status', (ThreadUpdater.thread.isArchived ? 'Archived' : '404'), 'warning'); - ThreadUpdater.set('timer', ''); - return; - } - if (ThreadUpdater.postID && ThreadUpdater.checkPostCount < 5) { - ThreadUpdater.set('timer', '...', 'loading'); - ThreadUpdater.timeoutID = setTimeout(ThreadUpdater.update, ++ThreadUpdater.checkPostCount * $.SECOND); - return; - } - if (!Conf['Auto Update']) { - ThreadUpdater.set('timer', 'Update'); - return; - } - interval = ThreadUpdater.interval; - if (Conf['Optional Increase']) { - limit = d.hidden ? 10 : 5; - j = Math.min(ThreadUpdater.outdateCount, limit); - cur = (Math.floor(interval * 0.1) || 1) * j * j; - ThreadUpdater.seconds = $.minmax(cur, interval, 300); - } else { - ThreadUpdater.seconds = interval; - } - return ThreadUpdater.timeout(); - }, - intervalShortcut: function() { - var settings; - Settings.open('Advanced'); - settings = $.id('fourchanx-settings'); - return $('input[name=Interval]', settings).focus(); - }, - set: function(name, text, klass) { - var el, node; - el = ThreadUpdater[name]; - if (node = el.firstChild) { - node.data = text; - } else { - el.textContent = text; - } - return el.className = klass != null ? klass : (text === '' ? 'empty' : ''); - }, - timeout: function() { - if (ThreadUpdater.seconds) { - ThreadUpdater.set('timer', ThreadUpdater.seconds); - ThreadUpdater.timeoutID = setTimeout(ThreadUpdater.timeout, 1000); - } else { - ThreadUpdater.outdateCount++; - ThreadUpdater.update(); - } - return ThreadUpdater.seconds--; - }, - update: function() { - var ref; - clearTimeout(ThreadUpdater.timeoutID); - ThreadUpdater.set('timer', '...', 'loading'); - if ((ref = ThreadUpdater.req) != null) { - ref.abort(); - } - return ThreadUpdater.req = $.ajax("//a.4cdn.org/" + ThreadUpdater.thread.board + "/thread/" + ThreadUpdater.thread + ".json", { - onloadend: ThreadUpdater.cb.load, - timeout: $.MINUTE - }, { - whenModified: 'ThreadUpdater' - }); - }, - updateThreadStatus: function(type, status) { - var change, hasChanged; - if (!(hasChanged = ThreadUpdater.thread["is" + type] !== status)) { - return; - } - ThreadUpdater.thread.setStatus(type, status); - if (type === 'Closed' && ThreadUpdater.thread.isArchived) { - return; - } - change = type === 'Sticky' ? status ? 'now a sticky' : 'not a sticky anymore' : status ? 'now closed' : 'not closed anymore'; - return new Notice('info', "The thread is " + change + ".", 30); - }, - parse: function(req) { - var ID, OP, board, deletedFiles, deletedPosts, files, firstPost, index, ipCountEl, k, lastPost, len1, len2, len3, len4, newPosts, node, post, postObject, postObjects, posts, q, ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, scroll, thread, u, unreadCount, unreadQYCount, v; - postObjects = req.response.posts; - OP = postObjects[0]; - thread = ThreadUpdater.thread; - board = thread.board; - ref = ThreadUpdater.postIDs, lastPost = ref[ref.length - 1]; - if (postObjects[postObjects.length - 1].no < lastPost && new Date(req.getResponseHeader('Last-Modified')) - thread.posts[lastPost].info.date < 30 * $.SECOND) { - return; - } - Build.spoilerRange[board] = OP.custom_spoiler; - thread.setStatus('Archived', !!OP.archived); - ThreadUpdater.updateThreadStatus('Sticky', !!OP.sticky); - ThreadUpdater.updateThreadStatus('Closed', !!OP.closed); - thread.postLimit = !!OP.bumplimit; - thread.fileLimit = !!OP.imagelimit; - if (OP.unique_ips != null) { - thread.ipCount = OP.unique_ips; - } - posts = []; - index = []; - files = []; - newPosts = []; - for (k = 0, len1 = postObjects.length; k < len1; k++) { - postObject = postObjects[k]; - ID = postObject.no; - index.push(ID); - if (postObject.fsize) { - files.push(ID); - } - if (ID <= lastPost) { - continue; - } - if ((post = thread.posts[ID]) && !post.isFetchedQuote) { - post.resurrect(); - continue; - } - newPosts.push(board + "." + ID); - node = Build.postFromObject(postObject, board.ID); - posts.push(new Post(node, thread, board)); - if (ThreadUpdater.postID === ID) { - delete ThreadUpdater.postID; - } - } - deletedPosts = []; - ref1 = ThreadUpdater.postIDs; - for (q = 0, len2 = ref1.length; q < len2; q++) { - ID = ref1[q]; - if (!(indexOf.call(index, ID) < 0)) { - continue; - } - thread.posts[ID].kill(); - deletedPosts.push(board + "." + ID); - } - ThreadUpdater.postIDs = index; - deletedFiles = []; - ref2 = ThreadUpdater.fileIDs; - for (u = 0, len3 = ref2.length; u < len3; u++) { - ID = ref2[u]; - if (!(!(indexOf.call(files, ID) >= 0 || (ref3 = board + "." + ID, indexOf.call(deletedPosts, ref3) >= 0)))) { - continue; - } - thread.posts[ID].kill(true); - deletedFiles.push(board + "." + ID); - } - ThreadUpdater.fileIDs = files; - if (!posts.length) { - ThreadUpdater.set('status', ''); - } else { - ThreadUpdater.set('status', "+" + posts.length, 'new'); - ThreadUpdater.outdateCount = 0; - unreadCount = (ref4 = Unread.posts) != null ? ref4.size : void 0; - unreadQYCount = (ref5 = Unread.postsQuotingYou) != null ? ref5.size : void 0; - Main.callbackNodes(Post, posts); - if (d.hidden || !d.hasFocus()) { - if (Conf['Beep Quoting You'] && ((ref6 = Unread.postsQuotingYou) != null ? ref6.size : void 0) > unreadQYCount) { - ThreadUpdater.playBeep(); - if (Conf['Beep']) { - ThreadUpdater.playBeep(); - } - } else if (Conf['Beep'] && ((ref7 = Unread.posts) != null ? ref7.size : void 0) > 0 && unreadCount === 0) { - ThreadUpdater.playBeep(); - } - } - scroll = Conf['Auto Scroll'] && ThreadUpdater.scrollBG() && ThreadUpdater.root.getBoundingClientRect().bottom - doc.clientHeight < 25; - firstPost = null; - for (v = 0, len4 = posts.length; v < len4; v++) { - post = posts[v]; - if (!QuoteThreading.insert(post)) { - firstPost || (firstPost = post.nodes.root); - $.add(ThreadUpdater.root, post.nodes.root); - } - } - $.event('PostsInserted'); - if (scroll) { - if (Conf['Bottom Scroll']) { - window.scrollTo(0, d.body.clientHeight); - } else { - if (firstPost) { - Header.scrollTo(firstPost); - } - } - } - } - if ((OP.unique_ips != null) && (ipCountEl = $.id('unique-ips'))) { - ipCountEl.textContent = OP.unique_ips; - ipCountEl.previousSibling.textContent = ipCountEl.previousSibling.textContent.replace(/\b(?:is|are)\b/, OP.unique_ips === 1 ? 'is' : 'are'); - ipCountEl.nextSibling.textContent = ipCountEl.nextSibling.textContent.replace(/\bposters?\b/, OP.unique_ips === 1 ? 'poster' : 'posters'); - } - return $.event('ThreadUpdate', { - 404: false, - threadID: thread.fullID, - newPosts: newPosts, - deletedPosts: deletedPosts, - deletedFiles: deletedFiles, - postCount: OP.replies + 1, - fileCount: OP.images + !!OP.fsize, - ipCount: OP.unique_ips - }); - } - }; - - ThreadWatcher = { - init: function() { - var sc; - if (!(this.enabled = Conf['Thread Watcher'])) { - return; - } - this.shortcut = sc = $.el('a', { - id: 'watcher-link', - textContent: 'Watcher', - title: 'Thread Watcher', - href: 'javascript:;', - className: 'disabled fa fa-eye' - }); - this.db = new DataBoard('watchedThreads', this.refresh, true); - this.dialog = UI.dialog('thread-watcher', 'top: 50px; left: 0px;', { - innerHTML: "
      Thread Watcher ×
      " - }); - this.status = $('#watcher-status', this.dialog); - this.list = this.dialog.lastElementChild; - this.refreshButton = $('.refresh', this.dialog); - this.closeButton = $('.move > .close', this.dialog); - this.unreaddb = Unread.db || new DataBoard('lastReadPosts'); - this.unreadEnabled = Conf['Remember Last Read Post']; - $.on(d, 'QRPostSuccessful', this.cb.post); - $.on(sc, 'click', this.toggleWatcher); - $.on(this.refreshButton, 'click', this.buttonFetchAll); - $.on(this.closeButton, 'click', this.toggleWatcher); - $.on(d, '4chanXInitFinished', this.ready); - switch (g.VIEW) { - case 'index': - $.on(d, 'IndexRefresh', this.cb.onIndexRefresh); - break; - case 'thread': - $.on(d, 'ThreadUpdate', this.cb.onThreadRefresh); - } - if (Conf['Fixed Thread Watcher']) { - $.addClass(doc, 'fixed-watcher'); - } - if (Conf['Toggleable Thread Watcher']) { - this.dialog.hidden = true; - Header.addShortcut(sc); - $.addClass(doc, 'toggleable-watcher'); - } - ThreadWatcher.fetchAuto(); - if (g.VIEW === 'index' && Conf['JSON Index'] && Conf['Menu'] && g.BOARD.ID !== 'f') { - Menu.menu.addEntry({ - el: $.el('a', { - href: 'javascript:;', - className: 'has-shortcut-text' - }, { - innerHTML: "Alt+click" - }), - order: 6, - open: function(arg) { - var thread; - thread = arg.thread; - if (Conf['Index Mode'] !== 'catalog') { - return false; - } - this.el.firstElementChild.textContent = ThreadWatcher.isWatched(thread) ? 'Unwatch' : 'Watch'; - if (this.cb) { - $.off(this.el, 'click', this.cb); - } - this.cb = function() { - $.event('CloseMenu'); - return ThreadWatcher.toggle(thread); - }; - $.on(this.el, 'click', this.cb); - return true; - } - }); - } - Post.callbacks.push({ - name: 'Thread Watcher', - cb: this.node - }); - return CatalogThread.callbacks.push({ - name: 'Thread Watcher', - cb: this.catalogNode - }); - }, - isWatched: function(thread) { - var ref; - return (ref = ThreadWatcher.db) != null ? ref.get({ - boardID: thread.board.ID, - threadID: thread.ID - }) : void 0; - }, - node: function() { - var toggler; - if (this.isReply) { - return; - } - if (this.isClone) { - toggler = $('.watch-thread-link', this.nodes.post); - } else { - toggler = $.el('a', { - href: 'javascript:;', - className: 'watch-thread-link' - }); - $.before($('input', this.nodes.post), toggler); - } - return $.on(toggler, 'click', ThreadWatcher.cb.toggle); - }, - catalogNode: function() { - if (ThreadWatcher.isWatched(this.thread)) { - $.addClass(this.nodes.root, 'watched'); - } - $.on(this.nodes.thumb.parentNode, 'click', (function(_this) { - return function(e) { - if (!(e.button === 0 && e.altKey)) { - return; - } - ThreadWatcher.toggle(_this.thread); - return e.preventDefault(); - }; - })(this)); - return $.on(this.nodes.thumb.parentNode, 'mousedown', function(e) { - if (e.button === 0 && e.altKey) { - return e.preventDefault(); - } - }); - }, - ready: function() { - $.off(d, '4chanXInitFinished', ThreadWatcher.ready); - if (!Main.isThisPageLegit()) { - return; - } - ThreadWatcher.refresh(); - $.add(d.body, ThreadWatcher.dialog); - if (!Conf['Auto Watch']) { - return; - } - return $.get('AutoWatch', 0, function(arg) { - var AutoWatch, thread; - AutoWatch = arg.AutoWatch; - if (!(thread = g.BOARD.threads[AutoWatch])) { - return; - } - ThreadWatcher.add(thread); - return $["delete"]('AutoWatch'); - }); - }, - toggleWatcher: function() { - $.toggleClass(ThreadWatcher.shortcut, 'disabled'); - return ThreadWatcher.dialog.hidden = !ThreadWatcher.dialog.hidden; - }, - cb: { - openAll: function() { - var a, k, len1, ref; - if ($.hasClass(this, 'disabled')) { - return; - } - ref = $$('a[title]', ThreadWatcher.list); - for (k = 0, len1 = ref.length; k < len1; k++) { - a = ref[k]; - $.open(a.href); - } - return $.event('CloseMenu'); - }, - pruneDeads: function() { - var boardID, data, k, len1, ref, ref1, threadID; - if ($.hasClass(this, 'disabled')) { - return; - } - ThreadWatcher.db.forceSync(); - ref = ThreadWatcher.getAll(); - for (k = 0, len1 = ref.length; k < len1; k++) { - ref1 = ref[k], boardID = ref1.boardID, threadID = ref1.threadID, data = ref1.data; - if (!data.isDead) { - continue; - } - delete ThreadWatcher.db.data.boards[boardID][threadID]; - ThreadWatcher.db.deleteIfEmpty({ - boardID: boardID - }); - } - ThreadWatcher.db.save(); - ThreadWatcher.refresh(); - return $.event('CloseMenu'); - }, - toggle: function() { - var thread; - thread = Get.postFromNode(this).thread; - Index.followedThreadID = thread.ID; - ThreadWatcher.toggle(thread); - return delete Index.followedThreadID; - }, - rm: function() { - var boardID, ref, threadID; - ref = this.parentNode.dataset.fullID.split('.'), boardID = ref[0], threadID = ref[1]; - return ThreadWatcher.rm(boardID, +threadID); - }, - post: function(e) { - var boardID, postID, ref, threadID; - ref = e.detail, boardID = ref.boardID, threadID = ref.threadID, postID = ref.postID; - if (postID === threadID) { - if (Conf['Auto Watch']) { - return $.set('AutoWatch', threadID); - } - } else if (Conf['Auto Watch Reply']) { - return ThreadWatcher.add(g.threads[boardID + '.' + threadID]); - } - }, - onIndexRefresh: function() { - var boardID, data, db, ref, threadID; - db = ThreadWatcher.db; - boardID = g.BOARD.ID; - db.forceSync(); - ref = db.data.boards[boardID]; - for (threadID in ref) { - data = ref[threadID]; - if (!(data != null ? data.isDead : void 0) && !(threadID in g.BOARD.threads)) { - if (Conf['Auto Prune'] || !(data && typeof data === 'object')) { - db["delete"]({ - boardID: boardID, - threadID: threadID - }); - } else { - if (ThreadWatcher.unreadEnabled && Conf['Show Unread Count']) { - ThreadWatcher.fetchStatus({ - boardID: boardID, - threadID: threadID, - data: data - }); - } - data.isDead = true; - db.set({ - boardID: boardID, - threadID: threadID, - val: data - }); - } - } - } - return ThreadWatcher.refresh(); - }, - onThreadRefresh: function(e) { - var thread; - thread = g.threads[e.detail.threadID]; - if (!(e.detail[404] && ThreadWatcher.db.get({ - boardID: thread.board.ID, - threadID: thread.ID - }))) { - return; - } - return ThreadWatcher.add(thread); - } - }, - requests: [], - fetched: 0, - clearRequests: function() { - ThreadWatcher.requests = []; - ThreadWatcher.fetched = 0; - ThreadWatcher.status.textContent = ''; - return $.rmClass(ThreadWatcher.refreshButton, 'fa-spin'); - }, - abort: function() { - var k, len1, ref, req; - ref = ThreadWatcher.requests; - for (k = 0, len1 = ref.length; k < len1; k++) { - req = ref[k]; - if (req.readyState !== 4) { - req.abort(); - } - } - return ThreadWatcher.clearRequests(); - }, - fetchAuto: function() { - var db, interval, now; - clearTimeout(ThreadWatcher.timeout); - if (!Conf['Auto Update Thread Watcher']) { - return; - } - db = ThreadWatcher.db; - interval = ThreadWatcher.unreadEnabled && Conf['Show Unread Count'] ? 5 * $.MINUTE : 2 * $.HOUR; - now = Date.now(); - if (now >= (db.data.lastChecked || 0) + interval) { - db.data.lastChecked = now; - ThreadWatcher.fetchAllStatus(); - db.save(); - } - return ThreadWatcher.timeout = setTimeout(ThreadWatcher.fetchAuto, interval); - }, - buttonFetchAll: function() { - if (ThreadWatcher.requests.length) { - return ThreadWatcher.abort(); - } else { - return ThreadWatcher.fetchAllStatus(); - } - }, - fetchAllStatus: function() { - var k, len1, ref, thread, threads; - ThreadWatcher.db.forceSync(); - ThreadWatcher.unreaddb.forceSync(); - if ((ref = QuoteYou.db) != null) { - ref.forceSync(); - } - if (!(threads = ThreadWatcher.getAll()).length) { - return; - } - for (k = 0, len1 = threads.length; k < len1; k++) { - thread = threads[k]; - ThreadWatcher.fetchStatus(thread); - } - }, - fetchStatus: function(thread, force) { - var boardID, data, req, threadID; - boardID = thread.boardID, threadID = thread.threadID, data = thread.data; - if (data.isDead && !force) { - return; - } - if (ThreadWatcher.requests.length === 0) { - ThreadWatcher.status.textContent = '...'; - $.addClass(ThreadWatcher.refreshButton, 'fa-spin'); - } - req = $.ajax("//a.4cdn.org/" + boardID + "/thread/" + threadID + ".json", { - onloadend: function() { - return ThreadWatcher.parseStatus.call(this, thread); - }, - timeout: $.MINUTE - }, { - whenModified: force ? false : 'ThreadWatcher' - }); - return ThreadWatcher.requests.push(req); - }, - parseStatus: function(arg) { - var boardID, data, isDead, k, lastReadPost, len1, match, postObj, quotesYou, quotingYou, ref, ref1, regexp, threadID, unread; - boardID = arg.boardID, threadID = arg.threadID, data = arg.data; - ThreadWatcher.fetched++; - if (ThreadWatcher.fetched === ThreadWatcher.requests.length) { - ThreadWatcher.clearRequests(); - } else { - ThreadWatcher.status.textContent = (Math.round(ThreadWatcher.fetched / ThreadWatcher.requests.length * 100)) + "%"; - } - if (this.status === 200 && this.response) { - isDead = !!this.response.posts[0].archived; - if (isDead && Conf['Auto Prune']) { - ThreadWatcher.db["delete"]({ - boardID: boardID, - threadID: threadID - }); - ThreadWatcher.refresh(); - return; - } - lastReadPost = ThreadWatcher.unreaddb.get({ - boardID: boardID, - threadID: threadID, - defaultValue: 0 - }); - unread = quotingYou = 0; - ref = this.response.posts; - for (k = 0, len1 = ref.length; k < len1; k++) { - postObj = ref[k]; - if (!(postObj.no > lastReadPost)) { - continue; - } - if ((ref1 = QuoteYou.db) != null ? ref1.get({ - boardID: boardID, - threadID: threadID, - postID: postObj.no - }) : void 0) { - continue; - } - unread++; - if (!(QuoteYou.db && postObj.com)) { - continue; - } - quotesYou = false; - regexp = /]*\bhref="(?:\/([^\/]+)\/thread\/)?(\d+)?(?:#p(\d+))?"/g; - while (match = regexp.exec(postObj.com)) { - if (QuoteYou.db.get({ - boardID: match[1] || boardID, - threadID: match[2] || threadID, - postID: match[3] || match[2] || threadID - })) { - quotesYou = true; - break; - } - } - if (quotesYou && !Filter.isHidden(Build.parseJSON(postObj, boardID))) { - quotingYou++; - } - } - if (isDead !== data.isDead || unread !== data.unread || quotingYou !== data.quotingYou) { - data.isDead = isDead; - data.unread = unread; - data.quotingYou = quotingYou; - ThreadWatcher.db.set({ - boardID: boardID, - threadID: threadID, - val: data - }); - return ThreadWatcher.refresh(); - } - } else if (this.status === 404) { - if (Conf['Auto Prune']) { - ThreadWatcher.db["delete"]({ - boardID: boardID, - threadID: threadID - }); - } else { - data.isDead = true; - delete data.unread; - delete data.quotingYou; - ThreadWatcher.db.set({ - boardID: boardID, - threadID: threadID, - val: data - }); - } - return ThreadWatcher.refresh(); - } - }, - getAll: function() { - var all, boardID, data, ref, threadID, threads; - all = []; - ref = ThreadWatcher.db.data.boards; - for (boardID in ref) { - threads = ref[boardID]; - if (Conf['Current Board'] && boardID !== g.BOARD.ID) { - continue; - } - for (threadID in threads) { - data = threads[threadID]; - if (data && typeof data === 'object') { - all.push({ - boardID: boardID, - threadID: threadID, - data: data - }); - } - } - } - return all; - }, - makeLine: function(boardID, threadID, data) { - var count, div, fullID, link, title, x; - x = $.el('a', { - className: 'fa fa-times', - href: 'javascript:;' - }); - $.on(x, 'click', ThreadWatcher.cb.rm); - link = $.el('a', { - href: "/" + boardID + "/thread/" + threadID, - title: data.excerpt, - className: 'watcher-link' - }); - if (ThreadWatcher.unreadEnabled && Conf['Show Unread Count'] && (data.unread != null)) { - count = $.el('span', { - textContent: "(" + data.unread + ")", - className: 'watcher-unread' - }); - $.add(link, count); - } - title = $.el('span', { - textContent: data.excerpt, - className: 'watcher-title' - }); - $.add(link, title); - div = $.el('div'); - fullID = boardID + "." + threadID; - div.dataset.fullID = fullID; - if (g.VIEW === 'thread' && fullID === (g.BOARD + "." + g.THREADID)) { - $.addClass(div, 'current'); - } - if (data.isDead) { - $.addClass(div, 'dead-thread'); - } - if (ThreadWatcher.unreadEnabled && Conf['Show Unread Count']) { - if (data.unread === 0) { - $.addClass(div, 'replies-read'); - } - if (data.unread) { - $.addClass(div, 'replies-unread'); - } - if (data.quotingYou) { - $.addClass(div, 'replies-quoting-you'); - } - } - $.add(div, [x, $.tn(' '), link]); - return div; - }, - refresh: function() { - var boardID, data, k, len1, len2, list, nodes, q, ref, ref1, ref2, refresher, threadID; - nodes = []; - ref = ThreadWatcher.getAll(); - for (k = 0, len1 = ref.length; k < len1; k++) { - ref1 = ref[k], boardID = ref1.boardID, threadID = ref1.threadID, data = ref1.data; - nodes.push(ThreadWatcher.makeLine(boardID, threadID, data)); - } - list = ThreadWatcher.list; - $.rmAll(list); - $.add(list, nodes); - g.threads.forEach(function(thread) { - var helper, len2, post, q, ref2, toggler; - helper = ThreadWatcher.isWatched(thread) ? ['addClass', 'Unwatch'] : ['rmClass', 'Watch']; - if (thread.OP) { - ref2 = [thread.OP].concat(slice.call(thread.OP.clones)); - for (q = 0, len2 = ref2.length; q < len2; q++) { - post = ref2[q]; - toggler = $('.watch-thread-link', post.nodes.post); - $[helper[0]](toggler, 'watched'); - toggler.title = helper[1] + " Thread"; - } - } - if (thread.catalogView) { - return $[helper[0]](thread.catalogView.nodes.root, 'watched'); - } - }); - ThreadWatcher.refreshIcon(); - ref2 = ThreadWatcher.menu.refreshers; - for (q = 0, len2 = ref2.length; q < len2; q++) { - refresher = ref2[q]; - refresher(); - } - if (Index.nodes && Conf['Pin Watched Threads']) { - Index.sort(); - return Index.buildIndex(); - } - }, - refreshIcon: function() { - var className, k, len1, ref; - ref = ['replies-unread', 'replies-quoting-you']; - for (k = 0, len1 = ref.length; k < len1; k++) { - className = ref[k]; - ThreadWatcher.shortcut.classList.toggle(className, !!$("." + className, ThreadWatcher.dialog)); - } - }, - update: function(boardID, threadID, newData) { - var data, key, line, n, newLine, ref, val; - if (!(data = (ref = ThreadWatcher.db) != null ? ref.get({ - boardID: boardID, - threadID: threadID - }) : void 0)) { - return; - } - if (newData.isDead && Conf['Auto Prune']) { - ThreadWatcher.db["delete"]({ - boardID: boardID, - threadID: threadID - }); - ThreadWatcher.refresh(); - return; - } - n = 0; - for (key in newData) { - val = newData[key]; - if (data[key] !== val) { - n++; - } - } - if (!n) { - return; - } - ThreadWatcher.db.forceSync(); - if (!(data = ThreadWatcher.db.get({ - boardID: boardID, - threadID: threadID - }))) { - return; - } - $.extend(data, newData); - ThreadWatcher.db.set({ - boardID: boardID, - threadID: threadID, - val: data - }); - if (line = $("#watched-threads > [data-full-i-d='" + boardID + "." + threadID + "']", ThreadWatcher.dialog)) { - newLine = ThreadWatcher.makeLine(boardID, threadID, data); - $.replace(line, newLine); - return ThreadWatcher.refreshIcon(); - } else { - return ThreadWatcher.refresh(); - } - }, - set404: function(boardID, threadID, cb) { - var data, ref; - if (!(data = (ref = ThreadWatcher.db) != null ? ref.get({ - boardID: boardID, - threadID: threadID - }) : void 0)) { - return cb(); - } - if (Conf['Auto Prune']) { - ThreadWatcher.db["delete"]({ - boardID: boardID, - threadID: threadID - }); - return cb(); - } - if (data.isDead && !((data.unread != null) || (data.quotingYou != null))) { - return cb(); - } - data.isDead = true; - delete data.unread; - delete data.quotingYou; - return ThreadWatcher.db.set({ - boardID: boardID, - threadID: threadID, - val: data - }, cb); - }, - toggle: function(thread) { - var boardID, threadID; - boardID = thread.board.ID; - threadID = thread.ID; - if (ThreadWatcher.db.get({ - boardID: boardID, - threadID: threadID - })) { - return ThreadWatcher.rm(boardID, threadID); - } else { - return ThreadWatcher.add(thread); - } - }, - add: function(thread) { - var boardID, data, threadID; - data = {}; - boardID = thread.board.ID; - threadID = thread.ID; - if (thread.isDead) { - if (Conf['Auto Prune'] && ThreadWatcher.db.get({ - boardID: boardID, - threadID: threadID - })) { - ThreadWatcher.rm(boardID, threadID); - return; - } - data.isDead = true; - } - data.excerpt = Get.threadExcerpt(thread); - ThreadWatcher.db.set({ - boardID: boardID, - threadID: threadID, - val: data - }); - ThreadWatcher.refresh(); - if (ThreadWatcher.unreadEnabled && Conf['Show Unread Count']) { - return ThreadWatcher.fetchStatus({ - boardID: boardID, - threadID: threadID, - data: data - }, true); - } - }, - rm: function(boardID, threadID) { - ThreadWatcher.db["delete"]({ - boardID: boardID, - threadID: threadID - }); - return ThreadWatcher.refresh(); - }, - menu: { - refreshers: [], - init: function() { - var menu; - if (!Conf['Thread Watcher']) { - return; - } - menu = this.menu = new UI.Menu('thread watcher'); - $.on($('.menu-button', ThreadWatcher.dialog), 'click', function(e) { - return menu.toggle(e, this, ThreadWatcher); - }); - this.addHeaderMenuEntry(); - return this.addMenuEntries(); - }, - addHeaderMenuEntry: function() { - var entryEl; - if (g.VIEW !== 'thread') { - return; - } - entryEl = $.el('a', { - href: 'javascript:;' - }); - Header.menu.addEntry({ - el: entryEl, - order: 60 - }); - $.on(entryEl, 'click', function() { - return ThreadWatcher.toggle(g.threads[g.BOARD + "." + g.THREADID]); - }); - return this.refreshers.push(function() { - var addClass, ref, rmClass, text; - ref = $('.current', ThreadWatcher.list) ? ['unwatch-thread', 'watch-thread', 'Unwatch thread'] : ['watch-thread', 'unwatch-thread', 'Watch thread'], addClass = ref[0], rmClass = ref[1], text = ref[2]; - $.addClass(entryEl, addClass); - $.rmClass(entryEl, rmClass); - return entryEl.textContent = text; - }); - }, - addMenuEntries: function() { - var cb, conf, entries, entry, k, len1, name, ref, ref1, refresh, subEntries; - entries = []; - entries.push({ - cb: ThreadWatcher.cb.openAll, - entry: { - el: $.el('a', { - textContent: 'Open all threads' - }) - }, - refresh: function() { - return (ThreadWatcher.list.firstElementChild ? $.rmClass : $.addClass)(this.el, 'disabled'); - } - }); - entries.push({ - cb: ThreadWatcher.cb.pruneDeads, - entry: { - el: $.el('a', { - textContent: 'Prune dead threads' - }) - }, - refresh: function() { - return ($('.dead-thread', ThreadWatcher.list) ? $.rmClass : $.addClass)(this.el, 'disabled'); - } - }); - subEntries = []; - ref = Config.threadWatcher; - for (name in ref) { - conf = ref[name]; - subEntries.push(this.createSubEntry(name, conf[1])); - } - entries.push({ - entry: { - el: $.el('span', { - textContent: 'Settings' - }), - subEntries: subEntries - } - }); - for (k = 0, len1 = entries.length; k < len1; k++) { - ref1 = entries[k], entry = ref1.entry, cb = ref1.cb, refresh = ref1.refresh; - if (entry.el.nodeName === 'A') { - entry.el.href = 'javascript:;'; - } - if (cb) { - $.on(entry.el, 'click', cb); - } - if (refresh) { - this.refreshers.push(refresh.bind(entry)); - } - this.menu.addEntry(entry); - } - }, - createSubEntry: function(name, desc) { - var entry, input; - entry = { - type: 'thread watcher', - el: UI.checkbox(name, name.replace(' Thread Watcher', '')) - }; - entry.el.title = desc; - input = entry.el.firstElementChild; - if (name === 'Show Unread Count' && !ThreadWatcher.unreadEnabled) { - input.disabled = true; - $.addClass(entry.el, 'disabled'); - entry.el.title += '\n[Remember Last Read Post is disabled.]'; - } - $.on(input, 'change', $.cb.checked); - if (name === 'Current Board' || name === 'Show Unread Count') { - $.on(input, 'change', ThreadWatcher.refresh); - } - if (name === 'Show Unread Count' || name === 'Auto Update Thread Watcher') { - $.on(input, 'change', ThreadWatcher.fetchAuto); - } - return entry; - } - } - }; - - Unread = { - init: function() { - if (!(g.VIEW === 'thread' && (Conf['Unread Count'] || Conf['Unread Favicon'] || Conf['Unread Line'] || Conf['Remember Last Read Post'] || Conf['Desktop Notifications'] || Conf['Quote Threading']))) { - return; - } - if (Conf['Remember Last Read Post']) { - $.sync('Remember Last Read Post', function(enabled) { - return Conf['Remember Last Read Post'] = enabled; - }); - this.db = new DataBoard('lastReadPosts', this.sync); - } - this.hr = $.el('hr', { - id: 'unread-line' - }); - this.posts = new Set(); - this.postsQuotingYou = new Set(); - this.order = new RandomAccessList(); - this.position = null; - Thread.callbacks.push({ - name: 'Unread', - cb: this.node - }); - return Post.callbacks.push({ - name: 'Unread', - cb: this.addPost - }); - }, - node: function() { - var ID, k, len1, ref, ref1; - Unread.thread = this; - Unread.title = d.title; - Unread.lastReadPost = ((ref = Unread.db) != null ? ref.get({ - boardID: this.board.ID, - threadID: this.ID - }) : void 0) || 0; - Unread.readCount = 0; - ref1 = this.posts.keys; - for (k = 0, len1 = ref1.length; k < len1; k++) { - ID = ref1[k]; - if (+ID <= Unread.lastReadPost) { - Unread.readCount++; - } - } - $.one(d, '4chanXInitFinished', Unread.ready); - return $.on(d, 'ThreadUpdate', Unread.onUpdate); - }, - ready: function() { - if (Conf['Remember Last Read Post'] && Conf['Scroll to Last Read Post']) { - Unread.scroll(); - } - Unread.setLine(true); - Unread.read(); - Unread.update(); - $.on(d, 'scroll visibilitychange', Unread.read); - if (Conf['Unread Line']) { - return $.on(d, 'visibilitychange', Unread.setLine); - } - }, - positionPrev: function() { - if (Unread.position) { - return Unread.position.prev; - } else { - return Unread.order.last; - } - }, - scroll: function() { - var hash, position, ref, root; - if ((hash = location.hash.match(/\d+/)) && hash[0] in Unread.thread.posts) { - return; - } - ReplyPruning.showIfHidden((ref = Unread.position) != null ? ref.data.nodes.root.id : void 0); - position = Unread.positionPrev(); - while (position) { - root = position.data.nodes.root; - if (!root.getBoundingClientRect().height) { - position = position.prev; - } else { - Header.scrollToIfNeeded(root, true); - break; - } - } - }, - sync: function() { - var ID, i, k, lastReadPost, postIDs, ref, ref1; - if (Unread.lastReadPost == null) { - return; - } - lastReadPost = Unread.db.get({ - boardID: Unread.thread.board.ID, - threadID: Unread.thread.ID, - defaultValue: 0 - }); - if (!(Unread.lastReadPost < lastReadPost)) { - return; - } - Unread.lastReadPost = lastReadPost; - postIDs = Unread.thread.posts.keys; - for (i = k = ref = Unread.readCount, ref1 = postIDs.length; k < ref1; i = k += 1) { - ID = +postIDs[i]; - if (!Unread.thread.posts[ID].isFetchedQuote) { - if (ID > Unread.lastReadPost) { - break; - } - Unread.posts["delete"](ID); - Unread.postsQuotingYou["delete"](ID); - } - Unread.readCount++; - } - Unread.updatePosition(); - Unread.setLine(); - return Unread.update(); - }, - addPost: function() { - var ref; - if (this.isFetchedQuote || this.isClone) { - return; - } - Unread.order.push(this); - if (this.ID <= Unread.lastReadPost || this.isHidden || ((ref = QuoteYou.db) != null ? ref.get({ - boardID: this.board.ID, - threadID: this.thread.ID, - postID: this.ID - }) : void 0)) { - return; - } - Unread.posts.add(this.ID); - Unread.addPostQuotingYou(this); - return Unread.position != null ? Unread.position : Unread.position = Unread.order[this.ID]; - }, - addPostQuotingYou: function(post) { - var k, len1, quotelink, ref, ref1; - ref = post.nodes.quotelinks; - for (k = 0, len1 = ref.length; k < len1; k++) { - quotelink = ref[k]; - if (!((ref1 = QuoteYou.db) != null ? ref1.get(Get.postDataFromLink(quotelink)) : void 0)) { - continue; - } - Unread.postsQuotingYou.add(post.ID); - Unread.openNotification(post); - return; - } - }, - openNotification: function(post) { - var notif; - if (!Header.areNotificationsEnabled) { - return; - } - try { - notif = new Notification(post.info.nameBlock + " replied to you", { - body: post.info.commentDisplay, - icon: Favicon.logo - }); - notif.onclick = function() { - Header.scrollToIfNeeded(post.nodes.root, true); - return $.global(function() { - return window.focus(); - }); - }; - return notif.onshow = function() { - return setTimeout(function() { - return notif.close(); - }, 7 * $.SECOND); - }; - } catch (_error) {} - }, - onUpdate: function(e) { - if (!e.detail[404]) { - Unread.setLine(); - Unread.read(); - } - return Unread.update(); - }, - readSinglePost: function(post) { - var ID; - ID = post.ID; - if (!Unread.posts.has(ID)) { - return; - } - Unread.posts["delete"](ID); - Unread.postsQuotingYou["delete"](ID); - Unread.updatePosition(); - Unread.saveLastReadPost(); - return Unread.update(); - }, - read: $.debounce(100, function(e) { - var ID, count, data, ref, ref1, root; - if (!Unread.posts.size && Unread.readCount !== Unread.thread.posts.keys.length) { - Unread.saveLastReadPost(); - } - if (d.hidden || !Unread.posts.size) { - return; - } - count = 0; - while (Unread.position) { - ref = Unread.position, ID = ref.ID, data = ref.data; - root = data.nodes.root; - if (!(!root.getBoundingClientRect().height || Header.getBottomOf(root) > -1)) { - break; - } - count++; - Unread.posts["delete"](ID); - Unread.postsQuotingYou["delete"](ID); - if ((ref1 = QuoteYou.db) != null ? ref1.get({ - boardID: data.board.ID, - threadID: data.thread.ID, - postID: ID - }) : void 0) { - QuoteYou.lastRead = root; - } - Unread.position = Unread.position.next; - } - if (!count) { - return; - } - Unread.updatePosition(); - Unread.saveLastReadPost(); - if (e) { - return Unread.update(); - } - }), - updatePosition: function() { - while (Unread.position && !Unread.posts.has(Unread.position.ID)) { - Unread.position = Unread.position.next; - } - }, - saveLastReadPost: $.debounce(2 * $.SECOND, function() { - var ID, i, k, postIDs, ref, ref1; - $.forceSync('Remember Last Read Post'); - if (!(Conf['Remember Last Read Post'] && Unread.db)) { - return; - } - postIDs = Unread.thread.posts.keys; - for (i = k = ref = Unread.readCount, ref1 = postIDs.length; k < ref1; i = k += 1) { - ID = +postIDs[i]; - if (!Unread.thread.posts[ID].isFetchedQuote) { - if (Unread.posts.has(ID)) { - break; - } - Unread.lastReadPost = ID; - } - Unread.readCount++; - } - if (Unread.thread.isDead && !Unread.thread.isArchived) { - return; - } - Unread.db.forceSync(); - return Unread.db.set({ - boardID: Unread.thread.board.ID, - threadID: Unread.thread.ID, - val: Unread.lastReadPost - }); - }), - setLine: function(force) { - if (!Conf['Unread Line']) { - return; - } - if (Unread.hr.hidden || d.hidden || (force === true)) { - if ((Unread.linePosition = Unread.positionPrev())) { - $.after(Unread.linePosition.data.nodes.root, Unread.hr); - } else { - $.rm(Unread.hr); - } - } - return Unread.hr.hidden = Unread.linePosition === Unread.order.last; - }, - update: function() { - var count, countQuotingYou, isDead, titleCount, titleDead, titleQuotingYou; - count = Unread.posts.size; - countQuotingYou = Unread.postsQuotingYou.size; - if (Conf['Unread Count']) { - titleQuotingYou = Conf['Quoted Title'] && countQuotingYou ? '(!) ' : ''; - titleCount = count || !Conf['Hide Unread Count at (0)'] ? "(" + count + ") " : ''; - titleDead = Unread.thread.isDead ? Unread.title.replace('-', (Unread.thread.isArchived ? '- Archived -' : '- 404 -')) : Unread.title; - d.title = "" + titleQuotingYou + titleCount + titleDead; - } - $.forceSync('Remember Last Read Post'); - if (Conf['Remember Last Read Post'] && (!Unread.thread.isDead || Unread.thread.isArchived)) { - ThreadWatcher.update(Unread.thread.board.ID, Unread.thread.ID, { - isDead: Unread.thread.isDead, - unread: count, - quotingYou: countQuotingYou - }); - } - if (Conf['Unread Favicon']) { - isDead = Unread.thread.isDead; - Favicon.el.href = countQuotingYou ? Favicon[isDead ? 'unreadDeadY' : 'unreadY'] : count ? Favicon[isDead ? 'unreadDead' : 'unread'] : Favicon[isDead ? 'dead' : 'default']; - return $.add(d.head, Favicon.el); - } - } - }; - - Redirect = { - init: function() { - var archive, archives, boardID, boards, data, files, id, k, len1, len2, name, o, q, record, ref, ref1, software, type, uid, withCredentials; - o = { - thread: {}, - post: {}, - file: {}, - report: {} - }; - archives = {}; - ref = Redirect.archives; - for (k = 0, len1 = ref.length; k < len1; k++) { - data = ref[k]; - uid = data.uid, name = data.name, boards = data.boards, files = data.files, software = data.software, withCredentials = data.withCredentials; - archives[JSON.stringify(uid != null ? uid : name)] = data; - for (q = 0, len2 = boards.length; q < len2; q++) { - boardID = boards[q]; - if (!withCredentials) { - if (!(boardID in o.thread)) { - o.thread[boardID] = data; - } - if (!(boardID in o.post || software !== 'foolfuuka')) { - o.post[boardID] = data; - } - if (!(boardID in o.file || indexOf.call(files, boardID) < 0)) { - o.file[boardID] = data; - } - } - if (name === 'fgts') { - o.report[boardID] = data; - } - } - } - ref1 = Conf['selectedArchives']; - for (boardID in ref1) { - record = ref1[boardID]; - for (type in record) { - id = record[type]; - if (id === null) { - delete o[type][boardID]; - } else if (archive = archives[JSON.stringify(id)]) { - boards = type === 'file' ? archive.files : archive.boards; - if (indexOf.call(boards, boardID) >= 0) { - o[type][boardID] = archive; - } - } - } - } - return Redirect.data = o; - }, - archives: [{"uid":3,"name":"4plebs","domain":"archive.4plebs.org","http":true,"https":true,"software":"foolfuuka","boards":["adv","f","hr","o","pol","s4s","sp","tg","trv","tv","x"],"files":["adv","f","hr","o","pol","s4s","sp","tg","trv","tv","x"]},{"uid":4,"name":"Nyafuu Archive","domain":"archive.nyafuu.org","http":true,"https":true,"software":"foolfuuka","boards":["c","e","news","w","wg","wsr"],"files":["c","e","news","w","wg","wsr"]},{"uid":8,"name":"Rebecca Black Tech","domain":"rbt.asia","http":false,"https":true,"software":"fuuka","boards":["cgl","g","mu"],"files":["cgl","g","mu"]},{"uid":10,"name":"warosu","domain":"warosu.org","http":false,"https":true,"software":"fuuka","boards":["3","biz","cgl","ck","diy","fa","g","ic","jp","lit","sci","tg","vr"],"files":["3","biz","cgl","ck","diy","fa","g","ic","jp","lit","sci","tg","vr"]},{"uid":15,"name":"fgts","domain":"fgts.jp","http":true,"https":true,"software":"foolfuuka","boards":["asp","b","cm","gd","h","hc","hm","n","out","p","po","qa","r","s","soc","toy","vp","y"],"files":["asp","b","cm","gd","h","hc","hm","n","out","p","po","qa","r","s","soc","toy","vp","y"]},{"uid":23,"name":"Desustorage","domain":"desustorage.org","http":true,"https":true,"software":"foolfuuka","boards":["a","aco","an","c","co","d","fit","gif","his","int","k","m","mlp","qa","r9k","tg","trash","vr","wsg"],"files":["a","aco","an","c","co","d","fit","gif","his","int","k","m","mlp","qa","r9k","tg","trash","vr","wsg"]},{"uid":24,"name":"fireden.net","domain":"boards.fireden.net","http":false,"https":true,"software":"foolfuuka","boards":["a","cm","ic","sci","tg","v","vg","y"],"files":["a","cm","ic","sci","tg","v","vg","y"]},{"uid":25,"name":"arch.b4k.co","domain":"arch.b4k.co","http":true,"https":true,"software":"foolfuuka","boards":["g","jp","mlp","v"],"files":[]},{"uid":5,"name":"Love is Over","domain":"deploy.loveisover.me","http":true,"https":false,"software":"foolfuuka","boards":["c","d","e","i","lgbt","t","u"],"files":["c","d","e","i","lgbt","t","u"],"search":[]},{"uid":28,"name":"bstats","domain":"archive.b-stats.org","http":true,"https":true,"software":"foolfuuka","boards":["f","cm","hm","lgbt","news","trash","y"],"files":[]}], - to: function(dest, data) { - var archive; - archive = (dest === 'search' || dest === 'board' ? Redirect.data.thread : Redirect.data[dest])[data.boardID]; - if (!archive) { - return ''; - } - return Redirect[dest](archive, data); - }, - protocol: function(archive) { - var protocol; - protocol = location.protocol; - if (!archive[protocol.slice(0, -1)]) { - protocol = protocol === 'https:' ? 'http:' : 'https:'; - } - return protocol + "//"; - }, - thread: function(archive, arg) { - var boardID, path, postID, threadID; - boardID = arg.boardID, threadID = arg.threadID, postID = arg.postID; - path = threadID ? boardID + "/thread/" + threadID : boardID + "/post/" + postID; - if (archive.software === 'foolfuuka') { - path += '/'; - } - if (threadID && postID) { - path += archive.software === 'foolfuuka' ? "#" + postID : "#p" + postID; - } - return "" + (Redirect.protocol(archive)) + archive.domain + "/" + path; - }, - post: function(archive, arg) { - var boardID, postID, protocol, url; - boardID = arg.boardID, postID = arg.postID; - protocol = Redirect.protocol(archive); - url = "" + protocol + archive.domain + "/_/api/chan/post/?board=" + boardID + "&num=" + postID; - if (!Redirect.securityCheck(url)) { - return ''; - } - return url; - }, - file: function(archive, arg) { - var boardID, filename; - boardID = arg.boardID, filename = arg.filename; - return "" + (Redirect.protocol(archive)) + archive.domain + "/" + boardID + "/full_image/" + filename; - }, - board: function(archive, arg) { - var boardID; - boardID = arg.boardID; - return "" + (Redirect.protocol(archive)) + archive.domain + "/" + boardID + "/"; - }, - search: function(archive, arg) { - var boardID, path, type, value; - boardID = arg.boardID, type = arg.type, value = arg.value; - type = type === 'name' ? 'username' : type === 'MD5' ? 'image' : type; - if (type === 'capcode') { - value = { - 'Developer': 'dev' - }[value] || value.toLowerCase(); - } else if (type === 'image') { - value = value.replace(/[+\/=]/g, function(c) { - return { - '+': '-', - '/': '_', - '=': '' - }[c]; - }); - } - value = encodeURIComponent(value); - path = archive.software === 'foolfuuka' ? boardID + "/search/" + type + "/" + value + "/" : type === 'image' ? boardID + "/image/" + value : boardID + "/?task=search2&search_" + type + "=" + value; - return "" + (Redirect.protocol(archive)) + archive.domain + "/" + path; - }, - report: function(archive, arg) { - var boardID, postID; - boardID = arg.boardID, postID = arg.postID; - return "https://so.fgts.jp/report/?board=" + boardID + "&no=" + postID; - }, - securityCheck: function(url) { - return /^https:\/\//.test(url) || location.protocol === 'http:' || Conf['Exempt Archives from Encryption']; - }, - navigate: function(dest, data, alternative) { - var url; - if (!Redirect.data) { - Redirect.init(); - } - url = Redirect.to(dest, data); - if (url && (Redirect.securityCheck(url) || confirm("Redirect to " + url + "?\n\nYour connection will not be encrypted."))) { - return location.replace(url); - } else if (alternative) { - return location.replace(alternative); - } - } - }; - - PSAHiding = { - init: function() { - if (!Conf['Announcement Hiding']) { - return; - } - $.addClass(doc, 'hide-announcement'); - return $.one(d, '4chanXInitFinished', this.setup); - }, - setup: function() { - var btn, entry, hr, psa, ref; - if (!(psa = PSAHiding.psa = $.id('globalMessage'))) { - $.rmClass(doc, 'hide-announcement'); - return; - } - if ((hr = (ref = $.id('globalToggle')) != null ? ref.previousElementSibling : void 0) && hr.nodeName === 'HR') { - PSAHiding.hr = hr; - } - entry = { - el: $.el('a', { - textContent: 'Show announcement', - className: 'show-announcement', - href: 'javascript:;' - }), - order: 50, - open: function() { - return PSAHiding.hidden; - } - }; - Header.menu.addEntry(entry); - $.on(entry.el, 'click', PSAHiding.toggle); - PSAHiding.btn = btn = $.el('span', { - title: 'Mark announcement as read and hide.', - className: 'hide-announcement' - }); - $.extend(btn, { - innerHTML: "[Dismiss]" - }); - $.on(btn, 'click', PSAHiding.toggle); - $.get('hiddenPSA', 0, function(arg) { - var hiddenPSA; - hiddenPSA = arg.hiddenPSA; - PSAHiding.sync(hiddenPSA); - $.add(psa, btn); - return $.rmClass(doc, 'hide-announcement'); - }); - return $.sync('hiddenPSA', PSAHiding.sync); - }, - toggle: function() { - var UTC; - if ($.hasClass(this, 'hide-announcement')) { - UTC = +$.id('globalMessage').dataset.utc; - $.set('hiddenPSA', UTC); - } else { - $.event('CloseMenu'); - $["delete"]('hiddenPSA'); - } - return PSAHiding.sync(UTC); - }, - sync: function(UTC) { - var psa, ref; - psa = PSAHiding.psa; - PSAHiding.hidden = PSAHiding.btn.hidden = (UTC != null) && UTC >= +psa.dataset.utc; - if (PSAHiding.hidden) { - $.rm(psa); - } else { - $.after($.id('globalToggle'), psa); - } - if ((ref = PSAHiding.hr) != null) { - ref.hidden = PSAHiding.hidden; - } - } - }; - - AntiAutoplay = { - init: function() { - var audio, k, len1, ref; - if (!Conf['Disable Autoplaying Sounds']) { - return; - } - $.addClass(doc, 'anti-autoplay'); - ref = $$('audio[autoplay]', doc); - for (k = 0, len1 = ref.length; k < len1; k++) { - audio = ref[k]; - this.stop(audio); - } - window.addEventListener('loadstart', ((function(_this) { - return function(e) { - return _this.stop(e.target); - }; - })(this)), true); - Post.callbacks.push({ - name: 'Disable Autoplaying Sounds', - cb: this.node - }); - CatalogThread.callbacks.push({ - name: 'Disable Autoplaying Sounds', - cb: this.node - }); - return $.ready((function(_this) { - return function() { - return _this.process(d.body); - }; - })(this)); - }, - stop: function(audio) { - if (!audio.autoplay) { - return; - } - audio.pause(); - audio.autoplay = false; - if (audio.controls) { - return; - } - audio.controls = true; - return $.addClass(audio, 'controls-added'); - }, - node: function() { - return AntiAutoplay.process(this.nodes.root); - }, - process: function(root) { - var iframe, k, len1, len2, object, q, ref, ref1; - ref = $$('iframe[src*="youtube"][src*="autoplay=1"]', root); - for (k = 0, len1 = ref.length; k < len1; k++) { - iframe = ref[k]; - iframe.src = iframe.src.replace(/\?autoplay=1&?/, '?').replace('&autoplay=1', ''); - $.addClass(iframe, 'autoplay-removed'); - } - ref1 = $$('object[data*="youtube"][data*="autoplay=1"]', root); - for (q = 0, len2 = ref1.length; q < len2; q++) { - object = ref1[q]; - object.data = object.data.replace(/\?autoplay=1&?/, '?').replace('&autoplay=1', ''); - $.addClass(object, 'autoplay-removed'); - } - } - }; - - Banner = { - banners: ["0.jpg","1.jpg","2.jpg","4.jpg","6.jpg","7.jpg","8.jpg","9.jpg","10.jpg","11.jpg","12.jpg","13.jpg","14.jpg","16.jpg","17.jpg","18.jpg","19.jpg","20.jpg","21.jpg","22.jpg","24.jpg","25.jpg","26.jpg","28.jpg","29.jpg","33.jpg","38.jpg","39.jpg","43.jpg","44.jpg","45.jpg","46.jpg","47.jpg","52.jpg","54.jpg","57.jpg","59.jpg","60.jpg","61.jpg","64.jpg","66.jpg","67.jpg","69.jpg","71.jpg","72.jpg","76.jpg","77.jpg","81.jpg","82.jpg","83.jpg","84.jpg","88.jpg","90.jpg","91.jpg","96.jpg","98.jpg","99.jpg","100.jpg","104.jpg","106.jpg","116.jpg","119.jpg","137.jpg","140.jpg","148.jpg","149.jpg","150.jpg","154.jpg","156.jpg","157.jpg","158.jpg","159.jpg","161.jpg","162.jpg","164.jpg","165.jpg","166.jpg","167.jpg","168.jpg","169.jpg","170.jpg","171.jpg","172.jpg","173.jpg","174.jpg","175.jpg","176.jpg","178.jpg","179.jpg","180.jpg","181.jpg","182.jpg","183.jpg","186.jpg","189.jpg","190.jpg","192.jpg","193.jpg","194.jpg","197.jpg","198.jpg","200.jpg","201.jpg","202.jpg","203.jpg","205.jpg","206.jpg","207.jpg","208.jpg","210.jpg","213.jpg","214.jpg","215.jpg","216.jpg","218.jpg","219.jpg","220.jpg","221.jpg","222.jpg","223.jpg","224.jpg","227.jpg","0.png","1.png","2.png","3.png","5.png","6.png","9.png","10.png","11.png","12.png","14.png","16.png","19.png","20.png","21.png","22.png","23.png","24.png","26.png","27.png","28.png","29.png","30.png","31.png","32.png","33.png","34.png","37.png","39.png","40.png","41.png","42.png","43.png","44.png","45.png","48.png","49.png","50.png","51.png","52.png","53.png","57.png","58.png","59.png","64.png","66.png","67.png","68.png","69.png","70.png","71.png","72.png","76.png","78.png","79.png","81.png","82.png","85.png","86.png","87.png","89.png","95.png","98.png","100.png","101.png","102.png","105.png","106.png","107.png","109.png","110.png","111.png","112.png","113.png","114.png","115.png","116.png","118.png","119.png","120.png","121.png","122.png","123.png","126.png","128.png","130.png","134.png","136.png","138.png","139.png","140.png","142.png","145.png","146.png","149.png","150.png","151.png","152.png","153.png","154.png","155.png","156.png","157.png","158.png","159.png","160.png","163.png","164.png","165.png","166.png","167.png","168.png","169.png","170.png","171.png","172.png","173.png","174.png","178.png","179.png","180.png","181.png","182.png","184.png","186.png","188.png","190.png","192.png","193.png","194.png","195.png","196.png","197.png","198.png","200.png","202.png","203.png","205.png","206.png","207.png","209.png","212.png","213.png","214.png","216.png","217.png","218.png","219.png","220.png","221.png","222.png","223.png","224.png","225.png","226.png","229.png","231.png","232.png","233.png","234.png","235.png","237.png","238.png","239.png","240.png","241.png","242.png","244.png","245.png","246.png","247.png","248.png","249.png","250.png","253.png","254.png","255.png","256.png","257.png","258.png","259.png","260.png","262.png","268.png","0.gif","1.gif","2.gif","3.gif","4.gif","5.gif","6.gif","7.gif","8.gif","9.gif","10.gif","12.gif","13.gif","14.gif","15.gif","16.gif","18.gif","19.gif","20.gif","21.gif","22.gif","23.gif","24.gif","28.gif","29.gif","30.gif","33.gif","34.gif","35.gif","36.gif","37.gif","39.gif","40.gif","42.gif","44.gif","45.gif","46.gif","48.gif","50.gif","52.gif","54.gif","55.gif","57.gif","58.gif","59.gif","60.gif","61.gif","63.gif","64.gif","66.gif","67.gif","68.gif","69.gif","70.gif","72.gif","73.gif","75.gif","76.gif","77.gif","78.gif","80.gif","81.gif","82.gif","83.gif","86.gif","87.gif","88.gif","92.gif","93.gif","94.gif","95.gif","96.gif","97.gif","98.gif","99.gif","100.gif","101.gif","102.gif","103.gif","104.gif","105.gif","106.gif","108.gif","109.gif","110.gif","111.gif","112.gif","113.gif","115.gif","116.gif","117.gif","118.gif","119.gif","120.gif","122.gif","123.gif","124.gif","127.gif","129.gif","130.gif","131.gif","134.gif","135.gif","136.gif","138.gif","139.gif","141.gif","144.gif","146.gif","148.gif","149.gif","153.gif","154.gif","155.gif","157.gif","158.gif","159.gif","160.gif","161.gif","162.gif","164.gif","166.gif","167.gif","168.gif","169.gif","170.gif","171.gif","172.gif","173.gif","174.gif","175.gif","176.gif","177.gif","178.gif","181.gif","182.gif","183.gif","185.gif","186.gif","187.gif","188.gif","189.gif","190.gif","191.gif","192.gif","193.gif","195.gif","196.gif","197.gif","200.gif","201.gif","202.gif","203.gif","204.gif","205.gif","206.gif","207.gif","208.gif","209.gif","210.gif","211.gif","212.gif","213.gif","214.gif","215.gif","216.gif","217.gif","219.gif","220.gif","221.gif","222.gif","224.gif","225.gif","226.gif","227.gif","228.gif","230.gif","232.gif","233.gif","234.gif","235.gif","238.gif","240.gif","241.gif","243.gif","244.gif","245.gif","246.gif","247.gif","249.gif","250.gif","251.gif","253.gif"], - init: function() { - if (Conf['Custom Board Titles']) { - this.db = new DataBoard('customTitles', null, true); - } - $.asap((function() { - return d.body; - }), function() { - return $.asap((function() { - return $('hr'); - }), Banner.ready); - }); - if (g.BOARD.ID !== 'f') { - return Main.ready(function() { - return $.queueTask(Banner.load); - }); - } - }, - ready: function() { - var banner, children; - banner = $(".boardBanner"); - children = banner.children; - if (g.BOARD.ID !== 'f' && g.VIEW === 'thread' && Conf['Remove Thread Excerpt']) { - Banner.setTitle(children[1].textContent); - } - children[0].title = "Click to change"; - $.on(children[0], 'click', Banner.cb.toggle); - if (Conf['Custom Board Titles']) { - Banner.custom(children[1]); - if (children[2]) { - return Banner.custom(children[2]); - } - } - }, - load: function() { - var bannerCnt, img; - bannerCnt = $.id('bannerCnt'); - if (!bannerCnt.firstChild) { - img = $.el('img', { - alt: '4chan', - src: '//s.4cdn.org/image/title/' + bannerCnt.dataset.src - }); - return $.add(bannerCnt, img); - } - }, - setTitle: function(title) { - if (Unread.title != null) { - Unread.title = title; - return Unread.update(); - } else { - return d.title = title; - } - }, - cb: { - toggle: function() { - var banner, i, ref; - if (!((ref = Banner.choices) != null ? ref.length : void 0)) { - Banner.choices = Banner.banners.slice(); - } - i = Math.floor(Banner.choices.length * Math.random()); - banner = Banner.choices.splice(i, 1); - return $('img', this.parentNode).src = "//s.4cdn.org/image/title/" + banner; - }, - click: function(e) { - var base1, br, k, len1, name1, ref; - if (!(e.ctrlKey || e.metaKey)) { - return; - } - if ((base1 = Banner.original)[name1 = this.className] == null) { - base1[name1] = this.cloneNode(true); - } - this.contentEditable = true; - ref = $$('br', this); - for (k = 0, len1 = ref.length; k < len1; k++) { - br = ref[k]; - $.replace(br, $.tn('\n')); - } - return this.focus(); - }, - keydown: function(e) { - e.stopPropagation(); - if (!e.shiftKey && e.keyCode === 13) { - return this.blur(); - } - }, - blur: function() { - var br, k, len1, ref; - ref = $$('br', this); - for (k = 0, len1 = ref.length; k < len1; k++) { - br = ref[k]; - $.replace(br, $.tn('\n')); - } - if (this.textContent = this.textContent.replace(/\n*$/, '')) { - this.contentEditable = false; - return Banner.db.set({ - boardID: g.BOARD.ID, - threadID: this.className, - val: { - title: this.textContent, - orig: Banner.original[this.className].textContent - } - }); - } else { - $.rmAll(this); - $.add(this, slice.call(Banner.original[this.className].cloneNode(true).childNodes)); - return Banner.db["delete"]({ - boardID: g.BOARD.ID, - threadID: this.className - }); - } - } - }, - original: {}, - custom: function(child) { - var className, data, event, items, k, len1, ref, string, string2; - className = child.className; - child.title = "Ctrl/\u2318+click to edit board " + (className.slice(5).toLowerCase()); - child.spellcheck = false; - ref = ['click', 'keydown', 'blur']; - for (k = 0, len1 = ref.length; k < len1; k++) { - event = ref[k]; - $.on(child, event, Banner.cb[event]); - } - string = g.BOARD + "." + className; - string2 = string + ".orig"; - items = {}; - items[string] = ''; - items[string2] = child.textContent; - $.get(items, function(items) { - if (items[string]) { - Banner.db.set({ - boardID: g.BOARD.ID, - threadID: className, - val: { - title: items[string], - orig: items[string2] - } - }); - } - return $["delete"]([string, string2]); - }); - if (data = Banner.db.get({ - boardID: g.BOARD.ID, - threadID: className - })) { - if (Conf['Persistent Custom Board Titles'] || data.orig === child.textContent) { - Banner.original[className] = child.cloneNode(true); - return child.textContent = data.title; - } else { - return Banner.db["delete"]({ - boardID: g.BOARD.ID, - threadID: className - }); - } - } - } - }; - - CatalogLinks = { - init: function() { - var el, input, selector; - if ((Conf['External Catalog'] || Conf['JSON Index']) && !(Conf['JSON Index'] && g.VIEW === 'index')) { - selector = (function() { - switch (g.VIEW) { - case 'thread': - case 'archive': - return '.navLinks.desktop > a'; - case 'catalog': - return '.navLinks > :first-child > a'; - case 'index': - return '#ctrl-top > a, .cataloglink > a'; - } - })(); - $.ready(function() { - var catalogLink, k, len1, link, ref; - ref = $$(selector); - for (k = 0, len1 = ref.length; k < len1; k++) { - link = ref[k]; - switch (link.pathname.replace(/\/+/g, '/')) { - case "/" + g.BOARD + "/": - if (Conf['JSON Index']) { - link.textContent = 'Index'; - } - link.href = CatalogLinks.index(); - break; - case "/" + g.BOARD + "/catalog": - link.href = CatalogLinks.catalog(); - } - if (g.VIEW === 'catalog' && Conf['JSON Index'] && Conf['Use 4chan X Catalog']) { - catalogLink = link.parentNode.cloneNode(true); - catalogLink.firstElementChild.textContent = '4chan X Catalog'; - catalogLink.firstElementChild.href = CatalogLinks.catalog(); - $.after(link.parentNode, [$.tn(' '), catalogLink]); - } - } - }); - } - if (Conf['JSON Index'] && Conf['Use 4chan X Catalog']) { - Post.callbacks.push({ - name: 'Catalog Link Rewrite', - cb: this.node - }); - CatalogThread.callbacks.push({ - name: 'Catalog Link Rewrite', - cb: this.node - }); - } - if (Conf['Catalog Links']) { - CatalogLinks.el = el = UI.checkbox('Header catalog links', 'Catalog Links'); - el.id = 'toggleCatalog'; - input = $('input', el); - $.on(input, 'change', this.toggle); - $.sync('Header catalog links', CatalogLinks.set); - return Header.menu.addEntry({ - el: el, - order: 95 - }); - } - }, - node: function() { - var a, k, len1, m, ref; - ref = $$('a', this.nodes.comment); - for (k = 0, len1 = ref.length; k < len1; k++) { - a = ref[k]; - if (m = a.href.match(/^https?:\/\/boards\.4chan\.org\/([^\/]+)\/catalog(#s=.*)?/)) { - a.href = "//boards.4chan.org/" + m[1] + "/" + (m[2] || '#catalog'); - } - } - }, - initBoardList: function() { - if (!CatalogLinks.el) { - return; - } - return CatalogLinks.set(Conf['Header catalog links']); - }, - toggle: function() { - $.event('CloseMenu'); - $.set('Header catalog links', this.checked); - return CatalogLinks.set(this.checked); - }, - set: function(useCatalog) { - var a, board, k, len1, ref, ref1; - ref = $$('a:not([data-only])', Header.boardList).concat($$('a', Header.bottomBoardList)); - for (k = 0, len1 = ref.length; k < len1; k++) { - a = ref[k]; - if (((ref1 = a.hostname) !== 'boards.4chan.org' && ref1 !== 'catalog.neet.tv') || !(board = a.pathname.split('/')[1]) || (board === 'f' || board === 'status' || board === '4chan') || a.pathname.split('/')[2] === 'archive' || $.hasClass(a, 'external')) { - continue; - } - a.href = useCatalog ? CatalogLinks.catalog(board) : "/" + board + "/"; - if (a.dataset.indexOptions && a.hostname === 'boards.4chan.org' && a.pathname.split('/')[2] === '') { - a.href += (a.hash ? '/' : '#') + a.dataset.indexOptions; - } - } - CatalogLinks.el.title = "Turn catalog links " + (useCatalog ? 'off' : 'on') + "."; - return $('input', CatalogLinks.el).checked = useCatalog; - }, - catalog: function(board) { - if (board == null) { - board = g.BOARD.ID; - } - if (Conf['External Catalog'] && (board === 'a' || board === 'c' || board === 'g' || board === 'biz' || board === 'k' || board === 'm' || board === 'o' || board === 'p' || board === 'v' || board === 'vg' || board === 'vr' || board === 'w' || board === 'wg' || board === 'cm' || board === '3' || board === 'adv' || board === 'an' || board === 'asp' || board === 'cgl' || board === 'ck' || board === 'co' || board === 'diy' || board === 'fa' || board === 'fit' || board === 'gd' || board === 'int' || board === 'jp' || board === 'lit' || board === 'mlp' || board === 'mu' || board === 'n' || board === 'out' || board === 'po' || board === 'sci' || board === 'sp' || board === 'tg' || board === 'toy' || board === 'trv' || board === 'tv' || board === 'vp' || board === 'wsg' || board === 'x' || board === 'f' || board === 'pol' || board === 's4s' || board === 'lgbt')) { - return "http://catalog.neet.tv/" + board + "/"; - } else if (Conf['JSON Index'] && Conf['Use 4chan X Catalog']) { - if (g.BOARD.ID === board && g.VIEW === 'index') { - return '#catalog'; - } else { - return "/" + board + "/#catalog"; - } - } else { - return "/" + board + "/catalog"; - } - }, - index: function(board) { - if (board == null) { - board = g.BOARD.ID; - } - if (Conf['JSON Index'] && board !== 'f') { - if (g.BOARD.ID === board && g.VIEW === 'index') { - return '#index'; - } else { - return "/" + board + "/#index"; - } - } else { - return "/" + board + "/"; - } - } - }; - - CustomCSS = { - init: function() { - if (!Conf['Custom CSS']) { - return; - } - return this.addStyle(); - }, - addStyle: function() { - return this.style = $.addStyle(Conf['usercss'], 'custom-css', '#fourchanx-css'); - }, - rmStyle: function() { - if (this.style) { - $.rm(this.style); - return delete this.style; - } - }, - update: function() { - if (!this.style) { - return this.addStyle(); - } - return this.style.textContent = Conf['usercss']; - } - }; - - ExpandComment = { - init: function() { - if (g.VIEW !== 'index' || !Conf['Comment Expansion'] || Conf['JSON Index']) { - return; - } - if (g.BOARD.ID === 'g') { - this.callbacks.push(Fourchan.code); - } - if (g.BOARD.ID === 'sci') { - this.callbacks.push(Fourchan.math); - } - return Post.callbacks.push({ - name: 'Comment Expansion', - cb: this.node - }); - }, - node: function() { - var a; - if (a = $('.abbr > a:not([onclick])', this.nodes.comment)) { - return $.on(a, 'click', ExpandComment.cb); - } - }, - callbacks: [], - cb: function(e) { - e.preventDefault(); - return ExpandComment.expand(Get.postFromNode(this)); - }, - expand: function(post) { - var a; - if (post.nodes.longComment && !post.nodes.longComment.parentNode) { - $.replace(post.nodes.shortComment, post.nodes.longComment); - post.nodes.comment = post.nodes.longComment; - return; - } - if (!(a = $('.abbr > a', post.nodes.comment))) { - return; - } - a.textContent = "Post No." + post + " Loading..."; - return $.cache("//a.4cdn.org" + (a.pathname.split(/\/+/).splice(0, 4).join('/')) + ".json", function() { - return ExpandComment.parse(this, a, post); - }); - }, - contract: function(post) { - var a; - if (!post.nodes.shortComment) { - return; - } - a = $('.abbr > a', post.nodes.shortComment); - a.textContent = 'here'; - $.replace(post.nodes.longComment, post.nodes.shortComment); - return post.nodes.comment = post.nodes.shortComment; - }, - parse: function(req, a, post) { - var callback, clone, comment, href, k, len1, len2, len3, postObj, posts, q, quote, ref, ref1, spoilerRange, status, u; - status = req.status; - if (status !== 200 && status !== 304) { - a.textContent = "Error " + req.statusText + " (" + status + ")"; - return; - } - posts = req.response.posts; - if (spoilerRange = posts[0].custom_spoiler) { - Build.spoilerRange[g.BOARD] = spoilerRange; - } - for (k = 0, len1 = posts.length; k < len1; k++) { - postObj = posts[k]; - if (postObj.no === post.ID) { - break; - } - } - if (postObj.no !== post.ID) { - a.textContent = "Post No." + post + " not found."; - return; - } - comment = post.nodes.comment; - clone = comment.cloneNode(false); - clone.innerHTML = postObj.com; - ref = $$('.quotelink', clone); - for (q = 0, len2 = ref.length; q < len2; q++) { - quote = ref[q]; - href = quote.getAttribute('href'); - if (href[0] === '/') { - continue; - } - if (href[0] === '#') { - quote.href = "" + (a.pathname.split(/\/+/).splice(0, 4).join('/')) + href; - } else { - quote.href = (a.pathname.split(/\/+/).splice(0, 3).join('/')) + "/" + href; - } - } - post.nodes.shortComment = comment; - $.replace(comment, clone); - post.nodes.comment = post.nodes.longComment = clone; - post.parseComment(); - post.parseQuotes(); - ref1 = ExpandComment.callbacks; - for (u = 0, len3 = ref1.length; u < len3; u++) { - callback = ref1[u]; - callback.call(post); - } - } - }; - - ExpandThread = { - statuses: {}, - init: function() { - if (g.VIEW === 'thread' || !Conf['Thread Expansion']) { - return; - } - if (Conf['JSON Index']) { - return $.on(d, 'IndexRefresh', this.onIndexRefresh); - } else { - return Thread.callbacks.push({ - name: 'Expand Thread', - cb: function() { - return ExpandThread.setButton(this); - } - }); - } - }, - setButton: function(thread) { - var a; - if (!(a = $.x('following-sibling::*[contains(@class,"summary")][1]', thread.OP.nodes.root))) { - return; - } - a.textContent = Build.summaryText.apply(Build, ['+'].concat(slice.call(a.textContent.match(/\d+/g)))); - a.style.cursor = 'pointer'; - return $.on(a, 'click', ExpandThread.cbToggle); - }, - disconnect: function(refresh) { - var ref, ref1, status, threadID; - if (g.VIEW === 'thread' || !Conf['Thread Expansion']) { - return; - } - ref = ExpandThread.statuses; - for (threadID in ref) { - status = ref[threadID]; - if ((ref1 = status.req) != null) { - ref1.abort(); - } - delete ExpandThread.statuses[threadID]; - } - if (!refresh) { - return $.off(d, 'IndexRefresh', this.onIndexRefresh); - } - }, - onIndexRefresh: function() { - ExpandThread.disconnect(true); - return g.BOARD.threads.forEach(function(thread) { - return ExpandThread.setButton(thread); - }); - }, - cbToggle: function(e) { - if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0) { - return; - } - e.preventDefault(); - return ExpandThread.toggle(Get.threadFromNode(this)); - }, - toggle: function(thread) { - var a, threadRoot; - threadRoot = thread.OP.nodes.root.parentNode; - if (!(a = $('.summary', threadRoot))) { - return; - } - if (thread.ID in ExpandThread.statuses) { - return ExpandThread.contract(thread, a, threadRoot); - } else { - return ExpandThread.expand(thread, a); - } - }, - expand: function(thread, a) { - var status; - ExpandThread.statuses[thread] = status = {}; - a.textContent = Build.summaryText.apply(Build, ['...'].concat(slice.call(a.textContent.match(/\d+/g)))); - return status.req = $.cache("//a.4cdn.org/" + thread.board + "/thread/" + thread + ".json", function() { - delete status.req; - return ExpandThread.parse(this, thread, a); - }); - }, - contract: function(thread, a, threadRoot) { - var filesCount, inlined, k, len1, num, postsCount, replies, reply, status; - status = ExpandThread.statuses[thread]; - delete ExpandThread.statuses[thread]; - if (status.req) { - status.req.abort(); - if (a) { - a.textContent = Build.summaryText.apply(Build, ['+'].concat(slice.call(a.textContent.match(/\d+/g)))); - } - return; - } - replies = $$('.thread > .replyContainer', threadRoot); - if (!Conf['JSON Index'] || Conf['Show Replies']) { - num = (function() { - if (thread.isSticky) { - return 1; - } else { - switch (g.BOARD.ID) { - case 'b': - case 'vg': - return 3; - case 't': - return 1; - default: - return 5; - } - } - })(); - replies = replies.slice(0, -num); - } - postsCount = 0; - filesCount = 0; - for (k = 0, len1 = replies.length; k < len1; k++) { - reply = replies[k]; - if (Conf['Quote Inlining']) { - while (inlined = $('.inlined', reply)) { - inlined.click(); - } - } - postsCount++; - if ('file' in Get.postFromRoot(reply)) { - filesCount++; - } - $.rm(reply); - } - return a.textContent = Build.summaryText('+', postsCount, filesCount); - }, - parse: function(req, thread, a) { - var filesCount, k, len1, post, postData, posts, postsCount, postsRoot, ref, ref1, root; - if ((ref = req.status) !== 200 && ref !== 304) { - a.textContent = "Error " + req.statusText + " (" + req.status + ")"; - return; - } - Build.spoilerRange[thread.board] = req.response.posts[0].custom_spoiler; - posts = []; - postsRoot = []; - filesCount = 0; - ref1 = req.response.posts; - for (k = 0, len1 = ref1.length; k < len1; k++) { - postData = ref1[k]; - if (postData.no === thread.ID) { - continue; - } - if ((post = thread.posts[postData.no]) && !post.isFetchedQuote) { - if ('file' in post) { - filesCount++; - } - postsRoot.push(post.nodes.root); - continue; - } - root = Build.postFromObject(postData, thread.board.ID); - post = new Post(root, thread, thread.board); - if ('file' in post) { - filesCount++; - } - posts.push(post); - postsRoot.push(root); - } - Main.callbackNodes(Post, posts); - $.after(a, postsRoot); - $.event('PostsInserted'); - postsCount = postsRoot.length; - return a.textContent = Build.summaryText('-', postsCount, filesCount); - } - }; - - FileInfo = { - init: function() { - var ref; - if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['File Info Formatting']) { - return; - } - return Post.callbacks.push({ - name: 'File Info Formatting', - cb: this.node - }); - }, - node: function() { - var info, oldInfo; - if (!this.file || this.isClone) { - return; - } - oldInfo = $.el('span', { - className: 'fileText-original' - }); - $.prepend(this.file.link.parentNode, oldInfo); - $.add(oldInfo, [this.file.link.previousSibling, this.file.link, this.file.link.nextSibling]); - info = $.el('span', { - className: 'file-info' - }); - FileInfo.format(Conf['fileInfo'], this, info); - return $.prepend(this.file.text, info); - }, - format: function(formatString, post, outputNode) { - var output; - output = []; - formatString.replace(/%(.)|[^%]+/g, function(s, c) { - output.push(c in FileInfo.formatters ? FileInfo.formatters[c].call(post) : { - innerHTML: E(s) - }); - return ''; - }); - return $.extend(outputNode, { - innerHTML: E.cat(output) - }); - }, - formatters: { - t: function() { - return { - innerHTML: E(this.file.url.match(/[^/]*$/)[0]) - }; - }, - T: function() { - return { - innerHTML: "" + FileInfo.formatters.t.call(this).innerHTML + "" - }; - }, - l: function() { - return { - innerHTML: "" + FileInfo.formatters.n.call(this).innerHTML + "" - }; - }, - L: function() { - return { - innerHTML: "" + FileInfo.formatters.N.call(this).innerHTML + "" - }; - }, - n: function() { - var fullname, shortname; - fullname = this.file.name; - shortname = Build.shortFilename(this.file.name, this.isReply); - if (fullname === shortname) { - return { - innerHTML: E(fullname) - }; - } else { - return { - innerHTML: "" + E(shortname) + "" + E(fullname) + "" - }; - } - }, - N: function() { - return { - innerHTML: E(this.file.name) - }; - }, - p: function() { - return { - innerHTML: (this.file.isSpoiler ? "Spoiler, " : "") - }; - }, - s: function() { - return { - innerHTML: E(this.file.size) - }; - }, - B: function() { - return { - innerHTML: E(Math.round(this.file.sizeInBytes)) + " Bytes" - }; - }, - K: function() { - return { - innerHTML: E(Math.round(this.file.sizeInBytes/1024)) + " KB" - }; - }, - M: function() { - return { - innerHTML: E(Math.round(this.file.sizeInBytes/1048576*100)/100) + " MB" - }; - }, - r: function() { - return { - innerHTML: E(this.file.dimensions || "PDF") - }; - }, - g: function() { - return { - innerHTML: (this.file.tag ? ", " + E(this.file.tag) : "") - }; - }, - '%': function() { - return { - innerHTML: "%" - }; - } - } - }; - - Flash = { - init: function() { - if (g.BOARD.ID === 'f' && Conf['Enable Native Flash Embedding']) { - return $.ready(Flash.initReady); - } - }, - initReady: function() { - if ($.hasStorage) { - return $.global(function() { - if (JSON.parse(localStorage['4chan-settings'] || '{}').disableAll) { - return window.SWFEmbed.init(); - } - }); - } else { - if (g.VIEW === 'thread') { - $.global(function() { - return window.Main.tid = location.pathname.split(/\/+/)[3]; - }); - } - return $.global(function() { - return window.SWFEmbed.init(); - }); - } - } - }; - - Fourchan = { - init: function() { - var ref; - if ((ref = g.VIEW) !== 'index' && ref !== 'thread') { - return; - } - if (g.BOARD.ID === 'g') { - $.on(window, 'prettyprint:cb', function(e) { - var post, pre; - if (!(post = g.posts[e.detail.ID])) { - return; - } - if (!(pre = $$('.prettyprint', post.nodes.comment)[e.detail.i])) { - return; - } - if (!$.hasClass(pre, 'prettyprinted')) { - pre.innerHTML = e.detail.html; - return $.addClass(pre, 'prettyprinted'); - } - }); - $.globalEval('window.addEventListener(\'prettyprint\', function(e) {\n window.dispatchEvent(new CustomEvent(\'prettyprint:cb\', {\n detail: {\n ID: e.detail.ID,\n i: e.detail.i,\n html: prettyPrintOne(e.detail.html)\n }\n }));\n}, false);'); - Post.callbacks.push({ - name: 'Parse /g/ code', - cb: this.code - }); - } - if (g.BOARD.ID === 'sci') { - $.global(function() { - return window.addEventListener('mathjax', function(e) { - if (window.MathJax) { - return window.MathJax.Hub.Queue(['Typeset', window.MathJax.Hub, e.target]); - } else { - if (!document.querySelector('script[src^="//cdn.mathjax.org/"]')) { - window.loadMathJax(); - window.loadMathJax = function() {}; - } - if (!e.target.classList.contains('postMessage')) { - return document.querySelector('script[src^="//cdn.mathjax.org/"]').addEventListener('load', function() { - return window.MathJax.Hub.Queue(['Typeset', window.MathJax.Hub, e.target]); - }, false); - } - } - }, false); - }); - Post.callbacks.push({ - name: 'Parse /sci/ math', - cb: this.math - }); - CatalogThread.callbacks.push({ - name: 'Parse /sci/ math', - cb: this.math - }); - } - return Main.ready(function() { - return $.global(function() { - var k, len1, node, ref1; - window.clickable_ids = false; - ref1 = document.querySelectorAll('.posteruid, .capcode'); - for (k = 0, len1 = ref1.length; k < len1; k++) { - node = ref1[k]; - node.removeEventListener('click', window.idClick, false); - } - }); - }); - }, - code: function() { - if (this.isClone) { - return; - } - return $.ready((function(_this) { - return function() { - var i, k, len1, pre, ref; - ref = $$('.prettyprint', _this.nodes.comment); - for (i = k = 0, len1 = ref.length; k < len1; i = ++k) { - pre = ref[i]; - if (!$.hasClass(pre, 'prettyprinted')) { - $.event('prettyprint', { - ID: _this.fullID, - i: i, - html: pre.innerHTML - }, window); - } - } - }; - })(this)); - }, - math: function() { - var cb, k, len1, wbr, wbrs; - if (!/\[(math|eqn)\]/.test(this.nodes.comment.textContent)) { - return; - } - if ((wbrs = $$('wbr', this.nodes.comment)).length) { - for (k = 0, len1 = wbrs.length; k < len1; k++) { - wbr = wbrs[k]; - $.rm(wbr); - } - this.nodes.comment.normalize(); - } - cb = (function(_this) { - return function() { - if (!doc.contains(_this.nodes.comment)) { - return; - } - $.off(d, 'PostsInserted', cb); - return $.event('mathjax', null, _this.nodes.comment); - }; - })(this); - $.on(d, 'PostsInserted', cb); - return cb(); - } - }; - - IDColor = { - init: function() { - var ref; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Color User IDs'])) { - return; - } - this.ids = { - Heaven: [0, 0, 0, '#fff'] - }; - return Post.callbacks.push({ - name: 'Color User IDs', - cb: this.node - }); - }, - node: function() { - var rgb, span, style, uid; - if (this.isClone || !((uid = this.info.uniqueID) && (span = $('span.hand', this.nodes.uniqueID)))) { - return; - } - rgb = IDColor.ids[uid] || IDColor.compute(uid); - style = span.style; - style.color = rgb[3]; - style.backgroundColor = "rgb(" + rgb[0] + "," + rgb[1] + "," + rgb[2] + ")"; - return $.addClass(span, 'painted'); - }, - compute: function(uid) { - var hash, rgb; - hash = IDColor.hash(uid); - rgb = [(hash >> 24) & 0xFF, (hash >> 16) & 0xFF, (hash >> 8) & 0xFF]; - rgb.push((rgb[0] * 0.299 + rgb[1] * 0.587 + rgb[2] * 0.114) > 125 ? '#000' : '#fff'); - return this.ids[uid] = rgb; - }, - hash: function(uid) { - var i, msg; - msg = 0; - i = 0; - while (i < 8) { - msg = (msg << 5) - msg + uid.charCodeAt(i++); - } - return msg; - } - }; - - IDHighlight = { - init: function() { - var ref; - if ((ref = g.VIEW) !== 'index' && ref !== 'thread') { - return; - } - return Post.callbacks.push({ - name: 'Highlight by User ID', - cb: this.node - }); - }, - uniqueID: null, - node: function() { - if (this.nodes.uniqueID) { - $.on(this.nodes.uniqueID, 'click', IDHighlight.click(this)); - } - if (this.nodes.capcode) { - $.on(this.nodes.capcode, 'click', IDHighlight.click(this)); - } - if (!this.isClone) { - return IDHighlight.set(this); - } - }, - set: function(post) { - var match; - match = (post.info.uniqueID || post.info.capcode) === IDHighlight.uniqueID; - return $[match ? 'addClass' : 'rmClass'](post.nodes.post, 'highlight'); - }, - click: function(post) { - return function() { - var uniqueID; - uniqueID = post.info.uniqueID || post.info.capcode; - IDHighlight.uniqueID = IDHighlight.uniqueID === uniqueID ? null : uniqueID; - return g.posts.forEach(IDHighlight.set); - }; - } - }; - - Keybinds = { - init: function() { - var hotkey, init; - if (!Conf['Keybinds']) { - return; - } - for (hotkey in Config.hotkeys) { - $.sync(hotkey, Keybinds.sync); - } - init = function() { - var k, len1, node, ref; - $.off(d, '4chanXInitFinished', init); - $.on(d, 'keydown', Keybinds.keydown); - ref = $$('[accesskey]'); - for (k = 0, len1 = ref.length; k < len1; k++) { - node = ref[k]; - node.removeAttribute('accesskey'); - } - }; - return $.on(d, '4chanXInitFinished', init); - }, - sync: function(key, hotkey) { - return Conf[hotkey] = key; - }, - keydown: function(e) { - var form, k, key, len1, notification, notifications, op, ref, ref1, ref2, ref3, ref4, ref5, searchInput, target, thread, threadRoot; - if (!(key = Keybinds.keyCode(e))) { - return; - } - target = e.target; - if ((ref = target.nodeName) === 'INPUT' || ref === 'TEXTAREA') { - if (!(/(Esc|Alt|Ctrl|Meta|Shift\+\w{2,})/.test(key) && !/^Alt\+(\d|Up|Down|Left|Right)$/.test(key))) { - return; - } - } - if (!(((ref1 = g.VIEW) !== 'index' && ref1 !== 'thread') || g.VIEW === 'index' && Conf['JSON Index'] && Conf['Index Mode'] === 'catalog' || g.VIEW === 'index' && g.BOARD.ID === 'f')) { - threadRoot = Nav.getThread(); - if (op = $('.op', threadRoot)) { - thread = Get.postFromNode(op).thread; - } - } - switch (key) { - case Conf['Toggle board list']: - if (!Conf['Custom Board Navigation']) { - return; - } - Header.toggleBoardList(); - break; - case Conf['Toggle header']: - Header.toggleBarVisibility(); - break; - case Conf['Open empty QR']: - if (!QR.postingIsEnabled) { - return; - } - Keybinds.qr(); - break; - case Conf['Open QR']: - if (!(QR.postingIsEnabled && threadRoot)) { - return; - } - Keybinds.qr(threadRoot); - break; - case Conf['Open settings']: - Settings.open(); - break; - case Conf['Close']: - if (Settings.dialog) { - Settings.close(); - } else if ((notifications = $$('.notification')).length) { - for (k = 0, len1 = notifications.length; k < len1; k++) { - notification = notifications[k]; - $('.close', notification).click(); - } - } else if (QR.nodes && !(QR.nodes.el.hidden || window.getComputedStyle(QR.nodes.form).display === 'none')) { - if (Conf['Persistent QR']) { - QR.hide(); - } else { - QR.close(); - } - } else if (Embedding.lastEmbed) { - Embedding.closeFloat(); - } else { - return; - } - break; - case Conf['Spoiler tags']: - if (target.nodeName !== 'TEXTAREA') { - return; - } - Keybinds.tags('spoiler', target); - break; - case Conf['Code tags']: - if (target.nodeName !== 'TEXTAREA') { - return; - } - Keybinds.tags('code', target); - break; - case Conf['Eqn tags']: - if (target.nodeName !== 'TEXTAREA') { - return; - } - Keybinds.tags('eqn', target); - break; - case Conf['Math tags']: - if (target.nodeName !== 'TEXTAREA') { - return; - } - Keybinds.tags('math', target); - break; - case Conf['SJIS tags']: - if (target.nodeName !== 'TEXTAREA') { - return; - } - Keybinds.tags('sjis', target); - break; - case Conf['Toggle sage']: - if (!(QR.nodes && !QR.nodes.el.hidden)) { - return; - } - Keybinds.sage(); - break; - case Conf['Submit QR']: - if (!(QR.nodes && !QR.nodes.el.hidden)) { - return; - } - if (!QR.status()) { - QR.submit(); - } - break; - case Conf['Update']: - switch (g.VIEW) { - case 'thread': - if (!Conf['Thread Updater']) { - return; - } - ThreadUpdater.update(); - break; - case 'index': - if (!(Conf['JSON Index'] && g.BOARD.ID !== 'f')) { - return; - } - Index.update(); - break; - default: - return; - } - break; - case Conf['Watch']: - if (!(ThreadWatcher.enabled && thread)) { - return; - } - ThreadWatcher.toggle(thread); - break; - case Conf['Update thread watcher']: - if (!ThreadWatcher.enabled) { - return; - } - ThreadWatcher.buttonFetchAll(); - break; - case Conf['Expand image']: - if (!(ImageExpand.enabled && threadRoot)) { - return; - } - Keybinds.img(threadRoot); - break; - case Conf['Expand images']: - if (!(ImageExpand.enabled && threadRoot)) { - return; - } - Keybinds.img(threadRoot, true); - break; - case Conf['Open Gallery']: - if (!Gallery.enabled) { - return; - } - Gallery.cb.toggle(); - break; - case Conf['fappeTyme']: - if (!(Conf['Fappe Tyme'] && ((ref2 = g.VIEW) === 'index' || ref2 === 'thread'))) { - return; - } - FappeTyme.toggle('fappe'); - break; - case Conf['werkTyme']: - if (!(Conf['Werk Tyme'] && ((ref3 = g.VIEW) === 'index' || ref3 === 'thread'))) { - return; - } - FappeTyme.toggle('werk'); - break; - case Conf['Front page']: - if (Conf['JSON Index'] && g.VIEW === 'index' && g.BOARD.ID !== 'f') { - Index.userPageNav(1); - } else { - window.location = "/" + g.BOARD + "/"; - } - break; - case Conf['Open front page']: - $.open("/" + g.BOARD + "/"); - break; - case Conf['Next page']: - if (!(g.VIEW === 'index' && g.BOARD.ID !== 'f')) { - return; - } - if (Conf['JSON Index']) { - if ((ref4 = Conf['Index Mode']) !== 'paged' && ref4 !== 'infinite') { - return; - } - $('.next button', Index.pagelist).click(); - } else { - if (form = $('.next form')) { - window.location = form.action; - } - } - break; - case Conf['Previous page']: - if (!(g.VIEW === 'index' && g.BOARD.ID !== 'f')) { - return; - } - if (Conf['JSON Index']) { - if ((ref5 = Conf['Index Mode']) !== 'paged' && ref5 !== 'infinite') { - return; - } - $('.prev button', Index.pagelist).click(); - } else { - if (form = $('.prev form')) { - window.location = form.action; - } - } - break; - case Conf['Search form']: - if (!(g.VIEW === 'index' && g.BOARD.ID !== 'f')) { - return; - } - searchInput = Conf['JSON Index'] ? Index.searchInput : $.id('search-box'); - Header.scrollToIfNeeded(searchInput); - searchInput.focus(); - break; - case Conf['Paged mode']: - if (!(Conf['JSON Index'] && g.BOARD.ID !== 'f')) { - return; - } - window.location = g.VIEW === 'index' ? '#paged' : "/" + g.BOARD + "/#paged"; - break; - case Conf['Infinite scrolling mode']: - if (!(Conf['JSON Index'] && g.BOARD.ID !== 'f')) { - return; - } - window.location = g.VIEW === 'index' ? '#infinite' : "/" + g.BOARD + "/#infinite"; - break; - case Conf['All pages mode']: - if (!(Conf['JSON Index'] && g.BOARD.ID !== 'f')) { - return; - } - window.location = g.VIEW === 'index' ? '#all-pages' : "/" + g.BOARD + "/#all-pages"; - break; - case Conf['Open catalog']: - if (g.BOARD.ID === 'f') { - return; - } - window.location = CatalogLinks.catalog(); - break; - case Conf['Cycle sort type']: - if (!(Conf['JSON Index'] && g.VIEW === 'index' && g.BOARD.ID !== 'f')) { - return; - } - Index.cycleSortType(); - break; - case Conf['Next thread']: - if (!(g.VIEW === 'index' && threadRoot)) { - return; - } - Nav.scroll(+1); - break; - case Conf['Previous thread']: - if (!(g.VIEW === 'index' && threadRoot)) { - return; - } - Nav.scroll(-1); - break; - case Conf['Expand thread']: - if (!(g.VIEW === 'index' && threadRoot)) { - return; - } - ExpandThread.toggle(thread); - break; - case Conf['Open thread']: - if (!(g.VIEW === 'index' && threadRoot)) { - return; - } - Keybinds.open(thread); - break; - case Conf['Open thread tab']: - if (!(g.VIEW === 'index' && threadRoot)) { - return; - } - Keybinds.open(thread, true); - break; - case Conf['Next reply']: - if (!threadRoot) { - return; - } - Keybinds.hl(+1, threadRoot); - break; - case Conf['Previous reply']: - if (!threadRoot) { - return; - } - Keybinds.hl(-1, threadRoot); - break; - case Conf['Deselect reply']: - if (!threadRoot) { - return; - } - Keybinds.hl(0, threadRoot); - break; - case Conf['Hide']: - if (!thread) { - return; - } - if (ThreadHiding.db) { - ThreadHiding.toggle(thread); - } - break; - case Conf['Previous Post Quoting You']: - if (!(threadRoot && QuoteYou.db)) { - return; - } - QuoteYou.cb.seek('preceding'); - break; - case Conf['Next Post Quoting You']: - if (!(threadRoot && QuoteYou.db)) { - return; - } - QuoteYou.cb.seek('following'); - break; - default: - return; - } - e.preventDefault(); - return e.stopPropagation(); - }, - keyCode: function(e) { - var kc, key; - key = (function() { - switch (kc = e.keyCode) { - case 8: - return ''; - case 13: - return 'Enter'; - case 27: - return 'Esc'; - case 32: - return 'Space'; - case 37: - return 'Left'; - case 38: - return 'Up'; - case 39: - return 'Right'; - case 40: - return 'Down'; - case 188: - return 'Comma'; - case 190: - return 'Period'; - case 191: - return 'Slash'; - case 59: - case 186: - return 'Semicolon'; - default: - if ((48 <= kc && kc <= 57) || (65 <= kc && kc <= 90)) { - return String.fromCharCode(kc).toLowerCase(); - } else if ((96 <= kc && kc <= 105)) { - return String.fromCharCode(kc - 48).toLowerCase(); - } else { - return null; - } - } - })(); - if (key) { - if (e.altKey) { - key = 'Alt+' + key; - } - if (e.ctrlKey) { - key = 'Ctrl+' + key; - } - if (e.metaKey) { - key = 'Meta+' + key; - } - if (e.shiftKey) { - key = 'Shift+' + key; - } - } - return key; - }, - qr: function(thread) { - QR.open(); - if (thread != null) { - QR.quote.call($('input', $('.post.highlight', thread) || thread)); - } - return QR.nodes.com.focus(); - }, - tags: function(tag, ta) { - var range, selEnd, selStart, supported, value; - supported = (function() { - switch (tag) { - case 'spoiler': - return !!$('.postForm input[name=spoiler]'); - case 'code': - return g.BOARD.ID === 'g'; - case 'math': - case 'eqn': - return g.BOARD.ID === 'sci'; - case 'sjis': - return g.BOARD.ID === 'jp'; - } - })(); - if (!supported) { - new Notice('warning', "[" + tag + "] tags are not supported on /" + g.BOARD + "/.", 20); - } - value = ta.value; - selStart = ta.selectionStart; - selEnd = ta.selectionEnd; - ta.value = value.slice(0, selStart) + ("[" + tag + "]") + value.slice(selStart, selEnd) + ("[/" + tag + "]") + value.slice(selEnd); - range = ("[" + tag + "]").length + selEnd; - ta.setSelectionRange(range, range); - return $.event('input', null, ta); - }, - sage: function() { - var isSage; - isSage = /sage/i.test(QR.nodes.email.value); - return QR.nodes.email.value = isSage ? "" : "sage"; - }, - img: function(thread, all) { - var post; - if (all) { - return ImageExpand.cb.toggleAll(); - } else { - post = Get.postFromNode($('.post.highlight', thread) || $('.op', thread)); - return ImageExpand.toggle(post); - } - }, - open: function(thread, tab) { - var url; - if (g.VIEW !== 'index') { - return; - } - url = "/" + thread.board + "/thread/" + thread; - if (tab) { - return $.open(url); - } else { - return location.href = url; - } - }, - hl: function(delta, thread) { - var axis, height, k, len1, next, postEl, replies, reply, root; - postEl = $('.reply.highlight', thread); - if (!delta) { - if (postEl) { - $.rmClass(postEl, 'highlight'); - } - return; - } - if (postEl) { - height = postEl.getBoundingClientRect().height; - if (Header.getTopOf(postEl) >= -height && Header.getBottomOf(postEl) >= -height) { - root = postEl.parentNode; - axis = delta === +1 ? 'following' : 'preceding'; - if (!(next = $.x(axis + "-sibling::div[contains(@class,'replyContainer') and not(@hidden) and not(child::div[@class='stub'])][1]/child::div[contains(@class,'reply')]", root))) { - return; - } - Header.scrollToIfNeeded(next, delta === +1); - this.focus(next); - $.rmClass(postEl, 'highlight'); - return; - } - $.rmClass(postEl, 'highlight'); - } - replies = $$('.reply', thread); - if (delta === -1) { - replies.reverse(); - } - for (k = 0, len1 = replies.length; k < len1; k++) { - reply = replies[k]; - if (delta === +1 && Header.getTopOf(reply) > 0 || delta === -1 && Header.getBottomOf(reply) > 0) { - this.focus(reply); - return; - } - } - }, - focus: function(post) { - return $.addClass(post, 'highlight'); - } - }; - - Nav = { - init: function() { - var append, next, prev, span; - switch (g.VIEW) { - case 'index': - if (!Conf['Index Navigation']) { - return; - } - break; - case 'thread': - if (!Conf['Reply Navigation']) { - return; - } - break; - default: - return; - } - span = $.el('span', { - id: 'navlinks' - }); - prev = $.el('a', { - textContent: 'â–²', - href: 'javascript:;' - }); - next = $.el('a', { - textContent: 'â–¼', - href: 'javascript:;' - }); - $.on(prev, 'click', this.prev); - $.on(next, 'click', this.next); - $.add(span, [prev, $.tn(' '), next]); - append = function() { - $.off(d, '4chanXInitFinished', append); - return $.add(d.body, span); - }; - return $.on(d, '4chanXInitFinished', append); - }, - prev: function() { - if (g.VIEW === 'thread') { - return window.scrollTo(0, 0); - } else { - return Nav.scroll(-1); - } - }, - next: function() { - if (g.VIEW === 'thread') { - return window.scrollTo(0, d.body.scrollHeight); - } else { - return Nav.scroll(+1); - } - }, - getThread: function() { - var k, len1, ref, thread, threadRoot; - ref = $$('.thread'); - for (k = 0, len1 = ref.length; k < len1; k++) { - threadRoot = ref[k]; - thread = Get.threadFromRoot(threadRoot); - if (thread.isHidden && !thread.stub) { - continue; - } - if (Header.getTopOf(threadRoot) >= -threadRoot.getBoundingClientRect().height) { - return threadRoot; - } - } - return $('.board'); - }, - scroll: function(delta) { - var axis, extra, next, ref, thread, top; - if ((ref = d.activeElement) != null) { - ref.blur(); - } - thread = Nav.getThread(); - axis = delta === +1 ? 'following' : 'preceding'; - if (next = $.x(axis + "-sibling::div[contains(@class,'thread') and not(@hidden)][1]", thread)) { - top = Header.getTopOf(thread); - if (delta === +1 && top < 5 || delta === -1 && top > -5) { - thread = next; - } - } - extra = Header.getTopOf(thread) + doc.clientHeight - d.body.getBoundingClientRect().bottom; - if (extra > 0) { - d.body.style.marginBottom = extra + "px"; - } - Header.scrollTo(thread); - if (extra > 0 && !Nav.haveExtra) { - Nav.haveExtra = true; - return $.on(d, 'scroll', Nav.removeExtra); - } - }, - removeExtra: function() { - var extra; - extra = doc.clientHeight - d.body.getBoundingClientRect().bottom; - if (extra > 0) { - return d.body.style.marginBottom = extra + "px"; - } else { - d.body.style.marginBottom = null; - delete Nav.haveExtra; - return $.off(d, 'scroll', Nav.removeExtra); - } - } - }; - - NormalizeURL = { - init: function() { - var pathname; - if (!Conf['Normalize URL']) { - return; - } - pathname = location.pathname.split(/\/+/); - switch (g.VIEW) { - case 'thread': - pathname[2] = 'thread'; - pathname = pathname.slice(0, 4); - break; - case 'index': - pathname = pathname.slice(0, 3); - } - pathname = pathname.join('/'); - if (location.pathname !== pathname) { - return history.replaceState(history.state, '', location.protocol + "//" + location.host + pathname + location.hash); - } - } - }; - - RelativeDates = { - INTERVAL: $.MINUTE / 2, - init: function() { - var ref; - if (((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Relative Post Dates'] && !Conf['Relative Date Title'] || g.VIEW === 'index' && Conf['JSON Index'] && g.BOARD.ID !== 'f') { - this.flush(); - $.on(d, 'visibilitychange ThreadUpdate', this.flush); - } - if (Conf['Relative Post Dates']) { - return Post.callbacks.push({ - name: 'Relative Post Dates', - cb: this.node - }); - } - }, - node: function() { - var dateEl; - dateEl = this.nodes.date; - if (Conf['Relative Date Title']) { - $.on(dateEl, 'mouseover', (function(_this) { - return function() { - return RelativeDates.hover(_this); - }; - })(this)); - return; - } - if (this.isClone) { - return; - } - dateEl.title = dateEl.textContent; - return RelativeDates.update(this); - }, - relative: function(diff, now, date) { - var days, months, number, rounded, unit, years; - unit = (number = diff / $.DAY) >= 1 ? (years = now.getYear() - date.getYear(), months = now.getMonth() - date.getMonth(), days = now.getDate() - date.getDate(), years > 1 ? (number = years - (months < 0 || months === 0 && days < 0), 'year') : years === 1 && (months > 0 || months === 0 && days >= 0) ? (number = years, 'year') : (months = months + 12 * years) > 1 ? (number = months - (days < 0), 'month') : months === 1 && days >= 0 ? (number = months, 'month') : 'day') : (number = diff / $.HOUR) >= 1 ? 'hour' : (number = diff / $.MINUTE) >= 1 ? 'minute' : (number = Math.max(0, diff) / $.SECOND, 'second'); - rounded = Math.round(number); - if (rounded !== 1) { - unit += 's'; - } - return rounded + " " + unit + " ago"; - }, - stale: [], - flush: function() { - var data, k, len1, now, ref; - if (d.hidden) { - return; - } - now = new Date(); - ref = RelativeDates.stale; - for (k = 0, len1 = ref.length; k < len1; k++) { - data = ref[k]; - RelativeDates.update(data, now); - } - RelativeDates.stale = []; - clearTimeout(RelativeDates.timeout); - return RelativeDates.timeout = setTimeout(RelativeDates.flush, RelativeDates.INTERVAL); - }, - hover: function(post) { - var date, diff, now; - date = post.info.date; - now = new Date(); - diff = now - date; - return post.nodes.date.title = RelativeDates.relative(diff, now, date); - }, - update: function(data, now) { - var date, diff, isPost, k, len1, ref, relative, singlePost; - isPost = data instanceof Post; - date = isPost ? data.info.date : new Date(+data.dataset.utc); - now || (now = new Date()); - diff = now - date; - relative = RelativeDates.relative(diff, now, date); - if (isPost) { - ref = [data].concat(data.clones); - for (k = 0, len1 = ref.length; k < len1; k++) { - singlePost = ref[k]; - singlePost.nodes.date.firstChild.textContent = relative; - } - } else { - data.firstChild.textContent = relative; - } - return RelativeDates.setOwnTimeout(diff, data); - }, - setOwnTimeout: function(diff, data) { - var delay; - delay = diff < $.MINUTE ? $.SECOND - (diff + $.SECOND / 2) % $.SECOND : diff < $.HOUR ? $.MINUTE - (diff + $.MINUTE / 2) % $.MINUTE : diff < $.DAY ? $.HOUR - (diff + $.HOUR / 2) % $.HOUR : $.DAY - (diff + $.DAY / 2) % $.DAY; - return setTimeout(RelativeDates.markStale, delay, data); - }, - markStale: function(data) { - if (indexOf.call(RelativeDates.stale, data) >= 0) { - return; - } - if (data instanceof Post && !g.posts[data.fullID]) { - return; - } - return RelativeDates.stale.push(data); - } - }; - - RemoveSpoilers = { - init: function() { - if (Conf['Reveal Spoilers']) { - $.addClass(doc, 'reveal-spoilers'); - } - if (!Conf['Remove Spoilers']) { - return; - } - Post.callbacks.push({ - name: 'Reveal Spoilers', - cb: this.node - }); - CatalogThread.callbacks.push({ - name: 'Reveal Spoilers', - cb: this.node - }); - if (g.VIEW === 'archive') { - return $.ready(function() { - return RemoveSpoilers.unspoiler($.id('arc-list')); - }); - } - }, - node: function() { - return RemoveSpoilers.unspoiler(this.nodes.comment); - }, - unspoiler: function(el) { - var k, len1, span, spoiler, spoilers; - spoilers = $$('s', el); - for (k = 0, len1 = spoilers.length; k < len1; k++) { - spoiler = spoilers[k]; - span = $.el('span', { - className: 'removed-spoiler' - }); - $.replace(spoiler, span); - $.add(span, slice.call(spoiler.childNodes)); - } - } - }; - - Report = { - css: "#g-recaptcha,\n" + -":root:not(.js-enabled) #captchaContainerAlt {\n" + -" height: auto;\n" + -"}\n" + -"#captchaContainerAlt td:nth-child(2) {\n" + -" display: table-cell !important;\n" + -"}", - init: function() { - var match; - if (!(match = location.search.match(/\bno=(\d+)/))) { - return; - } - Captcha.replace.init(); - this.postID = +match[1]; - return $.ready(this.ready); - }, - ready: function() { - var passAd, prev, ref; - $.addStyle(Report.css); - if (Conf['Archive Report']) { - Report.archive(); - } - if ((passAd = $('a[href="https://www.4chan.org/pass"]'))) { - $.extend(passAd, { - textContent: 'Complain', - href: 'https://www.4chan-x.net/captchas.html', - tabIndex: -1 - }); - passAd.parentNode.normalize(); - if (((ref = (prev = passAd.previousSibling)) != null ? ref.nodeType : void 0) === Node.TEXT_NODE) { - prev.nodeValue = prev.nodeValue.replace(/4chan Pass[^\.]*\./i, 'reCAPTCHA malfunctioning?'); - } - $.after(passAd, [ - $.tn('] ['), $.el('a', { - href: 'mailto:4chanpass@4chan.org?subject=4chan%20Pass%20-%20Purchase%20Support', - textContent: 'Email 4chan', - target: '_blank', - tabIndex: -1 - }) - ]); - } - if (!Conf['Use Recaptcha v1 in Reports'] && !Conf['Force Noscript Captcha'] && Main.jsEnabled) { - return new MutationObserver(function() { - Report.fit('iframe[src^="https://www.google.com/recaptcha/api2/frame"]'); - return Report.fit('body'); - }).observe(d.body, { - childList: true, - attributes: true, - subtree: true - }); - } else { - return Report.fit('body'); - } - }, - fit: function(selector) { - var dy, el; - if (!((el = $(selector, doc)) && getComputedStyle(el).visibility !== 'hidden')) { - return; - } - dy = el.getBoundingClientRect().bottom - doc.clientHeight + 8; - if (dy > 0) { - return window.resizeBy(0, dy); - } - }, - archive: function() { - var link, message, types, url; - Redirect.init(); - if (!(url = Redirect.to('report', { - boardID: g.BOARD.ID, - postID: Report.postID - }))) { - return; - } - if ((message = $('h3')) && /Report submitted!/.test(message.textContent)) { - if (location.hash === '#redirect') { - $.globalEval('self.close = function(){};'); - window.resizeTo(700, 475); - location.replace(url); - } - return; - } - link = $.el('a', { - href: url, - textContent: 'Report to archive' - }); - $.on(link, 'click', function(e) { - if (!(e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0)) { - return window.resizeTo(700, 475); - } - }); - $.add(d.body, [$.tn(' ['), link, $.tn(']')]); - if (types = $.id('reportTypes')) { - return $.on(types, 'change', function(e) { - return $('form').action = e.target.value === 'illegal' ? '#redirect' : ''; - }); - } - } - }; - - ThreadLinks = { - init: function() { - if (!(g.VIEW === 'index' && Conf['Open Threads in New Tab'])) { - return; - } - Post.callbacks.push({ - name: 'Thread Links', - cb: this.node - }); - return CatalogThread.callbacks.push({ - name: 'Thread Links', - cb: this.catalogNode - }); - }, - node: function() { - if (this.isReply || this.isClone) { - return; - } - return ThreadLinks.process($('.replylink', this.nodes.info)); - }, - catalogNode: function() { - return ThreadLinks.process(this.nodes.thumb.parentNode); - }, - process: function(link) { - return link.target = '_blank'; - } - }; - - Time = { - init: function() { - var ref; - if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Time Formatting'])) { - return; - } - return Post.callbacks.push({ - name: 'Time Formatting', - cb: this.node - }); - }, - node: function() { - if (this.isClone) { - return; - } - return this.nodes.date.textContent = Time.format(Conf['time'], this.info.date); - }, - format: function(formatString, date) { - return formatString.replace(/%(.)/g, function(s, c) { - if (c in Time.formatters) { - return Time.formatters[c].call(date); - } else { - return s; - } - }); - }, - day: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], - month: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], - zeroPad: function(n) { - if (n < 10) { - return "0" + n; - } else { - return n; - } - }, - formatters: { - a: function() { - return Time.day[this.getDay()].slice(0, 3); - }, - A: function() { - return Time.day[this.getDay()]; - }, - b: function() { - return Time.month[this.getMonth()].slice(0, 3); - }, - B: function() { - return Time.month[this.getMonth()]; - }, - d: function() { - return Time.zeroPad(this.getDate()); - }, - e: function() { - return this.getDate(); - }, - H: function() { - return Time.zeroPad(this.getHours()); - }, - I: function() { - return Time.zeroPad(this.getHours() % 12 || 12); - }, - k: function() { - return this.getHours(); - }, - l: function() { - return this.getHours() % 12 || 12; - }, - m: function() { - return Time.zeroPad(this.getMonth() + 1); - }, - M: function() { - return Time.zeroPad(this.getMinutes()); - }, - p: function() { - if (this.getHours() < 12) { - return 'AM'; - } else { - return 'PM'; - } - }, - P: function() { - if (this.getHours() < 12) { - return 'am'; - } else { - return 'pm'; - } - }, - S: function() { - return Time.zeroPad(this.getSeconds()); - }, - y: function() { - return this.getFullYear().toString().slice(2); - }, - Y: function() { - return this.getFullYear(); - }, - '%': function() { - return '%'; - } - } - }; - - Settings = { - init: function() { - var add, link, settings; - link = $.el('a', { - className: 'settings-link fa fa-wrench', - textContent: 'Settings', - title: '4chan X Settings', - href: 'javascript:;' - }); - $.on(link, 'click', Settings.open); - Header.addShortcut(link); - add = this.addSection; - add('Main', this.main); - add('Filter', this.filter); - add('Sauce', this.sauce); - add('Advanced', this.advanced); - add('Keybinds', this.keybinds); - $.on(d, 'AddSettingsSection', Settings.addSection); - $.on(d, 'OpenSettings', function(e) { - return Settings.open(e.detail); - }); - if (Conf['Disable Native Extension']) { - if ($.hasStorage) { - settings = JSON.parse(localStorage.getItem('4chan-settings')) || {}; - if (settings.disableAll) { - return; - } - settings.disableAll = true; - return localStorage.setItem('4chan-settings', JSON.stringify(settings)); - } else { - return $.onExists(doc, 'body', function() { - return $.global(function() { - return window.Config.disableAll = true; - }); - }); - } - } - }, - open: function(openSection) { - var dialog, k, len1, link, links, overlay, ref, section, sectionToOpen; - if (Settings.overlay) { - return; - } - $.event('CloseMenu'); - Settings.dialog = dialog = $.el('div', { - id: 'fourchanx-settings', - className: 'dialog' - }); - $.extend(dialog, { - innerHTML: "
      " - }); - Settings.overlay = overlay = $.el('div', { - id: 'overlay' - }); - $.on($('.export', dialog), 'click', Settings["export"]); - $.on($('.import', dialog), 'click', Settings["import"]); - $.on($('.reset', dialog), 'click', Settings.reset); - $.on($('input', dialog), 'change', Settings.onImport); - links = []; - ref = Settings.sections; - for (k = 0, len1 = ref.length; k < len1; k++) { - section = ref[k]; - link = $.el('a', { - className: "tab-" + section.hyphenatedTitle, - textContent: section.title, - href: 'javascript:;' - }); - $.on(link, 'click', Settings.openSection.bind(section)); - links.push(link, $.tn(' | ')); - if (section.title === openSection) { - sectionToOpen = link; - } - } - links.pop(); - $.add($('.sections-list', dialog), links); - if (openSection !== 'none') { - (sectionToOpen ? sectionToOpen : links[0]).click(); - } - $.on($('.close', dialog), 'click', Settings.close); - $.on(overlay, 'click', Settings.close); - $.add(d.body, [overlay, dialog]); - return $.event('OpenSettings', null, dialog); - }, - close: function() { - var ref; - if (!Settings.dialog) { - return; - } - if ((ref = d.activeElement) != null) { - ref.blur(); - } - $.rm(Settings.overlay); - $.rm(Settings.dialog); - delete Settings.overlay; - return delete Settings.dialog; - }, - sections: [], - addSection: function(title, open) { - var hyphenatedTitle, ref; - if (typeof title !== 'string') { - ref = title.detail, title = ref.title, open = ref.open; - } - hyphenatedTitle = title.toLowerCase().replace(/\s+/g, '-'); - return Settings.sections.push({ - title: title, - hyphenatedTitle: hyphenatedTitle, - open: open - }); - }, - openSection: function() { - var section, selected; - if (selected = $('.tab-selected', Settings.dialog)) { - $.rmClass(selected, 'tab-selected'); - } - $.addClass($(".tab-" + this.hyphenatedTitle, Settings.dialog), 'tab-selected'); - section = $('section', Settings.dialog); - $.rmAll(section); - section.className = "section-" + this.hyphenatedTitle; - this.open(section, g); - section.scrollTop = 0; - return $.event('OpenSettings', null, section); - }, - warnings: { - localStorage: function(cb) { - var why; - if ($.cantSync) { - why = $.cantSet ? 'save your settings' : 'synchronize settings between tabs'; - return cb($.el('li', { - textContent: "4chan X needs local storage to " + why + ".\nEnable it on boards.4chan.org in your browser's privacy settings (may be listed as part of \"local data\" or \"cookies\")." - })); - } - }, - ads: function(cb) { - return $.onExists(doc, '.ad-cnt', function(ad) { - return $.onExists(ad, 'img', function() { - return cb($.el('li', { - innerHTML: "To protect yourself from malicious ads, you should block ads on 4chan." - })); - }); - }); - } - }, - main: function(section) { - var addWarning, arr, button, container, containers, description, div, fs, input, inputs, items, key, level, obj, ref, ref1, warning, warnings; - warnings = $.el('fieldset', { - hidden: true - }, { - innerHTML: "Warnings
        " - }); - addWarning = function(item) { - $.add($('ul', warnings), item); - return warnings.hidden = false; - }; - ref = Settings.warnings; - for (key in ref) { - warning = ref[key]; - warning(addWarning); - } - $.add(section, warnings); - items = {}; - inputs = {}; - ref1 = Config.main; - for (key in ref1) { - obj = ref1[key]; - fs = $.el('fieldset', { - innerHTML: "" + E(key) + "" - }); - containers = [fs]; - for (key in obj) { - arr = obj[key]; - description = arr[1]; - div = $.el('div', { - innerHTML: ": " + E(description) + "" - }); - if ($.engine !== 'gecko' && key === 'Remember QR Size') { - div.hidden = true; - } - input = $('input', div); - $.on(input, 'change', function() { - this.parentNode.parentNode.dataset.checked = this.checked; - return $.cb.checked.call(this); - }); - items[key] = Conf[key]; - inputs[key] = input; - level = arr[2] || 0; - if (containers.length <= level) { - container = $.el('div', { - className: 'suboption-list' - }); - $.add(containers[containers.length - 1].lastElementChild, container); - containers[level] = container; - } else if (containers.length > level + 1) { - containers.splice(level + 1, containers.length - (level + 1)); - } - $.add(containers[level], div); - } - $.add(section, fs); - } - $.get(items, function(items) { - var val; - for (key in items) { - val = items[key]; - inputs[key].checked = val; - inputs[key].parentNode.parentNode.dataset.checked = val; - } - }); - div = $.el('div', { - innerHTML: ": Clear manually-hidden threads and posts on all boards. Reload the page to apply." - }); - button = $('button', div); - $.get({ - hiddenThreads: {}, - hiddenPosts: {} - }, function(arg) { - var ID, board, hiddenNum, hiddenPosts, hiddenThreads, ref2, ref3, thread; - hiddenThreads = arg.hiddenThreads, hiddenPosts = arg.hiddenPosts; - hiddenNum = 0; - ref2 = hiddenThreads.boards; - for (ID in ref2) { - board = ref2[ID]; - hiddenNum += Object.keys(board).length; - } - ref3 = hiddenPosts.boards; - for (ID in ref3) { - board = ref3[ID]; - for (ID in board) { - thread = board[ID]; - hiddenNum += Object.keys(thread).length; - } - } - return button.textContent = "Hidden: " + hiddenNum; - }); - $.on(button, 'click', function() { - this.textContent = 'Hidden: 0'; - return $.get('hiddenThreads', {}, function(arg) { - var boardID, hiddenThreads; - hiddenThreads = arg.hiddenThreads; - if ($.hasStorage) { - for (boardID in hiddenThreads.boards) { - localStorage.removeItem("4chan-hide-t-" + boardID); - } - } - return $["delete"](['hiddenThreads', 'hiddenPosts']); - }); - }); - return $.after($('input[name="Stubs"]', section).parentNode.parentNode, div); - }, - "export": function() { - return $.get(Conf, function(Conf) { - return Settings.downloadExport({ - version: g.VERSION, - date: Date.now(), - Conf: Conf - }); - }); - }, - downloadExport: function(data) { - var a, p; - a = $.el('a', { - download: "4chan X v" + g.VERSION + "-" + data.date + ".json", - href: "data:application/json;base64," + (btoa(unescape(encodeURIComponent(JSON.stringify(data, null, 2))))) - }); - p = $('.imp-exp-result', Settings.dialog); - $.rmAll(p); - $.add(p, a); - return a.click(); - }, - "import": function() { - return $('input[type=file]', this.parentNode).click(); - }, - onImport: function() { - var file, output, reader; - if (!(file = this.files[0])) { - return; - } - this.value = null; - output = $('.imp-exp-result'); - if (!confirm('Your current settings will be entirely overwritten, are you sure?')) { - output.textContent = 'Import aborted.'; - return; - } - reader = new FileReader(); - reader.onload = function(e) { - var err; - try { - return Settings.loadSettings(JSON.parse(e.target.result), function(err) { - if (err) { - return output.textContent = 'Import failed due to an error.'; - } else if (confirm('Import successful. Reload now?')) { - return window.location.reload(); - } - }); - } catch (_error) { - err = _error; - output.textContent = 'Import failed due to an error.'; - return c.error(err.stack); - } - }; - return reader.readAsText(file); - }, - convertFrom: { - loadletter: function(data) { - var base1, boardID, convertSettings, key, ref, ref1, threadData, threadID, threads, val; - convertSettings = function(data, map) { - var newKey, prevKey; - for (prevKey in map) { - newKey = map[prevKey]; - if (newKey) { - data.Conf[newKey] = data.Conf[prevKey]; - } - delete data.Conf[prevKey]; - } - return data; - }; - data = convertSettings(data, { - 'Disable 4chan\'s extension': 'Disable Native Extension', - 'Comment Auto-Expansion': '', - 'Remove Slug': '', - 'Check for Updates': '', - 'Recursive Filtering': 'Recursive Hiding', - 'Reply Hiding': 'Reply Hiding Buttons', - 'Thread Hiding': 'Thread Hiding Buttons', - 'Show Stubs': 'Stubs', - 'Image Auto-Gif': 'Replace GIF', - 'Reveal Spoilers': 'Reveal Spoiler Thumbnails', - 'Expand From Current': 'Expand from here', - 'Post in Title': 'Thread Excerpt', - 'Current Page': 'Page Count in Stats', - 'Current Page Position': '', - 'Alternative captcha': 'Use Recaptcha v1', - 'Auto Submit': 'Post on Captcha Completion', - 'Open Reply in New Tab': 'Open Post in New Tab', - 'Remember QR size': 'Remember QR Size', - 'Remember Subject': '', - 'Quote Inline': 'Quote Inlining', - 'Quote Preview': 'Quote Previewing', - 'Indicate OP quote': 'Mark OP Quotes', - 'Indicate You quote': 'Mark Quotes of You', - 'Indicate Cross-thread Quotes': 'Mark Cross-thread Quotes', - 'uniqueid': 'uniqueID', - 'mod': 'capcode', - 'email': '', - 'country': 'flag', - 'md5': 'MD5', - 'openEmptyQR': 'Open empty QR', - 'openQR': 'Open QR', - 'openOptions': 'Open settings', - 'close': 'Close', - 'spoiler': 'Spoiler tags', - 'sageru': 'Toggle sage', - 'code': 'Code tags', - 'submit': 'Submit QR', - 'watch': 'Watch', - 'update': 'Update', - 'unreadCountTo0': '', - 'expandAllImages': 'Expand images', - 'expandImage': 'Expand image', - 'zero': 'Front page', - 'nextPage': 'Next page', - 'previousPage': 'Previous page', - 'nextThread': 'Next thread', - 'previousThread': 'Previous thread', - 'expandThread': 'Expand thread', - 'openThreadTab': 'Open thread', - 'openThread': 'Open thread tab', - 'nextReply': 'Next reply', - 'previousReply': 'Previous reply', - 'hide': 'Hide', - 'Scrolling': 'Auto Scroll', - 'Verbose': '' - }); - data.Conf.sauces = data.Conf.sauces.replace(/\$\d/g, function(c) { - switch (c) { - case '$1': - return '%TURL'; - case '$2': - return '%URL'; - case '$3': - return '%MD5'; - case '$4': - return '%board'; - default: - return c; - } - }); - ref = Config.hotkeys; - for (key in ref) { - val = ref[key]; - if (key in data.Conf) { - data.Conf[key] = data.Conf[key].replace(/ctrl|alt|meta/g, function(s) { - return "" + (s[0].toUpperCase()) + s.slice(1); - }).replace(/(^|.+\+)[A-Z]$/g, function(s) { - return "Shift+" + s.slice(0, -1) + (s.slice(-1).toLowerCase()); - }); - } - } - if (data.WatchedThreads) { - data.Conf['watchedThreads'] = { - boards: {} - }; - ref1 = data.WatchedThreads; - for (boardID in ref1) { - threads = ref1[boardID]; - for (threadID in threads) { - threadData = threads[threadID]; - ((base1 = data.Conf['watchedThreads'].boards)[boardID] || (base1[boardID] = {}))[threadID] = { - excerpt: threadData.textContent - }; - } - } - } - return data; - } - }, - upgrade: function(data, version) { - var boardID, changes, compareString, k, key, len1, name, record, ref, ref1, ref2, ref3, ref4, ref5, rice, set, type, uids, value; - changes = {}; - set = function(key, value) { - return data[key] = changes[key] = value; - }; - compareString = version.replace(/\d+/g, function(x) { - return ('0000' + x).slice(-5); - }); - if (compareString < '00001.00011.00008.00000') { - if (data['Fixed Thread Watcher'] == null) { - set('Fixed Thread Watcher', (ref = data['Toggleable Thread Watcher']) != null ? ref : true); - } - if (data['Exempt Archives from Encryption'] == null) { - set('Exempt Archives from Encryption', (ref1 = data['Except Archives from Encryption']) != null ? ref1 : false); - } - } - if (compareString < '00001.00011.00010.00001') { - if (data['selectedArchives'] != null) { - uids = { - "Moe": 0, - "4plebs Archive": 3, - "Nyafuu Archive": 4, - "Love is Over": 5, - "Rebecca Black Tech": 8, - "warosu": 10, - "fgts": 15, - "not4plebs": 22, - "DesuStorage": 23, - "fireden.net": 24, - "disabled": null - }; - ref2 = data['selectedArchives']; - for (boardID in ref2) { - record = ref2[boardID]; - for (type in record) { - name = record[type]; - if (name in uids) { - record[type] = uids[name]; - } - } - } - set('selectedArchives', data['selectedArchives']); - } - } - if (compareString < '00001.00011.00016.00000') { - if ((rice = Config['usercss'].match(/\/\* Board title rice \*\/(?:\n.+)*/)[0])) { - if ((data['usercss'] != null) && data['usercss'].indexOf(rice) < 0) { - set('usercss', rice + '\n\n' + data['usercss']); - } - } - } - if (compareString < '00001.00011.00017.00000') { - ref3 = ['Persistent QR', 'Color User IDs', 'Fappe Tyme', 'Werk Tyme', 'Highlight Posts Quoting You', 'Highlight Own Posts']; - for (k = 0, len1 = ref3.length; k < len1; k++) { - key = ref3[k]; - if (data[key] == null) { - set(key, key === 'Persistent QR'); - } - } - } - if (compareString < '00001.00011.00017.00006') { - if (data['sauces'] != null) { - set('sauces', data['sauces'].replace(/^(#?\s*)http:\/\/iqdb\.org\//mg, '$1//iqdb.org/')); - } - } - if (compareString < '00001.00011.00019.00003' && !Settings.overlay) { - $.queueTask(function() { - return Settings.warnings.ads(function(item) { - return new Notice('warning', slice.call(item.childNodes)); - }); - }); - } - if (compareString < '00001.00011.00020.00003') { - ref4 = { - 'Inline Cross-thread Quotes Only': false, - 'Pass Link': true - }; - for (key in ref4) { - value = ref4[key]; - if (data[key] == null) { - set(key, value); - } - } - } - if (compareString < '00001.00011.00021.00003') { - if (data['Remember Your Posts'] == null) { - set('Remember Your Posts', (ref5 = data['Mark Quotes of You']) != null ? ref5 : true); - } - } - if (compareString < '00001.00011.00022.00000') { - if (data['sauces'] != null) { - set('sauces', data['sauces'].replace(/^(#?\s*https:\/\/www\.google\.com\/searchbyimage\?image_url=%(?:IMG|URL))%3Fs\.jpg/mg, '$1')); - set('sauces', data['sauces'].replace(/^#?\s*https:\/\/www\.google\.com\/searchbyimage\?image_url=%(?:IMG|T?URL)(?=$|;)/mg, '$&&safe=off')); - } - } - if (compareString < '00001.00011.00022.00002') { - if ((data['Use Recaptcha v1 in Reports'] == null) && data['Use Recaptcha v1'] && !data['Use Recaptcha v2 in Reports']) { - set('Use Recaptcha v1 in Reports', true); - } - } - if (compareString < '00001.00011.00024.00000') { - if ((data['JSON Navigation'] != null) && (data['JSON Index'] == null)) { - set('JSON Index', data['JSON Navigation']); - } - } - if (compareString < '00001.00011.00026.00000') { - if ((data['Oekaki Links'] != null) && (data['Edit Link'] == null)) { - set('Edit Link', data['Oekaki Links']); - } - if (data['Inline Cross-thread Quotes Only'] == null) { - set('Inline Cross-thread Quotes Only', true); - } - } - if (compareString < '00001.00011.00030.00000') { - if (data['Quote Threading'] && (data['Thread Quotes'] == null)) { - set('Thread Quotes', true); - } - } - return changes; - }, - loadSettings: function(data, cb) { - if (data.version.split('.')[0] === '2') { - data = Settings.convertFrom.loadletter(data); - } else if (data.version !== g.VERSION) { - Settings.upgrade(data.Conf, data.version); - } - return $.clear(function(err) { - if (err) { - return cb(err); - } - return $.set(data.Conf, cb); - }); - }, - reset: function() { - if (confirm('Your current settings will be entirely wiped, are you sure?')) { - return $.clear(function(err) { - if (err) { - return $('.imp-exp-result').textContent = 'Import failed due to an error.'; - } else if (confirm('Reset successful. Reload now?')) { - return window.location.reload(); - } - }); - } - }, - filter: function(section) { - var select; - $.extend(section, { - innerHTML: "
        " - }); - select = $('select', section); - $.on(select, 'change', Settings.selectFilter); - return Settings.selectFilter.call(select); - }, - selectFilter: function() { - var div, name, ta; - div = this.nextElementSibling; - if ((name = this.value) !== 'guide') { - $.rmAll(div); - ta = $.el('textarea', { - name: name, - className: 'field', - spellcheck: false - }); - $.get(name, Conf[name], function(item) { - return ta.value = item[name]; - }); - $.on(ta, 'change', $.cb.value); - $.add(div, ta); - return; - } - $.extend(div, { - innerHTML: "
        Filter is disabled.

        Use regular expressions, one per line.
        Lines starting with a # will be ignored.
        For example, /weeaboo/i will filter posts containing the string \`weeaboo\`, case-insensitive.
        MD5 filtering uses exact string matching, not regular expressions.

          You can use these settings with each regular expression, separate them with semicolons:
        • Per boards, separate them with commas. It is global if not specified.
          For example: boards:a,jp;.
        • In case of a global rule, select boards to be excluded from the filter.
          For example: exclude:vg,v;.
        • Filter OPs only along with their threads (\`only\`), replies only (\`no\`), or both (\`yes\`, this is default).
          For example: op:only;, op:no; or op:yes;.
        • Overrule the \`Show Stubs\` setting if specified: create a stub (\`yes\`) or not (\`no\`).
          For example: stub:yes; or stub:no;.
        • Highlight instead of hiding. You can specify a class name to use with a userstyle.
          For example: highlight; or highlight:wallpaper;.
        • Highlighted OPs will have their threads put on top of the board index by default.
          For example: top:yes; or top:no;.

        Note: If you're using the native catalog rather than 4chan X's catalog, 4chan X's filters do not apply there.
        The native catalog has its own separate filter list.

        " - }); - return $('.warning', div).hidden = Conf['Filter']; - }, - sauce: function(section) { - var ta; - $.extend(section, { - innerHTML: "
        Sauce is disabled.
        Lines starting with a # will be ignored.
        You can specify a display text by appending ;text:[text] to the URL.
        You can specify the applicable boards by appending ;boards:[board1],[board2].
        You can specify the applicable file types by appending ;types:[extension1],[extension2].
        You can open links with scripts and popups disabled by appending ;sandbox.
          These parameters will be replaced by their corresponding values:
        • %TURL: Thumbnail URL.
        • %URL: Full image URL.
        • %IMG: Full image URL for GIF, JPG, and PNG; thumbnail URL for other types.
        • %MD5: MD5 hash in base64.
        • %sMD5: MD5 hash in base64 using - and _.
        • %hMD5: MD5 hash in hexadecimal.
        • %name: Original file name.
        • %board: Current board.
        • %%, %semi: Literal % and ;.
        " - }); - $('.warning', section).hidden = Conf['Sauce']; - ta = $('textarea', section); - $.get('sauces', Conf['sauces'], function(item) { - return ta.value = item['sauces']; - }); - return $.on(ta, 'change', $.cb.value); - }, - advanced: function(section) { - var aa, ab, applyCSS, archBoards, archive, boardID, boardOptions, boardSelect, boards, customCSS, files, i, input, inputs, interval, item, items, k, len1, len2, len3, len4, len5, len6, len7, name, o, q, ref, ref1, ref2, ref3, ref4, ref5, ref6, row, rows, software, ta, table, u, uid, v, warning, withCredentials, z; - $.extend(section, { - innerHTML: "
        Archiver
        404 Redirect is disabled.
        Thread redirectionPost fetchingFile redirection
        Captcha Language
        Choose from list of language codes. Leave blank to autoselect.
        Custom Board Navigation
        New lines will be converted into spaces.

        In the following examples for /g/, g can be changed to a different board ID (a, b, etc...), the current board (current), or the Twitter link (@).
        Board link: g
        Archive link: g-archive
        Internal archive link: g-expired
        Title link: g-title
        Board link (Replace with title when on that board): g-replace
        Full text link: g-full
        Custom text link: g-text:"Install Gentoo"
        Index-only link: g-index
        Catalog-only link: g-catalog
        Index mode: g-mode:"infinite scrolling"
        Index sort: g-sort:"creation date"
        External link: external-text:"Google","http://www.google.com"
        Combinations are possible: g-index-text:"Technology Index"
        Full board list toggle: toggle-all

        [ toggle-all ] [current-title] [g-title / a-title / jp-title] [x / wsg / h] [t-text:"Piracy"]
        will give you
        [ + ] [Technology] [Technology / Anime & Manga / Otaku Culture] [x / wsg / h] [Piracy]
        if you are on /g/.
        Time Formatting is disabled.
        :
        Day: %a, %A, %d, %e
        Month: %m, %b, %B
        Year: %y, %Y
        Hour: %k, %H, %l, %I, %p, %P
        Minute: %M
        Second: %S
        Literal %: %%
        Quote Backlinks formatting is disabled.
        :
        File Info Formatting is disabled.
        :
        Link: %l (truncated), %L (untruncated), %T (4chan filename)
        Filename: %n (truncated), %N (untruncated), %t (4chan filename)
        Spoiler indicator: %p
        Size: %B (Bytes), %K (KB), %M (MB), %s (4chan default)
        Resolution: %r (Displays 'PDF' for PDF files)
        Tag: %g
        Literal %: %%
        Quick Reply Personas

        One item per line.
        Items will be added in the relevant input's auto-completion list.
        Password items will always be used, since there is no password input.
        Lines starting with a # will be ignored.

          You can use these settings with each item, separate them with semicolons:
        • Possible items are: name, options (or equivalently email), subject and password.
        • Wrap values of items with quotes, like this: options:"sage".
        • Force values as defaults with the always keyword, for example: options:"sage";always.
        • Select specific boards for an item, separated with commas, for example: options:"sage";boards:jp;always.
        Unread Favicon is disabled.
        Thread Updater is disabled.
        Interval: seconds
        Custom Cooldown Time
        Seconds:
        " - }); - ref = $$('.warning', section); - for (k = 0, len1 = ref.length; k < len1; k++) { - warning = ref[k]; - warning.hidden = Conf[warning.dataset.feature]; - } - items = {}; - inputs = {}; - ref1 = ['captchaLanguage', 'boardnav', 'time', 'backlink', 'fileInfo', 'favicon', 'usercss', 'customCooldown']; - for (q = 0, len2 = ref1.length; q < len2; q++) { - name = ref1[q]; - input = $("[name='" + name + "']", section); - items[name] = Conf[name]; - inputs[name] = input; - if (name === 'usercss') { - $.on(input, 'change', $.cb.value); - } else if (name === 'favicon') { - $.on(input, 'change', $.cb.value); - $.on(input, 'change', Settings[name]); - } else { - $.on(input, 'input', $.cb.value); - if (name in Settings) { - $.on(input, 'input', Settings[name]); - } - } - } - ta = $('.personafield', section); - $.get('QR.personas', Conf['QR.personas'], function(item) { - return ta.value = item['QR.personas']; - }); - $.on(ta, 'change', $.cb.value); - $.get(items, function(items) { - var key, val; - for (key in items) { - val = items[key]; - input = inputs[key]; - input.value = val; - if (key in Settings && key !== 'usercss') { - Settings[key].call(input); - } - } - }); - interval = $('input[name="Interval"]', section); - customCSS = $('input[name="Custom CSS"]', section); - applyCSS = $('#apply-css', section); - interval.value = Conf['Interval']; - customCSS.checked = Conf['Custom CSS']; - inputs['usercss'].disabled = !Conf['Custom CSS']; - applyCSS.disabled = !Conf['Custom CSS']; - $.on(interval, 'change', ThreadUpdater.cb.interval); - $.on(customCSS, 'change', Settings.togglecss); - $.on(applyCSS, 'click', Settings.usercss); - archBoards = {}; - ref2 = Redirect.archives; - for (u = 0, len3 = ref2.length; u < len3; u++) { - ref3 = ref2[u], uid = ref3.uid, name = ref3.name, boards = ref3.boards, files = ref3.files, software = ref3.software, withCredentials = ref3.withCredentials; - for (v = 0, len4 = boards.length; v < len4; v++) { - boardID = boards[v]; - o = archBoards[boardID] || (archBoards[boardID] = { - thread: [[], []], - post: [[], []], - file: [[], []] - }); - i = +(!!withCredentials); - archive = [uid != null ? uid : name, name]; - o.thread[i].push(archive); - if (software === 'foolfuuka') { - o.post[i].push(archive); - } - if (indexOf.call(files, boardID) >= 0) { - o.file[i].push(archive); - } - } - } - for (boardID in archBoards) { - o = archBoards[boardID]; - ref4 = ['thread', 'post', 'file']; - for (z = 0, len5 = ref4.length; z < len5; z++) { - item = ref4[z]; - i = o[item][0].length ? 1 : 0; - o[item][i].push([null, 'disabled']); - o[item] = o[item][0].concat(o[item][1]); - } - } - rows = []; - boardOptions = []; - ref5 = Object.keys(archBoards).sort(); - for (aa = 0, len6 = ref5.length; aa < len6; aa++) { - boardID = ref5[aa]; - row = $.el('tr', { - className: "board-" + boardID - }); - row.hidden = boardID !== g.BOARD.ID; - boardOptions.push($.el('option', { - textContent: "/" + boardID + "/", - value: "board-" + boardID, - selected: boardID === g.BOARD.ID - })); - o = archBoards[boardID]; - ref6 = ['thread', 'post', 'file']; - for (ab = 0, len7 = ref6.length; ab < len7; ab++) { - item = ref6[ab]; - $.add(row, Settings.addArchiveCell(boardID, o, item)); - } - rows.push(row); - } - if (!(g.BOARD.ID in archBoards)) { - rows[0].hidden = false; - } - $.add($('tbody', section), rows); - boardSelect = $('#archive-board-select', section); - $.add(boardSelect, boardOptions); - table = $('#archive-table', section); - $.on(boardSelect, 'change', function() { - $('tbody > :not([hidden])', table).hidden = true; - return $("tbody > ." + this.value, table).hidden = false; - }); - $.get('selectedArchives', Conf['selectedArchives'], function(arg) { - var data, id, select, selectedArchives, type; - selectedArchives = arg.selectedArchives; - for (boardID in selectedArchives) { - data = selectedArchives[boardID]; - for (type in data) { - id = data[type]; - if (select = $("select[data-boardid='" + boardID + "'][data-type='" + type + "']", section)) { - select.value = JSON.stringify(id); - } - } - } - }); - }, - addArchiveCell: function(boardID, data, type) { - var archive, i, length, options, select, td; - length = data[type].length; - td = $.el('td', { - className: 'archive-cell' - }); - if (!length) { - td.textContent = '--'; - return td; - } - options = []; - i = 0; - while (i < length) { - archive = data[type][i++]; - options.push($.el('option', { - value: JSON.stringify(archive[0]), - textContent: archive[1] - })); - } - $.extend(td, { - innerHTML: "" - }); - select = td.firstElementChild; - if (!(select.disabled = length === 1)) { - select.setAttribute('data-boardid', boardID); - select.setAttribute('data-type', type); - $.on(select, 'change', Settings.saveSelectedArchive); - } - $.add(select, options); - return td; - }, - saveSelectedArchive: function() { - return $.get('selectedArchives', Conf['selectedArchives'], (function(_this) { - return function(arg) { - var name1, selectedArchives; - selectedArchives = arg.selectedArchives; - (selectedArchives[name1 = _this.dataset.boardid] || (selectedArchives[name1] = {}))[_this.dataset.type] = JSON.parse(_this.value); - return $.set('selectedArchives', selectedArchives); - }; - })(this)); - }, - boardnav: function() { - return Header.generateBoardList(this.value); - }, - time: function() { - return this.nextElementSibling.textContent = Time.format(this.value, new Date()); - }, - backlink: function() { - return this.nextElementSibling.textContent = this.value.replace(/%(?:id|%)/g, function(x) { - return { - '%id': '123456789', - '%%': '%' - }[x]; - }); - }, - fileInfo: function() { - var data; - data = { - isReply: true, - file: { - url: '//i.4cdn.org/g/1334437723720.jpg', - name: 'd9bb2efc98dd0df141a94399ff5880b7.jpg', - size: '276 KB', - sizeInBytes: 276 * 1024, - dimensions: '1280x720', - isImage: true, - isVideo: false, - isSpoiler: true, - tag: 'Loop' - } - }; - return FileInfo.format(this.value, data, this.nextElementSibling); - }, - favicon: function() { - var img; - Favicon["switch"](); - if (g.VIEW === 'thread' && Conf['Unread Favicon']) { - Unread.update(); - } - img = this.nextElementSibling.children; - img[0].src = Favicon["default"]; - img[1].src = Favicon.unreadSFW; - img[2].src = Favicon.unreadNSFW; - return img[3].src = Favicon.unreadDead; - }, - togglecss: function() { - if ($('textarea[name=usercss]', $.x('ancestor::fieldset[1]', this)).disabled = $.id('apply-css').disabled = !this.checked) { - CustomCSS.rmStyle(); - } else { - CustomCSS.addStyle(); - } - return $.cb.checked.call(this); - }, - usercss: function() { - return CustomCSS.update(); - }, - keybinds: function(section) { - var arr, input, inputs, items, key, ref, tbody, tr; - $.extend(section, { - innerHTML: "
        Keybinds are disabled.
        Allowed keys: a-z, 0-9, Ctrl, Shift, Alt, Meta, Enter, Esc, Up, Down, Right, Left.
        Press Backspace to disable a keybind.
        ActionsKeybinds
        " - }); - $('.warning', section).hidden = Conf['Keybinds']; - tbody = $('tbody', section); - items = {}; - inputs = {}; - ref = Config.hotkeys; - for (key in ref) { - arr = ref[key]; - tr = $.el('tr', { - innerHTML: "" + E(arr[1]) + "" - }); - input = $('input', tr); - input.name = key; - input.spellcheck = false; - items[key] = Conf[key]; - inputs[key] = input; - $.on(input, 'keydown', Settings.keybind); - $.add(tbody, tr); - } - return $.get(items, function(items) { - var val; - for (key in items) { - val = items[key]; - inputs[key].value = val; - } - }); - }, - keybind: function(e) { - var key; - if (e.keyCode === 9) { - return; - } - e.preventDefault(); - e.stopPropagation(); - if ((key = Keybinds.keyCode(e)) == null) { - return; - } - this.value = key; - return $.cb.value.call(this); - } - }; - - Main = { - init: function() { - var db, flatten, items, k, key, len1, ref; - if (d.body && !$('title', d.head)) { - return; - } - if (window['4chan X antidup']) { - return; - } - window['4chan X antidup'] = true; - if (location.hostname === 'www.google.com') { - $.get('Captcha Fixes', true, function(arg) { - var enabled; - enabled = arg['Captcha Fixes']; - if (enabled) { - return $.ready(function() { - return Captcha.fixes.init(); - }); - } - }); - return; - } - $.global(function() { - var k, len1, nuke, prop, ref; - nuke = function(obj, prop) { - try { - return Object.defineProperty(obj, prop, { - configurable: false, - get: function() { - throw new Error(); - }, - set: function() { - throw new Error(); - } - }); - } catch (_error) {} - }; - ref = ['atOptions', 'adsterra_key', 'EpmadsConfig', 'epmads_key', 'EpomConfig', 'epom_key', 'exoDocumentProtocol']; - for (k = 0, len1 = ref.length; k < len1; k++) { - prop = ref[k]; - nuke(window, prop); - } - }); - $.on(window, 'beforescriptexecute', function(e) { - var host, ref, ref1; - host = (ref = e.target.src.split('/')[2]) != null ? (ref1 = ref.match(/[^.]+\.[^.]+$/)) != null ? ref1[0] : void 0 : void 0; - if (host === 'bnhtml.com' || host === 'ecpmrocks.com' || host === 'advertisation.com' || host === 'exoclick.com') { - return e.preventDefault(); - } - }); - $.on(d, '4chanXInitFinished', function() { - if (Main.expectInitFinished) { - return delete Main.expectInitFinished; - } else { - new Notice('error', 'Error: Multiple copies of 4chan X are enabled.'); - return $.addClass(doc, 'tainted'); - } - }); - flatten = function(parent, obj) { - var key, val; - if (obj instanceof Array) { - Conf[parent] = obj[0]; - } else if (typeof obj === 'object') { - for (key in obj) { - val = obj[key]; - flatten(key, val); - } - } else { - Conf[parent] = obj; - } - }; - flatten(null, Config); - ref = DataBoard.keys; - for (k = 0, len1 = ref.length; k < len1; k++) { - db = ref[k]; - Conf[db] = { - boards: {} - }; - } - Conf['selectedArchives'] = {}; - Conf['cooldowns'] = {}; - Conf['Index Sort'] = {}; - Conf['Except Archives from Encryption'] = false; - Conf['JSON Navigation'] = true; - Conf['Oekaki Links'] = true; - items = {}; - for (key in Conf) { - items[key] = void 0; - } - items['previousversion'] = void 0; - return $.get(items, function(items) { - return $.asap((function() { - return doc = d.documentElement; - }), function() { - var ref1, val; - if ($.cantSet) { - - } else if (items.previousversion == null) { - Main.ready(function() { - $.set('previousversion', g.VERSION); - return Settings.open(); - }); - } else if (items.previousversion !== g.VERSION) { - Main.upgrade(items); - } - for (key in Conf) { - val = Conf[key]; - Conf[key] = (ref1 = items[key]) != null ? ref1 : val; - } - return Main.initFeatures(); - }); - }); - }, - upgrade: function(items) { - var changes, previousversion; - previousversion = items.previousversion; - changes = Settings.upgrade(items, previousversion); - items.previousversion = changes.previousversion = g.VERSION; - return $.set(changes, function() { - var el, ref; - if ((ref = items['Show Updated Notifications']) != null ? ref : true) { - el = $.el('span', { - innerHTML: "4chan X has been updated to version " + E(g.VERSION) + "." - }); - return new Notice('info', el, 15); - } - }); - }, - initFeatures: function() { - var err, feature, hostname, k, len1, match, name, pathname, ref, ref1, ref2, ref3, search; - hostname = location.hostname, search = location.search; - pathname = location.pathname.split(/\/+/); - if (hostname !== 'www.4chan.org') { - g.BOARD = new Board(pathname[1]); - } - if (hostname === 'boards.4chan.org' || hostname === 'sys.4chan.org' || hostname === 'www.4chan.org') { - $.global(function() { - document.documentElement.classList.add('js-enabled'); - return window.FCX = {}; - }); - Main.jsEnabled = $.hasClass(doc, 'js-enabled'); - } - switch (hostname) { - case 'www.4chan.org': - $.onExists(doc, 'body', function() { - return $.addStyle(Main.cssWWW); - }); - Captcha.replace.init(); - return; - case 'sys.4chan.org': - if (pathname[2] === 'imgboard.php') { - if (/\bmode=report\b/.test(search)) { - Report.init(); - } else if ((match = search.match(/\bres=(\d+)/))) { - $.ready(function() { - var ref; - if (Conf['404 Redirect'] && ((ref = $.id('errmsg')) != null ? ref.textContent : void 0) === 'Error: Specified thread does not exist.') { - return Redirect.navigate('thread', { - boardID: g.BOARD.ID, - postID: +match[1] - }); - } - }); - } - } else if (pathname[2] === 'post') { - PostSuccessful.init(); - } - return; - case 'i.4cdn.org': - if (!(pathname[2] && !/s\.jpg$/.test(pathname[2]))) { - return; - } - $.asap((function() { - return d.readyState !== 'loading'; - }), function() { - var ref, video; - if (Conf['404 Redirect'] && ((ref = d.title) === '4chan - Temporarily Offline' || ref === '4chan - 404 Not Found')) { - return Redirect.navigate('file', { - boardID: g.BOARD.ID, - filename: pathname[pathname.length - 1] - }); - } else if (video = $('video')) { - if (Conf['Volume in New Tab']) { - Volume.setup(video); - } - if (Conf['Loop in New Tab']) { - video.loop = true; - video.controls = false; - video.play(); - return ImageCommon.addControls(video); - } - } - }); - return; - } - if ((ref = pathname[2]) === 'thread' || ref === 'res') { - g.VIEW = 'thread'; - g.THREADID = +pathname[3]; - } else if ((ref1 = pathname[2]) === 'catalog' || ref1 === 'archive') { - g.VIEW = pathname[2]; - } else if (pathname[2].match(/^\d*$/)) { - g.VIEW = 'index'; - } else { - return; - } - g.threads = new SimpleDict(); - g.posts = new SimpleDict(); - $.onExists(doc, 'body', Main.initStyle); - ref2 = Main.features; - for (k = 0, len1 = ref2.length; k < len1; k++) { - ref3 = ref2[k], name = ref3[0], feature = ref3[1]; - try { - feature.init(); - } catch (_error) { - err = _error; - Main.handleErrors({ - message: "\"" + name + "\" initialization crashed.", - error: err - }); - } - } - return $.ready(Main.initReady); - }, - initStyle: function() { - var keyboard, ref; - if (!Main.isThisPageLegit()) { - return; - } - if ((ref = $('link[href*=mobile]', d.head)) != null) { - ref.disabled = true; - } - $.addClass(doc, 'fourchan-x', 'seaweedchan'); - $.addClass(doc, g.VIEW === 'thread' ? 'thread-view' : g.VIEW); - if ($.engine) { - $.addClass(doc, $.engine); - } - $.onExists(doc, '.ad-cnt', function(ad) { - return $.onExists(ad, 'img', function() { - return $.addClass(doc, 'ads-loaded'); - }); - }); - if (Conf['Autohiding Scrollbar']) { - $.addClass(doc, 'autohiding-scrollbar'); - } - $.ready(function() { - if (d.body.clientHeight > doc.clientHeight && (window.innerWidth === doc.clientWidth) !== Conf['Autohiding Scrollbar']) { - Conf['Autohiding Scrollbar'] = !Conf['Autohiding Scrollbar']; - $.set('Autohiding Scrollbar', Conf['Autohiding Scrollbar']); - return $.toggleClass(doc, 'autohiding-scrollbar'); - } - }); - $.addStyle(Main.css, 'fourchanx-css'); - Main.bgColorStyle = $.el('style', { - id: 'fourchanx-bgcolor-css' - }); - keyboard = false; - $.on(d, 'mousedown', function() { - return keyboard = false; - }); - $.on(d, 'keydown', function(e) { - if (e.keyCode === 9) { - return keyboard = true; - } - }); - window.addEventListener('focus', (function() { - return doc.classList.toggle('keyboard-focus', keyboard); - }), true); - return Main.setClass(); - }, - setClass: function() { - var mainStyleSheet, setStyle, style, styleSheets; - if (g.VIEW === 'catalog') { - $.addClass(doc, $.id('base-css').href.match(/catalog_(\w+)/)[1].replace('_new', '').replace(/_+/g, '-')); - return; - } - style = 'yotsuba-b'; - mainStyleSheet = $('link[title=switch]', d.head); - styleSheets = $$('link[rel="alternate stylesheet"]', d.head); - setStyle = function() { - var bgColor, div, k, len1, styleSheet; - $.rmClass(doc, style); - style = null; - for (k = 0, len1 = styleSheets.length; k < len1; k++) { - styleSheet = styleSheets[k]; - if (styleSheet.href === (mainStyleSheet != null ? mainStyleSheet.href : void 0)) { - style = styleSheet.title.toLowerCase().replace('new', '').trim().replace(/\s+/g, '-'); - break; - } - } - if (style) { - $.addClass(doc, style); - return $.rm(Main.bgColorStyle); - } else { - div = $.el('div', { - className: 'reply' - }); - div.style.cssText = 'position: absolute; visibility: hidden;'; - $.add(d.body, div); - bgColor = window.getComputedStyle(div).backgroundColor; - $.rm(div); - Main.bgColorStyle.textContent = ".dialog, .suboption-list > div:last-of-type {\n background-color: " + bgColor + ";\n}"; - return $.after($.id('fourchanx-css'), Main.bgColorStyle); - } - }; - setStyle(); - if (!mainStyleSheet) { - return; - } - return new MutationObserver(setStyle).observe(mainStyleSheet, { - attributes: true, - attributeFilter: ['href'] - }); - }, - initReady: function() { - var msg, ref, ref1, ref2; - if (g.VIEW === 'thread' && (((ref = d.title) === '4chan - Temporarily Offline' || ref === '4chan - 404 Not Found') || ($('.board') && !$('.opContainer')))) { - ThreadWatcher.set404(g.BOARD.ID, g.THREADID, function() { - if (Conf['404 Redirect']) { - return Redirect.navigate('thread', { - boardID: g.BOARD.ID, - threadID: g.THREADID, - postID: +location.hash.match(/\d+/) - }, "/" + g.BOARD + "/"); - } - }); - return; - } - if ((ref1 = d.title) === '4chan - Temporarily Offline' || ref1 === '4chan - 404 Not Found') { - return; - } - if (((ref2 = g.VIEW) === 'index' || ref2 === 'thread') && !$('.board + *')) { - msg = $.el('div', { - innerHTML: "The page didn't load completely.
        Some features may not work unless you reload." - }); - $.on($('a', msg), 'click', function() { - return location.reload(); - }); - new Notice('warning', msg); - } - if (!(Conf['JSON Index'] && g.VIEW === 'index')) { - return Main.initThread(); - } else { - Main.expectInitFinished = true; - return $.event('4chanXInitFinished'); - } - }, - initThread: function() { - var board, err, errors, k, len1, len2, m, postRoot, posts, q, ref, ref1, scriptData, thread, threadRoot, threads; - if ((board = $('.board'))) { - threads = []; - posts = []; - ref = $$('.board > .thread', board); - for (k = 0, len1 = ref.length; k < len1; k++) { - threadRoot = ref[k]; - thread = new Thread(+threadRoot.id.slice(1), g.BOARD); - threads.push(thread); - ref1 = $$('.thread > .postContainer', threadRoot); - for (q = 0, len2 = ref1.length; q < len2; q++) { - postRoot = ref1[q]; - if ($('.postMessage', postRoot)) { - try { - posts.push(new Post(postRoot, thread, g.BOARD)); - } catch (_error) { - err = _error; - if (!errors) { - errors = []; - } - errors.push({ - message: "Parsing of Post No." + (postRoot.id.match(/\d+/)) + " failed. Post will be skipped.", - error: err - }); - } - } - } - } - if (errors) { - Main.handleErrors(errors); - } - if (g.VIEW === 'thread') { - scriptData = Get.scriptData(); - threads[0].postLimit = /\bbumplimit *= *1\b/.test(scriptData); - threads[0].fileLimit = /\bimagelimit *= *1\b/.test(scriptData); - threads[0].ipCount = (m = scriptData.match(/\bunique_ips *= *(\d+)\b/)) ? +m[1] : void 0; - } - Main.callbackNodes(Thread, threads); - return Main.callbackNodesDB(Post, posts, function() { - var len3, post, u; - for (u = 0, len3 = posts.length; u < len3; u++) { - post = posts[u]; - QuoteThreading.insert(post); - } - Main.expectInitFinished = true; - return $.event('4chanXInitFinished'); - }); - } else { - Main.expectInitFinished = true; - return $.event('4chanXInitFinished'); - } - }, - callbackNodes: function(klass, nodes) { - var cb, i, node; - i = 0; - cb = klass.callbacks; - while (node = nodes[i++]) { - cb.execute(node); - } - }, - callbackNodesDB: function(klass, nodes, cb) { - var cbs, fn, i, softTask; - i = 0; - cbs = klass.callbacks; - fn = function() { - var node; - if (!(node = nodes[i])) { - return false; - } - cbs.execute(node); - return ++i % 25; - }; - softTask = function() { - while (fn()) { - continue; - } - if (!nodes[i]) { - if (cb) { - cb(); - } - return; - } - return setTimeout(softTask, 0); - }; - return softTask(); - }, - handleErrors: function(errors) { - var div, error, k, len1, logs; - if (!(errors instanceof Array)) { - error = errors; - } else if (errors.length === 1) { - error = errors[0]; - } - if (error) { - new Notice('error', Main.parseError(error, Main.reportLink([error])), 15); - return; - } - div = $.el('div', { - innerHTML: E(errors.length) + " errors occurred." + Main.reportLink(errors).innerHTML + " [show]" - }); - $.on(div.lastElementChild, 'click', function() { - var ref; - return ref = this.textContent === 'show' ? ['hide', false] : ['show', true], this.textContent = ref[0], logs.hidden = ref[1], ref; - }); - logs = $.el('div', { - hidden: true - }); - for (k = 0, len1 = errors.length; k < len1; k++) { - error = errors[k]; - $.add(logs, Main.parseError(error)); - } - return new Notice('error', [div, logs], 30); - }, - parseError: function(data, reportLink) { - var context, error, lines, message, ref, ref1; - c.error(data.message, data.error.stack); - message = $.el('div', { - innerHTML: E(data.message) + (reportLink ? reportLink.innerHTML : "") - }); - error = $.el('div', { - textContent: (data.error.name || 'Error') + ": " + (data.error.message || 'see console for details') - }); - lines = ((ref = data.error.stack) != null ? (ref1 = ref.match(/\d+(?=:\d+\)?$)/mg)) != null ? ref1.join().replace(/^/, ' at ') : void 0 : void 0) || ''; - context = $.el('div', { - textContent: "(4chan X ccd0 v" + g.VERSION + " userscript on " + $.engine + lines + ")" - }); - return [message, error, context]; - }, - reportLink: function(errors) { - var data, details, ref, title, url; - data = errors[0]; - title = data.message; - if (errors.length > 1) { - title += " (+" + (errors.length - 1) + " other errors)"; - } - details = "[Please describe the steps needed to reproduce this error.]\n\nScript: 4chan X ccd0 v" + g.VERSION + " userscript\nUser agent: " + navigator.userAgent + "\nURL: " + location.href + "\n\n" + data.error + "\n" + (((ref = data.error.stack) != null ? ref.replace(data.error.toString(), '').trim() : void 0) || ''); - details = details.replace(/file:\/{3}.+\//g, ''); - url = "https://gitreports.com/issue/ccd0/4chan-x?issue_title=" + (encodeURIComponent(title)) + "&details=" + (encodeURIComponent(details)); - return { - innerHTML: " [report]" - }; - }, - isThisPageLegit: function() { - var ref; - if (!('thisPageIsLegit' in Main)) { - Main.thisPageIsLegit = location.hostname === 'boards.4chan.org' && !$('link[href*="favicon-status.ico"]', d.head) && ((ref = d.title) !== '4chan - Temporarily Offline' && ref !== '4chan - Error' && ref !== '504 Gateway Time-out'); - } - return Main.thisPageIsLegit; - }, - ready: function(cb) { - return $.ready(function() { - if (Main.isThisPageLegit()) { - return cb(); - } - }); - }, - css: "/*!\n" + -" * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome\n" + +boards: +"/*!\n" + +" * Font Awesome 4.6.1 by @davegandy - http://fontawesome.io - @fontawesome\n" + " * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n" + " */\n" + "@font-face {\n" + " font-family: FontAwesome;\n" + -" src: url('data:application/font-woff;base64,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') format('woff');\n" + +" src: url('data:application/font-woff;base64,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') format('woff');\n" + " font-weight: 400;\n" + " font-style: normal;\n" + "}\n" + -".fa::before {\n" + -" font-family: FontAwesome;\n" + -" font-weight: 400;\n" + -" font-style: normal;\n" + -" -webkit-font-smoothing: antialiased;\n" + -" text-decoration: inherit;\n" + -" speak: none;\n" + -" display: inline-block;\n" + -" font-size: 13px;\n" + -" visibility: visible;\n" + -"}\n" + -":root:not(.shortcut-icons) #shortcuts .fa::before {\n" + -" display: none;\n" + -"}\n" + -":root.shortcut-icons #shortcuts .fa::before {\n" + -" font-size: 15px !important;\n" + -" margin-top: -3px !important;\n" + -" position: relative;\n" + -" top: 1px;\n" + -"}\n" + -":root.shortcut-icons #shortcuts .fa, .menu-button .fa {\n" + -" font-size: 0;\n" + -" visibility: hidden;\n" + -"}\n" + -":root.shortcut-icons .shortcut.brackets-wrap::after,\n" + -":root.shortcut-icons .shortcut.brackets-wrap::before {\n" + -" display: none;\n" + -"}\n" + -":root.shortcut-icons #shortcuts a .fa,\n" + -".menu-button .fa,\n" + -".hide-reply-button .fa,\n" + -".hide-thread-button .fa {\n" + -" display: inline;\n" + -"}\n" + ".fa-glass:before {content: \"\\f000\";}\n" + ".fa-music:before {content: \"\\f001\";}\n" + ".fa-search:before {content: \"\\f002\";}\n" + @@ -19237,6 +1099,63 @@ ".fa-bluetooth:before {content: \"\\f293\";}\n" + ".fa-bluetooth-b:before {content: \"\\f294\";}\n" + ".fa-percent:before {content: \"\\f295\";}\n" + +".fa-gitlab:before {content: \"\\f296\";}\n" + +".fa-wpbeginner:before {content: \"\\f297\";}\n" + +".fa-wpforms:before {content: \"\\f298\";}\n" + +".fa-envira:before {content: \"\\f299\";}\n" + +".fa-universal-access:before {content: \"\\f29a\";}\n" + +".fa-wheelchair-alt:before {content: \"\\f29b\";}\n" + +".fa-question-circle-o:before {content: \"\\f29c\";}\n" + +".fa-blind:before {content: \"\\f29d\";}\n" + +".fa-audio-description:before {content: \"\\f29e\";}\n" + +".fa-volume-control-phone:before {content: \"\\f2a0\";}\n" + +".fa-braille:before {content: \"\\f2a1\";}\n" + +".fa-assistive-listening-systems:before {content: \"\\f2a2\";}\n" + +".fa-asl-interpreting:before, .fa-american-sign-language-interpreting:before {content: \"\\f2a3\";}\n" + +".fa-deafness:before, .fa-hard-of-hearing:before, .fa-deaf:before {content: \"\\f2a4\";}\n" + +".fa-glide:before {content: \"\\f2a5\";}\n" + +".fa-glide-g:before {content: \"\\f2a6\";}\n" + +".fa-signing:before, .fa-sign-language:before {content: \"\\f2a7\";}\n" + +".fa-low-vision:before {content: \"\\f2a8\";}\n" + +".fa-viadeo:before {content: \"\\f2a9\";}\n" + +".fa-viadeo-square:before {content: \"\\f2aa\";}\n" + +".fa-snapchat:before {content: \"\\f2ab\";}\n" + +".fa-snapchat-ghost:before {content: \"\\f2ac\";}\n" + +".fa-snapchat-square:before {content: \"\\f2ad\";}\n" + +".fa::before {\n" + +" font-family: FontAwesome;\n" + +" font-weight: 400;\n" + +" font-style: normal;\n" + +" -webkit-font-smoothing: antialiased;\n" + +" text-decoration: inherit;\n" + +" speak: none;\n" + +" display: inline-block;\n" + +" font-size: 13px;\n" + +" visibility: visible;\n" + +"}\n" + +":root:not(.shortcut-icons) #shortcuts .fa::before {\n" + +" display: none;\n" + +"}\n" + +":root.shortcut-icons #shortcuts .fa::before {\n" + +" font-size: 15px !important;\n" + +" margin-top: -3px !important;\n" + +" position: relative;\n" + +" top: 1px;\n" + +"}\n" + +":root.shortcut-icons #shortcuts .fa, .menu-button .fa {\n" + +" font-size: 0;\n" + +" visibility: hidden;\n" + +"}\n" + +":root.shortcut-icons .shortcut.brackets-wrap::after,\n" + +":root.shortcut-icons .shortcut.brackets-wrap::before {\n" + +" display: none;\n" + +"}\n" + +":root.shortcut-icons #shortcuts a .fa,\n" + +".menu-button .fa,\n" + +".hide-reply-button .fa,\n" + +".hide-thread-button .fa {\n" + +" display: inline;\n" + +"}\n" + ".fa-spin::before {\n" + " -webkit-animation:spin 2s infinite linear;\n" + " -moz-animation:spin 2s infinite linear;\n" + @@ -20093,7 +2012,7 @@ ":root.float #updater {\n" + " padding: 0px 3px;\n" + "}\n" + -":root:not(.float) #updater {\n" + +":root:not(.float).shortcut-icons #updater {\n" + " display: inline-block;\n" + " min-width: 12pt;\n" + " text-align: right;\n" + @@ -21046,75 +2965,6 @@ ".boardSubtitle[contenteditable=\"true\"] {\n" + " cursor: text !important;\n" + "}\n" + -"/* Link Title Favicons */\n" + -".linkify.audio {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAitJREFUOE9jYCAWKJWwavr0KyXWb/FIbDtUFFyzJx6nVofE2Xo5nXsj0rqPNSR0nVkR2Hjmgmfd+U9Otdf+m5Vf/6+SfeU/R9ChVVgNYDRtlfJuuPA/rPfe/4QpD/6nznj0P27Kw/9unff/69Xf+69c/+C/SO7N/0z+OAxgMmmRCe++/r9i3ev/KWvf/vdY8PK/bt/9/wrNV3/IN5y/IVt1YqNg4pGTTP4HsbuA2bhZ2qvpyn+xjIObxAp3VwqlrgngLFyryVy5nhPmZJHANS2cwYexG8BmVC/pWn3hP4NZlzWuQDJI3dIiFnUUuwEsQAOcq87jNcC7fHeLUtJxHF4AGmBWeAavAWH1+1rUUk7giAWjOknllON4DXAs2NEiG4/DBQxAF/CFHfrPYI4jDFSLuJVjNrUJhB/B7gIGo1pJRt99GAZYJK7wLJ1z7Xzl4vu/7aqv/GRBj0bjqAX2qb0nJ7mXH17C4HcUxQA+hymWtSue/C5a9up/9Ozn/7Vr7v1nRY7GqMb91T3b3v6vWvPmf/S0p/9ZQk+DDLCBRSOz06Jqk+o7/21nvfqvsebDf7kZL/5zBaxphkezd+OFn7HzXvz3Wvjmv9a8N//5Ek//ZTBpVYUrMG2X5wjcdl68+uI/wa5Lr3hSNjczGFeywOVZ/bbcVGp//F9izfv/Ql03f3P4LC/HSEQquYwMFnUCDJ7dzBhyjGZNQpye89M5gpfnMvtNUyE2h4PUAQBovvT7lyNljwAAAABJRU5ErkJggg==') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.clyp {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAwUExURTSY22ey5E2l4KbS75rM7Y3F64C/6f///8zl9nS45r/f9PL5/UGe3bPY8Vqr4v///wNjrzUAAAABYktHRA8YugDZAAAAB3RJTUUH4AINEi85AIH95AAAAE9JREFUCNdjYMAGGBWgDGYHCM2a3hkAZmi0dzSBaKaO9o5moCqmLiCjYzNQyw4QowIodQzI6E0AKcpo72gE6+Jyb1kAMehUA9RktgdYbQYAjGIVNGGXBJkAAAAASUVORK5CYII=') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.dailymotion {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAnUExURQBk3ff6/trp+kKO5wZt3xx54q7P9Ozz/IS17zOG5WKh653E8sbc9/GbbcoAAABZSURBVAjXY2BAASyhDhAGc9oECMOjyAAiESEEYrBYpLWBGcwHxcvBjDDxHelghpF0yDQwY3kVgweEUeEQDWbMEepqAjO8FMsLIeYsU8o+BrbCdWboTAe4AwALXxWGjW41FwAAAABJRU5ErkJggg==') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.gfycat {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAjVBMVEWn3gCo3gSr3w2t4BSu4Bav4Ri35C+45DK45DO55DXA50rA50vB50zC6E/D6FTF6VjG6VvL62vN7G/P7XbQ7XfW74vY8JDa8ZTe8qDe8qLf86Pi9Kzj9K7k9LHp9sDp98Lq98Ps+Mr0++L5/O75/fD6/fH6/fL6/fP7/fT7/fb8/ff8/vj8/vn+/v7///91X4cfAAAAcklEQVR42o3M2xKBUACF4aVQckrIuRJK6H//x2sme4/MuPDfre9i6c/Cc3U5Dj87BuAxsXvGu6JvIIXEHRWwNHCHQNrCzkAFkbSBg4EM8i+Yw7PXBa3zRfuxVyf/Bis7nKwGKAcWxgC8prI5Sc315OlnDfzpDar2S9/oAAAAAElFTkSuQmCC') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.gist {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABblBMVEXc3NykpKTW1tbb29ugoKCdnZ0AAAACAgIEDRcKCgoMDAwODg4QIzYRDAoTExMUDwwVAg0WICsaEw8aGhoiCBklGxUmERwwKCQ7LSU7Ozs8LSZFLyNINi1JNyxJNy1KSklMOi5VR1FXV1daQTRkZGRseYZwU0F4eHh7dnR8bWV/YE6IdGiKcGCKkJaNgYeNjY2RdGOScWCUcWCZmZmhoaGkpKSoqKirfmaurq6xsbG1tbW6urq+vr7AbmzBb23CwsLGxsbHx8fHyMjJycnJysrMzMzOiYbPi4fQ0NDRoYbT09PU1NTW1tbY2NjZqIzZ2dnb29vd3d3f39/i4uLktZrk5OTl5eXm5ubn5+fo6Ojq6urs7OzttKLu7u7wuqbw8PDx8fHz8/P4+Pj5+fn7uZj8vpz9ya79ybD/tZf/upr/wZ//w6H/xKH/xaL/xrH/yqj/y7T/zqv/z7D/07D/17n/2Lv/2Lz/3L//38n/4Mk3Q/ZuAAAABnRSTlMSFcbGzc5MNKFvAAAA1klEQVQoz2NgYPZHAswMDEwRSclwkBTBxOARn4gE4j0YXBOiJNUDg7y8Ar1UlOITXBkcY73Z2Li42dg42dn4wmIdGeyjQ7nZoEA4PNqewSZKlw0O9KJsGKwjBdl4ZeWkJGQUhNjEIq0ZrMI5+D0ri7Jz8itCRAXCrRgsQ3mUy+xicrPSbfO0REItGSyCVaVL3ONSU9LcCtQUgy0YzIJ85M1LizMzCsv9xF2CzBhMAwN99TV1DI0MtDWcAgNNGUycA5CAswkDi5kDwrMOZiwMjKzGSICVEQDhZj0UQV7PewAAAABJRU5ErkJggg==') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.image {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAs5JREFUOE+lk/tvi1EYx98/xT8gW4REIpGFMEQWl2FiM9ZMZhm2xRAyOsmujFFmdFRHu0tWm87UypxStr69zPauN5e5rHVp3IYhbOvHy+wHEQlxkm+ek+d8nm9OznkeSfrfldmgJC7QyUlTymsJTfuTZ25z4HdWYwyLreYhtpgekGPw0+kKvo1Eo+IXRSIiEhkWZuc9tqnsJD9EqTUopCxjSGTpB0iueczSo1HyW8cpsExQ1DbxI2pt45j9cXpexul4FEd79RnZphAa/SD7WvuFtO6UItbU9LC+YQxNI2w0wwYT5LRAdhOU3oBTIXC9gXP3oUSGgz2vST3gYHejR0jptT1C332f8yrUEYHrz8CgxDnpm6DKCUfc0KnmXa/AEVPPwnDcD0cvetA2uYRk67Ive/lpjO7YBO1PPuF8Df3vwf4cbNE4tqdw7YVq8HYyHx6FvhE1hkMEg8HDUqvFkjT4aIjMqkqyqkswDSrcfBfH+Q561YLAZ/B+BLda6FXlU/cPv0AoEPhuoP1h4Av7Wbh9E/Py15NWWUjeSR3nZDfeN+N0DY9hG/7K1eGP3P0S5/EYRFUF/IOTBrUXHPm9fT6mr1xEwupkZqxbzLyiDJYUZ5NSnkdqdSHpxyrYdFpPgdmAsdfJwPMI/Yr65bf7tZLGGBQ7DNdJWFtIYvoOZmbuZE7OXpIKKli86zAr9p9gTVktWTVnKTI2U95uRWe3U2IJUDbVB5p6hVm5x5m9Vc/cnedZUNzC8lILaQesZBy6hEZ3maKzgvJWFzVWD9XtXvVGQbSWASFtMATVRlJIKbOTWtlJXaeXepuPM1f6MNp9GLt8mLvvYLmp0OhQ2Fwvk6m7xaqDTvY0eYWUVtcnllXfYlGpnfklVuraHHg8HjxuN+6fktUHlWWZPaZeUo/ILK0UKttBcbNbSB9GP0yLxWJJUxoZGUn80zD9C/vXQ/4NHY10h3M1zmQAAAAASUVORK5CYII=') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.installgentoo {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABcVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3dIYAAAAAAAAAAAAbGh4BBAcCBgoBBgoCBwsCCQ/QzucCCA7MyuXZ1eUBBQmTh8fo5/i9svIAAADh3vQAAAACCA0CCQ8CCQ4DDBQbGCUDChDr6vgAAAAAAAAREBIDCxK6tdfe2fTv7/cDCxIDDBQEDRUHDhgMJjXk4PZdXWdLUFoUNEYOKDgSMUMRLUBneI4eTGj08/QmW3onW3rTzvfOx/giU3IiVHMkWHdEaYJobHv3+PokWHpua6TNy9xZgZ+1quz8/foQKj0XPFInWn0nW38tZ4o6fqg8gq48grA9hrU/i7pAhrNAiLdBjLtEjr1FksNIjr5Il8pImMtKWnNqhL97odKFqti5q/q5rPq60+nCt/vLw/vPx/jV0vHY0/rc1/rg2/vh3fzn4fzu6/vx8vf19Pv19Pz49/v5+Pv8/Pv8/fr9/vv+/frziVtUAAAAT3RSTlMABQYHCAoNDhARGRobL0ZOV1xdXV5fYGBmZnB0eX2MjZSaoaGio6mqqqustLq7zubo6Ojo6evt7u/x8fLy9/f4+Pj5+vr6+vr6+/39/v7+XKgUSwAAAMhJREFUKM9jYGDg4OZmZgABKINT1dBAhBHIYFMxMBIDisjbhoZbCTExsCu5hoeY8DEwcOkEx8fY6MqpucTGB0izglVEplcU5/gmRYWBVQDNMK+s0hN3SvMyBpsBNJxXw0NfwTEjVQZqHQMHj5RfWW5mliSEC7TPzK6yJD/bXZQRzGdXcisqLy309okA2Q4Eis4peQWmstqBCdGW/CABraC45ERBBs3A6Fh/AbAKTwsHa34QZW8NVsGuLqwswQSjQICTmYMFQaEDAAF8JHLfKGswAAAAAElFTkSuQmCC') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.liveleak {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAlNJREFUGBkFwU2LVmUYAODrPu8Z5x1xSpRBXQyFoLsBE+wfiO5atJOgnf9DUPwFgtGinUgEaQsRhHYuMtpEiEWuG5iNjuOcj+c8z911xXcXL/68c3Dw1fzhg0QgEQAAEYGUKXFie9vxlSs/xk/rdavjGEkmkWSih65z4osv9GfOiK6LzEyZ2uGh4dUrmzs72ddlUUhkoiMr4PT167589Mh6c1N0nSRlqrX67dat+PDyZXRT19m5edPnt28rGFHxMcJ6d9fprS1/37tneP3aemPD1uamUydPOru3p5DdGOH0tWsu3LhhxIQJM2qEpRT/Pn3q/du3AhARSmvGTH0lplKMrVkiYpVpQaJlighzhDkzhmEA0fcWoqAfyaFW4zTlgCABxlrNmY4ylUzLsiREprFWc0T2M+ZSjKWY0AEaltZUjJixZJIpuk5pTWlNP2BYFvOyKJkCAKU1tTXHrZlqVWolUxdhxsfVSj9FmJfFMM9GdICGGa01HyMstYpMIFPJVNDPmYZSTOPoOEKHzNRlKpmWWh1j6TpLa2SKTKVWU6Z+Qolwdm/P9QcPZKa2LH69e9eIMs+WCL/cv2/98CGZPrt61am+V9APq1X89eyZ/968obVYaiXT4dGREgG+vnPHeHgYMsH2+fP+efEihtVKv7SWw/6+9/v7KYLMhIywTJPamvOXLomukyRsrNf+ePzYkpl9dJ3SWgSCSCQCfz5/7pMLF2yfO6eLiAQcHRz4/cmT+HR7O+Ob3d0fNt69+7a2BiICQCJbA0EgE5lpvbXl1OXL3/8Pfax4+6SjSukAAAAASUVORK5CYII=') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.pastebin {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAB1FBMVEUAAAAAAAAAAABWYWwAAABbY3BbYm5dZnFdZXJeZnMEBAQHCAhYYGpdZnFdZnBgaHIlJyomKCooKi09QkdESU5eZGtdYmhdYmleY2lrcXdqb3Rqb3Rqb3SSmJ+SlJeWmJutr7GtrrCWm6ChpKhbW1tmZmZvb290dHR3d3d4eHh5eXl6enp8fHx+gIJ/f3+CgoKDg4OEhISFhYWHh4eKioqKjI2Li4uMjIyOjo6Pj4+QkJCRkZGSkpKUlJSVl5mWlpaYmZqZm52ampqbm5ucnJydnZ2enp6fn5+hoaGioqKkpKSkpaalpaWmp6mmp6qnqauoqKioqquoqq2qqqqrrK2srKysra6srrCsrrGurq6vr6+wsLCxsbGysrKztLa0tLS1t7m2tra3t7e4uLi5ubm6urq7u7u8vLy9vb2+vr7AwMDAwsTBwcHExcfFxcXFxsnGxsbHx8fIyMjJycnMzMzNzc3Ozs7O0NLPz8/Q0NDR0dHR09XT09PV1dXV1dbV1tfV19rW1tbX19fX19jY2tzZ2dnZ2tva2tra3N3a3N7c3Nze3t7f39/f4OHg4ODi4uLl5+jm5ubs7Ozs7e3u7u7v7+/v8PDw8PDx8fHy8vLz8/P29vYSoLMZAAAAJHRSTlMABAUGCwsNHCAiLzMzMzZEYGJwgIuOnJycnqmqq9bc3+/w8fkZ0N/uAAAA/klEQVQoU2NgYGDl5YMDdgYGBmZZ3964CYFtIR3e9Q7K/AwMHI55KfaFmcHWMy3K3MwlGRg4wz0zdYpcorRbNbL0LaWAAp3ts2umV8wo6MupTauQBgqUG03VL7W3sfZSb1erAgm02M+yzYrVCXUy6zapAQlUx/dEdyX3J3ZHVUYVywAF8o2rDNN1Go2jzGLMokAC2QbuSc42mXmaOXop9iAtCXrJ5qXWjT59Abl2ESJAAX/tSIMMiyrrqQ3T6uS5gQK6kSqpqkUermGTexQFmYACflqR+hlWZSamzQpCLEDPsSmVVDT1TJw0JUhOAMRnYOARFRMTE5cQF+ZiBPIAII5B3EVG0b4AAAAASUVORK5CYII=') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.soundcloud {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABsklEQVQ4y5WTy2pUQRCGv2rbzDjJeAlIBmOyipGIIJqFEBDElwh4yULGeRFXPoEIBl/AvQ/gC2RnxCAoxijiwks852S6+3dxzslcHJCpTXVX11/Xv0097gLPgVNMJxnQNfX4zsqleWbnpoMf/oa9d988MM9MC/rp+E0a+A0dsVobMNMCOO8B6McRoABJI+A6gJmN3D2A8jgEBCEkSEMBrcrsDAzDWWn3AjgKFaDMmgRqniGFgsaDp1jrLOngDf1XT1D+A1dFc4MKAkkiCVKjjVu7g9+4Rzx4i1u6hjXbuMWr0O5QPNvCu7IaCZwEKQukLGDrm5x8uI0tr6MkiGlkiv7yLfzN+6S5i6QsIMABkEfcxhbWWYMkVAOjxvYAjc3HNHrbKI9VBQBFwF25XQKSBjqIf1YBuAurEMrczgDygD6/x2LCpFLXLUyQ+PoldphhBhYfIX09XU1+Flaukz7uYqs3SHs7cG4BmTsmkBUF9mmXEwa28BNLPaQPLepuNcbGSWQquQC2/Kdcox1FUGkcB0ykck1nA2+wTzMs8stGnP4rbWGw74EuS/GFQWfK7/wF6P4F7fzIAYkdmdEAAAAASUVORK5CYII=') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.twitchtv {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAYUExURf///2RBpWRBpWRBpWRBpWRBpWRBpf///+zQyUYAAAAGdFJOUwFdZX0lTzs4r5oAAAABYktHRAcWYYjrAAAAB3RJTUUH4AINEi42iSXRNAAAAD1JREFUCNdjYEiDAAZGGIMtjQEEUBlMCWoEGci6mGEMsxQgIy0BiB3AjLS0FAYQIw0kwABipoI1AhkBQBIAFCIXxiHgq80AAAAASUVORK5CYII=') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.twitter {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAEsUExURf///1Cf21Gg3FGi31Gh3VKj4FGh3lKj4VKk4lKl41Ol5FOn51Sp6VSo6FOn5lCf21Gg3FGh3VGi31Gi31Gh3lGg3FGg3FGg3FGg3FGh3lGg3FGi31Kk4lKj4FGh3lGi31Kk4lGh3lGg3FGh3lOm5FOm5VGi31Kj4VSo6FGi31Gh3VGg3FKj4FOn51Gi31So6FWr7VOl5FGi31On51Sq6lKk4lOo51Sp6VOm5FSq61Ws7VOn51Oo51Sq61Ol5FOm5FSq61Wr7VOo51On51Sr7FWs7VSp6lGg3FGh3VOm5FWr7VSp6lKj4VOm5FSo6FSr7FWs7VWs7VWr7VSq6lOo51Om5FOo51So6FOm5VOl5FSq61Ws7VSr7FSp6lSp6VWs7lWr7VKk4lSq6v///6E3MNsAAABVdFJOUwAAAAAAAAAAAAAAAAAAAB0Ii+3xnBVTJhfsMKb+qTEp9GwBF/7lLAbo0m4pLkUTdvk2Ev3+EZnOBo/3Z8ffCRzH/D0OqPxiLnvx3UI8m9n1++GwXQZNS29BAAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ACDRIwBwy67tEAAADKSURBVBjTY2BAB4xogIGRH8IQEBQSFhEVE2eQkJQC8ZmkQ8PCI2Rk5RjkIxUUlRgZlVWioqNjYlXVGNQ14iI1tbR14qLj4+MTdJkZ9PQNosJCE0OjgPz4KEMWBiPjhPiEmKQokIJ4E1MmBmazhHg4MGdlYmCzsLSC8ROsmRkZmFht4Eps7ViADmOzd4DyHZ2YmYACTOzOLmATXd04mIBOd/eQ9owFCXh5c7KB/MLi4+vnHxAYFBzCwcYEEmBi5uLm4eHl42RmAnsSAMZBLgZiFUQ5AAAAAElFTkSuQmCC') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.video {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAxgDGAP8nNqN7AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gMZBjQQLEEqGwAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAA5SURBVDjLY2AYaMDIwMDwn1JD/lPCZhpwL+B1wf///ykzgBhDiAoDfIYQZQAjIyP5BuDTPJqQqAQAvW0ZAMk8+EEAAAAASUVORK5CYII=') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.vimeo {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAYFBMVEUAAAAIdZUKh6sLlLkLmr4LmsAMp88NrdYVW3MZj7Acstkrt9s1e5E7vN5EfI9JvdtKwuBijp5kpbl30eiDt8aG1uqRr7qTyNehxM+k4PCy3enB3OTg6Ovv9PXw+fz////L9U5WAAAAAXRSTlMAQObYZgAAAIFJREFUeNplz90OwiAMBWAQpAoyxclkP3je/y0H2AQXz0WT8100rRD6kNI9/cRroemQL3hXhoujZYj4OHoAmBvYGcBISwbWBvfXCrytnIDUQMkbsBpagMA7zhtQdyTFQAmIG7IkYniiZuh3XGsPqoOZkMOJOpAcLqUzNFGGu/57fwc1hgtp0mVSyQAAAABJRU5ErkJggg==') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.vine {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAHCUExURQAAAAC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+j////54tRLAAAACUdFJOUwAAAEK+9/e+QQIDAwEqzskfUZmUNHz2mrT++V1w+f5tCanNFUDwfEjtjAyyvg027Hki27QMBJzaHE/1+FkNsN0iZvv6bxyAlB589lQeyud0KB8PQO+ZBUrc+eXgcRG/3CoATe316Wxw/P6BAgBt+fp4IAwh0d4zM9q7Fm76qi605EMSrvfX/PRtAivF9IAJNMLxhA2KYlJ9AAAAAWJLR0SVCGB6gwAAAAd0SU1FB+ACDRI2MOJd7FgAAADrSURBVBjTLY9VWwJgGEPfiYWBha2YYHcHditgd3d3odjdivvBfgK727nYsyPiCrw03j6+fv6AaAMCgyAI1lElJBQSFh6hBxDJqOiY2Lh4SEKiIQlITmFqWrqRJkhGJrOA7Bzm5uUXsBBSVMySUpSVs6KyqrqmFmKuY30D0NjU3NLa1t6h9jvZ1Q30WGi19fb1KzAwyKFhYGSUY+MTkwpMTXNmFpibX+Di0rICWFldW9/A5tb2zu7ePtTrg0MeHePklPYzuDRw7uDF5RWvbwC32O0d7x8en55f4DHF6xv5/vHp6f/k6/vH+evuf1LAObptvSvrAAAAAElFTkSuQmCC') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.vocaroo {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAw9JREFUOE9jYMABuMwYmCyTJKUCGlSnFSy02TTzeOyCiQcDViX26qVz2TAyYtWmEMwuoZ3M7V40LcB79pHkc0svpvzY8jD//87nxf+3Pyn8v/ZO8v+VNyP/2mZJumI1QCWSI8232Hjumitlfw5+qPp/9l8TCt76JP//xkdx/wsXWCzjtWFkwTCkbWFe9plPk/+ga4Txz/xt/D/hkN//gMXif21a+NbyWjIwoRiy6GDT5rP/mlFsPfyp5n/NpOj/22+0gMUXXIz/H7hC/L/bFKFbPDZMrHAD5H35OPt2J9zacDv/f3V7xv9FhwrBGubsT/1//Pjx/1GJ/mD+/nfl/1v3Ovy3KRJNQbHdOlXCvOO03/+pm1P/v3v37n90hhtYw9HPtf8Xb2v937cmHswHeWPRxYj/LvkK3igGKARwicTO07118H3V/5kbi/4vPZMJtK3s/6YH2f+Pfq1B8VbjWrdnMu5s4nAD9CNFhKwz5DTUvLl419zKvAcLtG1P84BRl/b/5M/6/6f/NPzf/qzo84yj0Uus0xUU4Zor54bm9+4OfZG02OCuoAMTb9ZkC9ull1Nvrr2Z+XvRpaRfc65H/68F+jl9svEhzyLFWoccWVc+eyTHq/twydjlKRln7jX9bNMkMJnbhoFRL1xCqmKx6/yi2fYXa/c5/e846PV/5fW0/7OPx/yfcjzop34ulxdGGvDuU8mMXaX507lBuiN6ueadmQeT/p/93vf/1O+G//sP5fw/eL3o/5JLif8zVxs+Tlir9S26UyeFQQvJGBE7FvaFZ9LfN+1y+WjbItSb3GmXvXd15v8zroH/HxgE/D+aGPx/18vi/z07PeZNPRKxe/Kh0Ae8toxscCO4zBkYXArk9C1SxJUYjBkYPPIVtbbuTftz3cz//2O9wP/75iSAXdO72/dt2HL5F6YlfBW4MiJYXMiBiW3t7azHBx+V/t89N+H/8a+1//e9K/9attDp5LQjYX8SuvVL8RoAkmxa65299Erq1FnHo0qrl7t4BddriIs4MrM3rfWcFd+pGwVSAwBZ0bKP8yrZPAAAAABJRU5ErkJggg==') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + -".linkify.youtube {\n" + -" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABIklEQVQoz53LvUrDUBjG8bOoOammSf1IoBSvoCB4JeIqOHgBLt6AIMRBBQelWurQ2kERnMRBsBUcIp5FJSBI5oQsJVkkUHh8W0o5nhaFHvjBgef/Mq+Q46RJBMkI/vE+aOus956tnEswIZe1LV0QyJ5sE2GzgZfVMtRNIdiDpccEssdlB1mW4bvTwdvWJtRdErM7U+8S/FJykCRJX5qm+KpVce8UMNLRLbulz4iSjTAMh6Iowsd5BeNadp3nUF0VlxAEwZBotXC0Usa4ll3meZdA1iguwvf9vpvDA2wvmKgYGtSud8suDB4TyGr2PF49D/vra9jRZ1BVdknMzgwuCGSnZEObwu6sBnVTCHZiaC7BhFx2PKdxUidiAH/4lLo9Mv0DELVs9qsOHXwAAAAASUVORK5CYII=') center left no-repeat!important;\n" + -" padding-left: 18px;\n" + -"}\n" + "/* Embedding */\n" + "#embedding {\n" + " padding: 1px 4px 1px 4px;\n" + @@ -21874,6 +3724,75 @@ "{\n" + " background-image: url(\"data:image/svg+xml,\");\n" + "}\n" + +"/* Link Title Favicons */\n" + +".linkify.audio {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAitJREFUOE9jYCAWKJWwavr0KyXWb/FIbDtUFFyzJx6nVofE2Xo5nXsj0rqPNSR0nVkR2Hjmgmfd+U9Otdf+m5Vf/6+SfeU/R9ChVVgNYDRtlfJuuPA/rPfe/4QpD/6nznj0P27Kw/9unff/69Xf+69c/+C/SO7N/0z+OAxgMmmRCe++/r9i3ev/KWvf/vdY8PK/bt/9/wrNV3/IN5y/IVt1YqNg4pGTTP4HsbuA2bhZ2qvpyn+xjIObxAp3VwqlrgngLFyryVy5nhPmZJHANS2cwYexG8BmVC/pWn3hP4NZlzWuQDJI3dIiFnUUuwEsQAOcq87jNcC7fHeLUtJxHF4AGmBWeAavAWH1+1rUUk7giAWjOknllON4DXAs2NEiG4/DBQxAF/CFHfrPYI4jDFSLuJVjNrUJhB/B7gIGo1pJRt99GAZYJK7wLJ1z7Xzl4vu/7aqv/GRBj0bjqAX2qb0nJ7mXH17C4HcUxQA+hymWtSue/C5a9up/9Ozn/7Vr7v1nRY7GqMb91T3b3v6vWvPmf/S0p/9ZQk+DDLCBRSOz06Jqk+o7/21nvfqvsebDf7kZL/5zBaxphkezd+OFn7HzXvz3Wvjmv9a8N//5Ek//ZTBpVYUrMG2X5wjcdl68+uI/wa5Lr3hSNjczGFeywOVZ/bbcVGp//F9izfv/Ql03f3P4LC/HSEQquYwMFnUCDJ7dzBhyjGZNQpye89M5gpfnMvtNUyE2h4PUAQBovvT7lyNljwAAAABJRU5ErkJggg==') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.clyp {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAwUExURTSY22ey5E2l4KbS75rM7Y3F64C/6f///8zl9nS45r/f9PL5/UGe3bPY8Vqr4v///wNjrzUAAAABYktHRA8YugDZAAAAB3RJTUUH4AINEi85AIH95AAAAE9JREFUCNdjYMAGGBWgDGYHCM2a3hkAZmi0dzSBaKaO9o5moCqmLiCjYzNQyw4QowIodQzI6E0AKcpo72gE6+Jyb1kAMehUA9RktgdYbQYAjGIVNGGXBJkAAAAASUVORK5CYII=') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.dailymotion {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAnUExURQBk3ff6/trp+kKO5wZt3xx54q7P9Ozz/IS17zOG5WKh653E8sbc9/GbbcoAAABZSURBVAjXY2BAASyhDhAGc9oECMOjyAAiESEEYrBYpLWBGcwHxcvBjDDxHelghpF0yDQwY3kVgweEUeEQDWbMEepqAjO8FMsLIeYsU8o+BrbCdWboTAe4AwALXxWGjW41FwAAAABJRU5ErkJggg==') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.gfycat {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAjVBMVEWn3gCo3gSr3w2t4BSu4Bav4Ri35C+45DK45DO55DXA50rA50vB50zC6E/D6FTF6VjG6VvL62vN7G/P7XbQ7XfW74vY8JDa8ZTe8qDe8qLf86Pi9Kzj9K7k9LHp9sDp98Lq98Ps+Mr0++L5/O75/fD6/fH6/fL6/fP7/fT7/fb8/ff8/vj8/vn+/v7///91X4cfAAAAcklEQVR42o3M2xKBUACF4aVQckrIuRJK6H//x2sme4/MuPDfre9i6c/Cc3U5Dj87BuAxsXvGu6JvIIXEHRWwNHCHQNrCzkAFkbSBg4EM8i+Yw7PXBa3zRfuxVyf/Bis7nKwGKAcWxgC8prI5Sc315OlnDfzpDar2S9/oAAAAAElFTkSuQmCC') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.gist {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABblBMVEXc3NykpKTW1tbb29ugoKCdnZ0AAAACAgIEDRcKCgoMDAwODg4QIzYRDAoTExMUDwwVAg0WICsaEw8aGhoiCBklGxUmERwwKCQ7LSU7Ozs8LSZFLyNINi1JNyxJNy1KSklMOi5VR1FXV1daQTRkZGRseYZwU0F4eHh7dnR8bWV/YE6IdGiKcGCKkJaNgYeNjY2RdGOScWCUcWCZmZmhoaGkpKSoqKirfmaurq6xsbG1tbW6urq+vr7AbmzBb23CwsLGxsbHx8fHyMjJycnJysrMzMzOiYbPi4fQ0NDRoYbT09PU1NTW1tbY2NjZqIzZ2dnb29vd3d3f39/i4uLktZrk5OTl5eXm5ubn5+fo6Ojq6urs7OzttKLu7u7wuqbw8PDx8fHz8/P4+Pj5+fn7uZj8vpz9ya79ybD/tZf/upr/wZ//w6H/xKH/xaL/xrH/yqj/y7T/zqv/z7D/07D/17n/2Lv/2Lz/3L//38n/4Mk3Q/ZuAAAABnRSTlMSFcbGzc5MNKFvAAAA1klEQVQoz2NgYPZHAswMDEwRSclwkBTBxOARn4gE4j0YXBOiJNUDg7y8Ar1UlOITXBkcY73Z2Li42dg42dn4wmIdGeyjQ7nZoEA4PNqewSZKlw0O9KJsGKwjBdl4ZeWkJGQUhNjEIq0ZrMI5+D0ri7Jz8itCRAXCrRgsQ3mUy+xicrPSbfO0REItGSyCVaVL3ONSU9LcCtQUgy0YzIJ85M1LizMzCsv9xF2CzBhMAwN99TV1DI0MtDWcAgNNGUycA5CAswkDi5kDwrMOZiwMjKzGSICVEQDhZj0UQV7PewAAAABJRU5ErkJggg==') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.image {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAs5JREFUOE+lk/tvi1EYx98/xT8gW4REIpGFMEQWl2FiM9ZMZhm2xRAyOsmujFFmdFRHu0tWm87UypxStr69zPauN5e5rHVp3IYhbOvHy+wHEQlxkm+ek+d8nm9OznkeSfrfldmgJC7QyUlTymsJTfuTZ25z4HdWYwyLreYhtpgekGPw0+kKvo1Eo+IXRSIiEhkWZuc9tqnsJD9EqTUopCxjSGTpB0iueczSo1HyW8cpsExQ1DbxI2pt45j9cXpexul4FEd79RnZphAa/SD7WvuFtO6UItbU9LC+YQxNI2w0wwYT5LRAdhOU3oBTIXC9gXP3oUSGgz2vST3gYHejR0jptT1C332f8yrUEYHrz8CgxDnpm6DKCUfc0KnmXa/AEVPPwnDcD0cvetA2uYRk67Ive/lpjO7YBO1PPuF8Df3vwf4cbNE4tqdw7YVq8HYyHx6FvhE1hkMEg8HDUqvFkjT4aIjMqkqyqkswDSrcfBfH+Q561YLAZ/B+BLda6FXlU/cPv0AoEPhuoP1h4Av7Wbh9E/Py15NWWUjeSR3nZDfeN+N0DY9hG/7K1eGP3P0S5/EYRFUF/IOTBrUXHPm9fT6mr1xEwupkZqxbzLyiDJYUZ5NSnkdqdSHpxyrYdFpPgdmAsdfJwPMI/Yr65bf7tZLGGBQ7DNdJWFtIYvoOZmbuZE7OXpIKKli86zAr9p9gTVktWTVnKTI2U95uRWe3U2IJUDbVB5p6hVm5x5m9Vc/cnedZUNzC8lILaQesZBy6hEZ3maKzgvJWFzVWD9XtXvVGQbSWASFtMATVRlJIKbOTWtlJXaeXepuPM1f6MNp9GLt8mLvvYLmp0OhQ2Fwvk6m7xaqDTvY0eYWUVtcnllXfYlGpnfklVuraHHg8HjxuN+6fktUHlWWZPaZeUo/ILK0UKttBcbNbSB9GP0yLxWJJUxoZGUn80zD9C/vXQ/4NHY10h3M1zmQAAAAASUVORK5CYII=') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.installgentoo {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABcVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3dIYAAAAAAAAAAAAbGh4BBAcCBgoBBgoCBwsCCQ/QzucCCA7MyuXZ1eUBBQmTh8fo5/i9svIAAADh3vQAAAACCA0CCQ8CCQ4DDBQbGCUDChDr6vgAAAAAAAAREBIDCxK6tdfe2fTv7/cDCxIDDBQEDRUHDhgMJjXk4PZdXWdLUFoUNEYOKDgSMUMRLUBneI4eTGj08/QmW3onW3rTzvfOx/giU3IiVHMkWHdEaYJobHv3+PokWHpua6TNy9xZgZ+1quz8/foQKj0XPFInWn0nW38tZ4o6fqg8gq48grA9hrU/i7pAhrNAiLdBjLtEjr1FksNIjr5Il8pImMtKWnNqhL97odKFqti5q/q5rPq60+nCt/vLw/vPx/jV0vHY0/rc1/rg2/vh3fzn4fzu6/vx8vf19Pv19Pz49/v5+Pv8/Pv8/fr9/vv+/frziVtUAAAAT3RSTlMABQYHCAoNDhARGRobL0ZOV1xdXV5fYGBmZnB0eX2MjZSaoaGio6mqqqustLq7zubo6Ojo6evt7u/x8fLy9/f4+Pj5+vr6+vr6+/39/v7+XKgUSwAAAMhJREFUKM9jYGDg4OZmZgABKINT1dBAhBHIYFMxMBIDisjbhoZbCTExsCu5hoeY8DEwcOkEx8fY6MqpucTGB0izglVEplcU5/gmRYWBVQDNMK+s0hN3SvMyBpsBNJxXw0NfwTEjVQZqHQMHj5RfWW5mliSEC7TPzK6yJD/bXZQRzGdXcisqLy309okA2Q4Eis4peQWmstqBCdGW/CABraC45ERBBs3A6Fh/AbAKTwsHa34QZW8NVsGuLqwswQSjQICTmYMFQaEDAAF8JHLfKGswAAAAAElFTkSuQmCC') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.liveleak {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAlNJREFUGBkFwU2LVmUYAODrPu8Z5x1xSpRBXQyFoLsBE+wfiO5atJOgnf9DUPwFgtGinUgEaQsRhHYuMtpEiEWuG5iNjuOcj+c8z911xXcXL/68c3Dw1fzhg0QgEQAAEYGUKXFie9vxlSs/xk/rdavjGEkmkWSih65z4osv9GfOiK6LzEyZ2uGh4dUrmzs72ddlUUhkoiMr4PT167589Mh6c1N0nSRlqrX67dat+PDyZXRT19m5edPnt28rGFHxMcJ6d9fprS1/37tneP3aemPD1uamUydPOru3p5DdGOH0tWsu3LhhxIQJM2qEpRT/Pn3q/du3AhARSmvGTH0lplKMrVkiYpVpQaJlighzhDkzhmEA0fcWoqAfyaFW4zTlgCABxlrNmY4ylUzLsiREprFWc0T2M+ZSjKWY0AEaltZUjJixZJIpuk5pTWlNP2BYFvOyKJkCAKU1tTXHrZlqVWolUxdhxsfVSj9FmJfFMM9GdICGGa01HyMstYpMIFPJVNDPmYZSTOPoOEKHzNRlKpmWWh1j6TpLa2SKTKVWU6Z+Qolwdm/P9QcPZKa2LH69e9eIMs+WCL/cv2/98CGZPrt61am+V9APq1X89eyZ/968obVYaiXT4dGREgG+vnPHeHgYMsH2+fP+efEihtVKv7SWw/6+9/v7KYLMhIywTJPamvOXLomukyRsrNf+ePzYkpl9dJ3SWgSCSCQCfz5/7pMLF2yfO6eLiAQcHRz4/cmT+HR7O+Ob3d0fNt69+7a2BiICQCJbA0EgE5lpvbXl1OXL3/8Pfax4+6SjSukAAAAASUVORK5CYII=') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.pastebin {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAB1FBMVEUAAAAAAAAAAABWYWwAAABbY3BbYm5dZnFdZXJeZnMEBAQHCAhYYGpdZnFdZnBgaHIlJyomKCooKi09QkdESU5eZGtdYmhdYmleY2lrcXdqb3Rqb3Rqb3SSmJ+SlJeWmJutr7GtrrCWm6ChpKhbW1tmZmZvb290dHR3d3d4eHh5eXl6enp8fHx+gIJ/f3+CgoKDg4OEhISFhYWHh4eKioqKjI2Li4uMjIyOjo6Pj4+QkJCRkZGSkpKUlJSVl5mWlpaYmZqZm52ampqbm5ucnJydnZ2enp6fn5+hoaGioqKkpKSkpaalpaWmp6mmp6qnqauoqKioqquoqq2qqqqrrK2srKysra6srrCsrrGurq6vr6+wsLCxsbGysrKztLa0tLS1t7m2tra3t7e4uLi5ubm6urq7u7u8vLy9vb2+vr7AwMDAwsTBwcHExcfFxcXFxsnGxsbHx8fIyMjJycnMzMzNzc3Ozs7O0NLPz8/Q0NDR0dHR09XT09PV1dXV1dbV1tfV19rW1tbX19fX19jY2tzZ2dnZ2tva2tra3N3a3N7c3Nze3t7f39/f4OHg4ODi4uLl5+jm5ubs7Ozs7e3u7u7v7+/v8PDw8PDx8fHy8vLz8/P29vYSoLMZAAAAJHRSTlMABAUGCwsNHCAiLzMzMzZEYGJwgIuOnJycnqmqq9bc3+/w8fkZ0N/uAAAA/klEQVQoU2NgYGDl5YMDdgYGBmZZ3964CYFtIR3e9Q7K/AwMHI55KfaFmcHWMy3K3MwlGRg4wz0zdYpcorRbNbL0LaWAAp3ts2umV8wo6MupTauQBgqUG03VL7W3sfZSb1erAgm02M+yzYrVCXUy6zapAQlUx/dEdyX3J3ZHVUYVywAF8o2rDNN1Go2jzGLMokAC2QbuSc42mXmaOXop9iAtCXrJ5qXWjT59Abl2ESJAAX/tSIMMiyrrqQ3T6uS5gQK6kSqpqkUermGTexQFmYACflqR+hlWZSamzQpCLEDPsSmVVDT1TJw0JUhOAMRnYOARFRMTE5cQF+ZiBPIAII5B3EVG0b4AAAAASUVORK5CYII=') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.soundcloud {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABsklEQVQ4y5WTy2pUQRCGv2rbzDjJeAlIBmOyipGIIJqFEBDElwh4yULGeRFXPoEIBl/AvQ/gC2RnxCAoxijiwks852S6+3dxzslcHJCpTXVX11/Xv0097gLPgVNMJxnQNfX4zsqleWbnpoMf/oa9d988MM9MC/rp+E0a+A0dsVobMNMCOO8B6McRoABJI+A6gJmN3D2A8jgEBCEkSEMBrcrsDAzDWWn3AjgKFaDMmgRqniGFgsaDp1jrLOngDf1XT1D+A1dFc4MKAkkiCVKjjVu7g9+4Rzx4i1u6hjXbuMWr0O5QPNvCu7IaCZwEKQukLGDrm5x8uI0tr6MkiGlkiv7yLfzN+6S5i6QsIMABkEfcxhbWWYMkVAOjxvYAjc3HNHrbKI9VBQBFwF25XQKSBjqIf1YBuAurEMrczgDygD6/x2LCpFLXLUyQ+PoldphhBhYfIX09XU1+Flaukz7uYqs3SHs7cG4BmTsmkBUF9mmXEwa28BNLPaQPLepuNcbGSWQquQC2/Kdcox1FUGkcB0ykck1nA2+wTzMs8stGnP4rbWGw74EuS/GFQWfK7/wF6P4F7fzIAYkdmdEAAAAASUVORK5CYII=') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.twitchtv {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAYUExURf///2RBpWRBpWRBpWRBpWRBpWRBpf///+zQyUYAAAAGdFJOUwFdZX0lTzs4r5oAAAABYktHRAcWYYjrAAAAB3RJTUUH4AINEi42iSXRNAAAAD1JREFUCNdjYEiDAAZGGIMtjQEEUBlMCWoEGci6mGEMsxQgIy0BiB3AjLS0FAYQIw0kwABipoI1AhkBQBIAFCIXxiHgq80AAAAASUVORK5CYII=') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.twitter {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAEsUExURf///1Cf21Gg3FGi31Gh3VKj4FGh3lKj4VKk4lKl41Ol5FOn51Sp6VSo6FOn5lCf21Gg3FGh3VGi31Gi31Gh3lGg3FGg3FGg3FGg3FGh3lGg3FGi31Kk4lKj4FGh3lGi31Kk4lGh3lGg3FGh3lOm5FOm5VGi31Kj4VSo6FGi31Gh3VGg3FKj4FOn51Gi31So6FWr7VOl5FGi31On51Sq6lKk4lOo51Sp6VOm5FSq61Ws7VOn51Oo51Sq61Ol5FOm5FSq61Wr7VOo51On51Sr7FWs7VSp6lGg3FGh3VOm5FWr7VSp6lKj4VOm5FSo6FSr7FWs7VWs7VWr7VSq6lOo51Om5FOo51So6FOm5VOl5FSq61Ws7VSr7FSp6lSp6VWs7lWr7VKk4lSq6v///6E3MNsAAABVdFJOUwAAAAAAAAAAAAAAAAAAAB0Ii+3xnBVTJhfsMKb+qTEp9GwBF/7lLAbo0m4pLkUTdvk2Ev3+EZnOBo/3Z8ffCRzH/D0OqPxiLnvx3UI8m9n1++GwXQZNS29BAAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ACDRIwBwy67tEAAADKSURBVBjTY2BAB4xogIGRH8IQEBQSFhEVE2eQkJQC8ZmkQ8PCI2Rk5RjkIxUUlRgZlVWioqNjYlXVGNQ14iI1tbR14qLj4+MTdJkZ9PQNosJCE0OjgPz4KEMWBiPjhPiEmKQokIJ4E1MmBmazhHg4MGdlYmCzsLSC8ROsmRkZmFht4Eps7ViADmOzd4DyHZ2YmYACTOzOLmATXd04mIBOd/eQ9owFCXh5c7KB/MLi4+vnHxAYFBzCwcYEEmBi5uLm4eHl42RmAnsSAMZBLgZiFUQ5AAAAAElFTkSuQmCC') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.video {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QAxgDGAP8nNqN7AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gMZBjQQLEEqGwAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAA5SURBVDjLY2AYaMDIwMDwn1JD/lPCZhpwL+B1wf///ykzgBhDiAoDfIYQZQAjIyP5BuDTPJqQqAQAvW0ZAMk8+EEAAAAASUVORK5CYII=') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.vimeo {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAYFBMVEUAAAAIdZUKh6sLlLkLmr4LmsAMp88NrdYVW3MZj7Acstkrt9s1e5E7vN5EfI9JvdtKwuBijp5kpbl30eiDt8aG1uqRr7qTyNehxM+k4PCy3enB3OTg6Ovv9PXw+fz////L9U5WAAAAAXRSTlMAQObYZgAAAIFJREFUeNplz90OwiAMBWAQpAoyxclkP3je/y0H2AQXz0WT8100rRD6kNI9/cRroemQL3hXhoujZYj4OHoAmBvYGcBISwbWBvfXCrytnIDUQMkbsBpagMA7zhtQdyTFQAmIG7IkYniiZuh3XGsPqoOZkMOJOpAcLqUzNFGGu/57fwc1hgtp0mVSyQAAAABJRU5ErkJggg==') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.vine {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAHCUExURQAAAAC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+jwC+j////54tRLAAAACUdFJOUwAAAEK+9/e+QQIDAwEqzskfUZmUNHz2mrT++V1w+f5tCanNFUDwfEjtjAyyvg027Hki27QMBJzaHE/1+FkNsN0iZvv6bxyAlB589lQeyud0KB8PQO+ZBUrc+eXgcRG/3CoATe316Wxw/P6BAgBt+fp4IAwh0d4zM9q7Fm76qi605EMSrvfX/PRtAivF9IAJNMLxhA2KYlJ9AAAAAWJLR0SVCGB6gwAAAAd0SU1FB+ACDRI2MOJd7FgAAADrSURBVBjTLY9VWwJgGEPfiYWBha2YYHcHditgd3d3odjdivvBfgK727nYsyPiCrw03j6+fv6AaAMCgyAI1lElJBQSFh6hBxDJqOiY2Lh4SEKiIQlITmFqWrqRJkhGJrOA7Bzm5uUXsBBSVMySUpSVs6KyqrqmFmKuY30D0NjU3NLa1t6h9jvZ1Q30WGi19fb1KzAwyKFhYGSUY+MTkwpMTXNmFpibX+Di0rICWFldW9/A5tb2zu7ePtTrg0MeHePklPYzuDRw7uDF5RWvbwC32O0d7x8en55f4DHF6xv5/vHp6f/k6/vH+evuf1LAObptvSvrAAAAAElFTkSuQmCC') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.vocaroo {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAw9JREFUOE9jYMABuMwYmCyTJKUCGlSnFSy02TTzeOyCiQcDViX26qVz2TAyYtWmEMwuoZ3M7V40LcB79pHkc0svpvzY8jD//87nxf+3Pyn8v/ZO8v+VNyP/2mZJumI1QCWSI8232Hjumitlfw5+qPp/9l8TCt76JP//xkdx/wsXWCzjtWFkwTCkbWFe9plPk/+ga4Txz/xt/D/hkN//gMXif21a+NbyWjIwoRiy6GDT5rP/mlFsPfyp5n/NpOj/22+0gMUXXIz/H7hC/L/bFKFbPDZMrHAD5H35OPt2J9zacDv/f3V7xv9FhwrBGubsT/1//Pjx/1GJ/mD+/nfl/1v3Ovy3KRJNQbHdOlXCvOO03/+pm1P/v3v37n90hhtYw9HPtf8Xb2v937cmHswHeWPRxYj/LvkK3igGKARwicTO07118H3V/5kbi/4vPZMJtK3s/6YH2f+Pfq1B8VbjWrdnMu5s4nAD9CNFhKwz5DTUvLl419zKvAcLtG1P84BRl/b/5M/6/6f/NPzf/qzo84yj0Uus0xUU4Zor54bm9+4OfZG02OCuoAMTb9ZkC9ull1Nvrr2Z+XvRpaRfc65H/68F+jl9svEhzyLFWoccWVc+eyTHq/twydjlKRln7jX9bNMkMJnbhoFRL1xCqmKx6/yi2fYXa/c5/e846PV/5fW0/7OPx/yfcjzop34ulxdGGvDuU8mMXaX507lBuiN6ueadmQeT/p/93vf/1O+G//sP5fw/eL3o/5JLif8zVxs+Tlir9S26UyeFQQvJGBE7FvaFZ9LfN+1y+WjbItSb3GmXvXd15v8zroH/HxgE/D+aGPx/18vi/z07PeZNPRKxe/Kh0Ae8toxscCO4zBkYXArk9C1SxJUYjBkYPPIVtbbuTftz3cz//2O9wP/75iSAXdO72/dt2HL5F6YlfBW4MiJYXMiBiW3t7azHBx+V/t89N+H/8a+1//e9K/9attDp5LQjYX8SuvVL8RoAkmxa65299Erq1FnHo0qrl7t4BddriIs4MrM3rfWcFd+pGwVSAwBZ0bKP8yrZPAAAAABJRU5ErkJggg==') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + +".linkify.youtube {\n" + +" background: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABIklEQVQoz53LvUrDUBjG8bOoOammSf1IoBSvoCB4JeIqOHgBLt6AIMRBBQelWurQ2kERnMRBsBUcIp5FJSBI5oQsJVkkUHh8W0o5nhaFHvjBgef/Mq+Q46RJBMkI/vE+aOus956tnEswIZe1LV0QyJ5sE2GzgZfVMtRNIdiDpccEssdlB1mW4bvTwdvWJtRdErM7U+8S/FJykCRJX5qm+KpVce8UMNLRLbulz4iSjTAMh6Iowsd5BeNadp3nUF0VlxAEwZBotXC0Usa4ll3meZdA1iguwvf9vpvDA2wvmKgYGtSud8suDB4TyGr2PF49D/vra9jRZ1BVdknMzgwuCGSnZEObwu6sBnVTCHZiaC7BhFx2PKdxUidiAH/4lLo9Mv0DELVs9qsOHXwAAAAASUVORK5CYII=') center left no-repeat!important;\n" + +" padding-left: 18px;\n" + +"}\n" + "/* XXX Moved to end of stylesheet to avoid breaking whole stylesheet in Maxthon. */\n" + "@supports (text-decoration-style: dashed) or (-moz-text-decoration-style: dashed) {\n" + " .quotelink.forwardlink,\n" + @@ -21883,13 +3802,18839 @@ " text-decoration-style: dashed;\n" + " border-bottom: none;\n" + " }\n" + -"}", - cssWWW: "#captcha-cnt {\n" + +"}\n", + +report: +"#g-recaptcha,\n" + +":root:not(.js-enabled) #captchaContainerAlt {\n" + " height: auto;\n" + -"}", - features: [['Polyfill', Polyfill], ['Normalize URL', NormalizeURL], ['Captcha Configuration', Captcha.replace], ['Redirect', Redirect], ['Header', Header], ['Catalog Links', CatalogLinks], ['Settings', Settings], ['Index Generator', Index], ['Disable Autoplay', AntiAutoplay], ['Announcement Hiding', PSAHiding], ['Fourchan thingies', Fourchan], ['Color User IDs', IDColor], ['Highlight by User ID', IDHighlight], ['Custom CSS', CustomCSS], ['Thread Links', ThreadLinks], ['Linkify', Linkify], ['Reveal Spoilers', RemoveSpoilers], ['Resurrect Quotes', Quotify], ['Filter', Filter], ['Thread Hiding Buttons', ThreadHiding], ['Reply Hiding Buttons', PostHiding], ['Recursive', Recursive], ['Strike-through Quotes', QuoteStrikeThrough], ['Quick Reply', QR], ['Cooldown', QR.cooldown], ['Pass Link', PassLink], ['Menu', Menu], ['Index Generator (Menu)', Index.menu], ['Report Link', ReportLink], ['Thread Hiding (Menu)', ThreadHiding.menu], ['Reply Hiding (Menu)', PostHiding.menu], ['Delete Link', DeleteLink], ['Filter (Menu)', Filter.menu], ['Edit Link', QR.oekaki.menu], ['Download Link', DownloadLink], ['Archive Link', ArchiveLink], ['Quote Inlining', QuoteInline], ['Quote Previewing', QuotePreview], ['Quote Backlinks', QuoteBacklink], ['Mark Quotes of You', QuoteYou], ['Mark OP Quotes', QuoteOP], ['Mark Cross-thread Quotes', QuoteCT], ['Anonymize', Anonymize], ['Time Formatting', Time], ['Relative Post Dates', RelativeDates], ['File Info Formatting', FileInfo], ['Fappe Tyme', FappeTyme], ['Gallery', Gallery], ['Gallery (menu)', Gallery.menu], ['Sauce', Sauce], ['Image Expansion', ImageExpand], ['Image Expansion (Menu)', ImageExpand.menu], ['Reveal Spoiler Thumbnails', RevealSpoilers], ['Image Loading', ImageLoader], ['Image Hover', ImageHover], ['Volume Control', Volume], ['WEBM Metadata', Metadata], ['Comment Expansion', ExpandComment], ['Thread Expansion', ExpandThread], ['Thread Excerpt', ThreadExcerpt], ['Favicon', Favicon], ['Unread', Unread], ['Quote Threading', QuoteThreading], ['Thread Stats', ThreadStats], ['Thread Updater', ThreadUpdater], ['Thread Watcher', ThreadWatcher], ['Thread Watcher (Menu)', ThreadWatcher.menu], ['Mark New IPs', MarkNewIPs], ['Index Navigation', Nav], ['Keybinds', Keybinds], ['Banner', Banner], ['Flash Features', Flash], ['Reply Pruning', ReplyPruning]] +"}\n" + +"#captchaContainerAlt td:nth-child(2) {\n" + +" display: table-cell !important;\n" + +"}\n", + +www: +"#captcha-cnt {\n" + +" height: auto;\n" + +"}\n" + +}; + +$ = (function() { + var $, + slice = [].slice, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + $ = function(selector, root) { + if (root == null) { + root = d.body; + } + return root.querySelector(selector); }; - Main.init(); + $.DAY = 24 * ($.HOUR = 60 * ($.MINUTE = 60 * ($.SECOND = 1000))); + + $.id = function(id) { + return d.getElementById(id); + }; + + $.ready = function(fc) { + var cb; + if (d.readyState !== 'loading') { + $.queueTask(fc); + return; + } + cb = function() { + $.off(d, 'DOMContentLoaded', cb); + return fc(); + }; + return $.on(d, 'DOMContentLoaded', cb); + }; + + $.formData = function(form) { + var fd, key, val; + if (form instanceof HTMLFormElement) { + return new FormData(form); + } + fd = new FormData(); + for (key in form) { + val = form[key]; + if (val) { + if (typeof val === 'object' && 'newName' in val) { + fd.append(key, val, val.newName); + } else { + fd.append(key, val); + } + } + } + return fd; + }; + + $.extend = function(object, properties) { + var key, val; + for (key in properties) { + val = properties[key]; + object[key] = val; + } + }; + + $.ajax = (function() { + var blockedError, blockedURLs, lastModified; + lastModified = {}; + blockedURLs = {}; + blockedError = function(url) { + var message; + if (blockedURLs[url]) { + return; + } + blockedURLs[url] = true; + message = $.el('div', { + innerHTML: "4chan X was blocked from loading the following URL:

        [More info]" + }); + $('span', message).textContent = (/^\/\//.test(url) ? location.protocol : '') + url; + return new Notice('warning', message, 30, function() { + return delete blockedURLs[url]; + }); + }; + return function(url, options, extra) { + var err, event, form, i, len, r, ref, ref1, type, upCallbacks, whenModified; + if (options == null) { + options = {}; + } + if (extra == null) { + extra = {}; + } + type = extra.type, whenModified = extra.whenModified, upCallbacks = extra.upCallbacks, form = extra.form; + url = url.replace(/^((?:https?:)?\/\/(?:\w+\.)?4c(?:ha|d)n\.org)\/adv\//, '$1//adv/'); + r = new XMLHttpRequest(); + type || (type = form && 'post' || 'get'); + try { + r.open(type, url, true); + } catch (_error) { + err = _error; + blockedError(url); + ref = ['error', 'loadend']; + for (i = 0, len = ref.length; i < len; i++) { + event = ref[i]; + r["on" + event] = options["on" + event]; + $.queueTask($.event, event, null, r); + } + return; + } + if (whenModified) { + if (((ref1 = lastModified[whenModified]) != null ? ref1[url] : void 0) != null) { + r.setRequestHeader('If-Modified-Since', lastModified[whenModified][url]); + } + $.on(r, 'load', function() { + return (lastModified[whenModified] || (lastModified[whenModified] = {}))[url] = r.getResponseHeader('Last-Modified'); + }); + } + if (/\.json$/.test(url)) { + if (options.responseType == null) { + options.responseType = 'json'; + } + } + $.extend(r, options); + if (options.responseType === 'json' && r.responseType !== 'json' && delete r.response) { + Object.defineProperty(r, 'response', { + configurable: true, + enumerable: true, + get: function() { + return JSON.parse(r.responseText); + } + }); + } + $.extend(r.upload, upCallbacks); + r.send(form); + return r; + }; + })(); + + (function() { + var reqs; + reqs = {}; + $.cache = function(url, cb, options) { + var err, req, rm; + if (req = reqs[url]) { + if (req.readyState === 4) { + $.queueTask(function() { + return cb.call(req, req.evt, true); + }); + } else { + req.callbacks.push(cb); + } + return req; + } + rm = function() { + return delete reqs[url]; + }; + try { + if (!(req = $.ajax(url, options))) { + return; + } + } catch (_error) { + err = _error; + return; + } + $.on(req, 'load', function(e) { + var fn1, i, len, ref; + this.evt = e; + ref = this.callbacks; + fn1 = (function(_this) { + return function(cb) { + return $.queueTask(function() { + return cb.call(_this, e, false); + }); + }; + })(this); + for (i = 0, len = ref.length; i < len; i++) { + cb = ref[i]; + fn1(cb); + } + return delete this.callbacks; + }); + $.on(req, 'abort error', rm); + req.callbacks = [cb]; + return reqs[url] = req; + }; + return $.cleanCache = function(testf) { + var url; + for (url in reqs) { + if (testf(url)) { + delete reqs[url]; + } + } + }; + })(); + + $.cb = { + checked: function() { + $.set(this.name, this.checked); + return Conf[this.name] = this.checked; + }, + value: function() { + $.set(this.name, this.value.trim()); + return Conf[this.name] = this.value; + } + }; + + $.asap = function(test, cb) { + if (test()) { + return cb(); + } else { + return setTimeout($.asap, 25, test, cb); + } + }; + + $.onExists = function(root, selector, cb) { + var el, observer; + if (el = $(selector, root)) { + return cb(el); + } + if ($.engine === 'edge' && d.readyState === 'loading') { + $.asap((function() { + return d.readyState !== 'loading' || $(selector, root); + }), function() { + return $.onExists(root, selector, cb); + }); + return; + } + observer = new MutationObserver(function() { + if (el = $(selector, root)) { + observer.disconnect(); + return cb(el); + } + }); + return observer.observe(root, { + childList: true, + subtree: true + }); + }; + + $.addStyle = function(css, id, test) { + var style; + if (test == null) { + test = 'head'; + } + style = $.el('style', { + textContent: css + }); + if (id != null) { + style.id = id; + } + $.onExists(doc, test, function() { + return $.add(d.head, style); + }); + return style; + }; + + $.x = function(path, root) { + root || (root = d.body); + return d.evaluate(path, root, null, 8, null).singleNodeValue; + }; + + $.X = function(path, root) { + root || (root = d.body); + return d.evaluate(path, root, null, 7, null); + }; + + $.addClass = function() { + var className, classNames, el, i, len; + el = arguments[0], classNames = 2 <= arguments.length ? slice.call(arguments, 1) : []; + for (i = 0, len = classNames.length; i < len; i++) { + className = classNames[i]; + el.classList.add(className); + } + }; + + $.rmClass = function() { + var className, classNames, el, i, len; + el = arguments[0], classNames = 2 <= arguments.length ? slice.call(arguments, 1) : []; + for (i = 0, len = classNames.length; i < len; i++) { + className = classNames[i]; + el.classList.remove(className); + } + }; + + $.toggleClass = function(el, className) { + return el.classList.toggle(className); + }; + + $.hasClass = function(el, className) { + return indexOf.call(el.classList, className) >= 0; + }; + + $.rm = function(el) { + return el != null ? el.remove() : void 0; + }; + + $.rmAll = function(root) { + return root.textContent = null; + }; + + $.tn = function(s) { + return d.createTextNode(s); + }; + + $.frag = function() { + return d.createDocumentFragment(); + }; + + $.nodes = function(nodes) { + var frag, i, len, node; + if (!(nodes instanceof Array)) { + return nodes; + } + frag = $.frag(); + for (i = 0, len = nodes.length; i < len; i++) { + node = nodes[i]; + frag.appendChild(node); + } + return frag; + }; + + $.add = function(parent, el) { + return parent.appendChild($.nodes(el)); + }; + + $.prepend = function(parent, el) { + return parent.insertBefore($.nodes(el), parent.firstChild); + }; + + $.after = function(root, el) { + return root.parentNode.insertBefore($.nodes(el), root.nextSibling); + }; + + $.before = function(root, el) { + return root.parentNode.insertBefore($.nodes(el), root); + }; + + $.replace = function(root, el) { + return root.parentNode.replaceChild($.nodes(el), root); + }; + + $.el = function(tag, properties, properties2) { + var el; + el = d.createElement(tag); + if (properties) { + $.extend(el, properties); + } + if (properties2) { + $.extend(el, properties2); + } + return el; + }; + + $.on = function(el, events, handler) { + var event, i, len, ref; + ref = events.split(' '); + for (i = 0, len = ref.length; i < len; i++) { + event = ref[i]; + el.addEventListener(event, handler, false); + } + }; + + $.off = function(el, events, handler) { + var event, i, len, ref; + ref = events.split(' '); + for (i = 0, len = ref.length; i < len; i++) { + event = ref[i]; + el.removeEventListener(event, handler, false); + } + }; + + $.one = function(el, events, handler) { + var cb; + cb = function(e) { + $.off(el, events, cb); + return handler.call(this, e); + }; + return $.on(el, events, cb); + }; + + $.event = function(event, detail, root) { + if (root == null) { + root = d; + } + if ((detail != null) && typeof cloneInto === 'function') { + detail = cloneInto(detail, d.defaultView); + } + return root.dispatchEvent(new CustomEvent(event, { + bubbles: true, + detail: detail + })); + }; + + (function() { + var clone, err, ref, unsafeConstructors; + if (!(/PaleMoon\//.test(navigator.userAgent) && +(typeof GM_info !== "undefined" && GM_info !== null ? (ref = GM_info.version) != null ? ref.split('.')[0] : void 0 : void 0) >= 2 && typeof cloneInto === 'undefined')) { + return; + } + try { + return new CustomEvent('x', { + detail: {} + }); + } catch (_error) { + err = _error; + unsafeConstructors = { + Object: unsafeWindow.Object, + Array: unsafeWindow.Array + }; + clone = function(obj) { + var constructor, key, obj2, val; + if ((obj != null) && typeof obj === 'object' && (constructor = unsafeConstructors[obj.constructor.name])) { + obj2 = new constructor(); + for (key in obj) { + val = obj[key]; + obj2[key] = clone(val); + } + return obj2; + } else { + return obj; + } + }; + return $.event = function(event, detail, root) { + if (root == null) { + root = d; + } + return root.dispatchEvent(new CustomEvent(event, { + bubbles: true, + detail: clone(detail) + })); + }; + } + })(); + + $.open = typeof GM_openInTab !== "undefined" && GM_openInTab !== null ? GM_openInTab : function(url) { + return window.open(url, '_blank'); + }; + + $.debounce = function(wait, fn) { + var args, exec, lastCall, that, timeout; + lastCall = 0; + timeout = null; + that = null; + args = null; + exec = function() { + lastCall = Date.now(); + return fn.apply(that, args); + }; + return function() { + args = arguments; + that = this; + if (lastCall < Date.now() - wait) { + return exec(); + } + clearTimeout(timeout); + return timeout = setTimeout(exec, wait); + }; + }; + + $.queueTask = (function() { + var execTask, taskChannel, taskQueue; + taskQueue = []; + execTask = function() { + var args, func, task; + task = taskQueue.shift(); + func = task[0]; + args = Array.prototype.slice.call(task, 1); + return func.apply(func, args); + }; + if (window.MessageChannel) { + taskChannel = new MessageChannel(); + taskChannel.port1.onmessage = execTask; + return function() { + taskQueue.push(arguments); + return taskChannel.port2.postMessage(null); + }; + } else { + return function() { + taskQueue.push(arguments); + return setTimeout(execTask, 0); + }; + } + })(); + + $.globalEval = function(code) { + var script; + script = $.el('script', { + textContent: code + }); + $.add(d.head || doc, script); + return $.rm(script); + }; + + $.global = function(fn) { + if (doc) { + return $.globalEval("(" + fn + ")();"); + } else { + return fn(); + } + }; + + $.bytesToString = function(size) { + var unit; + unit = 0; + while (size >= 1024) { + size /= 1024; + unit++; + } + size = unit > 1 ? Math.round(size * 100) / 100 : Math.round(size); + return size + " " + ['B', 'KB', 'MB', 'GB'][unit]; + }; + + $.minmax = function(value, min, max) { + return (value < min ? min : value > max ? max : value); + }; + + $.hasAudio = function(video) { + return video.mozHasAudio || !!video.webkitAudioDecodedByteCount; + }; + + $.engine = (function() { + if (/Edge\//.test(navigator.userAgent)) { + return 'edge'; + } + if (/Chrome\//.test(navigator.userAgent)) { + return 'blink'; + } + if (/WebKit\//.test(navigator.userAgent)) { + return 'webkit'; + } + if (/Gecko\/|Goanna/.test(navigator.userAgent)) { + return 'gecko'; + } + })(); + + $.platform = 'userscript'; + + try { + localStorage.getItem('x'); + $.hasStorage = true; + } catch (_error) { + $.hasStorage = false; + } + + $.item = function(key, val) { + var item; + item = {}; + item[key] = val; + return item; + }; + + $.syncing = {}; + + if (typeof GM_deleteValue !== "undefined" && GM_deleteValue !== null) { + $.getValue = GM_getValue; + $.listValues = function() { + return GM_listValues(); + }; + } else if ($.hasStorage) { + $.getValue = function(key) { + return localStorage[key]; + }; + $.listValues = function() { + var key, results; + results = []; + for (key in localStorage) { + if (key.slice(0, g.NAMESPACE.length) === g.NAMESPACE) { + results.push(key); + } + } + return results; + }; + } else { + $.getValue = function() {}; + $.listValues = function() { + return []; + }; + } + + if (typeof GM_addValueChangeListener !== "undefined" && GM_addValueChangeListener !== null) { + $.setValue = GM_setValue; + $.deleteValue = GM_deleteValue; + } else if (typeof GM_deleteValue !== "undefined" && GM_deleteValue !== null) { + $.oldValue = {}; + $.setValue = function(key, val) { + GM_setValue(key, val); + if (key in $.syncing) { + $.oldValue[key] = val; + if ($.hasStorage) { + return localStorage[key] = val; + } + } + }; + $.deleteValue = function(key) { + GM_deleteValue(key); + if (key in $.syncing) { + delete $.oldValue[key]; + if ($.hasStorage) { + return localStorage.removeItem(key); + } + } + }; + if (!$.hasStorage) { + $.cantSync = true; + } + } else if ($.hasStorage) { + $.oldValue = {}; + $.setValue = function(key, val) { + if (key in $.syncing) { + $.oldValue[key] = val; + } + return localStorage[key] = val; + }; + $.deleteValue = function(key) { + if (key in $.syncing) { + delete $.oldValue[key]; + } + return localStorage.removeItem(key); + }; + } else { + $.setValue = function() {}; + $.deleteValue = function() {}; + $.cantSync = $.cantSet = true; + } + + if (typeof GM_addValueChangeListener !== "undefined" && GM_addValueChangeListener !== null) { + $.sync = function(key, cb) { + return $.syncing[key] = GM_addValueChangeListener(g.NAMESPACE + key, function(key2, oldValue, newValue, remote) { + if (remote) { + if (newValue !== void 0) { + newValue = JSON.parse(newValue); + } + return cb(newValue, key); + } + }); + }; + $.forceSync = function() {}; + } else if ((typeof GM_deleteValue !== "undefined" && GM_deleteValue !== null) || $.hasStorage) { + $.sync = function(key, cb) { + key = g.NAMESPACE + key; + $.syncing[key] = cb; + return $.oldValue[key] = $.getValue(key); + }; + (function() { + var onChange; + onChange = function(arg) { + var cb, key, newValue; + key = arg.key, newValue = arg.newValue; + if (!(cb = $.syncing[key])) { + return; + } + if (newValue != null) { + if (newValue === $.oldValue[key]) { + return; + } + $.oldValue[key] = newValue; + return cb(JSON.parse(newValue), key.slice(g.NAMESPACE.length)); + } else { + if ($.oldValue[key] == null) { + return; + } + delete $.oldValue[key]; + return cb(void 0, key.slice(g.NAMESPACE.length)); + } + }; + $.on(window, 'storage', onChange); + return $.forceSync = function(key) { + key = g.NAMESPACE + key; + return onChange({ + key: key, + newValue: $.getValue(key) + }); + }; + })(); + } else { + $.sync = function() {}; + $.forceSync = function() {}; + } + + $["delete"] = function(keys) { + var i, key, len; + if (!(keys instanceof Array)) { + keys = [keys]; + } + for (i = 0, len = keys.length; i < len; i++) { + key = keys[i]; + $.deleteValue(g.NAMESPACE + key); + } + }; + + $.get = function(key, val, cb) { + var items; + if (typeof cb === 'function') { + items = $.item(key, val); + } else { + items = key; + cb = val; + } + return $.queueTask(function() { + for (key in items) { + if (val = $.getValue(g.NAMESPACE + key)) { + items[key] = JSON.parse(val); + } + } + return cb(items); + }); + }; + + $.set = function(keys, val, cb) { + var key, value; + if (typeof keys === 'string') { + $.setValue(g.NAMESPACE + keys, JSON.stringify(val)); + } else { + for (key in keys) { + value = keys[key]; + $.setValue(g.NAMESPACE + key, JSON.stringify(value)); + } + cb = val; + } + return typeof cb === "function" ? cb() : void 0; + }; + + $.clear = function(cb) { + var id; + $["delete"](Object.keys(Conf)); + $["delete"](['previousversion', 'AutoWatch', 'QR Size', 'captchas', 'QR.persona', 'hiddenPSA']); + $["delete"]((function() { + var i, len, ref, results; + ref = ['embedding', 'updater', 'thread-stats', 'thread-watcher', 'qr']; + results = []; + for (i = 0, len = ref.length; i < len; i++) { + id = ref[i]; + results.push(id + ".position"); + } + return results; + })()); + try { + $["delete"]($.listValues().map(function(key) { + return key.replace(g.NAMESPACE, ''); + })); + } catch (_error) {} + return typeof cb === "function" ? cb() : void 0; + }; + + return $; + +}).call(this); + +$$ = (function() { + var slice = [].slice; + + return function(selector, root) { + if (root == null) { + root = d.body; + } + return slice.call(root.querySelectorAll(selector)); + }; + +}).call(this); + +CrossOrigin = (function() { + var CrossOrigin; + + CrossOrigin = { + binary: function(url, cb, headers) { + var options, ref, workaround; + if (headers == null) { + headers = {}; + } + url = url.replace(/^((?:https?:)?\/\/(?:\w+\.)?4c(?:ha|d)n\.org)\/adv\//, '$1//adv/'); + workaround = $.engine === 'gecko' && (typeof GM_info !== "undefined" && GM_info !== null) && /^[0-2]\.|^3\.[01](?!\d)/.test(GM_info.version); + workaround || (workaround = /PaleMoon\//.test(navigator.userAgent)); + workaround || (workaround = (typeof GM_info !== "undefined" && GM_info !== null ? (ref = GM_info.script) != null ? ref.includeJSB : void 0 : void 0) != null); + options = { + method: "GET", + url: url, + headers: headers, + onload: function(xhr) { + var contentDisposition, contentType, data, i, r, ref1, ref2; + if (workaround) { + r = xhr.responseText; + data = new Uint8Array(r.length); + i = 0; + while (i < r.length) { + data[i] = r.charCodeAt(i); + i++; + } + } else { + data = new Uint8Array(xhr.response); + } + if (typeof xhr.responseHeaders === 'object') { + contentType = xhr.responseHeaders['Content-Type']; + contentDisposition = xhr.responseHeaders['Content-Disposition']; + } else { + contentType = (ref1 = xhr.responseHeaders.match(/Content-Type:\s*(.*)/i)) != null ? ref1[1] : void 0; + contentDisposition = (ref2 = xhr.responseHeaders.match(/Content-Disposition:\s*(.*)/i)) != null ? ref2[1] : void 0; + } + return cb(data, contentType, contentDisposition); + }, + onerror: function() { + return cb(null); + }, + onabort: function() { + return cb(null); + } + }; + if (workaround) { + options.overrideMimeType = options.mimeType = 'text/plain; charset=x-user-defined'; + } else { + options.responseType = 'arraybuffer'; + } + return GM_xmlhttpRequest(options); + }, + file: function(url, cb) { + return CrossOrigin.binary(url, function(data, contentType, contentDisposition) { + var blob, match, mime, name, ref, ref1, ref2, ref3; + if (data == null) { + return cb(null); + } + name = (ref = url.match(/([^\/]+)\/*$/)) != null ? ref[1] : void 0; + mime = (contentType != null ? contentType.match(/[^;]*/)[0] : void 0) || 'application/octet-stream'; + match = (contentDisposition != null ? (ref1 = contentDisposition.match(/\bfilename\s*=\s*"((\\"|[^"])+)"/i)) != null ? ref1[1] : void 0 : void 0) || (contentType != null ? (ref2 = contentType.match(/\bname\s*=\s*"((\\"|[^"])+)"/i)) != null ? ref2[1] : void 0 : void 0); + if (match) { + name = match.replace(/\\"/g, '"'); + } + if ((typeof GM_info !== "undefined" && GM_info !== null ? (ref3 = GM_info.script) != null ? ref3.includeJSB : void 0 : void 0) != null) { + mime = QR.typeFromExtension[name.match(/[^.]*$/)[0].toLowerCase()] || 'application/octet-stream'; + } + blob = new Blob([data], { + type: mime + }); + blob.name = name; + return cb(blob); + }); + }, + json: (function() { + var callbacks, responses; + callbacks = {}; + responses = {}; + return function(url, cb) { + if (responses[url]) { + cb(responses[url]); + return; + } + if (callbacks[url]) { + callbacks[url].push(cb); + return; + } + callbacks[url] = [cb]; + return GM_xmlhttpRequest({ + method: "GET", + url: url + '', + onload: function(xhr) { + var j, len, ref, response; + response = JSON.parse(xhr.responseText); + ref = callbacks[url]; + for (j = 0, len = ref.length; j < len; j++) { + cb = ref[j]; + cb(response); + } + delete callbacks[url]; + return responses[url] = response; + }, + onerror: function() { + return delete callbacks[url]; + }, + onabort: function() { + return delete callbacks[url]; + } + }); + }; + })() + }; + + return CrossOrigin; + +}).call(this); + +Board = (function() { + var Board; + + Board = (function() { + Board.prototype.toString = function() { + return this.ID; + }; + + function Board(ID) { + this.ID = ID; + this.threads = new SimpleDict(); + this.posts = new SimpleDict(); + g.boards[this] = this; + } + + return Board; + + })(); + + return Board; + +}).call(this); + +Callbacks = (function() { + var Callbacks; + + Callbacks = (function() { + Callbacks.Post = new Callbacks('Post'); + + Callbacks.Thread = new Callbacks('Thread'); + + Callbacks.CatalogThread = new Callbacks('Catalog Thread'); + + function Callbacks(type) { + this.type = type; + this.keys = []; + } + + Callbacks.prototype.push = function(arg) { + var cb, name; + name = arg.name, cb = arg.cb; + if (!this[name]) { + this.keys.push(name); + } + return this[name] = cb; + }; + + Callbacks.prototype.execute = function(node, keys) { + var err, errors, i, len, name, ref; + if (keys == null) { + keys = this.keys; + } + for (i = 0, len = keys.length; i < len; i++) { + name = keys[i]; + try { + if ((ref = this[name]) != null) { + ref.call(node); + } + } catch (_error) { + err = _error; + if (!errors) { + errors = []; + } + errors.push({ + message: ['"', name, '" crashed on node ', this.type, ' No.', node.ID, ' (', node.board, ').'].join(''), + error: err + }); + } + } + if (errors) { + return Main.handleErrors(errors); + } + }; + + return Callbacks; + + })(); + + return Callbacks; + +}).call(this); + +CatalogThread = (function() { + var CatalogThread; + + CatalogThread = (function() { + CatalogThread.prototype.toString = function() { + return this.ID; + }; + + function CatalogThread(root, thread) { + this.thread = thread; + this.ID = this.thread.ID; + this.board = this.thread.board; + this.nodes = { + root: root, + thumb: $('.catalog-thumb', root), + icons: $('.catalog-icons', root), + postCount: $('.post-count', root), + fileCount: $('.file-count', root), + pageCount: $('.page-count', root), + comment: $('.comment', root) + }; + this.thread.catalogView = this; + } + + return CatalogThread; + + })(); + + return CatalogThread; + +}).call(this); + +Connection = (function() { + var Connection, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; + + Connection = (function() { + function Connection(target, origin, cb) { + this.target = target; + this.origin = origin; + this.cb = cb != null ? cb : {}; + this.onMessage = bind(this.onMessage, this); + this.send = bind(this.send, this); + $.on(window, 'message', this.onMessage); + } + + Connection.prototype.targetWindow = function() { + if (this.target instanceof window.HTMLIFrameElement) { + return this.target.contentWindow; + } else { + return this.target; + } + }; + + Connection.prototype.send = function(data) { + return this.targetWindow().postMessage("" + g.NAMESPACE + (JSON.stringify(data)), this.origin); + }; + + Connection.prototype.onMessage = function(e) { + var base, data, type, value; + if (!(e.source === this.targetWindow() && e.origin === this.origin && typeof e.data === 'string' && e.data.slice(0, g.NAMESPACE.length) === g.NAMESPACE)) { + return; + } + data = JSON.parse(e.data.slice(g.NAMESPACE.length)); + for (type in data) { + value = data[type]; + if (typeof (base = this.cb)[type] === "function") { + base[type](value); + } + } + }; + + return Connection; + + })(); + + return Connection; + +}).call(this); + +DataBoard = (function() { + var DataBoard, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; + + DataBoard = (function() { + DataBoard.keys = ['hiddenThreads', 'hiddenPosts', 'lastReadPosts', 'yourPosts', 'watchedThreads', 'customTitles']; + + function DataBoard(key, sync, dontClean) { + var init; + this.key = key; + this.onSync = bind(this.onSync, this); + this.data = Conf[this.key]; + $.sync(this.key, this.onSync); + if (!dontClean) { + this.clean(); + } + if (!sync) { + return; + } + init = (function(_this) { + return function() { + $.off(d, '4chanXInitFinished', init); + return _this.sync = sync; + }; + })(this); + $.on(d, '4chanXInitFinished', init); + } + + DataBoard.prototype.save = function(cb) { + return $.set(this.key, this.data, cb); + }; + + DataBoard.prototype["delete"] = function(arg) { + var boardID, postID, ref, threadID; + boardID = arg.boardID, threadID = arg.threadID, postID = arg.postID; + $.forceSync(this.key); + if (postID) { + if (!((ref = this.data.boards[boardID]) != null ? ref[threadID] : void 0)) { + return; + } + delete this.data.boards[boardID][threadID][postID]; + this.deleteIfEmpty({ + boardID: boardID, + threadID: threadID + }); + } else if (threadID) { + if (!this.data.boards[boardID]) { + return; + } + delete this.data.boards[boardID][threadID]; + this.deleteIfEmpty({ + boardID: boardID + }); + } else { + delete this.data.boards[boardID]; + } + return this.save(); + }; + + DataBoard.prototype.deleteIfEmpty = function(arg) { + var boardID, threadID; + boardID = arg.boardID, threadID = arg.threadID; + $.forceSync(this.key); + if (threadID) { + if (!Object.keys(this.data.boards[boardID][threadID]).length) { + delete this.data.boards[boardID][threadID]; + return this.deleteIfEmpty({ + boardID: boardID + }); + } + } else if (!Object.keys(this.data.boards[boardID]).length) { + return delete this.data.boards[boardID]; + } + }; + + DataBoard.prototype.set = function(arg, cb) { + var base, base1, base2, boardID, postID, threadID, val; + boardID = arg.boardID, threadID = arg.threadID, postID = arg.postID, val = arg.val; + $.forceSync(this.key); + if (postID !== void 0) { + ((base = ((base1 = this.data.boards)[boardID] || (base1[boardID] = {})))[threadID] || (base[threadID] = {}))[postID] = val; + } else if (threadID !== void 0) { + ((base2 = this.data.boards)[boardID] || (base2[boardID] = {}))[threadID] = val; + } else { + this.data.boards[boardID] = val; + } + return this.save(cb); + }; + + DataBoard.prototype.get = function(arg) { + var ID, board, boardID, defaultValue, i, len, postID, thread, threadID, val; + boardID = arg.boardID, threadID = arg.threadID, postID = arg.postID, defaultValue = arg.defaultValue; + if (board = this.data.boards[boardID]) { + if (threadID == null) { + if (postID != null) { + for (thread = i = 0, len = board.length; i < len; thread = ++i) { + ID = board[thread]; + if (postID in thread) { + val = thread[postID]; + break; + } + } + } else { + val = board; + } + } else if (thread = board[threadID]) { + val = postID != null ? thread[postID] : thread; + } + } + return val || defaultValue; + }; + + DataBoard.prototype.forceSync = function() { + return $.forceSync(this.key); + }; + + DataBoard.prototype.clean = function() { + var boardID, now, ref, val; + $.forceSync(this.key); + ref = this.data.boards; + for (boardID in ref) { + val = ref[boardID]; + this.deleteIfEmpty({ + boardID: boardID + }); + } + now = Date.now(); + if ((this.data.lastChecked || 0) < now - 2 * $.HOUR) { + this.data.lastChecked = now; + for (boardID in this.data.boards) { + this.ajaxClean(boardID); + } + } + }; + + DataBoard.prototype.ajaxClean = function(boardID) { + return $.cache("//a.4cdn.org/" + boardID + "/threads.json", (function(_this) { + return function(e1) { + var ref; + if ((ref = e1.target.status) !== 200 && ref !== 404) { + return; + } + return $.cache("//a.4cdn.org/" + boardID + "/archive.json", function(e2) { + var ref1; + if ((ref1 = e2.target.status) !== 200 && ref1 !== 404) { + return; + } + return _this.ajaxCleanParse(boardID, e1.target.response, e2.target.response); + }); + }; + })(this)); + }; + + DataBoard.prototype.ajaxCleanParse = function(boardID, response1, response2) { + var ID, board, i, j, k, len, len1, len2, page, ref, thread, threads; + if (!(board = this.data.boards[boardID])) { + return; + } + threads = {}; + if (response1) { + for (i = 0, len = response1.length; i < len; i++) { + page = response1[i]; + ref = page.threads; + for (j = 0, len1 = ref.length; j < len1; j++) { + thread = ref[j]; + ID = thread.no; + if (ID in board) { + threads[ID] = board[ID]; + } + } + } + } + if (response2) { + for (k = 0, len2 = response2.length; k < len2; k++) { + ID = response2[k]; + if (ID in board) { + threads[ID] = board[ID]; + } + } + } + this.data.boards[boardID] = threads; + this.deleteIfEmpty({ + boardID: boardID + }); + return this.save(); + }; + + DataBoard.prototype.onSync = function(data) { + this.data = data || { + boards: {} + }; + return typeof this.sync === "function" ? this.sync() : void 0; + }; + + return DataBoard; + + })(); + + return DataBoard; + +}).call(this); + +Fetcher = (function() { + var Fetcher, + slice = [].slice; + + Fetcher = (function() { + function Fetcher(boardID1, threadID, postID1, root, quoter) { + var post; + this.boardID = boardID1; + this.threadID = threadID; + this.postID = postID1; + this.root = root; + this.quoter = quoter; + if (post = g.posts[this.boardID + "." + this.postID]) { + this.insert(post); + return; + } + this.root.textContent = "Loading post No." + this.postID + "..."; + if (this.threadID) { + $.cache("//a.4cdn.org/" + this.boardID + "/thread/" + this.threadID + ".json", (function(_this) { + return function(e, isCached) { + return _this.fetchedPost(e.target, isCached); + }; + })(this)); + } else { + this.archivedPost(); + } + } + + Fetcher.prototype.insert = function(post) { + var boardID, clone, k, len, nodes, postID, quote, ref, ref1; + if (!this.root.parentNode) { + return; + } + clone = post.addClone(this.quoter.context, $.hasClass(this.root, 'dialog')); + Main.callbackNodes('Post', [clone]); + nodes = clone.nodes; + $.rmAll(nodes.root); + $.add(nodes.root, nodes.post); + ref = clone.nodes.quotelinks.concat(slice.call(clone.nodes.backlinks)); + for (k = 0, len = ref.length; k < len; k++) { + quote = ref[k]; + ref1 = Get.postDataFromLink(quote), boardID = ref1.boardID, postID = ref1.postID; + if (postID === this.quoter.ID && boardID === this.quoter.board.ID) { + $.addClass(quote, 'forwardlink'); + } + } + $.rmAll(this.root); + $.add(this.root, nodes.root); + return $.event('PostsInserted'); + }; + + Fetcher.prototype.fetchedPost = function(req, isCached) { + var api, board, k, len, post, posts, status, thread; + if (post = g.posts[this.boardID + "." + this.postID]) { + this.insert(post); + return; + } + status = req.status; + if (status !== 200 && status !== 304) { + if (this.archivedPost()) { + return; + } + $.addClass(this.root, 'warning'); + this.root.textContent = status === 404 ? "Thread No." + this.threadID + " 404'd." : "Error " + req.statusText + " (" + req.status + ")."; + return; + } + posts = req.response.posts; + Build.spoilerRange[this.boardID] = posts[0].custom_spoiler; + for (k = 0, len = posts.length; k < len; k++) { + post = posts[k]; + if (post.no === this.postID) { + break; + } + } + if (post.no !== this.postID) { + if (isCached) { + api = "//a.4cdn.org/" + this.boardID + "/thread/" + this.threadID + ".json"; + $.cleanCache(function(url) { + return url === api; + }); + $.cache(api, (function(_this) { + return function(e) { + return _this.fetchedPost(e.target, false); + }; + })(this)); + return; + } + if (this.archivedPost()) { + return; + } + $.addClass(this.root, 'warning'); + this.root.textContent = "Post No." + this.postID + " was not found."; + return; + } + board = g.boards[this.boardID] || new Board(this.boardID); + thread = g.threads[this.boardID + "." + this.threadID] || new Thread(this.threadID, board); + post = new Post(Build.postFromObject(post, this.boardID), thread, board); + post.isFetchedQuote = true; + Main.callbackNodes('Post', [post]); + return this.insert(post); + }; + + Fetcher.prototype.archivedPost = function() { + var archive, url; + if (!Conf['Resurrect Quotes']) { + return false; + } + if (!(url = Redirect.to('post', { + boardID: this.boardID, + postID: this.postID + }))) { + return false; + } + archive = Redirect.data.post[this.boardID]; + if (/^https:\/\//.test(url) || location.protocol === 'http:') { + $.cache(url, (function(_this) { + return function(e) { + return _this.parseArchivedPost(e.target.response, url, archive); + }; + })(this), { + responseType: 'json', + withCredentials: archive.withCredentials + }); + return true; + } else if (Conf['Exempt Archives from Encryption']) { + CrossOrigin.json(url, (function(_this) { + return function(response) { + var key, media, ref; + media = response.media; + if (media) { + for (key in media) { + if (/_link$/.test(key)) { + if (!((ref = media[key]) != null ? ref.match(/^http:\/\//) : void 0)) { + delete media[key]; + } + } + } + } + return _this.parseArchivedPost(response, url, archive); + }; + })(this)); + return true; + } + return false; + }; + + Fetcher.prototype.parseArchivedPost = function(data, url, archive) { + var board, comment, greentext, i, j, key, o, post, ref, ref1, text, text2, thread, val; + if (post = g.posts[this.boardID + "." + this.postID]) { + this.insert(post); + return; + } + if (data == null) { + $.addClass(this.root, 'warning'); + this.root.textContent = "Error fetching Post No." + this.postID + " from " + archive.name + "."; + return; + } + if (data.error) { + $.addClass(this.root, 'warning'); + this.root.textContent = data.error; + return; + } + comment = (data.comment || '').split(/(\n|\[\/?(?:b|spoiler|code|moot|banned)\])/); + comment = (function() { + var k, len, results; + results = []; + for (i = k = 0, len = comment.length; k < len; i = ++k) { + text = comment[i]; + if (i % 2 === 1) { + results.push(this.archiveTags[text]); + } else { + greentext = text[0] === '>'; + text = text.replace(/(\[\/?[a-z]+):lit(\])/g, '$1$2'); + text = (function() { + var l, len1, ref, results1; + ref = text.split(/(>>(?:>\/[a-z\d]+\/)?\d+)/g); + results1 = []; + for (j = l = 0, len1 = ref.length; l < len1; j = ++l) { + text2 = ref[j]; + results1.push({ + innerHTML: ((j % 2) ? "" + E(text2) + "" : E(text2)) + }); + } + return results1; + })(); + text = { + innerHTML: ((greentext) ? "" + E.cat(text) + "" : E.cat(text)) + }; + results.push(text); + } + } + return results; + }).call(this); + comment = { + innerHTML: E.cat(comment) + }; + this.threadID = +data.thread_num; + o = { + postID: this.postID, + threadID: this.threadID, + boardID: this.boardID, + isReply: this.postID !== this.threadID + }; + o.info = { + subject: data.title, + email: data.email, + name: data.name || '', + tripcode: data.trip, + capcode: (function() { + switch (data.capcode) { + case 'M': + return 'Mod'; + case 'A': + return 'Admin'; + case 'D': + return 'Developer'; + } + })(), + uniqueID: data.poster_hash, + flagCode: data.poster_country, + flag: data.poster_country_name, + dateUTC: data.timestamp, + dateText: data.fourchan_date, + commentHTML: comment + }; + if (o.info.capcode) { + delete o.info.uniqueID; + } + if ((ref = data.media) != null ? ref.media_filename : void 0) { + ref1 = data.media; + for (key in ref1) { + val = ref1[key]; + if (/_link$/.test(key) && (val != null ? val[0] : void 0) === '/') { + data.media[key] = url.split('/', 3).join('/') + val; + } + } + o.file = { + name: data.media.media_filename, + url: data.media.media_link || data.media.remote_media_link || (location.protocol + "//i.4cdn.org/" + this.boardID + "/" + (encodeURIComponent(data.media[this.boardID === 'f' ? 'media_filename' : 'media_orig']))), + height: data.media.media_h, + width: data.media.media_w, + MD5: data.media.media_hash, + size: $.bytesToString(data.media.media_size), + thumbURL: data.media.thumb_link || (location.protocol + "//i.4cdn.org/" + this.boardID + "/" + data.media.preview_orig), + theight: data.media.preview_h, + twidth: data.media.preview_w, + isSpoiler: data.media.spoiler === '1' + }; + if (!/\.pdf$/.test(o.file.url)) { + o.file.dimensions = o.file.width + "x" + o.file.height; + } + if (this.boardID === 'f' && data.media.exif) { + o.file.tag = JSON.parse(data.media.exif).Tag; + } + } + board = g.boards[this.boardID] || new Board(this.boardID); + thread = g.threads[this.boardID + "." + this.threadID] || new Thread(this.threadID, board); + post = new Post(Build.post(o), thread, board); + post.kill(); + if (post.file) { + post.file.thumbURL = o.file.thumbURL; + } + post.isFetchedQuote = true; + Main.callbackNodes('Post', [post]); + return this.insert(post); + }; + + Fetcher.prototype.archiveTags = { + '\n': { + innerHTML: "
        " + }, + '[b]': { + innerHTML: "" + }, + '[/b]': { + innerHTML: "" + }, + '[spoiler]': { + innerHTML: "" + }, + '[/spoiler]': { + innerHTML: "" + }, + '[code]': { + innerHTML: "
        "
        +      },
        +      '[/code]': {
        +        innerHTML: "
        " + }, + '[moot]': { + innerHTML: "
        " + }, + '[/moot]': { + innerHTML: "
        " + }, + '[banned]': { + innerHTML: "" + }, + '[/banned]': { + innerHTML: "" + } + }; + + return Fetcher; + + })(); + + return Fetcher; + +}).call(this); + +Notice = (function() { + var Notice, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; + + Notice = (function() { + function Notice(type, content, timeout, onclose) { + this.timeout = timeout; + this.onclose = onclose; + this.close = bind(this.close, this); + this.add = bind(this.add, this); + this.el = $.el('div', { + innerHTML: "
        " + }); + this.el.style.opacity = 0; + this.setType(type); + $.on(this.el.firstElementChild, 'click', this.close); + if (typeof content === 'string') { + content = $.tn(content); + } + $.add(this.el.lastElementChild, content); + $.ready(this.add); + } + + Notice.prototype.setType = function(type) { + return this.el.className = "notification " + type; + }; + + Notice.prototype.add = function() { + if (this.closed) { + return; + } + if (d.hidden) { + $.on(d, 'visibilitychange', this.add); + return; + } + $.off(d, 'visibilitychange', this.add); + $.add(Header.noticesRoot, this.el); + this.el.clientHeight; + this.el.style.opacity = 1; + if (this.timeout) { + return setTimeout(this.close, this.timeout * $.SECOND); + } + }; + + Notice.prototype.close = function() { + this.closed = true; + $.off(d, 'visibilitychange', this.add); + $.rm(this.el); + return typeof this.onclose === "function" ? this.onclose() : void 0; + }; + + return Notice; + + })(); + + return Notice; + +}).call(this); + +Post = (function() { + var Post, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + Post = (function() { + Post.prototype.toString = function() { + return this.ID; + }; + + function Post(root, thread, board) { + var capcode, clone, date, email, flag, info, j, len, name, post, ref, subject, tripcode, uniqueID; + this.thread = thread; + this.board = board; + this.ID = +root.id.slice(2); + this.fullID = this.board + "." + this.ID; + this.context = this; + root.dataset.fullID = this.fullID; + post = $('.post', root); + info = $('.postInfo', post); + this.nodes = { + root: root, + post: post, + info: info, + nameBlock: $('.nameBlock', info), + quote: $('.postNum > a:nth-of-type(2)', info), + comment: $('.postMessage', post), + links: [], + quotelinks: [] + }; + if ($.engine === 'edge') { + Object.defineProperty(this.nodes, 'backlinks', { + configurable: true, + enumerable: true, + get: function() { + return info.getElementsByClassName('backlink'); + } + }); + } else { + this.nodes.backlinks = info.getElementsByClassName('backlink'); + } + if (!(this.isReply = $.hasClass(post, 'reply'))) { + this.thread.OP = this; + this.thread.isArchived = !!$('.archivedIcon', info); + this.thread.isSticky = !!$('.stickyIcon', info); + this.thread.isClosed = this.thread.isArchived || !!$('.closedIcon', info); + if (this.thread.isArchived) { + this.thread.kill(); + } + } + this.info = {}; + this.info.nameBlock = Conf['Anonymize'] ? 'Anonymous' : this.nodes.nameBlock.textContent.trim(); + if (subject = $('.subject', info)) { + this.nodes.subject = subject; + this.info.subject = subject.textContent || void 0; + } + if (name = $('.name', info)) { + this.nodes.name = name; + this.info.name = name.textContent; + } + if (email = $('.useremail', info)) { + this.nodes.email = email; + this.info.email = decodeURIComponent(email.href.slice(7)); + } + if (tripcode = $('.postertrip', info)) { + this.nodes.tripcode = tripcode; + this.info.tripcode = tripcode.textContent; + } + if (uniqueID = $('.posteruid', info)) { + this.nodes.uniqueID = uniqueID; + this.info.uniqueID = uniqueID.firstElementChild.textContent; + } + if (capcode = $('.capcode.hand', info)) { + this.nodes.capcode = capcode; + this.info.capcode = capcode.textContent.replace('## ', ''); + } + if (flag = $('.flag, .countryFlag', info)) { + this.nodes.flag = flag; + this.info.flag = flag.title; + } + if (date = $('.dateTime', info)) { + this.nodes.date = date; + this.info.date = new Date(date.dataset.utc * 1000); + } + this.parseComment(); + this.parseQuotes(); + this.parseFile(); + this.isDead = false; + this.isHidden = false; + this.clones = []; + if (g.posts[this.fullID]) { + this.isRebuilt = true; + this.clones = g.posts[this.fullID].clones; + ref = this.clones; + for (j = 0, len = ref.length; j < len; j++) { + clone = ref[j]; + clone.origin = this; + } + } + this.board.posts.push(this.ID, this); + this.thread.posts.push(this.ID, this); + g.posts.push(this.fullID, this); + } + + Post.prototype.parseComment = function() { + var abbr, bq, commentDisplay, j, k, len, len1, node, ref, spoilers; + this.nodes.comment.normalize(); + bq = this.nodes.comment.cloneNode(true); + ref = $$('.abbr + br, .exif, b, .fortune', bq); + for (j = 0, len = ref.length; j < len; j++) { + node = ref[j]; + $.rm(node); + } + if (abbr = $('.abbr', bq)) { + $.rm(abbr); + } + this.info.comment = this.nodesToText(bq); + if (abbr) { + this.info.comment = this.info.comment.replace(/\n\n$/, ''); + } + commentDisplay = this.info.comment; + if (!(Conf['Remove Spoilers'] || Conf['Reveal Spoilers'])) { + spoilers = $$('s', bq); + if (spoilers.length) { + for (k = 0, len1 = spoilers.length; k < len1; k++) { + node = spoilers[k]; + $.replace(node, $.tn('[spoiler]')); + } + commentDisplay = this.nodesToText(bq); + } + } + return this.info.commentDisplay = commentDisplay.trim().replace(/\s+$/gm, ''); + }; + + Post.prototype.nodesToText = function(bq) { + var i, node, nodes, text; + text = ""; + nodes = $.X('.//br|.//text()', bq); + i = 0; + while (node = nodes.snapshotItem(i++)) { + text += node.data || '\n'; + } + return text; + }; + + Post.prototype.parseQuotes = function() { + var j, len, quotelink, ref; + this.quotes = []; + ref = $$(':not(pre) > .quotelink', this.nodes.comment); + for (j = 0, len = ref.length; j < len; j++) { + quotelink = ref[j]; + this.parseQuote(quotelink); + } + }; + + Post.prototype.parseQuote = function(quotelink) { + var fullID, match; + match = quotelink.href.match(/^https?:\/\/boards\.4chan\.org\/+([^\/]+)\/+(?:res|thread)\/+\d+(?:\/[^#]*)?#p(\d+)$/); + if (!(match || (this.isClone && quotelink.dataset.postID))) { + return; + } + this.nodes.quotelinks.push(quotelink); + if (this.isClone) { + return; + } + fullID = match[1] + "." + match[2]; + if (indexOf.call(this.quotes, fullID) < 0) { + return this.quotes.push(fullID); + } + }; + + Post.prototype.parseFile = function() { + var fileEl, fileText, info, link, m, ref, ref1, ref2, size, thumb, unit; + if (!(fileEl = $('.file', this.nodes.post))) { + return; + } + if (!(link = $('.fileText > a, .fileText-original > a', fileEl))) { + return; + } + if (!(info = (ref = link.nextSibling) != null ? ref.textContent.match(/\(([\d.]+ [KMG]?B).*\)/) : void 0)) { + return; + } + fileText = fileEl.firstElementChild; + this.file = { + text: fileText, + link: link, + url: link.href, + name: fileText.title || link.title || link.textContent, + size: info[1], + isImage: /(jpg|png|gif)$/i.test(link.href), + isVideo: /webm$/i.test(link.href), + dimensions: (ref1 = info[0].match(/\d+x\d+/)) != null ? ref1[0] : void 0, + tag: (ref2 = info[0].match(/,[^,]*, ([a-z]+)\)/i)) != null ? ref2[1] : void 0 + }; + size = +this.file.size.match(/[\d.]+/)[0]; + unit = ['B', 'KB', 'MB', 'GB'].indexOf(this.file.size.match(/\w+$/)[0]); + while (unit-- > 0) { + size *= 1024; + } + this.file.sizeInBytes = size; + if ((thumb = $('.fileThumb > [data-md5]', fileEl))) { + return $.extend(this.file, { + thumb: thumb, + thumbURL: (m = link.href.match(/\d+(?=\.\w+$)/)) ? location.protocol + "//i.4cdn.org/" + this.board + "/" + m[0] + "s.jpg" : void 0, + MD5: thumb.dataset.md5, + isSpoiler: $.hasClass(thumb.parentNode, 'imgspoiler') + }); + } + }; + + Post.prototype.kill = function(file) { + var clone, j, k, len, len1, quotelink, ref, ref1, strong; + if (file) { + if (this.isDead || this.file.isDead) { + return; + } + this.file.isDead = true; + $.addClass(this.nodes.root, 'deleted-file'); + } else { + if (this.isDead) { + return; + } + this.isDead = true; + $.rmClass(this.nodes.root, 'deleted-file'); + $.addClass(this.nodes.root, 'deleted-post'); + } + if (!(strong = $('strong.warning', this.nodes.info))) { + strong = $.el('strong', { + className: 'warning' + }); + $.after($('input', this.nodes.info), strong); + } + strong.textContent = file ? '[File deleted]' : '[Deleted]'; + if (this.isClone) { + return; + } + ref = this.clones; + for (j = 0, len = ref.length; j < len; j++) { + clone = ref[j]; + clone.kill(file); + } + if (file) { + return; + } + ref1 = Get.allQuotelinksLinkingTo(this); + for (k = 0, len1 = ref1.length; k < len1; k++) { + quotelink = ref1[k]; + if (!(!$.hasClass(quotelink, 'deadlink'))) { + continue; + } + quotelink.textContent = quotelink.textContent + '\u00A0(Dead)'; + $.addClass(quotelink, 'deadlink'); + } + }; + + Post.prototype.resurrect = function() { + var clone, j, k, len, len1, quotelink, ref, ref1, strong; + this.isDead = false; + $.rmClass(this.nodes.root, 'deleted-post'); + strong = $('strong.warning', this.nodes.info); + if (this.file && this.file.isDead) { + strong.textContent = '[File deleted]'; + } else { + $.rm(strong); + } + if (this.isClone) { + return; + } + ref = this.clones; + for (j = 0, len = ref.length; j < len; j++) { + clone = ref[j]; + clone.resurrect(); + } + ref1 = Get.allQuotelinksLinkingTo(this); + for (k = 0, len1 = ref1.length; k < len1; k++) { + quotelink = ref1[k]; + if (!($.hasClass(quotelink, 'deadlink'))) { + continue; + } + quotelink.textContent = quotelink.textContent.replace('\u00A0(Dead)', ''); + $.rmClass(quotelink, 'deadlink'); + } + }; + + Post.prototype.collect = function() { + g.posts.rm(this.fullID); + this.thread.posts.rm(this); + return this.board.posts.rm(this); + }; + + Post.prototype.addClone = function(context, contractThumb) { + return new Post.Clone(this, context, contractThumb); + }; + + Post.prototype.rmClone = function(index) { + var clone, j, len, ref; + this.clones.splice(index, 1); + ref = this.clones.slice(index); + for (j = 0, len = ref.length; j < len; j++) { + clone = ref[j]; + clone.nodes.root.dataset.clone = index++; + } + }; + + return Post; + + })(); + + return Post; + +}).call(this); + +(function() { + var extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, + hasProp = {}.hasOwnProperty, + slice = [].slice; + + Post.Clone = (function(superClass) { + extend(_Class, superClass); + + _Class.prototype.isClone = true; + + function _Class(origin, context, contractThumb) { + var base, file, i, info, inline, inlined, j, k, key, l, len, len1, len2, len3, node, nodes, post, ref, ref1, ref2, ref3, ref4, ref5, root, val; + this.origin = origin; + this.context = context; + ref = ['ID', 'fullID', 'board', 'thread', 'info', 'quotes', 'isReply']; + for (i = 0, len = ref.length; i < len; i++) { + key = ref[i]; + this[key] = this.origin[key]; + } + nodes = this.origin.nodes; + root = contractThumb ? this.cloneWithoutVideo(nodes.root) : nodes.root.cloneNode(true); + (base = Post.Clone).prefix || (base.prefix = 0); + ref1 = [root].concat(slice.call($$('[id]', root))); + for (j = 0, len1 = ref1.length; j < len1; j++) { + node = ref1[j]; + node.id = Post.Clone.prefix + node.id; + } + Post.Clone.prefix++; + post = $('.post', root); + info = $('.postInfo', post); + this.nodes = { + root: root, + post: post, + info: info, + nameBlock: $('.nameBlock', info), + quote: $('.postNum > a:nth-of-type(2)', info), + comment: $('.postMessage', post), + quotelinks: [] + }; + if ($.engine === 'edge') { + Object.defineProperty(this.nodes, 'backlinks', { + configurable: true, + enumerable: true, + get: function() { + return info.getElementsByClassName('backlink'); + } + }); + } else { + this.nodes.backlinks = info.getElementsByClassName('backlink'); + } + ref2 = $$('.inline', post); + for (k = 0, len2 = ref2.length; k < len2; k++) { + inline = ref2[k]; + $.rm(inline); + } + ref3 = $$('.inlined', post); + for (l = 0, len3 = ref3.length; l < len3; l++) { + inlined = ref3[l]; + $.rmClass(inlined, 'inlined'); + } + root.hidden = false; + $.rmClass(root, 'forwarded'); + $.rmClass(post, 'highlight'); + if (nodes.subject) { + this.nodes.subject = $('.subject', info); + } + if (nodes.name) { + this.nodes.name = $('.name', info); + } + if (nodes.email) { + this.nodes.email = $('.useremail', info); + } + if (nodes.tripcode) { + this.nodes.tripcode = $('.postertrip', info); + } + if (nodes.uniqueID) { + this.nodes.uniqueID = $('.posteruid', info); + } + if (nodes.capcode) { + this.nodes.capcode = $('.capcode.hand', info); + } + if (nodes.flag) { + this.nodes.flag = $('.flag, .countryFlag', info); + } + if (nodes.date) { + this.nodes.date = $('.dateTime', info); + } + this.parseQuotes(); + this.quotes = slice.call(this.origin.quotes); + if (this.origin.file) { + this.file = {}; + ref4 = this.origin.file; + for (key in ref4) { + val = ref4[key]; + this.file[key] = val; + } + file = $('.file', post); + this.file.text = file.firstElementChild; + this.file.link = $('.fileText > a, .fileText-original', file); + this.file.thumb = $('.fileThumb > [data-md5]', file); + this.file.fullImage = $('.full-image', file); + this.file.videoControls = $('.video-controls', this.file.text); + if (this.file.videoThumb) { + this.file.thumb.muted = true; + } + if ((ref5 = this.file.thumb) != null ? ref5.dataset.src : void 0) { + this.file.thumb.src = this.file.thumb.dataset.src; + this.file.thumb.removeAttribute('data-src'); + } + if (this.file.thumb && contractThumb) { + ImageExpand.contract(this); + } + } + if (this.origin.isDead) { + this.isDead = true; + } + root.dataset.clone = this.origin.clones.push(this) - 1; + } + + _Class.prototype.cloneWithoutVideo = function(node) { + var child, clone, i, len, ref; + if (node.tagName === 'VIDEO' && !node.dataset.md5) { + return []; + } else if (node.nodeType === Node.ELEMENT_NODE && $('video', node)) { + clone = node.cloneNode(false); + ref = node.childNodes; + for (i = 0, len = ref.length; i < len; i++) { + child = ref[i]; + $.add(clone, this.cloneWithoutVideo(child)); + } + return clone; + } else { + return node.cloneNode(true); + } + }; + + return _Class; + + })(Post); + +}).call(this); + +RandomAccessList = (function() { + var RandomAccessList; + + RandomAccessList = (function() { + function RandomAccessList(items) { + var i, item, len; + this.length = 0; + if (items) { + for (i = 0, len = items.length; i < len; i++) { + item = items[i]; + this.push(item); + } + } + } + + RandomAccessList.prototype.push = function(data) { + var ID, item, last; + ID = data.ID; + ID || (ID = data.id); + if (this[ID]) { + return; + } + last = this.last; + this[ID] = item = { + prev: last, + next: null, + data: data, + ID: ID + }; + item.prev = last; + this.last = last ? last.next = item : this.first = item; + return this.length++; + }; + + RandomAccessList.prototype.before = function(root, item) { + var prev; + if (item.next === root || item === root) { + return; + } + this.rmi(item); + prev = root.prev; + root.prev = item; + item.next = root; + item.prev = prev; + if (prev) { + return prev.next = item; + } else { + return this.first = item; + } + }; + + RandomAccessList.prototype.after = function(root, item) { + var next; + if (item.prev === root || item === root) { + return; + } + this.rmi(item); + next = root.next; + root.next = item; + item.prev = root; + item.next = next; + if (next) { + return next.prev = item; + } else { + return this.last = item; + } + }; + + RandomAccessList.prototype.prepend = function(item) { + var first; + first = this.first; + if (item === first || !this[item.ID]) { + return; + } + this.rmi(item); + item.next = first; + if (first) { + first.prev = item; + } else { + this.last = item; + } + this.first = item; + return delete item.prev; + }; + + RandomAccessList.prototype.shift = function() { + return this.rm(this.first.ID); + }; + + RandomAccessList.prototype.order = function() { + var item, order; + order = [item = this.first]; + while (item = item.next) { + order.push(item); + } + return order; + }; + + RandomAccessList.prototype.rm = function(ID) { + var item; + item = this[ID]; + if (!item) { + return; + } + delete this[ID]; + this.length--; + this.rmi(item); + delete item.next; + return delete item.prev; + }; + + RandomAccessList.prototype.rmi = function(item) { + var next, prev; + prev = item.prev, next = item.next; + if (prev) { + prev.next = next; + } else { + this.first = next; + } + if (next) { + return next.prev = prev; + } else { + return this.last = prev; + } + }; + + return RandomAccessList; + + })(); + + return RandomAccessList; + +}).call(this); + +ShimSet = (function() { + var ShimSet; + + ShimSet = (function() { + function ShimSet() { + this.elements = {}; + this.size = 0; + } + + ShimSet.prototype.has = function(value) { + return value in this.elements; + }; + + ShimSet.prototype.add = function(value) { + if (this.elements[value]) { + return; + } + this.elements[value] = true; + return this.size++; + }; + + ShimSet.prototype["delete"] = function(value) { + if (!this.elements[value]) { + return; + } + delete this.elements[value]; + return this.size--; + }; + + return ShimSet; + + })(); + + if (!('Set' in window)) { + window.Set = ShimSet; + } + + return ShimSet; + +}).call(this); + +SimpleDict = (function() { + var SimpleDict, + slice = [].slice; + + SimpleDict = (function() { + function SimpleDict() { + this.keys = []; + } + + SimpleDict.prototype.push = function(key, data) { + key = "" + key; + if (!this[key]) { + this.keys.push(key); + } + return this[key] = data; + }; + + SimpleDict.prototype.rm = function(key) { + var i; + key = "" + key; + if ((i = this.keys.indexOf(key)) !== -1) { + this.keys.splice(i, 1); + return delete this[key]; + } + }; + + SimpleDict.prototype.forEach = function(fn) { + var j, key, len, ref; + ref = slice.call(this.keys); + for (j = 0, len = ref.length; j < len; j++) { + key = ref[j]; + fn(this[key]); + } + }; + + return SimpleDict; + + })(); + + return SimpleDict; + +}).call(this); + +Thread = (function() { + var Thread; + + Thread = (function() { + Thread.prototype.toString = function() { + return this.ID; + }; + + function Thread(ID, board) { + this.ID = ID; + this.board = board; + this.fullID = this.board + "." + this.ID; + this.posts = new SimpleDict(); + this.isDead = false; + this.isHidden = false; + this.isOnTop = false; + this.isSticky = false; + this.isClosed = false; + this.isArchived = false; + this.postLimit = false; + this.fileLimit = false; + this.ipCount = void 0; + this.OP = null; + this.catalogView = null; + this.board.threads.push(this.ID, this); + g.threads.push(this.fullID, this); + } + + Thread.prototype.setPage = function(pageNum) { + var icon, info, quote, ref; + ref = this.OP.nodes, info = ref.info, quote = ref.quote; + if (!(icon = $('.page-num', info))) { + icon = $.el('span', { + className: 'page-num' + }); + $.after(quote, [$.tn(' '), icon]); + } + icon.title = "This thread is on page " + pageNum + " in the original index."; + icon.textContent = "[" + pageNum + "]"; + if (this.catalogView) { + return this.catalogView.nodes.pageCount.textContent = pageNum; + } + }; + + Thread.prototype.setCount = function(type, count, reachedLimit) { + var el; + if (!this.catalogView) { + return; + } + el = this.catalogView.nodes[type + "Count"]; + el.textContent = count; + return (reachedLimit ? $.addClass : $.rmClass)(el, 'warning'); + }; + + Thread.prototype.setStatus = function(type, status) { + var name; + name = "is" + type; + if (this[name] === status) { + return; + } + this[name] = status; + if (!this.OP) { + return; + } + this.setIcon('Sticky', this.isSticky); + this.setIcon('Closed', this.isClosed && !this.isArchived); + return this.setIcon('Archived', this.isArchived); + }; + + Thread.prototype.setIcon = function(type, status) { + var icon, root, typeLC; + typeLC = type.toLowerCase(); + icon = $("." + typeLC + "Icon", this.OP.nodes.info); + if (!!icon === status) { + return; + } + if (!status) { + $.rm(icon.previousSibling); + $.rm(icon); + if (this.catalogView) { + $.rm($("." + typeLC + "Icon", this.catalogView.nodes.icons)); + } + return; + } + icon = $.el('img', { + src: "" + Build.staticPath + typeLC + Build.gifIcon, + alt: type, + title: type, + className: typeLC + "Icon retina" + }); + root = type !== 'Sticky' && this.isSticky ? $('.stickyIcon', this.OP.nodes.info) : $('.page-num', this.OP.nodes.info) || this.OP.nodes.quote; + $.after(root, [$.tn(' '), icon]); + if (!this.catalogView) { + return; + } + return (type === 'Sticky' && this.isClosed ? $.prepend : $.add)(this.catalogView.nodes.icons, icon.cloneNode()); + }; + + Thread.prototype.kill = function() { + return this.isDead = true; + }; + + Thread.prototype.collect = function() { + this.posts.forEach(function(post) { + return post.collect(); + }); + g.threads.rm(this.fullID); + return this.board.threads.rm(this); + }; + + return Thread; + + })(); + + return Thread; + +}).call(this); + +Redirect = (function() { + var Redirect, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + Redirect = { + init: function() { + var archive, archives, boardID, boards, data, files, i, id, j, len, len1, name, o, record, ref, ref1, software, type, uid, withCredentials; + o = { + thread: {}, + post: {}, + file: {}, + report: {} + }; + archives = {}; + ref = Redirect.archives; + for (i = 0, len = ref.length; i < len; i++) { + data = ref[i]; + uid = data.uid, name = data.name, boards = data.boards, files = data.files, software = data.software, withCredentials = data.withCredentials; + archives[JSON.stringify(uid != null ? uid : name)] = data; + for (j = 0, len1 = boards.length; j < len1; j++) { + boardID = boards[j]; + if (!withCredentials) { + if (!(boardID in o.thread)) { + o.thread[boardID] = data; + } + if (!(boardID in o.post || software !== 'foolfuuka')) { + o.post[boardID] = data; + } + if (!(boardID in o.file || indexOf.call(files, boardID) < 0)) { + o.file[boardID] = data; + } + } + if (name === 'fgts') { + o.report[boardID] = data; + } + } + } + ref1 = Conf['selectedArchives']; + for (boardID in ref1) { + record = ref1[boardID]; + for (type in record) { + id = record[type]; + if (id === null) { + delete o[type][boardID]; + } else if (archive = archives[JSON.stringify(id)]) { + boards = type === 'file' ? archive.files : archive.boards; + if (indexOf.call(boards, boardID) >= 0) { + o[type][boardID] = archive; + } + } + } + } + return Redirect.data = o; + }, + archives: [ + { "uid": 3, "name": "4plebs", "domain": "archive.4plebs.org", "http": true, "https": true, "software": "foolfuuka", "boards": [ "adv", "f", "hr", "o", "pol", "s4s", "sp", "tg", "trv", "tv", "x" ], "files": [ "adv", "f", "hr", "o", "pol", "s4s", "sp", "tg", "trv", "tv", "x" ] }, + { "uid": 4, "name": "Nyafuu Archive", "domain": "archive.nyafuu.org", "http": true, "https": true, "software": "foolfuuka", "boards": [ "c", "e", "news", "w", "wg", "wsr" ], "files": [ "c", "e", "news", "w", "wg", "wsr" ] }, + { "uid": 8, "name": "Rebecca Black Tech", "domain": "rbt.asia", "http": false, "https": true, "software": "fuuka", "boards": [ "cgl", "g", "mu" ], "files": [ "cgl", "g", "mu" ] }, + { "uid": 10, "name": "warosu", "domain": "warosu.org", "http": false, "https": true, "software": "fuuka", "boards": [ "3", "biz", "cgl", "ck", "diy", "fa", "g", "ic", "jp", "lit", "sci", "tg", "vr" ], "files": [ "3", "biz", "cgl", "ck", "diy", "fa", "g", "ic", "jp", "lit", "sci", "tg", "vr" ] }, + { "uid": 15, "name": "fgts", "domain": "fgts.jp", "http": true, "https": true, "software": "foolfuuka", "boards": [ "asp", "b", "cm", "gd", "h", "hc", "hm", "n", "out", "p", "po", "qa", "r", "s", "soc", "toy", "vp", "y" ], "files": [ "asp", "b", "cm", "gd", "h", "hc", "hm", "n", "out", "p", "po", "qa", "r", "s", "soc", "toy", "vp", "y" ] }, + { "uid": 23, "name": "Desustorage", "domain": "desustorage.org", "http": true, "https": true, "software": "foolfuuka", "boards": [ "a", "aco", "an", "c", "co", "d", "fit", "gif", "his", "int", "k", "m", "mlp", "qa", "r9k", "tg", "trash", "vr", "wsg" ], "files": [ "a", "aco", "an", "c", "co", "d", "fit", "gif", "his", "int", "k", "m", "mlp", "qa", "r9k", "tg", "trash", "vr", "wsg" ] }, + { "uid": 24, "name": "fireden.net", "domain": "boards.fireden.net", "http": false, "https": true, "software": "foolfuuka", "boards": [ "a", "cm", "ic", "sci", "tg", "v", "vg", "y" ], "files": [ "a", "cm", "ic", "sci", "tg", "v", "vg", "y" ] }, + { "uid": 25, "name": "arch.b4k.co", "domain": "arch.b4k.co", "http": true, "https": true, "software": "foolfuuka", "boards": [ "g", "jp", "mlp", "v" ], "files": [] }, + { "uid": 5, "name": "Love is Over", "domain": "deploy.loveisover.me", "http": true, "https": false, "software": "foolfuuka", "boards": [ "c", "d", "e", "i", "lgbt", "t", "u" ], "files": [ "c", "d", "e", "i", "lgbt", "t", "u" ], "search": [] }, + { "uid": 28, "name": "bstats", "domain": "archive.b-stats.org", "http": true, "https": true, "software": "foolfuuka", "boards": [ "f", "cm", "hm", "lgbt", "news", "trash", "y" ], "files": [] } + ], + to: function(dest, data) { + var archive; + archive = (dest === 'search' || dest === 'board' ? Redirect.data.thread : Redirect.data[dest])[data.boardID]; + if (!archive) { + return ''; + } + return Redirect[dest](archive, data); + }, + protocol: function(archive) { + var protocol; + protocol = location.protocol; + if (!archive[protocol.slice(0, -1)]) { + protocol = protocol === 'https:' ? 'http:' : 'https:'; + } + return protocol + "//"; + }, + thread: function(archive, arg) { + var boardID, path, postID, threadID; + boardID = arg.boardID, threadID = arg.threadID, postID = arg.postID; + path = threadID ? boardID + "/thread/" + threadID : boardID + "/post/" + postID; + if (archive.software === 'foolfuuka') { + path += '/'; + } + if (threadID && postID) { + path += archive.software === 'foolfuuka' ? "#" + postID : "#p" + postID; + } + return "" + (Redirect.protocol(archive)) + archive.domain + "/" + path; + }, + post: function(archive, arg) { + var boardID, postID, protocol, url; + boardID = arg.boardID, postID = arg.postID; + protocol = Redirect.protocol(archive); + url = "" + protocol + archive.domain + "/_/api/chan/post/?board=" + boardID + "&num=" + postID; + if (!Redirect.securityCheck(url)) { + return ''; + } + return url; + }, + file: function(archive, arg) { + var boardID, filename; + boardID = arg.boardID, filename = arg.filename; + return "" + (Redirect.protocol(archive)) + archive.domain + "/" + boardID + "/full_image/" + filename; + }, + board: function(archive, arg) { + var boardID; + boardID = arg.boardID; + return "" + (Redirect.protocol(archive)) + archive.domain + "/" + boardID + "/"; + }, + search: function(archive, arg) { + var boardID, path, type, value; + boardID = arg.boardID, type = arg.type, value = arg.value; + type = type === 'name' ? 'username' : type === 'MD5' ? 'image' : type; + if (type === 'capcode') { + value = { + 'Developer': 'dev' + }[value] || value.toLowerCase(); + } else if (type === 'image') { + value = value.replace(/[+\/=]/g, function(c) { + return { + '+': '-', + '/': '_', + '=': '' + }[c]; + }); + } + value = encodeURIComponent(value); + path = archive.software === 'foolfuuka' ? boardID + "/search/" + type + "/" + value + "/" : type === 'image' ? boardID + "/image/" + value : boardID + "/?task=search2&search_" + type + "=" + value; + return "" + (Redirect.protocol(archive)) + archive.domain + "/" + path; + }, + report: function(archive, arg) { + var boardID, postID; + boardID = arg.boardID, postID = arg.postID; + return "https://so.fgts.jp/report/?board=" + boardID + "&no=" + postID; + }, + securityCheck: function(url) { + return /^https:\/\//.test(url) || location.protocol === 'http:' || Conf['Exempt Archives from Encryption']; + }, + navigate: function(dest, data, alternative) { + var url; + if (!Redirect.data) { + Redirect.init(); + } + url = Redirect.to(dest, data); + if (url && (Redirect.securityCheck(url) || confirm("Redirect to " + url + "?\n\nYour connection will not be encrypted."))) { + return location.replace(url); + } else if (alternative) { + return location.replace(alternative); + } + } + }; + + return Redirect; + +}).call(this); + +Anonymize = (function() { + var Anonymize; + + Anonymize = { + init: function() { + var ref; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread' || ref === 'archive') && Conf['Anonymize'])) { + return; + } + if (g.VIEW === 'archive') { + return this.archive(); + } + return Callbacks.Post.push({ + name: 'Anonymize', + cb: this.node + }); + }, + node: function() { + var email, name, ref, tripcode; + if (this.info.capcode || this.isClone) { + return; + } + ref = this.nodes, name = ref.name, tripcode = ref.tripcode, email = ref.email; + if (this.info.name !== 'Anonymous') { + name.textContent = 'Anonymous'; + } + if (tripcode) { + $.rm(tripcode); + delete this.nodes.tripcode; + } + if (this.info.email) { + $.replace(email, name); + return delete this.nodes.email; + } + }, + archive: function() { + return $.ready(function() { + var i, j, len, len1, name, ref, ref1, trip; + ref = $$('.name'); + for (i = 0, len = ref.length; i < len; i++) { + name = ref[i]; + name.textContent = 'Anonymous'; + } + ref1 = $$('.postertrip'); + for (j = 0, len1 = ref1.length; j < len1; j++) { + trip = ref1[j]; + $.rm(trip); + } + }); + } + }; + + return Anonymize; + +}).call(this); + +Filter = (function() { + var Filter, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + Filter = { + filters: {}, + init: function() { + var boards, err, excludes, filter, hl, i, key, len, line, op, ref, ref1, ref2, ref3, ref4, ref5, ref6, regexp, stub, top; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Filter'])) { + return; + } + if (!Conf['Filtered Backlinks']) { + $.addClass(doc, 'hide-backlinks'); + } + for (key in Config.filter) { + this.filters[key] = []; + ref1 = Conf[key].split('\n'); + for (i = 0, len = ref1.length; i < len; i++) { + line = ref1[i]; + if (line[0] === '#') { + continue; + } + if (!(regexp = line.match(/\/(.+)\/(\w*)/))) { + continue; + } + filter = line.replace(regexp[0], ''); + boards = ((ref2 = filter.match(/boards:([^;]+)/)) != null ? ref2[1].toLowerCase() : void 0) || 'global'; + boards = boards === 'global' ? null : boards.split(','); + if (boards === null) { + excludes = ((ref3 = filter.match(/exclude:([^;]+)/)) != null ? ref3[1].toLowerCase().split(',') : void 0) || null; + } + if (key === 'uniqueID' || key === 'MD5') { + regexp = regexp[1]; + } else { + try { + regexp = RegExp(regexp[1], regexp[2]); + } catch (_error) { + err = _error; + new Notice('warning', [$.tn("Invalid " + key + " filter:"), $.el('br'), $.tn(line), $.el('br'), $.tn(err.message)], 60); + continue; + } + } + op = ((ref4 = filter.match(/[^t]op:(yes|no|only)/)) != null ? ref4[1] : void 0) || 'yes'; + stub = (function() { + var ref5; + switch ((ref5 = filter.match(/stub:(yes|no)/)) != null ? ref5[1] : void 0) { + case 'yes': + return true; + case 'no': + return false; + default: + return Conf['Stubs']; + } + })(); + if (hl = /highlight/.test(filter)) { + hl = ((ref5 = filter.match(/highlight:([\w-]+)/)) != null ? ref5[1] : void 0) || 'filter-highlight'; + top = ((ref6 = filter.match(/top:(yes|no)/)) != null ? ref6[1] : void 0) || 'yes'; + top = top === 'yes'; + } + this.filters[key].push(this.createFilter(regexp, boards, excludes, op, stub, hl, top)); + } + if (!this.filters[key].length) { + delete this.filters[key]; + } + } + if (!Object.keys(this.filters).length) { + return; + } + return Callbacks.Post.push({ + name: 'Filter', + cb: this.node + }); + }, + createFilter: function(regexp, boards, excludes, op, stub, hl, top) { + var settings, test; + test = typeof regexp === 'string' ? function(value) { + return regexp === value; + } : function(value) { + return regexp.test(value); + }; + settings = { + hide: !hl, + stub: stub, + "class": hl, + top: top + }; + return function(value, boardID, isReply) { + if (boards && indexOf.call(boards, boardID) < 0) { + return false; + } + if (excludes && indexOf.call(excludes, boardID) >= 0) { + return false; + } + if (isReply && op === 'only' || !isReply && op === 'no') { + return false; + } + if (!test(value)) { + return false; + } + return settings; + }; + }, + node: function() { + var filter, i, key, len, ref, ref1, result, value; + if (this.isClone) { + return; + } + for (key in Filter.filters) { + if ((value = Filter[key](this)) != null) { + ref = Filter.filters[key]; + for (i = 0, len = ref.length; i < len; i++) { + filter = ref[i]; + if (!(result = filter(value, this.board.ID, this.isReply))) { + continue; + } + if (result.hide && !this.isFetchedQuote) { + if (this.isReply) { + PostHiding.hide(this, result.stub); + } else if (g.VIEW === 'index') { + ThreadHiding.hide(this.thread, result.stub); + } else { + continue; + } + return; + } + $.addClass(this.nodes.root, result["class"]); + if (!(this.highlights && (ref1 = result["class"], indexOf.call(this.highlights, ref1) >= 0))) { + (this.highlights || (this.highlights = [])).push(result["class"]); + } + if (!this.isReply && result.top) { + this.thread.isOnTop = true; + } + } + } + } + }, + isHidden: function(post) { + var filter, i, key, len, ref, result, value; + for (key in Filter.filters) { + if ((value = Filter[key](post)) != null) { + ref = Filter.filters[key]; + for (i = 0, len = ref.length; i < len; i++) { + filter = ref[i]; + if (result = filter(value, post.boardID, post.isReply)) { + if (result.hide) { + return true; + } + } + } + } + } + return false; + }, + postID: function(post) { + var ref; + return "" + ((ref = post.ID) != null ? ref : post.postID); + }, + name: function(post) { + return post.info.name; + }, + uniqueID: function(post) { + return post.info.uniqueID; + }, + tripcode: function(post) { + return post.info.tripcode; + }, + capcode: function(post) { + return post.info.capcode; + }, + subject: function(post) { + return post.info.subject; + }, + comment: function(post) { + var base; + return (base = post.info).comment != null ? base.comment : base.comment = Build.parseComment(post.info.commentHTML.innerHTML); + }, + flag: function(post) { + return post.info.flag; + }, + filename: function(post) { + var ref; + return (ref = post.file) != null ? ref.name : void 0; + }, + dimensions: function(post) { + var ref; + return (ref = post.file) != null ? ref.dimensions : void 0; + }, + filesize: function(post) { + var ref; + return (ref = post.file) != null ? ref.size : void 0; + }, + MD5: function(post) { + var ref; + return (ref = post.file) != null ? ref.MD5 : void 0; + }, + menu: { + init: function() { + var div, entry, i, len, ref, ref1, type; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Filter'])) { + return; + } + div = $.el('div', { + textContent: 'Filter' + }); + entry = { + el: div, + order: 50, + open: function(post) { + Filter.menu.post = post; + return true; + }, + subEntries: [] + }; + ref1 = [['Name', 'name'], ['Unique ID', 'uniqueID'], ['Tripcode', 'tripcode'], ['Capcode', 'capcode'], ['Subject', 'subject'], ['Comment', 'comment'], ['Flag', 'flag'], ['Filename', 'filename'], ['Image dimensions', 'dimensions'], ['Filesize', 'filesize'], ['Image MD5', 'MD5']]; + for (i = 0, len = ref1.length; i < len; i++) { + type = ref1[i]; + entry.subEntries.push(Filter.menu.createSubEntry(type[0], type[1])); + } + return Menu.menu.addEntry(entry); + }, + createSubEntry: function(text, type) { + var el; + el = $.el('a', { + href: 'javascript:;', + textContent: text + }); + el.dataset.type = type; + $.on(el, 'click', Filter.menu.makeFilter); + return { + el: el, + open: function(post) { + var value; + value = Filter[type](post); + return value != null; + } + }; + }, + makeFilter: function() { + var re, type, value; + type = this.dataset.type; + value = Filter[type](Filter.menu.post); + re = type === 'uniqueID' || type === 'MD5' ? value : value.replace(/\/|\\|\^|\$|\n|\.|\(|\)|\{|\}|\[|\]|\?|\*|\+|\|/g, function(c) { + if (c === '\n') { + return '\\n'; + } else if (c === '\\') { + return '\\\\'; + } else { + return "\\" + c; + } + }); + re = type === 'uniqueID' || type === 'MD5' ? "/" + re + "/" : "/^" + re + "$/"; + return $.get(type, Conf[type], function(item) { + var save, section, select, ta, tl; + save = item[type]; + save = save ? save + "\n" + re : re; + $.set(type, save); + Settings.open('Filter'); + section = $('.section-container'); + select = $('select[name=filter]', section); + select.value = type; + Settings.selectFilter.call(select); + ta = $('textarea', section); + tl = ta.textLength; + ta.setSelectionRange(tl, tl); + return ta.focus(); + }); + } + } + }; + + return Filter; + +}).call(this); + +PostHiding = (function() { + var PostHiding; + + PostHiding = { + init: function() { + var ref; + if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Reply Hiding Buttons'] && !(Conf['Menu'] && Conf['Reply Hiding Link'])) { + return; + } + if (Conf['Reply Hiding Buttons']) { + $.addClass(doc, "reply-hide"); + } + this.db = new DataBoard('hiddenPosts'); + return Callbacks.Post.push({ + name: 'Reply Hiding', + cb: this.node + }); + }, + node: function() { + var data, sideArrows; + if (!this.isReply || this.isClone || this.isFetchedQuote) { + return; + } + if (data = PostHiding.db.get({ + boardID: this.board.ID, + threadID: this.thread.ID, + postID: this.ID + })) { + if (data.thisPost) { + PostHiding.hide(this, data.makeStub, data.hideRecursively); + } else { + Recursive.apply(PostHiding.hide, this, data.makeStub, true); + Recursive.add(PostHiding.hide, this, data.makeStub, true); + } + } + if (!Conf['Reply Hiding Buttons']) { + return; + } + sideArrows = $('.sideArrows', this.nodes.root); + $.replace(sideArrows.firstChild, PostHiding.makeButton(this, 'hide')); + return sideArrows.removeAttribute('class'); + }, + menu: { + init: function() { + var apply, div, hideStubLink, makeStub, ref, replies, thisPost; + if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Menu'] || !Conf['Reply Hiding Link']) { + return; + } + div = $.el('div', { + className: 'hide-reply-link', + textContent: 'Hide' + }); + apply = $.el('a', { + textContent: 'Apply', + href: 'javascript:;' + }); + $.on(apply, 'click', PostHiding.menu.hide); + thisPost = UI.checkbox('thisPost', 'This post', true); + replies = UI.checkbox('replies', 'Hide replies', Conf['Recursive Hiding']); + makeStub = UI.checkbox('makeStub', 'Make stub', Conf['Stubs']); + Menu.menu.addEntry({ + el: div, + order: 20, + open: function(post) { + if (!post.isReply || post.isClone || post.isHidden) { + return false; + } + PostHiding.menu.post = post; + return true; + }, + subEntries: [ + { + el: apply + }, { + el: thisPost + }, { + el: replies + }, { + el: makeStub + } + ] + }); + div = $.el('div', { + className: 'show-reply-link', + textContent: 'Show' + }); + apply = $.el('a', { + textContent: 'Apply', + href: 'javascript:;' + }); + $.on(apply, 'click', PostHiding.menu.show); + thisPost = UI.checkbox('thisPost', 'This post', false); + replies = UI.checkbox('replies', 'Show replies', false); + hideStubLink = $.el('a', { + textContent: 'Hide stub', + href: 'javascript:;' + }); + $.on(hideStubLink, 'click', PostHiding.menu.hideStub); + Menu.menu.addEntry({ + el: div, + order: 20, + open: function(post) { + var data; + if (!post.isReply || post.isClone || !post.isHidden) { + return false; + } + if (!(data = PostHiding.db.get({ + boardID: post.board.ID, + threadID: post.thread.ID, + postID: post.ID + }))) { + return false; + } + PostHiding.menu.post = post; + thisPost.firstChild.checked = post.isHidden; + replies.firstChild.checked = (data != null ? data.hideRecursively : void 0) != null ? data.hideRecursively : Conf['Recursive Hiding']; + return true; + }, + subEntries: [ + { + el: apply + }, { + el: thisPost + }, { + el: replies + } + ] + }); + return Menu.menu.addEntry({ + el: hideStubLink, + order: 15, + open: function(post) { + var data; + if (!post.isReply || post.isClone || !post.isHidden) { + return false; + } + if (!(data = PostHiding.db.get({ + boardID: post.board.ID, + threadID: post.thread.ID, + postID: post.ID + }))) { + return false; + } + return PostHiding.menu.post = post; + } + }); + }, + hide: function() { + var makeStub, parent, post, replies, thisPost; + parent = this.parentNode; + thisPost = $('input[name=thisPost]', parent).checked; + replies = $('input[name=replies]', parent).checked; + makeStub = $('input[name=makeStub]', parent).checked; + post = PostHiding.menu.post; + if (thisPost) { + PostHiding.hide(post, makeStub, replies); + } else if (replies) { + Recursive.apply(PostHiding.hide, post, makeStub, true); + Recursive.add(PostHiding.hide, post, makeStub, true); + } else { + return; + } + PostHiding.saveHiddenState(post, true, thisPost, makeStub, replies); + return $.event('CloseMenu'); + }, + show: function() { + var data, parent, post, replies, thisPost; + parent = this.parentNode; + thisPost = $('input[name=thisPost]', parent).checked; + replies = $('input[name=replies]', parent).checked; + post = PostHiding.menu.post; + if (thisPost) { + PostHiding.show(post, replies); + } else if (replies) { + Recursive.apply(PostHiding.show, post, true); + Recursive.rm(PostHiding.hide, post, true); + } else { + return; + } + if (data = PostHiding.db.get({ + boardID: post.board.ID, + threadID: post.thread.ID, + postID: post.ID + })) { + PostHiding.saveHiddenState(post, !(thisPost && replies), !thisPost, data.makeStub, !replies); + } + return $.event('CloseMenu'); + }, + hideStub: function() { + var data, post; + post = PostHiding.menu.post; + if (data = PostHiding.db.get({ + boardID: post.board.ID, + threadID: post.thread.ID, + postID: post.ID + })) { + PostHiding.show(post, data.hideRecursively); + PostHiding.hide(post, false, data.hideRecursively); + PostHiding.saveHiddenState(post, true, true, false, data.hideRecursively); + } + $.event('CloseMenu'); + } + }, + makeButton: function(post, type) { + var a, span; + span = $.el('span', { + className: "fa fa-" + (type === 'hide' ? 'minus' : 'plus') + "-square-o", + textContent: "" + }); + a = $.el('a', { + className: type + "-reply-button", + href: 'javascript:;' + }); + $.add(a, span); + $.on(a, 'click', PostHiding.toggle); + return a; + }, + saveHiddenState: function(post, isHiding, thisPost, makeStub, hideRecursively) { + var data; + data = { + boardID: post.board.ID, + threadID: post.thread.ID, + postID: post.ID + }; + if (isHiding) { + data.val = { + thisPost: thisPost !== false, + makeStub: makeStub, + hideRecursively: hideRecursively + }; + return PostHiding.db.set(data); + } else { + return PostHiding.db["delete"](data); + } + }, + toggle: function() { + var post; + post = Get.postFromNode(this); + PostHiding[(post.isHidden ? 'show' : 'hide')](post); + return PostHiding.saveHiddenState(post, post.isHidden); + }, + hide: function(post, makeStub, hideRecursively) { + var a, i, len, quotelink, ref; + if (makeStub == null) { + makeStub = Conf['Stubs']; + } + if (hideRecursively == null) { + hideRecursively = Conf['Recursive Hiding']; + } + if (post.isHidden) { + return; + } + post.isHidden = true; + if (hideRecursively) { + Recursive.apply(PostHiding.hide, post, makeStub, true); + Recursive.add(PostHiding.hide, post, makeStub, true); + } + ref = Get.allQuotelinksLinkingTo(post); + for (i = 0, len = ref.length; i < len; i++) { + quotelink = ref[i]; + $.addClass(quotelink, 'filtered'); + } + if (!makeStub) { + post.nodes.root.hidden = true; + return; + } + a = PostHiding.makeButton(post, 'show'); + $.add(a, $.tn(" " + post.info.nameBlock)); + post.nodes.stub = $.el('div', { + className: 'stub' + }); + $.add(post.nodes.stub, a); + if (Conf['Menu']) { + $.add(post.nodes.stub, Menu.makeButton(post)); + } + return $.prepend(post.nodes.root, post.nodes.stub); + }, + show: function(post, showRecursively) { + var i, len, quotelink, ref; + if (showRecursively == null) { + showRecursively = Conf['Recursive Hiding']; + } + if (post.nodes.stub) { + $.rm(post.nodes.stub); + delete post.nodes.stub; + } else { + post.nodes.root.hidden = false; + } + post.isHidden = false; + if (showRecursively) { + Recursive.apply(PostHiding.show, post, true); + Recursive.rm(PostHiding.hide, post); + } + ref = Get.allQuotelinksLinkingTo(post); + for (i = 0, len = ref.length; i < len; i++) { + quotelink = ref[i]; + $.rmClass(quotelink, 'filtered'); + } + } + }; + + return PostHiding; + +}).call(this); + +Recursive = (function() { + var Recursive, + slice = [].slice, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + Recursive = { + recursives: {}, + init: function() { + var ref; + if ((ref = g.VIEW) !== 'index' && ref !== 'thread') { + return; + } + return Callbacks.Post.push({ + name: 'Recursive', + cb: this.node + }); + }, + node: function() { + var i, j, k, len, len1, obj, quote, recursive, ref, ref1; + if (this.isClone || this.isFetchedQuote) { + return; + } + ref = this.quotes; + for (j = 0, len = ref.length; j < len; j++) { + quote = ref[j]; + if (obj = Recursive.recursives[quote]) { + ref1 = obj.recursives; + for (i = k = 0, len1 = ref1.length; k < len1; i = ++k) { + recursive = ref1[i]; + recursive.apply(null, [this].concat(slice.call(obj.args[i]))); + } + } + } + }, + add: function() { + var args, base, name, obj, post, recursive; + recursive = arguments[0], post = arguments[1], args = 3 <= arguments.length ? slice.call(arguments, 2) : []; + obj = (base = Recursive.recursives)[name = post.fullID] || (base[name] = { + recursives: [], + args: [] + }); + obj.recursives.push(recursive); + return obj.args.push(args); + }, + rm: function(recursive, post) { + var i, j, len, obj, rec, ref; + if (!(obj = Recursive.recursives[post.fullID])) { + return; + } + ref = obj.recursives; + for (i = j = 0, len = ref.length; j < len; i = ++j) { + rec = ref[i]; + if (!(rec === recursive)) { + continue; + } + obj.recursives.splice(i, 1); + obj.args.splice(i, 1); + } + }, + apply: function() { + var args, fullID, post, recursive; + recursive = arguments[0], post = arguments[1], args = 3 <= arguments.length ? slice.call(arguments, 2) : []; + fullID = post.fullID; + return g.posts.forEach(function(post) { + if (indexOf.call(post.quotes, fullID) >= 0) { + return recursive.apply(null, [post].concat(slice.call(args))); + } + }); + } + }; + + return Recursive; + +}).call(this); + +ThreadHiding = (function() { + var ThreadHiding; + + ThreadHiding = { + init: function() { + var ref; + if (((ref = g.VIEW) !== 'index' && ref !== 'catalog') || !Conf['Thread Hiding Buttons'] && !(Conf['Menu'] && Conf['Thread Hiding Link']) && !Conf['JSON Index']) { + return; + } + this.db = new DataBoard('hiddenThreads'); + if (g.VIEW === 'catalog') { + return this.catalogWatch(); + } + this.catalogSet(g.BOARD); + return Callbacks.Post.push({ + name: 'Thread Hiding', + cb: this.node + }); + }, + catalogSet: function(board) { + var hiddenThreads, threadID; + if (!$.hasStorage) { + return; + } + hiddenThreads = ThreadHiding.db.get({ + boardID: board.ID, + defaultValue: {} + }); + for (threadID in hiddenThreads) { + hiddenThreads[threadID] = true; + } + return localStorage.setItem("4chan-hide-t-" + board, JSON.stringify(hiddenThreads)); + }, + catalogWatch: function() { + if (!$.hasStorage) { + return; + } + this.hiddenThreads = JSON.parse(localStorage.getItem("4chan-hide-t-" + g.BOARD)) || {}; + return Main.ready(function() { + return new MutationObserver(ThreadHiding.catalogSave).observe($.id('threads'), { + attributes: true, + subtree: true, + attributeFilter: ['style'] + }); + }); + }, + catalogSave: function() { + var hiddenThreads2, threadID; + hiddenThreads2 = JSON.parse(localStorage.getItem("4chan-hide-t-" + g.BOARD)) || {}; + for (threadID in hiddenThreads2) { + if (!(threadID in ThreadHiding.hiddenThreads)) { + ThreadHiding.db.set({ + boardID: g.BOARD.ID, + threadID: threadID, + val: { + makeStub: Conf['Stubs'] + } + }); + } + } + for (threadID in ThreadHiding.hiddenThreads) { + if (!(threadID in hiddenThreads2)) { + ThreadHiding.db["delete"]({ + boardID: g.BOARD.ID, + threadID: threadID + }); + } + } + return ThreadHiding.hiddenThreads = hiddenThreads2; + }, + node: function() { + var data; + if (this.isReply || this.isClone || this.isFetchedQuote) { + return; + } + if (data = ThreadHiding.db.get({ + boardID: this.board.ID, + threadID: this.ID + })) { + ThreadHiding.hide(this.thread, data.makeStub); + } + if (!Conf['Thread Hiding Buttons']) { + return; + } + return $.prepend(this.nodes.root, ThreadHiding.makeButton(this.thread, 'hide')); + }, + onIndexBuild: function(nodes) { + var i, len, root, thread; + for (i = 0, len = nodes.length; i < len; i++) { + root = nodes[i]; + thread = Get.threadFromRoot(root); + if (thread.isHidden && thread.stub && !root.contains(thread.stub)) { + ThreadHiding.makeStub(thread, root); + } + } + }, + menu: { + init: function() { + var apply, div, hideStubLink, makeStub; + if (g.VIEW !== 'index' || !Conf['Menu'] || !Conf['Thread Hiding Link']) { + return; + } + div = $.el('div', { + className: 'hide-thread-link', + textContent: 'Hide' + }); + apply = $.el('a', { + textContent: 'Apply', + href: 'javascript:;' + }); + $.on(apply, 'click', ThreadHiding.menu.hide); + makeStub = UI.checkbox('Stubs', 'Make stub'); + Menu.menu.addEntry({ + el: div, + order: 20, + open: function(arg) { + var isReply, thread; + thread = arg.thread, isReply = arg.isReply; + if (isReply || thread.isHidden || Conf['JSON Index'] && Conf['Index Mode'] === 'catalog') { + return false; + } + ThreadHiding.menu.thread = thread; + return true; + }, + subEntries: [ + { + el: apply + }, { + el: makeStub + } + ] + }); + div = $.el('a', { + className: 'show-thread-link', + textContent: 'Show', + href: 'javascript:;' + }); + $.on(div, 'click', ThreadHiding.menu.show); + Menu.menu.addEntry({ + el: div, + order: 20, + open: function(arg) { + var isReply, thread; + thread = arg.thread, isReply = arg.isReply; + if (isReply || !thread.isHidden || Conf['JSON Index'] && Conf['Index Mode'] === 'catalog') { + return false; + } + ThreadHiding.menu.thread = thread; + return true; + } + }); + hideStubLink = $.el('a', { + textContent: 'Hide stub', + href: 'javascript:;' + }); + $.on(hideStubLink, 'click', ThreadHiding.menu.hideStub); + return Menu.menu.addEntry({ + el: hideStubLink, + order: 15, + open: function(arg) { + var isReply, thread; + thread = arg.thread, isReply = arg.isReply; + if (isReply || !thread.isHidden || Conf['JSON Index'] && Conf['Index Mode'] === 'catalog') { + return false; + } + return ThreadHiding.menu.thread = thread; + } + }); + }, + hide: function() { + var makeStub, thread; + makeStub = $('input', this.parentNode).checked; + thread = ThreadHiding.menu.thread; + ThreadHiding.hide(thread, makeStub); + ThreadHiding.saveHiddenState(thread, makeStub); + return $.event('CloseMenu'); + }, + show: function() { + var thread; + thread = ThreadHiding.menu.thread; + ThreadHiding.show(thread); + ThreadHiding.saveHiddenState(thread); + return $.event('CloseMenu'); + }, + hideStub: function() { + var thread; + thread = ThreadHiding.menu.thread; + ThreadHiding.show(thread); + ThreadHiding.hide(thread, false); + ThreadHiding.saveHiddenState(thread, false); + $.event('CloseMenu'); + } + }, + makeButton: function(thread, type) { + var a; + a = $.el('a', { + className: type + "-thread-button", + href: 'javascript:;' + }); + $.extend(a, { + innerHTML: "" + }); + a.dataset.fullID = thread.fullID; + $.on(a, 'click', ThreadHiding.toggle); + return a; + }, + makeStub: function(thread, root) { + var a, numReplies, summary; + numReplies = $$('.thread > .replyContainer', root).length; + if (summary = $('.summary', root)) { + numReplies += +summary.textContent.match(/\d+/); + } + a = ThreadHiding.makeButton(thread, 'show'); + $.add(a, $.tn(" " + thread.OP.info.nameBlock + " (" + (numReplies === 1 ? '1 reply' : numReplies + " replies") + ")")); + thread.stub = $.el('div', { + className: 'stub' + }); + if (Conf['Menu']) { + $.add(thread.stub, [a, Menu.makeButton(thread.OP)]); + } else { + $.add(thread.stub, a); + } + return $.prepend(root, thread.stub); + }, + saveHiddenState: function(thread, makeStub) { + if (thread.isHidden) { + ThreadHiding.db.set({ + boardID: thread.board.ID, + threadID: thread.ID, + val: { + makeStub: makeStub + } + }); + } else { + ThreadHiding.db["delete"]({ + boardID: thread.board.ID, + threadID: thread.ID + }); + } + return ThreadHiding.catalogSet(thread.board); + }, + toggle: function(thread) { + if (!(thread instanceof Thread)) { + thread = g.threads[this.dataset.fullID]; + } + if (thread.isHidden) { + ThreadHiding.show(thread); + } else { + ThreadHiding.hide(thread); + } + return ThreadHiding.saveHiddenState(thread); + }, + hide: function(thread, makeStub) { + var threadRoot; + if (makeStub == null) { + makeStub = Conf['Stubs']; + } + if (thread.isHidden) { + return; + } + threadRoot = thread.OP.nodes.root.parentNode; + thread.isHidden = true; + if (Conf['JSON Index']) { + Index.updateHideLabel(); + } + if (!makeStub) { + return threadRoot.hidden = true; + } + return ThreadHiding.makeStub(thread, threadRoot); + }, + show: function(thread) { + var threadRoot; + if (thread.stub) { + $.rm(thread.stub); + delete thread.stub; + } + threadRoot = thread.OP.nodes.root.parentNode; + threadRoot.hidden = thread.isHidden = false; + if (Conf['JSON Index']) { + return Index.updateHideLabel(); + } + } + }; + + return ThreadHiding; + +}).call(this); + +Build = (function() { + var Build, + slice = [].slice; + + Build = { + staticPath: '//s.4cdn.org/image/', + gifIcon: window.devicePixelRatio >= 2 ? '@2x.gif' : '.gif', + spoilerRange: {}, + unescape: function(text) { + if (text == null) { + return text; + } + return text.replace(/<[^>]*>/g, '').replace(/&(amp|#039|quot|lt|gt|#44);/g, function(c) { + return { + '&': '&', + ''': "'", + '"': '"', + '<': '<', + '>': '>', + ',': ',' + }[c]; + }); + }, + shortFilename: function(filename) { + var ext, threshold; + threshold = 30; + ext = filename.match(/\.?[^\.]*$/)[0]; + if (filename.length - ext.length > threshold) { + return filename.slice(0, threshold - 5) + "(...)" + ext; + } else { + return filename; + } + }, + spoilerThumb: function(boardID) { + var spoilerRange; + if (spoilerRange = Build.spoilerRange[boardID]) { + return Build.staticPath + "spoiler-" + boardID + (Math.floor(1 + spoilerRange * Math.random())) + ".png"; + } else { + return Build.staticPath + "spoiler.png"; + } + }, + sameThread: function(boardID, threadID) { + return g.VIEW === 'thread' && g.BOARD.ID === boardID && g.THREADID === +threadID; + }, + postURL: function(boardID, threadID, postID) { + if (Build.sameThread(boardID, threadID)) { + return "#p" + postID; + } else { + return "/" + boardID + "/thread/" + threadID + "#p" + postID; + } + }, + parseJSON: function(data, boardID) { + var o; + o = { + postID: data.no, + threadID: data.resto || data.no, + boardID: boardID, + isReply: !!data.resto, + isSticky: !!data.sticky, + isClosed: !!data.closed, + isArchived: !!data.archived, + fileDeleted: !!data.filedeleted + }; + o.info = { + subject: Build.unescape(data.sub), + email: Build.unescape(data.email), + name: Build.unescape(data.name) || '', + tripcode: data.trip, + uniqueID: data.id, + flagCode: data.country, + flag: Build.unescape(data.country_name), + dateUTC: data.time, + dateText: data.now, + commentHTML: { + innerHTML: data.com || '' + } + }; + if (data.capcode) { + o.info.capcode = data.capcode.replace(/_highlight$/, '').replace(/_/g, ' ').replace(/\b\w/g, function(c) { + return c.toUpperCase(); + }); + o.capcodeHighlight = /_highlight$/.test(data.capcode); + delete o.info.uniqueID; + } + if (data.ext) { + o.file = { + name: (Build.unescape(data.filename)) + data.ext, + url: boardID === 'f' ? location.protocol + "//i.4cdn.org/" + boardID + "/" + (encodeURIComponent(data.filename)) + data.ext : location.protocol + "//i.4cdn.org/" + boardID + "/" + data.tim + data.ext, + height: data.h, + width: data.w, + MD5: data.md5, + size: $.bytesToString(data.fsize), + thumbURL: location.protocol + "//i.4cdn.org/" + boardID + "/" + data.tim + "s.jpg", + theight: data.tn_h, + twidth: data.tn_w, + isSpoiler: !!data.spoiler, + tag: data.tag + }; + if (!/\.pdf$/.test(o.file.url)) { + o.file.dimensions = o.file.width + "x" + o.file.height; + } + } + return o; + }, + parseComment: function(html) { + html = html.replace(//gi, '\n').replace(/\n\nRolled [^<]*<\/b>/i, '').replace(/]*>/g, ''); + return Build.unescape(html); + }, + postFromObject: function(data, boardID, suppressThumb) { + var o; + o = Build.parseJSON(data, boardID); + return Build.post(o, suppressThumb); + }, + post: function(o, suppressThumb) { + var boardID, capcode, capcodeDescription, capcodeLC, capcodeLong, capcodePlural, commentHTML, container, dateText, dateUTC, email, file, fileBlock, fileThumb, fileURL, flag, flagCode, gifIcon, href, i, len, match, name, postClass, postID, postInfo, postLink, protocol, quote, quoteLink, ref, ref1, shortFilename, staticPath, subject, threadID, tripcode, uniqueID, wholePost; + postID = o.postID, threadID = o.threadID, boardID = o.boardID, file = o.file; + ref = o.info, subject = ref.subject, email = ref.email, name = ref.name, tripcode = ref.tripcode, capcode = ref.capcode, uniqueID = ref.uniqueID, flagCode = ref.flagCode, flag = ref.flag, dateUTC = ref.dateUTC, dateText = ref.dateText, commentHTML = ref.commentHTML; + staticPath = Build.staticPath, gifIcon = Build.gifIcon; + + /* Post Info */ + if (capcode) { + capcodeLC = capcode.toLowerCase(); + if (capcode === 'Founder') { + capcodePlural = 'the Founder'; + capcodeDescription = "4chan's Founder"; + } else { + capcodeLong = { + 'Admin': 'Administrator', + 'Mod': 'Moderator' + }[capcode] || capcode; + capcodePlural = capcodeLong + "s"; + capcodeDescription = "a 4chan " + capcodeLong; + } + } + postLink = Build.postURL(boardID, threadID, postID); + quoteLink = Build.sameThread(boardID, threadID) ? "javascript:quote('" + (+postID) + "');" : "/" + boardID + "/thread/" + threadID + "#q" + postID; + postInfo = { + innerHTML: "
        " + ((!o.isReply || boardID === "f" || subject) ? "" + E(subject || "") + " " : "") + "" + ((email) ? "" : "") + "" + E(name) + "" + ((tripcode) ? " " + E(tripcode) + "" : "") + ((capcode) ? " ## " + E(capcode) + "" : "") + ((email) ? "" : "") + ((boardID === "f" && !o.isReply || capcode) ? "" : " ") + ((capcode) ? " \""" : "") + ((uniqueID && !capcode) ? " (ID: " + E(uniqueID) + ")" : "") + ((flagCode) ? " " : "") + " " + E(dateText) + " No." + E(postID) + "" + ((o.isSticky) ? " \"Sticky\"" : "") + ((o.isClosed && !o.isArchived) ? " \"Closed\"" : "") + ((o.isArchived) ? " \"Archived\"" : "") + ((!o.isReply && g.VIEW === "index") ? "   [Reply]" : "") + "
        " + }; + + /* File Info */ + if (file) { + protocol = /^https?:(?=\/\/i\.4cdn\.org\/)/; + fileURL = file.url.replace(protocol, ''); + shortFilename = Build.shortFilename(file.name); + fileThumb = file.isSpoiler ? Build.spoilerThumb(boardID) : file.thumbURL.replace(protocol, ''); + } + fileBlock = { + innerHTML: ((file) ? "
        " + ((boardID === "f") ? "
        File: " + E(file.name) + "-(" + E(file.size) + ", " + E(file.dimensions) + ((file.tag) ? ", " + E(file.tag) : "") + ")
        " : "
        File: " + ((file.isSpoiler) ? "Spoiler Image" : E(shortFilename)) + " (" + E(file.size) + ", " + E(file.dimensions || "PDF") + ")
        ") + "
        " : ((o.fileDeleted) ? "
        \"File
        " : "")) + }; + + /* Whole Post */ + postClass = o.isReply ? 'reply' : 'op'; + wholePost = { + innerHTML: ((o.isReply) ? "
        >>
        " : "") + "
        " + ((o.isReply) ? (postInfo).innerHTML + (fileBlock).innerHTML : (fileBlock).innerHTML + (postInfo).innerHTML) + "
        " + (commentHTML).innerHTML + "
        " + }; + container = $.el('div', { + className: "postContainer " + postClass + "Container", + id: "pc" + postID + }); + $.extend(container, wholePost); + ref1 = $$('.quotelink', container); + for (i = 0, len = ref1.length; i < len; i++) { + quote = ref1[i]; + href = quote.getAttribute('href'); + if ((href[0] === '#') && !(Build.sameThread(boardID, threadID))) { + quote.href = ("/" + boardID + "/thread/" + threadID) + href; + } else if ((match = href.match(/^\/([^\/]+)\/thread\/(\d+)/)) && (Build.sameThread(match[1], match[2]))) { + quote.href = href.match(/(#[^#]*)?$/)[0] || '#'; + } else if (/^\d+(#|$)/.test(href) && !(g.VIEW === 'thread' && g.BOARD.ID === boardID)) { + quote.href = "/" + boardID + "/thread/" + href; + } + } + return container; + }, + summaryText: function(status, posts, files) { + var text; + text = ''; + if (status) { + text += status + " "; + } + text += posts + " post" + (posts > 1 ? 's' : ''); + if (+files) { + text += " and " + files + " image repl" + (files > 1 ? 'ies' : 'y'); + } + return text += " " + (status === '-' ? 'shown' : 'omitted') + "."; + }, + summary: function(boardID, threadID, posts, files) { + return $.el('a', { + className: 'summary', + textContent: Build.summaryText('', posts, files), + href: "/" + boardID + "/thread/" + threadID + }); + }, + thread: function(board, data, full) { + var OP, root; + Build.spoilerRange[board] = data.custom_spoiler; + if (OP = board.posts[data.no]) { + if (OP.isFetchedQuote) { + OP = null; + } + } + if (OP && (root = OP.nodes.root.parentNode)) { + $.rmAll(root); + } else { + root = $.el('div', { + className: 'thread', + id: "t" + data.no + }); + } + $.add(root, Build[full ? 'fullThread' : 'excerptThread'](board, data, OP)); + return root; + }, + excerptThread: function(board, data, OP) { + var files, nodes, posts, ref; + nodes = [OP ? OP.nodes.root : Build.postFromObject(data, board.ID, true)]; + if (data.omitted_posts || !Conf['Show Replies'] && data.replies) { + ref = Conf['Show Replies'] ? [ + data.omitted_posts, data.images - data.last_replies.filter(function(data) { + return !!data.ext; + }).length + ] : [data.replies, data.images], posts = ref[0], files = ref[1]; + nodes.push(Build.summary(board.ID, data.no, posts, files)); + } + return nodes; + }, + fullThread: function(board, data) { + return Build.postFromObject(data, board.ID); + }, + catalogThread: function(thread) { + var br, cc, comment, data, exif, fileCount, gifIcon, href, i, imgClass, j, k, l, len, len1, len2, len3, pageCount, postCount, pp, quote, ref, ref1, ref2, ref3, ref4, root, spoilerRange, src, staticPath; + staticPath = Build.staticPath, gifIcon = Build.gifIcon; + data = Index.liveThreadData[Index.liveThreadIDs.indexOf(thread.ID)]; + if (data.spoiler && !Conf['Reveal Spoiler Thumbnails']) { + src = staticPath + "spoiler"; + if (spoilerRange = Build.spoilerRange[thread.board]) { + src += ("-" + thread.board) + Math.floor(1 + spoilerRange * Math.random()); + } + src += '.png'; + imgClass = 'spoiler-file'; + } else if (data.filedeleted) { + src = staticPath + "filedeleted-res" + gifIcon; + imgClass = 'deleted-file'; + } else if (thread.OP.file) { + src = thread.OP.file.thumbURL; + } else { + src = staticPath + "nofile.png"; + imgClass = 'no-file'; + } + postCount = data.replies + 1; + fileCount = data.images + !!data.ext; + pageCount = Math.floor(Index.liveThreadIDs.indexOf(thread.ID) / Index.threadsNumPerPage) + 1; + comment = { + innerHTML: data.com || '' + }; + root = $.el('div', { + className: 'catalog-thread' + }); + $.extend(root, { + innerHTML: "
        " + E(postCount) + " / " + E(fileCount) + " / " + E(pageCount) + "
        " + ((thread.OP.info.subject) ? "
        " + E(thread.OP.info.subject) + "
        " : "") + "
        " + (comment).innerHTML + "
        " + }); + root.dataset.fullID = thread.fullID; + if (thread.OP.highlights) { + $.addClass.apply($, [root].concat(slice.call(thread.OP.highlights))); + } + ref = $$('.quotelink', root.lastElementChild); + for (i = 0, len = ref.length; i < len; i++) { + quote = ref[i]; + href = quote.getAttribute('href'); + if (href[0] === '#') { + quote.href = ("/" + thread.board + "/thread/" + thread.ID) + href; + } + } + ref1 = $$('.abbr, .exif', root.lastElementChild); + for (j = 0, len1 = ref1.length; j < len1; j++) { + exif = ref1[j]; + $.rm(exif); + } + ref2 = $$('.prettyprint', root.lastElementChild); + for (k = 0, len2 = ref2.length; k < len2; k++) { + pp = ref2[k]; + cc = $.el('span', { + className: 'catalog-code' + }); + $.add(cc, slice.call(pp.childNodes)); + $.replace(pp, cc); + } + ref3 = $$('br', root.lastElementChild); + for (l = 0, len3 = ref3.length; l < len3; l++) { + br = ref3[l]; + if (((ref4 = br.previousSibling) != null ? ref4.nodeName : void 0) === 'BR') { + $.rm(br); + } + } + if (thread.isSticky) { + $.add($('.catalog-icons', root), $.el('img', { + src: staticPath + "sticky" + gifIcon, + className: 'stickyIcon', + title: 'Sticky' + })); + } + if (thread.isClosed) { + $.add($('.catalog-icons', root), $.el('img', { + src: staticPath + "closed" + gifIcon, + className: 'closedIcon', + title: 'Closed' + })); + } + if (data.bumplimit) { + $.addClass($('.post-count', root), 'warning'); + } + if (data.imagelimit) { + $.addClass($('.file-count', root), 'warning'); + } + return root; + } + }; + + return Build; + +}).call(this); + +(function() { + + +}).call(this); + +Get = (function() { + var Get, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + Get = { + threadExcerpt: function(thread) { + var OP, excerpt, ref; + OP = thread.OP; + excerpt = ("/" + thread.board + "/ - ") + (((ref = OP.info.subject) != null ? ref.trim() : void 0) || OP.info.commentDisplay.replace(/\n+/g, ' // ') || OP.info.nameBlock); + if (excerpt.length > 73) { + return excerpt.slice(0, 70) + "..."; + } + return excerpt; + }, + threadFromRoot: function(root) { + return g.threads[g.BOARD + "." + root.id.slice(1)]; + }, + threadFromNode: function(node) { + return Get.threadFromRoot($.x('ancestor::div[@class="thread"]', node)); + }, + postFromRoot: function(root) { + var index, post; + if (root == null) { + return null; + } + post = g.posts[root.dataset.fullID]; + index = root.dataset.clone; + if (index) { + return post.clones[index]; + } else { + return post; + } + }, + postFromNode: function(root) { + return Get.postFromRoot($.x('(ancestor::div[contains(@class,"postContainer")][1]|following::div[contains(@class,"postContainer")][1])', root)); + }, + postDataFromLink: function(link) { + var boardID, path, postID, ref, threadID; + if (link.hostname === 'boards.4chan.org') { + path = link.pathname.split(/\/+/); + boardID = path[1]; + threadID = path[3]; + postID = link.hash.slice(2); + } else { + ref = link.dataset, boardID = ref.boardID, threadID = ref.threadID, postID = ref.postID; + threadID || (threadID = 0); + } + return { + boardID: boardID, + threadID: +threadID, + postID: +postID + }; + }, + allQuotelinksLinkingTo: function(post) { + var fullID, handleQuotes, i, len, posts, qPost, quote, quotelinks, ref; + quotelinks = []; + posts = g.posts; + fullID = post.fullID; + handleQuotes = function(qPost, type) { + var clone, i, len, ref; + quotelinks.push.apply(quotelinks, qPost.nodes[type]); + ref = qPost.clones; + for (i = 0, len = ref.length; i < len; i++) { + clone = ref[i]; + quotelinks.push.apply(quotelinks, clone.nodes[type]); + } + }; + posts.forEach(function(qPost) { + if (indexOf.call(qPost.quotes, fullID) >= 0) { + return handleQuotes(qPost, 'quotelinks'); + } + }); + if (Conf['Quote Backlinks']) { + ref = post.quotes; + for (i = 0, len = ref.length; i < len; i++) { + quote = ref[i]; + if (qPost = posts[quote]) { + handleQuotes(qPost, 'backlinks'); + } + } + } + return quotelinks.filter(function(quotelink) { + var boardID, postID, ref1; + ref1 = Get.postDataFromLink(quotelink), boardID = ref1.boardID, postID = ref1.postID; + return boardID === post.board.ID && postID === post.ID; + }); + }, + scriptData: function() { + var i, len, ref, script; + ref = $$('script:not([src])', d.head); + for (i = 0, len = ref.length; i < len; i++) { + script = ref[i]; + if (/\bcooldowns *=/.test(script.textContent)) { + return script.textContent; + } + } + return ''; + } + }; + + return Get; + +}).call(this); + +Header = (function() { + var Header; + + Header = { + init: function() { + var barFixedToggler, barPositionToggler, box, customNavToggler, editCustomNav, footerToggler, headerToggler, linkJustifyToggler, menuButton, scrollHeaderToggler, shortcutToggler; + this.menu = new UI.Menu('header'); + menuButton = $.el('span', { + className: 'menu-button' + }); + $.extend(menuButton, { + innerHTML: "" + }); + box = UI.checkbox; + barFixedToggler = box('Fixed Header', 'Fixed Header'); + headerToggler = box('Header auto-hide', 'Auto-hide header'); + scrollHeaderToggler = box('Header auto-hide on scroll', 'Auto-hide header on scroll'); + barPositionToggler = box('Bottom Header', 'Bottom header'); + linkJustifyToggler = box('Centered links', 'Centered links'); + customNavToggler = box('Custom Board Navigation', 'Custom board navigation'); + footerToggler = box('Bottom Board List', 'Hide bottom board list'); + shortcutToggler = box('Shortcut Icons', 'Shortcut Icons'); + editCustomNav = $.el('a', { + textContent: 'Edit custom board navigation', + href: 'javascript:;' + }); + this.barFixedToggler = barFixedToggler.firstElementChild; + this.scrollHeaderToggler = scrollHeaderToggler.firstElementChild; + this.barPositionToggler = barPositionToggler.firstElementChild; + this.linkJustifyToggler = linkJustifyToggler.firstElementChild; + this.headerToggler = headerToggler.firstElementChild; + this.footerToggler = footerToggler.firstElementChild; + this.shortcutToggler = shortcutToggler.firstElementChild; + this.customNavToggler = customNavToggler.firstElementChild; + $.on(menuButton, 'click', this.menuToggle); + $.on(this.headerToggler, 'change', this.toggleBarVisibility); + $.on(this.barFixedToggler, 'change', this.toggleBarFixed); + $.on(this.barPositionToggler, 'change', this.toggleBarPosition); + $.on(this.scrollHeaderToggler, 'change', this.toggleHideBarOnScroll); + $.on(this.linkJustifyToggler, 'change', this.toggleLinkJustify); + $.on(this.footerToggler, 'change', this.toggleFooterVisibility); + $.on(this.shortcutToggler, 'change', this.toggleShortcutIcons); + $.on(this.customNavToggler, 'change', this.toggleCustomNav); + $.on(editCustomNav, 'click', this.editCustomNav); + this.setBarFixed(Conf['Fixed Header']); + this.setHideBarOnScroll(Conf['Header auto-hide on scroll']); + this.setBarVisibility(Conf['Header auto-hide']); + this.setLinkJustify(Conf['Centered links']); + this.setShortcutIcons(Conf['Shortcut Icons']); + this.setFooterVisibility(Conf['Bottom Board List']); + $.sync('Fixed Header', this.setBarFixed); + $.sync('Header auto-hide on scroll', this.setHideBarOnScroll); + $.sync('Bottom Header', this.setBarPosition); + $.sync('Shortcut Icons', this.setShortcutIcons); + $.sync('Header auto-hide', this.setBarVisibility); + $.sync('Centered links', this.setLinkJustify); + $.sync('Bottom Board List', this.setFooterVisibility); + this.addShortcut(menuButton); + this.menu.addEntry({ + el: $.el('span', { + textContent: 'Header' + }), + order: 107, + subEntries: [ + { + el: barFixedToggler + }, { + el: headerToggler + }, { + el: scrollHeaderToggler + }, { + el: barPositionToggler + }, { + el: linkJustifyToggler + }, { + el: footerToggler + }, { + el: shortcutToggler + }, { + el: customNavToggler + }, { + el: editCustomNav + } + ] + }); + $.on(window, 'load popstate', Header.hashScroll); + $.on(d, 'CreateNotification', this.createNotification); + $.asap((function() { + return d.body; + }), (function(_this) { + return function() { + if (!Main.isThisPageLegit()) { + return; + } + $.asap((function() { + return $.id('boardNavMobile') || d.readyState !== 'loading'; + }), function() { + var a, footer; + footer = $.id('boardNavDesktop').cloneNode(true); + footer.id = 'boardNavDesktopFoot'; + $('#navtopright', footer).id = 'navbotright'; + $('#settingsWindowLink', footer).id = 'settingsWindowLinkBot'; + Header.bottomBoardList = $('.boardList', footer); + if (a = $("a[href*='/" + g.BOARD + "/']", footer)) { + a.className = 'current'; + } + Main.ready(function() { + var absbot, oldFooter; + if ((oldFooter = $.id('boardNavDesktopFoot'))) { + return $.replace($('.boardList', oldFooter), Header.bottomBoardList); + } else if ((absbot = $.id('absbot'))) { + $.before(absbot, footer); + return $.globalEval('window.cloneTopNav = function() {};'); + } + }); + return Header.setBoardList(); + }); + $.prepend(d.body, _this.bar); + $.add(d.body, Header.hover); + _this.setBarPosition(Conf['Bottom Header']); + return _this; + }; + })(this)); + Main.ready((function(_this) { + return function() { + var cs; + if (g.VIEW === 'catalog' || !Conf['Disable Native Extension']) { + cs = $.el('a', { + href: 'javascript:;' + }); + if (g.VIEW === 'catalog') { + cs.title = cs.textContent = 'Catalog Settings'; + cs.className = 'fa fa-book'; + } else { + cs.title = cs.textContent = '4chan Settings'; + cs.className = 'fa fa-leaf'; + } + $.on(cs, 'click', function() { + return $.id('settingsWindowLink').click(); + }); + return _this.addShortcut(cs); + } + }; + })(this)); + return this.enableDesktopNotifications(); + }, + bar: $.el('div', { + id: 'header-bar' + }), + noticesRoot: $.el('div', { + id: 'notifications' + }), + shortcuts: $.el('span', { + id: 'shortcuts' + }), + hover: $.el('div', { + id: 'hoverUI' + }), + toggle: $.el('div', { + id: 'scroll-marker' + }), + setBoardList: function() { + var a, boardList, btn, chr, i, j, len, len1, node, nodes, ref, ref1, spacer, span; + Header.boardList = boardList = $.el('span', { + id: 'board-list' + }); + $.extend(boardList, { + innerHTML: "" + }); + btn = $('.hide-board-list-button', boardList); + $.on(btn, 'click', Header.toggleBoardList); + nodes = []; + spacer = function() { + return $.el('span', { + className: 'spacer' + }); + }; + ref = $('#boardNavDesktop > .boardList').childNodes; + for (i = 0, len = ref.length; i < len; i++) { + node = ref[i]; + switch (node.nodeName) { + case '#text': + ref1 = node.nodeValue; + for (j = 0, len1 = ref1.length; j < len1; j++) { + chr = ref1[j]; + span = $.el('span', { + textContent: chr + }); + if (chr === ' ') { + span.className = 'space'; + } + if (chr === ']') { + nodes.push(spacer()); + } + nodes.push(span); + if (chr === '[') { + nodes.push(spacer()); + } + } + break; + case 'A': + a = node.cloneNode(true); + if (a.pathname.split('/')[1] === g.BOARD.ID) { + a.className = 'current'; + } + nodes.push(a); + } + } + $.add($('.boardList', boardList), nodes); + $.add(Header.bar, [Header.boardList, Header.shortcuts, Header.noticesRoot, Header.toggle]); + Header.setCustomNav(Conf['Custom Board Navigation']); + Header.generateBoardList(Conf['boardnav']); + $.sync('Custom Board Navigation', Header.setCustomNav); + return $.sync('boardnav', Header.generateBoardList); + }, + generateBoardList: function(boardnav) { + var as, list, nodes, re, t; + list = $('#custom-board-list', Header.boardList); + $.rmAll(list); + if (!boardnav) { + return; + } + boardnav = boardnav.replace(/(\r\n|\n|\r)/g, ' '); + as = $$('#full-board-list a[title]', Header.boardList); + re = /[\w@]+(-(all|title|replace|full|index|catalog|archive|expired|(mode|sort|text):"[^"]+"(,"[^"]+")?))*|[^\w@]+/g; + nodes = (function() { + var i, len, ref, results; + ref = boardnav.match(re); + results = []; + for (i = 0, len = ref.length; i < len; i++) { + t = ref[i]; + results.push(Header.mapCustomNavigation(t, as)); + } + return results; + })(); + $.add(list, nodes); + return $.ready(CatalogLinks.initBoardList); + }, + mapCustomNavigation: function(t, as) { + var a, boardID, href, indexOptions, m, text, url; + if (/^[^\w@]/.test(t)) { + return $.tn(t); + } + text = url = null; + t = t.replace(/-text:"([^"]+)"(?:,"([^"]+)")?/g, function(m0, m1, m2) { + text = m1; + url = m2; + return ''; + }); + indexOptions = []; + t = t.replace(/-(?:mode|sort):"([^"]+)"/g, function(m0, m1) { + indexOptions.push(m1.toLowerCase().replace(/\ /g, '-')); + return ''; + }); + indexOptions = indexOptions.join('/'); + if (/^toggle-all/.test(t)) { + a = $.el('a', { + className: 'show-board-list-button', + textContent: text || '+', + href: 'javascript:;' + }); + $.on(a, 'click', Header.toggleBoardList); + return a; + } + if (/^external/.test(t)) { + a = $.el('a', { + href: url || 'javascript:;', + textContent: text || '+', + className: 'external' + }); + return a; + } + boardID = t.split('-')[0]; + if (boardID === 'current') { + boardID = g.BOARD.ID; + } + a = (function() { + var i, len, ref; + if (boardID === '@') { + return $.el('a', { + href: 'https://twitter.com/4chan', + title: '4chan Twitter', + textContent: '@' + }); + } + for (i = 0, len = as.length; i < len; i++) { + a = as[i]; + if (a.textContent === boardID) { + return a.cloneNode(true); + } + } + a = $.el('a', { + href: "/" + boardID + "/", + textContent: boardID + }); + if ((ref = g.VIEW) === 'catalog' || ref === 'archive') { + a.href += g.VIEW; + } + if (boardID === g.BOARD.ID) { + a.className = 'current'; + } + return a; + })(); + a.textContent = /-title/.test(t) || /-replace/.test(t) && boardID === g.BOARD.ID ? a.title || a.textContent : /-full/.test(t) ? ("/" + boardID + "/") + (a.title ? " - " + a.title : '') : text || boardID; + if (m = t.match(/-(index|catalog)/)) { + if (!(boardID === 'f' && m[1] === 'catalog')) { + a.dataset.only = m[1]; + a.href = CatalogLinks[m[1]](boardID); + if (m[1] === 'catalog') { + $.addClass(a, 'catalog'); + } + } else { + return a.firstChild; + } + } + if (Conf['JSON Index'] && indexOptions) { + a.dataset.indexOptions = indexOptions; + if (a.hostname === 'boards.4chan.org' && a.pathname.split('/')[2] === '') { + a.href += (a.hash ? '/' : '#') + indexOptions; + } + } + if (/-archive/.test(t)) { + if (href = Redirect.to('board', { + boardID: boardID + })) { + a.href = href; + } else { + return a.firstChild; + } + } + if (/-expired/.test(t)) { + if (boardID !== 'b' && boardID !== 'f' && boardID !== 'trash') { + a.href = "/" + boardID + "/archive"; + } else { + return a.firstChild; + } + } + if (boardID === '@') { + $.addClass(a, 'navSmall'); + } + return a; + }, + toggleBoardList: function() { + var bar, custom, full, showBoardList; + bar = Header.bar; + custom = $('#custom-board-list', bar); + full = $('#full-board-list', bar); + showBoardList = !full.hidden; + custom.hidden = !showBoardList; + return full.hidden = showBoardList; + }, + setLinkJustify: function(centered) { + Header.linkJustifyToggler.checked = centered; + if (centered) { + return $.addClass(doc, 'centered-links'); + } else { + return $.rmClass(doc, 'centered-links'); + } + }, + toggleLinkJustify: function() { + var centered; + $.event('CloseMenu'); + centered = this.nodeName === 'INPUT' ? this.checked : void 0; + Header.setLinkJustify(centered); + return $.set('Centered links', centered); + }, + setBarFixed: function(fixed) { + Header.barFixedToggler.checked = fixed; + if (fixed) { + $.addClass(doc, 'fixed'); + return $.addClass(Header.bar, 'dialog'); + } else { + $.rmClass(doc, 'fixed'); + return $.rmClass(Header.bar, 'dialog'); + } + }, + toggleBarFixed: function() { + $.event('CloseMenu'); + Header.setBarFixed(this.checked); + Conf['Fixed Header'] = this.checked; + return $.set('Fixed Header', this.checked); + }, + setShortcutIcons: function(show) { + Header.shortcutToggler.checked = show; + if (show) { + return $.addClass(doc, 'shortcut-icons'); + } else { + return $.rmClass(doc, 'shortcut-icons'); + } + }, + toggleShortcutIcons: function() { + $.event('CloseMenu'); + Header.setShortcutIcons(this.checked); + Conf['Shortcut Icons'] = this.checked; + return $.set('Shortcut Icons', this.checked); + }, + setBarVisibility: function(hide) { + Header.headerToggler.checked = hide; + $.event('CloseMenu'); + (hide ? $.addClass : $.rmClass)(Header.bar, 'autohide'); + return (hide ? $.addClass : $.rmClass)(doc, 'autohide'); + }, + toggleBarVisibility: function() { + var hide, message; + hide = this.nodeName === 'INPUT' ? this.checked : !$.hasClass(Header.bar, 'autohide'); + Conf['Header auto-hide'] = hide; + $.set('Header auto-hide', hide); + Header.setBarVisibility(hide); + message = "The header bar will " + (hide ? 'automatically hide itself.' : 'remain visible.'); + return new Notice('info', message, 2); + }, + setHideBarOnScroll: function(hide) { + Header.scrollHeaderToggler.checked = hide; + if (hide) { + $.on(window, 'scroll', Header.hideBarOnScroll); + return; + } + $.off(window, 'scroll', Header.hideBarOnScroll); + $.rmClass(Header.bar, 'scroll'); + if (!Conf['Header auto-hide']) { + return $.rmClass(Header.bar, 'autohide'); + } + }, + toggleHideBarOnScroll: function() { + var hide; + hide = this.checked; + $.cb.checked.call(this); + return Header.setHideBarOnScroll(hide); + }, + hideBarOnScroll: function() { + var offsetY; + offsetY = window.pageYOffset; + if (offsetY > (Header.previousOffset || 0)) { + $.addClass(Header.bar, 'autohide', 'scroll'); + } else { + $.rmClass(Header.bar, 'autohide', 'scroll'); + } + return Header.previousOffset = offsetY; + }, + setBarPosition: function(bottom) { + var args; + Header.barPositionToggler.checked = bottom; + $.event('CloseMenu'); + args = bottom ? ['bottom-header', 'top-header', 'after'] : ['top-header', 'bottom-header', 'add']; + $.addClass(doc, args[0]); + $.rmClass(doc, args[1]); + return $[args[2]](Header.bar, Header.noticesRoot); + }, + toggleBarPosition: function() { + $.cb.checked.call(this); + return Header.setBarPosition(this.checked); + }, + setFooterVisibility: function(hide) { + Header.footerToggler.checked = hide; + return doc.classList.toggle('hide-bottom-board-list', hide); + }, + toggleFooterVisibility: function() { + var hide, message; + $.event('CloseMenu'); + hide = this.nodeName === 'INPUT' ? this.checked : $.hasClass(doc, 'hide-bottom-board-list'); + Header.setFooterVisibility(hide); + $.set('Bottom Board List', hide); + message = hide ? 'The bottom navigation will now be hidden.' : 'The bottom navigation will remain visible.'; + return new Notice('info', message, 2); + }, + setCustomNav: function(show) { + var btn, cust, full, ref; + Header.customNavToggler.checked = show; + cust = $('#custom-board-list', Header.bar); + full = $('#full-board-list', Header.bar); + btn = $('.hide-board-list-container', full); + return ref = show ? [false, true, false] : [true, false, true], cust.hidden = ref[0], full.hidden = ref[1], btn.hidden = ref[2], ref; + }, + toggleCustomNav: function() { + $.cb.checked.call(this); + return Header.setCustomNav(this.checked); + }, + editCustomNav: function() { + var settings; + Settings.open('Advanced'); + settings = $.id('fourchanx-settings'); + return $('[name=boardnav]', settings).focus(); + }, + hashScroll: function(e) { + var el, hash; + if (e) { + if (e.state) { + return; + } + if (!history.state) { + history.replaceState({}, ''); + } + } + if ((hash = location.hash.slice(1))) { + ReplyPruning.showIfHidden(hash); + if ((el = $.id(hash))) { + return $.queueTask(function() { + return Header.scrollTo(el); + }); + } + } + }, + scrollTo: function(root, down, needed) { + var height, x; + if (!root.offsetParent) { + return; + } + if (down) { + x = Header.getBottomOf(root); + if (Conf['Fixed Header'] && Conf['Header auto-hide on scroll'] && Conf['Bottom header']) { + height = Header.bar.getBoundingClientRect().height; + if (x <= 0) { + if (!Header.isHidden()) { + x += height; + } + } else { + if (Header.isHidden()) { + x -= height; + } + } + } + if (!(needed && x >= 0)) { + return window.scrollBy(0, -x); + } + } else { + x = Header.getTopOf(root); + if (Conf['Fixed Header'] && Conf['Header auto-hide on scroll'] && !Conf['Bottom header']) { + height = Header.bar.getBoundingClientRect().height; + if (x >= 0) { + if (!Header.isHidden()) { + x += height; + } + } else { + if (Header.isHidden()) { + x -= height; + } + } + } + if (!(needed && x >= 0)) { + return window.scrollBy(0, x); + } + } + }, + scrollToIfNeeded: function(root, down) { + return Header.scrollTo(root, down, true); + }, + getTopOf: function(root) { + var headRect, top; + top = root.getBoundingClientRect().top; + if (Conf['Fixed Header'] && !Conf['Bottom Header']) { + headRect = Header.toggle.getBoundingClientRect(); + top -= headRect.top + headRect.height; + } + return top; + }, + getBottomOf: function(root) { + var bottom, clientHeight, headRect; + clientHeight = doc.clientHeight; + bottom = clientHeight - root.getBoundingClientRect().bottom; + if (Conf['Fixed Header'] && Conf['Bottom Header']) { + headRect = Header.toggle.getBoundingClientRect(); + bottom -= clientHeight - headRect.bottom + headRect.height; + } + return bottom; + }, + isNodeVisible: function(node) { + var height; + if (d.hidden || !doc.contains(node)) { + return false; + } + height = node.getBoundingClientRect().height; + return Header.getTopOf(node) + height >= 0 && Header.getBottomOf(node) + height >= 0; + }, + isHidden: function() { + var top; + top = Header.bar.getBoundingClientRect().top; + if (Conf['Bottom header']) { + return top === doc.clientHeight; + } else { + return top < 0; + } + }, + addShortcut: function(el) { + var shortcut; + shortcut = $.el('span', { + className: 'shortcut brackets-wrap' + }); + $.add(shortcut, el); + return $.prepend(Header.shortcuts, shortcut); + }, + rmShortcut: function(el) { + return $.rm(el.parentElement); + }, + menuToggle: function(e) { + return Header.menu.toggle(e, this, g); + }, + createNotification: function(e) { + var content, lifetime, notice, ref, type; + ref = e.detail, type = ref.type, content = ref.content, lifetime = ref.lifetime; + return notice = new Notice(type, content, lifetime); + }, + areNotificationsEnabled: false, + enableDesktopNotifications: function() { + var authorize, disable, el, notice, ref; + if (!(window.Notification && Conf['Desktop Notifications'])) { + return; + } + switch (Notification.permission) { + case 'granted': + Header.areNotificationsEnabled = true; + return; + case 'denied': + return; + } + el = $.el('span', { + innerHTML: "4chan X needs your permission to show desktop notifications. [FAQ]
        or " + }); + ref = $$('button', el), authorize = ref[0], disable = ref[1]; + $.on(authorize, 'click', function() { + return Notification.requestPermission(function(status) { + Header.areNotificationsEnabled = status === 'granted'; + if (status === 'default') { + return; + } + return notice.close(); + }); + }); + $.on(disable, 'click', function() { + $.set('Desktop Notifications', false); + return notice.close(); + }); + return notice = new Notice('info', el); + } + }; + + return Header; + +}).call(this); + +Index = (function() { + var Index, + slice = [].slice, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + Index = { + showHiddenThreads: false, + changed: {}, + init: function() { + var anchorEntry, input, j, k, label, len, len1, name, pinEntry, ref, ref1, ref2, ref3, ref4, ref5, ref6, refNavEntry, repliesEntry, select, sortEntry; + if (g.BOARD.ID === 'f' || !Conf['JSON Index'] || g.VIEW !== 'index') { + return; + } + Callbacks.CatalogThread.push({ + name: 'Catalog Features', + cb: this.catalogNode + }); + this.search = ((ref = history.state) != null ? ref.searched : void 0) || ''; + if ((ref1 = history.state) != null ? ref1.mode : void 0) { + Conf['Index Mode'] = (ref2 = history.state) != null ? ref2.mode : void 0; + } + this.currentSort = (ref3 = history.state) != null ? ref3.sort : void 0; + this.currentSort || (this.currentSort = typeof Conf['Index Sort'] === 'object' ? Conf['Index Sort'][g.BOARD.ID] || 'bump' : Conf['Index Sort']); + this.currentPage = this.getCurrentPage(); + this.processHash(); + $.addClass(doc, 'index-loading', (Conf['Index Mode'].replace(/\ /g, '-')) + "-mode"); + $.on(window, 'popstate', this.cb.popstate); + $.on(d, 'scroll', Index.scroll); + this.button = $.el('a', { + className: 'index-refresh-shortcut fa fa-refresh', + title: 'Refresh', + href: 'javascript:;', + textContent: 'Refresh Index' + }); + $.on(this.button, 'click', function() { + return Index.update(); + }); + Header.addShortcut(this.button, 1); + repliesEntry = { + el: UI.checkbox('Show Replies', 'Show replies') + }; + sortEntry = { + el: UI.checkbox('Per-Board Sort Type', 'Per-board sort type', typeof Conf['Index Sort'] === 'object') + }; + pinEntry = { + el: UI.checkbox('Pin Watched Threads', 'Pin watched threads') + }; + anchorEntry = { + el: UI.checkbox('Anchor Hidden Threads', 'Anchor hidden threads') + }; + refNavEntry = { + el: UI.checkbox('Refreshed Navigation', 'Refreshed navigation') + }; + sortEntry.el.title = 'Set the sorting order of each board independently.'; + pinEntry.el.title = 'Move watched threads to the start of the index.'; + anchorEntry.el.title = 'Move hidden threads to the end of the index.'; + refNavEntry.el.title = 'Refresh index when navigating through pages.'; + ref4 = [repliesEntry, pinEntry, anchorEntry, refNavEntry]; + for (j = 0, len = ref4.length; j < len; j++) { + label = ref4[j]; + input = label.el.firstChild; + name = input.name; + $.on(input, 'change', $.cb.checked); + switch (name) { + case 'Show Replies': + $.on(input, 'change', this.cb.replies); + break; + case 'Pin Watched Threads': + case 'Anchor Hidden Threads': + $.on(input, 'change', this.cb.resort); + } + } + $.on(sortEntry.el.firstChild, 'change', this.cb.perBoardSort); + Header.menu.addEntry({ + el: $.el('span', { + textContent: 'Index Navigation' + }), + order: 100, + subEntries: [repliesEntry, sortEntry, pinEntry, anchorEntry, refNavEntry] + }); + this.navLinks = $.el('div', { + className: 'navLinks json-index' + }); + $.extend(this.navLinks, { + innerHTML: "Index Catalog Archive Bottom ×" + }); + $('.cataloglink a', this.navLinks).href = CatalogLinks.catalog(); + if ((ref5 = g.BOARD.ID) === 'b' || ref5 === 'trash') { + $('.archlistlink', this.navLinks).hidden = true; + } + $.on($('#index-last-refresh a', this.navLinks), 'click', this.cb.refreshFront); + this.searchInput = $('#index-search', this.navLinks); + this.setupSearch(); + $.on(this.searchInput, 'input', this.onSearchInput); + $.on($('#index-search-clear', this.navLinks), 'click', this.clearSearch); + this.hideLabel = $('#hidden-label', this.navLinks); + $.on($('#hidden-toggle a', this.navLinks), 'click', this.cb.toggleHiddenThreads); + this.selectMode = $('#index-mode', this.navLinks); + this.selectSort = $('#index-sort', this.navLinks); + this.selectSize = $('#index-size', this.navLinks); + $.on(this.selectMode, 'change', this.cb.mode); + $.on(this.selectSort, 'change', this.cb.sort); + $.on(this.selectSize, 'change', $.cb.value); + $.on(this.selectSize, 'change', this.cb.size); + ref6 = [this.selectMode, this.selectSize]; + for (k = 0, len1 = ref6.length; k < len1; k++) { + select = ref6[k]; + select.value = Conf[select.name]; + } + this.selectSort.value = Index.currentSort; + this.root = $.el('div', { + className: 'board json-index' + }); + this.cb.size(); + this.pagelist = $.el('div', { + className: 'pagelist json-index' + }); + $.extend(this.pagelist, { + innerHTML: "
        " + }); + $('.cataloglink a', this.pagelist).href = CatalogLinks.catalog(); + $.on(this.pagelist, 'click', this.cb.pageNav); + this.update(true); + $.onExists(doc, 'title + *', function() { + return d.title = d.title.replace(/\ -\ Page\ \d+/, ''); + }); + $.onExists(doc, '.board > .thread > .postContainer, .board + *', function() { + var board, el, l, len2, len3, m, ref7, ref8, threadRoot, topNavPos; + Index.hat = $('.board > .thread > img:first-child'); + if (Index.hat) { + if (Index.nodes) { + ref7 = Index.nodes; + for (l = 0, len2 = ref7.length; l < len2; l++) { + threadRoot = ref7[l]; + $.prepend(threadRoot, Index.hat.cloneNode(false)); + } + } + $.addClass(doc, 'hats-enabled'); + $.addStyle(".catalog-thread::after {background-image: url(" + Index.hat.src + ");}"); + } + board = $('.board'); + $.replace(board, Index.root); + $.event('PostsInserted'); + try { + d.implementation.createDocument(null, null, null).appendChild(board); + } catch (_error) {} + ref8 = $$('.navLinks'); + for (m = 0, len3 = ref8.length; m < len3; m++) { + el = ref8[m]; + $.rm(el); + } + $.rm($.id('ctrl-top')); + topNavPos = $.id('delform').previousElementSibling; + $.before(topNavPos, $.el('hr')); + return $.before(topNavPos, Index.navLinks); + }); + return Main.ready(function() { + var pagelist; + if ((pagelist = $('.pagelist'))) { + $.replace(pagelist, Index.pagelist); + } + return $.rmClass(doc, 'index-loading'); + }); + }, + scroll: function() { + var nodes, pageNum; + if (Index.req || !Index.liveThreadData || Conf['Index Mode'] !== 'infinite' || (window.scrollY <= doc.scrollHeight - (300 + window.innerHeight))) { + return; + } + if (Index.pageNum == null) { + Index.pageNum = Index.currentPage; + } + pageNum = ++Index.pageNum; + if (pageNum > Index.pagesNum) { + return Index.endNotice(); + } + nodes = Index.buildSinglePage(pageNum); + if (Conf['Show Replies']) { + Index.buildReplies(nodes); + } + return Index.buildStructure(nodes); + }, + endNotice: (function() { + var notify, reset; + notify = false; + reset = function() { + return notify = false; + }; + return function() { + if (notify) { + return; + } + notify = true; + new Notice('info', "Last page reached.", 2); + return setTimeout(reset, 3 * $.SECOND); + }; + })(), + menu: { + init: function() { + if (g.VIEW !== 'index' || !Conf['JSON Index'] || !Conf['Menu'] || !Conf['Thread Hiding Link'] || g.BOARD.ID === 'f') { + return; + } + return Menu.menu.addEntry({ + el: $.el('a', { + href: 'javascript:;', + className: 'has-shortcut-text' + }, { + innerHTML: "Shift+click" + }), + order: 20, + open: function(arg) { + var thread; + thread = arg.thread; + if (Conf['Index Mode'] !== 'catalog') { + return false; + } + this.el.firstElementChild.textContent = thread.isHidden ? 'Unhide' : 'Hide'; + if (this.cb) { + $.off(this.el, 'click', this.cb); + } + this.cb = function() { + $.event('CloseMenu'); + return Index.toggleHide(thread); + }; + $.on(this.el, 'click', this.cb); + return true; + } + }); + } + }, + catalogNode: function() { + return $.on(this.nodes.thumb.parentNode, 'click', Index.onClick); + }, + onClick: function(e) { + var thread; + if (e.button !== 0) { + return; + } + thread = g.threads[this.parentNode.dataset.fullID]; + if (e.shiftKey) { + Index.toggleHide(thread); + } else { + return; + } + return e.preventDefault(); + }, + toggleHide: function(thread) { + $.rm(thread.catalogView.nodes.root); + if (Index.showHiddenThreads) { + ThreadHiding.show(thread); + if (!ThreadHiding.db.get({ + boardID: thread.board.ID, + threadID: thread.ID + })) { + return; + } + } else { + ThreadHiding.hide(thread); + } + return ThreadHiding.saveHiddenState(thread); + }, + cycleSortType: function() { + var i, j, len, type, types; + types = slice.call(Index.selectSort.options).filter(function(option) { + return !option.disabled; + }); + for (i = j = 0, len = types.length; j < len; i = ++j) { + type = types[i]; + if (type.selected) { + break; + } + } + types[(i + 1) % types.length].selected = true; + return $.event('change', null, Index.selectSort); + }, + cb: { + toggleHiddenThreads: function() { + $('#hidden-toggle a', Index.navLinks).textContent = (Index.showHiddenThreads = !Index.showHiddenThreads) ? 'Hide' : 'Show'; + Index.sort(); + return Index.buildIndex(); + }, + mode: function() { + Index.pushState({ + mode: this.value + }); + return Index.pageLoad(false); + }, + sort: function() { + Index.pushState({ + sort: this.value + }); + return Index.pageLoad(false); + }, + resort: function() { + Index.sort(); + return Index.buildIndex(); + }, + perBoardSort: function() { + Conf['Index Sort'] = this.checked ? {} : ''; + return Index.saveSort(); + }, + size: function(e) { + if (Conf['Index Mode'] !== 'catalog') { + $.rmClass(Index.root, 'catalog-small'); + $.rmClass(Index.root, 'catalog-large'); + } else if (Conf['Index Size'] === 'small') { + $.addClass(Index.root, 'catalog-small'); + $.rmClass(Index.root, 'catalog-large'); + } else { + $.addClass(Index.root, 'catalog-large'); + $.rmClass(Index.root, 'catalog-small'); + } + if (e) { + return Index.buildIndex(); + } + }, + replies: function() { + Index.buildThreads(); + Index.sort(); + return Index.buildIndex(); + }, + popstate: function(e) { + var mode, nCommands, page, ref, searched, sort; + if (e != null ? e.state : void 0) { + ref = e.state, searched = ref.searched, mode = ref.mode, sort = ref.sort; + page = Index.getCurrentPage(); + Index.setState({ + search: searched, + mode: mode, + sort: sort, + page: page + }); + return Index.pageLoad(false); + } else { + nCommands = Index.processHash(); + if (Conf['Refreshed Navigation'] && nCommands) { + return Index.update(); + } else { + return Index.pageLoad(); + } + } + }, + pageNav: function(e) { + var a; + if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0) { + return; + } + switch (e.target.nodeName) { + case 'BUTTON': + e.target.blur(); + a = e.target.parentNode; + break; + case 'A': + a = e.target; + break; + default: + return; + } + if (a.textContent === 'Catalog') { + return; + } + e.preventDefault(); + return Index.userPageNav(+a.pathname.split(/\/+/)[2] || 1); + }, + refreshFront: function() { + Index.pushState({ + page: 1 + }); + return Index.update(); + } + }, + scrollToIndex: function() { + return Header.scrollToIfNeeded((Index.navLinks.getBoundingClientRect().height ? Index.navLinks : Index.root)); + }, + getCurrentPage: function() { + return +window.location.pathname.split(/\/+/)[2] || 1; + }, + userPageNav: function(page) { + Index.pushState({ + page: page + }); + if (Conf['Refreshed Navigation']) { + return Index.update(); + } else { + return Index.pageLoad(); + } + }, + hashCommands: { + mode: { + 'paged': 'paged', + 'infinite-scrolling': 'infinite', + 'infinite': 'infinite', + 'all-threads': 'all pages', + 'all-pages': 'all pages', + 'catalog': 'catalog' + }, + sort: { + 'bump-order': 'bump', + 'last-reply': 'lastreply', + 'last-long-reply': 'lastlong', + 'creation-date': 'birth', + 'reply-count': 'replycount', + 'file-count': 'filecount' + } + }, + processHash: function() { + var command, commands, hash, j, leftover, len, mode, ref, sort, state; + hash = ((ref = location.href.match(/#.*/)) != null ? ref[0] : void 0) || ''; + state = { + replace: true + }; + commands = hash.slice(1).split('/'); + leftover = []; + for (j = 0, len = commands.length; j < len; j++) { + command = commands[j]; + if ((mode = Index.hashCommands.mode[command])) { + state.mode = mode; + } else if (command === 'index') { + state.mode = Conf['Previous Index Mode']; + state.page = 1; + } else if ((sort = Index.hashCommands.sort[command])) { + state.sort = sort; + } else if (/^s=/.test(command)) { + state.search = decodeURIComponent(command.slice(2)).replace(/\+/g, ' ').trim(); + } else { + leftover.push(command); + } + } + hash = leftover.join('/'); + if (hash) { + state.hash = "#" + hash; + } + Index.pushState(state); + return commands.length - leftover.length; + }, + pushState: function(state) { + var hash, pageBeforeSearch, pathname, ref, replace, search; + search = state.search, hash = state.hash, replace = state.replace; + pageBeforeSearch = (ref = history.state) != null ? ref.oldpage : void 0; + if ((search != null) && search !== Index.search) { + state.page = search ? 1 : pageBeforeSearch || 1; + if (!search) { + pageBeforeSearch = void 0; + } else if (!Index.search) { + pageBeforeSearch = Index.currentPage; + } + } + Index.setState(state); + pathname = Index.currentPage === 1 ? "/" + g.BOARD + "/" : "/" + g.BOARD + "/" + Index.currentPage; + hash || (hash = ''); + return history[replace ? 'replaceState' : 'pushState']({ + mode: Conf['Index Mode'], + sort: Index.currentSort, + searched: Index.search, + oldpage: pageBeforeSearch + }, '', location.protocol + "//" + location.host + pathname + hash); + }, + setState: function(arg) { + var hash, mode, page, ref, search, sort; + search = arg.search, mode = arg.mode, sort = arg.sort, page = arg.page, hash = arg.hash; + if ((search != null) && search !== Index.search) { + Index.changed.search = true; + Index.search = search; + } + if ((mode != null) && mode !== Conf['Index Mode']) { + Index.changed.mode = true; + Conf['Index Mode'] = mode; + $.set('Index Mode', mode); + if (!(mode === 'catalog' || Conf['Previous Index Mode'] === mode)) { + Conf['Previous Index Mode'] = mode; + $.set('Previous Index Mode', mode); + } + } + if ((sort != null) && sort !== Index.currentSort) { + Index.changed.sort = true; + Index.currentSort = sort; + Index.saveSort(); + } + if ((ref = Conf['Index Mode']) === 'all pages' || ref === 'catalog') { + page = 1; + } + if ((page != null) && page !== Index.currentPage) { + Index.changed.page = true; + Index.currentPage = page; + } + if (hash != null) { + return Index.changed.hash = true; + } + }, + saveSort: function() { + if (typeof Conf['Index Sort'] === 'object') { + Conf['Index Sort'][g.BOARD.ID] = Index.currentSort; + } else { + Conf['Index Sort'] = Index.currentSort; + } + return $.set('Index Sort', Conf['Index Sort']); + }, + pageLoad: function(scroll) { + var hash, mode, page, ref, search, sort, threads; + if (scroll == null) { + scroll = true; + } + if (!Index.liveThreadData) { + return; + } + ref = Index.changed, threads = ref.threads, search = ref.search, mode = ref.mode, sort = ref.sort, page = ref.page, hash = ref.hash; + if (threads || search || sort) { + Index.sort(); + } + if (threads || search) { + Index.buildPagelist(); + } + if (search) { + Index.setupSearch(); + } + if (mode) { + Index.setupMode(); + } + if (sort) { + Index.setupSort(); + } + if (threads || search || mode || page || sort) { + Index.buildIndex(); + } + if (threads || search || mode || page) { + Index.setPage(); + } + if (scroll && !hash) { + Index.scrollToIndex(); + } + if (hash) { + Header.hashScroll(); + } + return Index.changed = {}; + }, + setupMode: function() { + var j, len, mode, ref; + ref = ['paged', 'infinite', 'all pages', 'catalog']; + for (j = 0, len = ref.length; j < len; j++) { + mode = ref[j]; + $[mode === Conf['Index Mode'] ? 'addClass' : 'rmClass'](doc, (mode.replace(/\ /g, '-')) + "-mode"); + } + Index.selectMode.value = Conf['Index Mode']; + Index.cb.size(); + Index.showHiddenThreads = false; + return $('#hidden-toggle a', Index.navLinks).textContent = 'Show'; + }, + setupSort: function() { + return Index.selectSort.value = Index.currentSort; + }, + getPagesNum: function() { + if (Index.search) { + return Math.ceil(Index.sortedNodes.length / Index.threadsNumPerPage); + } else { + return Index.pagesNum; + } + }, + getMaxPageNum: function() { + return Math.max(1, Index.getPagesNum()); + }, + buildPagelist: function() { + var a, i, j, maxPageNum, nodes, pagesRoot, ref; + pagesRoot = $('.pages', Index.pagelist); + maxPageNum = Index.getMaxPageNum(); + if (pagesRoot.childElementCount !== maxPageNum) { + nodes = []; + for (i = j = 1, ref = maxPageNum; j <= ref; i = j += 1) { + a = $.el('a', { + textContent: i, + href: i === 1 ? './' : i + }); + nodes.push($.tn('['), a, $.tn('] ')); + } + $.rmAll(pagesRoot); + return $.add(pagesRoot, nodes); + } + }, + setPage: function() { + var a, href, maxPageNum, next, pageNum, pagesRoot, prev, strong; + pageNum = Index.currentPage; + maxPageNum = Index.getMaxPageNum(); + pagesRoot = $('.pages', Index.pagelist); + prev = pagesRoot.previousSibling.firstChild; + next = pagesRoot.nextSibling.firstChild; + href = Math.max(pageNum - 1, 1); + prev.href = href === 1 ? './' : href; + prev.firstChild.disabled = href === pageNum; + href = Math.min(pageNum + 1, maxPageNum); + next.href = href === 1 ? './' : href; + next.firstChild.disabled = href === pageNum; + if (strong = $('strong', pagesRoot)) { + if (+strong.textContent === pageNum) { + return; + } + $.replace(strong, strong.firstChild); + } else { + strong = $.el('strong'); + } + a = pagesRoot.children[pageNum - 1]; + $.before(a, strong); + return $.add(strong, a); + }, + updateHideLabel: function() { + var hiddenCount, ref, ref1, thread, threadID; + hiddenCount = 0; + ref = g.BOARD.threads; + for (threadID in ref) { + thread = ref[threadID]; + if (thread.isHidden) { + if (ref1 = thread.ID, indexOf.call(Index.liveThreadIDs, ref1) >= 0) { + hiddenCount++; + } + } + } + if (!hiddenCount) { + Index.hideLabel.hidden = true; + if (Index.showHiddenThreads) { + Index.cb.toggleHiddenThreads(); + } + return; + } + Index.hideLabel.hidden = false; + return $('#hidden-count', Index.navLinks).textContent = hiddenCount === 1 ? '1 hidden thread' : hiddenCount + " hidden threads"; + }, + update: function(firstTime) { + var now, ref, ref1; + if ((ref = Index.req) != null) { + ref.abort(); + } + if ((ref1 = Index.notice) != null) { + ref1.close(); + } + if (Conf['Index Refresh Notifications'] && d.readyState !== 'loading') { + Index.notice = new Notice('info', 'Refreshing index...'); + } else { + now = Date.now(); + $.ready(function() { + return Index.nTimeout = setTimeout((function() { + if (Index.req && !Index.notice) { + return Index.notice = new Notice('info', 'Refreshing index...'); + } + }), 3 * $.SECOND - (Date.now() - now)); + }); + } + if (!firstTime && d.readyState !== 'loading' && !$('.board + *')) { + location.reload(); + return; + } + Index.req = $.ajax("//a.4cdn.org/" + g.BOARD + "/catalog.json", { + onabort: Index.load, + onloadend: Index.load + }, { + whenModified: 'Index' + }); + return $.addClass(Index.button, 'fa-spin'); + }, + load: function(e) { + var err, nTimeout, notice, ref, req, timeEl; + $.rmClass(Index.button, 'fa-spin'); + req = Index.req, notice = Index.notice, nTimeout = Index.nTimeout; + if (nTimeout) { + clearTimeout(nTimeout); + } + delete Index.nTimeout; + delete Index.req; + delete Index.notice; + if (e.type === 'abort') { + req.onloadend = null; + if (notice != null) { + notice.close(); + } + return; + } + if ((ref = req.status) !== 200 && ref !== 304) { + err = "Index refresh failed. Error " + req.statusText + " (" + req.status + ")"; + if (notice) { + notice.setType('warning'); + notice.el.lastElementChild.textContent = err; + setTimeout(notice.close, $.SECOND); + } else { + new Notice('warning', err, 1); + } + return; + } + try { + if (req.status === 200) { + Index.parse(req.response); + } else if (req.status === 304) { + Index.pageLoad(); + } + } catch (_error) { + err = _error; + c.error("Index failure: " + err.message, err.stack); + if (notice) { + notice.setType('error'); + notice.el.lastElementChild.textContent = 'Index refresh failed.'; + setTimeout(notice.close, $.SECOND); + } else { + new Notice('error', 'Index refresh failed.', 1); + } + return; + } + if (notice) { + if (Conf['Index Refresh Notifications']) { + notice.setType('success'); + notice.el.lastElementChild.textContent = 'Index refreshed!'; + setTimeout(notice.close, $.SECOND); + } else { + notice.close(); + } + } + timeEl = $('#index-last-refresh time', Index.navLinks); + timeEl.dataset.utc = Date.parse(req.getResponseHeader('Last-Modified')); + return RelativeDates.update(timeEl); + }, + parse: function(pages) { + $.cleanCache(function(url) { + return /^\/\/a\.4cdn\.org\//.test(url); + }); + Index.parseThreadList(pages); + Index.buildThreads(); + Index.changed.threads = true; + return Index.pageLoad(); + }, + parseThreadList: function(pages) { + var ref; + Index.pagesNum = pages.length; + Index.threadsNumPerPage = ((ref = pages[0]) != null ? ref.threads.length : void 0) || 1; + Index.liveThreadData = pages.reduce((function(arr, next) { + return arr.concat(next.threads); + }), []); + Index.liveThreadIDs = Index.liveThreadData.map(function(data) { + return data.no; + }); + g.BOARD.threads.forEach(function(thread) { + var ref1; + if (ref1 = thread.ID, indexOf.call(Index.liveThreadIDs, ref1) < 0) { + return thread.collect(); + } + }); + }, + buildThreads: function() { + var err, errors, i, j, len, posts, ref, thread, threadData, threadRoot, threads; + if (!Index.liveThreadData) { + return; + } + Index.nodes = []; + threads = []; + posts = []; + ref = Index.liveThreadData; + for (i = j = 0, len = ref.length; j < len; i = ++j) { + threadData = ref[i]; + try { + threadRoot = Build.thread(g.BOARD, threadData); + if (Index.hat) { + $.prepend(threadRoot, Index.hat.cloneNode(false)); + } + if (thread = g.BOARD.threads[threadData.no]) { + thread.setCount('post', threadData.replies + 1, threadData.bumplimit); + thread.setCount('file', threadData.images + !!threadData.ext, threadData.imagelimit); + thread.setStatus('Sticky', !!threadData.sticky); + thread.setStatus('Closed', !!threadData.closed); + } else { + thread = new Thread(threadData.no, g.BOARD); + threads.push(thread); + } + Index.nodes.push(threadRoot); + if (!(thread.OP && !thread.OP.isFetchedQuote)) { + posts.push(new Post($('.opContainer', threadRoot), thread, g.BOARD)); + } + thread.setPage(Math.floor(i / Index.threadsNumPerPage) + 1); + } catch (_error) { + err = _error; + if (!errors) { + errors = []; + } + errors.push({ + message: "Parsing of Thread No." + thread + " failed. Thread will be skipped.", + error: err + }); + } + } + if (errors) { + Main.handleErrors(errors); + } + $.nodes(Index.nodes); + Main.callbackNodes('Thread', threads); + Main.callbackNodes('Post', posts); + Index.updateHideLabel(); + return $.event('IndexRefresh'); + }, + buildReplies: function(threadRoots) { + var data, err, errors, i, j, k, lastReplies, len, len1, node, nodes, post, posts, thread, threadRoot; + posts = []; + for (j = 0, len = threadRoots.length; j < len; j++) { + threadRoot = threadRoots[j]; + thread = Get.threadFromRoot(threadRoot); + i = Index.liveThreadIDs.indexOf(thread.ID); + if (!(lastReplies = Index.liveThreadData[i].last_replies)) { + continue; + } + nodes = []; + for (k = 0, len1 = lastReplies.length; k < len1; k++) { + data = lastReplies[k]; + if ((post = thread.posts[data.no]) && !post.isFetchedQuote) { + nodes.push(post.nodes.root); + continue; + } + nodes.push(node = Build.postFromObject(data, thread.board.ID)); + try { + posts.push(new Post(node, thread, thread.board)); + } catch (_error) { + err = _error; + if (!errors) { + errors = []; + } + errors.push({ + message: "Parsing of Post No." + data.no + " failed. Post will be skipped.", + error: err + }); + } + } + $.add(threadRoot, nodes); + } + if (errors) { + Main.handleErrors(errors); + } + return Main.callbackNodes('Post', posts); + }, + buildCatalogViews: function() { + var catalogThreads, j, len, thread, threads; + threads = Index.sortedNodes.map(function(threadRoot) { + return Get.threadFromRoot(threadRoot); + }).filter(function(thread) { + return !thread.isHidden !== Index.showHiddenThreads; + }); + catalogThreads = []; + for (j = 0, len = threads.length; j < len; j++) { + thread = threads[j]; + if (!thread.catalogView) { + catalogThreads.push(new CatalogThread(Build.catalogThread(thread), thread)); + } + } + Main.callbackNodes('CatalogThread', catalogThreads); + return threads.map(function(thread) { + return thread.catalogView.nodes.root; + }); + }, + sizeCatalogViews: function(nodes) { + var height, j, len, node, ratio, ref, size, thumb, width; + size = Conf['Index Size'] === 'small' ? 150 : 250; + for (j = 0, len = nodes.length; j < len; j++) { + node = nodes[j]; + thumb = $('.catalog-thumb', node); + ref = thumb.dataset, width = ref.width, height = ref.height; + if (!width) { + continue; + } + ratio = size / Math.max(width, height); + thumb.style.width = width * ratio + 'px'; + thumb.style.height = height * ratio + 'px'; + } + }, + sort: function() { + var j, lastlong, len, liveThreadData, liveThreadIDs, nodes, sortedNodes, sortedThreadIDs, threadID; + liveThreadIDs = Index.liveThreadIDs, liveThreadData = Index.liveThreadData; + if (!liveThreadData) { + return; + } + sortedThreadIDs = (function() { + switch (Index.currentSort) { + case 'lastreply': + return slice.call(liveThreadData).sort(function(a, b) { + var num; + if ((num = a.last_replies)) { + a = num[num.length - 1]; + } + if ((num = b.last_replies)) { + b = num[num.length - 1]; + } + return b.no - a.no; + }).map(function(post) { + return post.no; + }); + case 'lastlong': + lastlong = function(thread) { + var i, j, r, ref; + ref = thread.last_replies || []; + for (i = j = ref.length - 1; j >= 0; i = j += -1) { + r = ref[i]; + if (r.com && Build.parseComment(r.com).replace(/[^a-z]/ig, '').length >= 100) { + return r; + } + } + return thread; + }; + return slice.call(liveThreadData).sort(function(a, b) { + return lastlong(b).no - lastlong(a).no; + }).map(function(post) { + return post.no; + }); + case 'bump': + return liveThreadIDs; + case 'birth': + return slice.call(liveThreadIDs).sort(function(a, b) { + return b - a; + }); + case 'replycount': + return slice.call(liveThreadData).sort(function(a, b) { + return b.replies - a.replies; + }).map(function(post) { + return post.no; + }); + case 'filecount': + return slice.call(liveThreadData).sort(function(a, b) { + return b.images - a.images; + }).map(function(post) { + return post.no; + }); + } + })(); + Index.sortedNodes = sortedNodes = []; + nodes = Index.nodes; + for (j = 0, len = sortedThreadIDs.length; j < len; j++) { + threadID = sortedThreadIDs[j]; + sortedNodes.push(nodes[Index.liveThreadIDs.indexOf(threadID)]); + } + if (Index.search && (nodes = Index.querySearch(Index.search))) { + Index.sortedNodes = nodes; + } + Index.sortOnTop(function(thread) { + return thread.isSticky; + }); + Index.sortOnTop(function(thread) { + return thread.isOnTop || Conf['Pin Watched Threads'] && ThreadWatcher.isWatched(thread); + }); + if (Conf['Anchor Hidden Threads']) { + return Index.sortOnTop(function(thread) { + return !thread.isHidden; + }); + } + }, + sortOnTop: function(match) { + var bottomNodes, j, len, ref, threadRoot, topNodes; + topNodes = []; + bottomNodes = []; + ref = Index.sortedNodes; + for (j = 0, len = ref.length; j < len; j++) { + threadRoot = ref[j]; + (match(Get.threadFromRoot(threadRoot)) ? topNodes : bottomNodes).push(threadRoot); + } + return Index.sortedNodes = topNodes.concat(bottomNodes); + }, + buildIndex: function() { + var i, nodes, page, post; + if (!Index.liveThreadData) { + return; + } + switch (Conf['Index Mode']) { + case 'all pages': + nodes = Index.sortedNodes; + break; + case 'catalog': + nodes = Index.buildCatalogViews(); + Index.sizeCatalogViews(nodes); + break; + default: + if (Index.followedThreadID != null) { + i = 0; + while (Index.followedThreadID !== Get.threadFromRoot(Index.sortedNodes[i]).ID) { + i++; + } + page = Math.floor(i / Index.threadsNumPerPage) + 1; + if (page !== Index.currentPage) { + Index.currentPage = page; + Index.pushState({ + page: page + }); + Index.setPage(); + } + } + nodes = Index.buildSinglePage(Index.currentPage); + } + delete Index.pageNum; + $.rmAll(Index.root); + $.rmAll(Header.hover); + if (Conf['Index Mode'] === 'catalog') { + return $.add(Index.root, nodes); + } else { + if (Conf['Show Replies']) { + Index.buildReplies(nodes); + } + Index.buildStructure(nodes); + if ((Index.followedThreadID != null) && (post = g.posts[g.BOARD + "." + Index.followedThreadID])) { + return Header.scrollTo(post.nodes.root); + } + } + }, + buildSinglePage: function(pageNum) { + var nodesPerPage, offset; + nodesPerPage = Index.threadsNumPerPage; + offset = nodesPerPage * (pageNum - 1); + return Index.sortedNodes.slice(offset, offset + nodesPerPage); + }, + buildStructure: function(nodes) { + var j, len, node, thumb; + for (j = 0, len = nodes.length; j < len; j++) { + node = nodes[j]; + if (thumb = $('img[data-src]', node)) { + thumb.src = thumb.dataset.src; + thumb.removeAttribute('data-src'); + } + $.add(Index.root, [node, $.el('hr')]); + } + if (doc.contains(Index.root)) { + $.event('PostsInserted'); + } + return ThreadHiding.onIndexBuild(nodes); + }, + clearSearch: function() { + Index.searchInput.value = ''; + Index.onSearchInput(); + return Index.searchInput.focus(); + }, + setupSearch: function() { + Index.searchInput.value = Index.search; + if (Index.search) { + return Index.searchInput.dataset.searching = 1; + } else { + return Index.searchInput.removeAttribute('data-searching'); + } + }, + onSearchInput: function() { + var search; + search = Index.searchInput.value.trim(); + if (search === Index.search) { + return; + } + Index.pushState({ + search: search, + replace: !!search === !!Index.search + }); + return Index.pageLoad(false); + }, + querySearch: function(query) { + var keywords; + if (!(keywords = query.toLowerCase().match(/\S+/g))) { + return; + } + return Index.sortedNodes.filter(function(threadRoot) { + return Index.searchMatch(Get.threadFromRoot(threadRoot), keywords); + }); + }, + searchMatch: function(thread, keywords) { + var file, info, j, k, key, keyword, len, len1, ref, ref1, text; + ref = thread.OP, info = ref.info, file = ref.file; + text = []; + ref1 = ['comment', 'subject', 'name', 'tripcode', 'email']; + for (j = 0, len = ref1.length; j < len; j++) { + key = ref1[j]; + if (key in info) { + text.push(info[key]); + } + } + if (file) { + text.push(file.name); + } + text = text.join(' ').toLowerCase(); + for (k = 0, len1 = keywords.length; k < len1; k++) { + keyword = keywords[k]; + if (-1 === text.indexOf(keyword)) { + return false; + } + } + return true; + } + }; + + return Index; + +}).call(this); + +Polyfill = (function() { + var Polyfill; + + Polyfill = { + init: function() { + return this.toBlob(); + }, + toBlob: function() { + if (HTMLCanvasElement.prototype.toBlob) { + return; + } + HTMLCanvasElement.prototype.toBlob = function(cb, type, encoderOptions) { + var data, i, j, l, ref, ui8a, url; + if (type == null) { + type = 'image/png'; + } + url = this.toDataURL(type, encoderOptions); + data = atob(url.slice(url.indexOf(',') + 1)); + l = data.length; + ui8a = new Uint8Array(l); + for (i = j = 0, ref = l; j < ref; i = j += 1) { + ui8a[i] = data.charCodeAt(i); + } + return cb(new Blob([ui8a], { + type: type + })); + }; + return $.globalEval("HTMLCanvasElement.prototype.toBlob = (" + HTMLCanvasElement.prototype.toBlob + ");"); + } + }; + + return Polyfill; + +}).call(this); + +Settings = (function() { + var Settings, + slice = [].slice, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + Settings = { + init: function() { + var add, link, settings; + link = $.el('a', { + className: 'settings-link fa fa-wrench', + textContent: 'Settings', + title: '4chan X Settings', + href: 'javascript:;' + }); + $.on(link, 'click', Settings.open); + Header.addShortcut(link); + add = this.addSection; + add('Main', this.main); + add('Filter', this.filter); + add('Sauce', this.sauce); + add('Advanced', this.advanced); + add('Keybinds', this.keybinds); + $.on(d, 'AddSettingsSection', Settings.addSection); + $.on(d, 'OpenSettings', function(e) { + return Settings.open(e.detail); + }); + if (Conf['Disable Native Extension']) { + if ($.hasStorage) { + settings = JSON.parse(localStorage.getItem('4chan-settings')) || {}; + if (settings.disableAll) { + return; + } + settings.disableAll = true; + return localStorage.setItem('4chan-settings', JSON.stringify(settings)); + } else { + return $.onExists(doc, 'body', function() { + return $.global(function() { + return window.Config.disableAll = true; + }); + }); + } + } + }, + open: function(openSection) { + var dialog, j, len, link, links, overlay, ref, section, sectionToOpen; + if (Settings.overlay) { + return; + } + $.event('CloseMenu'); + Settings.dialog = dialog = $.el('div', { + id: 'fourchanx-settings', + className: 'dialog' + }); + $.extend(dialog, { + innerHTML: "
        " + }); + Settings.overlay = overlay = $.el('div', { + id: 'overlay' + }); + $.on($('.export', dialog), 'click', Settings["export"]); + $.on($('.import', dialog), 'click', Settings["import"]); + $.on($('.reset', dialog), 'click', Settings.reset); + $.on($('input', dialog), 'change', Settings.onImport); + links = []; + ref = Settings.sections; + for (j = 0, len = ref.length; j < len; j++) { + section = ref[j]; + link = $.el('a', { + className: "tab-" + section.hyphenatedTitle, + textContent: section.title, + href: 'javascript:;' + }); + $.on(link, 'click', Settings.openSection.bind(section)); + links.push(link, $.tn(' | ')); + if (section.title === openSection) { + sectionToOpen = link; + } + } + links.pop(); + $.add($('.sections-list', dialog), links); + if (openSection !== 'none') { + (sectionToOpen ? sectionToOpen : links[0]).click(); + } + $.on($('.close', dialog), 'click', Settings.close); + $.on(overlay, 'click', Settings.close); + $.add(d.body, [overlay, dialog]); + return $.event('OpenSettings', null, dialog); + }, + close: function() { + var ref; + if (!Settings.dialog) { + return; + } + if ((ref = d.activeElement) != null) { + ref.blur(); + } + $.rm(Settings.overlay); + $.rm(Settings.dialog); + delete Settings.overlay; + return delete Settings.dialog; + }, + sections: [], + addSection: function(title, open) { + var hyphenatedTitle, ref; + if (typeof title !== 'string') { + ref = title.detail, title = ref.title, open = ref.open; + } + hyphenatedTitle = title.toLowerCase().replace(/\s+/g, '-'); + return Settings.sections.push({ + title: title, + hyphenatedTitle: hyphenatedTitle, + open: open + }); + }, + openSection: function() { + var section, selected; + if (selected = $('.tab-selected', Settings.dialog)) { + $.rmClass(selected, 'tab-selected'); + } + $.addClass($(".tab-" + this.hyphenatedTitle, Settings.dialog), 'tab-selected'); + section = $('section', Settings.dialog); + $.rmAll(section); + section.className = "section-" + this.hyphenatedTitle; + this.open(section, g); + section.scrollTop = 0; + return $.event('OpenSettings', null, section); + }, + warnings: { + localStorage: function(cb) { + var why; + if ($.cantSync) { + why = $.cantSet ? 'save your settings' : 'synchronize settings between tabs'; + return cb($.el('li', { + textContent: "4chan X needs local storage to " + why + ".\nEnable it on boards.4chan.org in your browser's privacy settings (may be listed as part of \"local data\" or \"cookies\")." + })); + } + }, + ads: function(cb) { + return $.onExists(doc, '.ad-cnt', function(ad) { + return $.onExists(ad, 'img', function() { + return cb($.el('li', { + innerHTML: "To protect yourself from malicious ads, you should block ads on 4chan." + })); + }); + }); + } + }, + main: function(section) { + var addWarning, arr, button, container, containers, description, div, fs, input, inputs, items, key, level, obj, ref, ref1, warning, warnings; + warnings = $.el('fieldset', { + hidden: true + }, { + innerHTML: "Warnings
          " + }); + addWarning = function(item) { + $.add($('ul', warnings), item); + return warnings.hidden = false; + }; + ref = Settings.warnings; + for (key in ref) { + warning = ref[key]; + warning(addWarning); + } + $.add(section, warnings); + items = {}; + inputs = {}; + ref1 = Config.main; + for (key in ref1) { + obj = ref1[key]; + fs = $.el('fieldset', { + innerHTML: "" + E(key) + "" + }); + containers = [fs]; + for (key in obj) { + arr = obj[key]; + description = arr[1]; + div = $.el('div', { + innerHTML: ": " + E(description) + "" + }); + if ($.engine !== 'gecko' && key === 'Remember QR Size') { + div.hidden = true; + } + input = $('input', div); + $.on(input, 'change', function() { + this.parentNode.parentNode.dataset.checked = this.checked; + return $.cb.checked.call(this); + }); + items[key] = Conf[key]; + inputs[key] = input; + level = arr[2] || 0; + if (containers.length <= level) { + container = $.el('div', { + className: 'suboption-list' + }); + $.add(containers[containers.length - 1].lastElementChild, container); + containers[level] = container; + } else if (containers.length > level + 1) { + containers.splice(level + 1, containers.length - (level + 1)); + } + $.add(containers[level], div); + } + $.add(section, fs); + } + $.get(items, function(items) { + var val; + for (key in items) { + val = items[key]; + inputs[key].checked = val; + inputs[key].parentNode.parentNode.dataset.checked = val; + } + }); + div = $.el('div', { + innerHTML: ": Clear manually-hidden threads and posts on all boards. Reload the page to apply." + }); + button = $('button', div); + $.get({ + hiddenThreads: {}, + hiddenPosts: {} + }, function(arg) { + var ID, board, hiddenNum, hiddenPosts, hiddenThreads, ref2, ref3, thread; + hiddenThreads = arg.hiddenThreads, hiddenPosts = arg.hiddenPosts; + hiddenNum = 0; + ref2 = hiddenThreads.boards; + for (ID in ref2) { + board = ref2[ID]; + hiddenNum += Object.keys(board).length; + } + ref3 = hiddenPosts.boards; + for (ID in ref3) { + board = ref3[ID]; + for (ID in board) { + thread = board[ID]; + hiddenNum += Object.keys(thread).length; + } + } + return button.textContent = "Hidden: " + hiddenNum; + }); + $.on(button, 'click', function() { + this.textContent = 'Hidden: 0'; + return $.get('hiddenThreads', {}, function(arg) { + var boardID, hiddenThreads; + hiddenThreads = arg.hiddenThreads; + if ($.hasStorage) { + for (boardID in hiddenThreads.boards) { + localStorage.removeItem("4chan-hide-t-" + boardID); + } + } + return $["delete"](['hiddenThreads', 'hiddenPosts']); + }); + }); + return $.after($('input[name="Stubs"]', section).parentNode.parentNode, div); + }, + "export": function() { + return $.get(Conf, function(Conf) { + return Settings.downloadExport({ + version: g.VERSION, + date: Date.now(), + Conf: Conf + }); + }); + }, + downloadExport: function(data) { + var a, p; + a = $.el('a', { + download: "4chan X v" + g.VERSION + "-" + data.date + ".json", + href: "data:application/json;base64," + (btoa(unescape(encodeURIComponent(JSON.stringify(data, null, 2))))) + }); + p = $('.imp-exp-result', Settings.dialog); + $.rmAll(p); + $.add(p, a); + return a.click(); + }, + "import": function() { + return $('input[type=file]', this.parentNode).click(); + }, + onImport: function() { + var file, output, reader; + if (!(file = this.files[0])) { + return; + } + this.value = null; + output = $('.imp-exp-result'); + if (!confirm('Your current settings will be entirely overwritten, are you sure?')) { + output.textContent = 'Import aborted.'; + return; + } + reader = new FileReader(); + reader.onload = function(e) { + var err; + try { + return Settings.loadSettings(JSON.parse(e.target.result), function(err) { + if (err) { + return output.textContent = 'Import failed due to an error.'; + } else if (confirm('Import successful. Reload now?')) { + return window.location.reload(); + } + }); + } catch (_error) { + err = _error; + output.textContent = 'Import failed due to an error.'; + return c.error(err.stack); + } + }; + return reader.readAsText(file); + }, + convertFrom: { + loadletter: function(data) { + var base, boardID, convertSettings, key, ref, ref1, threadData, threadID, threads, val; + convertSettings = function(data, map) { + var newKey, prevKey; + for (prevKey in map) { + newKey = map[prevKey]; + if (newKey) { + data.Conf[newKey] = data.Conf[prevKey]; + } + delete data.Conf[prevKey]; + } + return data; + }; + data = convertSettings(data, { + 'Disable 4chan\'s extension': 'Disable Native Extension', + 'Comment Auto-Expansion': '', + 'Remove Slug': '', + 'Check for Updates': '', + 'Recursive Filtering': 'Recursive Hiding', + 'Reply Hiding': 'Reply Hiding Buttons', + 'Thread Hiding': 'Thread Hiding Buttons', + 'Show Stubs': 'Stubs', + 'Image Auto-Gif': 'Replace GIF', + 'Reveal Spoilers': 'Reveal Spoiler Thumbnails', + 'Expand From Current': 'Expand from here', + 'Post in Title': 'Thread Excerpt', + 'Current Page': 'Page Count in Stats', + 'Current Page Position': '', + 'Alternative captcha': 'Use Recaptcha v1', + 'Auto Submit': 'Post on Captcha Completion', + 'Open Reply in New Tab': 'Open Post in New Tab', + 'Remember QR size': 'Remember QR Size', + 'Remember Subject': '', + 'Quote Inline': 'Quote Inlining', + 'Quote Preview': 'Quote Previewing', + 'Indicate OP quote': 'Mark OP Quotes', + 'Indicate You quote': 'Mark Quotes of You', + 'Indicate Cross-thread Quotes': 'Mark Cross-thread Quotes', + 'uniqueid': 'uniqueID', + 'mod': 'capcode', + 'email': '', + 'country': 'flag', + 'md5': 'MD5', + 'openEmptyQR': 'Open empty QR', + 'openQR': 'Open QR', + 'openOptions': 'Open settings', + 'close': 'Close', + 'spoiler': 'Spoiler tags', + 'sageru': 'Toggle sage', + 'code': 'Code tags', + 'submit': 'Submit QR', + 'watch': 'Watch', + 'update': 'Update', + 'unreadCountTo0': '', + 'expandAllImages': 'Expand images', + 'expandImage': 'Expand image', + 'zero': 'Front page', + 'nextPage': 'Next page', + 'previousPage': 'Previous page', + 'nextThread': 'Next thread', + 'previousThread': 'Previous thread', + 'expandThread': 'Expand thread', + 'openThreadTab': 'Open thread', + 'openThread': 'Open thread tab', + 'nextReply': 'Next reply', + 'previousReply': 'Previous reply', + 'hide': 'Hide', + 'Scrolling': 'Auto Scroll', + 'Verbose': '' + }); + data.Conf.sauces = data.Conf.sauces.replace(/\$\d/g, function(c) { + switch (c) { + case '$1': + return '%TURL'; + case '$2': + return '%URL'; + case '$3': + return '%MD5'; + case '$4': + return '%board'; + default: + return c; + } + }); + ref = Config.hotkeys; + for (key in ref) { + val = ref[key]; + if (key in data.Conf) { + data.Conf[key] = data.Conf[key].replace(/ctrl|alt|meta/g, function(s) { + return "" + (s[0].toUpperCase()) + s.slice(1); + }).replace(/(^|.+\+)[A-Z]$/g, function(s) { + return "Shift+" + s.slice(0, -1) + (s.slice(-1).toLowerCase()); + }); + } + } + if (data.WatchedThreads) { + data.Conf['watchedThreads'] = { + boards: {} + }; + ref1 = data.WatchedThreads; + for (boardID in ref1) { + threads = ref1[boardID]; + for (threadID in threads) { + threadData = threads[threadID]; + ((base = data.Conf['watchedThreads'].boards)[boardID] || (base[boardID] = {}))[threadID] = { + excerpt: threadData.textContent + }; + } + } + } + return data; + } + }, + upgrade: function(data, version) { + var boardID, changes, compareString, j, key, len, name, record, ref, ref1, ref2, ref3, ref4, ref5, rice, set, type, uids, value; + changes = {}; + set = function(key, value) { + return data[key] = changes[key] = value; + }; + compareString = version.replace(/\d+/g, function(x) { + return ('0000' + x).slice(-5); + }); + if (compareString < '00001.00011.00008.00000') { + if (data['Fixed Thread Watcher'] == null) { + set('Fixed Thread Watcher', (ref = data['Toggleable Thread Watcher']) != null ? ref : true); + } + if (data['Exempt Archives from Encryption'] == null) { + set('Exempt Archives from Encryption', (ref1 = data['Except Archives from Encryption']) != null ? ref1 : false); + } + } + if (compareString < '00001.00011.00010.00001') { + if (data['selectedArchives'] != null) { + uids = { + "Moe": 0, + "4plebs Archive": 3, + "Nyafuu Archive": 4, + "Love is Over": 5, + "Rebecca Black Tech": 8, + "warosu": 10, + "fgts": 15, + "not4plebs": 22, + "DesuStorage": 23, + "fireden.net": 24, + "disabled": null + }; + ref2 = data['selectedArchives']; + for (boardID in ref2) { + record = ref2[boardID]; + for (type in record) { + name = record[type]; + if (name in uids) { + record[type] = uids[name]; + } + } + } + set('selectedArchives', data['selectedArchives']); + } + } + if (compareString < '00001.00011.00016.00000') { + if ((rice = Config['usercss'].match(/\/\* Board title rice \*\/(?:\n.+)*/)[0])) { + if ((data['usercss'] != null) && data['usercss'].indexOf(rice) < 0) { + set('usercss', rice + '\n\n' + data['usercss']); + } + } + } + if (compareString < '00001.00011.00017.00000') { + ref3 = ['Persistent QR', 'Color User IDs', 'Fappe Tyme', 'Werk Tyme', 'Highlight Posts Quoting You', 'Highlight Own Posts']; + for (j = 0, len = ref3.length; j < len; j++) { + key = ref3[j]; + if (data[key] == null) { + set(key, key === 'Persistent QR'); + } + } + } + if (compareString < '00001.00011.00017.00006') { + if (data['sauces'] != null) { + set('sauces', data['sauces'].replace(/^(#?\s*)http:\/\/iqdb\.org\//mg, '$1//iqdb.org/')); + } + } + if (compareString < '00001.00011.00019.00003' && !Settings.overlay) { + $.queueTask(function() { + return Settings.warnings.ads(function(item) { + return new Notice('warning', slice.call(item.childNodes)); + }); + }); + } + if (compareString < '00001.00011.00020.00003') { + ref4 = { + 'Inline Cross-thread Quotes Only': false, + 'Pass Link': true + }; + for (key in ref4) { + value = ref4[key]; + if (data[key] == null) { + set(key, value); + } + } + } + if (compareString < '00001.00011.00021.00003') { + if (data['Remember Your Posts'] == null) { + set('Remember Your Posts', (ref5 = data['Mark Quotes of You']) != null ? ref5 : true); + } + } + if (compareString < '00001.00011.00022.00000') { + if (data['sauces'] != null) { + set('sauces', data['sauces'].replace(/^(#?\s*https:\/\/www\.google\.com\/searchbyimage\?image_url=%(?:IMG|URL))%3Fs\.jpg/mg, '$1')); + set('sauces', data['sauces'].replace(/^#?\s*https:\/\/www\.google\.com\/searchbyimage\?image_url=%(?:IMG|T?URL)(?=$|;)/mg, '$&&safe=off')); + } + } + if (compareString < '00001.00011.00022.00002') { + if ((data['Use Recaptcha v1 in Reports'] == null) && data['Use Recaptcha v1'] && !data['Use Recaptcha v2 in Reports']) { + set('Use Recaptcha v1 in Reports', true); + } + } + if (compareString < '00001.00011.00024.00000') { + if ((data['JSON Navigation'] != null) && (data['JSON Index'] == null)) { + set('JSON Index', data['JSON Navigation']); + } + } + if (compareString < '00001.00011.00026.00000') { + if ((data['Oekaki Links'] != null) && (data['Edit Link'] == null)) { + set('Edit Link', data['Oekaki Links']); + } + if (data['Inline Cross-thread Quotes Only'] == null) { + set('Inline Cross-thread Quotes Only', true); + } + } + if (compareString < '00001.00011.00030.00000') { + if (data['Quote Threading'] && (data['Thread Quotes'] == null)) { + set('Thread Quotes', true); + } + } + return changes; + }, + loadSettings: function(data, cb) { + if (data.version.split('.')[0] === '2') { + data = Settings.convertFrom.loadletter(data); + } else if (data.version !== g.VERSION) { + Settings.upgrade(data.Conf, data.version); + } + return $.clear(function(err) { + if (err) { + return cb(err); + } + return $.set(data.Conf, cb); + }); + }, + reset: function() { + if (confirm('Your current settings will be entirely wiped, are you sure?')) { + return $.clear(function(err) { + if (err) { + return $('.imp-exp-result').textContent = 'Import failed due to an error.'; + } else if (confirm('Reset successful. Reload now?')) { + return window.location.reload(); + } + }); + } + }, + filter: function(section) { + var select; + $.extend(section, { + innerHTML: "
          " + }); + select = $('select', section); + $.on(select, 'change', Settings.selectFilter); + return Settings.selectFilter.call(select); + }, + selectFilter: function() { + var div, name, ta; + div = this.nextElementSibling; + if ((name = this.value) !== 'guide') { + $.rmAll(div); + ta = $.el('textarea', { + name: name, + className: 'field', + spellcheck: false + }); + $.get(name, Conf[name], function(item) { + return ta.value = item[name]; + }); + $.on(ta, 'change', $.cb.value); + $.add(div, ta); + return; + } + $.extend(div, { + innerHTML: "
          Filter is disabled.

          Use regular expressions, one per line.
          Lines starting with a # will be ignored.
          For example, /weeaboo/i will filter posts containing the string \`weeaboo\`, case-insensitive.
          MD5 filtering uses exact string matching, not regular expressions.

            You can use these settings with each regular expression, separate them with semicolons:
          • Per boards, separate them with commas. It is global if not specified.
            For example: boards:a,jp;.
          • In case of a global rule, select boards to be excluded from the filter.
            For example: exclude:vg,v;.
          • Filter OPs only along with their threads (\`only\`), replies only (\`no\`), or both (\`yes\`, this is default).
            For example: op:only;, op:no; or op:yes;.
          • Overrule the \`Show Stubs\` setting if specified: create a stub (\`yes\`) or not (\`no\`).
            For example: stub:yes; or stub:no;.
          • Highlight instead of hiding. You can specify a class name to use with a userstyle.
            For example: highlight; or highlight:wallpaper;.
          • Highlighted OPs will have their threads put on top of the board index by default.
            For example: top:yes; or top:no;.

          Note: If you're using the native catalog rather than 4chan X's catalog, 4chan X's filters do not apply there.
          The native catalog has its own separate filter list.

          " + }); + return $('.warning', div).hidden = Conf['Filter']; + }, + sauce: function(section) { + var ta; + $.extend(section, { + innerHTML: "
          Sauce is disabled.
          Lines starting with a # will be ignored.
          You can specify a display text by appending ;text:[text] to the URL.
          You can specify the applicable boards by appending ;boards:[board1],[board2].
          You can specify the applicable file types by appending ;types:[extension1],[extension2].
          You can open links with scripts and popups disabled by appending ;sandbox.
            These parameters will be replaced by their corresponding values:
          • %TURL: Thumbnail URL.
          • %URL: Full image URL.
          • %IMG: Full image URL for GIF, JPG, and PNG; thumbnail URL for other types.
          • %MD5: MD5 hash in base64.
          • %sMD5: MD5 hash in base64 using - and _.
          • %hMD5: MD5 hash in hexadecimal.
          • %name: Original file name.
          • %board: Current board.
          • %%, %semi: Literal % and ;.
          " + }); + $('.warning', section).hidden = Conf['Sauce']; + ta = $('textarea', section); + $.get('sauces', Conf['sauces'], function(item) { + return ta.value = item['sauces']; + }); + return $.on(ta, 'change', $.cb.value); + }, + advanced: function(section) { + var applyCSS, archBoards, archive, boardID, boardOptions, boardSelect, boards, customCSS, files, i, input, inputs, interval, item, items, j, k, l, len, len1, len2, len3, len4, len5, len6, m, n, name, o, q, r, ref, ref1, ref2, ref3, ref4, ref5, ref6, row, rows, software, ta, table, uid, warning, withCredentials; + $.extend(section, { + innerHTML: "
          Archiver
          404 Redirect is disabled.
          Thread redirectionPost fetchingFile redirection
          Captcha Language
          Choose from list of language codes. Leave blank to autoselect.
          Custom Board Navigation
          New lines will be converted into spaces.

          In the following examples for /g/, g can be changed to a different board ID (a, b, etc...), the current board (current), or the Twitter link (@).
          Board link: g
          Archive link: g-archive
          Internal archive link: g-expired
          Title link: g-title
          Board link (Replace with title when on that board): g-replace
          Full text link: g-full
          Custom text link: g-text:"Install Gentoo"
          Index-only link: g-index
          Catalog-only link: g-catalog
          Index mode: g-mode:"infinite scrolling"
          Index sort: g-sort:"creation date"
          External link: external-text:"Google","http://www.google.com"
          Combinations are possible: g-index-text:"Technology Index"
          Full board list toggle: toggle-all

          [ toggle-all ] [current-title] [g-title / a-title / jp-title] [x / wsg / h] [t-text:"Piracy"]
          will give you
          [ + ] [Technology] [Technology / Anime & Manga / Otaku Culture] [x / wsg / h] [Piracy]
          if you are on /g/.
          Time Formatting is disabled.
          :
          Day: %a, %A, %d, %e
          Month: %m, %b, %B
          Year: %y, %Y
          Hour: %k, %H, %l, %I, %p, %P
          Minute: %M
          Second: %S
          Literal %: %%
          Quote Backlinks formatting is disabled.
          :
          File Info Formatting is disabled.
          :
          Link: %l (truncated), %L (untruncated), %T (4chan filename)
          Filename: %n (truncated), %N (untruncated), %t (4chan filename)
          Spoiler indicator: %p
          Size: %B (Bytes), %K (KB), %M (MB), %s (4chan default)
          Resolution: %r (Displays 'PDF' for PDF files)
          Tag: %g
          Literal %: %%
          Quick Reply Personas

          One item per line.
          Items will be added in the relevant input's auto-completion list.
          Password items will always be used, since there is no password input.
          Lines starting with a # will be ignored.

            You can use these settings with each item, separate them with semicolons:
          • Possible items are: name, options (or equivalently email), subject and password.
          • Wrap values of items with quotes, like this: options:"sage".
          • Force values as defaults with the always keyword, for example: options:"sage";always.
          • Select specific boards for an item, separated with commas, for example: options:"sage";boards:jp;always.
          Unread Favicon is disabled.
          Thread Updater is disabled.
          Interval: seconds
          Custom Cooldown Time
          Seconds:
          " + }); + ref = $$('.warning', section); + for (j = 0, len = ref.length; j < len; j++) { + warning = ref[j]; + warning.hidden = Conf[warning.dataset.feature]; + } + items = {}; + inputs = {}; + ref1 = ['captchaLanguage', 'boardnav', 'time', 'backlink', 'fileInfo', 'favicon', 'usercss', 'customCooldown']; + for (k = 0, len1 = ref1.length; k < len1; k++) { + name = ref1[k]; + input = $("[name='" + name + "']", section); + items[name] = Conf[name]; + inputs[name] = input; + if (name === 'usercss') { + $.on(input, 'change', $.cb.value); + } else if (name === 'favicon') { + $.on(input, 'change', $.cb.value); + $.on(input, 'change', Settings[name]); + } else { + $.on(input, 'input', $.cb.value); + if (name in Settings) { + $.on(input, 'input', Settings[name]); + } + } + } + ta = $('.personafield', section); + $.get('QR.personas', Conf['QR.personas'], function(item) { + return ta.value = item['QR.personas']; + }); + $.on(ta, 'change', $.cb.value); + $.get(items, function(items) { + var key, val; + for (key in items) { + val = items[key]; + input = inputs[key]; + input.value = val; + if (key in Settings && key !== 'usercss') { + Settings[key].call(input); + } + } + }); + interval = $('input[name="Interval"]', section); + customCSS = $('input[name="Custom CSS"]', section); + applyCSS = $('#apply-css', section); + interval.value = Conf['Interval']; + customCSS.checked = Conf['Custom CSS']; + inputs['usercss'].disabled = !Conf['Custom CSS']; + applyCSS.disabled = !Conf['Custom CSS']; + $.on(interval, 'change', ThreadUpdater.cb.interval); + $.on(customCSS, 'change', Settings.togglecss); + $.on(applyCSS, 'click', Settings.usercss); + archBoards = {}; + ref2 = Redirect.archives; + for (l = 0, len2 = ref2.length; l < len2; l++) { + ref3 = ref2[l], uid = ref3.uid, name = ref3.name, boards = ref3.boards, files = ref3.files, software = ref3.software, withCredentials = ref3.withCredentials; + for (m = 0, len3 = boards.length; m < len3; m++) { + boardID = boards[m]; + o = archBoards[boardID] || (archBoards[boardID] = { + thread: [[], []], + post: [[], []], + file: [[], []] + }); + i = +(!!withCredentials); + archive = [uid != null ? uid : name, name]; + o.thread[i].push(archive); + if (software === 'foolfuuka') { + o.post[i].push(archive); + } + if (indexOf.call(files, boardID) >= 0) { + o.file[i].push(archive); + } + } + } + for (boardID in archBoards) { + o = archBoards[boardID]; + ref4 = ['thread', 'post', 'file']; + for (n = 0, len4 = ref4.length; n < len4; n++) { + item = ref4[n]; + i = o[item][0].length ? 1 : 0; + o[item][i].push([null, 'disabled']); + o[item] = o[item][0].concat(o[item][1]); + } + } + rows = []; + boardOptions = []; + ref5 = Object.keys(archBoards).sort(); + for (q = 0, len5 = ref5.length; q < len5; q++) { + boardID = ref5[q]; + row = $.el('tr', { + className: "board-" + boardID + }); + row.hidden = boardID !== g.BOARD.ID; + boardOptions.push($.el('option', { + textContent: "/" + boardID + "/", + value: "board-" + boardID, + selected: boardID === g.BOARD.ID + })); + o = archBoards[boardID]; + ref6 = ['thread', 'post', 'file']; + for (r = 0, len6 = ref6.length; r < len6; r++) { + item = ref6[r]; + $.add(row, Settings.addArchiveCell(boardID, o, item)); + } + rows.push(row); + } + if (!(g.BOARD.ID in archBoards)) { + rows[0].hidden = false; + } + $.add($('tbody', section), rows); + boardSelect = $('#archive-board-select', section); + $.add(boardSelect, boardOptions); + table = $('#archive-table', section); + $.on(boardSelect, 'change', function() { + $('tbody > :not([hidden])', table).hidden = true; + return $("tbody > ." + this.value, table).hidden = false; + }); + $.get('selectedArchives', Conf['selectedArchives'], function(arg) { + var data, id, select, selectedArchives, type; + selectedArchives = arg.selectedArchives; + for (boardID in selectedArchives) { + data = selectedArchives[boardID]; + for (type in data) { + id = data[type]; + if (select = $("select[data-boardid='" + boardID + "'][data-type='" + type + "']", section)) { + select.value = JSON.stringify(id); + } + } + } + }); + }, + addArchiveCell: function(boardID, data, type) { + var archive, i, length, options, select, td; + length = data[type].length; + td = $.el('td', { + className: 'archive-cell' + }); + if (!length) { + td.textContent = '--'; + return td; + } + options = []; + i = 0; + while (i < length) { + archive = data[type][i++]; + options.push($.el('option', { + value: JSON.stringify(archive[0]), + textContent: archive[1] + })); + } + $.extend(td, { + innerHTML: "" + }); + select = td.firstElementChild; + if (!(select.disabled = length === 1)) { + select.setAttribute('data-boardid', boardID); + select.setAttribute('data-type', type); + $.on(select, 'change', Settings.saveSelectedArchive); + } + $.add(select, options); + return td; + }, + saveSelectedArchive: function() { + return $.get('selectedArchives', Conf['selectedArchives'], (function(_this) { + return function(arg) { + var name1, selectedArchives; + selectedArchives = arg.selectedArchives; + (selectedArchives[name1 = _this.dataset.boardid] || (selectedArchives[name1] = {}))[_this.dataset.type] = JSON.parse(_this.value); + return $.set('selectedArchives', selectedArchives); + }; + })(this)); + }, + boardnav: function() { + return Header.generateBoardList(this.value); + }, + time: function() { + return this.nextElementSibling.textContent = Time.format(this.value, new Date()); + }, + backlink: function() { + return this.nextElementSibling.textContent = this.value.replace(/%(?:id|%)/g, function(x) { + return { + '%id': '123456789', + '%%': '%' + }[x]; + }); + }, + fileInfo: function() { + var data; + data = { + isReply: true, + file: { + url: '//i.4cdn.org/g/1334437723720.jpg', + name: 'd9bb2efc98dd0df141a94399ff5880b7.jpg', + size: '276 KB', + sizeInBytes: 276 * 1024, + dimensions: '1280x720', + isImage: true, + isVideo: false, + isSpoiler: true, + tag: 'Loop' + } + }; + return FileInfo.format(this.value, data, this.nextElementSibling); + }, + favicon: function() { + var img; + Favicon["switch"](); + if (g.VIEW === 'thread' && Conf['Unread Favicon']) { + Unread.update(); + } + img = this.nextElementSibling.children; + img[0].src = Favicon["default"]; + img[1].src = Favicon.unreadSFW; + img[2].src = Favicon.unreadNSFW; + return img[3].src = Favicon.unreadDead; + }, + togglecss: function() { + if ($('textarea[name=usercss]', $.x('ancestor::fieldset[1]', this)).disabled = $.id('apply-css').disabled = !this.checked) { + CustomCSS.rmStyle(); + } else { + CustomCSS.addStyle(); + } + return $.cb.checked.call(this); + }, + usercss: function() { + return CustomCSS.update(); + }, + keybinds: function(section) { + var arr, input, inputs, items, key, ref, tbody, tr; + $.extend(section, { + innerHTML: "
          Keybinds are disabled.
          Allowed keys: a-z, 0-9, Ctrl, Shift, Alt, Meta, Enter, Esc, Up, Down, Right, Left.
          Press Backspace to disable a keybind.
          ActionsKeybinds
          " + }); + $('.warning', section).hidden = Conf['Keybinds']; + tbody = $('tbody', section); + items = {}; + inputs = {}; + ref = Config.hotkeys; + for (key in ref) { + arr = ref[key]; + tr = $.el('tr', { + innerHTML: "" + E(arr[1]) + "" + }); + input = $('input', tr); + input.name = key; + input.spellcheck = false; + items[key] = Conf[key]; + inputs[key] = input; + $.on(input, 'keydown', Settings.keybind); + $.add(tbody, tr); + } + return $.get(items, function(items) { + var val; + for (key in items) { + val = items[key]; + inputs[key].value = val; + } + }); + }, + keybind: function(e) { + var key; + if (e.keyCode === 9) { + return; + } + e.preventDefault(); + e.stopPropagation(); + if ((key = Keybinds.keyCode(e)) == null) { + return; + } + this.value = key; + return $.cb.value.call(this); + } + }; + + return Settings; + +}).call(this); + +UI = (function() { + var Menu, checkbox, dialog, drag, dragend, dragstart, hover, hoverend, hoverstart, touchend, touchmove, + bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + slice = [].slice; + + dialog = function(id, position, properties) { + var child, el, i, len, move, ref; + el = $.el('div', { + className: 'dialog', + id: id + }); + $.extend(el, properties); + el.style.cssText = position; + $.get(id + ".position", position, function(item) { + return el.style.cssText = item[id + ".position"]; + }); + move = $('.move', el); + $.on(move, 'touchstart mousedown', dragstart); + ref = move.children; + for (i = 0, len = ref.length; i < len; i++) { + child = ref[i]; + if (!child.tagName) { + continue; + } + $.on(child, 'touchstart mousedown', function(e) { + return e.stopPropagation(); + }); + } + return el; + }; + + Menu = (function() { + var currentMenu, lastToggledButton; + + currentMenu = null; + + lastToggledButton = null; + + function Menu(type) { + this.type = type; + this.addEntry = bind(this.addEntry, this); + this.onFocus = bind(this.onFocus, this); + this.keybinds = bind(this.keybinds, this); + this.close = bind(this.close, this); + this.setPosition = bind(this.setPosition, this); + $.on(d, 'AddMenuEntry', (function(_this) { + return function(arg) { + var detail; + detail = arg.detail; + if (detail.type !== _this.type) { + return; + } + delete detail.open; + return _this.addEntry(detail); + }; + })(this)); + this.entries = []; + } + + Menu.prototype.makeMenu = function() { + var menu; + menu = $.el('div', { + className: 'dialog', + id: 'menu', + tabIndex: 0 + }); + $.on(menu, 'click', function(e) { + return e.stopPropagation(); + }); + $.on(menu, 'keydown', this.keybinds); + return menu; + }; + + Menu.prototype.toggle = function(e, button, data) { + var previousButton; + e.preventDefault(); + e.stopPropagation(); + if (currentMenu) { + previousButton = lastToggledButton; + currentMenu.close(); + if (previousButton === button) { + return; + } + } + if (!this.entries.length) { + return; + } + return this.open(button, data); + }; + + Menu.prototype.open = function(button, data) { + var entry, i, len, menu, ref; + menu = this.menu = this.makeMenu(); + currentMenu = this; + lastToggledButton = button; + this.entries.sort(function(first, second) { + return first.order - second.order; + }); + ref = this.entries; + for (i = 0, len = ref.length; i < len; i++) { + entry = ref[i]; + this.insertEntry(entry, menu, data); + } + $.addClass(lastToggledButton, 'active'); + $.on(d, 'click CloseMenu', this.close); + $.on(d, 'scroll', this.setPosition); + $.on(window, 'resize', this.setPosition); + $.add(button, menu); + this.setPosition(); + entry = $('.entry', menu); + this.focus(entry); + return menu.focus(); + }; + + Menu.prototype.setPosition = function() { + var bLeft, bRect, bTop, bottom, cHeight, cWidth, left, mRect, ref, ref1, right, top; + mRect = this.menu.getBoundingClientRect(); + bRect = lastToggledButton.getBoundingClientRect(); + bTop = window.scrollY + bRect.top; + bLeft = window.scrollX + bRect.left; + cHeight = doc.clientHeight; + cWidth = doc.clientWidth; + ref = bRect.top + bRect.height + mRect.height < cHeight ? [bRect.bottom + "px", ''] : ['', (cHeight - bRect.top) + "px"], top = ref[0], bottom = ref[1]; + ref1 = bRect.left + mRect.width < cWidth ? [bRect.left + "px", ''] : ['', (cWidth - bRect.right) + "px"], left = ref1[0], right = ref1[1]; + $.extend(this.menu.style, { + top: top, + right: right, + bottom: bottom, + left: left + }); + return this.menu.classList.toggle('left', right); + }; + + Menu.prototype.insertEntry = function(entry, parent, data) { + var err, i, len, ref, subEntry, submenu; + if (typeof entry.open === 'function') { + try { + if (!entry.open(data)) { + return; + } + } catch (_error) { + err = _error; + Main.handleErrors({ + message: "Error in building the " + this.type + " menu.", + error: err + }); + return; + } + } + $.add(parent, entry.el); + if (!entry.subEntries) { + return; + } + if (submenu = $('.submenu', entry.el)) { + $.rm(submenu); + } + submenu = $.el('div', { + className: 'dialog submenu' + }); + ref = entry.subEntries; + for (i = 0, len = ref.length; i < len; i++) { + subEntry = ref[i]; + this.insertEntry(subEntry, submenu, data); + } + $.add(entry.el, submenu); + }; + + Menu.prototype.close = function() { + $.rm(this.menu); + delete this.menu; + $.rmClass(lastToggledButton, 'active'); + currentMenu = null; + lastToggledButton = null; + $.off(d, 'click scroll CloseMenu', this.close); + $.off(d, 'scroll', this.setPosition); + return $.off(window, 'resize', this.setPosition); + }; + + Menu.prototype.findNextEntry = function(entry, direction) { + var entries; + entries = slice.call(entry.parentNode.children); + entries.sort(function(first, second) { + return first.style.order - second.style.order; + }); + return entries[entries.indexOf(entry) + direction]; + }; + + Menu.prototype.keybinds = function(e) { + var entry, next, nextPrev, subEntry, submenu; + entry = $('.focused', this.menu); + while (subEntry = $('.focused', entry)) { + entry = subEntry; + } + switch (e.keyCode) { + case 27: + lastToggledButton.focus(); + this.close(); + break; + case 13: + case 32: + entry.click(); + break; + case 38: + if (next = this.findNextEntry(entry, -1)) { + this.focus(next); + } + break; + case 40: + if (next = this.findNextEntry(entry, +1)) { + this.focus(next); + } + break; + case 39: + if ((submenu = $('.submenu', entry)) && (next = submenu.firstElementChild)) { + while (nextPrev = this.findNextEntry(next, -1)) { + next = nextPrev; + } + this.focus(next); + } + break; + case 37: + if (next = $.x('parent::*[contains(@class,"submenu")]/parent::*', entry)) { + this.focus(next); + } + break; + default: + return; + } + e.preventDefault(); + return e.stopPropagation(); + }; + + Menu.prototype.onFocus = function(e) { + e.stopPropagation(); + return this.focus(e.target); + }; + + Menu.prototype.focus = function(entry) { + var bottom, cHeight, cWidth, eRect, focused, i, left, len, ref, ref1, ref2, right, sRect, style, submenu, top; + while (focused = $.x('parent::*/child::*[contains(@class,"focused")]', entry)) { + $.rmClass(focused, 'focused'); + } + ref = $$('.focused', entry); + for (i = 0, len = ref.length; i < len; i++) { + focused = ref[i]; + $.rmClass(focused, 'focused'); + } + $.addClass(entry, 'focused'); + if (!(submenu = $('.submenu', entry))) { + return; + } + sRect = submenu.getBoundingClientRect(); + eRect = entry.getBoundingClientRect(); + cHeight = doc.clientHeight; + cWidth = doc.clientWidth; + ref1 = eRect.top + sRect.height < cHeight ? ['0px', 'auto'] : ['auto', '0px'], top = ref1[0], bottom = ref1[1]; + ref2 = eRect.right + sRect.width < cWidth - 150 ? ['100%', 'auto'] : ['auto', '100%'], left = ref2[0], right = ref2[1]; + style = submenu.style; + style.top = top; + style.bottom = bottom; + style.left = left; + return style.right = right; + }; + + Menu.prototype.addEntry = function(entry) { + this.parseEntry(entry); + return this.entries.push(entry); + }; + + Menu.prototype.parseEntry = function(entry) { + var el, i, len, subEntries, subEntry; + el = entry.el, subEntries = entry.subEntries; + $.addClass(el, 'entry'); + $.on(el, 'focus mouseover', this.onFocus); + el.style.order = entry.order || 100; + if (!subEntries) { + return; + } + $.addClass(el, 'has-submenu'); + for (i = 0, len = subEntries.length; i < len; i++) { + subEntry = subEntries[i]; + this.parseEntry(subEntry); + } + }; + + return Menu; + + })(); + + dragstart = function(e) { + var el, isTouching, o, rect, ref, screenHeight, screenWidth; + if (e.type === 'mousedown' && e.button !== 0) { + return; + } + e.preventDefault(); + if (isTouching = e.type === 'touchstart') { + e = e.changedTouches[e.changedTouches.length - 1]; + } + el = $.x('ancestor::div[contains(@class,"dialog")][1]', this); + rect = el.getBoundingClientRect(); + screenHeight = doc.clientHeight; + screenWidth = doc.clientWidth; + o = { + id: el.id, + style: el.style, + dx: e.clientX - rect.left, + dy: e.clientY - rect.top, + height: screenHeight - rect.height, + width: screenWidth - rect.width, + screenHeight: screenHeight, + screenWidth: screenWidth, + isTouching: isTouching + }; + ref = Conf['Header auto-hide'] || !Conf['Fixed Header'] ? [0, 0] : Conf['Bottom Header'] ? [0, Header.bar.getBoundingClientRect().height] : [Header.bar.getBoundingClientRect().height, 0], o.topBorder = ref[0], o.bottomBorder = ref[1]; + if (isTouching) { + o.identifier = e.identifier; + o.move = touchmove.bind(o); + o.up = touchend.bind(o); + $.on(d, 'touchmove', o.move); + return $.on(d, 'touchend touchcancel', o.up); + } else { + o.move = drag.bind(o); + o.up = dragend.bind(o); + $.on(d, 'mousemove', o.move); + return $.on(d, 'mouseup', o.up); + } + }; + + touchmove = function(e) { + var i, len, ref, touch; + ref = e.changedTouches; + for (i = 0, len = ref.length; i < len; i++) { + touch = ref[i]; + if (touch.identifier === this.identifier) { + drag.call(this, touch); + return; + } + } + }; + + drag = function(e) { + var bottom, clientX, clientY, left, right, style, top; + clientX = e.clientX, clientY = e.clientY; + left = clientX - this.dx; + left = left < 10 ? 0 : this.width - left < 10 ? null : left / this.screenWidth * 100 + '%'; + top = clientY - this.dy; + top = top < (10 + this.topBorder) ? this.topBorder + 'px' : this.height - top < (10 + this.bottomBorder) ? null : top / this.screenHeight * 100 + '%'; + right = left === null ? 0 : null; + bottom = top === null ? this.bottomBorder + 'px' : null; + style = this.style; + style.left = left; + style.right = right; + style.top = top; + return style.bottom = bottom; + }; + + touchend = function(e) { + var i, len, ref, touch; + ref = e.changedTouches; + for (i = 0, len = ref.length; i < len; i++) { + touch = ref[i]; + if (touch.identifier === this.identifier) { + dragend.call(this); + return; + } + } + }; + + dragend = function() { + if (this.isTouching) { + $.off(d, 'touchmove', this.move); + $.off(d, 'touchend touchcancel', this.up); + } else { + $.off(d, 'mousemove', this.move); + $.off(d, 'mouseup', this.up); + } + return $.set(this.id + ".position", this.style.cssText); + }; + + hoverstart = function(arg) { + var cb, el, endEvents, height, latestEvent, noRemove, o, ref, root; + root = arg.root, el = arg.el, latestEvent = arg.latestEvent, endEvents = arg.endEvents, height = arg.height, cb = arg.cb, noRemove = arg.noRemove; + o = { + root: root, + el: el, + style: el.style, + isImage: (ref = el.nodeName) === 'IMG' || ref === 'VIDEO', + cb: cb, + endEvents: endEvents, + latestEvent: latestEvent, + clientHeight: doc.clientHeight, + clientWidth: doc.clientWidth, + height: height, + noRemove: noRemove + }; + o.hover = hover.bind(o); + o.hoverend = hoverend.bind(o); + o.hover(o.latestEvent); + new MutationObserver(function() { + if (el.parentNode) { + return o.hover(o.latestEvent); + } + }).observe(el, { + childList: true + }); + $.on(root, endEvents, o.hoverend); + if ($.x('ancestor::div[contains(@class,"inline")][1]', root)) { + $.on(d, 'keydown', o.hoverend); + } + $.on(root, 'mousemove', o.hover); + o.workaround = function(e) { + if (!root.contains(e.target)) { + return o.hoverend(e); + } + }; + return $.on(doc, 'mousemove', o.workaround); + }; + + hoverstart.padding = 25; + + hover = function(e) { + var clientX, clientY, height, left, ref, right, style, threshold, top; + this.latestEvent = e; + height = (this.height || this.el.offsetHeight) + hoverstart.padding; + clientX = e.clientX, clientY = e.clientY; + top = this.isImage ? Math.max(0, clientY * (this.clientHeight - height) / this.clientHeight) : Math.max(0, Math.min(this.clientHeight - height, clientY - 120)); + threshold = this.clientWidth / 2; + if (!this.isImage) { + threshold = Math.max(threshold, this.clientWidth - 400); + } + ref = clientX <= threshold ? [clientX + 45 + 'px', null] : [null, this.clientWidth - clientX + 45 + 'px'], left = ref[0], right = ref[1]; + style = this.style; + style.top = top + 'px'; + style.left = left; + return style.right = right; + }; + + hoverend = function(e) { + if (e.type === 'keydown' && e.keyCode !== 13 || e.target.nodeName === "TEXTAREA") { + return; + } + if (!this.noRemove) { + $.rm(this.el); + } + $.off(this.root, this.endEvents, this.hoverend); + $.off(d, 'keydown', this.hoverend); + $.off(this.root, 'mousemove', this.hover); + $.off(doc, 'mousemove', this.workaround); + if (this.cb) { + return this.cb.call(this); + } + }; + + checkbox = function(name, text, checked) { + var input, label; + if (checked == null) { + checked = Conf[name]; + } + label = $.el('label'); + input = $.el('input', { + type: 'checkbox', + name: name, + checked: checked + }); + $.add(label, [input, $.tn(" " + text)]); + return label; + }; + + return { + dialog: dialog, + Menu: Menu, + hover: hoverstart, + checkbox: checkbox + }; + +}).call(this); + +FappeTyme = (function() { + var FappeTyme; + + FappeTyme = { + init: function() { + var el, i, lc, len, ref, ref1, type; + if (!((Conf['Fappe Tyme'] || Conf['Werk Tyme']) && ((ref = g.VIEW) === 'index' || ref === 'thread'))) { + return; + } + this.nodes = {}; + this.enabled = { + fappe: false, + werk: Conf['werk'] + }; + ref1 = ["Fappe", "Werk"]; + for (i = 0, len = ref1.length; i < len; i++) { + type = ref1[i]; + if (!Conf[type + " Tyme"]) { + continue; + } + lc = type.toLowerCase(); + el = UI.checkbox(lc, type + " Tyme", false); + el.title = type + " Tyme"; + this.nodes[lc] = el.firstElementChild; + if (Conf[lc]) { + this.set(lc, true); + } + $.on(this.nodes[lc], 'change', this.toggle.bind(this, lc)); + Header.menu.addEntry({ + el: el, + order: 97 + }); + } + if (Conf['Werk Tyme']) { + $.sync('werk', this.set.bind(this, 'werk')); + } + Callbacks.Post.push({ + name: 'Fappe Tyme', + cb: this.node + }); + return Callbacks.CatalogThread.push({ + name: 'Werk Tyme', + cb: this.catalogNode + }); + }, + node: function() { + return this.nodes.root.classList.toggle('noFile', !this.file); + }, + catalogNode: function() { + var file, filename; + file = this.thread.OP.file; + if (!file) { + return; + } + filename = $.el('div', { + textContent: file.name, + className: 'werkTyme-filename' + }); + return $.add(this.nodes.thumb.parentNode, filename); + }, + set: function(type, enabled) { + this.enabled[type] = this.nodes[type].checked = enabled; + return $[(enabled ? 'add' : 'rm') + "Class"](doc, type + "Tyme"); + }, + toggle: function(type) { + this.set(type, !this.enabled[type]); + if (type === 'werk') { + return $.cb.checked.call(this.nodes[type]); + } + } + }; + + return FappeTyme; + +}).call(this); + +Gallery = (function() { + var Gallery; + + Gallery = { + init: function() { + var el, ref; + if (!(this.enabled = Conf['Gallery'] && ((ref = g.VIEW) === 'index' || ref === 'thread') && g.BOARD.ID !== 'f')) { + return; + } + this.delay = Conf['Slide Delay']; + el = $.el('a', { + href: 'javascript:;', + id: 'appchan-gal', + title: 'Gallery', + className: 'fa fa-picture-o', + textContent: 'Gallery' + }); + $.on(el, 'click', this.cb.toggle); + Header.addShortcut(el); + return Callbacks.Post.push({ + name: 'Gallery', + cb: this.node + }); + }, + node: function() { + var ref; + if (!((ref = this.file) != null ? ref.thumb : void 0)) { + return; + } + if (Gallery.nodes) { + Gallery.generateThumb(this); + Gallery.nodes.total.textContent = Gallery.images.length; + } + if (!Conf['Image Expansion']) { + return $.on(this.file.thumb.parentNode, 'click', Gallery.cb.image); + } + }, + build: function(image) { + var candidate, cb, dialog, entry, file, i, j, key, len, len1, menuButton, nodes, post, ref, ref1, ref2, ref3, thumb, value; + cb = Gallery.cb; + if (Conf['Fullscreen Gallery']) { + $.one(d, 'fullscreenchange mozfullscreenchange webkitfullscreenchange', function() { + return $.on(d, 'fullscreenchange mozfullscreenchange webkitfullscreenchange', cb.close); + }); + if (typeof doc.mozRequestFullScreen === "function") { + doc.mozRequestFullScreen(); + } + if (typeof doc.webkitRequestFullScreen === "function") { + doc.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT); + } + } + Gallery.images = []; + nodes = Gallery.nodes = {}; + Gallery.fullIDs = {}; + Gallery.slideshow = false; + nodes.el = dialog = $.el('div', { + id: 'a-gallery' + }); + $.extend(dialog, { + innerHTML: "
          " + }); + ref = { + buttons: '.gal-buttons', + frame: '.gal-image', + name: '.gal-name', + count: '.count', + total: '.total', + thumbs: '.gal-thumbnails', + next: '.gal-image a', + current: '.gal-image img' + }; + for (key in ref) { + value = ref[key]; + nodes[key] = $(value, dialog); + } + menuButton = $('.menu-button', dialog); + nodes.menu = new UI.Menu('gallery'); + $.on(nodes.frame, 'click', cb.blank); + if (Conf['Mouse Wheel Volume']) { + $.on(nodes.frame, 'wheel', Volume.wheel); + } + $.on(nodes.next, 'click', cb.click); + $.on(nodes.name, 'click', ImageCommon.download); + $.on($('.gal-prev', dialog), 'click', cb.prev); + $.on($('.gal-next', dialog), 'click', cb.next); + $.on($('.gal-start', dialog), 'click', cb.start); + $.on($('.gal-stop', dialog), 'click', cb.stop); + $.on($('.gal-close', dialog), 'click', cb.close); + $.on(menuButton, 'click', function(e) { + return nodes.menu.toggle(e, this, g); + }); + ref1 = Gallery.menu.createSubEntries(); + for (i = 0, len = ref1.length; i < len; i++) { + entry = ref1[i]; + entry.order = 0; + nodes.menu.addEntry(entry); + } + $.on(d, 'keydown', cb.keybinds); + if (Conf['Keybinds']) { + $.off(d, 'keydown', Keybinds.keydown); + } + $.on(window, 'resize', Gallery.cb.setHeight); + ref2 = $$('.post .file'); + for (j = 0, len1 = ref2.length; j < len1; j++) { + file = ref2[j]; + post = Get.postFromNode(file); + if (!((ref3 = post.file) != null ? ref3.thumb : void 0)) { + continue; + } + Gallery.generateThumb(post); + if (!image && Gallery.fullIDs[post.fullID]) { + candidate = post.file.thumb.parentNode; + if (Header.getTopOf(candidate) + candidate.getBoundingClientRect().height >= 0) { + image = candidate; + } + } + } + $.addClass(doc, 'gallery-open'); + $.add(d.body, dialog); + nodes.thumbs.scrollTop = 0; + nodes.current.parentElement.scrollTop = 0; + if (image) { + thumb = $("[href='" + image.href + "']", nodes.thumbs); + } + thumb || (thumb = Gallery.images[Gallery.images.length - 1]); + if (thumb) { + Gallery.open(thumb); + } + doc.style.overflow = 'hidden'; + return nodes.total.textContent = Gallery.images.length; + }, + generateThumb: function(post) { + var thumb, thumbImg; + if (post.isClone || post.isHidden) { + return; + } + if (!(post.file && post.file.thumb && (post.file.isImage || post.file.isVideo || Conf['PDF in Gallery']))) { + return; + } + if (Gallery.fullIDs[post.fullID]) { + return; + } + Gallery.fullIDs[post.fullID] = true; + thumb = $.el('a', { + className: 'gal-thumb', + href: post.file.url, + target: '_blank', + title: post.file.name + }); + thumb.dataset.id = Gallery.images.length; + thumb.dataset.post = post.fullID; + thumbImg = post.file.thumb.cloneNode(false); + thumbImg.style.cssText = ''; + $.add(thumb, thumbImg); + $.on(thumb, 'click', Gallery.cb.open); + Gallery.images.push(thumb); + return $.add(Gallery.nodes.thumbs, thumb); + }, + load: function(thumb, errorCB) { + var elType, ext, file; + ext = thumb.href.match(/\w*$/); + elType = { + 'webm': 'video', + 'pdf': 'iframe' + }[ext] || 'img'; + file = $.el(elType, { + title: thumb.title + }); + $.extend(file.dataset, thumb.dataset); + $.on(file, 'error', errorCB); + file.src = thumb.href; + return file; + }, + open: function(thumb) { + var el, file, newID, nodes, oldID, post, ref; + nodes = Gallery.nodes; + oldID = +nodes.current.dataset.id; + newID = +thumb.dataset.id; + if (el = Gallery.images[oldID]) { + $.rmClass(el, 'gal-highlight'); + } + $.addClass(thumb, 'gal-highlight'); + nodes.thumbs.scrollTop = thumb.offsetTop + thumb.offsetHeight / 2 - nodes.thumbs.clientHeight / 2; + if (((ref = Gallery.cache) != null ? ref.dataset.id : void 0) === '' + newID) { + file = Gallery.cache; + $.off(file, 'error', Gallery.cacheError); + $.on(file, 'error', Gallery.error); + } else { + file = Gallery.load(thumb, Gallery.error); + } + $.off(nodes.current, 'error', Gallery.error); + ImageCommon.pause(nodes.current); + $.replace(nodes.current, file); + nodes.current = file; + if (file.nodeName === 'VIDEO') { + file.loop = true; + Volume.setup(file); + if (Conf['Autoplay']) { + file.play(); + } + if (Conf['Show Controls']) { + ImageCommon.addControls(file); + } + } + doc.classList.toggle('gal-pdf', file.nodeName === 'IFRAME'); + Gallery.cb.setHeight(); + nodes.count.textContent = +thumb.dataset.id + 1; + nodes.name.download = nodes.name.textContent = thumb.title; + nodes.name.href = thumb.href; + nodes.frame.scrollTop = 0; + nodes.next.focus(); + if (Gallery.slideshow && (newID > oldID || (oldID === Gallery.images.length - 1 && newID === 0))) { + Gallery.setupTimer(); + } else { + Gallery.cb.stop(); + } + if (Conf['Scroll to Post'] && (post = g.posts[file.dataset.post])) { + Header.scrollTo(post.nodes.root); + } + if (isNaN(oldID) || newID === (oldID + 1) % Gallery.images.length) { + return Gallery.cache = Gallery.load(Gallery.images[(newID + 1) % Gallery.images.length], Gallery.cacheError); + } + }, + error: function() { + var ref; + if (((ref = this.error) != null ? ref.code : void 0) === MediaError.MEDIA_ERR_DECODE) { + return new Notice('error', 'Corrupt or unplayable video', 30); + } + if (this.src.split('/')[2] !== 'i.4cdn.org') { + return; + } + return ImageCommon.error(this, g.posts[this.dataset.post], null, (function(_this) { + return function(url) { + if (!url) { + return; + } + Gallery.images[_this.dataset.id].href = url; + if (Gallery.nodes.current === _this) { + return _this.src = url; + } + }; + })(this)); + }, + cacheError: function() { + return delete Gallery.cache; + }, + cleanupTimer: function() { + var current; + clearTimeout(Gallery.timeoutID); + current = Gallery.nodes.current; + $.off(current, 'canplaythrough load', Gallery.startTimer); + return $.off(current, 'ended', Gallery.cb.next); + }, + startTimer: function() { + return Gallery.timeoutID = setTimeout(Gallery.checkTimer, Gallery.delay * $.SECOND); + }, + setupTimer: function() { + var current, isVideo; + Gallery.cleanupTimer(); + current = Gallery.nodes.current; + isVideo = current.nodeName === 'VIDEO'; + if (isVideo) { + current.play(); + } + if ((isVideo ? current.readyState >= 4 : current.complete) || current.nodeName === 'IFRAME') { + return Gallery.startTimer(); + } else { + return $.on(current, (isVideo ? 'canplaythrough' : 'load'), Gallery.startTimer); + } + }, + checkTimer: function() { + var current; + current = Gallery.nodes.current; + if (current.nodeName === 'VIDEO' && !current.paused) { + $.on(current, 'ended', Gallery.cb.next); + return current.loop = false; + } else { + return Gallery.cb.next(); + } + }, + cb: { + keybinds: function(e) { + var cb, key; + if (!(key = Keybinds.keyCode(e))) { + return; + } + cb = (function() { + switch (key) { + case Conf['Close']: + case Conf['Open Gallery']: + return Gallery.cb.close; + case 'Right': + return Gallery.cb.next; + case 'Enter': + return Gallery.cb.advance; + case 'Left': + case '': + return Gallery.cb.prev; + case Conf['Pause']: + return Gallery.cb.pause; + case Conf['Slideshow']: + return Gallery.cb.toggleSlideshow; + } + })(); + if (!cb) { + return; + } + e.stopPropagation(); + e.preventDefault(); + return cb(); + }, + open: function(e) { + if (e) { + e.preventDefault(); + } + if (this) { + return Gallery.open(this); + } + }, + image: function(e) { + e.preventDefault(); + e.stopPropagation(); + return Gallery.build(this); + }, + prev: function() { + return Gallery.cb.open.call(Gallery.images[+Gallery.nodes.current.dataset.id - 1] || Gallery.images[Gallery.images.length - 1]); + }, + next: function() { + return Gallery.cb.open.call(Gallery.images[+Gallery.nodes.current.dataset.id + 1] || Gallery.images[0]); + }, + click: function(e) { + if (ImageCommon.onControls(e)) { + return; + } + e.preventDefault(); + return Gallery.cb.advance(); + }, + advance: function() { + if (!Conf['Autoplay'] && Gallery.nodes.current.paused) { + return Gallery.nodes.current.play(); + } else { + return Gallery.cb.next(); + } + }, + toggle: function() { + return (Gallery.nodes ? Gallery.cb.close : Gallery.build)(); + }, + blank: function(e) { + if (e.target === this) { + return Gallery.cb.close(); + } + }, + toggleSlideshow: function() { + return Gallery.cb[Gallery.slideshow ? 'stop' : 'start'](); + }, + pause: function() { + var current; + Gallery.cb.stop(); + current = Gallery.nodes.current; + if (current.nodeName === 'VIDEO') { + return current[current.paused ? 'play' : 'pause'](); + } + }, + start: function() { + $.addClass(Gallery.nodes.buttons, 'gal-playing'); + Gallery.slideshow = true; + return Gallery.setupTimer(); + }, + stop: function() { + var current; + if (!Gallery.slideshow) { + return; + } + Gallery.cleanupTimer(); + current = Gallery.nodes.current; + if (current.nodeName === 'VIDEO') { + current.loop = true; + } + $.rmClass(Gallery.nodes.buttons, 'gal-playing'); + return Gallery.slideshow = false; + }, + close: function() { + $.off(Gallery.nodes.current, 'error', Gallery.error); + ImageCommon.pause(Gallery.nodes.current); + $.rm(Gallery.nodes.el); + $.rmClass(doc, 'gallery-open'); + if (Conf['Fullscreen Gallery']) { + $.off(d, 'fullscreenchange mozfullscreenchange webkitfullscreenchange', Gallery.cb.close); + if (typeof d.mozCancelFullScreen === "function") { + d.mozCancelFullScreen(); + } + if (typeof d.webkitExitFullscreen === "function") { + d.webkitExitFullscreen(); + } + } + delete Gallery.nodes; + delete Gallery.fullIDs; + doc.style.overflow = ''; + $.off(d, 'keydown', Gallery.cb.keybinds); + if (Conf['Keybinds']) { + $.on(d, 'keydown', Keybinds.keydown); + } + $.off(window, 'resize', Gallery.cb.setHeight); + return clearTimeout(Gallery.timeoutID); + }, + setFitness: function() { + return (this.checked ? $.addClass : $.rmClass)(doc, "gal-" + (this.name.toLowerCase().replace(/\s+/g, '-'))); + }, + setHeight: $.debounce(100, function() { + var current, dim, frame, height, minHeight, ref, ref1, ref2, style, width; + ref = Gallery.nodes, current = ref.current, frame = ref.frame; + style = current.style; + if (Conf['Stretch to Fit'] && (dim = (ref1 = g.posts[current.dataset.post]) != null ? ref1.file.dimensions : void 0)) { + ref2 = dim.split('x'), width = ref2[0], height = ref2[1]; + minHeight = Math.min(doc.clientHeight - 25, height / width * frame.clientWidth); + style.minHeight = minHeight + 'px'; + return style.minWidth = (width / height * minHeight) + 'px'; + } else { + return style.minHeight = style.minWidth = null; + } + }), + setDelay: function() { + return Gallery.delay = +this.value; + } + }, + menu: { + init: function() { + var el; + if (!Gallery.enabled) { + return; + } + el = $.el('span', { + textContent: 'Gallery', + className: 'gallery-link' + }); + return Header.menu.addEntry({ + el: el, + order: 105, + subEntries: Gallery.menu.createSubEntries() + }); + }, + createSubEntry: function(name) { + var input, label; + label = UI.checkbox(name, name); + input = label.firstElementChild; + if (name === 'Hide Thumbnails' || name === 'Fit Width' || name === 'Fit Height') { + $.on(input, 'change', Gallery.cb.setFitness); + } + $.event('change', null, input); + $.on(input, 'change', $.cb.checked); + if (name === 'Hide Thumbnails' || name === 'Fit Width' || name === 'Fit Height' || name === 'Stretch to Fit') { + $.on(input, 'change', Gallery.cb.setHeight); + } + return { + el: label + }; + }, + createSubEntries: function() { + var delayInput, delayLabel, item, subEntries; + subEntries = (function() { + var i, len, ref, results; + ref = ['Hide Thumbnails', 'Fit Width', 'Fit Height', 'Stretch to Fit', 'Scroll to Post']; + results = []; + for (i = 0, len = ref.length; i < len; i++) { + item = ref[i]; + results.push(Gallery.menu.createSubEntry(item)); + } + return results; + })(); + delayLabel = $.el('label', { + innerHTML: "Slide Delay: " + }); + delayInput = delayLabel.firstElementChild; + delayInput.value = Gallery.delay; + $.on(delayInput, 'change', Gallery.cb.setDelay); + $.on(delayInput, 'change', $.cb.value); + subEntries.push({ + el: delayLabel + }); + return subEntries; + } + } + }; + + return Gallery; + +}).call(this); + +ImageCommon = (function() { + var ImageCommon; + + ImageCommon = { + pause: function(video) { + if (video.nodeName !== 'VIDEO') { + return; + } + video.pause(); + $.off(video, 'volumechange', Volume.change); + return video.muted = true; + }, + rewind: function(el) { + if (el.nodeName === 'VIDEO') { + if (el.readyState >= el.HAVE_METADATA) { + return el.currentTime = 0; + } + } else if (/\.gif$/.test(el.src)) { + return $.queueTask(function() { + return el.src = el.src; + }); + } + }, + pushCache: function(el) { + ImageCommon.cache = el; + return $.on(el, 'error', ImageCommon.cacheError); + }, + popCache: function() { + var el; + el = ImageCommon.cache; + $.off(el, 'error', ImageCommon.cacheError); + delete ImageCommon.cache; + return el; + }, + cacheError: function() { + if (ImageCommon.cache === this) { + return delete ImageCommon.cache; + } + }, + decodeError: function(file, post) { + var message, ref; + if (((ref = file.error) != null ? ref.code : void 0) !== MediaError.MEDIA_ERR_DECODE) { + return false; + } + if (!(message = $('.warning', post.file.thumb.parentNode))) { + message = $.el('div', { + className: 'warning' + }); + $.after(post.file.thumb, message); + } + message.textContent = 'Error: Corrupt or unplayable video'; + return true; + }, + error: function(file, post, delay, cb) { + var URL, redirect, src, timeoutID; + src = post.file.url.split('/'); + URL = Redirect.to('file', { + boardID: post.board.ID, + filename: src[src.length - 1] + }); + if (!(Conf['404 Redirect'] && URL && Redirect.securityCheck(URL))) { + URL = null; + } + if ((post.isDead || post.file.isDead) && file.src.split('/')[2] === 'i.4cdn.org') { + return cb(URL); + } + if (delay != null) { + timeoutID = setTimeout((function() { + return cb(URL); + }), delay); + } + if (post.isDead || post.file.isDead) { + return; + } + redirect = function() { + if (file.src.split('/')[2] === 'i.4cdn.org') { + if (delay != null) { + clearTimeout(timeoutID); + } + return cb(URL); + } + }; + return $.ajax("//a.4cdn.org/" + post.board + "/thread/" + post.thread + ".json", { + onload: function() { + var i, len, postObj, ref; + if (this.status === 404) { + post.kill(!post.isClone); + } + if (this.status !== 200) { + return redirect(); + } + ref = this.response.posts; + for (i = 0, len = ref.length; i < len; i++) { + postObj = ref[i]; + if (postObj.no === post.ID) { + break; + } + } + if (postObj.no !== post.ID) { + post.kill(); + return redirect(); + } else if (postObj.filedeleted) { + post.kill(true); + return redirect(); + } else { + return URL = post.file.url; + } + } + }); + }, + addControls: function(video) { + var handler; + handler = function() { + var t; + $.off(video, 'mouseover', handler); + t = new Date().getTime(); + return $.asap((function() { + return $.engine !== 'gecko' || (video.readyState >= 3 && video.currentTime <= Math.max(0.1, video.duration - 0.5)) || new Date().getTime() >= t + 1000; + }), function() { + return video.controls = true; + }); + }; + return $.on(video, 'mouseover', handler); + }, + onControls: function(e) { + return (Conf['Show Controls'] && Conf['Click Passthrough'] && e.target.nodeName === 'VIDEO') || (e.target.controls && e.target.getBoundingClientRect().bottom - e.clientY < 35); + }, + download: function(e) { + if (this.protocol === 'blob:') { + return true; + } + e.preventDefault(); + return CrossOrigin.file(this.href, (function(_this) { + return function(blob) { + if (blob) { + _this.href = URL.createObjectURL(blob); + return _this.click(); + } else { + return new Notice('error', "Could not download " + _this.href, 30); + } + }; + })(this)); + } + }; + + return ImageCommon; + +}).call(this); + +ImageExpand = (function() { + var ImageExpand, + slice = [].slice; + + ImageExpand = { + init: function() { + var ref; + if (!(this.enabled = Conf['Image Expansion'] && ((ref = g.VIEW) === 'index' || ref === 'thread') && g.BOARD.ID !== 'f')) { + return; + } + this.EAI = $.el('a', { + className: 'expand-all-shortcut fa fa-expand', + textContent: 'EAI', + title: 'Expand All Images', + href: 'javascript:;' + }); + $.on(this.EAI, 'click', this.cb.toggleAll); + Header.addShortcut(this.EAI, 3); + $.on(d, 'scroll visibilitychange', this.cb.playVideos); + this.videoControls = $.el('span', { + className: 'video-controls' + }); + $.extend(this.videoControls, { + innerHTML: " contract" + }); + return Callbacks.Post.push({ + name: 'Image Expansion', + cb: this.node + }); + }, + node: function() { + var ref; + if (!(this.file && (this.file.isImage || this.file.isVideo))) { + return; + } + $.on(this.file.thumb.parentNode, 'click', ImageExpand.cb.toggle); + if (this.isClone) { + if (this.file.isExpanding) { + ImageExpand.contract(this); + return ImageExpand.expand(this); + } else if (this.file.isExpanded && this.file.isVideo) { + Volume.setup(this.file.fullImage); + ImageExpand.setupVideoCB(this); + return ImageExpand.setupVideo(this, !((ref = this.origin.file.fullImage) != null ? ref.paused : void 0) || this.origin.file.wasPlaying, this.file.fullImage.controls); + } + } else if (ImageExpand.on && !this.isHidden && !this.isFetchedQuote && (Conf['Expand spoilers'] || !this.file.isSpoiler) && (Conf['Expand videos'] || !this.file.isVideo)) { + return ImageExpand.expand(this); + } + }, + cb: { + toggle: function(e) { + var file, post, ref; + if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0) { + return; + } + post = Get.postFromNode(this); + file = post.file; + if (file.isExpanded && ImageCommon.onControls(e)) { + return; + } + e.preventDefault(); + if (!Conf['Autoplay'] && ((ref = file.fullImage) != null ? ref.paused : void 0)) { + return file.fullImage.play(); + } else { + return ImageExpand.toggle(post); + } + }, + toggleAll: function() { + var func, toggle; + $.event('CloseMenu'); + toggle = function(post) { + var file; + file = post.file; + if (!(file && (file.isImage || file.isVideo) && doc.contains(post.nodes.root))) { + return; + } + if (ImageExpand.on && (!Conf['Expand spoilers'] && file.isSpoiler || !Conf['Expand videos'] && file.isVideo || Conf['Expand from here'] && Header.getTopOf(file.thumb) < 0)) { + return; + } + return $.queueTask(func, post); + }; + if (ImageExpand.on = $.hasClass(ImageExpand.EAI, 'expand-all-shortcut')) { + ImageExpand.EAI.className = 'contract-all-shortcut fa fa-compress'; + ImageExpand.EAI.title = 'Contract All Images'; + func = ImageExpand.expand; + } else { + ImageExpand.EAI.className = 'expand-all-shortcut fa fa-expand'; + ImageExpand.EAI.title = 'Expand All Images'; + func = ImageExpand.contract; + } + return g.posts.forEach(function(post) { + var i, len, ref; + ref = [post].concat(slice.call(post.clones)); + for (i = 0, len = ref.length; i < len; i++) { + post = ref[i]; + toggle(post); + } + }); + }, + playVideos: function() { + return g.posts.forEach(function(post) { + var file, i, len, ref, video, visible; + ref = [post].concat(slice.call(post.clones)); + for (i = 0, len = ref.length; i < len; i++) { + post = ref[i]; + file = post.file; + if (!(file && file.isVideo && file.isExpanded)) { + continue; + } + video = file.fullImage; + visible = ($.hasAudio(video) && !video.muted) || Header.isNodeVisible(video); + if (visible && file.wasPlaying) { + delete file.wasPlaying; + video.play(); + } else if (!visible && !video.paused) { + file.wasPlaying = true; + video.pause(); + } + } + }); + }, + setFitness: function() { + return $[this.checked ? 'addClass' : 'rmClass'](doc, this.name.toLowerCase().replace(/\s+/g, '-')); + } + }, + toggle: function(post) { + var next; + if (!(post.file.isExpanding || post.file.isExpanded)) { + post.file.scrollIntoView = Conf['Scroll into view']; + ImageExpand.expand(post); + return; + } + ImageExpand.contract(post); + if (Conf['Advance on contract']) { + next = post.nodes.root; + while (next = $.x("following::div[contains(@class,'postContainer')][1]", next)) { + if (!($('.stub', next) || next.offsetHeight === 0)) { + break; + } + } + if (next) { + return Header.scrollTo(next); + } + } + }, + contract: function(post) { + var bottom, cb, el, eventName, file, i, len, oldHeight, ref, ref1, scrollY, top, x; + file = post.file; + if (el = file.fullImage) { + top = Header.getTopOf(el); + bottom = top + el.getBoundingClientRect().height; + oldHeight = d.body.clientHeight; + scrollY = window.scrollY; + } + $.rmClass(post.nodes.root, 'expanded-image'); + $.rmClass(file.thumb, 'expanding'); + $.rm(file.videoControls); + file.thumb.parentNode.href = file.url; + file.thumb.parentNode.target = '_blank'; + ref = ['isExpanding', 'isExpanded', 'videoControls', 'wasPlaying', 'scrollIntoView']; + for (i = 0, len = ref.length; i < len; i++) { + x = ref[i]; + delete file[x]; + } + if (!el) { + return; + } + if (doc.contains(el)) { + if (bottom <= 0) { + window.scroll(0, scrollY + d.body.clientHeight - oldHeight); + } else { + Header.scrollToIfNeeded(post.nodes.root); + } + if (window.scrollX > 0) { + window.scroll(0, window.scrollY); + } + } + $.off(el, 'error', ImageExpand.error); + ImageCommon.pushCache(el); + if (file.isVideo) { + ImageCommon.pause(el); + ref1 = ImageExpand.videoCB; + for (eventName in ref1) { + cb = ref1[eventName]; + $.off(el, eventName, cb); + } + } + if (Conf['Restart when Opened']) { + ImageCommon.rewind(file.thumb); + } + delete file.fullImage; + return $.queueTask(function() { + if (file.isExpanding || file.isExpanded) { + return; + } + $.rmClass(el, 'full-image'); + if (el.id) { + return; + } + return $.rm(el); + }); + }, + expand: function(post, src) { + var el, file, isVideo, ref, thumb; + file = post.file; + thumb = file.thumb, isVideo = file.isVideo; + if (post.isHidden || file.isExpanding || file.isExpanded) { + return; + } + $.addClass(thumb, 'expanding'); + file.isExpanding = true; + if (file.fullImage) { + el = file.fullImage; + } else if (((ref = ImageCommon.cache) != null ? ref.dataset.fullID : void 0) === post.fullID) { + el = file.fullImage = ImageCommon.popCache(); + $.on(el, 'error', ImageExpand.error); + if (Conf['Restart when Opened'] && el.id !== 'ihover') { + ImageCommon.rewind(el); + } + el.removeAttribute('id'); + } else { + el = file.fullImage = $.el((isVideo ? 'video' : 'img')); + el.dataset.fullID = post.fullID; + $.on(el, 'error', ImageExpand.error); + el.src = src || file.url; + } + el.className = 'full-image'; + $.after(thumb, el); + if (isVideo) { + if (Conf['Show Controls'] && Conf['Click Passthrough'] && !file.videoControls) { + file.videoControls = ImageExpand.videoControls.cloneNode(true); + $.add(file.text, file.videoControls); + } + thumb.parentNode.removeAttribute('href'); + thumb.parentNode.removeAttribute('target'); + el.loop = true; + Volume.setup(el); + ImageExpand.setupVideoCB(post); + } + if (!isVideo) { + return $.asap((function() { + return el.naturalHeight; + }), function() { + return ImageExpand.completeExpand(post); + }); + } else if (el.readyState >= el.HAVE_METADATA) { + return ImageExpand.completeExpand(post); + } else { + return $.on(el, 'loadedmetadata', function() { + return ImageExpand.completeExpand(post); + }); + } + }, + completeExpand: function(post) { + var bottom, file, imageBottom, oldHeight, scrollY; + file = post.file; + if (!file.isExpanding) { + return; + } + bottom = Header.getTopOf(file.thumb) + file.thumb.getBoundingClientRect().height; + oldHeight = d.body.clientHeight; + scrollY = window.scrollY; + $.addClass(post.nodes.root, 'expanded-image'); + $.rmClass(file.thumb, 'expanding'); + file.isExpanded = true; + delete file.isExpanding; + if (doc.contains(post.nodes.root) && bottom <= 0) { + window.scroll(window.scrollX, scrollY + d.body.clientHeight - oldHeight); + } + if (file.scrollIntoView) { + delete file.scrollIntoView; + imageBottom = Math.min(doc.clientHeight - file.fullImage.getBoundingClientRect().bottom - 25, Header.getBottomOf(file.fullImage)); + if (imageBottom < 0) { + window.scrollBy(0, Math.min(-imageBottom, Header.getTopOf(file.fullImage))); + } + } + if (file.isVideo) { + return ImageExpand.setupVideo(post, Conf['Autoplay'], Conf['Show Controls']); + } + }, + setupVideo: function(post, playing, controls) { + var fullImage; + fullImage = post.file.fullImage; + if (!playing) { + fullImage.controls = controls; + return; + } + fullImage.controls = false; + $.asap((function() { + return doc.contains(fullImage); + }), function() { + if (!d.hidden && Header.isNodeVisible(fullImage)) { + return fullImage.play(); + } else { + return post.file.wasPlaying = true; + } + }); + if (controls) { + return ImageCommon.addControls(fullImage); + } + }, + videoCB: (function() { + var mousedown; + mousedown = false; + return { + mouseover: function() { + return mousedown = false; + }, + mousedown: function(e) { + if (e.button === 0) { + return mousedown = true; + } + }, + mouseup: function(e) { + if (e.button === 0) { + return mousedown = false; + } + }, + mouseout: function(e) { + if (mousedown && e.clientX <= this.getBoundingClientRect().left) { + return ImageExpand.toggle(Get.postFromNode(this)); + } + } + }; + })(), + setupVideoCB: function(post) { + var cb, eventName, ref; + ref = ImageExpand.videoCB; + for (eventName in ref) { + cb = ref[eventName]; + $.on(post.file.fullImage, eventName, cb); + } + if (post.file.videoControls) { + return $.on(post.file.videoControls.firstElementChild, 'click', function() { + return ImageExpand.toggle(post); + }); + } + }, + error: function() { + var post; + post = Get.postFromNode(this); + $.rm(this); + delete post.file.fullImage; + if (!(post.file.isExpanding || post.file.isExpanded)) { + return; + } + if (ImageCommon.decodeError(this, post)) { + return ImageExpand.contract(post); + } + if (this.src.split('/')[2] !== 'i.4cdn.org') { + return ImageExpand.contract(post); + } + return ImageCommon.error(this, post, 10 * $.SECOND, function(URL) { + if (post.file.isExpanding || post.file.isExpanded) { + ImageExpand.contract(post); + if (URL) { + return ImageExpand.expand(post, URL); + } + } + }); + }, + menu: { + init: function() { + var conf, createSubEntry, el, name, ref, subEntries; + if (!ImageExpand.enabled) { + return; + } + el = $.el('span', { + textContent: 'Image Expansion', + className: 'image-expansion-link' + }); + createSubEntry = ImageExpand.menu.createSubEntry; + subEntries = []; + ref = Config.imageExpansion; + for (name in ref) { + conf = ref[name]; + subEntries.push(createSubEntry(name, conf[1])); + } + return Header.menu.addEntry({ + el: el, + order: 105, + subEntries: subEntries + }); + }, + createSubEntry: function(name, desc) { + var input, label; + label = UI.checkbox(name, name); + label.title = desc; + input = label.firstElementChild; + if (name === 'Fit width' || name === 'Fit height') { + $.on(input, 'change', ImageExpand.cb.setFitness); + } + $.event('change', null, input); + $.on(input, 'change', $.cb.checked); + return { + el: label + }; + } + } + }; + + return ImageExpand; + +}).call(this); + +ImageHover = (function() { + var ImageHover; + + ImageHover = { + init: function() { + var ref; + if ((ref = g.VIEW) !== 'index' && ref !== 'thread') { + return; + } + if (Conf['Image Hover']) { + Callbacks.Post.push({ + name: 'Image Hover', + cb: this.node + }); + } + if (Conf['Image Hover in Catalog']) { + return Callbacks.CatalogThread.push({ + name: 'Image Hover', + cb: this.catalogNode + }); + } + }, + node: function() { + if (!(this.file && (this.file.isImage || this.file.isVideo))) { + return; + } + return $.on(this.file.thumb, 'mouseover', ImageHover.mouseover(this)); + }, + catalogNode: function() { + var file; + file = this.thread.OP.file; + if (!(file && (file.isImage || file.isVideo))) { + return; + } + return $.on(this.nodes.thumb, 'mouseover', ImageHover.mouseover(this.thread.OP)); + }, + mouseover: function(post) { + return function(e) { + var el, error, file, height, isVideo, left, maxHeight, maxWidth, ref, ref1, ref2, right, scale, width, x; + if (!doc.contains(this)) { + return; + } + file = post.file; + isVideo = file.isVideo; + if (file.isExpanding || file.isExpanded) { + return; + } + error = ImageHover.error(post); + if (((ref = ImageCommon.cache) != null ? ref.dataset.fullID : void 0) === post.fullID) { + el = ImageCommon.popCache(); + $.on(el, 'error', error); + } else { + el = $.el((isVideo ? 'video' : 'img')); + el.dataset.fullID = post.fullID; + $.on(el, 'error', error); + el.src = file.url; + } + if (Conf['Restart when Opened']) { + ImageCommon.rewind(el); + ImageCommon.rewind(this); + } + el.id = 'ihover'; + $.add(Header.hover, el); + if (isVideo) { + el.loop = true; + el.controls = false; + Volume.setup(el); + if (Conf['Autoplay']) { + el.play(); + } + } + ref1 = (function() { + var i, len, ref1, results; + ref1 = file.dimensions.split('x'); + results = []; + for (i = 0, len = ref1.length; i < len; i++) { + x = ref1[i]; + results.push(+x); + } + return results; + })(), width = ref1[0], height = ref1[1]; + ref2 = this.getBoundingClientRect(), left = ref2.left, right = ref2.right; + maxWidth = Math.max(left, doc.clientWidth - right); + maxHeight = doc.clientHeight - UI.hover.padding; + scale = Math.min(1, maxWidth / width, maxHeight / height); + el.style.maxWidth = (scale * width) + "px"; + el.style.maxHeight = (scale * height) + "px"; + return UI.hover({ + root: this, + el: el, + latestEvent: e, + endEvents: 'mouseout click', + height: scale * height, + noRemove: true, + cb: function() { + $.off(el, 'error', error); + ImageCommon.pushCache(el); + ImageCommon.pause(el); + $.rm(el); + return el.removeAttribute('style'); + } + }); + }; + }, + error: function(post) { + return function() { + if (ImageCommon.decodeError(this, post)) { + return; + } + return ImageCommon.error(this, post, 3 * $.SECOND, (function(_this) { + return function(URL) { + if (URL) { + return _this.src = URL + (_this.src === URL ? '?' + Date.now() : ''); + } else { + return $.rm(_this); + } + }; + })(this)); + }; + } + }; + + return ImageHover; + +}).call(this); + +ImageLoader = (function() { + var ImageLoader, + slice = [].slice; + + ImageLoader = { + init: function() { + var prefetch, ref; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && g.BOARD.ID !== 'f')) { + return; + } + if (!(Conf['Image Prefetching'] || Conf['Replace JPG'] || Conf['Replace PNG'] || Conf['Replace GIF'] || Conf['Replace WEBM'])) { + return; + } + Callbacks.Post.push({ + name: 'Image Replace', + cb: this.node + }); + $.on(d, 'PostsInserted', function() { + return g.posts.forEach(ImageLoader.prefetch); + }); + if (Conf['Replace WEBM']) { + $.on(d, 'scroll visibilitychange 4chanXInitFinished PostsInserted', this.playVideos); + } + if (!Conf['Image Prefetching']) { + return; + } + prefetch = $.el('label', { + innerHTML: " Prefetch Images" + }); + this.el = prefetch.firstElementChild; + $.on(this.el, 'change', this.toggle); + return Header.menu.addEntry({ + el: prefetch, + order: 98 + }); + }, + node: function() { + if (this.isClone || !this.file) { + return; + } + if (Conf['Replace WEBM'] && this.file.isVideo) { + ImageLoader.replaceVideo(this); + } + return ImageLoader.prefetch(this); + }, + replaceVideo: function(post) { + var attr, file, i, len, ref, thumb, video; + file = post.file; + thumb = file.thumb; + video = $.el('video', { + preload: 'none', + loop: true, + muted: true, + poster: thumb.src || thumb.dataset.src, + textContent: thumb.alt, + className: thumb.className + }); + video.setAttribute('muted', 'muted'); + video.dataset.md5 = thumb.dataset.md5; + ref = ['height', 'width', 'maxHeight', 'maxWidth']; + for (i = 0, len = ref.length; i < len; i++) { + attr = ref[i]; + video.style[attr] = thumb.style[attr]; + } + video.src = file.url; + $.replace(thumb, video); + file.thumb = video; + return file.videoThumb = true; + }, + prefetch: function(post) { + var clone, el, file, i, isImage, isVideo, len, match, ref, replace, thumb, type, url; + file = post.file; + if (!file) { + return; + } + isImage = file.isImage, isVideo = file.isVideo, thumb = file.thumb, url = file.url; + if (file.isPrefetched || !(isImage || isVideo) || post.isHidden || post.thread.isHidden) { + return; + } + type = (match = url.match(/\.([^.]+)$/)[1].toUpperCase()) === 'JPEG' ? 'JPG' : match; + replace = Conf["Replace " + type] && !/spoiler/.test(thumb.src || thumb.dataset.src); + if (!(replace || Conf['prefetch'])) { + return; + } + if (![post].concat(slice.call(post.clones)).some(function(clone) { + return doc.contains(clone.nodes.root); + })) { + return; + } + file.isPrefetched = true; + if (file.videoThumb) { + ref = post.clones; + for (i = 0, len = ref.length; i < len; i++) { + clone = ref[i]; + clone.file.thumb.preload = 'auto'; + } + thumb.preload = 'auto'; + if ($.engine === 'gecko') { + $.on(thumb, 'loadeddata', function() { + return this.removeAttribute('poster'); + }); + } + return; + } + el = $.el(isImage ? 'img' : 'video'); + if (replace && isImage) { + $.on(el, 'load', function() { + var j, len1, ref1; + ref1 = post.clones; + for (j = 0, len1 = ref1.length; j < len1; j++) { + clone = ref1[j]; + clone.file.thumb.src = url; + } + thumb.src = url; + return thumb.removeAttribute('data-src'); + }); + } + return el.src = url; + }, + toggle: function() { + if (Conf['prefetch'] = this.checked) { + g.posts.forEach(ImageLoader.prefetch); + } + }, + playVideos: function() { + var qpClone, ref; + qpClone = (ref = $.id('qp')) != null ? ref.firstElementChild : void 0; + return g.posts.forEach(function(post) { + var i, len, ref1, ref2, thumb; + ref1 = [post].concat(slice.call(post.clones)); + for (i = 0, len = ref1.length; i < len; i++) { + post = ref1[i]; + if (!((ref2 = post.file) != null ? ref2.videoThumb : void 0)) { + continue; + } + thumb = post.file.thumb; + if (Header.isNodeVisible(thumb) || post.nodes.root === qpClone) { + thumb.play(); + } else { + thumb.pause(); + } + } + }); + } + }; + + return ImageLoader; + +}).call(this); + +Metadata = (function() { + var Metadata; + + Metadata = { + init: function() { + var ref; + if (!(Conf['WEBM Metadata'] && ((ref = g.VIEW) === 'index' || ref === 'thread') && g.BOARD.ID !== 'f')) { + return; + } + return Callbacks.Post.push({ + name: 'WEBM Metadata', + cb: this.node + }); + }, + node: function() { + var el; + if (!(this.file && /webm$/i.test(this.file.url))) { + return; + } + if (this.isClone) { + el = $('.webm-title', this.file.text); + } else { + el = $.el('span', { + className: 'webm-title' + }); + $.extend(el, { + innerHTML: "" + }); + $.add(this.file.text, [$.tn('\u00A0'), el]); + } + if (el.children.length === 1) { + return $.one(el.lastElementChild, 'mouseover focus', Metadata.load); + } + }, + load: function() { + $.rmClass(this.parentNode, 'error'); + $.addClass(this.parentNode, 'loading'); + return CrossOrigin.binary(Get.postFromNode(this).file.url, (function(_this) { + return function(data) { + var output, title; + $.rmClass(_this.parentNode, 'loading'); + if (data != null) { + title = Metadata.parse(data); + output = $.el('span', { + textContent: title || '' + }); + if (title == null) { + $.addClass(_this.parentNode, 'not-found'); + } + $.before(_this, output); + _this.parentNode.tabIndex = 0; + if (d.activeElement === _this) { + _this.parentNode.focus(); + } + return _this.tabIndex = -1; + } else { + $.addClass(_this.parentNode, 'error'); + return $.one(_this, 'click', Metadata.load); + } + }; + })(this), { + Range: 'bytes=0-9999' + }); + }, + parse: function(data) { + var element, i, readInt, size, title; + readInt = function() { + var len, n; + n = data[i++]; + len = 0; + while (n < (0x80 >> len)) { + len++; + } + n ^= 0x80 >> len; + while (len-- && i < data.length) { + n = (n << 8) ^ data[i++]; + } + return n; + }; + i = 0; + while (i < data.length) { + element = readInt(); + size = readInt(); + if (element === 0x3BA9) { + title = ''; + while (size-- && i < data.length) { + title += String.fromCharCode(data[i++]); + } + return decodeURIComponent(escape(title)); + } else if (element !== 0x8538067 && element !== 0x549A966) { + i += size; + } + } + return null; + } + }; + + return Metadata; + +}).call(this); + +RevealSpoilers = (function() { + var RevealSpoilers; + + RevealSpoilers = { + init: function() { + var ref; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Reveal Spoiler Thumbnails'])) { + return; + } + return Callbacks.Post.push({ + name: 'Reveal Spoiler Thumbnails', + cb: this.node + }); + }, + node: function() { + var thumb; + if (!(!this.isClone && this.file && this.file.thumb && this.file.isSpoiler)) { + return; + } + thumb = this.file.thumb; + thumb.removeAttribute('style'); + thumb.style.maxHeight = thumb.style.maxWidth = this.isReply ? '125px' : '250px'; + if (thumb.src) { + return thumb.src = this.file.thumbURL; + } else { + return thumb.dataset.src = this.file.thumbURL; + } + } + }; + + return RevealSpoilers; + +}).call(this); + +Sauce = (function() { + var Sauce, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + Sauce = { + init: function() { + var err, j, len, link, links, ref, ref1; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Sauce'])) { + return; + } + links = []; + ref1 = Conf['sauces'].split('\n'); + for (j = 0, len = ref1.length; j < len; j++) { + link = ref1[j]; + try { + if (link[0] !== '#') { + links.push(link.trim()); + } + } catch (_error) { + err = _error; + } + } + if (!links.length) { + return; + } + this.links = links; + this.link = $.el('a', { + target: '_blank', + className: 'sauce' + }); + return Callbacks.Post.push({ + name: 'Sauce', + cb: this.node + }); + }, + sandbox: function(url) { + return E.url({ + innerHTML: "[sb] " + E(url) + "" + }); + }, + rmOrigin: function(e) { + if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0) { + return; + } + $.open(this.href); + return e.preventDefault(); + }, + createSauceLink: function(link, post) { + var a, ext, i, j, key, len, m, part, parts, ref, ref1, ref2, skip, url; + if (!(link = link.trim())) { + return null; + } + parts = {}; + ref = link.split(/;(?=(?:text|boards|types|sandbox):?)/); + for (i = j = 0, len = ref.length; j < len; i = ++j) { + part = ref[i]; + if (i === 0) { + parts['url'] = part; + } else { + m = part.match(/^(\w*):?(.*)$/); + parts[m[1]] = m[2]; + } + } + parts['text'] || (parts['text'] = ((ref1 = parts['url'].match(/(\w+)\.\w+\//)) != null ? ref1[1] : void 0) || '?'); + ext = post.file.url.match(/[^.]*$/)[0]; + skip = false; + for (key in parts) { + parts[key] = parts[key].replace(/%(T?URL|IMG|[sh]?MD5|board|name|%|semi)/g, function(_, parameter) { + var type; + type = Sauce.formatters[parameter](post, ext); + if (type == null) { + skip = true; + return ''; + } + if (key === 'url' && (parameter !== '%' && parameter !== 'semi')) { + if (/^javascript:/i.test(parts['url'])) { + type = JSON.stringify(type); + } + type = encodeURIComponent(type); + } + return type; + }); + } + if (skip) { + return null; + } + if (!(!parts['boards'] || (ref2 = post.board.ID, indexOf.call(parts['boards'].split(','), ref2) >= 0))) { + return null; + } + if (!(!parts['types'] || indexOf.call(parts['types'].split(','), ext) >= 0)) { + return null; + } + url = parts['url']; + if (parts['sandbox'] != null) { + url = Sauce.sandbox(url); + } + a = Sauce.link.cloneNode(true); + a.href = url; + a.textContent = parts['text']; + if (/^javascript:/i.test(parts['url'])) { + a.removeAttribute('target'); + } + if (parts['sandbox'] != null) { + $.on(a, 'click', Sauce.rmOrigin); + } + return a; + }, + node: function() { + var j, len, link, node, nodes, ref; + if (this.isClone || !this.file) { + return; + } + nodes = []; + ref = Sauce.links; + for (j = 0, len = ref.length; j < len; j++) { + link = ref[j]; + if (node = Sauce.createSauceLink(link, this)) { + nodes.push($.tn('\u00A0'), node); + } + } + return $.add(this.file.text, nodes); + }, + formatters: { + TURL: function(post) { + return post.file.thumbURL; + }, + URL: function(post) { + return post.file.url; + }, + IMG: function(post, ext) { + if (ext === 'gif' || ext === 'jpg' || ext === 'png') { + return post.file.url; + } else { + return post.file.thumbURL; + } + }, + MD5: function(post) { + return post.file.MD5; + }, + sMD5: function(post) { + var ref; + return (ref = post.file.MD5) != null ? ref.replace(/[+\/=]/g, function(c) { + return { + '+': '-', + '/': '_', + '=': '' + }[c]; + }) : void 0; + }, + hMD5: function(post) { + var c; + if (post.file.MD5) { + return ((function() { + var j, len, ref, results; + ref = atob(post.file.MD5); + results = []; + for (j = 0, len = ref.length; j < len; j++) { + c = ref[j]; + results.push(("0" + (c.charCodeAt(0).toString(16))).slice(-2)); + } + return results; + })()).join(''); + } + }, + board: function(post) { + return post.board.ID; + }, + name: function(post) { + return post.file.name; + }, + '%': function() { + return '%'; + }, + semi: function() { + return ';'; + } + } + }; + + return Sauce; + +}).call(this); + +Volume = (function() { + var Volume; + + Volume = { + init: function() { + var ref, ref1, unmuteEntry, volumeEntry; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && (Conf['Image Expansion'] || Conf['Image Hover'] || Conf['Image Hover in Catalog'] || Conf['Gallery']))) { + return; + } + $.sync('Allow Sound', function(x) { + var ref1; + Conf['Allow Sound'] = x; + return (ref1 = Volume.inputs) != null ? ref1.unmute.checked = x : void 0; + }); + $.sync('Default Volume', function(x) { + var ref1; + Conf['Default Volume'] = x; + return (ref1 = Volume.inputs) != null ? ref1.volume.value = x : void 0; + }); + if (Conf['Mouse Wheel Volume']) { + Callbacks.Post.push({ + name: 'Mouse Wheel Volume', + cb: this.node + }); + } + if ((ref1 = g.BOARD.ID) !== 'gif' && ref1 !== 'wsg') { + return; + } + if (Conf['Mouse Wheel Volume']) { + Callbacks.CatalogThread.push({ + name: 'Mouse Wheel Volume', + cb: this.catalogNode + }); + } + unmuteEntry = UI.checkbox('Allow Sound', 'Allow Sound'); + unmuteEntry.title = Config.main['Images and Videos']['Allow Sound'][1]; + volumeEntry = $.el('label', { + title: 'Default volume for videos.' + }); + $.extend(volumeEntry, { + innerHTML: " Volume" + }); + this.inputs = { + unmute: unmuteEntry.firstElementChild, + volume: volumeEntry.firstElementChild + }; + $.on(this.inputs.unmute, 'change', $.cb.checked); + $.on(this.inputs.volume, 'change', $.cb.value); + Header.menu.addEntry({ + el: unmuteEntry, + order: 200 + }); + return Header.menu.addEntry({ + el: volumeEntry, + order: 201 + }); + }, + setup: function(video) { + video.muted = !Conf['Allow Sound']; + video.volume = Conf['Default Volume']; + return $.on(video, 'volumechange', Volume.change); + }, + change: function() { + var items, key, muted, val, volume; + muted = this.muted, volume = this.volume; + items = { + 'Allow Sound': !muted, + 'Default Volume': volume + }; + for (key in items) { + val = items[key]; + if (Conf[key] === val) { + delete items[key]; + } + } + $.set(items); + $.extend(Conf, items); + if (Volume.inputs) { + Volume.inputs.unmute.checked = !muted; + return Volume.inputs.volume.value = volume; + } + }, + node: function() { + var ref, ref1; + if (!(((ref = this.board.ID) === 'gif' || ref === 'wsg') && ((ref1 = this.file) != null ? ref1.isVideo : void 0))) { + return; + } + $.on(this.file.thumb, 'wheel', Volume.wheel.bind(Header.hover)); + return $.on($('a', this.file.text), 'wheel', Volume.wheel.bind(this.file.thumb.parentNode)); + }, + catalogNode: function() { + var file; + file = this.thread.OP.file; + if (!(file != null ? file.isVideo : void 0)) { + return; + } + return $.on(this.nodes.thumb, 'wheel', Volume.wheel.bind(Header.hover)); + }, + wheel: function(e) { + var el, volume; + if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) { + return; + } + if (!(el = $('video:not([data-md5])', this))) { + return; + } + if (el.muted || !$.hasAudio(el)) { + return; + } + volume = el.volume + 0.1; + if (e.deltaY < 0) { + volume *= 1.1; + } + if (e.deltaY > 0) { + volume /= 1.1; + } + el.volume = $.minmax(volume - 0.1, 0, 1); + return e.preventDefault(); + } + }; + + return Volume; + +}).call(this); + +Embedding = (function() { + var Embedding; + + Embedding = { + init: function() { + var j, len, ref, type; + if (!(Conf['Embedding'] || Conf['Link Title'])) { + return; + } + this.types = {}; + ref = this.ordered_types; + for (j = 0, len = ref.length; j < len; j++) { + type = ref[j]; + this.types[type.key] = type; + } + if (Conf['Floating Embeds']) { + this.dialog = UI.dialog('embedding', 'top: 50px; right: 0px;', { + innerHTML: "
          " + }); + this.media = $('#media-embed', this.dialog); + $.one(d, '4chanXInitFinished', this.ready); + } + if (Conf['Link Title']) { + return $.on(d, '4chanXInitFinished PostsInserted', function() { + var key, ref1, ref2, service; + ref1 = Embedding.types; + for (key in ref1) { + service = ref1[key]; + if ((ref2 = service.title) != null ? ref2.batchSize : void 0) { + Embedding.flushTitles(service.title); + } + } + }); + } + }, + events: function(post) { + var el, i, items; + if (!Conf['Embedding']) { + return; + } + i = 0; + items = $$('.embedder', post.nodes.comment); + while (el = items[i++]) { + $.on(el, 'click', Embedding.cb.toggle); + if ($.hasClass(el, 'embedded')) { + Embedding.cb.toggle.call(el); + } + } + }, + process: function(link, post) { + var data; + if (!(Conf['Embedding'] || Conf['Link Title'])) { + return; + } + if ($.x('ancestor::pre', link)) { + return; + } + if (data = Embedding.services(link)) { + data.post = post; + if (Conf['Embedding']) { + Embedding.embed(data); + } + if (Conf['Link Title']) { + return Embedding.title(data); + } + } + }, + services: function(link) { + var href, j, len, match, ref, type; + href = link.href; + ref = Embedding.ordered_types; + for (j = 0, len = ref.length; j < len; j++) { + type = ref[j]; + if (!(match = type.regExp.exec(href))) { + continue; + } + if (type.dummy) { + return; + } + return { + key: type.key, + uid: match[1], + options: match[2], + link: link + }; + } + }, + embed: function(data) { + var embed, href, key, link, name, options, post, ref, uid, value; + key = data.key, uid = data.uid, options = data.options, link = data.link, post = data.post; + href = link.href; + if (Embedding.types[key].httpOnly && location.protocol !== 'http:') { + return; + } + $.addClass(link, key.toLowerCase()); + embed = $.el('a', { + className: 'embedder', + href: 'javascript:;', + textContent: '(embed)' + }); + ref = { + key: key, + uid: uid, + options: options, + href: href + }; + for (name in ref) { + value = ref[name]; + embed.dataset[name] = value; + } + $.on(embed, 'click', Embedding.cb.toggle); + $.after(link, [$.tn(' '), embed]); + if (Conf['Auto-embed'] && !Conf['Floating Embeds'] && !post.isFetchedQuote && key !== 'TwitchTV') { + return $.asap((function() { + return doc.contains(embed); + }), function() { + return Embedding.cb.toggle.call(embed); + }); + } + }, + ready: function() { + $.addClass(Embedding.dialog, 'empty'); + $.on($('.close', Embedding.dialog), 'click', Embedding.closeFloat); + $.on($('.move', Embedding.dialog), 'mousedown', Embedding.dragEmbed); + $.on($('.jump', Embedding.dialog), 'click', function() { + if (doc.contains(Embedding.lastEmbed)) { + return Header.scrollTo(Embedding.lastEmbed); + } + }); + return $.add(d.body, Embedding.dialog); + }, + closeFloat: function() { + delete Embedding.lastEmbed; + $.addClass(Embedding.dialog, 'empty'); + return $.replace(Embedding.media.firstChild, $.el('div')); + }, + dragEmbed: function() { + var style; + style = Embedding.media.style; + if (Embedding.dragEmbed.mouseup) { + $.off(d, 'mouseup', Embedding.dragEmbed); + Embedding.dragEmbed.mouseup = false; + style.visibility = ''; + return; + } + $.on(d, 'mouseup', Embedding.dragEmbed); + Embedding.dragEmbed.mouseup = true; + return style.visibility = 'hidden'; + }, + title: function(data) { + var key, link, options, post, service, uid; + key = data.key, uid = data.uid, options = data.options, link = data.link, post = data.post; + if (!(service = Embedding.types[key].title)) { + return; + } + $.addClass(link, key.toLowerCase()); + if (service.batchSize) { + (service.queue || (service.queue = [])).push(data); + if (service.queue.length >= service.batchSize) { + return Embedding.flushTitles(service); + } + } else { + if (!$.cache(service.api(uid), (function() { + return Embedding.cb.title(this, data); + }), { + responseType: 'json' + })) { + return $.extend(link, { + innerHTML: "[" + E(key) + "] Title Link Blocked (are you using NoScript?)" + }); + } + } + }, + flushTitles: function(service) { + var cb, data, j, len, queue; + queue = service.queue; + if (!(queue != null ? queue.length : void 0)) { + return; + } + service.queue = []; + cb = function() { + var data, j, len; + for (j = 0, len = queue.length; j < len; j++) { + data = queue[j]; + Embedding.cb.title(this, data); + } + }; + if (!$.cache(service.api((function() { + var j, len, results; + results = []; + for (j = 0, len = queue.length; j < len; j++) { + data = queue[j]; + results.push(data.uid); + } + return results; + })()), cb, { + responseType: 'json' + })) { + for (j = 0, len = queue.length; j < len; j++) { + data = queue[j]; + $.extend(data.link, { + innerHTML: "[" + E(data.key) + "] Title Link Blocked (are you using NoScript?)" + }); + } + } + }, + cb: { + toggle: function(e) { + var div; + if (e != null) { + e.preventDefault(); + } + if (Conf['Floating Embeds']) { + if (!(div = Embedding.media.firstChild)) { + return; + } + $.replace(div, Embedding.cb.embed(this)); + Embedding.lastEmbed = Get.postFromNode(this).nodes.root; + $.rmClass(Embedding.dialog, 'empty'); + return; + } + if ($.hasClass(this, "embedded")) { + $.rm(this.nextElementSibling); + this.textContent = '(embed)'; + } else { + $.after(this, Embedding.cb.embed(this)); + this.textContent = '(unembed)'; + } + return $.toggleClass(this, 'embedded'); + }, + embed: function(a) { + var container, el, type; + container = $.el('div'); + $.add(container, el = (type = Embedding.types[a.dataset.key]).el(a)); + el.style.cssText = type.style != null ? type.style : 'border: none; width: 640px; height: 360px;'; + return container; + }, + title: function(req, data) { + var base1, j, k, key, len, len1, link, link2, options, post, post2, ref, ref1, service, status, text, uid; + key = data.key, uid = data.uid, options = data.options, link = data.link, post = data.post; + status = req.status; + service = Embedding.types[key].title; + text = "[" + key + "] " + ((function() { + switch (status) { + case 200: + case 304: + return service.text(req.response, uid); + case 404: + return "Not Found"; + case 403: + return "Forbidden or Private"; + default: + return status + "'d"; + } + })()); + link.dataset.original = link.textContent; + link.textContent = text; + ref = post.clones; + for (j = 0, len = ref.length; j < len; j++) { + post2 = ref[j]; + ref1 = $$('a.linkify', post2.nodes.comment); + for (k = 0, len1 = ref1.length; k < len1; k++) { + link2 = ref1[k]; + if (!(link2.href === link.href)) { + continue; + } + if ((base1 = link2.dataset).original == null) { + base1.original = link2.textContent; + } + link2.textContent = text; + } + } + } + }, + ordered_types: [ + { + key: 'audio', + regExp: /\.(?:mp3|ogg|wav)(?:\?|$)/i, + style: '', + el: function(a) { + return $.el('audio', { + controls: true, + preload: 'auto', + src: a.dataset.href + }); + } + }, { + key: 'Dailymotion', + regExp: /^\w+:\/\/(?:(?:www\.)?dailymotion\.com\/(?:embed\/)?video|dai\.ly)\/([A-Za-z0-9]+)[^?]*(.*)/, + el: function(a) { + var el, options, start; + options = (start = a.dataset.options.match(/[?&](start=\d+)/)) ? "?" + start[1] : ''; + el = $.el('iframe', { + src: "//www.dailymotion.com/embed/video/" + a.dataset.uid + options + }); + el.setAttribute("allowfullscreen", "true"); + return el; + }, + title: { + api: function(uid) { + return "https://api.dailymotion.com/video/" + uid; + }, + text: function(_) { + return _.title; + } + } + }, { + key: 'Gist', + regExp: /^\w+:\/\/gist\.github\.com\/(?:[\w\-]+\/)?(\w+)/, + el: function(a) { + var content, el; + el = $.el('iframe'); + el.setAttribute('sandbox', 'allow-scripts'); + content = { + innerHTML: "" + E(a.dataset.uid) + "" + }; + el.src = E.url(content); + return el; + }, + title: { + api: function(uid) { + return "https://api.github.com/gists/" + uid; + }, + text: function(arg) { + var file, files; + files = arg.files; + for (file in files) { + if (files.hasOwnProperty(file)) { + return file; + } + } + } + } + }, { + key: 'image', + regExp: /\.(?:gif|png|jpg|jpeg|bmp)(?:\?|$)/i, + style: '', + el: function(a) { + return $.el('div', { + innerHTML: "" + }); + } + }, { + key: 'InstallGentoo', + regExp: /^\w+:\/\/paste\.installgentoo\.com\/view\/(?:raw\/|download\/|embed\/)?(\w+)/, + el: function(a) { + return $.el('iframe', { + src: "https://paste.installgentoo.com/view/embed/" + a.dataset.uid + }); + } + }, { + key: 'Twitter', + regExp: /^\w+:\/\/(?:www\.)?twitter\.com\/(\w+\/status\/\d+)/, + el: function(a) { + return $.el('iframe', { + src: "https://twitframe.com/show?url=https://twitter.com/" + a.dataset.uid + }); + } + }, { + key: 'LiveLeak', + regExp: /^\w+:\/\/(?:\w+\.)?liveleak\.com\/.*\?.*i=(\w+)/, + httpOnly: true, + el: function(a) { + var el; + el = $.el('iframe', { + src: "http://www.liveleak.com/ll_embed?i=" + a.dataset.uid + }); + el.setAttribute("allowfullscreen", "true"); + return el; + } + }, { + key: 'Pastebin', + regExp: /^\w+:\/\/(?:\w+\.)?pastebin\.com\/(?!u\/)(?:[\w\.]+\?i\=)?(\w+)/, + httpOnly: true, + el: function(a) { + var div; + return div = $.el('iframe', { + src: "http://pastebin.com/embed_iframe.php?i=" + a.dataset.uid + }); + } + }, { + key: 'Gfycat', + regExp: /^\w+:\/\/(?:www\.)?gfycat\.com\/(?:iframe\/)?(\w+)/, + el: function(a) { + var div; + return div = $.el('iframe', { + src: "//gfycat.com/iframe/" + a.dataset.uid + }); + } + }, { + key: 'SoundCloud', + regExp: /^\w+:\/\/(?:www\.)?(?:soundcloud\.com\/|snd\.sc\/)([\w\-\/]+)/, + style: 'border: 0; width: 500px; height: 400px;', + el: function(a) { + return $.el('iframe', { + src: "https://w.soundcloud.com/player/?visual=true&show_comments=false&url=https%3A%2F%2Fsoundcloud.com%2F" + (encodeURIComponent(a.dataset.uid)) + }); + }, + title: { + api: function(uid) { + return "//soundcloud.com/oembed?format=json&url=https%3A%2F%2Fsoundcloud.com%2F" + (encodeURIComponent(uid)); + }, + text: function(_) { + return _.title; + } + } + }, { + key: 'StrawPoll', + regExp: /^\w+:\/\/(?:www\.)?strawpoll\.me\/(?:embed_\d+\/)?(\d+(?:\/r)?)/, + style: 'border: 0; width: 600px; height: 406px;', + el: function(a) { + return $.el('iframe', { + src: "//strawpoll.me/embed_1/" + a.dataset.uid + }); + } + }, { + key: 'TwitchTV', + regExp: /^\w+:\/\/(?:www\.)?twitch\.tv\/(\w[^#\&\?]*)/, + style: "border: none; width: 620px; height: 378px;", + el: function(a) { + var _, channel, flashvars, id, idprefix, j, len, obj, part, ref, result, seconds, start, type; + if (result = /(\w+)\/([bcv])\/(\d+)/i.exec(a.dataset.uid)) { + _ = result[0], channel = result[1], type = result[2], id = result[3]; + idprefix = type === 'b' ? 'a' : type; + flashvars = "channel=" + channel + "&start_volume=25&auto_play=false&videoId=" + idprefix + id; + if (start = a.dataset.href.match(/\bt=(\w+)/)) { + seconds = 0; + ref = start[1].match(/\d+[hms]/g); + for (j = 0, len = ref.length; j < len; j++) { + part = ref[j]; + seconds += +part.slice(0, -1) * { + 'h': 3600, + 'm': 60, + 's': 1 + }[part.slice(-1)]; + } + flashvars += "&initial_time=" + seconds; + } + } else { + channel = (/(\w+)/.exec(a.dataset.uid))[0]; + flashvars = "channel=" + channel + "&start_volume=25&auto_play=false"; + } + obj = $.el('object', { + data: '//www-cdn.jtvnw.net/swflibs/TwitchPlayer.swf' + }); + $.extend(obj, { + innerHTML: "" + }); + obj.children[1].value = flashvars; + return obj; + } + }, { + key: 'Vocaroo', + regExp: /^\w+:\/\/(?:www\.)?vocaroo\.com\/i\/(\w+)/, + style: '', + el: function(a) { + var el, type; + el = $.el('audio', { + controls: true, + preload: 'auto' + }); + type = el.canPlayType('audio/webm') ? 'webm' : 'mp3'; + el.src = "http://vocaroo.com/media_command.php?media=" + a.dataset.uid + "&command=download_" + type; + return el; + } + }, { + key: 'Vimeo', + regExp: /^\w+:\/\/(?:www\.)?vimeo\.com\/(\d+)/, + el: function(a) { + return $.el('iframe', { + src: "//player.vimeo.com/video/" + a.dataset.uid + "?wmode=opaque" + }); + }, + title: { + api: function(uid) { + return "https://vimeo.com/api/oembed.json?url=https://vimeo.com/" + uid; + }, + text: function(_) { + return _.title; + } + } + }, { + key: 'Vine', + regExp: /^\w+:\/\/(?:www\.)?vine\.co\/v\/(\w+)/, + style: 'border: none; width: 500px; height: 500px;', + el: function(a) { + return $.el('iframe', { + src: "https://vine.co/v/" + a.dataset.uid + "/card" + }); + } + }, { + key: 'YouTube', + regExp: /^\w+:\/\/(?:youtu.be\/|[\w.]*youtube[\w.]*\/.*(?:v=|\bembed\/|\bv\/))([\w\-]{11})(.*)/, + el: function(a) { + var el, start; + start = a.dataset.options.match(/\b(?:star)?t\=(\w+)/); + if (start) { + start = start[1]; + } + if (start && !/^\d+$/.test(start)) { + start += ' 0h0m0s'; + start = 3600 * start.match(/(\d+)h/)[1] + 60 * start.match(/(\d+)m/)[1] + 1 * start.match(/(\d+)s/)[1]; + } + el = $.el('iframe', { + src: "//www.youtube.com/embed/" + a.dataset.uid + "?wmode=opaque" + (start ? '&start=' + start : '') + }); + el.setAttribute("allowfullscreen", "true"); + return el; + }, + title: { + batchSize: 50, + api: function(uids) { + var ids, key; + ids = encodeURIComponent(uids.join(',')); + key = 'AIzaSyB5_zaen_-46Uhz1xGR-lz1YoUMHqCD6CE'; + return "https://www.googleapis.com/youtube/v3/videos?part=snippet&id=" + ids + "&fields=items%28id%2Csnippet%28title%29%29&key=" + key; + }, + text: function(data, uid) { + var item, j, len, ref; + ref = data.items; + for (j = 0, len = ref.length; j < len; j++) { + item = ref[j]; + if (item.id === uid) { + return item.snippet.title; + } + } + return 'Not Found'; + } + } + }, { + key: 'Loopvid', + regExp: /^\w+:\/\/(?:www\.)?loopvid.appspot.com\/#?((?:pf|kd|lv|gd|gh|db|dx|nn|cp|wu|ig|ky|mf|pc|gc)\/[\w\-\/]+(,[\w\-\/]+)*|fc\/\w+\/\d+)/, + style: 'max-width: 80vw; max-height: 80vh;', + el: function(a) { + var _, base, el, host, j, k, len, len1, name, names, ref, ref1, type, types, url; + el = $.el('video', { + controls: true, + preload: 'auto', + loop: true + }); + ref = a.dataset.uid.match(/(\w+)\/(.*)/), _ = ref[0], host = ref[1], names = ref[2]; + types = (function() { + switch (host) { + case 'gd': + case 'wu': + case 'fc': + return ['']; + case 'gc': + return ['giant', 'fat', 'zippy']; + default: + return ['.webm', '.mp4']; + } + })(); + ref1 = names.split(','); + for (j = 0, len = ref1.length; j < len; j++) { + name = ref1[j]; + for (k = 0, len1 = types.length; k < len1; k++) { + type = types[k]; + base = "" + name + type; + url = (function() { + switch (host) { + case 'pf': + return "https://web.archive.org/web/2/http://a.pomf.se/" + base; + case 'kd': + return "http://kastden.org/loopvid/" + base; + case 'lv': + return "http://kastden.org/_loopvid_media/lv/" + base; + case 'gd': + return "https://docs.google.com/uc?export=download&id=" + base; + case 'gh': + return "https://googledrive.com/host/" + base; + case 'db': + return "https://dl.dropboxusercontent.com/u/" + base; + case 'dx': + return "https://dl.dropboxusercontent.com/" + base; + case 'nn': + return "http://naenara.eu/loopvids/" + base; + case 'cp': + return "https://copy.com/" + base; + case 'wu': + return "http://webmup.com/" + base + "/vid.webm"; + case 'ig': + return "https://i.imgur.com/" + base; + case 'ky': + return "https://kiyo.me/" + base; + case 'mf': + return "https://d.maxfile.ro/" + base; + case 'pc': + return "http://a.pomf.cat/" + base; + case 'fc': + return "//i.4cdn.org/" + base + ".webm"; + case 'gc': + return "https://" + type + ".gfycat.com/" + name + ".webm"; + } + })(); + $.add(el, $.el('source', { + src: url + })); + } + } + return el; + } + }, { + key: 'Clyp', + regExp: /^\w+:\/\/(?:www\.)?clyp\.it\/(\w+)/, + style: '', + el: function(a) { + var el, type; + el = $.el('audio', { + controls: true, + preload: 'auto' + }); + type = el.canPlayType('audio/ogg') ? 'ogg' : 'mp3'; + el.src = "https://clyp.it/" + a.dataset.uid + "." + type; + return el; + } + }, { + key: 'Loopvid-dummy', + regExp: /^\w+:\/\/(?:www\.)?loopvid.appspot.com\//, + dummy: true + }, { + key: 'MediaFire-dummy', + regExp: /^\w+:\/\/(?:www\.)?mediafire.com\//, + dummy: true + }, { + key: 'video', + regExp: /\.(?:ogv|webm|mp4)(?:\?|$)/i, + style: 'max-width: 80vw; max-height: 80vh;', + el: function(a) { + return $.el('video', { + controls: true, + preload: 'auto', + src: a.dataset.href, + loop: /^https?:\/\/i\.4cdn\.org\//.test(a.dataset.href) + }); + } + } + ] + }; + + return Embedding; + +}).call(this); + +Linkify = (function() { + var Linkify; + + Linkify = { + init: function() { + var ref; + if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Linkify']) { + return; + } + if (Conf['Comment Expansion']) { + ExpandComment.callbacks.push(this.node); + } + Callbacks.Post.push({ + name: 'Linkify', + cb: this.node + }); + Callbacks.CatalogThread.push({ + name: 'Linkify', + cb: this.catalogNode + }); + return Embedding.init(); + }, + node: function() { + var j, k, len, len1, link, links, ref; + if (this.isClone) { + return Embedding.events(this); + } + if (!Linkify.regString.test(this.info.comment)) { + return; + } + ref = $$('a[href^="http://i.4cdn.org/"], a[href^="https://i.4cdn.org/"]', this.nodes.comment); + for (j = 0, len = ref.length; j < len; j++) { + link = ref[j]; + $.addClass(link, 'linkify'); + Embedding.process(link, this); + } + links = Linkify.process(this.nodes.comment); + for (k = 0, len1 = links.length; k < len1; k++) { + link = links[k]; + Embedding.process(link, this); + } + }, + catalogNode: function() { + if (!Linkify.regString.test(this.thread.OP.info.comment)) { + return; + } + return Linkify.process(this.nodes.comment); + }, + process: function(node) { + var data, end, endNode, i, index, length, links, part1, part2, ref, ref1, result, saved, snapshot, space, test, word; + test = /[^\s"]+/g; + space = /[\s"]/; + snapshot = $.X('.//br|.//text()', node); + i = 0; + links = []; + while (node = snapshot.snapshotItem(i++)) { + data = node.data; + if (!data || node.parentElement.nodeName === "A") { + continue; + } + while (result = test.exec(data)) { + index = result.index; + endNode = node; + word = result[0]; + if ((length = index + word.length) === data.length) { + test.lastIndex = 0; + while ((saved = snapshot.snapshotItem(i++))) { + if (saved.nodeName === 'BR') { + if ((part1 = word.match(/(https?:\/\/)?([a-z\d-]+\.)*[a-z\d-]+$/i)) && (part2 = (ref = snapshot.snapshotItem(i)) != null ? (ref1 = ref.data) != null ? ref1.match(/^(\.[a-z\d-]+)*\//i) : void 0 : void 0) && (part1[0] + part2[0]).search(Linkify.regString) === 0) { + continue; + } else { + break; + } + } + endNode = saved; + data = saved.data; + if (end = space.exec(data)) { + word += data.slice(0, end.index); + test.lastIndex = length = end.index; + i--; + break; + } else { + length = data.length; + word += data; + } + } + } + if (Linkify.regString.test(word)) { + links.push(Linkify.makeRange(node, endNode, index, length)); + } + if (!(test.lastIndex && node === endNode)) { + break; + } + } + } + i = links.length; + while (i--) { + links[i] = Linkify.makeLink(links[i]); + } + return links; + }, + regString: /((https?|mailto|git|magnet|ftp|irc):([a-z\d%\/?])|([-a-z\d]+[.])+(aero|asia|biz|cat|com|coop|dance|info|int|jobs|mobi|moe|museum|name|net|org|post|pro|tel|travel|xxx|xyz|edu|gov|mil|[a-z]{2})([:\/]|(?![^\s"]))|[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}\.[\d]{1,3}|[-\w\d.@]+@[a-z\d.-]+\.[a-z\d])/i, + makeRange: function(startNode, endNode, startOffset, endOffset) { + var range; + range = document.createRange(); + range.setStart(startNode, startOffset); + range.setEnd(endNode, endOffset); + return range; + }, + makeLink: function(range) { + var a, encodedDomain, i, t, text; + text = range.toString(); + i = text.search(Linkify.regString); + if (i > 0) { + text = text.slice(i); + while (range.startOffset + i >= range.startContainer.data.length) { + i--; + } + if (i) { + range.setStart(range.startContainer, range.startOffset + i); + } + } + i = 0; + while (/[)\]}>.,]/.test(t = text.charAt(text.length - (1 + i)))) { + if (!(/[.,]/.test(t) || (text.match(/[()\[\]{}<>]/g)).length % 2)) { + break; + } + i++; + } + if (i) { + text = text.slice(0, -i); + while (range.endOffset - i < 0) { + i--; + } + if (i) { + range.setEnd(range.endContainer, range.endOffset - i); + } + } + if (!/((mailto|magnet):|.+:\/\/)/.test(text)) { + text = (/@/.test(text) ? 'mailto:' : 'http://') + text; + } + if (encodedDomain = text.match(/^(https?:\/\/[^\/]*%[0-9a-f]{2})(.*)$/i)) { + text = encodedDomain[1].replace(/%([0-9a-f]{2})/ig, function(x, y) { + if (y === '25') { + return x; + } else { + return String.fromCharCode(parseInt(y, 16)); + } + }) + encodedDomain[2]; + } + a = $.el('a', { + className: 'linkify', + rel: 'nofollow noreferrer', + target: '_blank', + href: text + }); + $.add(a, range.extractContents()); + range.insertNode(a); + return a; + } + }; + + return Linkify; + +}).call(this); + +ArchiveLink = (function() { + var ArchiveLink; + + ArchiveLink = { + init: function() { + var div, entry, i, len, ref, ref1, type; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Archive Link'])) { + return; + } + div = $.el('div', { + textContent: 'Archive' + }); + entry = { + el: div, + order: 90, + open: function(arg) { + var ID, board, thread; + ID = arg.ID, thread = arg.thread, board = arg.board; + return !!Redirect.to('thread', { + postID: ID, + threadID: thread.ID, + boardID: board.ID + }); + }, + subEntries: [] + }; + ref1 = [['Post', 'post'], ['Name', 'name'], ['Tripcode', 'tripcode'], ['Capcode', 'capcode'], ['Subject', 'subject'], ['Filename', 'filename'], ['Image MD5', 'MD5']]; + for (i = 0, len = ref1.length; i < len; i++) { + type = ref1[i]; + entry.subEntries.push(this.createSubEntry(type[0], type[1])); + } + return Menu.menu.addEntry(entry); + }, + createSubEntry: function(text, type) { + var el, open; + el = $.el('a', { + textContent: text, + target: '_blank' + }); + open = type === 'post' ? function(arg) { + var ID, board, thread; + ID = arg.ID, thread = arg.thread, board = arg.board; + el.href = Redirect.to('thread', { + postID: ID, + threadID: thread.ID, + boardID: board.ID + }); + return true; + } : function(post) { + var value; + value = Filter[type](post); + if (!value) { + return false; + } + el.href = Redirect.to('search', { + boardID: post.board.ID, + type: type, + value: value, + isSearch: true + }); + return true; + }; + return { + el: el, + open: open + }; + } + }; + + return ArchiveLink; + +}).call(this); + +DeleteLink = (function() { + var DeleteLink; + + DeleteLink = { + auto: [{}, {}], + init: function() { + var div, fileEl, fileEntry, postEl, postEntry, ref; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Delete Link'])) { + return; + } + div = $.el('div', { + className: 'delete-link', + textContent: 'Delete' + }); + postEl = $.el('a', { + className: 'delete-post', + href: 'javascript:;' + }); + fileEl = $.el('a', { + className: 'delete-file', + href: 'javascript:;' + }); + this.nodes = { + menu: div.firstChild, + links: [postEl, fileEl] + }; + postEntry = { + el: postEl, + open: function() { + postEl.textContent = DeleteLink.linkText(false); + $.on(postEl, 'click', DeleteLink.toggle); + return true; + } + }; + fileEntry = { + el: fileEl, + open: function(arg) { + var file; + file = arg.file; + if (!file || file.isDead) { + return false; + } + fileEl.textContent = DeleteLink.linkText(true); + $.on(fileEl, 'click', DeleteLink.toggle); + return true; + } + }; + return Menu.menu.addEntry({ + el: div, + order: 40, + open: function(post) { + if (post.isDead) { + return false; + } + DeleteLink.post = post; + DeleteLink.nodes.menu.textContent = DeleteLink.menuText(); + DeleteLink.cooldown.start(post); + return true; + }, + subEntries: [postEntry, fileEntry] + }); + }, + menuText: function() { + var seconds; + if (seconds = DeleteLink.cooldown.seconds[DeleteLink.post.fullID]) { + return "Delete (" + seconds + ")"; + } else { + return 'Delete'; + } + }, + linkText: function(fileOnly) { + var text; + text = fileOnly ? 'File' : 'Post'; + if (DeleteLink.auto[+fileOnly][DeleteLink.post.fullID]) { + text = "Deleting " + (text.toLowerCase()) + "..."; + } + return text; + }, + toggle: function() { + var auto, fileOnly, post; + post = DeleteLink.post; + fileOnly = $.hasClass(this, 'delete-file'); + auto = DeleteLink.auto[+fileOnly]; + if (auto[post.fullID]) { + delete auto[post.fullID]; + } else { + auto[post.fullID] = true; + } + this.textContent = DeleteLink.linkText(fileOnly); + if (!DeleteLink.cooldown.seconds[post.fullID]) { + return DeleteLink["delete"](post, fileOnly); + } + }, + "delete": function(post, fileOnly) { + var form, link; + link = DeleteLink.nodes.links[+fileOnly]; + delete DeleteLink.auto[+fileOnly][post.fullID]; + if (post.fullID === DeleteLink.post.fullID) { + $.off(link, 'click', DeleteLink.toggle); + } + form = { + mode: 'usrdel', + onlyimgdel: fileOnly, + pwd: QR.persona.getPassword() + }; + form[post.ID] = 'delete'; + return $.ajax($.id('delform').action.replace("/" + g.BOARD + "/", "/" + post.board + "/"), { + responseType: 'document', + withCredentials: true, + onload: function() { + return DeleteLink.load(link, post, fileOnly, this.response); + }, + onerror: function() { + return DeleteLink.error(link, post); + } + }, { + form: $.formData(form) + }); + }, + load: function(link, post, fileOnly, resDoc) { + var el, msg; + link.textContent = DeleteLink.linkText(fileOnly); + if (resDoc.title === '4chan - Banned') { + el = $.el('span', { + innerHTML: "You can't delete posts because you are banned." + }); + return new Notice('warning', el, 20); + } else if (msg = resDoc.getElementById('errmsg')) { + new Notice('warning', msg.textContent, 20); + if (post.fullID === DeleteLink.post.fullID) { + $.on(link, 'click', DeleteLink.toggle); + } + if (QR.cooldown.data && Conf['Cooldown'] && /\bwait\b/i.test(msg.textContent)) { + DeleteLink.cooldown.start(post, 5); + DeleteLink.auto[+fileOnly][post.fullID] = true; + return DeleteLink.nodes.links[+fileOnly].textContent = DeleteLink.linkText(fileOnly); + } + } else { + if (!fileOnly) { + QR.cooldown["delete"](post); + } + if (resDoc.title === 'Updating index...') { + (post.origin || post).kill(fileOnly); + } + if (post.fullID === DeleteLink.post.fullID) { + return link.textContent = 'Deleted'; + } + } + }, + error: function(link, post) { + new Notice('warning', 'Connection error, please retry.', 20); + if (post.fullID === DeleteLink.post.fullID) { + return $.on(link, 'click', DeleteLink.toggle); + } + }, + cooldown: { + seconds: {}, + start: function(post, seconds) { + if (DeleteLink.cooldown.seconds[post.fullID] != null) { + return; + } + if (seconds == null) { + seconds = QR.cooldown.secondsDeletion(post); + } + if (seconds > 0) { + DeleteLink.cooldown.seconds[post.fullID] = seconds; + return DeleteLink.cooldown.count(post); + } + }, + count: function(post) { + var fileOnly, i, len, ref; + if (post.fullID === DeleteLink.post.fullID) { + DeleteLink.nodes.menu.textContent = DeleteLink.menuText(); + } + if (DeleteLink.cooldown.seconds[post.fullID] > 0 && Conf['Cooldown']) { + DeleteLink.cooldown.seconds[post.fullID]--; + setTimeout(DeleteLink.cooldown.count, 1000, post); + } else { + delete DeleteLink.cooldown.seconds[post.fullID]; + ref = [false, true]; + for (i = 0, len = ref.length; i < len; i++) { + fileOnly = ref[i]; + if (DeleteLink.auto[+fileOnly][post.fullID]) { + DeleteLink["delete"](post, fileOnly); + } + } + } + } + } + }; + + return DeleteLink; + +}).call(this); + +DownloadLink = (function() { + var DownloadLink; + + DownloadLink = { + init: function() { + var a, ref; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Download Link'])) { + return; + } + a = $.el('a', { + className: 'download-link', + textContent: 'Download file' + }); + $.on(a, 'click', ImageCommon.download); + return Menu.menu.addEntry({ + el: a, + order: 100, + open: function(arg) { + var file; + file = arg.file; + if (!file) { + return false; + } + a.href = file.url; + a.download = file.name; + return true; + } + }); + } + }; + + return DownloadLink; + +}).call(this); + +Menu = (function() { + var Menu; + + Menu = { + init: function() { + var ref; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'])) { + return; + } + this.button = $.el('a', { + className: 'menu-button', + href: 'javascript:;' + }); + $.extend(this.button, { + innerHTML: "" + }); + this.menu = new UI.Menu('post'); + Callbacks.Post.push({ + name: 'Menu', + cb: this.node + }); + return Callbacks.CatalogThread.push({ + name: 'Menu', + cb: this.catalogNode + }); + }, + node: function() { + if (this.isClone) { + Menu.makeButton(this, $('.menu-button', this.nodes.info)); + return; + } + return $.add(this.nodes.info, Menu.makeButton(this)); + }, + catalogNode: function() { + return $.after(this.nodes.icons, Menu.makeButton(this.thread.OP)); + }, + makeButton: function(post, button) { + button || (button = Menu.button.cloneNode(true)); + $.on(button, 'click', function(e) { + return Menu.menu.toggle(e, this, post); + }); + return button; + } + }; + + return Menu; + +}).call(this); + +ReportLink = (function() { + var ReportLink; + + ReportLink = { + init: function() { + var a, ref; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Report Link'])) { + return; + } + a = $.el('a', { + className: 'report-link', + href: 'javascript:;' + }); + $.on(a, 'click', ReportLink.report); + return Menu.menu.addEntry({ + el: a, + order: 10, + open: function(post) { + if (!(post.isDead || (post.thread.isDead && !post.thread.isArchived))) { + a.textContent = 'Report'; + ReportLink.url = "//sys.4chan.org/" + post.board + "/imgboard.php?mode=report&no=" + post; + if ((Conf['Use Recaptcha v1 in Reports'] && Main.jsEnabled) || d.cookie.indexOf('pass_enabled=1') >= 0) { + ReportLink.url += '&altc=1'; + ReportLink.dims = 'width=350,height=275'; + } else { + ReportLink.dims = 'width=400,height=550'; + } + } else if (Conf['Archive Report']) { + a.textContent = 'Report to archive'; + ReportLink.url = Redirect.to('report', { + boardID: post.board.ID, + postID: post.ID + }); + ReportLink.dims = 'width=700,height=475'; + } else { + ReportLink.url = ''; + } + return !!ReportLink.url; + } + }); + }, + report: function() { + var dims, id, set, url; + url = ReportLink.url, dims = ReportLink.dims; + id = Date.now(); + set = "toolbar=0,scrollbars=1,location=0,status=1,menubar=0,resizable=1," + dims; + return window.open(url, id, set); + } + }; + + return ReportLink; + +}).call(this); + +AntiAutoplay = (function() { + var AntiAutoplay; + + AntiAutoplay = { + init: function() { + var audio, i, len, ref; + if (!Conf['Disable Autoplaying Sounds']) { + return; + } + $.addClass(doc, 'anti-autoplay'); + ref = $$('audio[autoplay]', doc); + for (i = 0, len = ref.length; i < len; i++) { + audio = ref[i]; + this.stop(audio); + } + window.addEventListener('loadstart', ((function(_this) { + return function(e) { + return _this.stop(e.target); + }; + })(this)), true); + Callbacks.Post.push({ + name: 'Disable Autoplaying Sounds', + cb: this.node + }); + Callbacks.CatalogThread.push({ + name: 'Disable Autoplaying Sounds', + cb: this.node + }); + return $.ready((function(_this) { + return function() { + return _this.process(d.body); + }; + })(this)); + }, + stop: function(audio) { + if (!audio.autoplay) { + return; + } + audio.pause(); + audio.autoplay = false; + if (audio.controls) { + return; + } + audio.controls = true; + return $.addClass(audio, 'controls-added'); + }, + node: function() { + return AntiAutoplay.process(this.nodes.root); + }, + process: function(root) { + var i, iframe, j, len, len1, object, ref, ref1; + ref = $$('iframe[src*="youtube"][src*="autoplay=1"]', root); + for (i = 0, len = ref.length; i < len; i++) { + iframe = ref[i]; + iframe.src = iframe.src.replace(/\?autoplay=1&?/, '?').replace('&autoplay=1', ''); + $.addClass(iframe, 'autoplay-removed'); + } + ref1 = $$('object[data*="youtube"][data*="autoplay=1"]', root); + for (j = 0, len1 = ref1.length; j < len1; j++) { + object = ref1[j]; + object.data = object.data.replace(/\?autoplay=1&?/, '?').replace('&autoplay=1', ''); + $.addClass(object, 'autoplay-removed'); + } + } + }; + + return AntiAutoplay; + +}).call(this); + +Banner = (function() { + var Banner, + slice = [].slice; + + Banner = { + banners: ["0.jpg","1.jpg","2.jpg","4.jpg","6.jpg","7.jpg","8.jpg","9.jpg","10.jpg","11.jpg","12.jpg","13.jpg","14.jpg","16.jpg","17.jpg","18.jpg","19.jpg","20.jpg","21.jpg","22.jpg","24.jpg","25.jpg","26.jpg","28.jpg","29.jpg","33.jpg","38.jpg","39.jpg","43.jpg","44.jpg","45.jpg","46.jpg","47.jpg","52.jpg","54.jpg","57.jpg","59.jpg","60.jpg","61.jpg","64.jpg","66.jpg","67.jpg","69.jpg","71.jpg","72.jpg","76.jpg","77.jpg","81.jpg","82.jpg","83.jpg","84.jpg","88.jpg","90.jpg","91.jpg","96.jpg","98.jpg","99.jpg","100.jpg","104.jpg","106.jpg","116.jpg","119.jpg","137.jpg","140.jpg","148.jpg","149.jpg","150.jpg","154.jpg","156.jpg","157.jpg","158.jpg","159.jpg","161.jpg","162.jpg","164.jpg","165.jpg","166.jpg","167.jpg","168.jpg","169.jpg","170.jpg","171.jpg","172.jpg","173.jpg","174.jpg","175.jpg","176.jpg","178.jpg","179.jpg","180.jpg","181.jpg","182.jpg","183.jpg","186.jpg","189.jpg","190.jpg","192.jpg","193.jpg","194.jpg","197.jpg","198.jpg","200.jpg","201.jpg","202.jpg","203.jpg","205.jpg","206.jpg","207.jpg","208.jpg","210.jpg","213.jpg","214.jpg","215.jpg","216.jpg","218.jpg","219.jpg","220.jpg","221.jpg","222.jpg","223.jpg","224.jpg","227.jpg","0.png","1.png","2.png","3.png","5.png","6.png","9.png","10.png","11.png","12.png","14.png","16.png","19.png","20.png","21.png","22.png","23.png","24.png","26.png","27.png","28.png","29.png","30.png","31.png","32.png","33.png","34.png","37.png","39.png","40.png","41.png","42.png","43.png","44.png","45.png","48.png","49.png","50.png","51.png","52.png","53.png","57.png","58.png","59.png","64.png","66.png","67.png","68.png","69.png","70.png","71.png","72.png","76.png","78.png","79.png","81.png","82.png","85.png","86.png","87.png","89.png","95.png","98.png","100.png","101.png","102.png","105.png","106.png","107.png","109.png","110.png","111.png","112.png","113.png","114.png","115.png","116.png","118.png","119.png","120.png","121.png","122.png","123.png","126.png","128.png","130.png","134.png","136.png","138.png","139.png","140.png","142.png","145.png","146.png","149.png","150.png","151.png","152.png","153.png","154.png","155.png","156.png","157.png","158.png","159.png","160.png","163.png","164.png","165.png","166.png","167.png","168.png","169.png","170.png","171.png","172.png","173.png","174.png","178.png","179.png","180.png","181.png","182.png","184.png","186.png","188.png","190.png","192.png","193.png","194.png","195.png","196.png","197.png","198.png","200.png","202.png","203.png","205.png","206.png","207.png","209.png","212.png","213.png","214.png","216.png","217.png","218.png","219.png","220.png","221.png","222.png","223.png","224.png","225.png","226.png","229.png","231.png","232.png","233.png","234.png","235.png","237.png","238.png","239.png","240.png","241.png","242.png","244.png","245.png","246.png","247.png","248.png","249.png","250.png","253.png","254.png","255.png","256.png","257.png","258.png","259.png","260.png","262.png","268.png","0.gif","1.gif","2.gif","3.gif","4.gif","5.gif","6.gif","7.gif","8.gif","9.gif","10.gif","12.gif","13.gif","14.gif","15.gif","16.gif","18.gif","19.gif","20.gif","21.gif","22.gif","23.gif","24.gif","28.gif","29.gif","30.gif","33.gif","34.gif","35.gif","36.gif","37.gif","39.gif","40.gif","42.gif","44.gif","45.gif","46.gif","48.gif","50.gif","52.gif","54.gif","55.gif","57.gif","58.gif","59.gif","60.gif","61.gif","63.gif","64.gif","66.gif","67.gif","68.gif","69.gif","70.gif","72.gif","73.gif","75.gif","76.gif","77.gif","78.gif","80.gif","81.gif","82.gif","83.gif","86.gif","87.gif","88.gif","92.gif","93.gif","94.gif","95.gif","96.gif","97.gif","98.gif","99.gif","100.gif","101.gif","102.gif","103.gif","104.gif","105.gif","106.gif","108.gif","109.gif","110.gif","111.gif","112.gif","113.gif","115.gif","116.gif","117.gif","118.gif","119.gif","120.gif","122.gif","123.gif","124.gif","127.gif","129.gif","130.gif","131.gif","134.gif","135.gif","136.gif","138.gif","139.gif","141.gif","144.gif","146.gif","148.gif","149.gif","153.gif","154.gif","155.gif","157.gif","158.gif","159.gif","160.gif","161.gif","162.gif","164.gif","166.gif","167.gif","168.gif","169.gif","170.gif","171.gif","172.gif","173.gif","174.gif","175.gif","176.gif","177.gif","178.gif","181.gif","182.gif","183.gif","185.gif","186.gif","187.gif","188.gif","189.gif","190.gif","191.gif","192.gif","193.gif","195.gif","196.gif","197.gif","200.gif","201.gif","202.gif","203.gif","204.gif","205.gif","206.gif","207.gif","208.gif","209.gif","210.gif","211.gif","212.gif","213.gif","214.gif","215.gif","216.gif","217.gif","219.gif","220.gif","221.gif","222.gif","224.gif","225.gif","226.gif","227.gif","228.gif","230.gif","232.gif","233.gif","234.gif","235.gif","238.gif","240.gif","241.gif","243.gif","244.gif","245.gif","246.gif","247.gif","249.gif","250.gif","251.gif","253.gif"], + init: function() { + if (Conf['Custom Board Titles']) { + this.db = new DataBoard('customTitles', null, true); + } + $.asap((function() { + return d.body; + }), function() { + return $.asap((function() { + return $('hr'); + }), Banner.ready); + }); + if (g.BOARD.ID !== 'f') { + return Main.ready(function() { + return $.queueTask(Banner.load); + }); + } + }, + ready: function() { + var banner, children; + banner = $(".boardBanner"); + children = banner.children; + if (g.BOARD.ID !== 'f' && g.VIEW === 'thread' && Conf['Remove Thread Excerpt']) { + Banner.setTitle(children[1].textContent); + } + children[0].title = "Click to change"; + $.on(children[0], 'click', Banner.cb.toggle); + if (Conf['Custom Board Titles']) { + Banner.custom(children[1]); + if (children[2]) { + return Banner.custom(children[2]); + } + } + }, + load: function() { + var bannerCnt, img; + bannerCnt = $.id('bannerCnt'); + if (!bannerCnt.firstChild) { + img = $.el('img', { + alt: '4chan', + src: '//s.4cdn.org/image/title/' + bannerCnt.dataset.src + }); + return $.add(bannerCnt, img); + } + }, + setTitle: function(title) { + if (Unread.title != null) { + Unread.title = title; + return Unread.update(); + } else { + return d.title = title; + } + }, + cb: { + toggle: function() { + var banner, i, ref; + if (!((ref = Banner.choices) != null ? ref.length : void 0)) { + Banner.choices = Banner.banners.slice(); + } + i = Math.floor(Banner.choices.length * Math.random()); + banner = Banner.choices.splice(i, 1); + return $('img', this.parentNode).src = "//s.4cdn.org/image/title/" + banner; + }, + click: function(e) { + var base, br, j, len, name, ref; + if (!(e.ctrlKey || e.metaKey)) { + return; + } + if ((base = Banner.original)[name = this.className] == null) { + base[name] = this.cloneNode(true); + } + this.contentEditable = true; + ref = $$('br', this); + for (j = 0, len = ref.length; j < len; j++) { + br = ref[j]; + $.replace(br, $.tn('\n')); + } + return this.focus(); + }, + keydown: function(e) { + e.stopPropagation(); + if (!e.shiftKey && e.keyCode === 13) { + return this.blur(); + } + }, + blur: function() { + var br, j, len, ref; + ref = $$('br', this); + for (j = 0, len = ref.length; j < len; j++) { + br = ref[j]; + $.replace(br, $.tn('\n')); + } + if (this.textContent = this.textContent.replace(/\n*$/, '')) { + this.contentEditable = false; + return Banner.db.set({ + boardID: g.BOARD.ID, + threadID: this.className, + val: { + title: this.textContent, + orig: Banner.original[this.className].textContent + } + }); + } else { + $.rmAll(this); + $.add(this, slice.call(Banner.original[this.className].cloneNode(true).childNodes)); + return Banner.db["delete"]({ + boardID: g.BOARD.ID, + threadID: this.className + }); + } + } + }, + original: {}, + custom: function(child) { + var className, data, event, items, j, len, ref, string, string2; + className = child.className; + child.title = "Ctrl/\u2318+click to edit board " + (className.slice(5).toLowerCase()); + child.spellcheck = false; + ref = ['click', 'keydown', 'blur']; + for (j = 0, len = ref.length; j < len; j++) { + event = ref[j]; + $.on(child, event, Banner.cb[event]); + } + string = g.BOARD + "." + className; + string2 = string + ".orig"; + items = {}; + items[string] = ''; + items[string2] = child.textContent; + $.get(items, function(items) { + if (items[string]) { + Banner.db.set({ + boardID: g.BOARD.ID, + threadID: className, + val: { + title: items[string], + orig: items[string2] + } + }); + } + return $["delete"]([string, string2]); + }); + if (data = Banner.db.get({ + boardID: g.BOARD.ID, + threadID: className + })) { + if (Conf['Persistent Custom Board Titles'] || data.orig === child.textContent) { + Banner.original[className] = child.cloneNode(true); + return child.textContent = data.title; + } else { + return Banner.db["delete"]({ + boardID: g.BOARD.ID, + threadID: className + }); + } + } + } + }; + + return Banner; + +}).call(this); + +CatalogLinks = (function() { + var CatalogLinks; + + CatalogLinks = { + init: function() { + var el, input, selector; + if ((Conf['External Catalog'] || Conf['JSON Index']) && !(Conf['JSON Index'] && g.VIEW === 'index')) { + selector = (function() { + switch (g.VIEW) { + case 'thread': + case 'archive': + return '.navLinks.desktop > a'; + case 'catalog': + return '.navLinks > :first-child > a'; + case 'index': + return '#ctrl-top > a, .cataloglink > a'; + } + })(); + $.ready(function() { + var catalogLink, i, len, link, ref; + ref = $$(selector); + for (i = 0, len = ref.length; i < len; i++) { + link = ref[i]; + switch (link.pathname.replace(/\/+/g, '/')) { + case "/" + g.BOARD + "/": + if (Conf['JSON Index']) { + link.textContent = 'Index'; + } + link.href = CatalogLinks.index(); + break; + case "/" + g.BOARD + "/catalog": + link.href = CatalogLinks.catalog(); + } + if (g.VIEW === 'catalog' && Conf['JSON Index'] && Conf['Use 4chan X Catalog']) { + catalogLink = link.parentNode.cloneNode(true); + catalogLink.firstElementChild.textContent = '4chan X Catalog'; + catalogLink.firstElementChild.href = CatalogLinks.catalog(); + $.after(link.parentNode, [$.tn(' '), catalogLink]); + } + } + }); + } + if (Conf['JSON Index'] && Conf['Use 4chan X Catalog']) { + Callbacks.Post.push({ + name: 'Catalog Link Rewrite', + cb: this.node + }); + Callbacks.CatalogThread.push({ + name: 'Catalog Link Rewrite', + cb: this.node + }); + } + if (Conf['Catalog Links']) { + CatalogLinks.el = el = UI.checkbox('Header catalog links', 'Catalog Links'); + el.id = 'toggleCatalog'; + input = $('input', el); + $.on(input, 'change', this.toggle); + $.sync('Header catalog links', CatalogLinks.set); + return Header.menu.addEntry({ + el: el, + order: 95 + }); + } + }, + node: function() { + var a, i, len, m, ref; + ref = $$('a', this.nodes.comment); + for (i = 0, len = ref.length; i < len; i++) { + a = ref[i]; + if (m = a.href.match(/^https?:\/\/boards\.4chan\.org\/([^\/]+)\/catalog(#s=.*)?/)) { + a.href = "//boards.4chan.org/" + m[1] + "/" + (m[2] || '#catalog'); + } + } + }, + initBoardList: function() { + if (!CatalogLinks.el) { + return; + } + return CatalogLinks.set(Conf['Header catalog links']); + }, + toggle: function() { + $.event('CloseMenu'); + $.set('Header catalog links', this.checked); + return CatalogLinks.set(this.checked); + }, + set: function(useCatalog) { + var a, board, i, len, ref, ref1; + ref = $$('a:not([data-only])', Header.boardList).concat($$('a', Header.bottomBoardList)); + for (i = 0, len = ref.length; i < len; i++) { + a = ref[i]; + if (((ref1 = a.hostname) !== 'boards.4chan.org' && ref1 !== 'catalog.neet.tv') || !(board = a.pathname.split('/')[1]) || (board === 'f' || board === 'status' || board === '4chan') || a.pathname.split('/')[2] === 'archive' || $.hasClass(a, 'external')) { + continue; + } + a.href = useCatalog ? CatalogLinks.catalog(board) : "/" + board + "/"; + if (a.dataset.indexOptions && a.hostname === 'boards.4chan.org' && a.pathname.split('/')[2] === '') { + a.href += (a.hash ? '/' : '#') + a.dataset.indexOptions; + } + } + CatalogLinks.el.title = "Turn catalog links " + (useCatalog ? 'off' : 'on') + "."; + return $('input', CatalogLinks.el).checked = useCatalog; + }, + catalog: function(board) { + if (board == null) { + board = g.BOARD.ID; + } + if (Conf['External Catalog'] && (board === 'a' || board === 'c' || board === 'g' || board === 'biz' || board === 'k' || board === 'm' || board === 'o' || board === 'p' || board === 'v' || board === 'vg' || board === 'vr' || board === 'w' || board === 'wg' || board === 'cm' || board === '3' || board === 'adv' || board === 'an' || board === 'asp' || board === 'cgl' || board === 'ck' || board === 'co' || board === 'diy' || board === 'fa' || board === 'fit' || board === 'gd' || board === 'int' || board === 'jp' || board === 'lit' || board === 'mlp' || board === 'mu' || board === 'n' || board === 'out' || board === 'po' || board === 'sci' || board === 'sp' || board === 'tg' || board === 'toy' || board === 'trv' || board === 'tv' || board === 'vp' || board === 'wsg' || board === 'x' || board === 'f' || board === 'pol' || board === 's4s' || board === 'lgbt')) { + return "http://catalog.neet.tv/" + board + "/"; + } else if (Conf['JSON Index'] && Conf['Use 4chan X Catalog']) { + if (g.BOARD.ID === board && g.VIEW === 'index') { + return '#catalog'; + } else { + return "/" + board + "/#catalog"; + } + } else { + return "/" + board + "/catalog"; + } + }, + index: function(board) { + if (board == null) { + board = g.BOARD.ID; + } + if (Conf['JSON Index'] && board !== 'f') { + if (g.BOARD.ID === board && g.VIEW === 'index') { + return '#index'; + } else { + return "/" + board + "/#index"; + } + } else { + return "/" + board + "/"; + } + } + }; + + return CatalogLinks; + +}).call(this); + +CustomCSS = (function() { + var CustomCSS; + + CustomCSS = { + init: function() { + if (!Conf['Custom CSS']) { + return; + } + return this.addStyle(); + }, + addStyle: function() { + return this.style = $.addStyle(Conf['usercss'], 'custom-css', '#fourchanx-css'); + }, + rmStyle: function() { + if (this.style) { + $.rm(this.style); + return delete this.style; + } + }, + update: function() { + if (!this.style) { + return this.addStyle(); + } + return this.style.textContent = Conf['usercss']; + } + }; + + return CustomCSS; + +}).call(this); + +ExpandComment = (function() { + var ExpandComment; + + ExpandComment = { + init: function() { + if (g.VIEW !== 'index' || !Conf['Comment Expansion'] || Conf['JSON Index']) { + return; + } + if (g.BOARD.ID === 'g') { + this.callbacks.push(Fourchan.code); + } + if (g.BOARD.ID === 'sci') { + this.callbacks.push(Fourchan.math); + } + return Callbacks.Post.push({ + name: 'Comment Expansion', + cb: this.node + }); + }, + node: function() { + var a; + if (a = $('.abbr > a:not([onclick])', this.nodes.comment)) { + return $.on(a, 'click', ExpandComment.cb); + } + }, + callbacks: [], + cb: function(e) { + e.preventDefault(); + return ExpandComment.expand(Get.postFromNode(this)); + }, + expand: function(post) { + var a; + if (post.nodes.longComment && !post.nodes.longComment.parentNode) { + $.replace(post.nodes.shortComment, post.nodes.longComment); + post.nodes.comment = post.nodes.longComment; + return; + } + if (!(a = $('.abbr > a', post.nodes.comment))) { + return; + } + a.textContent = "Post No." + post + " Loading..."; + return $.cache("//a.4cdn.org" + (a.pathname.split(/\/+/).splice(0, 4).join('/')) + ".json", function() { + return ExpandComment.parse(this, a, post); + }); + }, + contract: function(post) { + var a; + if (!post.nodes.shortComment) { + return; + } + a = $('.abbr > a', post.nodes.shortComment); + a.textContent = 'here'; + $.replace(post.nodes.longComment, post.nodes.shortComment); + return post.nodes.comment = post.nodes.shortComment; + }, + parse: function(req, a, post) { + var callback, clone, comment, href, i, j, k, len, len1, len2, postObj, posts, quote, ref, ref1, spoilerRange, status; + status = req.status; + if (status !== 200 && status !== 304) { + a.textContent = "Error " + req.statusText + " (" + status + ")"; + return; + } + posts = req.response.posts; + if (spoilerRange = posts[0].custom_spoiler) { + Build.spoilerRange[g.BOARD] = spoilerRange; + } + for (i = 0, len = posts.length; i < len; i++) { + postObj = posts[i]; + if (postObj.no === post.ID) { + break; + } + } + if (postObj.no !== post.ID) { + a.textContent = "Post No." + post + " not found."; + return; + } + comment = post.nodes.comment; + clone = comment.cloneNode(false); + clone.innerHTML = postObj.com; + ref = $$('.quotelink', clone); + for (j = 0, len1 = ref.length; j < len1; j++) { + quote = ref[j]; + href = quote.getAttribute('href'); + if (href[0] === '/') { + continue; + } + if (href[0] === '#') { + quote.href = "" + (a.pathname.split(/\/+/).splice(0, 4).join('/')) + href; + } else { + quote.href = (a.pathname.split(/\/+/).splice(0, 3).join('/')) + "/" + href; + } + } + post.nodes.shortComment = comment; + $.replace(comment, clone); + post.nodes.comment = post.nodes.longComment = clone; + post.parseComment(); + post.parseQuotes(); + ref1 = ExpandComment.callbacks; + for (k = 0, len2 = ref1.length; k < len2; k++) { + callback = ref1[k]; + callback.call(post); + } + } + }; + + return ExpandComment; + +}).call(this); + +ExpandThread = (function() { + var ExpandThread, + slice = [].slice; + + ExpandThread = { + statuses: {}, + init: function() { + if (g.VIEW === 'thread' || !Conf['Thread Expansion']) { + return; + } + if (Conf['JSON Index']) { + return $.on(d, 'IndexRefresh', this.onIndexRefresh); + } else { + return Callbacks.Thread.push({ + name: 'Expand Thread', + cb: function() { + return ExpandThread.setButton(this); + } + }); + } + }, + setButton: function(thread) { + var a; + if (!(a = $.x('following-sibling::*[contains(@class,"summary")][1]', thread.OP.nodes.root))) { + return; + } + a.textContent = Build.summaryText.apply(Build, ['+'].concat(slice.call(a.textContent.match(/\d+/g)))); + a.style.cursor = 'pointer'; + return $.on(a, 'click', ExpandThread.cbToggle); + }, + disconnect: function(refresh) { + var ref, ref1, status, threadID; + if (g.VIEW === 'thread' || !Conf['Thread Expansion']) { + return; + } + ref = ExpandThread.statuses; + for (threadID in ref) { + status = ref[threadID]; + if ((ref1 = status.req) != null) { + ref1.abort(); + } + delete ExpandThread.statuses[threadID]; + } + if (!refresh) { + return $.off(d, 'IndexRefresh', this.onIndexRefresh); + } + }, + onIndexRefresh: function() { + ExpandThread.disconnect(true); + return g.BOARD.threads.forEach(function(thread) { + return ExpandThread.setButton(thread); + }); + }, + cbToggle: function(e) { + if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0) { + return; + } + e.preventDefault(); + return ExpandThread.toggle(Get.threadFromNode(this)); + }, + toggle: function(thread) { + var a, threadRoot; + threadRoot = thread.OP.nodes.root.parentNode; + if (!(a = $('.summary', threadRoot))) { + return; + } + if (thread.ID in ExpandThread.statuses) { + return ExpandThread.contract(thread, a, threadRoot); + } else { + return ExpandThread.expand(thread, a); + } + }, + expand: function(thread, a) { + var status; + ExpandThread.statuses[thread] = status = {}; + a.textContent = Build.summaryText.apply(Build, ['...'].concat(slice.call(a.textContent.match(/\d+/g)))); + return status.req = $.cache("//a.4cdn.org/" + thread.board + "/thread/" + thread + ".json", function() { + delete status.req; + return ExpandThread.parse(this, thread, a); + }); + }, + contract: function(thread, a, threadRoot) { + var filesCount, i, inlined, len, num, postsCount, replies, reply, status; + status = ExpandThread.statuses[thread]; + delete ExpandThread.statuses[thread]; + if (status.req) { + status.req.abort(); + if (a) { + a.textContent = Build.summaryText.apply(Build, ['+'].concat(slice.call(a.textContent.match(/\d+/g)))); + } + return; + } + replies = $$('.thread > .replyContainer', threadRoot); + if (!Conf['JSON Index'] || Conf['Show Replies']) { + num = (function() { + if (thread.isSticky) { + return 1; + } else { + switch (g.BOARD.ID) { + case 'b': + case 'vg': + return 3; + case 't': + return 1; + default: + return 5; + } + } + })(); + replies = replies.slice(0, -num); + } + postsCount = 0; + filesCount = 0; + for (i = 0, len = replies.length; i < len; i++) { + reply = replies[i]; + if (Conf['Quote Inlining']) { + while (inlined = $('.inlined', reply)) { + inlined.click(); + } + } + postsCount++; + if ('file' in Get.postFromRoot(reply)) { + filesCount++; + } + $.rm(reply); + } + return a.textContent = Build.summaryText('+', postsCount, filesCount); + }, + parse: function(req, thread, a) { + var filesCount, i, len, post, postData, posts, postsCount, postsRoot, ref, ref1, root; + if ((ref = req.status) !== 200 && ref !== 304) { + a.textContent = "Error " + req.statusText + " (" + req.status + ")"; + return; + } + Build.spoilerRange[thread.board] = req.response.posts[0].custom_spoiler; + posts = []; + postsRoot = []; + filesCount = 0; + ref1 = req.response.posts; + for (i = 0, len = ref1.length; i < len; i++) { + postData = ref1[i]; + if (postData.no === thread.ID) { + continue; + } + if ((post = thread.posts[postData.no]) && !post.isFetchedQuote) { + if ('file' in post) { + filesCount++; + } + postsRoot.push(post.nodes.root); + continue; + } + root = Build.postFromObject(postData, thread.board.ID); + post = new Post(root, thread, thread.board); + if ('file' in post) { + filesCount++; + } + posts.push(post); + postsRoot.push(root); + } + Main.callbackNodes('Post', posts); + $.after(a, postsRoot); + $.event('PostsInserted'); + postsCount = postsRoot.length; + return a.textContent = Build.summaryText('-', postsCount, filesCount); + } + }; + + return ExpandThread; + +}).call(this); + +FileInfo = (function() { + var FileInfo; + + FileInfo = { + init: function() { + var ref; + if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['File Info Formatting']) { + return; + } + return Callbacks.Post.push({ + name: 'File Info Formatting', + cb: this.node + }); + }, + node: function() { + var info, oldInfo; + if (!this.file || this.isClone) { + return; + } + oldInfo = $.el('span', { + className: 'fileText-original' + }); + $.prepend(this.file.link.parentNode, oldInfo); + $.add(oldInfo, [this.file.link.previousSibling, this.file.link, this.file.link.nextSibling]); + info = $.el('span', { + className: 'file-info' + }); + FileInfo.format(Conf['fileInfo'], this, info); + return $.prepend(this.file.text, info); + }, + format: function(formatString, post, outputNode) { + var output; + output = []; + formatString.replace(/%(.)|[^%]+/g, function(s, c) { + output.push(c in FileInfo.formatters ? FileInfo.formatters[c].call(post) : { + innerHTML: E(s) + }); + return ''; + }); + return $.extend(outputNode, { + innerHTML: E.cat(output) + }); + }, + formatters: { + t: function() { + return { + innerHTML: E(this.file.url.match(/[^/]*$/)[0]) + }; + }, + T: function() { + return { + innerHTML: "" + (FileInfo.formatters.t.call(this)).innerHTML + "" + }; + }, + l: function() { + return { + innerHTML: "" + (FileInfo.formatters.n.call(this)).innerHTML + "" + }; + }, + L: function() { + return { + innerHTML: "" + (FileInfo.formatters.N.call(this)).innerHTML + "" + }; + }, + n: function() { + var fullname, shortname; + fullname = this.file.name; + shortname = Build.shortFilename(this.file.name, this.isReply); + if (fullname === shortname) { + return { + innerHTML: E(fullname) + }; + } else { + return { + innerHTML: "" + E(shortname) + "" + E(fullname) + "" + }; + } + }, + N: function() { + return { + innerHTML: E(this.file.name) + }; + }, + p: function() { + return { + innerHTML: ((this.file.isSpoiler) ? "Spoiler, " : "") + }; + }, + s: function() { + return { + innerHTML: E(this.file.size) + }; + }, + B: function() { + return { + innerHTML: E(Math.round(this.file.sizeInBytes)) + " Bytes" + }; + }, + K: function() { + return { + innerHTML: E(Math.round(this.file.sizeInBytes/1024)) + " KB" + }; + }, + M: function() { + return { + innerHTML: E(Math.round(this.file.sizeInBytes/1048576*100)/100) + " MB" + }; + }, + r: function() { + return { + innerHTML: E(this.file.dimensions || "PDF") + }; + }, + g: function() { + return { + innerHTML: ((this.file.tag) ? ", " + E(this.file.tag) : "") + }; + }, + '%': function() { + return { + innerHTML: "%" + }; + } + } + }; + + return FileInfo; + +}).call(this); + +Flash = (function() { + var Flash; + + Flash = { + init: function() { + if (g.BOARD.ID === 'f' && Conf['Enable Native Flash Embedding']) { + return $.ready(Flash.initReady); + } + }, + initReady: function() { + if ($.hasStorage) { + return $.global(function() { + if (JSON.parse(localStorage['4chan-settings'] || '{}').disableAll) { + return window.SWFEmbed.init(); + } + }); + } else { + if (g.VIEW === 'thread') { + $.global(function() { + return window.Main.tid = location.pathname.split(/\/+/)[3]; + }); + } + return $.global(function() { + return window.SWFEmbed.init(); + }); + } + } + }; + + return Flash; + +}).call(this); + +Fourchan = (function() { + var Fourchan; + + Fourchan = { + init: function() { + var ref; + if ((ref = g.VIEW) !== 'index' && ref !== 'thread') { + return; + } + if (g.BOARD.ID === 'g') { + $.on(window, 'prettyprint:cb', function(e) { + var post, pre; + if (!(post = g.posts[e.detail.ID])) { + return; + } + if (!(pre = $$('.prettyprint', post.nodes.comment)[e.detail.i])) { + return; + } + if (!$.hasClass(pre, 'prettyprinted')) { + pre.innerHTML = e.detail.html; + return $.addClass(pre, 'prettyprinted'); + } + }); + $.globalEval('window.addEventListener(\'prettyprint\', function(e) {\n window.dispatchEvent(new CustomEvent(\'prettyprint:cb\', {\n detail: {\n ID: e.detail.ID,\n i: e.detail.i,\n html: prettyPrintOne(e.detail.html)\n }\n }));\n}, false);'); + Callbacks.Post.push({ + name: 'Parse /g/ code', + cb: this.code + }); + } + if (g.BOARD.ID === 'sci') { + $.global(function() { + return window.addEventListener('mathjax', function(e) { + if (window.MathJax) { + return window.MathJax.Hub.Queue(['Typeset', window.MathJax.Hub, e.target]); + } else { + if (!document.querySelector('script[src^="//cdn.mathjax.org/"]')) { + window.loadMathJax(); + window.loadMathJax = function() {}; + } + if (!e.target.classList.contains('postMessage')) { + return document.querySelector('script[src^="//cdn.mathjax.org/"]').addEventListener('load', function() { + return window.MathJax.Hub.Queue(['Typeset', window.MathJax.Hub, e.target]); + }, false); + } + } + }, false); + }); + Callbacks.Post.push({ + name: 'Parse /sci/ math', + cb: this.math + }); + Callbacks.CatalogThread.push({ + name: 'Parse /sci/ math', + cb: this.math + }); + } + return Main.ready(function() { + return $.global(function() { + var j, len, node, ref1; + window.clickable_ids = false; + ref1 = document.querySelectorAll('.posteruid, .capcode'); + for (j = 0, len = ref1.length; j < len; j++) { + node = ref1[j]; + node.removeEventListener('click', window.idClick, false); + } + }); + }); + }, + code: function() { + if (this.isClone) { + return; + } + return $.ready((function(_this) { + return function() { + var i, j, len, pre, ref; + ref = $$('.prettyprint', _this.nodes.comment); + for (i = j = 0, len = ref.length; j < len; i = ++j) { + pre = ref[i]; + if (!$.hasClass(pre, 'prettyprinted')) { + $.event('prettyprint', { + ID: _this.fullID, + i: i, + html: pre.innerHTML + }, window); + } + } + }; + })(this)); + }, + math: function() { + var cb, j, len, wbr, wbrs; + if (!/\[(math|eqn)\]/.test(this.nodes.comment.textContent)) { + return; + } + if ((wbrs = $$('wbr', this.nodes.comment)).length) { + for (j = 0, len = wbrs.length; j < len; j++) { + wbr = wbrs[j]; + $.rm(wbr); + } + this.nodes.comment.normalize(); + } + cb = (function(_this) { + return function() { + if (!doc.contains(_this.nodes.comment)) { + return; + } + $.off(d, 'PostsInserted', cb); + return $.event('mathjax', null, _this.nodes.comment); + }; + })(this); + $.on(d, 'PostsInserted', cb); + return cb(); + } + }; + + return Fourchan; + +}).call(this); + +IDColor = (function() { + var IDColor; + + IDColor = { + init: function() { + var ref; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Color User IDs'])) { + return; + } + this.ids = { + Heaven: [0, 0, 0, '#fff'] + }; + return Callbacks.Post.push({ + name: 'Color User IDs', + cb: this.node + }); + }, + node: function() { + var rgb, span, style, uid; + if (this.isClone || !((uid = this.info.uniqueID) && (span = $('span.hand', this.nodes.uniqueID)))) { + return; + } + rgb = IDColor.ids[uid] || IDColor.compute(uid); + style = span.style; + style.color = rgb[3]; + style.backgroundColor = "rgb(" + rgb[0] + "," + rgb[1] + "," + rgb[2] + ")"; + return $.addClass(span, 'painted'); + }, + compute: function(uid) { + var hash, rgb; + hash = IDColor.hash(uid); + rgb = [(hash >> 24) & 0xFF, (hash >> 16) & 0xFF, (hash >> 8) & 0xFF]; + rgb.push((rgb[0] * 0.299 + rgb[1] * 0.587 + rgb[2] * 0.114) > 125 ? '#000' : '#fff'); + return this.ids[uid] = rgb; + }, + hash: function(uid) { + var i, msg; + msg = 0; + i = 0; + while (i < 8) { + msg = (msg << 5) - msg + uid.charCodeAt(i++); + } + return msg; + } + }; + + return IDColor; + +}).call(this); + +IDHighlight = (function() { + var IDHighlight; + + IDHighlight = { + init: function() { + var ref; + if ((ref = g.VIEW) !== 'index' && ref !== 'thread') { + return; + } + return Callbacks.Post.push({ + name: 'Highlight by User ID', + cb: this.node + }); + }, + uniqueID: null, + node: function() { + if (this.nodes.uniqueID) { + $.on(this.nodes.uniqueID, 'click', IDHighlight.click(this)); + } + if (this.nodes.capcode) { + $.on(this.nodes.capcode, 'click', IDHighlight.click(this)); + } + if (!this.isClone) { + return IDHighlight.set(this); + } + }, + set: function(post) { + var match; + match = (post.info.uniqueID || post.info.capcode) === IDHighlight.uniqueID; + return $[match ? 'addClass' : 'rmClass'](post.nodes.post, 'highlight'); + }, + click: function(post) { + return function() { + var uniqueID; + uniqueID = post.info.uniqueID || post.info.capcode; + IDHighlight.uniqueID = IDHighlight.uniqueID === uniqueID ? null : uniqueID; + return g.posts.forEach(IDHighlight.set); + }; + } + }; + + return IDHighlight; + +}).call(this); + +Keybinds = (function() { + var Keybinds; + + Keybinds = { + init: function() { + var hotkey, init; + if (!Conf['Keybinds']) { + return; + } + for (hotkey in Config.hotkeys) { + $.sync(hotkey, Keybinds.sync); + } + init = function() { + var i, len, node, ref; + $.off(d, '4chanXInitFinished', init); + $.on(d, 'keydown', Keybinds.keydown); + ref = $$('[accesskey]'); + for (i = 0, len = ref.length; i < len; i++) { + node = ref[i]; + node.removeAttribute('accesskey'); + } + }; + return $.on(d, '4chanXInitFinished', init); + }, + sync: function(key, hotkey) { + return Conf[hotkey] = key; + }, + keydown: function(e) { + var form, i, key, len, notification, notifications, op, ref, ref1, ref2, ref3, ref4, ref5, searchInput, target, thread, threadRoot; + if (!(key = Keybinds.keyCode(e))) { + return; + } + target = e.target; + if ((ref = target.nodeName) === 'INPUT' || ref === 'TEXTAREA') { + if (!(/(Esc|Alt|Ctrl|Meta|Shift\+\w{2,})/.test(key) && !/^Alt\+(\d|Up|Down|Left|Right)$/.test(key))) { + return; + } + } + if (!(((ref1 = g.VIEW) !== 'index' && ref1 !== 'thread') || g.VIEW === 'index' && Conf['JSON Index'] && Conf['Index Mode'] === 'catalog' || g.VIEW === 'index' && g.BOARD.ID === 'f')) { + threadRoot = Nav.getThread(); + if (op = $('.op', threadRoot)) { + thread = Get.postFromNode(op).thread; + } + } + switch (key) { + case Conf['Toggle board list']: + if (!Conf['Custom Board Navigation']) { + return; + } + Header.toggleBoardList(); + break; + case Conf['Toggle header']: + Header.toggleBarVisibility(); + break; + case Conf['Open empty QR']: + if (!QR.postingIsEnabled) { + return; + } + Keybinds.qr(); + break; + case Conf['Open QR']: + if (!(QR.postingIsEnabled && threadRoot)) { + return; + } + Keybinds.qr(threadRoot); + break; + case Conf['Open settings']: + Settings.open(); + break; + case Conf['Close']: + if (Settings.dialog) { + Settings.close(); + } else if ((notifications = $$('.notification')).length) { + for (i = 0, len = notifications.length; i < len; i++) { + notification = notifications[i]; + $('.close', notification).click(); + } + } else if (QR.nodes && !(QR.nodes.el.hidden || window.getComputedStyle(QR.nodes.form).display === 'none')) { + if (Conf['Persistent QR']) { + QR.hide(); + } else { + QR.close(); + } + } else if (Embedding.lastEmbed) { + Embedding.closeFloat(); + } else { + return; + } + break; + case Conf['Spoiler tags']: + if (target.nodeName !== 'TEXTAREA') { + return; + } + Keybinds.tags('spoiler', target); + break; + case Conf['Code tags']: + if (target.nodeName !== 'TEXTAREA') { + return; + } + Keybinds.tags('code', target); + break; + case Conf['Eqn tags']: + if (target.nodeName !== 'TEXTAREA') { + return; + } + Keybinds.tags('eqn', target); + break; + case Conf['Math tags']: + if (target.nodeName !== 'TEXTAREA') { + return; + } + Keybinds.tags('math', target); + break; + case Conf['SJIS tags']: + if (target.nodeName !== 'TEXTAREA') { + return; + } + Keybinds.tags('sjis', target); + break; + case Conf['Toggle sage']: + if (!(QR.nodes && !QR.nodes.el.hidden)) { + return; + } + Keybinds.sage(); + break; + case Conf['Submit QR']: + if (!(QR.nodes && !QR.nodes.el.hidden)) { + return; + } + if (!QR.status()) { + QR.submit(); + } + break; + case Conf['Update']: + switch (g.VIEW) { + case 'thread': + if (!Conf['Thread Updater']) { + return; + } + ThreadUpdater.update(); + break; + case 'index': + if (!(Conf['JSON Index'] && g.BOARD.ID !== 'f')) { + return; + } + Index.update(); + break; + default: + return; + } + break; + case Conf['Watch']: + if (!(ThreadWatcher.enabled && thread)) { + return; + } + ThreadWatcher.toggle(thread); + break; + case Conf['Update thread watcher']: + if (!ThreadWatcher.enabled) { + return; + } + ThreadWatcher.buttonFetchAll(); + break; + case Conf['Expand image']: + if (!(ImageExpand.enabled && threadRoot)) { + return; + } + Keybinds.img(threadRoot); + break; + case Conf['Expand images']: + if (!(ImageExpand.enabled && threadRoot)) { + return; + } + Keybinds.img(threadRoot, true); + break; + case Conf['Open Gallery']: + if (!Gallery.enabled) { + return; + } + Gallery.cb.toggle(); + break; + case Conf['fappeTyme']: + if (!(Conf['Fappe Tyme'] && ((ref2 = g.VIEW) === 'index' || ref2 === 'thread'))) { + return; + } + FappeTyme.toggle('fappe'); + break; + case Conf['werkTyme']: + if (!(Conf['Werk Tyme'] && ((ref3 = g.VIEW) === 'index' || ref3 === 'thread'))) { + return; + } + FappeTyme.toggle('werk'); + break; + case Conf['Front page']: + if (Conf['JSON Index'] && g.VIEW === 'index' && g.BOARD.ID !== 'f') { + Index.userPageNav(1); + } else { + window.location = "/" + g.BOARD + "/"; + } + break; + case Conf['Open front page']: + $.open("/" + g.BOARD + "/"); + break; + case Conf['Next page']: + if (!(g.VIEW === 'index' && g.BOARD.ID !== 'f')) { + return; + } + if (Conf['JSON Index']) { + if ((ref4 = Conf['Index Mode']) !== 'paged' && ref4 !== 'infinite') { + return; + } + $('.next button', Index.pagelist).click(); + } else { + if (form = $('.next form')) { + window.location = form.action; + } + } + break; + case Conf['Previous page']: + if (!(g.VIEW === 'index' && g.BOARD.ID !== 'f')) { + return; + } + if (Conf['JSON Index']) { + if ((ref5 = Conf['Index Mode']) !== 'paged' && ref5 !== 'infinite') { + return; + } + $('.prev button', Index.pagelist).click(); + } else { + if (form = $('.prev form')) { + window.location = form.action; + } + } + break; + case Conf['Search form']: + if (!(g.VIEW === 'index' && g.BOARD.ID !== 'f')) { + return; + } + searchInput = Conf['JSON Index'] ? Index.searchInput : $.id('search-box'); + Header.scrollToIfNeeded(searchInput); + searchInput.focus(); + break; + case Conf['Paged mode']: + if (!(Conf['JSON Index'] && g.BOARD.ID !== 'f')) { + return; + } + window.location = g.VIEW === 'index' ? '#paged' : "/" + g.BOARD + "/#paged"; + break; + case Conf['Infinite scrolling mode']: + if (!(Conf['JSON Index'] && g.BOARD.ID !== 'f')) { + return; + } + window.location = g.VIEW === 'index' ? '#infinite' : "/" + g.BOARD + "/#infinite"; + break; + case Conf['All pages mode']: + if (!(Conf['JSON Index'] && g.BOARD.ID !== 'f')) { + return; + } + window.location = g.VIEW === 'index' ? '#all-pages' : "/" + g.BOARD + "/#all-pages"; + break; + case Conf['Open catalog']: + if (g.BOARD.ID === 'f') { + return; + } + window.location = CatalogLinks.catalog(); + break; + case Conf['Cycle sort type']: + if (!(Conf['JSON Index'] && g.VIEW === 'index' && g.BOARD.ID !== 'f')) { + return; + } + Index.cycleSortType(); + break; + case Conf['Next thread']: + if (!(g.VIEW === 'index' && threadRoot)) { + return; + } + Nav.scroll(+1); + break; + case Conf['Previous thread']: + if (!(g.VIEW === 'index' && threadRoot)) { + return; + } + Nav.scroll(-1); + break; + case Conf['Expand thread']: + if (!(g.VIEW === 'index' && threadRoot)) { + return; + } + ExpandThread.toggle(thread); + break; + case Conf['Open thread']: + if (!(g.VIEW === 'index' && threadRoot)) { + return; + } + Keybinds.open(thread); + break; + case Conf['Open thread tab']: + if (!(g.VIEW === 'index' && threadRoot)) { + return; + } + Keybinds.open(thread, true); + break; + case Conf['Next reply']: + if (!threadRoot) { + return; + } + Keybinds.hl(+1, threadRoot); + break; + case Conf['Previous reply']: + if (!threadRoot) { + return; + } + Keybinds.hl(-1, threadRoot); + break; + case Conf['Deselect reply']: + if (!threadRoot) { + return; + } + Keybinds.hl(0, threadRoot); + break; + case Conf['Hide']: + if (!thread) { + return; + } + if (ThreadHiding.db) { + ThreadHiding.toggle(thread); + } + break; + case Conf['Previous Post Quoting You']: + if (!(threadRoot && QuoteYou.db)) { + return; + } + QuoteYou.cb.seek('preceding'); + break; + case Conf['Next Post Quoting You']: + if (!(threadRoot && QuoteYou.db)) { + return; + } + QuoteYou.cb.seek('following'); + break; + default: + return; + } + e.preventDefault(); + return e.stopPropagation(); + }, + keyCode: function(e) { + var kc, key; + key = (function() { + switch (kc = e.keyCode) { + case 8: + return ''; + case 13: + return 'Enter'; + case 27: + return 'Esc'; + case 32: + return 'Space'; + case 37: + return 'Left'; + case 38: + return 'Up'; + case 39: + return 'Right'; + case 40: + return 'Down'; + case 188: + return 'Comma'; + case 190: + return 'Period'; + case 191: + return 'Slash'; + case 59: + case 186: + return 'Semicolon'; + default: + if ((48 <= kc && kc <= 57) || (65 <= kc && kc <= 90)) { + return String.fromCharCode(kc).toLowerCase(); + } else if ((96 <= kc && kc <= 105)) { + return String.fromCharCode(kc - 48).toLowerCase(); + } else { + return null; + } + } + })(); + if (key) { + if (e.altKey) { + key = 'Alt+' + key; + } + if (e.ctrlKey) { + key = 'Ctrl+' + key; + } + if (e.metaKey) { + key = 'Meta+' + key; + } + if (e.shiftKey) { + key = 'Shift+' + key; + } + } + return key; + }, + qr: function(thread) { + QR.open(); + if (thread != null) { + QR.quote.call($('input', $('.post.highlight', thread) || thread)); + } + return QR.nodes.com.focus(); + }, + tags: function(tag, ta) { + var range, selEnd, selStart, supported, value; + supported = (function() { + switch (tag) { + case 'spoiler': + return !!$('.postForm input[name=spoiler]'); + case 'code': + return g.BOARD.ID === 'g'; + case 'math': + case 'eqn': + return g.BOARD.ID === 'sci'; + case 'sjis': + return g.BOARD.ID === 'jp'; + } + })(); + if (!supported) { + new Notice('warning', "[" + tag + "] tags are not supported on /" + g.BOARD + "/.", 20); + } + value = ta.value; + selStart = ta.selectionStart; + selEnd = ta.selectionEnd; + ta.value = value.slice(0, selStart) + ("[" + tag + "]") + value.slice(selStart, selEnd) + ("[/" + tag + "]") + value.slice(selEnd); + range = ("[" + tag + "]").length + selEnd; + ta.setSelectionRange(range, range); + return $.event('input', null, ta); + }, + sage: function() { + var isSage; + isSage = /sage/i.test(QR.nodes.email.value); + return QR.nodes.email.value = isSage ? "" : "sage"; + }, + img: function(thread, all) { + var post; + if (all) { + return ImageExpand.cb.toggleAll(); + } else { + post = Get.postFromNode($('.post.highlight', thread) || $('.op', thread)); + return ImageExpand.toggle(post); + } + }, + open: function(thread, tab) { + var url; + if (g.VIEW !== 'index') { + return; + } + url = "/" + thread.board + "/thread/" + thread; + if (tab) { + return $.open(url); + } else { + return location.href = url; + } + }, + hl: function(delta, thread) { + var axis, height, i, len, next, postEl, replies, reply, root; + postEl = $('.reply.highlight', thread); + if (!delta) { + if (postEl) { + $.rmClass(postEl, 'highlight'); + } + return; + } + if (postEl) { + height = postEl.getBoundingClientRect().height; + if (Header.getTopOf(postEl) >= -height && Header.getBottomOf(postEl) >= -height) { + root = postEl.parentNode; + axis = delta === +1 ? 'following' : 'preceding'; + if (!(next = $.x(axis + "-sibling::div[contains(@class,'replyContainer') and not(@hidden) and not(child::div[@class='stub'])][1]/child::div[contains(@class,'reply')]", root))) { + return; + } + Header.scrollToIfNeeded(next, delta === +1); + this.focus(next); + $.rmClass(postEl, 'highlight'); + return; + } + $.rmClass(postEl, 'highlight'); + } + replies = $$('.reply', thread); + if (delta === -1) { + replies.reverse(); + } + for (i = 0, len = replies.length; i < len; i++) { + reply = replies[i]; + if (delta === +1 && Header.getTopOf(reply) > 0 || delta === -1 && Header.getBottomOf(reply) > 0) { + this.focus(reply); + return; + } + } + }, + focus: function(post) { + return $.addClass(post, 'highlight'); + } + }; + + return Keybinds; + +}).call(this); + +Nav = (function() { + var Nav; + + Nav = { + init: function() { + var append, next, prev, span; + switch (g.VIEW) { + case 'index': + if (!Conf['Index Navigation']) { + return; + } + break; + case 'thread': + if (!Conf['Reply Navigation']) { + return; + } + break; + default: + return; + } + span = $.el('span', { + id: 'navlinks' + }); + prev = $.el('a', { + textContent: 'â–²', + href: 'javascript:;' + }); + next = $.el('a', { + textContent: 'â–¼', + href: 'javascript:;' + }); + $.on(prev, 'click', this.prev); + $.on(next, 'click', this.next); + $.add(span, [prev, $.tn(' '), next]); + append = function() { + $.off(d, '4chanXInitFinished', append); + return $.add(d.body, span); + }; + return $.on(d, '4chanXInitFinished', append); + }, + prev: function() { + if (g.VIEW === 'thread') { + return window.scrollTo(0, 0); + } else { + return Nav.scroll(-1); + } + }, + next: function() { + if (g.VIEW === 'thread') { + return window.scrollTo(0, d.body.scrollHeight); + } else { + return Nav.scroll(+1); + } + }, + getThread: function() { + var i, len, ref, thread, threadRoot; + ref = $$('.thread'); + for (i = 0, len = ref.length; i < len; i++) { + threadRoot = ref[i]; + thread = Get.threadFromRoot(threadRoot); + if (thread.isHidden && !thread.stub) { + continue; + } + if (Header.getTopOf(threadRoot) >= -threadRoot.getBoundingClientRect().height) { + return threadRoot; + } + } + return $('.board'); + }, + scroll: function(delta) { + var axis, extra, next, ref, thread, top; + if ((ref = d.activeElement) != null) { + ref.blur(); + } + thread = Nav.getThread(); + axis = delta === +1 ? 'following' : 'preceding'; + if (next = $.x(axis + "-sibling::div[contains(@class,'thread') and not(@hidden)][1]", thread)) { + top = Header.getTopOf(thread); + if (delta === +1 && top < 5 || delta === -1 && top > -5) { + thread = next; + } + } + extra = Header.getTopOf(thread) + doc.clientHeight - d.body.getBoundingClientRect().bottom; + if (extra > 0) { + d.body.style.marginBottom = extra + "px"; + } + Header.scrollTo(thread); + if (extra > 0 && !Nav.haveExtra) { + Nav.haveExtra = true; + return $.on(d, 'scroll', Nav.removeExtra); + } + }, + removeExtra: function() { + var extra; + extra = doc.clientHeight - d.body.getBoundingClientRect().bottom; + if (extra > 0) { + return d.body.style.marginBottom = extra + "px"; + } else { + d.body.style.marginBottom = null; + delete Nav.haveExtra; + return $.off(d, 'scroll', Nav.removeExtra); + } + } + }; + + return Nav; + +}).call(this); + +NormalizeURL = (function() { + var NormalizeURL; + + NormalizeURL = { + init: function() { + var pathname; + if (!Conf['Normalize URL']) { + return; + } + pathname = location.pathname.split(/\/+/); + switch (g.VIEW) { + case 'thread': + pathname[2] = 'thread'; + pathname = pathname.slice(0, 4); + break; + case 'index': + pathname = pathname.slice(0, 3); + } + pathname = pathname.join('/'); + if (location.pathname !== pathname) { + return history.replaceState(history.state, '', location.protocol + "//" + location.host + pathname + location.hash); + } + } + }; + + return NormalizeURL; + +}).call(this); + +PSAHiding = (function() { + var PSAHiding; + + PSAHiding = { + init: function() { + if (!Conf['Announcement Hiding']) { + return; + } + $.addClass(doc, 'hide-announcement'); + return $.one(d, '4chanXInitFinished', this.setup); + }, + setup: function() { + var btn, entry, hr, psa, ref; + if (!(psa = PSAHiding.psa = $.id('globalMessage'))) { + $.rmClass(doc, 'hide-announcement'); + return; + } + if ((hr = (ref = $.id('globalToggle')) != null ? ref.previousElementSibling : void 0) && hr.nodeName === 'HR') { + PSAHiding.hr = hr; + } + entry = { + el: $.el('a', { + textContent: 'Show announcement', + className: 'show-announcement', + href: 'javascript:;' + }), + order: 50, + open: function() { + return PSAHiding.hidden; + } + }; + Header.menu.addEntry(entry); + $.on(entry.el, 'click', PSAHiding.toggle); + PSAHiding.btn = btn = $.el('span', { + title: 'Mark announcement as read and hide.', + className: 'hide-announcement' + }); + $.extend(btn, { + innerHTML: "[Dismiss]" + }); + $.on(btn, 'click', PSAHiding.toggle); + $.get('hiddenPSA', 0, function(arg) { + var hiddenPSA; + hiddenPSA = arg.hiddenPSA; + PSAHiding.sync(hiddenPSA); + $.add(psa, btn); + return $.rmClass(doc, 'hide-announcement'); + }); + return $.sync('hiddenPSA', PSAHiding.sync); + }, + toggle: function() { + var UTC; + if ($.hasClass(this, 'hide-announcement')) { + UTC = +$.id('globalMessage').dataset.utc; + $.set('hiddenPSA', UTC); + } else { + $.event('CloseMenu'); + $["delete"]('hiddenPSA'); + } + return PSAHiding.sync(UTC); + }, + sync: function(UTC) { + var psa, ref; + psa = PSAHiding.psa; + PSAHiding.hidden = PSAHiding.btn.hidden = (UTC != null) && UTC >= +psa.dataset.utc; + if (PSAHiding.hidden) { + $.rm(psa); + } else { + $.after($.id('globalToggle'), psa); + } + if ((ref = PSAHiding.hr) != null) { + ref.hidden = PSAHiding.hidden; + } + } + }; + + return PSAHiding; + +}).call(this); + +RelativeDates = (function() { + var RelativeDates, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + RelativeDates = { + INTERVAL: $.MINUTE / 2, + init: function() { + var ref; + if (((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Relative Post Dates'] && !Conf['Relative Date Title'] || g.VIEW === 'index' && Conf['JSON Index'] && g.BOARD.ID !== 'f') { + this.flush(); + $.on(d, 'visibilitychange ThreadUpdate', this.flush); + } + if (Conf['Relative Post Dates']) { + return Callbacks.Post.push({ + name: 'Relative Post Dates', + cb: this.node + }); + } + }, + node: function() { + var dateEl; + dateEl = this.nodes.date; + if (Conf['Relative Date Title']) { + $.on(dateEl, 'mouseover', (function(_this) { + return function() { + return RelativeDates.hover(_this); + }; + })(this)); + return; + } + if (this.isClone) { + return; + } + dateEl.title = dateEl.textContent; + return RelativeDates.update(this); + }, + relative: function(diff, now, date) { + var days, months, number, rounded, unit, years; + unit = (number = diff / $.DAY) >= 1 ? (years = now.getYear() - date.getYear(), months = now.getMonth() - date.getMonth(), days = now.getDate() - date.getDate(), years > 1 ? (number = years - (months < 0 || months === 0 && days < 0), 'year') : years === 1 && (months > 0 || months === 0 && days >= 0) ? (number = years, 'year') : (months = months + 12 * years) > 1 ? (number = months - (days < 0), 'month') : months === 1 && days >= 0 ? (number = months, 'month') : 'day') : (number = diff / $.HOUR) >= 1 ? 'hour' : (number = diff / $.MINUTE) >= 1 ? 'minute' : (number = Math.max(0, diff) / $.SECOND, 'second'); + rounded = Math.round(number); + if (rounded !== 1) { + unit += 's'; + } + return rounded + " " + unit + " ago"; + }, + stale: [], + flush: function() { + var data, i, len, now, ref; + if (d.hidden) { + return; + } + now = new Date(); + ref = RelativeDates.stale; + for (i = 0, len = ref.length; i < len; i++) { + data = ref[i]; + RelativeDates.update(data, now); + } + RelativeDates.stale = []; + clearTimeout(RelativeDates.timeout); + return RelativeDates.timeout = setTimeout(RelativeDates.flush, RelativeDates.INTERVAL); + }, + hover: function(post) { + var date, diff, now; + date = post.info.date; + now = new Date(); + diff = now - date; + return post.nodes.date.title = RelativeDates.relative(diff, now, date); + }, + update: function(data, now) { + var date, diff, i, isPost, len, ref, relative, singlePost; + isPost = data instanceof Post; + date = isPost ? data.info.date : new Date(+data.dataset.utc); + now || (now = new Date()); + diff = now - date; + relative = RelativeDates.relative(diff, now, date); + if (isPost) { + ref = [data].concat(data.clones); + for (i = 0, len = ref.length; i < len; i++) { + singlePost = ref[i]; + singlePost.nodes.date.firstChild.textContent = relative; + } + } else { + data.firstChild.textContent = relative; + } + return RelativeDates.setOwnTimeout(diff, data); + }, + setOwnTimeout: function(diff, data) { + var delay; + delay = diff < $.MINUTE ? $.SECOND - (diff + $.SECOND / 2) % $.SECOND : diff < $.HOUR ? $.MINUTE - (diff + $.MINUTE / 2) % $.MINUTE : diff < $.DAY ? $.HOUR - (diff + $.HOUR / 2) % $.HOUR : $.DAY - (diff + $.DAY / 2) % $.DAY; + return setTimeout(RelativeDates.markStale, delay, data); + }, + markStale: function(data) { + if (indexOf.call(RelativeDates.stale, data) >= 0) { + return; + } + if (data instanceof Post && !g.posts[data.fullID]) { + return; + } + return RelativeDates.stale.push(data); + } + }; + + return RelativeDates; + +}).call(this); + +RemoveSpoilers = (function() { + var RemoveSpoilers, + slice = [].slice; + + RemoveSpoilers = { + init: function() { + if (Conf['Reveal Spoilers']) { + $.addClass(doc, 'reveal-spoilers'); + } + if (!Conf['Remove Spoilers']) { + return; + } + Callbacks.Post.push({ + name: 'Reveal Spoilers', + cb: this.node + }); + Callbacks.CatalogThread.push({ + name: 'Reveal Spoilers', + cb: this.node + }); + if (g.VIEW === 'archive') { + return $.ready(function() { + return RemoveSpoilers.unspoiler($.id('arc-list')); + }); + } + }, + node: function() { + return RemoveSpoilers.unspoiler(this.nodes.comment); + }, + unspoiler: function(el) { + var i, len, span, spoiler, spoilers; + spoilers = $$('s', el); + for (i = 0, len = spoilers.length; i < len; i++) { + spoiler = spoilers[i]; + span = $.el('span', { + className: 'removed-spoiler' + }); + $.replace(spoiler, span); + $.add(span, slice.call(spoiler.childNodes)); + } + } + }; + + return RemoveSpoilers; + +}).call(this); + +Report = (function() { + var Report; + + Report = { + init: function() { + var match; + if (!(match = location.search.match(/\bno=(\d+)/))) { + return; + } + Captcha.replace.init(); + this.postID = +match[1]; + return $.ready(this.ready); + }, + ready: function() { + var passAd, prev, ref; + $.addStyle(CSS.report); + if (Conf['Archive Report']) { + Report.archive(); + } + if ((passAd = $('a[href="https://www.4chan.org/pass"]'))) { + $.extend(passAd, { + textContent: 'Complain', + href: 'https://www.4chan-x.net/captchas.html', + tabIndex: -1 + }); + passAd.parentNode.normalize(); + if (((ref = (prev = passAd.previousSibling)) != null ? ref.nodeType : void 0) === Node.TEXT_NODE) { + prev.nodeValue = prev.nodeValue.replace(/4chan Pass[^\.]*\./i, 'reCAPTCHA malfunctioning?'); + } + $.after(passAd, [ + $.tn('] ['), $.el('a', { + href: 'mailto:4chanpass@4chan.org?subject=4chan%20Pass%20-%20Purchase%20Support', + textContent: 'Email 4chan', + target: '_blank', + tabIndex: -1 + }) + ]); + } + if (!Conf['Use Recaptcha v1 in Reports'] && !Conf['Force Noscript Captcha'] && Main.jsEnabled) { + return new MutationObserver(function() { + Report.fit('iframe[src^="https://www.google.com/recaptcha/api2/frame"]'); + return Report.fit('body'); + }).observe(d.body, { + childList: true, + attributes: true, + subtree: true + }); + } else { + return Report.fit('body'); + } + }, + fit: function(selector) { + var dy, el; + if (!((el = $(selector, doc)) && getComputedStyle(el).visibility !== 'hidden')) { + return; + } + dy = el.getBoundingClientRect().bottom - doc.clientHeight + 8; + if (dy > 0) { + return window.resizeBy(0, dy); + } + }, + archive: function() { + var link, message, types, url; + Redirect.init(); + if (!(url = Redirect.to('report', { + boardID: g.BOARD.ID, + postID: Report.postID + }))) { + return; + } + if ((message = $('h3')) && /Report submitted!/.test(message.textContent)) { + if (location.hash === '#redirect') { + $.globalEval('self.close = function(){};'); + window.resizeTo(700, 475); + location.replace(url); + } + return; + } + link = $.el('a', { + href: url, + textContent: 'Report to archive' + }); + $.on(link, 'click', function(e) { + if (!(e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0)) { + return window.resizeTo(700, 475); + } + }); + $.add(d.body, [$.tn(' ['), link, $.tn(']')]); + if (types = $.id('reportTypes')) { + return $.on(types, 'change', function(e) { + return $('form').action = e.target.value === 'illegal' ? '#redirect' : ''; + }); + } + } + }; + + return Report; + +}).call(this); + +ThreadLinks = (function() { + var ThreadLinks; + + ThreadLinks = { + init: function() { + if (!(g.VIEW === 'index' && Conf['Open Threads in New Tab'])) { + return; + } + Callbacks.Post.push({ + name: 'Thread Links', + cb: this.node + }); + return Callbacks.CatalogThread.push({ + name: 'Thread Links', + cb: this.catalogNode + }); + }, + node: function() { + if (this.isReply || this.isClone) { + return; + } + return ThreadLinks.process($('.replylink', this.nodes.info)); + }, + catalogNode: function() { + return ThreadLinks.process(this.nodes.thumb.parentNode); + }, + process: function(link) { + return link.target = '_blank'; + } + }; + + return ThreadLinks; + +}).call(this); + +Time = (function() { + var Time; + + Time = { + init: function() { + var ref; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Time Formatting'])) { + return; + } + return Callbacks.Post.push({ + name: 'Time Formatting', + cb: this.node + }); + }, + node: function() { + if (this.isClone) { + return; + } + return this.nodes.date.textContent = Time.format(Conf['time'], this.info.date); + }, + format: function(formatString, date) { + return formatString.replace(/%(.)/g, function(s, c) { + if (c in Time.formatters) { + return Time.formatters[c].call(date); + } else { + return s; + } + }); + }, + day: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + month: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + zeroPad: function(n) { + if (n < 10) { + return "0" + n; + } else { + return n; + } + }, + formatters: { + a: function() { + return Time.day[this.getDay()].slice(0, 3); + }, + A: function() { + return Time.day[this.getDay()]; + }, + b: function() { + return Time.month[this.getMonth()].slice(0, 3); + }, + B: function() { + return Time.month[this.getMonth()]; + }, + d: function() { + return Time.zeroPad(this.getDate()); + }, + e: function() { + return this.getDate(); + }, + H: function() { + return Time.zeroPad(this.getHours()); + }, + I: function() { + return Time.zeroPad(this.getHours() % 12 || 12); + }, + k: function() { + return this.getHours(); + }, + l: function() { + return this.getHours() % 12 || 12; + }, + m: function() { + return Time.zeroPad(this.getMonth() + 1); + }, + M: function() { + return Time.zeroPad(this.getMinutes()); + }, + p: function() { + if (this.getHours() < 12) { + return 'AM'; + } else { + return 'PM'; + } + }, + P: function() { + if (this.getHours() < 12) { + return 'am'; + } else { + return 'pm'; + } + }, + S: function() { + return Time.zeroPad(this.getSeconds()); + }, + y: function() { + return this.getFullYear().toString().slice(2); + }, + Y: function() { + return this.getFullYear(); + }, + '%': function() { + return '%'; + } + } + }; + + return Time; + +}).call(this); + +Favicon = (function() { + var Favicon; + + Favicon = { + init: function() { + return $.asap((function() { + return d.head && (Favicon.el = $('link[rel="shortcut icon"]', d.head)); + }), Favicon.initAsap); + }, + initAsap: function() { + var href; + Favicon.el.type = 'image/x-icon'; + href = Favicon.el.href; + Favicon.SFW = /ws\.ico$/.test(href); + Favicon["default"] = href; + return Favicon["switch"](); + }, + "switch": function() { + var f, i, items, t; + items = { + ferongr: ['iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEX///9zBQC/AADpDAP/gID/q6voCwJJTwpOAAAAAXRSTlMAQObYZgAAAGJJREFUeF5Fi7ENg0AQBCfa/AFdDh2gdwPIogMK2E2+/xLslwOvdqRJhv+GQQPUCtJM7svankLrq/I+TY5e6Ueh1jyBMX7AFJi9vwfyVO4CbbO6jNYpp9GyVPbdkFhVgAQ2H0NOE5jk9DT8AAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAxUlEQVR42q1TOwrCQBB9s0FRtJI0WoqFtSLYegoP4gVSeJsUHsHSI3iFeIqRXXgwrhlXwYHHhLwPTB7B36abBCV+0pA4DUBQUNZYQptGtW3jtoKyxgoe0yrBCoyZfL/5ioQ3URZOXW9I341l3oo+NXEZiW4CEuIzvPECopED4OaZ3RNmeAm4u+a8Jr5f17VyVoL8fr8qcltzwlyyj2iqcgPOQ9ExkHAITgD75bYBe0A5S4H/P9htuWMF3QXoQpwaKeT+lnsC6JE5I6aq6fEAAAAASUVORK5CYII=', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEX///8AcH4AtswA2PJ55fKi6fIA1/FtpPADAAAAAXRSTlMAQObYZgAAAGJJREFUeF5Fi7ENg0AQBCfa/AFdDh2gdwPIogMK2E2+/xLslwOvdqRJhv+GQQPUCtJM7svankLrq/I+TY5e6Ueh1jyBMX7AFJi9vwfyVO4CbbO6jNYpp9GyVPbdkFhVgAQ2H0NOE5jk9DT8AAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAxElEQVQ4y2NgoBq4/vE/HJOsBiRQUIfA2AzBqQYqUfn00/9FLz+BaQxDCKqBmX7jExijKEDSDJPHrnnbGQhGV4RmOFwdVkNwhQMheYwQxhaIi7b9Z9A3gWAQm2BUoQOgRhgA8o7j1ozLC4LCyAZcx6kZI5qg4kLKqggDFFWxJySsUQVzlb4pwgAJaTRvokcVNgOqOv8zcHBCsL07DgNg8YsczzA5MxtUL+DMD8g0slxI/H8GQ/P/DJKyeKIRpglXZsIiBwBhP5O+VbI/JgAAAABJRU5ErkJggg==', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEX///8oeQBJ3ABV/wHM/7Lu/+ZU/gAqUP3dAAAAAXRSTlMAQObYZgAAAGJJREFUeF5Fi7ENg0AQBCfa/AFdDh2gdwPIogMK2E2+/xLslwOvdqRJhv+GQQPUCtJM7svankLrq/I+TY5e6Ueh1jyBMX7AFJi9vwfyVO4CbbO6jNYpp9GyVPbdkFhVgAQ2H0NOE5jk9DT8AAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAx0lEQVQ4y2NgoBYI+cfwH4ZJVgMS0KhEYGyG4FQDkzjzf9P/d/+fgWl0QwiqgSkI/c8IxsgKkDXD5LFq9rwDweiK0A2HqcNqCK5wICSPEcLYAtH+AMN/IXMIBrEJRie6OEgjDAC5x3FqxuUFNiEUA67j1IweTTBxBQ1puAG86jgSEraogskJWSBcwCGF5k30qMJmgMFEhv/MXBAs5oLDAFj8IsczTE7UEeECbhU8+QGZRpaTi2b4L2zF8J9TGk80wjThykzY5AAW/2O1C2mIbgAAAABJRU5ErkJggg=='], + 'xat-': ['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'], + Mayhem: ['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'], + '4chanJS': ['iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAD1BMVEUBAAAAAAD/AABnZ2f///8nFk05AAAAAXRSTlMAQObYZgAAAEFJREFUeNqNjgEKACAMAjvX/98cAkkxgmSgO8Bt/Ai4ApJ6KKhzF3OiEMDASrGB/QWgPEHsUpN+Ng9xAETMYhDrWmeHAMcmvycWAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAD1BMVEUBAAAAAAD/AAD///9nZ2f77Y6hAAAAAXRSTlMAQObYZgAAAEBJREFUeF6NjQEKACAMAnfW/98cAxFiBIngOsTqR8B1IGkeG9p5i7XabgAGZNigXgA8aoCUxvzWAIcBItGiSEwdccYA3BuRAWkAAAAASUVORK5CYII=', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAD1BMVEUBAAAAAAAul8NnZ2f////82iC9AAAAAXRSTlMAQObYZgAAAEFJREFUeNqNjgEKACAMAjvX/98cAkkxgmSgO8Bt/Ai4ApJ6KKhzF3OiEMDASrGB/QWgPEHsUpN+Ng9xAETMYhDrWmeHAMcmvycWAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAD1BMVEUBAAAAAAAul8P///9nZ2cgIeMlAAAAAXRSTlMAQObYZgAAAEBJREFUeF6NjQEKACAMAnfW/98cAxFiBIngOsTqR8B1IGkeG9p5i7XabgAGZNigXgA8aoCUxvzWAIcBItGiSEwdccYA3BuRAWkAAAAASUVORK5CYII=', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAElBMVEUBAAAAAABmzDNlyjJnZ2f///+6o7dfAAAAAXRSTlMAQObYZgAAAERJREFUeF6NjkEKADEIA51o///lJZfQxUsHITogWi8AvwZJuxmYa25xDooBLEwOWFTYAsYVhdorLZt9Ng9xCUTCUCQ2H3F4ANrZ2WNiAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAElBMVEUBAAAAAABmzDP///9lyjJnZ2cIHys9AAAAAXRSTlMAQObYZgAAAENJREFUeF6NjUEKwEAMAjNm9/9fLkEslFwqgjoEUn8EfAqSdrkwzj6ieyyTkQEVGWRvANfO1iEX620AjgBEwqR4Y+sBeGAA6d+vQ4IAAAAASUVORK5CYII='], + Original: ['iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAADFBMVEX/////AAD///8AAABBZmS3AAAAAXRSTlMAQObYZgAAAExJREFUeF4tyrENgDAMAMFXKuQswQLBG3mOlBnFS1gwDfIYLpEivvjq2MlqjmYvYg5jWEzCwtDSQlwcXKCVLrpFbvLvvSf9uZJ2HusDtJAY7Tkn1oYAAAAASUVORK5CYII=', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAhElEQVR42q1RwQnAMAjMu5M4guAKXa4j5dUROo5tipSDcrFChUONd0di2m/hEGVOHDyIPufgwAFASDkpoSzmBrkJ2UMyR9LsJ3rvrqo3Rt1YMIMhhNnOxLMnoMFBxHyJAr2IOBFzA8U+6pLBdmEJTA0aMVjpDd6Loks0s5HZNwYx8tfZCZ0kll7ORffZAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAADFBMVEX///8ul8P///8AAACaqgkzAAAAAXRSTlMAQObYZgAAAExJREFUeF4tyrENgDAMAMFXKuQswQLBG3mOlBnFS1gwDfIYLpEivvjq2MlqjmYvYg5jWEzCwtDSQlwcXKCVLrpFbvLvvSf9uZJ2HusDtJAY7Tkn1oYAAAAASUVORK5CYII=', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAALVBMVEUAAAAAAAAAAAAAAAABBQcHFx4KISoNLToaVW4oKCgul8M4ODg7OzvBwcH///8uS/CdAAAAA3RSTlMAx9dmesIgAAAAV0lEQVR42m2NWw6AIBAD1eILZO5/XI0UAgm7H9tOsu0yGWAQSOoFijHOxOANGqm/LczpOaXs4gISrPZ+gc2+hO5w2xdwgOjBFUIF+sEJrhUl9JFr+badFwR+BfqlmGUJAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAgMAAABinRfyAAAADFBMVEX///9mzDP///8AAACT0n1lAAAAAXRSTlMAQObYZgAAAExJREFUeF4tyrENgDAMAMFXKuQswQLBG3mOlBnFS1gwDfIYLpEivvjq2MlqjmYvYg5jWEzCwtDSQlwcXKCVLrpFbvLvvSf9uZJ2HusDtJAY7Tkn1oYAAAAASUVORK5CYII=', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAALVBMVEUAAAAAAAAAAAAAAAAECAIQIAgWLAsePA8oKCg4ODg6dB07OztmzDPBwcH///+rsf3XAAAAA3RSTlMAx9dmesIgAAAAV0lEQVR42m2NWw6AIBAD1eIDhbn/cTVSCCTsfmw7ybbLZIBBIKkXKKU0E4M3aKT+tjCn5xiziwuIsNr7BTb7ErrDZV/AAaIHdwgV6AcnuFaU0Eeu5dt2XiUyBjCQ2bIrAAAAAElFTkSuQmCC'], + 'Metro': ['iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAC/AABrZQDiAAAAAXRSTlMAQObYZgAAABJJREFUCB1jZGBgrMNAQEEc4gCSfAX5bRw/NQAAAABJRU5ErkJggg==', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAAAAAAAAAAHAAAdAAApAAAsAAA4AABsAACQAAC/AAD///9SVhtjAAAAA3RSTlMAPse+s4iwAAAAM0lEQVQIW2NggAGuVasWgDBpDDAQUoSaob0Jao73lgVojOitUEazBZRRvR3KmJa5AO4KAGBtLuMAuhIIAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAAA1/GhpCidAAAAAXRSTlMAQObYZgAAABJJREFUCB1jZGBgrMNAQEEc4gCSfAX5bRw/NQAAAABJRU5ErkJggg==', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAAAAAAAAAAACAkAISUALzQAMTcAQEcAeokAorYA1/H///8BrzTFAAAAA3RSTlMAPse+s4iwAAAAM0lEQVQIW2NggAGuVasWgDBpDDAQUoSaob0Jao73lgVojOitUEazBZRRvR3KmJa5AO4KAGBtLuMAuhIIAAAAAElFTkSuQmCC', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAABV/wErM5hwAAAAAXRSTlMAQObYZgAAABJJREFUCB1jZGBgrMNAQEEc4gCSfAX5bRw/NQAAAABJRU5ErkJggg==', 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAAAAAAAAAADCgANKAASOAATOwAZTAAwkQBAwQBV/wH////+Fmy4AAAAA3RSTlMAPse+s4iwAAAAM0lEQVQIW2NggAGuVasWgDBpDDAQUoSaob0Jao73lgVojOitUEazBZRRvR3KmJa5AO4KAGBtLuMAuhIIAAAAAElFTkSuQmCC'] + }[Conf['favicon']]; + f = Favicon; + t = 'data:image/png;base64,'; + i = 0; + while (items[i]) { + items[i] = t + items[i++]; + } + f.unreadDead = items[0], f.unreadDeadY = items[1], f.unreadSFW = items[2], f.unreadSFWY = items[3], f.unreadNSFW = items[4], f.unreadNSFWY = items[5]; + return f.update(); + }, + update: function() { + if (this.SFW) { + this.unread = this.unreadSFW; + return this.unreadY = this.unreadSFWY; + } else { + this.unread = this.unreadNSFW; + return this.unreadY = this.unreadNSFWY; + } + }, + dead: 'data:image/gif;base64,R0lGODlhEAAQAKECAAAAAP8AAP///////yH5BAEKAAIALAAAAAAQABAAAAIvlI+pq+D9DAgUoFkPDlbs7lFZKIJOJJ3MyraoB14jFpOcVMpzrnF3OKlZYsMWowAAOw==', + logo: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACAAgMAAAC+UIlYAAAACVBMVEUAAGcAAABmzDNZt9VtAAAAAXRSTlMAQObYZgAAAGlJREFUWMPtlkEKADEIA/tJP9lXLttQto2yHxgDHozTi0ToGK2WKZZ+HAQQMZc+xBwI4EZ+wAC2IfPuSIDOZJrSZQEAX9eVJhhwIuUYAnQe8rhAEMAZlTI2MID9f5Clyh0JeE1V1ZEAvB4qDfwuJTSGRAAAAABJRU5ErkJggg==' + }; + + return Favicon; + +}).call(this); + +MarkNewIPs = (function() { + var MarkNewIPs; + + MarkNewIPs = { + init: function() { + if (g.VIEW !== 'thread' || !Conf['Mark New IPs']) { + return; + } + return Callbacks.Thread.push({ + name: 'Mark New IPs', + cb: this.node + }); + }, + node: function() { + MarkNewIPs.ipCount = this.ipCount; + MarkNewIPs.postCount = this.posts.keys.length; + return $.on(d, 'ThreadUpdate', MarkNewIPs.onUpdate); + }, + onUpdate: function(e) { + var deletedPosts, fullID, i, ipCount, j, k, len, len1, newPosts, postCount, ref; + ref = e.detail, ipCount = ref.ipCount, postCount = ref.postCount, newPosts = ref.newPosts, deletedPosts = ref.deletedPosts; + if (ipCount == null) { + return; + } + switch (ipCount - MarkNewIPs.ipCount) { + case postCount - MarkNewIPs.postCount + deletedPosts.length: + i = MarkNewIPs.ipCount; + for (j = 0, len = newPosts.length; j < len; j++) { + fullID = newPosts[j]; + MarkNewIPs.markNew(g.posts[fullID], ++i); + } + break; + case -deletedPosts.length: + for (k = 0, len1 = newPosts.length; k < len1; k++) { + fullID = newPosts[k]; + MarkNewIPs.markOld(g.posts[fullID]); + } + } + MarkNewIPs.ipCount = ipCount; + return MarkNewIPs.postCount = postCount; + }, + markNew: function(post, ipCount) { + var counter, suffix; + suffix = (Math.floor(ipCount / 10)) % 10 === 1 ? 'th' : ['st', 'nd', 'rd'][ipCount % 10 - 1] || 'th'; + counter = $.el('span', { + className: 'ip-counter', + textContent: "(" + ipCount + ")" + }); + post.nodes.nameBlock.title = "This is the " + ipCount + suffix + " IP in the thread."; + $.add(post.nodes.nameBlock, [$.tn(' '), counter]); + return $.addClass(post.nodes.root, 'new-ip'); + }, + markOld: function(post) { + post.nodes.nameBlock.title = 'Not the first post from this IP.'; + return $.addClass(post.nodes.root, 'old-ip'); + } + }; + + return MarkNewIPs; + +}).call(this); + +ReplyPruning = (function() { + var ReplyPruning; + + ReplyPruning = { + init: function() { + var el, label; + if (!(g.VIEW === 'thread' && Conf['Reply Pruning'])) { + return; + } + this.active = !(Conf['Quote Threading'] && Conf['Thread Quotes']); + this.container = $.frag(); + this.summary = $.el('span', { + hidden: true, + className: 'summary' + }); + this.summary.style.cursor = 'pointer'; + $.on(this.summary, 'click', (function(_this) { + return function() { + _this.inputs.enabled.checked = !_this.inputs.enabled.checked; + return $.event('change', null, _this.inputs.enabled); + }; + })(this)); + label = UI.checkbox('Prune Replies', 'Show Last', this.active); + el = $.el('span', { + title: 'Maximum number of replies to show.' + }, { + innerHTML: " " + }); + $.prepend(el, label); + this.inputs = { + enabled: label.firstElementChild, + replies: el.lastElementChild + }; + $.on(this.inputs.enabled, 'change', this.setEnabled); + $.on(this.inputs.replies, 'change', $.cb.value); + Header.menu.addEntry({ + el: el, + order: 190 + }); + return Callbacks.Thread.push({ + name: 'Reply Pruning', + cb: this.node + }); + }, + position: 0, + hidden: 0, + hiddenFiles: 0, + total: 0, + totalFiles: 0, + setEnabled: function() { + var other; + other = QuoteThreading.input; + if (this.checked && (other != null ? other.checked : void 0)) { + other.checked = false; + $.event('change', null, other); + } + return ReplyPruning.active = this.checked; + }, + showIfHidden: function(id) { + var ref; + if ((ref = ReplyPruning.container) != null ? ref.getElementById(id) : void 0) { + ReplyPruning.inputs.enabled.checked = false; + return $.event('change', null, ReplyPruning.inputs.enabled); + } + }, + node: function() { + var ref; + ReplyPruning.thread = this; + this.posts.forEach(function(post) { + if (post.isReply) { + ReplyPruning.total++; + if (post.file) { + return ReplyPruning.totalFiles++; + } + } + }); + if (ReplyPruning.active && /^#p\d+$/.test(location.hash) && (0 <= (ref = this.posts.keys.indexOf(location.hash.slice(2))) && ref < 1 + Math.max(ReplyPruning.total - +Conf["Max Replies"], 0))) { + ReplyPruning.active = ReplyPruning.inputs.enabled.checked = false; + } + $.after(this.OP.nodes.root, ReplyPruning.summary); + $.on(ReplyPruning.inputs.enabled, 'change', ReplyPruning.update); + $.on(ReplyPruning.inputs.replies, 'change', ReplyPruning.update); + $.on(d, 'ThreadUpdate', ReplyPruning.updateCount); + $.on(d, 'ThreadUpdate', ReplyPruning.update); + return ReplyPruning.update(); + }, + updateCount: function(e) { + var fullID, i, len, ref; + if (e.detail[404]) { + return; + } + ref = e.detail.newPosts; + for (i = 0, len = ref.length; i < len; i++) { + fullID = ref[i]; + ReplyPruning.total++; + if (g.posts[fullID].file) { + ReplyPruning.totalFiles++; + } + } + }, + update: function() { + var boardTop, frag, hidden2, oldPos, post, posts; + hidden2 = ReplyPruning.active ? Math.max(ReplyPruning.total - +Conf["Max Replies"], 0) : 0; + oldPos = d.body.clientHeight - window.scrollY; + posts = ReplyPruning.thread.posts; + if (ReplyPruning.hidden < hidden2) { + while (ReplyPruning.hidden < hidden2 && ReplyPruning.position < posts.keys.length) { + post = posts[posts.keys[ReplyPruning.position++]]; + if (post.isReply && !post.isFetchedQuote) { + $.add(ReplyPruning.container, post.nodes.root); + ReplyPruning.hidden++; + if (post.file) { + ReplyPruning.hiddenFiles++; + } + } + } + } else if (ReplyPruning.hidden > hidden2) { + frag = $.frag(); + while (ReplyPruning.hidden > hidden2 && ReplyPruning.position > 0) { + post = posts[posts.keys[--ReplyPruning.position]]; + if (post.isReply && !post.isFetchedQuote) { + $.prepend(frag, post.nodes.root); + ReplyPruning.hidden--; + if (post.file) { + ReplyPruning.hiddenFiles--; + } + } + } + $.after(ReplyPruning.summary, frag); + $.event('PostsInserted'); + } + ReplyPruning.summary.textContent = ReplyPruning.active ? Build.summaryText('+', ReplyPruning.hidden, ReplyPruning.hiddenFiles) : Build.summaryText('-', ReplyPruning.total, ReplyPruning.totalFiles); + ReplyPruning.summary.hidden = ReplyPruning.total <= +Conf["Max Replies"]; + if ((boardTop = Header.getTopOf($('.board'))) < 0) { + return window.scroll(window.scrollX, Math.max(d.body.clientHeight - oldPos, window.scrollY + boardTop)); + } + } + }; + + return ReplyPruning; + +}).call(this); + +ThreadExcerpt = (function() { + var ThreadExcerpt; + + ThreadExcerpt = { + init: function() { + if (g.BOARD.ID !== 'f' || g.VIEW !== 'thread' || !Conf['Thread Excerpt']) { + return; + } + return Callbacks.Thread.push({ + name: 'Thread Excerpt', + cb: this.node + }); + }, + node: function() { + return d.title = Get.threadExcerpt(this); + } + }; + + return ThreadExcerpt; + +}).call(this); + +ThreadStats = (function() { + var ThreadStats; + + ThreadStats = { + init: function() { + var sc, statsHTML, statsTitle; + if (g.VIEW !== 'thread' || !Conf['Thread Stats']) { + return; + } + statsHTML = { + innerHTML: "? / ?" + ((Conf["IP Count in Stats"]) ? " / ?" : "") + ((Conf["Page Count in Stats"]) ? " / ?" : "") + }; + statsTitle = 'Posts / Files'; + if (Conf['IP Count in Stats']) { + statsTitle += ' / IPs'; + } + if (Conf['Page Count in Stats']) { + statsTitle += (g.BOARD.ID === 'f' ? ' / Purge Position' : ' / Page'); + } + if (Conf['Updater and Stats in Header']) { + this.dialog = sc = $.el('span', { + id: 'thread-stats', + title: statsTitle + }); + $.extend(sc, statsHTML); + $.ready(function() { + return Header.addShortcut(sc); + }); + } else { + this.dialog = sc = UI.dialog('thread-stats', 'bottom: 0px; right: 0px;', { + innerHTML: "
          " + (statsHTML).innerHTML + "
          " + }); + $.addClass(doc, 'float'); + $.ready(function() { + return $.add(d.body, sc); + }); + } + this.postCountEl = $('#post-count', sc); + this.fileCountEl = $('#file-count', sc); + this.ipCountEl = $('#ip-count', sc); + this.pageCountEl = $('#page-count', sc); + if (this.pageCountEl) { + $.on(this.pageCountEl, 'click', ThreadStats.fetchPage); + } + return Callbacks.Thread.push({ + name: 'Thread Stats', + cb: this.node + }); + }, + node: function() { + var fileCount, postCount; + postCount = 0; + fileCount = 0; + this.posts.forEach(function(post) { + postCount++; + if (post.file) { + fileCount++; + } + if (ThreadStats.pageCountEl) { + return ThreadStats.lastPost = post.info.date; + } + }); + ThreadStats.thread = this; + ThreadStats.fetchPage(); + ThreadStats.update(postCount, fileCount, this.ipCount); + return $.on(d, 'ThreadUpdate', ThreadStats.onUpdate); + }, + onUpdate: function(e) { + var fileCount, ipCount, newPosts, postCount, ref, ref1; + if (e.detail[404]) { + return; + } + ref = e.detail, postCount = ref.postCount, fileCount = ref.fileCount, ipCount = ref.ipCount, newPosts = ref.newPosts; + ThreadStats.update(postCount, fileCount, ipCount); + if (!ThreadStats.pageCountEl) { + return; + } + if (newPosts.length) { + ThreadStats.lastPost = g.posts[newPosts[newPosts.length - 1]].info.date; + } + if (g.BOARD.ID !== 'f' && ((ref1 = ThreadStats.pageCountEl) != null ? ref1.textContent : void 0) !== '1') { + return ThreadStats.fetchPage(); + } + }, + update: function(postCount, fileCount, ipCount) { + var fileCountEl, ipCountEl, postCountEl, thread; + thread = ThreadStats.thread, postCountEl = ThreadStats.postCountEl, fileCountEl = ThreadStats.fileCountEl, ipCountEl = ThreadStats.ipCountEl; + postCountEl.textContent = postCount; + fileCountEl.textContent = fileCount; + if ((ipCount != null) && ipCountEl) { + ipCountEl.textContent = ipCount; + } + (thread.postLimit && !thread.isSticky ? $.addClass : $.rmClass)(postCountEl, 'warning'); + return (thread.fileLimit && !thread.isSticky ? $.addClass : $.rmClass)(fileCountEl, 'warning'); + }, + fetchPage: function() { + if (!ThreadStats.pageCountEl) { + return; + } + clearTimeout(ThreadStats.timeout); + if (ThreadStats.thread.isDead) { + ThreadStats.pageCountEl.textContent = 'Dead'; + $.addClass(ThreadStats.pageCountEl, 'warning'); + return; + } + ThreadStats.timeout = setTimeout(ThreadStats.fetchPage, 2 * $.MINUTE); + return $.ajax("//a.4cdn.org/" + ThreadStats.thread.board + "/threads.json", { + onload: ThreadStats.onThreadsLoad + }, { + whenModified: 'ThreadStats' + }); + }, + onThreadsLoad: function() { + var i, j, k, len, len1, len2, page, purgePos, ref, ref1, ref2, thread; + if (this.status === 200) { + ref = this.response; + for (i = 0, len = ref.length; i < len; i++) { + page = ref[i]; + if (g.BOARD.ID === 'f') { + purgePos = 1; + ref1 = page.threads; + for (j = 0, len1 = ref1.length; j < len1; j++) { + thread = ref1[j]; + if (thread.no < ThreadStats.thread.ID) { + purgePos++; + } + } + ThreadStats.pageCountEl.textContent = purgePos; + } else { + ref2 = page.threads; + for (k = 0, len2 = ref2.length; k < len2; k++) { + thread = ref2[k]; + if (!(thread.no === ThreadStats.thread.ID)) { + continue; + } + ThreadStats.pageCountEl.textContent = page.page; + (page.page === this.response.length ? $.addClass : $.rmClass)(ThreadStats.pageCountEl, 'warning'); + ThreadStats.lastPageUpdate = new Date(thread.last_modified * $.SECOND); + ThreadStats.retry(); + return; + } + } + } + } else if (this.status === 304) { + return ThreadStats.retry(); + } + }, + retry: function() { + var ref; + if (g.BOARD.ID !== 'f' && ThreadStats.lastPost > ThreadStats.lastPageUpdate && ((ref = ThreadStats.pageCountEl) != null ? ref.textContent : void 0) !== '1') { + clearTimeout(ThreadStats.timeout); + return ThreadStats.timeout = setTimeout(ThreadStats.fetchPage, 5 * $.SECOND); + } + } + }; + + return ThreadStats; + +}).call(this); + +ThreadUpdater = (function() { + var ThreadUpdater, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + ThreadUpdater = { + init: function() { + var conf, el, input, name, ref, sc, subEntries, updateLink; + if (g.VIEW !== 'thread' || !Conf['Thread Updater']) { + return; + } + this.audio = $.el('audio', { + src: ThreadUpdater.beep + }); + if (Conf['Updater and Stats in Header']) { + this.dialog = sc = $.el('span', { + id: 'updater' + }); + $.extend(sc, { + innerHTML: "" + }); + $.ready(function() { + return Header.addShortcut(sc); + }); + } else { + this.dialog = sc = UI.dialog('updater', 'bottom: 0px; left: 0px;', { + innerHTML: "
          " + }); + $.addClass(doc, 'float'); + $.ready(function() { + return $.add(d.body, sc); + }); + } + this.checkPostCount = 0; + this.timer = $('#update-timer', sc); + this.status = $('#update-status', sc); + $.on(this.timer, 'click', this.update); + $.on(this.status, 'click', this.update); + updateLink = $.el('span', { + className: 'brackets-wrap updatelink' + }); + $.extend(updateLink, { + innerHTML: "Update" + }); + Main.ready(function() { + var navLinksBot; + if ((navLinksBot = $('.navLinksBot'))) { + return $.add(navLinksBot, [$.tn(' '), updateLink]); + } + }); + $.on(updateLink.firstElementChild, 'click', this.update); + subEntries = []; + ref = Config.updater.checkbox; + for (name in ref) { + conf = ref[name]; + el = UI.checkbox(name, name); + el.title = conf[1]; + input = el.firstElementChild; + $.on(input, 'change', $.cb.checked); + if (input.name === 'Scroll BG') { + $.on(input, 'change', this.cb.scrollBG); + this.cb.scrollBG(); + } else if (input.name === 'Auto Update') { + $.on(input, 'change', this.setInterval); + } + subEntries.push({ + el: el + }); + } + this.settings = $.el('span', { + innerHTML: "Interval" + }); + $.on(this.settings, 'click', this.intervalShortcut); + subEntries.push({ + el: this.settings + }); + Header.menu.addEntry(this.entry = { + el: $.el('span', { + textContent: 'Updater' + }), + order: 110, + subEntries: subEntries + }); + return Callbacks.Thread.push({ + name: 'Thread Updater', + cb: this.node + }); + }, + node: function() { + ThreadUpdater.thread = this; + ThreadUpdater.root = this.OP.nodes.root.parentNode; + ThreadUpdater.outdateCount = 0; + ThreadUpdater.postIDs = []; + ThreadUpdater.fileIDs = []; + this.posts.forEach(function(post) { + ThreadUpdater.postIDs.push(post.ID); + if (post.file) { + return ThreadUpdater.fileIDs.push(post.ID); + } + }); + ThreadUpdater.cb.interval.call($.el('input', { + value: Conf['Interval'] + })); + $.on(d, 'QRPostSuccessful', ThreadUpdater.cb.checkpost); + $.on(d, 'visibilitychange', ThreadUpdater.cb.visibility); + return ThreadUpdater.setInterval(); + }, + + /* + http://freesound.org/people/pierrecartoons1979/sounds/90112/ + cc-by-nc-3.0 + */ + beep: 'data:audio/wav;base64,UklGRjQDAABXQVZFZm10IBAAAAABAAEAgD4AAIA+AAABAAgAc21wbDwAAABBAAADAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkYXRhzAIAAGMms8em0tleMV4zIpLVo8nhfSlcPR102Ki+5JspVEkdVtKzs+K1NEhUIT7DwKrcy0g6WygsrM2k1NpiLl0zIY/WpMrjgCdbPhxw2Kq+5Z4qUkkdU9K1s+K5NkVTITzBwqnczko3WikrqM+l1NxlLF0zIIvXpsnjgydZPhxs2ay95aIrUEkdUdC3suK8N0NUIjq+xKrcz002WioppdGm091pK1w0IIjYp8jkhydXPxxq2K295aUrTkoeTs65suK+OUFUIzi7xqrb0VA0WSoootKm0t5tKlo1H4TYqMfkiydWQBxm16+85actTEseS8y7seHAPD9TIza5yKra01QyWSson9On0d5wKVk2H4DYqcfkjidUQB1j1rG75KsvSkseScu8seDCPz1TJDW2yara1FYxWSwnm9Sn0N9zKVg2H33ZqsXkkihSQR1g1bK65K0wSEsfR8i+seDEQTxUJTOzy6rY1VowWC0mmNWoz993KVc3H3rYq8TklSlRQh1d1LS647AyR0wgRMbAsN/GRDpTJTKwzKrX1l4vVy4lldWpzt97KVY4IXbUr8LZljVPRCxhw7W3z6ZISkw1VK+4sMWvXEhSPk6buay9sm5JVkZNiLWqtrJ+TldNTnquqbCwilZXU1BwpKirrpNgWFhTaZmnpquZbFlbVmWOpaOonHZcXlljhaGhpZ1+YWBdYn2cn6GdhmdhYGN3lp2enIttY2Jjco+bnJuOdGZlZXCImJqakHpoZ2Zug5WYmZJ/bGlobX6RlpeSg3BqaW16jZSVkoZ0bGtteImSk5KIeG5tbnaFkJKRinxxbm91gY2QkIt/c3BwdH6Kj4+LgnZxcXR8iI2OjIR5c3J0e4WLjYuFe3VzdHmCioyLhn52dHR5gIiKioeAeHV1eH+GiYqHgXp2dnh9hIiJh4J8eHd4fIKHiIeDfXl4eHyBhoeHhH96eHmA', + playBeep: function() { + var audio; + audio = ThreadUpdater.audio; + if (audio.paused) { + return audio.play(); + } else { + return $.one(audio, 'ended', ThreadUpdater.playBeep); + } + }, + cb: { + checkpost: function(e) { + if (e.detail.threadID !== ThreadUpdater.thread.ID) { + return; + } + ThreadUpdater.postID = e.detail.postID; + ThreadUpdater.checkPostCount = 0; + ThreadUpdater.outdateCount = 0; + return ThreadUpdater.setInterval(); + }, + visibility: function() { + if (d.hidden) { + return; + } + ThreadUpdater.outdateCount = 0; + if (ThreadUpdater.seconds > ThreadUpdater.interval) { + return ThreadUpdater.setInterval(); + } + }, + scrollBG: function() { + return ThreadUpdater.scrollBG = Conf['Scroll BG'] ? function() { + return true; + } : function() { + return !d.hidden; + }; + }, + interval: function(e) { + var val; + val = parseInt(this.value, 10); + if (val < 1) { + val = 1; + } + ThreadUpdater.interval = this.value = val; + if (e) { + return $.cb.value.call(this); + } + }, + load: function() { + var req; + req = ThreadUpdater.req; + switch (req.status) { + case 200: + ThreadUpdater.parse(req); + if (ThreadUpdater.thread.isArchived) { + return ThreadUpdater.kill(); + } else { + return ThreadUpdater.setInterval(); + } + break; + case 404: + return $.ajax("//a.4cdn.org/" + ThreadUpdater.thread.board + "/catalog.json", { + onloadend: function() { + var confirmed, i, k, len, len1, page, ref, ref1, thread; + if (this.status === 200) { + confirmed = true; + ref = this.response; + for (i = 0, len = ref.length; i < len; i++) { + page = ref[i]; + ref1 = page.threads; + for (k = 0, len1 = ref1.length; k < len1; k++) { + thread = ref1[k]; + if (thread.no === ThreadUpdater.thread.ID) { + confirmed = false; + break; + } + } + } + } else { + confirmed = false; + } + if (confirmed) { + return ThreadUpdater.kill(); + } else { + return ThreadUpdater.error(req); + } + } + }); + default: + return ThreadUpdater.error(req); + } + } + }, + kill: function() { + ThreadUpdater.thread.kill(); + ThreadUpdater.setInterval(); + return $.event('ThreadUpdate', { + 404: true, + threadID: ThreadUpdater.thread.fullID + }); + }, + error: function(req) { + if (req.status === 304) { + ThreadUpdater.set('status', ''); + } + ThreadUpdater.setInterval(); + if (!req.status) { + return ThreadUpdater.set('status', 'Connection Failed', 'warning'); + } else if (req.status !== 304) { + return ThreadUpdater.set('status', req.statusText + " (" + req.status + ")", 'warning'); + } + }, + setInterval: function() { + var cur, interval, j, limit; + clearTimeout(ThreadUpdater.timeoutID); + if (ThreadUpdater.thread.isDead) { + ThreadUpdater.set('status', (ThreadUpdater.thread.isArchived ? 'Archived' : '404'), 'warning'); + ThreadUpdater.set('timer', ''); + return; + } + if (ThreadUpdater.postID && ThreadUpdater.checkPostCount < 5) { + ThreadUpdater.set('timer', '...', 'loading'); + ThreadUpdater.timeoutID = setTimeout(ThreadUpdater.update, ++ThreadUpdater.checkPostCount * $.SECOND); + return; + } + if (!Conf['Auto Update']) { + ThreadUpdater.set('timer', 'Update'); + return; + } + interval = ThreadUpdater.interval; + if (Conf['Optional Increase']) { + limit = d.hidden ? 10 : 5; + j = Math.min(ThreadUpdater.outdateCount, limit); + cur = (Math.floor(interval * 0.1) || 1) * j * j; + ThreadUpdater.seconds = $.minmax(cur, interval, 300); + } else { + ThreadUpdater.seconds = interval; + } + return ThreadUpdater.timeout(); + }, + intervalShortcut: function() { + var settings; + Settings.open('Advanced'); + settings = $.id('fourchanx-settings'); + return $('input[name=Interval]', settings).focus(); + }, + set: function(name, text, klass) { + var el, node; + el = ThreadUpdater[name]; + if (node = el.firstChild) { + node.data = text; + } else { + el.textContent = text; + } + return el.className = klass != null ? klass : (text === '' ? 'empty' : ''); + }, + timeout: function() { + if (ThreadUpdater.seconds) { + ThreadUpdater.set('timer', ThreadUpdater.seconds); + ThreadUpdater.timeoutID = setTimeout(ThreadUpdater.timeout, 1000); + } else { + ThreadUpdater.outdateCount++; + ThreadUpdater.update(); + } + return ThreadUpdater.seconds--; + }, + update: function() { + var ref; + clearTimeout(ThreadUpdater.timeoutID); + ThreadUpdater.set('timer', '...', 'loading'); + if ((ref = ThreadUpdater.req) != null) { + ref.abort(); + } + return ThreadUpdater.req = $.ajax("//a.4cdn.org/" + ThreadUpdater.thread.board + "/thread/" + ThreadUpdater.thread + ".json", { + onloadend: ThreadUpdater.cb.load, + timeout: $.MINUTE + }, { + whenModified: 'ThreadUpdater' + }); + }, + updateThreadStatus: function(type, status) { + var change, hasChanged; + if (!(hasChanged = ThreadUpdater.thread["is" + type] !== status)) { + return; + } + ThreadUpdater.thread.setStatus(type, status); + if (type === 'Closed' && ThreadUpdater.thread.isArchived) { + return; + } + change = type === 'Sticky' ? status ? 'now a sticky' : 'not a sticky anymore' : status ? 'now closed' : 'not closed anymore'; + return new Notice('info', "The thread is " + change + ".", 30); + }, + parse: function(req) { + var ID, OP, board, deletedFiles, deletedPosts, files, firstPost, i, index, ipCountEl, k, l, lastPost, len, len1, len2, len3, m, newPosts, node, post, postObject, postObjects, posts, ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, scroll, thread, unreadCount, unreadQYCount; + postObjects = req.response.posts; + OP = postObjects[0]; + thread = ThreadUpdater.thread; + board = thread.board; + ref = ThreadUpdater.postIDs, lastPost = ref[ref.length - 1]; + if (postObjects[postObjects.length - 1].no < lastPost && new Date(req.getResponseHeader('Last-Modified')) - thread.posts[lastPost].info.date < 30 * $.SECOND) { + return; + } + Build.spoilerRange[board] = OP.custom_spoiler; + thread.setStatus('Archived', !!OP.archived); + ThreadUpdater.updateThreadStatus('Sticky', !!OP.sticky); + ThreadUpdater.updateThreadStatus('Closed', !!OP.closed); + thread.postLimit = !!OP.bumplimit; + thread.fileLimit = !!OP.imagelimit; + if (OP.unique_ips != null) { + thread.ipCount = OP.unique_ips; + } + posts = []; + index = []; + files = []; + newPosts = []; + for (i = 0, len = postObjects.length; i < len; i++) { + postObject = postObjects[i]; + ID = postObject.no; + index.push(ID); + if (postObject.fsize) { + files.push(ID); + } + if (ID <= lastPost) { + continue; + } + if ((post = thread.posts[ID]) && !post.isFetchedQuote) { + post.resurrect(); + continue; + } + newPosts.push(board + "." + ID); + node = Build.postFromObject(postObject, board.ID); + posts.push(new Post(node, thread, board)); + if (ThreadUpdater.postID === ID) { + delete ThreadUpdater.postID; + } + } + deletedPosts = []; + ref1 = ThreadUpdater.postIDs; + for (k = 0, len1 = ref1.length; k < len1; k++) { + ID = ref1[k]; + if (!(indexOf.call(index, ID) < 0)) { + continue; + } + thread.posts[ID].kill(); + deletedPosts.push(board + "." + ID); + } + ThreadUpdater.postIDs = index; + deletedFiles = []; + ref2 = ThreadUpdater.fileIDs; + for (l = 0, len2 = ref2.length; l < len2; l++) { + ID = ref2[l]; + if (!(!(indexOf.call(files, ID) >= 0 || (ref3 = board + "." + ID, indexOf.call(deletedPosts, ref3) >= 0)))) { + continue; + } + thread.posts[ID].kill(true); + deletedFiles.push(board + "." + ID); + } + ThreadUpdater.fileIDs = files; + if (!posts.length) { + ThreadUpdater.set('status', ''); + } else { + ThreadUpdater.set('status', "+" + posts.length, 'new'); + ThreadUpdater.outdateCount = 0; + unreadCount = (ref4 = Unread.posts) != null ? ref4.size : void 0; + unreadQYCount = (ref5 = Unread.postsQuotingYou) != null ? ref5.size : void 0; + Main.callbackNodes('Post', posts); + if (d.hidden || !d.hasFocus()) { + if (Conf['Beep Quoting You'] && ((ref6 = Unread.postsQuotingYou) != null ? ref6.size : void 0) > unreadQYCount) { + ThreadUpdater.playBeep(); + if (Conf['Beep']) { + ThreadUpdater.playBeep(); + } + } else if (Conf['Beep'] && ((ref7 = Unread.posts) != null ? ref7.size : void 0) > 0 && unreadCount === 0) { + ThreadUpdater.playBeep(); + } + } + scroll = Conf['Auto Scroll'] && ThreadUpdater.scrollBG() && ThreadUpdater.root.getBoundingClientRect().bottom - doc.clientHeight < 25; + firstPost = null; + for (m = 0, len3 = posts.length; m < len3; m++) { + post = posts[m]; + if (!QuoteThreading.insert(post)) { + firstPost || (firstPost = post.nodes.root); + $.add(ThreadUpdater.root, post.nodes.root); + } + } + $.event('PostsInserted'); + if (scroll) { + if (Conf['Bottom Scroll']) { + window.scrollTo(0, d.body.clientHeight); + } else { + if (firstPost) { + Header.scrollTo(firstPost); + } + } + } + } + if ((OP.unique_ips != null) && (ipCountEl = $.id('unique-ips'))) { + ipCountEl.textContent = OP.unique_ips; + ipCountEl.previousSibling.textContent = ipCountEl.previousSibling.textContent.replace(/\b(?:is|are)\b/, OP.unique_ips === 1 ? 'is' : 'are'); + ipCountEl.nextSibling.textContent = ipCountEl.nextSibling.textContent.replace(/\bposters?\b/, OP.unique_ips === 1 ? 'poster' : 'posters'); + } + return $.event('ThreadUpdate', { + 404: false, + threadID: thread.fullID, + newPosts: newPosts, + deletedPosts: deletedPosts, + deletedFiles: deletedFiles, + postCount: OP.replies + 1, + fileCount: OP.images + !!OP.fsize, + ipCount: OP.unique_ips + }); + } + }; + + return ThreadUpdater; + +}).call(this); + +ThreadWatcher = (function() { + var ThreadWatcher, + slice = [].slice; + + ThreadWatcher = { + init: function() { + var sc; + if (!(this.enabled = Conf['Thread Watcher'])) { + return; + } + this.shortcut = sc = $.el('a', { + id: 'watcher-link', + textContent: 'Watcher', + title: 'Thread Watcher', + href: 'javascript:;', + className: 'disabled fa fa-eye' + }); + this.db = new DataBoard('watchedThreads', this.refresh, true); + this.dialog = UI.dialog('thread-watcher', 'top: 50px; left: 0px;', { + innerHTML: "
          Thread Watcher ×
          " + }); + this.status = $('#watcher-status', this.dialog); + this.list = this.dialog.lastElementChild; + this.refreshButton = $('.refresh', this.dialog); + this.closeButton = $('.move > .close', this.dialog); + this.unreaddb = Unread.db || new DataBoard('lastReadPosts'); + this.unreadEnabled = Conf['Remember Last Read Post']; + $.on(d, 'QRPostSuccessful', this.cb.post); + $.on(sc, 'click', this.toggleWatcher); + $.on(this.refreshButton, 'click', this.buttonFetchAll); + $.on(this.closeButton, 'click', this.toggleWatcher); + $.on(d, '4chanXInitFinished', this.ready); + switch (g.VIEW) { + case 'index': + $.on(d, 'IndexRefresh', this.cb.onIndexRefresh); + break; + case 'thread': + $.on(d, 'ThreadUpdate', this.cb.onThreadRefresh); + } + if (Conf['Fixed Thread Watcher']) { + $.addClass(doc, 'fixed-watcher'); + } + if (Conf['Toggleable Thread Watcher']) { + this.dialog.hidden = true; + Header.addShortcut(sc); + $.addClass(doc, 'toggleable-watcher'); + } + ThreadWatcher.fetchAuto(); + if (g.VIEW === 'index' && Conf['JSON Index'] && Conf['Menu'] && g.BOARD.ID !== 'f') { + Menu.menu.addEntry({ + el: $.el('a', { + href: 'javascript:;', + className: 'has-shortcut-text' + }, { + innerHTML: "Alt+click" + }), + order: 6, + open: function(arg) { + var thread; + thread = arg.thread; + if (Conf['Index Mode'] !== 'catalog') { + return false; + } + this.el.firstElementChild.textContent = ThreadWatcher.isWatched(thread) ? 'Unwatch' : 'Watch'; + if (this.cb) { + $.off(this.el, 'click', this.cb); + } + this.cb = function() { + $.event('CloseMenu'); + return ThreadWatcher.toggle(thread); + }; + $.on(this.el, 'click', this.cb); + return true; + } + }); + } + Callbacks.Post.push({ + name: 'Thread Watcher', + cb: this.node + }); + return Callbacks.CatalogThread.push({ + name: 'Thread Watcher', + cb: this.catalogNode + }); + }, + isWatched: function(thread) { + var ref; + return (ref = ThreadWatcher.db) != null ? ref.get({ + boardID: thread.board.ID, + threadID: thread.ID + }) : void 0; + }, + node: function() { + var toggler; + if (this.isReply) { + return; + } + if (this.isClone) { + toggler = $('.watch-thread-link', this.nodes.post); + } else { + toggler = $.el('a', { + href: 'javascript:;', + className: 'watch-thread-link' + }); + $.before($('input', this.nodes.post), toggler); + } + return $.on(toggler, 'click', ThreadWatcher.cb.toggle); + }, + catalogNode: function() { + if (ThreadWatcher.isWatched(this.thread)) { + $.addClass(this.nodes.root, 'watched'); + } + $.on(this.nodes.thumb.parentNode, 'click', (function(_this) { + return function(e) { + if (!(e.button === 0 && e.altKey)) { + return; + } + ThreadWatcher.toggle(_this.thread); + return e.preventDefault(); + }; + })(this)); + return $.on(this.nodes.thumb.parentNode, 'mousedown', function(e) { + if (e.button === 0 && e.altKey) { + return e.preventDefault(); + } + }); + }, + ready: function() { + $.off(d, '4chanXInitFinished', ThreadWatcher.ready); + if (!Main.isThisPageLegit()) { + return; + } + ThreadWatcher.refresh(); + $.add(d.body, ThreadWatcher.dialog); + if (!Conf['Auto Watch']) { + return; + } + return $.get('AutoWatch', 0, function(arg) { + var AutoWatch, thread; + AutoWatch = arg.AutoWatch; + if (!(thread = g.BOARD.threads[AutoWatch])) { + return; + } + ThreadWatcher.add(thread); + return $["delete"]('AutoWatch'); + }); + }, + toggleWatcher: function() { + $.toggleClass(ThreadWatcher.shortcut, 'disabled'); + return ThreadWatcher.dialog.hidden = !ThreadWatcher.dialog.hidden; + }, + cb: { + openAll: function() { + var a, i, len, ref; + if ($.hasClass(this, 'disabled')) { + return; + } + ref = $$('a[title]', ThreadWatcher.list); + for (i = 0, len = ref.length; i < len; i++) { + a = ref[i]; + $.open(a.href); + } + return $.event('CloseMenu'); + }, + pruneDeads: function() { + var boardID, data, i, len, ref, ref1, threadID; + if ($.hasClass(this, 'disabled')) { + return; + } + ThreadWatcher.db.forceSync(); + ref = ThreadWatcher.getAll(); + for (i = 0, len = ref.length; i < len; i++) { + ref1 = ref[i], boardID = ref1.boardID, threadID = ref1.threadID, data = ref1.data; + if (!data.isDead) { + continue; + } + delete ThreadWatcher.db.data.boards[boardID][threadID]; + ThreadWatcher.db.deleteIfEmpty({ + boardID: boardID + }); + } + ThreadWatcher.db.save(); + ThreadWatcher.refresh(); + return $.event('CloseMenu'); + }, + toggle: function() { + var thread; + thread = Get.postFromNode(this).thread; + Index.followedThreadID = thread.ID; + ThreadWatcher.toggle(thread); + return delete Index.followedThreadID; + }, + rm: function() { + var boardID, ref, threadID; + ref = this.parentNode.dataset.fullID.split('.'), boardID = ref[0], threadID = ref[1]; + return ThreadWatcher.rm(boardID, +threadID); + }, + post: function(e) { + var boardID, postID, ref, threadID; + ref = e.detail, boardID = ref.boardID, threadID = ref.threadID, postID = ref.postID; + if (postID === threadID) { + if (Conf['Auto Watch']) { + return $.set('AutoWatch', threadID); + } + } else if (Conf['Auto Watch Reply']) { + return ThreadWatcher.add(g.threads[boardID + '.' + threadID]); + } + }, + onIndexRefresh: function() { + var boardID, data, db, ref, threadID; + db = ThreadWatcher.db; + boardID = g.BOARD.ID; + db.forceSync(); + ref = db.data.boards[boardID]; + for (threadID in ref) { + data = ref[threadID]; + if (!(data != null ? data.isDead : void 0) && !(threadID in g.BOARD.threads)) { + if (Conf['Auto Prune'] || !(data && typeof data === 'object')) { + db["delete"]({ + boardID: boardID, + threadID: threadID + }); + } else { + if (ThreadWatcher.unreadEnabled && Conf['Show Unread Count']) { + ThreadWatcher.fetchStatus({ + boardID: boardID, + threadID: threadID, + data: data + }); + } + data.isDead = true; + db.set({ + boardID: boardID, + threadID: threadID, + val: data + }); + } + } + } + return ThreadWatcher.refresh(); + }, + onThreadRefresh: function(e) { + var thread; + thread = g.threads[e.detail.threadID]; + if (!(e.detail[404] && ThreadWatcher.db.get({ + boardID: thread.board.ID, + threadID: thread.ID + }))) { + return; + } + return ThreadWatcher.add(thread); + } + }, + requests: [], + fetched: 0, + clearRequests: function() { + ThreadWatcher.requests = []; + ThreadWatcher.fetched = 0; + ThreadWatcher.status.textContent = ''; + return $.rmClass(ThreadWatcher.refreshButton, 'fa-spin'); + }, + abort: function() { + var i, len, ref, req; + ref = ThreadWatcher.requests; + for (i = 0, len = ref.length; i < len; i++) { + req = ref[i]; + if (req.readyState !== 4) { + req.abort(); + } + } + return ThreadWatcher.clearRequests(); + }, + fetchAuto: function() { + var db, interval, now; + clearTimeout(ThreadWatcher.timeout); + if (!Conf['Auto Update Thread Watcher']) { + return; + } + db = ThreadWatcher.db; + interval = ThreadWatcher.unreadEnabled && Conf['Show Unread Count'] ? 5 * $.MINUTE : 2 * $.HOUR; + now = Date.now(); + if (now >= (db.data.lastChecked || 0) + interval) { + db.data.lastChecked = now; + ThreadWatcher.fetchAllStatus(); + db.save(); + } + return ThreadWatcher.timeout = setTimeout(ThreadWatcher.fetchAuto, interval); + }, + buttonFetchAll: function() { + if (ThreadWatcher.requests.length) { + return ThreadWatcher.abort(); + } else { + return ThreadWatcher.fetchAllStatus(); + } + }, + fetchAllStatus: function() { + var i, len, ref, thread, threads; + ThreadWatcher.db.forceSync(); + ThreadWatcher.unreaddb.forceSync(); + if ((ref = QuoteYou.db) != null) { + ref.forceSync(); + } + if (!(threads = ThreadWatcher.getAll()).length) { + return; + } + for (i = 0, len = threads.length; i < len; i++) { + thread = threads[i]; + ThreadWatcher.fetchStatus(thread); + } + }, + fetchStatus: function(thread, force) { + var boardID, data, req, threadID; + boardID = thread.boardID, threadID = thread.threadID, data = thread.data; + if (data.isDead && !force) { + return; + } + if (ThreadWatcher.requests.length === 0) { + ThreadWatcher.status.textContent = '...'; + $.addClass(ThreadWatcher.refreshButton, 'fa-spin'); + } + req = $.ajax("//a.4cdn.org/" + boardID + "/thread/" + threadID + ".json", { + onloadend: function() { + return ThreadWatcher.parseStatus.call(this, thread); + }, + timeout: $.MINUTE + }, { + whenModified: force ? false : 'ThreadWatcher' + }); + return ThreadWatcher.requests.push(req); + }, + parseStatus: function(arg) { + var boardID, data, i, isDead, lastReadPost, len, match, postObj, quotesYou, quotingYou, ref, ref1, regexp, threadID, unread; + boardID = arg.boardID, threadID = arg.threadID, data = arg.data; + ThreadWatcher.fetched++; + if (ThreadWatcher.fetched === ThreadWatcher.requests.length) { + ThreadWatcher.clearRequests(); + } else { + ThreadWatcher.status.textContent = (Math.round(ThreadWatcher.fetched / ThreadWatcher.requests.length * 100)) + "%"; + } + if (this.status === 200 && this.response) { + isDead = !!this.response.posts[0].archived; + if (isDead && Conf['Auto Prune']) { + ThreadWatcher.db["delete"]({ + boardID: boardID, + threadID: threadID + }); + ThreadWatcher.refresh(); + return; + } + lastReadPost = ThreadWatcher.unreaddb.get({ + boardID: boardID, + threadID: threadID, + defaultValue: 0 + }); + unread = quotingYou = 0; + ref = this.response.posts; + for (i = 0, len = ref.length; i < len; i++) { + postObj = ref[i]; + if (!(postObj.no > lastReadPost)) { + continue; + } + if ((ref1 = QuoteYou.db) != null ? ref1.get({ + boardID: boardID, + threadID: threadID, + postID: postObj.no + }) : void 0) { + continue; + } + unread++; + if (!(QuoteYou.db && postObj.com)) { + continue; + } + quotesYou = false; + regexp = /]*\bhref="(?:\/([^\/]+)\/thread\/)?(\d+)?(?:#p(\d+))?"/g; + while (match = regexp.exec(postObj.com)) { + if (QuoteYou.db.get({ + boardID: match[1] || boardID, + threadID: match[2] || threadID, + postID: match[3] || match[2] || threadID + })) { + quotesYou = true; + break; + } + } + if (quotesYou && !Filter.isHidden(Build.parseJSON(postObj, boardID))) { + quotingYou++; + } + } + if (isDead !== data.isDead || unread !== data.unread || quotingYou !== data.quotingYou) { + data.isDead = isDead; + data.unread = unread; + data.quotingYou = quotingYou; + ThreadWatcher.db.set({ + boardID: boardID, + threadID: threadID, + val: data + }); + return ThreadWatcher.refresh(); + } + } else if (this.status === 404) { + if (Conf['Auto Prune']) { + ThreadWatcher.db["delete"]({ + boardID: boardID, + threadID: threadID + }); + } else { + data.isDead = true; + delete data.unread; + delete data.quotingYou; + ThreadWatcher.db.set({ + boardID: boardID, + threadID: threadID, + val: data + }); + } + return ThreadWatcher.refresh(); + } + }, + getAll: function() { + var all, boardID, data, ref, threadID, threads; + all = []; + ref = ThreadWatcher.db.data.boards; + for (boardID in ref) { + threads = ref[boardID]; + if (Conf['Current Board'] && boardID !== g.BOARD.ID) { + continue; + } + for (threadID in threads) { + data = threads[threadID]; + if (data && typeof data === 'object') { + all.push({ + boardID: boardID, + threadID: threadID, + data: data + }); + } + } + } + return all; + }, + makeLine: function(boardID, threadID, data) { + var count, div, fullID, link, title, x; + x = $.el('a', { + className: 'fa fa-times', + href: 'javascript:;' + }); + $.on(x, 'click', ThreadWatcher.cb.rm); + link = $.el('a', { + href: "/" + boardID + "/thread/" + threadID, + title: data.excerpt, + className: 'watcher-link' + }); + if (ThreadWatcher.unreadEnabled && Conf['Show Unread Count'] && (data.unread != null)) { + count = $.el('span', { + textContent: "(" + data.unread + ")", + className: 'watcher-unread' + }); + $.add(link, count); + } + title = $.el('span', { + textContent: data.excerpt, + className: 'watcher-title' + }); + $.add(link, title); + div = $.el('div'); + fullID = boardID + "." + threadID; + div.dataset.fullID = fullID; + if (g.VIEW === 'thread' && fullID === (g.BOARD + "." + g.THREADID)) { + $.addClass(div, 'current'); + } + if (data.isDead) { + $.addClass(div, 'dead-thread'); + } + if (ThreadWatcher.unreadEnabled && Conf['Show Unread Count']) { + if (data.unread === 0) { + $.addClass(div, 'replies-read'); + } + if (data.unread) { + $.addClass(div, 'replies-unread'); + } + if (data.quotingYou) { + $.addClass(div, 'replies-quoting-you'); + } + } + $.add(div, [x, $.tn(' '), link]); + return div; + }, + refresh: function() { + var boardID, data, i, j, len, len1, list, nodes, ref, ref1, ref2, refresher, threadID; + nodes = []; + ref = ThreadWatcher.getAll(); + for (i = 0, len = ref.length; i < len; i++) { + ref1 = ref[i], boardID = ref1.boardID, threadID = ref1.threadID, data = ref1.data; + nodes.push(ThreadWatcher.makeLine(boardID, threadID, data)); + } + list = ThreadWatcher.list; + $.rmAll(list); + $.add(list, nodes); + g.threads.forEach(function(thread) { + var helper, j, len1, post, ref2, toggler; + helper = ThreadWatcher.isWatched(thread) ? ['addClass', 'Unwatch'] : ['rmClass', 'Watch']; + if (thread.OP) { + ref2 = [thread.OP].concat(slice.call(thread.OP.clones)); + for (j = 0, len1 = ref2.length; j < len1; j++) { + post = ref2[j]; + toggler = $('.watch-thread-link', post.nodes.post); + $[helper[0]](toggler, 'watched'); + toggler.title = helper[1] + " Thread"; + } + } + if (thread.catalogView) { + return $[helper[0]](thread.catalogView.nodes.root, 'watched'); + } + }); + ThreadWatcher.refreshIcon(); + ref2 = ThreadWatcher.menu.refreshers; + for (j = 0, len1 = ref2.length; j < len1; j++) { + refresher = ref2[j]; + refresher(); + } + if (Index.nodes && Conf['Pin Watched Threads']) { + Index.sort(); + return Index.buildIndex(); + } + }, + refreshIcon: function() { + var className, i, len, ref; + ref = ['replies-unread', 'replies-quoting-you']; + for (i = 0, len = ref.length; i < len; i++) { + className = ref[i]; + ThreadWatcher.shortcut.classList.toggle(className, !!$("." + className, ThreadWatcher.dialog)); + } + }, + update: function(boardID, threadID, newData) { + var data, key, line, n, newLine, ref, val; + if (!(data = (ref = ThreadWatcher.db) != null ? ref.get({ + boardID: boardID, + threadID: threadID + }) : void 0)) { + return; + } + if (newData.isDead && Conf['Auto Prune']) { + ThreadWatcher.db["delete"]({ + boardID: boardID, + threadID: threadID + }); + ThreadWatcher.refresh(); + return; + } + n = 0; + for (key in newData) { + val = newData[key]; + if (data[key] !== val) { + n++; + } + } + if (!n) { + return; + } + ThreadWatcher.db.forceSync(); + if (!(data = ThreadWatcher.db.get({ + boardID: boardID, + threadID: threadID + }))) { + return; + } + $.extend(data, newData); + ThreadWatcher.db.set({ + boardID: boardID, + threadID: threadID, + val: data + }); + if (line = $("#watched-threads > [data-full-i-d='" + boardID + "." + threadID + "']", ThreadWatcher.dialog)) { + newLine = ThreadWatcher.makeLine(boardID, threadID, data); + $.replace(line, newLine); + return ThreadWatcher.refreshIcon(); + } else { + return ThreadWatcher.refresh(); + } + }, + set404: function(boardID, threadID, cb) { + var data, ref; + if (!(data = (ref = ThreadWatcher.db) != null ? ref.get({ + boardID: boardID, + threadID: threadID + }) : void 0)) { + return cb(); + } + if (Conf['Auto Prune']) { + ThreadWatcher.db["delete"]({ + boardID: boardID, + threadID: threadID + }); + return cb(); + } + if (data.isDead && !((data.unread != null) || (data.quotingYou != null))) { + return cb(); + } + data.isDead = true; + delete data.unread; + delete data.quotingYou; + return ThreadWatcher.db.set({ + boardID: boardID, + threadID: threadID, + val: data + }, cb); + }, + toggle: function(thread) { + var boardID, threadID; + boardID = thread.board.ID; + threadID = thread.ID; + if (ThreadWatcher.db.get({ + boardID: boardID, + threadID: threadID + })) { + return ThreadWatcher.rm(boardID, threadID); + } else { + return ThreadWatcher.add(thread); + } + }, + add: function(thread) { + var boardID, data, threadID; + data = {}; + boardID = thread.board.ID; + threadID = thread.ID; + if (thread.isDead) { + if (Conf['Auto Prune'] && ThreadWatcher.db.get({ + boardID: boardID, + threadID: threadID + })) { + ThreadWatcher.rm(boardID, threadID); + return; + } + data.isDead = true; + } + data.excerpt = Get.threadExcerpt(thread); + ThreadWatcher.db.set({ + boardID: boardID, + threadID: threadID, + val: data + }); + ThreadWatcher.refresh(); + if (ThreadWatcher.unreadEnabled && Conf['Show Unread Count']) { + return ThreadWatcher.fetchStatus({ + boardID: boardID, + threadID: threadID, + data: data + }, true); + } + }, + rm: function(boardID, threadID) { + ThreadWatcher.db["delete"]({ + boardID: boardID, + threadID: threadID + }); + return ThreadWatcher.refresh(); + }, + menu: { + refreshers: [], + init: function() { + var menu; + if (!Conf['Thread Watcher']) { + return; + } + menu = this.menu = new UI.Menu('thread watcher'); + $.on($('.menu-button', ThreadWatcher.dialog), 'click', function(e) { + return menu.toggle(e, this, ThreadWatcher); + }); + this.addHeaderMenuEntry(); + return this.addMenuEntries(); + }, + addHeaderMenuEntry: function() { + var entryEl; + if (g.VIEW !== 'thread') { + return; + } + entryEl = $.el('a', { + href: 'javascript:;' + }); + Header.menu.addEntry({ + el: entryEl, + order: 60 + }); + $.on(entryEl, 'click', function() { + return ThreadWatcher.toggle(g.threads[g.BOARD + "." + g.THREADID]); + }); + return this.refreshers.push(function() { + var addClass, ref, rmClass, text; + ref = $('.current', ThreadWatcher.list) ? ['unwatch-thread', 'watch-thread', 'Unwatch thread'] : ['watch-thread', 'unwatch-thread', 'Watch thread'], addClass = ref[0], rmClass = ref[1], text = ref[2]; + $.addClass(entryEl, addClass); + $.rmClass(entryEl, rmClass); + return entryEl.textContent = text; + }); + }, + addMenuEntries: function() { + var cb, conf, entries, entry, i, len, name, ref, ref1, refresh, subEntries; + entries = []; + entries.push({ + cb: ThreadWatcher.cb.openAll, + entry: { + el: $.el('a', { + textContent: 'Open all threads' + }) + }, + refresh: function() { + return (ThreadWatcher.list.firstElementChild ? $.rmClass : $.addClass)(this.el, 'disabled'); + } + }); + entries.push({ + cb: ThreadWatcher.cb.pruneDeads, + entry: { + el: $.el('a', { + textContent: 'Prune dead threads' + }) + }, + refresh: function() { + return ($('.dead-thread', ThreadWatcher.list) ? $.rmClass : $.addClass)(this.el, 'disabled'); + } + }); + subEntries = []; + ref = Config.threadWatcher; + for (name in ref) { + conf = ref[name]; + subEntries.push(this.createSubEntry(name, conf[1])); + } + entries.push({ + entry: { + el: $.el('span', { + textContent: 'Settings' + }), + subEntries: subEntries + } + }); + for (i = 0, len = entries.length; i < len; i++) { + ref1 = entries[i], entry = ref1.entry, cb = ref1.cb, refresh = ref1.refresh; + if (entry.el.nodeName === 'A') { + entry.el.href = 'javascript:;'; + } + if (cb) { + $.on(entry.el, 'click', cb); + } + if (refresh) { + this.refreshers.push(refresh.bind(entry)); + } + this.menu.addEntry(entry); + } + }, + createSubEntry: function(name, desc) { + var entry, input; + entry = { + type: 'thread watcher', + el: UI.checkbox(name, name.replace(' Thread Watcher', '')) + }; + entry.el.title = desc; + input = entry.el.firstElementChild; + if (name === 'Show Unread Count' && !ThreadWatcher.unreadEnabled) { + input.disabled = true; + $.addClass(entry.el, 'disabled'); + entry.el.title += '\n[Remember Last Read Post is disabled.]'; + } + $.on(input, 'change', $.cb.checked); + if (name === 'Current Board' || name === 'Show Unread Count') { + $.on(input, 'change', ThreadWatcher.refresh); + } + if (name === 'Show Unread Count' || name === 'Auto Update Thread Watcher') { + $.on(input, 'change', ThreadWatcher.fetchAuto); + } + return entry; + } + } + }; + + return ThreadWatcher; + +}).call(this); + +Unread = (function() { + var Unread; + + Unread = { + init: function() { + if (!(g.VIEW === 'thread' && (Conf['Unread Count'] || Conf['Unread Favicon'] || Conf['Unread Line'] || Conf['Remember Last Read Post'] || Conf['Desktop Notifications'] || Conf['Quote Threading']))) { + return; + } + if (Conf['Remember Last Read Post']) { + $.sync('Remember Last Read Post', function(enabled) { + return Conf['Remember Last Read Post'] = enabled; + }); + this.db = new DataBoard('lastReadPosts', this.sync); + } + this.hr = $.el('hr', { + id: 'unread-line' + }); + this.posts = new Set(); + this.postsQuotingYou = new Set(); + this.order = new RandomAccessList(); + this.position = null; + Callbacks.Thread.push({ + name: 'Unread', + cb: this.node + }); + return Callbacks.Post.push({ + name: 'Unread', + cb: this.addPost + }); + }, + node: function() { + var ID, j, len, ref, ref1; + Unread.thread = this; + Unread.title = d.title; + Unread.lastReadPost = ((ref = Unread.db) != null ? ref.get({ + boardID: this.board.ID, + threadID: this.ID + }) : void 0) || 0; + Unread.readCount = 0; + ref1 = this.posts.keys; + for (j = 0, len = ref1.length; j < len; j++) { + ID = ref1[j]; + if (+ID <= Unread.lastReadPost) { + Unread.readCount++; + } + } + $.one(d, '4chanXInitFinished', Unread.ready); + return $.on(d, 'ThreadUpdate', Unread.onUpdate); + }, + ready: function() { + if (Conf['Remember Last Read Post'] && Conf['Scroll to Last Read Post']) { + Unread.scroll(); + } + Unread.setLine(true); + Unread.read(); + Unread.update(); + $.on(d, 'scroll visibilitychange', Unread.read); + if (Conf['Unread Line']) { + return $.on(d, 'visibilitychange', Unread.setLine); + } + }, + positionPrev: function() { + if (Unread.position) { + return Unread.position.prev; + } else { + return Unread.order.last; + } + }, + scroll: function() { + var hash, position, ref, root; + if ((hash = location.hash.match(/\d+/)) && hash[0] in Unread.thread.posts) { + return; + } + ReplyPruning.showIfHidden((ref = Unread.position) != null ? ref.data.nodes.root.id : void 0); + position = Unread.positionPrev(); + while (position) { + root = position.data.nodes.root; + if (!root.getBoundingClientRect().height) { + position = position.prev; + } else { + Header.scrollToIfNeeded(root, true); + break; + } + } + }, + sync: function() { + var ID, i, j, lastReadPost, postIDs, ref, ref1; + if (Unread.lastReadPost == null) { + return; + } + lastReadPost = Unread.db.get({ + boardID: Unread.thread.board.ID, + threadID: Unread.thread.ID, + defaultValue: 0 + }); + if (!(Unread.lastReadPost < lastReadPost)) { + return; + } + Unread.lastReadPost = lastReadPost; + postIDs = Unread.thread.posts.keys; + for (i = j = ref = Unread.readCount, ref1 = postIDs.length; j < ref1; i = j += 1) { + ID = +postIDs[i]; + if (!Unread.thread.posts[ID].isFetchedQuote) { + if (ID > Unread.lastReadPost) { + break; + } + Unread.posts["delete"](ID); + Unread.postsQuotingYou["delete"](ID); + } + Unread.readCount++; + } + Unread.updatePosition(); + Unread.setLine(); + return Unread.update(); + }, + addPost: function() { + var ref; + if (this.isFetchedQuote || this.isClone) { + return; + } + Unread.order.push(this); + if (this.ID <= Unread.lastReadPost || this.isHidden || ((ref = QuoteYou.db) != null ? ref.get({ + boardID: this.board.ID, + threadID: this.thread.ID, + postID: this.ID + }) : void 0)) { + return; + } + Unread.posts.add(this.ID); + Unread.addPostQuotingYou(this); + return Unread.position != null ? Unread.position : Unread.position = Unread.order[this.ID]; + }, + addPostQuotingYou: function(post) { + var j, len, quotelink, ref, ref1; + ref = post.nodes.quotelinks; + for (j = 0, len = ref.length; j < len; j++) { + quotelink = ref[j]; + if (!((ref1 = QuoteYou.db) != null ? ref1.get(Get.postDataFromLink(quotelink)) : void 0)) { + continue; + } + Unread.postsQuotingYou.add(post.ID); + Unread.openNotification(post); + return; + } + }, + openNotification: function(post) { + var notif; + if (!Header.areNotificationsEnabled) { + return; + } + try { + notif = new Notification(post.info.nameBlock + " replied to you", { + body: post.info.commentDisplay, + icon: Favicon.logo + }); + notif.onclick = function() { + Header.scrollToIfNeeded(post.nodes.root, true); + return $.global(function() { + return window.focus(); + }); + }; + return notif.onshow = function() { + return setTimeout(function() { + return notif.close(); + }, 7 * $.SECOND); + }; + } catch (_error) {} + }, + onUpdate: function(e) { + if (!e.detail[404]) { + Unread.setLine(); + Unread.read(); + } + return Unread.update(); + }, + readSinglePost: function(post) { + var ID; + ID = post.ID; + if (!Unread.posts.has(ID)) { + return; + } + Unread.posts["delete"](ID); + Unread.postsQuotingYou["delete"](ID); + Unread.updatePosition(); + Unread.saveLastReadPost(); + return Unread.update(); + }, + read: $.debounce(100, function(e) { + var ID, count, data, ref, ref1, root; + if (!Unread.posts.size && Unread.readCount !== Unread.thread.posts.keys.length) { + Unread.saveLastReadPost(); + } + if (d.hidden || !Unread.posts.size) { + return; + } + count = 0; + while (Unread.position) { + ref = Unread.position, ID = ref.ID, data = ref.data; + root = data.nodes.root; + if (!(!root.getBoundingClientRect().height || Header.getBottomOf(root) > -1)) { + break; + } + count++; + Unread.posts["delete"](ID); + Unread.postsQuotingYou["delete"](ID); + if ((ref1 = QuoteYou.db) != null ? ref1.get({ + boardID: data.board.ID, + threadID: data.thread.ID, + postID: ID + }) : void 0) { + QuoteYou.lastRead = root; + } + Unread.position = Unread.position.next; + } + if (!count) { + return; + } + Unread.updatePosition(); + Unread.saveLastReadPost(); + if (e) { + return Unread.update(); + } + }), + updatePosition: function() { + while (Unread.position && !Unread.posts.has(Unread.position.ID)) { + Unread.position = Unread.position.next; + } + }, + saveLastReadPost: $.debounce(2 * $.SECOND, function() { + var ID, i, j, postIDs, ref, ref1; + $.forceSync('Remember Last Read Post'); + if (!(Conf['Remember Last Read Post'] && Unread.db)) { + return; + } + postIDs = Unread.thread.posts.keys; + for (i = j = ref = Unread.readCount, ref1 = postIDs.length; j < ref1; i = j += 1) { + ID = +postIDs[i]; + if (!Unread.thread.posts[ID].isFetchedQuote) { + if (Unread.posts.has(ID)) { + break; + } + Unread.lastReadPost = ID; + } + Unread.readCount++; + } + if (Unread.thread.isDead && !Unread.thread.isArchived) { + return; + } + Unread.db.forceSync(); + return Unread.db.set({ + boardID: Unread.thread.board.ID, + threadID: Unread.thread.ID, + val: Unread.lastReadPost + }); + }), + setLine: function(force) { + if (!Conf['Unread Line']) { + return; + } + if (Unread.hr.hidden || d.hidden || (force === true)) { + if ((Unread.linePosition = Unread.positionPrev())) { + $.after(Unread.linePosition.data.nodes.root, Unread.hr); + } else { + $.rm(Unread.hr); + } + } + return Unread.hr.hidden = Unread.linePosition === Unread.order.last; + }, + update: function() { + var count, countQuotingYou, isDead, titleCount, titleDead, titleQuotingYou; + count = Unread.posts.size; + countQuotingYou = Unread.postsQuotingYou.size; + if (Conf['Unread Count']) { + titleQuotingYou = Conf['Quoted Title'] && countQuotingYou ? '(!) ' : ''; + titleCount = count || !Conf['Hide Unread Count at (0)'] ? "(" + count + ") " : ''; + titleDead = Unread.thread.isDead ? Unread.title.replace('-', (Unread.thread.isArchived ? '- Archived -' : '- 404 -')) : Unread.title; + d.title = "" + titleQuotingYou + titleCount + titleDead; + } + $.forceSync('Remember Last Read Post'); + if (Conf['Remember Last Read Post'] && (!Unread.thread.isDead || Unread.thread.isArchived)) { + ThreadWatcher.update(Unread.thread.board.ID, Unread.thread.ID, { + isDead: Unread.thread.isDead, + unread: count, + quotingYou: countQuotingYou + }); + } + if (Conf['Unread Favicon']) { + isDead = Unread.thread.isDead; + Favicon.el.href = countQuotingYou ? Favicon[isDead ? 'unreadDeadY' : 'unreadY'] : count ? Favicon[isDead ? 'unreadDead' : 'unread'] : Favicon[isDead ? 'dead' : 'default']; + return $.add(d.head, Favicon.el); + } + } + }; + + return Unread; + +}).call(this); + +Captcha = {}; + +(function() { + Captcha.fixes = { + imageKeys: '789456123uiojklm'.split('').concat(['Comma', 'Period']), + imageKeys16: '7890uiopjkl'.split('').concat(['Semicolon', 'm', 'Comma', 'Period', 'Slash']), + css: '.rc-imageselect-target > div:focus, .rc-image-tile-target:focus {\n outline: 2px solid #4a90e2;\n}\n.rc-imageselect-target td:focus {\n box-shadow: inset 0 0 0 2px #4a90e2;\n outline: none;\n}\n.rc-button-default:focus {\n box-shadow: inset 0 0 0 2px #0063d6;\n}', + cssNoscript: '.fbc-payload-imageselect {\n position: relative;\n}\n.fbc-payload-imageselect > label {\n position: absolute;\n display: block;\n height: 93.3px;\n width: 93.3px;\n}\nlabel[data-row="0"] {top: 0px;}\nlabel[data-row="1"] {top: 93.3px;}\nlabel[data-row="2"] {top: 186.6px;}\nlabel[data-col="0"] {left: 0px;}\nlabel[data-col="1"] {left: 93.3px;}\nlabel[data-col="2"] {left: 186.6px;}\n.fbc-payload-imageselect > input:focus + label {\n outline: 2px solid #4a90e2;\n}\n.fbc-button-verify input:focus {\n box-shadow: inset 0 0 0 2px #0063d6;\n}\nbody.focus .fbc {\n box-shadow: inset 0 0 0 2px #4a90e2;\n}', + init: function() { + switch (location.pathname.split('/')[3]) { + case 'anchor': + return this.initMain(); + case 'frame': + return this.initPopup(); + case 'fallback': + return this.initNoscript(); + } + }, + initMain: function() { + var a, j, len, ref; + $.onExists(d.body, '#recaptcha-anchor', function(checkbox) { + var focus; + focus = function() { + var ref; + if (d.hasFocus() && ((ref = d.activeElement) === d.documentElement || ref === d.body)) { + return checkbox.focus(); + } + }; + focus(); + return $.on(window, 'focus', function() { + return $.queueTask(focus); + }); + }); + ref = $$('.rc-anchor-pt a'); + for (j = 0, len = ref.length; j < len; j++) { + a = ref[j]; + a.tabIndex = -1; + } + }, + initPopup: function() { + $.addStyle(this.css); + this.fixImages(); + new MutationObserver((function(_this) { + return function() { + return _this.fixImages(); + }; + })(this)).observe(d.body, { + childList: true, + subtree: true + }); + return $.on(d, 'keydown', this.keybinds.bind(this)); + }, + initNoscript: function() { + var data, ref, token; + this.noscript = true; + data = (token = (ref = $('.fbc-verification-token > textarea')) != null ? ref.value : void 0) ? { + token: token + } : { + working: true + }; + new Connection(window.parent, '*').send(data); + d.body.classList.toggle('focus', d.hasFocus()); + $.on(window, 'focus blur', function() { + return d.body.classList.toggle('focus', d.hasFocus()); + }); + this.images = $$('.fbc-payload-imageselect > input'); + this.width = 3; + if (this.images.length !== 9) { + return; + } + $.addStyle(this.cssNoscript); + this.addLabels(); + $.on(d, 'keydown', this.keybinds.bind(this)); + return $.on($('.fbc-imageselect-challenge > form'), 'submit', this.checkForm.bind(this)); + }, + fixImages: function() { + var img, j, len, ref; + this.images = $$('.rc-image-tile-target'); + if (!this.images.length) { + this.images = $$('.rc-imageselect-target > div, .rc-imageselect-target td'); + } + this.width = $$('.rc-imageselect-target tr:first-of-type td').length || Math.round(Math.sqrt(this.images.length)); + ref = this.images; + for (j = 0, len = ref.length; j < len; j++) { + img = ref[j]; + img.tabIndex = 0; + } + if (this.images.length === 9) { + this.addTooltips(this.images); + } else { + this.addTooltips16(this.images); + } + return this.complaintLinks(); + }, + complaintLinks: function() { + var errmsg, j, len, link, ref; + ref = $$('.rc-imageselect-incorrect-response, .rc-imageselect-error-select-one, .rc-imageselect-error-select-more, .rc-imageselect-error-dynamic-more'); + for (j = 0, len = ref.length; j < len; j++) { + errmsg = ref[j]; + if (!$('a', errmsg)) { + link = $.el('a', { + href: 'https://www.4chan-x.net/captchas.html', + target: '_blank', + textContent: '[complain]' + }); + $.add(errmsg, [$.tn(' '), link]); + } + } + }, + addLabels: function() { + var checkbox, i, imageSelect, label, labels; + imageSelect = $('.fbc-payload-imageselect'); + labels = (function() { + var j, len, ref, results; + ref = this.images; + results = []; + for (i = j = 0, len = ref.length; j < len; i = ++j) { + checkbox = ref[i]; + checkbox.id = "checkbox-" + i; + label = $.el('label', { + htmlFor: checkbox.id + }); + label.dataset.row = Math.floor(i / 3); + label.dataset.col = i % 3; + $.after(checkbox, label); + results.push(label); + } + return results; + }).call(this); + return this.addTooltips(labels); + }, + addTooltips: function(nodes) { + var i, j, len, node; + for (i = j = 0, len = nodes.length; j < len; i = ++j) { + node = nodes[i]; + node.title = this.imageKeys[i] + " or " + (this.imageKeys[i + 9][0].toUpperCase()) + this.imageKeys[i + 9].slice(1); + } + }, + addTooltips16: function(nodes) { + var i, j, key, len, node, ref; + ref = this.imageKeys16; + for (i = j = 0, len = ref.length; j < len; i = ++j) { + key = ref[i]; + if (i % 4 < this.width && (node = nodes[nodes.length - (4 - Math.floor(i / 4)) * this.width + (i % 4)])) { + node.title = "" + (key[0].toUpperCase()) + key.slice(1); + } + } + }, + checkForm: function(e) { + var checkbox, j, len, n, ref; + n = 0; + ref = this.images; + for (j = 0, len = ref.length; j < len; j++) { + checkbox = ref[j]; + if (checkbox.checked) { + n++; + } + } + if (n === 0) { + return e.preventDefault(); + } + }, + keybinds: function(e) { + var dx, i, img, key, last, n, reload, verify, w, x; + if (!(this.images && doc.contains(this.images[0]))) { + return; + } + n = this.images.length; + w = this.width; + last = n + w - 1; + reload = $('#recaptcha-reload-button, .fbc-button-reload'); + verify = $('#recaptcha-verify-button, .fbc-button-verify > input'); + x = this.images.indexOf(d.activeElement); + if (x < 0) { + x = d.activeElement === verify ? last : n; + } + key = Keybinds.keyCode(e); + if (!this.noscript && key === 'Space' && x < n) { + this.images[x].click(); + } else if (n === 9 && (i = this.imageKeys.indexOf(key)) >= 0) { + this.images[i % 9].click(); + verify.focus(); + } else if (n !== 9 && (i = this.imageKeys16.indexOf(key)) >= 0 && i % 4 < w && (img = this.images[n - (4 - Math.floor(i / 4)) * w + (i % 4)])) { + img.click(); + verify.focus(); + } else if (dx = { + 'Up': n, + 'Down': w, + 'Left': last, + 'Right': 1 + }[key]) { + x = (x + dx) % (n + w); + if ((n < x && x < last)) { + x = dx === last ? n : last; + } + (this.images[x] || (x === n ? reload : void 0) || (x === last ? verify : void 0)).focus(); + } else { + return; + } + e.preventDefault(); + return e.stopPropagation(); + } + }; + +}).call(this); + +(function() { + Captcha.replace = { + init: function() { + if (!(d.cookie.indexOf('pass_enabled=1') < 0)) { + return; + } + if (location.hostname === 'sys.4chan.org' && /[?&]altc\b/.test(location.search) && Main.jsEnabled) { + $.onExists(doc, 'script[src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"]', function() { + $.global(function() { + return window.el.onload = null; + }); + return Captcha.v1.create(); + }); + return; + } + if (((Conf['Use Recaptcha v1'] && location.hostname === 'boards.4chan.org') || (Conf['Use Recaptcha v1 in Reports'] && location.hostname === 'sys.4chan.org')) && Main.jsEnabled) { + $.ready(Captcha.replace.v1); + return; + } + if (Conf['Force Noscript Captcha'] && Main.jsEnabled) { + $.ready(Captcha.replace.noscript); + return; + } + if (Conf['captchaLanguage'].trim() || Conf['Captcha Fixes']) { + if (location.hostname === 'boards.4chan.org') { + return $.onExists(doc, '#captchaFormPart', function(node) { + return $.onExists(node, 'iframe', Captcha.replace.iframe); + }); + } else { + return $.onExists(doc, 'iframe', Captcha.replace.iframe); + } + } + }, + noscript: function() { + var insert, noscript, original, span, toggle; + if (!((original = $('#g-recaptcha, #captchaContainerAlt')) && (noscript = $('noscript')))) { + return; + } + span = $.el('span', { + id: 'captcha-forced-noscript' + }); + $.replace(noscript, span); + $.rm(original); + insert = function() { + span.innerHTML = noscript.textContent; + return Captcha.replace.iframe($('iframe', span)); + }; + if ((toggle = $('#togglePostFormLink a, #form-link'))) { + return $.on(toggle, 'click', insert); + } else { + return insert(); + } + }, + v1: function() { + var form, link; + if (!$.id('g-recaptcha')) { + return; + } + Captcha.v1.replace(); + if ((link = $.id('form-link'))) { + return $.on(link, 'click', function() { + return Captcha.v1.create(); + }); + } else if (location.hostname === 'boards.4chan.org') { + form = $.id('postForm'); + return form.addEventListener('focus', (function() { + return Captcha.v1.create(); + }), true); + } else { + return Captcha.v1.create(); + } + }, + iframe: function(iframe) { + var lang, src; + if ((lang = Conf['captchaLanguage'].trim())) { + src = /[?&]hl=/.test(iframe.src) ? iframe.src.replace(/([?&]hl=)[^&]*/, '$1' + encodeURIComponent(lang)) : iframe.src + ("&hl=" + (encodeURIComponent(lang))); + if (iframe.src !== src) { + iframe.src = src; + } + } + return Captcha.replace.autocopy(iframe); + }, + autocopy: function(iframe) { + if (!(Conf['Captcha Fixes'] && /^https:\/\/www\.google\.com\/recaptcha\/api\/fallback\?/.test(iframe.src))) { + return; + } + return new Connection(iframe, 'https://www.google.com', { + working: function() { + var ref, ref1; + if ((ref = $.id('qr')) != null ? ref.contains(iframe) : void 0) { + return (ref1 = $('#qr .captcha-container textarea')) != null ? ref1.parentNode.hidden = true : void 0; + } + }, + token: function(token) { + var node, textarea; + node = iframe; + while ((node = node.parentNode)) { + if ((textarea = $('textarea', node))) { + break; + } + } + textarea.value = token; + return $.event('input', null, textarea); + } + }); + } + }; + +}).call(this); + +(function() { + Captcha.v1 = { + blank: "data:image/svg+xml,", + init: function() { + var imgContainer, input; + if (d.cookie.indexOf('pass_enabled=1') >= 0) { + return; + } + if (!(this.isEnabled = !!$('#g-recaptcha, #captchaContainerAlt'))) { + return; + } + imgContainer = $.el('div', { + className: 'captcha-img', + title: 'Reload reCAPTCHA' + }); + $.extend(imgContainer, { + innerHTML: "" + }); + input = $.el('input', { + className: 'captcha-input field', + title: 'Verification', + autocomplete: 'off', + spellcheck: false + }); + this.nodes = { + img: imgContainer.firstChild, + input: input + }; + $.on(input, 'blur', QR.focusout); + $.on(input, 'focus', QR.focusin); + $.on(input, 'keydown', QR.captcha.keydown.bind(QR.captcha)); + $.on(this.nodes.img.parentNode, 'click', QR.captcha.reload.bind(QR.captcha)); + $.addClass(QR.nodes.el, 'has-captcha', 'captcha-v1'); + $.after(QR.nodes.com.parentNode, [imgContainer, input]); + this.captchas = []; + $.get('captchas', [], function(arg) { + var captchas; + captchas = arg.captchas; + QR.captcha.sync(captchas); + return QR.captcha.clear(); + }); + $.sync('captchas', this.sync); + this.replace(); + this.beforeSetup(); + if (Conf['Auto-load captcha']) { + this.setup(); + } + new MutationObserver(this.afterSetup).observe($.id('captchaContainerAlt'), { + childList: true + }); + return this.afterSetup(); + }, + replace: function() { + var container, old; + if (this.script) { + return; + } + if (!(this.script = $('script[src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"]', d.head))) { + this.script = $.el('script', { + src: '//www.google.com/recaptcha/api/js/recaptcha_ajax.js' + }); + $.add(d.head, this.script); + } + if (old = $.id('g-recaptcha')) { + container = $.el('div', { + id: 'captchaContainerAlt' + }); + return $.replace(old, container); + } + }, + create: function() { + var cont, lang; + cont = $.id('captchaContainerAlt'); + if (this.occupied) { + return; + } + this.occupied = true; + if ((lang = Conf['captchaLanguage'].trim())) { + cont.dataset.lang = lang; + } + $.onExists(cont, '#recaptcha_image', function(image) { + return $.on(image, 'click', function() { + if ($.id('recaptcha_challenge_image')) { + return $.global(function() { + return window.Recaptcha.reload(); + }); + } + }); + }); + $.onExists(cont, '#recaptcha_response_field', function(field) { + $.on(field, 'keydown', function(e) { + if (e.keyCode === 8 && !field.value) { + return $.global(function() { + return window.Recaptcha.reload(); + }); + } + }); + if (location.hostname === 'sys.4chan.org') { + return field.focus(); + } + }); + return $.global(function() { + var container, options, script; + container = document.getElementById('captchaContainerAlt'); + options = { + theme: 'clean', + tabindex: { + "boards.4chan.org": 5 + }[location.hostname], + lang: container.dataset.lang + }; + if (window.Recaptcha) { + return window.Recaptcha.create('6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc', container, options); + } else { + script = document.head.querySelector('script[src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"]'); + return script.addEventListener('load', function() { + return window.Recaptcha.create('6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc', container, options); + }, false); + } + }); + }, + cb: { + focus: function() { + return QR.captcha.setup(false, true); + } + }, + beforeSetup: function() { + var img, input, ref; + ref = this.nodes, img = ref.img, input = ref.input; + img.parentNode.hidden = true; + img.src = this.blank; + input.value = ''; + input.placeholder = 'Focus to load reCAPTCHA'; + this.count(); + return $.on(input, 'focus click', this.cb.focus); + }, + needed: function() { + var captchaCount, postsCount; + captchaCount = this.captchas.length; + if (QR.req) { + captchaCount++; + } + postsCount = QR.posts.length; + if (postsCount === 1 && !Conf['Auto-load captcha'] && !QR.posts[0].com && !QR.posts[0].file) { + postsCount = 0; + } + return captchaCount < postsCount; + }, + onNewPost: function() {}, + onPostChange: function() {}, + setup: function(focus, force) { + if (!(this.isEnabled && (force || this.needed()))) { + return; + } + this.create(); + if (focus) { + $.addClass(QR.nodes.el, 'focus'); + return this.nodes.input.focus(); + } + }, + afterSetup: function() { + var challenge, img, input, ref, setLifetime; + if (!(challenge = $.id('recaptcha_challenge_field_holder'))) { + return; + } + if (challenge === QR.captcha.nodes.challenge) { + return; + } + setLifetime = function(e) { + return QR.captcha.lifetime = e.detail; + }; + $.on(window, 'captcha:timeout', setLifetime); + $.global(function() { + return window.dispatchEvent(new CustomEvent('captcha:timeout', { + detail: window.RecaptchaState.timeout + })); + }); + $.off(window, 'captcha:timeout', setLifetime); + ref = QR.captcha.nodes, img = ref.img, input = ref.input; + img.parentNode.hidden = false; + input.placeholder = 'Verification'; + QR.captcha.count(); + $.off(input, 'focus click', QR.captcha.cb.focus); + QR.captcha.nodes.challenge = challenge; + new MutationObserver(QR.captcha.load.bind(QR.captcha)).observe(challenge, { + childList: true, + subtree: true, + attributes: true + }); + QR.captcha.load(); + if (QR.nodes.el.getBoundingClientRect().bottom > doc.clientHeight) { + QR.nodes.el.style.top = null; + return QR.nodes.el.style.bottom = '0px'; + } + }, + destroy: function() { + if (!this.script) { + return; + } + $.global(function() { + return window.Recaptcha.destroy(); + }); + delete this.occupied; + if (this.nodes) { + return this.beforeSetup(); + } + }, + sync: function(captchas) { + if (captchas == null) { + captchas = []; + } + QR.captcha.captchas = captchas; + return QR.captcha.count(); + }, + getOne: function() { + var captcha, challenge, response, timeout; + this.clear(); + if (captcha = this.captchas.shift()) { + this.count(); + $.set('captchas', this.captchas); + return captcha; + } else { + challenge = this.nodes.img.alt; + timeout = this.timeout; + if (/\S/.test(response = this.nodes.input.value)) { + this.destroy(); + return { + challenge: challenge, + response: response, + timeout: timeout + }; + } else { + return null; + } + } + }, + save: function() { + var response; + if (!/\S/.test(response = this.nodes.input.value)) { + return; + } + this.nodes.input.value = ''; + this.captchas.push({ + challenge: this.nodes.img.alt, + response: response, + timeout: this.timeout + }); + this.captchas.sort(function(a, b) { + return a.timeout - b.timeout; + }); + this.count(); + this.destroy(); + this.setup(false, true); + return $.set('captchas', this.captchas); + }, + clear: function() { + var captcha, i, j, len, now, ref; + if (!this.captchas.length) { + return; + } + $.forceSync('captchas'); + now = Date.now(); + ref = this.captchas; + for (i = j = 0, len = ref.length; j < len; i = ++j) { + captcha = ref[i]; + if (captcha.timeout > now) { + break; + } + } + if (!i) { + return; + } + this.captchas = this.captchas.slice(i); + this.count(); + return $.set('captchas', this.captchas); + }, + load: function() { + var challenge, challenge_image; + if ($('#captchaContainerAlt[class~="recaptcha_is_showing_audio"]')) { + this.nodes.img.src = this.blank; + return; + } + if (!this.nodes.challenge.firstChild) { + return; + } + if (!(challenge_image = $.id('recaptcha_challenge_image'))) { + return; + } + this.timeout = Date.now() + this.lifetime * $.SECOND - $.MINUTE; + challenge = this.nodes.challenge.firstChild.value; + this.nodes.img.alt = challenge; + this.nodes.img.src = challenge_image.src; + this.nodes.input.value = ''; + return this.clear(); + }, + count: function() { + var count, placeholder; + count = this.captchas ? this.captchas.length : 0; + placeholder = this.nodes.input.placeholder.replace(/\ \(.*\)$/, ''); + placeholder += (function() { + switch (count) { + case 0: + if (placeholder === 'Verification') { + return ' (Shift + Enter to cache)'; + } else { + return ''; + } + break; + case 1: + return ' (1 cached captcha)'; + default: + return " (" + count + " cached captchas)"; + } + })(); + this.nodes.input.placeholder = placeholder; + this.nodes.input.alt = count; + clearTimeout(this.timer); + if (count) { + return this.timer = setTimeout(this.clear.bind(this), this.captchas[0].timeout - Date.now()); + } + }, + reload: function(focus) { + $.global(function() { + if (window.Recaptcha.type === 'image') { + window.Recaptcha.reload(); + } else { + window.Recaptcha.switch_type('image'); + } + return window.Recaptcha.should_focus = false; + }); + if (focus) { + return this.nodes.input.focus(); + } + }, + keydown: function(e) { + if (e.keyCode === 8 && !this.nodes.input.value) { + this.reload(); + } else if (e.keyCode === 13 && e.shiftKey) { + this.save(); + } else { + return; + } + return e.preventDefault(); + } + }; + +}).call(this); + +(function() { + Captcha.v2 = { + lifetime: 2 * $.MINUTE, + init: function() { + var counter, root; + if (d.cookie.indexOf('pass_enabled=1') >= 0) { + return; + } + if (!(this.isEnabled = !!$('#g-recaptcha, #captchaContainerAlt, #captcha-forced-noscript'))) { + return; + } + if ((this.noscript = Conf['Force Noscript Captcha'] || !Main.jsEnabled)) { + $.addClass(QR.nodes.el, 'noscript-captcha'); + } + this.captchas = []; + $.get('captchas', [], function(arg) { + var captchas; + captchas = arg.captchas; + return QR.captcha.sync(captchas); + }); + $.sync('captchas', this.sync.bind(this)); + root = $.el('div', { + className: 'captcha-root' + }); + $.extend(root, { + innerHTML: "
          " + }); + counter = $('.captcha-counter > a', root); + this.nodes = { + root: root, + counter: counter + }; + this.count(); + $.addClass(QR.nodes.el, 'has-captcha', 'captcha-v2'); + $.after(QR.nodes.com.parentNode, root); + $.on(counter, 'click', this.toggle.bind(this)); + $.on(counter, 'keydown', (function(_this) { + return function(e) { + if (Keybinds.keyCode(e) !== 'Space') { + return; + } + _this.toggle(); + e.preventDefault(); + return e.stopPropagation(); + }; + })(this)); + return $.on(window, 'captcha:success', (function(_this) { + return function() { + return $.queueTask(function() { + return _this.save(false); + }); + }; + })(this)); + }, + timeouts: {}, + postsCount: 0, + noscriptURL: function() { + var lang, url; + url = 'https://www.google.com/recaptcha/api/fallback?k=6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc'; + if ((lang = Conf['captchaLanguage'].trim())) { + url += "&hl=" + (encodeURIComponent(lang)); + } + return url; + }, + needed: function() { + var captchaCount; + captchaCount = this.captchas.length; + if (QR.req) { + captchaCount++; + } + this.postsCount = QR.posts.length; + if (this.postsCount === 1 && !Conf['Auto-load captcha'] && !QR.posts[0].com && !QR.posts[0].file) { + this.postsCount = 0; + } + return captchaCount < this.postsCount; + }, + onNewPost: function() { + return this.setup(); + }, + onPostChange: function() { + if (this.postsCount === 0) { + this.setup(); + } + if (QR.posts.length === 1 && !Conf['Auto-load captcha'] && !QR.posts[0].com && !QR.posts[0].file) { + return this.postsCount = 0; + } + }, + toggle: function() { + if (this.nodes.container && !this.timeouts.destroy) { + return this.destroy(); + } else { + return this.setup(true, true); + } + }, + setup: function(focus, force) { + if (!(this.isEnabled && (this.needed() || force))) { + return; + } + if (focus) { + $.addClass(QR.nodes.el, 'focus'); + this.nodes.counter.focus(); + } + if (this.timeouts.destroy) { + clearTimeout(this.timeouts.destroy); + delete this.timeouts.destroy; + return this.reload(); + } + if (this.nodes.container) { + $.queueTask((function(_this) { + return function() { + var iframe; + if (_this.nodes.container && d.activeElement === _this.nodes.counter && (iframe = $('iframe', _this.nodes.container))) { + iframe.focus(); + return QR.focus(); + } + }; + })(this)); + return; + } + this.nodes.container = $.el('div', { + className: 'captcha-container' + }); + $.prepend(this.nodes.root, this.nodes.container); + new MutationObserver(this.afterSetup.bind(this)).observe(this.nodes.container, { + childList: true, + subtree: true + }); + if (this.noscript) { + return this.setupNoscript(); + } else { + return this.setupJS(); + } + }, + setupNoscript: function() { + var div, iframe, textarea; + iframe = $.el('iframe', { + id: 'qr-captcha-iframe', + src: this.noscriptURL() + }); + div = $.el('div'); + textarea = $.el('textarea'); + $.add(div, textarea); + return $.add(this.nodes.container, [iframe, div]); + }, + setupJS: function() { + return $.global(function() { + var cbNative, render; + render = function() { + var classList, container; + classList = document.documentElement.classList; + container = document.querySelector('#qr .captcha-container'); + return container.dataset.widgetID = window.grecaptcha.render(container, { + sitekey: '6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc', + theme: classList.contains('tomorrow') || classList.contains('dark-captcha') ? 'dark' : 'light', + callback: function(response) { + return window.dispatchEvent(new CustomEvent('captcha:success', { + detail: response + })); + } + }); + }; + if (window.grecaptcha) { + return render(); + } else { + cbNative = window.onRecaptchaLoaded; + return window.onRecaptchaLoaded = function() { + render(); + return cbNative(); + }; + } + }); + }, + afterSetup: function(mutations) { + var iframe, j, k, len, len1, mutation, node, ref, textarea; + for (j = 0, len = mutations.length; j < len; j++) { + mutation = mutations[j]; + ref = mutation.addedNodes; + for (k = 0, len1 = ref.length; k < len1; k++) { + node = ref[k]; + if ((iframe = $.x('./descendant-or-self::iframe', node))) { + this.setupIFrame(iframe); + } + if ((textarea = $.x('./descendant-or-self::textarea', node))) { + this.setupTextArea(textarea); + } + } + } + }, + setupIFrame: function(iframe) { + if (!doc.contains(iframe)) { + return; + } + Captcha.replace.iframe(iframe); + $.addClass(QR.nodes.el, 'captcha-open'); + this.fixQRPosition(); + $.on(iframe, 'load', this.fixQRPosition); + if (d.activeElement === this.nodes.counter) { + iframe.focus(); + } + return $.global(function() { + var f; + f = document.querySelector('#qr iframe'); + return f.focus = f.blur = function() {}; + }); + }, + fixQRPosition: function() { + if (QR.nodes.el.getBoundingClientRect().bottom > doc.clientHeight) { + QR.nodes.el.style.top = null; + return QR.nodes.el.style.bottom = '0px'; + } + }, + setupTextArea: function(textarea) { + return $.one(textarea, 'input', (function(_this) { + return function() { + return _this.save(true); + }; + })(this)); + }, + destroy: function() { + var garbage, i, ins, node, ref; + if (!this.isEnabled) { + return; + } + delete this.timeouts.destroy; + $.rmClass(QR.nodes.el, 'captcha-open'); + if (this.nodes.container) { + $.rm(this.nodes.container); + } + delete this.nodes.container; + garbage = $.X('//iframe[starts-with(@src, "https://www.google.com/recaptcha/api2/frame")]/ancestor-or-self::*[parent::body]'); + i = 0; + while (node = garbage.snapshotItem(i++)) { + if (((ref = (ins = node.nextSibling)) != null ? ref.nodeName : void 0) === 'INS') { + $.rm(ins); + } + $.rm(node); + } + }, + sync: function(captchas) { + if (captchas == null) { + captchas = []; + } + this.captchas = captchas; + this.clear(); + return this.count(); + }, + getOne: function() { + var captcha; + this.clear(); + if ((captcha = this.captchas.shift())) { + $.set('captchas', this.captchas); + this.count(); + return captcha; + } else { + return null; + } + }, + save: function(pasted, token) { + var base, focus, ref; + $.forceSync('captchas'); + this.captchas.push({ + response: token || $('textarea', this.nodes.container).value, + timeout: Date.now() + this.lifetime + }); + this.captchas.sort(function(a, b) { + return a.timeout - b.timeout; + }); + $.set('captchas', this.captchas); + this.count(); + focus = ((ref = d.activeElement) != null ? ref.nodeName : void 0) === 'IFRAME' && /https?:\/\/www\.google\.com\/recaptcha\//.test(d.activeElement.src); + if (this.needed()) { + if (focus) { + if (QR.cooldown.auto || Conf['Post on Captcha Completion']) { + this.nodes.counter.focus(); + } else { + QR.nodes.status.focus(); + } + } + this.reload(); + } else { + if (pasted) { + this.destroy(); + } else { + if ((base = this.timeouts).destroy == null) { + base.destroy = setTimeout(this.destroy.bind(this), 3 * $.SECOND); + } + } + if (focus) { + QR.nodes.status.focus(); + } + } + if (Conf['Post on Captcha Completion'] && !QR.cooldown.auto) { + return QR.submit(); + } + }, + clear: function() { + var captcha, i, j, len, now, ref; + if (!this.captchas.length) { + return; + } + $.forceSync('captchas'); + now = Date.now(); + ref = this.captchas; + for (i = j = 0, len = ref.length; j < len; i = ++j) { + captcha = ref[i]; + if (captcha.timeout > now) { + break; + } + } + if (!i) { + return; + } + this.captchas = this.captchas.slice(i); + this.count(); + $.set('captchas', this.captchas); + return this.setup(d.activeElement === QR.nodes.status); + }, + count: function() { + this.nodes.counter.textContent = "Captchas: " + this.captchas.length; + clearTimeout(this.timeouts.clear); + if (this.captchas.length) { + return this.timeouts.clear = setTimeout(this.clear.bind(this), this.captchas[0].timeout - Date.now()); + } + }, + reload: function() { + if ($('iframe[src^="https://www.google.com/recaptcha/api/fallback?"]', this.nodes.container)) { + this.destroy(); + return this.setup(false, true); + } else { + return $.global(function() { + var container; + container = document.querySelector('#qr .captcha-container'); + return window.grecaptcha.reset(container.dataset.widgetID); + }); + } + } + }; + +}).call(this); + +PassLink = (function() { + var PassLink; + + PassLink = { + init: function() { + if (!Conf['Pass Link']) { + return; + } + return Main.ready(this.ready); + }, + ready: function() { + var passLink, styleSelector; + if (!(styleSelector = $.id('styleSelector'))) { + return; + } + passLink = $.el('span', { + className: 'brackets-wrap pass-link-container' + }); + $.extend(passLink, { + innerHTML: "4chan Pass" + }); + $.on(passLink.firstElementChild, 'click', function() { + return window.open('//sys.4chan.org/auth', Date.now(), 'width=500,height=280,toolbar=0'); + }); + return $.before(styleSelector.previousSibling, [passLink, $.tn('\u00A0\u00A0')]); + } + }; + + return PassLink; + +}).call(this); + +PostSuccessful = (function() { + var PostSuccessful; + + PostSuccessful = { + init: function() { + if (!Conf['Remember Your Posts']) { + return; + } + return $.ready(this.ready); + }, + ready: function() { + var _, db, postID, ref, threadID; + if (d.title !== 'Post successful!') { + return; + } + ref = $('h1').nextSibling.textContent.match(/thread:(\d+),no:(\d+)/), _ = ref[0], threadID = ref[1], postID = ref[2]; + postID = +postID; + threadID = +threadID || postID; + db = new DataBoard('yourPosts'); + return db.set({ + boardID: g.BOARD.ID, + threadID: threadID, + postID: postID, + val: true + }); + } + }; + + return PostSuccessful; + +}).call(this); + +QR = (function() { + var QR, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, + slice = [].slice; + + QR = { + mimeTypes: ['image/jpeg', 'image/png', 'image/gif', 'application/pdf', 'application/vnd.adobe.flash.movie', 'application/x-shockwave-flash', 'video/webm'], + validExtension: /\.(jpe?g|png|gif|pdf|swf|webm)$/i, + typeFromExtension: { + 'jpg': 'image/jpeg', + 'jpeg': 'image/jpeg', + 'png': 'image/png', + 'gif': 'image/gif', + 'pdf': 'application/pdf', + 'swf': 'application/vnd.adobe.flash.movie', + 'webm': 'video/webm' + }, + extensionFromType: { + 'image/jpeg': 'jpg', + 'image/png': 'png', + 'image/gif': 'gif', + 'application/pdf': 'pdf', + 'application/vnd.adobe.flash.movie': 'swf', + 'application/x-shockwave-flash': 'swf', + 'video/webm': 'webm' + }, + init: function() { + var sc, version; + if (!Conf['Quick Reply']) { + return; + } + this.posts = []; + if (g.VIEW === 'archive') { + return; + } + version = Conf['Use Recaptcha v1'] && Main.jsEnabled ? 'v1' : 'v2'; + this.captcha = Captcha[version]; + $.on(d, '4chanXInitFinished', this.initReady); + Callbacks.Post.push({ + name: 'Quick Reply', + cb: this.node + }); + if (Conf['QR Shortcut']) { + this.shortcut = sc = $.el('a', { + className: 'qr-shortcut fa fa-comment-o disabled', + textContent: 'QR', + title: 'Quick Reply', + href: 'javascript:;' + }); + $.on(sc, 'click', function() { + if (!QR.postingIsEnabled) { + return; + } + if (Conf['Persistent QR'] || !QR.nodes || QR.nodes.el.hidden) { + QR.open(); + return QR.nodes.com.focus(); + } else { + return QR.close(); + } + }); + return Header.addShortcut(sc); + } + }, + initReady: function() { + var link, linkBot, navLinksBot, origToggle; + $.off(d, '4chanXInitFinished', this.initReady); + QR.postingIsEnabled = !!$.id('postForm'); + if (!QR.postingIsEnabled) { + return; + } + link = $.el('h1', { + className: "qr-link-container" + }); + $.extend(link, { + innerHTML: "" + ((g.VIEW === "thread") ? "Reply to Thread" : "Start a Thread") + "" + }); + QR.link = link.firstElementChild; + $.on(link.firstChild, 'click', function() { + QR.open(); + return QR.nodes.com.focus(); + }); + if (Conf['Bottom QR Link'] && g.VIEW === 'thread') { + linkBot = $.el('div', { + className: "brackets-wrap qr-link-container-bottom" + }); + $.extend(linkBot, { + innerHTML: "Reply to Thread" + }); + $.on(linkBot.firstElementChild, 'click', function() { + QR.open(); + return QR.nodes.com.focus(); + }); + if ((navLinksBot = $('.navLinksBot'))) { + $.prepend(navLinksBot, linkBot); + } + } + origToggle = $.id('togglePostFormLink'); + $.before(origToggle, link); + origToggle.firstElementChild.textContent = 'Original Form'; + $.on(d, 'QRGetFile', QR.getFile); + $.on(d, 'QRSetFile', QR.setFile); + $.on(d, 'paste', QR.paste); + $.on(d, 'dragover', QR.dragOver); + $.on(d, 'drop', QR.dropFile); + $.on(d, 'dragstart dragend', QR.drag); + $.on(d, 'IndexRefresh', QR.generatePostableThreadsList); + $.on(d, 'ThreadUpdate', QR.statusCheck); + if (!Conf['Persistent QR']) { + return; + } + QR.open(); + if (Conf['Auto Hide QR']) { + return QR.hide(); + } + }, + statusCheck: function() { + var thread; + if (!QR.nodes) { + return; + } + thread = QR.posts[0].thread; + if (thread !== 'new' && g.threads[g.BOARD + "." + thread].isDead) { + return QR.abort(); + } else { + return QR.status(); + } + }, + node: function() { + $.on(this.nodes.quote, 'click', QR.quote); + if (this.isFetchedQuote) { + return QR.generatePostableThreadsList(); + } + }, + open: function() { + var err; + if (QR.nodes) { + if (QR.nodes.el.hidden) { + QR.captcha.setup(); + } + QR.nodes.el.hidden = false; + QR.unhide(); + } else { + try { + QR.dialog(); + } catch (_error) { + err = _error; + delete QR.nodes; + Main.handleErrors({ + message: 'Quick Reply dialog creation crashed.', + error: err + }); + return; + } + } + if (Conf['QR Shortcut']) { + return $.rmClass(QR.shortcut, 'disabled'); + } + }, + close: function() { + var j, len, post, ref; + if (QR.req) { + QR.abort(); + return; + } + QR.nodes.el.hidden = true; + QR.cleanNotifications(); + d.activeElement.blur(); + $.rmClass(QR.nodes.el, 'dump'); + if (Conf['QR Shortcut']) { + $.addClass(QR.shortcut, 'disabled'); + } + new QR.post(true); + ref = QR.posts.splice(0, QR.posts.length - 1); + for (j = 0, len = ref.length; j < len; j++) { + post = ref[j]; + post["delete"](); + } + QR.cooldown.auto = false; + QR.status(); + return QR.captcha.destroy(); + }, + focus: function() { + return $.queueTask(function() { + if (!QR.inBubble()) { + QR.hasFocus = d.activeElement && QR.nodes.el.contains(d.activeElement); + return QR.nodes.el.classList.toggle('focus', QR.hasFocus); + } + }); + }, + inBubble: function() { + var bubbles, ref; + bubbles = $$('iframe[src^="https://www.google.com/recaptcha/api2/frame"]'); + return (ref = d.activeElement, indexOf.call(bubbles, ref) >= 0) || bubbles.some(function(el) { + return getComputedStyle(el).visibility !== 'hidden' && el.getBoundingClientRect().bottom > 0; + }); + }, + hide: function() { + d.activeElement.blur(); + $.addClass(QR.nodes.el, 'autohide'); + return QR.nodes.autohide.checked = true; + }, + unhide: function() { + $.rmClass(QR.nodes.el, 'autohide'); + return QR.nodes.autohide.checked = false; + }, + toggleHide: function() { + if (this.checked) { + return QR.hide(); + } else { + return QR.unhide(); + } + }, + toggleSJIS: function(e) { + e.preventDefault(); + Conf['sjisPreview'] = !Conf['sjisPreview']; + $.set('sjisPreview', Conf['sjisPreview']); + return QR.nodes.el.classList.toggle('sjis-preview', Conf['sjisPreview']); + }, + texPreviewShow: function() { + if ($.hasClass(QR.nodes.el, 'tex-preview')) { + return QR.texPreviewHide(); + } + $.addClass(QR.nodes.el, 'tex-preview'); + QR.nodes.texPreview.textContent = QR.nodes.com.value; + return $.event('mathjax', null, QR.nodes.texPreview); + }, + texPreviewHide: function() { + return $.rmClass(QR.nodes.el, 'tex-preview'); + }, + setCustomCooldown: function(enabled) { + Conf['customCooldownEnabled'] = enabled; + QR.cooldown.customCooldown = enabled; + return QR.nodes.customCooldown.classList.toggle('disabled', !enabled); + }, + toggleCustomCooldown: function() { + var enabled; + enabled = $.hasClass(this, 'disabled'); + QR.setCustomCooldown(enabled); + return $.set('customCooldownEnabled', enabled); + }, + error: function(err, focusOverride) { + var el, notice, notif; + QR.open(); + if (typeof err === 'string') { + el = $.tn(err); + } else { + el = err; + el.removeAttribute('style'); + } + notice = new Notice('warning', el); + QR.notifications.push(notice); + if (!Header.areNotificationsEnabled) { + if (d.hidden && !QR.cooldown.auto) { + return alert(el.textContent); + } + } else if (d.hidden || !(focusOverride || d.hasFocus())) { + try { + notif = new Notification(el.textContent, { + body: el.textContent, + icon: Favicon.logo + }); + notif.onclick = function() { + return $.global(function() { + return window.focus(); + }); + }; + if ($.engine !== 'gecko') { + notif.onclose = function() { + return notice.close(); + }; + return notif.onshow = function() { + return setTimeout(function() { + notif.onclose = null; + return notif.close(); + }, 7 * $.SECOND); + }; + } + } catch (_error) {} + } + }, + notifications: [], + cleanNotifications: function() { + var j, len, notification, ref; + ref = QR.notifications; + for (j = 0, len = ref.length; j < len; j++) { + notification = ref[j]; + notification.close(); + } + return QR.notifications = []; + }, + status: function() { + var disabled, status, thread, value; + if (!QR.nodes) { + return; + } + thread = QR.posts[0].thread; + if (thread !== 'new' && g.threads[g.BOARD + "." + thread].isDead) { + value = 'Dead'; + disabled = true; + QR.cooldown.auto = false; + } + value = QR.req ? QR.req.progress : QR.cooldown.seconds || value; + status = QR.nodes.status; + status.value = !value ? 'Submit' : QR.cooldown.auto ? "Auto " + value : value; + return status.disabled = disabled || false; + }, + openPost: function() { + var index; + QR.open(); + if (QR.selected.isLocked) { + index = QR.posts.indexOf(QR.selected); + (QR.posts[index + 1] || new QR.post()).select(); + $.addClass(QR.nodes.el, 'dump'); + return QR.cooldown.auto = true; + } + }, + quote: function(e) { + var ancestor, caretPos, com, frag, insideCode, j, k, l, len, len1, len2, len3, len4, len5, n, node, o, post, q, range, ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, sel, text, thread; + if (e != null) { + e.preventDefault(); + } + if (!QR.postingIsEnabled) { + return; + } + sel = d.getSelection(); + post = Get.postFromNode(this); + text = post.board.ID === g.BOARD.ID ? ">>" + post + "\n" : ">>>/" + post.board + "/" + post + "\n"; + if (sel.toString().trim() && post === Get.postFromNode(sel.anchorNode)) { + range = sel.getRangeAt(0); + frag = range.cloneContents(); + ancestor = range.commonAncestorContainer; + if ($.x('ancestor-or-self::*[self::s or contains(@class,"removed-spoiler")]', ancestor)) { + $.prepend(frag, $.tn('[spoiler]')); + $.add(frag, $.tn('[/spoiler]')); + } + if (insideCode = $.x('ancestor-or-self::pre[contains(@class,"prettyprint")]', ancestor)) { + $.prepend(frag, $.tn('[code]')); + $.add(frag, $.tn('[/code]')); + } + ref = $$((insideCode ? 'br' : '.prettyprint br'), frag); + for (j = 0, len = ref.length; j < len; j++) { + node = ref[j]; + $.replace(node, $.tn('\n')); + } + ref1 = $$('br', frag); + for (k = 0, len1 = ref1.length; k < len1; k++) { + node = ref1[k]; + if (node !== frag.lastChild) { + $.replace(node, $.tn('\n>')); + } + } + ref2 = $$('s, .removed-spoiler', frag); + for (l = 0, len2 = ref2.length; l < len2; l++) { + node = ref2[l]; + $.replace(node, [$.tn('[spoiler]')].concat(slice.call(node.childNodes), [$.tn('[/spoiler]')])); + } + ref3 = $$('.prettyprint', frag); + for (n = 0, len3 = ref3.length; n < len3; n++) { + node = ref3[n]; + $.replace(node, [$.tn('[code]')].concat(slice.call(node.childNodes), [$.tn('[/code]')])); + } + ref4 = $$('.linkify[data-original]', frag); + for (o = 0, len4 = ref4.length; o < len4; o++) { + node = ref4[o]; + $.replace(node, $.tn(node.dataset.original)); + } + ref5 = $$('.embedder', frag); + for (q = 0, len5 = ref5.length; q < len5; q++) { + node = ref5[q]; + if (((ref6 = node.previousSibling) != null ? ref6.nodeValue : void 0) === ' ') { + $.rm(node.previousSibling); + } + $.rm(node); + } + text += ">" + (frag.textContent.trim()) + "\n"; + } + QR.openPost(); + ref7 = QR.nodes, com = ref7.com, thread = ref7.thread; + if (!com.value) { + thread.value = Get.threadFromNode(this); + } + caretPos = com.selectionStart; + com.value = com.value.slice(0, caretPos) + text + com.value.slice(com.selectionEnd); + range = caretPos + text.length; + com.setSelectionRange(range, range); + com.focus(); + QR.selected.save(com); + return QR.selected.save(thread); + }, + characterCount: function() { + var count, counter; + counter = QR.nodes.charCount; + count = QR.nodes.com.value.replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, '_').length; + counter.textContent = count; + counter.hidden = count < QR.max_comment / 2; + return (count > QR.max_comment ? $.addClass : $.rmClass)(counter, 'warning'); + }, + getFile: function() { + var ref; + return $.event('QRFile', (ref = QR.selected) != null ? ref.file : void 0); + }, + setFile: function(e) { + var file, name, ref, source; + ref = e.detail, file = ref.file, name = ref.name, source = ref.source; + if (name != null) { + file.name = name; + } + if (source != null) { + file.source = source; + } + QR.open(); + return QR.handleFiles([file]); + }, + drag: function(e) { + var toggle; + toggle = e.type === 'dragstart' ? $.off : $.on; + toggle(d, 'dragover', QR.dragOver); + return toggle(d, 'drop', QR.dropFile); + }, + dragOver: function(e) { + e.preventDefault(); + return e.dataTransfer.dropEffect = 'copy'; + }, + dropFile: function(e) { + if (!e.dataTransfer.files.length) { + return; + } + e.preventDefault(); + QR.open(); + return QR.handleFiles(e.dataTransfer.files); + }, + paste: function(e) { + var blob, files, item, j, len, ref; + if (!e.clipboardData.items) { + return; + } + files = []; + ref = e.clipboardData.items; + for (j = 0, len = ref.length; j < len; j++) { + item = ref[j]; + if (!(item.kind === 'file')) { + continue; + } + blob = item.getAsFile(); + blob.name = 'file'; + if (blob.type) { + blob.name += '.' + blob.type.split('/')[1]; + } + files.push(blob); + } + if (!files.length) { + return; + } + QR.open(); + QR.handleFiles(files); + return $.addClass(QR.nodes.el, 'dump'); + }, + pasteFF: function() { + var arr, blob, bstr, i, images, img, j, k, len, m, pasteArea, ref, src; + pasteArea = QR.nodes.pasteArea; + if (!pasteArea.childNodes.length) { + return; + } + images = $$('img', pasteArea); + $.rmAll(pasteArea); + for (j = 0, len = images.length; j < len; j++) { + img = images[j]; + src = img.src; + if (m = src.match(/data:(image\/(\w+));base64,(.+)/)) { + bstr = atob(m[3]); + arr = new Uint8Array(bstr.length); + for (i = k = 0, ref = bstr.length; 0 <= ref ? k < ref : k > ref; i = 0 <= ref ? ++k : --k) { + arr[i] = bstr.charCodeAt(i); + } + blob = new Blob([arr], { + type: m[1] + }); + blob.name = "file." + m[2]; + QR.handleFiles([blob]); + } else if (/^https?:\/\//.test(src)) { + QR.handleUrl(src); + } + } + }, + handleUrl: function(urlDefault) { + var url; + url = prompt('Enter a URL:', urlDefault); + if (url === null) { + return; + } + QR.nodes.fileButton.focus(); + return CrossOrigin.file(url, function(blob) { + if (blob && !/^text\//.test(blob.type)) { + return QR.handleFiles([blob]); + } else { + return QR.error("Can't load file."); + } + }); + }, + handleFiles: function(files) { + var file, j, len; + if (this !== QR) { + files = slice.call(this.files); + this.value = null; + } + if (!files.length) { + return; + } + QR.cleanNotifications(); + for (j = 0, len = files.length; j < len; j++) { + file = files[j]; + QR.handleFile(file, files.length); + } + if (files.length !== 1) { + $.addClass(QR.nodes.el, 'dump'); + } + if (d.activeElement === QR.nodes.fileButton && $.hasClass(QR.nodes.fileSubmit, 'has-file')) { + return QR.nodes.filename.focus(); + } + }, + handleFile: function(file, nfiles) { + var isText, post; + isText = /^text\//.test(file.type); + if (nfiles === 1) { + post = QR.selected; + } else { + post = QR.posts[QR.posts.length - 1]; + if ((isText ? post.com || post.pasting : post.file)) { + post = new QR.post(); + } + } + return post[isText ? 'pasteText' : 'setFile'](file); + }, + openFileInput: function() { + if (QR.nodes.fileButton.disabled) { + return; + } + QR.nodes.fileInput.click(); + return QR.nodes.fileButton.focus(); + }, + generatePostableThreadsList: function() { + var j, len, list, options, ref, thread, val; + if (!QR.nodes) { + return; + } + list = QR.nodes.thread; + options = [list.firstElementChild]; + ref = g.BOARD.threads.keys; + for (j = 0, len = ref.length; j < len; j++) { + thread = ref[j]; + options.push($.el('option', { + value: thread, + textContent: "Thread " + thread + })); + } + val = list.value; + $.rmAll(list); + $.add(list, options); + list.value = val; + if (list.value === val) { + return; + } + list.value = g.VIEW === 'thread' ? g.THREADID : 'new'; + return (g.VIEW === 'thread' ? $.addClass : $.rmClass)(QR.nodes.el, 'reply-to-thread'); + }, + dialog: function() { + var dialog, event, i, items, m, match_max, match_min, name, node, nodes, ref, rules, save, scriptData, setNode; + QR.nodes = nodes = { + el: dialog = UI.dialog('qr', 'top: 50px; right: 0px;', { + innerHTML: "
          ×
          No selected file
          " + }) + }; + setNode = function(name, query) { + return nodes[name] = $(query, dialog); + }; + setNode('move', '.move'); + setNode('autohide', '#autohide'); + setNode('close', '.close'); + setNode('thread', 'select'); + setNode('form', 'form'); + setNode('sjisToggle', '#sjis-toggle'); + setNode('texButton', '#tex-preview-button'); + setNode('name', '[data-name=name]'); + setNode('email', '[data-name=email]'); + setNode('sub', '[data-name=sub]'); + setNode('com', '[data-name=com]'); + setNode('charCount', '#char-count'); + setNode('texPreview', '#tex-preview'); + setNode('dumpList', '#dump-list'); + setNode('addPost', '#add-post'); + setNode('oekaki', '.oekaki'); + setNode('drawButton', '#qr-draw-button'); + setNode('fileSubmit', '#file-n-submit'); + setNode('fileButton', '#qr-file-button'); + setNode('noFile', '#qr-no-file'); + setNode('filename', '#qr-filename'); + setNode('spoiler', '#qr-file-spoiler'); + setNode('oekakiButton', '#qr-oekaki-button'); + setNode('fileRM', '#qr-filerm'); + setNode('urlButton', '#url-button'); + setNode('pasteArea', '#paste-area'); + setNode('customCooldown', '#custom-cooldown-button'); + setNode('dumpButton', '#dump-button'); + setNode('status', '[type=submit]'); + setNode('flashTag', '[name=filetag]'); + setNode('fileInput', '[type=file]'); + rules = $('ul.rules').textContent.trim(); + match_min = rules.match(/.+smaller than (\d+)x(\d+).+/); + match_max = rules.match(/.+greater than (\d+)x(\d+).+/); + QR.min_width = +(match_min != null ? match_min[1] : void 0) || 1; + QR.min_height = +(match_min != null ? match_min[2] : void 0) || 1; + QR.max_width = +(match_max != null ? match_max[1] : void 0) || 10000; + QR.max_height = +(match_max != null ? match_max[2] : void 0) || 10000; + scriptData = Get.scriptData(); + QR.max_size = (m = scriptData.match(/\bmaxFilesize *= *(\d+)\b/)) ? +m[1] : 4194304; + QR.max_size_video = (m = scriptData.match(/\bmaxWebmFilesize *= *(\d+)\b/)) ? +m[1] : QR.max_size; + QR.max_comment = (m = scriptData.match(/\bcomlen *= *(\d+)\b/)) ? +m[1] : 2000; + QR.max_width_video = QR.max_height_video = 2048; + QR.max_duration_video = (ref = g.BOARD.ID) === 'gif' || ref === 'wsg' ? 300 : 120; + if (Conf['Show New Thread Option in Threads']) { + $.addClass(QR.nodes.el, 'show-new-thread-option'); + } + if (Conf['Show Name and Subject']) { + $.addClass(QR.nodes.name, 'force-show'); + $.addClass(QR.nodes.sub, 'force-show'); + QR.nodes.email.placeholder = 'E-mail'; + } + QR.forcedAnon = !!$('form[name="post"] input[name="name"][type="hidden"]'); + if (QR.forcedAnon) { + $.addClass(QR.nodes.el, 'forced-anon'); + } + QR.spoiler = !!$('.postForm input[name=spoiler]'); + if (QR.spoiler) { + $.addClass(QR.nodes.el, 'has-spoiler'); + } + if (g.BOARD.ID === 'jp' && Conf['sjisPreview']) { + $.addClass(QR.nodes.el, 'sjis-preview'); + } + if (parseInt(Conf['customCooldown'], 10) > 0) { + $.addClass(QR.nodes.fileSubmit, 'custom-cooldown'); + $.get('customCooldownEnabled', Conf['customCooldownEnabled'], function(arg) { + var customCooldownEnabled; + customCooldownEnabled = arg.customCooldownEnabled; + QR.setCustomCooldown(customCooldownEnabled); + return $.sync('customCooldownEnabled', QR.setCustomCooldown); + }); + } + $.on(nodes.autohide, 'change', QR.toggleHide); + $.on(nodes.close, 'click', QR.close); + $.on(nodes.form, 'submit', QR.submit); + $.on(nodes.sjisToggle, 'click', QR.toggleSJIS); + $.on(nodes.texButton, 'mousedown', QR.texPreviewShow); + $.on(nodes.texButton, 'mouseup', QR.texPreviewHide); + $.on(nodes.addPost, 'click', function() { + return new QR.post(true); + }); + $.on(nodes.drawButton, 'click', QR.oekaki.draw); + $.on(nodes.fileButton, 'click', QR.openFileInput); + $.on(nodes.noFile, 'click', QR.openFileInput); + $.on(nodes.filename, 'focus', function() { + return $.addClass(this.parentNode, 'focus'); + }); + $.on(nodes.filename, 'blur', function() { + return $.rmClass(this.parentNode, 'focus'); + }); + $.on(nodes.spoiler, 'change', function() { + return QR.selected.nodes.spoiler.click(); + }); + $.on(nodes.oekakiButton, 'click', QR.oekaki.button); + $.on(nodes.fileRM, 'click', function() { + return QR.selected.rmFile(); + }); + $.on(nodes.urlButton, 'click', function() { + return QR.handleUrl(''); + }); + $.on(nodes.customCooldown, 'click', QR.toggleCustomCooldown); + $.on(nodes.dumpButton, 'click', function() { + return nodes.el.classList.toggle('dump'); + }); + $.on(nodes.fileInput, 'change', QR.handleFiles); + window.addEventListener('focus', QR.focus, true); + window.addEventListener('blur', QR.focus, true); + $.on(d, 'click', QR.focus); + if ($.engine === 'gecko') { + nodes.pasteArea.hidden = false; + new MutationObserver(QR.pasteFF).observe(nodes.pasteArea, { + childList: true + }); + } + items = ['thread', 'name', 'email', 'sub', 'com', 'filename']; + i = 0; + save = function() { + return QR.selected.save(this); + }; + while (name = items[i++]) { + if (!(node = nodes[name])) { + continue; + } + event = node.nodeName === 'SELECT' ? 'change' : 'input'; + $.on(nodes[name], event, save); + } + if ($.engine === 'gecko' && Conf['Remember QR Size']) { + $.get('QR Size', '', function(item) { + return nodes.com.style.cssText = item['QR Size']; + }); + $.on(nodes.com, 'mouseup', function(e) { + if (e.button !== 0) { + return; + } + return $.set('QR Size', this.style.cssText); + }); + } + QR.generatePostableThreadsList(); + QR.persona.load(); + new QR.post(true); + QR.status(); + QR.cooldown.setup(); + QR.captcha.init(); + $.add(d.body, dialog); + QR.captcha.setup(); + QR.oekaki.setup(); + return $.event('QRDialogCreation', null, dialog); + }, + submit: function(e) { + var captcha, cb, err, extra, filetag, formData, options, post, ref, textOnly, thread, threadID; + if (e != null) { + e.preventDefault(); + } + if (QR.req) { + QR.abort(); + return; + } + if (QR.cooldown.seconds) { + QR.cooldown.auto = !QR.cooldown.auto; + QR.status(); + return; + } + post = QR.posts[0]; + post.forceSave(); + threadID = post.thread; + thread = g.BOARD.threads[threadID]; + if (g.BOARD.ID === 'f' && threadID === 'new') { + filetag = QR.nodes.flashTag.value; + } + if (threadID === 'new') { + threadID = null; + if (g.BOARD.ID === 'vg' && !post.sub) { + err = 'New threads require a subject.'; + } else if (!($.hasClass(d.body, 'text_only') || post.file || (textOnly = !!$('input[name=textonly]', $.id('postForm'))))) { + err = 'No file selected.'; + } + } else if (g.BOARD.threads[threadID].isClosed) { + err = 'You can\'t reply to this thread anymore.'; + } else if (!(post.com || post.file)) { + err = 'No comment or file.'; + } else if (post.file && thread.fileLimit) { + err = 'Max limit of image replies has been reached.'; + } + if (g.BOARD.ID === 'r9k' && !((ref = post.com) != null ? ref.match(/[a-z-]/i) : void 0)) { + err || (err = 'Original comment required.'); + } + if (QR.captcha.isEnabled && !err) { + captcha = QR.captcha.getOne(); + if (!captcha) { + err = 'No valid captcha.'; + QR.captcha.setup(!QR.cooldown.auto || d.activeElement === QR.nodes.status); + } + } + QR.cleanNotifications(); + if (err) { + QR.cooldown.auto = false; + QR.status(); + QR.error(err); + return; + } + QR.cooldown.auto = QR.posts.length > 1; + if (Conf['Auto Hide QR'] && !QR.cooldown.auto) { + QR.hide(); + } + if (!QR.cooldown.auto && $.x('ancestor::div[@id="qr"]', d.activeElement)) { + d.activeElement.blur(); + } + post.lock(); + formData = { + resto: threadID, + name: !QR.forcedAnon ? post.name : void 0, + email: post.email, + sub: !(QR.forcedAnon || threadID) ? post.sub : void 0, + com: post.com, + upfile: post.file, + filetag: filetag, + spoiler: post.spoiler, + textonly: textOnly, + mode: 'regist', + pwd: QR.persona.getPassword() + }; + options = { + responseType: 'document', + withCredentials: true, + onload: QR.response, + onerror: function() { + delete QR.req; + post.unlock(); + QR.cooldown.auto = false; + QR.status(); + return QR.error($.el('span', { + innerHTML: "Connection error while posting. [More info]" + })); + } + }; + extra = { + form: $.formData(formData), + upCallbacks: { + onload: function() { + QR.req.isUploadFinished = true; + QR.req.progress = '...'; + return QR.status(); + }, + onprogress: function(e) { + QR.req.progress = (Math.round(e.loaded / e.total * 100)) + "%"; + return QR.status(); + } + } + }; + cb = function(response) { + if (response != null) { + if (response.challenge != null) { + extra.form.append('recaptcha_challenge_field', response.challenge); + extra.form.append('recaptcha_response_field', response.response); + } else { + extra.form.append('g-recaptcha-response', response.response); + } + } + QR.req = $.ajax("https://sys.4chan.org/" + g.BOARD + "/post", options, extra); + return QR.req.progress = '...'; + }; + if (typeof captcha === 'function') { + QR.req = { + progress: '...', + abort: function() { + return cb = null; + } + }; + captcha(function(response) { + if (response) { + return typeof cb === "function" ? cb(response) : void 0; + } else { + delete QR.req; + post.unlock(); + QR.cooldown.auto = !!QR.captcha.captchas.length; + return QR.status(); + } + }); + } else { + cb(captcha); + } + return QR.status(); + }, + response: function() { + var URL, _, ban, err, h1, isReply, lastPostToThread, m, open, post, postID, postsCount, ref, ref1, ref2, req, resDoc, seconds, threadID; + req = QR.req; + delete QR.req; + post = QR.posts[0]; + post.unlock(); + resDoc = req.response; + if (ban = $('.banType', resDoc)) { + err = $.el('span', ban.textContent.toLowerCase() === 'banned' ? { + innerHTML: "You are banned on " + ($(".board", resDoc)).innerHTML + "! ;_;
          Click here to see the reason." + } : { + innerHTML: "You were issued a warning on " + ($(".board", resDoc)).innerHTML + " as " + ($(".nameBlock", resDoc)).innerHTML + ".
          Reason: " + ($(".reason", resDoc)).innerHTML + }); + } else if (err = resDoc.getElementById('errmsg')) { + if ((ref = $('a', err)) != null) { + ref.target = '_blank'; + } + } else if (resDoc.title !== 'Post successful!') { + err = 'Connection error with sys.4chan.org.'; + } else if (req.status !== 200) { + err = "Error " + req.statusText + " (" + req.status + ")"; + } + if (err) { + if (/captcha|verification/i.test(err.textContent) || err === 'Connection error with sys.4chan.org.') { + if (/mistyped/i.test(err.textContent)) { + err = $.el('span', { + innerHTML: "You mistyped the CAPTCHA, or the CAPTCHA malfunctioned [complain here]." + }); + } else if (/expired/i.test(err.textContent)) { + err = 'This CAPTCHA is no longer valid because it has expired.'; + } + QR.cooldown.auto = QR.captcha.isEnabled || err === 'Connection error with sys.4chan.org.'; + QR.cooldown.addDelay(post, 2); + } else if (err.textContent && (m = err.textContent.match(/(?:(\d+)\s+minutes?\s+)?(\d+)\s+second/i)) && !/duplicate|hour/i.test(err.textContent)) { + QR.cooldown.auto = !/have\s+been\s+muted/i.test(err.textContent); + seconds = 60 * (+(m[1] || 0)) + (+m[2]); + if (/muted/i.test(err.textContent)) { + QR.cooldown.addMute(seconds); + } else { + QR.cooldown.addDelay(post, seconds); + } + } else { + QR.cooldown.auto = false; + } + QR.captcha.setup(QR.cooldown.auto && ((ref1 = d.activeElement) === QR.nodes.status || ref1 === d.body)); + if (QR.captcha.isEnabled && !QR.captcha.captchas.length) { + QR.cooldown.auto = false; + } + QR.status(); + QR.error(err); + return; + } + h1 = $('h1', resDoc); + QR.cleanNotifications(); + if (Conf['Posting Success Notifications']) { + QR.notifications.push(new Notice('success', h1.textContent, 5)); + } + ref2 = h1.nextSibling.textContent.match(/thread:(\d+),no:(\d+)/), _ = ref2[0], threadID = ref2[1], postID = ref2[2]; + postID = +postID; + threadID = +threadID || postID; + isReply = threadID !== postID; + $.event('QRPostSuccessful', { + boardID: g.BOARD.ID, + threadID: threadID, + postID: postID + }); + $.event('QRPostSuccessful_', { + boardID: g.BOARD.ID, + threadID: threadID, + postID: postID + }); + postsCount = QR.posts.length - 1; + QR.cooldown.auto = postsCount && isReply; + lastPostToThread = !((function() { + var j, len, p, ref3; + ref3 = QR.posts.slice(1); + for (j = 0, len = ref3.length; j < len; j++) { + p = ref3[j]; + if (p.thread === post.thread) { + return true; + } + } + })()); + if (!(Conf['Persistent QR'] || postsCount)) { + QR.close(); + } else { + post.rm(); + QR.captcha.setup(d.activeElement === QR.nodes.status); + } + QR.cooldown.add(threadID, postID); + URL = threadID === postID ? window.location.origin + "/" + g.BOARD + "/thread/" + threadID : g.VIEW === 'index' && lastPostToThread && Conf['Open Post in New Tab'] ? window.location.origin + "/" + g.BOARD + "/thread/" + threadID + "#p" + postID : void 0; + if (URL) { + open = Conf['Open Post in New Tab'] || postsCount ? function() { + return $.open(URL); + } : function() { + return window.location = URL; + }; + if (threadID === postID) { + QR.waitForThread(URL, open); + } else { + open(); + } + } + return QR.status(); + }, + waitForThread: function(url, cb) { + var attempts, check; + attempts = 0; + check = function() { + return $.ajax(url, { + onloadend: function() { + attempts++; + if (attempts >= 6 || this.status === 200) { + return cb(); + } else { + return setTimeout(check, attempts * $.SECOND); + } + } + }, { + type: 'HEAD' + }); + }; + return check(); + }, + abort: function() { + if (QR.req && !QR.req.isUploadFinished) { + QR.req.abort(); + delete QR.req; + QR.posts[0].unlock(); + QR.cooldown.auto = false; + QR.notifications.push(new Notice('info', 'QR upload aborted.', 5)); + } + return QR.status(); + } + }; + + return QR; + +}).call(this); + +(function() { + QR.cooldown = { + seconds: 0, + delays: { + thread: 0, + reply: 0, + image: 0, + reply_intra: 0, + image_intra: 0, + deletion: 60, + thread_global: 300 + }, + init: function() { + if (!Conf['Quick Reply']) { + return; + } + this.data = Conf['cooldowns']; + return $.sync('cooldowns', this.sync); + }, + setup: function() { + var delay, m, ref, type; + if (m = Get.scriptData().match(/\bcooldowns *= *({[^}]+})/)) { + $.extend(QR.cooldown.delays, JSON.parse(m[1])); + } + QR.cooldown.maxDelay = 0; + ref = QR.cooldown.delays; + for (type in ref) { + delay = ref[type]; + if (type !== 'thread' && type !== 'thread_global') { + QR.cooldown.maxDelay = Math.max(QR.cooldown.maxDelay, delay); + } + } + QR.cooldown.isSetup = true; + return QR.cooldown.start(); + }, + start: function() { + var data; + data = QR.cooldown.data; + if (!(Conf['Cooldown'] && QR.cooldown.isSetup && !QR.cooldown.isCounting && Object.keys(data[g.BOARD.ID] || {}).length + Object.keys(data.global || {}).length > 0)) { + return; + } + QR.cooldown.isCounting = true; + return QR.cooldown.count(); + }, + sync: function(data) { + QR.cooldown.data = data || {}; + return QR.cooldown.start(); + }, + add: function(threadID, postID) { + var boardID, start; + if (!Conf['Cooldown']) { + return; + } + start = Date.now(); + boardID = g.BOARD.ID; + QR.cooldown.set(boardID, start, { + threadID: threadID, + postID: postID + }); + if (threadID === postID) { + QR.cooldown.set('global', start, { + boardID: boardID, + threadID: threadID, + postID: postID + }); + } + return QR.cooldown.start(); + }, + addDelay: function(post, delay) { + var cooldown; + if (!Conf['Cooldown']) { + return; + } + cooldown = QR.cooldown.categorize(post); + cooldown.delay = delay; + QR.cooldown.set(g.BOARD.ID, Date.now(), cooldown); + return QR.cooldown.start(); + }, + addMute: function(delay) { + if (!Conf['Cooldown']) { + return; + } + QR.cooldown.set(g.BOARD.ID, Date.now(), { + type: 'mute', + delay: delay + }); + return QR.cooldown.start(); + }, + "delete": function(post) { + var base, cooldown, cooldowns, id, name; + if (!QR.cooldown.data) { + return; + } + $.forceSync('cooldowns'); + cooldowns = ((base = QR.cooldown.data)[name = post.board.ID] || (base[name] = {})); + for (id in cooldowns) { + cooldown = cooldowns[id]; + if ((cooldown.delay == null) && cooldown.threadID === post.thread.ID && cooldown.postID === post.ID) { + delete cooldowns[id]; + } + } + return QR.cooldown.save([post.board.ID]); + }, + secondsDeletion: function(post) { + var cooldown, cooldowns, seconds, start; + if (!(QR.cooldown.data && Conf['Cooldown'])) { + return 0; + } + cooldowns = QR.cooldown.data[post.board.ID] || {}; + for (start in cooldowns) { + cooldown = cooldowns[start]; + if ((cooldown.delay == null) && cooldown.threadID === post.thread.ID && cooldown.postID === post.ID) { + seconds = QR.cooldown.delays.deletion - Math.floor((Date.now() - start) / $.SECOND); + return Math.max(seconds, 0); + } + } + return 0; + }, + categorize: function(post) { + if (post.thread === 'new') { + return { + type: 'thread' + }; + } else { + return { + type: !!post.file ? 'image' : 'reply', + threadID: +post.thread + }; + } + }, + set: function(scope, id, value) { + var base, cooldowns; + $.forceSync('cooldowns'); + cooldowns = ((base = QR.cooldown.data)[scope] || (base[scope] = {})); + cooldowns[id] = value; + return $.set('cooldowns', QR.cooldown.data); + }, + save: function(scopes) { + var data, i, len, scope; + data = QR.cooldown.data; + for (i = 0, len = scopes.length; i < len; i++) { + scope = scopes[i]; + if (scope in data && !Object.keys(data[scope]).length) { + delete data[scope]; + } + } + return $.set('cooldowns', data); + }, + count: function() { + var base, cooldown, cooldowns, elapsed, i, len, maxDelay, nCooldowns, now, ref, ref1, save, scope, seconds, start, suffix, threadID, type, update; + $.forceSync('cooldowns'); + save = []; + nCooldowns = 0; + now = Date.now(); + ref = QR.cooldown.categorize(QR.posts[0]), type = ref.type, threadID = ref.threadID; + seconds = 0; + if (Conf['Cooldown']) { + ref1 = [g.BOARD.ID, 'global']; + for (i = 0, len = ref1.length; i < len; i++) { + scope = ref1[i]; + cooldowns = ((base = QR.cooldown.data)[scope] || (base[scope] = {})); + for (start in cooldowns) { + cooldown = cooldowns[start]; + start = +start; + elapsed = Math.floor((now - start) / $.SECOND); + if (elapsed < 0) { + delete cooldowns[start]; + save.push(scope); + continue; + } + if (cooldown.delay != null) { + if (cooldown.delay <= elapsed) { + delete cooldowns[start]; + save.push(scope); + } else if ((cooldown.type === type && cooldown.threadID === threadID) || cooldown.type === 'mute') { + seconds = Math.max(seconds, cooldown.delay - elapsed); + } + continue; + } + maxDelay = cooldown.threadID !== cooldown.postID ? QR.cooldown.maxDelay : QR.cooldown.delays[scope === 'global' ? 'thread_global' : 'thread']; + if (QR.cooldown.customCooldown) { + maxDelay = Math.max(maxDelay, parseInt(Conf['customCooldown'], 10)); + } + if (maxDelay <= elapsed) { + delete cooldowns[start]; + save.push(scope); + continue; + } + if ((type === 'thread') === (cooldown.threadID === cooldown.postID) && cooldown.boardID !== g.BOARD.ID) { + suffix = scope === 'global' ? '_global' : type !== 'thread' && threadID === cooldown.threadID ? '_intra' : ''; + seconds = Math.max(seconds, QR.cooldown.delays[type + suffix] - elapsed); + } + if (QR.cooldown.customCooldown) { + seconds = Math.max(seconds, parseInt(Conf['customCooldown'], 10) - elapsed); + } + } + nCooldowns += Object.keys(cooldowns).length; + } + } + if (save.length) { + QR.cooldown.save(save); + } + if (nCooldowns) { + clearTimeout(QR.cooldown.timeout); + QR.cooldown.timeout = setTimeout(QR.cooldown.count, $.SECOND); + } else { + delete QR.cooldown.isCounting; + } + update = seconds !== QR.cooldown.seconds; + QR.cooldown.seconds = seconds; + if (update) { + QR.status(); + } + if (seconds === 0 && QR.cooldown.auto && !QR.req) { + return QR.submit(); + } + } + }; + +}).call(this); + +(function() { + QR.oekaki = { + menu: { + init: function() { + var a, ref; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Menu'] && Conf['Edit Link'] && Conf['Quick Reply'])) { + return; + } + a = $.el('a', { + className: 'edit-link', + href: 'javascript:;', + textContent: 'Edit image' + }); + $.on(a, 'click', this.editFile); + return Menu.menu.addEntry({ + el: a, + order: 95, + open: function(post) { + var file; + QR.oekaki.menu.post = post; + file = post.file; + return QR.postingIsEnabled && !!file && (file.isImage || file.isVideo); + } + }); + }, + editFile: function() { + var currentTime, isVideo, post, ref; + post = QR.oekaki.menu.post; + QR.quote.call(post.nodes.post); + isVideo = post.file.isVideo; + currentTime = ((ref = post.file.fullImage) != null ? ref.currentTime : void 0) || 0; + return CrossOrigin.file(post.file.url, function(blob) { + var video; + if (!blob) { + return QR.error("Can't load file."); + } else if (isVideo) { + video = $.el('video'); + $.on(video, 'loadedmetadata', function() { + $.on(video, 'seeked', function() { + var canvas; + canvas = $.el('canvas', { + width: video.videoWidth, + height: video.videoHeight + }); + canvas.getContext('2d').drawImage(video, 0, 0); + return canvas.toBlob(function(snapshot) { + snapshot.name = post.file.name.replace(/\.\w+$/, '') + '.png'; + QR.handleFiles([snapshot]); + return QR.oekaki.edit(); + }); + }); + return video.currentTime = currentTime; + }); + return video.src = URL.createObjectURL(blob); + } else { + blob.name = post.file.name; + QR.handleFiles([blob]); + return QR.oekaki.edit(); + } + }); + } + }, + setup: function() { + return $.global(function() { + var FCX; + FCX = window.FCX; + FCX.oekakiCB = function() { + return window.Tegaki.flatten().toBlob(function(file) { + var source; + source = "oekaki-" + (Date.now()); + FCX.oekakiLatest = source; + return document.dispatchEvent(new CustomEvent('QRSetFile', { + bubbles: true, + detail: { + file: file, + name: FCX.oekakiName, + source: source + } + })); + }); + }; + if (window.Tegaki) { + return document.querySelector('#qr .oekaki').hidden = false; + } + }); + }, + load: function(cb) { + var n, onload, script, style; + if ($('script[src^="//s.4cdn.org/js/painter"]', d.head)) { + return cb(); + } else { + style = $.el('link', { + rel: 'stylesheet', + href: "//s.4cdn.org/css/painter." + (Date.now()) + ".css" + }); + script = $.el('script', { + src: "//s.4cdn.org/js/painter.min." + (Date.now()) + ".js" + }); + n = 0; + onload = function() { + if (++n === 2) { + return cb(); + } + }; + $.on(style, 'load', onload); + $.on(script, 'load', onload); + return $.add(d.head, [style, script]); + } + }, + draw: function() { + return $.global(function() { + var FCX, Tegaki; + Tegaki = window.Tegaki, FCX = window.FCX; + if (Tegaki.bg) { + Tegaki.destroy(); + } + FCX.oekakiName = 'tegaki.png'; + return Tegaki.open({ + onDone: FCX.oekakiCB, + onCancel: function() { + return Tegaki.bgColor = '#ffffff'; + }, + width: +document.querySelector('#qr [name=oekaki-width]').value, + height: +document.querySelector('#qr [name=oekaki-height]').value, + bgColor: document.querySelector('#qr [name=oekaki-bg]').checked ? document.querySelector('#qr [name=oekaki-bgcolor]').value : 'transparent' + }); + }); + }, + button: function() { + if (QR.selected.file) { + return QR.oekaki.edit(); + } else { + return QR.oekaki.toggle(); + } + }, + edit: function() { + return QR.oekaki.load(function() { + return $.global(function() { + var FCX, Tegaki, cb, error, name, source; + Tegaki = window.Tegaki, FCX = window.FCX; + name = document.getElementById('qr-filename').value.replace(/\.\w+$/, '') + '.png'; + source = document.getElementById('file-n-submit').dataset.source; + error = function(content) { + return document.dispatchEvent(new CustomEvent('CreateNotification', { + bubbles: true, + detail: { + type: 'warning', + content: content, + lifetime: 20 + } + })); + }; + cb = function(e) { + var file, isVideo; + document.removeEventListener('QRFile', cb, false); + if (!e.detail) { + return error('No file to edit.'); + } + if (!/^(image|video)\//.test(e.detail.type)) { + return error('Not an image.'); + } + isVideo = /^video\//.test(e.detail.type); + file = document.createElement(isVideo ? 'video' : 'img'); + file.addEventListener('error', function() { + return error('Could not open file.', false); + }); + file.addEventListener((isVideo ? 'loadeddata' : 'load'), function() { + if (Tegaki.bg) { + Tegaki.destroy(); + } + FCX.oekakiName = name; + Tegaki.open({ + onDone: FCX.oekakiCB, + onCancel: function() { + return Tegaki.bgColor = '#ffffff'; + }, + width: file.naturalWidth || file.videoWidth, + height: file.naturalHeight || file.videoHeight, + bgColor: 'transparent' + }); + return Tegaki.activeCtx.drawImage(file, 0, 0); + }, false); + return file.src = URL.createObjectURL(e.detail); + }; + if (Tegaki.bg && Tegaki.onDoneCb === FCX.oekakiCB && source === FCX.oekakiLatest) { + FCX.oekakiName = name; + return Tegaki.resume(); + } else { + document.addEventListener('QRFile', cb, false); + return document.dispatchEvent(new CustomEvent('QRGetFile', { + bubbles: true + })); + } + }); + }); + }, + toggle: function() { + return QR.oekaki.load(function() { + return QR.nodes.oekaki.hidden = !QR.nodes.oekaki.hidden; + }); + } + }; + +}).call(this); + +(function() { + var indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + QR.persona = { + always: {}, + types: { + name: [], + email: [], + sub: [] + }, + init: function() { + var i, item, len, ref; + if (!(Conf['Quick Reply'] || (Conf['Menu'] && Conf['Delete Link']))) { + return; + } + ref = Conf['QR.personas'].split('\n'); + for (i = 0, len = ref.length; i < len; i++) { + item = ref[i]; + QR.persona.parseItem(item.trim()); + } + }, + parseItem: function(item) { + var boards, match, ref, ref1, ref2, type, val; + if (item[0] === '#') { + return; + } + if (!(match = item.match(/(name|options|email|subject|password):"(.*)"/i))) { + return; + } + ref = match, match = ref[0], type = ref[1], val = ref[2]; + item = item.replace(match, ''); + boards = ((ref1 = item.match(/boards:([^;]+)/i)) != null ? ref1[1].toLowerCase() : void 0) || 'global'; + if (boards !== 'global' && (ref2 = g.BOARD.ID, indexOf.call(boards.split(','), ref2) < 0)) { + return; + } + if (type === 'password') { + QR.persona.pwd = val; + return; + } + if (type === 'options') { + type = 'email'; + } + if (type === 'subject') { + type = 'sub'; + } + if (/always/i.test(item)) { + QR.persona.always[type] = val; + } + if (indexOf.call(QR.persona.types[type], val) < 0) { + return QR.persona.types[type].push(val); + } + }, + load: function() { + var arr, i, len, list, ref, type, val; + ref = QR.persona.types; + for (type in ref) { + arr = ref[type]; + list = $("#list-" + type, QR.nodes.el); + for (i = 0, len = arr.length; i < len; i++) { + val = arr[i]; + if (val) { + $.add(list, $.el('option', { + textContent: val + })); + } + } + } + }, + getPassword: function() { + var m; + if (QR.persona.pwd != null) { + return QR.persona.pwd; + } else if ((m = d.cookie.match(/4chan_pass=([^;]+)/))) { + return decodeURIComponent(m[1]); + } else { + return ''; + } + }, + get: function(cb) { + return $.get('QR.persona', {}, function(arg) { + var persona; + persona = arg['QR.persona']; + return cb(persona); + }); + }, + set: function(post) { + return $.get('QR.persona', {}, function(arg) { + var persona; + persona = arg['QR.persona']; + persona = { + name: post.name + }; + return $.set('QR.persona', persona); + }); + } + }; + +}).call(this); + +(function() { + var bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, + slice = [].slice; + + QR.post = (function() { + function _Class(select) { + this.select = bind(this.select, this); + var el, event, i, j, label, len, len1, prev, ref, ref1; + el = $.el('a', { + className: 'qr-preview', + draggable: true, + href: 'javascript:;' + }); + $.extend(el, { + innerHTML: "" + }); + this.nodes = { + el: el, + rm: el.firstChild, + spoiler: $('.qr-preview-spoiler input', el), + span: el.lastChild + }; + $.on(el, 'click', this.select); + $.on(this.nodes.rm, 'click', (function(_this) { + return function(e) { + e.stopPropagation(); + return _this.rm(); + }; + })(this)); + $.on(this.nodes.spoiler, 'change', (function(_this) { + return function(e) { + _this.spoiler = e.target.checked; + if (_this === QR.selected) { + return QR.nodes.spoiler.checked = _this.spoiler; + } + }; + })(this)); + ref = $$('label', el); + for (i = 0, len = ref.length; i < len; i++) { + label = ref[i]; + $.on(label, 'click', function(e) { + return e.stopPropagation(); + }); + } + $.add(QR.nodes.dumpList, el); + ref1 = ['dragStart', 'dragEnter', 'dragLeave', 'dragOver', 'dragEnd', 'drop']; + for (j = 0, len1 = ref1.length; j < len1; j++) { + event = ref1[j]; + $.on(el, event.toLowerCase(), this[event]); + } + this.thread = g.VIEW === 'thread' ? g.THREADID : 'new'; + prev = QR.posts[QR.posts.length - 1]; + QR.posts.push(this); + this.nodes.spoiler.checked = this.spoiler = prev && Conf['Remember Spoiler'] ? prev.spoiler : false; + QR.persona.get((function(_this) { + return function(persona) { + _this.name = 'name' in QR.persona.always ? QR.persona.always.name : prev ? prev.name : persona.name; + _this.email = 'email' in QR.persona.always ? QR.persona.always.email : ''; + _this.sub = 'sub' in QR.persona.always ? QR.persona.always.sub : ''; + if (QR.selected === _this) { + return _this.load(); + } + }; + })(this)); + if (select) { + this.select(); + } + this.unlock(); + $.queueTask(function() { + return QR.captcha.onNewPost(); + }); + } + + _Class.prototype.rm = function() { + var index; + this["delete"](); + index = QR.posts.indexOf(this); + if (QR.posts.length === 1) { + new QR.post(true); + $.rmClass(QR.nodes.el, 'dump'); + } else if (this === QR.selected) { + (QR.posts[index - 1] || QR.posts[index + 1]).select(); + } + QR.posts.splice(index, 1); + return QR.status(); + }; + + _Class.prototype["delete"] = function() { + $.rm(this.nodes.el); + URL.revokeObjectURL(this.URL); + return this.dismissErrors(); + }; + + _Class.prototype.lock = function(lock) { + var i, len, name, node, ref; + if (lock == null) { + lock = true; + } + this.isLocked = lock; + if (this !== QR.selected) { + return; + } + ref = ['thread', 'name', 'email', 'sub', 'com', 'fileButton', 'filename', 'spoiler']; + for (i = 0, len = ref.length; i < len; i++) { + name = ref[i]; + if (node = QR.nodes[name]) { + node.disabled = lock; + } + } + this.nodes.rm.style.visibility = lock ? 'hidden' : ''; + this.nodes.spoiler.disabled = lock; + return this.nodes.el.draggable = !lock; + }; + + _Class.prototype.unlock = function() { + return this.lock(false); + }; + + _Class.prototype.select = function() { + var rectEl, rectList; + if (QR.selected) { + QR.selected.nodes.el.removeAttribute('id'); + QR.selected.forceSave(); + } + QR.selected = this; + this.lock(this.isLocked); + this.nodes.el.id = 'selected'; + rectEl = this.nodes.el.getBoundingClientRect(); + rectList = this.nodes.el.parentNode.getBoundingClientRect(); + this.nodes.el.parentNode.scrollLeft += rectEl.left + rectEl.width / 2 - rectList.left - rectList.width / 2; + return this.load(); + }; + + _Class.prototype.load = function() { + var i, len, name, node, ref; + ref = ['thread', 'name', 'email', 'sub', 'com', 'filename']; + for (i = 0, len = ref.length; i < len; i++) { + name = ref[i]; + if (!(node = QR.nodes[name])) { + continue; + } + node.value = this[name] || node.dataset["default"] || ''; + } + (this.thread !== 'new' ? $.addClass : $.rmClass)(QR.nodes.el, 'reply-to-thread'); + this.showFileData(); + return QR.characterCount(); + }; + + _Class.prototype.save = function(input) { + var name, ref; + if (input.type === 'checkbox') { + this.spoiler = input.checked; + return; + } + name = input.dataset.name; + this[name] = input.value || input.dataset["default"] || null; + switch (name) { + case 'thread': + (this.thread !== 'new' ? $.addClass : $.rmClass)(QR.nodes.el, 'reply-to-thread'); + return QR.status(); + case 'com': + this.updateComment(); + if (QR.cooldown.auto && this === QR.posts[0] && (0 < (ref = QR.cooldown.seconds) && ref <= 5)) { + return QR.cooldown.auto = false; + } + break; + case 'filename': + if (!this.file) { + return; + } + this.saveFilename(); + return this.updateFilename(); + case 'name': + return QR.persona.set(this); + } + }; + + _Class.prototype.forceSave = function() { + var i, len, name, node, ref; + if (this !== QR.selected) { + return; + } + ref = ['thread', 'name', 'email', 'sub', 'com', 'filename', 'spoiler']; + for (i = 0, len = ref.length; i < len; i++) { + name = ref[i]; + if (!(node = QR.nodes[name])) { + continue; + } + this.save(node); + } + }; + + _Class.prototype.setComment = function(com) { + this.com = com || null; + if (this === QR.selected) { + QR.nodes.com.value = this.com; + } + return this.updateComment(); + }; + + _Class.prototype.updateComment = function() { + if (this === QR.selected) { + QR.characterCount(); + } + this.nodes.span.textContent = this.com; + return $.queueTask(function() { + return QR.captcha.onPostChange(); + }); + }; + + _Class.rmErrored = function(e) { + var error, errors, i, j, len, post, ref; + e.stopPropagation(); + ref = QR.posts; + for (i = ref.length - 1; i >= 0; i += -1) { + post = ref[i]; + if (errors = post.errors) { + for (j = 0, len = errors.length; j < len; j++) { + error = errors[j]; + if (!(doc.contains(error))) { + continue; + } + post.rm(); + break; + } + } + } + }; + + _Class.prototype.error = function(className, message) { + var div, ref, rm, rmAll; + div = $.el('div', { + className: className + }); + $.extend(div, { + innerHTML: E(message) + "
          [delete] [delete all]" + }); + (this.errors || (this.errors = [])).push(div); + ref = $$('a', div), rm = ref[0], rmAll = ref[1]; + $.on(div, 'click', (function(_this) { + return function() { + if (indexOf.call(QR.posts, _this) >= 0) { + return _this.select(); + } + }; + })(this)); + $.on(rm, 'click', (function(_this) { + return function(e) { + e.stopPropagation(); + if (indexOf.call(QR.posts, _this) >= 0) { + return _this.rm(); + } + }; + })(this)); + $.on(rmAll, 'click', QR.post.rmErrored); + return QR.error(div, true); + }; + + _Class.prototype.fileError = function(message) { + return this.error('file-error', this.filename + ": " + message); + }; + + _Class.prototype.dismissErrors = function(test) { + var error, i, len, ref; + if (test == null) { + test = function() { + return true; + }; + } + if (this.errors) { + ref = this.errors; + for (i = 0, len = ref.length; i < len; i++) { + error = ref[i]; + if (doc.contains(error) && test(error)) { + error.parentNode.previousElementSibling.click(); + } + } + } + }; + + _Class.prototype.setFile = function(file1) { + var ext, ref; + this.file = file1; + if (Conf['Randomize Filename'] && g.BOARD.ID !== 'f') { + this.filename = "" + (Date.now() - Math.floor(Math.random() * 365 * $.DAY)); + if (ext = this.file.name.match(QR.validExtension)) { + this.filename += ext[0]; + } + } else { + this.filename = this.file.name; + } + this.filesize = $.bytesToString(this.file.size); + this.checkSize(); + $.addClass(this.nodes.el, 'has-file'); + $.queueTask(function() { + return QR.captcha.onPostChange(); + }); + URL.revokeObjectURL(this.URL); + this.saveFilename(); + if (this === QR.selected) { + this.showFileData(); + } else { + this.updateFilename(); + } + this.nodes.el.style.backgroundImage = null; + if (ref = this.file.type, indexOf.call(QR.mimeTypes, ref) < 0) { + return this.fileError('Unsupported file type.'); + } else if (/^(image|video)\//.test(this.file.type)) { + return this.readFile(); + } + }; + + _Class.prototype.checkSize = function() { + var max; + max = QR.max_size; + if (/^video\//.test(this.file.type)) { + max = Math.min(max, QR.max_size_video); + } + if (this.file.size > max) { + return this.fileError("File too large (file: " + this.filesize + ", max: " + ($.bytesToString(max)) + ")."); + } + }; + + _Class.prototype.readFile = function() { + var el, event, isVideo, onerror, onload; + isVideo = /^video\//.test(this.file.type); + el = $.el(isVideo ? 'video' : 'img'); + if (isVideo && !el.canPlayType(this.file.type)) { + return; + } + event = isVideo ? 'loadeddata' : 'load'; + onload = (function(_this) { + return function() { + $.off(el, event, onload); + $.off(el, 'error', onerror); + _this.checkDimensions(el); + return _this.setThumbnail(el); + }; + })(this); + onerror = (function(_this) { + return function() { + $.off(el, event, onload); + $.off(el, 'error', onerror); + _this.fileError((isVideo ? 'Video' : 'Image') + " appears corrupt"); + return URL.revokeObjectURL(el.src); + }; + })(this); + $.on(el, event, onload); + $.on(el, 'error', onerror); + return el.src = URL.createObjectURL(this.file); + }; + + _Class.prototype.checkDimensions = function(el) { + var duration, height, max_height, max_width, ref, videoHeight, videoWidth, width; + if (el.tagName === 'IMG') { + height = el.height, width = el.width; + if (height > QR.max_height || width > QR.max_width) { + this.fileError("Image too large (image: " + height + "x" + width + "px, max: " + QR.max_height + "x" + QR.max_width + "px)"); + } + if (height < QR.min_height || width < QR.min_width) { + return this.fileError("Image too small (image: " + height + "x" + width + "px, min: " + QR.min_height + "x" + QR.min_width + "px)"); + } + } else { + videoHeight = el.videoHeight, videoWidth = el.videoWidth, duration = el.duration; + max_height = Math.min(QR.max_height, QR.max_height_video); + max_width = Math.min(QR.max_width, QR.max_width_video); + if (videoHeight > max_height || videoWidth > max_width) { + this.fileError("Video too large (video: " + videoHeight + "x" + videoWidth + "px, max: " + max_height + "x" + max_width + "px)"); + } + if (videoHeight < QR.min_height || videoWidth < QR.min_width) { + this.fileError("Video too small (video: " + videoHeight + "x" + videoWidth + "px, min: " + QR.min_height + "x" + QR.min_width + "px)"); + } + if (!isFinite(duration)) { + this.fileError('Video lacks duration metadata (try remuxing)'); + } else if (duration > QR.max_duration_video) { + this.fileError("Video too long (video: " + duration + "s, max: " + QR.max_duration_video + "s)"); + } + if (((ref = g.BOARD.ID) !== 'gif' && ref !== 'wsg') && $.hasAudio(el)) { + return this.fileError('Audio not allowed'); + } + } + }; + + _Class.prototype.setThumbnail = function(el) { + var cv, height, isVideo, s, width; + isVideo = el.tagName === 'VIDEO'; + s = 90 * 2 * window.devicePixelRatio; + if (this.file.type === 'image/gif') { + s *= 3; + } + if (isVideo) { + height = el.videoHeight; + width = el.videoWidth; + } else { + height = el.height, width = el.width; + if (height < s || width < s) { + this.URL = el.src; + this.nodes.el.style.backgroundImage = "url(" + this.URL + ")"; + return; + } + } + if (height <= width) { + width = s / height * width; + height = s; + } else { + height = s / width * height; + width = s; + } + cv = $.el('canvas'); + cv.height = height; + cv.width = width; + cv.getContext('2d').drawImage(el, 0, 0, width, height); + URL.revokeObjectURL(el.src); + return cv.toBlob((function(_this) { + return function(blob) { + _this.URL = URL.createObjectURL(blob); + return _this.nodes.el.style.backgroundImage = "url(" + _this.URL + ")"; + }; + })(this)); + }; + + _Class.prototype.rmFile = function() { + if (this.isLocked) { + return; + } + delete this.file; + delete this.filename; + delete this.filesize; + this.nodes.el.removeAttribute('title'); + QR.nodes.filename.removeAttribute('title'); + this.nodes.el.style.backgroundImage = null; + $.rmClass(this.nodes.el, 'has-file'); + this.showFileData(); + URL.revokeObjectURL(this.URL); + return this.dismissErrors(function(error) { + return $.hasClass(error, 'file-error'); + }); + }; + + _Class.prototype.saveFilename = function() { + this.file.newName = (this.filename || '').replace(/[\/\\]/g, '-'); + if (!QR.validExtension.test(this.filename)) { + return this.file.newName += "." + (QR.extensionFromType[this.file.type] || 'jpg'); + } + }; + + _Class.prototype.updateFilename = function() { + var long; + long = this.filename + " (" + this.filesize + ")"; + this.nodes.el.title = long; + if (this !== QR.selected) { + return; + } + return QR.nodes.filename.title = long; + }; + + _Class.prototype.showFileData = function() { + var ref; + if (this.file) { + this.updateFilename(); + QR.nodes.filename.value = this.filename; + $.addClass(QR.nodes.oekaki, 'has-file'); + $.addClass(QR.nodes.fileSubmit, 'has-file'); + } else { + $.rmClass(QR.nodes.oekaki, 'has-file'); + $.rmClass(QR.nodes.fileSubmit, 'has-file'); + } + if (((ref = this.file) != null ? ref.source : void 0) != null) { + QR.nodes.fileSubmit.dataset.source = this.file.source; + } else { + QR.nodes.fileSubmit.removeAttribute('data-source'); + } + return QR.nodes.spoiler.checked = this.spoiler; + }; + + _Class.prototype.pasteText = function(file) { + var reader; + this.pasting = true; + reader = new FileReader(); + reader.onload = (function(_this) { + return function(e) { + var result; + result = e.target.result; + _this.setComment((_this.com ? _this.com + "\n" + result : result)); + return delete _this.pasting; + }; + })(this); + return reader.readAsText(file); + }; + + _Class.prototype.dragStart = function(e) { + var left, ref, top; + ref = this.getBoundingClientRect(), left = ref.left, top = ref.top; + e.dataTransfer.setDragImage(this, e.clientX - left, e.clientY - top); + return $.addClass(this, 'drag'); + }; + + _Class.prototype.dragEnd = function() { + return $.rmClass(this, 'drag'); + }; + + _Class.prototype.dragEnter = function() { + return $.addClass(this, 'over'); + }; + + _Class.prototype.dragLeave = function() { + return $.rmClass(this, 'over'); + }; + + _Class.prototype.dragOver = function(e) { + e.preventDefault(); + return e.dataTransfer.dropEffect = 'move'; + }; + + _Class.prototype.drop = function() { + var el, index, newIndex, oldIndex, post; + $.rmClass(this, 'over'); + if (!this.draggable) { + return; + } + el = $('.drag', this.parentNode); + index = function(el) { + return slice.call(el.parentNode.children).indexOf(el); + }; + oldIndex = index(el); + newIndex = index(this); + (oldIndex < newIndex ? $.after : $.before)(this, el); + post = QR.posts.splice(oldIndex, 1)[0]; + QR.posts.splice(newIndex, 0, post); + return QR.status(); + }; + + return _Class; + + })(); + +}).call(this); + +QuoteBacklink = (function() { + var QuoteBacklink; + + QuoteBacklink = { + containers: {}, + init: function() { + var ref; + if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Quote Backlinks']) { + return; + } + Callbacks.Post.push({ + name: 'Quote Backlinking Part 1', + cb: this.firstNode + }); + return Callbacks.Post.push({ + name: 'Quote Backlinking Part 2', + cb: this.secondNode + }); + }, + firstNode: function() { + var a, clone, container, containers, hash, i, j, k, len, len1, len2, link, markYours, nodes, post, quote, ref, ref1, ref2; + if (this.isClone || !this.quotes.length || this.isRebuilt) { + return; + } + markYours = Conf['Mark Quotes of You'] && ((ref = QuoteYou.db) != null ? ref.get({ + boardID: this.board.ID, + threadID: this.thread.ID, + postID: this.ID + }) : void 0); + a = $.el('a', { + href: Build.postURL(this.board.ID, this.thread.ID, this.ID), + className: this.isHidden ? 'filtered backlink' : 'backlink', + textContent: Conf['backlink'].replace(/%(?:id|%)/g, (function(_this) { + return function(x) { + return { + '%id': _this.ID, + '%%': '%' + }[x]; + }; + })(this)) + (markYours ? '\u00A0(You)' : '') + }); + ref1 = this.quotes; + for (i = 0, len = ref1.length; i < len; i++) { + quote = ref1[i]; + containers = [QuoteBacklink.getContainer(quote)]; + if ((post = g.posts[quote]) && post.nodes.backlinkContainer) { + ref2 = post.clones; + for (j = 0, len1 = ref2.length; j < len1; j++) { + clone = ref2[j]; + containers.push(clone.nodes.backlinkContainer); + } + } + for (k = 0, len2 = containers.length; k < len2; k++) { + container = containers[k]; + link = a.cloneNode(true); + nodes = container.firstChild ? [$.tn(' '), link] : [link]; + if (Conf['Quote Previewing']) { + $.on(link, 'mouseover', QuotePreview.mouseover); + } + if (Conf['Quote Inlining']) { + $.on(link, 'click', QuoteInline.toggle); + if (Conf['Quote Hash Navigation']) { + hash = QuoteInline.qiQuote(link, $.hasClass(link, 'filtered')); + nodes.push(hash); + } + } + $.add(container, nodes); + } + } + }, + secondNode: function() { + var container; + if (this.isClone && (this.origin.isReply || Conf['OP Backlinks'])) { + this.nodes.backlinkContainer = $('.container', this.nodes.info); + return; + } + if (!(this.isReply || Conf['OP Backlinks'])) { + return; + } + container = QuoteBacklink.getContainer(this.fullID); + this.nodes.backlinkContainer = container; + return $.add(this.nodes.info, container); + }, + getContainer: function(id) { + var base; + return (base = this.containers)[id] || (base[id] = $.el('span', { + className: 'container' + })); + } + }; + + return QuoteBacklink; + +}).call(this); + +QuoteCT = (function() { + var QuoteCT; + + QuoteCT = { + init: function() { + var ref; + if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Mark Cross-thread Quotes']) { + return; + } + if (Conf['Comment Expansion']) { + ExpandComment.callbacks.push(this.node); + } + this.text = '\u00A0(Cross-thread)'; + return Callbacks.Post.push({ + name: 'Mark Cross-thread Quotes', + cb: this.node + }); + }, + node: function() { + var board, boardID, i, len, quotelink, ref, ref1, ref2, thread, threadID; + if (this.isClone && this.thread === this.context.thread) { + return; + } + ref = this.context, board = ref.board, thread = ref.thread; + ref1 = this.nodes.quotelinks; + for (i = 0, len = ref1.length; i < len; i++) { + quotelink = ref1[i]; + ref2 = Get.postDataFromLink(quotelink), boardID = ref2.boardID, threadID = ref2.threadID; + if (!threadID) { + continue; + } + if (this.isClone) { + quotelink.textContent = quotelink.textContent.replace(QuoteCT.text, ''); + } + if (boardID === board.ID && threadID !== thread.ID) { + $.add(quotelink, $.tn(QuoteCT.text)); + } + } + } + }; + + return QuoteCT; + +}).call(this); + +QuoteInline = (function() { + var QuoteInline; + + QuoteInline = { + init: function() { + var ref; + if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Quote Inlining']) { + return; + } + if (Conf['Comment Expansion']) { + ExpandComment.callbacks.push(this.node); + } + return Callbacks.Post.push({ + name: 'Quote Inlining', + cb: this.node + }); + }, + node: function() { + var i, isClone, j, len, len1, link, process, ref, ref1; + process = QuoteInline.process; + isClone = this.isClone; + ref = this.nodes.quotelinks; + for (i = 0, len = ref.length; i < len; i++) { + link = ref[i]; + process(link, isClone); + } + ref1 = this.nodes.backlinks; + for (j = 0, len1 = ref1.length; j < len1; j++) { + link = ref1[j]; + process(link, isClone); + } + }, + process: function(link, clone) { + if (Conf['Quote Hash Navigation']) { + if (!clone) { + $.after(link, QuoteInline.qiQuote(link, $.hasClass(link, 'filtered'))); + } + } + return $.on(link, 'click', QuoteInline.toggle); + }, + qiQuote: function(link, hidden) { + var name; + name = "hashlink"; + if (hidden) { + name += " filtered"; + } + return $.el('a', { + className: name, + textContent: '#', + href: link.href + }); + }, + toggle: function(e) { + var boardID, context, postID, quoter, ref, ref1, threadID; + if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey || e.button !== 0) { + return; + } + ref = Get.postDataFromLink(this), boardID = ref.boardID, threadID = ref.threadID, postID = ref.postID; + if (Conf['Inline Cross-thread Quotes Only'] && g.VIEW === 'thread' && ((ref1 = g.posts[boardID + "." + postID]) != null ? ref1.nodes.root.offsetParent : void 0)) { + return; + } + e.preventDefault(); + quoter = Get.postFromNode(this); + context = quoter.context; + if ($.hasClass(this, 'inlined')) { + QuoteInline.rm(this, boardID, threadID, postID, context); + } else { + if ($.x("ancestor::div[@data-full-i-d='" + boardID + "." + postID + "']", this)) { + return; + } + QuoteInline.add(this, boardID, threadID, postID, context, quoter); + } + return this.classList.toggle('inlined'); + }, + findRoot: function(quotelink, isBacklink) { + if (isBacklink) { + return quotelink.parentNode.parentNode; + } else { + return $.x('ancestor-or-self::*[parent::blockquote][1]', quotelink); + } + }, + add: function(quotelink, boardID, threadID, postID, context, quoter) { + var inline, isBacklink, post, qroot, root; + isBacklink = $.hasClass(quotelink, 'backlink'); + inline = $.el('div', { + className: 'inline' + }); + inline.dataset.fullID = boardID + "." + postID; + root = QuoteInline.findRoot(quotelink, isBacklink); + $.after(root, inline); + qroot = $.x('ancestor::*[contains(@class,"postContainer")][1]', root); + $.addClass(qroot, 'hasInline'); + new Fetcher(boardID, threadID, postID, inline, quoter); + if (!((post = g.posts[boardID + "." + postID]) && context.thread === post.thread)) { + return; + } + if (isBacklink && Conf['Forward Hiding']) { + $.addClass(post.nodes.root, 'forwarded'); + post.forwarded++ || (post.forwarded = 1); + } + if (!Unread.posts) { + return; + } + return Unread.readSinglePost(post); + }, + rm: function(quotelink, boardID, threadID, postID, context) { + var el, inlined, isBacklink, post, qroot, ref, root; + isBacklink = $.hasClass(quotelink, 'backlink'); + root = QuoteInline.findRoot(quotelink, isBacklink); + root = $.x("following-sibling::div[@data-full-i-d='" + boardID + "." + postID + "'][1]", root); + qroot = $.x('ancestor::*[contains(@class,"postContainer")][1]', root); + $.rm(root); + if (!$('.inline', qroot)) { + $.rmClass(qroot, 'hasInline'); + } + if (!(el = root.firstElementChild)) { + return; + } + post = g.posts[boardID + "." + postID]; + post.rmClone(el.dataset.clone); + if (Conf['Forward Hiding'] && isBacklink && context.thread === g.threads[boardID + "." + threadID] && !--post.forwarded) { + delete post.forwarded; + $.rmClass(post.nodes.root, 'forwarded'); + } + while (inlined = $('.inlined', el)) { + ref = Get.postDataFromLink(inlined), boardID = ref.boardID, threadID = ref.threadID, postID = ref.postID; + QuoteInline.rm(inlined, boardID, threadID, postID, context); + $.rmClass(inlined, 'inlined'); + } + } + }; + + return QuoteInline; + +}).call(this); + +QuoteOP = (function() { + var QuoteOP, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; + + QuoteOP = { + init: function() { + var ref; + if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Mark OP Quotes']) { + return; + } + if (Conf['Comment Expansion']) { + ExpandComment.callbacks.push(this.node); + } + this.text = '\u00A0(OP)'; + return Callbacks.Post.push({ + name: 'Mark OP Quotes', + cb: this.node + }); + }, + node: function() { + var boardID, fullID, i, postID, quotelink, quotelinks, quotes, ref, ref1; + if (this.isClone && this.thread === this.context.thread) { + return; + } + if (!(quotes = this.quotes).length) { + return; + } + quotelinks = this.nodes.quotelinks; + if (this.isClone && (ref = this.thread.fullID, indexOf.call(quotes, ref) >= 0)) { + i = 0; + while (quotelink = quotelinks[i++]) { + quotelink.textContent = quotelink.textContent.replace(QuoteOP.text, ''); + } + } + fullID = this.context.thread.fullID; + if (indexOf.call(quotes, fullID) < 0) { + return; + } + i = 0; + while (quotelink = quotelinks[i++]) { + ref1 = Get.postDataFromLink(quotelink), boardID = ref1.boardID, postID = ref1.postID; + if ((boardID + "." + postID) === fullID) { + $.add(quotelink, $.tn(QuoteOP.text)); + } + } + } + }; + + return QuoteOP; + +}).call(this); + +QuotePreview = (function() { + var QuotePreview, + slice = [].slice; + + QuotePreview = { + init: function() { + var ref; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && Conf['Quote Previewing'])) { + return; + } + if (Conf['Comment Expansion']) { + ExpandComment.callbacks.push(this.node); + } + return Callbacks.Post.push({ + name: 'Quote Previewing', + cb: this.node + }); + }, + node: function() { + var i, len, link, ref; + ref = this.nodes.quotelinks.concat(slice.call(this.nodes.backlinks)); + for (i = 0, len = ref.length; i < len; i++) { + link = ref[i]; + $.on(link, 'mouseover', QuotePreview.mouseover); + } + }, + mouseover: function(e) { + var boardID, i, len, origin, post, postID, posts, qp, ref, threadID; + if ($.hasClass(this, 'inlined') || !d.contains(this)) { + return; + } + ref = Get.postDataFromLink(this), boardID = ref.boardID, threadID = ref.threadID, postID = ref.postID; + qp = $.el('div', { + id: 'qp', + className: 'dialog' + }); + $.add(Header.hover, qp); + new Fetcher(boardID, threadID, postID, qp, Get.postFromNode(this)); + UI.hover({ + root: this, + el: qp, + latestEvent: e, + endEvents: 'mouseout click', + cb: QuotePreview.mouseout + }); + if (Conf['Quote Highlighting'] && (origin = g.posts[boardID + "." + postID])) { + posts = [origin].concat(origin.clones); + posts.pop(); + for (i = 0, len = posts.length; i < len; i++) { + post = posts[i]; + $.addClass(post.nodes.post, 'qphl'); + } + } + }, + mouseout: function() { + var clone, i, len, post, ref, root; + if (!(root = this.el.firstElementChild)) { + return; + } + clone = Get.postFromRoot(root); + post = clone.origin; + post.rmClone(root.dataset.clone); + if (!Conf['Quote Highlighting']) { + return; + } + ref = [post].concat(post.clones); + for (i = 0, len = ref.length; i < len; i++) { + post = ref[i]; + $.rmClass(post.nodes.post, 'qphl'); + } + } + }; + + return QuotePreview; + +}).call(this); + +QuoteStrikeThrough = (function() { + var QuoteStrikeThrough; + + QuoteStrikeThrough = { + init: function() { + var ref; + if (!(((ref = g.VIEW) === 'index' || ref === 'thread') && (Conf['Reply Hiding Buttons'] || (Conf['Menu'] && Conf['Reply Hiding Link']) || Conf['Filter']))) { + return; + } + return Callbacks.Post.push({ + name: 'Strike-through Quotes', + cb: this.node + }); + }, + node: function() { + var boardID, i, len, postID, quotelink, ref, ref1, ref2; + if (this.isClone) { + return; + } + ref = this.nodes.quotelinks; + for (i = 0, len = ref.length; i < len; i++) { + quotelink = ref[i]; + ref1 = Get.postDataFromLink(quotelink), boardID = ref1.boardID, postID = ref1.postID; + if ((ref2 = g.posts[boardID + "." + postID]) != null ? ref2.isHidden : void 0) { + $.addClass(quotelink, 'filtered'); + } + } + } + }; + + return QuoteStrikeThrough; + +}).call(this); + +QuoteThreading = +/* + <3 aeosynth + */ + +(function() { + var QuoteThreading; + + QuoteThreading = { + init: function() { + if (!(Conf['Quote Threading'] && g.VIEW === 'thread')) { + return; + } + this.controls = $.el('label', { + innerHTML: " Threading" + }); + this.threadNewLink = $.el('span', { + className: 'brackets-wrap threadnewlink', + hidden: true + }); + $.extend(this.threadNewLink, { + innerHTML: "Thread New Posts" + }); + this.input = $('input', this.controls); + this.input.checked = Conf['Thread Quotes']; + $.on(this.input, 'change', this.setEnabled); + $.on(this.input, 'change', this.rethread); + $.on(this.threadNewLink.firstElementChild, 'click', this.rethread); + $.on(d, '4chanXInitFinished', (function(_this) { + return function() { + return _this.ready = true; + }; + })(this)); + Header.menu.addEntry(this.entry = { + el: this.controls, + order: 99 + }); + Callbacks.Thread.push({ + name: 'Quote Threading', + cb: this.setThread + }); + return Callbacks.Post.push({ + name: 'Quote Threading', + cb: this.node + }); + }, + parent: {}, + children: {}, + inserted: {}, + setEnabled: function() { + var other, ref; + other = (ref = ReplyPruning.inputs) != null ? ref.enabled : void 0; + if (this.checked && (other != null ? other.checked : void 0)) { + other.checked = false; + $.event('change', null, other); + } + return $.cb.checked.call(this); + }, + setThread: function() { + QuoteThreading.thread = this; + return $.asap((function() { + return !Conf['Thread Updater'] || $('.navLinksBot > .updatelink'); + }), function() { + var navLinksBot; + if ((navLinksBot = $('.navLinksBot'))) { + return $.add(navLinksBot, [$.tn(' '), QuoteThreading.threadNewLink]); + } + }); + }, + node: function() { + var ancestor, j, lastParent, len, parent, parents, quote, ref; + if (this.isFetchedQuote || this.isClone || !this.isReply) { + return; + } + parents = new Set(); + lastParent = null; + ref = this.quotes; + for (j = 0, len = ref.length; j < len; j++) { + quote = ref[j]; + if (parent = g.posts[quote]) { + if (!parent.isFetchedQuote && parent.isReply && parent.ID < this.ID) { + parents.add(parent.ID); + if (!lastParent || parent.ID > lastParent.ID) { + lastParent = parent; + } + } + } + } + if (!lastParent) { + return; + } + ancestor = lastParent; + while (ancestor = QuoteThreading.parent[ancestor.fullID]) { + parents["delete"](ancestor.ID); + } + if (parents.size === 1) { + return QuoteThreading.parent[this.fullID] = lastParent; + } + }, + descendants: function(post) { + var child, children, j, len, posts; + posts = [post]; + if (children = QuoteThreading.children[post.fullID]) { + for (j = 0, len = children.length; j < len; j++) { + child = children[j]; + posts = posts.concat(QuoteThreading.descendants(child)); + } + } + return posts; + }, + insert: function(post) { + var base, child, children, descendants, i, j, k, l, len, name, next, nodes, order, parent, prev, prev2, threadContainer, x; + if (!(Conf['Thread Quotes'] && (parent = QuoteThreading.parent[post.fullID]) && !QuoteThreading.inserted[post.fullID])) { + return false; + } + descendants = QuoteThreading.descendants(post); + if (!Unread.posts.has(parent.ID)) { + if ((function() { + var j, len, x; + for (j = 0, len = descendants.length; j < len; j++) { + x = descendants[j]; + if (Unread.posts.has(x.ID)) { + return true; + } + } + })()) { + QuoteThreading.threadNewLink.hidden = false; + return false; + } + } + order = Unread.order; + children = ((base = QuoteThreading.children)[name = parent.fullID] || (base[name] = [])); + threadContainer = parent.nodes.threadContainer || $.el('div', { + className: 'threadContainer' + }); + nodes = [post.nodes.root]; + if (post.nodes.threadContainer) { + nodes.push(post.nodes.threadContainer); + } + i = children.length; + for (j = children.length - 1; j >= 0; j += -1) { + child = children[j]; + if (child.ID >= post.ID) { + i--; + } + } + if (i !== children.length) { + next = children[i]; + for (k = 0, len = descendants.length; k < len; k++) { + x = descendants[k]; + order.before(order[next.ID], order[x.ID]); + } + children.splice(i, 0, post); + $.before(next.nodes.root, nodes); + } else { + prev = parent; + while ((prev2 = QuoteThreading.children[prev.fullID]) && prev2.length) { + prev = prev2[prev2.length - 1]; + } + for (l = descendants.length - 1; l >= 0; l += -1) { + x = descendants[l]; + order.after(order[prev.ID], order[x.ID]); + } + children.push(post); + $.add(threadContainer, nodes); + } + QuoteThreading.inserted[post.fullID] = true; + if (!parent.nodes.threadContainer) { + parent.nodes.threadContainer = threadContainer; + $.addClass(parent.nodes.root, 'threadOP'); + $.after(parent.nodes.root, threadContainer); + } + return true; + }, + rethread: function() { + var nodes, posts, thread; + if (!QuoteThreading.ready) { + return; + } + thread = QuoteThreading.thread; + posts = thread.posts; + QuoteThreading.threadNewLink.hidden = true; + if (Conf['Thread Quotes']) { + posts.forEach(QuoteThreading.insert); + } else { + nodes = []; + Unread.order = new RandomAccessList(); + QuoteThreading.inserted = {}; + posts.forEach(function(post) { + if (post.isFetchedQuote) { + return; + } + Unread.order.push(post); + if (post.isReply) { + nodes.push(post.nodes.root); + } + if (QuoteThreading.children[post.fullID]) { + delete QuoteThreading.children[post.fullID]; + $.rmClass(post.nodes.root, 'threadOP'); + $.rm(post.nodes.threadContainer); + return delete post.nodes.threadContainer; + } + }); + $.add(thread.OP.nodes.root.parentNode, nodes); + } + Unread.position = Unread.order.first; + Unread.updatePosition(); + Unread.setLine(true); + Unread.read(); + return Unread.update(); + } + }; + + return QuoteThreading; + +}).call(this); + +QuoteYou = (function() { + var QuoteYou; + + QuoteYou = { + init: function() { + var ref; + if (!Conf['Remember Your Posts']) { + return; + } + this.db = new DataBoard('yourPosts'); + $.sync('Remember Your Posts', function(enabled) { + return Conf['Remember Your Posts'] = enabled; + }); + $.on(d, 'QRPostSuccessful', function(e) { + var boardID, postID, ref, threadID; + $.forceSync('Remember Your Posts'); + if (Conf['Remember Your Posts']) { + ref = e.detail, boardID = ref.boardID, threadID = ref.threadID, postID = ref.postID; + return QuoteYou.db.set({ + boardID: boardID, + threadID: threadID, + postID: postID, + val: true + }); + } + }); + if ((ref = g.VIEW) !== 'index' && ref !== 'thread') { + return; + } + if (Conf['Highlight Own Posts']) { + $.addClass(doc, 'highlight-own'); + } + if (Conf['Highlight Posts Quoting You']) { + $.addClass(doc, 'highlight-you'); + } + if (Conf['Comment Expansion']) { + ExpandComment.callbacks.push(this.node); + } + this.text = '\u00A0(You)'; + return Callbacks.Post.push({ + name: 'Mark Quotes of You', + cb: this.node + }); + }, + node: function() { + var i, len, quotelink, ref; + if (this.isClone) { + return; + } + if (QuoteYou.db.get({ + boardID: this.board.ID, + threadID: this.thread.ID, + postID: this.ID + })) { + $.addClass(this.nodes.root, 'yourPost'); + } + if (!this.quotes.length) { + return; + } + ref = this.nodes.quotelinks; + for (i = 0, len = ref.length; i < len; i++) { + quotelink = ref[i]; + if (!(QuoteYou.db.get(Get.postDataFromLink(quotelink)))) { + continue; + } + if (Conf['Mark Quotes of You']) { + $.add(quotelink, $.tn(QuoteYou.text)); + } + $.addClass(quotelink, 'you'); + $.addClass(this.nodes.root, 'quotesYou'); + } + }, + cb: { + seek: function(type) { + var highlight, post, posts, result, str; + if (highlight = $('.highlight')) { + $.rmClass(highlight, 'highlight'); + } + if (!(QuoteYou.lastRead && doc.contains(QuoteYou.lastRead) && $.hasClass(QuoteYou.lastRead, 'quotesYou'))) { + if (!(post = QuoteYou.lastRead = $('.quotesYou'))) { + new Notice('warning', 'No posts are currently quoting you, loser.', 20); + return; + } + if (QuoteYou.cb.scroll(post)) { + return; + } + } else { + post = QuoteYou.lastRead; + } + str = type + "::div[contains(@class,'quotesYou')]"; + while ((post = (result = $.X(str, post)).snapshotItem(type === 'preceding' ? result.snapshotLength - 1 : 0))) { + if (QuoteYou.cb.scroll(post)) { + return; + } + } + posts = $$('.quotesYou'); + return QuoteYou.cb.scroll(posts[type === 'following' ? 0 : posts.length - 1]); + }, + scroll: function(root) { + var post; + post = $('.post', root); + if (!post.getBoundingClientRect().height) { + return false; + } else { + QuoteYou.lastRead = root; + window.location = "#" + post.id; + Header.scrollTo(post); + $.addClass(post, 'highlight'); + return true; + } + } + } + }; + + return QuoteYou; + +}).call(this); + +Quotify = (function() { + var Quotify, + indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, + slice = [].slice; + + Quotify = { + init: function() { + var ref; + if (((ref = g.VIEW) !== 'index' && ref !== 'thread') || !Conf['Resurrect Quotes']) { + return; + } + if (Conf['Comment Expansion']) { + ExpandComment.callbacks.push(this.node); + } + return Callbacks.Post.push({ + name: 'Resurrect Quotes', + cb: this.node + }); + }, + node: function() { + var deadlink, i, len, ref; + if (this.isClone) { + return; + } + ref = $$('.deadlink', this.nodes.comment); + for (i = 0, len = ref.length; i < len; i++) { + deadlink = ref[i]; + Quotify.parseDeadlink.call(this, deadlink); + } + }, + parseDeadlink: function(deadlink) { + var a, boardID, fetchable, m, post, postID, quote, quoteID, redirect, ref; + if ($.hasClass(deadlink.parentNode, 'prettyprint')) { + Quotify.fixDeadlink(deadlink); + return; + } + quote = deadlink.textContent; + if (!(postID = (ref = quote.match(/\d+$/)) != null ? ref[0] : void 0)) { + return; + } + if (postID[0] === '0') { + Quotify.fixDeadlink(deadlink); + return; + } + boardID = (m = quote.match(/^>>>\/([a-z\d]+)/)) ? m[1] : this.board.ID; + quoteID = boardID + "." + postID; + if (post = g.posts[quoteID]) { + if (!post.isDead) { + a = $.el('a', { + href: Build.postURL(boardID, post.thread.ID, postID), + className: 'quotelink', + textContent: quote + }); + } else { + a = $.el('a', { + href: Build.postURL(boardID, post.thread.ID, postID), + className: 'quotelink deadlink', + textContent: quote + "\u00A0(Dead)" + }); + $.extend(a.dataset, { + boardID: boardID, + threadID: post.thread.ID, + postID: postID + }); + } + } else { + redirect = Redirect.to('thread', { + boardID: boardID, + threadID: 0, + postID: postID + }); + fetchable = Redirect.to('post', { + boardID: boardID, + postID: postID + }); + if (redirect || fetchable) { + a = $.el('a', { + href: redirect || 'javascript:;', + className: 'deadlink', + textContent: quote + "\u00A0(Dead)" + }); + if (fetchable) { + $.addClass(a, 'quotelink'); + $.extend(a.dataset, { + boardID: boardID, + postID: postID + }); + } + } + } + if (indexOf.call(this.quotes, quoteID) < 0) { + this.quotes.push(quoteID); + } + if (!a) { + deadlink.textContent = quote + "\u00A0(Dead)"; + return; + } + $.replace(deadlink, a); + if ($.hasClass(a, 'quotelink')) { + return this.nodes.quotelinks.push(a); + } + }, + fixDeadlink: function(deadlink) { + var el, green; + if (!(el = deadlink.previousSibling) || el.nodeName === 'BR') { + green = $.el('span', { + className: 'quote' + }); + $.before(deadlink, green); + $.add(green, deadlink); + } + return $.replace(deadlink, slice.call(deadlink.childNodes)); + } + }; + + return Quotify; + +}).call(this); + +Main = (function() { + var Main; + + Main = { + init: function() { + var db, flatten, items, j, key, len, ref; + if (d.body && !$('title', d.head)) { + return; + } + if (window['4chan X antidup']) { + return; + } + window['4chan X antidup'] = true; + if (location.hostname === 'www.google.com') { + $.get('Captcha Fixes', true, function(arg) { + var enabled; + enabled = arg['Captcha Fixes']; + if (enabled) { + return $.ready(function() { + return Captcha.fixes.init(); + }); + } + }); + return; + } + $.global(function() { + var j, len, nuke, prop, ref; + nuke = function(obj, prop) { + try { + return Object.defineProperty(obj, prop, { + configurable: false, + get: function() { + throw new Error(); + }, + set: function() { + throw new Error(); + } + }); + } catch (_error) {} + }; + ref = ['atOptions', 'adsterra_key', 'EpmadsConfig', 'epmads_key', 'EpomConfig', 'epom_key', 'exoDocumentProtocol']; + for (j = 0, len = ref.length; j < len; j++) { + prop = ref[j]; + nuke(window, prop); + } + }); + $.on(window, 'beforescriptexecute', function(e) { + var host, ref, ref1; + host = (ref = e.target.src.split('/')[2]) != null ? (ref1 = ref.match(/[^.]+\.[^.]+$/)) != null ? ref1[0] : void 0 : void 0; + if (host === 'bnhtml.com' || host === 'ecpmrocks.com' || host === 'advertisation.com' || host === 'exoclick.com') { + return e.preventDefault(); + } + }); + $.on(d, '4chanXInitFinished', function() { + if (Main.expectInitFinished) { + return delete Main.expectInitFinished; + } else { + new Notice('error', 'Error: Multiple copies of 4chan X are enabled.'); + return $.addClass(doc, 'tainted'); + } + }); + flatten = function(parent, obj) { + var key, val; + if (obj instanceof Array) { + Conf[parent] = obj[0]; + } else if (typeof obj === 'object') { + for (key in obj) { + val = obj[key]; + flatten(key, val); + } + } else { + Conf[parent] = obj; + } + }; + flatten(null, Config); + ref = DataBoard.keys; + for (j = 0, len = ref.length; j < len; j++) { + db = ref[j]; + Conf[db] = { + boards: {} + }; + } + Conf['selectedArchives'] = {}; + Conf['cooldowns'] = {}; + Conf['Index Sort'] = {}; + Conf['Except Archives from Encryption'] = false; + Conf['JSON Navigation'] = true; + Conf['Oekaki Links'] = true; + items = {}; + for (key in Conf) { + items[key] = void 0; + } + items['previousversion'] = void 0; + return $.get(items, function(items) { + return $.asap((function() { + var doc; + return doc = d.documentElement; + }), function() { + var ref1, val; + if ($.cantSet) { + + } else if (items.previousversion == null) { + Main.ready(function() { + $.set('previousversion', g.VERSION); + return Settings.open(); + }); + } else if (items.previousversion !== g.VERSION) { + Main.upgrade(items); + } + for (key in Conf) { + val = Conf[key]; + Conf[key] = (ref1 = items[key]) != null ? ref1 : val; + } + return Main.initFeatures(); + }); + }); + }, + upgrade: function(items) { + var changes, previousversion; + previousversion = items.previousversion; + changes = Settings.upgrade(items, previousversion); + items.previousversion = changes.previousversion = g.VERSION; + return $.set(changes, function() { + var el, ref; + if ((ref = items['Show Updated Notifications']) != null ? ref : true) { + el = $.el('span', { + innerHTML: "4chan X has been updated to version " + E(g.VERSION) + "." + }); + return new Notice('info', el, 15); + } + }); + }, + initFeatures: function() { + var err, feature, hostname, j, len, match, name, pathname, ref, ref1, ref2, ref3, search; + hostname = location.hostname, search = location.search; + pathname = location.pathname.split(/\/+/); + if (hostname !== 'www.4chan.org') { + g.BOARD = new Board(pathname[1]); + } + if (hostname === 'boards.4chan.org' || hostname === 'sys.4chan.org' || hostname === 'www.4chan.org') { + $.global(function() { + document.documentElement.classList.add('js-enabled'); + return window.FCX = {}; + }); + Main.jsEnabled = $.hasClass(doc, 'js-enabled'); + } + switch (hostname) { + case 'www.4chan.org': + $.onExists(doc, 'body', function() { + return $.addStyle(CSS.www); + }); + Captcha.replace.init(); + return; + case 'sys.4chan.org': + if (pathname[2] === 'imgboard.php') { + if (/\bmode=report\b/.test(search)) { + Report.init(); + } else if ((match = search.match(/\bres=(\d+)/))) { + $.ready(function() { + var ref; + if (Conf['404 Redirect'] && ((ref = $.id('errmsg')) != null ? ref.textContent : void 0) === 'Error: Specified thread does not exist.') { + return Redirect.navigate('thread', { + boardID: g.BOARD.ID, + postID: +match[1] + }); + } + }); + } + } else if (pathname[2] === 'post') { + PostSuccessful.init(); + } + return; + case 'i.4cdn.org': + if (!(pathname[2] && !/s\.jpg$/.test(pathname[2]))) { + return; + } + $.asap((function() { + return d.readyState !== 'loading'; + }), function() { + var ref, video; + if (Conf['404 Redirect'] && ((ref = d.title) === '4chan - Temporarily Offline' || ref === '4chan - 404 Not Found')) { + return Redirect.navigate('file', { + boardID: g.BOARD.ID, + filename: pathname[pathname.length - 1] + }); + } else if (video = $('video')) { + if (Conf['Volume in New Tab']) { + Volume.setup(video); + } + if (Conf['Loop in New Tab']) { + video.loop = true; + video.controls = false; + video.play(); + return ImageCommon.addControls(video); + } + } + }); + return; + } + if ((ref = pathname[2]) === 'thread' || ref === 'res') { + g.VIEW = 'thread'; + g.THREADID = +pathname[3]; + } else if ((ref1 = pathname[2]) === 'catalog' || ref1 === 'archive') { + g.VIEW = pathname[2]; + } else if (pathname[2].match(/^\d*$/)) { + g.VIEW = 'index'; + } else { + return; + } + g.threads = new SimpleDict(); + g.posts = new SimpleDict(); + $.onExists(doc, 'body', Main.initStyle); + ref2 = Main.features; + for (j = 0, len = ref2.length; j < len; j++) { + ref3 = ref2[j], name = ref3[0], feature = ref3[1]; + try { + feature.init(); + } catch (_error) { + err = _error; + Main.handleErrors({ + message: "\"" + name + "\" initialization crashed.", + error: err + }); + } + } + return $.ready(Main.initReady); + }, + initStyle: function() { + var keyboard, ref; + if (!Main.isThisPageLegit()) { + return; + } + if ((ref = $('link[href*=mobile]', d.head)) != null) { + ref.disabled = true; + } + $.addClass(doc, 'fourchan-x', 'seaweedchan'); + $.addClass(doc, g.VIEW === 'thread' ? 'thread-view' : g.VIEW); + if ($.engine) { + $.addClass(doc, $.engine); + } + $.onExists(doc, '.ad-cnt', function(ad) { + return $.onExists(ad, 'img', function() { + return $.addClass(doc, 'ads-loaded'); + }); + }); + if (Conf['Autohiding Scrollbar']) { + $.addClass(doc, 'autohiding-scrollbar'); + } + $.ready(function() { + if (d.body.clientHeight > doc.clientHeight && (window.innerWidth === doc.clientWidth) !== Conf['Autohiding Scrollbar']) { + Conf['Autohiding Scrollbar'] = !Conf['Autohiding Scrollbar']; + $.set('Autohiding Scrollbar', Conf['Autohiding Scrollbar']); + return $.toggleClass(doc, 'autohiding-scrollbar'); + } + }); + $.addStyle(CSS.boards, 'fourchanx-css'); + Main.bgColorStyle = $.el('style', { + id: 'fourchanx-bgcolor-css' + }); + keyboard = false; + $.on(d, 'mousedown', function() { + return keyboard = false; + }); + $.on(d, 'keydown', function(e) { + if (e.keyCode === 9) { + return keyboard = true; + } + }); + window.addEventListener('focus', (function() { + return doc.classList.toggle('keyboard-focus', keyboard); + }), true); + return Main.setClass(); + }, + setClass: function() { + var mainStyleSheet, setStyle, style, styleSheets; + if (g.VIEW === 'catalog') { + $.addClass(doc, $.id('base-css').href.match(/catalog_(\w+)/)[1].replace('_new', '').replace(/_+/g, '-')); + return; + } + style = 'yotsuba-b'; + mainStyleSheet = $('link[title=switch]', d.head); + styleSheets = $$('link[rel="alternate stylesheet"]', d.head); + setStyle = function() { + var bgColor, div, j, len, styleSheet; + $.rmClass(doc, style); + style = null; + for (j = 0, len = styleSheets.length; j < len; j++) { + styleSheet = styleSheets[j]; + if (styleSheet.href === (mainStyleSheet != null ? mainStyleSheet.href : void 0)) { + style = styleSheet.title.toLowerCase().replace('new', '').trim().replace(/\s+/g, '-'); + break; + } + } + if (style) { + $.addClass(doc, style); + return $.rm(Main.bgColorStyle); + } else { + div = $.el('div', { + className: 'reply' + }); + div.style.cssText = 'position: absolute; visibility: hidden;'; + $.add(d.body, div); + bgColor = window.getComputedStyle(div).backgroundColor; + $.rm(div); + Main.bgColorStyle.textContent = ".dialog, .suboption-list > div:last-of-type {\n background-color: " + bgColor + ";\n}"; + return $.after($.id('fourchanx-css'), Main.bgColorStyle); + } + }; + setStyle(); + if (!mainStyleSheet) { + return; + } + return new MutationObserver(setStyle).observe(mainStyleSheet, { + attributes: true, + attributeFilter: ['href'] + }); + }, + initReady: function() { + var msg, ref, ref1, ref2; + if (g.VIEW === 'thread' && (((ref = d.title) === '4chan - Temporarily Offline' || ref === '4chan - 404 Not Found') || ($('.board') && !$('.opContainer')))) { + ThreadWatcher.set404(g.BOARD.ID, g.THREADID, function() { + if (Conf['404 Redirect']) { + return Redirect.navigate('thread', { + boardID: g.BOARD.ID, + threadID: g.THREADID, + postID: +location.hash.match(/\d+/) + }, "/" + g.BOARD + "/"); + } + }); + return; + } + if ((ref1 = d.title) === '4chan - Temporarily Offline' || ref1 === '4chan - 404 Not Found') { + return; + } + if (((ref2 = g.VIEW) === 'index' || ref2 === 'thread') && !$('.board + *')) { + msg = $.el('div', { + innerHTML: "The page didn't load completely.
          Some features may not work unless you reload." + }); + $.on($('a', msg), 'click', function() { + return location.reload(); + }); + new Notice('warning', msg); + } + if (!(Conf['JSON Index'] && g.VIEW === 'index')) { + return Main.initThread(); + } else { + Main.expectInitFinished = true; + return $.event('4chanXInitFinished'); + } + }, + initThread: function() { + var board, err, errors, j, k, len, len1, m, postRoot, posts, ref, ref1, scriptData, thread, threadRoot, threads; + if ((board = $('.board'))) { + threads = []; + posts = []; + ref = $$('.board > .thread', board); + for (j = 0, len = ref.length; j < len; j++) { + threadRoot = ref[j]; + thread = new Thread(+threadRoot.id.slice(1), g.BOARD); + threads.push(thread); + ref1 = $$('.thread > .postContainer', threadRoot); + for (k = 0, len1 = ref1.length; k < len1; k++) { + postRoot = ref1[k]; + if ($('.postMessage', postRoot)) { + try { + posts.push(new Post(postRoot, thread, g.BOARD)); + } catch (_error) { + err = _error; + if (!errors) { + errors = []; + } + errors.push({ + message: "Parsing of Post No." + (postRoot.id.match(/\d+/)) + " failed. Post will be skipped.", + error: err + }); + } + } + } + } + if (errors) { + Main.handleErrors(errors); + } + if (g.VIEW === 'thread') { + scriptData = Get.scriptData(); + threads[0].postLimit = /\bbumplimit *= *1\b/.test(scriptData); + threads[0].fileLimit = /\bimagelimit *= *1\b/.test(scriptData); + threads[0].ipCount = (m = scriptData.match(/\bunique_ips *= *(\d+)\b/)) ? +m[1] : void 0; + } + Main.callbackNodes('Thread', threads); + return Main.callbackNodesDB('Post', posts, function() { + var l, len2, post; + for (l = 0, len2 = posts.length; l < len2; l++) { + post = posts[l]; + QuoteThreading.insert(post); + } + Main.expectInitFinished = true; + return $.event('4chanXInitFinished'); + }); + } else { + Main.expectInitFinished = true; + return $.event('4chanXInitFinished'); + } + }, + callbackNodes: function(klass, nodes) { + var cb, i, node; + i = 0; + cb = Callbacks[klass]; + while (node = nodes[i++]) { + cb.execute(node); + } + }, + callbackNodesDB: function(klass, nodes, cb) { + var cbs, fn, i, softTask; + i = 0; + cbs = Callbacks[klass]; + fn = function() { + var node; + if (!(node = nodes[i])) { + return false; + } + cbs.execute(node); + return ++i % 25; + }; + softTask = function() { + while (fn()) { + continue; + } + if (!nodes[i]) { + if (cb) { + cb(); + } + return; + } + return setTimeout(softTask, 0); + }; + return softTask(); + }, + handleErrors: function(errors) { + var div, error, j, len, logs; + if (!(errors instanceof Array)) { + error = errors; + } else if (errors.length === 1) { + error = errors[0]; + } + if (error) { + new Notice('error', Main.parseError(error, Main.reportLink([error])), 15); + return; + } + div = $.el('div', { + innerHTML: E(errors.length) + " errors occurred." + (Main.reportLink(errors)).innerHTML + " [show]" + }); + $.on(div.lastElementChild, 'click', function() { + var ref; + return ref = this.textContent === 'show' ? ['hide', false] : ['show', true], this.textContent = ref[0], logs.hidden = ref[1], ref; + }); + logs = $.el('div', { + hidden: true + }); + for (j = 0, len = errors.length; j < len; j++) { + error = errors[j]; + $.add(logs, Main.parseError(error)); + } + return new Notice('error', [div, logs], 30); + }, + parseError: function(data, reportLink) { + var context, error, lines, message, ref, ref1; + c.error(data.message, data.error.stack); + message = $.el('div', { + innerHTML: E(data.message) + ((reportLink) ? (reportLink).innerHTML : "") + }); + error = $.el('div', { + textContent: (data.error.name || 'Error') + ": " + (data.error.message || 'see console for details') + }); + lines = ((ref = data.error.stack) != null ? (ref1 = ref.match(/\d+(?=:\d+\)?$)/mg)) != null ? ref1.join().replace(/^/, ' at ') : void 0 : void 0) || ''; + context = $.el('div', { + textContent: "(4chan X ccd0 v" + g.VERSION + " " + $.platform + " on " + $.engine + lines + ")" + }); + return [message, error, context]; + }, + reportLink: function(errors) { + var data, details, ref, title, url; + data = errors[0]; + title = data.message; + if (errors.length > 1) { + title += " (+" + (errors.length - 1) + " other errors)"; + } + details = "[Please describe the steps needed to reproduce this error.]\n\nScript: 4chan X ccd0 v" + g.VERSION + " " + $.platform + "\nUser agent: " + navigator.userAgent + "\nURL: " + location.href + "\n\n" + data.error + "\n" + (((ref = data.error.stack) != null ? ref.replace(data.error.toString(), '').trim() : void 0) || ''); + details = details.replace(/file:\/{3}.+\//g, ''); + url = "https://gitreports.com/issue/ccd0/4chan-x?issue_title=" + (encodeURIComponent(title)) + "&details=" + (encodeURIComponent(details)); + return { + innerHTML: " [report]" + }; + }, + isThisPageLegit: function() { + var ref; + if (!('thisPageIsLegit' in Main)) { + Main.thisPageIsLegit = location.hostname === 'boards.4chan.org' && !$('link[href*="favicon-status.ico"]', d.head) && ((ref = d.title) !== '4chan - Temporarily Offline' && ref !== '4chan - Error' && ref !== '504 Gateway Time-out'); + } + return Main.thisPageIsLegit; + }, + ready: function(cb) { + return $.ready(function() { + if (Main.isThisPageLegit()) { + return cb(); + } + }); + }, + features: [['Polyfill', Polyfill], ['Normalize URL', NormalizeURL], ['Captcha Configuration', Captcha.replace], ['Redirect', Redirect], ['Header', Header], ['Catalog Links', CatalogLinks], ['Settings', Settings], ['Index Generator', Index], ['Disable Autoplay', AntiAutoplay], ['Announcement Hiding', PSAHiding], ['Fourchan thingies', Fourchan], ['Color User IDs', IDColor], ['Highlight by User ID', IDHighlight], ['Custom CSS', CustomCSS], ['Thread Links', ThreadLinks], ['Linkify', Linkify], ['Reveal Spoilers', RemoveSpoilers], ['Resurrect Quotes', Quotify], ['Filter', Filter], ['Thread Hiding Buttons', ThreadHiding], ['Reply Hiding Buttons', PostHiding], ['Recursive', Recursive], ['Strike-through Quotes', QuoteStrikeThrough], ['Quick Reply Personas', QR.persona], ['Quick Reply', QR], ['Cooldown', QR.cooldown], ['Pass Link', PassLink], ['Menu', Menu], ['Index Generator (Menu)', Index.menu], ['Report Link', ReportLink], ['Thread Hiding (Menu)', ThreadHiding.menu], ['Reply Hiding (Menu)', PostHiding.menu], ['Delete Link', DeleteLink], ['Filter (Menu)', Filter.menu], ['Edit Link', QR.oekaki.menu], ['Download Link', DownloadLink], ['Archive Link', ArchiveLink], ['Quote Inlining', QuoteInline], ['Quote Previewing', QuotePreview], ['Quote Backlinks', QuoteBacklink], ['Mark Quotes of You', QuoteYou], ['Mark OP Quotes', QuoteOP], ['Mark Cross-thread Quotes', QuoteCT], ['Anonymize', Anonymize], ['Time Formatting', Time], ['Relative Post Dates', RelativeDates], ['File Info Formatting', FileInfo], ['Fappe Tyme', FappeTyme], ['Gallery', Gallery], ['Gallery (menu)', Gallery.menu], ['Sauce', Sauce], ['Image Expansion', ImageExpand], ['Image Expansion (Menu)', ImageExpand.menu], ['Reveal Spoiler Thumbnails', RevealSpoilers], ['Image Loading', ImageLoader], ['Image Hover', ImageHover], ['Volume Control', Volume], ['WEBM Metadata', Metadata], ['Comment Expansion', ExpandComment], ['Thread Expansion', ExpandThread], ['Thread Excerpt', ThreadExcerpt], ['Favicon', Favicon], ['Unread', Unread], ['Quote Threading', QuoteThreading], ['Thread Stats', ThreadStats], ['Thread Updater', ThreadUpdater], ['Thread Watcher', ThreadWatcher], ['Thread Watcher (Menu)', ThreadWatcher.menu], ['Mark New IPs', MarkNewIPs], ['Index Navigation', Nav], ['Keybinds', Keybinds], ['Banner', Banner], ['Flash Features', Flash], ['Reply Pruning', ReplyPruning]] + }; + + return Main; + +}).call(this); + +Main.init(); }).call(this); diff --git a/builds/4chan-X.crx b/builds/4chan-X.crx index 7c432076663df757885427c766ae6695328548c9..8e7b1865db12cbccfda5964305d2d1726a9662cb 100644 GIT binary patch literal 277566 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®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%0AR9eWpiHgH7tY^ThmMeayD%!2!%SwaI4#<3Li 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

          &{k)reDZEav!2p&evAd3-WC5FUYagFLSJ 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 Iay*d#0xN=H0ssI2 literal 268784 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