From ccb1e715d7dfa49a3adf1adeac8d5331a657f698 Mon Sep 17 00:00:00 2001 From: mintsweet <0x1304570@gmail.com> Date: Thu, 27 Jun 2019 14:25:13 +0800 Subject: [PATCH] =?UTF-8?q?feat(client):=20=E6=94=B9=E9=80=A0=E9=A6=96?= =?UTF-8?q?=E9=A1=B5=E6=A0=B7=E5=BC=8F=EF=BC=8C=E4=BB=A5=E9=80=82=E9=85=8D?= =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/default.js | 35 +- packages/client/public/images/empty.svg | 9 + packages/client/public/images/no_content.png | Bin 83915 -> 0 bytes packages/client/public/scripts/index.js | 1 + packages/client/public/scripts/mints.js | 15 +- .../client/public/styles/common/base.less | 169 ++++++++ .../client/public/styles/common/global.less | 377 ------------------ .../client/public/styles/common/icon.less | 60 +-- .../client/public/styles/common/markdown.less | 10 +- .../client/public/styles/common/mixin.less | 10 - .../public/styles/common/normalize.less | 349 ++++++++++++++++ .../client/public/styles/common/reset.less | 165 -------- .../client/public/styles/common/variable.less | 34 +- .../client/public/styles/includes/aider.less | 5 +- .../client/public/styles/includes/footer.less | 82 +++- .../client/public/styles/includes/header.less | 196 +++++---- packages/client/public/styles/index.less | 14 +- .../public/styles/pages/topic/detail.less | 8 +- .../public/styles/pages/topic/list.less | 30 +- packages/client/views/includes/empty.pug | 0 packages/client/views/includes/footer.pug | 38 +- packages/client/views/includes/header.pug | 64 +-- packages/client/views/includes/no_content.pug | 3 - packages/client/views/layout.pug | 27 +- packages/client/views/pages/index.pug | 4 +- packages/client/views/pages/topic/list.pug | 4 +- 26 files changed, 941 insertions(+), 768 deletions(-) create mode 100644 packages/client/public/images/empty.svg delete mode 100644 packages/client/public/images/no_content.png create mode 100644 packages/client/public/styles/common/base.less delete mode 100644 packages/client/public/styles/common/global.less create mode 100644 packages/client/public/styles/common/normalize.less delete mode 100644 packages/client/public/styles/common/reset.less create mode 100644 packages/client/views/includes/empty.pug delete mode 100644 packages/client/views/includes/no_content.pug diff --git a/config/default.js b/config/default.js index 79719be..c10ebb2 100644 --- a/config/default.js +++ b/config/default.js @@ -71,25 +71,22 @@ const defaultConfig = { }, // 网站设置 - site: { - NAME: '薄荷糖社区', - DESCRIPTION: '简洁、快乐的交流社区', - KEYWORDS: 'mints, community', - AUTHOR: '青湛(github/mintsweet)', - ICON: '/static/img/favicon.ico', - - // 头部默认菜单 - MENUS: [ - { name: '文档', url: 'https://docs.mintsweet.cn' } - ], - - FRIEND_LINK: [ - { - logo: 'https://cnodejs.org/public/images/cnodejs.svg', - link: 'https://cnodejs.org', - } - ] - }, + name: '薄荷糖社区', + description: '简洁、快乐的交流社区', + keywords: 'mints, community', + author: '青湛(github/mintsweet)', + + // 头部默认菜单 + menus: [ + { name: '文档', url: 'https://docs.mintsweet.cn' } + ], + + friend_link: [ + { + logo: 'https://cnodejs.org/public/images/cnodejs.svg', + link: 'https://cnodejs.org', + } + ], // 客户端端口号 CLIENT_PORT: 3001, diff --git a/packages/client/public/images/empty.svg b/packages/client/public/images/empty.svg new file mode 100644 index 0000000..7b71bbc --- /dev/null +++ b/packages/client/public/images/empty.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/packages/client/public/images/no_content.png b/packages/client/public/images/no_content.png deleted file mode 100644 index 046523a66d29f2cc1847df2067d51831d2401286..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83915 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�H-|tTx!Z_N+qfGz@I2?C;6fO zSqdk`+CG31Z;x`w!elnI`#&`IWbT9il*An9hNS~&g8Ye3t&PS{s4=Ae4+H7?C8FYTW1qV z3gh=YVHUj72|pI^G7Be(+AXdImgrat6Gak`M8+}BH`@qnT5$p%X^@Xt%arMoxrZpURYJWQ^F~>y@?07q_#Do{ePZZ{mNV$Opjarg#deGg z6AlXAU~24&^cW#Yn{atz=}TjO->SjP@m)I{amI+#sTcO8Y>Py$ZV{=r%u*|!Y6D_` zrbf`O>RUO6BUd=-J6q%NnSzED2%D=|9v6 zGKIfMw?0ABx3$cifFj!~iMnG}c?)$>y!ToPjSg};AW)X^s?6m8^dZbNZ;Cz9B&$(; zZbh#`+77r^FTJj4)!D*AyG0$Gp~D5+L~V z(cLKHVDvnc`kS|75vye{{9Cf!i^SuVTm@bnC(s{hZ5q5BnJzE<&@x%-N#Ns%eMs*y znjV6zu zbniRbMTy1fCMZNfmlkj+M#KTa#w?bOVJQZFn>imM>2AgDwEr8Lk7h0Pw>qIQ_-$VtvFwAO;t^C z+@-=zV+^zB#_>oSGvFiN!-H})Q^&~5Skfl(>r9L>&#z?H;Zr5_W=$GzDD!k~8_Xc1 zeUNWIatp&ebxO86@=tBvqOVW3BKx+~d9mS_$c38=HF%X;_K+kP!kO{?A>y8EDQFtFkGMZ_J!fH((^yRk0Mu^Om3Zm!N?RX)19 zm~+KymD4^JIms_>Ti^{yBA?us=*f|)uOoMd{=FYia`_PWK)oMjr7ByyrKww5fUR!W zv2f>lLIF`XTY||V+V$%>|MGa{8r9Ngq)k3eJ$@&Z{&e?-doqqOTrwpBTBxpk9=jW5 zukgA2E-RwlGhu`?p%`uWFV>FS2zc0F;ldJ308*MlWQ1Njz2{o zDJGWekVSd6>9!e8@KLruao^!Ky35E~YZ7`Jh^yAv=T+y$6%#`C^x4t*r72LmT3czA}{+w`E@>_Wm+BjxJ zZjk2{WUwV_oplMre?0)}2>z^IoB%QlW0r=!VT+Si){GwU=ZcMB%gI%E@`pA`kr^Gx zaWy%B8Hm{``S@^R5w`s1Ay4z3)=!1LKW-AC)L(R`&up2e^6|iu2k*PsYD0;bg-L_I zyQ7WKu`-)=%5MAYwX9!p)*G4^v&G1Dk#3wGz%N-0DDn(cx0Fu~7ngn6OGoI6JmZ;p z=M~|b=I+~|RWSQs4)Kfr0Wn2ZvQP>d2wR<>UijzL+G)hz40A*uh)mNL6$pF$&hPxQ zulRqtMrgV-#ntZiogZoqTMN$JYb!S*Ib}WQb}o3a85a4W*7ki*9S5UhvV*6+I1|!qZ(;;i z?CD#m2F|owY6zHe_Nw&YQ(^WZ;}5=eamBZ2{Wp)P9}H5bF8_0{%@5FSYO(zzU`TYx zf>426m&(>V1)8|&J7S4kT+SF=+deZk4D;i0uTAIw*%B-ps@vkp?2G)Q$>^Ag@3spm zHK2*X5HI{fa(H)<;}Y^FXFyBLl(UCUWN_O>=h*8Dxa&D2ldYuI(tK*VnOS*2*{Y z`PO-(HKaq`7U>^F%nbhe0)^hYi13@H8?G9I9ZTzXqSpT$yaG02j*#fW5&JHi+`vq~ zj&VD2Uc#`IKhpSl1%E-L=Q{7>EN1>Jl7~QAe!2^UL>FByrSrI@uLXxkm9sJ)EkQ;K zbv%U9CrfA2A@WBD|D51TVD>uyQxB_OYQ5aL&vRWj0S#zj2M)NL?%>K&opg+=yi=XAw09(ktIB$m}OFx=V|fOed&aJV~|-qkO(LmDJDL z-sEvfElcMWIGeal?g7t;MhXo`sSl`*ecy$D>Yep`>NDA=S$8mv-EzG3QQoA!J?U$y zP><(-Ec{ekp?DiRla}Gy@x}Bfcytl4x!A<-> zYbM1Ob-a#oZfkS8FN@Tho39CIA@z31E1+Ho?JOqrD9>IqL}(MEE3hP8(? zgMj|xX%FkXe$$Lsf5lP1Xtg?@Y#d=M)igS)pR`sa&z=z1ejEu;I&g}OBZh0K_n(@t zIwDwHC?tB zrB!JYq`3Tg-?eP*TeeXcIKN+VW`_sIo`X-6nOlAa^O`(EtO{Vga{w=_gTC1{pgVdg zyN7gkk|{D+rQaRA?Nv8fZX}XywbGK3Lzq;8S0NSs9AdCA?Pc-m@snin_MhXZCl80)7e?4^RM_XP+1hsSRza2hxI=#_kZ zTyrP=;b|?y8=TdajRFQKk5rMewv|jPq_27nIlks4m~W81d>g7Hue=jZrP8u@N`4`(*l$7F8S)G(vmH@c9ZN&2Y-#hR@|`mY zO2pC!-1&y}EsKvOFXHbQb@7m-sWUo-h{x|x8BGzH#2xq4n~oOA3WkQM^REUfmeT}Z z$}n2KCO<0(;-;` z29wc;?~}09$_b5YyxbuTMc=M2(?)jzeP3-CRBH*MklP>%!S#I+L(NcEga%gR#pqQO ziD_pidPRtU^kfMvo=?@NM0GLG?VKSP5Fq4kr-2frQJ+Id(=6;*x^1A@Ml z6>?qEreuoqyZ1Uz%yIZ1I6_7`HrFAnn6JLIX){{4@#kR732HUhi%}IIP6cuUm(=&f zFaYa-Dm^sr_PWQ(on>AkeGM6c^1Jrg8)A)h*Wf_?^tGv>zp_$M>o$G*50&U&S=8KI z9a-R}i#6ZgBiCU}!=G$a>le>$>Jq6;a}l~OE<#E{IR)jCVs+|bE+6WU%w9zLPFLov z6-=M`Bd_|m_)wHy%gZLsPRR z&gFNmOBcbw(1BUPQ9CXVgz|izM{jcHaJ})lZUIBKXvwW(f+&)A7eGZ^ zHuLQ#hrcpN!Aywe$UQp{{+16{(gTyP0bb(Vl&RCWQ74=C)^ftGaUd}?E7&DUy4Ac= zV3^GfMh;vwd!RvdzR$qMWZN23sb=M%o?*|4TE2rN&t_#B{Lm!$1js+GI)q3XgxYtCquq9ZB*K4<7kI z*R4LmzmgO@f1lA9WEy2JtiPQF&)Ha;Iq}nI=HYkP_7XG{Rlg#$PDUnR=+)@yqBlKC zgVXwS)rU0?F27C!!P%~506KBM=uMknd^Bqnw+@39Z0m$=iK0b*(AE`8P%)(8k9Y#T zU-LGYPowqWPr3j19_^@z0-*$5uY|rS-)6&Uu~c1pdn@8dq>&l$s5+oGn4>53q$*#U z@XatVUe1^qfg1mV9r++}5zt}c`l6#d&|yex=JxI4N=anc8^z2UVu1w*K}P>5`3j## z>o)rntpI~#9NZnh*Rki02OcE8Sh??nf*uHxr8M#n6{0>sztlnflQp}zT0 z&SaR_@q)n~P$tWHo6+qe1fjc_E3nbxIW<^rvopmeMH!7Pqn+m4=yBAmF ziRRUY3=|Zin$=Az%j`QL+)xvJExp={% ztTQgkfA*95rMK^ixMv%&MlPyZ^`v8_z6Tiz=Te2L&?2GL$1jiNka3fkdnof}wLo8} zs(+^a+~lJV0~2=l`h=Dy&OyNlJnqz#$R*S^rMa>Xm#sT1Y-sHyL0eFBEM@@VQBoP}IE_2b~t-1YMcntwiQJ?&q18;c`-H=yHNQ zO)cxakr>F0T%gwHH)XCM@i(C5@?fT~aM@eixfg1=mwNBLTW(X+Ky@CGgdQoRWxQnw z{0(0I!mVnF0J;s}RtVt-uJM`5k)+cI*__p)x43C6ruj+goQv>qLdlJt_jva*Zy(j{ zRZjPmVgBHrXOk!+3vFW-&Ap%^?~!DE0fq5hln!tDTxYT;u%u8RdoWmZcoJrE=+bbv z6^7d=ASBsIGRXlRkT65nz%*SLTW$~k$UhG}fiH|?Gi+C??#4(yC8|YsR%8PK z<+;ZL_pF$>?XvE|aOvL*_x3i2F3KyC8q_2}0<1Y$JRmo)_t8*Tl*<_RgT^NFYofaznas31^6s)%O}7sM|9?`gywqj34xM zPy+N^3Gt;zb+dM;*Z$`A7GyUI=5s67r+?d0YMdta(sz)hM9NV=SNtQG_{zijA z=tJ9^-?T!WVcc-3#@gHFQy^6f(8My5d9)0-u8$yR&tMY-d#p{psBYJJ!p|HKzJ(#h zja}OVB`i=`%`pARwm(X$`CPSXsZd_u`#9Dwh&`~usrI`VL4WXw8YjI(rS8wdnhUfZ z@mlv?HLU6CSp?%%GweuDqS{bOip`W{{p~jA#-bzAZCyncZaj_r)Fo0ohTuDF{U=N+ z$J2DnN96q`sY?eQ>)4+KK)P{I>2FPjvm*{|cd-$dsNC4~BmRzJ z09XEzt={$&Q8N+2SRZ5j*xj9y-S<#`c9Bpa{I&67+%aTYzz$Sx;S3{N>aTT+zpX_+ zTjDiwz`@E)BH@-HH?e^&H2;k{`7|mb?uq(i7})RHgS(T(oDHPi%UDTYy_aH)3%)^* z3jP-Q(I%&%f~qEz8#^U0McaDu8n0+v`&E0|o+zCZ#DtKx*tz?4A?^U9T!iTMAM=iY zo+A5`ONEU(0CWB%Yv23+-y0%bG6h0?eCcN9(XZ5EH$=GX)MnvN4*k&L&P8PK(rslI z>IbGNcJV7hI|0?u$a^)fv^7GpDE_sN8CIio*&mF6ylAX#-^9PmG2-tQ-c3j8wrO zk%3lPt*Wfz7oIH>7c6oIqXh3|Q&$2ZM}!P8Hg-|fB|(3mg|o#{zVutjYzX`2-aff^ zP$>>Ba==Ja|B=f}?GybbO{L}LY#?1BT1uJ97kpvZ+~dYo4wvAMFj~>0h0>Q)hk%L@ z4~nm|$w%g$6fdvXS+hNm`E&MMopeh4(7b7Qm#+dhcskh_f(qH&jffc^zY7O`oy35L&krl=s!OHBoo{5n&AfE`*Ydw)-ts=k^ArC>o2~s$_mL15t;@Oh@lmbz zVPlKx8nw+qcV+s}%DLOq?7v@DtuFQnh`s#XkyE(-a#g<6ysE-odVPE1yG#yS{+(3H z;qbNjLfqrCvig2fuhK=HW2!)Gm;`YG8JTBt1(Qy|na@5?0a0ZsdY^z(s&3WY%2k1@ zZdFYCk&A4Vs0U=;bx6{F;LvV-49+_DAN0_$d6PN4?x>IfVSIis*rzU zLdw`#ePlfdh0TZ}I6TL!^3X9$UTy}SA5@u`{ROzn8T$U?Z^9Wla~(0;o+ zIwh>p#G5@3(Zrk3qS}*dzkj-TY%gY~wXypg<`e~6blJNi8>s$0Mzd$c=1iDBb0-4! zqElfXSBh^o*xK9-0WnjNX_8_Qjh5r&eFkIRpReg;U|n;-BvQo6k=4~mi6 z7@tE+h4H`i8&+&*6UVlUYGfYnqoNz8i?tc=@MyEXY6tG_} zIg|!e0^6y1XN7TA9D<;?pwMRrq5$KOw~u2Mc)q|3{)q~B%tDJ~V)tl0_Bs>ggrFF9 zX!m;cLY=WU9xNN5G7unkW*)b%-t;PHFZDUyi?;>1;BJ~#2|+Iuc^%WAmE3aQmZ2FD z_=#sM9)}o*Ikp|4N6$n6i~*UpFpz<+%8rvH&gizij(zqzt2J!_?2v`5ynj`wv+h~| znmsy}G8N(GU_k-p6mllEm<`d**C8&*27Gl-cCHAdAiDAQ&z1(%cEC;#02 z{gU-VYzp~?NpF|Su@*Y89`{RAk5o;RP{p8wexw6if;QPttiT^J>{fxNU1Vg?g=oqM zo_zkn9sMP%i|dDe5?)VgDva~G@u}cr*RstXeCNtdLQi^BydTfTZ#dr;7opnpv}>Gs z{2+2^jyKBCa$*}9v59*{%s1{)Aw6dCZp$@4+-(!+7bm2xx8|1G4m5hVZ}@sD$LQ5d z)jiw3AB#)r^pf=q*)czu!}cP-i#2Hn^jqHIuy`f zqQpzjZ(k+!$DR31#ZQdcgk6F+;VivERLH$|^3Ib-w#{TxH&!(tG^G~!uJon%9I=Ww zo_ua2%3-?r@$~jw0{fq(AG6bDd*@-m0i?pTn1nXwruEJZLtnSh?_P(l(vN7)ja@0x zjh85Do}B0nIS^HtKkje;1(!8YJh?gDCq2{WYeSFmAX`1Ptysd0k%LMHWz3nulMWc{ zF_@=Xnou6qwiV3=x5S+aqc0^0`r+m+ei_btGITTVJ=L!#as`IrV5HXG$f%qV9U3>#9TavNqjGZs4zUI3LUrmN@s$tJobO z5F7^Y{BVH*q$^;INZS*XXp>QRbviLd)Gw8`Y#YX(DxB_>xb|1cd*@=9P5$i}UXSIg zL~@x$ls(V5Wa9VcVY=!Uiy8th9R} zjt-OVnO*;_8_c%tP{W8j{-nVOb_-(Zr7NhZDDkP5x)4FAG|F$3Eg{9+*Ag#vuv@#Kk?dwj5`0wKvb~6h|{b3 z`cW0l_4V{pGo(?s9CcxF$Y~Av4uV1m;f+=zX~(JIK`g!Bzo3M)V1VW%T^a6UYpM55 z1TA7@C?-pITEl6IR>g89rRqDhFm zNmv8=3)d#(%pcI!!JS*ZFR}fB4a0l+R3>fh2hE$etYEv`Luo z0Q@0szU6*zX3OIa)u1Y3$VBRcXHm|_W24Sy+o?{4Ng&88HxLGk17o; zww{3*(3J^2_x^A=_-Me77VIzSACy_q1J_ka)sp9YrhYOZIqK*)dhk6P`kc<({=N|Pf3>TO#x3JoufvEW|BA0TsYYD{^OFy`S*yrRyk0XqstRnny zLE24W@}iR?KU`Jvt~<8)G2(b5|cI4S%c)ALK8eI4;X*2of-v1v(?6^3MKF*n^>?&|_DI z88$!2XOK(Y=_J2$h=k>q?=%%$(o5=&dgv*aSNOKiHw-I7zM;_zvvVfgkjpqIJ`|N- z2@b}_qDq^k-8T)aI-aaEF1(kMj78E;Oc5&UA01?XO_5>eF?cdRlVuE@if!v4Qex7Hob+3Ef>mENhcx~RwBalJDW=z5MuFlOIB_oH4pHL~X zjRbtg>4aFsu?$G2B*ja~y2v9-y?R64FI#}|jQsKe6;%JiNRqS$!E4}amW?KM9c%u> zjmts_#l)Sg2`m=}h|k%aEuauE(&%$uvF4RX$aRzSRAbC1OJDzu-k4`J9@IKLm-z%h zln*5T9_@S9e$>&iCb@5IuQ9w&=|!-9bKUoqy9u-VoCHC|e1Ut&;Jv+IqMhRbpZG!@ za6I-2IR)~)S-zm_H8Y!12J&j}+Xj?q22I$3v>%;#s|4ttuqdAD-e4ak0erF*QXd{! zNgQd2J&#mO;FJ_X(%akz*D1xtgyVQqd*(}N2NN+I3{FNcmD9CP4F*s-qUEiS*=JlL zqL~kI9;>bfPv6Swp*ZUgCG)zL^0EcdAT5^>)2{WVZ)GEgg(FJCvRFH$Zo9y$aGxSD zALv{J;kpt1r+mlOSfVV0%u{%6g5}H1gHp`rMW9Y0*pF;<|2*h35HoXc8@ojS&v7Bt zHKP)r^TXPA%SaZCsHh2NvyyUj?pnH-bE3?Oa87Sf+BAo-jP+5Z8M2R1=~>S%&xCGo}e%78e+1RYR*Zav?( zTsUZXDy5oQU?6;kG#`?M1zWi~DuzTQ2A9sea!+U|ex`EJ)8B{1dccVSvHHA6Z;+wi zAo*H_WqP|xI`=U#T(UhXOLRH9DhayQT=FmhQv@dgkD6Ws_eX~y=(6E>LKEDu6t{F! z3QjZ%P<#Z;u55>bp)A}Ft1$qLBv_$a^%gwk_^VJJAAwS)&mLuVRKVN_y(7DE#k1C} zT(qKf7opz4U-|i_k1RSDj8Jx;EQ%TGaLGT|$1cD3AU_6h(f|>N^D_X47`{J5i(LsJ z0zrR_M-pKTT?xeE*(;z|1toWx9y;~6^e*+2!gm}%Ov8Fz zDE+)3Hwh{3P)&nk88#W1b36PJd^(}?&H+q`ax0v{)zDG`Tnh+;odDg?NLe2oP%sz( zRHX|c$P__$f5XWI;r~o%C^tIP(l?VstXh^5+d5q|c+^p)`o1bShTu3yim98?>p-?y zQt(4~$C7>qip|9)-pp1}I8mr>Ux%+o*BbKXw_J~m>gzY)Y_aNyQ*rA8$llgBFDX@%I7@U?c0K1=^-vcv4*oD~ioNY;amcs_68OzU1p31l zhkNSi>HAHR&$t43d1Y`hMS<_5pX4ctEQEx*I!KHtE`H3((2p`C$OmW$9YC$~ddVdA zrsudH9ma(sUPZ1%QA0DP7L5VZ1f^Q4h?G~hW(t#I`u{$UhvZpHd-?3#l zGT{7$TN<8Uf9LDl9lfZ@uo#05vwlEWn9C+h1JrM?T10xh=Sxp9o5gK==WK18Lm&u3 z5_a)#8bapKML0H`WeH!jh-vdAv5_By&Ps~$q$yVBdfrwE(jCQMUOE(a75Ym9)Y zB$kRV1~E61Z1dJw?;^F2TZ+ox4P(jk)qwV<%&vSSnEb3M%vx0(q1M*@l{&smfjZ4oHtw_W|sf$ZG#9ValP$ zw1;PQQVuo*6I;R=^NDg2Uqv%ltWZ$qi_=hV$^j!Z{ZV@dgVP=xhqmhK`9KeL3~C&V zcf)S^$<+opfqCezq+nK5>GZC`M}XVb#c2<-y%!Lr@b(#6vCN(L_r&L@4BuUNB~+(@ z77f|nkJt-0MSP?1UmVKJls9K)Z_0z=N_yIRE4WgzPii#>zu8lADPZbdZlD_yH3f=F zP*$ikekR_}~eQ!JL zng<@bPI-P83fR4i!UBs)g%c=z(_Wx3vQ${vMz=++3WXPnX?YPmFDGm2eVS>AksVHs z0>mL2yb&A@y$>UY!DNT&Qovx&Zq|o3SIqm?kheWDg?PSp^4d2(YuQ-59-PPoz4DM2 zSpGfR;DByuTsWZ4=zw0#(OYc!)piB<ki#T8Qe`;CVDG-h19SI~kQg=I1mZ~dtlO^zK!r$M& z5m>+yMWUu!WC)Te5}L*UJmfbLJ_xF1@U-SwC_xj}q#$!OFoA>MdL*T8zeln(a|x&oYojtbi0qxQ>5XA+PyAQkfg&7A|-~=B$%n_>F*f8c#{j z%whnH?8m2U(=|0p-lBB*WCa+h%}yhT-bn*q5@A2ZUC05LOFTU zv)#WDPk9zfYE$oDAI|zRA`CY&jGSn%)lSa@>WAu3*Uw$}Ffc`#z~rIS4=KChAS5scp2smk*CeI(ee9B@9miE7^{?ELU0#pRkY#GpRN~ zD&KWk#F2KWhR{Y|tw|F}Py{Co6C1adO&CoW4Lg1VMhK&h4WZ}M8Vcwk)%I)4?2&CX zX&oOO+qu4|FaFm{qU5`ePYuWIu?@=BodFtMJsw=JapoMX`FUS?MuqDNf(gZ=D{sw> zVLbEoO0hJo5SQ|L(r$I=M#^f=*FFf$HJuHLG1Ru!`>bb+;w))wMtbMPU@+TGkcFi0 z!XK|6O8AIFXGr}4W9Z1k_U#Z)6^a&|rhgU?=OHk9Lrud2Vo1p*(6jMr!geW40yOkh za!LNFCne;X6v#jWK1D)Wna`^OtKFYf8}1xL-qsTFBM(SoSg}j7 zdbd`x5fJQAgzRa|D(FP|0Em)`ag4mNpPfaI-{V9o7}H-dj({WN4%k@!PgM4If@n+* zhDp=h+W_9Y!eBz{6QR01_>aN4cxa>ExVo$MeNYFdvx8nE04iCFm!$CUqNOjQ`p3uzCe>uW)}Y@C?boG_j*1~L%0tsb#--nz4YCeG zZJ#Aw!%95?(_+Wz7H~?@VI0*4`CWeY)zD40?Xfuy->GahX=Z}HwLCAMX+k~EvsSlL zvC}PmTI1jb6^l-CoWBw_B7ZR3EK zvuE6N$1>JPO7Jbakn1_Z*LJay>MQKg#TRJs-Ds*gZ!XYZ*#Ix5L_LW!gBM)}O>`k9 zn!}`oG@&!`>6_a2z_HX05P9zz{3nPXuyEOA4>`# z6Z=7Rw1n!r7S-7wL4FS`NfJXvuTQlvv{36Gq!X~jO^9_P!ElN(eHnaEc#&xu* z$5vk@jKekoEG#}AtE%xvVfE@-X>qTD)fYK2z92i)8C$}`+Rco+E7KQPjs)awwXi|H zYu5azFJ>k+(5^n|QR5a-T!)%cebTew%&Gvo#5}0ixKH@nIuO~%d*-nCWdfA^lTVqa z>0_E<26^M23YZ75=m&cvw1RO}7;7yJ(wTXOw;M02|FdRngTUu;dEt?}4QL%>ut9@4 z?%fBI-C*gR%rYt%1z5Ty0JGY$d-JlXWr%+rUbXlt$$4H?xQ$8l9v~Rop;pKZZsTj4 zKz(F3T_sJhXFtxEeuSe8}Uw`d39p0c+8iTZK|LN^?^!+RjPOq zTNrl0w_NgfKGf{M0;e+UvjTh_SB$7R2 z46WG0|NOI7Y0Wi)9Z;|)wKWXK0dwInJrDXep77O@(4p!zZ=x5Bdjso)#5KX>TZOGi-gBFD1ZpT-AHD-G zuP6qC;(vc4k#kYI{|p4pcr**pobTZ-t$OgaRrULOefAZ=`v{y2QnATfo~;zk1mP7R z>!1KSf-U|L+wkc7sQ^JX7t_dZusGI}2FV)9UGB%j6Xc+~Xai%+9V(9ScbHx(rj zY~T~Gc%R()39{i+&XHGGdVftJFPHAC($;BpK3YX)$ah(_zk?-%`@AM7+rHyleddHoh(+R7S8Rnxt1n3;kKdtNA_;b%liCb10p6ZW9!Jlpbcd#-d--N}}-dHhtlJ;O->* zhDry)$VWuP!qo-+a9sr--*$*MfDJs>_!%IDVzDEy9<`@!Jd<5b zS%{4ne&*Y;Io2~Z<6DJC^0%QYM3X~&*yGq&`W7wA4Znml_2Ia();81c5Y`uVg*Gqq zC+`b<0$rG3j&J!q)$@M$$mmf4$?ID6`4n{+cgfy-20%}ypg@ztn@?aX>uaBc6KY{+ z68JhMu%?VL^eyg;s$9>UF64o8C5G@RY|`h)l@Y$omNayNaC(>rk=J}!*?j8HAs2=S z=s8-X^sn^&;zGxp+1k?>*0HkYbK!Qt{aD7(75^6cTRy#UV|FbYPg^0HML6zK%JDW% z#mI+TQlk*XbB3L4nKgsbUYLVJ_DZqLOE4>TI|a~o)bW07!+v<5o)0opLM9ZYj>~%; zTPbJUeWD*7D>Go50%A0I+t=gQu)jfwksD=Y#aw};&MKfBclhGhwriYdO4O=StZ34P z68ICSX|Wcb!B^j5g@!szCIWXUgCpw@%fW$%Kg6_c_+T#bwWK}CH{pW5`OFQPBJLI< z%G4742R_L7M7kx~_ahR7V|=cdh73&YbgB8V`|$#k2_PZnS#yWstPn6+^8SbWI#$EU zsX`DC)|}!VZ(c{S4X>4lJ>*?i*_k!Mot6_zba$jHPNKoL0aq1!RQofW6^3{38$8_K z0X5nP_mT#Go9;~P^uTTFiMM85S7m(C-Bho9MncmROVWBXin;D%BAzWJ%>j$SEglMR zZQ!Sm%$g2(1966Zp9o{H?^nm{YF0cy%|ww6CwB{}h3}S7=#pB;tAwL?m{j6!M{K#OyLJr=^pGQ*F*#8Ld(_!PMGlRSK{qIp@8R z3AhU`JFli4Mq+j6fq0?Y;zjU%Koe6a8^-E#iMwU%v`K<+VlhN|vW*npuqU@PBCODl z<68;Hji$rN#vPQF|4u_Ny{ef4l76koLC#nA1}Ht0vPLmBnN>5Z`ghWVlxlGA#xM* zK;YUf_dvKODJ(9Xg?pUAFyNZx!|^zQV2?x>9hJyv(&}jVrWm(YtE%fT$>(7qT8SK; zw(3T?sB7%!YZF^rr>+#fGMGp4$N? zNh4#7?>>jNj_I<|t**#{;0d(rm%z)&nAseJ0<3a{9M1-S?x47-hE52}VJ6xwoP#-n>tdYC| zlmyy?(sURJ*jdWGyaHo}l@XV6OY~cFo8@=_E)I6op0QB1iDhqgs;@FO`%joW-u z&Qnp#*!kVTN3ZBQv|t1R93z`~U_C+J4QdXSV=sfc6)w$t0S2At5D##EkwD@EQTd2I zW=->G;*|0wrt3(V5E}A98v&gCFB@?c@sm}i)m^{cI_hlP`pKFgHO+tY2q2kDe+0A* zO3eX?r;OJQ`k33W6onK|5%4s!i%+qBzR&(rFE=>m0C=Z)ZKuP-Dh1c0`vuog1tL%a ztbzYkd9c|7t!ReTU%k9YLK|d5gWhZo%U24HSPQTIPsVoy!*TAL?P0Ck6r~pC+j|J+ zJ2%Ig>$lILVs%+PglWNiDA}BMn+=K#J5=>DOm;nlOQpKx2|)LFVxd7mi9~d*MH&IxEau@!74{FoeD}m|*Qq z{Pa2?Ig?%tTowT9KviG%2B2&xP|nNiERL64E9KVXHL)X#Pn0zuj@3?Zv0YW8ISV2_ zm~aM$KBF|a5%gK_g1xj+#ylM4g0 z8O$7TH;2GtBUIz)@ZVtOWjV&XuLIX@a?C#i7?9e@roD;wGNn#W48beXaRk5VMx>vQ z^|!lEdm6gIlx5}K3v<=p^m%vkb~vubn78x8iKK5KVn@#aL$BjZWqaAPPKExtYYLN= zjXK^x|4c-um5dWn#6kJEPnq3I4zTOs<_LAp_)g!C&MUDkfguLYYpni`l}PF^)HAla zw=lJVj2qh!-IHCKo=t1n)K*D+caJrPlVAWQF(gy27QUM z#FP^xqx|%8_dbqWvV(e^q#C@O*R*7fDdPpv7WT z{Goj{eZOdQMMYQqKtWmYn5ff&SwcUf2X}=W>>?1t>f+~QtUU0bi{^kP5Jz!8BA-$V zv?^QQ4wP5Ii?g!LLf1I@4E9R7XUVoV%3_$Hkb|jp!OwC=n)lO z=&`)=yK#vRx-tMLkizs}XlPvG%tKkLNqJ$?PTgNj+oce*O~D67Yl^^(2H;`RCLtdN zd} zvf)#wEHZ{5VTg2ohanF-l+lGBg3^r-3v9pM^Rh?bGU)QT?3GbJXPVMI7@8g5@ggNW zh>JDf0(u}AgD1w!R!$sW10T3;P{;-!=Va*G_PHm#&FAaw_1oQVT{mNcqpDTeRdGgO z)Ua=DZsRpM)Yx1V$wC>ZzxrQgA^ld)RQ{JeY_crE!tgH;yIJT@+$QsZmn&T|EOc<>|27d4WDn z1Bok&z@zp9Gli@7mv#tjX?QtzIjluxFwe+=fe#VL8dN`v4V1aPFhK-5h#ld}hVtVs z_uU)zl_A-<60dwsxU`_q(qK#3M9cQu-#~%EkJ632N}b{pk&B9+@>XQAY6=Vtf}LK0 z0hmP6gN+do8x~!$;WpjwWNSE%rNy%DsJ5h%RVpfK@~+JJR?-bTv)UaT$$_{krMvNv zTn0JRZ}MQwt@q_9_+A6seLJEE{A6_S7v0IWJ;`kF8IcHSW;jq=*HzZdKDs!lGJcw; z_s7&HDcykcjcjqo9gPtJ=C=gHr?zi)N;-RYGjxG@2(vkuQ+AyG3V37$AH{Bohf|_z zO*8@X%NsK#{kg@!V*0&{_-I@_OODHNe@p^H7tg@d_Cur3CPdyzg@$hO(mehWi5F9N z&&iQP(+1WvT{1_~wSki!5RpiR0Ddw*e#SqsqO{&W&cXDylEdhcU-knr&SF?kjwS~) zKh^c)ZQrJt3px9{;Y&iU`{AJOraq{^oG!2X#o)IyG=ZC!D9nQ_#`E_Gh_N2dd? z{}h%^!G*L#rJNec!P>{luZ`#uTYpnt6}S`1+47TIy7|GG2WE)cigyR-cYt5WC42ir zWHfMKEbjCL-mzLa!&9^xW45E(qHt}~ue+&Q>w0p$a+Gx-h|K_8#V&984x0$TjA-x~qVsr=WOLtgrf*-H4S>^_5UXQmYR+Lv+YPW2WeXx;a`SD!&RnQA{YXNmK?bHH6A2jo9hYG`*OpDEmaSl0 z3>6<(`WV>hST_VsV+M?Q6AMv8ENOP4wi*RdjfK4QPNe3Ki+Z=4x6JBtG)bH!PJQ{{ z?GRgp{86WY4$b}HhuM0qK-~yf%_039=JUN<0z5sB=|)C_R(4pZ=#LBMb_D!-&}cmD zw{pNUMP z`sDxGqvB#A0%{K_Pjy$fqJ81l#2x zjx!44;9%m|!QP<3pTqbKdJ+v)`Dee50O9#U&LI8||YuqQQQ>MPS1_kivsrdD#v$YdPT z*HIrVa&JMeP9Tt0lF5D>clcI!m-D{lIG`c-13btg>14+NJWhz$ zD(tHLeluP9Om}`?E9v{qT}F1>3P@*ae$eV$D9UsnGJ%_3kY%cxmSSsEBV{vd@QIkd zB`7WlP0aMhptzW&$Vmgogm6~Q2Oh6%dObxlyBqawnvca|z?V6f_l2NA!l$ z?q5!_Cy9dcKUh2|W)mR-){unv3mN2j_H~7|oymII38sdq!ltS#M}lHNCb4L6 zWH;t{u7al_X8X4%|4#q`I9fE?wy#(>@>W4@2REUoeK4UppwsYOYhML4AfC3nQ}TkvsRDsqnQ*!S zPA0(}-~h)F?t)^*r@I-PK%r~D@Z}&J1Gpe?bL36u$%0~6--(_T^Aa9x*tV2jf~V5d7hfDc|((Zm=1hV}_zI zVy}Tvl<>O_6|WLO+75v}@tr;4wliOP3Kfr1ja_Bt2aNkb6R$1QXyaExp0FWdJfR@AH)Y-0!k-?bHgWW>8< zu;Y+qU(_AMfIan^&Wf@iee2;3)cA=|hpEVFlMSA?>(%D)N)Hw}R?9I8g&y>*;&Ak( z9-jga&>Re&#|>5@aAcmB9m+pCOgB;)-!i_ncP!=sgvdet0~eO+ zA@v*T$;g)?ks!^20ZfDzqQdAJ^z%t;A)>$9$|1FEHA`7#`Ywa*6~QXVB0yhmfZa&* zs+^%eivo7pZVwN3WU>!=Y+y)Q&A6MFQZsm&(Lcbp$8RqAi@I6(NIGwS=LVa+@Boe! z1-PGs36Zcg{^8bJkhHZY_iEwO+z)j93;6@+`%f_i(<<}RUNa)W?amQLn3`mdlL?;& z`dcaeT>dC?gfaNY&sdt^NSF@40ug*Bz)fMel|xfQpO4W56;`IM+>iIKJGHV8prVyR zTVGNp{{h%J#lu(y%L|85;UoPgp-hmEB{Ve_h#PIZ@iT+RLWU~T_DtTkNc`rzvai5# zmitBf%r*#PBhG+Sxt3{C(iirVpg^}dIqF;?M8HJ&E)`Mu2J+WCxL*qrFAx)kWd*dZ zv&h%ztCWp*3Tl;23IXpRHo%gyJgr)>Ti{C)w0w!Uy|4p&kEl~9vko)W{*mchRN*&} zAS|7u&&H3XCRPx-BFATxXgw+S3;4m*zz_DB+99a{OJK;l4J!yH+{aW1sa6r^ySs0^ z@}HZp=qqGCJ<=50dE=W;NH5pe0YcQI zP-G<>AeJU$QMQxd4QkuNRgEXe0Ef#c45HhY>dC)?bc-<*s)z6^fOxd>Ci}sI52-PA zbnZf#$QN5(g90;DpMz7t`@fNli=VT>!8C#onykfh0#8VueYGA^MIb4`eUzeREPZZ4 zRQ=mcurwyOeuuh-zfp2}1>0~cK`{hai4{IC6k%K*1MIQ6IsGIRO+Zoz4T%BlzjWkZ z!L);LEG;TNQ_So|8d95}c&PoNGC`@9-2~p?l8n+q_CKbbJY1*&=fotgQd4%Js*0wMidz5Ua+>|G2_VEndow+uim3)~$Lgrm|0!N`WB%cOfXmp5h>gBIiG?zK@Lj5jMo zN?>tGHb4$IoVkF(mz1dn2OH9xKl8%QwE)ELPIb^C~8Y~!LP+bGOc&L!uc=%7~TIY z2%iNzX7A<$K**24L$7yZWYtgAN1NAtb>f1tz3ibSUy?2u>Pf*}qDwh>)HK4|!H(ACmcLm_KVEQF zFMDVd9_qR61G#XEiP_8`#`&BhA1{;gxGY$!oyD=E*xzuakXzNV7Tt`L*}3hmu=$e< zKq3AA9MPvDWAb6xnyj?#+n4-55N4*O;x5=pn|R!%!N;h$qRM#?vMR2Cr(E#)Q-@po zlizTyf&lslos$mW4W%~6*$lq>IY6Q$^f?rTJqOz!_S||s_?WC{Ar+hY(JHLAzn-M4 zwHINc>=;;i{FLyL$0gQ>K4f@ z80vm zkuq^uzi7!L&U_1F$OD7477JEj5Aor*c&NCMvw>6|s^w+sP{>9;G10acYE1FdnQ10X z8y5(t_u^2@{-ycCOkx*yBrg@>1&|F5=t5(Xl>P8)cO*ca2i5Wxc!Q2q)n6Qrpt#Al z7Ed$x!}~zEq~p)UuT$?dte>(Y&IW9Mg6q8&3;R*h7`$8(5M&m}7W>7I3vUYtr7YLf z_BuU<u^Hn>U! zpQOi#fNaqE_0ZgIoj6;5X;|2_?DxliT3IX*`5^~_*y2dFS~OqsqZZ8f@<~ajfe?JeuGgVDu+~r!PehJzCM2$YV_x-~ zD`~|4bw+<;rYzbr^n#|itT($#A#*E*p8kvG&-=UVIK(;fd)AO!ev>YFZJ zUYE}W+0hWrfw;w4L;ftr7{(T8Fc+I8{N(o1X@yh%aBbyaP>{Isb3!reeOrV{?<)A< z`mZ<>$V;Dt`io67fBChcUJ#j$=ja$)Rv+cPOrVE-V0)Pw5>Ka1hqCjMWYwQ6_Bo|6 z#Y5J7sPA5Fy2Vv0?36e_8o^fd-s837ghf2ET}k38`pXXwwUASp_5LRv9v|qi(*CFj z4GQ4m`nd0ej)cC9YY>#GKD=QJc_&m`er21hgz((fBlii#(y8C*$Dqz~u=sqpS|RQo zq4l{;R)*L(wJHPTce9h=Ak%Ff*Bb$Zic-W@${^H#+@#vo19s?O`vpYpjX~OAu z8OFpruJ4Jml(ol<(~^tSp~~aBuTpE8BK4wJdk>=8s&<=?FLIcpThBpFjOymGdP#TD zAuqhSQcINA`#Pu{tDHt$Vi9wzCPZT$uc@hn1TZb7+OCs4SY@3=44nYBs6wNx=pxj}5c ztIR~rxAKYH@&F76_ROX!uh3)_byD#jPw3Ip&3lbXY>k9pX=LV{+aNrmC!l_PcaftY ze&*Z`L2guSM43qS#^?=4YJ|3xmW(^444c*u`^5=tsbbbsIa07e!ZM?9q;u>xai*#> za(Ko{tn|_2+3m&UBW@a9nu;jm_a~MtS?AEvmiJ`2Y(e!kfjgD^`n%110Uq}g9LYzg za`vp^oGisV8ZEbgSWlWjaRuAcv|3^jIJdySDWQF7u~vL*bm>Rm!lAg3zX*pd**e6c zrE^#q6emzPE!eTYxuBMMcJcSzHK4g5Z#Lv-6VI9Kw7tbkRARRTRvjuJXf-Xzo#?-o@ zl3Z%u1UNM8o%S}Zr0Q#gZrIzJcdgMl4*ZNv9y zcILLiP}tB#YZ16b=GyLM--LC9V*r&)SHu4`LWB8-0MD@{kzopKZhp^R7(=!n^@Ke+ zAU}(=OWUqdAb%$SrC>>x+3z+o+!2kwJ8h)YN|YHrN_EuG@)B?)r_xPMc{s3SA%QyZ z^0h|RUL&DW?#hnV^TyNtNr$PWC?J(!0GI#jvEvgi7kF5E;f=NfkE*W|&fxvyeyLYf zZ(TK}yKICwZK0^BclP&xh~=^vnWRIVtts4sX6(EuwLWi6DJIsw_J_JvzyIJv4>72S zq*~1lx;BBtOE-yotJDx5Emne;(I1~ov@fxzNiv%o3^$vbw`Mj<+p~;vHu89~S>$;i zugUhLHTExh)_4{+*;{b@64i&|7Av;KI+UH`I=+hg(|MYuO@zck%TMeI);|$A2I$+A zLgr;t`ezgImtp5F=Z8SbF7<@}{0h*iq|q_+2a8+2?2n}>Q1j294?$-zLO`O`)0ltx zFwkZTa3PZW|Nd(?+?vEsjyIMWOpA|FClD-OpyRyMN8cW20~4s5;gZTfZ?bi&M76Xc?LSYcT>093|uhyp}?*82=ffsH9X zN%*^gMvFQ9&^J~>sWNtGb?7jlXDypMfNA5Wt6R+gk`YYc%HY{4TP?rG4rj>IE^NcE zYsrT9%TaDGl{V^*bl={rEuh^37L5Sk=rprd#j`Y}s5?HsP2+*ew1ES0ZOh|3Py+f7 zLKO<`c3^yTp?tpm*ZWMBsN2x9dD^rK)qqiru>=?b&-Y_2LI=!>2YizP=$@cX8dNJd z0!B~X4z!}=P59!niKnKJzurD};bc11Lr6oy@k5x4-z)`D8s~#o&YJa@vJJm7`OUS# zPxa*I!-ISGF)ufIm(Ae{bQJg=^`2#)WjwKh_?LHz zW+^`yGTiq89>$ESzRF>3ft}ZbMk;xFidh z9QeU)I$cSjtLXD&6h;?~Gqgztuwe$e=TR6G(wWtSzw6@NG}nJ`-QcfA3KV>P_%Dg;4GMRv@ty1yv6`H&R35!hw=%{m~+UyVfhYx6CHa zH}ACpIEn5&7MI#~nRjYF{7EU%^ML~_uSde}$0t^0W^=V^Eiopp0!R>f+aC42 zD{5&anTxr?hgKA2wa4;APNp-}mKLl{v}UT8BI##X&XYsi>rw**5is83XKVodY}$Fu znG%dJ!>$)K^4w3~QRSN}|MlQ*Uq_{P)_dO+H?YLjU?W+$i@h&YxpDbkI%YZXL{aeOue+swKMSR(zOw`l0eb@YPTxx& zW`*Mf)UIzh88SGvDe9iv4KBry-kl>owHl?~Zw^cq4yt_z*n#}{9o35~K!1#beLNn~ zN-1VZ=c?o{^ogk+UJ>DEG3!B}=&m(v=BH=(Xj-t0e2g`T++QO z0vm`5GgP)So^DQjK+g5g&MLF{Xtol8|;Wny-;y$;n zyP>Ll>1=SLB0Eh%69nKRKqo_(3rM-tv#mLnYi?`t>6L?ImT%L~lsa5qD6Jf+XtbPd zS11npSz79><>Sc0Vrgz2H8|Z==aMnjYhO$C)w6Jl1~X4RgiXb-z@Aw(j4%}&i_Y|T zknRyPi^n{e+JeMYGKcAzgolKL1NrWAo>-a@)HH1bp4hKrMLC2Q>CV{ukz6x8ig#fL z8u>YlMoN5I_BC8vF*9(DmM|Pwydo)*!I^K+b4F~IWGQ~-Yccc^8`zC|K-<+j6e zgokm8_JN+H-p3Xy9uU$u0;if$V-uQtG{#!6_B7G8pi9m?KUUX=Td}RGooc7SGXAZU@|fR|uopEV8o*urFndyeCqNczklMmEf`EG!s5ARFE^m zAYu#k(2KxezyKW^@l4@CYCmuE6a(m?vhtv0Yw7RrB(lrP49yiO4E_MErzxSWvW&t@ z$T-1-#~7ar)q2bT=3`^8*1N64??>BZ{nZ52JLzwUUY;%86vRFLZ4b{Blma%s zWx4Tw8d|8X!U@EfGc+Ms;6GAr3}EvHpIX~NXaR49rEH&={)D8TAicJ z>|6te_uYI-+@u)N!_{*$Lrt_deY`B=PL&kf@L3jVGPNoLC|(#cXW>y@7^K%isI0Y- zL)+W>RE7V=$MQRmllIgm)N;)$Ubee!%I}pZNIP;YZmxi}cCs7a>o! zQ@P)I&B5#IF|C8LLuwehK8OXGD(0!I9@j75HK0nmptf=(GUaf$f6LuKrVp~l#MT}^ z)qUCB6)92gPV~K@4*YQgevGR3`5SO6;3Mb)qr&_+NK=Z!BXPWq@)({HLBZ-x{AtlfIb6|cy^W-+Ca~g@L*`t8r(MuU|HRDh{XeVD8y*Pf zrMlG@%e{ekO(sHR4NPQhYo7ieS2y_yR2jT{$WvaG$e+yCD9BckmGdZc zB|`3>IW&{?vEsO@jy$o|Ygz6UfeU2oO-RuKhdx`Xk28Yd$v3VcopLH$%Y9fV%Il@YT^!LUHP~Sv6;a9|iWSvt zaRX+a9D=K{%r4c?5V-UWl3|qbw^+1i0ZS}Vfj@)V{ST2UaG(2SAkZD?vIVi$s~mCy zcP5{FWRvS@=p6@i?bNAcW5L+sw3VpT^^g3sfjfGdB#COi>CcMj_q9w!L66Cvgyyyy zL+KA8SO*pH&jvEga$k%W_ZvGK z6MSH1qeVq1W+2Phb)I_^e?@LvPcGnbb#KM^yfF$PJ;=zrAwV$qO+<)1e`XepbB7nZ z&5!N@ZaJwqNy3f^P)$c+kMsPpH=Ee%DQOc&9&YshlhpAo_n$^H75s7ZO+9A1PI|t zC*xFVamtrP_`okP!!U-U- z-!zuv{4*??x+=2Mx1vRc;?jhq#sSUCvY_^2;xWm`FA{NS_7aMD#a6^C%Qj*mAP#T4 z(|4tRY58W=`5Snufx9UVE4DV(qvg7L^Coi*ZEDFB1k5|9B8|Wt>N!($9OZi?tDm;2 zbP|Q4E4Ke&d8;i*?rNFfF^%G-64ocRfl-W=DBvq^=^R1^AbuY>%)=KAKmk)u7nN^5 z?)uTPfY`RgCxlDDChT{MuE6~G8BspdjqcgpJ-9=so`i_jWmDkDUo#~%TP;5(tof*5 z|9W%~ViZ-nGd(^eXV^To3j;|GOwKwOc7`r@ju8+8u_=k#%WieZ5Qc5nyD%aHi#xkf zzwcZ4{*JiIk(}oq%S%T02kVFww-9WLpSdg&EZg>EN>e(F|IC=Eu zY@@CHbYVHOP89TsD%H}MbA8tJW7W~W3P%=EonXG2bQcC9BtG?KjrfBRIf6iZGZV0GCrzODsedNo;UtfRqne)HM;8 z*gR(sR=TJZ(Nvs*qOkPNI&j&cJUAeV{5sZLm#_g-xGL(s%U@@ORf;$);GFznygGyj z^E@ODxt^R^Q+aYrFNgW<0#UUc&nuYW!lLzV-R=7bEoMogC*Ofr?mV~(|EX`0tm*A_ zXLMRUtmj*JPT|R!!+=z)5mWkzn zVZMG*{cLF1uZfY1416E;S&6Tv{qz#0fa1x~KxmYo2!!5;YofG>kY9`1L&xa6t70kF zc38d&J~+<`C|wM00U>=^C$AkBe`qBa;Yc`Q=>6_8!vmH<{GPc%;&RDu%f_*RJ_*yF z4J2?DKz@zPvnu`X0o=>Ra1et`ns3OUcdQ;9gCIsl+5?(B}=1=vmW$D0zB zjyooN-s&WHG+zAPcD%V@9wKwOgB(BguCgkEt0Zvc%~*6{Wa2{leXd-|ES7%u4RDQE zbN^0K@C9ERxo!6-pnRL*c`FQ#WP3v`h~L}oE*R$3T`u=yROjB+PK59|FB2Mypce*4 z-fToeTtTpzhLgL)x$MP?BtC6QVa?y7-}$N>>I>K$mQ8HQhl5kYsA;|Vr2T2OFZ1c_ zd~@Nv$WDhHOoaErRWvfv8Z(hweAHdp0_@KX8I=_7t~TAP1Z z*!oRhIvctf1gnv5;cjZ_)3FP7*~6KV59m&JM$rLNIOFVAY<+HqMUuBs4F8Vq%#drX z#i3E(=Am!Rw`S{?-M92dz@{w4P@q3tAL9DT4A@&v*cWEbRx=FCV7TbJMsJ6naI_ML zPJ8@Vl4^DI6i1e;;n_=oLyUbPAzygR!t$3|-nGx$@P-!#Oc5^o5;GnFyT9~u&29J} z*9_dRocV^#3p&m-gNE;A-9aX?<2hNX`kh>4On9j->0n$Cocg(LjVQ?9N+&2(eM@C% zwKy^_Dd^Q!;_x9~o`H2T>w=EzF-O2jl|x;vkOHwVD83fdtOUJi5>yXx;|KW$cj=vs z6&h-_)i@hNc#gd=P;pDDc-dI7FxIw5dmq7A(Kyend2{V|qzTj5G6Rcu4zUES6}AZe zcxiwYn5PilFte?P25HwB{R^=kY1)++#(g@=%r+(LDia$Df;Zm&^#*LNSxP-%TCp>1 zv?0E_?AYjAa$wSO^N+V0=^@%S2k@rtx&~PRRfo?am2FWrp9LiCL8m=up-~Kp&TyBQ z($UhBO`q0B-kMHrY-2tA$!PUPr}?y)kst3FUr*fFEl1^vropGcpi%P2ejf-XBx2NV z8U{MFtQh~wN9!2qi@(tCb5hJHDR47Yq8Qw+2&ioQV9q`Sr zK_Ox=#Rnt1x~ux)o#HxSCzpW4vg%R0eyX*yD#id@x&EgISc>ihmW4mmwueFqrg8(x3iG_?J=i<{z;&=aQrpw;}t2g;zs zqin>u!yVzGCtVDjzo$E%d)c4pVxZ;Qy>o{r#*1#mN0%o)C&NEvRG-xPmD!QXT?5Qr z4jzpt*;vgz2#9sFoIzE^o%!@W>#4xU4D-|D2fe}J5=GzTK6@a=cVLQXQzcif1$C4I zU~`h8;spbJ^W^c5s89ZC{DZbxS3zL?*Kz{R@Q8p0Ij&XYx6aPl!&8WoQGKlPHg_M%63}x)3+RI zYE#-=K+7`~XmFXU%$nn?YQ5(rkAK8ff)z&cK;?0rl7ttH)i0@|5Lko`riS`ft-!D_ z_OoTrKd<)*Jmw5W`<7^;7cf;vXHEv31j_-b2IoV5)Wboybx1dy*(tvVx~{>i6^ezn zNt;!+H=mJhJnCFz_-GY(k=SWnM(naQ!B}~Q$#w7V6}U?`Gmr= zVCTdfyZh7h*~;8|}AJ79U5`ueg#0MlKo|F5#HJP_)%k2|K9-&)7A9k1L8lX_hV zVI0%3?xT$mX$cvjWE?YQ8f$4wB$nhDm1E0QP0nFlZElk=A`GcUj3dW5#_>MWyIV8f z`EUN1d7kI{JkR%fzTeNMeh#{-a(j?z0Mq4Prp4uqh0j^sr{aGvbS{~b*8`fRu?sHHUGtRC_v@O zg;&{Ta7EHUZ#4&N_}l2fW`pnLl0UViW-*~Rm^ZDsqcbp|{7P)uPK6CoK08|ySXi3t ztY2cOq&BHUdz>e|_7w^YCh({eTb*26p;+hM=2A0N?6rpUR3H?GJ&*fO-u-z`sxKzz zH*YnrktOsw4Zp&q+(cNyK6|Ubu%|3rscBhgV>1kT;HX4d59BJ>JJe6^9d}|C(5niK z+XX8M_V)Ri^o7@ELg#NS)}2`7=}~9`<{~b`QBVmylbA21+<2tO{wP~H8XL_Ld2%H3 zBF&DnBZ&_AkrKLU=j)a4`=hlO)bw-xn*!g8V7v8es!mVhnIbay%`~vIA!m13y;Sz=Fa@<_nswIoDL(+ ze(u~w9+W4_{|!L)w*UyDKc^sXx{ z7}&@jt&N?vj4v`QxLAxZYOR_1Ja>pZcuH<^U=7)$#Iu(Yl^}DEs{+l`dmM6R&X!&< zo@d{AEmxZ^JjhN@G8XHo30l;}QUm?Q*h?s7acjpD2Nc=a;$!m$cJjD7oZ1MlS%T3( zWK=r!NLQd%L|Ki!p6h`gE~7Me_3m=gNXsgLtG^pOrx030VpldV{V``8N|&OD1jwIL zU#-|z#*zx2-O%hRVKp<_)xVuK;1_tRf=gpN7ig7}WGdRbz&>SiE0ByLL3BskcfXBZ z?T^r}jSv_(haTC$LMH^4V`eR>>+Z#J*E3z&m>F-A=|1-U#bx{HJ3D81G_=B3TA<)^ zQ*;t;^62pC$jCDnMQKz@gM!BTxU!$KTrSbV=G7+BWVq_FDny?eD}=jgx34`0P<}x+ zxbnwk_!;Gm8m!m5p?-`kuVmi<$x;le_DZf~n6~LCXJQ*a1Q1|31D)CO&L#qoFMirj zb@84yL`U%vWoZwYB{RmJr6GShvF{bSxN#qPg;&6AkEA${!vHF8;OpLMN>CVkKvZ@_qwb6~zfsU>*SX^|) zrc*e&tl;3CDQ!Ye(8bKy1;+C$k*P@0K57Kr!DBq*;K_9O2Di52BiI2i3*gX4iFk+k zTXq^vlQV2E%YCN0qzv;*LzPdWyyhB$(&n|OShrv1T#oSI9asa9MWW{&(aXXFmtU9h z8j3>_$@(n{&kENn%*0R1dfyP!i{}`gY}BZ{*y%WKTk{Q3Vbqn79=#kBY!Khmmw4?- zEwO6PeO37GKadXRZfWlE;z}xTtQ>G!+=O5W@Y|!tW~V28@#qdkqc^C~x9rSbW`Iet z;)t)t(&I2fN}|Q1qLkab;Wc1|1D70WQ_x_oc3ZX?8d=bBoGS^$;BUHgvNk`yzizx1 z0S(GVV_yvP_;QI_SRx#pkxjLv-4goorf9NiIR46AIehiQ$?|1Af*a@vLpNnOT24mv z)5ZH(o6l122-&UDPU4;kn$(%hCSIPDt38V@E9^lmX=`#vb;9ug9YLN$2#p}X5+FKJ zE_ed^@Hz|}V7Hj*Su40k>a~qwOQfAJQ4>LoTYpd82X<+H{>RQ5_h^=p(e~Ai0j=0% z_mtoE;B9vbRJsrnGfaWprQ#3hc2gf*k}VICeM#e^Y$6&N4~TuiE_O24Bh%BIxee&G z`Y$-bDz7z#jg;(vT`o0DZBx8aY6VA42hW8688_kD{sfo<+WV0Y$LH-QukK#&Zr56R z@bmCC^KN4M@(K zHD8%dwKAVLm!=RoO;(BTT(ere>rvVxd3cqieVEbt^G8;?paZpOo>K$#HH?wi174&N zGegqwF4sD&@2hCSlsI|9_mgsWdsG_I~&X_?H*VY`P+@l+xR^60P)B%I( zysOqgcE=0`hq84LrQ6EPb_0v0@oxSXK;b8If2bpB4jMyA5VPhmX=(zhkW`c&Q^9WHda2z}D(O_|XX*>j zX>HxSm0#b3Fj(IIsAz1xzW{W8p$AjE9P+QTsD^$%5Bn8|LxkXHR!7K9^|1gnp32M$ z66+nFTMaRqXZyvGK5C9Tqe&Gjcm25PFMw`20bb}6k34*d^mHf0{0e!WLi^+n_UWWO zuy~a%1YbRZyy-gaLTF?)o5Vry?2s$#wQ263)9YZ&CC2COaL_Hsv+}tD5FVI=u;?ry zh5*r}dJ~)uc*Qy%POs~|NNq}{^*ble2GsRc%*256T^PGijBaL(_F$#P7R`E#z2Goc9e3+6v3S1+QjLtqbtwHU9DM3>r_%31a{kI^sCLDxQ8sR<8dWa~ z`Ghl9d~bb5@fr+pdH&gwoHA21#g`F+lWa?HUD$AHmTu`sPtxtCt}wRxB8MwRf{K^7 z!k`UOAs_?cu{s=H4sh|77WWzv++qGJ+4RO`_k7Q?43z+?;5FtT?;|$nr};p(Unq7# zRlo;(#|7gtHiOK1(OLS#N=eH6yL)<(|1Zfeki8^-YoO=tQAyPBiOC;)t>55YxNK9) zAbs};q!{6)FCmFa$I-=Cr$gzb#{yQ4oW~%~+VChgFqLNDJ;{g7EM@}EM`(D8+OH#8 z)AaPaw}zQNx^q>7eOd4t2MSnAoWnVOK|o-oy@nPZD)y62710@WIG>YK`=*J2fvUd_ z_UQ-TzPlWkAL)z|-twl5>B(PiWUWw8I90uEHVm*A0t_77XlqX>c%*{QB__`qD?a7h zEdOmD_jx_oO=pDny%>zP2cYsGHf8oI5(ako^KE^QlquxLZ{7&^uv~qVq7(oicGP*S zD>ys918X2XaY2=W&Lg<6U!Yha*i>F&Z%ys%Mh^JS(yrNT}IGT z9UY}WdEZl7MK{k%ff)CKT$P?FT0{UQrXDQanCKynAP?fz@@n*%0iSq#&pF9FqzsZnm@A+-=%mG}E7+5By70(Wc(*i2L?WOlg za!ynn6l}F^Fwe7Kf|VgCZ!j1#C-!q_95ym)jh { + const container = $('.container'); + const btn = $('.navbar'); + const menu = $('.mobile-menu'); + + btn.on('click', () => { + menu.toggleClass('open'); + btn.toggleClass('open'); + container.toggleClass('slide-left'); + }); + }; + // 回到顶部 Mints.backTop = () => { $(window).scroll(function() { @@ -13,7 +26,7 @@ }); $('.back-top').click(function() { - $('html, body').animate({ scrollTop: 0 }, 500); + $('html, body').animate({ scrollTop: 0 }, 300); return false; }); }; diff --git a/packages/client/public/styles/common/base.less b/packages/client/public/styles/common/base.less new file mode 100644 index 0000000..788f2cf --- /dev/null +++ b/packages/client/public/styles/common/base.less @@ -0,0 +1,169 @@ +* { + -webkit-appearance: none; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); + -webkit-touch-callout: none; +} + +html { + font-size: @font-size-base; +} + +body { + margin: 0; + padding: 0; + font-family: @font-family-base; + font-weight: @font-weight-normal; + line-height: @line-height-base; + color: @global-font-color; + background-color: @global-bg-color; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: antialiased; + scroll-behavior: smooth; + border-top: 4px solid @theme-color; + + @media @screen { + border-top: 0; + } +} + +::selection { + color: @white; + background-color: @theme-color; +} + +p { + margin: 0 0 10px 0; +} + +a { + display: inline-block; + color: @global-link-color; + text-decoration: none; + word-wrap: break-word; + vertical-align: middle; + transition: color .3s; + + &:hover { + color: @global-link-hover-color; + } +} + +img { + display: inline-block; + max-width: 100%; + height: auto; + vertical-align: middle; +} + +ul { + padding: 0; + list-style: none; +} + +input { + outline: none; +} + +h1 { + font-size: 22px; +} + +h2 { + font-size: 20px; +} + +h3 { + font-size: 18px; +} + +h4 { + font-size: 16px; +} + +h5 { + font-size: 14px; +} + +h6 { + font-size: 12px; +} + +hr { + margin: 20px 0; + height: 3px; + border: none; + background-color: @gray; + background-image: repeating-linear-gradient(-45deg, @white, @white 4px, transparent 4px, transparent 8px); +} + +.container { + min-height: 100vh; + transition: transform .3s; + + &.slide-left { + transform: translateX(-180px); + box-shadow: 2px 0 6px rgba(0, 0, 0, .2); + overflow: hidden; + } +} + +.mobile-menu { + display: none; + position: fixed; + right: 0; + top: 0; + width: 180px; + min-height: 100vh; + overflow: hidden; + background-color: rgba(lighten(@theme-color, 80%), .1); + transform: translate3d(180px, 0, 0); + transition: transform .3s; + + &.open { + transform: translate3d(0, 0, 0); + } + + @media @screen { + display: block; + } +} + +.layout { + margin: 0 auto; + width: @global-body-width; + + @media @screen { + width: 100%; + } +} + +.main { + display: flex; + padding: 20px 10px; + min-height: 600px; + box-sizing: border-box; + .layout(); + + @media @screen { + padding: 10px 0; + } + + & > .content { + flex: 3; + border-radius: 4px; + background: @white; + + @media @screen { + flex: 1; + } + } + + & > .asider { + flex: 1; + margin-left: 20px; + + @media @screen { + display: none; + } + } +} diff --git a/packages/client/public/styles/common/global.less b/packages/client/public/styles/common/global.less deleted file mode 100644 index 40cbe10..0000000 --- a/packages/client/public/styles/common/global.less +++ /dev/null @@ -1,377 +0,0 @@ -body { - line-height: 1.5; - font-family: 'Source Sans Pro', 'Helvetica Neue', Arial, sans-serif; - font-size: 14px; - color: @black; - border-top: 3px solid @theme-color; - background: #f5f5f5; -} - -img { - max-width: 100%; - height: auto; -} - -a { - color: @black; - transition: .3s ease color; - - &:hover { - color: @theme-color; - } -} - -.hidden { - display: none; -} - -.main { - display: flex; - margin: 20px auto; - width: @global-body-width; - min-height: 400px; - - & > .content { - flex: 3; - margin-right: 20px; - overflow: hidden; - - &.has-bg { - padding: @global-block-padding; - background: @white; - } - } - - & > .asider { - flex: 1; - overflow: hidden; - } -} - -.setting-bar { - position: relative; - z-index: @zIndex-1; - height: 40px; - line-height: 40px; - background: @white; - border-top: 1px dashed @light-gray; - - a + a { - margin-left: 10px; - } - - a.active { - color: @theme-color; - } -} - -// button -.btn { - display: inline-block; - padding: 5px 15px; - min-width: 40px; - color: @theme-color; - border: 1px solid @theme-color; - text-align: center; - border-radius: 4px; - background: @white; - cursor: pointer; - transition: .6s ease background; - - &:hover { - color: @white; - background: @theme-color; - } - - &.disabled { - color: @gray; - background: @light-gray; - border-color: @gray; - cursor: no-drop; - } - - &.error { - color: @error; - border-color: @error; - - &:hover { - color: @white; - background: @error; - } - } - - .warn { - color: @warning; - border-color: @warning; - - &:hover { - color: @white; - background: @warning; - } - } -} - -// form -.form { - .select { - display: block; - position: relative; - padding: 0 10px; - width: 240px; - height: 36px; - line-height: 36px; - border: 1px solid @light-gray; - box-sizing: border-box; - - &::after { - content: ''; - position: absolute; - right: 10px; - top: 15px; - width: 0; - height: 0; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-top: 6px solid @black; - } - - .placeholder { - display: block; - .size(100%); - - &:hover { - color: #333; - } - } - - .options { - display: none; - position: absolute; - top: 34px; - left: -1px; - right: -1px; - background: #fff; - border: 1px solid @light-gray; - z-index: 2; - } - - .option { - padding: 0 10px; - height: 36px; - cursor: pointer; - transition: all .3s; - - &:hover { - background: @theme-color; - color: #fff; - } - - & + & { - border-top: 1px solid @light-gray; - } - } - } - - .form-item { - margin-bottom: 10px; - - label { - display: block; - } - } - - &.form-horizontal { - .form-item { - display: flex; - align-items: center; - } - - label { - flex: 0 0 100px; - margin-right: 10px; - text-align: right; - } - - .control { - position: relative; - flex: auto; - padding: 5px 0; - - input { - width: 100%; - padding-right: 120px; - } - } - - .captcha { - position: absolute; - right: 1px; - top: 6px; - cursor: pointer; - } - - .submit { - border-radius: 4px; - .size(100%, 40px); - } - } -} - -input[type="text"], -input[type="password"], -input[type="search"] { - padding: 6px 10px; - min-width: 240px; - height: 36px; - line-height: 1; - border: 1px solid @light-gray; - border-radius: 2px; - box-sizing: border-box; - transition: .2s linear border; - - &:hover, - &:focus { - border-color: @theme-color; - } -} - -// alert -.alert { - padding: 8px 16px; - margin-bottom: 20px; - color: #c09853; - background-color: #fcf8e3; - border: 1px solid #fbeed5; - border-radius: 4px; - text-shadow: 0 1px 0 rgba(255, 255, 255, .4); - - &.alert-error { - color: @white; - background-color: @error; - } - - &.alert-warn { - color: @white; - background-color: @warning; - } -} - -// back top -.back-top { - display: none; - position: fixed; - right: 40px; - bottom: 60px; - .size(40px); - - line-height: 40px; - color: @white; - text-align: center; - background: @theme-color; - cursor: pointer; - border-radius: 50%; - z-index: @zIndex-5; - - i { - font-size: 20px; - } -} - -// message -.global-message { - display: none; - position: fixed; - top: 40px; - left: 0; - right: 0; - text-align: center; - pointer-events: none; - z-index: @zIndex-5; - - .content { - display: inline-block; - padding: 8px 16px; - color: @white; - border-radius: 4px; - box-shadow: 0 4px 12px rgba(0, 0, 0, .15); - pointer-events: all; - - &.error { - background: @error; - } - - &.warn { - background: @warning; - } - - &.success { - background: @success; - } - } -} - -// no content -.no-content { - padding: @global-block-padding; - text-align: center; - background: @white; - - & > img { - display: block; - margin: 0 auto 20px; - .size(200px); - } - - & > span.placeholder { - font-size: 36px; - } -} - -// pagination -.pagination { - margin-top: 10px; - text-align: center; - - li { - display: inline-block; - margin-right: 8px; - .size(24px); - - line-height: 24px; - text-align: center; - border-radius: 4px; - user-select: none; - border: 1px solid @light-gray; - background-color: @white; - font-family: Arial, sans-serif; - vertical-align: middle; - cursor: pointer; - - a { - display: block; - .size(100%); - } - - &.disabled { - border-color: @light-gray; - - a { - color: rgba(0, 0, 0, .25); - cursor: not-allowed; - } - } - - &.active { - border-color: @theme-color; - - a { - color: @theme-color; - font-weight: 500; - } - } - - .practice { - font-size: 12px; - } - } -} diff --git a/packages/client/public/styles/common/icon.less b/packages/client/public/styles/common/icon.less index 43e8eba..111290c 100644 --- a/packages/client/public/styles/common/icon.less +++ b/packages/client/public/styles/common/icon.less @@ -1,64 +1,64 @@ @font-face { - font-family: "practice"; - src: url('iconfont.eot?t=1536201113166'); /* IE9 */ + font-family: "mints"; + src: url('mintsfont.eot?t=1536201113166'); /* IE9 */ src: - url('iconfont.eot?t=1536201113166#iefix') format('embedded-opentype'), + url('mintsfont.eot?t=1536201113166#iefix') format('embedded-opentype'), url('data:a lication/x-font-woff;charset=utf-8;base64,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') format('woff'), - url('iconfo .ttf?t=1536201113166') format('truetype'), - url('iconfont.svg?t=1536201113166#practice') format('svg'); /* iOS 4.1- */ + url('mintsfo .ttf?t=1536201113166') format('truetype'), + url('mintsfont.svg?t=1536201113166#mints') format('svg'); /* iOS 4.1- */ } /* stylelint-disable */ -.practice { - font-family: "practice" !important; +.mints { + font-family: "mints" !important; font-size: 16px; font-style: normal; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } -.icon-github::before { content: "\e600"; } +.mints-github::before { content: "\e600"; } -.icon-plus::before { content: "\ea35"; } +.mints-plus::before { content: "\ea35"; } -.icon-home::before { content: "\e626"; } +.mints-home::before { content: "\e626"; } -.icon-star::before { content: "\e63b"; } +.mints-star::before { content: "\e63b"; } -.icon-success::before { content: "\e613"; } +.mints-success::before { content: "\e613"; } -.icon-me::before { content: "\e60b"; } +.mints-me::before { content: "\e60b"; } -.icon-up::before { content: "\e62b"; } +.mints-up::before { content: "\e62b"; } -.icon-reply::before { content: "\e619"; } +.mints-reply::before { content: "\e619"; } -.icon-collect::before { content: "\e65f"; } +.mints-collect::before { content: "\e65f"; } -.icon-score::before { content: "\e6a4"; } +.mints-score::before { content: "\e6a4"; } -.icon-error::before { content: "\e612"; } +.mints-error::before { content: "\e612"; } -.icon-search::before { content: "\e7de"; } +.mints-search::before { content: "\e7de"; } -.icon-delete::before { content: "\e694"; } +.mints-delete::before { content: "\e694"; } -.icon-right::before { content: "\e63f"; } +.mints-right::before { content: "\e63f"; } -.icon-left::before { content: "\e640"; } +.mints-left::before { content: "\e640"; } -.icon-notice::before { content: "\e60c"; } +.mints-notice::before { content: "\e60c"; } -.icon-password::before { content: "\e601"; } +.mints-password::before { content: "\e601"; } -.icon-message::before { content: "\e604"; } +.mints-message::before { content: "\e604"; } -.icon-location::before { content: "\e602"; } +.mints-location::before { content: "\e602"; } -.icon-edit::before { content: "\e605"; } +.mints-edit::before { content: "\e605"; } -.icon-signup::before { content: "\e642"; } +.mints-signup::before { content: "\e642"; } -.icon-like::before { content: "\e603"; } +.mints-like::before { content: "\e603"; } -.icon-signin::before { content: "\e653"; } +.mints-signin::before { content: "\e653"; } diff --git a/packages/client/public/styles/common/markdown.less b/packages/client/public/styles/common/markdown.less index 8f8aabf..e5ade12 100644 --- a/packages/client/public/styles/common/markdown.less +++ b/packages/client/public/styles/common/markdown.less @@ -1,6 +1,6 @@ .markdown, .editor-preview-side { - padding: @global-block-padding; + // padding: @global-block-padding; background: @white; h1, @@ -76,7 +76,7 @@ tr { background-color: @white; - border-top: 1px solid @light-gray; + border-top: 1px solid @gray-light; &:nth-child(2n) { background-color: #f1f1f1; @@ -86,14 +86,14 @@ th, td { padding: 6px 13px; - border: 1px solid @light-gray; + border: 1px solid @gray-light; } } blockquote { padding: 0 1em; - color: @dark-gray; - border-left: 4px solid @light-gray; + color: @gray-dark; + border-left: 4px solid @gray-light; } } diff --git a/packages/client/public/styles/common/mixin.less b/packages/client/public/styles/common/mixin.less index c2e0b9a..665a1e0 100644 --- a/packages/client/public/styles/common/mixin.less +++ b/packages/client/public/styles/common/mixin.less @@ -1,10 +1,8 @@ -// 宽高 - 不传高度为正方形 .size(@width, @height: @width) { width: @width; height: @height; } -// 垂直水平居中 .v-h-center { position: absolute; left: 50%; @@ -12,7 +10,6 @@ transform: translate(-50%, -50%); } -// 隐藏文字 .text-hiden { font-size: 0; line-height: 0; @@ -22,15 +19,8 @@ border: 0; } -// 文字超长省略 .text-ellipsis { white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } - -// 块居中 -.layout { - margin: 0 auto; - width: @global-body-width; -} diff --git a/packages/client/public/styles/common/normalize.less b/packages/client/public/styles/common/normalize.less new file mode 100644 index 0000000..a64c02c --- /dev/null +++ b/packages/client/public/styles/common/normalize.less @@ -0,0 +1,349 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + +html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ + +main { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: .67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, 'monospace'; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, 'monospace'; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -.25em; +} + +sup { + top: -.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove the border on images inside links in IE 10. + */ + +img { + border-style: none; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: .35em .75em .625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ + +/** + * Add the correct display in IE 10+. + */ + +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ + +[hidden] { + display: none; +} diff --git a/packages/client/public/styles/common/reset.less b/packages/client/public/styles/common/reset.less deleted file mode 100644 index 839774b..0000000 --- a/packages/client/public/styles/common/reset.less +++ /dev/null @@ -1,165 +0,0 @@ -html, -body, -h1, -h2, -h3, -h4, -h5, -h6, -dl, -dt, -dd, -ul, -ol, -li, -p, -blockquote, -pre, -hr, -figure, -table, -caption, -th, -td, -form, -fieldset, -legend, -input, -select, -button, -textarea, -menu { - margin: 0; - padding: 0; -} - -header, -footer, -section, -article, -aside, -nav, -hgroup, -address, -figure, -figcaption, -menu, -details { - display: block; -} - -table { - border-collapse: collapse; - border-spacing: 0; -} - -caption, -th { - text-align: left; - font-weight: normal; -} - -html, -body, -fieldset, -img, -iframe, -abbr { - border: 0; -} - -i, -cite, -em, -var, -address, -dfn { - font-style: normal; -} - -[hidefocus], -summary { - outline: 0; -} - -li { - list-style: none; -} - -h1, -h2, -h3, -h4, -h5, -h6, -small { - font-size: 100%; -} - -sup, -sub { - font-size: 40%; -} - -pre, -code, -kbd, -samp { - font-family: inherit; -} - -q::before, -q::after { - content: none; -} - -p { - margin: 0 0 9px; -} - -textarea { - overflow: auto; - resize: none; -} - -label, -summary { - cursor: default; -} - -a, -button { - cursor: pointer; -} - -h1, -h2, -h3, -h4, -h5, -h6, -em, -strong, -b { - font-weight: bold; -} - -del, -ins, -u, -s, -a, -a:hover { - text-decoration: none; -} - -body, -textarea, -input, -button, -select, -keygen, -legend { - font: 14px/1.8 "Microsoft YaHei UI", "Microsoft YaHei", Arial, SimSun, "Segoe UI", Tahoma, Helvetica, sans-serif; - outline: 0; -} diff --git a/packages/client/public/styles/common/variable.less b/packages/client/public/styles/common/variable.less index 6453b97..b3c0ace 100644 --- a/packages/client/public/styles/common/variable.less +++ b/packages/client/public/styles/common/variable.less @@ -9,14 +9,42 @@ @success: #28a745; @warning: #fd7e14; @black: #0a0a0a; +@black-light: #555; @white: #fefefe; -@light-gray: #e6e6e6; +@white-dark: #f5f5f5; +@gray-light: #e6e6e6; @gray: #cacaca; -@dark-gray: #8a8a8a; +@gray-dark: #8a8a8a; // Global +@screen: ~"only screen and (max-width: 960px)"; @global-body-width: 960px; -@global-block-padding: 20px 30px; +@global-font-color: @black-light; +@global-bg-color: @white-dark; +@global-link-color: @black-light; +@global-link-hover-color: darken(@theme-color, 10%); + +// Font Families +@font-family-base: 'Source Sans Pro', 'Helvetica Neue', Arial, sans-serif; +@font-family-serif: Athelas, STHeiti, Microsoft Yahei, serif; +@font-family-code: Consolas, Monaco, Menlo, Consolas, monospace; + +// Font Size +@font-size-base: 16px; +@font-size-small: @font-size-base - 2px; +@font-size-smaller: @font-size-base - 4px; +@font-size-large: @font-size-base + 2px; +@font-size-larger: @font-size-base + 4px; + +// Font Weight +@font-weight-lighter: 200; +@font-weight-light: 300; +@font-weight-normal: 400; +@font-weight-bold: 600; +@font-weight-bolder: 700; + +// Line Height +@line-height-base: 2; // Zinex 等级 @zIndex-0: -1; diff --git a/packages/client/public/styles/includes/aider.less b/packages/client/public/styles/includes/aider.less index 21aa870..b132438 100644 --- a/packages/client/public/styles/includes/aider.less +++ b/packages/client/public/styles/includes/aider.less @@ -9,7 +9,7 @@ .title { padding: 10px 20px; - border-bottom: 1px solid @light-gray; + border-bottom: 1px solid @gray-light; a { float: right; @@ -20,6 +20,7 @@ } .content { + margin: 0; padding: 10px 20px; } @@ -45,7 +46,7 @@ height: 30px; line-height: 30px; font-size: 13px; - color: @dark-gray; + color: @gray-dark; a { display: block; diff --git a/packages/client/public/styles/includes/footer.less b/packages/client/public/styles/includes/footer.less index 6d9d7c8..ab5e9c2 100644 --- a/packages/client/public/styles/includes/footer.less +++ b/packages/client/public/styles/includes/footer.less @@ -1,18 +1,84 @@ .footer { - margin-top: 50px; - height: 120px; - text-align: center; + background: @white; + border-top: 1px solid @gray-light; + + @media @screen { + text-align: center; + } + + & > .layout { + display: flex; + padding: 20px 0; + + @media @screen { + display: none; + } + } + + .info { + flex: 0 0 240px; + font-size: @font-size-small; + + span.mints { + margin-right: 10px; + } + + .contact { + span { + display: block; + } + } + } - .link { - a.practice { - font-size: 30px; - line-height: 1; + ul.about { + flex: auto; + display: flex; + margin: 0; + + li { + flex: 1; + padding: 0 20px; + } + + a { + display: block; + font-size: @font-size-smaller; + } + } + + .mobile-link { + display: none; + margin: 10px 0; + font-size: @font-size-small; + + @media @screen { + display: block; + } + + .divider { + margin: 0 4px; } } .copy { + background: rgba(@theme-color, .1); + p { - margin: 10px 0 0; + margin: 0; } } } + +.back-top { + display: none; + position: fixed; + right: 40px; + bottom: 40px; + width: 36px; + color: @white; + background: darken(@theme-color, 10%); + text-align: center; + border-radius: 6px; + z-index: @zIndex-5; + cursor: pointer; +} diff --git a/packages/client/public/styles/includes/header.less b/packages/client/public/styles/includes/header.less index 51147db..7bba569 100644 --- a/packages/client/public/styles/includes/header.less +++ b/packages/client/public/styles/includes/header.less @@ -1,34 +1,37 @@ .header { height: 55px; - line-height: 55px; box-shadow: 0 1px 4px rgba(0, 0, 0, .1); - background-color: #fff; + background-color: @white; - & > .inner { - position: relative; - .layout(); + .layout { + display: flex; + align-items: center; + + @media @screen { + justify-content: space-between; + } } .logo { - position: absolute; - top: 0; - left: 0; + flex: 0 0 55px; .size(55px); - - span { - .text-hiden; - } } .search { position: relative; - float: left; + flex: 0 0 200px; margin-left: 60px; + margin-right: 60px; + + @media @screen { + display: none; + } input { - padding-right: 30px; + padding: 6px 10px; + font-size: @font-size-small; border: none; - border-bottom: 1px solid @light-gray; + border-bottom: 1px solid @gray-light; &:hover, &:focus { @@ -38,103 +41,142 @@ button { position: absolute; + top: 5px; right: 10px; - top: 15px; border: none; background: transparent; outline: none; + cursor: pointer; } } .menu { - float: left; - margin-left: 60px; + flex: auto; + margin: 0; li { display: inline-block; margin-right: 20px; } + + @media @screen { + display: none; + } } - .right { - position: absolute; - top: 0; - right: 0; - padding: 0 10px; - line-height: 55px; + .account { + flex: 0 0 100px; - .account { - .divider { - margin: 0 10px; - } + @media @screen { + display: none; + } + + & > .divider { + margin: 0 10px; } - .action { + .avatar { display: inline-block; - margin-right: 10px; + .size(40px); + vertical-align: middle; - a { - font-size: 20px; + img { + border-radius: 50%; + } + } + + .nickname { + display: inline-block; + margin-left: 20px; + vertical-align: middle; + } - & + a { - margin-left: 10px; + .drop-menus { + display: none; + position: absolute; + top: 55px; + left: 50%; + width: 120px; + color: @white; + text-align: center; + background: #a4d1aa; + transition: opacity .3s; + z-index: @zIndex-4; + transform: translateX(-50%); + + .item { + line-height: 34px; + cursor: pointer; + + a { + display: block; + color: #fff; } } + + .divider { + display: block; + margin: 0; + width: 100%; + height: 1px; + background: #ddd; + } } + } - .user { - position: relative; - display: inline-block; - padding: 0 15px; + .title { + display: none; + flex: auto; + margin: 0; + text-align: center; - .avatar { - display: inline-block; - .size(40px); + @media @screen { + display: block; + } + } - vertical-align: middle; + .navbar { + display: none; + position: relative; + flex: 0 0 50px; + .size(50px); - img { - border-radius: 50%; - } + @media @screen { + display: block; + } + + span { + position: absolute; + margin-top: -1px; + margin-left: -11px; + left: 50%; + top: 50%; + width: 22px; + height: 2px; + background-color: @theme-color; + transition: transform .3s; + + &:nth-child(1) { + transform: translateY(7px) rotate(0deg); } - .nickname { - display: inline-block; - margin-left: 20px; - vertical-align: middle; + &:nth-child(3) { + transform: translateY(-7px) rotate(0deg); } + } - .drop-menus { + &.open { + span:nth-child(1) { + transform: rotate(45deg); + } + + span:nth-child(2) { display: none; - position: absolute; - top: 55px; - left: 50%; - width: 120px; - color: @white; - text-align: center; - background: #a4d1aa; - transition: opacity .3s; - z-index: @zIndex-4; - transform: translateX(-50%); - - .item { - line-height: 34px; - cursor: pointer; - - a { - display: block; - color: #fff; - } - } + } - .divider { - display: block; - margin: 0; - width: 100%; - height: 1px; - background: #ddd; - } + span:nth-child(3) { + transform: rotate(-45deg); } } } diff --git a/packages/client/public/styles/index.less b/packages/client/public/styles/index.less index 4534ee5..0c7f575 100644 --- a/packages/client/public/styles/index.less +++ b/packages/client/public/styles/index.less @@ -1,17 +1,17 @@ @charset 'utf-8'; @import './common/variable.less'; -@import './common/reset.less'; +@import './common/normalize.less'; @import './common/mixin.less'; -@import './common/global.less'; @import './common/icon.less'; @import './common/markdown.less'; +@import './common/base.less'; @import './includes/header.less'; @import './includes/footer.less'; @import './includes/aider.less'; -@import './pages/user.less'; @import './pages/topic.less'; -@import './pages/reply.less'; -@import './pages/transform.less'; -@import './pages/exception.less'; -@import './pages/notice.less'; +// @import './pages/user.less' +// @import './pages/reply.less'; +// @import './pages/transform.less'; +// @import './pages/exception.less'; +// @import './pages/notice.less'; diff --git a/packages/client/public/styles/pages/topic/detail.less b/packages/client/public/styles/pages/topic/detail.less index 9493a77..95d20e3 100644 --- a/packages/client/public/styles/pages/topic/detail.less +++ b/packages/client/public/styles/pages/topic/detail.less @@ -30,7 +30,7 @@ padding: 0 3px; font-size: 10px; color: @white; - background: @dark-gray; + background: @gray-dark; border-radius: 6px; } } @@ -50,7 +50,7 @@ .location { margin-left: 6px; font-size: 12px; - color: @dark-gray; + color: @gray-dark; } } @@ -66,7 +66,7 @@ .text-ellipsis; font-style: italic; - color: @dark-gray; + color: @gray-dark; font-size: 13px; } } @@ -101,7 +101,7 @@ span { font-size: 13px; - color: @dark-gray; + color: @gray-dark; & + span { margin-left: 10px; diff --git a/packages/client/public/styles/pages/topic/list.less b/packages/client/public/styles/pages/topic/list.less index 89ade70..bcb5e62 100644 --- a/packages/client/public/styles/pages/topic/list.less +++ b/packages/client/public/styles/pages/topic/list.less @@ -1,16 +1,18 @@ .tab-list { - height: 40px; - line-height: 40px; - border-bottom: 1px dashed @light-gray; + padding: 0 20px; + height: 36px; + line-height: 36px; + border-bottom: 1px dashed @gray-light; a { - padding: 5px 10px; + padding: 0 10px; margin-right: 10px; font-size: 16px; + vertical-align: top; &.active { - background: @theme-color; color: @white; + background: @theme-color; } } } @@ -46,7 +48,7 @@ line-height: 20px; font-size: 12px; color: @white; - background: @dark-gray; + background: @gray-dark; border-radius: 2px; text-align: center; @@ -97,3 +99,19 @@ } } } + +.empty { + margin: 32px 0; + font-size: @font-size-small; + text-align: center; + color: rgba(0, 0, 0, .25); + + img { + margin-bottom: 8px; + height: 40px; + } + + p { + margin: 0; + } +} diff --git a/packages/client/views/includes/empty.pug b/packages/client/views/includes/empty.pug new file mode 100644 index 0000000..e69de29 diff --git a/packages/client/views/includes/footer.pug b/packages/client/views/includes/footer.pug index e8b3867..0944270 100644 --- a/packages/client/views/includes/footer.pug +++ b/packages/client/views/includes/footer.pug @@ -1,10 +1,40 @@ .footer - .link - a.practice(href="https://github.com/mintsweet/practice", target="_blank")  + .layout + .info + .title + span.mints.mints-home + span Mints. + p.copyright 蜀ICP备17043710号-1 + .contact + span 联系我们: + a.mints.mints-github(href="") + ul.about + li + .title About + .links + a(href="") 关于本站 + a(href="") 反馈与建议 + a(href="") 加入我们 + li + .title 开发者 + .links + a(href="") 开发者指南 + a(href="") API + li + .title 客户端 + .links + a(href="") APP + .mobile-link + a(href="") 关于本站 + span.divider · + a(href="https://github.com/mintsweet/practice", target="_blank") 源码 + span.divider · + a(href="") 反馈与建议 .copy - p © 2018 - 青湛(GitHub/mintsweet) + .layout + p © 2019 All Rights Reserved .back-top - i.practice  + i.mints.mints-up //- scripts script(src="/static/lib/jquery/jquery-3.3.1.min.js") script(src="/static/js/main.js") diff --git a/packages/client/views/includes/header.pug b/packages/client/views/includes/header.pug index 12ce6eb..2f20646 100644 --- a/packages/client/views/includes/header.pug +++ b/packages/client/views/includes/header.pug @@ -1,39 +1,43 @@ .header - .inner - h1.logo - a(href="/") - img(src="/static/img/logo.png") - span Mints - 薄荷糖社区 + .layout + a.logo(href="/", title=config.name) + img(src="/static/img/logo.png") form.search(action="/topics/search") input(type="text", name="q", required, placeholder="请输入搜索内容", autocomplete="off") - button.practice(type="submit")  + button.mints.mints-search(type="submit") ul.menu - each item in config.site.MENUS + each item in config.menus li if item.url.indexOf('http') === 0 a(href=item.url, target="_blank") #{item.name} else a(href=item.url) #{item.name} - .right - if user - .action - a.practice(href="/topics/create", title="发布主题")  - a.practice(href="/notice/user", title="查看消息")  - .user - .avatar - img(src=user.avatar) - .nickname #{user.nickname} - .drop-menus - .item - a(href=`/user/${user.id}`) 个人主页 - span.divider - .item - a(href="/signout") 退出登录 - else if config.ALLOW_SIGNUP - .account - a(href="/signin") 登录 - span.divider | - a(href="/signup") 注册 - else - .account - a(href="/auth/github") 使用 GitHub 登录 + if user + .account + .avatar + img(src=user.avatar) + .nickname #{user.nickname} + .drop-menus + .item + a(href="/topics/create") 发布主题 + span.divider + .item + a(href="/notice/user") 查看消息 + .item + a(href=`/user/${user.id}`) 个人主页 + span.divider + .item + a(href="/signout") 退出登录 + else if config.ALLOW_SIGNUP + .account + a(href="/signin") 登录 + span.divider | + a(href="/signup") 注册 + else + .account + a(href="/auth/github") 使用 GitHub 登录 + h1.title #{config.name} + .navbar + span + span + span diff --git a/packages/client/views/includes/no_content.pug b/packages/client/views/includes/no_content.pug deleted file mode 100644 index e0defcb..0000000 --- a/packages/client/views/includes/no_content.pug +++ /dev/null @@ -1,3 +0,0 @@ -.no-content - img(src="/static/img/no_content.png", alt="暂无内容") - span.placeholder 暂无内容 diff --git a/packages/client/views/layout.pug b/packages/client/views/layout.pug index e766084..3aaa4bb 100644 --- a/packages/client/views/layout.pug +++ b/packages/client/views/layout.pug @@ -2,20 +2,21 @@ doctype html html head meta(charset="utf-8") - meta(name="viewport", content="width=device-width, initial-scale=1.0") - meta(name="description", content=config.site.DESCRIPTION) - meta(name="keywords", content=config.site.KEYWORDS) - meta(name="author", content=config.site.AUTHOR) - title #{title} - #{config.site.NAME} - if config.site.ICON - link(rel="shortcut icon", href=config.site.ICON, type="image/x-icon") + meta(name="viewport", content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1") + meta(name="description", content=config.description) + meta(name="keywords", content=config.keywords) + meta(name="author", content=config.author) + title #{title} - #{config.name} + link(rel="shortcut icon", href="/static/img/favicon.ico", type="image/x-icon") //- styles block head link(rel="stylesheet", href="/static/css/index.css") body - block header - include ./includes/header.pug - .main - block content - block footer - include ./includes/footer.pug + .container + block header + include ./includes/header.pug + .main + block content + block footer + include ./includes/footer.pug + .mobile-menu diff --git a/packages/client/views/pages/index.pug b/packages/client/views/pages/index.pug index 4bd9d1a..f5fb921 100644 --- a/packages/client/views/pages/index.pug +++ b/packages/client/views/pages/index.pug @@ -10,14 +10,12 @@ block content a(href="?tab=" + item.tag) #{item.name} include ./topic/list.pug aside.asider - .block.no-title - a(href="https://github.com/mintsweet/practice", target="_blank") 查看源码 include ../includes/user_ranking.pug include ../includes/no_reply_topic.pug .block .title 友情社区 ul.content - each item in config.site.FRIEND_LINK + each item in config.friend_link li a(href=item.link, target="_blank") img(src=item.logo) diff --git a/packages/client/views/pages/topic/list.pug b/packages/client/views/pages/topic/list.pug index e7662b9..8be2fcb 100644 --- a/packages/client/views/pages/topic/list.pug +++ b/packages/client/views/pages/topic/list.pug @@ -26,7 +26,9 @@ dl.topic-list else | #{topic.create_at} else - include ../../includes/no_content.pug + .empty + img(src="/static/img/empty.svg", alt="暂无内容") + p.description 暂无内容 - var baseUrl = `/?tab=${typeof tab !== undefined ? tab : ''}&page=` if topics.length > 0 ul.pagination