From 49f814598608f28dc3702bf7355bdd31d21cfad2 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 17 Nov 2020 10:02:02 +0000 Subject: [PATCH 01/56] New follow icon is inside the header icons div --- webapp_timeline.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/webapp_timeline.py b/webapp_timeline.py index 05a60a33e..942b7f6ed 100644 --- a/webapp_timeline.py +++ b/webapp_timeline.py @@ -1027,12 +1027,13 @@ def headerButtonsTimeline(defaultTimeline: str, '' + if not newsHeader: + tlStr += followApprovals + if not iconsAsButtons: # end of headericons div tlStr += '' - if not newsHeader: - tlStr += followApprovals # end of the button header with inbox, outbox, etc tlStr += ' \n' return tlStr From 392c4115c6e88facc51299041517107db62e833b Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 17 Nov 2020 10:29:28 +0000 Subject: [PATCH 02/56] Style of replied to handle --- epicyon-profile.css | 8 ++++++++ webapp_post.py | 22 ++++++++++++++-------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/epicyon-profile.css b/epicyon-profile.css index 94545124d..fe92bbb76 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -217,6 +217,10 @@ blockquote p { margin: -4px 5px; } +.imageAnchor { + font-family: var(--header-font); +} + .imageAnchor:focus img{ border: 2px solid var(--focus-color); } @@ -530,6 +534,10 @@ a:focus { background: var(--link-bg-color); } +.announceOrReply { + font-family: var(--header-font); +} + .container img.announceOrReply { float: none; width: 30px; diff --git a/webapp_post.py b/webapp_post.py index 002f89c6e..2b67010e6 100644 --- a/webapp_post.py +++ b/webapp_post.py @@ -758,7 +758,8 @@ def individualPostAsHtml(allowDownloads: bool, iconsPath + '/repeat_inactive.png" ' + \ 'class="announceOrReply"/>\n' + \ ' ' + \ + postJsonObject['object']['id'] + '" ' + \ + 'class="announceOrReply">' + \ announceDisplayName + '\n' # show avatar of person replied to announceActor = \ @@ -804,7 +805,8 @@ def individualPostAsHtml(allowDownloads: bool, '/repeat_inactive.png" ' + \ 'class="announceOrReply"/>\n' + \ ' @' + \ + postJsonObject['object']['id'] + '" ' + \ + 'class="announceOrReply">@' + \ announceNickname + '@' + \ announceDomain + '\n' else: @@ -816,7 +818,7 @@ def individualPostAsHtml(allowDownloads: bool, 'class="announceOrReply"/>\n' + \ ' @unattributed\n' + '" class="announceOrReply">@unattributed\n' else: titleStr += \ ' ' + \ @@ -826,7 +828,8 @@ def individualPostAsHtml(allowDownloads: bool, '/repeat_inactive.png" ' + \ 'class="announceOrReply"/>\n' + \ ' @unattributed\n' + postJsonObject['object']['id'] + '" ' + \ + 'class="announceOrReply">@unattributed\n' else: if postJsonObject['object'].get('inReplyTo'): containerClassIcons = 'containericons darker' @@ -892,7 +895,8 @@ def individualPostAsHtml(allowDownloads: bool, 'class="announceOrReply"/>\n' + \ ' ' + \ '' + replyDisplayName + '\n' + '" class="announceOrReply">' + \ + replyDisplayName + '\n' # benchmark 13.7 if not allowDownloads: @@ -953,7 +957,8 @@ def individualPostAsHtml(allowDownloads: bool, iconsPath + '/reply.png" ' + \ 'class="announceOrReply"/>\n' + \ ' @' + \ + inReplyTo + '" ' + \ + 'class="announceOrReply">@' + \ replyNickname + '@' + \ replyDomain + '\n' else: @@ -967,7 +972,7 @@ def individualPostAsHtml(allowDownloads: bool, '/reply.png" class="announceOrReply"/>\n' + \ ' @unknown\n' + '" class="announceOrReply">@unknown\n' else: postDomain = \ postJsonObject['object']['inReplyTo'] @@ -986,7 +991,8 @@ def individualPostAsHtml(allowDownloads: bool, 'class="announceOrReply"/>\n' + \ ' ' + postDomain + '\n' + '" class="announceOrReply">' + \ + postDomain + '\n' # benchmark 14 if not allowDownloads: From 1fab4453f578de0cdc3a6612969d09b2b853df5c Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 17 Nov 2020 10:48:56 +0000 Subject: [PATCH 03/56] Pixelated search icon --- theme/rc3/icons/search.png | Bin 1446 -> 1405 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/theme/rc3/icons/search.png b/theme/rc3/icons/search.png index 05b14c0736f7db42a1a5fdce8910a85c692ca94c..9e1458fe74c3e9a3028741799c1fec0008d554dc 100644 GIT binary patch delta 1160 zcmV;31b6$U3;ha^Bmwr3CC7hlm`B@^#KUg*iUfkZeBRy0_$<(i$agP%R{zoaBtF;6 zE}yi_mqzG(IY9cg_*>$qh2;?uzYdt*uD%d?cAs;cUsqFxqWQ|G7;bg8`m;m!B>T0D zVz?E3+ohm*tg!)kk1ZZ3jS4XopMer}sx)crwoyZfi3fuTGdGrPb1;7@++=Y|tI%YV zB3&FT8;>Bes6Aq#y>8j-HFB)n2~(NijPS}2OZdCNUnybEwj`qH53LXvugpRii`=R) z3qWXI+;j_kmkWP<${(aE2B;YUeH;$3%b6-MaVE>!2`jQj9co zT=4sPsne{>KqWWF=1!{Cr<4tPKvj;U;gW2tZ)^VbX8HjNr5Vu7D z3C)XHbV`XAxy39N#->n4kh<7}PKy{2ra`Qe9_&8I{S>#L{!`repU8!U?!O=xfbM&4 zUr_7ocdl(>=PrL-nnuCytCo~fP`um>#|j>F{Yd?08{)ro@OJce^mg=i^mg=i^mg>W zaD>0rXU9LD;V)*EJ;iUV_Nf2>0flKpLr_UWLm+T+Z)Rz1WdHzpoPCi!NW(xJ#a~lJ zsTC1Bs5oS(E?N*3anvdlp+cw?T6HkF^b49aBq=VAf@^=l!H>nNgNw7S4z7YA_yOYN z=%nZ(CH^ldw21ZKxF7HCJ?`ECLbb>=t8E<6blXhCqGBq&Dt5f03%v+n6azA|j5$e) zqviOzhmWs!5uVlh+@GUc%~%ZZiNv$aFm2)u;^|G>;Ji;9VtH95J|`YC>4L*{h@IUz7t(Bde@REX2 zp#8;hK8AsgU7%KRobO}Dsht4+XW&Y2_)Aq_=95qKN<#}D0X^Hm#dSkd_JGSBp#RB` zP1%+FG=*#yct4|WN&|hjKw!=5t-g=b2OvpZ#czOvLtrFF+3PLd-PzpRzh~(tr)0Q04=R& zz`^+c|NjB(3;Hku04nN4nQaw@(-X4ei(xt#$bjq7#kP{ a1ONb7$VKzvqx%2=0000Op#IFOUx2rEip55mh=hxMgp=iD`Du!E~t^VwgJ;{D8 zqZn>Q-*zb|9&2ns-eZdgN~1yyDl<@`PL(E&-8O0nG4WtS%iLJD&BcGXaFfL;twNJc ziga;sYdnGo%>0Oj_PS-S*T}JQCro96vxWMHCH&psuaq!nTM|+9hgOJ-S7srMMQ+uY z1t2spZn_1&%Y{Eaa|=Tk_=m1m^IZJ=y0|ZEwJA&jS*e$`>d996ijP_hs&b-Vxn*c&3i-Ap%3Ro#A z^2d@RhpLJuRn2PZL5tQbIc3c`TV97;HL+xB+05LERTodLp55HNcr9E6XP}l`tavG< zRt^;lRrsoyUtu};kRu&>%26BAr=_MXH*4NXtDU=a920*%ckA9uuYmWn=;eXnWs&kW!49^i|Tjf7pT!ijW?+^&mPoZ4Q96sTE~elW+29iK-?Aq zBs4E((J3Wf(c976(c976(c97g z!V&&fpB?{rhQ9!kcRjX~4FC}U00D$)LqkwWLqi~Na&Km7Y-Iodc$|HaJxIe)6opSy zr9~?Wb`a^1p*mR*6>-!m6rn<>66lU)@9ujs`9RRlqqS;m|s zCDCzx-NVQCyBN>veDBZIr{*jM_(bAaW|%hd2J!T!ZE)Tv4zr@H5}y-~nbaWhBi9v= z-#8as7I=SV*i5J9iNnNVp^cR`W<^sYo+6H_nojvb#$%Q97H6$oWz9bM3qv`5Wtr<# z5hSpPB}fpVpo$X8uo0tOC&faF&f^{Y!>(T;jFN<9r`GPU8gdKLb~K%U`JjGoMeS*IHWi2`}a!rk$U6u%3ictU5NY=AG0I}`$oKx7lh+y%%kv!qOWuBSi;MZF^peP{|x zL#zYpb06b36okL Date: Tue, 17 Nov 2020 10:56:13 +0000 Subject: [PATCH 04/56] Arrow icons --- theme/rc3/icons/pagedown.png | Bin 7825 -> 5817 bytes theme/rc3/icons/pageup.png | Bin 7820 -> 5747 bytes theme/rc3/icons/prev.png | Bin 7952 -> 5890 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/theme/rc3/icons/pagedown.png b/theme/rc3/icons/pagedown.png index 79363393c6939f1f1ea78759510aa0f1a6663d14..8b720ad59ab066fa617b2d4d792099c2f306d3d2 100644 GIT binary patch literal 5817 zcmV;q7DnlbP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+U=WJawI*Dgx`6JIRf|PI9$!<27UbbKt^uLlzvrB zKectqq?95fxd0A_1B_DhU;n$*|L`wnos|zM#}cFFpD(`H$}d@;e`WtP+V7vw*W~Y) z>+1f7<&xvooj+5(?yp=Aj}P4DFzxla%GWzKUjyA{z6NwMv*nlZx*%uIb>pvr$~?cs zlGF22n?0}nx^XY%`gUm#eIG>rR?ioF!b&4>m$P;{$>}5%Xsrz{QQOqpN+pw{4}w z5sfKt+qu5i8hNdGc2|AGqVYnMRyXU&XSlIpa<@Mg`AU2Teoypj> zVk{P4%6KzOHOtKX+D&JP-cE~8thL>`eJ$goV!IPRdHFKSCRf~W8DDlg6+ZLM-q&LG zyk*bVO=jj{xYZg4GkoORFZI)#fAXc)>S7|J^W9dg%L=kshImeXau*IU>+)OJ2EKh= z?$=NF0jhW~Y%^yzSamx?v|t|Ca@)_2`vR{gDvV0w8UPb9cVIDufH&a41rv=<)+S@H zW5z+1m0Ra+!viJ+J6NRk&PA(|%~s~-Gs*0GZLrbGWw;4P1Q%VxH^o()<$VA@$!9QB z2{9i+h#`fnLJ2jx=wpa6rYIy=lS@8@6jMq$l~l9KK8GB0$~l)@i!BZg3?-ISaw(-& zt11&!#;V+3xzcQN&9~5EOD(t3Y6m{u_t0ZcJ@?Y|<#lGg!VD%% z#bm~{HGOC;E#~fl>9v`ySKDTHcwnUvX6-DHCE&0y=P*vR^5KNy|zBuw6Jc^ zWNn$Xt`PPrbg6CF`1uZXzXc1vK2P4o2?tC9&48)+%-3Btnot7n)b_oungf>cotdKx-6)3zBmoft0J{zs<^AM(Gs#CgYQ*co zH3FdJ?L7iz$ZOETE@cltyNY$iJf;h4g7y$~Giz>R3lhcv<7KpFaK8Hl7Q5`>MDK~+9l2_U?%u|8>`MIfE5csmSGM~pf|Z0Y;9I5$ct=W`CbYf=iA~p* zQkQ*O7slLJVh9N(_zrskthAcy!wZqD-f{C@Sr2e4pU3q&u08rTpWF0OuaV83P{x)O zAhb?M#OgHmTgRB)x8=wQ>@Euzj4+S4+Hf=Hk5r?6!!^I58uc5l`3=>m-*C-us7C#U zYkosD>IbfIy}EwzetCZTT?W~n$E^?0sCU#%2%v}u1EAP;ac-u#-EE?P(cb+3@V-R< z67Qc0KH(;JBSW-{xs3&KHm7BxBc2x<+R#>$lv?c*Tf9(#?Dd5$KEDrHNP_%5R~)Jk zFUy*rhytPY%oReJy&bD~DF)uz;@emCcbWb@(W^ho^zSsWKP}EyH;(uQD>s(dBq5x2 zr-?5lf&1_N)@O(>T=9gJ3n~wyc%ljQGf&7gn+6UEyphD?ef7BEFXhNZ5K0&V+zLlL zGlX0dhB#7WlY^-3@99DPkra_cz3Bn0d?5(6E`H!charBHA|J_NyIXzD3NPI7f|NH} zxRJu91ohyA=bUg$2@g{E43kX_n;6vkju+l&;lCo{zarv4Pef3VE+dewCFTML4f#$~ zo>-QNj?Olrxjb5465-Ueb6|zZ7J(hnBiI8HvzIWaE;?m;-#)FYG)dbF-2xo6Q2Lg46gEmZex08?`oT$~(f#N@lfUC?ark zSe?yISNHZa^d5gOcQETLDylN}A;VBcZzTGDNXYO$jhYZHMr zHX9|*Vh%2=K-JcCfGvG2Cie&@8mg@wi%OTE{T{`13L^hj72AOsbtH%+Xb;{&AT?r=` z;n=jf4wID}w2YWWFjDXZLpmB@*?XfxX*I`eYK%lRS#b#bO0$+hH49_urr0EHJ~4~0 zxx#KP2ainzlr!4mqk^qsp;A8es?KrdjSe@>-n$pbNnM=1OI`~QuAD!>{4%m3A0p%* zTxZV!Ft5>bUxVs(O+r4IKN(!Tk8Zw-J6|NeCD)r7ursdR zJ{$#BAO)Gh9pG)&5@rfZ>U}JXqhsIxji?2pzp}PItT8#-$?7ebCVP5-IC8^BBZ@m% zkkjID6S_{dr@Q)sfFC}nU7|P>~lgO*kJljT0+2>=@wq=tiD|7 ze!#F>xirHdB)nYWNYa$FV@@V<(PpLyu8`4^oXAv03!x?jr4i2__>WwQpUy}&&4aO< zZo+bQkcnp6(GSh_@}N0*m)E2Gw^?=En-j9LtIkN$nrZqp#ZoN^J#^%WOGJB@2=l!i zA1{4*8Dxu_4++IkwK#ddJ-sRJ;vhGH{-(DA`3(JGaP?{QzZqP;j1F*r(g2~ss;R_P zrO^rj&N?uPvnCBycw74@ZD%v}a)Su;0t`UqYsgt{AP>Py*#!tCkaALjxi0p(xJPaB z5$X|A^XLWu11^Pgdn_ZS2q%}~dYPzSKRP%zrWv{5_?(xPHThd1{}MAMTm{HOKth3~ z#LOmaAM0*)x$?{o9lUvE8Uz6N&|b2jA`KFbXdeli9$>tR5OcC<$JLb(BNJ6c%0UMV zGN`C@pAHMybn>NXSNm|D`q9?Lbz?*CVH$!}WEjwv_z>eDRDd9u-+9h#jeIfNBMk3M}d*e1a zS@z7~Q?k=JQrt8tT@sW4UyzsdHq~-w`=Uh_L=Iu1u^GlTAsF~$G$ZsfH@zT--8OV0 zc!7__h0@@h$}t5Q>!Pd~Q7D_Sf}Cdx9~vNq8AZUKnmc+)X_O8q+PdxLPylMRxRYbE z>^hL27gS5xvx;*lSZo7oPN&rM881=l-54;g0kP07e^qK)U^DzF=8UP75-&Hry|3MY zis^*Ya!m*<+MvuujuF!G-!`1^otq+Xgl~rs-Vo^dLOcRo_NqX-z@Lrb1JSM<{v@L! z)dynuUXWmVw_-kRDeAI%bZ@pIxP~(1jD)nM2GVH`BdrXifyX&PgURw5_q-<#|YJ4r5ro*{sykU!It_2uD`*S zI^d#A9I#aPz`q&^MK%>F%8j)CWs6iP0hN>&IWLP=g2W1C0&p@p=b`XmCzk`i)a9_u zPk6zzse);w#(}z`hMd_jymU&x?v4TuJN&yD0X~|rmFT^d(~XlRLE51EhNc}o5eEne zn<`|DD^7(eu3#8(#U5PYixKB_P$5IVjx6Iw3ND?fkaiwn+(4#H9tQ$^Ac>oH`dVy$Q~#1{0_29xQrRJ`f~g&Gg-9n(sSV)P=&FsSn1QKDh#DQ@bndyB;&B+t zb5NlBN}RRq&{e6(fp40uGLjtz*$7EwXSgAV{pN?Bf|>iNi$p^SNCp;LQ*vIID&Y~d ziIip%$??d|xTF^F5_USF`|oi4HX_wMBv(zdAvqyt06u%dfvDIj4By!x0xOcZsG^$9 zyjY(TJHt7!xX5GR?4>|;n8f0`5`0OvQ>^w^zx?bL^_^c%!}abNKCs=Q8_1MmzDd8F zZJb7#w~8nviaL69Y8l5Dgo_KPSVk*Sd<4ofl$?|0k{T0Mqu?QTxe*&CKOv+(#}FJt zHmkiwDfRN8<`aY`j9zTVx2852+n0Mhs^0|Ur+6gLAK`fF{vD8)(cTsPjbyfIg=DU{ z^kKyc%>WUQIGRcw7&>UvAy_)GCTW5y0}L!7n}uczK1a&Ph0gA%Khk&*-Qv?#v9{d% z)A4E(Ej=(V%L<2TMM#e7Uizg3K7vBb5l{c5`AEJ|{W*CN)>2Yn1?hl=xt)T28<~S=eII)hnt*A3W)5d?rJ1v5Rh|B^>W&MYjN0`;wNrvCpY{Re^S?;-etz{rZSET-q? zeS-!GfH=_VQ4Y%E*0n|&>pe?XP2Pr~q($Cf0Yq@MC=kpJ9}N`6sMxMZgi{9#6=JTr zkCCi&O=Fey#Vfb!I%^!DH&-hq@$vo%O7 z+GQj=Wpb9pl%kvq=vI*5ikcsFPvx{Ij;lx?&1hl@GY(<2lwkMGuXP_di8+TZako+< zDcHJFl(fMp(vt<9F*R9UUCmL}` zuN6)q7f7*Y3p26?@+Rp|l8)8mFxiT`L?zh@0(Oq@M%|<@&fVbvrwDLbH&NIPuIgHv zEwi6Y-=rbhdurnhaQnP^8-R$ilxwX*6B**@RQIGep9buS5&)Hn6hv`YpATQu+u;gg zPJj`u;KD3NVMD&}7}iJ&6I|Fi6B_w72Gs9@K%SPlg@AcPKum}WiPVx5p}O*PJ5&d3 zGUaiyK&Te$D}|}Pg{mm`iKhuxRHm=Ej@$seSsh+c=(K)hJzqNTL)xtgRi!UQspFKBDST zMxSnZx?|)hS`$1FD$J}CDeV|WC1hAMGnjeo@*HT=LEfPzz2|Rx+DivWLP?Xk$k8X3 zqYyfeDmA;pTZibmLG<3$R=cfDRBoWpb84H*?gEkasqYY6>}2b15+OoLT9_EYn_~oX zjG*dOh*M(T?DXZ9r#p(Hj$Dl^439B@piQ=jkrXbb0KY+yRr7NyyxKP}DiqWBT6V^zFsU90CTZJ*eQ)Ps7ZH#vJ*2lpj9 z=~EPWlz@u}H}w8cq^&ZhoI?aYyTX}W9vR@X&nL2|h^HfbM-pfFM2-z`LPh$C45~gZ z3%8ERdxX}ksXE=MwrVjL#t!89@N*YcVM9W6(ow{RQx33NP7Bwy=9pQvP;rtC1B8}EQ&THYO-T6%8~Wg3fIvN5B4y~K zR@3JRgwKz-{OJ=e>X%Qz?KAgFRTl5g$+DbC$^o!Y*;cj7kjRbz^wpe0W)Y#%p2vxZ z^Rm8sPD0Y0X?OR(VYb`*V<)w|K6Wy|J9%~`NlEiO;MA>Z1Twrq9garbj~84ByWn+u z0)myD@z23YEsqCgMubrn)Y`%xb;Ci3L^A?$ee8pEG}s>h^el+__dI@Lv)T_|P&upr z1DG@JoL%`?=Kuf!g=s@WP)S2WAaHVTW@&6?004NLeUUv#!$2IxUsFY?6%jkAIAo|U zS`Za+)G8FALZ}s5buhW~3z{?}DK3tJYr(;f#j1mgv#t)Vf*|+-;^gS0=prTlFDbN$ z_29T4@9sVB-T^|j$TX{M9ME*zOvIvMD!nRpyrK)e2w)TgGP8_1Ns6Q8__~LWuXhoi z)%x6@qg%~b4DgA>v&=AU;tk^IP21qSPaI--StULv9y95J#E)E8JbvSxb6Mb-Av2kn zCk_#dxh7VcnB`54c#1fzYC7c$DUVgoTb#9Gnbq&fUl`2jE6ZG`IfNJ%u>=Vs6qHdw z5jG;U>ZDjm(0;Uqf6(}9VCIwbN<#}D0X^Hm#dSkd_JGSBp#RB`P1%+FG=*#yct4|W zN&|hjKw!=5t-g=b2OvpZ#czOvLtrFF+3PLd-PzpRzh~y5ehdVmV}ns z0000`Nkl6tnaJz~w|VZ#=-L00000NkvXXu0mjf D>eBzg literal 7825 zcmeHMc|4Ts+aDn!p;RauBfDA6SSDNciLsZZq*3ySwh0^8Ff0&`=0mw-t&3i-+yO5pP6~?`~F_v>$<=9b=}W%&&1i=T8fFt zia;O`F@lwuBlvC1dkgS`pRSg^pCAy?U-mn@ave#*P=7Xy#_$E8+)#f23WP9d5J*US zXPR5eaJiWIVpY86_N>S6{2@hGqcn|#a($;~ZhEGa{Za^bOSO`ytgI|g4xi_whmUP6 z)=<8`$C3EH7x}{8qwm6=!Lkv%1JUzUi+2s~PX|voaP9;=<$M|RVNOpRoBKRCP$^%i87?C)xWki}-0I>*2lr@voluKFyMiOuu&4 z)JkIZW+X?~aC%E_fAP}WFf-9zNtyQQ)f=9_wI=4|#QO??qct5}ePJFfxyi=I$2BIN z&ovc^HwJ&YHEJ}2=``%^eag4#cF;o5=gjE&7TEM5<94N-iV6Sm3;?cI?W6GaIal!m zMtszFv@EV8s=G`nsXn|PKYEd!TI3ORqRD4ZHszJKoP*ngmD~KTJ$+&*z72)e4M@Mn zxi@>TZ02L(roDYqljTnV&-uydePSvxV}he+D_+$yJBP(~yN0^U2cCYcSr&F6%}8va zf%H=L1MI-5{Ic?=YNcpX#rzz7bK{RU`!?K&+VW6tVOZ=?gt}y6M?Gj5CSk`_FD7YsPOi&HV+^>_vWdl#X(orw2q}41rz-BWk82cHHa{sUzS*wj z9qeo*7cPlAVA=4=>OE&x1~-zCwZ+Lb?_>d5k&JMKoyDzyv@_~U$)^6YddFVxlp{#W zSy&u9mcC2TLO9BGcj)?Ghkm6)~Bq4?lbRpM^7*_}Pz3ZcC%yJ(GuPg3oDk`Cn- z#4;G|jU897PHuKOejm7lMYo^r#I~NUOr4FFkTse}>A9?T&|=%K*_tx=k*`lY9Np(S z%+-*JMesXf3~U3AFXpzf-`Xv-Adg+ck5)Vmu=l^~n?37zOS#Fb$+Gow?y+Lg;i-a9 znW|TJRv*ZzW9}YI)23dED&)6vJW$bE_u4$@{YYus{h;@`1D}f7r;O@XZ5%Gf4{p@T z7)cGc*v_g=>u z;dUDHMOqA858JC}($0@<&rQ6#Z(f=-YAciA7+~rxm6LVPRU!09tP_ z4C;;#HfV^1rp6P5=T@zo#`TDDL zMMeWMgchLGAb5R>Zz$mDedpr=W)CogINX?Y>0DCxwoBr~PaQLI8C4Fina;9>-}uTq z3p77BB7(xN7B#t#Hk_#q#e`S6n`P~$ueoxnVP#9G>$%H(%?63EHLN|BCSAKkUKx&8|A0CBZ zJxgDYyBz+RekR#tWpT5CLsH;W^jH%IF(yrn*KkpbOKMni!AP}#SovbliOJ9Tn%f8u z%#!h=tG;CQ7_W?ud{MElvElFv=}+l)-T6-G1H}SovQDL1zidzn<;3|VypQfF(N^ZG zICpq!y6&OF248fQE-F~dD9p9ao%Gl+R1#j4UhkQp`D%o=`^g|__mg~Fk9*$*Ur|M! z5_W1``;H3c-PNg#50}fu_}U)z+njF4cvwxh5iL;^^2Or@JTf zjtmyO*w<`-APZ~B$Lf2lm>_r?o*0feagOU@GTn2=m1-&ObG;xB{dAW)PO^FHNp%Mo z-#uy8rAL?rFV3t8a5P+7yKwU~S(#CWX73D%cYa1dH!Jz?Dvw}TXWq)%atZSJ-Gk=Y zx600rT^2o zp1!YljZ#`+%4!+Wk9F&>T!seWOXHw>qT3v(*5R5y3mtQvx=I5MZEh`|qJ+r)gkp-& z!Fd*3J11rck{sHKZ1zkMxi^nr?VfQo?sCE#)#O-2UhL7v7+LIfBeASGOe*BeQxjWp zDYJyRRr1Cuu)*h9`!B|kHfdfJ%0AS4k3RjZO>xxYn?FivPGgH_+vfpOVwujNh5g0b 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 diff --git a/theme/rc3/icons/pageup.png b/theme/rc3/icons/pageup.png index 0b7c335a25e256bf7b43b117020b92bc2be582b5..6018e7275f0b460dbf3ccda301b04cfe1aaac013 100644 GIT binary patch literal 5747 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 literal 7820 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

8yb;wZ{@hu|%99z&2 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 Date: Tue, 17 Nov 2020 12:22:07 +0000 Subject: [PATCH 05/56] Icon changes --- theme/rc3/icons/favicon.ico | Bin 1150 -> 1150 bytes theme/rc3/icons/links.png | Bin 7837 -> 5643 bytes theme/rc3/icons/newswire.png | Bin 1491 -> 3935 bytes theme/rc3/icons/pagedown.png | Bin 5817 -> 3882 bytes theme/rc3/icons/pageup.png | Bin 5747 -> 3895 bytes theme/rc3/icons/person.png | Bin 3065 -> 3877 bytes theme/rc3/icons/prev.png | Bin 5890 -> 3883 bytes theme/rc3/icons/scope_public.png | Bin 1452 -> 6399 bytes theme/rc3/icons/vote.png | Bin 6308 -> 6640 bytes 9 files changed, 0 insertions(+), 0 deletions(-) diff --git a/theme/rc3/icons/favicon.ico b/theme/rc3/icons/favicon.ico index f9c76d5994335794a985a8241fa0613e48d47ce0..3f32cf578cc51d939f51972c098c2a26da8a7f0a 100644 GIT binary patch literal 1150 zcmd5)I|{-;6db`;iH)r(?X0a*S=-p#Sa=MJjWwN!j7~8#_PrbNJ)|U^RN9%{?+SljvY4ZEH=~wUb zhBTXTb;uXel^2J6G5wcpY+cPt-s*!AI1(Eoe*lL&u)6}=3vfHpHwT_eV#I$YBba>w D0!7)g literal 1150 zcmd5%I|{-;6db`;iH)r(?L0y%Ya4qTiyT9+@EAFYb{@bZSa<+IB1GdXGV&63SAvZR zv-94(nf(Ag{z(F^De^ur1~4TkQF-g6PTvK2?a(P?%>SN0&DJ;jzR_@y>duzUlNzNw zPE_6I>b`Azw`YB^%pUvx=|!paKrWhA1Au{toP}!1fH3NBS1Pb45&mIwP2U0gb}4 A^8f$< diff --git a/theme/rc3/icons/links.png b/theme/rc3/icons/links.png index a22fd6eecfa5e1cb23aedc7c13251f05a906c767..ea303bbd4237dfbf04a10c94daaec45686ce694f 100644 GIT binary patch delta 5598 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 literal 7837 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 a)l8P!wY+`2HWxG$LbkNEC@|l?=f42&v?_i8 diff --git a/theme/rc3/icons/newswire.png b/theme/rc3/icons/newswire.png index 23c3a5149590b2bc7c8a138f6a9b73d8dffece34..5a314630e9594c08282e6485475484da91019e88 100644 GIT binary patch literal 3935 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 QGynhq07*qoM6N<$g64jpd;kCd diff --git a/theme/rc3/icons/pagedown.png b/theme/rc3/icons/pagedown.png index 8b720ad59ab066fa617b2d4d792099c2f306d3d2..e11ca1a0c02a9ab2ff285a72cea64cada4230868 100644 GIT binary patch literal 3882 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 literal 5817 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 D>eBzg diff --git a/theme/rc3/icons/pageup.png b/theme/rc3/icons/pageup.png index 6018e7275f0b460dbf3ccda301b04cfe1aaac013..43e2e37b5f6569fb8d489d15eefd7cdfdd1e8ddb 100644 GIT binary patch delta 3878 zcmZvfXEfXk*TqS6=IYU+_a4!EC!-7@M4Kof7-f{vBY#(qM3*3>B_sK* z74E)^1O!ypp--$3W{yEzK7Q~Q?w&4Oh!7taE|*~U7X$>sb5+^a??sVGy0K5j%AStgt(=odcYS6un#r%J(bK=iZy_h@S1p_AerhEt+6uq?u`YmlGx*ER z$hJABcX+jWP~hP;5(-tOGJcO*uz#-jg=y}3_szi)NTkbPn0m3)%jNEG;)Qam(V zZ@_(y0$$a8|Frfg!_lXX5#U5&kMX!*eIz#&b91r>J}>#WdkW56nWB}4E7t=xSH-Js zF}oH#_}P_GjO4uHlK-j9#%!CYM8Q`d9-JxD?w~YPW!d-YFL!DN=lwZnMDYgtimU@$ z`pP0TC3SLEE+V^#8C?@qOv6@e{1{b~@mncS)Fay-J*sYAk5E_W`LVot<^DW_UeyE-5MNO3%2(3k`^|(@S~7?4)?^%s}!LU!P-7 z(b*2ca|Zn)tgxDplogb-N@^`Fd$#n+B{NriO=V`6(Wd_uBqG6To|j5u`Ixr;L}`<+MVj`k2i}(R?{}N5Vx}X2a#q>Eib{{RgE= zKl%&nG2RmywP3b)D=(SDRn#B{KESGr3G;t`fFt|g+jtiPIo`@LU$v7}Pri>#z`7WE zLFzs6yooBqL>}KD^4C<-V={QLr>I=Z@Q~}M>0@`jC^U7 zu7=%b3YX>8oc*no+?(FmT7u}u2GOc-(&8?x;@Q>g_=#7&(sJ1CH*-X;L^XQIu5U|$WYSjS4~k_RNM#ta!G zQArpDER8y&?qVq~m{vr5iP@_L$U`3(4<*%<1iNo97pU$c2WCAvSVJNh(`pTpdiyI8 zE|O~0M3vJ?j%{z%nr4RbvSuY?EY0;K<-Ry*^+(ygW~~B6dsU&3=0ejY?zz+z;f(8LV4N@SRggk|WuZsTU&5%!6vKyK#$2p`HoYuuJX^zI?Df zhk?mvc^+#=Xf9hOK3WcQjW4%$ww+_C2E6-1&(Nf!JkK%Z=b&j;j4 zny@MAM(w9I;|#hN4ZFkl7_x@koR*P_eXPBk;yiy!T5RSa#n~jv48Kx>ld*0L~i72FSe}(>e=~b-|EBdD$|;t=@h)JkqX{46d*{kNcI+r)MfU^<@<2=!O_rh}Dy+iq}vPYM@ z7^N1qa!D;aj#1=byk|$v02ZQ&xo&gfaifnTrsAP8fe1~#t>XT5-_BxSQAolLBiHK1 zoMES0r~H`pud}l^#nZOt&(%Ij6dH&{m}>Z(t}Y2BG?}XT7Bnu>P}Lcm6nWK+k@44K zyFKfXk%*V_Jo2^Tk47J_q;Zn`P25lb4E*YHRhX4yuC zwW7NrhkY6{?gyICVHWPD{aF~^fk;Nzv}SHa5XG8j=nUBz^NSqv#uoGw5Z%t|_iOP< z&9(+SA*=P$>Q*ZFDeYRIpDKP$_@(B7CD3~)`gU46i79@_3ljkFDY&BPFNtUJ_^PHA zE-w7MDGjo!%b)ImyX-cj3iF1X{E0F5orKRhZ1Yx?hLLWw&u1-T1ms9lNzw$oE7G3- z8J@VaJ{cWdxms0OTlkTp!+T1>B#kIMQdYqoMZY5n5qb8>oHU!Rd&K4rS*nV_>r95i zsLf(NMV@y!_5^jnCvo#swnZ+di5%Q#Ha==)k0*XDo^t9(r7iO6>! z^|+7`b%)1s(D_jx%6%)*8BFoALM@!l_9|TgS*^A z*|z1U8SV|Ahl?V8K&r=<*eqD@KwHTc#dj6J0g2JH(C~421SslT1)vwAQdJ)Op4C zQ9CR59pMx)dg6mS2l^N<S4HW&}KEpz@=v#yBuxfa*ke8a2bP!2jIv z5qb?s8#W7T(+f1hImjXulhVD}oN&og7o(N9nt#>4{KUMqvN{A`eRRvM3ye-on+RXX z(hV{O<762b$wdUE4lu_p$JF*^;sNMJd`%O&YjWCdm3iKwaPK+kghSw`_Xe~H3^Ag! zv=d_x^5LmOEnioybW zdQ$}Fd#PPX;EsJca0_|GuwWQ?{qgf(rLuXXyJSHj9m?}i)4-IK8@W_U^I=yJrB>m=kfC@XV%Vq+uZv9>& zRK3lTH;iZQR+Qq)$2Uv`k3WQRCs6Lm;d(-p(2s*6|5$JDf?P+m<=0$1Zows4Ys@@6 zR(9fseR&oe;onC*rcpt!`}xac4PBV$6IzF%d!1d2k&FIY71a&f)-G+IP&-_4{+G^_ zoUpYiV>Uy1Xp_ibWGk_?QRM}2XJ#s5tRotCfgf5L-XH&<*&)p8Egc@#Z!-1sE_T#L z^1Gb2##cBwcTWOR!lAeGj^`C507*_~9#kfiu7d;7?~;o+j

yXazkSZyllu}Ju;8|oCBk0&{!-@$?AfV-FTX8H@CBsAJB2Ptu8Bd;g}Pe^tp zyWy`015P4O)U}`;4%g>ze-dv7#c{B0QvSpdZrJzOi2!Z%Gl4hj4>E*K|Jd3teNFw@ z=!(qe1cU~9w{dJvw?OR7w0z$Us0Ia(zh-;(bcyCtzP-AW`xG7w4cFe`?3O4#ml)-4 z%D)f5TSG%(eyI-E!L?%~>l^7Hu<+k?f^l~0$n{&3*Zgr5IAqtPUx^Qg@ORz~ zN{zD5x))FXmnO!KgEvaeyInau&6jjfmsm`~nXmx$4(xE2!Jo$LhFZi*SN#tSnX+^Z zhWmgiLyU=SaUo-BAdT;!X#ko_WVOsfNGrxvv>xYhG^y@3nNrlOKv7Lh3fx2eAu-mf z)Jze%OdX&8S9;-_j9_~+H`=wRkxPaB+}`jr!kf_S@)ute3SjS34fyVT4L90N?mOy&xzz+Y zq{}o{^{YoDKKn{2>}+Jy^5%XJOroKTk$XR%#Rz&AoS;xq#`@z@T0-<=lLG38h{x%W zJ@c@;=!jh@tJa-2R*__c4=aR_RFqP4vSvm_n<{%NoQNx)7H7YAU4!TdiYJefIIpOI zSL2vb6G$@{sW5TwG|$()1o^{UGftf7S*I1JC@m-i) zS6%iaWe%R?*Y+zSc&DCEx;Va>Q>*do-sUs^4UEc{t-C2D*8K2@C~b!#4eU0@{vIrU z{&Ua={3W4Xy zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3*rk|R3~g#YstdjxuO9NLI?gFXI!AWNp5M*U`| zqotmz5)F_@BtWV8-+z|+5C3AyS^1E1EHP^S`QnSM{E_wfSN5yXe!o6nlmCCXuI@K1 zmmKfz{5RF>`O5Y1_`q!r(>`8T`MP8CHPCJ5Yd|M6TmBdy7v$`@Zu~V+ndgsKa(Z5B zv**2E5ALO0zb@^e?}Nzy)$;|Pu+j)T<*c2~IK5x z2KlhP+q>4!2Ks3H>o4`$`uD#+8Q<3Hy8C3yc=KBP{)P$P8-JVlX<~O@k^OkX4^zHu z=lWf1q> z#e-p+IkUm4+Zmz-^T3wdes(+;ct25LR2tU+n25Opiy;KO(b2eIqS49PWDIu9IH%47vz=U82i?rUkXjQV=%G`V=nfxo8p+*;d3^B$Oh2&~-$)}KFN-3w3YIfP@kYk1kbIG;X;^4qgVo4>JQfjrTGErr$ z%JY>g%{JG33oW+Pax1NN;M08%J@(XdFTD;s+<+!V9BJfHMx91Ym}2@FW}Io}S!P{e zZMo%FSaGG5S6TJ$wacqtetzLKb9v2fPswxX?lrEelx{;9p_3p!!(-MPJf6e@0NRSr zbT-~w@tpWf7fVnC%OZpLMhzn#!-akt8Stw|A*%kuKVh@ zZ@e}n&-LxG6NO?^?T9{}sWvNqwdUpH`^wq%l-9CA<2HN;2b<7jL{o=MF;e$tI&Kx4 z(^MFkhnlWqq&4%1%q%ODF(qw&d|x3g9pw`pBgFk#mc^@rxoS%h+U$nWt*xOXs6}or z?;;b_)kcR&S_|@-x_V|auqwpK9~uiTqvTTzp7!clxE}Eu_sl0FPa&;6FELCWENjle zpbQ{SXaT;mIM=y;tb=W=o5|ZBc6Q$()*FR2%oxiyO;TPQg7pA(>T6#V3h#ZeggDP* zp|&ac1#uGXAi9cKNvNVsU+vGz8 z?E=f}vKBAyuG=!B)-3Pm7I@e}mV#3wv|dPd6C5Qw`YNH}wm#-0L}t>?oFgf{9n4*@VttGI>bW=v(QVCz}w%Jn526mBOnNoBcVZR}w1*QlfoG&CJWG!((zK9YCw}9C1hyA7ijCVAnD8`BpAZWF! zK0NS=sGfLAe;JWIv9-A)+F9skG&SUcsrT`OLLvwwT@vYM4eXSNonObhtrUwW_zQSA z;lqK;B$JRDXL01Yv3|Y_?MV2xT33h(s?7!n=CJKD!95w;r!2AL;T&O3Egy$&bAVv( z;H~osyo8a0&r&zy^)boWD;IG*AmlM(bMSd$4849v-oxbmaYi54=tQ$xGWac+t0u_u zPCTiIJBZ?v;ZVj*BN(#zHcJ|01&{KP?HgILS8njm{(%|$A9w4V+h6YbnZPOoGHg$I zvH${x!Ii+%Oj!6k&>YBYz~H+ZWS%{I$BbGVGUDRbpur|rBDjDv&b1qIltA$T9D!n! zD_?;%ilQsf6|7;Rt^wvIfrLSHEt0saeN@kf zTrU#yNP|gcwE_-Pq6&f(d@v2vAk=rn0`V@1Tkn12tF{{1F)eCoLX@?^N4gwBNAqV z50R)5kID9c%qkVQHYg8wnc5L(ZHOlAYQ-pmf+Y0wPzERMRS)eYGN_0)wmVS3>mpgC zf@I4O-zQCNOi4T`3`09||(Mo$d!}hE#$C-sqqh6mawl9F*>8Ptlo_@nSwxL`Nd# zu#`Hca>8BUolCY%$miR*73%OJvX7~+am9w#sy(#64Ngu$3r6yew@?#$$<9Lcqthtl zydZI#hG;gDVatSTg9&u#kbi0obxmR`5rqrbYBL191Xq^~Rq6?9g7st%ZHC(t`#C~_ z+DJJu64+SO0rMp<@sbFPl9#Dsy$Hh(3hWNz<+{Zfs0ssKrxaF*2&v5}=&0oqs}S~z z(@`B-bV4DJfuJj~VJgp#2b%DZ0wrNK8@j}v-77kxn#3)JzlmzJ(7q-GK-s)IuBTd% zW&tJWP8rv`+JD@nx)<3%Ew*-nwXekcsLXtcWpD~iP9UwA2Xva%V^|D5b2-%o_T*74 zbGcXAp5x^c(iz2cK*gXOGj&NxsUvaLkpK&}uY`WOP(|e@s2cX5%8Er7>|@l+2bNid z-6EMtKBy?k8ctu?)T4(VyskjO(q32&_RK-7bF!zWdQ3$yt;wJ#zXF45g!xf`a9}Sm zJJXGau}Rb2&lB0;nMBn3NT)(eWOsf+U`BZnPH^P5ODb2`$mUdwvK&Zxm@3+3$omnGywmQKI;>Ja4h2?$D|ui<_4<*L4={3(x|A}#qvi8WbC9vp4U+1pi@%4Y zx`BvHMX_h5K@&r?LQ8`RpchyRW*`-!R+>RAQ$I+;&BrLh;v7s3ex1{3&L9$v)9?$5mpsIr`(SMMa zl)yY0+^KDIKscNVg&@Jp7ztbUaEdFvi^~GT?&(yU=Hyece`2^S>AUSpgkr{RWdILK z2|@YC{*Zmej20U4t}|jsn!AO14dtQ9aIo_Vm5|GOH0TfGS*eBz2F;uMruLcj0AFi?h?wr%EV*B)d#$XXWG>iYz;j9jq)#!^IbE;5DB+5$(c4&yv z)UEVGPA%8X&Q$nQbp6UWZQ2T@OoWwGEwv*S!b%3MLw(h8PZz=v#U?$40=8Pp#4Ne9 z1*bj0vedDxCh1~F4QeBf|Q3MjZzba1ABSX7xf(}cZ9+6Kwz&{ zMERH)v&BrRGnrMQk68G?6!AbXNuO+WPzQv^+E=A3WL}5R@q*`Tl z2)~9kbCM$Z6f-_cFkAjN6S4xaSiJ1n%&34GnsgA>6{F53`zJ~63@ELhE>LQS|CEtc zx(ZH%%TdxO0-!h6>u{&4RK6*m4kUl}N7ri)E84n?U*`}BEhuGJsccMuj-td@6b1s2 z(TgCro3j(fhNUgqBcjH$BsM^uO24H8oKek<8g9gZYovX+edD%ozCQ4DU&sA-cVM_o zc+@RWfsEWCl6psC=4WB?;r-oMRDTM_Q)X#tdz~f_^`t-AMN2f`ff!_K35!N8h1HI5 zGcN(7CDF;IVsBD%x!bsbA>9_KHEp@zH?~zZAdNDD@c;IK`~8|bp`M|-09rcg-Q0+2 zLgNbd%0pl)St8oK{J6VBNh;x!wgUfm<`jmQ7@)$NmU2Nf3&9Ny;5AHr`ddAfMDnp0 zs7SuWzl|#O5mx^WRaA6KF_{|i<~31Dc37D877ngy?N8hdEQZ=^s)*|~OeF0EH_cW3_>)<$jx8d|?}Dp9no@FIvIL8Jd7UglSqWKSKnt79?cOQLKCf`l1KEEJ+B;i z$hJ4bwO?v0C21guG~Jqh zLjmK|ndHC%{)LvL<11!U6u$_QiHXu82U8UaQyaLz-0F~XfS^xr7K%=AKL&`oN#`U> z)4xt74d*$l%h^jVCm|SZEDFW4_dtY#XFx|@bL6erf1l40inkYiGL zQ_T=2$>k0g=|U|{UERnKXlu%}AgFI})XMRkd>xR0(i=#WJ7+@f?ETWdxJ%mZyE)K~ zH>bP2*(SW-N{+{uh2mwH*`cbROU$tVo;_5NOeH&lr2y!;5^zNCufR@Ec zLy9xwTxLdqLpIJ>%XH(YTpK(Avb;2+Is>L4JZYruQI{fN99YyIKew`_{qm)m{oKly zM)uXmR=;RuOH6)jVn6lU)T80H8`*EQu_ZZ{R@v;TF+$@g6NR{tDwS$}5(hIhmy8_c zcR6K@XwqQKKI#CYsSuPDsX_YMoe@Z~f`U?FRze|%(dGMB@gk9Uk%&l|n zU5;XLXM2tWL6CG6{3&x2I6=ZspY!sTs1!KIzQ6 z`!1(`WfFt2^$Jpu@h%!EDx~9@5w$LH!wP+Xw~Uuco}}?=s#*b97SkbPL!3yap*S8C zC(1hAGbqm83|i*sZoL~p(h$0uLCTJCb%W;B z&C-bHEywoZ5CnWX9(s8?q<$MyKZTU~ZA|?XQtHj4p|3sUPiI5w>jOU?54}7cQa_z3 z{`N>weR~%8WlEfGcCjK~29WZrhpnGx6Ru@kQ6mD=owMYd2J6(;7<1rUtd)0HkTf_# znL})y?bSU-GDZVZwv*L&$AEZR9Qh;ZE*+#Bh{u3{m2V0xr`pa>Qh|qfKe70H3V4nD z4McoACnr-KBa&6ANGQ-VkxPbRC&x>vreUOY+T=SqOhMVVSH91ScNyl`q#x=Jk5G$9 z*Ow~{zrWl=da~sh33W2<6`AT0qVo^mW4SfQPdDVL!@2vLO1}vIKhnZQ3ShCR%?n>x zLB8d)Y2lE_(2Hj@6L-K$HnT$^Wt9; zf|6El57$ZKgB6}gLB4dhN#P|WsBbyp8{+>&2VclQUA}tofzZJxGWh=Z@*_ahM}%xv z09u&wZ9)(cvApP`6Ye)Y`1HWX`#+O``osnw$lx5oy?5N9{(J=Y9v!InWx{Kfpx&1W zuT_G2Unaa(3F>{B@R|_R`!eCRN>K01gx4xT{q~zjKfSB>Wx{Kfp#CfqI*Qp%E$44> z2ukMu+NG510Lv0Kt(mNXc6ClOi+NM;OabKYn{w&VyS_u_QF5)gWr^*ex{7yQHpvYFn&cT>UXF5KfkMgS9yG; z6!m`P@gt~rK&l^-^siI6dLvrjO5y5r4*wjjJV{h*t^Nmfc&vREF-U0u00D(*LqkwW zLqi~Na&Km7Y-Iodc$|HaJxIeq9K~N#MX41LJE%Bhs4iL%6>-!m6rn<>6nNgNw7S4z7YA_yOYN=%nZ(CH^ldw21ZKxF7HCJ?`ECLbb>=t8E<6 zblXhCqGBq&Dt5f03%v+n6azA|j5$e)qviOzhmWs!5uVlh+@GUc%~%ZZiNv$aFm2)u z;^|G>;Ji;9VtH95J|`YC>4LwAiI9>Klt6Pm7SdMl7dm7{l#%UhJlVizuya~*Q0T7vs300006VoOIv0B8UJ0OxLR@F)NP010qN zS#tmY3ljhU3ljkVnw%H_000McNlirulBHxVgR_s;+T08mLpK~xyiosU5ZfG`XM zr{bsTBYbRqgwGle+R}y!;zAB#XW0Z5m8z1v1#WK!^xyzRqwWowRy;wKHCF9sO2>vJ lJErQq-L&vQ|DgB;zy+~VQO*!JvB&@b002ovPDHLkV1kOU5J&(3 diff --git a/theme/rc3/icons/person.png b/theme/rc3/icons/person.png index 87b3357c28ac4081f985a0862f9fa3d996a2722b..5e5d3edd17aa5bdc5a516f0d5f520edae788645f 100644 GIT binary patch literal 3877 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 njk;vVAx+<00000NkvXXu0mjf5u!B_ literal 3065 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 Hu0mjfzICJ# diff --git a/theme/rc3/icons/prev.png b/theme/rc3/icons/prev.png index d25c7d853ca086294e0ebf9b94f330209ea85722..0d8a2cb5f4c487a85a312a33893f05b923d54da4 100644 GIT binary patch delta 3866 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 literal 5890 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

8yb;wZ{@hu|%99z&2 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 AeEdQ@0+Qek%> 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 delta 6058 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 From ec46767a2738ab49522745b4636c80af9b49085b Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Tue, 17 Nov 2020 20:40:36 +0000 Subject: [PATCH 06/56] Separate header buttons --- webapp_headerbuttons.py | 330 +++++++++++++++++++++++++++++++++++++++ webapp_timeline.py | 332 +--------------------------------------- webapp_utils.py | 11 ++ 3 files changed, 343 insertions(+), 330 deletions(-) create mode 100644 webapp_headerbuttons.py diff --git a/webapp_headerbuttons.py b/webapp_headerbuttons.py new file mode 100644 index 000000000..9fea8bd2b --- /dev/null +++ b/webapp_headerbuttons.py @@ -0,0 +1,330 @@ +__filename__ = "webapp_headerbuttons.py" +__author__ = "Bob Mottram" +__license__ = "AGPL3+" +__version__ = "1.1.0" +__maintainer__ = "Bob Mottram" +__email__ = "bob@freedombone.net" +__status__ = "Production" + + +import time +from datetime import datetime +from happening import todaysEventsCheck +from happening import thisWeeksEventsCheck +from webapp_utils import htmlHighlightLabel + + +def headerButtonsTimeline(defaultTimeline: str, + boxName: str, + pageNumber: int, + translate: {}, + usersPath: str, + mediaButton: str, + blogsButton: str, + newsButton: str, + inboxButton: str, + dmButton: str, + newDM: str, + repliesButton: str, + newReply: str, + minimal: bool, + sentButton: str, + sharesButtonStr: str, + bookmarksButtonStr: str, + eventsButtonStr: str, + moderationButtonStr: str, + newPostButtonStr: str, + baseDir: str, + nickname: str, domain: str, + iconsPath: str, + timelineStartTime, + newCalendarEvent: bool, + calendarPath: str, + calendarImage: str, + followApprovals: str, + iconsAsButtons: bool) -> str: + """Returns the header at the top of the timeline, containing + buttons for inbox, outbox, search, calendar, etc + """ + # start of the button header with inbox, outbox, etc + tlStr = '

\n' + # first button + if defaultTimeline == 'tlmedia': + tlStr += \ + '' + elif defaultTimeline == 'tlblogs': + tlStr += \ + '' + elif defaultTimeline == 'tlnews': + tlStr += \ + '' + else: + tlStr += \ + '' + + # if this is a news instance and we are viewing the news timeline + newsHeader = False + if defaultTimeline == 'tlnews' and boxName == 'tlnews': + newsHeader = True + + if not newsHeader: + tlStr += \ + '' + + tlStr += \ + '' + + # typically the media button + if defaultTimeline != 'tlmedia': + if not minimal and not newsHeader: + tlStr += \ + '' + else: + if not minimal: + tlStr += \ + '' + + isFeaturesTimeline = \ + defaultTimeline == 'tlnews' and boxName == 'tlnews' + + if not isFeaturesTimeline: + # typically the blogs button + # but may change if this is a blogging oriented instance + if defaultTimeline != 'tlblogs': + if not minimal and not isFeaturesTimeline: + titleStr = translate['Blogs'] + if defaultTimeline == 'tlnews': + titleStr = translate['Article'] + tlStr += \ + '' + else: + if not minimal: + tlStr += \ + '' + + # typically the news button + # but may change if this is a news oriented instance + if defaultTimeline != 'tlnews': + tlStr += \ + '' + else: + if not newsHeader: + tlStr += \ + '' + + # show todays events buttons on the first inbox page + happeningStr = '' + if boxName == 'inbox' and pageNumber == 1: + if todaysEventsCheck(baseDir, nickname, domain): + now = datetime.now() + + # happening today button + if not iconsAsButtons: + happeningStr += \ + '' + \ + '' + else: + happeningStr += \ + '' + \ + '' + + # happening this week button + if thisWeeksEventsCheck(baseDir, nickname, domain): + if not iconsAsButtons: + happeningStr += \ + '' + else: + happeningStr += \ + '' + else: + # happening this week button + if thisWeeksEventsCheck(baseDir, nickname, domain): + if not iconsAsButtons: + happeningStr += \ + '' + else: + happeningStr += \ + '' + + if not newsHeader: + # button for the outbox + tlStr += \ + '' + + # add other buttons + tlStr += \ + sharesButtonStr + bookmarksButtonStr + eventsButtonStr + \ + moderationButtonStr + happeningStr + newPostButtonStr + + if not newsHeader: + if not iconsAsButtons: + # the search icon + tlStr += \ + '| ' + \
+                translate['Search and follow'] + \
+                '' + else: + # the search button + tlStr += \ + '' + + # benchmark 5 + timeDiff = int((time.time() - timelineStartTime) * 1000) + if timeDiff > 100: + print('TIMELINE TIMING ' + boxName + ' 5 = ' + str(timeDiff)) + + # the calendar button + if not isFeaturesTimeline: + calendarAltText = translate['Calendar'] + if newCalendarEvent: + # indicate that the calendar icon is highlighted + calendarAltText = '*' + calendarAltText + '*' + if not iconsAsButtons: + tlStr += \ + ' | ' + calendarAltText + \
+                '\n' + else: + tlStr += \ + '' + + if not newsHeader: + # the show/hide button, for a simpler header appearance + if not iconsAsButtons: + tlStr += \ + ' | ' + translate['Show/Hide Buttons'] + \
+                '\n' + else: + tlStr += \ + '' + + if newsHeader: + tlStr += \ + '' + \ + '' + + # the newswire button to show right column links + if not iconsAsButtons: + tlStr += \ + '' + \ + '| ' + translate['News'] + \
+            '' + else: + # NOTE: deliberately no \n at end of line + tlStr += \ + '' + + # the links button to show left column links + if not iconsAsButtons: + tlStr += \ + '' + \ + '| ' + translate['Edit Links'] + \
+            '' + else: + # NOTE: deliberately no \n at end of line + tlStr += \ + '' + + if newsHeader: + tlStr += \ + '' + \ + '' + + if not newsHeader: + tlStr += followApprovals + + if not iconsAsButtons: + # end of headericons div + tlStr += '
' + + # end of the button header with inbox, outbox, etc + tlStr += ' \n' + return tlStr diff --git a/webapp_timeline.py b/webapp_timeline.py index 942b7f6ed..e2857a63a 100644 --- a/webapp_timeline.py +++ b/webapp_timeline.py @@ -7,23 +7,22 @@ __email__ = "bob@freedombone.net" __status__ = "Production" import os -from datetime import datetime import time from utils import removeIdEnding from follow import followerApprovalActive from person import isPersonSnoozed -from happening import todaysEventsCheck -from happening import thisWeeksEventsCheck from webapp_utils import getIconsWebPath from webapp_utils import htmlPostSeparator from webapp_utils import getBannerFile from webapp_utils import htmlHeaderWithExternalStyle from webapp_utils import htmlFooter from webapp_utils import sharesTimelineJson +from webapp_utils import htmlHighlightLabel from webapp_post import preparePostFromHtmlCache from webapp_post import individualPostAsHtml from webapp_column_left import getLeftColumnContent from webapp_column_right import getRightColumnContent +from webapp_headerbuttons import headerButtonsTimeline from posts import isModerator from posts import isEditor @@ -712,333 +711,6 @@ def htmlSharesTimeline(translate: {}, pageNumber: int, itemsPerPage: int, return timelineStr -def htmlHighlightLabel(label: str, highlight: bool) -> str: - """If the give text should be highlighted then return - the appropriate markup. - This is so that in shell browsers, like lynx, it's possible - to see if the replies or DM button are highlighted. - """ - if not highlight: - return label - return '*' + str(label) + '*' - - -def headerButtonsTimeline(defaultTimeline: str, - boxName: str, - pageNumber: int, - translate: {}, - usersPath: str, - mediaButton: str, - blogsButton: str, - newsButton: str, - inboxButton: str, - dmButton: str, - newDM: str, - repliesButton: str, - newReply: str, - minimal: bool, - sentButton: str, - sharesButtonStr: str, - bookmarksButtonStr: str, - eventsButtonStr: str, - moderationButtonStr: str, - newPostButtonStr: str, - baseDir: str, - nickname: str, domain: str, - iconsPath: str, - timelineStartTime, - newCalendarEvent: bool, - calendarPath: str, - calendarImage: str, - followApprovals: str, - iconsAsButtons: bool) -> str: - """Returns the header at the top of the timeline, containing - buttons for inbox, outbox, search, calendar, etc - """ - # start of the button header with inbox, outbox, etc - tlStr = '
\n' - # first button - if defaultTimeline == 'tlmedia': - tlStr += \ - '' - elif defaultTimeline == 'tlblogs': - tlStr += \ - '' - elif defaultTimeline == 'tlnews': - tlStr += \ - '' - else: - tlStr += \ - '' - - # if this is a news instance and we are viewing the news timeline - newsHeader = False - if defaultTimeline == 'tlnews' and boxName == 'tlnews': - newsHeader = True - - if not newsHeader: - tlStr += \ - '' - - tlStr += \ - '' - - # typically the media button - if defaultTimeline != 'tlmedia': - if not minimal and not newsHeader: - tlStr += \ - '' - else: - if not minimal: - tlStr += \ - '' - - isFeaturesTimeline = \ - defaultTimeline == 'tlnews' and boxName == 'tlnews' - - if not isFeaturesTimeline: - # typically the blogs button - # but may change if this is a blogging oriented instance - if defaultTimeline != 'tlblogs': - if not minimal and not isFeaturesTimeline: - titleStr = translate['Blogs'] - if defaultTimeline == 'tlnews': - titleStr = translate['Article'] - tlStr += \ - '' - else: - if not minimal: - tlStr += \ - '' - - # typically the news button - # but may change if this is a news oriented instance - if defaultTimeline != 'tlnews': - tlStr += \ - '' - else: - if not newsHeader: - tlStr += \ - '' - - # show todays events buttons on the first inbox page - happeningStr = '' - if boxName == 'inbox' and pageNumber == 1: - if todaysEventsCheck(baseDir, nickname, domain): - now = datetime.now() - - # happening today button - if not iconsAsButtons: - happeningStr += \ - '' + \ - '' - else: - happeningStr += \ - '' + \ - '' - - # happening this week button - if thisWeeksEventsCheck(baseDir, nickname, domain): - if not iconsAsButtons: - happeningStr += \ - '' - else: - happeningStr += \ - '' - else: - # happening this week button - if thisWeeksEventsCheck(baseDir, nickname, domain): - if not iconsAsButtons: - happeningStr += \ - '' - else: - happeningStr += \ - '' - - if not newsHeader: - # button for the outbox - tlStr += \ - '' - - # add other buttons - tlStr += \ - sharesButtonStr + bookmarksButtonStr + eventsButtonStr + \ - moderationButtonStr + happeningStr + newPostButtonStr - - if not newsHeader: - if not iconsAsButtons: - # the search icon - tlStr += \ - '| ' + \
-                translate['Search and follow'] + \
-                '' - else: - # the search button - tlStr += \ - '' - - # benchmark 5 - timeDiff = int((time.time() - timelineStartTime) * 1000) - if timeDiff > 100: - print('TIMELINE TIMING ' + boxName + ' 5 = ' + str(timeDiff)) - - # the calendar button - if not isFeaturesTimeline: - calendarAltText = translate['Calendar'] - if newCalendarEvent: - # indicate that the calendar icon is highlighted - calendarAltText = '*' + calendarAltText + '*' - if not iconsAsButtons: - tlStr += \ - ' | ' + calendarAltText + \
-                '\n' - else: - tlStr += \ - '' - - if not newsHeader: - # the show/hide button, for a simpler header appearance - if not iconsAsButtons: - tlStr += \ - ' | ' + translate['Show/Hide Buttons'] + \
-                '\n' - else: - tlStr += \ - '' - - if newsHeader: - tlStr += \ - '' + \ - '' - - # the newswire button to show right column links - if not iconsAsButtons: - tlStr += \ - '' + \ - '| ' + translate['News'] + \
-            '' - else: - # NOTE: deliberately no \n at end of line - tlStr += \ - '' - - # the links button to show left column links - if not iconsAsButtons: - tlStr += \ - '' + \ - '| ' + translate['Edit Links'] + \
-            '' - else: - # NOTE: deliberately no \n at end of line - tlStr += \ - '' - - if newsHeader: - tlStr += \ - '' + \ - '' - - if not newsHeader: - tlStr += followApprovals - - if not iconsAsButtons: - # end of headericons div - tlStr += '
' - - # end of the button header with inbox, outbox, etc - tlStr += ' \n' - return tlStr - - def htmlShares(cssCache: {}, defaultTimeline: str, recentPostsCache: {}, maxRecentPosts: int, translate: {}, pageNumber: int, itemsPerPage: int, diff --git a/webapp_utils.py b/webapp_utils.py index 8b3c8bc6a..35a4ee163 100644 --- a/webapp_utils.py +++ b/webapp_utils.py @@ -808,3 +808,14 @@ def headerButtonsFrontScreen(translate: {}, headerStr + \ ' \n' return headerStr + + +def htmlHighlightLabel(label: str, highlight: bool) -> str: + """If the given text should be highlighted then return + the appropriate markup. + This is so that in shell browsers, like lynx, it's possible + to see if the replies or DM button are highlighted. + """ + if not highlight: + return label + return '*' + str(label) + '*' From 64c4220df7881180cb9c715cc3ca47695ec7603b Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 18 Nov 2020 16:13:47 +0000 Subject: [PATCH 07/56] Button header background color --- epicyon-profile.css | 5 +++-- theme/blue/theme.json | 1 + theme/hacker/theme.json | 1 + theme/henge/theme.json | 1 + theme/indymediaclassic/theme.json | 1 + theme/indymediamodern/theme.json | 15 ++++++++------- theme/lcd/theme.json | 1 + theme/light/theme.json | 1 + theme/night/theme.json | 1 + theme/purple/theme.json | 1 + theme/rc3/theme.json | 1 + theme/solidaric/theme.json | 1 + theme/starlight/theme.json | 1 + theme/zen/theme.json | 1 + 14 files changed, 23 insertions(+), 9 deletions(-) diff --git a/epicyon-profile.css b/epicyon-profile.css index fe92bbb76..0c01b2ff3 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -1,6 +1,7 @@ @charset "UTF-8"; :root { + --header-bg-color: #282c37; --main-bg-color: #282c37; --column-left-color: #282c37; --link-bg-color: #282c37; @@ -940,7 +941,7 @@ div.container { } .containerHeader { border: var(--border-width-header) solid var(--border-color); - background-color: var(--main-bg-color); + background-color: var(--header-bg-color); border-radius: var(--timeline-border-radius); padding: var(--header-button-padding); margin: var(--vertical-between-posts-header); @@ -1572,7 +1573,7 @@ div.container { } .containerHeader { border: var(--border-width-header) solid var(--border-color); - background-color: var(--main-bg-color); + background-color: var(--header-bg-color); border-radius: var(--timeline-border-radius); padding: var(--header-button-padding); margin: var(--vertical-between-posts-header); diff --git a/theme/blue/theme.json b/theme/blue/theme.json index e47b82426..54f1ead0f 100644 --- a/theme/blue/theme.json +++ b/theme/blue/theme.json @@ -17,6 +17,7 @@ "gallery-font-size": "35px", "gallery-font-size-mobile": "55px", "main-bg-color": "#002365", + "header-bg-color": "#002365", "column-left-color": "#002365", "text-entry-background": "#002365", "link-bg-color": "#002365", diff --git a/theme/hacker/theme.json b/theme/hacker/theme.json index 14adc6f5f..249a7b2ab 100644 --- a/theme/hacker/theme.json +++ b/theme/hacker/theme.json @@ -6,6 +6,7 @@ "publish-button-at-top": "False", "focus-color": "green", "main-bg-color": "black", + "header-bg-color": "black", "column-left-color": "black", "link-bg-color": "black", "main-bg-color-dm": "#0b0a0a", diff --git a/theme/henge/theme.json b/theme/henge/theme.json index 7d5bae9f6..7bebf737d 100644 --- a/theme/henge/theme.json +++ b/theme/henge/theme.json @@ -14,6 +14,7 @@ "font-size4": "24px", "font-size5": "22px", "main-bg-color": "#383335", + "header-bg-color": "#383335", "column-left-color": "#383335", "text-entry-background": "#383335", "link-bg-color": "#383335", diff --git a/theme/indymediaclassic/theme.json b/theme/indymediaclassic/theme.json index 04cf161fc..53ed186cd 100644 --- a/theme/indymediaclassic/theme.json +++ b/theme/indymediaclassic/theme.json @@ -27,6 +27,7 @@ "font-size4": "24px", "font-size5": "22px", "main-bg-color": "black", + "header-bg-color": "black", "column-left-header-color": "#fff", "column-left-header-background": "#555", "column-left-header-size": "20px", diff --git a/theme/indymediamodern/theme.json b/theme/indymediamodern/theme.json index 3c754d4af..51a7ec867 100644 --- a/theme/indymediamodern/theme.json +++ b/theme/indymediamodern/theme.json @@ -1,5 +1,6 @@ { - "verticals-width": "3px", + "header-bg-color": "#efefef", + "verticals-width": "0px", "newswire-publish-icon": "False", "full-width-timeline-buttons": "False", "icons-as-buttons": "True", @@ -37,7 +38,7 @@ "column-right-border-width": "0px", "column-left-border-color": "black", "column-left-header-color": "black", - "column-left-header-background": "white", + "column-left-header-background": "#efefef", "column-left-header-style": "none", "search-banner-height": "15vh", "search-banner-height-mobile": "10vh", @@ -49,7 +50,7 @@ "icon-brightness-change": "70%", "border-width": "0px", "border-width-header": "0px", - "tab-border-width": "3px", + "tab-border-width": "0px", "tab-border-color": "grey", "button-corner-radius": "0px", "login-button-color": "#25408f", @@ -63,12 +64,12 @@ "newswire-date-moderated-color": "red", "newswire-date-color": "grey", "timeline-border-radius": "0px", - "button-background": "#767674", + "button-background": "#dedede", "button-background-hover": "#555", "button-text-hover": "white", "button-selected": "white", "button-selected-text": "black", - "button-text": "white", + "button-text": "black", "hashtag-fg-color": "white", "publish-button-background": "#25408f", "publish-button-text": "white", @@ -77,10 +78,10 @@ "font-size-button-mobile": "26px", "font-size-publish-button": "14px", "rgba(0, 0, 0, 0.5)": "rgba(0, 0, 0, 0.0)", - "column-left-color": "white", + "column-left-color": "#efefef", "main-bg-color": "white", "main-bg-color-dm": "white", - "link-bg-color": "white", + "link-bg-color": "#efefef", "main-bg-color-reply": "white", "main-bg-color-report": "white", "main-header-color-roles": "#ebebf0", diff --git a/theme/lcd/theme.json b/theme/lcd/theme.json index d17864ec3..5e8819ca2 100644 --- a/theme/lcd/theme.json +++ b/theme/lcd/theme.json @@ -8,6 +8,7 @@ "column-left-header-background": "#9fb42b", "column-left-header-color": "#33390d", "main-bg-color": "#9fb42b", + "header-bg-color": "#9fb42b", "column-left-color": "#33390d", "column-left-fg-color": "#9fb42b", "link-bg-color": "#33390d", diff --git a/theme/light/theme.json b/theme/light/theme.json index 76fe70ba2..191968cec 100644 --- a/theme/light/theme.json +++ b/theme/light/theme.json @@ -22,6 +22,7 @@ "rgba(0, 0, 0, 0.5)": "rgba(0, 0, 0, 0.0)", "column-left-color": "#e6ebf0", "main-bg-color": "#e6ebf0", + "header-bg-color": "#e6ebf0", "main-bg-color-dm": "#e3dbf0", "link-bg-color": "#e6ebf0", "main-bg-color-reply": "#e0dbf0", diff --git a/theme/night/theme.json b/theme/night/theme.json index 32b61aa98..5d3b9b9b0 100644 --- a/theme/night/theme.json +++ b/theme/night/theme.json @@ -20,6 +20,7 @@ "font-size4": "24px", "font-size5": "22px", "main-bg-color": "#0f0d10", + "header-bg-color": "#0f0d10", "column-left-color": "#0f0d10", "text-entry-background": "#0f0d10", "link-bg-color": "#0f0d10", diff --git a/theme/purple/theme.json b/theme/purple/theme.json index 8e3c6456c..7717eaac2 100644 --- a/theme/purple/theme.json +++ b/theme/purple/theme.json @@ -13,6 +13,7 @@ "font-size4": "24px", "font-size5": "22px", "main-bg-color": "#1f152d", + "header-bg-color": "#1f152d", "column-left-color": "#1f152d", "link-bg-color": "#1f152d", "main-bg-color-reply": "#1a142d", diff --git a/theme/rc3/theme.json b/theme/rc3/theme.json index 08edd84e0..45a6886f0 100644 --- a/theme/rc3/theme.json +++ b/theme/rc3/theme.json @@ -41,6 +41,7 @@ "font-size5": "12px", "font-size-likes": "10px", "main-bg-color": "#100e23", + "header-bg-color": "#100e23", "column-left-color": "#0f0d10", "text-entry-background": "#0f0d10", "link-bg-color": "#0f0d10", diff --git a/theme/solidaric/theme.json b/theme/solidaric/theme.json index 8e59a2b3c..efebf8033 100644 --- a/theme/solidaric/theme.json +++ b/theme/solidaric/theme.json @@ -29,6 +29,7 @@ "font-size5": "22px", "rgba(0, 0, 0, 0.5)": "rgba(0, 0, 0, 0.0)", "main-bg-color": "white", + "header-bg-color": "white", "column-left-color": "white", "main-bg-color-dm": "white", "link-bg-color": "white", diff --git a/theme/starlight/theme.json b/theme/starlight/theme.json index 33eb6a095..a71d3c65d 100644 --- a/theme/starlight/theme.json +++ b/theme/starlight/theme.json @@ -16,6 +16,7 @@ "font-size4": "24px", "font-size5": "22px", "main-bg-color": "#0f0d10", + "header-bg-color": "#0f0d10", "column-left-color": "#0f0d10", "text-entry-background": "#0f0d10", "link-bg-color": "#0f0d10", diff --git a/theme/zen/theme.json b/theme/zen/theme.json index c33845735..d2bff1115 100644 --- a/theme/zen/theme.json +++ b/theme/zen/theme.json @@ -8,6 +8,7 @@ "banner-height-mobile": "10vh", "newswire-date-color": "yellow", "main-bg-color": "#5c4e41", + "header-bg-color": "#5c4e41", "column-left-color": "#5c4e41", "text-entry-background": "#5c4e41", "link-bg-color": "#5c4e41", From 669f3140fa91eab360c5d345cb08790a7982fa8f Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 18 Nov 2020 16:21:35 +0000 Subject: [PATCH 08/56] Button hover appearance --- theme/indymediamodern/theme.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/theme/indymediamodern/theme.json b/theme/indymediamodern/theme.json index 51a7ec867..c3a841c51 100644 --- a/theme/indymediamodern/theme.json +++ b/theme/indymediamodern/theme.json @@ -65,8 +65,8 @@ "newswire-date-color": "grey", "timeline-border-radius": "0px", "button-background": "#dedede", - "button-background-hover": "#555", - "button-text-hover": "white", + "button-background-hover": "white", + "button-text-hover": "black", "button-selected": "white", "button-selected-text": "black", "button-text": "black", From 3486bf4d4d9918b923f13aafe3eaf70079c8bb4a Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 18 Nov 2020 16:56:54 +0000 Subject: [PATCH 09/56] Right separator --- epicyon-profile.css | 2 ++ theme/indymediamodern/icons/separator_right.png | Bin 0 -> 1271 bytes 2 files changed, 2 insertions(+) create mode 100644 theme/indymediamodern/icons/separator_right.png diff --git a/epicyon-profile.css b/epicyon-profile.css index 0c01b2ff3..acda11c12 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -1008,6 +1008,7 @@ div.container { display: none; } .timeline-banner { + vertical-align: top; object-fit: cover; width: 98vw; max-height: var(--banner-height); @@ -1666,6 +1667,7 @@ div.container { display: inline; } .timeline-banner { + vertical-align: top; object-fit: cover; width: 98vw; max-height: var(--banner-height-mobile); diff --git a/theme/indymediamodern/icons/separator_right.png b/theme/indymediamodern/icons/separator_right.png new file mode 100644 index 0000000000000000000000000000000000000000..f3b5f079929dc06bd296951393a50e561200f4bd GIT binary patch literal 1271 zcmV zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3salH4E+MgLhvmVhLL#Bwl?s_Y=k&js5(-7}MS zOc`h)gnSRsVSM{K!xuahV+={nbIBR~m`W;K(eZdbW!DtbuJ>bnjnS(;+?~ki30k=( z)XTrZu5T0WHRyP?2fs$xuRwR;E1;~ER~G#_N!adg@sUKI{Zis{Ujxz5xKt=g1mg*-NyJV(2K}- zFT7Vj^5^1ny*%WdmieZZKOZ3dT>LHZ)57w|h+hW|e&qB)9*|u2w2WeS6@A;Kpm?mY0ZxxC9w?0pF{sQyi8@u9GhRPrB!IMNs%rNmW@XMvn2e;h4#8-uh+=2awoVlAsAuG4@>yj;GdK*XIm1{7L>PE z$cvZYNMn&(HM{_X=EY67z<0Uu$ES^jtqOv=Wp;dEjmH_{P2vN;R<6zzE`C|JJ& zKq9QINCrnBQOqPtnQ(8g5kW@>po+{{5+5Kys@#zzCy~s-*msa`o)y?!{~2 zBDe#!aZMj+VR$A@crQ@3Dxm)*M zdL0x7ZiA~)e+;4FU>c7Q}e?=}V zbpL}~0J@LdKB3mv|6JR|&QrKFje^rR#&GN-uj@ap^1rr!6$ts2@Eu;K#MN6pWxfCa z0fcEoLr_UWLm+T+Z)Rz1WdHzpoPCi!NW(xJ#a~mUq7@N4h&V*3P8LN)9JLBXs1Ry} zRvk<({emV9Ns5c3;979-W3lSs;;gHKs~`w|fH*liDY{6B|4R!kVmvtR$GdxvyLW(4 zEi%n&8wWJqHWRU^m`bmTfmd`PfL@GYNM@EXCrNR5j<0+8_<9%NS>EUV9NlWhVt`L1 zo@It<6K@btZ`uauec}+y%PR3X@u*1`B!1+&Qs+0$IhO^V88VZJdEyYUm}_CBg<0Oz zh^L6ds-{!EkgBuFd5g1FEVITv`3r*?ePx;JGzSsGB9j(dX-`!f-$%%SWFbcH4IL^l~5ZDE3703BLcAVM?;C}|L z^rpX51!g`;uQavr5zw;@TwFIbWe>RA0s5Z|*_2($PgBTdf%h}|rZmuZ3v{m4du#0D z^Z`gxSMeL*;1C$eQTDpWyE|HY`}a(vzaNQeay2N5wN(%3~C0000INkl Date: Wed, 18 Nov 2020 18:22:05 +0000 Subject: [PATCH 10/56] Style for timeline posts background --- epicyon-profile.css | 15 +++++++++++---- theme/blue/theme.json | 1 + theme/hacker/theme.json | 1 + theme/henge/theme.json | 1 + theme/indymediaclassic/theme.json | 1 + theme/indymediamodern/theme.json | 3 ++- theme/lcd/theme.json | 1 + theme/light/theme.json | 1 + theme/night/theme.json | 1 + theme/purple/theme.json | 1 + theme/rc3/theme.json | 1 + theme/solidaric/theme.json | 1 + theme/starlight/theme.json | 1 + theme/zen/theme.json | 1 + webapp_timeline.py | 5 +++++ 15 files changed, 30 insertions(+), 5 deletions(-) diff --git a/epicyon-profile.css b/epicyon-profile.css index acda11c12..1ef6d8bc4 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -71,6 +71,7 @@ --gallery-font-size-mobile: 35px; --button-corner-radius: 15px; --timeline-border-radius: 30px; + --timeline-posts-background-color: #282c37; --icons-side: right; --title-color: #999; --focus-color: white; @@ -383,6 +384,10 @@ a:focus { width: 10%; } +.timeline-posts { + background-color: var(--timeline-posts-background-color); +} + .container img.timelineicon:hover { filter: brightness(var(--icon-brightness-change)); } @@ -1008,14 +1013,16 @@ div.container { display: none; } .timeline-banner { - vertical-align: top; + vertical-align: top; object-fit: cover; - width: 98vw; + width: 100%; max-height: var(--banner-height); } .timeline { border: 0; - width: 98vw; + width: 100%; + table-layout: fixed; + overflow: hidden; } .col-left a:link { background: var(--column-left-color); @@ -1667,7 +1674,7 @@ div.container { display: inline; } .timeline-banner { - vertical-align: top; + vertical-align: top; object-fit: cover; width: 98vw; max-height: var(--banner-height-mobile); diff --git a/theme/blue/theme.json b/theme/blue/theme.json index 54f1ead0f..860254fc0 100644 --- a/theme/blue/theme.json +++ b/theme/blue/theme.json @@ -17,6 +17,7 @@ "gallery-font-size": "35px", "gallery-font-size-mobile": "55px", "main-bg-color": "#002365", + "timeline-posts-background-color": "#002365", "header-bg-color": "#002365", "column-left-color": "#002365", "text-entry-background": "#002365", diff --git a/theme/hacker/theme.json b/theme/hacker/theme.json index 249a7b2ab..9eb9a62fa 100644 --- a/theme/hacker/theme.json +++ b/theme/hacker/theme.json @@ -6,6 +6,7 @@ "publish-button-at-top": "False", "focus-color": "green", "main-bg-color": "black", + "timeline-posts-background-color": "black", "header-bg-color": "black", "column-left-color": "black", "link-bg-color": "black", diff --git a/theme/henge/theme.json b/theme/henge/theme.json index 7bebf737d..e670cae6d 100644 --- a/theme/henge/theme.json +++ b/theme/henge/theme.json @@ -14,6 +14,7 @@ "font-size4": "24px", "font-size5": "22px", "main-bg-color": "#383335", + "timeline-posts-background-color": "#383335", "header-bg-color": "#383335", "column-left-color": "#383335", "text-entry-background": "#383335", diff --git a/theme/indymediaclassic/theme.json b/theme/indymediaclassic/theme.json index 53ed186cd..825fc01d0 100644 --- a/theme/indymediaclassic/theme.json +++ b/theme/indymediaclassic/theme.json @@ -27,6 +27,7 @@ "font-size4": "24px", "font-size5": "22px", "main-bg-color": "black", + "timeline-posts-background-color": "black", "header-bg-color": "black", "column-left-header-color": "#fff", "column-left-header-background": "#555", diff --git a/theme/indymediamodern/theme.json b/theme/indymediamodern/theme.json index c3a841c51..a92fff0e1 100644 --- a/theme/indymediamodern/theme.json +++ b/theme/indymediamodern/theme.json @@ -79,7 +79,8 @@ "font-size-publish-button": "14px", "rgba(0, 0, 0, 0.5)": "rgba(0, 0, 0, 0.0)", "column-left-color": "#efefef", - "main-bg-color": "white", + "main-bg-color": "#efefef", + "timeline-posts-background-color": "white", "main-bg-color-dm": "white", "link-bg-color": "#efefef", "main-bg-color-reply": "white", diff --git a/theme/lcd/theme.json b/theme/lcd/theme.json index 5e8819ca2..e56ee1ed5 100644 --- a/theme/lcd/theme.json +++ b/theme/lcd/theme.json @@ -8,6 +8,7 @@ "column-left-header-background": "#9fb42b", "column-left-header-color": "#33390d", "main-bg-color": "#9fb42b", + "timeline-posts-background-color": "#9fb42b", "header-bg-color": "#9fb42b", "column-left-color": "#33390d", "column-left-fg-color": "#9fb42b", diff --git a/theme/light/theme.json b/theme/light/theme.json index 191968cec..0bcc7c99e 100644 --- a/theme/light/theme.json +++ b/theme/light/theme.json @@ -22,6 +22,7 @@ "rgba(0, 0, 0, 0.5)": "rgba(0, 0, 0, 0.0)", "column-left-color": "#e6ebf0", "main-bg-color": "#e6ebf0", + "timeline-posts-background-color": "#e6ebf0", "header-bg-color": "#e6ebf0", "main-bg-color-dm": "#e3dbf0", "link-bg-color": "#e6ebf0", diff --git a/theme/night/theme.json b/theme/night/theme.json index 5d3b9b9b0..ba8c8d268 100644 --- a/theme/night/theme.json +++ b/theme/night/theme.json @@ -20,6 +20,7 @@ "font-size4": "24px", "font-size5": "22px", "main-bg-color": "#0f0d10", + "timeline-posts-background-color": "#0f0d10", "header-bg-color": "#0f0d10", "column-left-color": "#0f0d10", "text-entry-background": "#0f0d10", diff --git a/theme/purple/theme.json b/theme/purple/theme.json index 7717eaac2..c831a3d10 100644 --- a/theme/purple/theme.json +++ b/theme/purple/theme.json @@ -13,6 +13,7 @@ "font-size4": "24px", "font-size5": "22px", "main-bg-color": "#1f152d", + "timeline-posts-background-color": "#1f152d", "header-bg-color": "#1f152d", "column-left-color": "#1f152d", "link-bg-color": "#1f152d", diff --git a/theme/rc3/theme.json b/theme/rc3/theme.json index 45a6886f0..99d2df50c 100644 --- a/theme/rc3/theme.json +++ b/theme/rc3/theme.json @@ -41,6 +41,7 @@ "font-size5": "12px", "font-size-likes": "10px", "main-bg-color": "#100e23", + "timeline-posts-background-color": "#100e23", "header-bg-color": "#100e23", "column-left-color": "#0f0d10", "text-entry-background": "#0f0d10", diff --git a/theme/solidaric/theme.json b/theme/solidaric/theme.json index efebf8033..54c211657 100644 --- a/theme/solidaric/theme.json +++ b/theme/solidaric/theme.json @@ -29,6 +29,7 @@ "font-size5": "22px", "rgba(0, 0, 0, 0.5)": "rgba(0, 0, 0, 0.0)", "main-bg-color": "white", + "timeline-posts-background-color": "white", "header-bg-color": "white", "column-left-color": "white", "main-bg-color-dm": "white", diff --git a/theme/starlight/theme.json b/theme/starlight/theme.json index a71d3c65d..260d47f50 100644 --- a/theme/starlight/theme.json +++ b/theme/starlight/theme.json @@ -16,6 +16,7 @@ "font-size4": "24px", "font-size5": "22px", "main-bg-color": "#0f0d10", + "timeline-posts-background-color": "#0f0d10", "header-bg-color": "#0f0d10", "column-left-color": "#0f0d10", "text-entry-background": "#0f0d10", diff --git a/theme/zen/theme.json b/theme/zen/theme.json index d2bff1115..35768f70f 100644 --- a/theme/zen/theme.json +++ b/theme/zen/theme.json @@ -8,6 +8,7 @@ "banner-height-mobile": "10vh", "newswire-date-color": "yellow", "main-bg-color": "#5c4e41", + "timeline-posts-background-color": "#5c4e41", "header-bg-color": "#5c4e41", "column-left-color": "#5c4e41", "text-entry-background": "#5c4e41", diff --git a/webapp_timeline.py b/webapp_timeline.py index e2857a63a..d62930951 100644 --- a/webapp_timeline.py +++ b/webapp_timeline.py @@ -426,6 +426,8 @@ def htmlTimeline(cssCache: {}, defaultTimeline: str, calendarImage, followApprovals, iconsAsButtons) + tlStr += '
\n' + # second row of buttons for moderator actions if moderator and boxName == 'moderation': tlStr += \ @@ -597,6 +599,9 @@ def htmlTimeline(cssCache: {}, defaultTimeline: str, translate['Page down'] + '">\n' + \ ' \n' + # end of timeline-posts + tlStr += '
\n' + # end of column-center tlStr += ' \n' From ea98bcd7b4a0533427aa01552464437046fc2d15 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 18 Nov 2020 18:31:23 +0000 Subject: [PATCH 11/56] Too wide --- epicyon-profile.css | 2 -- 1 file changed, 2 deletions(-) diff --git a/epicyon-profile.css b/epicyon-profile.css index 1ef6d8bc4..b316a2335 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -1021,8 +1021,6 @@ div.container { .timeline { border: 0; width: 100%; - table-layout: fixed; - overflow: hidden; } .col-left a:link { background: var(--column-left-color); From 405f367693ff0ccc03e486b0958f1a456d87e486 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 18 Nov 2020 18:38:47 +0000 Subject: [PATCH 12/56] Post background can be different from timeline background --- epicyon-profile.css | 5 +++-- theme/blue/theme.json | 1 + theme/hacker/theme.json | 1 + theme/henge/theme.json | 1 + theme/indymediaclassic/theme.json | 1 + theme/indymediamodern/theme.json | 1 + theme/lcd/theme.json | 1 + theme/light/theme.json | 1 + theme/night/theme.json | 1 + theme/purple/theme.json | 1 + theme/rc3/theme.json | 1 + theme/solidaric/theme.json | 1 + theme/starlight/theme.json | 1 + theme/zen/theme.json | 1 + 14 files changed, 16 insertions(+), 2 deletions(-) diff --git a/epicyon-profile.css b/epicyon-profile.css index b316a2335..d0dbf166a 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -3,6 +3,7 @@ :root { --header-bg-color: #282c37; --main-bg-color: #282c37; + --post-bg-color: #282c37; --column-left-color: #282c37; --link-bg-color: #282c37; --dropdown-fg-color: #dddddd; @@ -954,7 +955,7 @@ div.container { } .container { border: var(--border-width) solid var(--border-color); - background-color: var(--main-bg-color); + background-color: var(--post-bg-color); border-radius: var(--timeline-border-radius); padding-left: var(--container-padding); padding-right: var(--container-padding); @@ -1587,7 +1588,7 @@ div.container { } .container { border: var(--border-width) solid var(--border-color); - background-color: var(--main-bg-color); + background-color: var(--post-bg-color); border-radius: var(--timeline-border-radius); padding-left: var(--container-padding); padding-right: var(--container-padding); diff --git a/theme/blue/theme.json b/theme/blue/theme.json index 860254fc0..8772270dc 100644 --- a/theme/blue/theme.json +++ b/theme/blue/theme.json @@ -17,6 +17,7 @@ "gallery-font-size": "35px", "gallery-font-size-mobile": "55px", "main-bg-color": "#002365", + "post-bg-color": "#002365", "timeline-posts-background-color": "#002365", "header-bg-color": "#002365", "column-left-color": "#002365", diff --git a/theme/hacker/theme.json b/theme/hacker/theme.json index 9eb9a62fa..e7681d9b4 100644 --- a/theme/hacker/theme.json +++ b/theme/hacker/theme.json @@ -6,6 +6,7 @@ "publish-button-at-top": "False", "focus-color": "green", "main-bg-color": "black", + "post-bg-color": "black", "timeline-posts-background-color": "black", "header-bg-color": "black", "column-left-color": "black", diff --git a/theme/henge/theme.json b/theme/henge/theme.json index e670cae6d..9ea96f4a3 100644 --- a/theme/henge/theme.json +++ b/theme/henge/theme.json @@ -14,6 +14,7 @@ "font-size4": "24px", "font-size5": "22px", "main-bg-color": "#383335", + "post-bg-color": "#383335", "timeline-posts-background-color": "#383335", "header-bg-color": "#383335", "column-left-color": "#383335", diff --git a/theme/indymediaclassic/theme.json b/theme/indymediaclassic/theme.json index 825fc01d0..932129063 100644 --- a/theme/indymediaclassic/theme.json +++ b/theme/indymediaclassic/theme.json @@ -27,6 +27,7 @@ "font-size4": "24px", "font-size5": "22px", "main-bg-color": "black", + "post-bg-color": "black", "timeline-posts-background-color": "black", "header-bg-color": "black", "column-left-header-color": "#fff", diff --git a/theme/indymediamodern/theme.json b/theme/indymediamodern/theme.json index a92fff0e1..d9fd2518d 100644 --- a/theme/indymediamodern/theme.json +++ b/theme/indymediamodern/theme.json @@ -80,6 +80,7 @@ "rgba(0, 0, 0, 0.5)": "rgba(0, 0, 0, 0.0)", "column-left-color": "#efefef", "main-bg-color": "#efefef", + "post-bg-color": "white", "timeline-posts-background-color": "white", "main-bg-color-dm": "white", "link-bg-color": "#efefef", diff --git a/theme/lcd/theme.json b/theme/lcd/theme.json index e56ee1ed5..66da23085 100644 --- a/theme/lcd/theme.json +++ b/theme/lcd/theme.json @@ -8,6 +8,7 @@ "column-left-header-background": "#9fb42b", "column-left-header-color": "#33390d", "main-bg-color": "#9fb42b", + "post-bg-color": "#9fb42b", "timeline-posts-background-color": "#9fb42b", "header-bg-color": "#9fb42b", "column-left-color": "#33390d", diff --git a/theme/light/theme.json b/theme/light/theme.json index 0bcc7c99e..829094cae 100644 --- a/theme/light/theme.json +++ b/theme/light/theme.json @@ -22,6 +22,7 @@ "rgba(0, 0, 0, 0.5)": "rgba(0, 0, 0, 0.0)", "column-left-color": "#e6ebf0", "main-bg-color": "#e6ebf0", + "post-bg-color": "#e6ebf0", "timeline-posts-background-color": "#e6ebf0", "header-bg-color": "#e6ebf0", "main-bg-color-dm": "#e3dbf0", diff --git a/theme/night/theme.json b/theme/night/theme.json index ba8c8d268..7e1ca228a 100644 --- a/theme/night/theme.json +++ b/theme/night/theme.json @@ -20,6 +20,7 @@ "font-size4": "24px", "font-size5": "22px", "main-bg-color": "#0f0d10", + "post-bg-color": "#0f0d10", "timeline-posts-background-color": "#0f0d10", "header-bg-color": "#0f0d10", "column-left-color": "#0f0d10", diff --git a/theme/purple/theme.json b/theme/purple/theme.json index c831a3d10..62368f6c1 100644 --- a/theme/purple/theme.json +++ b/theme/purple/theme.json @@ -13,6 +13,7 @@ "font-size4": "24px", "font-size5": "22px", "main-bg-color": "#1f152d", + "post-bg-color": "#1f152d", "timeline-posts-background-color": "#1f152d", "header-bg-color": "#1f152d", "column-left-color": "#1f152d", diff --git a/theme/rc3/theme.json b/theme/rc3/theme.json index 99d2df50c..a62a09517 100644 --- a/theme/rc3/theme.json +++ b/theme/rc3/theme.json @@ -41,6 +41,7 @@ "font-size5": "12px", "font-size-likes": "10px", "main-bg-color": "#100e23", + "post-bg-color": "#100e23", "timeline-posts-background-color": "#100e23", "header-bg-color": "#100e23", "column-left-color": "#0f0d10", diff --git a/theme/solidaric/theme.json b/theme/solidaric/theme.json index 54c211657..4d19a8f33 100644 --- a/theme/solidaric/theme.json +++ b/theme/solidaric/theme.json @@ -29,6 +29,7 @@ "font-size5": "22px", "rgba(0, 0, 0, 0.5)": "rgba(0, 0, 0, 0.0)", "main-bg-color": "white", + "post-bg-color": "white", "timeline-posts-background-color": "white", "header-bg-color": "white", "column-left-color": "white", diff --git a/theme/starlight/theme.json b/theme/starlight/theme.json index 260d47f50..71b1c1795 100644 --- a/theme/starlight/theme.json +++ b/theme/starlight/theme.json @@ -16,6 +16,7 @@ "font-size4": "24px", "font-size5": "22px", "main-bg-color": "#0f0d10", + "post-bg-color": "#0f0d10", "timeline-posts-background-color": "#0f0d10", "header-bg-color": "#0f0d10", "column-left-color": "#0f0d10", diff --git a/theme/zen/theme.json b/theme/zen/theme.json index 35768f70f..50524edd3 100644 --- a/theme/zen/theme.json +++ b/theme/zen/theme.json @@ -8,6 +8,7 @@ "banner-height-mobile": "10vh", "newswire-date-color": "yellow", "main-bg-color": "#5c4e41", + "post-bg-color": "#5c4e41", "timeline-posts-background-color": "#5c4e41", "header-bg-color": "#5c4e41", "column-left-color": "#5c4e41", From 4270064e0c71c54bbefea80a3d752bdc2e1292c5 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 18 Nov 2020 19:20:30 +0000 Subject: [PATCH 13/56] No header offset --- theme/indymediamodern/theme.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/theme/indymediamodern/theme.json b/theme/indymediamodern/theme.json index d9fd2518d..5436188b8 100644 --- a/theme/indymediamodern/theme.json +++ b/theme/indymediamodern/theme.json @@ -14,7 +14,7 @@ "font-size-calendar-cell": "2rem", "calendar-horizontal-padding": "20%", "time-vertical-align": "10px", - "header-vertical-offset": "-10%", + "header-vertical-offset": "0", "publish-button-vertical-offset": "0", "vertical-between-posts-header": "0 0", "header-button-padding": "0 0", From 127934698e31e5e793b2954e8452b547d193bfed Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 18 Nov 2020 19:24:01 +0000 Subject: [PATCH 14/56] Background for page up/down icon --- epicyon-profile.css | 2 ++ 1 file changed, 2 insertions(+) diff --git a/epicyon-profile.css b/epicyon-profile.css index d0dbf166a..34c9f3a44 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -1397,6 +1397,7 @@ div.container { } .pageicon { width: 4%; + background-color: var(--post-bg-color); } .time-right { float: var(--icons-side); @@ -2013,6 +2014,7 @@ div.container { } .pageicon { width: 14%; + background-color: var(--post-bg-color); } .time-right { float: var(--icons-side); From 58a9a49dc34ac9837f27420279694edbd29f97e2 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 18 Nov 2020 19:28:33 +0000 Subject: [PATCH 15/56] Separator after post --- webapp_timeline.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/webapp_timeline.py b/webapp_timeline.py index d62930951..617fee84f 100644 --- a/webapp_timeline.py +++ b/webapp_timeline.py @@ -581,9 +581,9 @@ def htmlTimeline(cssCache: {}, defaultTimeline: str, if currTlStr: itemCtr += 1 + tlStr += currTlStr if separatorStr: tlStr += separatorStr - tlStr += currTlStr if boxName == 'tlmedia': tlStr += '\n' @@ -698,9 +698,10 @@ def htmlSharesTimeline(translate: {}, pageNumber: int, itemsPerPage: int, showRemoveButton = False if item['actor'] == actor: showRemoveButton = True - timelineStr += separatorStr + \ + timelineStr += \ htmlIndividualShare(actor, item, translate, showContactButton, showRemoveButton) + timelineStr += separatorStr if not lastPage: iconsPath = getIconsWebPath(baseDir) From 41a5a778abdef19273ae426396f8797cda1d3687 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 18 Nov 2020 19:52:29 +0000 Subject: [PATCH 16/56] Buttom bottom margin --- epicyon-profile.css | 7 +++++++ theme/indymediamodern/theme.json | 3 ++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/epicyon-profile.css b/epicyon-profile.css index 34c9f3a44..a4dd604d6 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -139,6 +139,7 @@ --verticals-width: 0; --italic-font-style: italic; --header-font: 'Bedstead'; + --button-bottom-margin: 10px; } @font-face { @@ -952,6 +953,7 @@ div.container { padding: var(--header-button-padding); margin: var(--vertical-between-posts-header); transform: translateY(var(--header-vertical-offset)); + margin-bottom: var(--button-bottom-margin); } .container { border: var(--border-width) solid var(--border-color); @@ -1276,6 +1278,7 @@ div.container { border-bottom: none; border-left: var(--tab-border-width) solid var(--tab-border-color); border-right: var(--tab-border-width) solid var(--tab-border-color); + margin-bottom: var(--button-bottom-margin); } .buttonDesktop { border-radius: var(--button-corner-radius); @@ -1346,6 +1349,7 @@ div.container { border-bottom: none; border-left: var(--tab-border-width) solid var(--tab-border-color); border-right: var(--tab-border-width) solid var(--tab-border-color); + margin-bottom: var(--button-bottom-margin); } .buttonselectedhighlighted { border-radius: var(--button-corner-radius); @@ -1586,6 +1590,7 @@ div.container { padding: var(--header-button-padding); margin: var(--vertical-between-posts-header); transform: translateY(0%); + margin-bottom: var(--button-bottom-margin); } .container { border: var(--border-width) solid var(--border-color); @@ -1871,6 +1876,7 @@ div.container { border-bottom: none; border-left: var(--tab-border-width) solid var(--tab-border-color); border-right: var(--tab-border-width) solid var(--tab-border-color); + margin-bottom: var(--button-bottom-margin); } .frontPageMobileButtons{ display: block; @@ -1963,6 +1969,7 @@ div.container { border-bottom: none; border-left: var(--tab-border-width) solid var(--tab-border-color); border-right: var(--tab-border-width) solid var(--tab-border-color); + margin-bottom: var(--button-bottom-margin); } .buttonselectedhighlighted { border-radius: var(--button-corner-radius); diff --git a/theme/indymediamodern/theme.json b/theme/indymediamodern/theme.json index 5436188b8..9c7fa58b4 100644 --- a/theme/indymediamodern/theme.json +++ b/theme/indymediamodern/theme.json @@ -1,4 +1,6 @@ { + "button-bottom-margin": "0", + "header-vertical-offset": "10px", "header-bg-color": "#efefef", "verticals-width": "0px", "newswire-publish-icon": "False", @@ -14,7 +16,6 @@ "font-size-calendar-cell": "2rem", "calendar-horizontal-padding": "20%", "time-vertical-align": "10px", - "header-vertical-offset": "0", "publish-button-vertical-offset": "0", "vertical-between-posts-header": "0 0", "header-button-padding": "0 0", From beed3da9840b4406f68d3172365bfb6bba3b70db Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 18 Nov 2020 19:55:23 +0000 Subject: [PATCH 17/56] Publish button offset --- theme/indymediamodern/theme.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/theme/indymediamodern/theme.json b/theme/indymediamodern/theme.json index 9c7fa58b4..395f3bce6 100644 --- a/theme/indymediamodern/theme.json +++ b/theme/indymediamodern/theme.json @@ -16,7 +16,7 @@ "font-size-calendar-cell": "2rem", "calendar-horizontal-padding": "20%", "time-vertical-align": "10px", - "publish-button-vertical-offset": "0", + "publish-button-vertical-offset": "10px", "vertical-between-posts-header": "0 0", "header-button-padding": "0 0", "containericons-horizontal-spacing": "0%", From 4709220c36c3e5dbbafa8da7e4c3aef918a18c4f Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 18 Nov 2020 20:14:08 +0000 Subject: [PATCH 18/56] Header background --- epicyon-profile.css | 2 +- theme/solidaric/theme.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/epicyon-profile.css b/epicyon-profile.css index a4dd604d6..6c1417719 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -1514,7 +1514,7 @@ div.container { margin: 0% 1%; width: 10%; } - .donateButton { + .donateButton { background-color: var(--button-background); color: var(--button-text); float: none; diff --git a/theme/solidaric/theme.json b/theme/solidaric/theme.json index 4d19a8f33..14def1c9d 100644 --- a/theme/solidaric/theme.json +++ b/theme/solidaric/theme.json @@ -31,7 +31,7 @@ "main-bg-color": "white", "post-bg-color": "white", "timeline-posts-background-color": "white", - "header-bg-color": "white", + "header-bg-color": "#ddd", "column-left-color": "white", "main-bg-color-dm": "white", "link-bg-color": "white", From 1ad17e3663917439cc631a4cdaadb6325a3f3b4f Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 18 Nov 2020 20:22:14 +0000 Subject: [PATCH 19/56] Transparent link background --- theme/solidaric/theme.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/theme/solidaric/theme.json b/theme/solidaric/theme.json index 14def1c9d..6ad6b0011 100644 --- a/theme/solidaric/theme.json +++ b/theme/solidaric/theme.json @@ -34,7 +34,7 @@ "header-bg-color": "#ddd", "column-left-color": "white", "main-bg-color-dm": "white", - "link-bg-color": "white", + "link-bg-color": "transparent", "main-bg-color-reply": "white", "main-bg-color-report": "white", "main-header-color-roles": "#ebebf0", From a0afe6d7cd25e27f0ee6206b67b92bc15ac66fa2 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 18 Nov 2020 20:33:39 +0000 Subject: [PATCH 20/56] Left col background color --- epicyon-profile.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/epicyon-profile.css b/epicyon-profile.css index 6c1417719..ea32fba47 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -170,7 +170,7 @@ body, html { .leftColIcons { width: 100%; - background-color: var(--main-bg-color); + background-color: var(--column-left-color); float: right; display: block; padding-bottom: var(--column-left-icons-margin); From d59d31b0fe466b7fd9d4e92152a416772938dfb7 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 18 Nov 2020 20:39:15 +0000 Subject: [PATCH 21/56] Default header font --- epicyon-profile.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/epicyon-profile.css b/epicyon-profile.css index ea32fba47..39085d5dd 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -138,7 +138,7 @@ --profile-text-align: left; --verticals-width: 0; --italic-font-style: italic; - --header-font: 'Bedstead'; + --header-font: 'Arial, Helvetica, sans-serif'; --button-bottom-margin: 10px; } From f0e3be86e4f8948ae5322f0a34412570ab4725b4 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 18 Nov 2020 20:46:10 +0000 Subject: [PATCH 22/56] Transparent link background --- theme/indymediamodern/theme.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/theme/indymediamodern/theme.json b/theme/indymediamodern/theme.json index 395f3bce6..227949505 100644 --- a/theme/indymediamodern/theme.json +++ b/theme/indymediamodern/theme.json @@ -84,7 +84,7 @@ "post-bg-color": "white", "timeline-posts-background-color": "white", "main-bg-color-dm": "white", - "link-bg-color": "#efefef", + "link-bg-color": "transparent", "main-bg-color-reply": "white", "main-bg-color-report": "white", "main-header-color-roles": "#ebebf0", From 89b01f4c391ff66c1e2d74d7c45f186a3220297d Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 18 Nov 2020 20:54:51 +0000 Subject: [PATCH 23/56] Background color for post separator --- epicyon-profile.css | 1 + 1 file changed, 1 insertion(+) diff --git a/epicyon-profile.css b/epicyon-profile.css index 39085d5dd..06f758b3a 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -177,6 +177,7 @@ body, html { } .postSeparatorImage img { + background-color: var(--post-bg-color); padding-top: var(--post-separator-margin-top); padding-bottom: var(--post-separator-margin-bottom); width: var(--post-separator-width); From 4fe35d53796950aca2f028d6c8a259f059f6321d Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 18 Nov 2020 21:16:10 +0000 Subject: [PATCH 24/56] No distance between posts --- theme/indymediamodern/theme.json | 1 + webapp_profile.py | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/theme/indymediamodern/theme.json b/theme/indymediamodern/theme.json index 227949505..ea781a88e 100644 --- a/theme/indymediamodern/theme.json +++ b/theme/indymediamodern/theme.json @@ -17,6 +17,7 @@ "calendar-horizontal-padding": "20%", "time-vertical-align": "10px", "publish-button-vertical-offset": "10px", + "vertical-between-posts": "0", "vertical-between-posts-header": "0 0", "header-button-padding": "0 0", "containericons-horizontal-spacing": "0%", diff --git a/webapp_profile.py b/webapp_profile.py index 84dbc57e7..6f7667c6b 100644 --- a/webapp_profile.py +++ b/webapp_profile.py @@ -614,9 +614,6 @@ def htmlProfile(rssIconAtTop: bool, if isSystemAccount(nickname): bannerFile, bannerFilename = \ getBannerFile(baseDir, nickname, domain) - # profileStyle = \ - # profileStyle.replace('banner.png', - # '/users/' + nickname + '/' + bannerFile) licenseStr = \ '' + \ From a3c49a23247ff232272448d7d764f2f67a85556e Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 18 Nov 2020 21:18:51 +0000 Subject: [PATCH 25/56] Separator after posts --- webapp_profile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp_profile.py b/webapp_profile.py index 6f7667c6b..fb491036e 100644 --- a/webapp_profile.py +++ b/webapp_profile.py @@ -730,7 +730,7 @@ def htmlProfilePosts(recentPostsCache: {}, maxRecentPosts: int, showPublishedDateOnly, False, False, False, True, False) if postStr: - profileStr += separatorStr + postStr + profileStr += postStr + separatorStr ctr += 1 if ctr >= maxItems: break From 555f85412174cff4e2a1112376225fda027e98d8 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 18 Nov 2020 21:26:51 +0000 Subject: [PATCH 26/56] Vertical alignment --- theme/indymediamodern/theme.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/theme/indymediamodern/theme.json b/theme/indymediamodern/theme.json index ea781a88e..83e14160b 100644 --- a/theme/indymediamodern/theme.json +++ b/theme/indymediamodern/theme.json @@ -16,7 +16,7 @@ "font-size-calendar-cell": "2rem", "calendar-horizontal-padding": "20%", "time-vertical-align": "10px", - "publish-button-vertical-offset": "10px", + "publish-button-vertical-offset": "15px", "vertical-between-posts": "0", "vertical-between-posts-header": "0 0", "header-button-padding": "0 0", From 67b8630850a7ecc1fab751e2c8360e1d10d22f4a Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 18 Nov 2020 21:44:33 +0000 Subject: [PATCH 27/56] Extra margins --- epicyon-profile.css | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/epicyon-profile.css b/epicyon-profile.css index 06f758b3a..1842f2287 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -954,7 +954,7 @@ div.container { padding: var(--header-button-padding); margin: var(--vertical-between-posts-header); transform: translateY(var(--header-vertical-offset)); - margin-bottom: var(--button-bottom-margin); + margin-bottom: var(--button-bottom-margin); } .container { border: var(--border-width) solid var(--border-color); @@ -1279,7 +1279,7 @@ div.container { border-bottom: none; border-left: var(--tab-border-width) solid var(--tab-border-color); border-right: var(--tab-border-width) solid var(--tab-border-color); - margin-bottom: var(--button-bottom-margin); + margin-bottom: var(--button-bottom-margin); } .buttonDesktop { border-radius: var(--button-corner-radius); @@ -1298,6 +1298,7 @@ div.container { border-bottom: none; border-left: var(--tab-border-width) solid var(--tab-border-color); border-right: var(--tab-border-width) solid var(--tab-border-color); + margin-bottom: var(--button-bottom-margin); } .publishbtn { border-radius: var(--button-corner-radius); @@ -1350,7 +1351,7 @@ div.container { border-bottom: none; border-left: var(--tab-border-width) solid var(--tab-border-color); border-right: var(--tab-border-width) solid var(--tab-border-color); - margin-bottom: var(--button-bottom-margin); + margin-bottom: var(--button-bottom-margin); } .buttonselectedhighlighted { border-radius: var(--button-corner-radius); @@ -1515,7 +1516,7 @@ div.container { margin: 0% 1%; width: 10%; } - .donateButton { + .donateButton { background-color: var(--button-background); color: var(--button-text); float: none; @@ -1591,7 +1592,7 @@ div.container { padding: var(--header-button-padding); margin: var(--vertical-between-posts-header); transform: translateY(0%); - margin-bottom: var(--button-bottom-margin); + margin-bottom: var(--button-bottom-margin); } .container { border: var(--border-width) solid var(--border-color); @@ -1877,7 +1878,7 @@ div.container { border-bottom: none; border-left: var(--tab-border-width) solid var(--tab-border-color); border-right: var(--tab-border-width) solid var(--tab-border-color); - margin-bottom: var(--button-bottom-margin); + margin-bottom: var(--button-bottom-margin); } .frontPageMobileButtons{ display: block; @@ -1911,6 +1912,7 @@ div.container { border-bottom: none; border-left: var(--tab-border-width) solid var(--tab-border-color); border-right: var(--tab-border-width) solid var(--tab-border-color); + margin-bottom: var(--button-bottom-margin); } .buttonDesktop { background: transparent; @@ -1970,7 +1972,7 @@ div.container { border-bottom: none; border-left: var(--tab-border-width) solid var(--tab-border-color); border-right: var(--tab-border-width) solid var(--tab-border-color); - margin-bottom: var(--button-bottom-margin); + margin-bottom: var(--button-bottom-margin); } .buttonselectedhighlighted { border-radius: var(--button-corner-radius); From b3648d9f5dc2dc155936ff0f235df45d07e44a55 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 18 Nov 2020 21:56:19 +0000 Subject: [PATCH 28/56] Separators with different background colors --- epicyon-profile.css | 18 ++++++++++++++++++ webapp_utils.py | 4 +++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/epicyon-profile.css b/epicyon-profile.css index 1842f2287..1091dbe3b 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -185,6 +185,24 @@ body, html { display: block; } +.postSeparatorImageLeft img { + background-color: var(--column-left-color); + padding-top: var(--post-separator-margin-top); + padding-bottom: var(--post-separator-margin-bottom); + width: var(--post-separator-width); + height: var(--post-separator-height); + display: block; +} + +.postSeparatorImageRight img { + background-color: var(--column-left-color); + padding-top: var(--post-separator-margin-top); + padding-bottom: var(--post-separator-margin-bottom); + width: var(--post-separator-width); + height: var(--post-separator-height); + display: block; +} + .headericons { display: inline-block; float: right; diff --git a/webapp_utils.py b/webapp_utils.py index 35a4ee163..6a18f06c4 100644 --- a/webapp_utils.py +++ b/webapp_utils.py @@ -728,13 +728,15 @@ def htmlPostSeparator(baseDir: str, column: str) -> str: iconsPath = getIconsWebPath(baseDir) theme = getConfigParam(baseDir, 'theme') filename = 'separator.png' + separatorClass = "postSeparatorImage" if column: + separatorClass = "postSeparatorImage" + column.title() filename = 'separator_' + column + '.png' separatorImageFilename = baseDir + '/theme/' + theme + '/icons/' + filename separatorStr = '' if os.path.isfile(separatorImageFilename): separatorStr = \ - '
' + \ + '
' + \ '' + \ '
\n' return separatorStr From 745ca8d9c4867bd8e48601b13fe7e377f7648dfd Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 18 Nov 2020 22:03:58 +0000 Subject: [PATCH 29/56] Skip newswire items with no title --- webapp_column_right.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/webapp_column_right.py b/webapp_column_right.py index 1095b3b78..fad26c5a6 100644 --- a/webapp_column_right.py +++ b/webapp_column_right.py @@ -222,6 +222,8 @@ def htmlNewswire(baseDir: str, newswire: {}, nickname: str, moderator: bool, votesIndicator(totalVotes, positiveVoting) title = removeLongWords(item[0], 16, []).replace('\n', '
') + if not title: + continue htmlStr += '

' + \ '' + \ '' + title + \ @@ -248,6 +250,8 @@ def htmlNewswire(baseDir: str, newswire: {}, nickname: str, moderator: bool, votesIndicator(totalVotes, positiveVoting) title = removeLongWords(item[0], 16, []).replace('\n', '
') + if not title: + continue if moderator and moderatedItem: htmlStr += '

' + \ '' + \ From 38b072c32a57759175751d56a7484e6a7d33cd14 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 18 Nov 2020 22:08:17 +0000 Subject: [PATCH 30/56] Strip title --- webapp_column_right.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/webapp_column_right.py b/webapp_column_right.py index fad26c5a6..b16357380 100644 --- a/webapp_column_right.py +++ b/webapp_column_right.py @@ -221,7 +221,8 @@ def htmlNewswire(baseDir: str, newswire: {}, nickname: str, moderator: bool, totalVotesStr = \ votesIndicator(totalVotes, positiveVoting) - title = removeLongWords(item[0], 16, []).replace('\n', '
') + title = \ + removeLongWords(item[0], 16, []).replace('\n', '
').strip() if not title: continue htmlStr += '

' + \ @@ -249,7 +250,8 @@ def htmlNewswire(baseDir: str, newswire: {}, nickname: str, moderator: bool, totalVotesStr = \ votesIndicator(totalVotes, positiveVoting) - title = removeLongWords(item[0], 16, []).replace('\n', '
') + title = \ + removeLongWords(item[0], 16, []).replace('\n', '
').strip() if not title: continue if moderator and moderatedItem: From 7f4c490872d619cd186acf87a60921c40b828049 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 18 Nov 2020 22:15:32 +0000 Subject: [PATCH 31/56] Check item title earlier --- webapp_column_right.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/webapp_column_right.py b/webapp_column_right.py index b16357380..a1eb7e02c 100644 --- a/webapp_column_right.py +++ b/webapp_column_right.py @@ -205,6 +205,8 @@ def htmlNewswire(baseDir: str, newswire: {}, nickname: str, moderator: bool, separatorStr = htmlPostSeparator(baseDir, 'right') htmlStr = '' for dateStr, item in newswire.items(): + if not item[0].strip(): + continue publishedDate = \ datetime.strptime(dateStr, "%Y-%m-%d %H:%M:%S%z") dateShown = publishedDate.strftime("%Y-%m-%d %H:%M") @@ -221,10 +223,7 @@ def htmlNewswire(baseDir: str, newswire: {}, nickname: str, moderator: bool, totalVotesStr = \ votesIndicator(totalVotes, positiveVoting) - title = \ - removeLongWords(item[0], 16, []).replace('\n', '
').strip() - if not title: - continue + title = removeLongWords(item[0], 16, []).replace('\n', '
') htmlStr += '

' + \ '' + \ '' + title + \ @@ -250,10 +249,7 @@ def htmlNewswire(baseDir: str, newswire: {}, nickname: str, moderator: bool, totalVotesStr = \ votesIndicator(totalVotes, positiveVoting) - title = \ - removeLongWords(item[0], 16, []).replace('\n', '
').strip() - if not title: - continue + title = removeLongWords(item[0], 16, []).replace('\n', '
') if moderator and moderatedItem: htmlStr += '

' + \ '' + \ @@ -352,6 +348,8 @@ def htmlCitations(baseDir: str, nickname: str, domain: str, if newswire: ctr = 0 for dateStr, item in newswire.items(): + if not item[0].strip(): + continue # should this checkbox be selected? selectedStr = '' if dateStr in citationsSelected: From f84941ba42d3d969d3e1ef5f1d56f12916bdec52 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 18 Nov 2020 22:31:38 +0000 Subject: [PATCH 32/56] Remove CDATA --- webapp_column_right.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/webapp_column_right.py b/webapp_column_right.py index a1eb7e02c..5ed3e6f92 100644 --- a/webapp_column_right.py +++ b/webapp_column_right.py @@ -10,6 +10,7 @@ import os from datetime import datetime from shutil import copyfile from content import removeLongWords +from utils import removeHtml from utils import locatePost from utils import loadJson from utils import getConfigParam @@ -205,8 +206,14 @@ def htmlNewswire(baseDir: str, newswire: {}, nickname: str, moderator: bool, separatorStr = htmlPostSeparator(baseDir, 'right') htmlStr = '' for dateStr, item in newswire.items(): - if not item[0].strip(): + item[0] = removeHtml(item[0]).strip() + if not item[0]: continue + # remove any CDATA + if 'CDATA[' in item[0]: + item[0] = item[0].split('CDATA[')[1] + if ']' in item[0]: + item[0] = item[0].split(']')[0] publishedDate = \ datetime.strptime(dateStr, "%Y-%m-%d %H:%M:%S%z") dateShown = publishedDate.strftime("%Y-%m-%d %H:%M") @@ -348,8 +355,14 @@ def htmlCitations(baseDir: str, nickname: str, domain: str, if newswire: ctr = 0 for dateStr, item in newswire.items(): - if not item[0].strip(): + item[0] = removeHtml(item[0]).strip() + if not item[0]: continue + # remove any CDATA + if 'CDATA[' in item[0]: + item[0] = item[0].split('CDATA[')[1] + if ']' in item[0]: + item[0] = item[0].split(']')[0] # should this checkbox be selected? selectedStr = '' if dateStr in citationsSelected: From 0dc731185cf8602a199d6e3afe0ac529e5b502cd Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 19 Nov 2020 10:20:02 +0000 Subject: [PATCH 33/56] Check that property exists --- pyjsonld.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pyjsonld.py b/pyjsonld.py index a6da7f28f..f0f55b41b 100644 --- a/pyjsonld.py +++ b/pyjsonld.py @@ -4474,6 +4474,8 @@ class JsonLdError(Exception): self.causeTrace = traceback.extract_tb(*sys.exc_info()[2:]) def __str__(self): + if not hasattr(self, 'message'): + return 'Unknown exception' rval = repr(self.message) rval += '\nType: ' + self.type if self.code: From 7c526317254ea17a35db0ae08a906f0ab96804ac Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 19 Nov 2020 12:35:31 +0000 Subject: [PATCH 34/56] Stray comma --- epicyon-profile.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/epicyon-profile.css b/epicyon-profile.css index 1091dbe3b..27fbf7cc4 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -64,7 +64,7 @@ --button-height: 10px; --button-height-padding-mobile: 20px; --button-height-padding: 10px; - --image-corners: 10%, + --image-corners: 10%; --gallery-border: #ccc; --gallery-hover: #777; --gallery-text-color: #ccc; From 5357bc822375b12925ba4f53d960af08fca11fe4 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 19 Nov 2020 14:02:16 +0000 Subject: [PATCH 35/56] Separate out the hashtag swarm --- webapp_hashtagswarm.py | 86 ++++++++ webapp_search.py | 491 +++++++++++++++++------------------------ 2 files changed, 294 insertions(+), 283 deletions(-) create mode 100644 webapp_hashtagswarm.py diff --git a/webapp_hashtagswarm.py b/webapp_hashtagswarm.py new file mode 100644 index 000000000..ae63481b2 --- /dev/null +++ b/webapp_hashtagswarm.py @@ -0,0 +1,86 @@ +__filename__ = "webapp_hashtagswarm.py" +__author__ = "Bob Mottram" +__license__ = "AGPL3+" +__version__ = "1.1.0" +__maintainer__ = "Bob Mottram" +__email__ = "bob@freedombone.net" +__status__ = "Production" + +import os +from blocking import isBlockedHashtag +from datetime import datetime + + +def htmlHashTagSwarm(baseDir: str, actor: str) -> str: + """Returns a tag swarm of today's hashtags + """ + currTime = datetime.utcnow() + daysSinceEpoch = (currTime - datetime(1970, 1, 1)).days + daysSinceEpochStr = str(daysSinceEpoch) + ' ' + tagSwarm = [] + + for subdir, dirs, files in os.walk(baseDir + '/tags'): + for f in files: + tagsFilename = os.path.join(baseDir + '/tags', f) + if not os.path.isfile(tagsFilename): + continue + # get last modified datetime + modTimesinceEpoc = os.path.getmtime(tagsFilename) + lastModifiedDate = datetime.fromtimestamp(modTimesinceEpoc) + fileDaysSinceEpoch = (lastModifiedDate - datetime(1970, 1, 1)).days + # check if the file was last modified today + if fileDaysSinceEpoch != daysSinceEpoch: + continue + + hashTagName = f.split('.')[0] + if isBlockedHashtag(baseDir, hashTagName): + continue + if daysSinceEpochStr not in open(tagsFilename).read(): + continue + with open(tagsFilename, 'r') as tagsFile: + line = tagsFile.readline() + lineCtr = 1 + tagCtr = 0 + maxLineCtr = 1 + while line: + if ' ' not in line: + line = tagsFile.readline() + lineCtr += 1 + # don't read too many lines + if lineCtr >= maxLineCtr: + break + continue + postDaysSinceEpochStr = line.split(' ')[0] + if not postDaysSinceEpochStr.isdigit(): + line = tagsFile.readline() + lineCtr += 1 + # don't read too many lines + if lineCtr >= maxLineCtr: + break + continue + postDaysSinceEpoch = int(postDaysSinceEpochStr) + if postDaysSinceEpoch < daysSinceEpoch: + break + if postDaysSinceEpoch == daysSinceEpoch: + if tagCtr == 0: + tagSwarm.append(hashTagName) + tagCtr += 1 + + line = tagsFile.readline() + lineCtr += 1 + # don't read too many lines + if lineCtr >= maxLineCtr: + break + + if not tagSwarm: + return '' + tagSwarm.sort() + tagSwarmStr = '' + ctr = 0 + for tagName in tagSwarm: + tagSwarmStr += \ + '' + tagName + '\n' + ctr += 1 + tagSwarmHtml = tagSwarmStr.strip() + '\n' + return tagSwarmHtml diff --git a/webapp_search.py b/webapp_search.py index db4b04525..c50773cfe 100644 --- a/webapp_search.py +++ b/webapp_search.py @@ -28,7 +28,7 @@ from webapp_utils import htmlFooter from webapp_utils import getSearchBannerFile from webapp_utils import htmlPostSeparator from webapp_post import individualPostAsHtml -from blocking import isBlockedHashtag +from webapp_hashtagswarm import htmlHashTagSwarm def htmlSearchEmoji(cssCache: {}, translate: {}, @@ -380,79 +380,221 @@ def htmlSearch(cssCache: {}, translate: {}, return followStr -def htmlHashTagSwarm(baseDir: str, actor: str) -> str: - """Returns a tag swarm of today's hashtags +def htmlSkillsSearch(cssCache: {}, translate: {}, baseDir: str, + httpPrefix: str, + skillsearch: str, instanceOnly: bool, + postsPerPage: int) -> str: + """Show a page containing search results for a skill """ - currTime = datetime.utcnow() - daysSinceEpoch = (currTime - datetime(1970, 1, 1)).days - daysSinceEpochStr = str(daysSinceEpoch) + ' ' - tagSwarm = [] + if skillsearch.startswith('*'): + skillsearch = skillsearch[1:].strip() - for subdir, dirs, files in os.walk(baseDir + '/tags'): + skillsearch = skillsearch.lower().strip('\n').strip('\r') + + results = [] + # search instance accounts + for subdir, dirs, files in os.walk(baseDir + '/accounts/'): for f in files: - tagsFilename = os.path.join(baseDir + '/tags', f) - if not os.path.isfile(tagsFilename): + if not f.endswith('.json'): continue - # get last modified datetime - modTimesinceEpoc = os.path.getmtime(tagsFilename) - lastModifiedDate = datetime.fromtimestamp(modTimesinceEpoc) - fileDaysSinceEpoch = (lastModifiedDate - datetime(1970, 1, 1)).days - # check if the file was last modified today - if fileDaysSinceEpoch != daysSinceEpoch: + if '@' not in f: continue + if f.startswith('inbox@'): + continue + actorFilename = os.path.join(subdir, f) + actorJson = loadJson(actorFilename) + if actorJson: + if actorJson.get('id') and \ + actorJson.get('skills') and \ + actorJson.get('name') and \ + actorJson.get('icon'): + actor = actorJson['id'] + for skillName, skillLevel in actorJson['skills'].items(): + skillName = skillName.lower() + if not (skillName in skillsearch or + skillsearch in skillName): + continue + skillLevelStr = str(skillLevel) + if skillLevel < 100: + skillLevelStr = '0' + skillLevelStr + if skillLevel < 10: + skillLevelStr = '0' + skillLevelStr + indexStr = \ + skillLevelStr + ';' + actor + ';' + \ + actorJson['name'] + \ + ';' + actorJson['icon']['url'] + if indexStr not in results: + results.append(indexStr) + if not instanceOnly: + # search actor cache + for subdir, dirs, files in os.walk(baseDir + '/cache/actors/'): + for f in files: + if not f.endswith('.json'): + continue + if '@' not in f: + continue + if f.startswith('inbox@'): + continue + actorFilename = os.path.join(subdir, f) + cachedActorJson = loadJson(actorFilename) + if cachedActorJson: + if cachedActorJson.get('actor'): + actorJson = cachedActorJson['actor'] + if actorJson.get('id') and \ + actorJson.get('skills') and \ + actorJson.get('name') and \ + actorJson.get('icon'): + actor = actorJson['id'] + for skillName, skillLevel in \ + actorJson['skills'].items(): + skillName = skillName.lower() + if not (skillName in skillsearch or + skillsearch in skillName): + continue + skillLevelStr = str(skillLevel) + if skillLevel < 100: + skillLevelStr = '0' + skillLevelStr + if skillLevel < 10: + skillLevelStr = '0' + skillLevelStr + indexStr = \ + skillLevelStr + ';' + actor + ';' + \ + actorJson['name'] + \ + ';' + actorJson['icon']['url'] + if indexStr not in results: + results.append(indexStr) - hashTagName = f.split('.')[0] - if isBlockedHashtag(baseDir, hashTagName): - continue - if daysSinceEpochStr not in open(tagsFilename).read(): - continue - with open(tagsFilename, 'r') as tagsFile: - line = tagsFile.readline() - lineCtr = 1 - tagCtr = 0 - maxLineCtr = 1 - while line: - if ' ' not in line: - line = tagsFile.readline() - lineCtr += 1 - # don't read too many lines - if lineCtr >= maxLineCtr: - break - continue - postDaysSinceEpochStr = line.split(' ')[0] - if not postDaysSinceEpochStr.isdigit(): - line = tagsFile.readline() - lineCtr += 1 - # don't read too many lines - if lineCtr >= maxLineCtr: - break - continue - postDaysSinceEpoch = int(postDaysSinceEpochStr) - if postDaysSinceEpoch < daysSinceEpoch: - break - if postDaysSinceEpoch == daysSinceEpoch: - if tagCtr == 0: - tagSwarm.append(hashTagName) - tagCtr += 1 + results.sort(reverse=True) - line = tagsFile.readline() - lineCtr += 1 - # don't read too many lines - if lineCtr >= maxLineCtr: - break + cssFilename = baseDir + '/epicyon-profile.css' + if os.path.isfile(baseDir + '/epicyon.css'): + cssFilename = baseDir + '/epicyon.css' - if not tagSwarm: - return '' - tagSwarm.sort() - tagSwarmStr = '' - ctr = 0 - for tagName in tagSwarm: - tagSwarmStr += \ - '' + tagName + '\n' - ctr += 1 - tagSwarmHtml = tagSwarmStr.strip() + '\n' - return tagSwarmHtml + skillSearchForm = htmlHeaderWithExternalStyle(cssFilename) + skillSearchForm += \ + '

' + translate['Skills search'] + ': ' + \ + skillsearch + '

' + + if len(results) == 0: + skillSearchForm += \ + '
' + translate['No results'] + \ + '
' + else: + skillSearchForm += '
' + ctr = 0 + for skillMatch in results: + skillMatchFields = skillMatch.split(';') + if len(skillMatchFields) != 4: + continue + actor = skillMatchFields[1] + actorName = skillMatchFields[2] + avatarUrl = skillMatchFields[3] + skillSearchForm += \ + '' + ctr += 1 + if ctr >= postsPerPage: + break + skillSearchForm += '
' + skillSearchForm += htmlFooter() + return skillSearchForm + + +def htmlHistorySearch(cssCache: {}, translate: {}, baseDir: str, + httpPrefix: str, + nickname: str, domain: str, + historysearch: str, + postsPerPage: int, pageNumber: int, + projectVersion: str, + recentPostsCache: {}, + maxRecentPosts: int, + session, + wfRequest, + personCache: {}, + port: int, + YTReplacementDomain: str, + showPublishedDateOnly: bool) -> str: + """Show a page containing search results for your post history + """ + if historysearch.startswith('!'): + historysearch = historysearch[1:].strip() + + historysearch = historysearch.lower().strip('\n').strip('\r') + + boxFilenames = \ + searchBoxPosts(baseDir, nickname, domain, + historysearch, postsPerPage) + + cssFilename = baseDir + '/epicyon-profile.css' + if os.path.isfile(baseDir + '/epicyon.css'): + cssFilename = baseDir + '/epicyon.css' + + historySearchForm = \ + htmlHeaderWithExternalStyle(cssFilename) + + # add the page title + historySearchForm += \ + '

' + translate['Your Posts'] + '

' + + if len(boxFilenames) == 0: + historySearchForm += \ + '
' + translate['No results'] + \ + '
' + return historySearchForm + + iconsPath = getIconsWebPath(baseDir) + separatorStr = htmlPostSeparator(baseDir, None) + + # ensure that the page number is in bounds + if not pageNumber: + pageNumber = 1 + elif pageNumber < 1: + pageNumber = 1 + + # get the start end end within the index file + startIndex = int((pageNumber - 1) * postsPerPage) + endIndex = startIndex + postsPerPage + noOfBoxFilenames = len(boxFilenames) + if endIndex >= noOfBoxFilenames and noOfBoxFilenames > 0: + endIndex = noOfBoxFilenames - 1 + + index = startIndex + while index <= endIndex: + postFilename = boxFilenames[index] + if not postFilename: + index += 1 + continue + postJsonObject = loadJson(postFilename) + if not postJsonObject: + index += 1 + continue + showIndividualPostIcons = True + allowDeletion = False + postStr = \ + individualPostAsHtml(True, recentPostsCache, + maxRecentPosts, + iconsPath, translate, None, + baseDir, session, wfRequest, + personCache, + nickname, domain, port, + postJsonObject, + None, True, allowDeletion, + httpPrefix, projectVersion, + 'search', + YTReplacementDomain, + showPublishedDateOnly, + showIndividualPostIcons, + showIndividualPostIcons, + False, False, False) + if postStr: + historySearchForm += separatorStr + postStr + index += 1 + + historySearchForm += htmlFooter() + return historySearchForm def htmlHashtagSearch(cssCache: {}, @@ -711,220 +853,3 @@ def rssHashtagSearch(nickname: str, domain: str, port: int, break return hashtagFeed + rss2TagFooter() - - -def htmlSkillsSearch(cssCache: {}, translate: {}, baseDir: str, - httpPrefix: str, - skillsearch: str, instanceOnly: bool, - postsPerPage: int) -> str: - """Show a page containing search results for a skill - """ - if skillsearch.startswith('*'): - skillsearch = skillsearch[1:].strip() - - skillsearch = skillsearch.lower().strip('\n').strip('\r') - - results = [] - # search instance accounts - for subdir, dirs, files in os.walk(baseDir + '/accounts/'): - for f in files: - if not f.endswith('.json'): - continue - if '@' not in f: - continue - if f.startswith('inbox@'): - continue - actorFilename = os.path.join(subdir, f) - actorJson = loadJson(actorFilename) - if actorJson: - if actorJson.get('id') and \ - actorJson.get('skills') and \ - actorJson.get('name') and \ - actorJson.get('icon'): - actor = actorJson['id'] - for skillName, skillLevel in actorJson['skills'].items(): - skillName = skillName.lower() - if not (skillName in skillsearch or - skillsearch in skillName): - continue - skillLevelStr = str(skillLevel) - if skillLevel < 100: - skillLevelStr = '0' + skillLevelStr - if skillLevel < 10: - skillLevelStr = '0' + skillLevelStr - indexStr = \ - skillLevelStr + ';' + actor + ';' + \ - actorJson['name'] + \ - ';' + actorJson['icon']['url'] - if indexStr not in results: - results.append(indexStr) - if not instanceOnly: - # search actor cache - for subdir, dirs, files in os.walk(baseDir + '/cache/actors/'): - for f in files: - if not f.endswith('.json'): - continue - if '@' not in f: - continue - if f.startswith('inbox@'): - continue - actorFilename = os.path.join(subdir, f) - cachedActorJson = loadJson(actorFilename) - if cachedActorJson: - if cachedActorJson.get('actor'): - actorJson = cachedActorJson['actor'] - if actorJson.get('id') and \ - actorJson.get('skills') and \ - actorJson.get('name') and \ - actorJson.get('icon'): - actor = actorJson['id'] - for skillName, skillLevel in \ - actorJson['skills'].items(): - skillName = skillName.lower() - if not (skillName in skillsearch or - skillsearch in skillName): - continue - skillLevelStr = str(skillLevel) - if skillLevel < 100: - skillLevelStr = '0' + skillLevelStr - if skillLevel < 10: - skillLevelStr = '0' + skillLevelStr - indexStr = \ - skillLevelStr + ';' + actor + ';' + \ - actorJson['name'] + \ - ';' + actorJson['icon']['url'] - if indexStr not in results: - results.append(indexStr) - - results.sort(reverse=True) - - cssFilename = baseDir + '/epicyon-profile.css' - if os.path.isfile(baseDir + '/epicyon.css'): - cssFilename = baseDir + '/epicyon.css' - - skillSearchForm = htmlHeaderWithExternalStyle(cssFilename) - skillSearchForm += \ - '

' + translate['Skills search'] + ': ' + \ - skillsearch + '

' - - if len(results) == 0: - skillSearchForm += \ - '
' + translate['No results'] + \ - '
' - else: - skillSearchForm += '
' - ctr = 0 - for skillMatch in results: - skillMatchFields = skillMatch.split(';') - if len(skillMatchFields) != 4: - continue - actor = skillMatchFields[1] - actorName = skillMatchFields[2] - avatarUrl = skillMatchFields[3] - skillSearchForm += \ - '' - ctr += 1 - if ctr >= postsPerPage: - break - skillSearchForm += '
' - skillSearchForm += htmlFooter() - return skillSearchForm - - -def htmlHistorySearch(cssCache: {}, translate: {}, baseDir: str, - httpPrefix: str, - nickname: str, domain: str, - historysearch: str, - postsPerPage: int, pageNumber: int, - projectVersion: str, - recentPostsCache: {}, - maxRecentPosts: int, - session, - wfRequest, - personCache: {}, - port: int, - YTReplacementDomain: str, - showPublishedDateOnly: bool) -> str: - """Show a page containing search results for your post history - """ - if historysearch.startswith('!'): - historysearch = historysearch[1:].strip() - - historysearch = historysearch.lower().strip('\n').strip('\r') - - boxFilenames = \ - searchBoxPosts(baseDir, nickname, domain, - historysearch, postsPerPage) - - cssFilename = baseDir + '/epicyon-profile.css' - if os.path.isfile(baseDir + '/epicyon.css'): - cssFilename = baseDir + '/epicyon.css' - - historySearchForm = \ - htmlHeaderWithExternalStyle(cssFilename) - - # add the page title - historySearchForm += \ - '

' + translate['Your Posts'] + '

' - - if len(boxFilenames) == 0: - historySearchForm += \ - '
' + translate['No results'] + \ - '
' - return historySearchForm - - iconsPath = getIconsWebPath(baseDir) - separatorStr = htmlPostSeparator(baseDir, None) - - # ensure that the page number is in bounds - if not pageNumber: - pageNumber = 1 - elif pageNumber < 1: - pageNumber = 1 - - # get the start end end within the index file - startIndex = int((pageNumber - 1) * postsPerPage) - endIndex = startIndex + postsPerPage - noOfBoxFilenames = len(boxFilenames) - if endIndex >= noOfBoxFilenames and noOfBoxFilenames > 0: - endIndex = noOfBoxFilenames - 1 - - index = startIndex - while index <= endIndex: - postFilename = boxFilenames[index] - if not postFilename: - index += 1 - continue - postJsonObject = loadJson(postFilename) - if not postJsonObject: - index += 1 - continue - showIndividualPostIcons = True - allowDeletion = False - postStr = \ - individualPostAsHtml(True, recentPostsCache, - maxRecentPosts, - iconsPath, translate, None, - baseDir, session, wfRequest, - personCache, - nickname, domain, port, - postJsonObject, - None, True, allowDeletion, - httpPrefix, projectVersion, - 'search', - YTReplacementDomain, - showPublishedDateOnly, - showIndividualPostIcons, - showIndividualPostIcons, - False, False, False) - if postStr: - historySearchForm += separatorStr + postStr - index += 1 - - historySearchForm += htmlFooter() - return historySearchForm From 395ee53424a2ccb612a80ffca4a8fc9ed54465e2 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 19 Nov 2020 14:32:17 +0000 Subject: [PATCH 36/56] Simplify --- webapp_hashtagswarm.py | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/webapp_hashtagswarm.py b/webapp_hashtagswarm.py index ae63481b2..3b858278b 100644 --- a/webapp_hashtagswarm.py +++ b/webapp_hashtagswarm.py @@ -39,25 +39,15 @@ def htmlHashTagSwarm(baseDir: str, actor: str) -> str: continue with open(tagsFilename, 'r') as tagsFile: line = tagsFile.readline() - lineCtr = 1 tagCtr = 0 - maxLineCtr = 1 while line: if ' ' not in line: line = tagsFile.readline() - lineCtr += 1 - # don't read too many lines - if lineCtr >= maxLineCtr: - break - continue + break postDaysSinceEpochStr = line.split(' ')[0] if not postDaysSinceEpochStr.isdigit(): line = tagsFile.readline() - lineCtr += 1 - # don't read too many lines - if lineCtr >= maxLineCtr: - break - continue + break postDaysSinceEpoch = int(postDaysSinceEpochStr) if postDaysSinceEpoch < daysSinceEpoch: break @@ -67,10 +57,7 @@ def htmlHashTagSwarm(baseDir: str, actor: str) -> str: tagCtr += 1 line = tagsFile.readline() - lineCtr += 1 - # don't read too many lines - if lineCtr >= maxLineCtr: - break + break if not tagSwarm: return '' From 6c8298c554b01ceffd07c85c9174d8faa53f731a Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 19 Nov 2020 14:45:30 +0000 Subject: [PATCH 37/56] Simplify --- webapp_hashtagswarm.py | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/webapp_hashtagswarm.py b/webapp_hashtagswarm.py index 3b858278b..7f9e0b3d9 100644 --- a/webapp_hashtagswarm.py +++ b/webapp_hashtagswarm.py @@ -38,26 +38,21 @@ def htmlHashTagSwarm(baseDir: str, actor: str) -> str: if daysSinceEpochStr not in open(tagsFilename).read(): continue with open(tagsFilename, 'r') as tagsFile: - line = tagsFile.readline() - tagCtr = 0 - while line: - if ' ' not in line: - line = tagsFile.readline() + while True: + line = tagsFile.readline() + if not line: + break + elif ' ' not in line: break postDaysSinceEpochStr = line.split(' ')[0] if not postDaysSinceEpochStr.isdigit(): - line = tagsFile.readline() break postDaysSinceEpoch = int(postDaysSinceEpochStr) if postDaysSinceEpoch < daysSinceEpoch: break - if postDaysSinceEpoch == daysSinceEpoch: - if tagCtr == 0: - tagSwarm.append(hashTagName) - tagCtr += 1 - - line = tagsFile.readline() - break + elif postDaysSinceEpoch == daysSinceEpoch: + tagSwarm.append(hashTagName) + break if not tagSwarm: return '' From 6353d80872197f9e7eae1d7593b3f73063c88579 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 19 Nov 2020 16:41:28 +0000 Subject: [PATCH 38/56] Hashtag domain histogram --- epicyon-search.css | 10 ++++++ webapp_hashtagswarm.py | 75 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 84 insertions(+), 1 deletion(-) diff --git a/epicyon-search.css b/epicyon-search.css index 0b04e0458..15664a033 100644 --- a/epicyon-search.css +++ b/epicyon-search.css @@ -90,6 +90,16 @@ a:focus { border: 2px solid var(--focus-color); } +.domainHistogram { + border: 0; +} +.domainHistogramLeft { + float: right; +} +.domainHistogramRight { + float: left; +} + .follow { background-image: url("follow-background.jpg"); background-size: cover; diff --git a/webapp_hashtagswarm.py b/webapp_hashtagswarm.py index 7f9e0b3d9..cb31d8abe 100644 --- a/webapp_hashtagswarm.py +++ b/webapp_hashtagswarm.py @@ -11,6 +11,64 @@ from blocking import isBlockedHashtag from datetime import datetime +def getHashtagDomainMax(domainHistogram: {}) -> str: + """Returns the domain with the maximum number of hashtags + """ + maxCount = 1 + maxDomain = None + for domain, count in domainHistogram.items(): + if count > maxCount: + maxDomain = domain + maxCount = count + return maxDomain + + +def getHashtagDomainHistogram(domainHistogram: {}) -> str: + """Returns the html for a histogram of domains + from which hashtags are coming + """ + totalCount = 0 + for domain, count in domainHistogram.items(): + totalCount += count + if totalCount == 0: + return '' + + htmlStr = '' + histogramHeaderStr = '
\n' + histogramHeaderStr += ' \n' + histogramHeaderStr += ' \n' + histogramHeaderStr += ' \n' + histogramHeaderStr += ' \n' + histogramHeaderStr += ' \n' + histogramHeaderStr += ' \n' + histogramHeaderStr += ' \n' + + leftColStr = '' + rightColStr = '' + + for i in range(len(domainHistogram)): + domain = getHashtagDomainMax(domainHistogram) + if not domain: + break + percent = int(domainHistogram[domain] * 100 / totalCount) + if histogramHeaderStr: + htmlStr += histogramHeaderStr + histogramHeaderStr = None + leftColStr += str(percent) + '%
' + rightColStr += domain + '
' + del domainHistogram[domain] + + if htmlStr: + htmlStr += ' \n' + htmlStr += ' \n' + htmlStr += ' \n' + htmlStr += ' \n' + htmlStr += '
' + leftColStr + '' + rightColStr + '
\n' + htmlStr += '
\n' + + return htmlStr + + def htmlHashTagSwarm(baseDir: str, actor: str) -> str: """Returns a tag swarm of today's hashtags """ @@ -18,6 +76,7 @@ def htmlHashTagSwarm(baseDir: str, actor: str) -> str: daysSinceEpoch = (currTime - datetime(1970, 1, 1)).days daysSinceEpochStr = str(daysSinceEpoch) + ' ' tagSwarm = [] + domainHistogram = {} for subdir, dirs, files in os.walk(baseDir + '/tags'): for f in files: @@ -44,13 +103,26 @@ def htmlHashTagSwarm(baseDir: str, actor: str) -> str: break elif ' ' not in line: break - postDaysSinceEpochStr = line.split(' ')[0] + sections = line.split(' ') + if len(sections) != 3: + break + postDaysSinceEpochStr = sections[0] if not postDaysSinceEpochStr.isdigit(): break postDaysSinceEpoch = int(postDaysSinceEpochStr) if postDaysSinceEpoch < daysSinceEpoch: break elif postDaysSinceEpoch == daysSinceEpoch: + postUrl = sections[2] + if '##' in postUrl: + postDomain = postUrl.split('##')[1] + if '#' in postDomain: + postDomain = postDomain.split('#')[0] + if domainHistogram.get(postDomain): + domainHistogram[postDomain] = \ + domainHistogram[postDomain] + 1 + else: + domainHistogram[postDomain] = 1 tagSwarm.append(hashTagName) break @@ -65,4 +137,5 @@ def htmlHashTagSwarm(baseDir: str, actor: str) -> str: '" class="hashtagswarm">' + tagName + '\n' ctr += 1 tagSwarmHtml = tagSwarmStr.strip() + '\n' + tagSwarmHtml += getHashtagDomainHistogram(domainHistogram) return tagSwarmHtml From b5d34baecc553a6b107e26751301be3bb53f2848 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 19 Nov 2020 16:49:29 +0000 Subject: [PATCH 39/56] Domain histogram font size --- epicyon-search.css | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/epicyon-search.css b/epicyon-search.css index 15664a033..81a4dc3e4 100644 --- a/epicyon-search.css +++ b/epicyon-search.css @@ -90,9 +90,6 @@ a:focus { border: 2px solid var(--focus-color); } -.domainHistogram { - border: 0; -} .domainHistogramLeft { float: right; } @@ -202,6 +199,10 @@ input[type=text] { } @media screen and (min-width: 400px) { + .domainHistogram { + border: 0; + font-size: var(--hashtag-size1); + } .timeline-banner { object-fit: cover; width: 98vw; @@ -254,6 +255,10 @@ input[type=text] { } @media screen and (max-width: 1000px) { + .domainHistogram { + border: 0; + font-size: var(--hashtag-size2); + } .timeline-banner { object-fit: cover; width: 98vw; From d241fb146c29f0e5cb74a9eda62d5675f4fb64a0 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 19 Nov 2020 17:09:50 +0000 Subject: [PATCH 40/56] Hashtag histogram title --- epicyon-search.css | 7 +++++++ translations/ar.json | 3 ++- translations/ca.json | 3 ++- translations/cy.json | 3 ++- translations/de.json | 3 ++- translations/en.json | 3 ++- translations/es.json | 3 ++- translations/fr.json | 3 ++- translations/ga.json | 3 ++- translations/hi.json | 3 ++- translations/it.json | 3 ++- translations/ja.json | 3 ++- translations/oc.json | 3 ++- translations/pt.json | 3 ++- translations/ru.json | 3 ++- translations/zh.json | 3 ++- webapp_hashtagswarm.py | 7 ++++--- webapp_search.py | 2 +- 18 files changed, 42 insertions(+), 19 deletions(-) diff --git a/epicyon-search.css b/epicyon-search.css index 81a4dc3e4..16ae3fb4b 100644 --- a/epicyon-search.css +++ b/epicyon-search.css @@ -35,6 +35,8 @@ --focus-color: white; --search-banner-height: 30vh; --search-banner-height-mobile: 20vh; + --title-color: #999; + --header-font: 'Arial, Helvetica, sans-serif'; } @font-face { @@ -62,6 +64,11 @@ body, html { min-width: 600px; } +h1 { + font-family: var(--header-font); + color: var(--title-color); +} + a, u { color: var(--main-fg-color); } diff --git a/translations/ar.json b/translations/ar.json index 3d19e6d50..8f8b54018 100644 --- a/translations/ar.json +++ b/translations/ar.json @@ -329,5 +329,6 @@ "Choose newswire items referenced in your article": "اختر العناصر الإخبارية المشار إليها في مقالتك", "RSS feed for your blog": "تغذية RSS لمدونتك", "Create a new shared item": "إنشاء عنصر مشترك جديد", - "Rc3": "Rc3" + "Rc3": "Rc3", + "Hashtag origins": "أصول الهاشتاق" } diff --git a/translations/ca.json b/translations/ca.json index 741887da8..0d4859f51 100644 --- a/translations/ca.json +++ b/translations/ca.json @@ -329,5 +329,6 @@ "Choose newswire items referenced in your article": "Trieu articles de newswire als quals faci referència el vostre article", "RSS feed for your blog": "Feed RSS del vostre bloc", "Create a new shared item": "Creeu un element compartit nou", - "Rc3": "Rc3" + "Rc3": "Rc3", + "Hashtag origins": "Orígens de hashtag" } diff --git a/translations/cy.json b/translations/cy.json index 8f16d5969..0ff025d0d 100644 --- a/translations/cy.json +++ b/translations/cy.json @@ -329,5 +329,6 @@ "Choose newswire items referenced in your article": "Dewiswch eitemau newyddion y cyfeirir atynt yn eich erthygl", "RSS feed for your blog": "Porthiant RSS ar gyfer eich blog", "Create a new shared item": "Creu eitem newydd a rennir", - "Rc3": "Rc3" + "Rc3": "Rc3", + "Hashtag origins": "Gwreiddiau Hashtag" } diff --git a/translations/de.json b/translations/de.json index e0bb78ea0..d8072410f 100644 --- a/translations/de.json +++ b/translations/de.json @@ -329,5 +329,6 @@ "Choose newswire items referenced in your article": "Wählen Sie Newswire-Artikel aus, auf die in Ihrem Artikel verwiesen wird", "RSS feed for your blog": "RSS-Feed für Ihr Blog", "Create a new shared item": "Erstellen Sie ein neues freigegebenes Element", - "Rc3": "Rc3" + "Rc3": "Rc3", + "Hashtag origins": "Hashtag-Ursprünge" } diff --git a/translations/en.json b/translations/en.json index 74ffd65d0..aac880269 100644 --- a/translations/en.json +++ b/translations/en.json @@ -329,5 +329,6 @@ "Choose newswire items referenced in your article": "Choose newswire items referenced in your article", "RSS feed for your blog": "RSS feed for your blog", "Create a new shared item": "Create a new shared item", - "Rc3": "Rc3" + "Rc3": "Rc3", + "Hashtag origins": "Hashtag origins" } diff --git a/translations/es.json b/translations/es.json index 427ce582e..9bedd3634 100644 --- a/translations/es.json +++ b/translations/es.json @@ -329,5 +329,6 @@ "Choose newswire items referenced in your article": "Elija elementos de Newswire a los que se hace referencia en su artículo", "RSS feed for your blog": "Fuente RSS para tu blog", "Create a new shared item": "Crea un nuevo elemento compartido", - "Rc3": "Rc3" + "Rc3": "Rc3", + "Hashtag origins": "Orígenes del hashtag" } diff --git a/translations/fr.json b/translations/fr.json index d9e10c0af..f6751c253 100644 --- a/translations/fr.json +++ b/translations/fr.json @@ -329,5 +329,6 @@ "Choose newswire items referenced in your article": "Choisissez les éléments de fil d'actualité référencés dans votre article", "RSS feed for your blog": "Flux RSS pour votre blog", "Create a new shared item": "Créer un nouvel élément partagé", - "Rc3": "Rc3" + "Rc3": "Rc3", + "Hashtag origins": "Origines des hashtags" } diff --git a/translations/ga.json b/translations/ga.json index cbfe07da5..96610433c 100644 --- a/translations/ga.json +++ b/translations/ga.json @@ -329,5 +329,6 @@ "Choose newswire items referenced in your article": "Roghnaigh míreanna sreanga nuachta dá dtagraítear i d’alt", "RSS feed for your blog": "Fotha RSS do do bhlag", "Create a new shared item": "Cruthaigh mír nua roinnte", - "Rc3": "Rc3" + "Rc3": "Rc3", + "Hashtag origins": "Bunús Hashtag" } diff --git a/translations/hi.json b/translations/hi.json index 8875da63c..fff80d94d 100644 --- a/translations/hi.json +++ b/translations/hi.json @@ -329,5 +329,6 @@ "Choose newswire items referenced in your article": "अपने लेख में संदर्भित newswire आइटम चुनें", "RSS feed for your blog": "RSS आपके ब्लॉग के लिए फ़ीड करता है", "Create a new shared item": "एक नया साझा आइटम बनाएं", - "Rc3": "Rc3" + "Rc3": "Rc3", + "Hashtag origins": "हैशटैग की उत्पत्ति" } diff --git a/translations/it.json b/translations/it.json index e72c14aa7..799fca7b3 100644 --- a/translations/it.json +++ b/translations/it.json @@ -329,5 +329,6 @@ "Choose newswire items referenced in your article": "Scegli gli articoli del newswire a cui fa riferimento il tuo articolo", "RSS feed for your blog": "Feed RSS per il tuo blog", "Create a new shared item": "Crea un nuovo elemento condiviso", - "Rc3": "Rc3" + "Rc3": "Rc3", + "Hashtag origins": "Origini hashtag" } diff --git a/translations/ja.json b/translations/ja.json index 1d0881313..f26fe9c0d 100644 --- a/translations/ja.json +++ b/translations/ja.json @@ -329,5 +329,6 @@ "Choose newswire items referenced in your article": "あなたの記事で参照されているニュースワイヤーアイテムを選択してください", "RSS feed for your blog": "ブログのRSSフィード", "Create a new shared item": "新しい共有アイテムを作成する", - "Rc3": "Rc3" + "Rc3": "Rc3", + "Hashtag origins": "ハッシュタグの起源" } diff --git a/translations/oc.json b/translations/oc.json index 3e954109b..6e1ae44d5 100644 --- a/translations/oc.json +++ b/translations/oc.json @@ -325,5 +325,6 @@ "Choose newswire items referenced in your article": "Choose newswire items referenced in your article", "RSS feed for your blog": "RSS feed for your blog", "Create a new shared item": "Create a new shared item", - "Rc3": "Rc3" + "Rc3": "Rc3", + "Hashtag origins": "Hashtag origins" } diff --git a/translations/pt.json b/translations/pt.json index fc9c721a1..6f8a999ac 100644 --- a/translations/pt.json +++ b/translations/pt.json @@ -329,5 +329,6 @@ "Choose newswire items referenced in your article": "Escolha os itens de notícias mencionados em seu artigo", "RSS feed for your blog": "Feed RSS para o seu blog", "Create a new shared item": "Crie um novo item compartilhado", - "Rc3": "Rc3" + "Rc3": "Rc3", + "Hashtag origins": "Origens de hashtag" } diff --git a/translations/ru.json b/translations/ru.json index e8a39c26b..f736bb5ef 100644 --- a/translations/ru.json +++ b/translations/ru.json @@ -329,5 +329,6 @@ "Choose newswire items referenced in your article": "Выберите элементы ленты новостей, на которые есть ссылки в вашей статье", "RSS feed for your blog": "RSS-канал для вашего блога", "Create a new shared item": "Создать новый общий элемент", - "Rc3": "Rc3" + "Rc3": "Rc3", + "Hashtag origins": "Происхождение хэштегов" } diff --git a/translations/zh.json b/translations/zh.json index d0e26f6fc..b49452236 100644 --- a/translations/zh.json +++ b/translations/zh.json @@ -329,5 +329,6 @@ "Choose newswire items referenced in your article": "选择文章中引用的新闻专栏文章", "RSS feed for your blog": "您博客的RSS供稿", "Create a new shared item": "创建一个新的共享项目", - "Rc3": "Rc3" + "Rc3": "Rc3", + "Hashtag origins": "标签起源" } diff --git a/webapp_hashtagswarm.py b/webapp_hashtagswarm.py index cb31d8abe..16d3a3ae8 100644 --- a/webapp_hashtagswarm.py +++ b/webapp_hashtagswarm.py @@ -23,7 +23,7 @@ def getHashtagDomainMax(domainHistogram: {}) -> str: return maxDomain -def getHashtagDomainHistogram(domainHistogram: {}) -> str: +def getHashtagDomainHistogram(domainHistogram: {}, translate: {}) -> str: """Returns the html for a histogram of domains from which hashtags are coming """ @@ -35,6 +35,7 @@ def getHashtagDomainHistogram(domainHistogram: {}) -> str: htmlStr = '' histogramHeaderStr = '
\n' + histogramHeaderStr += '

' + translate['Hashtag origins'] + '

\n' histogramHeaderStr += ' \n' histogramHeaderStr += ' \n' histogramHeaderStr += ' \n' @@ -69,7 +70,7 @@ def getHashtagDomainHistogram(domainHistogram: {}) -> str: return htmlStr -def htmlHashTagSwarm(baseDir: str, actor: str) -> str: +def htmlHashTagSwarm(baseDir: str, actor: str, translate: {}) -> str: """Returns a tag swarm of today's hashtags """ currTime = datetime.utcnow() @@ -137,5 +138,5 @@ def htmlHashTagSwarm(baseDir: str, actor: str) -> str: '" class="hashtagswarm">' + tagName + '\n' ctr += 1 tagSwarmHtml = tagSwarmStr.strip() + '\n' - tagSwarmHtml += getHashtagDomainHistogram(domainHistogram) + tagSwarmHtml += getHashtagDomainHistogram(domainHistogram, translate) return tagSwarmHtml diff --git a/webapp_search.py b/webapp_search.py index c50773cfe..d3418d404 100644 --- a/webapp_search.py +++ b/webapp_search.py @@ -372,7 +372,7 @@ def htmlSearch(cssCache: {}, translate: {}, 'name="submitSearch">' + translate['Submit'] + '\n' followStr += ' \n' followStr += '

' + \ - htmlHashTagSwarm(baseDir, actor) + '

\n' + htmlHashTagSwarm(baseDir, actor, translate) + '

\n' followStr += ' \n' followStr += ' \n' followStr += '\n' From 436262ec6c745b9c46435cf1ace6e60a3c8060a5 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 19 Nov 2020 17:13:32 +0000 Subject: [PATCH 41/56] Extra line --- webapp_hashtagswarm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp_hashtagswarm.py b/webapp_hashtagswarm.py index 16d3a3ae8..90f1f4a4f 100644 --- a/webapp_hashtagswarm.py +++ b/webapp_hashtagswarm.py @@ -34,7 +34,7 @@ def getHashtagDomainHistogram(domainHistogram: {}, translate: {}) -> str: return '' htmlStr = '' - histogramHeaderStr = '
\n' + histogramHeaderStr = '

\n' histogramHeaderStr += '

' + translate['Hashtag origins'] + '

\n' histogramHeaderStr += '
\n' histogramHeaderStr += ' \n' From 5ef1be0c37918e3067130039e75d1d05d031e50e Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 19 Nov 2020 17:54:25 +0000 Subject: [PATCH 42/56] Longer span for hashtags --- webapp_hashtagswarm.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webapp_hashtagswarm.py b/webapp_hashtagswarm.py index 90f1f4a4f..3c29f0687 100644 --- a/webapp_hashtagswarm.py +++ b/webapp_hashtagswarm.py @@ -111,9 +111,9 @@ def htmlHashTagSwarm(baseDir: str, actor: str, translate: {}) -> str: if not postDaysSinceEpochStr.isdigit(): break postDaysSinceEpoch = int(postDaysSinceEpochStr) - if postDaysSinceEpoch < daysSinceEpoch: + if postDaysSinceEpoch < daysSinceEpoch - 1: break - elif postDaysSinceEpoch == daysSinceEpoch: + elif postDaysSinceEpoch >= daysSinceEpoch -1: postUrl = sections[2] if '##' in postUrl: postDomain = postUrl.split('##')[1] From 9e7536b99e0d6d67475770183edc66df70be4dfc Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 19 Nov 2020 17:58:42 +0000 Subject: [PATCH 43/56] simplify --- webapp_hashtagswarm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp_hashtagswarm.py b/webapp_hashtagswarm.py index 3c29f0687..ee706241f 100644 --- a/webapp_hashtagswarm.py +++ b/webapp_hashtagswarm.py @@ -113,7 +113,7 @@ def htmlHashTagSwarm(baseDir: str, actor: str, translate: {}) -> str: postDaysSinceEpoch = int(postDaysSinceEpochStr) if postDaysSinceEpoch < daysSinceEpoch - 1: break - elif postDaysSinceEpoch >= daysSinceEpoch -1: + else: postUrl = sections[2] if '##' in postUrl: postDomain = postUrl.split('##')[1] From c2aae98b877d476c9577a3ee2c1e71506643f9b2 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 19 Nov 2020 18:01:42 +0000 Subject: [PATCH 44/56] Indentation --- webapp_hashtagswarm.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/webapp_hashtagswarm.py b/webapp_hashtagswarm.py index ee706241f..c3ac83695 100644 --- a/webapp_hashtagswarm.py +++ b/webapp_hashtagswarm.py @@ -124,8 +124,8 @@ def htmlHashTagSwarm(baseDir: str, actor: str, translate: {}) -> str: domainHistogram[postDomain] + 1 else: domainHistogram[postDomain] = 1 - tagSwarm.append(hashTagName) - break + tagSwarm.append(hashTagName) + break if not tagSwarm: return '' From 64b7cf4b1172f8754c13000d4ef0baa2ef1e5b40 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 19 Nov 2020 18:07:17 +0000 Subject: [PATCH 45/56] Less indentation --- webapp_hashtagswarm.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/webapp_hashtagswarm.py b/webapp_hashtagswarm.py index c3ac83695..6cf95974f 100644 --- a/webapp_hashtagswarm.py +++ b/webapp_hashtagswarm.py @@ -115,17 +115,18 @@ def htmlHashTagSwarm(baseDir: str, actor: str, translate: {}) -> str: break else: postUrl = sections[2] - if '##' in postUrl: - postDomain = postUrl.split('##')[1] - if '#' in postDomain: - postDomain = postDomain.split('#')[0] - if domainHistogram.get(postDomain): - domainHistogram[postDomain] = \ - domainHistogram[postDomain] + 1 - else: - domainHistogram[postDomain] = 1 - tagSwarm.append(hashTagName) + if '##' not in postUrl: break + postDomain = postUrl.split('##')[1] + if '#' in postDomain: + postDomain = postDomain.split('#')[0] + if domainHistogram.get(postDomain): + domainHistogram[postDomain] = \ + domainHistogram[postDomain] + 1 + else: + domainHistogram[postDomain] = 1 + tagSwarm.append(hashTagName) + break if not tagSwarm: return '' From 1eae5569500d6fd7b24364a3226a36abfbebff57 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 19 Nov 2020 20:26:56 +0000 Subject: [PATCH 46/56] Reintroduce indymedia logo --- theme/indymediamodern/left_col_image.png | Bin 0 -> 9369 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 theme/indymediamodern/left_col_image.png diff --git a/theme/indymediamodern/left_col_image.png b/theme/indymediamodern/left_col_image.png new file mode 100644 index 0000000000000000000000000000000000000000..fdf06cfd59feba7289970506e351f1454cc330ec GIT binary patch literal 9369 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ⅈ$x@*1^7qYxgO&1{MReoK9B_XrS0fK+>#X? zxW#}1JR4`8FO5oJ31YIbT#Yky1u@x{{k$|M7 zXALO8uj0t>VB4%2#4CwN^D-aIcr={H_L=d7Q4!uUpa4VS#_b5(+P@+RqNoOK@y!WJ zt(a~=0pcZy(P7K~819L8hHtEq6TVRS;kdTD*nk4Gjti#`hy4CByqcH<&)8#NsG#w! zacpyAlGO*}Et4;WV-6iriBSVjqX=b^HwLRCU|=gK-(am0Hfn}yB`(w~mz^TW!wi%f zD3C%yhJl@cy)ll!HN#R^ScFSag>X5R#bp*~WMBdKA*LMm#%|11x*;IN5x_6ht}v3q z*#;C~K@9o30dFKU+bF@vh*53u2>KgPfKOt^UGrqi>WjDMSsI5WKpzKV#@){3o0cmZ zl3M}bD?qH#&{qIo0d#S|R{(zo@D-p6+W`B01@INXSAZ(K1o#S&vdA=WqNf1GRYw6* zHwB?F1~YzJ!$2}+2`3>eA0NR-(%=#UAz!&?MP(eu)LjA^#=XV;z5-Nj1vuy{K-E@& z1HJ+z6B_t4fIkEH3Q&a=ppmZt{tV#T099520tu*0>?=SLAzky{Vig?r6(D(#seGG= zDo!EaSAeQ)0#;H5NY%}t9BhFV*A{ojxji2~eE9I;BewWI?ceLZP-_4H00K!wK~ym0 T1lp}A00000NkvXXu0mjf8uyad literal 0 HcmV?d00001 From 7fa8b3deea378eebb30f4f42802ce51bd89e5755 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 19 Nov 2020 20:29:56 +0000 Subject: [PATCH 47/56] Right column width --- theme/indymediamodern/theme.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/theme/indymediamodern/theme.json b/theme/indymediamodern/theme.json index 83e14160b..fed579165 100644 --- a/theme/indymediamodern/theme.json +++ b/theme/indymediamodern/theme.json @@ -47,7 +47,7 @@ "container-button-padding": "0px", "container-button-margin": "0px", "column-left-icon-size": "15%", - "column-right-icon-size": "15%", + "column-right-icon-size": "11%", "button-height-padding": "5px", "icon-brightness-change": "70%", "border-width": "0px", @@ -58,8 +58,8 @@ "login-button-color": "#25408f", "login-button-fg-color": "white", "column-left-width": "10vw", - "column-center-width": "80vw", - "column-right-width": "10vw", + "column-center-width": "70vw", + "column-right-width": "20vw", "column-right-fg-color": "#25408f", "column-right-fg-color-voted-on": "red", "newswire-item-moderated-color": "red", From 93a6441223cbcb4afde2d0322cbea166ce16eac2 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 19 Nov 2020 20:35:36 +0000 Subject: [PATCH 48/56] Smaller right column icons --- theme/indymediamodern/theme.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/theme/indymediamodern/theme.json b/theme/indymediamodern/theme.json index fed579165..364deef85 100644 --- a/theme/indymediamodern/theme.json +++ b/theme/indymediamodern/theme.json @@ -47,7 +47,7 @@ "container-button-padding": "0px", "container-button-margin": "0px", "column-left-icon-size": "15%", - "column-right-icon-size": "11%", + "column-right-icon-size": "8%", "button-height-padding": "5px", "icon-brightness-change": "70%", "border-width": "0px", From cc179a5fdb4344d9e65e8f3df94c072136c1c55d Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 19 Nov 2020 20:43:32 +0000 Subject: [PATCH 49/56] Remove header offset --- epicyon-profile.css | 2 -- theme/indymediamodern/theme.json | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/epicyon-profile.css b/epicyon-profile.css index 27fbf7cc4..4dfc8ecde 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -990,7 +990,6 @@ div.container { font-family: var(--header-font); font-size: var(--column-left-header-size); text-transform: var(--column-left-header-style); - padding: 4px; border: none; } .newswireItem { @@ -1628,7 +1627,6 @@ div.container { font-family: var(--header-font); font-size: var(--column-left-header-size-mobile); text-transform: var(--column-left-header-style); - padding: 4px; border: none; } .leftColEditImage { diff --git a/theme/indymediamodern/theme.json b/theme/indymediamodern/theme.json index 364deef85..b3d77b8de 100644 --- a/theme/indymediamodern/theme.json +++ b/theme/indymediamodern/theme.json @@ -4,6 +4,7 @@ "header-bg-color": "#efefef", "verticals-width": "0px", "newswire-publish-icon": "False", + "line-spacing-newswire": "150%", "full-width-timeline-buttons": "False", "icons-as-buttons": "True", "rss-icon-at-top": "False", From 8e453304091327ad2e957a97d23eb0d76bfbc5a6 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 19 Nov 2020 20:52:09 +0000 Subject: [PATCH 50/56] Different separator widths for different columns --- epicyon-profile.css | 6 ++++-- theme/indymediamodern/theme.json | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/epicyon-profile.css b/epicyon-profile.css index 4dfc8ecde..681fc3200 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -132,6 +132,8 @@ --post-separator-margin-top: 0; --post-separator-margin-bottom: 0; --post-separator-width: 95%; + --separator-width-left: 95%; + --separator-width-right: 95%; --post-separator-height: 1px; --header-vertical-offset: 0; --profile-background-height: 25vw; @@ -189,7 +191,7 @@ body, html { background-color: var(--column-left-color); padding-top: var(--post-separator-margin-top); padding-bottom: var(--post-separator-margin-bottom); - width: var(--post-separator-width); + width: var(--separator-width-left); height: var(--post-separator-height); display: block; } @@ -198,7 +200,7 @@ body, html { background-color: var(--column-left-color); padding-top: var(--post-separator-margin-top); padding-bottom: var(--post-separator-margin-bottom); - width: var(--post-separator-width); + width: var(--separator-width-right); height: var(--post-separator-height); display: block; } diff --git a/theme/indymediamodern/theme.json b/theme/indymediamodern/theme.json index b3d77b8de..4bb88055a 100644 --- a/theme/indymediamodern/theme.json +++ b/theme/indymediamodern/theme.json @@ -35,7 +35,9 @@ "font-size-dropdown-header": "30px", "post-separator-margin-top": "1%", "post-separator-margin-bottom": "1%", - "post-separator-width": "95%", + "post-separator-width": "96%", + "separator-width-left": "98%", + "separator-width-right": "98%", "post-separator-height": "1px", "column-left-border-width": "0px", "column-right-border-width": "0px", From 1535450c4fdd751ec209f2da6e3624d897c2e010 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 19 Nov 2020 20:54:27 +0000 Subject: [PATCH 51/56] Right column separator width --- theme/indymediamodern/theme.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/theme/indymediamodern/theme.json b/theme/indymediamodern/theme.json index 4bb88055a..4a89bb737 100644 --- a/theme/indymediamodern/theme.json +++ b/theme/indymediamodern/theme.json @@ -37,7 +37,7 @@ "post-separator-margin-bottom": "1%", "post-separator-width": "96%", "separator-width-left": "98%", - "separator-width-right": "98%", + "separator-width-right": "99%", "post-separator-height": "1px", "column-left-border-width": "0px", "column-right-border-width": "0px", From 53fc4b108fac441d43e44d8b9da5c4aea99fc18b Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 19 Nov 2020 21:14:02 +0000 Subject: [PATCH 52/56] Left column top margin --- epicyon-profile.css | 2 ++ theme/indymediamodern/theme.json | 1 + 2 files changed, 3 insertions(+) diff --git a/epicyon-profile.css b/epicyon-profile.css index 681fc3200..0ba821a18 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -86,6 +86,7 @@ --column-left-width: 10vw; --column-center-width: 80vw; --column-right-width: 10vw; + --column-left-top-margin: 0; --column-left-header-style: uppercase; --column-left-header-background: #555; --column-left-header-color: #fff; @@ -1056,6 +1057,7 @@ div.container { width: var(--column-left-width); } .col-left { + margin-top: var(--column-left-top-margin); border: var(--column-left-border-width) solid var(--column-left-border-color); color: var(--column-left-fg-color); font-size: var(--font-size-links); diff --git a/theme/indymediamodern/theme.json b/theme/indymediamodern/theme.json index 4a89bb737..4ce56324a 100644 --- a/theme/indymediamodern/theme.json +++ b/theme/indymediamodern/theme.json @@ -39,6 +39,7 @@ "separator-width-left": "98%", "separator-width-right": "99%", "post-separator-height": "1px", + "column-left-top-margin": "10px", "column-left-border-width": "0px", "column-right-border-width": "0px", "column-left-border-color": "black", From 93859563dc4a2c4dc2f804adc4cd02e480055ff1 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 19 Nov 2020 21:21:23 +0000 Subject: [PATCH 53/56] Button margin --- epicyon-profile.css | 15 ++++++++++----- theme/indymediamodern/theme.json | 1 + 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/epicyon-profile.css b/epicyon-profile.css index 0ba821a18..04ca8e9fe 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -48,6 +48,8 @@ --time-vertical-align: 4px; --time-vertical-align-mobile: 25px; --publish-button-text: #FFFFFF; + --button-margin: 5px; + --button-left-margin: none; --button-text: #FFFFFF; --button-selected-text: #FFFFFF; --publish-button-background: #999; @@ -1292,7 +1294,7 @@ div.container { font-family: var(--header-font); padding: var(--button-height-padding); width: 10%; - margin: 5px; + margin: var(--button-margin); min-width: var(--button-width-chars); transition: all 0.5s; cursor: pointer; @@ -1301,6 +1303,7 @@ div.container { border-left: var(--tab-border-width) solid var(--tab-border-color); border-right: var(--tab-border-width) solid var(--tab-border-color); margin-bottom: var(--button-bottom-margin); + margin-left: var(--button-left-margin); } .buttonDesktop { border-radius: var(--button-corner-radius); @@ -1320,6 +1323,7 @@ div.container { border-left: var(--tab-border-width) solid var(--tab-border-color); border-right: var(--tab-border-width) solid var(--tab-border-color); margin-bottom: var(--button-bottom-margin); + margin-left: var(--button-left-margin); } .publishbtn { border-radius: var(--button-corner-radius); @@ -1364,7 +1368,7 @@ div.container { font-family: var(--header-font); padding: var(--button-height-padding); width: 10%; - margin: 5px; + margin: var(--button-margin); min-width: var(--button-width-chars); transition: all 0.5s; cursor: pointer; @@ -1373,6 +1377,7 @@ div.container { border-left: var(--tab-border-width) solid var(--tab-border-color); border-right: var(--tab-border-width) solid var(--tab-border-color); margin-bottom: var(--button-bottom-margin); + margin-left: var(--button-left-margin); } .buttonselectedhighlighted { border-radius: var(--button-corner-radius); @@ -1893,7 +1898,7 @@ div.container { min-width: var(--button-width-chars); transition: all 0.5s; cursor: pointer; - margin: 5px; + margin: var(--button-margin); border-top: var(--tab-border-width) solid var(--tab-border-color); border-bottom: none; border-left: var(--tab-border-width) solid var(--tab-border-color); @@ -1927,7 +1932,7 @@ div.container { min-width: var(--button-width-chars); transition: all 0.5s; cursor: pointer; - margin: 5px; + margin: var(--button-margin); border-top: var(--tab-border-width) solid var(--tab-border-color); border-bottom: none; border-left: var(--tab-border-width) solid var(--tab-border-color); @@ -1987,7 +1992,7 @@ div.container { min-width: var(--button-width-chars); transition: all 0.5s; cursor: pointer; - margin: 5px; + margin: var(--button-margin); border-top: var(--tab-border-width) solid var(--tab-border-color); border-bottom: none; border-left: var(--tab-border-width) solid var(--tab-border-color); diff --git a/theme/indymediamodern/theme.json b/theme/indymediamodern/theme.json index 4ce56324a..f4c87e340 100644 --- a/theme/indymediamodern/theme.json +++ b/theme/indymediamodern/theme.json @@ -52,6 +52,7 @@ "container-button-margin": "0px", "column-left-icon-size": "15%", "column-right-icon-size": "8%", + "button-margin": "2px", "button-height-padding": "5px", "icon-brightness-change": "70%", "border-width": "0px", From 5d0b06f1993d798da37e8691af9f452849117568 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 19 Nov 2020 21:57:26 +0000 Subject: [PATCH 54/56] Margin for links and newswire screens on mobile --- epicyon-profile.css | 13 ++++++++++--- webapp_column_left.py | 5 +++++ webapp_column_right.py | 5 +++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/epicyon-profile.css b/epicyon-profile.css index 04ca8e9fe..cf160810f 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -88,6 +88,7 @@ --column-left-width: 10vw; --column-center-width: 80vw; --column-right-width: 10vw; + --column-left-mobile-margin: 10px; --column-left-top-margin: 0; --column-left-header-style: uppercase; --column-left-header-background: #555; @@ -1303,7 +1304,7 @@ div.container { border-left: var(--tab-border-width) solid var(--tab-border-color); border-right: var(--tab-border-width) solid var(--tab-border-color); margin-bottom: var(--button-bottom-margin); - margin-left: var(--button-left-margin); + margin-left: var(--button-left-margin); } .buttonDesktop { border-radius: var(--button-corner-radius); @@ -1323,7 +1324,7 @@ div.container { border-left: var(--tab-border-width) solid var(--tab-border-color); border-right: var(--tab-border-width) solid var(--tab-border-color); margin-bottom: var(--button-bottom-margin); - margin-left: var(--button-left-margin); + margin-left: var(--button-left-margin); } .publishbtn { border-radius: var(--button-corner-radius); @@ -1377,7 +1378,7 @@ div.container { border-left: var(--tab-border-width) solid var(--tab-border-color); border-right: var(--tab-border-width) solid var(--tab-border-color); margin-bottom: var(--button-bottom-margin); - margin-left: var(--button-left-margin); + margin-left: var(--button-left-margin); } .buttonselectedhighlighted { border-radius: var(--button-corner-radius); @@ -1721,6 +1722,9 @@ div.container { display: none; width: 0%; } + .col-left-mobile { + margin-left: var(--column-left-mobile-margin); + } .col-left { float: left; width: 0%; @@ -1729,6 +1733,9 @@ div.container { .col-center { width: 100vw; } + .col-right-mobile { + margin-left: var(--column-left-mobile-margin); + } .col-right { float: right; width: 0%; diff --git a/webapp_column_left.py b/webapp_column_left.py index 66e1f3d38..b72c282da 100644 --- a/webapp_column_left.py +++ b/webapp_column_left.py @@ -227,6 +227,7 @@ def htmlLinksMobile(cssCache: {}, baseDir: str, '\n' + htmlStr += '
\n' htmlStr += '
' + \ headerButtonsFrontScreen(translate, nickname, 'links', authorized, @@ -237,6 +238,10 @@ def htmlLinksMobile(cssCache: {}, baseDir: str, iconsPath, editor, False, timelinePath, rssIconAtTop, False, False) + + # end of col-left-mobile + htmlStr += '
\n' + htmlStr += '\n' + htmlFooter() return htmlStr diff --git a/webapp_column_right.py b/webapp_column_right.py index 5ed3e6f92..dff002dd4 100644 --- a/webapp_column_right.py +++ b/webapp_column_right.py @@ -433,6 +433,8 @@ def htmlNewswireMobile(cssCache: {}, baseDir: str, nickname: str, '\n' + htmlStr += '
\n' + htmlStr += '
' + \ headerButtonsFrontScreen(translate, nickname, 'newswire', authorized, @@ -445,6 +447,9 @@ def htmlNewswireMobile(cssCache: {}, baseDir: str, nickname: str, False, timelinePath, showPublishButton, showPublishAsIcon, rssIconAtTop, False, authorized, False) + # end of col-right-mobile + htmlStr += '' + htmlStr += htmlFooter() return htmlStr From 7b197dc3949c1af20e10b1008cb0f580f8f2fa91 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 19 Nov 2020 22:07:06 +0000 Subject: [PATCH 55/56] Margins for mobile screens --- epicyon-profile.css | 3 ++- theme/indymediamodern/theme.json | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/epicyon-profile.css b/epicyon-profile.css index cf160810f..d69d275cb 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -88,7 +88,7 @@ --column-left-width: 10vw; --column-center-width: 80vw; --column-right-width: 10vw; - --column-left-mobile-margin: 10px; + --column-left-mobile-margin: 2%; --column-left-top-margin: 0; --column-left-header-style: uppercase; --column-left-header-background: #555; @@ -1735,6 +1735,7 @@ div.container { } .col-right-mobile { margin-left: var(--column-left-mobile-margin); + margin-right: var(--column-left-mobile-margin); } .col-right { float: right; diff --git a/theme/indymediamodern/theme.json b/theme/indymediamodern/theme.json index f4c87e340..478243e49 100644 --- a/theme/indymediamodern/theme.json +++ b/theme/indymediamodern/theme.json @@ -42,6 +42,7 @@ "column-left-top-margin": "10px", "column-left-border-width": "0px", "column-right-border-width": "0px", + "column-left-mobile-margin": "2%", "column-left-border-color": "black", "column-left-header-color": "black", "column-left-header-background": "#efefef", From 97119e05c5a9da565e8b1e650316991b1515ce76 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Thu, 19 Nov 2020 22:11:15 +0000 Subject: [PATCH 56/56] Publish button offset --- epicyon-profile.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/epicyon-profile.css b/epicyon-profile.css index d69d275cb..caef0e4d0 100644 --- a/epicyon-profile.css +++ b/epicyon-profile.css @@ -1970,7 +1970,7 @@ div.container { min-width: var(--button-width-chars); transition: all 0.5s; cursor: pointer; - margin: 15px; + margin: 15px 0px; } .buttonhighlighted { border-radius: var(--button-corner-radius);