contextmenu/0000755000175000017500000000000012133226337012455 5ustar lunarlunarcontextmenu/skins/0000755000175000017500000000000012114675047013611 5ustar lunarlunarcontextmenu/skins/larry/0000755000175000017500000000000012114675047014742 5ustar lunarlunarcontextmenu/skins/larry/messageactions.png0000644000175000017500000000324212114675047020456 0ustar lunarlunarPNG  IHDR0NtEXtSoftwareAdobe ImageReadyqe<DIDATx]HW׏TS[}sI6T|>T>,$$-RLZ[j)?,V% XK 䥊Z [3.L:$tp_{i$x#X? Ų~ߌ?DOMkPx$m(Ѕyj'$$XgPottt9ccc?R^vy7xLnM1$2~vv⨎;a|8^0>5RyzwƳ@ollFFF Xg%z=uuu)`iiiYq8dSa AwC8:-  sH<¨jmo6 8陙;7bgg'nJ?~6߳ wa=ԩSoZ{doRR:vϒӴZƵ5ZOOχTk׮AU {ʊFZmm9 [1 ˚iϼ;28KMMM F|>maaawDce'+htE^z6%ӹBV?Fq^t!UbЏ8h祺m̙3X5\Kvڙ-qązцI߷Fnqcڭ5s?GZO?855aPnݺ|`UQQhlly8z{{"dpX,< 2d+..(>5ѣGvﵻP^^zsuBקONýt0tJJJ12ePhw!/rQ%Q^^J*3^2!Z=tU[ #Br2}ww)--}?ziDEa*sP}DinT]=z2е ($F ^3#|@(q"u.PXl)Ey zCw#[nnﶿ aC7>qRiu; |p.eH8z>ڱ:/p>s}~hGa4Ob=r5-((zsW  XL}]@KYfӿ/х<'OLʾ`.ēg*++idj"u>ԛV!gϾ(ڢ̨;|s|n(a gևEz+Gϟ12<11@Kdee-=NgeW{e.\0\j;ܹs͛---ܨ0:ҥKXn\rE!_XŋHǷ^`0$4g8Aqs{˜@@@@@@@@@@@@@@@?M\'&~IENDB`contextmenu/skins/larry/ie6hacks.css0000644000175000017500000000006112114675047017146 0ustar lunarlunar/** * ContextMenu plugin styles (IE6 hacks) */ contextmenu/skins/larry/folders.png0000644000175000017500000000747512114675047017123 0ustar lunarlunarPNG  IHDR0|CtEXtSoftwareAdobe ImageReadyqe<IDATx] p^vuߒ[`A,$4H8r0irMҖNۙ 1 B $--4 I&M g6)M ˖,ɺW+II>VZ[Y2AS oy0/2 Nr$܈%YcfYfTG[n{`0# kj;_%3L7ͦJ,z@h}g;=R nAfL rv=hRL5UTTW߰9 4M'/V7*0lb-.*,6|oǃ8BJ$@FfI#q@#6(:Hc2jt,aG/RO$N.‘ZIjsTTᒒ"KB0u!)Ho ő%hL/IBC?7=uƥRxHp&n&y[3R["ʝ+:W`NTr=gNn2K(Ǣ̖u8Z8P* ;!TT&˹f.r:j0R#Gfiu:26[A.@d/TZ4jrR-Xe\<.Z'ܖvR  1bs R͊.D7QX#*Q]UDAPP(t0 h[[$ URH:x`gQaќѰjټJr4HHLQ:,Pn$,-83F0 t@$pIC$4@mR/)=ɻqq^}Pyݿxʠ7N]l؟OQ>izE-ŮkiCy#(PTb),< U N=bq*ljd8DX4( b̑hA.+#YX$rgP(̥BIJՈ-ARP20``Imę@hxjHH) }[jIQ #<~ b%CielڄNkfϙ3d2MXtP'\s} #;^xM&=n0H@pӘ Z;:N^YdZsMgGh;wSeF@L8B}o>nR__31?$2nٲ? @kNl뛚g1p[= tPvoW*ĤA:4LzL. SE75:2x.J$=d-YgiZt $=O}W̋27 olI=̓ |P>G+2CΗ \D_6@J@|+J)p-nzƖ ŮBPyWUkZ탨Ս(-5|VZ5С5;W挴iM0w{g7ROv]p2U~cHz8w{g5l?vl OTVVFvpT!Q7## 6O\@ͧ[#<\u@+/g0<v)@z6`/w4"U'ѕRB'M \V/D&X_yy^%i: >,zT0kw@cò@ pF\@PUj oI> g WY'Нܹw[w={O>3g3~"UkP ޠlbs/.KiaR[[N܌Xs͓;t;t-~iɯ5:i1޹wy'`/ __; %gOfuttl=z̀Ci'&Ll6g̘Qi`ww\;Zu6J]\d^8Ó4,Q>Hpv|\VTš~p&idP0*r\⢽:Lmu >aR\DI {siVL#r-Ϻp:2Ұ (C( a* nH }㐄$! J^(mgGFg m38[-1?8()80 [従;a7H TGl7 -NKtZ&mI/V G$Mh\eEeV01vw7{<x^*wn6>"ID+z:놳@0)-Ϙj'۶MMWT"_ӢP7~{cOosv>WƆƳN ++FλM>vk+ nqe}Di׍~t:uMTЃɓ}G~1І)$7XZ:j5vVxD*ta4W?{6}I79 (^v!]G# ;Ej3PE,[q²@Gj.D@DgU$)r^ L58~ OT2hb*((,ˌⓁ8H[6v[,"Hg4PTDmk3 ,}y餛?iLFrf)sMm&0?N5eƺ\x<X:r)WAR0x j^= 44ۦq0\>pe7~t S=q/(Jl$eG؋+8`>\Wݞ&5n|S,1nO;;fkޝpMnO@W7ZJ---| :n|l2z`ͷ n*K&"(toE<V4|alXh:$~\N/WiooDX@bqX|9{ } ]6`ۨY+4T.0L0ղ7`R9XVXIFY@tai9dX,Ɵkjjb9k K2סV^ܶmnfY12qZ0Jb~Hլy$@n V*(.L  Y   0}0<_K/EI `.W@(qw% ["nDjmiiI^kh2bvr>@e@<̓ˑ-y)RzlCzF2zbCCP&J4xx}%A; #5ݣ;4!?G$#   *Ww޶2CIENDB`contextmenu/skins/larry/contextmenu.css0000644000175000017500000002071112114675047020026 0ustar lunarlunar/** * ContextMenu plugin styles */ .records-table tbody tr.contextRow td { background-color: #F2F2F2; } #mailboxlist li.contextRow, #directorylist li.contextRow, #addresslist .contextRow { background-color: #C7E3EF; } #rcmContextMenu, #rcmFolderMenu, #rcmAddressMenu, #rcmGroupMenu { padding-top: 3px; min-width: 220px; } #rcmContextMenu li, #rcmFolderMenu li, #rcmAddressMenu li, #rcmGroupMenu li { margin: 0; } #rcmContextMenu li ul, #rcmContextMenu li div, #rcmFolderMenu li ul, #rcmFolderMenu li div, #rcmAddressMenu li ul, #rcmAddressMenu li div, #rcmGroupMenu li ul, #rcmGroupMenu li div { position: absolute; top: 0px; left: 0px; width: auto; display: none; background-color: #444; border: 1px solid #999; padding: 1px; z-index: 901; border-radius: 4px; box-shadow: 0 2px 6px 0 #333; -moz-box-shadow: 0 2px 6px 0 #333; -webkit-box-shadow: 0 2px 6px 0 #333; -o-box-shadow: 0 2px 6px 0 #333; } #rcmContextMenu li.conmentitle, #rcmContextMenu li.submenu, #rcmFolderMenu li.conmentitle, #rcmFolderMenu li.submenu, #rcmAddressMenu li.conmentitle, #rcmAddressMenu li.submenu, #rcmGroupMenu li.conmentitle, #rcmGroupMenu li.submenu { padding: 0; cursor: default; } #rcmContextMenu li.conmentitle span, #rcmContextMenu li.submenu span, #rcmFolderMenu li.conmentitle span, #rcmFolderMenu li.submenu span, #rcmAddressMenu li.conmentitle span, #rcmAddressMenu li.submenu span, #rcmGroupMenu li.conmentitle span, #rcmGroupMenu li.submenu span { display: block; padding: 6px 10px 6px 29px; } #rcmContextMenu li.sublink, #rcmFolderMenu li.sublink, #rcmAddressMenu li.sublink, #rcmGroupMenu li.sublink { padding: 0; } #rcmContextMenu li.submenu, #rcmFolderMenu li.submenu, #rcmAddressMenu li.submenu, #rcmGroupMenu li.submenu { position: relative; } #rcmContextMenu li.submenu span, #rcmFolderMenu li.submenu span, #rcmAddressMenu li.submenu span, #rcmGroupMenu li.submenu span { cursor: pointer; background: url(contexticons.png) no-repeat right -188px; padding-right: 18px; } #rcmContextMenu li.markmessage a span, #rcmAddressMenu li.contactgroup a span { text-indent: 15px; } #rcmContextMenu li.submenu:hover, #rcmContextMenu li.sublink:hover a.mainlink, #rcmFolderMenu li.submenu:hover, #rcmFolderMenu li.sublink:hover a.mainlink, #rcmAddressMenu li.submenu:hover, #rcmAddressMenu li.sublink:hover a.mainlink, #rcmGroupMenu li.submenu:hover, #rcmGroupMenu li.sublink:hover a.mainlink { background-color: #00aad6; background: -moz-linear-gradient(top, #00aad6 0%, #008fc9 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#00aad6), color-stop(100%,#008fc9)); background: -o-linear-gradient(top, #00aad6 0%, #008fc9 100%); background: -ms-linear-gradient(top, #00aad6 0%, #008fc9 100%); background: linear-gradient(top, #00aad6 0%, #008fc9 100%); } #rcmContextMenu li a, #rcmFolderMenu li a, #rcmAddressMenu li a, #rcmGroupMenu li a { padding: 0; margin-left: 0; } #rcmContextMenu li a span, #rcmFolderMenu li a span, #rcmAddressMenu li a span, #rcmGroupMenu li a span { display: block; background: url(contexticons.png) no-repeat 7px 20px; padding: 6px 10px 6px 29px; cursor: pointer; } #rcmContextMenu li a.active:hover, #rcmFolderMenu li a.active:hover, #rcmAddressMenu li a.active:hover, #rcmGroupMenu li a.active:hover { background-color: #00aad6; background: -moz-linear-gradient(top, #00aad6 0%, #008fc9 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#00aad6), color-stop(100%,#008fc9)); background: -o-linear-gradient(top, #00aad6 0%, #008fc9 100%); background: -ms-linear-gradient(top, #00aad6 0%, #008fc9 100%); background: linear-gradient(top, #00aad6 0%, #008fc9 100%); } #rcmContextMenu a.disabled, #rcmFolderMenu a.disabled, #rcmAddressMenu a.disabled, #rcmGroupMenu a.disabled { opacity: 0.5; filter: alpha(opacity=50); } #rcmContextMenu li a.disabled span, #rcmFolderMenu li a.disabled span, #rcmAddressMenu li a.disabled span, #rcmGroupMenu li a.disabled span { cursor: default; } #rcmContextMenu li a.disabled:hover, #rcmFolderMenu li a.disabled:hover, #rcmAddressMenu li a.disabled:hover, #rcmGroupMenu li a.disabled:hover { background-color: #444444; background: -moz-linear-gradient(top, #444444 0%, #444444 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#444444), color-stop(100%,#444444)); background: -o-linear-gradient(top, #444444 0%, #444444 100%); background: -ms-linear-gradient(top, #444444 0%, #444444 100%); background: linear-gradient(top, #444444 0%, #444444 100%); } #rcmContextMenu .read a span { background-position: 5px -24px; } #rcmFolderMenu .readfolder a span { background-position: 5px -24px; } #rcmContextMenu .unread a span { background-position: 5px 0px; } #rcmContextMenu .flagged a span { background-position: 5px -46px; } #rcmContextMenu .unflagged a span { background-position: 5px -72px; } #rcmContextMenu .reply a span { background-position: 5px -120px; } #rcmContextMenu .replyall a span, #rcmContextMenu .replylist a span { background-position: 5px -144px; } #rcmContextMenu .forwardinline a span, #rcmContextMenu .forwardattachment a span { background-position: 5px -167px; } #rcmContextMenu .delete a span, #rcmAddressMenu .deletecontact a span { background-position: 5px -94px; } #rcmFolderMenu .expunge a span { background-position: 5px 66px; } #rcmFolderMenu .purge a span { background-position: 5px 66px; } #rcmFolderMenu .collapseall a span { background-position: 5px -323px; } #rcmFolderMenu .expandall a span { background-position: 5px -302px; } #rcmContextMenu ul.moreacts li a span { background: url(messageactions.png) no-repeat 5px 30px; } #rcmContextMenu ul.moreacts li.print a span { background-position: 5px -48px; } #rcmContextMenu ul.moreacts li.source a span { background-position: 5px -72px; } #rcmContextMenu ul.moreacts li.save a span { background-position: 5px -24px; } #rcmContextMenu ul.moreacts li.open a span { background-position: 5px -96px; } #rcmFolderMenu .openfolder a span { background: url(messageactions.png) no-repeat 5px -96px; } #rcmContextMenu ul.moreacts li.edit a span { background-position: 5px 0px; } #rcmAddressMenu .editcontact a span { background: url(messageactions.png) no-repeat 5px 0px; } #rcmAddressMenu .composeto a span { background-position: 5px -279px; } #rcmAddressMenu .removefromgroup a span { background-position: 5px -344px; } #rcmContextMenu ul.folders li a span, #rcmAddressMenu ul.folders li a span { background: url(folders.png) 5px 3px no-repeat; } #rcmContextMenu ul.folders li.subfolder a span { background-position: 5px -39px; } #rcmContextMenu ul.folders li.inbox a span { background-position: 5px -61px; } #rcmContextMenu ul.folders li.drafts a span { background-position: 5px -84px; } #rcmContextMenu ul.folders li.sent a span { background-position: 5px -106px; } #rcmContextMenu ul.folders li.junk a span { background-position: 5px -132px; } #rcmContextMenu ul.folders li.trash a span { background-position: 5px -159px; } #rcmAddressMenu ul.folders li.addressbook a span { background-position: 5px -183px; } #rcmAddressMenu ul.folders li.contactgroup a span { background-position: 5px -209px; } #rcmContextMenu div.popupmenu, #rcmFolderMenu div.popupmenu, #rcmAddressMenu div.popupmenu { height: 129px; padding: 0; } #rcmContextMenu ul.scrollable, #rcmFolderMenu ul.scrollable, #rcmAddressMenu ul.scrollable { top: 15px; height: 100px; overflow: hidden; border-top: 0; border-bottom: 0; margin: 0; } #rcmContextMenu li div, #rcmFolderMenu li div, #rcmAddressMenu li div { height: 12px; overflow: hidden; background: url(contexticons.png) #444 no-repeat center 20px; } #rcmContextMenu li div.scroll_up_act, #rcmFolderMenu li div.scroll_up_act, #rcmAddressMenu li div.scroll_up_act { background-position: center -216px; border-bottom: 0; cursor: pointer; } #rcmContextMenu li div.scroll_up_pas, #rcmFolderMenu li div.scroll_up_pas, #rcmAddressMenu li div.scroll_up_pas { background-position: center -233px; border-bottom: 0; cursor: default; } #rcmContextMenu li div.scroll_down_act, #rcmFolderMenu li div.scroll_down_act, #rcmAddressMenu li div.scroll_down_act { top: 117px; background-position: center -251px; border-top: 0; cursor: pointer; } #rcmContextMenu li div.scroll_down_pas, #rcmFolderMenu li div.scroll_down_pas, #rcmAddressMenu li div.scroll_down_pas { top: 117px; background-position: center -270px; border-top: 0; cursor: default; }contextmenu/skins/larry/contexticons.png0000644000175000017500000001314012114675047020167 0ustar lunarlunarPNG  IHDR0sxtEXtSoftwareAdobe ImageReadyqe<IDATx]yTTG 6 ANbz7\b$<ĉGgL%$9?̼ }.fGq!&FEd^}ͽε]=VS-8}UM`Xw (x7;@I@ KI Hַ7yzztuu5+@Egl bT<P(dD"EH#Bk֬&d21\<>X˻TE đ "cyDa|wwc9,o?3;vPPއ;녲 2VyY_pa'[(S, u$B +V5W*{-333 )9'zPV^)bZ0j/ G^>JLL5-ّ<۩c( fVn\7XI6=cRT]`0lYրEO5ʒd^+#m%䠮>$d֭J \b`2'AkXq9+?>?pKn پ ]v p=0b@`%0ݶmۜu{.''P.3% #J4Iŋ%tZ*]+'%%/~7xӦMAcxۆΚ5s\§Ťr@| yS-ԥHݻwPTVn`)KΘǏW‡Z^WN<=vgkt:+IF)( _B߲֫Exݦ x)&(ޓ6l(J-ܱ ͮ|-k׮? \ ұu޽2W\&+<W@n(DTH-/_T*Y] He "bS`kzA,- PX(XF5.a˵?>ͥ9Pjj^L322B%2337 O]A{{P(\NcKQZZZ0k֬K8?B"$''Ac y[q~g{db+JV{%gluPK-++[B*g(>v8P@P@ZcNsv ]fGI{b[74(3#fΜP(4r|#S d2YX, q8<{( Rnܸ@ e5vŌ׳w5:wh<<<#FڝHb"=`hE|G- H RGЂ;)ATڋ jƮ;QPgxghلltP@P@spv4,//t cݻ4?'+I??2,h4JK#:aqq+8~nUUU-Z!R/_8444zntn#Ǯ`Noösȇc_}U^w^^^';FPjeLti&Ocǎ/:pwq%3R Fo޼\qԩ_RPPpwY@=YA@:~Lv:P(݇|U@@@0J*ڴiS)bĎĨ؍oQֻ3g|m%[)\~} >wM*<{ 3%DTBOOpPqI[`y>|cEH2+,gGnVRM Gz `I0 1( }B2_j/y& /'F\r%6((L& <^x!xp0h(s"քM/0\t)%**-?d6OTVVX+Y_YxH!wP4P8#8555AUTTjBJ?`Cr3<< g_PPpCܹSu֭\NgٷFFB\ٳg}WBVP\\ :%|}}C233:-_:w! yW 6999oӇ.]紴 2J6Pnܹsg;nׯ?\Z 7jllTBT  EO︴[s`x ˉ袢noo@ٳe\$b#lj%7nܰuM>=[$ŎXry8|[/אNj[y)0&¯DRC|SYh?d&;1DH@PO@# ʊfl0@ՎA"tjkksEIsq`®!jܕ[T~iii|BB/[B#a#FxDw[u55>"֭[bK|C}DH$v222OVTe˖-Z\\|]~Mu@T:p<==pS^^ygwu: 2__,Alhp@6f$ӻnxHŃ2%x~"3)Y+A jNS@;#4zp$QR4yĉ8ͅ_arG*BVeW^_)B`KKWƠ'{4R+gwwNuF$ȿя;sԩS1/| do 1m6`B81B*;9MP@<}썔=GFF9=(|BG#6v.?nݺ 63vQ % r߀Oްv t@3c„ d29=0nRpٗ!^Cؤ>--- ""T*ۺ:<r ŕx{{;- x&EiNɴd^ڸDzF~ƍNR'ӻA.wG=C?G?&JÛ'j Q@8 f͒PvvOĦ"]3) ''24 bVi4#GT⤤$٤Iꫯ"_9]" tRdt$( (@իWG4nΫSL2M1 1^Hʹ2\d2(D?:dfdgϞ5y{{ qSrad@^5ZTTeGG5VjkTU=<<D}KJ4bRRR 5Ghhj dh%B;r >zAVVV}[[.Zpr1&&'b}^^}Fcꊊz _܈9p&B1/+T1 V(MZЏ $LNDBu'|Z;>! A H7A/4е^/B(ˤRiTЄ?H ʟt&DȺPQ@`FP [l)/\@)^:%-l; |"V$c׹[5JPO `s+{ѨmIENDB`contextmenu/skins/classic/0000755000175000017500000000000012114675047015232 5ustar lunarlunarcontextmenu/skins/classic/messageactions.png0000644000175000017500000000502212114675047020744 0ustar lunarlunarPNG  IHDRZ6tEXtSoftwareAdobe ImageReadyqe< IDATxb? 0ϟ?E1dV" 怕Y`Z @p˙3g!R_?38t?Yϰ f{G1 {ûSw;9>?|] ܽ[_Y\Aȥ \{բG?wegۭA4alۿ?g-|(ˈLFFF0>r%":+A|zo?8ϟ?}b`Yz5Xket!defd=2щ=|oQ`M^Wܿ00zǟ ~10| aL9{a)?0gr5s@cPad`}{a 9Sv鬆, ubJ϶#}MeoaɁ-={VVfW_}bepgQZZ[[[0<n yϠdT4_&&&Hgy8 VCFW/&вV& ߾~c+'V=igͧ` bwyEћdYvMoT X >eo㫇$'Y0a }d'g&srX[ - ΐlA `QLB IP&iF%H7S&:َ2(?W&Vlz?,G &VKkQ>@%$Х "BV(EFqYՅnDU ZV%!2b4}&sӈA ;|s̙| \8JB*Id򍾙$ kv .Xtn ;NF$ *J)($qɤ< Qٍ>ltT*P(Mzť/9ص bSppbNקAynh1]`Z1L{gAIE^,*2dJ:TIJ̗uf~&c4]C~5V;n=lcd v ՚< F|N!Tt7I /f2P:M ឩTՖK  v chEQ?F-@S@}1/ˆw3ɚv?FvڙɞeJarfvuRSX)!J؂ffw+gBaW !sslmVn;^-:*[Чľw@8>lA/w216V b^S#7uR: k4ސgm@_Pa-y|#@#]$IM\m^3 ЍDFqk|dVXQHaVmf!B (LBhP ](HZh*ifA4U(:3"e Q%(=mgnptvVŒ_ݚwa:5l6}kmmM[BLOO/geel === "̟n7 |.222 ..!fZZZbu\;WF_sGIH(m$jM?w(^QGa |B>_r#vէiBm#R0 i a-?H+SEe!1ص1`C..:Ws WQ?YA[)l B˃ˌ>qX$5Q^<7*>+>+($MUE000P#Pye}!˾$5Hj g I0A~g6 u-8C\5$üüyX[-xrbz>`y65-<#>jM͇^!`h1Dnƽ%y1atFC/'My$.0 sqN_)QmTxp+M$"=*D{@I8 M5;9{wr<^շ<&1:nlH-^*'1\#%ǺKx'N% tFV0-&HBğt7 [ѿzbBxrJb=!Z J2ؚ.{ WkEyx,.3dF"?|s;T>zZ "|J y]]CP4 i*yb#n1nYXnn_xЎ{)IENDB`contextmenu/skins/classic/messageactions.gif0000644000175000017500000000303712114675047020731 0ustar lunarlunarGIF89aZiQ{zzz6j}G뛛nnnMŎ}4f|qqqCuwwYYY$$$ba3cCCC;n8l2b}}}򿿿WpRa{˵drܿψbŚ>EUCK\؁eIUkz2ae)1C{et4g7lzߨdɡHzkkkּ,,,mrۢԏH9l2a^5hՎձ⟘Krjhc}ԨR @7EPb.Cp7P S[I(H2j* f&Yf%50̘;rС#%$D+QBѡېǏ6 @(L ]LA]fæc˞Mltu0!FA!Ī@2'Cvlڱ&҂ POR`_ [th ]C*v/x;contextmenu/skins/classic/ie6hacks.css0000644000175000017500000000154412114675047017445 0ustar lunarlunar/** * ContextMenu plugin styles (IE6 hacks) */ #rcmContextMenu, #rcmFolderMenu, #rcmAddressMenu, #rcmGroupMenu { width: 220px; } #rcmContextMenu li.submenu, #rcmFolderMenu li.submenu, #rcmAddressMenu li.submenu, #rcmGroupMenu li.submenu { background-image: url(contexticons.gif); } #rcmContextMenu li a, #rcmFolderMenu li a, #rcmAddressMenu li a, #rcmGroupMenu li a { background-image: url(contexticons.gif); } #rcmContextMenu ul.moreacts li a { background-image: url(messageactions.gif); } #rcmFolderMenu .openfolder a { background-image: url(messageactions.gif); } #rcmAddressMenu .editcontact a { background-image: url(messageactions.gif); } #rcmContextMenu ul.folders li a, #rcmAddressMenu ul.folders li a { background-image: url(folders.gif); } #rcmContextMenu li div, #rcmAddressMenu li div { background-image: url(contexticons.gif); }contextmenu/skins/classic/folders.png0000644000175000017500000001124312114675047017377 0ustar lunarlunarPNG  IHDRHMtEXtSoftwareAdobe ImageReadyqe<EIDATxZwTUʩs(ih춀̚@QAqdgqHFdM*: *QD + ,4suUso|>.;{ι'ۂ,)b7k׮rm;<ҥ[ e˖3gP ؾ}A9&qk֬bmmm`G(` d||>+P\c)q=pѣ1~\%GR W3E'?t:]J%8_T*Xe{#({ "7D>x7.’ $N L-;>^,բ&ssq$>Ha8KswOn¨W!D/!&bmm}25vDr`.'vP$s=~wWT`x;YL[hU:#_^IP]W7J#TYy҄ ГMvД_c5/*Z 4+so^|#Db}@z:^nl<ψng#jY픃/߽:]f+"-Vp?\%Iso_aS8qlى !&ůIWE{;Kr }XY:pg8U`ؐ_t۽Pɗb;^q,Xpӂ =8bħ{%0T9 ?|*>(:ĥ#;Ӽy @ks}N^ܜ2aw8C쓞{>E"=/E;=J`!h@LdS!f7EEx7ܪgպ-X؏b Ώ?mA8K!P\o( \mp@3f Ə7AP >Kd*(D]asյ|g%\4R@ TD |٧cBQ";#@_@'2e*S6U)dV2"q`l1BV<\29euD ubӦ?sc?s$j"snzQf7zL ۃ#FRM؋3/HQG=X}t&0n82b(Q521ꅃs_>XAEVTj/HX `}m%n<$2srQR!oxVmbc?y! l9i67]LXGalln]ёͶVf5٦|2Sxy'QmüV K{WK?i`2!4 C3z7ǁ_ kaJmrlkbG`v,>]?n0lkJ=z*aeNj5DPUKJBkkk/@p`N]/  B6LesZg~όJ̔lyꩧ&pɒ%x3<98phT#Y1 !;Yw} QjW6f5U,Hːfǣ,9鳪7`iNN]m%v?;Q#QJj*,;v} ӧM)% Juzn/ G|qujj;p뵑]^r]aSY$†FS*Ee|B;3^KB2?KKN5멛[:=4ĝ'Le %.Z*lz/Z&V!'bfmk:vpcYL$oK~A}C9LXJ$B/D8P%Vɉ`^1f w}TjtDL7w@eOcg"Xg"ia }Q[XkFM+-0z{|EOWuvx2R|ȌWgF֖՚[՛if_ן]Ś@aYɧĉHHJiL~ޠMe;ufgi>gYʞ|]c>wc8=G»׭xhV1eKazQdip|cz؟X텩?g&큶_U{gAgq㽊YmmQutgaąP:wiFe #%S.ŻXܫ_ߠ`y\7ZDQmJ€rTr}g8nWџwmHz/}O1N|5|wPêʿXeVwtuRBH}QU=nWRy;{hbbht~\dpAX2⫢w~Y}V繹[GeTT̵Q^|˜zkt˞ȓNY⼑ŧu4cˁѤ!, H (TP ]!0l0`a‰D``  T`ZxjB()z5#<5"Cƅ FOxTPܘ::d9O` Өt ZՊ@4\U[&EWB \ ʹ{e#C h0a"Lr˘3k̹C.ӨOX@NNJ,DbK`E% Fc)t[Hw%]Sq 5bH`@ *RV X!@?|Q,? C PAE{`_(Bt`و$hfDf3\f@;`: D&$cHHABA79$L:$M"d>KVys.Ab$`A1h'g{ T@F$ 蠄gTp<$@$ 0!pFƀ 9DQ#}A'~, C"31 E0|ҁ?HL3 NTcf @J@"X*2 IMj Ԝ6`8jVg PF%J RpUpia0l!Y2` H,tgs<"pυ:V(Z6YL e-{ف(`lgwvf'0[b`a0MBP h|" t G48PY`j b?4h n& ;contextmenu/skins/classic/contextmenu.css0000644000175000017500000001421312114675047020316 0ustar lunarlunar/** * ContextMenu plugin styles */ .contextRow td, #mailboxlist li.contextRow, #directorylistbox li.contextRow { background-color: #EEEEEE; } #mailboxlist li.selected, #directorylistbox li.selected { background-color: #929292; } #rcmContextMenu, #rcmFolderMenu, #rcmAddressMenu, #rcmGroupMenu { padding-top: 3px; min-width: 220px; } #rcmContextMenu li, #rcmFolderMenu li, #rcmAddressMenu li, #rcmGroupMenu li { margin: 0; } #rcmContextMenu li ul, #rcmContextMenu li div, #rcmFolderMenu li ul, #rcmFolderMenu li div, #rcmAddressMenu li ul, #rcmAddressMenu li div, #rcmGroupMenu li ul, #rcmGroupMenu li div { position: absolute; top: 0px; left: 0px; width: auto; display: none; background-color: #F9F9F9; border: 1px solid #CCC; padding: 1px; z-index: 901; } #rcmContextMenu li.conmentitle, #rcmContextMenu li.submenu, #rcmFolderMenu li.conmentitle, #rcmFolderMenu li.submenu, #rcmAddressMenu li.conmentitle, #rcmAddressMenu li.submenu, #rcmGroupMenu li.conmentitle, #rcmGroupMenu li.submenu { padding: 2px 8px 3px 27px; cursor: default; } #rcmContextMenu li.sublink, #rcmFolderMenu li.sublink, #rcmAddressMenu li.sublink, #rcmGroupMenu li.sublink { padding: 0; } #rcmContextMenu li.submenu, #rcmFolderMenu li.submenu, #rcmAddressMenu li.submenu, #rcmGroupMenu li.submenu { position: relative; cursor: pointer; background: url(contexticons.png) no-repeat right 0; padding-right: 15px; } #rcmContextMenu li.replyacts, #rcmContextMenu li.forwardacts, #rcmAddressMenu li.exportacts { padding: 0 8px 0 0; } #rcmContextMenu li.markmessage a, #rcmAddressMenu li.contactgroup a { text-indent: 8px; } #rcmContextMenu li.submenu:hover, #rcmContextMenu li.sublink:hover a.mainlink, #rcmFolderMenu li.submenu:hover, #rcmFolderMenu li.sublink:hover a.mainlink, #rcmAddressMenu li.submenu:hover, #rcmAddressMenu li.sublink:hover a.mainlink, #rcmGroupMenu li.submenu:hover, #rcmGroupMenu li.sublink:hover a.mainlink { color: #fff; background-color: #CC0000; } #rcmContextMenu li a, #rcmFolderMenu li a, #rcmAddressMenu li a, #rcmGroupMenu li a { background: url(contexticons.png) no-repeat 7px 20px; } #rcmContextMenu li a.active:hover, #rcmFolderMenu li a.active:hover, #rcmAddressMenu li a.active:hover, #rcmGroupMenu li a.active:hover { color: #fff; background-color: #CC0000; } #rcmContextMenu a.disabled, #rcmFolderMenu a.disabled, #rcmAddressMenu a.disabled, #rcmGroupMenu a.disabled { color: #AAA; cursor: default; } #rcmContextMenu a.disabled:hover, #rcmFolderMenu a.disabled:hover, #rcmAddressMenu a.disabled:hover, #rcmGroupMenu a.disabled:hover { color: #AAA; background-color: transparent } #rcmContextMenu .read a { background-position: 7px -85px; } #rcmFolderMenu .readfolder a { background-position: 7px -85px; } #rcmContextMenu .unread a { background-position: 7px -136px; } #rcmContextMenu .flagged a { background-position: 7px -170px; } #rcmContextMenu .unflagged a { background-position: 7px -153px; } #rcmContextMenu .reply a, #rcmContextMenu .replyall a, #rcmContextMenu .replylist a { background-position: 7px -119px; } #rcmContextMenu .forwardinline a, #rcmContextMenu .forwardattachment a { background-position: 7px -102px; } #rcmContextMenu .delete a, #rcmAddressMenu .deletecontact a { background-position: 7px -187px; } #rcmFolderMenu .expunge a { background-position: 7px -255px; } #rcmFolderMenu .purge a { background-position: 7px -272px; } #rcmFolderMenu .collapseall a { background-position: 7px -204px; } #rcmFolderMenu .expandall a { background-position: 7px -220px; } #rcmContextMenu ul.moreacts li a { background: url(messageactions.png) no-repeat 5px 20px; } #rcmContextMenu ul.moreacts li.print a { background-position: 5px 1px; } #rcmContextMenu ul.moreacts li.source a { background-position: 5px -35px; } #rcmContextMenu ul.moreacts li.save a { background-position: 5px -17px; } #rcmContextMenu ul.moreacts li.open a { background-position: 5px -53px; } #rcmFolderMenu .openfolder a { background: url(messageactions.png) no-repeat 6px -53px; } #rcmContextMenu ul.moreacts li.edit a { background-position: 5px -71px; } #rcmAddressMenu .editcontact a { background: url(messageactions.png) no-repeat 6px -71px; } #rcmAddressMenu .composeto a { background-position: 8px -238px; } #rcmContextMenu ul.folders li a, #rcmAddressMenu ul.folders li a { background: url(folders.png) 5px 1px no-repeat; } #rcmContextMenu ul.folders li.inbox a { background-position: 5px -17px; } #rcmContextMenu ul.folders li.drafts a { background-position: 5px -36px; } #rcmContextMenu ul.folders li.sent a { background-position: 5px -54px; } #rcmContextMenu ul.folders li.junk a { background-position: 5px -73px; } #rcmContextMenu ul.folders li.trash a { background-position: 5px -90px; } #rcmAddressMenu ul.folders li.addressbook a { background-position: 5px -108px; } #rcmAddressMenu ul.folders li.contactgroup a { background-position: 5px -144px; } #rcmContextMenu div.popupmenu, #rcmFolderMenu div.popupmenu, #rcmAddressMenu div.popupmenu { height: 129px; padding: 0; } #rcmContextMenu ul.scrollable, #rcmFolderMenu ul.scrollable, #rcmAddressMenu ul.scrollable { top: 15px; height: 100px; overflow: hidden; border-top: 0; border-bottom: 0; margin: 0; } #rcmContextMenu li div, #rcmFolderMenu li div, #rcmAddressMenu li div { height: 12px; overflow: hidden; background: url(contexticons.png) #F9F9F9 no-repeat center 20px; } #rcmContextMenu li div.scroll_up_act, #rcmFolderMenu li div.scroll_up_act, #rcmAddressMenu li div.scroll_up_act { background-position: center -17px; border-bottom: 0; } #rcmContextMenu li div.scroll_up_pas, #rcmFolderMenu li div.scroll_up_pas, #rcmAddressMenu li div.scroll_up_pas { background-position: center -34px; border-bottom: 0; cursor: default; } #rcmContextMenu li div.scroll_down_act, #rcmFolderMenu li div.scroll_down_act, #rcmAddressMenu li div.scroll_down_act { top: 117px; background-position: center -51px; border-top: 0; } #rcmContextMenu li div.scroll_down_pas, #rcmFolderMenu li div.scroll_down_pas, #rcmAddressMenu li div.scroll_down_pas { top: 117px; background-position: center -68px; border-top: 0; cursor: default; }contextmenu/skins/classic/contexticons.png0000644000175000017500000001024512114675047020462 0ustar lunarlunarPNG  IHDR!.tEXtSoftwareAdobe ImageReadyqe<GIDATxb?iiia"L M|4Uadz^R3" Ԙô(bNYYDǏ Ro޾ f~=o"D"*0Q,5mڴ8`c$w*ˬYt6\'{aOHXhC d :&p@@>}zO;;YL`߳wo:"|@ 2 `1X>Ka% _s)@ 0l+3|Į.b̙3[@~,yl,8*0>}1z *Z~p? v[?| ڦ`ѱj n.[`h:b( (F `_0S'q` b?pF2Ŵ`cЮ d l<(PA @UX HQnwky{Pu&Z,|c{upEPi >P IҗAO`[@AX^^*2aZUUwf7#d?_3| {d9zII >0HKs2̰?n\F͛ j eX0o-Xq,9zrXt!HWAN @nX=@ؓt *Yo& VݻwleeePl3 ( 6o\!;.@ewl!!!kk @CNو:Zrh \@ET#E%@ d'ϑ@kzqM`y}H$e6#( u0q ޘ=f`wCW|;/LD9ZUl ?@(?H`+@@\ T60[y+Fw7~z_J>1/3l)FQ, d@kmd?K@ 7|,{q83/Ah wёsWOU7& M0G544lB3ݏrl7s2AXH Wwb0t:t>K2n߶Xs>|{   'F؊{jIpfb~F{o\a7 ."Y:k "gvUXdE"~ V/~e(C,z@G֟ʈP?L2*63^kRwv]K+ܹ}snAYͲGdD{20M{FX $ǎVO9 fURWzșҔqZ[JP(Y__?L ZMplj+[Jy<mcEwhX &ioajB}mqJ@bIQAC:̡tG|,g&-r|$DhBQmąr"@y^r_w9! W{]ϯ/uΝ:S6 Ã)g]έ YΜi߾{2&Әot-0RiʩJt Dt',nnpގNƖ^__>W-uH4!u6ΐk#mS5NƉ,)Ps WR .[ ֶ"yngn>{IJTe1?y=xt/ip:tPjP5̚df:#:$ 5@KJ6t=]gxy{ɥ h;aN STBՑwNj9gIs|+У"=zbejPr:ػd{ZV[? 2u ?)/UB! p==>7u wn8Qv~EUUP+Epf j5;; E /)(@o^F>㥋}#8G=hY6}Ql9)bv ]]w$]#\lCGIl/qGWXc.˩N GݢBn޹@MPDIGT ?hc(B=m!B @A g$5Q%1)_PiLPFGV?0ȗ& {5ڃWn{:soow{%ĖI{ݝ73ޛ7;r갦}{^1m7sssݻf5cbnr.& ۧ$F#a,KI2RXu2$#*gZ[Ӗ:Q]]Hے15mi6wFĺ:KiR~[QlS$fH{C/ J"_[}q/Y{Vͦ])|lSa I2^kl%C`d_T:Wm \pybyrHbFfqVI29u66!ؽ!w}k.;fr!X˥8 U{$4Q "cA'O\we1;H&VXj3,ݴgi#M{0i:իc$9RA\lf˜{v9C*LGёSX=Q!@y>O*P7?  9-ODnct2h?U; Y*B?z"@O 6‡aU|B̷ᔴma,}2fWi7)᫛5g6㢺r|~}S)!SCӅwQ,Ar4N !dw --YEo$1hYIbgƍr34^ rf=-: IexNLςx4et|ŚV^љJwC"ˤF .f:' iXErX]Y{KXĖYx\cyT#h%"y432=2XzbXwX}YbXHMDi  ;YNYx`V}KlC}QbA1H!ƮvՐd ̀fE X^#IeG7[Z1(YYY)s];X4ƇŢHSE$(6'ޙFp2&*+<{icL٦lݺ_wؑa6(I \UUUTY\NI }䬩*Ƨo:8;p~VvNcqqQ`N!c ׼{z5OOx+rbˡےOUL7ȷN5/,[?Cx #d "9P&6}KGC=O{҄/]o.?Kmm0?ԟ= 'HLZAZ;K-nl?fӎsgJerΜE%ťT#cGd9N^oH^nkh#R.N䙏/nzVzb폾^[Wvn^Q[  NW~֢]Z= H`K 6*pNSm5=rn#pXU-"H^m͟[qf8BxM!F7}@`D:s$LCz"Rk$U6%1k@{wdYuIENDB`contextmenu/skins/classic/contexticons.gif0000644000175000017500000000427612114675047020452 0ustar lunarlunarGIF89a!?޸HCDۮAO󬬬V#5'<3Цӓ٪@{箮V詡R5|Js4M򢢢8 qǃ@ ʆn I#cH >v`"HA0RH~!dH')hBaO0I,B4k$%7p[%/h@@@ U' Us•<yGaud-pq7aP /)/ܑH2pCB0E?(DɛNsZp΀=;"C Q*>*PR @INrӛ!iIyRttcA0.44: ^LT2D9OuwK]bTF@*RNԫ Pzԉ2*]i9;contextmenu/package.xml0000644000175000017500000000751212114675047014604 0ustar lunarlunar contextmenu http://github.com/JohnDoh/Roundcube-Plugin-Context-Menu/ Adds context menus with common tasks to various parts of Roundcube Adds context menus to the message list, folder list and address book. Menu includes the abilities mark messages as read/unread, delete, reply and forward. Philip Weir JohnDoh roundcube@tehinterweb.co.uk yes 2013-02-24 1.10 1.10 stable stable GNU GPLv3+ - 5.2.1 1.7.0 contextmenu/localization/0000755000175000017500000000000012114675047015152 5ustar lunarlunarcontextmenu/localization/zh_TW.inc0000644000175000017500000000036312114675047016702 0ustar lunarlunarcontextmenu/localization/uk_UA.inc0000644000175000017500000000052112114675047016647 0ustar lunarlunarcontextmenu/localization/tr_TR.inc0000644000175000017500000000044512114675047016702 0ustar lunarlunarcontextmenu/localization/sv_SE.inc0000644000175000017500000000041112114675047016660 0ustar lunarlunarcontextmenu/localization/ru_RU.inc0000644000175000017500000000052512114675047016703 0ustar lunarlunarcontextmenu/localization/ro_RO.inc0000644000175000017500000000042512114675047016666 0ustar lunarlunarcontextmenu/localization/pt_BR.inc0000644000175000017500000000042712114675047016656 0ustar lunarlunarcontextmenu/localization/pl_PL.inc0000644000175000017500000000043712114675047016657 0ustar lunarlunarcontextmenu/localization/nl_NL.inc0000644000175000017500000000042712114675047016652 0ustar lunarlunarcontextmenu/localization/it_IT.inc0000644000175000017500000000043012114675047016652 0ustar lunarlunarcontextmenu/localization/hu_HU.inc0000644000175000017500000000042712114675047016660 0ustar lunarlunarcontextmenu/localization/gl_ES.inc0000644000175000017500000000043312114675047016636 0ustar lunarlunarcontextmenu/localization/fr_FR.inc0000644000175000017500000000037712114675047016652 0ustar lunarlunarcontextmenu/localization/es_ES.inc0000644000175000017500000000043012114675047016640 0ustar lunarlunarcontextmenu/localization/en_US.inc0000644000175000017500000000037512114675047016663 0ustar lunarlunarcontextmenu/localization/en_GB.inc0000644000175000017500000000037512114675047016624 0ustar lunarlunarcontextmenu/localization/de_DE.inc0000644000175000017500000000044112114675047016604 0ustar lunarlunarcontextmenu/localization/de_CH.inc0000644000175000017500000000044112114675047016606 0ustar lunarlunarcontextmenu/localization/da_DK.inc0000644000175000017500000000042112114675047016604 0ustar lunarlunarcontextmenu/localization/cs_CZ.inc0000644000175000017500000000043412114675047016647 0ustar lunarlunarcontextmenu/localization/ca_ES.inc0000644000175000017500000000042712114675047016622 0ustar lunarlunarcontextmenu/jquery.contextMenu.js0000644000175000017500000001732412114675047016656 0ustar lunarlunar// jQuery Context Menu Plugin // // Version 1.01 // // Cory S.N. LaViska // A Beautiful Site (http://abeautifulsite.net/) // // More info: http://abeautifulsite.net/2008/09/jquery-context-menu-plugin/ // // Terms of Use // // This plugin is dual-licensed under the GNU General Public License // and the MIT License and is copyright A Beautiful Site, LLC. // // Modified by Philip Weir: // Added highlighting of selected row and submenu support // Added sub menu functions // Added bind to contextmenu event // Adjust menu position for screen boundaries // Shrunk with Google Closure Compiler (Simple Optimizations) jQuery&&function(){$.extend($.fn,{contextMenu:function(a,e){if(void 0==a.menu)return!1;void 0==a.inSpeed&&(a.inSpeed=150);void 0==a.outSpeed&&(a.outSpeed=75);0==a.inSpeed&&(a.inSpeed=-1);0==a.outSpeed&&(a.outSpeed=-1);$(this).each(function(){var b=$(this),l=$(b).offset();$("#"+a.menu).addClass("contextMenu");$(this).mousedown(function(m){$(this).mouseup(function(g){var d=$(this);$(this).unbind("mouseup");if(2==m.button){$(".contextRow").removeClass("contextRow");$(".contextMenu").hide();d.addClass("contextRow"); rcm_update_options(d);var f=$("#"+a.menu);$(this).submenu_render(f);if($(b).hasClass("disabled"))return!1;var c={},h,j;self.innerHeight?(c.pageYOffset=self.pageYOffset,c.pageXOffset=self.pageXOffset,c.innerHeight=self.innerHeight,c.innerWidth=self.innerWidth):document.documentElement&&document.documentElement.clientHeight?(c.pageYOffset=document.documentElement.scrollTop,c.pageXOffset=document.documentElement.scrollLeft,c.innerHeight=document.documentElement.clientHeight,c.innerWidth=document.documentElement.clientWidth): document.body&&(c.pageYOffset=document.body.scrollTop,c.pageXOffset=document.body.scrollLeft,c.innerHeight=document.body.clientHeight,c.innerWidth=document.body.clientWidth);g.pageX?h=g.pageX:h=g.clientX+c.scrollLeft;g.pageY?j=g.pageY:j=g.clientY+c.scrollTop;h+$(f).width()+10>$(document).width()&&0<$(document).width()-$(f).width()-10&&(h=$(document).width()-$(f).width()-10);j+$(f).height()+10>$(document).height()&&0<$(document).height()-$(f).height()-10&&(j=$(document).height()-$(f).height()-10); $(document).unbind("click",$(this).document_click);$("#"+a.menu+" li ul").hide();$("#"+a.menu+" li div").hide();$(f).css({top:j,left:h}).fadeIn(a.inSpeed);$(document).bind("keypress",{menu:f},$(this).menu_keypress);$("#"+a.menu).find("a").unbind("click");$("#"+a.menu).find("li a:not(.disabled)").click(function(){$(document).unbind("click",$(this).document_click).unbind("keypress",$(this).menu_keypress);$(".contextMenu").hide();d.removeClass("contextRow");e&&e($(this).attr("href").substr(1),$(d),{x:h- l.left,y:j-l.top,docX:h,docY:j});return!1});setTimeout(function(){$(document).bind("click",{menu:f,o:a},$(this).document_click);$("iframe").load(function(){(this.contentDocument?this.contentDocument:this.contentWindow?this.contentWindow.document:null).onclick=function(){$(document).click()}});$("iframe").contents().mouseup(function(){$(document).click()})},0)}rcmail.drag_active||(g.cancelBubble=!0,g.stopPropagation&&g.stopPropagation())})});var d,k;$("#"+a.menu).children("li").mouseenter(function(){if($(this).hasClass("submenu")){if($(this).hasClass("submenu")&& !d&&!$(this).children("*:not(a, span)").is(":visible")){window.clearTimeout(k);k=null;var b=this;d=window.setTimeout(function(){$("#"+a.menu).children("li.submenu").children("div.popupmenu").children("ul.scrollable").scrollTop(0);$("#"+a.menu).children("li.submenu").children("div.popupmenu").children("div.scroll_up_act").addClass("scroll_up_pas").removeClass("scroll_up_act");$("#"+a.menu).children("li.submenu").children("div.popupmenu").children("div.scroll_down_pas").addClass("scroll_down_act").removeClass("scroll_down_pas"); $("#"+a.menu).children("li.submenu").children("*:not(a, span)").hide();doc_height=$(document).height();$(b).children("*:not(a, span)").css({left:$("#"+a.menu).width()-2,top:0});$(b).children("*:not(a, span)").show();$(b).children("*:not(a, span)").offset().left+$(b).children("*:not(a, span)").width()+10>$(document).width()&&0<$(document).width()-$(b).children("*:not(a, span)").width()-$("#"+a.menu).width()&&$(b).children("*:not(a, span)").css({left:-1*$(b).children("*:not(a, span)").width()});y=-1* ($(b).children("*:not(a, span)").offset().top+$(b).children("*:not(a, span)").height()+10-doc_height);0>y&&0<$(b).children("*:not(a, span)").offset().top+y&&$(b).children("*:not(a, span)").css({top:y});$(b).children("div.popupmenu").length&&$(b).children("div.popupmenu").children().show();d=null},a.submenu_delay)}}else k=window.setTimeout(function(){$("#"+a.menu).children("li.submenu").children("*:not(a, span)").hide();k=null},a.submenu_delay)});$("#"+a.menu).children("li.submenu").mouseleave(function(){window.clearTimeout(d); d=null});$(this).mouseleave(function(){window.clearTimeout(d);d=null});$("#"+a.menu).each(function(){$(this).attr("unselectable","on");$(this).css("user-select","none");$(this).on("selectstart",!1)});$(b).add($("ul.contextMenu")).bind("contextmenu",function(){return!1})});return $(this)},disableContextMenuItems:function(a){if(void 0==a)return $(this).find("a").addClass("disabled"),$(this);$(this).each(function(){if(void 0!=a)for(var e=a.split(","),b=0;be&&$(this).parent().children("div.scroll_down_act").click()},menu_keypress:function(a){switch(a.keyCode){case 13:$(a.data.menu).find("li a.hover").trigger("click"); break;case 27:$(document).trigger("click")}},document_click:function(a){$(document).unbind("click",$(this).document_click).unbind("keypress",$(this).menu_keypress);$(".contextRow").removeClass("contextRow");$(a.data.menu).fadeOut(a.data.o.outSpeed);return!1}})}(jQuery);contextmenu/contextmenu.php0000644000175000017500000003733612114675047015560 0ustar lunarlunartask == 'mail' && ($rcmail->action == '' || $rcmail->action == 'show')) $this->add_hook('render_mailboxlist', array($this, 'show_mailbox_menu')); elseif ($rcmail->task == 'addressbook' && $rcmail->action == '') $this->add_hook('addressbooks_list', array($this, 'show_addressbook_menu')); $this->register_action('plugin.contextmenu.messagecount', array($this, 'messagecount')); $this->register_action('plugin.contextmenu.readfolder', array($this, 'readfolder')); } public function messagecount() { $mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_GET); $this->api->output->set_env('messagecount', rcube::get_instance()->storage->count($mbox)); $this->api->output->send(); } public function readfolder() { $storage = rcube::get_instance()->storage; $cbox = rcube_utils::get_input_value('_cur', rcube_utils::INPUT_GET); $mbox = rcube_utils::get_input_value('_mbox', rcube_utils::INPUT_GET); $oact = rcube_utils::get_input_value('_oact', rcube_utils::INPUT_GET); $uids = $storage->search_once($mbox, 'ALL UNSEEN', true); if ($uids->is_empty()) return false; $storage->set_flag($uids->get(), 'SEEN', $mbox); if ($cbox == $mbox && $oact == '') $this->api->output->command('toggle_read_status', 'read', $uids->get()); rcmail_send_unread_count($mbox, true); $this->api->output->send(); } public function show_mailbox_menu($args) { $rcmail = rcube::get_instance(); $this->add_texts('localization/'); $rcmail->output->add_label('nomessagesfound'); $this->include_script('jquery.contextMenu.js'); $this->include_script('jquery.mousewheel.js'); $this->include_script('contextmenu.js'); $this->include_stylesheet($this->local_skin_path() . '/contextmenu.css'); if ($rcmail->output->browser->ie && $rcmail->output->browser->ver == 6) $this->include_stylesheet($this->local_skin_path() . '/ie6hacks.css'); $out = ''; // message list menu if ($rcmail->action == '') { $li = ''; $li .= html::tag('li', array('class' => 'conmentitle'), html::span(null, rcmail::Q($this->gettext('markmessages')))); $li .= html::tag('li', array('class' => 'markmessage read'), html::a(array('href' => "#read", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('markread'))))); $li .= html::tag('li', array('class' => 'markmessage unread'), html::a(array('href' => "#unread", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('markunread'))))); $li .= html::tag('li', array('class' => 'markmessage flagged'), html::a(array('href' => "#flagged", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('markflagged'))))); $li .= html::tag('li', array('class' => 'markmessage unflagged separator_below'), html::a(array('href' => "#unflagged", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('markunflagged'))))); $li .= html::tag('li', array('class' => 'reply'), html::a(array('href' => "#reply", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('replytomessage'))))); $lis = ''; $lis .= html::tag('li', array('class' => 'replyall'), html::a(array('href' => "#reply-all", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('replytoallmessage'))))); $lis .= html::tag('li', array('class' => 'replylist'), html::a(array('href' => "#reply-list", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('replylist'))))); $li .= html::tag('li', array('class' => 'submenu replyacts'), html::a(array('href' => "#reply-all", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('replyall')))) . html::tag('ul', array('class' => 'popupmenu toolbarmenu replyacts'), $lis)); $lis = ''; $lis .= html::tag('li', array('class' => 'forwardinline'), html::a(array('href' => "#forward-inline", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('forwardinline'))))); $lis .= html::tag('li', array('class' => 'forwardattachment'), html::a(array('href' => "#forward-attachment", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('forwardattachment'))))); $li .= html::tag('li', array('class' => 'submenu forwardacts'), html::a(array('href' => "#forward-inline", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('forward')))) . html::tag('ul', array('class' => 'popupmenu toolbarmenu forwardacts'), $lis)); //$rcmail = rcmail::get_instance(); //if (!$rcmail->config->get('flag_for_deletion', false) && $rcmail->config->get('trash_mbox') && $_SESSION['mbox'] != $rcmail->config->get('trash_mbox')) // $li .= html::tag('li', array('class' => 'delete separator_below'), html::a(array('href' => "#delete", 'id' => 'rcm_delete', 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('movemessagetotrash'))))); //else $li .= html::tag('li', array('class' => 'delete separator_below'), html::a(array('href' => "#delete", 'id' => 'rcm_delete', 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('deletemessage'))))); $li .= html::tag('li', array('class' => 'submenu moveto'), html::span(null, rcmail::Q($this->gettext('moveto'))) . $this->_gen_folder_list($args['list'], '#moveto')); $lis = ''; $lis .= html::tag('li', array('class' => 'print'), html::a(array('href' => "#print", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('printmessage'))))); $lis .= html::tag('li', array('class' => 'save'), html::a(array('href' => "#download", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('emlsave'))))); $lis .= html::tag('li', array('class' => 'edit'), html::a(array('href' => "#edit", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('editasnew'))))); $lis .= html::tag('li', array('class' => 'source separator_below'), html::a(array('href' => "#viewsource", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('viewsource'))))); $lis .= html::tag('li', array('class' => 'open'), html::a(array('href' => "#open", 'id' => 'rcm_open', 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('openinextwin'))))); $li .= html::tag('li', array('class' => 'submenu moreacts'), html::span(null, rcmail::Q($this->gettext('moreactions'))) . html::tag('ul', array('class' => 'popupmenu toolbarmenu moreacts'), $lis)); $out .= html::tag('ul', array('id' => 'rcmContextMenu', 'class' => 'popupmenu toolbarmenu'), $li); } // folder list menu $li = ''; $li .= html::tag('li', array('class' => 'readfolder separator_below'), html::a(array('href' => "#readfolder", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('markreadfolder'))))); $li .= html::tag('li', array('class' => 'expunge'), html::a(array('href' => "#expunge", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('compact'))))); $li .= html::tag('li', array('class' => 'purge separator_below'), html::a(array('href' => "#purge", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('empty'))))); $li .= html::tag('li', array('class' => 'collapseall'), html::a(array('href' => "#collapseall", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('collapseall'))))); $li .= html::tag('li', array('class' => 'expandall separator_below'), html::a(array('href' => "#expandall", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('expandall'))))); $li .= html::tag('li', array('class' => 'openfolder'), html::a(array('href' => "#openfolder", 'id' => 'rcm_openfolder', 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('openinextwin'))))); $out .= html::tag('ul', array('id' => 'rcmFolderMenu', 'class' => 'popupmenu toolbarmenu'), $li); $this->api->output->add_footer(html::div(null , $out)); if ($rcmail->action == 'show') $this->api->output->set_env('delimiter', $rcmail->storage->get_hierarchy_delimiter()); } public function show_addressbook_menu($args) { $rcmail = rcube::get_instance(); $this->add_texts('localization/'); $this->include_script('jquery.contextMenu.js'); $this->include_script('jquery.mousewheel.js'); $this->include_stylesheet($this->local_skin_path() . '/contextmenu.css'); $this->include_script('contextmenu.js'); $out = ''; // contact list menu $li = ''; $li .= html::tag('li', array('class' => 'composeto separator_below'), html::a(array('href' => "#compose", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('composeto'))))); $li .= html::tag('li', array('class' => 'editcontact'), html::a(array('href' => "#edit", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('editcontact'))))); $li .= html::tag('li', array('class' => 'deletecontact'), html::a(array('href' => "#delete", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('deletecontact'))))); $li .= html::tag('li', array('class' => 'removefromgroup'), html::a(array('href' => "#group-remove-selected", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('groupremoveselected'))))); if ($lis = $this->_gen_addressbooks_list($args['sources'], '#moveto')) $li .= html::tag('li', array('class' => 'submenu separator_above'), html::span(null, rcmail::Q($this->gettext('copyto'))) . $lis); $out .= html::tag('ul', array('id' => 'rcmAddressMenu', 'class' => 'popupmenu toolbarmenu'), $li); // contact group menu $li = ''; $li .= html::tag('li', array('class' => 'groupcreate'), html::a(array('href' => "#group-create", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('newcontactgroup'))))); $li .= html::tag('li', array('class' => 'grouprename'), html::a(array('href' => "#group-rename", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('grouprename'))))); $li .= html::tag('li', array('class' => 'groupdelete'), html::a(array('href' => "#group-delete", 'class' => 'active'), html::span(null, rcmail::Q($this->gettext('groupdelete'))))); $out .= html::tag('ul', array('id' => 'rcmGroupMenu', 'class' => 'popupmenu toolbarmenu'), $li); $this->api->output->add_footer(html::div(null , $out)); } // based on rcmail->render_folder_tree_html() private function _gen_folder_list($arrFolders, $command, $nestLevel = 0, &$folderTotal = 0) { $rcmail = rcube::get_instance(); $maxlength = 35; $realnames = false; $out = ''; foreach ($arrFolders as $key => $folder) { $title = null; if (($folder_class = $rcmail->folder_classname($folder['id'])) && !$realnames) { $foldername = $rcmail->gettext($folder_class); } else { $foldername = $folder['name']; // shorten the folder name to a given length if ($maxlength && $maxlength > 1) { $fname = abbreviate_string($foldername, $maxlength); if ($fname != $foldername) $title = $foldername; $foldername = $fname; } } // make folder name safe for ids and class names $folder_id = asciiwords($folder['id'], true, '_'); $classes = array(); // set special class for Sent, Drafts, Trash and Junk if ($folder['id'] == $rcmail->config->get('sent_mbox')) $classes[] = 'sent'; else if ($folder['id'] == $rcmail->config->get('drafts_mbox')) $classes[] = 'drafts'; else if ($folder['id'] == $rcmail->config->get('trash_mbox')) $classes[] = 'trash'; else if ($folder['id'] == $rcmail->config->get('junk_mbox')) $classes[] = 'junk'; else if ($folder['id'] == 'INBOX') $classes[] = 'inbox'; else $classes[] = '_'.asciiwords($folder_class ? $folder_class : strtolower($folder['id']), true); if ($folder['virtual']) $classes[] = 'virtual'; if ($nestLevel > 0) $classes[] = 'subfolder'; $out .= html::tag('li', array('class' => join(' ', $classes)), html::a(array('href' => $command, 'onclick' => "rcm_set_dest_folder('". rcmail::JQ($folder['id']) ."')", 'class' => 'active', 'title' => $title), html::span(null, str_repeat('  ', $nestLevel) . rcmail::Q($foldername)))); if (!empty($folder['folders'])) $out .= $this->_gen_folder_list($folder['folders'], $command, $nestLevel+1, $folderTotal); $folderTotal++; } if ($nestLevel == 0) { if ($folderTotal > 5) { $out = html::tag('ul', array('class' => 'toolbarmenu folders scrollable'), $out); $out = html::tag('div', array('class' => 'scroll_up_pas'), '') . $out . html::tag('div', array('class' => 'scroll_down_act'), ''); $out = html::tag('div', array('class' => 'popupmenu'), $out); } else { $out = html::tag('ul', array('class' => 'popupmenu toolbarmenu folders'), $out); } } return $out; } // based on rcmail_directory_list() private function _gen_addressbooks_list($arrBooks, $command) { $rcmail = rcube::get_instance(); $groupTotal = 0; $maxlength = 35; $maxlength_grp = 33; $out = ''; // address books foreach ($arrBooks as $j => $source) { $title = null; $id = $source['id'] ? $source['id'] : $j; $bookname = !empty($source['name']) ? rcmail::Q($source['name']) : rcmail::Q($id); // shorten the address book name to a given length if ($maxlength && $maxlength > 1) { $bname = abbreviate_string($bookname, $maxlength); if ($bname != $bookname) $title = $bookname; $bookname = $bname; } if ($source['readonly']) $out .= html::tag('li', array('id' => 'rcm_contextaddr_' . $id, 'class' => 'addressbook disabled'), html::a(array('href' => $command, 'id' => 'rcm_contextgrps_'. rcmail::JQ($id), 'onclick' => "rcm_set_dest_book('" . rcmail::JQ($id) ."', '" . rcmail::JQ($id) ."', null)", 'class' => 'active', 'title' => $title), html::span(null, rcmail::Q($bookname)))); else $out .= html::tag('li', array('id' => 'rcm_contextaddr_' . $id, 'class' => 'addressbook'), html::a(array('href' => $command, 'id' => 'rcm_contextgrps_'. rcmail::JQ($id), 'onclick' => "rcm_set_dest_book('" . rcmail::JQ($id) ."', '" . rcmail::JQ($id) ."', null)", 'class' => 'active', 'title' => $title), html::span(null, rcmail::Q($bookname)))); // contact groups if ($source['groups']) { $groups = $rcmail->get_address_book($source['id'])->list_groups(); foreach ($groups as $group) { $title = null; $gid = 'G' . rcube_utils::html_identifier($id . $group['ID']); $groupname = !empty($group['name']) ? rcmail::Q($group['name']) : rcmail::Q($gid); // shorten the address book name to a given length if ($maxlength_grp && $maxlength_grp > 1) { $gname = abbreviate_string($groupname, $maxlength_grp); if ($gname != $groupname) $title = $groupname; $groupname = $gname; } if ($source['readonly']) $out .= html::tag('li', array('class' => 'contactgroup disabled'), html::a(array('href' => $command, 'id' => 'rcm_contextgrps_'. rcmail::JQ($gid), 'onclick' => "rcm_set_dest_book('" . rcmail::JQ($gid) . "', '" . rcmail::JQ($id) . "', '" . rcmail::JQ($group['ID']) ."')", 'class' => 'active', 'title' => $title), html::span(null, rcmail::Q($groupname)))); else $out .= html::tag('li', array('class' => 'contactgroup'), html::a(array('href' => $command, 'id' => 'rcm_contextgrps_'. rcmail::JQ($gid), 'onclick' => "rcm_set_dest_book('" . rcmail::JQ($gid) . "', '" . rcmail::JQ($id) . "', '" . rcmail::JQ($group['ID']) ."')", 'class' => 'active', 'title' => $title), html::span(null, rcmail::Q($groupname)))); $groupTotal++; } } $groupTotal++; } if ($groupTotal > 5) { $out = html::tag('ul', array('id' => 'rcm_contextgrps', 'class' => 'toolbarmenu folders scrollable'), $out); $out = html::tag('div', array('class' => 'scroll_up_pas'), '') . $out . html::tag('div', array('class' => 'scroll_down_act'), ''); $out = html::tag('div', array('class' => 'popupmenu'), $out); } else { $out = html::tag('ul', array('id' => 'rcm_contextgrps', 'class' => 'popupmenu toolbarmenu folders'), $out); } return $out; } } ?>contextmenu/contextmenu.js0000644000175000017500000004642112114675047015400 0ustar lunarlunar/** * ContextMenu plugin script */ rcube_webmail.prototype.contextmenu_command_handlers = new Object(); rcube_webmail.prototype.contextmenu_disable_multi = new Array('#reply','#reply-all','#reply-list','#forward-inline','#print','#edit','#viewsource','#download','#open','#edit'); function rcm_contextmenu_update() { //if (!rcmail.env.flag_for_deletion && rcmail.env.trash_mailbox && rcmail.env.mailbox != rcmail.env.trash_mailbox) // $("#rcm_delete").html('' + rcmail.gettext('movemessagetotrash') + ''); //else // $("#rcm_delete").html('' + rcmail.gettext('deletemessage') + ''); } function rcm_contextmenu_init(row) { $("#" + row).contextMenu({ menu: 'rcmContextMenu', submenu_delay: 400 }, function(command, el, pos) { var matches = String($(el).attr('id')).match(/rcmrow([a-z0-9\-_=]+)/i); if ($(el) && matches) { var prev_uid = rcmail.env.uid; if (rcmail.message_list.selection.length <= 1 || !rcmail.message_list.in_selection(matches[1])) rcmail.env.uid = matches[1]; // fix command string in IE if (command.indexOf("#") > 0) command = command.substr(command.indexOf("#") + 1); // enable the required command cmd = (command == 'read' || command == 'unread' || command == 'flagged' || command == 'unflagged') ? 'mark' : command; var prev_command = rcmail.commands[cmd]; rcmail.enable_command(cmd, true); // process external commands if (typeof rcmail.contextmenu_command_handlers[command] == 'function') { rcmail.contextmenu_command_handlers[command](command, el, pos); } else if (typeof rcmail.contextmenu_command_handlers[command] == 'string') { window[rcmail.contextmenu_command_handlers[command]](command, el, pos); } else { switch (command) { case 'read': case 'unread': case 'flagged': case 'unflagged': rcmail.command('mark', command, $(el)); break; case 'reply': case 'reply-all': case 'reply-list': case 'forward-inline': case 'forward-attachment': case 'print': case 'download': case 'viewsource': rcmail.command(command, '', $(el)); break; case 'edit': rcmail.command(command, 'new', $(el)); break; case 'open': rcmail.command(command, '', rcube_find_object('rcm_open')); rcmail.sourcewin = window.open(rcube_find_object('rcm_open').href); if (rcmail.sourcewin) window.setTimeout(function() { rcmail.sourcewin.focus(); }, 20); rcube_find_object('rcm_open').href = '#open'; break; case 'delete': case 'moveto': if (command == 'moveto' && rcmail.env.rcm_destfolder == rcmail.env.mailbox) return; var prev_sel = null; // also select childs of (collapsed) threads if (rcmail.env.uid) { if (!rcmail.message_list.in_selection(rcmail.env.uid)) { prev_sel = rcmail.message_list.get_selection(); rcmail.message_list.select_row(rcmail.env.uid); } if (rcmail.message_list.rows[rcmail.env.uid].has_children && !rcmail.message_list.rows[rcmail.env.uid].expanded) rcmail.message_list.select_childs(rcmail.env.uid); rcmail.env.uid = null; } rcmail.command(command, rcmail.env.rcm_destfolder, $(el)); if (prev_sel) { rcmail.message_list.clear_selection(); for (var i in prev_sel) rcmail.message_list.select_row(prev_sel[i], CONTROL_KEY); } delete rcmail.env.rcm_destfolder; break; } } rcmail.enable_command(cmd, prev_command); rcmail.env.uid = prev_uid; } }); } function rcm_set_dest_folder(folder) { rcmail.env.rcm_destfolder = folder; } function rcm_contextmenu_register_command(command, callback, label, pos, sep, multi, newSub, menu, liclass) { if (!menu) menu = $('#rcmContextMenu'); if (!liclass) liclass = command; if (typeof label != 'string') { var menuItem = label.children('li'); } else { var menuItem = $('
  • ').addClass(liclass); $('').attr('href', '#' + command).addClass('active').html('' + rcmail.gettext(label) + '').appendTo(menuItem); } rcmail.contextmenu_command_handlers[command] = callback; if (pos && menu.children('li.' + pos) && newSub) { subMenu = menu.children('li.' + pos); subMenu.addClass('submenu'); var mainLink = null; if (subMenu.children('a') && !subMenu.hasClass('sublink')) { subMenu.addClass('sublink'); var mainLink = $('
  • ').addClass(pos); subMenu.children('a').clone().appendTo(mainLink) subMenu.children('a').addClass('mainlink'); } var newMenu = $('