From b174cea07cb72e697e702026812d4e29974da2c7 Mon Sep 17 00:00:00 2001 From: Denys Vuika Date: Mon, 23 Oct 2017 21:57:00 +0100 Subject: [PATCH] [ADF-1750] content projection for viewer menus (#2524) * content projection for viewer menus * unit tests * remove old file --- docs/docassets/images/viewer-more-actions.png | Bin 0 -> 33175 bytes docs/docassets/images/viewer-open-with.png | Bin 0 -> 32639 bytes docs/viewer.component.md | 56 +++++++++++++- ng2-components/ng2-alfresco-viewer/index.ts | 6 +- .../viewer-more-actions.component.ts | 28 +++++++ .../components/viewer-open-with.component.ts | 28 +++++++ .../src/components/viewer.component.html | 32 ++------ .../src/components/viewer.component.spec.ts | 70 +++++++++++++++++- .../src/components/viewer.component.ts | 28 +++---- 9 files changed, 204 insertions(+), 44 deletions(-) create mode 100644 docs/docassets/images/viewer-more-actions.png create mode 100644 docs/docassets/images/viewer-open-with.png create mode 100644 ng2-components/ng2-alfresco-viewer/src/components/viewer-more-actions.component.ts create mode 100644 ng2-components/ng2-alfresco-viewer/src/components/viewer-open-with.component.ts diff --git a/docs/docassets/images/viewer-more-actions.png b/docs/docassets/images/viewer-more-actions.png new file mode 100644 index 0000000000000000000000000000000000000000..3ad239e6168083f86dfa2f0a6a0dfae5f26a6c52 GIT binary patch literal 33175 zcmeFYWmHu`+doVx2az}+AV_&A5$W!bl|F5#9Yl~g zj)gz@S2+U^5)OA&LA!<=xI45g^i4gk04`3Yo=D~S6Py>u+GE{M`%}n$%C7re&r>fq zxSjV~j^|D9pTqS>Swy`-RE8&2OeBkVc4RCgA#N1S1&{v)K3RZds)}_UL4SCtItz0 zogeLA6Z^YZn5@4Gj-w^56ThRA*gO~K?0<}s6f4AX&!{)}iZ{X{f z6aD9?arEdB(d+MszMrUPDM$reG&6AWAQ-R)TR*F3a;M&3m;7uPw8w8(b-R=Z{}k>` z9P|t$Kn>4;Ov0^XnBmMQ%((RzvGl-7PZxCMo6z5qg5`@(=?r8%7927t89f9);+l7T zHo++`1W8d1ID$U;kp|%~6CQh%k1=>gW4(vv0 zF~q#E)r*}Yw*P~ww%mDDLFgq_F^8A(Lm$fVNig*%G#!hrBM5qo@%8w}k!#14e!5!W zn;v$vDX)Y#WOh@;=6{TlBu+&!zZ-9eMqZq)wRckvKS4I#{VML-R^RxBib-?`?c-;L zCFC1;Y;iq_r_}-km^G&p=bxkE1=^n)e0}E9ZlcEg2TX4c?yzR*Mf4WvLY)5Q)mo)O z+#7I3|4rj^@@Y=5hP^TIR_3ceQd-F8UGsk#E=~ixiJgCFi`^vlleJ(W2H$n*8IbD)qB2E6V&m0+Ado8a03~=0xjGwaGWta#}>!8zNd}?lX+8( z9q#0O(c!1{GOik0`(Jay5DwL{&Ri0NOgQ6u#hPXB?w4xqUv_=5ZIBm8;rx9-n21>I z&pC!XzM`lPKRy0|B?k)qVOBwGfiT-HQ-Mba7bL*@2_e6o(*{Kg@q0UBy-H&{%`fBy zKX@cTaS&P-*-S9JL8uzpSupCK5F}E4@fXoP%X=AD zU)aH$itWEn6UR8hz5HVE21i-!RF2t!XZ!P2X4a?YTtw0$)xUUZ;Iu>Hzr}5O)u8hR z=m=S75pB}ckRT>Pezrend^PaoxD!$#{O$?1A!;S0BZ3Es6owk_9C zm*tWh+D}7U^z;DwF3Cgb3!P?ke!s+EHL5`t-6e8XK8Yh}9 z`Yc8!x-6zqoCN0u&hr<$I0!gcIR4KrpBX>9ej)QlOVy=}K|tkoO7wg$*oe-R&K1WM zuOZ4KZcc;fIMn4c>(wf?{$~Dh?Uw15 zRbnl|8IR-&f16d7v!BJLcp$&{`x6UuGCOTl{CiD_;_S3M-aJpGY?^RI18UniTx#Vv z1a^W zk9Qx__0RCP37)?C@Z9-j9X|TYq*vVpYp=!$c$xBEHoeS$SUQ2hQ=R5t99ku1D{z_+y0yaLj2DWjww3U}D9Y5D1i%HJi zn)@!g{+j>%9&vBB^C?BY33}$6maHAD-KzacFs&3V{szv5 zwR$4E>(Tk2yz`zJ*I^;+*sj>l(jMFTt3S@BmVYnzok$(c?N2WoZ+4#*ow)t6+#Nh! z*t?zU8KD~d*fwmgtEpQF1R92yl^5zw@-5>%={@AW4zAW`%10VL5-}V>5wRHY`ZJ;5 z`V&@U?9cE0CXp8Pw<F2Ji)cWab0y? z)IHK+#i7@j2PC=#i;TuMu}>7~C^pGKSOi!SA+{k+*w^__rL_5L&68JZI!wRkr^se7 z-*!At!^dZi7*{mnB~F&@&t)xL)uKHOF5D9w!VOXf0Li^#~d1A9ciw{0w`B>qv{P(d>+3 zEO8Z0b6Izpd+ALZt~;ZasajFLv?VLZuZ;H=ClvMIoxN_IC1v4SA+@_ZET0|B5ZyLaW8r2HShI^x0zQ%wS`Rs>NMJK-1cl%0VgX z>`5Jt^>wp$#qEAXCXr*DNt`iv2)Dhn(?RI$_*EE`Ub)H93Gd*pN~}KL(0XivS$RlV z`P$*Uv`Dm=Vx0Fnf3MA{{a)aGxb$FzhN$IVK^r-{!?kjWwgtWyZUt)<(B)*ZJTW$s zToT%%_uK0er{l*v+yqzzGm!y==B5tTJXf>zi)SqOY|4a_9Ie|(Yr;Q5vSM7Ru2Vz? zTk;iTc`cKskCskiN7;v^_(q-BPIfQteK%yjU)7}Z9N4yQeVz?4#M7pm(6wt+a-RNs z^qVF^HKLBQc3j)Bb;f4!RKxJP>kNCcr7WXy*?VP9dSX!Wdxv%HVnmDQ`A`ivk#mEy z?i{rKeBEpR))zU91dAA#SHV^3Ozqru?I6Bw(uu>7@ZjX2`G)+e&o4hUzdYTT|JCl> z%{<2hUUnCq(~dh4MOnS!+5|;irxvUhf=$|+_otDA<+M5^m!sFiP*26H#)aU;=Pk6Z z`L|ZXy4ZJSTamloH+;vp?Lpa*GbHC;c9&yUoOj2^zSDj=KaS|*bqU%6y*xQ$Ia$aJ z!ltW=;hv%v zns<4aiu$xI5j`%5V?Xq3o=ZA~`nB-j;^LNXEXFK)8V%pRGc&G-;6^juYj@v#YSA+9u5wd0`>zhp+J5JR1|5Z zN@@;j(o$T8)|PboM%D(#bS{=Qz-Tx)9v3d4X=&`BPwHZ6VP((d!V7sA!3DHoujwJA z4?`Txc_C`ja-{FA?TkrT=~(C(AbihANlAI^j7+!`ghl^N2cCE#pBx-)xajGfot^2N zndz+UKGHLCa&po$FwrwH(E=lA?Om-L^j&DJ?8zR9{0|*rV|zn8QyT|UYb#P1U3~*< zM+aUA1jgt;{~qNub}{`gCoB7ZY5@w;!+Pi$=@{t$LmQaN1AEIQXX;{Xp(bo4T= z@Ze)-VB>ih|9|xSm*fAMss7)YEX+**d*=V@`8Sh?9;U$mQs~iI4{rf;@jc_A|BvbU zp0TlRa{%5TG!>Rr0)8XFTm$@@0)F27`wg^NKh5|vM*_cDB!mT(T;O-p&|;Ok(>Cv| zo^}U=t_gdLzNzDxc!WJ=;wBFH{hN^zi4!R{QUDJ8=jCgURlz`M!VKFnM=5j=eJ~jD zZ8oNdNANpj&{O;;LQ8!Ro>dX74%B9(7wqpHKz>etif8A?wZC7VZ8)6IMe1gB&TYHz zsNC+TPOey+ZL6f&U!81424EnO!ohN%!AaZzNj<54F-~JaFO#Sr#@cF+)9_{`A$tD+x z?dIhzxK{Jh?DMNDDkChQRWUg5P~h(w@DXs~g%dX(MI~J_LHEL< z7l$_Vfb1=vibcH(p6A+^%NX8o+OEdSJCwbaQFXr_c;8>!^-(0mzD1gx@B=l~nS-7` z2IntZgkYN-`;X? zAc=Wxga5u^#ZvcnTh(}ft|4ObvmF)~{e$eN3~VL1fg3ue zZoteQ+49Ql?hjtu8}Ga045If9o7rKj32isIE47)a!v20EqczwFX+osrROl@fO$$@h zL0;}k8na}A4tuT*CzlCcBW-yabUVLm6(OjixqDUi<5-uv2O+66^J_nU>n8B=_S>1e z&AzhJyysqHpU_?#H4=l8Z$)XMtnM2Dno>CnP^m_O@(i*k5jLU-MtRwd^seXYvLjbDr{%js0}!(>_X z80y}&k;351X_I;7dD14G#5Z41xFHUE62eop+KSQbi3Cx^%#hS{4As|gzNskwMjIU{ z3ilT}vuSH_;|lW|cAWPE8LJ5?-$Ujjp=&=9CZNG@UqGLhcIxgzw7iDxN0@F2Gz+QD zETc9OcxWWqzW3QTP4u&dXzPXA}^DDbtsb&d& znqG9sv%-xYCs7W?&4N~2&V};Z)aq)^Ej+|`r8ye$2X2B_N%KZ)!v1JF3sR7dh28H$ zqJu}Kg{F{>!fBf)0N=Rw!Zf?t(^JNVQcJaWsFXShHycjcRVA?zQnD?O`@rYVl* zic{8%9I|bVPvP*noIZbPuGJ01YZz1Vot%Ugt(mWlTe=$_$3lyP`p2l9p}{+4;-O3p zckD{H&{bpQd+QV7jed`oo?Y3wI!%&fZ{!u)Yvd*y`H=5G&Rp20&kpc0N2wuEr(pFX3GPbRc@c!InX@0i1!gR57Sqw>)~427t{^y0YMy-Xe!mz?H;wejV%e)++wRpj@U zWa*Vx#y&h3OZjWQ$nhL=_`J%qq~)}!FT;2pMR!6uX$5oi*XWWqUtTb}ZWj4wf7F&$ zyGb5slo@3-m!tn#Xo_y%F-q9K);FoKDjH|G*kQ{=dG+T{%^J6nLK|_F^_?ZtIyG&j z3BE}q)6tPu((4Wd>e{%rC`(f-OP77tB$seS50mN3{0x^rD3^V*UeVt0KhqZP&b}M> z$5Q{q_of6)gS)5D%Yd~zywNCED&&tU5^YC{X@g*ioDp|Nw&72$B&$hBFSVV37=_K$ zw2!Nf6|ZzUlImtES+1iOf!l*x5^stT5yzL1N)x21(w~Y)_N{Mu$IRGom47kg>t)eR zz5$jNEt-8RMF!1%j)%k1SDxR8!Tz`MIC6aYl{Ev6bSiO%w`*odF57a-ZM`We>CyQ* z5h=^R)=x)xSX_-bRWhSo4o;`-Mpr48nb)w>l};BvX@!%|qSL8rk%VN(o=OH@Lj9w9 zzUYQkuy!T$Q*x(r$?qzKh^ZSW78G#BgRZ5dKs`SCI5bb!L{yiF#W<|MeHAM2Hn zYTu0fsL|%Br?AFiY(BBeTQ+(vqk@vf$#<&cGL^yKGdl}~dTr#$r#|nQfb0IyZ_ZyZu}Orl{!KNU zqpij|U5Ns;x?{F*y1LoC)2lsHY)+_P*~~lh(|xSq@5yFCC4L+3^2?X3P0n#w0c*Yt z$?w)dLB{ne>2oY%R?P!1oviuEG0>WM*=Ew+9JqDt#T1F6mPsWlx~KOb7Ts#k@kKw= zR)JB7*(?%k>gq&gguTxm_g}IEt!%Gv7>CGUbeoM)2M_>=Qfr|>$1^TtCYC>_YSuw` z1nZhvp|*5;g=xoYS67=gD6<6>$xR+{=}jf%?vWah0eu4V&0gq;wT&T1?{;9^QHL<= zOd+31Q;y1Dls3mt${)*8*?IJ1gv#XQ|1JdSxW}NcN(GdsUqJEKZxL z(jy+`S|=h4iewAyB4W*ZLY6->-gT@yJi8Y6$kE=;zpP5Va?42WVEn27tS5vPqmOo! z44cCaA187=MhrrNkDiRAsn$Z;p^_R9t4}@!A-Jr_3Zz{25cW@Nu)&3GS3aHq{=|wm z{*rM(O~nb4s#76_A0GL3cAbtUYM$w1u!C|_L4XBg9CgEO>6a$zsyG`*zvLN4My6V_ z7V&MN-M=Y{+zt^+J!kKsx$9?}V?kNR#=6I}l{haK6z#kfmG<*_Idvms(urO18TH3F zbJjnehYbyvDJgPKxi>NQ&QwE$v9n=B;308Q;8L6m&vdl5En7rV;`xy78W}a`N1fA8)Z^xkq#bZzd z<87jbi@CL31Nl+K6l7F(L{HpYZg1!l@l5a=vl$Ye>sZeT!#6jZ{n7 z!+)EyU>1LWE|)eI6qGhzM7V8SubF+2(~_kV+{An(r1j^>ershIVr4JPF^CJL+?d-4 zrV{Mi5@ur}R6?l}aFg&ab>W6|idTsIx)b!@Cuf= z{I+`6C<+i)(SOvU(&DFz8MtmHNhZ+m-4EPX18ukUIX7| zb#G6jp6_<2pYoU3={aOQ`}^+=EPnR;rH zYulbNCtf6ICs7(m6=X`yZ#z^@rUB_nGVaF2;$J_bB z8JkiKR)egSBCx1i1?ph+X4j`aNl>c0gyqRz;e+)wm=L-%Gj3IdIw?{(w1+$0;| z&DMfl4GH7*Q2U}L@t|D|B>m57tJ8>~Y&-OMpfFsgSq0MxmGL$?P34p@)QsqlTT) z!;h}E$=*fZB+zNE-WqZnpRHaD*%(+#Rf<_k>0iycmqRVtrO_iR zL?Km9@z>TzYum%Ysjj*aH&aK6jXi6{FY<|1hN+ z@m&!sUSjk+vAg;piPhM*%?Wk;T9h;zyMY&NuG+%3ro=P}&fKaqGj!4A=q;kOtRF2Z zcYO=NXA{SRkR@bbndlhREiq6J*VMF7f+qeVE8?5rYSd>^YGE?*0iVkhnKh9=sCG1nwQK#u_2nVcO-Dh|_wt=$>k!ygOCL z>)NC4V9mTBv3Yx4F)lPLI>$tx4B`4t1_TW_dT8#xi!cZ4t1_S(4}f5rB`D_0NEDQ$ z#0JcC^bqqZafKZXf|pIrc1&6fwcTf_P0hbkYQ#!>C+5vDXA9`wR{YzX{|Dr)+SKp3 zLpg6pL#h&;fwh;v5L3qx>ydaB;@>v&`4J63gXZT_1%mQ7I+Z~JnK39+A}&E#`uY3= z&URmwFyQfkLQ8v&lL8cu#yav|)PMAN`7ILZuRdVe$n3)vo$~;|#j*BO*3*h^J2#JD z8#g|!05~MBBmmy%BN8}Gr&>}0mz9;pWANWpkb4aCo@-4vO>SuiL@O;8#*ubx{U!TX z@@^U-uz|f~q{Hh23&Ck~6iNq-Kou$eRV1+xymjv<@?Xw>px(;GY1{DyY1?*gG-Wa0 z^4&lVd;laj1sMQ}==)c~|Hi_=mG)6UQoXQ>)59tcjqQ7X@bZ{NJ;EbYcgO?(J=CUf z9eD@6CQt0pR{#PKi2^PDgZ20zfb3^rgXBN@fFwcOk-z?RBmq@Y63CXf7a&b~&SwdP zB!ICj!b;M`Zk7rFN?Jy5Ur~9)6n$m^{K@Lz^`9LnVEug@$+voZFAxR17kMi6HywbG z+#9b!#Q((`Np*ptt*iAI|9u71LtoaJ4))=MjYu zXhSmM8pezq^WtJ95_{+nKr8^vt?ISS5a)(bOzDy<=JIE`DXtPQ1kl-W38jexQHEZi<(HE3@#^C$YEyc@fusdx~65Fxzq}9Qqh8gGwIUvuK zR?#<+54togtitubgsA~H98$n5nmEpInS9V>a3I$GoFxwv!HzUDU}Ec2I`e3wi>Hh? zeHR!^ha}Pu^mxb$KucU}My{?GZ|4^!Cd;&QB@^gcKMEqk%=zH5O ztyT#|^HqkU5NZVpPQTy_Mvs7Z(t(kLJse)4}y%< zBr9CU7++`vg7u~2$$${_eSuU1N)e;Eoou^fefM*|(J{t;n3uhKJ~i+G5w!q$Tr3BT zOibVs!{2pL@ySQa>kD(Fq`wAGa!fS@4KG?am6@B5xA^ogo=Ld6y6Rp2vVk!SAh$VM zm7u1f!QP>_To0}wMw#dl8V>>Cg_5rU-L2%AB2zpXrsgbDSo%9I08n{Rwa4-dhzWs0 zl;-RGCWG*&nh>o}fLZ+*uaqa?&U_I0vx?LCt9&uP(gYs9+bvo5B55R4z$fjcNOu=K z{DHb$bmIjKklhI?-+Ca{R55L^^m(x?q{AxKYqXuFjmv`LNFM?|t-aE)r{h5D6PQgb z;Iszh`A%39{BKKd|BjR@Je7>DFHzyh<9=4+aaNsiYI$w?5@sv~tc%+NZ~BciXB`&} ze~L~Kyk-8IWek#pD&MguFi9j~lT&f^LksEYReRF9i-nSOv za69sP%-X@CseT|l1Ttg59$plBAr_F~%U54>`KRTHCX#h>;_cfY+WQk_+Q2OB10)f1EW(H2%7BAtdHfs$WECJaN6_#e{Kg6K zSRcUOns0KRSc?KbELH{Vi#=;^nvD!^FAJ2~u7tIhz$r8WIEBI?J(FpFp_eA=j~bDL z03+xR5?@v zxI&gI!2~c_8JQ2LsZ0_CLcjzu!7KVW5`fW4TAAo_Y|F0RuRO!TJ8d1cc~}Q+N;pDC=NmKNjkfhS`P*5P}&3 zL4=JP0YBPe;SL%U#MLVaq;1imn#o!4ZR2gB8IRm_8BZ<=z%;iNCrv8`(Oo&*soD=kW?@j zA2u#F!iTz@D;$&%!Ose$?jOK~0&;PiDJ>G|lHKF1-6I(?SPrfRHmhMLB3~e%dyzld z&uiCo25?rrFCbu`4(U^vZRH`{64%jdO`(c)Tf-}J~AYeMMSGm{ifCvHSkipZo zt%Jd5hO(o81>4a80ohLw7y(w8!B~&8h%sQCy8&O}1<~ZfZkKw)9zDDf5Dl{+$cWqr z^if#&LH1m-e{r!Q3%E<50*Krn+twOD4y#Z77Z=T=AlTON4v33tZLuZ5_ay&T35k0$ z8z7(+a2eH@~X{ubym;vQ^<}+4v45GLlIIhNUgyB0byzy##bd zd@2D`GEEv5@F&Tjw!;q8D(`zQu~^URvpCz8pVMVH+-;>ytuV?AfKE@JN5g`VD+T8I zJyx)lnOSt(%^H2g8-4&j4RxHqdBNSLj%Ny^N(m^MBM7@U6`;a?3|LCd^3}IPbt#vy zBUd}1?kfgym}NID5c1%5Y9@v2rxc0oXxplhoum>xc?hI<( z5PvY)v$?vAXt#PBnFAHmUS;+yk3TBgx7g}K)HI&G=cV1ySUxR?^<~$hHr{_;ODbPW z?5(+QwP@XU;B}vIbT?hS%rv~?Rq1h-Q5HL_eL8$pm`=A>@VREeJpjPGcbFl-9_b+k zTNY=@AkBHhzPHePoWFvW{G^M!%)%Pk%3~~+v2iQq?+gMi@midJ2;lRb%hmY2Rj>4p z(VC^bKbmv>*wox|>fImdHAYU`SV)afN}xo)nBw$(&coO>lrWW!0=Qa?ttkZdb{~PK zu+aa8C&KZbxnWKaL2Pn3x^b>pT&t|>|IUc9Hi)LGH9J(@)f zYo&fqY#H)XgRJNtIoCP=OdE`q7lnG>GkW%z>C_x#6n^|%Idj1Evu?y>o zkABE552}g!+yC4=eib2k>^KSi7@a8oy0{erwb(0*rj}+lwwd2pjc#j`lh(czzdPBt&M`g}GS!$f zfT}Y(Wm&kp_>|{|P7&;O&<9tbatC|`mhjTQe7?koAwz3D-y&cpIxO9)#H!f0sU(Ik zJv8^1*%BF7V)1pP=raXKvu;Smv4FL>P?n3Qu`va4U4*Lkl9Kqua8cY=@k(2i(sS#0 z*2su>+1yVC*MIly?koNp%s~wC>Uuj7>F8}NUL?>0c|lWQ6}DL95Ma^90?|S^OfSrq zj`ylAXQ>rNAYS0nrPF58P7l6QZ#A9w!uPJNj=*gU34x@V0SCX+#@yzKmarTXmlHgA z9Hqg5+@tD3b|d0>G@`hkR(UGf-QTo@F^Me}n*YtmjdEL0- zR}Ogf-~p~^-~fN3PF0*T28-AL_Qjmb?~R1>xENGgmCw#C=nHIEf-Kk3zVI#H7IB@G-->^ zKe1Lbsff=XmiH|QzBg(gR1M1KC7f>-$F=09296Zzsh2C|M$>_bDE(7c^u3o@>U6sU z_)#+`%*F!cWg}h=#RJ+WX7%gC9;Tnav^69szKF8lUTZ4dNq`4UPAl`UuenS6+s`93OkHx9GNWq!_02WIXX53oFH=Y7W9DMR`N3zLEu&J*nLm!d zPF>U1B2;?y>r-S^w&+hU>G0ijPDuH^fnTCuRklvBCZkEl7poak92^|TK{Iw7hqiD4 z7l}mM@sJ49MqDkER5)mM9jllc>3aOd=PvaD8G1OCvFFj{p3BcT?f=lK*ENc$V)3br z@zc%{Sl3CzSB@J(OV4??xgx;Xi)OpAN^^*qh;dK)vO zqKd;U&owYgqO8$OgJme>T?2;`-d7{f=5TpfCzH&QyrN$DX5BPC*QBAckak^Al{^ZO z9Oqfd+l0GrDL#kJ|3rWWSjhfq96ddr>}x}BotZERgR;NCEA70LIv4jFs7=7spL9a= z1r8^I4+l3O5W;xJUr!$09ug8QdbDZrOO&f<(sO%Fz6qguIxD7}cKiu9NL4DX{AH)# zmYB$_(e;(?hjL#;3+U%*VcKr-a^(!#j7}!=x+p7(A2eq?WJ9Btn&YAPtd%&-!qU}K zxq0fJaO%bll~dQB)UE8`3~$M&+{!wC$tggI>SYd_agozzK{ zHY%U!9UflNGPzeA^DIs5MM?}_P(cP|E{gq_Q4cai{96`-YJeqs2>!QZwRRI0?PwRT zBYPy&87kT~wL_6vi+?Ztmig9l7S5LUPMIu^{gX5c^_!?yg~D`PSn7;trqh>)gC>C` zBW&{am|EK6R~~0|zAmGI+_C65$)$z0B?-7JsZcaN|EE|y>UcUEt8=5Z!+s6H-4H`Y zgEDbbnP@slR%<9OY~R+J2&`{?iuW5hEAdgm4w`@;O6jVM9RFVqh8W(mH}bnTA*Zfe zP1?a@H;cDsch;eODRoggwK>yXwK?hvDk(@R1r5!bo%XKw#s* zMvaJs%#_<+jCFZYGi;2{{E4bGgKhy=LY(uhs;$!>>udbYdmU##UTX}6Anaf|gep3L z*=7yqZL4pzcpqzn7=PMP`x#nMH> zza8<+8Y8aJc(2ODjN~^I>0@k}KffP)TehgkII4MFq%=acd*zUm_eq%a*fU7S^cMk2 z@y(W}31(%o)ajq3s$g8k@8M;P1~z|UujXuBEtXCz2jxaWZIEXSew* z=LocUJ8!y4XI(nhaOC_&EDh}BEDfTo>55*87RhgIKF4WL-FxQpy^=;xf5wo+v2I33 zQ86Z%zg~` zEUw66AD%o?$4jkCo|jI-xwnFav~e zz$%;51>LW!@>+DLy3E2w63GL|lHRUB!hH)j?6s)}E2em}$ zEO|o)cb0-H$fX4PPNH=UP9bM_xTW%IU8R+%DX!g;PwL{mk*l) zpW7`N{5ulYPtmunX|#ql@fd%q!&@AK>b^Rkqq_e^5zFMgE2N%uW4eKDmQc6Jq{bx9 zMyx@q`jd^ex|~ivf4!a$JMH5u8nQ5d>9LUk{n|CjWFh@X&SdOHGpqz@frO#a@0{5HevL1MR%+6Ue z_AZ0(EQkx2}ugnuTG^y7eb*S4O?{0nO$+7L3pYLbuVXyQc_; zRC4d^?9L%u{8#d~%A7SC^D9ZK-r-Cme0;lVKyps6y>9TeeozA!Menl&RugyHdML zIGlig{^)(frQP*clY-NVlH_YoQ>{8NlcKcYJc6CNX<_Lnw&gQhdsc?|>_iE)x+B1c zC60DYp~fCO@r_AG{WpapP}~nq7P@1kDfV_O;0Jzs9!SH=eDfO?~a4z((&OM>!b&U6A~AELNzlhtI8aina7>P>*iP$!FdA zwhRwp0=(}9(**cVR4f{MYvhpKwFNQ&&}n!6=N+3eO;SAWwsT^v>zm(2SGiS%e*@=I z^xeVI(ZXkkZl_eoTg8@Z69vlDt+t~ZV?2J?M>~7>bYbk9tY}JXwRC?4Yw2t)9R2-W zt5gIhZV`)w&q}>S%F?Po{47?+tO7T#s=YPZ9q3bVA2&W)=CaBH?8@}a@mS2n`aAMl-@shsV$-md}G>zfEb8C91+5EchDk!e|YOcvG zaz}mUq4TgEm5LOwLWzP0qg0G+0N@Gz@b# z+Mu*v_=2vpUzs8Siwf@%Vwp4ASqx=_9qj_2Fx{`h%{V3y`E?m8=n|L%HIUsYi~g4?aMmEp|{;RWrfM;+wBIE7p7LoI9~4vdyUsJc?hEqbBgYLoAaj zO?qN2J3D(c)ukyiEX0^?D>dYCg_BeyT6YV4=y1ExSpx%2UiTDg zKxqs&d83Tgg87)}DMRI;YH#A;#Qf#}7LFFqAW>3eVX)9uV?dC*zGF{aHiruEN z;^@}86vuaaJypwcc3*Ic+Qf`D5BwQ;?{UCq9(W^gKoH74z*glUHkGxk3q2N^Stdm{b6i`&<_C!oi?!3mBP^pIPasY3x=H!iNWhYL6;iW*g zO{+g22bnRi`-kC(*aXI_4iixA_qXvR!s?Ng7jz}h?kT!u3*fC)1yEg)d`@`plL&k+O`I*<<6tW^Mjg+ssx z2;zgI9-z;yN4VT(>p~GgdokYucCNTenE(#IbX1SC=nhyq0APg&xbZx*m;`eG#t{2w zjGpv70D$#*1vAFx69brcFex5q@eso}hrS1b23_?7fR>Yf#e0m=Ayf+Xhn4W}JAT-> z4`PotlH?z>4_T6wwXmOlR(izQ&e zIpB|3oZi!8KA`q*9%rrpg~=pG2xw(nuK?Vh!}&HpUQ^iUylDU|=p!Hs^oa@^J&fae z)Ju!&ZVbT7k;330ge7-*wSbDyhtLSFfO3Z)0&zABfTg^%j!3{KVHZ)4$ozF>zA0eA zrKf;^uiSiJ!lF_5aTY@)GK};8y>WouZv6l3#zD>ue0LB08P)xL1=*wt92_4A_V-hJ zX(%qr;|+JZOQi6hkrbZ`g+Q>r7V5pjg%5uM#;n9FApMNEbSSWAZ@a0xKMqxyb-M}KZ+CPla03qedUe7KSe93#RH0T5-*eeDpZ`^R$6v!rO|-R1dV>|x>w zogK}#gV@$6C2X_Tcc+k!}p z9#*ot>&OKV$mRGEUUZzU^fWyT%L00^Lu1mSV8eug9`N5o2nxU{Cmt@q#>~~81rX30 zI}`J)?w->fXs3WPG3%1ve?kZN6{E<3nr2#334!(~NDjn3XjqegB;F3=owmz6BZEM` z#0AhSv!|vKMj+QS1lnv)=+b2HSck;$&-4#2Q<*6NB}f1zPAWHgVd7y5`3P|!p~wOv zd=(f0h*F`^asz`%eJ=oRJ;Ps|A9}Qbhsij?1Ar8%FF9r=rVN6TlLP`lK_8eC1m8Id zBlZ;?;JB4J#0cox{J}?PsyKb48E9Kb0PT3IEO}rM9fiQ_U43(S(_fLm;^GOHwEt}dVfbZv}Y@q~$o$qzhSB>hE)^@tMy4>?(m+C6KzL5G&c zXddHeQKy|wpMFoJE575e!Jz0F&W>U!S2uUqnR<%0XKJQYZ1y&CU| z6|U$r+P~g?;MS301Be-6o7_LJK?WW;^jsTE$6q)9z2b^}f^X#XDwNT4W-7Y($DeMO zjpP1IOZ+!4+0luZEC9OS-eTYy{^iaPv&54`)D1$Adb5cssaPig0qBr-7*9SBr3W5d zLR_nF|H@7*4VH?b#SH&AoDIry41Hh98fSd5eLP%okRqkUU4dM3vX?bztv64sU1j*I zp7E3Q_%DW6P5YE8APg*_`WEf{ZTzM;{=6$@GO>VBQDD)tl!{gh1S^5G}>OtgRQ@+(<_}QZ}zx zJEpDA40h6&5JTyaRdwcp>yb2O))zs4l#0XX-|v`Ed)Wb(_QxLq&i6Q^aDWfE!8TQx ze2&{MR__Z5`8?F_&8I3}&(v9lh0!(k-n&j4Cu9MC?QtsPb#-FunMx)WanVy$Sorsx zz9-t-E_GmFz%ATxGKJ<0&(Jigd-xbX&Hv?|HMM9AV?zJ?luDQRbb(1BP$ag{6xT0J z#ARa7m_?NDR;+)Pmm+661x?uJ*zzzek{kC_@Va>EpDou%{eAin7{u`T&z3D`>y`)E z7ln;;<5A593)HJkE~baQ0(Dy4)Y*gW&b~$R9Yxx&4T=aBpar zbj7pdu8ivC3Cax9{I*zB*~Kt8U~?h7s;Q3u7Ls194hjkbQMqYxpMNyLx?64^sy>Xj ze9^IR#QsqdShMyBGT0q!Yinwi22Y$07Kres_vf1o#|q>b#Vp&d_qp#mGCa@JwN@PV zW^e)m0zUoD7STGNuC*QfOLVc4GV8Z)Y;d?|_{(AAZF9q|+LD%&^&DTe>W3mG4w@_K zZzE{GEA-Kdx<0OuKgp%`-@9r{J#>->1%2$Kfd$!DI|Lc54h5w9b@n!2sgMFFr6OLQ zOj_vf?r!k+gt)k6*q1+V-@b*^p*qV)99!R?S(jmUUN3l|rJy56`!U;<|ETvR^6mFi ztGggVYF_G;6^-awQ@4H7lKgD<{>0FuZX<)kt^eik^Vc-_v|L&fPqdF_E=P$YyzB5u zhzop%Cqd)+lC~F#>(^2>gO;>Kp-+zVivvO$RJHt|n(U(Ee?6xzmc82CH5}>@JdZSj z?Bfz8@y|RP5i|C=gR4Hg$Eu-6oVKJFj9lOs3Syw>`4C`9A~7o$PT8QEdB0XFZ|lL& zcXx>G0kGgm@hurJi%r9FS8wP&n8kCoEU8NFOu^gxU?EhGm4Rd3;ai>kECnuZ-Vx5N zHd0S)(AHx5@OA&%0D%_K>*?{@$OtGe46UNy&^AVB!-9Nq= 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 literal 0 HcmV?d00001 diff --git a/docs/viewer.component.md b/docs/viewer.component.md index 1d39b5441b..52201abc3b 100644 --- a/docs/viewer.component.md +++ b/docs/viewer.component.md @@ -51,13 +51,11 @@ Using with file url: | showToolbar | boolean | true | Hide or show the toolbars | | displayName | string | | You can specify the name of the file | | allowGoBack | boolean | true | Allow `back` navigation | -| allowOpenWith | boolean | false | Toggle `Open With` options | | allowDownload | boolean | true | Toggle download feature | | allowPrint | boolean | false | Toggle printing feature | | allowShare | boolean | false | Toggle sharing feature | | allowInfoDrawer | boolean |false | Toogle info drawer feature | | showInfoDrawer | boolean | false | Toggles info drawer visibility. Requires `allowInfoDrawer` to be set to `true`. | -| allowMoreActions | boolean | false | Toggles `More actions` feature | ## Details @@ -139,6 +137,60 @@ The `allowInfoDrawer` property should be set to `true` to enable Info Drawer fea Everything you put inside the "adf-viewer-info-drawer" tags is going to be rendered instead of the default info drawer. +### Custom "Open With" menu + +You can enable custom "Open With" menu by providing at least one action inside the "adf-viewer-open-with" tag: + +```html + + + + + + + + + +``` + +![Open with](docassets/images/viewer-open-with.png) + +### Custom "More actions" menu + +You can enable custom "More actions" menu by providing at least one action indide the "adf-viewer-more-actions" tag: + +```html + + + + + + + + + +``` + +![More actions](docassets/images/viewer-more-actions.png) + ### Custom extension handler If you want to handle other file formats that are not yet supported by the ng2-alfresco-viewer you can define your own custom handler. diff --git a/ng2-components/ng2-alfresco-viewer/index.ts b/ng2-components/ng2-alfresco-viewer/index.ts index 8315802dfc..cb76e11ea6 100644 --- a/ng2-components/ng2-alfresco-viewer/index.ts +++ b/ng2-components/ng2-alfresco-viewer/index.ts @@ -25,6 +25,8 @@ import { PdfViewerComponent } from './src/components/pdfViewer.component'; import { TxtViewerComponent } from './src/components/txtViewer.component'; import { UnknownFormatComponent } from './src/components/unknown-format/unknown-format.component'; import { ViewerInfoDrawerComponent } from './src/components/viewer-info-drawer.component'; +import { ViewerMoreActionsComponent } from './src/components/viewer-more-actions.component'; +import { ViewerOpenWithComponent } from './src/components/viewer-open-with.component'; import { ViewerToolbarComponent } from './src/components/viewer-toolbar.component'; import { ViewerComponent } from './src/components/viewer.component'; import { ExtensionViewerDirective } from './src/directives/extension-viewer.directive'; @@ -42,7 +44,9 @@ export function declarations() { ExtensionViewerDirective, UnknownFormatComponent, ViewerToolbarComponent, - ViewerInfoDrawerComponent + ViewerInfoDrawerComponent, + ViewerOpenWithComponent, + ViewerMoreActionsComponent ]; } diff --git a/ng2-components/ng2-alfresco-viewer/src/components/viewer-more-actions.component.ts b/ng2-components/ng2-alfresco-viewer/src/components/viewer-more-actions.component.ts new file mode 100644 index 0000000000..5c1a309c7f --- /dev/null +++ b/ng2-components/ng2-alfresco-viewer/src/components/viewer-more-actions.component.ts @@ -0,0 +1,28 @@ +/*! + * @license + * Copyright 2016 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core'; + +@Component({ + selector: 'adf-viewer-more-actions', + encapsulation: ViewEncapsulation.None, + changeDetection: ChangeDetectionStrategy.OnPush, + host: { class: 'adf-viewer-more-actions' }, + template: `` +}) +export class ViewerMoreActionsComponent { +} diff --git a/ng2-components/ng2-alfresco-viewer/src/components/viewer-open-with.component.ts b/ng2-components/ng2-alfresco-viewer/src/components/viewer-open-with.component.ts new file mode 100644 index 0000000000..8c9fa38fb5 --- /dev/null +++ b/ng2-components/ng2-alfresco-viewer/src/components/viewer-open-with.component.ts @@ -0,0 +1,28 @@ +/*! + * @license + * Copyright 2016 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core'; + +@Component({ + selector: 'adf-viewer-open-with', + encapsulation: ViewEncapsulation.None, + changeDetection: ChangeDetectionStrategy.OnPush, + host: { class: 'adf-viewer-open-with' }, + template: `` +}) +export class ViewerOpenWithComponent { +} diff --git a/ng2-components/ng2-alfresco-viewer/src/components/viewer.component.html b/ng2-components/ng2-alfresco-viewer/src/components/viewer.component.html index d25d72e1b7..113336074f 100644 --- a/ng2-components/ng2-alfresco-viewer/src/components/viewer.component.html +++ b/ng2-components/ng2-alfresco-viewer/src/components/viewer.component.html @@ -20,24 +20,13 @@ {{ displayName }} - + - - - + @@ -55,23 +44,12 @@ share - + - - - - + + diff --git a/ng2-components/ng2-alfresco-viewer/src/components/viewer.component.spec.ts b/ng2-components/ng2-alfresco-viewer/src/components/viewer.component.spec.ts index c479f802d7..7a2efc33ad 100644 --- a/ng2-components/ng2-alfresco-viewer/src/components/viewer.component.spec.ts +++ b/ng2-components/ng2-alfresco-viewer/src/components/viewer.component.spec.ts @@ -31,6 +31,8 @@ import { PdfViewerComponent } from './pdfViewer.component'; import { TxtViewerComponent } from './txtViewer.component'; import { UnknownFormatComponent } from './unknown-format/unknown-format.component'; import { ViewerInfoDrawerComponent } from './viewer-info-drawer.component'; +import { ViewerMoreActionsComponent } from './viewer-more-actions.component'; +import { ViewerOpenWithComponent } from './viewer-open-with.component'; import { ViewerToolbarComponent } from './viewer-toolbar.component'; import { ViewerComponent } from './viewer.component'; @@ -60,6 +62,52 @@ class ViewerWithCustomToolbarComponent {} }) class ViewerWithCustomInfoDrawerComponent {} +@Component({ + selector: 'adf-viewer-container-open-with', + template: ` + + + + + + + + ` +}) +class ViewerWithCustomOpenWithComponent {} + +@Component({ + selector: 'adf-viewer-container-more-actions', + template: ` + + + + + + + + ` +}) +class ViewerWithCustomMoreActionsComponent {} + describe('ViewerComponent', () => { let component: ViewerComponent; @@ -82,8 +130,12 @@ describe('ViewerComponent', () => { UnknownFormatComponent, ViewerInfoDrawerComponent, ViewerToolbarComponent, + ViewerOpenWithComponent, + ViewerMoreActionsComponent, ViewerWithCustomToolbarComponent, - ViewerWithCustomInfoDrawerComponent + ViewerWithCustomInfoDrawerComponent, + ViewerWithCustomOpenWithComponent, + ViewerWithCustomMoreActionsComponent ], providers: [ RenderingQueueServices, @@ -128,6 +180,22 @@ describe('ViewerComponent', () => { expect(customElement.querySelector('.custom-info-drawer-element')).toBeDefined(); }); + it('should use custom open with menu', () => { + let customFixture = TestBed.createComponent(ViewerWithCustomOpenWithComponent); + let customElement: HTMLElement = customFixture.nativeElement; + + customFixture.detectChanges(); + expect(customElement.querySelector('.adf-viewer-container-open-with')).toBeDefined(); + }); + + it('should use custom more actions menu', () => { + let customFixture = TestBed.createComponent(ViewerWithCustomMoreActionsComponent); + let customElement: HTMLElement = customFixture.nativeElement; + + customFixture.detectChanges(); + expect(customElement.querySelector('.adf-viewer-container-more-actions')).toBeDefined(); + }); + describe('View', () => { describe('Overlay mode true', () => { diff --git a/ng2-components/ng2-alfresco-viewer/src/components/viewer.component.ts b/ng2-components/ng2-alfresco-viewer/src/components/viewer.component.ts index adfab95b01..612a408b71 100644 --- a/ng2-components/ng2-alfresco-viewer/src/components/viewer.component.ts +++ b/ng2-components/ng2-alfresco-viewer/src/components/viewer.component.ts @@ -24,6 +24,8 @@ import { MinimalNodeEntryEntity } from 'alfresco-js-api'; import { AlfrescoApiService, BaseEvent, LogService, RenditionsService } from 'ng2-alfresco-core'; import { ViewerInfoDrawerComponent } from './viewer-info-drawer.component'; +import { ViewerMoreActionsComponent } from './viewer-more-actions.component'; +import { ViewerOpenWithComponent } from './viewer-open-with.component'; import { ViewerToolbarComponent } from './viewer-toolbar.component'; @Component({ @@ -41,8 +43,14 @@ export class ViewerComponent implements OnDestroy, OnChanges { @ContentChild(ViewerInfoDrawerComponent) infoDrawer: ViewerInfoDrawerComponent; + @ContentChild(ViewerOpenWithComponent) + mnuOpenWith: ViewerOpenWithComponent; + + @ContentChild(ViewerMoreActionsComponent) + mnuMoreActions: ViewerMoreActionsComponent; + @Input() - urlFile: string = ''; + urlFile = ''; @Input() blobFile: Blob; @@ -51,23 +59,20 @@ export class ViewerComponent implements OnDestroy, OnChanges { fileNodeId: string = null; @Input() - overlayMode: boolean = false; + overlayMode = false; @Input() - showViewer: boolean = true; + showViewer = true; @Input() showToolbar = true; @Input() - displayName: string = 'Unknown'; + displayName = 'Unknown'; @Input() allowGoBack = true; - @Input() - allowOpenWith = false; - @Input() allowDownload = true; @@ -83,9 +88,6 @@ export class ViewerComponent implements OnDestroy, OnChanges { @Input() showInfoDrawer = false; - @Input() - allowMoreActions = false; - @Output() goBack = new EventEmitter>(); @@ -95,10 +97,10 @@ export class ViewerComponent implements OnDestroy, OnChanges { @Output() extensionChange = new EventEmitter(); - viewerType: string = 'unknown'; + viewerType = 'unknown'; downloadUrl: string = null; - fileName: string = 'document'; - isLoading: boolean = false; + fileName = 'document'; + isLoading = false; extensionTemplates: { template: TemplateRef, isVisible: boolean }[] = []; externalExtensions: string[] = [];