From 8e18abd2bd0bb100629ae5faab075c7886537382 Mon Sep 17 00:00:00 2001 From: "Patrik J. Braun" Date: Wed, 5 Dec 2018 19:15:24 +0100 Subject: [PATCH] adding caption support --- .travis.yml | 1 - backend/middlewares/GalleryMWs.ts | 2 -- backend/model/sql/SearchManager.ts | 15 ++++++++++ backend/model/threading/DiskMangerWorker.ts | 4 ++- demo/images/IMG_1252.jpg | Bin 915347 -> 922210 bytes demo/images/IMG_1401.jpg | Bin 1117111 -> 1123708 bytes demo/images/IMG_5910.jpg | Bin 706687 -> 711659 bytes .../lightbox/lightbox.gallery.component.css | 22 ++++++++++---- .../lightbox/lightbox.gallery.component.html | 2 +- .../lightbox/lightbox.gallery.component.ts | 10 +++++++ test/backend/unit/model/sql/SearchManager.ts | 27 ++++++++++++++++++ test/backend/unit/model/sql/TestHelper.ts | 1 + 12 files changed, 73 insertions(+), 11 deletions(-) diff --git a/.travis.yml b/.travis.yml index c223e789..69c08512 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,6 @@ dist: trusty language: node_js node_js: -- '8' - '10' - '11' diff --git a/backend/middlewares/GalleryMWs.ts b/backend/middlewares/GalleryMWs.ts index c06ab112..1edac34a 100644 --- a/backend/middlewares/GalleryMWs.ts +++ b/backend/middlewares/GalleryMWs.ts @@ -77,8 +77,6 @@ export class GalleryMWs { delete (m).metadata.positionData; } Utils.removeNullOrEmptyObj(m); - console.log(m); - console.log(Utils.removeNullOrEmptyObj(m)); }); }; diff --git a/backend/model/sql/SearchManager.ts b/backend/model/sql/SearchManager.ts index d750042c..b2c44de1 100644 --- a/backend/model/sql/SearchManager.ts +++ b/backend/model/sql/SearchManager.ts @@ -70,6 +70,16 @@ export class SearchManager implements ISearchManager { .getRawMany()) .map(r => r.name), SearchTypes.photo)); + + result = result.concat(this.encapsulateAutoComplete((await photoRepository + .createQueryBuilder('media') + .select('DISTINCT(media.metadata.caption) as caption') + .where('media.metadata.caption LIKE :text COLLATE utf8_general_ci', {text: '%' + text + '%'}) + .limit(5) + .getRawMany()) + .map(r => r.caption), SearchTypes.photo)); + + result = result.concat(this.encapsulateAutoComplete((await videoRepository .createQueryBuilder('media') .select('DISTINCT(media.name)') @@ -123,6 +133,10 @@ export class SearchManager implements ISearchManager { query.orWhere('media.name LIKE :text COLLATE utf8_general_ci', {text: '%' + text + '%'}); } + if (!searchType || searchType === SearchTypes.photo) { + query.orWhere('media.metadata.caption LIKE :text COLLATE utf8_general_ci', {text: '%' + text + '%'}); + } + if (!searchType || searchType === SearchTypes.position) { query.orWhere('media.metadata.positionData.country LIKE :text COLLATE utf8_general_ci', {text: '%' + text + '%'}) .orWhere('media.metadata.positionData.state LIKE :text COLLATE utf8_general_ci', {text: '%' + text + '%'}) @@ -176,6 +190,7 @@ export class SearchManager implements ISearchManager { .orWhere('media.metadata.positionData.state LIKE :text COLLATE utf8_general_ci', {text: '%' + text + '%'}) .orWhere('media.metadata.positionData.city LIKE :text COLLATE utf8_general_ci', {text: '%' + text + '%'}) .orWhere('media.name LIKE :text COLLATE utf8_general_ci', {text: '%' + text + '%'}) + .orWhere('media.metadata.caption LIKE :text COLLATE utf8_general_ci', {text: '%' + text + '%'}) .innerJoinAndSelect('media.directory', 'directory') .limit(10) .getMany(); diff --git a/backend/model/threading/DiskMangerWorker.ts b/backend/model/threading/DiskMangerWorker.ts index e0c8ad8b..4f913861 100644 --- a/backend/model/threading/DiskMangerWorker.ts +++ b/backend/model/threading/DiskMangerWorker.ts @@ -255,7 +255,9 @@ export class DiskMangerWorker { metadata.positionData.state = iptcData.province_or_state; metadata.positionData.city = iptcData.city; } - metadata.caption = iptcData.caption; + if (iptcData.caption) { + metadata.caption = iptcData.caption.replace(/\0/g, '').trim(); + } metadata.keywords = iptcData.keywords || []; metadata.creationDate = (iptcData.date_time ? iptcData.date_time.getTime() : metadata.creationDate); diff --git a/demo/images/IMG_1252.jpg b/demo/images/IMG_1252.jpg index df7864583a965fee76d28978c436c2e76ed18104..9b5b8b5de71c77e17ed78428fdc3aae0c213f798 100644 GIT binary patch delta 7930 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 delta 4910 zcmYM0c{J4R+rYnL-?BxG?IB}H)`BsM!*dK0O$Y)5DP$YVKf&cf>{4`mJ3e-u>+JBC+H#o5H~>muLD3ni0A*j zGy{3%2Ji+X`)?P=Ma2Y2^YyGhav_+>|-_*o;^=DQ(uyv5oRo#VV`y!?(IJ94w6 z!rwZzWP7&6Bf9$eQ;*G_`xEYj%^o5h%Our@ZR;J7Jl@)rRWjK`Yz^BT#| z`6nKNMssT0X_=wygTVbas8DLYSSC7=YJ#><)4?!Xp+tBwQJM&dOHF^|jnjO_M7MV* zr;Ovh#3eOcB}`bcRw|&(gr@c`8n%|wFL~D_Wp$wu>8*bTII)Ykx#zWPL`C6X1 zBFk*dgvm!h1kfsnH?I^dRW_PDxx(!;{5q6xq@%vyB?Zv7qGE-k`ak~h;<+C+wH1+E zoyza(vl97d-IEHA@DDCqh*!@XKS7Q_7rwDYwaRU$bD~3oL_-)i=Nu{uj%ryfz^o)=e68bM485efE4I*4x(b1_myGL_*IURgh82JoWX;n ziQtN1(aXiAH+Y_*PE{4H*K#dwIP;W}Wc4{*n<`h|ssdg~Io~bjrt5-H^0IcRRlXPl zt6#}38BK}KoEE<>Y<($bB!ZnL;rB_hM0y_UDM*?>NOI4y>|KRVFU_Q6cH--aFNOPJK9#R@f6AO zlS3BpBr`rgkme4Hn^`a6+TPV;V{A!_D_1AtrF9NA9uCdTFv~0pRyAX}tnb%F| zvAg}EP49dDV#MFfyrND&xvxi8%f3q=c}J9;`7`EBT4VIx_0YGGbWUUJPVo~?-z25= z;Sz{sa?neZKEiKa{|*JW9<9GJfxh2+U4WP5*0ioRddp2|Rd+^C+-b?4EepJb1ZeAw zRZnT<-Ib`}>hTQ9Urx9$kXQYhqZqF4Bv_qtxO%1-2BL;)sLS&3(kvUuPlS9#wDVaq>j zA8b$tj}%O<3#`{g{ndDHAQmM2&8U1vxHRujb{O-}k6i5L(&jVVb0n;%Z()X=OAfAW zShi?=Qbu~WzqjbuM zboEZ?c$rc8aZ+!yDXcA&XGN!Cs2Qg;W=VxYMza_fY}rFPlkXuSMUV$xd2wOC8IKY! z4Tn@K2slGYfC-nntg-rja?GphE$-|zq1NQ-IieAzIP6_RJTtTQ`tGUwc-~sFM+ys|U=I`Gf1t{~|OEySOT#PmCOb6oaUU!iD2o~pulu2g7(u;2jd zRkzcNnDOu(BtK^sWn1dD%Jso>Z? z2l&I{z7-CxZC|ElYhf#2bygm*U+NNMae9cYKsN5U5yQG{P9b^jB(KtT6Bz-EJ1%I+RdX2dPRt?hc^nlJWz(KvSS!`^2n5Ow~TPB2`V7 z4n1tREq7;Cui5O;j3*D0@ELsR0E0uT1SYf{$1i(`ri!rjEFJB0r(3feMVtfD_=dH_ z$(#A^Aw$q8qe*rP^5Drs@__swK^+?YLm8O=iyHX77tJ$8j zkdI0@ekt*%2KGmrfyC#Yr;LAU9Y5i!I}g9=Ly+3Y=>aY4>XdQ9yO&zM<3M0YITU>Z0()UqQf6r3`N4X7&3}pw z9$b0is5;L@M`OzMmLAAvHet9r7mMDB=io?aAc2OjylKK-cidFz|KkQ?s!lYPWrM({rPqY=jK`$K3 zuK@Ph&_C^zy~SQ5rm8hqctw8drX|d)^f;cx?x^kKC!})~JuMSLM`!=;90*Gf2p@$h z)eu!bwcUHBcU0`4&(Z!OEz3O3aKDB0<1v=t)|haU&nDITR%I*VrKDyi%O#%P?$a{_ zs!*22`2EPX?UBt+&^JlsiNpHKbD({kObR|z>>SnQoQS`T$A6u-A$dx(t2(l>UwVpiI-6iEG$Y;Fy#r&6cY{q^p=(q(iM2j5Y=;#g&+%M z!9_i|ntgR3bXtrltTZbB_#Z;BwhOZ;StD-&MPpk2zrwDsOB(A|9&8569k zY&}2(pWKo2p~M6j?->_mTzoZnavHWn_R0y-1;f40&R3xA!=z$JKJRnUS|qCUkc(|g zag@{d@#JLFr`x?fsTuMv`I+66$|mjY!rDr!+Mj~)$Hr|+%8Gj%{@lGsIX83mO1dz+ zq&+$PYA&Jv6D>r)^B7vm20OkW~^&>Kn#> zu3*$Y+pA>4`dG^-ta)lGfQTaMQ>wn3<@)Os<4r=t{KtRPX39_R#PtYTQ#>$U$rQM5 z_V*XKdp*VKHhZ#K+c#G;B1ZmM`x<2^Wi3op3G#!}b~)@jf-Ee~eO>hqYv4lKIbc=e z8OX?6TT*lXVf!2Jbcui&7i$~erS?zp9IC*w}4T9U#QbqNwtO>-&enJ=Lk5q-dT-sf}()4v! z+5$V`*)lgKh08z0@dlNB7bZ;2jC(CzHrS_~6NyuO@oaIU8)5pnD4Xj9X%b@`uJ+IS zFS^lA)WtNlmmGnxM|Bl8VAl3{Bl+sei+&hZp`3 zg%NO4koHDG(K3PPPOrSg`8m7xgSy;e_Zzw&g;r8B;`Fq~D*Kkk^A=cM8s%CMD_?0G z&GYbcJdrKuV2eMB13sF{ShGxle~wuH*vOjd^RGXfw-#WHD93|nDK(|&)VJHKJ`xw_ zb|M^K2>I{YLs7I6+Ego|=xAn*4vS|3KJzvxF^eV>?Jq8i`va7kCZAzK@4d;*az7<~ z7fkFkZQRU@gcQL0d*g*DT;B3}XV;XkT3v1i{6%aN$e54i|eQqCx(qc^V^?^2vnG;1*?S2pRz1rw}WrV z)WT1NSQ+XIX2wJ%@kJ6L+1$l(%MM>~ti!j%Q`#fS8QH<K+H|^b5wPQ2;M+qo) zxo)NHd_Uv*H4-uZebs4dEzXO=BxF@@K>|~4Gk8W!im3o1-;T;zly$dbS z&cLz)V46xeo>+nfI&6TZ{Da75A5YzOgR+O|j~7O8#%KgxIw?3L-ZfD(MS*XR;I;GC8bN3&a;mf2yCH;w2z<~g)Ik-P*+ zyqleo5LoxH{ID-0A)WQ5u>AouxDbw;KO^_vcjOf0ysYyz_VZP+YD+%@{W+lYv*sRb z%c4^EwdAGgTD%3!3dE)D6tPI&UXVXRYP-&c)Y7P|PZ2O)t{RmjWTc!p%Ho^kG{{f9 z^D|}3t6zibRM?h$enYmyTH}KQYcNcxeHCe|H%F*dCFjTIpZ=_kaaVK;HBV|t9lQ0T zx2EH-L*wK=95n8f)3d>FlIStZPexfFf{C1rvGkPZ`3kwpHn%ya$oqYP&K+02CRB76 zezRaMG{&(cI_5xG7&C4&32Dk$GSToj>YLLWyBTB8Oej>}rkJse_Ei=!gEY_1SJq zdIS>6g7)vwO6n#QG=b=T^JGLn2BQDX z(-Hj?R)fWjf&k(K&JkyVh?yObAOQZ&6F)&xzs(dR=D&cXfAdTLK*_sUy<{u` zApQ66QYz-<{$&k78~_-Sx3~b}I0ZE^E+@tvTw6p(ky@uOo!X_(_y4@^=~1%Xc19q1 zy_`LLJ$aq&ki2%hz6f78M*zSUyMn-}^dJ^C29Lj%iPD}}AmIPMGNp=wE{om&Z~9sH29da4vWS- zRL%|`*tHkP8&LOsn;-YSn{6bfF8#~yL_)GpfXD1vLXl#(bIoaTVjZUyXa42&`Pb-S zQA}BLt-n}g5hh{-;(+FIjW23wX{qfk_W$-E=vix%H0nhkhAqVmRt;=Dc3^s3%2|Qu z7aT2ZABc{YTz-pU&k)D%JKa?jyHv4Wgd8s@c2T;tV;{9=X7_ zoDeE85+f6-IiLs}t#WZdi}PpKX&Jor7nM=EvaY%ygUpsJ*eIV{XFl33qEDHNBw&x7 z^ov>=YCBanGgIOiWT1O*%xhk5RKnKkdpI%(L4< z5c>OzQ8RWN;lAkDY-6K$+lnYff_J~~GvY4qq&5b0JhD3m3uD0FxA=CT?IA6S* zixl~JarPARJt<>N74Gs)J|8m6Vg86o8xK}(Kne2958zsGZ`Oy!jd{H^mJ$w&r}ubu z7@#_1*M^gC)lJcR(OvvmNsTbFurOLT%j8?T%W1>G%8Gun6FulbDb4(dl3IIlA+)N6 zi{a1-z+^K|y9AHViB7|YCtw<%n>I945SOV4xiTOGZ=-r(+! zAXIjy8ejdaxM;?qVY6%Ci2;-3(C51GAu!8);Y~87aOQVmoyM{Hu|`m+xi7g(y<0Ey0 zAW($q&@L%K$g^EN4m;5ldL|o^ucZ^hYYo9RwMUB^(SZqKsWFb+A$dz>{_k#o!LP|( zNwL`y+n-ik zl+cEvGjE0>m~xcMm|rhzSVxcqD~Fb|DtqaT+KI^HG0`P#B`hXw9j$F`?rQyp@?(>G zy#%zmcZ8YIN*5N3r&iDkVzDqXKov6azlOp1G+DC)J=PD38C%YQsEsD`d~L{r>=B9w z6;{Q2`|ght#kBWu(5m(39N0aIcsByIDX(L4EpUJbF9vl3_J&GybT}J*U7fUg*_-2F z$Sd9R#h>~Wc}i!|)FqU#`T1Ol5Q`Uw(nlc%A!lY&zF#mipi8LwERJia?5P)#{&^Q> zlZ%r=%_!LAV34Ml^@WCv@`IN#H&ni-!);=cw1PJTR27*DujDko+N~*R;=e9rS*23* z72lJ1Cz4XU%FkK}$1O1=%^Mx*!NxYg`G7?GtaY;>7@p8rV(4DuB4vg9YDs8zHc?=y zeIbAYtilh&>1is)G=Mx*R9<4HQlizOydAe=Ww`C^(YoI;E+E=X<%>*^)T1G0F*sIN z)IWJdx)_88V}hH=6gw}>wVTf@I=)m&Q_vZ)Ncb?U5vO0ro1&v^tb*(dF;g@$X{bT9 z2TfOaM+;uBWHdJRf-iFD%k68 z#JDedXqamQFCyp$V!s9mSve)(D)U@qg!PmV&Pd65TZ99R_#KgJwAT_F(2QU>brd>6 zv1*^D|M}o~yru1Ct1ln?E_bNw1ZP(8ru z=lvIz>x;^baYw2?A>7*R?sGcsLG+{pFN8(l)G2iQ`rc?v3n>R4_JecRg8C9REsYEo z#CQ|be=gfB4b(ND{>Un?N!!c2qkKcX%vRH>%!d2Itqjy1IQlsw{f8_7U&e)wY)@Jn ztFWagYEFQ~?Pss_)ONeb@Th${)#wXQB;|=!ftwlbOjq}kSDiUF&!?7Gl{DtI;5KUvz!01uK5vo*wO$dxxjEFn0>H zuP5PKr9X{kVXS-`9S~H*a*i|-$u1z^3Z9&l^YKRoy9vS&?3oLE(?>CqD%%U4MzSh3Z%wy?YJ=EQoUbwmja4TASyFUQ*^*9~oWxT?WMZD_QX zJy6xpHtXS<&Tgz$>J+kOwV+yzb&N)C07=Uq z(6sq|&?R;ntbE%l1vjPDo}uPL5$ z_4M|%H#cZ=h9C4Wq|G<*x#KJ#>slnAl(>#6_s_es;v8|#7RO?qUhG+_Qx7Es-6RIU zic5Jv(|trlZwLA58ZsYzyd)+8bFu6F8#$`l1%e^ z{eTKjP$K)j=>EhfEBdS})nad%6(FWD@(}9PQ?z646&O%6DXLy5WXwbxDm3k@1*$gl^*+UfiTnQk?zdRSsi4( zL43{b0_P*u-5Lfhh%}wNSf$s8NO9!{1LJ%J*X{Jb^~Jcl2i&U=i@13r$wZxZp_^J- z>OtxN+tLQJ>w;Bu)5_Ga8po8lUzPmwk%+5nzS7v5jd{A-z0&7Yn5a+N9~Du(Q|&^k zyE~o?-cFplV{Nb|6K89h@zagwUm}@-?Yt8<}pb#TVap5AyInY4+qPld(X*1R{@8+xPEJ47UYdMX>@ zarHUm!uKTg4LL>mPxx!=L+sG5IGHRwc5xj~x0--xbCy=sTJ!Lr#Nd=em*Q5%8tyqf z>M7{&{7Pd>VSu>ONXojc{G3#{hrr@JgeF{kMrYlS@|G)qFX=9-7N+S+B_9=Ze8(X! zek8T(b$)NS4|R7R1-KN6X+Ql1U~bcdpN+I5_J;emkz9eR_s=KW0%!-W0wv6eW_eP2 zM`TSs7kv{6sIq>N(I1Qwq0u)GGd>dzNPZ7luzzSPf{b9gP}gAtJ)1url$+g_So)!l zlU1rN@{>+xp&(6Z71g*DI=MxDX(eKi<<)bkc;5J4MPTjOr9DKI2V|Dj^MS+U>lR{Rg+H#>3ud)U3q0{jMO0QBj2zBKA3*$=~8zt~6&i+ok zr@4psqi+&ZxObsWq>J|^{RXfzGc50A>vk!;V@xE^V%g3f6FXd3=1N7Sb8`V}TT@e8 z^1umuvqg3uD&3NGU6@$|0zaUH3P3j4jZ94@?nQ62TN-6{azde6t z24p$)piy_B2RmCp$2^yBq2Kl@$-T$90H!xwMuDt%hTPjAJ&Za)JLRO6_bw=O9<3)L zOZgF8M)fP)7S}(M&Pa-;;07wFg@Q6IJY;w!4)##gx<5bm^P$bB_v6Oj6Jkv)dOoM8 z3VO{42wv)9Cwx-gV4kHM-~BiiKr!^ajZ1FIboAVm|1oSqbT4y^^f~DUZ7EHEsf`q_ zIaH?P?(mbwJ#kZWdi|#gcUl2K@(r-da;gCDYKgn)YP+0tWcsTEZWmqk`YM)n!`d$D zpZa)Iuh6+^dHIoQoe^U#FTKr)7auvy)(EUD7Cs))yss!a?6lrQJkTV6)K%a`Uc)SD z_$=o%WB0S|w=Z(CKRosf_4t!aTNT1@C5=SlM5Q-W$h<%&+x@TZyQo1rV9=5<{~-9) zc-C>1)Pp?gWK@QT-sDRknMd%-%%dMc*}>7c#KXVCxoX*TeNa++NVtCV_J({a%RwPX(TPCtB;qAXh| zo*|!++!MCU^(8WP<)8ufvG7J`D;599Foidg!g{j%gUi>CGXw|G*&`2v!zOqxxhkVtHrzuto zSC@0mA1Y?U8LUsc7^7t*X$|1s&DBc5nJ(W?Lj1{vLp%0<(!NiqZqDp z@9s9PP`qhO%amyrHEV{47Vi!${d8hpMA&douGI#?r^Ko*9g^ybn`;!ubqlkOp3_zC zFo!%UZ8qfEYlYuXQ-C-xe!Y4%(U8@GBj#zr)7z0I%&-Wp(^!?IjVGI!qc>mcZ@kOY zYf`dl=I?n2wP<#Ro86n24}E1(z=lfE-0q_hx4fF{<00*yZXD;(IN>`gzfNMde06y{S8YA_s@HOha7L-nbgz6&zPp3cs>!f z-C{)+`&7-34qZaH;T9SCv?AC91q70Vz$r@WB`po^FpX;p^ruKA$z(yP82(LjgQ4IkL_zCLkK-GPx;Bi`@up4sr{TK>#x!?>kt|7_r=^I)x1S07I3B&3CX{j$jAj{IAm_dg`vpYjOr9C+V7GD*s7tH(+)}ZIYIbCv z=i*y`Zf$3u=MAVQH_`mfTQ=_I&T#6>S!|Z|S9_txwaG7Mi6IY|^dvHh2NFJ{ai!4i`FOtt zk5^gDw2M7P1gH6*poaZO@bWwTLt1&rJjS4JOFa2B?vDIVSnH?m$O;A+gvmWCQ_WFG zo4uf0k|l92jk`pHs)1#oTUF`y=dEDFg+?dt>SQtg7Imko$~BNAQr{1}1j*{jV8tQk$cT(Q)n>wEVoNd*#{ceo~RT{vE=f1z>sWXR6Hlya459oVX%lB;# z#Hcr=9 zkg$4Nm-2=nb4ppEh#G8UXx(&vv`F>X-OX!^r`S^;-Er!O8mMXNIAmj{LhqR?qYXbk zt zGmGp>e7Klb;X$e}&rbfNpMBG1vDbVyCz(zE1 z3i85Rz20L|CJ1K)rF^4&sQL=kX1k_G=4IvVD_2wx%IlwE$7WO&$3Uy8lX4Z$z6SK% z^+u(bdNarJ+9gO2c8_U{dG9IDUgx$elYW=6w+IX2tZoGfBY zs5P?+;6tZqma|M+KM^F{NQ#%9W9w4uv_V9T=Na2L+=RVU4_9eI4!~jr>Zh=>*M-S#?8&C)MXx>vI#zViswSSq!!vlJXr#x z%p&CSShn<+PmHK8^#z12_fhclAD}Ao9jS(jf`hDt-mN2aY6cE%>9fWj&kFL`HiBgd zWy)}<6Zi?>gDNXGBpA4IkBx4#@m723?veSZe&ab3rh&o?5)7S3J1Hwow$!DintfP| zl?ah%$lj=!sLb)tV0ez}7QOldKJy`sn?O=Ycf*~4cEU{i^5cuRbs)K- z*5B0~Q#1pr5qqB=r?0Xsy?hK^^5cu@NA@H$x zQ4BvsCfk*tzs3cBaP@9m?6VyWDtcWb0Onh}C`cN7HtA9#_f(i?%%>rntY*bPnF^A4 zoh5aUhiPNuJ&zF}93rnc&gFdvx#d-zrM{v`)3`UtbZWl!;3eoge_do38oh)*Ot_tv zv)*c!XMc)vKZJ@o;yKYYO%J9{7S_FifSsc<%5@$Kcx!SH||P z5?->*cZ*Wd4YiaAy`8t((`P>Rml;B29t6$4%lbLCr_xGrU^laW5-|ql`tlLQ@%q(t zyBMmt`5X0>bt~@YxlPm$rs@a`eO`gpag&CJC(wL@ko;Tup5Dlc>p~hc<~~yMqF=9d zL)>Zb5&py@O=)tsQr4j9j6VriT@X0b_rmSA3H|Cmbt-m?oV%Y{PPi{suWJ6$rb+sp zA-(Uy>*L2{CCiE0Q+n~uD$W_hY|2o)9u?|Qf4~i=$lxy(IJ);6mPM~xq}0VaS zKO}vT5~jEcV6Ht`z;Y-#-QU@$GH-=++yc; zZFe$6XU{9JVkg&Cq0rqiou%M|G9$yg+J21h`gNw>!nTLQgyp;Qu>p3)w3hKu&Un;r z3+88Do>P+RaBHztF7&Yu8MCwy!_%futp1AZzHEGXTt~9{?)nqK99opUEl;U-`M+>7 zw?25B_cYR!-Hf!1;J`)yMt#>wPX8CsiS?d^X0YqMc zQA)(Nx*+c|KJ370@TpQ%Pe}zX;|)+jhy(bB=j6l_4_7{|*&n*UfWTjX(mOv>+NgB$ zk(Z9)YM*d{YENIP4G#PQ;`COkRivabfYcJ*w~vhqZ>B7wZZ14&NqRnhQjt>;TJvq| z(Y;J1rPHeAGhu~Pp5;p$&R^uxFIRu^#}uSjvp19bh!huBY9c+)5o-I9)X08RU9MX> zo74IRS<9*HnZ(yS>P~0eo!GUygZ3xQd*2+G+XLYJOZRQ#@24+p_+sV?7=|x=H#Ph4 z+&-!|C)BG4Tbk>7@H7HCXH3%Kjp7QsHJyPvU;5Q@`%LpX1l+y5YokA*BIIN5uXU+# zFAp`WQ?>2pV2t1i#SDg!CiL1`j$D*fR1I@|IhFr&o&mr3d6y3L?Y=O=4NBL*zx*g~ z&yJUH_})di13tJRP&hJ~v8Iu+NC+JI-kMdz<=tH3ttN0^sZ`W>>f40`{_j#cUkmwu zy(iv!3wNYS3USpZ3(#GHDF0Rd{}knK_ur$0suNX0Db@fKn|b;(gBEW)U6w$f%N}sx*LrKG6INiM&OMBfNTKLe>DJr z0kZ#}E==-d<_A;)#sAH^a}zNMl>b+g-RPe&E&!7MWc|9CLo{WF+!aLh4gmOHFNvtQ zxM(5QztQ(@ytFBA7hBcyI)!4WFnJj@&)Y$)xSxpDjGct(`$0pI zr#cif@fZd)&Jtv+yYQfbjL&};g)NsrGspe~WRkZtG; z4^7U19wkE^QO@DZ*7=V2i11NvPoEy1heF2!D~%pbS18*Jw(KV^*)7evS1Y7LpXGy| z`LUi+-VX1jRT&NbnAL8jRxe!i%2hcN%Z0eF31BsrZ+7Cc=R65NE^870ynKavzmGd} zH=0(jDR3Fr@hWou_88eIF^5tM-<^-Ih_6&~t6w`LBcUa)k<+nRA@RDM`f}}QD=9mN zDjDG5FJP;)H+9|5chAAxTgfE9X*u63aNsWPY5G#iJ+rZQUy)aYfw}N5PH9i_%_M7h zN##|D}kt^n4w&8y|hErQ>j^eg2G29iQd?hn-W%uJsZc}4G) zehwyUF zXwIBfh6X4_&igJ;pfjrT0qiVn6PLC?yZf{Ek5|z+G9TL>y+VCC2!2P;N~%yjrmL2I z(f#Kwhk(;)gGTElcR)SqIE>vDr?$5AOG#~37H;spb%Zhl$)u+T;RYvgaL08EJTO2{M&P%yrx31a-V?2r}0a3uJmx>!k5={ZWZHITgxjle>yf>Q0! z;Gm+}(7c#Su~yy!cOl+MxZ!5&b7|fEMqyDk3|b5rrVyrj(xXSqTTuFSeArE)6bLJ5 zOR^HaLplTCD`*+W_h}))OfxnhaX+;TVhtPw+PAaYn2PU*ZUiTq6ix_c)xGxd}1 zy9HT`u0ci3fH&zQDm~)2%&7o$LY<1I82Ve>6CZwE6|EJ%4$_u*Lj6lzdorwCkJ=}E z>s4UqfPPxX!fgF%Q;3L!h-qWX=O$|nJa8w~INBaSvOP690rRHgmet3#W zy|!xw^!GQ2Tk?ao?$Lhulb>e4`KrBrCc_#w@vH(beE z-%Tc}^2aX=?vrcsE{CJTvGm*??YWtRV$BK*<7xa!0n>0zRIavv6vWGw>i(+_q<#A` z%K-eRH57mX2gSAelr{|?IWkOJ^sQf^Y@BS7C4uVQqmN`#Sm*N%r(t&@`dp~H`Bhju zWeF9}5OD{JaXm=niDg0ABj1-jfmNRx$zNA6QgHh;9`z|WHL2ZBtrGaLN11F8Bi_{E zZv5*ir)?|Z@BonpNqp^DGPID+x8VQ+aU|Lrpn5ajK5P0M>q_M`p)->VUA7FEd&iU% zCisE)@ZL4YfGKFDxq^=kJ&>%MWdRtbn$R z?Aj^nS>^T_L|ghZ%-K8!iVMcZ&JuG+_8VdlkZRzq7UsVI^$U}3a(f3JVEW?YRDf5P zqlp8+Q=D$qlusxL1NJCy9o;e=Gv6{r#XO#LNC!dqNnT5D0A%8Npmk$atPa9 z)-eRL*o)6@*|cz5vFP3YXk}@2roVtd4KN_sKE+hB@mo`lIMpD7P^AE*?rMv;os^u5 z7fM#MZX{EkEs}S}L>J^y+zYOdzL@L#2(L# zsE{N8*lRTj9NV_K|3puJ;gB0Oj{V{qbQgpl=SgyUcbN%#-Vdx*Az6F%f_FYQ?y;PO zZPw}Lm9xRL2V$~NJ8*CB2fWdr%IhA(Ae012397}~nXUzYzOsg>~p1)mrze_2uB5?N$`E^vEC;%c#11rss#mjB5*@@l*u+qI&$`PV&~dPIU7r^9hfA zdvmm&pejgbPEC5D$XnN*ON2Oo)MDgUaoww8>*6Ss-SjCiGjc)G?lAhxWtc<)#ptHB zjJMVtBuCi1{a7flWhee)OxDK0o+){0`iI->6^Bc&iHl9aPBkd`!1Zduzkr6lLe-Og z-(xPSaF5!0%reM0c>zCq~7Rw<`%S6~LJdLPQ+`u;(09i0mS~ zugg6gxe_7mqKI&qFToreMgHiZIC|30moKg>Zt7~()T|?+|5gZnfcHS3ae26~1YScv zAwbu{WQy`faj4}oyD4fNp62^GLllx1hPt6AJ_&J?Nx8Et`FeTA@eVY;0rHaAtm}nk z?8GAe;LiO=Tt{~JJ{s)(RV)~N2wj8Usi|~^H-Go1te+vJ^8u>#cPY?!Ls&ry;R&=} z@Q!tyw!6^NhUF?Xg2jY8r(tt*>qONY;1f2 zEE>wu6;H?IO{<|8H0-#Rto5YaJH6rvS_SS#`B83(>zusm9!}xo@)Q@P)dcwcW}3vk z6ngIQx?zeZWgkNS7Mv3-L8Nk~D=v@NOkGzBHOqRU{ym+*8RCDiv5;7?a-&lITThKB>o*+J_eoJ;9wiEIf5H|Je zb#t<-zG`SgTbNp1D+1K*01O7@}fo?8n(;36nsa8*d!?wyDQ@dwQ4oymwy4HPo03UPB6yD zdL!F29?8GxqJ2kHy$)a1hIuEEGba(=xpofM6?eh5voJTmAf*05X-6FC=Ta=x>Zili zs2DYL11~R5tDtUGA18%LHlzoGoa>Z_*$6y|gJFTaWD0q@0fbLRTSEm0lCpgbYLm$f z+*GLd216ymdp~;jWY3=w#tXumhNb&GlAW`r$<^8Lk4XfG%I7qOXzlla{Ts!muGX`m zTWQn1-(&Wq2IHyp%@&2-IjFxg!ZsjG)ZJ@j>#~Ngf-XgzZKS65Hni<6Ux!I(%cOxE zg~CLo^S?yMi7JM=jjtQRt;r47(|#D{y=_8O#AR<5NZ0ovsUgp>8c7+x+3y>qr};zO z&F*4X6%dPmBK9^$)I=O%r<_uDK}1#$dnt&yTHI1_`p`{t0ri9ZQ}(HB3?ek{Sh~>` z)Fm?`x!}$1*A&&PBN(Cver}9bTJBZ)NxUvQfbK8fW)mVr?d?`ouZb)6BBwT-cu?>s zXR%TG6d;8NU06S~*C=(eaRxHjKX6JTV>@OsecXhgv>md+n={G4n!@0ITu4KiI&MEg zWRE|e$$0fXV$O?=FMZs5OAWk(r(lJ4DJ)$UfHsQw>jL8UuYx|#Z}wYg+^+l+WAg2# zsuY@vySbjfo6^Q%Y7UK~x@?a`F)Fu-;Z~WNLRKVBg6>VG9Vj^14}fK?2gp5d1u4*; z_4s}9xd@iX`6B*VxR1u~&XKAgM@RZ;oP5zyI6n~DUDoZj`5o+V|sRH!Y3-?9)8`P~`D4#v+++XZuNOikm30a&n6pN=wyGC%!=- z>FD+thB4T;vh7w{P!MTP+I)6Cxrmy`d;QuaE`8NiPd*HAyXWa`m*RgM+FzPpchKl4 zTehbd!Vr^tIzLhoM_kQu)UBgH4B*xI!M=G`;#-mQ5f@wQTyy%BCr6{)mnFp9oa?dU zzIzz-s<{Bq&CAWvCOmi%<-5Ti)_-@N0-)~xImT*gpQ^iJu-s;TGaVMhR;zPL&4MPB zLb$`vIE$W>?x~%d6*f5`s$JNMn+ha}pEBFQQih`Jk6;FoIdiQ9MF1pWws^+*i0AEv zdLANMg#_hHqBt`D%v;ljfQfk3N;{(CamI{~4Hg+{a4FL!ZHqzGV;Xp`dU?*Uz-Zk? z?^`~3RTeCC93S#@el1_X$S7k=2ZF%4xiO!)U%lYdt+Z{El9eipEE}$VVGz`u#nWi0 zLzm&jozipf`3O-?=K}&?Ldby`+~)SAP~U!|YXE4CeeLPRnkJO+7ciwIxm{(^DqJPK z>k~SsnXJgqZW)iFl@yz&FfJ~ja})&l2y2w+&hAMQ^c+eHGi2WVah%Fe;58>P4fQ0+ zrye3so&_Vf6LO32pA{Du!Uyt1+CTf;LNQpnNKe;p;w>L1-wV>2xY?7RVq>>VxX`!j zeD*V0-t6&CDUIa=NtV@#&{rW&xxv@IFx{sR;f;=?j@KvyjgSyzV1($d1JBUzAQN(y z^P#-Ata4^g0Nyml_ss3CxfGSF=F2Wds}7$XA=+ri<@q zlewlJTbXz=)tm2JQkuq<8UHV2ME*vE$kCk@(a8){VJ#D zPe(M~8os(?=O$)uo#Ju^iol>K6x-mEqvkik6#+ipZ!9dOTfTa| z`*4erqJQnK%34BenY$1>e2jtStCH0Snv)zOVuG@Y>hC8eBZfqVXKlOSr=cIGPepfk zZ)-`wXvWgTK%QR&-B%Mj+DwaHiccp`belP+W$uaE2Tdtid50p#p80OK&rJKJM5U@_ z8%>?cWh&@6Z&1J&zkT|`gwEJ1vLu7l$UbjLEM3VCs>IhMb4PbFtBg}fQIptZvL1t0 z6;NKo_9cerq3ZSV(oL5`uS|PR{NbBmX1gs`_Ppgl7D?Ja*83v^K3%|bD;m1|h(@{{Sh9&YFR2ssBz z`&7UxX+ukRp8@ zh2Y$jfGYDo*Fq|oJKgND091v)|J{e9NbEyCr4L{yFDSG}ee9JMTBLAH+fI^@+`0YP zvB`N_I@&xyEG(n%;$F)h$%8NFC``_nAl_{{V3ahcn`MrpUXH~Wug;3(N_QtBpb05+ zANPG7930WxIcysX@C$>+wq$aH;;yLF$Du~GWjnM!BNWQHvXKUHU!%=uodOKUWpjvX zA*BQ|&IJyY)z|?Y?M2J1#nH4X8X7XamY{oWuIq7by-Igvex1yVO`hLHHH8>VA`(J+ zdM3Y(HYMwK-KYH^9JuH2#1Rb7J3M+MP@;1Lk}I0Nu>Phhi+xuf0Tw?<2;$T|4jvhi z8rvQ2S+Att}NG!Im;8Dm>jPXe&ST-u1s&WiT|1* zO-tFk%%Ju%nIA)4^Kyx^M)5_#iJ<3X z@!Q2YQ-1-fr*i8TiwpP{Y*jNtklur{_}UTxO*@wLX5qt{n)3NU7wHl&(ocC3nmlRg zPm5{w^RhSkSXWC}SCyPQ(ucIR{UMev@I04XA&b4OVTAQ4kuZCxcNLcYhp+wJ7_d`O z1&Ybi=7oywoVpvz3inR?HgmxCn?uCAq)4Dz5w}HI~=@;~1-olFruhaet+z{q+~{ zMx^+Fw9V?xp8fmxrvv39u^RGbzgK0+67-%q=l6zsbDGf(w{3^u7SR1uWv~n*=q+T?dEyO z0=PIA2#Oc0Oar!aRN1ZWl>w}#>x^kvt84ZRKr{+Nc*h^a<1{~kFRnac^q_h%_DCcf z5jYWJMZRJO1&yc>j>;N;(79$H?>}8(t1k`8 zEQOkebJK3+d3f-G3>QLO?yMzyQl2a!I{e{_f(N%M0Isq^lWE<180JUly^C%%y<+0J zDax=uMzUO{B<)MuUB}em%S5RI3iK9@cli2+zJ#t;O7o+1PdR!rzVocY#mCKc^E-=m z5tIayge51)kNkbZvc`3!@I$Er=}X=^?b1tJ?*h(TVN*Jag9Q*Uh)|3UcFL{Ms&~Pg zsTa7C)X^QMSi0*6yrZmD6l+Nq%au2o;PFQLfs@_p0)Abk!$=ofOWMCgn4&Esw!#SE zlL>Sje*tVq9gkA1CGMkCGyY+lLZ%4|3*DUs&V2@huOa8AC4m73QH{sV)2jiW(Vw%9 zG@@*DZ)prD>60Iy7EfupJ~mdwthpiX&?tr&Z>SPt@%ecet&ZuZYnCz= z?G=l=;U4AN4Q4%xhmzFf;>grp$jn`hvEOAhJvs9+{k}r&5oXMsX){4Y%6c~dOg*~f2w4XG)AOosDzXtcYT<4aR+y9a&~N*DF_ z!6vhy*c0~NkCGg3nl^Gaj5KJ3c-nMXm>1 zSyStuns*5c4NMOs?6P{q}icc&2E&2L(oY!L(y!KCN0Uu&j=o6A+@p1|yT(9iCXcT_rMcQ9L z97mNQsLFgjS-j6a^4Y*;HIO74q!^4?%xKhN^J9T{Pi{1l!Y4CXi9Xm9$qxJH$Caa^ zc|PU8IrOOw2{slQws$r^A|F*2yY~CIRm?%gPkXUxaHw?nnwxk_pkN0RXOWe7@O*B$ zJ<8^e21Rfub?!TBkH3aLf-^jGkvm;OrfAJyz>gALC(B;EQfbu#zAIRl zz&b8T=ji`2Ox%QGDLB_Pku^io_B81q_>a1ZYvvGoeLLqrjOiB>ZGfrm5bbP)F`R8reJzo{SD+f8AcnmLdxi<_I+v{HU+oo#GA zq#NMG_YKGSu0-mh{{D~VmZV#MXa6qW^Jo~85xAF`mEnmjd>u zaC!6t0SzRcjn4Ep&AyjP?v7!9KUQi!v~KzliJOVR%>Zv8x`Frxk{d{GxOD^B4dgda Z+(3B))eY1)(A+?K16>PlhQ9IX{{XnPY4!jB diff --git a/demo/images/IMG_5910.jpg b/demo/images/IMG_5910.jpg index 75504018af104e6732b19aac449b4eba0ddb2406..852d0a6899d951e6ea093412f0cf3cd469636998 100644 GIT binary patch delta 8304 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 SFGG15s>@t!=B%V1z4Jdl$&97| diff --git a/frontend/app/gallery/lightbox/lightbox.gallery.component.css b/frontend/app/gallery/lightbox/lightbox.gallery.component.css index a6460162..da3ab018 100644 --- a/frontend/app/gallery/lightbox/lightbox.gallery.component.css +++ b/frontend/app/gallery/lightbox/lightbox.gallery.component.css @@ -68,7 +68,7 @@ app-gallery-lightbox-photo { opacity: 0; } -#swipeable-container{ +#swipeable-container { height: 100%; } @@ -101,15 +101,25 @@ app-gallery-lightbox-photo { .controls-top { top: 0; - } +.controls-caption { + opacity: 0.5; + top: 0; + position: absolute; + height: initial; + text-align: left; + width: 75%; + padding: 5px 13px; + font-size: 1.5rem; +} .controls-playback { padding-right: 15px; bottom: 0; position: absolute; } + .controls-video { padding-right: 15px; bottom: 0; @@ -117,13 +127,13 @@ app-gallery-lightbox-photo { } .controls-video .oi, -.controls-video input{ +.controls-video input { color: white; cursor: pointer; } -.controls-big-play span{ +.controls-big-play span { font-size: 20vh; position: absolute; top: 50%; @@ -131,12 +141,12 @@ app-gallery-lightbox-photo { transform: translate(-50%, -50%); } -.controls-video input[type=range]{ +.controls-video input[type=range] { padding: 0; margin-top: 6px; } -.controls-video .oi{ +.controls-video .oi { text-align: center; max-width: 45px; margin-left: 10px; diff --git a/frontend/app/gallery/lightbox/lightbox.gallery.component.html b/frontend/app/gallery/lightbox/lightbox.gallery.component.html index f684b3d1..1e4eb6e0 100644 --- a/frontend/app/gallery/lightbox/lightbox.gallery.component.html +++ b/frontend/app/gallery/lightbox/lightbox.gallery.component.html @@ -17,7 +17,7 @@ #controls [style.width.px]="getPhotoFrameWidth()" [ngClass]="!controllersDimmed ? (activePhoto && activePhoto.gridPhoto.isVideo() ? 'dim-controls-video' :'dim-controls'): ''"> - +
{{Title}}
this.activePhoto.gridPhoto.media).metadata.caption; + } } diff --git a/test/backend/unit/model/sql/SearchManager.ts b/test/backend/unit/model/sql/SearchManager.ts index 2e557396..cefccda6 100644 --- a/test/backend/unit/model/sql/SearchManager.ts +++ b/test/backend/unit/model/sql/SearchManager.ts @@ -94,6 +94,7 @@ describe('SearchManager', () => { new AutoCompleteItem('death star', SearchTypes.keyword), new AutoCompleteItem('Padmé Amidala', SearchTypes.keyword), new AutoCompleteItem('Natalie Portman', SearchTypes.keyword), + new AutoCompleteItem('Han Solo\'s dice', SearchTypes.photo), new AutoCompleteItem('Kamino', SearchTypes.position), new AutoCompleteItem('Tatooine', SearchTypes.position), new AutoCompleteItem('wars dir', SearchTypes.directory), @@ -154,6 +155,24 @@ describe('SearchManager', () => { metaFile: [], resultOverflow: false })); + + expect(Utils.clone(await sm.search('han', SearchTypes.photo))).to.deep.equal(Utils.clone({ + searchText: 'han', + searchType: SearchTypes.photo, + directories: [], + media: [p], + metaFile: [], + resultOverflow: false + })); + + expect(Utils.clone(await sm.search('han', SearchTypes.keyword))).to.deep.equal(Utils.clone({ + searchText: 'han', + searchType: SearchTypes.keyword, + directories: [], + media: [], + metaFile: [], + resultOverflow: false + })); }); @@ -199,6 +218,14 @@ describe('SearchManager', () => { metaFile: [], resultOverflow: false })); + + expect(Utils.clone(await sm.instantSearch('han'))).to.deep.equal(Utils.clone({ + searchText: 'han', + directories: [], + media: [p], + metaFile: [], + resultOverflow: false + })); }); diff --git a/test/backend/unit/model/sql/TestHelper.ts b/test/backend/unit/model/sql/TestHelper.ts index 72f317a5..f1024279 100644 --- a/test/backend/unit/model/sql/TestHelper.ts +++ b/test/backend/unit/model/sql/TestHelper.ts @@ -93,6 +93,7 @@ export class TestHelper { public static getPhotoEntry1(dir: DirectoryEntity) { const p = TestHelper.getPhotoEntry(dir); + p.metadata.caption = 'Han Solo\'s dice'; p.metadata.keywords = ['Boba Fett', 'star wars', 'Anakin', 'death star']; p.metadata.positionData.city = 'Mos Eisley'; p.metadata.positionData.country = 'Tatooine';