From 341b8a3c856c60cadbbc3f5aac7b490ed630ab23 Mon Sep 17 00:00:00 2001 From: Maxime Cesson Date: Thu, 21 Jul 2022 11:53:06 +0200 Subject: [PATCH] Link OpenGraph data to the right instance URL through a build mechanism --- build.js | 107 ++++++++++++++++++ .../images/opengraph_preview/og-default.png | Bin 0 -> 15598 bytes package.json | 4 +- server.js | 1 + www/code/index.html | 4 - www/doc/index.html | 4 - www/form/index.html | 4 - www/kanban/index.html | 4 - www/pad/index.html | 4 - www/poll/index.html | 4 - www/presentation/index.html | 4 - www/sheet/index.html | 4 - www/slide/index.html | 4 - www/whiteboard/index.html | 4 - 14 files changed, 111 insertions(+), 41 deletions(-) create mode 100644 build.js create mode 100644 customize.dist/images/opengraph_preview/og-default.png diff --git a/build.js b/build.js new file mode 100644 index 000000000..82efd0279 --- /dev/null +++ b/build.js @@ -0,0 +1,107 @@ +var Fs = require("fs"); +var Fse = require("fs-extra"); +var Path = require("path"); +var config = require("./lib/load-config"); + +var swap = function (s, o) { + return s + .replace(/\{\{([^}]+?)\}\}/g, function (all, token) { + var content = o[token]; + + if (typeof(content) === 'number') { + content = String(content); + } + + if (typeof(content) !== 'string') { + console.error("expected {{%s}}", token); + throw new Error("invalid input"); + } + + if (!content) { + console.error("expected {{%s}}", token); + throw new Error("insufficient input"); + } + return content; + }); +}; + +const ogData = ` + + + + `; + +var previewExists = function (name) { + if (Fs.existsSync('customize/images/opengraph_preview/')) { + return Fs.existsSync(`customize/images/opengraph_preview/${name}`); + } + return Fs.existsSync(`customize.dist/images/opengraph_preview/${name}`); +}; + +var templateOG = function (a, type) { + return swap(ogData, { + rootUrl: config.httpUnsafeOrigin, + app: a, + title: type && `Encrypted ${type}` || 'CryptPad', + image: previewExists(`og-${a}.png`) && `og-${a}.png` || `og-default.png` + }); +}; + +var insert = function (src, template) { + var matchs = src.match(/()|(.*<\/title>)/g); + + if (!matchs || !matchs.length) { + return src; + } + return src.replace(matchs.at(-1), `$& ${template}`); +}; + +var buildPath = './customize/www'; +var tmpPath = 'CRYPTPAD_TEMP_BUILD'; + +var write = function (content, dest) { + console.log(`Creating ${dest}`); + + var path = Path.join(tmpPath, dest); + var dirPath = Path.dirname(path); + Fse.mkdirpSync(dirPath); + Fs.writeFileSync(path, content); +}; + +console.log("Creating target directories"); +// remove tmp path so we start fresh +Fse.removeSync(tmpPath); +Fse.mkdirpSync(tmpPath); + +var srcAppTypes = Fs.readFileSync('./www/common/translations/messages.json', 'utf8'); +var types = JSON.parse(srcAppTypes).type; + +var appIndexesToBuild = [ + 'sheet', + 'doc', + 'presentation', + 'pad', + 'kanban', + 'code', + 'form', + 'poll', + 'whiteboard', + 'slide' +]; + +appIndexesToBuild.forEach(function (app) { + console.log(`Parsing ./www/${app}/index.html`); + var src = Fs.readFileSync(`./www/${app}/index.html`, 'utf8'); + + write( + insert(src, templateOG(app, types[app])), + `${app}/index.html` + ); +}); + +Fse.removeSync(buildPath); +Fse.moveSync(tmpPath, buildPath); +/* Fse.renameSync(tmpPath, buildPath); // is rename doing more than move here? +// cos not working with buildPath like 'pre-path/main-dir'. If so, + var dirPath = Path.dirname(path); + Fse.mkdirpSync(dirPath); // may work */ diff --git a/customize.dist/images/opengraph_preview/og-default.png b/customize.dist/images/opengraph_preview/og-default.png new file mode 100644 index 0000000000000000000000000000000000000000..629a55717e7a9ef62329235dcadb9ec7cdc01b0d GIT binary patch literal 15598 zcmch8by!qg*Ea?&FiI&6ihy*BG)hSd3eqCd-3i*$UJF(L(M9co#{L=!L1-B_BU^S zv9J^rS8M5Ty?S$=GtZtnhSFX3GPU~$WyiZOh5D7)KHYeCo|$lw8D>L7NXU_{-o71o zbd2UY9+u;uuR=|`t{t5mp5`wkSM@9(c=d?&%&Y?WpKqKbMS_22U_dD*f^#@HFgW-x zfgJdAks166f`LD>1UNX)nJ)ehlKmfw!YKZKv#S5kM*q_W{62kj(m8ITE}Y?&arVV# z#um8fyRlfd!NOX55P!3fr+V(r5FT*lvHjX24}sd{?k@7B@*|%Mz}nN(){^nf!5r;X z7WYm>9uNRky=d3gI0)4Gx}{01M@xq)=zyQssk*aZ@Qhd#A|QOZ;^9FC=G`B9br(}P zHpL1(2jbP@VGtc2>LHPw_OYvl`~dN?=V3iWcZvvIv(+Nbpje1<=+ej^f&&~qm)`1| z4(g3+r<-9Fv>f7@@qv_HmYUXu#b1d}yYnoAcV;z=45(w}EGsQ*b>DV8%96pbyw#Ht zh$))=atdCaq?;7EWSB>I4hEO`c@%m?JO6^C(fScpwbTPMTnM|YtNkwk9s1b9Ctn`I zYg9oG85KMu9koE{K70;{)cjI^`yMP_D`i<>#BsubAA0L6N`*}5&pESGYo(?I`{4@^ z+0%M~hcKD}ftX8Hh7Dia<00JNZ+p~)o629<<6W09Y}XGh>+>@|cQ}*Kg2rD1=wAbY zBcr^3$S!NuY0}9t6`!J?i_w>Ge<91~+>=g|t_>prVx6^ODaa};d#m_>rK5nNXQ!%3 z{lt}XzZ0MfC5xg9 z_8E`#vSM}Z^P#Af|Fb~IAH4p{16j|e_MnTr5KedP&@R4s9j$1~O%3rHJ$8E9$t01L zA9MxYd<{NU*)c>x%L;!}$H8^4Y$=yw|MyMx<_M=l;DiKaq5f(~96{fb@oaj9%< z5@)Ee-L%C#Mjlc+bFgKKN0*E0K~Pa_FrPTE*<@u|`x3Mktu+*xA}Jy{>|PWT*CtbE zck7W*!B{%sxr@v)?I$iab4)8d1h}Sz7fn67^Q`piWy#M2vk29g>4PWLGWQ4(#}`c# zHq#T5r3N`HKPtJE1>f|@o8>-i0TtaBLaTpj z<~bCqF_q#*Ue3|;Hc$bhRO!KNClKmT@ahWu;1VJ)zQyUF2#9>=VLI9`8BGD;_U`7Y zg*+*um<_D9(-meRED~y~z%~WX?~rS*waFy{rc??iExC@5WJCc|#-1^Cw!@va(k18= zA4ui4ATa8rZY3^N)*yW^rZRE8W%BDv65Q&AOD7oG+Cxj{=v{r?Cc9sw2ehTqgju+o zQ0TKx!$-mkW*qz>0^9;rZJVrD1rr4vmkM5Z;#sC%OIS!ZT;!b~3?&7MBI7NffRUg) z@JJ<7XM7P0oldeFxv{`!=h@*~%a67x zPg$rD0J9Nk&4j!UUXM_O`1CS$>KAj+jfgGYl*lZ$KET70^gM3{B)UPGFe)dQMgAy* z`ckwTdGc`DL7cld_iYG_MVE}Ph!F(x-vzD?B1Pnti8o!V``~~euMy&XT-Ol~B^08z z-micUY5)?o&D1%rPcGHZ21HexSu7A?MYXJdt(kT3c1*bW<)SH35TC8Cf2G%xel@Rq zN1gkY9tPeJB4n@bJe*@X)&Q&0z5>^CS3_=^DvKhSR}n>DeYvE7K1^pVTw!$Z3Mm%A z#wLg__nVlXtzEy`Xf@Zv&fM}-C}<@T*6je7Y+&JRB1E1lfvCp)YQhq2;K3^wfx4U4 z{jNY=Hf?|cRXte!0$R`83UTIBIeZKA*rI)_=C^}W;0*x$JHdRMM{D+JBSi!zZ~-0kgV)Q>9^qH0Rb!lJo-jlJoOr{bB@BpIPzET-xJ^*P5Wsk}%9H+1ls6egez|3%Z`H>=1&24FQ%NK*7F2Ku2j zeJFb3KF3sR3r2e4`uxvT7Y%?WX&zA<#eBq-5;`+E{hD5^z4K9%6@@KK^k+bKwkqAnVZbpHJ z3OEe;SpXRFBrX|Lw+dj0=BspB@R6deP`-l8#ttPC&d?-)XyzgIr`9pZhOnSsTPfuN z3pkMl$stUTphSTAc>8^NLeV2V_LN6v-_C|Tu= z)GvfsJj)dY(H?k>6+C~BZ>qEV(fS`p+EM`zy!tb*CjJ|(S4hJFEgIi+_zyLr(H^YG zR$^1ilM%mrr5F9!nP0|6p0)PyLsLZh0Hmv*qoI`=Cv@b-^)Q+h2^`KKko zF0ABmy)99=r<*DuSsAHxaQ!q7(a>daPk<%IynGFoEGHYgv%TOXHv;UN*q-r-R+t&6 zb9=p+XGvYPAMSn zAdQv&TCeb%7lFF?Oz4Cw($e>Uwpt(w(w8B%_W)kjmZIXSp2oOCOja_R+RYp^q}c$z zv++!I)XXaFl(3N)h4M6L2d4Xedb{{;XWio0U?`-gm^y8&NJrkPR}+$Pl9BODm?p$S+V1@Nt^x^)xNRC4odGnB6gFLEq=4f(I4N1+NP?_z5lE zw8ORpY8WQJD!ciE*9R_uV5EQ-F4wa|F67M|)*puSn7)&$(#ce-2_uq|-M2&s-YEsy zvOzS%q2?=wfB46m=1U0T!!UMWwKD{q68X*pU|;z9QiWYfEri*IdC94S>kfCNnF(-H znf!vU*~(3h9H6@lK`0LBaMA(8dl{^)UKS+iSp(PyB;+b0A!c`2r{L7Pwor3%3m@Qm zx_^-p=xOE;3_<~SL?7fM(;a{$&}-<}4?@BEi#yTV5!CI%ND!+*>)iQM*QRyfgLG=# zcZ@hp8omSdV>i3elt2uYev6@dLz zrb*85E@XTkP}g)G*=X*Y=L_lUp0YvW1|Oe5&WX_2b9`Ib=VuZEt=K8W-DL2JHK8Sve!zzNIgr5a9&_mx zV6a2+01|=1@4vHgv({T~$|H;knEn133J*AMZySbroJq*3Z+!T{iQHK5OTbC=ElwyV z?hi_nMgSIW)EJtER%22{cc{<}XIgjNgi6bc4{itVVr9LwL;(zOk>~XOsdLNI8S}J4 z7$!Y23|6ly^CePqF|LuxAD!Mj%fB%RUt8^~wVP5`VSz+-=)P>ZgqQ^=p@8$}O^vza zSR&N+_ly##^D#{xJF6}kut%#qXrwe@E#Jy+`lW01tL+!4$Bl7%>Rkmrljg00Yu5w` zA~F7LDan;Gl;B&u>8BXlIY{kkKnqb^sh292`mMA1M;!z)5h8Xe9x>kp3aZF_+_w%P zX5iiX-^Z!6Hk>!^X$K=D3BJtwTj z9D|LUvx{BG%5DJAuNP=V9rBA^AU%{O?|{_1tN$epV$$|cVPiWIDe!+p4pFdAihLD8 zTYP)^EdpAm7_CQW2`2~^0L)S^h~VnvsS@Z^zbPpaA|x&%TaQ9i@MHcYj<783VMV`{1GpIeO5B!r%%psKxd7K$U`S()7#)xZYz*aX>t0hG z_sOK+YnIE9*Kr}-Dg}4Df|?ags|p&%HrW4dfJ=qL9lTHXKk z(|i#4DIx9-K$sln#s1HGL6Xj%Z#<@SpfTwov3keK=} zB0S#Lpy48hmWwh-Ex`UPfMf7U} zYO*pyfx(U^G71S}NJV~j5gK7u;uQ?ywuJ;idvl3hR;lrz+Y4i>=_lwMz~+PyuwlWv znahwKG#ZSBX&0HXMsNHe4A_d#0=DR|eQE>?i@GT*f+WxW4+j z1I(BMcmt~o;;;+o!g>9_x{Q_zgVxEr^1r$mlmm zCOF$T_a8B=q}J4~nfnLK|1rY-QjW+f?c>D%C`+a2@e2H~^5nlSO^@*}sBZ`c|3{Um z+vVCff2(gW;sFz5Wpiwxp^E?I+`T@g$>=VK z=1*ptmIys6G)04K<{EXqK<)hCI}I`d#%0>>f=j4rYN<1s%Ei?6l5C`B3F4h4;)5Cj z3IZtM#O&>YYJ?(22zAm&hU6-Sl-z2%d=&7fZE^2qq4d>5E)rUgWiD)-p)WwyzP8>a z*9jHV3M$=i;7K_-DN;AD(0g~HSv5%X)DCO_ zO;^?DSuya*@yimhfF*Mh5L;ApU(yY~1h%)P`1Q^_^mGamg$;jKOg1w@;hgE^@%2i_ z*<{TPu&wDdxVtyI{oZ@|Q7p!5xNB)p+1Cr=TN8byPP~TxP(g9LRpnqfYM9@Q;lloe zaSf{JE37{^y(9lv;!)irI-Pko;P$7)MHPcnId|EHSlRs-z9D)63&YvU(ma)WTfAwA zVVVawG0GyVvI0Aq`~pKnRD686Y`j0Im}dMs1E(TQbC0UAJkD>C?TIQ(a@1F3%Bi@G zcagBUb8gcdHyj+eS!09} zXEK%%yQ+k4Vg!HEn{+&rgc{4&e;=ckkihXqN#+Ix8Bd*WpG<$rX&kYbbg9GYmF#E# z3@j|;qf5t--^L4;yv7x}KIU3O)-jCz+d>`R=0sL%`&lZ^N9R)iq%bF`7fE5bDnQDH zO|afGH1wc9SYn#~tuYdU9PMtVgO72fWR7D&FzLyV7wLPH5)dX8L&~#B)7hOmZ#qPZ z#0oF27ZtI9F-#jb$R~?4a-P!o*-MGutHhckkG2&wQ+FqnD`N+2m2X%1W`i>ug}TpE zSkApC3duehl31YL8b^EvRSRrUInJawTwppjRZ7}g8f2#js)pIW zup)o-WPok5FSV^0FSX?7DvQz}a?Bf-E7Y>XYZBI~l)B|(I~drfm?SEVMjvqg#+tBh zf)Ny)DO}UHVqg3h@k~8@xUM*3^q89t)Ci}88&S7aT}U!uw#62I0ZZHs-*I zVf~qF){o#K_X*AUf(ICnyQ~&03OiS9(xW)5FC?XjfAWD@SpF%wqmGFOx}&KyP_COK zc|B4%3V+3ans|#SD%wz;-+^@%j>})wFIZo=M8sa(W_0%c?3nP^iYEUUm2%)zkMqUIuQ(&viT<>@2tSBa^mlwW~F+R49mEZl2 z4d}Ky;0|;PCzt0WOQ`|NB9ze7xvFJnj{U=^uD*XBrFDQu z?<~QiYYlQl<(&`c;aE?LiP)OYG0|130)|HJHbv%A(;9791Dm<(fFqsAwX@O;aZS|D zWjM0>o7`V4ChTc}2D9X0FMU>u8YLW*u#ms}%ALUZ%}Uul@I-Im5rn}_T9RBWHnnygPNMo`0j#qIL3pN}#)(xku5jDgzu==}UQHJ{dMWxC{x z94xIK| zI)jb$_MC9w5i-|wL!lIULl@coG>$_xOn9Z|jZpwtTb4(JS@h@h=QNU6ziemy&qIHA z#YxE%N6W>^SSi6QuxoB53lqg)^h#-fD`<^&R4-Ex5F0ef+N*rQlm0#b1)GpohVp^H z21at{_a_cI8zWB=HhWEzU9jHNGpGPZ+7p)Sm2ET$O=5Ln5(Ev>vgO!C#IW)%b)S}7 z6YnRwt!$MhkIV<7FAhW$9vC?0`dHC1m)w>f_@z`ZZh@~5KcKz01>~pB9 zcHaJSu30A-zl@~8=V1|+t+ajnbw)1r2)oGv7cCQhTqO6$p?C~jz1^RMwi)=jST1Hb zJ#1ykZp>A@|F_nxCeaIC77Y`XOdof#?XCtzZpn6CdvEz~h5Y_4Nx->>jA(eDJ zX`NN8DwB%OTI*S)NMG{p$ET>^x~Im&#D|2K-tB!yD5y`a=#LiOQt!XWObczzBU6u9 z_;p~ehjsjgE6sbN`XbPRBnoJzVOt^OlwY`d1eh-c@+2C?rI3OXC!T8QsGg6exI&pb zZ@phjOFxD|`@>g;;yF^kEjHF_IEv*qkkj4-2u=lpqM!ur>ekvHCO)4Vi=i#zZ|9~; zaK_-q#;n6m>X;JBRO|E{hqF>F)wWZ`Z^ua%v*q0cTVCMK&~oypxTXiY$CCm+_dU<) zIJp|4Vq^Ac)0Vig%RUqPD&lZOlR!ZtrNWYclghRT5uYaBT>E2&{yNqv=tL?p0?(0- zZ^uV#t(&_6ec}v5PeOzh@6~zlXE?k6^@lG*?(2yQoD~q+=6WqIa%Wcf@j12mkM9fD zG#GNq?4SjDx%qy%gAQ;;`-nvcvblE{zycgzUE=&~EzP^RbJFF8Rb9YsF}d=nd4qHA zaq?Dy<_O4eCS1O9@8|V)ugviilz__0s>8n3^z%J0dJg5Ghjo?lRP}Xqz(%?C z8?K%L`UDhHt@np3oKXkp$~J0GoY zZ3=rwrdZ*eGy$1oA>hSB1KVm(9u+oggx2`2>gnUVKe%VJCGY7;?HDG4D&2~QA-y% zRtY~Ie|^g+S~O+F1SY#b)b})xY2lX#U?+T?mMa#D1rd6SksskN7H!@10)#AC@V^K2 zupNedJJ!fNc+b1spq5qg1oGx6I6`Mb7x34Rv+_pU^SlBLBB9X^2$qOe7L(!PR@=Ya zwoJyad5-MoDt^@qxMZjUuCkKQVK?-WQPHDhQKaA)J_vL0QR03SQCZXC81dfXz5W_lqTZSc6$i2J$Dkqap1T zVn}S>R@zFGmk4!4rioK(!U8Nl-{{!#`%@oFy$#M^xj#W<(0yna?FDh0A-(?Lhm@M2 zkF2Boz}4gGHv-5$oFiq1Jn;Uosk4nugKM0<_k)Osw<#`C*8XlGYYtb+z?~)BlhaWj z6;{Zw+S?!5UP^KHe%PJR3!wzpq07#XqAL!X65DjQDg+b7pc70M%9FX*CY>-V;T3GzBdBivWua${H?=*80vG z$+t5;%BT!Rj0fd5t|UI<=-d=RZAbVCi`ti|VuH*_B#Rln>wMx67oB*`mWUrfix&`$ zkK}*HS%(jH$`Ckqyqfv|Jw`16hFPE1>Vs z8mg^y&QQ8uCU{*@drpsGflZsmq*Xj~NdE?u;yRQ4#5The8csi}s&t3?Qd_}{#k7*= zO^X?QCzo&gEjonVfb28b2dazbJH|@g4A%5ij?!D4y-deejNZ|qKLb{r3uiY;9_c7S zfl;M`FVZq~Pe=4s*$u8q&CkNINuKWSExlvSKvH@Ia>io@NbIpg65Tz!8j*M7JuzRk4ekOygauEBs-A9WYYCViX@WJjKOs4w#LYaQbtH;if@ z;DPkOIy?Nc%-Qo}LoD-{i|wdu2m>56?9ETJqlfVc3h5TY1t8mBYl=Zf)FjmY3iugq z(BMb;9tv)4_E_jc^cuR=hkm=a;#w1%Vh1{}nkEeZiu%uDO?Nq{oN z`e!q=%jckC9F@-B;i0(pVy9-_;MovKb~cEK34@Y(r)uuEfelt`xV~I3A(8S`UT=$9 zS#YVxR@|+L5KR*u<#gR@Jj@mZE=p)|WPY*{zwW#1{8?V3){Nzg??=Yjq@MAm(pw-5Y8w3xj zO7^rs&)9nOm5ZR^j(+XeSqUF}br6Kl>A`)+!TRek{5O?W@q)--9vs97jcsa2vAB;l ziuGEkJ?92?$n?`wg1={k5Bo_us9UuQGxC6kIPiXOdXEwep5!G0d|YM|+uJFoea}J7joK(eu7Jlw#j-{u%lC%yResUKsG+^RqQDgyCF~VBg-9j3?_UqoWJj z!ji3NB1+xf!jEEgh?6hC4!?SiN1A}7_|<09Fa)so$nAK{uB99@ z9rsayoi;cj8Q?gjJUITPpn|zS6t`zA{Mo#AMMXrp*59?;AKcV)D&DU-Nh}QS{z&34>1> zRCi$(nH}d}R5)r&iPA*{m*7uCSq|G56jwq8vCd`ebBp0zO9Npj%yCDD`7PzVeFO zp9gDN2_u`Hm{Ua5T6LEuE*aCwdLeP*D#*4Pjm4^nbV(eGK0{*t2h7#od3G~WRu~21 z*X$)5%9L#Q#53JuynV%`W216&`Q{IdsDwa5FLD&IpK`X#ROKnpqzsdvnE=C4U>qU$ ztZwq@nxpz&2(oSRnCp1#1!)>SQ1ob?I&yH~Y3N}@gsDn6+E=9^_JIWGc0j}I8|W(~ zdP6tmY##00 zRqy1aY^NqH2ZY=U-$yeOU1esjJ3mcC+IoVauzNn0oWMp1wZiB2M{X8yl|$Y0l5dB# zsOa3Ef|V6j-@dId(ni89w2@=nH0!*Ve0dD-+^(wn9N01DS(Qw>RW_3_!{uX9 zXgKssnsgVV@2k1wRvVX6`;*5ry>o_$V{hjKzK#h)!8@VSojyL$J<+`q?}> z)VM_Dwv?1=AJ}M8dkp7Y55H#w*?+*3~o;|VoqdZ*~O*!cAHn7*$s1(?&uWxpO z=|TNs5Wh026Xk2S)4p&h8jNa8F;0r!B2cm9VTfu$><*i&?Q91QNbr)#_PG2@cp^>B(sQwob@z7kG*zVfLC6|h{lXime1!@F~q`Q;y z?OcISVK2>z^|_8|R%kNG#cpaL$J4WW&cVdD$1d(BL70=2^o>x^;iO1Bv~-7*Rn9Wh zOses>&n@P2FVh0*2#czA+LI)Ye)XPOxTQi4z@XH|b~v}b3WflQc-JUwgNl?EB3kv) zs7`BeW;9;&3^GfQMd9S90TOhmuW#d9Caw=7Zy3g;DulgOvwX1AKI34>)1|tr&L-WM z9KM*m>5Yt4ugY(nt$8+FzhvU82j7kX9jMgo)SvYQ@EeIEaP;9JUCV9rCJC@DO^}BU5sl{$Tl(&fhm0-5!P^7dJ_3mY z;wa%iSoVPlQ?L1mZ3c{K zEfg~=4}Qk-K6mi*u6xz=xxgXot`TkcebonwhTC8}H+v$P;95sk zZzYrE0CNs1l0j8FD-S;D&@KZPVW8O45ZG|o{ zmlhkCkl5=OZ23^ge)M-ACN{t8IOKuZ5!dqxv*4x&uYsJQXg+BD`5J}VLPcX!d(-g{ z13h$_i0inyRb#+bEPvXHFK6^IV~f~ydSU4S;fY9WQadh|hQqnFbo`me&zMU@zO|kY zVK=2dDJO}7`wY*wiujP-ee7nwff3m7pDUlF`=nRgEb5q4oqV_nskb!>@Ost;O09F{ zaX}2Gw};VsFpP+O?2I_5l`^#ruOx>nt47KrCyzelHV*g*6;A$<7XZnEDdeVPh4?rB ztxz;E@7kcJ@vV;&i=|Ap6_zf-`w^sZ^0prO%8)trAMs?V+wC2rc})8hUZbcHhFy{+ zO*MDebfNPp@{}oi5@_gf5ek+o6L%{($jEiFBxJ7!p4#f)uJv~Tk-*?ur$YfLH&ebU zE+w7C{LS7ix41VTxtAQyk7@~(TQ0t5yFUEWJ(?79^9|!ML-*l2HDz>WgDA6*`CKwM z06&wE=%eWD{?tUnMFZ6ToW*4jGpV9zlE8Zj^zW1@G3_g7ZpQEa5X+lLD}2?MZOJ$0 zgnFbm-EZe>$T&6J9Q`A7BM(EI0#PxMFTwDQQ7}qJr0zI}2J(@-4H)3WFH>_1T^&jb za*|%KCA)dj`@}=a%W*&@VGx4}8-FUDiu)cZ{*S%0{Im`U5q0qe#7&{TY)L_5-j0zA zl(bm7b4d$>HyV(qyOo+#OgOm6i7xs`R-b-w!vzfk>!ENkSQZEntP?q~-@`|fsF(~r z4_fa+jq@`jkK#-cputCfJrZa};L29hYxkdy^iU&38fEJ(V8a zT>5Ev5IU5roehnQJ&-004CRBbWMxMM8j`O?EPqI$kto-;=*}?$lh085S}&F(#p}BP zPDmGRx1VI=Bg@P-KL(A7RT*r35w?MHcoguEhoK;gG&JuxDJCdn4$`#x7&&)O)Iu(v zMxj-JX`MKf32@FP;4?HvDTVn5@)r=}NkK*M3>W1Nvf$A24g->8?XgmuH1eAOKsbTJ z@EKa|m_m}nz9d8}HLj_0=Nf8mE3|RNaI_H2k_tm(2VTJvBBmbo;!<|GlEJ_geMSt1Rz zU~GsmAs5$l7}U zT$2;lW7Sj727>s^w+0jughpE?!D9{6W1RGoWI(Y|laAq42{18KySCE6S8COB%h1?R zcE6PkG4|;|qjAOWv!(WK;fU^4-~=ZbC<1;yZ>e2di?m{_=H4VWMXK+~BR5lV-v^By zfVp>*fFV<;=08`e-+E%iY`5K0#j9$>4U(Nh;??P~Z<;oIM-@xN#6a?^ypud|6-4zT z;w@TD44E zBL52kbvnJ#!U|O=ZcpAYcBxNq)84le@?t-xZHujxAp_y`p{aY`-ym9nFIq1yYY>$;-{zv^+Da@(mfZfqc2U}}ApAW_ zRM230O<$AxjyU7;KFo}Kq` z?L6xuV;i=gUO0k=-r6d3E6|muc1EeVO&dn~#=&|cHwgAz?{t&JkPzaRaaU4EWN0sd z={CPL2-vvkBgabs3UXngd)rpl2`v_~m1G0{4=SHNyPa42ON&oDWo2R?;ZyM%QiZ7J zgRnRlD$B;<{OwO^x-J;xRJf2}*7Sg$h#!~?Y|!eV7VF~hqtc5Mt_P-ZMJBBnbUzsxvdd0CRX5DY3Y%b!rBY&?9;>L&JTw7~xY?FLM=MUZ0@$A!3-~cby5cnSn}*%!cp5P|kAe zAf?xrS`kr63ggk}cBYkLCO`9gR@%uyWC!C9b~r_K4vfKcH_rXGbd*O!p`|Mlbw9V* zsrl9V{Q3g`ax7vUNy@gjciYpxcBy_VLExTa&|$PcpF%8k6F4qiU_ zF|E*tSNmsZ6GMNkk%iJ5V2bGOk+-w4g3oi=ed!W|fNIqal!wjULZiy=zAZk8uJsWS zyX?cUx$(ObUvD}_tiS>`ogSB6mxe~OkjM4hk+(B`m-y&rb}}*+`n%^!Lk$v+qrGVk znyE{Dx!7qZ>m+cwGvFd}RS;3N_jO@QtX9HxB5K?{p-vI{oZ`ssolTvz68Jv=ThfH$+cnri9aW*EdzGi`UZ~xC_0;j#`QL1PC1C zDAdu(89hia6cIMOvMCCEUGU_Ldq&f}X|&o+*tEm{!>U0*mw`4VGl665RnUxP1RhOtx$K_!Cr?f_q(@EHmVfZ+@Cvx1ILA+E=(&ax2o>(OHFW<4*Z8mFmB zKF5<~*~;U<;G)^%^{=L>YToUq+|)aciHBcWaiP9w?k*@O>Z{4^T%Fw^d!X2mMAp$s zNvD6kGO#0ks(nJ!DtR4CIJ8SI4!Pc=FeA#sbZNoNKVCtqu9cAiWCa|($8xR?<^#W2 zwIG{3=i>S*R`Ml#=8H|MG6WhWS*l%=hyKHL#e9fo%hf%IC3}60@!mY6%~(S$335I| z26QW;ZD}fh6b3;c?@tV=qkfpeOuT2_y*6;$E!z^K1x1+gR<5*WAJ^`50MDO^+ZJ&Y z7Xi*R-OBA}_??v9%e~<~?h(_)2>F(<@w*`RjBf8Z+LMv(8Gqi zUR@da81vvb+77oHjl9j`jiB%|=~-advN6<#bXf_uG_eNkkn?ea$-Fazfe&^(sINeB zjx2XFa!l0n{dF^i%#r57G%Y-?Sxk`SpN>|R zx6d-T%@;W1&-Q4>W5alnNkhjzui90AmC)#eZ|(Z4-8fJO>PwZ0ps#{H*HtPX1D4^6|fpz&G#=`@{Al#-hXL!3!KDiqRTxnKBY)TT lzx1gt#(@77 - - - - diff --git a/www/doc/index.html b/www/doc/index.html index a1d5c477f..321b16709 100644 --- a/www/doc/index.html +++ b/www/doc/index.html @@ -5,10 +5,6 @@ - - - - diff --git a/www/form/index.html b/www/form/index.html index 71f1371bc..96a3cce86 100644 --- a/www/form/index.html +++ b/www/form/index.html @@ -5,10 +5,6 @@ - - - - diff --git a/www/kanban/index.html b/www/kanban/index.html index 054e57533..c2076f8e5 100644 --- a/www/kanban/index.html +++ b/www/kanban/index.html @@ -6,10 +6,6 @@ - - - - diff --git a/www/pad/index.html b/www/pad/index.html index 2779db112..a370d0536 100644 --- a/www/pad/index.html +++ b/www/pad/index.html @@ -5,10 +5,6 @@ - - - - diff --git a/www/poll/index.html b/www/poll/index.html index a4a84e003..96a3cce86 100644 --- a/www/poll/index.html +++ b/www/poll/index.html @@ -5,10 +5,6 @@ - - - - diff --git a/www/presentation/index.html b/www/presentation/index.html index 0038690e4..321b16709 100644 --- a/www/presentation/index.html +++ b/www/presentation/index.html @@ -5,10 +5,6 @@ - - - - diff --git a/www/sheet/index.html b/www/sheet/index.html index e58f6b897..321b16709 100644 --- a/www/sheet/index.html +++ b/www/sheet/index.html @@ -5,10 +5,6 @@ - - - - diff --git a/www/slide/index.html b/www/slide/index.html index 8b8b102a2..f4f11aef9 100644 --- a/www/slide/index.html +++ b/www/slide/index.html @@ -5,10 +5,6 @@ - - - - diff --git a/www/whiteboard/index.html b/www/whiteboard/index.html index cc3fa85b2..f4f11aef9 100644 --- a/www/whiteboard/index.html +++ b/www/whiteboard/index.html @@ -5,10 +5,6 @@ - - - -