lTWh<}D zL7)`k=(r_xoODzje3sDr=aW=QF|Y^(x@#uwF{k1Mdn5TVBCe?s@8dUYp)(nM>(KPP zynzNLlglG#o8E3ZZ>hAjeMo`~=>M^+2XHC@04;E&Gz>94f=CM@=+O^xpmrak5z3Be z(1~8ny8KJUoc<+gexQ 9Tk~Oks!NjfqlAr-exBX5bx;W`)q|}zP8?I6&%m?ZDaua?0Nh{f)Ko?d zC&~{qy>|J?o~i1@+Mf}a1_B7r``dzMmXNBpK%5^VJo0g?^8v>7w13xh`{e?37!yp? z*hkloE#M)2M3<1jg~5s`>EH1*hr)PdE~JUtY8%*leq2gagzfFLPm>8dp)mgXr(0U6 zw>bPv5V*U5DWf!6{EWRG$n!jw{cD6wMdBAz!NG}){hKwU{3lH7T)Br^QEl?|eqT4f zw>#JYlN0%p2W-_NNDd?SJPLF *C=&*sqpoBt>|MyTEBAw~H` z;%(4z*SS}Y0ut?(@pLLvb8OuM`20KHh_uSvq`fo8TFKF^rIUrY=lvK#X3ho4T{|X; zETn38&DJ#r0rUpa`&-&;J||IbH =HOcPDgk&*Y$*4^0wpEet>K3UCIJ zj !`+e}&e?)UAAAT?A5U}M2*=$vor=SY zma4l1oP;%qc^GZzpnW3}P+;C2|Fn2m-3?O}^LgabXWV*gyc!ZCMknV3Dy6DvzJ#rs zD}OjEG@-FoB?NMUM_<#Vo8!(Q0MOquYiu`irKNXad_t1juxd*8JZdsb)opDGg0Z-s zuIHh@>eWw2eUh_F+oSkRF8GR|EKO-PqW#c9jqc_mbtWu->U3b@$ Y;O@L#kB%<-<=~HA*CxhnF{JxIce2jP81=OyCm9_E(ZlzxGA>IVzyDcg)kIlq{ ~8@bx@7Vtg%oxua&-=j6#rG)4D4=4VM3psk5%4Rp@9`3vC4)R45E6%%oM>DJH z
$EX7U9qg{{`Sazj{)WVR)$f=)RjHqY&$V@l-~1! zcshrxJc79FdB=Ye9%YI>w)iGr|6=Ho>Y$kFQr;4{uOReGw}36mux4muoe}N&pj%)+ zn!-GOt4X+@@Yl+9cWpmTxE=@^KfIf{fTw1 92EBdB^?uQzTunm?D5n3wp1`QVvl85IR$M^(CdE^#+FAB{a&lw~xe^@ynXsqe*Lt zmH|%;kJ_qY#e#whq*@zchBw_P{rvvobs}l3hVa_AxA%pqtg}jvpE+ GNxexO1~*ppLmMz3t_>h z`9XTZNfT11bQEYN%ryg4+p(PWqavmKt-{i}m8`mUtQdg2_TshF4DL_yz934P XtgBJM?BK#TEX0{r8SpxOKM=k8ygDy%MMUpQQ2)^d# ztWmd{+UYfC-Q;9v3kA~n2FLrqyU{OC8F#1Jm|#$)IoMgFMG`!>VpOEuo5U6ku?r*@ zJYhMs`#j!2qtQ4~4k+GJf8j_rHaBM~QSASUacidfo~CzJG_8c%{v{N+$j%cCZ>)89 zEioBx`5C>3PK3e*${Ck_%vI0uNpPDcy5}ax30~qV{q#**fc;CSvHv)bpQM k3vUpXLmaXM_*WEymXz=6zN;NA_BN!XK6&Q-jxQ;#{X$A z!Fde5%2e+khf%1ydMLlK?K$tja-9BTP^ZwJ!^VeY5=24CzbPxEZxg9GfYC{$Kq5g% zQnq<~9EiaTJmrga4Zc{;N|2$UsG6lb+dkz^l6w@avPPlIs&)YGm)vKP$RtPT)!;)o zwA421KWnfY8r`|IqA$OgdljoUbvN7}4dW;aFUKnSMERq)!hZ~y^ K?y@g# zd_kl{`nvN@0*tnX4`35_ruQmdY=-G%B#Ou!RM0Bo9N^D`zwM~Yn^3Xx^7fB5Wp`~s znn?CQcqolwAX9r(J$Z`7&qm)b$tUMi9mJG;wi(p(^p$|M^1l*c3ydy@HS=aIx$m6H zMX-sK!+TFkC7Mu-W FQxkykU+u$# iyiZvrDj@;u dmRr0bYl5?h4R~=@n#X`N!o503>$ma zQ>-W&wLnTTk>c83R hT98E<1ZY1g5)vB zW{%k=(XHeIR?&y+n+;>ziv961=W$R;K=!HTt(+rn<{b$v;5NzxV 2Ei* wF#2? zeYyRNTlYbicb#EAyzUo78i|hTLLZx6nZ+)&<60PGFA=&|;GYNBIzCobUhk?e2MNxn z{uIrnc|dU>?;XUeC$sfh`97EHLsQ7`!#6y&AQfz2DDbVFFL{eQd*ps1hYGtA^ZiK1 z)RNDuk2!>jQGan?vHA{;%TsiE__>o0wOStW27Pf?V{n-)JJF2V6LI6L0WN+T2g7Qy zj7FT?38pcta$bLp>j)W!n;T)llOAzA-X!v>64W?`z+y0ELufXMm5VY5543gi$&M+v zEBlOuwqw-}^+o8)8l+__z3zu$6SD$1;n;EI?tCfPb6CFBZV{K5J=h0LYBux6^o?qy zwDWrhVv!zr;g)ih)|zvy`2*LRqhyo9w7fdX!UU>^lnXSAEh#ZPQ9N_|i9;{KB|2ns zm-mrlmo}f#hv M7m+_?qEIJF+)+ptjJcs zxhLL~*Nt*uO{Bp7XpVf2jpZ4fe)@9jj&{)bmW*PzU6616cakzzLbd$MqzfIVuXx6z ze@z7=a%@y5g|UTnzr^q^KLtMU#eU%X6hp5PRnVP9>BkZk$#}&rULxp>Ke0palhROR zOIIbP#fY=Sgv~;zZ}L-5aJ%^i**VzwHSfOnE}60yg*nKNf`kX{L@iu -% JM$Cw#MlsR}8ucci<9NUup2Vpab zS=6W10^WcRG^kP898g4d`bH?zH}ln$MDvkJFLuS4I<+cVulZhoTp1pB-6XsEQRTXO zr`zt@ ZEMF7H)1 z9zQCuT9fh+T~pdrk`jiOiKQQ17p%!+ee~zZO}CGr )Q|S~A}+#R=xmrD zu|0&(zVm!twZMMws7=a4KhK1l$7})*|NO31+s(=wEVNC+lf(E)5#EV4ttVH`-p-DC zSM?>gzXI*k1sRG9j1+k%#iLG`bc`<9Y4XfJewgWSU9mr%P@V2vK!fdOCfW0yJg1t$ zmA6huv~d iU zw!9f{(UEzUH!b~lD#>8br|fZT?J=L)5=QCQ3Xj281oF@x4sRoHJELYQ?_W!LnrAXb zS_Pk-H@2HDsid84s897S+tOn|jZ5Y&4@O0eh__MFRS~nfJHNzys4b!jjfzkvOyo?E zf5eqnoZ0Fp9U@zg-MVv{WVp!n8xg@e_s$?c++6fDmr$8<-N44*vaK0ja6KBLw;##B zO#OU!N%BcU`-gEdX=A?I+`t(QdHP3ACn=jZhj&-$SA~7UCvSdtO+y0v@d0+~LcUkI zC91x&`uCljM XgB|xy0COx8Bk~%~mM}Vl7Xi6cfB}58_ xcmE2q(oryle(4ono7DgA3l6w}NBsTIXcVb^Y_Er>7?BW zsA1ID6k~@B6GBudl04LdZaffq_Ay0ak@zU|_<~_phGdp|1^JX45b* z*f2Cym7snW2j>1k(3$^2xI}YbXUJt}OHeAatw88-45AVel+URIt3jVDU=x!suP%=@ zDx0BK<0UUO1%IKk)=Vld<5wc|DO7Qz0F>ZC<$u~DLmU}$xj{#Z4u?M$IDFqn340x~ z-rIQ|N^b}MlpYKI>XlMf$Wj~2-bHTpL>LDvA}j_7OID+T4;yh3W5!^puw_!Lcth1t z#V@dP{-B>IDpFV>81$u#?H`2-U>8_?+7Tn85N+TI4^|Qsn~=LQ=~3{(p-0AC6I-2# z;?QGZg2K{V6j$xCo}-206b#^uej%oI$fNzDC&CaCo`NcoM`4;mUk~LkxsJ5wdfmP) z9i&vT+rONo&RP)DFZpt% w?%Q+5ByqpUBQ=vq1c?a3LlQ s#QV{~^)!l%dhPy0dHx?^))){jutSxpewsdH$SRbfRHnPcGF^t;fw*6U!@Sy<_VW zk_l`Ombd-PM!^^VJ*oLGVw3-Cmr|t)e6L_0W^|9Io>8w3_} >zyuxMmFb-UHY~_badAj!h3 z^*1a%L1oBm$&6pWA7@KyST;h2D!$3UdzWnwYsqNYywsZt6rP#tQwxP!G?}1R}2Lg{K%Z!3LF&=4RKphzH6Hb_t^M3 zdRc-*==ss5httL}<1G9ph!($Gpu6oKiP6d0SJF^E$LnS0W3CWTC;K@=m7fh|hcTcP z<8~Z+)kS}CUqkhGsSLc}lj~YEY^ft2d~fT=5lVMjel4B$YyWX@!_Z;#;e}9cr7QT5 z=2^Z6oGMR01V!>!*&iheVT5YX$Y>ikFucmmvnG7z9e;mwU?^^uVn3#>e!R~ASLplK zU%meWh9IB&3vfs>V26z3i2h;P!q2xa{HX_*X+tgXVLZFv&VEUqT^_PK~TL ZV7)aC;VwTJlHvCao$fiATd&Hr2-xgr%R>V2PL5r@M;U5*gW zF%I|3JBT)~abl i)J7xtB`rL-bTn8`~$7_+s6<53THY4RU=q? zL67x_? MdOLQV{z zdbCb2hgM{kv+WM(L5G5ai4G;wiahtpV< SDhGYj2X7*fUY#`|2R?&`bH@&UL~8pxdzk!sy@n-+n5>H?i#RmR{R& zWEGud0ldjz4;6Pe`kpECDPK~a fFY}Hjb|C}w8!v){h&i#-TJ=cy+WNra z`rwrJ0nOqJ50MC_=6^1=oyqU-@lmXp?6A>3UY=%oDw9c)K$NR<8dndTLIdYF_P(sC zzVS|H2Or#pD6c8AC^Ex>HMNh(i-Kk%YF;5ET+OtI&7eY^2H6idxYtUfEK`L>o{hRf zNTLeRD@{0{Qbo>#lnCj$f6{=$6ll$ml)+@5xy;{UcWuMF^HJAtyXVP8;L#s-P$QiY zU+0GnI*Ms0L`BDMX5@|VL<{k|mDpxvpmN7FdEY(rZijf9r5WWcgCf=+{^>Xx; 4QA&U%t+!;utLKH@nSoz+5n2Km#izK*-8QJ%%A z^(k*C07l;rJPMyGzH^XGkZ*#tYxdE`#0?q3gL$t4fIZ{OQ!%r87e$_yl|QyoptG~n zH0j^uu`*CRMxkG@6w~1^3f9hJFtNKLuO=RZvV(cMnhsuBWSv#vEPn!3b*R>Q{);Uvj zPP3EaTG$v{)7vjsM>V_P2@U()z}(X}7e3wpuGqbGq{-?A5G`v{Vs_6+iZ3f99vbVw z1qw7}w? Cji}xCXohYtU;)_0X#(Qxq?P-4#U3#wC4tyRa?~Jm3?h%(KhDYF7 z#xArNw)Ey*(T-@!G$NMB>9 zSyKK7Q=z17uA b4 z4;x3KboU2>NzuS@j}`i4BxxNT4V%QvNOx(aKxusA<8BK58YHClyj2=Jz@F)bQv52% z^!$sE@;eK0O+PI<`U2?p5I-lB%A72v?T#Fh3;xdUVK*+_xyb3=DX>gi`Mv~e7z-|U zXy2CkGZNan4sWx<)6V@YQizg8@} a z-#FYdxRa?HZe2zBNQv&PM|TaMAD8bsJ^X#(aT&WSLvU7B$m%0d{ObP^Ef*(G{Y@u$ zxFIaMa$yYqV?qP}7XyV2u7vB+uemo<{)Y><=31-Hst5GRpD}?ZEK}l)iEVPk4T%atTbmd+3*NhEPCBGJea RBCL4fX 2?mxHjNN!CobAV|e}ZN1N~Mw(pT;*)L|lTclom#{|w zRbequFEEn|sfR$7ETz#4v4XR1_O=1r*^a&BLOyk@60!Yd<8E&BSB-x{Hj@KXABw3) z&xFL eiW|Fh z)DrP&XC= Zx3Hrf4%> D$#@GhyN)xq%f^xRp&A2SYE_=1wvWJwXRVnePB?MpLr;9@C61W zr@Q3SW-# z^K|HU#fUVhnYu0tBFW3ZLKoBVo+WpPHGCu5%WAk}0rusERI#o$2(rmEMRxyW!XDcR zMY-FGqtX*S_|_(uzJgNh=MK Z2WFOAwLo}KSL1|<$7UGLq1;67KNRdi%?KL|Lg#4#oPyOTVS}MP_ z6x;8*O_sY?1~sf}$dDN=h|iX-%&G9=?}VbkMf=Q(8u;Y;U;k#V %+lW4NJv)EawQ6GF~Wn2C&@F#rbfg zvKu%fR?{~C5C8F-o5)s$QL@U?lswp==@cU`{N1-`Zs7TQB$y)O;kPfWN8YPoUk&To z7AwDu7}lOf*50HV`~4nK+Vgm=d+w31qX}H|nd@dF^#VXo%D4H-E;4#5o`Nk*oDfbB z*ZId>um(w_+Z0#9WolkP?EBtjN{e(<<`0% u_GCrWN$(qq z#ed=`wOg=ar-uzqfy)yFH?Xys;sDY?pWWLWCL(kDi!T_Z)O8)`N&Yt+ioefu@TE|K z+18Q!v`?mX`F!KahzSV|j`xP)9f8Q?5Msex*HpESYP4rhzr}&93L8gV8JC%B`!9gp z3bHA~Pr1+8VC&3$@L{{j|4S^p@Z^(miLJg$E}#$OMQBc9dzvR|`HEJ@;UTq{$=Sdt zu$&gFR}ocCi&6Czy{SiU 4;sDR3y!JRw{)W9IuKEqU=s zOF{^RF&=mBiU2gTfjiZ=J_>O4t~ZdGpJ0{#_KBU#5dyJ4nXEhIN*g6+c4pJb*PO80 znV1)|A2G}dBMB~cC(iN#Ib<;m@&tnm?yA1vVHOu#W|Na^9hApdA?cJc&U`l?(@pX% z779$i%n+;E%7Qu=i#0e;IqFgqU`{P4+`+Fd>cHHToK;$6kLtMSz2e$j6Dq=Ha~D%& z9btCS*(Qg6?YZrQ)v}xb$V4(V#0TOEUQvw;0bvK6XW< v&vUb zPhEy_Y(5su`~2N^*OheHet#NUz#})o&jr|DBc1+PB2wPejJe sCR}1 zoEFp$wm1P-lRUqC$0?Fi8;|j~oE+?|{;U&>GnM7P_PqeCL4cH=f#YwFJd6^eQe57! zCVD8ODqsAR5u=G=cj%yq8Ki}po5o9cEFpPC&1?!a&k0YtnV6rkg1+OG&d@|Q=(NP8 ze({$c(B-6VJE|l@>`g1Sze&+0ysT&XPNsEXbfb^mNpBdoYINoT*40CN;iP*0y-_Me z?^DL$Ksms-ouXBaTmKe5X&*>fk8&Qvk3+mtQ$VVHat`6m6IA>$tTFgvAZD+U-)enG zFEPr8DlN|zG{Xc?z5f158zNG_EUvVjL*xxzsicCJh<`ep4Oq>i2dsIh_I(JISDvL* zA9WeN#0(&BA093I!Fmq-;h?k&NGzZ1u@2P2Y32T9eZJSrtjfk4w}y=*%+pS)X`U7< z`s3)cc91I%6?uYmsb9AaT8O$dV-|bYdfi+>A+EJI!T#Yn*v0EM<3I0UPn@1Xu??Mn z+)`7*J*%j T*zfIiX-~4hfAU%+s|Yf5hp4e_o(FL_Z&p8PP1vY@ol~7i@nhzl z44rqd^qxd~tgjZLwfbqABm+ejTTa7!*rwA0u$dw=F3q +_)+7d9i1fYVa>uvwK zpG=BVXh|_hRegbNGybfJ)Ax&%IJw?yM*TZ}Q5hN?FVDD4$>KdNxq4c~Xj A^*9z}DwUd|i!^6!rcl0o7oGn03VQq}&I>yyn2CtXuZv9X+ds6b>M6 z^W`NE*QXE1843lvg=X$CciVUk!x}SoVaF5Nt j>ic?aLkeLkL6WUzBzn5Yizcso11=4Fuzc7%& ziZg@S3yvwzzhT*pm1q$zi+=hHq&!y8QMQvj-<~(|w%;vk2T<9*ndrTS@(SSJj2qUh zux`c+W9ew6cDMQd&Em+(^}d*q5Ut`=g%`AF#`?-)83vi3`Iih?-{{YB!{2e`RiZS+ zqi ep{p@ z%*jlcs&Q}a*{0nu(f7S;wbqKwlByz=c_DLz `lQx zE+-B9&v<7wE5@X4kdhA?_?gKIui<~aIEt?DgNeLa95m9&W#a%_s;+6!WC@pVupQq3 zB 7n?~dOB`wrYX$Z58?zgo}+#g*d z?UrY+lQJ)(V8`cGX7Bs~l7s+J?geb={&b8rqy*}-cs&M*Tu 1{SS+_$z3Y$T=yrrzeY1;nAC#*lYvE{&aWPv?zAr;f=7W9mw zb4v_SD%0q>Bvv>ZA23m{J*=u=5mxn79`Cuf-TWId_MkvyGh1eGyC!1(fRY}@HKR0w z U0%(ao&jVY^gMp> zS_*qrsKfFrZuRuX{6c+kWNXg%9)Z6>uW<1aw(7R4Jbjen&ed8RtS`5wHs>eP@bbu} za?LAz1<2J<7S(Q@iL&7H+_wh&KCKuwFLhNX$qN24XwgPxKtCJ}Miwln`%&67-G%L4 zfFK{-eTHZuA*qaBNcW!u@}#TJT8!gLhAc p8Qf9Ya9#NNNOG 0jFzC$G`%ct zBYd3c&aZ%Rash-(P5lIBw?W*`%tc&b?L3qs%DlE?8tgV)DDUm&rc}ORHx~=sYl0#y zba?eutJ?$l4DR(4r{+YVA|0`Mu+*JG1Ga>`Bo0w&i)Svb0A$RNVJE^JHf63QI~XNR zfEf0*7ADRF&!|$JzM;MZ6r%ifm|xq!qklh%o51VdEh6dmADs@&%Ywo4rGZP<4?3YP zF1Smk>AUFkt2d!H^uv~!lQ)^859pZ~lc9TMV%DH8Ke-$&GVE99C4?F=@hGsNxw~y{ zc0u*3qyFnMjC`GGFbQqB$0b6}YcQ^3s|IOmm7FGISp#6*<#W~YJj#7N(sffm_k6Fd zVNNLJ1YJO@c?5gUwTJOakY^xY51!T?gU9Kz+XsH@B1KdyXdUjWl9R~lZ}cNHm^z8^ z1paF-jOy#$kO)z82)}dhVJAT!Bl}gAz1^Q%9i3dmk7U?@uu2V< >v|OJ*oUF%VOOVdGK B1;~HGyewpBkApN&oxTxyvTlXbA6o&$zy}AH@ z*$+bh);wWfqmM3%%@7~X!w_8|{Y;2y>JmTi=&l-X;jb*{mEwM~xe7jN;YX;MC?3^T zQwtvI@-m`34SQttx#2Qf+U*Ma45`?H8ZVf}g#P6gyN;!TaIt5vv^FAvV_19v4$7Ph z-wG8ku8eF-|GD;VLI3PZ=H$+3cd5jO3ZAF8t7WE{1>*kGq~YXC8D0@R-&q}P?^ *5$7`hr$s49$n=P zrn}CbkP0v|A_qnNvgbf-Pfd#3P`<@*;VzdD!58ENn5ZkI9W87u^67MNBIYqpS>~Mj z59^eR=ylE4;%&(F}s-1(TOm??lw?lApjMum&*j12|CDGrvt*wW}i^}cmw84o&K;T4UIg7Yn zT>LmT$AhH2F y&=@uD-ukdIKO zjs1C1yY^hF(qVhu_`IpU=r^p--bY5$YfN@#f@j5!Z%71~ox%A^6aL18S?(5i^>p8- z)bM*g&1#yee@c6yvMBLiICgTF?K&3w!E4*1_J`_V*wRf+nKt>CQq74Mz>|V+_5$9F z1-xMqHKrfSHM1%;?|n(2$NSk46~>)D?h(!wQ&@Ms)k6=rc;Tg)zs5e0b-M{%E+x%x zlJwve76D+S6!AuZU|Vm=tIf!rnlhB9a;*(FE2bqDjJtEL3Lo8R!tG&^`@mSs9j=2c z$%y`gn2FlOODjm*;}sSR+O?4al&3x9k+x8@6|XG?XZ!%IXf^)%09R7{#JwLWU_Q{> zvQB$mY=c8}fsOgjN&}{oI=pY-`7QTCx}H0ZTxvk|n{j$ryMs~3e)J&|F#YFLF+ N4jH2MI1s%}O* zyE3HMRo5LQORjPJVliWa|LFHwIJ8Brr)YF$GPFHt9$yO4H{xRCfu`2zPM8VB-!!Ot zrBs#W|Csm62AV{lZ>)`(IHFr<5yX$(JBcD~CbaVZ_bLVYz`EZNY)AOc5sJ Date: Thu, 14 Dec 2023 03:51:14 -0500 Subject: [PATCH 2/3] Update clock.md (#210) --- modules/clock.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/clock.md b/modules/clock.md index ade8e7e6..9cafac20 100644 --- a/modules/clock.md +++ b/modules/clock.md @@ -40,7 +40,7 @@ The following properties can be configured: | `showDate` | Turn off or on the Date section.
**Possible values:** `true` or `false`
**Default value:** `true` | | `showWeek` | Turn off or on the Week section.
**Possible values:** `true` or `false`
**Default value:** `false` | | `showSunTimes` | Turn off or on the section showing sunrise and sunset times (digital clock only).
**Possible values:** `true` or `false`
**Default value:** `false` | -| `showMoonTimes` | Turn off or on the section showing moonrise and moonset times (digital clock only).
**Possible values:** `true` or `false`
**Default value:** `false` | +| `showMoonTimes` | Turn off or on the section showing moonrise and moonset times (digital clock only). Optionally display an image of lunar phase and lit percentage of the moon
**Possible values:** `times`, `percent`, `phase`, `both` or `false` (disable)
**Default value:** `false` | | `lat` | Latitude for sun/moon calculations.
**Default value:** `47.630539` | | `lon` | Longitude for sun/moon calculations.
**Default value:** `-122.344147` | | `dateFormat` | Configure the date format as you like.
**Possible values:** [Docs](https://momentjs.com/docs/#/displaying/format/)
**Default value:** `"dddd, LL"` | From b284abf0eba528651154e92186d06fca18ea8325 Mon Sep 17 00:00:00 2001 From: VeeckDate: Thu, 14 Dec 2023 22:38:49 +0100 Subject: [PATCH 3/3] Winter cleanups (#212) * update dependencies * Prettier some files * Update module screenshots * Cleanup markdown a little --- development/core-module-file.md | 36 ++++--- development/node-helper.md | 8 +- getting-started/installation.md | 4 +- modules/animate.md | 2 + modules/calendar.md | 100 +++++++++--------- modules/clock.md | 4 +- modules/compliments.md | 5 +- modules/configuration.md | 4 +- modules/newsfeed.md | 3 +- .../{clock_screenshot.png => clock.png} | Bin ...liments_screenshot.png => compliments.png} | Bin modules/screenshots/current.png | Bin 8141 -> 0 bytes modules/screenshots/forecast.png | Bin 16385 -> 0 bytes .../{newsfeed_screenshot.png => newsfeed.png} | Bin modules/screenshots/weather_current.png | Bin 0 -> 24438 bytes modules/screenshots/weather_forecast.png | Bin 0 -> 37680 bytes modules/weather.md | 33 +++--- package-lock.json | 16 +-- package.json | 4 +- yarn.lock | 16 +-- 20 files changed, 123 insertions(+), 112 deletions(-) rename modules/screenshots/{clock_screenshot.png => clock.png} (100%) rename modules/screenshots/{compliments_screenshot.png => compliments.png} (100%) delete mode 100644 modules/screenshots/current.png delete mode 100644 modules/screenshots/forecast.png rename modules/screenshots/{newsfeed_screenshot.png => newsfeed.png} (100%) create mode 100644 modules/screenshots/weather_current.png create mode 100644 modules/screenshots/weather_forecast.png diff --git a/development/core-module-file.md b/development/core-module-file.md index 7066ac6c..5f7601a3 100644 --- a/development/core-module-file.md +++ b/development/core-module-file.md @@ -283,9 +283,10 @@ When this module is called, it has 2 arguments: - `payload` - AnyType - The payload of a notification. **Note 1:** When a node helper sends a notification, all modules of that module -type receive the same notifications.
-**Note 2:** The socket connection is -established as soon as the module sends its first message using +type receive the same notifications. + +**Note 2:** The socket connection is established as soon as the module sends its +first message using [sendSocketNotification](#this-sendsocketnotification-notification-payload). **Example:** @@ -316,8 +317,7 @@ module. ### `this.file(filename)` **_filename_ String** - The name of the file you want to create the path -for.
-**Returns String** +for.
**Returns String** If you want to create a path to a file in your module folder, use the `file()` method. It returns the path to the filename given as the attribute. Is method @@ -345,22 +345,24 @@ start: function() { ... ``` -**_options_ Object** - (_Introduced in version: 2.25.0._) Optional. Allows you to determine the animation speed and animation type options, whenever your module needs to be updated +**_options_ Object** - (_Introduced in version: 2.25.0._) Optional. Allows you +to determine the animation speed and animation type options, whenever your +module needs to be updated -| options | type | description | -| ------- | ---- | ----------- | -| speed | Number | animation speed in ms | +| options | type | description | +| ------- | ------ | ------------------------------------ | +| speed | Number | animation speed in ms | | animate | Object | animate IN and OUT rules (see below) | - **animate Object** -| animate | type | description | -| ------- | ---- | ----------- | -| in | String | Animate name when module will be shown (after dom update), it will use an `animateIn` type name (see [Animation Guide](../modules/animate#animatein)) | +| animate | type | description | +| ------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- | +| in | String | Animate name when module will be shown (after dom update), it will use an `animateIn` type name (see [Animation Guide](../modules/animate#animatein)) | | out | String | Animate name when module will be hidden (before dom update), it will use an `animateOut` type name (see [Animation Guide](../modules/animate#animateout)) | As an example: + ```javascript ... this.updateDom( { @@ -377,8 +379,8 @@ As an example: ### `this.sendNotification(notification, payload)` -**_notification_ String** - The notification identifier.
-**_payload_ AnyType** - Optional. A notification payload. +- `notification` - String - The notification identifier. +- `payload` - AnyType - (Optional) A notification payload. If you want to send a notification to all other modules, use the `sendNotification(notification, payload)`. All other modules will receive the @@ -395,8 +397,8 @@ this.sendNotification("MYMODULE_READY_FOR_ACTION", { foo: bar }); ### `this.sendSocketNotification(notification, payload)` -**_notification_ String** - The notification identifier.
-**_payload_ AnyType** - Optional. A notification payload. +- `notification` - String - The notification identifier. +- `payload` - AnyType - (Optional) A notification payload. If you want to send a notification to the node_helper, use the `sendSocketNotification(notification, payload)`. Only the node_helper of this diff --git a/development/node-helper.md b/development/node-helper.md index e90d1e5c..7e7b24fe 100644 --- a/development/node-helper.md +++ b/development/node-helper.md @@ -147,12 +147,12 @@ module. ### `this.sendSocketNotification(notification, payload)` -**_notification_ String** - The notification identifier.
-**_payload_ AnyType** - Optional. A notification payload. +- `notification` - String - The notification identifier. +- `payload` - AnyType - (Optional) The payload of a notification. If you want to send a notification to your module, use the -`sendSocketNotification(notification, payload)`.
-Only the module of your module type will receive the socket notification. +`sendSocketNotification(notification, payload)`. Only the module of your module +type will receive the socket notification. **Note:** Since all instances of your module will receive the notifications, it's your task to make sure the right module responds to your messages. diff --git a/getting-started/installation.md b/getting-started/installation.md index aa42171f..3729a442 100644 --- a/getting-started/installation.md +++ b/getting-started/installation.md @@ -14,7 +14,9 @@ installers can be found under: ## Manual Installation -1. Download and install the latest _Node.js_ version, see the official documentation: +1. Download and install the latest _Node.js_ version, see the official + documentation: + - [Linux based distributions](https://github.com/nodesource/distributions) - [Others](https://nodejs.org/en/download) diff --git a/modules/animate.md b/modules/animate.md index e846db9a..a89c1d51 100644 --- a/modules/animate.md +++ b/modules/animate.md @@ -1,4 +1,5 @@ # Animation Guide + (_Introduced in version: 2.25.0_) ::: tip Preview of animation @@ -6,6 +7,7 @@ check the [animate.css](https://animate.style/) library to see a preview of the ::: ::: warning Where animation can be used? + - [global module configuration](configuration.html#animated) of a module - [this.hide()](../development/core-module-file.html#this-hide-speed-callback-options) function in core module file - [this.show()](../development/core-module-file.html#this-show-speed-callback-options) function in core module file diff --git a/modules/calendar.md b/modules/calendar.md index b9a378b3..568e231d 100755 --- a/modules/calendar.md +++ b/modules/calendar.md @@ -26,55 +26,55 @@ modules: [ The following properties can be configured: -| Option | Description | -| ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `maximumEntries` | The maximum number of events shown. / **Possible values:** `0` - `100`
**Default value:** `10` | -| `maximumNumberOfDays` | The maximum number of days in the future.
**Default value:** `365` | -| `pastDaysCount` | The number of days of which events in the past should be displayed.
**Default value:** `0` | -| `displaySymbol` | Display a symbol in front of an entry.
**Possible values:** `true` or `false`
**Default value:** `true` | -| `defaultSymbol` | The default symbol.
**Possible values:** See [Font Awesome](https://fontawesome.com/v6/search?o=r&m=free) website.
**Default value:** `calendar` | -| `showLocation` | Whether to show event locations.
**Possible values:** `true` or `false`
**Default value:** `false` | -| `maxTitleLength` | The maximum title length.
**Possible values:** `10` - `50`
**Default value:** `25` | -| `maxLocationTitleLength` | The maximum location title length.
**Possible values:** `10` - `50`
**Default value:** `25` | -| `wrapEvents` | Wrap event titles to multiple lines. Breaks lines at the length defined by `maxTitleLength`.
**Possible values:** `true` or `false`
**Default value:** `false` | -| `wrapLocationEvents` | Wrap event location titles to multiple lines. Breaks lines at the length defined by `maxLocationTitleLength`.
**Possible values:** `true` or `false`
**Default value:** `false` | -| `maxTitleLines` | The maximum number of lines a title will wrap vertically before being cut (Only enabled if `wrapEvents` is also enabled).
**Possible values:** `0` - `10`
**Default value:** `3` | -| `maxEventTitleLines` | The maximum number of lines a location title will wrap vertically before being cut (Only enabled if `wrapLocationEvents` is also enabled).
**Possible values:** `0` - `10`
**Default value:** `3` | -| `fetchInterval` | How often does the content needs to be fetched? (Milliseconds)
**Possible values:** `1000` - `86400000`
**Default value:** `300000` (5 minutes) | -| `animationSpeed` | Speed of the update animation. (Milliseconds)
**Possible values:** `0` - `5000`
**Default value:** `2000` (2 seconds) | -| `fade` | Fade the future events to black. (Gradient)
**Possible values:** `true` or `false`
**Default value:** `true` | -| `fadePoint` | Where to start fade?
**Possible values:** `0` (top of the list) - `1` (bottom of list)
**Default value:** `0.25` | -| `tableClass` | Name of the classes issued from `main.css`.
**Possible values:** xsmall, small, medium, large, xlarge.
**Default value:** _small._ | -| `calendars` | The list of calendars.
**Possible values:** An array, see _calendar configuration_ below.
**Default value:** _An example calendar._ | -| `titleReplace` | DEPRECATED, please consider switching to `customEvents`
An object of textual replacements applied to the tile of the event. This allow to remove or replace certain words in the title.
**Example:** `{'Birthday of ' : '', 'foo':'bar'}`
**Default value:** `{ "De verjaardag van ": "", "'s birthday": "" }` | -| `displayRepeatingCountTitle` | Show count title for yearly repeating events (e.g. "X. Birthday", "X. Anniversary")
**Possible values:** `true` or `false`
**Default value:** `false` | -| `dateFormat` | Format to use for the date of events when using absolute dates. (version <= 2.16.0) From version 2.16.0, this option will be used to format absolute and relative dates. (e.g. DD/MM/YY to change from the default MM/DD/YYYY)
To show the event time along with the date, use a format like `MMM Do HH:mm`. Depending on configuration, may also require the options `timeFormat:"absolute", urgency:0, getRelative:0,`
**Possible values:** See [Moment.js formats](https://momentjs.com/docs/#/parsing/string-format/)
**Default value:** `MMM Do` (e.g. Jan 18th) | -| `dateEndFormat` | Format to use for the end time of events
**Possible values:** See [Moment.js formats](https://momentjs.com/docs/#/parsing/string-format/)
**Default value:** `HH:mm` (e.g. 16:30) | -| `showEnd` | Show end time of events
**Possible values:** `true` or `false`
**Default value:** `true` | -| `fullDayEventDateFormat` | Format to use for the date of full day events (when using absolute dates)
**Possible values:** See [Moment.js formats](https://momentjs.com/docs/#/parsing/string-format/)
**Default value:** `MMM Do` (e.g. Jan 18th) | -| `timeFormat` | Display event times as absolute dates, or relative time, or using absolute date headers with times for each event next to it
**Possible values:** `absolute` or `relative` or `dateheaders`
**Default value:** `relative` | -| `showEnd` | Display the end of a date as well
**Possible values:** `true` or `false`
**Default value:** `true` | -| `getRelative` | How much time (in hours) should be left until calendar events start getting relative?
**Possible values:** `0` (events stay absolute) - `48` (48 hours before the event starts)
**Default value:** `6` | -| `urgency` | When using a timeFormat of `absolute`, the `urgency` setting allows you to display events within a specific time frame as `relative`. This allows events within a certain time frame to be displayed as relative (in xx days) while others are displayed as absolute dates
**Possible values:** a positive integer representing the number of days for which you want a relative date, for example `7` (for 7 days)
**Default value:** `7` | -| `broadcastEvents` | If this property is set to true, the calendar will broadcast all the events to all other modules with the notification message: `CALENDAR_EVENTS`. The event objects are stored in an array and contain the following fields: `title`, `startDate`, `endDate`, `fullDayEvent`, `location` and `geo`.
**Possible values:** `true`, `false`
**Default value:** `true` | -| `hidePrivate` | Hides private calendar events.
**Possible values:** `true` or `false`
**Default value:** `false` | -| `hideOngoing` | Hides calendar events that have already started.
**Possible values:** `true` or `false`
**Default value:** `false` | -| `excludedEvents` | An array of words / phrases from event titles that will be excluded from being shown.
Additionally advanced filter objects can be passed in. Below is the configuration for the advance filtering object.
**Required**
`filterBy` - string used to determine if filter is applied.
**Optional**
`until` - Time before an event to display it Ex: [`'3 days'`, `'2 months'`, `'1 week'`]
`caseSensitive` - By default, excludedEvents are case insensitive, set this to true to enforce case sensitivity
`regex` - set to `true` if filterBy is a regex. For those not familiar with regex it is used for pattern matching, please see [here](https://regexr.com/) for more info.
**Example:** `['Birthday', 'Hide This Event', {filterBy: 'Payment', until: '6 days', caseSensitive: true}, {filterBy: '^[0-9]{1,}.*', regex: true}]`
**Default value:** `[]` | -| `broadcastPastEvents` | If this is set to true, events from the past `maximumNumberOfDays` will be included in event broadcasts
**Default value:** `false` | -| `sliceMultiDayEvents` | If this is set to true, events exceeding at least one midnight will be sliced into separate events including a counter like (1/2). This is especially helpful in "dateheaders" mode. Events will be sliced at midnight, end time for all events but the last will be 23:59
**Default value:** `false` | -| `nextDaysRelative` | If this is set to true, the appointments of today and tomorrow are displayed relatively, even if the timeformat is set to absolute.
**Default value:** `false` | -| `customEvents` | An array of `keyword`/`symbol`/`color`/`transform` that will customize events based on keyword in title.
`keyword` is a case-insensitive string that if present in event title will trigger the use of custom symbol and/or color for that event,
`symbol` is the Font Awesome icon to use as symbol and
`color` is the CSS color to use for the event.
`transform` is an object for regular expression text replacement of the calendar title consisting of the following elements:
- `search` regular expression to search for
- `replace` replace string, may contain group match references
- `yearmatchgroup` (optional) the regex match group of a year that you want to replace to the current age
`keyword` and at least one of `symbol`, `color`, `transform` is required.
**Examples:**
`customEvents: [{keyword: 'Birthday', symbol: 'birthday-cake', color: 'Gold'}]`
`customEvents: [{keyword: 'Geburtstag', symbol: 'birthday-cake', color: 'Gold', transform: { search: '^([^\']*) \'(\\d{4})$' , replace: '$1 ($2.)', yearmatchgroup: 2}},{keyword: 'in Hamburg', transform: { search: ' in Hamburg$' , replace: ''}} ]`
Will transform
![before](./screenshots/customEvents_transform_before.png)
to
![after](./screenshots/customEvents_transform_after.png) | -| `limitDays` | If this property is set to a value greater than zero, the number of unique days displayed will be limited to `limitDays` days.
**Default value:** `0` (no limit) | -| `limitDaysNeverSkip` | If this property is set to true, every event for every day will be shown regardless of if the day on has a single full day event or not.
**Default value:** `false` | -| `flipDateHeaderTitle` | This property deterines if the title for the date header in the `dateheaders` time format will align to the left or right.
**Possible values:** `true` (right) or `false` (left)
**Default value:** `false` (left) | -| `hideTime` | If this property is set to true the time portion on relative times will be hidden.
**Default value:** `false` | -| `showTimeToday` | If this property is set to true, the event time will be displayed for same-day events even when relative display is being used.
**Default value:** `false` | -| `colored`
_(deprecated)_ | If this property is set to true, an individual color can be set for each calendar.
**Default value:** `false` | -| `coloredSymbolOnly`
_(deprecated)_ | If this property is set to true, an individual symbol color can be set for each calendar, not the whole line. This is only applicable when `colored` is also enabled.
**Default value:** `false` | -| `coloredText` | If this property is set to true, an individual text color can be set for each calendar.
**Default value:** `false` | -| `coloredBorder` | If this property is set to true, an individual border color can be set for each calendar.
**Default value:** `false` | -| `coloredSymbol` | If this property is set to true, an individual symbol color can be set for each calendar.
**Default value:** `false` | -| `coloredBackground` | If this property is set to true, an individual background color can be set for each calendar.
**Default value:** `false` | +| Option | Description | +| ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `maximumEntries` | The maximum number of events shown. / **Possible values:** `0` - `100`
**Default value:** `10` | +| `maximumNumberOfDays` | The maximum number of days in the future.
**Default value:** `365` | +| `pastDaysCount` | The number of days of which events in the past should be displayed.
**Default value:** `0` | +| `displaySymbol` | Display a symbol in front of an entry.
**Possible values:** `true` or `false`
**Default value:** `true` | +| `defaultSymbol` | The default symbol.
**Possible values:** See [Font Awesome](https://fontawesome.com/v6/search?o=r&m=free) website.
**Default value:** `calendar` | +| `showLocation` | Whether to show event locations.
**Possible values:** `true` or `false`
**Default value:** `false` | +| `maxTitleLength` | The maximum title length.
**Possible values:** `10` - `50`
**Default value:** `25` | +| `maxLocationTitleLength` | The maximum location title length.
**Possible values:** `10` - `50`
**Default value:** `25` | +| `wrapEvents` | Wrap event titles to multiple lines. Breaks lines at the length defined by `maxTitleLength`.
**Possible values:** `true` or `false`
**Default value:** `false` | +| `wrapLocationEvents` | Wrap event location titles to multiple lines. Breaks lines at the length defined by `maxLocationTitleLength`.
**Possible values:** `true` or `false`
**Default value:** `false` | +| `maxTitleLines` | The maximum number of lines a title will wrap vertically before being cut (Only enabled if `wrapEvents` is also enabled).
**Possible values:** `0` - `10`
**Default value:** `3` | +| `maxEventTitleLines` | The maximum number of lines a location title will wrap vertically before being cut (Only enabled if `wrapLocationEvents` is also enabled).
**Possible values:** `0` - `10`
**Default value:** `3` | +| `fetchInterval` | How often does the content needs to be fetched? (Milliseconds)
**Possible values:** `1000` - `86400000`
**Default value:** `300000` (5 minutes) | +| `animationSpeed` | Speed of the update animation. (Milliseconds)
**Possible values:** `0` - `5000`
**Default value:** `2000` (2 seconds) | +| `fade` | Fade the future events to black. (Gradient)
**Possible values:** `true` or `false`
**Default value:** `true` | +| `fadePoint` | Where to start fade?
**Possible values:** `0` (top of the list) - `1` (bottom of list)
**Default value:** `0.25` | +| `tableClass` | Name of the classes issued from `main.css`.
**Possible values:** xsmall, small, medium, large, xlarge.
**Default value:** _small._ | +| `calendars` | The list of calendars.
**Possible values:** An array, see _calendar configuration_ below.
**Default value:** _An example calendar._ | +| `titleReplace` | DEPRECATED, please consider switching to `customEvents`
An object of textual replacements applied to the tile of the event. This allow to remove or replace certain words in the title.
**Example:** `{'Birthday of ' : '', 'foo':'bar'}`
**Default value:** `{ "De verjaardag van ": "", "'s birthday": "" }` | +| `displayRepeatingCountTitle` | Show count title for yearly repeating events (e.g. "X. Birthday", "X. Anniversary")
**Possible values:** `true` or `false`
**Default value:** `false` | +| `dateFormat` | Format to use for the date of events when using absolute dates. (version <= 2.16.0) From version 2.16.0, this option will be used to format absolute and relative dates. (e.g. DD/MM/YY to change from the default MM/DD/YYYY)
To show the event time along with the date, use a format like `MMM Do HH:mm`. Depending on configuration, may also require the options `timeFormat:"absolute", urgency:0, getRelative:0,`
**Possible values:** See [Moment.js formats](https://momentjs.com/docs/#/parsing/string-format/)
**Default value:** `MMM Do` (e.g. Jan 18th) | +| `dateEndFormat` | Format to use for the end time of events
**Possible values:** See [Moment.js formats](https://momentjs.com/docs/#/parsing/string-format/)
**Default value:** `HH:mm` (e.g. 16:30) | +| `showEnd` | Show end time of events
**Possible values:** `true` or `false`
**Default value:** `true` | +| `fullDayEventDateFormat` | Format to use for the date of full day events (when using absolute dates)
**Possible values:** See [Moment.js formats](https://momentjs.com/docs/#/parsing/string-format/)
**Default value:** `MMM Do` (e.g. Jan 18th) | +| `timeFormat` | Display event times as absolute dates, or relative time, or using absolute date headers with times for each event next to it
**Possible values:** `absolute` or `relative` or `dateheaders`
**Default value:** `relative` | +| `showEnd` | Display the end of a date as well
**Possible values:** `true` or `false`
**Default value:** `true` | +| `getRelative` | How much time (in hours) should be left until calendar events start getting relative?
**Possible values:** `0` (events stay absolute) - `48` (48 hours before the event starts)
**Default value:** `6` | +| `urgency` | When using a timeFormat of `absolute`, the `urgency` setting allows you to display events within a specific time frame as `relative`. This allows events within a certain time frame to be displayed as relative (in xx days) while others are displayed as absolute dates
**Possible values:** a positive integer representing the number of days for which you want a relative date, for example `7` (for 7 days)
**Default value:** `7` | +| `broadcastEvents` | If this property is set to true, the calendar will broadcast all the events to all other modules with the notification message: `CALENDAR_EVENTS`. The event objects are stored in an array and contain the following fields: `title`, `startDate`, `endDate`, `fullDayEvent`, `location` and `geo`.
**Possible values:** `true`, `false`
**Default value:** `true` | +| `hidePrivate` | Hides private calendar events.
**Possible values:** `true` or `false`
**Default value:** `false` | +| `hideOngoing` | Hides calendar events that have already started.
**Possible values:** `true` or `false`
**Default value:** `false` | +| `excludedEvents` | An array of words / phrases from event titles that will be excluded from being shown.
Additionally advanced filter objects can be passed in. Below is the configuration for the advance filtering object.
**Required**
`filterBy` - string used to determine if filter is applied.
**Optional**
`until` - Time before an event to display it Ex: [`'3 days'`, `'2 months'`, `'1 week'`]
`caseSensitive` - By default, excludedEvents are case insensitive, set this to true to enforce case sensitivity
`regex` - set to `true` if filterBy is a regex. For those not familiar with regex it is used for pattern matching, please see [here](https://regexr.com/) for more info.
**Example:** `['Birthday', 'Hide This Event', {filterBy: 'Payment', until: '6 days', caseSensitive: true}, {filterBy: '^[0-9]{1,}.*', regex: true}]`
**Default value:** `[]` | +| `broadcastPastEvents` | If this is set to true, events from the past `maximumNumberOfDays` will be included in event broadcasts
**Default value:** `false` | +| `sliceMultiDayEvents` | If this is set to true, events exceeding at least one midnight will be sliced into separate events including a counter like (1/2). This is especially helpful in "dateheaders" mode. Events will be sliced at midnight, end time for all events but the last will be 23:59
**Default value:** `false` | +| `nextDaysRelative` | If this is set to true, the appointments of today and tomorrow are displayed relatively, even if the timeformat is set to absolute.
**Default value:** `false` | +| `customEvents` | An array of `keyword`/`symbol`/`color`/`transform` that will customize events based on keyword in title.
`keyword` is a case-insensitive string that if present in event title will trigger the use of custom symbol and/or color for that event,
`symbol` is the Font Awesome icon to use as symbol and
`color` is the CSS color to use for the event.
`transform` is an object for regular expression text replacement of the calendar title consisting of the following elements:
- `search` regular expression to search for
- `replace` replace string, may contain group match references
- `yearmatchgroup` (optional) the regex match group of a year that you want to replace to the current age
`keyword` and at least one of `symbol`, `color`, `transform` is required.
**Examples:**
`customEvents: [{keyword: 'Birthday', symbol: 'birthday-cake', color: 'Gold'}]`
`customEvents: [{keyword: 'Geburtstag', symbol: 'birthday-cake', color: 'Gold', transform: { search: '^([^\']*) \'(\\d{4})$' , replace: '$1 ($2.)', yearmatchgroup: 2}},{keyword: 'in Hamburg', transform: { search: ' in Hamburg$' , replace: ''}} ]`
Will transform
![before](./screenshots/customEvents_transform_before.png)
to
![after](./screenshots/customEvents_transform_after.png) | +| `limitDays` | If this property is set to a value greater than zero, the number of unique days displayed will be limited to `limitDays` days.
**Default value:** `0` (no limit) | +| `limitDaysNeverSkip` | If this property is set to true, every event for every day will be shown regardless of if the day on has a single full day event or not.
**Default value:** `false` | +| `flipDateHeaderTitle` | This property deterines if the title for the date header in the `dateheaders` time format will align to the left or right.
**Possible values:** `true` (right) or `false` (left)
**Default value:** `false` (left) | +| `hideTime` | If this property is set to true the time portion on relative times will be hidden.
**Default value:** `false` | +| `showTimeToday` | If this property is set to true, the event time will be displayed for same-day events even when relative display is being used.
**Default value:** `false` | +| `colored`
_(deprecated)_ | If this property is set to true, an individual color can be set for each calendar.
**Default value:** `false` | +| `coloredSymbolOnly`
_(deprecated)_ | If this property is set to true, an individual symbol color can be set for each calendar, not the whole line. This is only applicable when `colored` is also enabled.
**Default value:** `false` | +| `coloredText` | If this property is set to true, an individual text color can be set for each calendar.
**Default value:** `false` | +| `coloredBorder` | If this property is set to true, an individual border color can be set for each calendar.
**Default value:** `false` | +| `coloredSymbol` | If this property is set to true, an individual symbol color can be set for each calendar.
**Default value:** `false` | +| `coloredBackground` | If this property is set to true, an individual background color can be set for each calendar.
**Default value:** `false` | #### Default value: @@ -121,7 +121,7 @@ config: { #### Calendar authentication options: | Option | Description | -| -------- |--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `user` | The username for HTTP authentication. | | `pass` | The password for HTTP authentication. (If you use Bearer authentication, this should be your BearerToken.) | | `method` | Which authentication method should be used. HTTP Basic and Bearer authentication methods are supported. Basic authentication is used by default if this option is omitted.
**Possible values:** `basic`, `bearer` **Default value:** `basic` | diff --git a/modules/clock.md b/modules/clock.md index 9cafac20..0c6d6b36 100644 --- a/modules/clock.md +++ b/modules/clock.md @@ -5,7 +5,7 @@ displays the current date and time. The information will be updated realtime. ## Screenshot -- Current time ![Current time](./screenshots/clock_screenshot.png) +![Clock screenshot](./screenshots/clock.png) ## Using the module @@ -40,7 +40,7 @@ The following properties can be configured: | `showDate` | Turn off or on the Date section.
**Possible values:** `true` or `false`
**Default value:** `true` | | `showWeek` | Turn off or on the Week section.
**Possible values:** `true` or `false`
**Default value:** `false` | | `showSunTimes` | Turn off or on the section showing sunrise and sunset times (digital clock only).
**Possible values:** `true` or `false`
**Default value:** `false` | -| `showMoonTimes` | Turn off or on the section showing moonrise and moonset times (digital clock only). Optionally display an image of lunar phase and lit percentage of the moon
**Possible values:** `times`, `percent`, `phase`, `both` or `false` (disable)
**Default value:** `false` | +| `showMoonTimes` | Turn off or on the section showing moonrise and moonset times (digital clock only). Optionally display an image of lunar phase and lit percentage of the moon
**Possible values:** `times`, `percent`, `phase`, `both` or `false` (disable)
**Default value:** `false` | | `lat` | Latitude for sun/moon calculations.
**Default value:** `47.630539` | | `lon` | Longitude for sun/moon calculations.
**Default value:** `-122.344147` | | `dateFormat` | Configure the date format as you like.
**Possible values:** [Docs](https://momentjs.com/docs/#/displaying/format/)
**Default value:** `"dddd, LL"` | diff --git a/modules/compliments.md b/modules/compliments.md index e12373a2..49589de4 100644 --- a/modules/compliments.md +++ b/modules/compliments.md @@ -3,10 +3,9 @@ The `compliments` module is one of the default modules of the MagicMirror. This module displays a random compliment. -## Screenshots +## Screenshot -- Compliments Screenshot - ![Compliments Screenshot](./screenshots/compliments_screenshot.png) +![Compliments Screenshot](./screenshots/compliments.png) ## Using the module diff --git a/modules/configuration.md b/modules/configuration.md index e1dbbc3f..c6ae3b9d 100644 --- a/modules/configuration.md +++ b/modules/configuration.md @@ -64,6 +64,7 @@ screen, one under everything else and the other above. All these regions will resize as needed. ## Animated + (_Introduced in version: 2.25.0_) Animated feature allows to define an animation to a module @@ -79,7 +80,8 @@ The whole of animation names are available [there](./animate.html). ### Example with `newsfeed` module -For this example, news will come from the left (`slideInLeft` animation), wait in the middle, and exit from the right (`slideOutRight` animation) +For this example, news will come from the left (`slideInLeft` animation), wait +in the middle, and exit from the right (`slideOutRight` animation) ![animateCSS](./screenshots/animate.gif) diff --git a/modules/newsfeed.md b/modules/newsfeed.md index 922b8f4c..9ad069b6 100644 --- a/modules/newsfeed.md +++ b/modules/newsfeed.md @@ -7,8 +7,7 @@ sending news feed specific notifications to the module. ## Screenshot -- News Feed Screenshot using the NYT - ![NYT News Feed Screenshot](./screenshots/newsfeed_screenshot.png) +![NYT News Feed Screenshot](./screenshots/newsfeed.png) ## Using the module diff --git a/modules/screenshots/clock_screenshot.png b/modules/screenshots/clock.png similarity index 100% rename from modules/screenshots/clock_screenshot.png rename to modules/screenshots/clock.png diff --git a/modules/screenshots/compliments_screenshot.png b/modules/screenshots/compliments.png similarity index 100% rename from modules/screenshots/compliments_screenshot.png rename to modules/screenshots/compliments.png diff --git a/modules/screenshots/current.png b/modules/screenshots/current.png deleted file mode 100644 index de6c5a39ea341592fcd25d19d6a382457bad9e35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8141 zcmch6XEdB&^zIm=_vl?n5QGs?qPHMI^yp(kv}h5%*C=6#pJ4RfduO!KMJLgXQDQ{z z1R1W}b-&&(cir{>@ILQ3>zwD^d+oE&KF_;OwDucSGGZoT002PtN=;c80Kj3mZx;~a z-=oH{u-N?z$4ysN5l}VGvVGqH*(zu%006b|B!A!G-S>$;su{Zh0OY;@9-Kj!lJ@`r zyX7lo1$}SGekPIK`&W#EN#RpSI7cN>ST}=;=>VhsRLi`CO|lAg9+y>~*c)bh#<}i_ zf&3Y#DQ{(%s`q~e5=wZln z=+Q|aXLI7wk#Av$MH^ZKRPVg`z@ y4*UGV)&VNZ@# ^I=LQ8gxIp H_9B~;$E;zx@7Es`hV`o@QB>n=QV-P1lnUd=lV+TdY# zY(VTMY&X;ASUn@u+oYUVNkr%({))0?=E9m$PQLv&Nj5+4Jn&XZrz-9k2bBxA4XSKD zbMH-H)#rIt_w7LgD|5Zh!FV31%HLihgrK6+Hk#5EUC#}pXgqFAXZY44Wae_Reu>O4 z;%#$>70vm1+>gCai6*%m1(fiRDlYQfzZ>-p%lenig$E-A7Dc; U8nh+{Uc!{>2 z0de)~=Sl_!3no$@e}qLem+-%xL~TC>LtZXd&3TBI=GU R#ctyj>$4Q zQ?xJTjF;HnXoVODtA-OF8kp6W7cPj09Ji@elJR+bbIPuc2 cWJ5sxt4)B~-uOsV`;-R|&~+4p76c)%Agqy<81WwqQ`kB@-Vt>WfE*&**>isbOp zGWEQ0D5Dma9K5_=0o#>#=VbVwv(^xY4Q1S@(J`y0VMr}=EiOfo!&myPUeQBcC& gX#dugZT6m6%A}H_}8opxpa6XsSU@C8YwVyW>AoQCLJj^UV z%5?(LQ|8<3B#O Sb-d?po!-z$-V aGbjG50!DJFV`_c}5^JQKB%J0Zh#4p?ZA6B5IOmBj7RUs9220EY9AC}= zS^S#?^VL>7TId-rBrVs*h4R%DIsfMVR`cp%*6I0Lw9p@2jSOUqOuAX$Tws8ma)4~6 z1h%MTvYTC`An)1Bm6?BEi>BCnnqgTn!40@W+u`))+U`$d59u)7KT8V^XC!FpnAP2Z z#|)uJUdbx1*~GeWAs?_JlY7ow865IPLkdaaj;HcDHiyqx^`a`?V!J07N&vLVMwg$N z;p+F~WYzdF?+ZfY&-}BBXU2D|;|z>)u9MLWNyW8G6<3O@RDKpeZTGy=&t#N;xcwgb zB`T7jM;O}`WHGnKUM*?$ZOVH~Jf1(bJ(QzBk>Kx`ppz#Q7RvF9(7TQmVkh>mO(^(( z$LJRC<2(*RF4DOJy`KNqni}#h)@GvO$LAP&JM5?ctkxRz5a>Vyig;l{{9`D^F77E8 zA(c@+2RI5zSo#hYisS%t6-0;<1H%YozcS78vJi9so-h63e*Lp{C{6A7j0>!~?cJI; zF083KKk=C=Qj|C{xORiT)5xsgdfE(#qbBvmJsgv~v-aX`T)eP#`2U$ iA6&+p;NIN?N0D9UU1@ zjDD8y?$2U+4bFNzLIOr-Zq7cyFt@imF_;$^2ct?b!q@7 ZvNp3vN0! zij-~rY~~UFG~h-hiBpAmWeQ%uZdqZ?-#o}ji{u~mK z&l?f6SQDze$F5CBAc`*5&sR)-e8~P+-A``wF4Hp|#4r2xqi2D_EiEdA3jM1k9_>$x zH2A*gi!-^F*J_-a_z&89GLnoDWbbP`t*kT?^dsnkI)cg-MozO*Bp|#xtX<`I#`O;> zM4c=lhA~Ya9;Y3%6H}j#{Co~_^=p(nX2vnHvU%a@i>hv+b9kI)In2{-<}KZU`~#$P zx2F@EarLxQjW$|!{e3XHf}eEMDg+)=QHoYuiiswS71D*I*hQ4>7*( gK9q_!_DXHhc?3=B31hHTzG9D=X)=6}=~fv;zWQZ--x|Wz|^mQ@i^Ub^VYuU~zBd z{uW8~SN1~j4hlg_-MP8xTxX4XQxJ5x_&vP-8vRW4n^&2fVHY~|D%DcOFKuPZGsV#A zi{a4?yR4CwN@||&3?*&M>E oe0#`;5Z2HxERAFJmgq!2ABJqM z=pBf}QBg6Vm8MXF7LH;gStY-B^=O-|y(N@3hMp(A1%K#6yCk01KTebFVd=$@EZV%2 ztterFynB8zgR2J!MGtbGvC-O)3Y?jp+qMa3B`&bW^NXC+42(YWu>4%M^W6vYM@L3O z(sh}TyDG(gkuN(u1W$#)cWSjmz4)_&mm7!VFzjtr9r;n7BQJR8j)Zr^M_4E17`LP3 zY|V9X@FMFsF21*)ut(^)3J^(Dl3hrR>lG=vjlJR3>b+ZTkL) z6g#@9qY@z!7))=?1 %;{ z!N{NS#aD{|WwCKvme&?mR;EquV#wrIeF-nmHL7h7&0HVz{%1&*hOSRNN_1nMNP3-8 z54yAS@Mov34kaOb@zsYVznDo~kB`&R2gsTMkj7N0XwV}bE*2wF6{?FFm^#DaC?NYO zI6*%DAsAz)uRUASN_wOMmv#D8UBH0zC004JxNd}JEjERq;Bd;>Hnz}6^^NvNi;AhV zFd7Dtf&BLDf+u)3M=dj?Dx*Jp8(P#&*M{_C#MCi?MfAmXPCA-ClD^)oT$Z_$Pkx3` zqV3xtC(?Dt#wN~9cu%89Btu0nR18W!809`g;>2;<-ye)eV!>=Wx`U#)QLMmxLjJt% zl^dlg8`)U7yzpVs3cz8l$o|jU(@py(4VE7RglOO40Ka!}G>y!eq8gPTB=dmQ02mLy z_ve0l=JVby$msae#NT}x?v&=g6Eq1_B6?8AV;#6<@w|h8ikn+(WXcAW&@4PS)*D=U z3YB!_1P7|PybrolCBbbEre@fDu$#cmADDyN@wV`yJx> _V%jR>bLWYnjMOA452106z;QF+d3Pzp$YbUxK0X8XML7T?4x$mWeeqfW;?| z-o}JkGpa^)WI sch&~k= znu^M(pFVYrDQx{MY?+$dui4kK*p>8sWt{sdcbu#DUJR1g#j@OU+ML@34Wxz };d%#yq>*Sc8 2eo-f U@P+3|6h-wJ-J|HAw@b=at~p0mf27qw xw08kgy8XjWg> zrVJ_)r*b7?m@dbmir@v~cJM*P&YXJ@Pw==;EN$zj8CmE;Tw@n#UrVolC8vTP#L^1x z(xe2xi-`@a{c#t7a8K~ DJf~5of-AuDsQC>{ETlBue2Ifg z2;6R;9YZhD-?$p*|JbB;XhOXEGWrU^x%aFO ;zTR&@uxUXiPQ z(X2J}%hK=ebzAg*T$&-#kDRWRi;5^iUVYz771YB$OGrteq+;lw7sxa|6y MK=dfu#U;J$<()70mc45|EBHcIyv>Fa+`%ZNQVdIo z5~I)1Qgh-2=EF@b587}N>+@8 `V(*37D4JR~^g7?HT*CrvDqZE7>nS+({#1^NV~Gom=b-x;LT2PZ0YP+G)^(r~P0 znqc{WH`p8@?|3AROdz1v<(>Y78Yk=iwU{of$H4o5kd%-cJJ5Hyzrmf+;FpmayWCPW zf8}r0eazJ0WFC`JY6eDlV5ICh!J!;1viIVXFqGu~BmPPzkY2?(8~5r=3_MB9o@Dh} zR=B%C-w`t3_M>Yo{Pr8&uQpTaZ!Sl6cK8C;NGx*Xu-jT|FYYdyyQV0D{wVq0o@P%R zi12!~Eul)L>?Xy#t~9UrU4mZU{TY-y^9dsh>W!PQxEeN`-m56zeE*=A2`>Z>c0!%~ zC)~NjuFotr3<%pw%>Mfbi#-gwOgFsTN8jBx(}hRM?7iDN{x4MJwwogG>+RJ<(6#Ep zGKU2E_M(|U))3IS+lIzEU*D4svmY)*p!YY}?^^12)c_7O0tdcxZMucJQ(7Tj9lPdd z3Gx2nvKO`S+d=5ltjoz=$fac2+j946KU54#?r?ScZ>38B|8!K{Bk %gv21m)ODZ!qp1x79W`tKQvPJ`?^J?~K^y_Pwajt~_Lw9c&EP zer++mqN|M``ktNViJ`d%tshq6;4tt~>U!m}vzXoYPt~8x`v3`|0&n)$MAMk1J2Ep_ zFQm!u|611X0}3{G8xyVg+IL(e-VuEec-dAzI70HV3;h=(zRTm+%;QD}!e0Tj1KpHx z`_2hq%lK#t3Sb-m`F)TjlDu$^ 6pR?Kqa$f!JsxmmrC!bj~tVkjATBIymq}XK(i1U)!#04|E*| zm>v6Dm5bAR$*Fl;5M(%uujNwTjlJx;E4=Ky>~J(D_ZFHbSP}}ldX4&w8ODi1dCZv? zk67OPESBw0j=>%Lmm>#<`%Y0^$o#e8!ETSoLDxUB$wjz(nJ7f#z5BR~T(2f0WtD|| zzQ6wckisV_?mJR1WY99%XSP18pG{ 5Ob%6uF&%q7fP}y0>c4N$b0wrn)4HHjjY?VVpW8S zpe0YW&zJ*emo?KnO(F*t#si-Tzn!T}!>;QYgo6K{UUu?+z+EI6?T%}_Uj|()eb=9U zs&4thfQ1oAkqq6 n?Ew})00uOYj}_yL0{1EtUoZDbT~R_QkDqy5gk z6eK+Bf!N=%q}NKdMg`0+?Nf4`Q(d>`LNX7AlUONd;eKpqIRsO?7I)VlC0Z>YH;Z$1 z>kp2;7`AijvYGQ%nI$VIDd6_n=`@Ge2oRB4Qm9#yh{ck-ZvGb>*>g`ayi-$_`_oM^ z|4GcISBp~}>z=@NGe7v@m{iRB*^ymKoqg-|PB|B n_o!Lb$R9jp}(LdbNL(*vB8 z@m|GcAIjnZxB}d=n>)`dpNstPOE?t>ad>lbHt`=4>RN-`mFH4GCh@0)tIF)?oRwQ( z)!9jy*Quj=U9B}oIfOz-qMSZ%0{TEoL){SvtcK$QG>;v_2usKGvaj_sJy;xHb$Q)u zX2ES+qgG}+c?oW>s^CN(tsQ`I4Mq6=-a@_OLVM!l5aA92Z}u>E&8d>n9NX!G7#R&R z3Jz!Z5=+s*Ij3O+zipUw7WDNZ?Q3GhD{m*x`N@D?@wFO~3SqAd*#MKfs3LigJRs{d zV{1~0{aRbnx1r &BdKd(1wpI+K% z%!#n;iNh!v!{a*DPXNcu)`@`m0EFv$9}#O}O?>3L9f|H>`mh9UXLdh3sfqWmpk}~- zsc*W-Li;UXP- Xg|K+eL{#qk`gc~p z2zq*xw15b4&p?v#<6k^-sZS}^Pi(=U>*X!k6buG4k3H!tA&!0FA4`V9uQC%#PDyDL zr`AXhuA){6n9SU@{Y6kpi@|ydOFQ9qhZTnla;xpM76yxAfX_|Zbh@znF2(m7dBySS zIWkcJ_gOqy;~}?M)C`A>)qz#$#=}n(@sUe%yRl_RxYn_PYJpkkjf1n&XcH@Ug)qJJ z_A9L~-a={_erNgYW6Apj-U688#8}F6rtgZ+5(zb$z_ pI+`r0NDwM)FfNp^0t8uR) z-BM*C|1}b+h{8y4gqDzZHwot!xI2nE^!x9NkG<0qek-S(o5z-@UiRCgxKBRsXz=ja zK7fJG``oWODMJ=iIRu7U{Fjzi= Gk!#5^ib)a(9V*+rU e?>Kh0%X>Rw4f6S z^eURrQAen^kT>AtCOPpv56~(A&m48EU>P!JRJjmX2mg83>Q p %Ai+y3FUb7 zn;efh96z)-Nk&Z>8bN3&c(E)12r(ypx#8yA6$Z#x5xPG}7X(?V=nr4H-fY5js2JQl zCH_hcJzDNn2H8YOpCrWZd3P1h#Y7SifeuqA{B0tKTCzaPZydDhTD=)5V?&XvtimFN z>@GT9={9Q|R3VHHmYIjE5`RbFK;ZsYBNl9}&T~J+qmXCuGW3-(r96?*_x{U^Rb+02 z@@TO=gC2hg!6E=mMdgB-gc?B{$Xl3;e{a``qZbT#?=tAEs{h{&b}cRcb!yQ+L0NA# z8WK;<#y>?ygx*lKXC#Au`Sn%KB}Pb-kg^$J)~%EvWxYh4U|>vUM&vNc!KPjMt6@mD zE;pu~@1|xRPOS_D(Mi1!I; R{FHLFsRdM+! z5Yva52SbrbBN7$I^2l%*6h_Y#FOU}mGbd+Hk3zo3_2#o#emtTy&2oWFCMw1U7`F|L zi++Z}IaHnvNmrqeQmU9%?WqLU(WEhIp9c(nxqqIET-kmOoO4hQd$B;*^f0!fb|Ao3 zAB5jKWfz5Mt@#<=nx+8x9)p~(1|nk=ax(eTt+nOGUe2wCv}OsfYHMD@1kC*v>Rrik z-4mLcnh;g<^Fr`*RG|3x8FhaGO*YU#TpP6Q0I~at+DmvL-XmsIeE4|Dk_}q545(4b zrD#bJNvt4Gr9a^SU*sM5#I(&rlkcEzG8SNEdVXF|x %OpHlCdN= zvaF1I%^Kr>sKZeX3=_{Ad%^%dsY4)!lgGF&mb(R4fX%jN|HMk s~2eykmBH?{3!(-Ppq}Wh`y6s$)=aN%HXXkkG z{%4uk_=8`R^d43)B`bYAd c7~!3ieW3ZQ-+Ing3mJQ5oB!4CkWsE^rIKL z+@sCIwfnv4n-w~gk{_RfT@!5|`)n0uM>kJ9&shY?_#K3Ss-@;R!^rX##L@mD0T_|& zDO^&Vd(AO-epLU$gvJpbMOsR`?89<@caV!a2Mp7g`QQ2`t+|`)pXgXP;f^$b0xX3n zVG2$EXuer22Y=%3<@97X*b+R%@>x5_A>3-ix(#w5D=`Yh1uH$oly+{!N&PL?Y|4#s z-*23gOkD#%y!SAi1(1u}r9$7==`+q-8$-f8G8_c v8N%4Dopl-bXX?!PtpnOLV8TYNq18}`^e+3VC_418!l_E6se*tq0 BxD@~Z diff --git a/modules/screenshots/forecast.png b/modules/screenshots/forecast.png deleted file mode 100644 index 1afd31913ffba849a334aeedb0aad2c799a3de20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16385 zcmeIZXH=8xzV?d+n1FzS^sW>QO=*!X5;}w$nl!1AE+rsULBN0%K|s0&q<2DZ(wmgf zd+!h+bO_~*bFTI7HP3#}KKp#w>&rQek- q`xrNHcW&FrsL9~rl|+(Uyu!!bCvsLa zaK*zTYx#Y<(czSBiH9d0rv#GG@iakCOG5=FuB7*}s X`7t*m+UC5RsM_tUC@5uCg4 zY5HUOlTnru2MPVjqDwR-ck%G*9*g{ehqqdc8`_f)(wlhiMD1~p{(2RNhi68{a2pTL zb(|Fs?`sRe4ZNR>e|u?ic-j>fc!?H0OpowAVYoaynLFIul1>-7wsl+IZM^>GA9j7c z9|Gkc&AOCnTu1-d6TZ4Y*FHJEC49A55p#uTCpTRWX*XTGP8dT?U1C)B4#-K*!`_BB z(o26lY8+rm@T@#|9)5iy4Ic}`-#r1o?TdW5rQGO2S(J2Ai@%#SwLQt-bj;-9r|Ot? zHkILjp*SLag>bC$tvv8wzQ{Ovb$ z0t@k!!?O+Tv2e5xTjt>Itv%EX$0*atvT7U z5Mb;Bu&I7nLC 5-{>f7 m2*8?x0w>p-d3X9l{*hJF;q{Mc*Vq`tYahfV*X23uWarqpGPt>x!*Icr zbaNRQ8QnMMKj y&0vAZ4*< za#K)5UaN5wJ>T>5A524ps*=U{@N-{C%Sm7ittrsAE-?x~O*QMQ3f1OmYXC~>z kD+{uw8-@(j2?HGG1P2IOP9wU{#U=y)*Za<@(C&!UWC0 zZurh;Gx#f`I;7 %ELo_v;61*KH%VT3_6j;Ta5^7Ve09u@@&B85HGe_Whib%ibjCPO6UA zG1Jnyi9QC1-UbEM7^vVD`I+QC1};+W1oM+BY9_eR*L`w*k1$N}Bg7!(1F&8v`u_Db z Coq= Sxh%o%;DvZt>>~x=AZ8E$X>;rM<%8GI(=0ZOVH=Q}c zbv=)*_4oWriLVbTcSq)^?XQF3x{ogT)J^;cSh^a~Gwsl{Gf5ZBZsb$LcfLUuWde`o z36&mD_lHPsKaa3xWzV9lw?WLHq>lUq3?x5(7+T5F!f)Y9m>|l1@X0BI32EBwFalS+ zb`ZB_y4@IZ2I{$DuC6-i$iMaO)(7n>t@w$iJGVut9=+X2^Jfh?crNH_6Zp0U&hGvR zgx$5QeSUr!;IM>Q-nNTf_Yh^@*Z9G5#pV~W8r2S*Bon{U^_}i*SIX%W;w_RacDUi3 z(D!6l8ni#6bVy23P<-UQtUH=;(jj5^t|f=TJmHqmS8ay5KVpX8^N|0#|EAbMl9Za5 zya7ra`yQ0!dp$qDM)6rO3bD9(#Z2xC-8dlu?4CY;x?0|Vg(qK=#6)LHh?9puVIy!k z3DfVma=4~6dCJb+RlwB}tzN+t1#Ll_9(sQ$I!W85boerV8B-L-g Cx2`C2S(3)? zqU-H#aeBT{a~Av_ui13K*iKnlVfN_e&~rxqbkw`^NUECU$)+5OK*FIe*Q^GWHqca= z8uG=)4xBl6e~ztJ?@jY~K8+A&({jq)#Tdh1hVCls(eYkKISZt>xu_+DXLnb_M3JNz&W+d+G;j3FEDT5=e&1nib!MWk8?e!DU(fm~CIm=p$obpPnC)8$c zwj^b=5Z|Fu*w=m9h=!-8n0t6TGTS?exgxsjG;`wn73-|ufWwgQ8Mi?f%vsfb&n%4> zrCcG-@i`b2;EAwRY6S(jgpg2)uPN)!jH~csxhBohoO^<;)x~5kR9k-3dC)rP5#L1h zyZCr_H%1xiQUV>l*=x`15 _*~GpfO29TTV$6Wh8og57LaZpScJqK02NCK`$P0 UGkHt) z&kI7SoYM7mC`b07%i0HGbRiF4;YMYHII4Tn)qb&BiH2oGK`VWxLq%X_h;j$NZKMQs zjvgNzRI3ec2H)FtAHICa+7WYEtWx=dzWn0bHCYXBuCZ0j>;WGW|N0i8@#dDrciHmk z+>r+)ROrWMxDPi)K;p&QNbc2sa}rwxZio%-2vHVP*?TAEV8$aw 4gMNh!yPY@Y`49hvEfdr$rE|Ik?fca zp{!)6iU+wHSM*j$viseqQG2b7`^jP?2;s+{iktMjWDwzE;Z^rZ_=(g-P`ZIC3kS&xJu|)J?J<>84I&F0 zAtGcm Lu=rj>ipy_ZkdYA}eaB@wA z9}jS~#0g2{aJ9^GqjbAsw24|vQ)>uykJqB0uJ?Cy_@_97f5HGYGT3@bSBihU_cLX| zMPcCMquh;WShTUtwJ{;Tnx{zhE0H;#3mOT`k2w#erRkXA5~tu5Gu*o$e*iXJtP0oq z0eyM4bA#UqZi8@NNFWJ1l(IJtk2`tVSifZjuK>V;>EnDWHv1{ncMVThe$`MW%*N`$ zO@M(3LJKXTIS#a5d^@8 vW3#&!t!gjyddP7ZIO^#R|qYt6aA)EHA0%)^ty9s4YWdkICjH5dCyvZ zL5$v!R>E5SZk-w5P7jOMM;86P&VupHlPGc?qZ#Dh&*s;-d9!?k+I-CqVBQ4g LM<`!Z-{iN0S)m!nsiwR{a_E2luA6tGb|aBkR-#v__k-+Q^_W&dHg``EKQt=sB`k z1_mDvS-5Voa^*0FF!%D?wIUEvDvSk@EsG1Gc9bK$M9pYlNHvHXB=5v``&553U;12E z?BCtG>K&OtNIm-urM$1a+n_cB(hT5_75#6Q{r`hH^WW<`{*41*%yt82w0X&TP5h-L zf(|$4hh7C{<&9>dprG^y6* J0fL44IP=gsl?q}+0=tga!h%1)=O KBa@#FP|&h=V3zoZXg=7EMY zGRWSayHPJ2RLjps4 (!7KR@D;?Gu|&*?aQtQhK;w$b>0jiLbJlGASw zq(2+3t7wMN46lF6HV&(-g}On93+1H!OO%&GmuoM@-tSx<5V6eSGx%tWp*Y0{L?20h zlKa6)?y6ZWu;q}zGyEWgBG}EQW6LN(I2yie84ID%@o#hC0pxo=%h2VunzU}4DzuSw zQGQ@O))h0-U=$|{2ysZugQj!=#;waTN?wuy^fBU9EplHw*M?QL=PVut!H@U+j5LUJ z9H*RgI~(pk-QtdAX=$B#t-)rGHIlQN^9XbxU@B=Ok-@j4${vQs6fN@R>dU-*2EfhQ zu@bVz5IV+}gAg;*-(a>||CunL98pacxNx&Vt+UV@@WviwJ_45`efX=spn@xl@47FZ zQ$Uj_&mmq&)iKFaO}#_Q0=d}wg+9GLEO!FUO(?FqTKWRqK4&@*Y3hQnn_jWql1?@f ztu)Z^qYxY+7Dtzk&TNN Uyu5L_|d-A4e>UO+w4ev 6_xMAl6yg- zG4DBNE8|>lUKT?#*+eVd)izWLfK3( z_XUh(O!09?plcJ}G(F@n6mCC9gvJ?obh{y_Uc;Wc!Un*Is~zoI8bZhlpQqPaLQD zOGztU@VdwQKc98@%m?~)4xljgT=P#eAbcF}^-_~<*Er`PD)k=je3Gdk6Ue;tpHAl1 zUCa!)_?#e~PL_SAEKtnOiBT3xGMnr1&jA$Pwv3BCfDaAT!o-6>dEBEJ%bxja ?McL%_neFRclLc z(k_y4v_prs$khBG`^yvZJT9Fp#jj#q6_KK$CrwCR>6CW|##+^Mru9rByHtNFKG3}o zeysfwF!?5vUYh-EqDdo6-xA_~N@;ptA14Hsz>9`$C%qEQr*}UF`{@eF*$))f&%^ms zppq^w9UuM@Szr*zyBWb2z(E?LwDXE{)2+nb`tXZ={~xKzls#U`J7LkUB zEl)w!j?@GaMrk_EToho=ngw% #bYHtmtkI`h&zZ+|(p+=Uy^a0pHJce>^ znSXQQVbrP~47WXub}EZJeUBeG9a`W=e)h9@M2&=;Cz%>|lA@sMFLx}E`?ZXS (q;q-iT E^d<{CQU;eB1@c)Lf{TsFJ{|x#5rw8EtZEz-vdW&?!s?21d zH7}+YiT_SLgtQqfGE)DTckGq!57Gh}O0V3>Ca+pmu#>#qJyTpsSMhD!L&yju9yNNv z45@~trMSzL>!uN;-wT(&wJEK;9&JaM6+xQlYLJPA0k &k=LUhI#$)W3{w2g zop{6ufTy8LWv`6b!+QfRT&8zkXL3&q^9Fm^=*I0gW__zV%RcMeQgXP0i#kS)J0G z^C(yUgWh9qLr%EFVHSVRN>N85OZzRlt{=evy>5TG{1+QoVm_D`R{FjpJ0N;e)G! zjiKz_LH8yEN$rc?tB*C63q;10|L76@u4O9KPF9L6Ii{MPmdFV5*$snzP9Gx T*(ROHH&@Q?5v( PNJKDjkZ ^QmC`U;JK?{VlfGv8^>YiI!&VjCD3DFewwf4tCW zGQARj!xef%iIceE279%@7?-Uvt>O%BvyVpxQb8=*LC^$U8O+&Ghg#j zIgD1_(}7U>qu_VQgR^3X7qA&^xWz*XJJC-$uRc^)jvNnzxWZPRozMJm0ZYVBnhL~& z 2)*}9nYnYoBEX+jX9w??2@XM^Sd LXL25PZ()rdf+X z04g7 28!MU gVTT8CkydDPJyH z&M2Qq!yVFC9f6feE>PE)Bpj4SF%SkYw4NdI_C>fWk`~FMrEC!+z+!^s83I|O(XrFj z-2-4tGj~I_|3j3Yv;9CmNm3yLUwPf$>em5>IPHTQ{Gp__?nk8WKTs+mO>-^Yu+`p! zOwNS0L)8gAfTlXLj>T8y@QPdljTk|mK4H{msPJP^W;<;(>Y=Gg5JyFs8w+}NN8+*R zs2HM%D`X@JD*a64)H=Ut1v)BYsxJ9>mT-i7O^2euEHA53hrrXC$Z=;l(nl}(1cyr1 z*9;>lffcwR_kPEgrh$Jx_7aO #2lk rc+gjH)A*kat-SsZZ(+KZ?jQ2suWQ81)CTzEKPfW-&yU8N z0nde7x@Ky6Yo&_!;LEz1F5|4qj$Zjd=DC%6=eplQyWiurJp9zU*26+hJ=j6%5WOr^ zJhN2G&*(IB_D5m9+Y0VUaZe}v0ou0*D!w_Yhdd|mYS7*Qe>E_sCZjYj>-~n)qroAY z8aD=}X@u)sJ6bHf2tJ1AdVHpp00bkWjk%nnFC<%?T(nH3-^#SLKYZ)w9K?yu*p;+q z*7sZjaT}QC_{?QGx_w$uu>#-yFKw^?X+`{h^xgg~1Nd-D@|OrGjQJmwmvEnkouZ(> z@YXx^NYWRDfTK)T`dS!Zr#B&V6!uyoZ6GG) bR;e0CmV#gji5?{v zhCV Zg>pPh1~U*tW~8iyKwe-7@6odO-nM7|}9=Wf)AJ4bZYLTdJLCatlo zwY?MOf&AvNMw?vXs?FbwvCdtiuq-6ClBMw5-)MMSpjtpC#ht@0CTR={ER$?cI*L+) z8K5!>r~WT&Sp1sxi_%2+6myUqM`i!<(dW4gyRa$F?_d4%Tj9q6^eOks?JzK!aI)~$ zlKb@$kOz9~rpN9dc6^^YVyU~ON?1-zI^K Q2in8$Hk}ALpm2huE+^a^AKOP+1>e3 ze;)fie8*-Lw#eicUdBxr9h>!9jw9En`M1v<_wDoef1EE<2Yz)ND>QI}*acC&tCFx2 zcRLDB30e6EjSiT%PtNatkUMBRG)zTg!RWvtVlkOYFRZS{)AMTcw$>QjY3IjO)^H$0 zP^kgG>)WJQ`t%vgcIYm`7KU}VhmiI-SgUuPiszL><`~^=b9!8{B8onNx*Ri7+|yFN zcb*7XAZLbY9X{_s%vm(@9*`up!VsM~In5netL_4h(G8oOe$?dmm*;Gx9=a!gT$z9U z`4tBbrCT`-)eQutraGxQB!>nch`g^S{l;{(u`K&*8)V3mF7;6>kuSoU0?u92rDadW zL$J$K+(eVDp#mv1uJO+td?ti~CHBs5C(i>LIVvQBBMnfKB5ABWn@-XGqlKV6etbDD zKFN<@Mi1D;t1a(c@=Gxl`c+4Zu({Z HPSrCh$LvG2|+$1-p!#MPzn2JbsK~`=1{1LVrrmjQH zH9aV+&(vd8pMgoK@~YTc7>U$J++<_M&hZ2 7+M8&-DQ^O2UiOSL0__(% zU6K)61oB(>{zy{rO?cS1c}XUmVpqyPh$d4*=D>7$85zWN*NDIDFt3As6j@wHWeg#V zcXL@n$=051S-@{ScQXglmkm(`XKS3$XG!;iybbIKeH*>8+iQhk(eFJ} #@s+LbS_iyt>C-nvF3%eHSSDo-Gv^~$g2^r#PD@`3t3EcoO+(B=^ z)V=ZzbjDCNdgPgJ=r=>`_aON%;DAcC&BK-m!Tp@2)_72nGE%daZ-#kmutZEZ@HEYw z*#Y8aJ3$CUlu3%$tFYirs9aTre)aD1Ox0FI%B?#3O#>^9Lj4|x^btJRKtHYTDU^&} zI~iKaLVSFd@08|&;FVTu{c#-}x3o+;>U&On-LUPw`DT7Sm>~^%q?+W$;ecc*m9gLp z#pK`eRkGwn?W`X D=RnT6~6jWr3?)zVqu41nauE!M;iFGWb9_-b@} zLQGE&1^RfaHNsnvhoaYlDhPze!2+P9HmjtENSYLNh0S>@_|#gTOlpI}cNOH#)OW|M zJ!_w$V6F~~6psh>XtV5xoE;aQe!n$=IcBkm;KvRgIGiN!P~zMJ-V1w(>w}@%FFjBr z2-tYqzv5kCT$$|cvEf7VjVa7wA&l4i7Wy#DW25ye^Mj8ah6gc+Heh62>Z~wpf58Xf z&*fVrq_%l|57V@W_@$kiML)VoY~@uAmp0%K4*Q6!8j@uV3#C*K=ItQtXZutUOHQ9H z-bkowrj9ce^ie`S&Mz9`mihy4t*sBOQK$#M?R&2-8OlCR7D068tnMtB|9tHHh#*qO zx^jwIx_JIGgVZxN)2+?Sqdsz;UjYn;ggHrl={u$Dal7IMoe?wxeP`7^I1!i1!Qa zU=4N|yIM;A^O{=VLMJV4wQ$jX5cbt{5R>Z|0^rfmvMMd+Js;kb5;>pxQ>}f`_v#@s zu_j<>#IB}sRl3k`{%$J{u&CX!k+7Ika9-k}?KlkAwVv?hIO?J-aMQFONT*T9(3AS? zGcz<9h@<)dGg=+wSyhKD8}d38O$N;H<7~H%>GEx5q}F54O>VK^ )oflpE9ca~)c8nd9xzmB@6i3|MmHjvalOP9Z`9a&gY{YZT( zuz&sl#~2xyiD6py^K`?-9)6?Jn0*qz+st90NII_JZs-*S%t)eSAy?uVX8 uHjT09(3< zUS079!9^1OFkLB?cQA+zC9bf A=nL&xp_HK-I-kvI^e1uCU zXlBUgF+@nhRhSwdl5HOTh$y6;6b>u2EqL;pyweF+am}W5(B-``D9@h2M{LGitLa$X zgNzis-VFWlG@^nc>8XRdnk22ipXP&}spHqwcVuv!Il}^H>Z@6QI_Ar@UaS9QwNE21 zanBxl{N+<)qhZp<7{B#@4ggp<|3?78`D%o-PEe$ZFa?TTe(S DSmqiqcR^h)9zkx1$|Y(tzZZ}B5kkb9Zd66Bw3|?( zSznO-p(n?^NlB^h(OHfs^Nb&k)A&MTe1|U?j-4iURfKKNWEvUWUh33#bJnjJi=|FB z_z(PO$bL718TfAKxbW(8Q0Vdf;wH&f_^5jTXk9eO)Azd!(*(w_@=fg%6!r46m~GZT z5#jAWvjkpsJx+s_d%}pPPc+eDZQqPFO#$et8z(0AnmN8zPYqLe#!5N+`AS27>3${B zL@-%X?5j|s8_ =<=if52DINZiE^sD?gI?BUW=f=c z(Chp$_R{vJsmUPwRF``VMJM|z|6IVB#? L} z$AjDE>skgn;jlA!rq^u{JIbv*(K*ZMgH`TZ??<-U)jk;@22KT(Y5mlL-?hFlqebuW zgv~lz#m;3!3@yo@_5|)H1bq^&;xoTMS3OAo;TC2BlyoVYS@D^Pk8#_E(qXu|RF-Nt zTTB PG*v1{X%c5Zs=s=c1 zcyH&r33&2@1tgkBm_`OZ_qr4 fIy(*J8h{3#dPU!Q4z zla%iVL4opDx4?;;Q|MCZ4zfIGWGr;WgGn`qrk9Accy87`V$S_81j%3j-D)U>F>7=J zCP{ f=> zw{t@7m7@3Cq3*Rd?a;_n=v#oa?+2&d(BMA=Voz@g%GsF`Ix+k$`VcG^oQyS8ZFgO- zu6n8Njpq0bjW{AXh=yvxcNnH`X(#9!3f*Nne?EKnqvI!s$|=z;vprgf*4h`Sbl(Z8 zUEQ*akb0R^+8yW8P>?h2*#pLMb%_1rfFwt56TRDPLn5XZKbu1{CAmB$e`g}roT}=9 zn$-lC&d-^+>gaT<$gnk4rQW|%Sv{MKrsJg#@BXevUY3mPva#q_)x5?hV!_!p#JEe8 z6D99qt}y(1U65yNr}!-rmmZOhzGO}xArkd`@^G?&ar)7;;i&6A8C~A&*&jQPr!A2P zTeq-BthVtrOk>v;MQX@emL@e8b!Q!WXL2LL(&jg#%U?CY3R7MJztUGpuPtdQ&{z_H zrsM!%e|eOqWtrXZtaZ#MR&m(Qus0-EAfj?6<~J>(-KFYL^3C~_JT`;#b;x&kJO3p& zF{%fctIT1b7Txr0j_*#U|NnM5@t=a>f7Ua{ug1EPc%b#)oehRuHZ^CgCvX0=X(w0^ ztx$=H?JUltJ4zOqc%WOuFlf%ZkG56ji$*&hGm(z;5yu_XDL@KmY;24*3r4b A}`W{leE}22uUx zJ@=BG5dx;$pZ E?z>EwXXlWE`W0rl=O^|Bzn5Lo2!&dhLQk8n7a-L zU(GQOe49eZV**~+_SWQT=H*o~l}!2BoeOQ&x)~R*Hy3J@Nh5X&Qfwc_VARTFFJ*i_ z{T%^?`cd$19?b3vmTobtwGsi(KLS~fbE8Nb#@7^)>g)%tE=Ja)zHBz7#L-X6b{J2? ziiZ?>uHZN(^yS$y#eakXJt5Mwh4*hG(pIPfCE{0j^SVmZEvaLtrREwHd|gzi%hX@)5$>O#0fZ3!VDM_*}cfYQ_z{@s_2c^V@!a08s6{*nBDCV>P5z?DLh< z)T7SF@UM&=sUhAL|A-ChrsOY|8Vrt;23uSHK$FodG^A+neuYH(su)jH5;9>tr~|q& z2t_bgzJ{E@uOdzo!251kAT02=#uewF$SRMLvl}J!P?IM!W=YGtul^-IF;)4WxR3n7 zs!UmSkxxm^PH%I+M+e3|b^IIKTX+R+YEaum?bnZElQLQNnDV|t{Wa~``EVH9X=Htq zR9v0;<>8&rejtu5t+z#ibs#YR`m?+@tEHzrA46r`&wVKi92+xUxm*u(-OuQ4eINfH zjAypTh%+qksp4OW3%wHkWy;rGq<|4s7I2B}u%_?C!>p)}H1t!LU$hQDVfmLC-tLT~ z*^n;X0qPMQfs>rKDW8%uio{CO+5&49r!MKLmrLO~{tX-4smS6q`0|dfcSipb4)hcO z#`JKYrws!r^jmzPaNUPc@4@o)?19+8>y&!O!b#KroAb!X-eI4tQ{j0t>OYrs(_QP~ zP1oJ|O{7?y Ys*@&Uq_1>{N{fw&?iS{!!7?#S( z>lu{ws&e$vqu{#o`ht|pB&`hZxB`ZKr!OtuYVpkXEXz!w-{eLGGWJJ@Db5}h%q^JV zMx@6%86cZ_G2t}mj>H8pNt|A6Z~tn?2mUm1ft9rxXxS^ph&5ih(J6YONXaoL;=jB` z-*QZDlg`^@nX#cVt(?Be$757q26@j3Y#hAZqzxws$a2dv7ei%|q;W}(Ci4&=*!Uk_ zMv>C*cZ2f8Eh8GRsc>B#Ys86tD 37HJ=H9G0s=L)-tc+}!aEy{gra~*sVl$8?{z2FRQ><2zE1$^_ zDt9?3-XtW=vX2`j&u5=2)biLAo^b0WE|U4Nxs^%V*{Y_Ci@mOdzd n(H&s*B% zE9;bI)p)g7U3%N^;D=7{YoCPE_d!%@-ry&P=J8#awS_H~w>8t1)_c$2DOwgVB=K2p zH)kfrrERn%gBo|9=}cpOHoM}yE(sUz1>7pL{tp_`na8sK^Tma8kF_unGb~D$a6yu^ zn&+a9!CVnZcLpELMOL(%VtcJMnmEOBeynjgZVX+T#Ov(_Hqya%VD3VNE$zQ!B{o?& z$7<(0aBQ}jW5msT`aw)l;S<;3TgP6vJ;=pbnqp&jI2uzPW2FKZY?>a$T~}4;gZ4=& z9umSu9!jISyOC~FY^J{Vf-iIt44M >7AN>91UqZS6;!2xT~M3SbYU?*Key>ML}=inKAtTUe>?Pz$+G5N?ljL zC ZUeHh7>q(?!Ae+yvBIG>vCgO)<;Vb^ZUF#Qcj#jx_u%Dl(b ziWRjJ9zr_e-1>iyo#ghDXJ6}oS1Dvl785zG+u}UiZ`rNYQEew7dn+IX)#RY7#3@8d z+i!(n*%qQG5T{Zy7fjExe^GFbynE&$={|%hGas6HVvyqmt*0F{hTGK^96lifKU*j@ z0e9t1<%p0AmdC8;*lTxfpj45jYRNhb37@>ntQJr1Hg yR&>(zEu5 y|PxQZo3Me0e6WQ$~Sdm^s6_CX|?H6<<1 Po)1p#S7-eA50G>ZcW|AlEMHz1M%_}b zlI8fw0k@56(brkR{$7V#7x9#_M!FyZ#yh)%Kz-M&rM|pq1AOL=-aX#BU31dU<>N_% zE9K>C^jL~ zL`%$27%AR0qS%sAQDt#J|4HtvonUql3ea46Jy>(gbx&O*TM!J+8kQpTmcY1wF zdX~GDUlx4T-tBA={P6_ENx9%hjH_522+;%+G!I~}w9}b%D^n?t;{PHf_JZqC+JM_s z`H*i~=}bm%y19ES*=~0<6P#$h#%Fp6&K8-01(Id3N9Tfnc7a`f*CZ)_)+B(T$HOZS zY5S$hu6xof+^ES}ql`4%77b&-u6tB`=SHuNxqi4{d>dDHTlRH#rQavC1+K1a9VW;H^&GLC4D#GU6-&5H6u&boG~&3- ziW?QqA<*uUF#e+nRoqm+4sajHz5R6NeT{=HcF`0E<8lkYKjGw(yMs!}z3CB_knC7m z4=o?*XWEV4h=M#@HC?L^-K>$4Uw1l+eja}hA+2ct>K@A%LLQA__y1lo18$eXx1(Op zT72t< BDoEbP z@Ot`Ubxo<^8Rrl;6I?ns$;)WFp3=d2kE?^~Br|$A;(IWqIVXxtkSjf&bJBN;MK<|9 zc607F%G3!qv-i6Y5&T3z_$tu51}?SEfN^zpeQwg;I^vkcNs&=#f<2Mx7!;&LgaW@g z@g0ufH5AegTGZnb#!aNf1>#HI#on%;g>;2-4z|?0@+i dY`S6Vwv lAP?p>-PSsYIYW?nqvn}~v8?BD2bTrV#JxtUrPWPu* zN7gdmZ0;?lY$7;`PmmmFfRD)m%f6T~>JTVF8}G`Y$66 %?;*ddaS%P z%k)6s|II=sLSBF^z2d=f6Knx>T%0jv3A5$e67_k;DzhC?e}-q8Zn0;XS&4m2jb;5I z#xD5krQ4@wNYFG)Fwv}l)2_z>s|H~49lfDIMrmn7>0BZh?P>N(lq^`{*xyX1G{-1U zUX}xOBK^@y(7O}aOCw!ejCjrO>HI>fc>eUjnRc;rXa!Vy2Yh;K^VvdgakIP7^b^nJ zH2OR2=l&hv7b6I%Qz`!rMHb!%4K)*x-|Z*+XiWuLWM?FQd^_Kg0=zL)-(X*J-{$HO zJOmW7uVW+C_C0XBxA-6 o9|IZiFggwd+(p(7jLx;HJk?Q>gCw S4=fjDNkszZ39hH6Kg6~E))emi*^mfdEn~&*TQqxB(Jq98iKVhII|A_ znTb_DQU5&dv-|Ym=ZmYVEh$q#8O_@t9=NOx;!zWho&0@E`M=u<`9GtJzimT#*f4NS ZC??9%ZOK#@g4?!_rz8gk6}~VF_+LS8+!_D? diff --git a/modules/screenshots/newsfeed_screenshot.png b/modules/screenshots/newsfeed.png similarity index 100% rename from modules/screenshots/newsfeed_screenshot.png rename to modules/screenshots/newsfeed.png diff --git a/modules/screenshots/weather_current.png b/modules/screenshots/weather_current.png new file mode 100644 index 0000000000000000000000000000000000000000..4335c63990a0a3fa89537826461ba58d79711383 GIT binary patch literal 24438 zcmdqJWmHyO_csbEAsq^ew6sWrN{WP}gfvnDQX<_YASEd&E!`#E0!oO0NQZPtch@`j z^Zd^k?>OVU=i~WsybF=*y7t~{t~r0T?jXe%&vCKHuuxD?aHXZhl~GVoPv9Q|Omz5; zo$tU;6cijGGchqmX)!TsYg?-~W^avAP^5xl)G;((c9EoLM@B^azJ@7vv+*V^@B3&1 zt$&SUn9}bRU*p`kEl`&`GydZmpS`Mhi%j`_N0J{?q}VJ!>oiIqSSddp@mO?QK3kf) zy0lvoG3ia#Mn^fAe^vGve+Y$IPlYK6`=)+oW;Umk0_tt*_cz{pQ^u)NzxnZ99L3ak zxp|^~?KkQ8ZH)L~k+Z7;vt2YaL6nF)f!xPv4eo*XDDTyGzDGVo3FMk`w@uUVH@H4d z^qKlQw$Wo*?*gO8V%|rc9z=7a1l6cto-NwaYog@p_y}eM#-Z^Jo>Ds!?fB864BjO; zTUu6F5KF=QW=ng&) A?k8g2`9Qxd0aYh3 z`FQf1bs#Pc9?7DF1k*`~oB;>M>zZf3nOmQ|xc1$ZfSushjUNv@_@o)ynGMr$ qJ&2&AEkPVND{WA zH1%tGyj4srWm@#*R?-{j%u8WH#DPTfG5l2D{ZMT_mOYk8BF)(E=(*uS!!?ETdc-H) zc~L_!kAO|ePdJ5{Eks&zA&7L@y6yF?lNnjj8~VOazo96Pa(xqzxc-5nF|=`8rk@z6 z=IOPs?@=Bz#kUZ4?NSm7w)?)`W)#1s$ic(*bm{?$M8p;Uca|_b>X%d6bX1?PQ=TT_ zw~A6W#QuC9 *WHM19{^=I!k*HeFk4h_Zh0 zKHO{1sn`Fe2t__hlI4;#y#y9s90lg~!!*299uIw-U*5P$;oR03Q{Sj=cykco5 d9Af&49O(<`Ioj z+_u-A1lZG7M_@?d?~ j zcfHp5URSLCH>s%zI)|zpDfbU@4u 9iouFWW_hm4Rv@T)A~#H}9og8~ZzSx( z;&RjFL9L(rr%Cxsx&BOzm+nkAqsf1g|0I*4SiH5!wiue9pC6x}V_ulA=uovvHYAj9 zqDqzPnQ5-Hk^6R4BR{(Ca~+h3Yw)SRWQJz{xtUqTv+>tjxEpjE!W+J1Iz39E8SUzc zS!#L1UmP_zviLRsDko o#gMKJ#ckl{nDF{pufsuI*dE`7%Q}Lv!9=vYA20F8WQy zo2Dh&p5%mOo>a3>6@?W(6~|h86;-CmgRbHo|Ca3elAou_PRoc$Yz;G*Yg^b=*j02_ zI$1cG9<7+J)U492$o1z9K1m cU!t;m+g{$BD1HqCyY%TEET*$ zQb|(%uq#%s`)&77tO@J1wx%|{c2Bi=h3lIllb$lRs^ZEf3$gN@@_3_{mUct2rri}i zl{!{#U3ist<=s^U74@d! )% blf!;ODT9fNuS4SMYxsTE#{98|0i^+V>v(J4?9S|3E0yG^gcPk7ZGUHJ=j~5U z8LS!NN}>JK3B--Gr@A2yzcN3Im3<%mJoYQT57_*}tS}Bg`XM AdW$pF>nPQ6?7FX+2vr+Vd6Cb;@cr`BD oL$U5>$x8c11 zW9Mz$2X`NIt2OEH8VuE9jeHC(U@piis2>(DG}E#ub6go`U;8?uQ-G6OSi)7PrE%aX z HxIq#9#w1FSaa+@ zET*s#7&jL*H+Ll4e5D*bEMwv382Z=2%xPvbn?Ing=b-Lj(d`@MO3Jd^z>)4WX;X=V zh@ID8)b8u57%LdvWD)*(xE`Tnp*r$;^2t30Jw*?v9%A4>p&a)d-M3yOOujE0rX1EQ zz;9i6tZ`+tvol4k$w*oG!nDzjYjI(yYP2fsR(+~^U1o}RFQgh@H?+2?lZR8cVj}KZnuwcx74o;&YpY3xs80n@WvmfY8PqP z3q1PwW8SAjuWnf=O(@UVe79mLey_Yus6{9)CER7|;@SC}oz+Tef|pujg^SA!`&IM! zneu6!p0qA*gYLfMRnK8{v6c3j;ptX$x7X2$#~8*1zJM^7NXkj{`O3<2m!6c~uzTgj z`0m5=iND_G-l&}Ftua?v`lV^{@hA;bcqk8Vqwr6rDz!5mdfAHIa#MS9?ds-(!$4a* zj4ybX%^ioW&58F=*2l1_^%V6ySW!56P>2LkSLe6}(T~h`J+giUT2qxWuUbfYq8~rX z9<{rSIO;Q@e(8WFl6r-fA?L0WD!0f3d; ~nFHE99>)jX6>9otxHDnsz8CB=pEX zsM5-G+we^cdue$IjAa}=tUGLFGuZ#&TX*dxH0;H!EG>=S*`tWr8XMRf8&Nx%*_%>7 zmzGyl_r@bdL7_&G78g}<9$)|K^6J*ng~;~E*LB-zrfPCpCd%CRU*6NE1e&~l{dzO| zNdm*lr|bki>8KJj!xsbh8B_>Z(<( rp_ z`1JI3Z_*P%PUJxuZ3+qrrKzyE$=`n+!AQ%+jpg^O#GV%2g_f2U`3CL(_T_(mpHA~W zYL?)Wrk#yVOEmLKeM`&Gh6ce`jjol`9qa%8{eGZRLZu@sD=sP7`u8tIOiYZFg2JOt zo1i-jL8ek=rKR5@>1E+XxG38P2Y%({+%HlD$4cg7qocnR72&F>shOK?Y;0Wc7c1w9 z+uCwThTK6#**-k Hc$P&Mu|}6x~@fYFfKn1O)GY|5mKzQBY8TySjDz_Q6R_ za&j`$g9pBeiT7?{p? }_B?+qBO?PV@GCwb0AsUmjjghxKjZm)pVwu%sIR+< z$}P1bEi{zlWs$4AG9v-keN(}+^>UQ=q`J j|p z+RF4>t}QGrz1~~uVS4z`ID&CCRF1(HN=Jp|_UhUiZ|ob4KVOZz(a*W#ST%jPO?vkW z%xki(x+! z`VPEh!a`+nUS7-Q-}+BUNvwBO+&w%n9(Kwyv$B3~@;F1UOweVBGMM`w^jW~E*l6WX zl20!4veo8fZMv3#j)u1Od|3x&TcTA{kdMzbbeDAP_4RcQyCu2flaruB=37|KuCA>E z1H>*aE{`48?`UajWAJ!AP%FGsVHcH@6atl;D8ADF+uXvU%wmL%Rkz{J;o)Jra=Ea` zIVB}!X?eLXRA00Vy_S~N@5#xK>}-Zxq@-(;=-MhOA0i?MDk~BnS-rlxyznKNDJm@F zFl@)6V_ 9u8SZ2Z`HoBG{ULr`5EKkOL&)xo^aycQ&^ z4<8PhKl9v;N}Z`3(OuiymPdCXvxRcFuAtDTtM>@1u%@=w;OubYI>~-(Yb%H2`l#p= z_8&ifKtE_N)GR;!+iRW=1%TXu`19xYsi{$5jXOI#za6ZNR5tZZO;M($rD0-XzE4a{ z93IJ6VL>|Mc%?;WZ||_{*240#;b5*3CJv6co0~wfZsSKN9UQIqdbPInb8~b0hKAgx z^owzNo|+|Tf$d~2`etU#{P_1Cy%TqItkUi1A0D$mSRFDKy@&Gk>(_1AI+{gerTO_- zwY9aKU0p3v3c`7ZuK4))a*2Gn&%-I9Zf$LB`kB8?kYA{QGB0F5vj m9ad978&!D`0`}X(LR59-tElo`W*lBk}JR5p9 zvPeisws&^C!^82jUnGCr-?x8NYb)`! CKa0oZaW(P*e#X7#$4^z4ypmuw=P6SxifdY;Jyj z=+7DP!V@PUT;_)lAEr|&ixMbmYX_g6x^^9fP>JZ4VE8tD3<>$3tCWGhF_|Rbg!ky( zrsHeVo@Yf1`0*-djWk`0wo2ir-jw|GnAaRPCvT#B z7V+{-_2TjO$$Ode8upU;!0=%}a4>c(yWYF~vra{_d-rxWs;B3in$IXM4@$h!N=vPu z%5-PnTF4ro$Bl1J5!-{UWHa09r#n3|H5CTskc(lCja^e$cgRdtSe!$%{41Wj^VhEr zNW1A&hhE>CDiWTX%T#Ia &xkN z>ApT%CboR!@9#g?cr+C?85bGpBjk4Y`Nstz6;-&+eEZ6)KO6u4y^o2x&B|I47X*8h zgzZ(};GoLF;$r-Q6Z^x5KU#b-;F0d2YTn8*i5O8y 1lK!_Jaox=olFbvNmAHJWasNT%W8Z z?h`s9hh??do)K-7VNc+Hd)M}DC8zvn4pEEu01hQyyuf=mS>yfj LPBu5 z{v=Ujn!bA{33p&?YdZs%^7-?fE@6_`*jT6;;VP@?cecyMUl@JJ0;#XQ6Dv?NG3B0J z&Cbqhl)sTLNj3hZg)Sf<(Elr@F?9RiN$KcIJ%Jlsodcz>0UtrFef$HDGxYHOBUoT1 zX3x?Mc$moGfMWR+8JRxdMn*=asH$olJEFr7MZ?DS;_Lq3KYx6pqi;3lzqEiR?X;yU z7te(TNF<%g7(NMb?tbm_eMN(H>aE$?G?E!_s)C<6@`=N197={uMWv+#7Q=-rduLe* z_-9(&fMiO`%8(v_JAAWC1=)nK-EG76c6V(v+}|iGM~*KW8yW3e9I}YjI&P40ad8n) zQid%oEO;s;o2|BoQ9KwsYpkriE#S1dZpRE8$IjH!@;0tZ-9bG3y53|O&b%^KTVz7r zIE3?Oa`J7&{84PNRYY}VrG$mW+WQisQ9G6ec$UH=d|aLQcA$+)$;qwn5u~Sm$;`X~ zEfZa&7(m;bo`j)`D{aFe`5yo>e5Iop4BA8PO0MZxVzIKa(&Z3tuCBITUYwoj$S20c zpaIH}OW={-uZ71V<~Wx&rJ<=Qny2#dS{}e0sMFc4Eqp60EBJ0&M#lBU#YMoP9c6|c z_PUwOj~ uu%>|$u3^3ZqkMA@!HCbC*zn95+W@-75?N!Zt!;Y{Z*QR?3 z06{<8Bp&=@zY^0&tq^(2E$Pf;YGu`tCKeF#N3Hhl7+2+3ac{D~Bc{C^3uO(BK$s`g zEG$^qq-^A0M@Bn3p4-;U0L;Pp`jd2fzU}}O6*ZkG6ZQs7!hi*y*2Yh(XI}y9eDL@G zm>_=(OXBE;Sh-1G`}EbNQ}S>u!41?zKFij8)q l$=) zbb*^O+HE65L_`P-c>A~R_VX}u&T*IEpdiAcW@~7%=q{`G^6)6zBs@HX@F@6=qI;jh z&6>CEtFXjK$IMxcK@$bQKQlMSWmHl=NXrRG9NjV PhXn?ow-;| zOIkr;#Nt!5x3ZdAwjFcJ&!1RTRaIn Dk%sxfEv4o;~BRnG>%J`1rTpDRJFptlR`YJtIQ`+e`|r0QVlB z>7>{0g0%bTN)CEY; EWc|o>qJdWb8~f|Ef}o) z$wJ7~@pM6U!_dgcd;pc_QyUvjet!PC< P^ACkyBt1sO#>N)h{&xK{r=kBir(_s8!Xy5vSeB^Ilvjuw8fIuU zd!L`XH(XtwnKzF1r3g(>{N4h%T{->)Uim9kgeukRvQ~7r!u7zszpZ0L&+G4&<}pwi z98*9-=9X?cIy%1me=W?-S>XEIJpK+BX_q;ysdaf=9e0SJ({I7E9CTr5guyv`ezKQt zE-#NdtPwRRMKJ>7<7?w+cem_vJPB--n<642jSMPx-!i^P`WDY^LI7AFUX@l>rZk^~ z!xDo9yYJca=K 2_;6!_w|LCcVyHd!azDp> zh5OB~Z^b(Gr+-UKPWM*=Lqb$!yZib&fb*SQJ#9-hrfn+)O1!(+Eg@pxPUb5@-kT## z&z<))KhH3)OfvdkqKP5Jgo?eR(Pd^>h_c3+H>CP4mQv?7{g zs+*KyGoJ5sND$k@MDEe|yN>RH?gUNi^AJJ);h`h&G-P=gxHn&=De8Ac(wm!ggi&x$ znCZ)l0)~Re8gP@C!L-m(Jx>Kl;E+agff)lY=ouOIZ=y~G{_JzmU|vIhs Vo!oAE@t-J`KPEq!%_?{jhUOO4RQ?`JLME7oG>m5UR2;){;bX#NI?u zEiovhymd6pjFF)SIDvH9?l|`Og{~;y%j=&%f6jHJ6yWFI28g(ezLo>K_NaiO4)zu3 z4(a(ehLd}MRCa5|v+n~bT31)yQdH5^#S ~M7Z3f6E z^4;a>BWD!(75|e;LC??6kA|7qOp)=Rtg`Zl4;uF1ANUnA?3=iMpZBZ5{=a^*xSovy z;9p$~>@Sn3TB02s9Y1E1@nuctr4+P05fE7W+tCIU&C}Zi1CPpMUnzBY$3!}XPN&ZP z=0J|ZqqVJ>m6afvt2FoT8!8HWwfLZ=I}X9h8;)0)X-zZoZY;BV?qF9&PQz4_v&|N? zi%d*>kWZuvl@t;puBDY=;3@U+AwA=}mDSZ}y1JC?J}Ktr<}(WmgBM;p&uMT}rUqqx zl8{(CIu6&Gy~tCU+v%Vpm8Yz v$h5Mv4(Mq+(1(M)pxQj_trDd2_-qAVBu;UXABPU5m-^ zJv>*u