From 5ae732c76a9bbc4b86d06ef3bf6bdff3136e9578 Mon Sep 17 00:00:00 2001 From: Masayuki Takeda Date: Thu, 16 Apr 2026 16:05:00 +0800 Subject: [PATCH] add: OCaml.jp favicons --- assets/apple-touch-icon.png | Bin 0 -> 9614 bytes assets/favicon-16x16.ico | Bin 0 -> 1150 bytes assets/favicon.ico | Bin 1183 -> 4286 bytes assets/favicon.svg | 34 ++++++++++++++++++++++++++++++++++ assets/templates/layout.html | 5 ++++- bin/main.ml | 7 +++++-- 6 files changed, 43 insertions(+), 3 deletions(-) create mode 100644 assets/apple-touch-icon.png create mode 100644 assets/favicon-16x16.ico create mode 100644 assets/favicon.svg diff --git a/assets/apple-touch-icon.png b/assets/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..24c8b4ea1ce4e0204a81b7d64b4cc4e50e30b2ce GIT binary patch literal 9614 zcmchd^-~>9u=mfwo#5{79vlu%Ah^4`y96h=2Z9ATxVyVc2y$?DcL@ZC%TsUFd;f#` zLvPRSbj@zp&dyYSz8j^iD1(Ybhy(xtP`}7Zs($#!{|o`{<0w1<$NAxaZmKfkfa*!& ztT7-!(AQ|L<)CL;r94zd+6T zR389<`r(VDn7TLc+yLHBU8DV-vn*K=D)>9-2(x^q5LxKcAd;t6(mq9GyGY0Bw|x3B zwSO(f1O4r|>dxn*AxJ_D^^)?CND z-tId#A6KGEcg5>vk+i=)J#Qw zd_?Ogpu7qQYDIOH0iFuT!ePvSBn#5B71%eX2GhVXO92tBz5qq({9Djsh(<*fA7GEy}B<>jzA_8imZF)>9)x7g8+%OPhZ z4Wk=v!pnjd$z2k-QnWPO(6+~dl88s-N2l~Pg*zmhvl$AT(;0EArRMiNWhdIC^XjRp zB>b(?&btV2C7l4O0K1{zMe8+D(F)+DN|fl!=_uXUBc(E`XEoE!26|2r*2oQ>OFhax zR_!++cyb$@U*oB|@oZPR)i9yneosCxFa~2yMSsG3#n^jSGr3t)j)g8xGJoYoA|<`V z@K#AIm&+c@SuBRq^cnUzYpzp!$Dx!YH7^}w57Na5Io z4Z3zk#_bg$#Hp>eFf>v~`YcF;ex{%k*csa=96$6^-H4a>^e-laan>k1Fg(ELQTS=! z=~8XEFVqhQCer%4$~8tYf&vVJ^HTPUh@bNu#!2CMMT)kW7ccoYZcqi&xcVX{0+$#V zaDvKcLH<4&x6X<(ko)Ni@ynMZNbt%gzZ5`kY#EhK9BL(uv_#XX7#dwz-m3d4_0eU| z$u#T_EZpO9N|PPEg|g@g=e?(#U|^}3FYcS8Ea)$>dM;yOE~$S~yiiXH@%+#6pJx4{ zTmiSeVjAW#(RpV&i^?StPBB5^OE&oUBhCt1k+am|B0UT_Ygd{+&tl5Ey@n|#1`{Q zrGc;&9k%%ae{&Gz7sY2vx8?>Wi@N{hI^bHmDFFS?mN<0V-5IKkdUE1Pg>})7Bn|!V z&z6%N+mC4pIZP#GXWXwZ^QG^i;k~4vXy=|w}9Y>Hn32Yo3siZR!T#W6x;}A0~ z4UMFA$C5U;!?d1)g6} z`+B1t!~MRD_Ppa~gO2C3viB-PaL?;Mz4nvxiqhKJL{rnbD*L9UCi8~nqn}!ad5BoF zrT68CRwA#rYMBBajN26bq5D;U-g%T0`Iz0~@O+rO+j`d0?LBp=^|$+gvB!pPlp&&t zJCQ|mkc46mw+*KM-wECjqNfvQ4-cLuht*WgYW*)dIy&8~=tn|NuG3O@)A1yNFDJ;1 z@IifL@4foIs$Ybjn{t35hReCK?sNka`YXQFp zcHy^&U9pxj&)slTBJ0D+?0|dNyRCg94LmU?y0q!{A+1`xh%loOd-N)cX{XHzx6++M zEL(H#yK7otdu8Rq)xhApvJy0{<)psN0kI3Y+_jb(m@***;T@-e0^w2 zk5%b?!qN%Y!4u$n=9fq1JmS}@H;-b^qHjMiE`>6<`<+a8oMDxNc<}G(+s3y9iQ<5_ z<$~_EH%ie!(Cq_FdFtm?CYGt9?RS5_;}J@n(A+(a7Yi{UAu-OAAq!uAJ!q}jK~H(G zyt1+oUF3n>n14gh>~jD`O+rl}r{w?}prp+e6i~%FFiOiOiOPD97b|tBP$)O5|GHlcpo?N#-W5lR z7Ry>=w}r#$=i`fPK#(UsY~100^2QT07})A4*)!KfL^%`qjvOr{6HU zR4-hedE?NOG8X?;dU1&n%ZGAC?EQfEPv4R5*lrVug3VE$U=YycoMwSd$4_bPZbKZm ziw;VV*&1JPDl?v^we?uG=J}Dn(<%<%BZzF^q@sc`G&1t+pCF1CB0oSJFhb&`9Dzpi z(pI!lp@gin(IwW|t|+}Q(}HqxZQ-JBW1P&_%7P-!l+0+YWsify5qS*=fi@HF)%M&T zmVAuefi9yFFU(X;k*%_I=#TrS6<=qs85Dj&umjhKrHePZ3!&<{9wy@c_RqejJc5}l zcI{ki-wy*&m*g>1Fm?sSTO7mi#xI!l7amp_wT40R~=sz6^pa7h)-rq5*`|zHaGODkO3Qj-xP@493~@08Ksgwr9K*q&Cih5BD~l$-u&*@X(Y%Dx5hfcqueC zF)^=xtNtq#6c11B+WQWbM6Vk|Bp1>5m_R0~82J9Yd7KwPs*3jQC7cYw-115q$JStu90+EsNJ$8Vjbwf=z5wy^oMl9PADy}{tPi}jA#bPltl z5M)+xxBqkbI_}JFfZI`Lr;xz=%U`M62vW)jPFrW_?{;ESRkZS<$paQmWvOyS3Qn5< z1xB`f(kb~OTsU1~s7P(Vn-W|^I|mp?)|V(I^{}@s?>a>LM@ow1Km>Y82A37mWR-=x%grB{3PXCN6`#XwFPOA{ za~t&*e_*C>6L*E1;Cn%I4%m8xx8r)dj6NKrit2YeAtgBx2lxkKeZ%r>U6Ku!6PUJ3 zkj9N#oZKK0|0nL($EiTa`c3Hp%dU4=D6!kt=ZlW8oaH;)NJ?i(RfHp7#hOh7z(Y>g z6=l#IvZkjs5->XyN64pLf8+TRj3Q% z>IkIUD~&5SgC^UbpGf=-D)xOeK%zIJR4@{9;B5_E&&j50XAyNd(N7rNp{NAql4`7T z*F>yRILvRoE}uBf$m3Ngc$_`1-riW%6wU{;JLv;9Pq2 zL)^Z19mS4k|HLqM!Pi8KBX<56yo22-LN^Bdsc&=>fKlnn9)`Rb!S0T$=ayp(;@y!n zIf|*Ft$Rb_i9b0G;WlhpbB&37yGot>vq)YUKpKwXT}EQbN@APMO^ZzG0c+pZ=pq`c z-wN3y^OlAgQ0J)RAl{X&n5n@3!#=@4wp&f7DRkt)tI1l4baKQ49lZUe(7 zQG}$ysP2wX5bBEq$AL{OdYI+*{j`klQ~o<;hx;)n{6DY3gX8ly+Oy*z$bI2wr@i(WG}vY5B|P9`)w z8UkJY+#JN=kT?thW0d~~7ks#E=XGDvv!=8f)VE#!M^$4F7+;)=RY}l%oY+mmAWV(NEpq zeGSw$YjFa4ZH~=6x6dZ^+r2azt3^l?Gvuj=Z?P&+DQ=E50Ol|#gV##}DHy0nD>1B@ z-*O|>uW_UbwQ`}#w4ek&*|r%lHKKKb^al0+Ua0+^YZ8#-RhAfB8oA+8_k={8s%&-P zjnvPka|&jUxTKs{*fI#_QQete_cKdDwMTJ<6>`%Nm|q3_a-mIvyRnpHPqJfC3#D_4 ztH8t+=aaE9NQ|J4!E5DG`WwLa((H1D&mLd@Llwhrbdp<_w@lt&+@VB%Vxm+vlC(r8 zyP3QyGLvkv=(Sdd_XNXyw9hio7Q9FG_5 zftGEEsNb_71*J04-#cclY|(gS`S|v zM4((`sbGDP7&C*h@)V|f;FLs7jwCwjfN4BMvArdtL>N;%DDU8RXNmxFWi_y6{{h8p%u@7Ox zZ%G&sGmfQ#Hd&=b6VLzH9-h5ZenpPx&vg&fjTF6(Doqq+%^wn>E8_mSx9z6)uFRiRy|vLV(Vd_oK9&R&s8@_m<(;8#z-4QvM(9G^ z$_kb$HFJ~*ZcAYr#pr0U*F*S{nJPna^g?auKX)`8Cc_Cc0v#Yx(;a$=85EB07HFtA z`6VG$n`b1A>j~>>g1V&1K?^@JY0Hrp`rMW;sgHT*O?Imr!l_t;cU-B#M6=SQ9N4hr zf>b&aS2Nlg7by4T>6$F`ABAMz(?tc>4~ggeMA)f;O#;n7o=qp)X0jG$moxGCKQO=k z2Y%EPv}Og7FS14{%&_Fn8Hcg0hyd<0%j*jJBf&ZHAi=|$!uE+2>Yi!iDL84ohXz#b#SWm2+TG_Vf;Q8Mm#9 zd&)VF44o9tCH!YJ-%E$x224ntjcFOxCmvS%sDe6Tj!=3>qoF>nqBxST)5ixl^=iX3 zz$)ebkj+RDvf*d%_uvM>zTi#XtnE;eFICm}R=Tzyd3v67dJ!9wjvIGBx?{p4@V^l_&Vtx=2SJZMkV`Rgs+cNW7<70dDifKcF?K~+>^;>zgu<_*j{h8C_X`Z>;-#Ww_+4=O7!1ibxPM-z;WNr9gTf9b=Wo zOw^IOH{hxde#iy!#P{at2|7bO>48{<4om**gXTyve(&vz^-UK{Ad@K@m|SR@$}3%C z1DRdMesF?nV7h^z*Q^3>)GJS|4qY=tBG|Ji{&Nq72wyr@C>0fMEmeeKoH5I=Gn}hH z453`eP_G`eSA0>{b4kXe#@wv-D-<_wK$?MPM#=MO!n)_GgZNpxpqJxo&e|Q_uWfVy z`Xp#vR`?{)g;?s*^KJjdXc}*q=r9S2Icmb+fiJ_<3(fXi4}+yL0MU?&6m!k%mu!L!2s%gEfQi48-xj8r;Ya-Xi_nS_ zzcqkzk>o_eKmo|9)yGq7NyYI~K!h7BP&fYph8s5&Vr?vTq|_JUvNxJ^J1s*tJyRra z^8pRiH8gM*;tpSrTT&MRS!T->4z4zxj7Pox*}22GLWSsnTAT_z0E!R6A}`LMzLdX9 zEqLal$FcZ3Y4&MC#%qK)*St%Rgc%4= z$`Jbs7?dND=tIE@coA3IzG2~O`{UoL=RyU6JH6 zUCaP)!>+NKr%lulh>Ed&T#{Q%ckws^I74)rv%nipnG6TM_oXr9WTqNc(rb zO4rK&CgO8L{WB#6;V1b9ajW987Gco+Ju1{iR28M81sk{dYy@+~l`;VT8=!idcv7BE z%!h^y!4jDV&`t*Z6c7p|)IB@8RX^!@^N>56r(s4<*@!D2gJ`2nX7a>{BU+;13S54W ztLUjPJVW|nbVXD}Lv?j(KHl!@-&0d~pb?S%|HzLG1PDp2dSk_f{h`BiP|eZXk9>3M z{Vyyi`pjn|ur?BdBvwBzrBwk#Z?Ko=MTwcIz<%yEEP@5uGVu=;xDS}Od}Z-(3En($rq zn1@fK+Dlw_`<)RlVvl`GUtyiJElt~_RI$7LFu*%^1zkenQZFB@`+e2R*isv zQzOW+=ph0UB8wfxjl`4KJ%~-^eh@3_bI*>&Zq0dqYi~a$!hTvaFOGrLxYlO$P+vGV z4`=;I>Nnh@G-0By*DA4Jr{HPpZv#K)Jb-rGUmJz>Y73kI*36CVUYCjuR#VlBv@m*g z8~0*NHy`Uo5*xeOb~($3YK1KpDMat5wKz;=5a-s8>j-Md!5= zSl>V|(*#jlQD;%Hcx}jyZ$z40Jh@pI(Zb;_Xn0UU?P?H9Nm*K2n*RBdx?T((Tk!|Y z$wem>f@RAU%J97tjS%R0AaDBR$)e;=({hZ?oox_GYfeeWOFS|?3;FTDh{2o>x(Lse z_Lf8sYWq?D?u~lqZNa*{W9sLz%z1bUjEnjJtgFYJe^={4l7N0lfc}W@X@fRQaPy!ZPzBjXuUQ<PBG)`Us=IurK`x)R6Uhntl+8+W* z@to45gqt$8>Vjj$7GI7E5(o_|g3E&CT;|I)L_*#2s=mm{<=e~_`(#a@=~Wjuh#E>> zXS?Cg;gHt2h$7HY*i#8Dpie{VzoY{izp*^M#BmriTd@V^)H`)a=SqK7u0YjCnWp!D z&ZN4-`ntOr_}+E(cqP3V9gUR9ZW5v;>S&HYSQ~)Y)cqn3$3tzg`G>F7MbUf_l4@^p zOIsVnMz+tA)P+p9A-%Q9e@k$1wvbGx`tDJqw$j@7wr)LLVV}q`-JkA<+*JE39Zzcgc_~+ygXdb^#lgK z3)sYfE05D=g95vLmv>bx2M^G;=48^s_<8Ytn;mKxQi+3J)t*)P^qUry3|aPF;K&yz z)xWZ6TSTHq=*q}RWtBin6^3ZQ+@xOUgJ%@yL3dtl`68*c>Z&ZjAiyIxE(uzwC1{Zq z1mv<5-_}tPR6_8%HLv@uLlh3{Y-o1igmIkrUEgZ5ct}>9t?3f41E12j-O=vr4uANV zUuK<`Jz9QaE{B(4NiXvI;3Do%w>C8~T9t^^Z3l$gBP3_7x-TPbbEf0uV@7wdBsz^L zid7r^h@Q36ekh@{W&DvlMiS}rfkaySbp%29l!$!pYJl^Uq>9HP3_8;Ke}U~ex{Abo zm9nnpO5e4tJaVeh{?@T|KlE2%VG6NLz zm@tz2F=js1GLVQ>hS}q|N8o`_29V~wf}se>J>je{hMFe}HSrP(#~Bu)#uu=pi-Fvg zAzP3Q*JH7w2w2uNr6y+C-Vmkv8d&w-HG%itspIkDOZrzy(tTV3Yc*Yxq1y2?!%y4U zc>Cashdf4yfh@F!xLL@+GL(-?rWk|7lWK+hu=2{IghESjryz;=qZf=Fj1Y2g-dPx# z1BJfbOyQUEV#kNChkJXFlH33}8ylN|xur(=@*72!Wv|Uyc(MT5`@qKUrj$f~;hc}Y zgn71iQ%BRdXwl?iy?plciEgBeB+=XL@G9H`3NwU}W$gjG=xHV1Ik@AXhC4g1neiKP z8y(jLFnHo`&2o^4D=a6o2r$_T`~j?%FUsxS%3iv)$56#iQPWQY~^t>7S3seYm{Y&c8-ajMwVdmNR|iv5FlOPG9GFuB+h!ZG5rZKxg33 zQ?VwluiGSxbs`3X*#S+strtO6L2vTrFeg%=5czFE=$D((AN(IktIZBrCjvZ=1TlTb zvn3Hi`d=v)N>vJkST(opR1>{^EL3Wj=`;3t6bCT?UQa4&kjT)K8iUT(K2)jN@R&Zn zFqF!iRI05N=i+_|x|la?b|EkZTjZjTy?v#OEod!B#z0Q)!PDVnt}MB>d1u>|&AY$3V-kD_ep3DzS0v!2)my6KcOf|}pUDT~BpgIOk)V9H z8yeU@j|*|Tg8NQjgzHalEDQPu9VQN^jcx+z4f#V4yC8Qv@=G?jt`Ao8|8)<@1}`=c zve#aT1I|8_yE1f*kjf_i=YOW}(n`n!hCK$bD2xS@{MaJ(hUj=A=lsiCv3b3 zjPub_-7hN#edzx$*CTM#v)U-}ggoWJUmeUt+V4@{NX&*~Z2*Q+9`FwF%qyzB%0a^i znaVaM{Xd}`Ej2GHW4CYqusL0UOid7)_9n9hf6DK*NMo~OgX>=FPBpQ%mb8hRZOksR za3#V~C}04sPu|A%GjZxv*d6L-^dK`Or^W0l_G5OBl9G}R_hmoPq)ZgB=X}-fL?}!4 zI$rDnQFfiLJv~T*_te$^8e9kF{M9}=i%kXWsBk0+8g?{%7|kbvMS(pEg-8DkaRvn< zU!ZJSHKdsggsW(3YIZFF`3Zv?etmY}e1@RR2Mz#Ne#VF$z#!=3MTO@Z0xmu%O*fdwF!l9Eghxq;+b&hQUgF$D}c0W17zY&K6Z$EUF!97zIZ9_vv z3k!>WvX!sjdLJ^sO76sx2sQ^V0bP*Vp7k|+yHAo1=NYb^pAB9!6SIPyB;Xb00W|`x zMy7g*FVdFOOgPqphQ7x%6uf382zAiMAzo)o6ykp>xfh&chuHO0d%+>t09%5m0Wo6X zmBC-|#eREj(CI+iO0uofF6V7=;Y@o?4?;M|MAXSrh2Q(zt2jxNJ1PP~I4%q*t;hx& z0LJ5~Lh|wYgbk{>w`f{{5If5MHIKbN?N9CnBx7q)+ek-@i~_q!cBq#f?M$ E2TLU%$N&HU literal 0 HcmV?d00001 diff --git a/assets/favicon-16x16.ico b/assets/favicon-16x16.ico new file mode 100644 index 0000000000000000000000000000000000000000..8dc64dc565141d12726c0e99bf47b3e2e1807638 GIT binary patch literal 1150 zcmdUvO-KSk7=|a3f`~AK%)gL@a_xups9i!Y(jn-Y(a8=SyaiDNda8@D;VnT*x^(a; zL5IMD7a>H@gV_&ZXRqZ7ZEv$94X!^#$7cC=bgp}#V`MU!4%JR&S?*zjKr|YKs;YdtP$(dkN^$*L5{t!<%jI}kBoaZn zT;{r8(rUFhuGMM?g+gd4DlXzLa0{yl2a33o>x}WjjwF#tFr}@#TCKwC^rtO;T8U+6P;J{Z+ZKlUr#d%l%|TycpYJXkwyBn P&RD*>cfNb} zeTPw081qpoDg35vQi|G5QB*q984+b*I?737u%!(IT2oUKc)eZ$)GuysZie>ucE4bQ zMx~{tFg!dQ)LKD70gR1}1=U-vLS0=Qw6wH{E*lye0~e}!}9z5I26|lBd@2~^}z;s#`^pFIchUAGcYhP0GL}W77O80#2pufxmwiglJhg+NNn5>g(%4tyXjF`*{O>5E&;ZnE0Fl4fTTf@!TeS zwtNn(nu8M$eqU(G3Bq5gf9sED9f2!x7XvGWLt!Mna6A>)_t zNd;BxDM*XD4#}}q+`S|uG3U_%-A}%UgkQ14$mF3;_Pl3OFCj5Li{k?wR|XI74vO+) zZd>g;z+z`IVVRPxF(=DvIv_)Lj8$E%O~ zQ>j$E{1_a(M=Xs&ettgDr;{?5VHpt*c=P;(>Ep`kPau!jc(BI< z2PKR3*SAN$C+Y;tIbu9w*wpweSc~67R@mb2Es!5&csE(=JxGjqDTaPLzB388F1pD5 Y3&(gT+iaT=*o?sHBCz!Tfd4)J2TaOa=>Px# literal 1183 zcmV;Q1YrA#P)p;oGqZVLv3YeYaW@_>=V_~wPEFB%_+ zf#`$8m`DuK5DgF$ACw5jOQP|DV5EtXSZFB?ctM2H3bh5-vfFm2yE8kV4{fEj12!zW zCQkBCCg=A5o$s9Q%o!yj%*17D9?Ti_+-f2$&4c;abGs=nW*z|yll&e7O#P%Xzb8s3rYc0xFT4%;^qFaKAzJ4UR_e# zu0rKMUa{S%)WsM4qI|*bX&d_Hi~#^RKkq#=v}bKq_|b#E8B=8AMj8l-EtRLl>YsO|ajqKR5{cjr_S(9z)Q5Q~V%f8Y`UZB!%Kxr=?)L$u&_$IK z%mGp#tnZsj7F_%9fC#DgA32&mf1+VZ{30SU*psk6z5hsH*=zHRNYk7td)X<-W=7xB zwsY#M)7IW+vu@&C{geYJB4T~=V5@WT!$p9oQ27aS{(S@H+*LD-$igZWstBMAkSxyG z=4NANbfGFJEdfYwyR|jj)3Io(W}W~}PfO3xu2?DHnR9_98;=HJn;TN^-qD`@wIzzu z1HpCsl15dmYGC{F!%pYH#km0Jpb0+*Y;4$k^Tha;ik<}Cp)z-+v`R&2{Hh&`Fe zZ3!HOmsD}hu(j{`Ha8Kk_1qsBDHwWd-BGjVwzAxoz}9%lSHCupKD7I?^KQuQO z<#i>99=zHJnBwRdumorVt{cscxUY6u+}i(2x7hj}pc1$js2i6-NkB5kKili8TQS}K z{!0sJ1I_~pAPrn(El0HVMQAgTWMf5(3SJKLDKn8Yi`0000YdQ@0+Q*UN; xcVTj6004N}b4%X8O-xS>N=;0u1OP9b1=Ow#sZ9U?002ovPDHLkV1i0wH7Ni9 diff --git a/assets/favicon.svg b/assets/favicon.svg new file mode 100644 index 0000000..2e336e5 --- /dev/null +++ b/assets/favicon.svg @@ -0,0 +1,34 @@ + + + + + + + + diff --git a/assets/templates/layout.html b/assets/templates/layout.html index e758525..306a0e0 100644 --- a/assets/templates/layout.html +++ b/assets/templates/layout.html @@ -8,7 +8,10 @@ {% endif %} - + + + + diff --git a/bin/main.ml b/bin/main.ml index d819aa0..ab1491a 100644 --- a/bin/main.ml +++ b/bin/main.ml @@ -2,7 +2,7 @@ open Yocaml let into = Path.rel [ "www" ] let assets = Path.rel [ "assets" ] -let copy_favicon = Action.copy_file ~into Path.(assets / "favicon.ico") +let copy_file_to_www f = Action.copy_file ~into Path.(assets / f) let create_css = let css = Path.(assets / "css") in @@ -104,7 +104,10 @@ let process () = let open Eff in let cache = Path.(into / ".cache") in Action.restore_cache cache - >>= copy_favicon + >>= copy_file_to_www "favicon.ico" + >>= copy_file_to_www "favicon-16x16.ico" + >>= copy_file_to_www "favicon.svg" + >>= copy_file_to_www "apple-touch-icon.png" >>= create_css >>= create_index >>= create_events