From 0774f3edfac4beecc56e4690700213c9bd900b35 Mon Sep 17 00:00:00 2001 From: David Beniamine <david.beniamine@tetras-libre.fr> Date: Wed, 9 Feb 2022 09:46:19 +0100 Subject: [PATCH] Refactor + css colors coherent + fix bug double open mosaic --- capsule-prototype/css/online-theme.css | 33 ++++++++-------- capsule-prototype/js/online-script.js | 52 +++++++++++++------------ legacy/create.zip | Bin 58196 -> 58328 bytes 3 files changed, 45 insertions(+), 40 deletions(-) diff --git a/capsule-prototype/css/online-theme.css b/capsule-prototype/css/online-theme.css index 98202ca..44648b6 100644 --- a/capsule-prototype/css/online-theme.css +++ b/capsule-prototype/css/online-theme.css @@ -302,7 +302,7 @@ html, body { } #popupMosaic { - background: #243538; + background: #243538; box-shadow: 0 1px 3px rgba(0,0,0,.2) inset; border: 0; border-radius: 3px; @@ -322,26 +322,27 @@ html, body { } .mosaic_category { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(125px, 1fr)); - grid-auto-rows: 150px; - border-radius: 3px; - padding: 1.0em 1vw; - margin: 2vh 0 1.5vh 0; + display: grid; + grid-template-columns: repeat(auto-fit, minmax(125px, 1fr)); + background: rgba(0,0,0,.15); + grid-auto-rows: 150px; + border-radius: 3px; + padding: 1.0em 1vw; + margin: 2vh 0 1.5vh 0; } .mosaic_item img { - /* To correctly align image, regardless of content height: */ - vertical-align: top; - display: inline-block; - /* To horizontally center images and caption */ - text-align: center; - /* The width of the container also implies margin around the images. */ - width: 100px; - margin: 2vh 0 1.5vh 0; + /* To correctly align image, regardless of content height: */ + vertical-align: top; + display: inline-block; + /* To horizontally center images and caption */ + text-align: center; + /* The width of the container also implies margin around the images. */ + width: 100px; + margin: 2vh 0 1.5vh 0; } .mosaic_item .caption { - display:block; + display:block; } diff --git a/capsule-prototype/js/online-script.js b/capsule-prototype/js/online-script.js index e68d867..dd0c8a2 100644 --- a/capsule-prototype/js/online-script.js +++ b/capsule-prototype/js/online-script.js @@ -816,33 +816,27 @@ function closeEdit() { function openMosaic() { function getMosaicItem(tagOrDoc) { - let path = Utils.getPreviewPath(tagOrDoc); - let name = tagOrDoc.getMetadata("Rekall->Name"); - let type = tagOrDoc.getMetadata("Rekall->Type"); - let url =''; - if (typeof path === 'undefined') { - if (type =='rekall/link') { - url = "../shared/css/images/img-link.png"; - } else { - url = "../shared/css/images/img-note.png"; - } + let path = Utils.getPreviewPath(tagOrDoc); + let name = tagOrDoc.getMetadata("Rekall->Name"); + let url =''; + if ('undefined' === typeof path) { + let icon = ('rekall/link' === tagOrDoc.getMetadata("Rekall->Type")) ? "link" : "note"; + url = "../shared/css/images/img-"+icon+".png"; } else { url = path; } - let div=$('<div/>').addClass('mosaic_item') + let div=$('<div/>').addClass('mosaic_item').on('click', function() {tagOrDoc.openPopupEdit();}); div.append($('<img/>').attr('src', url)); div.append($('<span/>').addClass('caption').text(name)); - div.on('click', function() {tagOrDoc.openPopupEdit();}); return div; } $("#popupMosaicSpace").show(); let container = $('#popupMosaicMosaic'); + container.html(''); // TODO is there a better way to iterate over tags or documents ? for ( let [k, v] of Object.entries(rekall.sortings.colors.categories)) { - let category = $('<div/>'); - category.addClass('mosaic_category'); - category.css('background', v.color); + let category = $('<div/>').addClass('mosaic_category').css('background', getTagGradientColor(v)); for (let i in v.tags){ category.append(getMosaicItem(v.tags[i])); } @@ -850,6 +844,24 @@ function openMosaic() { } } +function getTagGradientColor(tag) { + var isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0; // Opera 8.0+ (UA detection to detect Blink/v8-powered Opera) + var isFirefox = typeof InstallTrigger !== 'undefined'; // Firefox 1.0+ + var isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0; // At least Safari 3+: "[object HTMLElementConstructor]" + var isChrome = !!window.chrome && !isOpera; // Chrome 1+ + var isIE = /*@cc_on!@*/false || !!document.documentMode; // At least IE6 + + if(isOpera) { + return "-o-linear-gradient(right bottom, rgba(20,46,51,1) 0%, "+tag.color+" 100%)"; + } + if(isFirefox) { + return "-moz-linear-gradient(right bottom, rgba(20,46,51,1) 0%, "+tag.color+" 100%)"; + } + if((isSafari)||(isChrome)){ + return "-webkit-linear-gradient(right bottom, rgba(20,46,51,1) 0%, "+tag.color+" 100%)"; + } +} + function closeMosaic() { $("#popupMosaicSpace").hide(); } @@ -866,17 +878,9 @@ function fillPopupEdit(tag) { $("#popupTC").css("background",tag.color); /*$("#popupType").css("color",tag.color);*/ - var isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0; // Opera 8.0+ (UA detection to detect Blink/v8-powered Opera) - var isFirefox = typeof InstallTrigger !== 'undefined'; // Firefox 1.0+ - var isSafari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0; // At least Safari 3+: "[object HTMLElementConstructor]" - var isChrome = !!window.chrome && !isOpera; // Chrome 1+ - var isIE = /*@cc_on!@*/false || !!document.documentMode; // At least IE6 - var bgColorLeft = tag.color.replace(/rgb/g, "rgba").replace(/\)/g, ",.35)"); - if(isOpera) bgColorLeft = "-o-linear-gradient(right bottom, rgba(20,46,51,1) 0%, "+tag.color+" 100%)"; - else if(isFirefox) bgColorLeft = "-moz-linear-gradient(right bottom, rgba(20,46,51,1) 0%, "+tag.color+" 100%)"; - else if((isSafari)||(isChrome)) bgColorLeft = "-webkit-linear-gradient(right bottom, rgba(20,46,51,1) 0%, "+tag.color+" 100%)"; + bgColorLeft = getTagGradientColor(tag); $("#popupLeft").css("background",bgColorLeft); diff --git a/legacy/create.zip b/legacy/create.zip index a2a703ea770860eb81d342239f65d7a857384d5a..4b2f2211e0693a3b02976ec59b92cf7ce0977b19 100644 GIT binary patch delta 3468 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 Mu`w`k+yz+-0JZRn@Bjb+ delta 3308 zcmca{ocYQz<_+uD)iX0Na4_5`F$ys|*)m(4hk>Ehih+TPfq@}2FD11?FQX(kXK!?6 z@naK_|J6T54xI^@aj>xe?a^hDyF5=Dl_aLmmQ9dIbKf}CWo@pcr=OI>K5PH>_jfX1 z*(bgJwb$9--{1XK{I|Nd-~Rt7Xg+4db+O$)|9#ynrQ=`s-1plx?|S{~?-$;`|MmX; zg}~PWUoHDsr%pL)@nz5Kc$p_XOMUiz-}AEM)~tD3B;+gq_TQU)$SSD!?Q(5z-RMT1 zIp@T4eLrY&B^R2qKYQ`%)1@ufN;&zg;`d~^yCf~q+WqAH6u)(I^tx3$mujbT7EZ_y z3hz_#zZBeiU!lHdr^2UK!T+!AEvTQ?bmw8klt+P*87I2c4Es(@6<!ytsnFDybjW)u z+e`cZ7b;qutfah`HwSEOJwHh@+_igli1ePrg$8Pg1*bJTn+w9G&0Bt8UU;^_!jxGC zacTxj8)f2IQ=Doay*g5^A=<M0&~Zh%mM2<ie#`$ZeO=eCBz0M%H$?DBv!#Pr-Kw<u zoq4@#ev>Bb5R?w6@I85;mFN2L&O>@14V4c?E?+t!V%Z_t1ity3xsE6t`KR2#;N|hy z{fOs`MvrN~lBYX`viDj_##yeNrhY)j;{oqS7tt*bj%TgOSnJtgsJOr=HU8R~8bv7! zt;>&D-mGDbXY*Xi%iCz*vfO1uhl4$z#WUk4yXqwu?zFJriC&P~d*#WI%SK*W&X+3v zmA*~1acbVSyqMuTH;aGtk2z{Wk;$yr<Ug>yKI1ckS=VP`Z3D~q^?Y1maxLsU-0vU0 zpYmbmvlossCAa3Synj<z(R`6|pXy4%>aTOA1g$gO<1aMnnDPA9p7)bERQkVl+8=RZ z)48SI+2MMs{;S_gncZCeXI{=oUwq<g#78?%sV-a2qe&9ik8GWC=D{6dP4CC^mfpF4 zz2IbKfx(N5^EyIGzcp@Ve{|aR;wG1>GyVrZd~;o@6)3;I=UKzK(=$rvySXg=ZtADm zm;7r>e4tM&tI3-h`Hc##8qSSV)L*8|iLl<~C*+Xf*!J0`s$f>VT#*y=p*!rq6YnNF z>hY_d*=$vEv7gT-EV#K}N#tYM%jVQ2Z9VQ0PHX|QH-;=@UgT0UZD0KKcPu`$uC5SE zVK!2^GeMIhyfpe;o)BB~%7)uNKCrTI8}OzJ24}CgV%Orkt1a(2qc4NUPu!uCLvi;0 z8Gp|${L8d#P9Q7$v4o9>>f_?>^?dU7I<5BO=+iS9tG3NEdsgec(s+vVkv|g)J}$a+ zEmON^Z+W(xh}fG4c5&OPv$q&GHfH(#4-IR7skO+IXQRaSBPAW{CS0CzBBb#%8^g16 z-%QVH{z#Pi%_VX0T>GDA&Q?48+3)}3W?jF`gzv_d)J+XDepWEM{tx|7e#>t|ePNf( z<c=qgcf6gscEh&@*3ErkE0sQT-FvoM_5$akgI61GNgiZ4!2cyKIPSrRl7{4~6DLem zJkWn{-3e_~9nZ<pGu++@zY%u78r)=ldSOO4`-W$Yd)1v91k=yxW<Ph1?+&`WedUx5 z2ZJAo&Wx4$&9Y7K>}`i^mDU@}3MZZNePE|ruXxz;TDy|0i%3;T(_xWG+X8Zvp0@7% z#*_IsR_H=$Zl!d34oirN;=H}-jD|WsiOwynH~ybyn|dv1#_R9b<P2RF-&tc}|LVFq zyN=>Vbve13cCXTe-^@0goop@po1cE)&KES>{lNS60n%$^MSpt*wEXNiz;^pNi;gi{ z;w=-Y(E6E|82#_oWU|<5?%5Nh-RXX+<+fZ{v-ix~LXD#Lw`WS+`#ooZ#q?d9f@K(| zhuu+pv*l61x(Nvkai1=7T~OKN!}V#(fwJsKmKUbhE5uGsn9=&i|Ko(cQw!In?B2(! zS2|-^?DWeEXU1MTezeqM$CkwcT+gS@GURA2_Renh3f~+SU%x|f`L!47p?sTey;{Zf zf<^h<GKE)}d#mnG(^iVSdrqnCjKL-AeODjeS@Yyf?l0|<N9*mg3%4CxVbywf!#@Qj z1;vRA9?z?LzPLKwCEHoD;9&YgpHJ`atToBi;CPoHw<&DP4Nd)w=Ot#Jo@@)vE1%#d zv9dE@^Y&*gftxO~ZP|G4P<;*e|JMstSQPJX6nIoCk-eeO^TP7}@(dq~MusHT^Vdww z=Ukb!_s)?LsV!#P50`$Zt2N=;zk0>)6vN^-tfqU<*-p$l?Ege<@odl1yvu7+PL;CG zGt_TR+iPva;vKi>$g(T0kM|V@eT{h<TwN0MeVx_Hnt2SzZN=a7@q6sxxF}LquM=@Q zSYz(`$BiEMX2dt&&dFJEi!IeWAmVdOUXQCjL(YudixzCO607un8@s&d%nzHdiLsk{ z|M4sfeQ^8cuU*Ex(x+~F*0L3E{kJXnzAsC)cK6oy4z2rc?NT>ZeQ5t`x?=WKksaON zOzvepeQVdXTOcn`^V!Nv=B~FhE-s3)y%kcwY!2gho+pROOkJfe&f0jPbMr($-5)V) z(@se0p5UDJ^K$>IxC6V2udbSRQ8CML(TTm`7dKqKsK2;tu3~<|OU81CFQ*;WakfwS zq$Hha-d&v|wfgJz_ph#bOmo=3e}8qD($oO{n;dJ?R4Vj-eEk&KbAHjYtfi6c)8tbF zuV}{~xSd#kFXhgcB;%A*l^csX!W=pH(v#=vW+zVNS|as$p=a>-_fE>|zqoGx_-Egi zn6%m`orR~BkJS}QzkabI)w5)e$+4Y`(GjBeXY5EjnlL**<b49i?bo*P^`(_{MM<_b z^Y(k5*i*Dd+pT_*iq^*u!6regvjtAuloiHIxt01+;N8O;&h_ih+kHEJ#M*YZg`M>- zOIu4Dn_YYD>T64CE6Q%#?yk6NyW7%kucf`My_Jp4?wtkk^W)~p@3*VF`}VGk?ELv< z=ku!fo{oFJr@X4BrsUdQi~T!nYij>~Tl958&zEJ-e%<+gb?f?HKIxNqb60%4cpyYC zq*=)^q1k!;vHM>Wb}JP#)mz%!xY2fZwa;@qUm-qsZ=3JpUK68Bv%XEyiCsGD*$jW~ zvx3jseJ1cvv&=2N;NHGGf7QLy`^2<Yt31)yIc2g%<<g1t!;7viGM)2L@AihIroA>z z1}A%Veyxm_G)~*I@OiD7;MV)4&w3{Bxsc}?Ds>^}eEH?J0)^=8NZ$kH!ShAySxn8i z>bf1)Es&li;d|grLU{DDs?Eo_jwrU??l%>@-#q12RFcOd!8<u6eX?5)9O{|<_ud|} zMTP!<OfyrIB$UqH-}EZU>}@%_TEZpG%gG-C<6ZX!ZG3HYt0jBk?bkw8dsm)GzovSD zA$6TQ^V=0Z3qr3gYZtq&p0nt6Hm{PI%ddKtm2ysI>Qm~(Z!B%>t@><|!*N-0N7M}C zzsJq5D(={0*}Ixy4re0cr(ov4Z%pQg%+ojf=v1D<BBiwR_}fh!??Rs5TO_Gu_SZ!? z_vk5()Q9iVikoloo&FipnLD#(nYKm9dAnsCtdT6gtX+(5mAyKD=f_TsdD5Qgs;*~h z1e|)l)l2p$*sfr8b8X<=5xHa1^?y2%N$DL<8;UGLn^@<}oc%abpznKuNZ7pV4_0U- zv#vX|NU`jAfahNSc>z;*p1*QkSZA%@RC^<nhVGXhMj~egWYW4t_!^B<A72Xl_v@1Q zD(w~AyR%N^-qBn9Y~CglOY<3L|1e$e*eZ4A-R`s}*K?NE|E+0tyLxxk_id{@EduLn zHOi*>RJk9GxZ?XYsdN3!jLs-2=gH+?9>m%lVdFW+e$96M`8{u>+&|3z!phgQ;Z5h; zi%0uv69diPcE6dCayIPjIgQ$Pt3-Efc0CpKll9W>Y}bW(i$z^)&xUnx36i*QZdapd zv8(xZt=L&Rt{U#joAs*xwD_+uu0y|GotwJ&-K$wOwcg^cEMetUX5t3zlW%M{ue}@) zG{bD^KI@lk5s#8s?^+m!%e=If`?mZ1nZ5n?|CyMiG|w1{pJ2V1rWbAZG~<!h*68ib z8P`;^8>aq>%`Cf{wzW^cYTvv5t{n$=6w3N$zxx`#t#)4g4X1+atF7GICF-v{?{b%V z-NPumGb{7eFM&j%8!p?oD^6OobCt;IZ+_4Df4H+qt$16xV~aOyQ({AcwQ=JNkE5Ee z_N#gPUHNfKt6d8Vche=7f5jpb^l!&8ZBW~?eO}1fdk0uHWUpUzP$qlZ5vChcb5m!o z?KBauzv^q#QMI7?i_x1?J3HMKMU$6m1@&HA$@n_kX_s)zX6p^F)2htG@1MFom%YHz zZ`J<OH(&o|zsjw;_0svrN%=<Q|E|XQnXFpI{M=NTPyHWzndu7Cnc?fsL>F}W-j8eE z{;NCfdG~+D&6T^8R43nm$f1PUtx#cr0ELDnjjPr%Fiie_*J|>q`vRgY3@|ByhPRF{ zcQG&&WE4#PaNl%t??Wj@?#U}2#xkAWGnxHSB8SH@u%!OvgZJzwuYV-PwC>X6(~nY^ c&R>~q_&Azr{?*BSj~%#<u`w`I+yU7J08;!`#Q*>R -- GitLab