diff options
author | Andy Wermke <andy@dev.next-step-software.com> | 2013-04-04 16:10:23 +0200 |
---|---|---|
committer | Andy Wermke <andy@dev.next-step-software.com> | 2013-04-04 16:10:23 +0200 |
commit | 92cd7f34b07e86062f2c024039e3309768b48ce6 (patch) | |
tree | 63b9f39280ebcab80742d9f2b4db6a139c1791e1 /skins | |
parent | 029d18f13bcf01aa2f1f08dbdfc6400c081bf7cb (diff) | |
parent | 443b92a7ee19e321b350750240e0fc54ec5be357 (diff) |
Merge branch 'master' of https://github.com/roundcube/roundcubemail
Diffstat (limited to 'skins')
46 files changed, 1319 insertions, 359 deletions
diff --git a/skins/classic/addressbook.css b/skins/classic/addressbook.css index a398325b4..5afa4592f 100644 --- a/skins/classic/addressbook.css +++ b/skins/classic/addressbook.css @@ -21,7 +21,7 @@ width: 32px; height: 32px; padding: 0; - margin-right: 10px; + margin: 0 5px; overflow: hidden; background: url(images/abook_toolbar.png) 0 0 no-repeat transparent; opacity: 0.99; /* this is needed to make buttons appear correctly in Chrome */ @@ -67,6 +67,14 @@ background-position: -128px -32px; } +#abooktoolbar a.exportAll { + background-position: -128px 0; +} + +#abooktoolbar a.exportAllSel { + background-position: -128px -32px; +} + #abooktoolbar span.separator { width: 5px; background-position: -162px 0; @@ -110,7 +118,7 @@ #directorylistbox input { - margin: 0px; + margin: 0 0 0 20px; font-size: 11px; width: 90%; } @@ -136,7 +144,8 @@ width: 280px; } -#directorylist +#directorylist, +#directorylist li ul { list-style: none; margin: 0; @@ -144,11 +153,15 @@ background-color: #FFFFFF; } +#directorylist li ul +{ + border-top: 1px solid #EBEBEB; +} + #directorylist li { display: block; font-size: 11px; - background: url(images/icons/folders.png) 5px -108px no-repeat; border-bottom: 1px solid #EBEBEB; white-space: nowrap; } @@ -160,31 +173,37 @@ padding-left: 25px; padding-top: 2px; padding-bottom: 2px; + height: 16px; text-decoration: none; white-space: nowrap; + background: url(images/icons/folders.png) 5px -108px no-repeat; } -#directorylist li.contactgroup +#directorylist li ul li a { - padding-left: 15px; - background-position: 20px -143px; + padding-left: 45px; } -#directorylist li.contactsearch +#directorylist li ul li:last-child { - background-position: 6px -162px; + border-bottom: 0; } -#directorylist li.selected +#directorylist li.contactgroup a { - background-color: #929292; - border-bottom: 1px solid #898989; + background-position: 22px -143px; } -#directorylist li.selected a +#directorylist li.contactsearch a +{ + background-position: 6px -162px; +} + +#directorylist li.selected > a { color: #FFF; font-weight: bold; + background-color: #929292; } #directorylist li.droptarget diff --git a/skins/classic/common.css b/skins/classic/common.css index 8115c1bfc..1f62fbe07 100644 --- a/skins/classic/common.css +++ b/skins/classic/common.css @@ -20,7 +20,7 @@ body.extwin margin: 10px; } -td, th, div, p, select, input, textarea +select, input, textarea { font-size: 12px; font-family: inherit; @@ -145,6 +145,14 @@ img color: #999999; } +/* fixes vertical alignment of checkboxes and labels */ +label input, +label span +{ + vertical-align: middle; +} + + /** common user interface objects */ #mainscreen @@ -614,6 +622,32 @@ table.records-table tr.unfocused td background-color: #929292; } +ul.treelist li +{ + position: relative; +} + +ul.treelist li div.treetoggle +{ + position: absolute; + left: 8px !important; + left: -16px; + top: 1px; + width: 14px; + height: 16px; + cursor: pointer; +} + +ul.treelist li div.collapsed +{ + background: url(images/icons/collapsed.png) bottom right no-repeat; +} + +ul.treelist li div.expanded +{ + background: url(images/icons/expanded.png) bottom right no-repeat; +} + /***** mac-style quicksearch field *****/ @@ -658,6 +692,7 @@ table.records-table tr.unfocused td font-size: 11px; padding: 0px; border: none; + outline: none; } /***** roundcube webmail pre-defined classes *****/ diff --git a/skins/classic/embed.css b/skins/classic/embed.css new file mode 100644 index 000000000..6d2c63c6a --- /dev/null +++ b/skins/classic/embed.css @@ -0,0 +1,39 @@ +/** + * Roundcube webmail "embedded" stylesheets + * + * Copyright (c) 2013, The Roundcube Dev Team + * + * The contents are subject to the Creative Commons Attribution-ShareAlike + * License. It is allowed to copy, distribute, transmit and to adapt the work + * by keeping credits to the original autors in the README file. + * See http://creativecommons.org/licenses/by-sa/3.0/ for details. + */ + +.rcmail-inline-message { + font-family: sans-serif; + font-size: 14px; + color: #000; + margin-bottom: .8em; + min-height: 30px; + padding: 10px 10px 6px 46px; + background: url(images/display/icons.png) 6px 3px no-repeat #F7FDCB; + border: 1px solid #C2D071; +} + +.rcmail-inline-warning { + background-position: 6px -92px; +} + +.rcmail-inline-message > button { + margin-left: 1em; + vertical-align: baseline; +} + +.rcmail-inline-message em { + font-size: 90%; + color: #666; +} + +.rcmail-inline-buttons { + margin-bottom: 0; +} diff --git a/skins/classic/functions.js b/skins/classic/functions.js index 1742150f3..499783b3f 100644 --- a/skins/classic/functions.js +++ b/skins/classic/functions.js @@ -92,6 +92,7 @@ function rcube_mail_ui() forwardmenu: {id:'forwardmenu', editable:1}, searchmenu: {id:'searchmenu', editable:1}, messagemenu: {id:'messagemenu'}, + attachmentmenu: {id:'attachmentmenu'}, listmenu: {id:'listmenu', editable:1}, dragmessagemenu:{id:'dragmessagemenu', sticky:1}, groupmenu: {id:'groupoptionsmenu', above:1}, @@ -133,24 +134,24 @@ show_popupmenu: function(popup, show) { var obj = this.popups[popup].obj, above = this.popups[popup].above, - ref = rcube_find_object(popup+'link'); + ref = $(this.popups[popup].link ? this.popups[popup].link : rcube_find_object(popup+'link')); if (typeof show == 'undefined') show = obj.is(':visible') ? false : true; else if (this.popups[popup].toggle && show && this.popups[popup].obj.is(':visible') ) show = false; - if (show && ref) { - var parent = $(ref).parent(), + if (show && ref.length) { + var parent = ref.parent(), win = $(window), - pos = parent.hasClass('dropbutton') ? parent.offset() : $(ref).offset(); + pos = parent.hasClass('dropbutton') ? parent.offset() : ref.offset(); - if (!above && pos.top + ref.offsetHeight + obj.height() > win.height()) + if (!above && pos.top + ref.height() + obj.height() > win.height()) above = true; if (pos.left + obj.width() > win.width()) pos.left = win.width() - obj.width() - 30; - obj.css({ left:pos.left, top:(pos.top + (above ? -obj.height() : ref.offsetHeight)) }); + obj.css({ left:pos.left, top:(pos.top + (above ? -obj.height() : ref.height())) }); } obj[show?'show':'hide'](); @@ -325,7 +326,7 @@ listmenu: function(show) }; }, -open_listmenu: function(e) +open_listmenu: function() { this.listmenu(); }, @@ -355,7 +356,7 @@ spellmenu: function(show) for (i in rcmail.env.spell_langs) { li = $('<li>'); - link = $('<a href="#">').text(rcmail.env.spell_langs[i]) + link = $('<a href="#"></a>').text(rcmail.env.spell_langs[i]) .addClass('active').data('lang', i) .click(function() { rcmail.spellcheck_lang_set($(this).data('lang')); @@ -380,6 +381,35 @@ spellmenu: function(show) this.show_popupmenu('spellmenu', show); }, +show_attachmentmenu: function(elem) +{ + var id = elem.parentNode.id.replace(/^attach/, ''); + + $('#attachmenuopen').unbind('click').attr('onclick', '').click(function(e) { + return rcmail.command('open-attachment', id, this); + }); + + $('#attachmenudownload').unbind('click').attr('onclick', '').click(function() { + rcmail.command('download-attachment', id, this); + }); + + this.popups.attachmentmenu.link = elem; + rcmail.command('menu-open', {menu: 'attachmentmenu', id: id}); +}, + +menu_open: function(p) +{ + if (p && p.props && p.props.menu == 'attachmentmenu') + this.show_popup('attachmentmenu'); + else + this.open_listmenu(); +}, + +menu_save: function(prop) +{ + this.save_listmenu(); +}, + body_mouseup: function(evt, p) { var i, target = rcube_event.get_target(evt); @@ -491,17 +521,26 @@ init_compose_form: function() div.style.top = (parseInt(headers_div.offsetHeight, 10) + 3) + 'px'; $(window).resize(); + + // fixes contacts-table position when there's more than one addressbook + $('#contacts-table').css('top', $('#directorylist').height() + 24 + 'px'); + + // contacts search submit + $('#quicksearchbox').keydown(function(e) { + if (rcube_event.get_keycode(e) == 13) + rcmail.command('search'); + }); }, resize_compose_body: function() { - var div = $('#compose-div .boxlistcontent'), w = div.width(), h = div.height(); - w -= 8; // 2 x 3px padding + 2 x 1px border - h -= 4; + var div = $('#compose-div .boxlistcontent'), + w = div.width() - 2, h = div.height(), + x = bw.ie || bw.opera ? 4 : 0; - $('#compose-body_tbl').width((w+6)+'px').height(''); - $('#compose-body_ifr').width((w+6)+'px').height((h-54)+'px'); - $('#compose-body').width(w+'px').height(h+'px'); + $('#compose-body_tbl').width((w+3)+'px').height(''); + $('#compose-body_ifr').width((w+3)+'px').height((h-54)+'px'); + $('#compose-body').width((w-x)+'px').height(h+'px'); $('#googie_edit_layer').height(h+'px'); }, @@ -791,8 +830,8 @@ function rcube_init_mail_ui() .contents().mouseup(function(e){rcmail_ui.body_mouseup(e)}); if (rcmail.env.task == 'mail') { - rcmail.addEventListener('menu-open', 'open_listmenu', rcmail_ui); - rcmail.addEventListener('menu-save', 'save_listmenu', rcmail_ui); + rcmail.addEventListener('menu-open', 'menu_open', rcmail_ui); + rcmail.addEventListener('menu-save', 'menu_save', rcmail_ui); rcmail.addEventListener('aftersend-attachment', 'uploadmenu', rcmail_ui); rcmail.addEventListener('aftertoggle-editor', 'resize_compose_body_ev', rcmail_ui); rcmail.gui_object('message_dragmenu', 'dragmessagemenu'); @@ -808,6 +847,11 @@ function rcube_init_mail_ui() if (rcmail.env.action == 'compose') rcmail_ui.init_compose_form(); + else if (rcmail.env.action == 'show' || rcmail.env.action == 'preview') + // add menu link for each attachment + $('#attachment-list > li[id^="attach"]').each(function() { + $(this).append($('<a class="drop">').click(function() { rcmail_ui.show_attachmentmenu(this); })); + }); } else if (rcmail.env.task == 'addressbook') { rcmail.addEventListener('afterupload-photo', function(){ rcmail_ui.show_popup('uploadform', false); }); diff --git a/skins/classic/googiespell.css b/skins/classic/googiespell.css index 8adadc256..b4fab5bdb 100644 --- a/skins/classic/googiespell.css +++ b/skins/classic/googiespell.css @@ -12,7 +12,6 @@ padding: 0 4px; font-size: 9pt; font-family: monospace; - border: 1px solid #999; } .googie_edit_layer span { diff --git a/skins/classic/ie6hacks.css b/skins/classic/ie6hacks.css index ac953867a..a431ee45e 100644 --- a/skins/classic/ie6hacks.css +++ b/skins/classic/ie6hacks.css @@ -3,6 +3,7 @@ #taskbar { background: url(images/taskbar.gif) top right no-repeat; + width: expression((parseInt(document.documentElement.clientWidth)-250)+'px'); } img @@ -38,11 +39,6 @@ body > #message div.confirmation, background-image: url(images/icons/folders.gif); } -#attachment-list -{ - height: expression(Math.min(16, parseInt(document.documentElement.clientHeight))+'px'); -} - #messagetoolbar a { display: block; @@ -124,6 +120,11 @@ ul.toolbarmenu li.separator_below height: expression((parseInt(this.parentNode.offsetHeight)-23-parseInt(this.style.top?this.style.top:21))+'px'); } +#compose-body-div +{ + height: expression(parseInt(this.parentNode.offsetHeight)+'px'); +} + #folder-manager { height: expression((parseInt(document.documentElement.clientHeight)-105)+'px'); @@ -176,3 +177,8 @@ body.iframe .boxtitle { zoom: 1; } + +#abookactions a +{ + background-image: url("images/icons/groupactions.gif"); +} diff --git a/skins/classic/iehacks.css b/skins/classic/iehacks.css index 2bd3ce865..fabf73db6 100644 --- a/skins/classic/iehacks.css +++ b/skins/classic/iehacks.css @@ -106,7 +106,7 @@ body.iframe div.messageheaderbox #quicksearchbar { - z-index: 250; + z-index: 240; } #addresslist, @@ -116,6 +116,7 @@ body.iframe div.messageheaderbox #mailrightcontainer, #compose-container, #compose-attachments, +#compose-contacts, #mailcontframe, #mailboxlist-container, #mailrightcontent, @@ -184,13 +185,7 @@ body.iframe div.messageheaderbox overflow: hidden; } -#countcontrols -{ - width: 24em; - padding-right: 10px; -} - -body.iframe +body.iframe { width: expression((parseInt(document.documentElement.clientWidth))+'px'); } @@ -207,11 +202,6 @@ div.message-part div.pre width: expression((parseInt(document.documentElement.clientWidth)-245)+'px'); } -#contacts-table -{ - width: expression(document.getElementById('addresslist').clientWidth); -} - #contacts-box, #prefs-box, #folder-box @@ -294,8 +284,8 @@ table.records-table thead tr td .contactfieldgroup legend { - padding: 0 0 0.5em 0; - margin-left: -4px; + padding: 0 0 0.5em 0; + margin-left: -4px; } /* fix "jumping" login form in IE7 */ diff --git a/skins/classic/images/icons/groupactions.gif b/skins/classic/images/icons/groupactions.gif Binary files differindex a399d106e..eba6a6caf 100644 --- a/skins/classic/images/icons/groupactions.gif +++ b/skins/classic/images/icons/groupactions.gif diff --git a/skins/classic/images/icons/groupactions.png b/skins/classic/images/icons/groupactions.png Binary files differindex 43c34a438..f29a36a0e 100644 --- a/skins/classic/images/icons/groupactions.png +++ b/skins/classic/images/icons/groupactions.png diff --git a/skins/classic/images/icons/html.png b/skins/classic/images/icons/html.png Binary files differnew file mode 100644 index 000000000..3f022f678 --- /dev/null +++ b/skins/classic/images/icons/html.png diff --git a/skins/classic/images/icons/text.png b/skins/classic/images/icons/text.png Binary files differnew file mode 100644 index 000000000..94891be80 --- /dev/null +++ b/skins/classic/images/icons/text.png diff --git a/skins/classic/includes/messagetoolbar.html b/skins/classic/includes/messagetoolbar.html index eebb55708..bd14f490f 100644 --- a/skins/classic/includes/messagetoolbar.html +++ b/skins/classic/includes/messagetoolbar.html @@ -5,8 +5,8 @@ <roundcube:button command="list" type="link" class="button back" classAct="button back" classSel="button backSel" title="backtolist" content=" " /> <roundcube:else /> <roundcube:button command="checkmail" type="link" class="button checkmail" classAct="button checkmail" classSel="button checkmailSel" title="checkmail" content=" " /> -<roundcube:button command="compose" type="link" class="button compose" classAct="button compose" classSel="button composeSel" title="writenewmessage" content=" " /> <roundcube:endif /> +<roundcube:button command="compose" type="link" class="button compose" classAct="button compose" classSel="button composeSel" title="writenewmessage" content=" " /> <roundcube:button command="reply" type="link" class="buttonPas reply" classAct="button reply" classSel="button replySel" title="replytomessage" content=" " /> <span class="dropbutton"> <roundcube:button command="reply-all" type="link" class="buttonPas replyAll" classAct="button replyAll" classSel="button replyAllSel" title="replytoallmessage" content=" " /> @@ -27,7 +27,7 @@ <div id="forwardmenu" class="popupmenu"> <ul> - <li><roundcube:button command="forward" label="forwardinline" prop="sub" classAct="forwardlink active" class="forwardlink" /></li> + <li><roundcube:button command="forward-inline" label="forwardinline" prop="sub" classAct="forwardlink active" class="forwardlink" /></li> <li><roundcube:button command="forward-attachment" label="forwardattachment" prop="sub" classAct="forwardattachmentlink active" class="forwardattachmentlink" /></li> <roundcube:container name="forwardmenu" id="forwardmenu" /> </ul> diff --git a/skins/classic/mail.css b/skins/classic/mail.css index 85c53d569..7c350ca3d 100644 --- a/skins/classic/mail.css +++ b/skins/classic/mail.css @@ -173,13 +173,15 @@ } #messagemenu li a.active:hover, +#attachmentmenu li a.active:hover, #markmessagemenu li a.active:hover { color: #fff; background-color: #c00; } -#messagemenu li a +#messagemenu li a, +#attachmentmenu li a { background: url(images/messageactions.png) no-repeat 7px 0; background-position: 7px 20px; @@ -190,7 +192,8 @@ background-position: 7px 1px; } -#messagemenu li a.downloadlink +#messagemenu li a.downloadlink, +#attachmentmenu li a.downloadlink { background-position: 7px -17px; } @@ -200,7 +203,8 @@ background-position: 7px -35px; } -#messagemenu li a.openlink +#messagemenu li a.openlink, +#attachmentmenu li a.openlink { background-position: 7px -53px; } @@ -255,7 +259,7 @@ top: 0; left: 0; bottom: 0; - width: 195px; + width: 160px; } #mailrightcontainer @@ -393,32 +397,6 @@ border-bottom: none; } -#mailboxlist li div -{ - position: absolute; - left: 8px !important; - left: -16px; - top: 1px; - width: 14px; - height: 16px; -} - -#mailboxlist li div.collapsed, -#mailboxlist li div.expanded -{ - cursor: pointer; -} - -#mailboxlist li div.collapsed -{ - background: url(images/icons/collapsed.png) bottom right no-repeat; -} - -#mailboxlist li div.expanded -{ - background: url(images/icons/expanded.png) bottom right no-repeat; -} - #mailboxlist li.inbox { background-position: 5px -18px; @@ -1070,6 +1048,17 @@ table.headers-table background-color: #F4F4F4; } +#messagebody table.headers-table +{ + margin: 16px 6px 6px 6px; +} + +div.message-partheaders + div.message-part +{ + border-top: 0; + padding-top: 4px; +} + table.headers-table tr td { font-size: 11px; @@ -1150,6 +1139,16 @@ table.headers-table tr td.header span text-decoration: underline; } +#attachment-list li a.drop { + background: url(images/icons/down_small.gif) no-repeat center 6px; + width: 12px; + height: 7px; + cursor: pointer; + padding: 5px 0 0; + margin-left: 3px; + display: inline-block; +} + #messagebody { position:relative; @@ -1313,20 +1312,27 @@ div.message-htmlpart div.rcmBody text-decoration: underline; } -#openextwinlink +#messagelinks { position: absolute; top: 8px; right: 10px; - width: 15px; - height: 15px; - border: 0; + height: 16px; + text-align: right; +} + +#messageframe #messagelinks +{ + top: 2px; + right: 2px; } #compose-headers #openextwinlink { - top: 4px; - right: 2px; + position: absolute; + height: 15px; + top: 4px; + right: 2px; } #full-headers @@ -1381,7 +1387,7 @@ div.hide-headers { position: absolute; top: 0; - left: 185px; + left: 205px; right: 0; bottom: 0; margin: 0; @@ -1391,16 +1397,20 @@ div.hide-headers { position: absolute; top: 85px; + right: 0; + left: 0; bottom: 0; margin: 0; - width: 100%; } -#compose-div .boxfooter +#compose-body-div { - height: 22px; - background: none; - border-top: 0; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 175px; + border: 1px solid #999; } #compose-div .boxlistcontent @@ -1418,15 +1428,12 @@ div.hide-headers margin: 0; font-size: 9pt; font-family: monospace; - border: 1px solid #999; resize: none; + border: none; + outline: none; } -#compose-body_tbl -{ - border: 1px solid #999; -} - +#compose-body_tbl, #compose-body_tbl td { border: none; @@ -1493,9 +1500,10 @@ input.from_address #compose-editorfooter { position: absolute; - right: 0; + right: 5px; bottom: 0; text-align: right; + line-height: 20px; } #compose-editorfooter label @@ -1508,9 +1516,20 @@ input.from_address #compose-buttons { position: absolute; + left: 5px; + bottom: 1px; + width: auto; +} + +#compose-contacts +{ + position: absolute; + top: 0; left: 0; bottom: 0; - width: auto; + width: 195px; + border: 1px solid #999; + background-color: #F9F9F9; } #compose-attachments @@ -1518,8 +1537,8 @@ input.from_address position: absolute; top: 0; left: 0; + right: 0; bottom: 0; - width: 175px; border: 1px solid #999; background-color: #F9F9F9; } @@ -1611,3 +1630,112 @@ input.from_address right: 6px; z-index: 101; } + +/* addressbook in compose - copy from addressbook.css */ + +#directorylist +{ + list-style: none; + margin: 0; + padding: 0; + background-color: #FFFFFF; +} + +#directorylist li +{ + display: block; + font-size: 11px; + background: url(images/icons/folders.png) 5px -108px no-repeat; + border-bottom: 1px solid #EBEBEB; + white-space: nowrap; +} + +#directorylist li a +{ + cursor: default; + display: block; + padding-left: 25px; + padding-top: 2px; + padding-bottom: 2px; + text-decoration: none; + white-space: nowrap; + height: 15px; +} + +#directorylist li.selected +{ + background-color: #929292; + border-bottom: 1px solid #898989; +} + +#directorylist li.selected a +{ + color: #FFF; + font-weight: bold; +} + +#contacts-table +{ + width: 100%; + table-layout: fixed; +} + +#contacts-table tbody td +{ + cursor: default; + text-overflow: ellipsis; + -o-text-overflow: ellipsis; +} + +#abookcountbar +{ + margin-top: 4px; + margin-left: 4px; + position: absolute; + margin-right: 5px; + right: 0; +} + +#abookactions +{ + position: absolute; + text-underline: none; +} + +#abookactions a +{ + font-weight: bold; + line-height: 22px; + height: 22px; + width: auto; + margin: 0; + padding-left: 5px; + padding-right: 5px; + text-shadow: 1px 1px white; + background: url("images/icons/groupactions.png") no-repeat right -70px; +} + +#abookactions a.disabled +{ + color: #999; +} + +#compose-contacts #quicksearchbar +{ + top: 2px; + left: 7px; +} + +#compose-contacts #directorylist +{ + width: 100%; + top: 23px; + position: absolute; + border-top: 1px solid #eee; +} + +#compose-contacts #contacts-table +{ + top: 45px; + position: absolute; +} diff --git a/skins/classic/splitter.js b/skins/classic/splitter.js index 3f1c97302..72ada5719 100644 --- a/skins/classic/splitter.js +++ b/skins/classic/splitter.js @@ -28,13 +28,13 @@ function rcube_splitter(attrib) if (this.horizontal) { var top = this.p1pos.top + this.p1.offsetHeight; - this.layer = new rcube_layer(this.id, {x: 0, y: top, height: 10, - width: '100%', vis: 1, parent: this.p1.parentNode}); + this.layer = new rcube_layer(this.id, {x: 0, y: top, height: 10, + width: '100%', vis: 1, parent: this.p1.parentNode}); } else { var left = this.p1pos.left + this.p1.offsetWidth; - this.layer = new rcube_layer(this.id, {x: left, y: 0, width: 10, - height: '100%', vis: 1, parent: this.p1.parentNode}); + this.layer = new rcube_layer(this.id, {x: left, y: 0, width: 10, + height: '100%', vis: 1, parent: this.p1.parentNode}); } this.elm = this.layer.elm; @@ -147,6 +147,7 @@ function rcube_splitter(attrib) this.p1pos = this.relative ? $(this.p1).position() : $(this.p1).offset(); this.p2pos = this.relative ? $(this.p2).position() : $(this.p2).offset(); + return false; }; diff --git a/skins/classic/templates/about.html b/skins/classic/templates/about.html index d84ccbd3c..519acf773 100644 --- a/skins/classic/templates/about.html +++ b/skins/classic/templates/about.html @@ -16,7 +16,7 @@ <div id="license"> <roundcube:object name="aboutcontent" /> <h2 class="sysname">Roundcube Webmail <roundcube:object name="version" /></h2> -<p class="copyright">Copyright © 2005-2012, The Roundcube Dev Team</p> +<p class="copyright">Copyright © 2005-2013, The Roundcube Dev Team</p> <p class="license">This program is free software; you can redistribute it and/or modify it under the terms of the <a href="http://www.gnu.org/licenses/gpl.html" target="_blank">GNU General Public License</a> as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.<br/> diff --git a/skins/classic/templates/addressbook.html b/skins/classic/templates/addressbook.html index d77bb38d9..ba119891c 100644 --- a/skins/classic/templates/addressbook.html +++ b/skins/classic/templates/addressbook.html @@ -9,6 +9,7 @@ #addresslist { width: <roundcube:exp expression="!empty(cookie:addressviewsplitter) ? cookie:addressviewsplitter-5 : 245" />px; } #contacts-box { left: <roundcube:exp expression="!empty(cookie:addressviewsplitter) ? cookie:addressviewsplitter+5 : 255" />px; <roundcube:exp expression="browser:ie ? ('width:expression((parseInt(this.parentNode.offsetWidth)-'.(!empty(cookie:addressviewsplitter) ? cookie:addressviewsplitter+5 : 255).')+\\'px\\');') : ''" /> +} #directorylistbox { width: <roundcube:exp expression="!empty(cookie:addressviewsplitterd) ? cookie:addressviewsplitterd-5 : 195" />px; } #addressscreen { left: <roundcube:exp expression="!empty(cookie:addressviewsplitterd) ? cookie:addressviewsplitterd+5 : 205" />px; <roundcube:exp expression="browser:ie ? ('width:expression((parseInt(this.parentNode.offsetWidth)-'.(!empty(cookie:addressviewsplitterd) ? cookie:addressviewsplitterd+5 : 205).')+\\'px\\');') : ''" /> @@ -27,7 +28,10 @@ <roundcube:button command="delete" type="link" class="buttonPas delete" classAct="button delete" classSel="button deleteSel" title="deletecontact" content=" " /> <span class="separator"> </span> <roundcube:button command="import" type="link" class="buttonPas import" classAct="button import" classSel="button importSel" title="importcontacts" content=" " /> +<span class="dropbutton"> <roundcube:button command="export" type="link" class="buttonPas export" classAct="button export" classSel="button exportSel" title="exportvcards" content=" " /> +<span id="exportmenulink" onclick="rcmail_ui.show_popup('exportmenu');return false"></span> +</span> <roundcube:button command="advanced-search" type="link" class="buttonPas search" classAct="button search" classSel="button searchSel" title="advsearch" content=" " /> <roundcube:container name="toolbar" id="abooktoolbar" /> </div> @@ -38,13 +42,20 @@ <roundcube:button command="reset-search" id="searchreset" image="/images/icons/reset.gif" title="resetsearch" width="13" height="13" /> </div> +<div id="exportmenu" class="popupmenu"> + <ul> + <li><roundcube:button command="export" label="exportall" prop="sub" classAct="exportalllink active" class="exportalllink" /></li> + <li><roundcube:button command="export-selected" label="exportsel" prop="sub" classAct="exportsellink active" class="exportsellink" /></li> + </ul> +</div> + <div id="searchmenu" class="popupmenu"> <ul class="toolbarmenu"> - <li><input type="checkbox" name="s_mods[]" value="name" id="s_mod_name" onclick="rcmail_ui.set_searchmod(this)" /><label for="s_mod_name"><roundcube:label name="name" /></label></li> - <li><input type="checkbox" name="s_mods[]" value="firstname" id="s_mod_firstname" onclick="rcmail_ui.set_searchmod(this)" /><label for="s_mod_firstname"><roundcube:label name="firstname" /></label></li> - <li><input type="checkbox" name="s_mods[]" value="surname" id="s_mod_surname" onclick="rcmail_ui.set_searchmod(this)" /><label for="s_mod_surname"><roundcube:label name="surname" /></label></li> - <li><input type="checkbox" name="s_mods[]" value="email" id="s_mod_email" onclick="rcmail_ui.set_searchmod(this)" /><label for="s_mod_email"><roundcube:label name="email" /></label></li> - <li><input type="checkbox" name="s_mods[]" value="*" id="s_mod_all" onclick="rcmail_ui.set_searchmod(this)" /><label for="s_mod_all"><roundcube:label name="allfields" /></label></li> + <li><label><input type="checkbox" name="s_mods[]" value="name" id="s_mod_name" onclick="rcmail_ui.set_searchmod(this)" /> <span><roundcube:label name="name" /></span></label></li> + <li><label><input type="checkbox" name="s_mods[]" value="firstname" id="s_mod_firstname" onclick="rcmail_ui.set_searchmod(this)" /> <span><roundcube:label name="firstname" /></span></label></li> + <li><label><input type="checkbox" name="s_mods[]" value="surname" id="s_mod_surname" onclick="rcmail_ui.set_searchmod(this)" /> <span><roundcube:label name="surname" /></span></label></li> + <li><label><input type="checkbox" name="s_mods[]" value="email" id="s_mod_email" onclick="rcmail_ui.set_searchmod(this)" /> <span><roundcube:label name="email" /></span></label></li> + <li><label><input type="checkbox" name="s_mods[]" value="*" id="s_mod_all" onclick="rcmail_ui.set_searchmod(this)" /> <span><roundcube:label name="allfields" /></span></label></li> </ul> </div> @@ -53,8 +64,7 @@ <div id="directorylistbox"> <div id="directorylist-title" class="boxtitle"><roundcube:label name="groups" /></div> <div id="directorylist-content" class="boxlistcontent"> - <roundcube:object name="directorylist" id="directorylist" /> - <roundcube:object name="groupslist" id="contactgroupslist" /> + <roundcube:object name="directorylist" id="directorylist" class="treelist" /> </div> <div id="directorylist-footer" class="boxfooter"> <roundcube:button command="group-create" type="link" title="newcontactgroup" class="buttonPas addgroup" classAct="button addgroup" content=" " /> diff --git a/skins/classic/templates/compose.html b/skins/classic/templates/compose.html index f764d6bb8..5b0b47924 100644 --- a/skins/classic/templates/compose.html +++ b/skins/classic/templates/compose.html @@ -9,9 +9,9 @@ <script type="text/javascript" src="/functions.js"></script> <script type="text/javascript" src="/splitter.js"></script> <style type="text/css"> -#compose-attachments { width: <roundcube:exp expression="!empty(cookie:composesplitterv) ? cookie:composesplitterv-5 : 175" />px; } -#compose-container { left: <roundcube:exp expression="!empty(cookie:composesplitterv) ? cookie:composesplitterv+5 : 185" />px; -<roundcube:exp expression="browser:ie ? ('width: expression((parseInt(this.parentNode.offsetWidth)-'.(!empty(cookie:composesplitterv) ? cookie:composesplitterv+5 : 180).')+\\'px\\');') : ''" /> +#compose-contacts { width: <roundcube:exp expression="!empty(cookie:composesplitterv1) ? cookie:composesplitterv1-5 : 195" />px; } +#compose-container { left: <roundcube:exp expression="!empty(cookie:composesplitterv1) ? cookie:composesplitterv1+5 : 205" />px; +<roundcube:exp expression="browser:ie ? ('width: expression((parseInt(this.parentNode.offsetWidth)-'.(!empty(cookie:composesplitterv1) ? cookie:composesplitterv1+5 : 200).')+\\'px\\');') : ''" /> } </style> </head> @@ -24,8 +24,6 @@ <roundcube:include file="/includes/header.html" /> <roundcube:endif /> -<form name="form" action="./" method="post"> - <div id="messagetoolbar"> <roundcube:if condition="env:extwin" /> <roundcube:button command="close" type="link" class="button back" classAct="button back" classSel="button backSel" title="close" content=" " /> @@ -33,35 +31,53 @@ <roundcube:button command="list" type="link" class="button back" classAct="button back" classSel="button backSel" title="backtolist" content=" " /> <roundcube:endif /> <roundcube:button command="send" type="link" class="buttonPas send" classAct="button send" classSel="button sendSel" title="sendmessage" content=" " /> + <roundcube:button name="addattachment" type="link" class="button attach" classAct="button attach" classSel="button attachSel" title="addattachment" onclick="rcmail_ui.show_popup('uploadmenu', true);return false" content=" " /> + <roundcube:button command="insert-sig" type="link" class="buttonPas insertsig" classAct="button insertsig" classSel="button insertsigSel" title="insertsignature" content=" " /> + <roundcube:button command="savedraft" type="link" class="buttonPas savedraft" classAct="button savedraft" classSel="button savedraftSel" title="savemessage" content=" " /> <roundcube:if condition="config:enable_spellcheck" /> <span class="dropbutton"> <roundcube:button command="spellcheck" type="link" class="buttonPas spellcheck" classAct="button spellcheck" classSel="button spellcheckSel" title="checkspelling" content=" " /> <span id="spellmenulink" onclick="rcmail_ui.show_popup('spellmenu');return false"></span> </span> <roundcube:endif /> - <roundcube:button name="addattachment" type="link" class="button attach" classAct="button attach" classSel="button attachSel" title="addattachment" onclick="rcmail_ui.show_popup('uploadmenu', true);return false" content=" " /> - <roundcube:button command="insert-sig" type="link" class="buttonPas insertsig" classAct="button insertsig" classSel="button insertsigSel" title="insertsignature" content=" " /> - <roundcube:button command="savedraft" type="link" class="buttonPas savedraft" classAct="button savedraft" classSel="button savedraftSel" title="savemessage" content=" " /> <roundcube:container name="toolbar" id="compose-toolbar" /> <roundcube:button name="messageoptions" id="composemenulink" type="link" class="button messagemenu" title="messageoptions" onclick="rcmail_ui.show_popup('composemenu', true);return false" content=" " /> </div> +<form name="form" action="./" method="post"> + <div id="mainscreen"> -<div id="compose-attachments"> -<div class="boxtitle"><roundcube:label name="attachments" /></div> +<div id="compose-contacts"> +<div class="boxtitle"><roundcube:label name="contacts" /></div> <div class="boxlistcontent"> - <roundcube:object name="composeAttachmentList" id="attachmentslist" loadingIcon="/images/display/loading_blue.gif" /> + <div id="quicksearchbar"> + <img id="searchmenulink" src="/images/icons/glass.png" width="16" height="16" /> + <roundcube:object name="searchform" id="quicksearchbox" form="true" tabindex="13" /> + <roundcube:button command="reset-search" id="searchreset" image="/images/icons/reset.gif" title="resetsearch" width="13" height="13" /> + </div> + <roundcube:object name="addressbooks" id="directorylist" /> + <roundcube:object name="addresslist" id="contacts-table" class="records-table" cellspacing="0" noheader="true" /> </div> <div class="boxfooter"> - <roundcube:button name="uploadmenulink" id="uploadmenulink" type="link" title="addattachment" class="button addgroup" onclick="rcmail_ui.show_popup('uploadmenu', true);return false" content=" " /> + <div id="abookactions" class="pagenav"> + <roundcube:button command="add-recipient" prop="to" type="link" title="to" class="button disabled" classAct="button" content="To &raquo;" /> + <roundcube:button command="add-recipient" prop="cc" type="link" title="cc" class="button disabled" classAct="button" content="Cc &raquo;" /> + <roundcube:button command="add-recipient" prop="bcc" type="link" title="bcc" class="button disabled" classAct="button" content="Bcc &raquo;" /> + </div> + <div id="abookcountbar" class="pagenav"> + <roundcube:button command="firstpage" type="link" class="buttonPas firstpage" classAct="button firstpage" classSel="button firstpageSel" title="firstpage" content=" " /> + <roundcube:button command="previouspage" type="link" class="buttonPas prevpage" classAct="button prevpage" classSel="button prevpageSel" title="previouspage" content=" " /> + <span style="float:left"> </span> + <roundcube:button command="nextpage" type="link" class="buttonPas nextpage" classAct="button nextpage" classSel="button nextpageSel" title="nextpage" content=" " /> + <roundcube:button command="lastpage" type="link" class="buttonPas lastpage" classAct="button lastpage" classSel="button lastpageSel" title="lastpage" content=" " /> + </div> </div> </div> -<roundcube:object name="fileDropArea" id="compose-attachments" /> <script type="text/javascript"> - var composesplitv = new rcube_splitter({id:'composesplitterv', p1: 'compose-attachments', p2: 'compose-container', orientation: 'v', relative: true, start: 175}); - rcmail.add_onload('composesplitv.init()'); + var composesplitv1 = new rcube_splitter({id:'composesplitterv1', p1: 'compose-contacts', p2: 'compose-container', orientation: 'v', relative: true, start: 200}); + rcmail.add_onload('composesplitv1.init()'); </script> <div id="compose-container"> @@ -119,23 +135,39 @@ </table> </div> <div id="compose-div"> - <div class="boxlistcontent" style="overflow: hidden; top: 0"> - <roundcube:object name="composeBody" id="compose-body" form="form" cols="70" rows="20" tabindex="9" /> + <div id="compose-body-div"> + <div class="boxlistcontent" style="overflow: hidden; top: 0"> + <roundcube:object name="composeBody" id="compose-body" form="form" cols="70" rows="20" tabindex="9" /> + </div> + <div class="boxfooter"> + <div id="compose-buttons"> + <roundcube:button type="input" command="send" class="button mainaction" label="sendmessage" tabindex="10" /> + <roundcube:button type="input" command="list" class="button" label="cancel" tabindex="11" /> + </div> + <div id="compose-editorfooter" class="pagenav"> + <roundcube:if condition="!in_array('htmleditor', (array)config:dont_override)" /> + <span> + <label><roundcube:label name="editortype" /></label> + <roundcube:object name="editorSelector" editorid="compose-body" tabindex="12" /> + </span> + <roundcube:endif /> + </div> + </div> </div> - <div class="boxfooter"> - <div id="compose-buttons"> - <roundcube:button type="input" command="send" class="button mainaction" label="sendmessage" tabindex="10" /> - <roundcube:button type="input" command="list" class="button" label="cancel" tabindex="11" /> +<script type="text/javascript"> + var composesplitv2 = new rcube_splitter({id:'composesplitterv2', p1: 'compose-body-div', p2: 'compose-attachments', orientation: 'v', relative: true, start: $('#compose-headers-div').width() - 175}); + rcmail.add_onload('composesplitv2.init()'); +</script> + <div id="compose-attachments"> + <div class="boxtitle"><roundcube:label name="attachments" /></div> + <div class="boxlistcontent"> + <roundcube:object name="composeAttachmentList" id="attachmentslist" loadingIcon="/images/display/loading_blue.gif" /> </div> - <div id="compose-editorfooter"> - <roundcube:if condition="!in_array('htmleditor', (array)config:dont_override)" /> - <span> - <label><roundcube:label name="editortype" /></label> - <roundcube:object name="editorSelector" editorid="compose-body" tabindex="12" /> - </span> - <roundcube:endif /> + <div class="boxfooter"> + <roundcube:button name="uploadmenulink" id="uploadmenulink" type="link" title="addattachment" class="button addgroup" onclick="rcmail_ui.show_popup('uploadmenu', true);return false" content=" " /> </div> </div> + <roundcube:object name="fileDropArea" id="compose-attachments" /> </div> </div> diff --git a/skins/classic/templates/mail.html b/skins/classic/templates/mail.html index 96fe72ecd..c7010e87c 100644 --- a/skins/classic/templates/mail.html +++ b/skins/classic/templates/mail.html @@ -12,9 +12,9 @@ <roundcube:exp expression="browser:ie ? ('height: expression((parseInt(this.parentNode.offsetHeight)-'.(!empty(cookie:mailviewsplitter) ? cookie:mailviewsplitter+25 : 245).')+\\'px\\');') : ''" /> } <roundcube:endif /> -#mailleftcontainer { width: <roundcube:exp expression="!empty(cookie:mailviewsplitterv) ? cookie:mailviewsplitterv-5 : 175" />px; } -#mailrightcontainer { left: <roundcube:exp expression="!empty(cookie:mailviewsplitterv) ? cookie:mailviewsplitterv+5 : 185" />px; -<roundcube:exp expression="browser:ie ? ('width: expression((parseInt(this.parentNode.offsetWidth)-'.(!empty(cookie:mailviewsplitterv) ? cookie:mailviewsplitterv+5 : 180).')+\\'px\\');') : ''" /> +#mailleftcontainer { width: <roundcube:exp expression="!empty(cookie:mailviewsplitterv) ? cookie:mailviewsplitterv-5 : 160" />px; } +#mailrightcontainer { left: <roundcube:exp expression="!empty(cookie:mailviewsplitterv) ? cookie:mailviewsplitterv+5 : 170" />px; +<roundcube:exp expression="browser:ie ? ('width: expression((parseInt(this.parentNode.offsetWidth)-'.(!empty(cookie:mailviewsplitterv) ? cookie:mailviewsplitterv+5 : 165).')+\\'px\\');') : ''" /> } </style> </head> @@ -28,7 +28,7 @@ <div id="mailboxlist-container"> <div id="mailboxlist-title" class="boxtitle"><roundcube:label name="mailboxlist" /></div> <div id="mailboxlist-content" class="boxlistcontent"> -<roundcube:object name="mailboxlist" id="mailboxlist" folder_filter="mail" /> +<roundcube:object name="mailboxlist" id="mailboxlist" class="treelist" folder_filter="mail" /> </div> <div id="mailboxlist-footer" class="boxfooter"> <roundcube:button name="mailboxmenulink" id="mailboxmenulink" type="link" title="folderactions" class="button groupactions" onclick="rcmail_ui.show_popup('mailboxmenu');return false" content=" " /> @@ -76,7 +76,7 @@ <roundcube:button command="collapse-all" type="link" title="collapse-all" class="buttonPas collapse-all" classAct="button collapse-all" classSel="button collapse-allsel" content=" " /> <roundcube:endif /> <roundcube:if condition="!in_array('preview_pane', (array)config:dont_override)" /> - <span style="margin-left: 12px"><label for="prevpaneswitch"><roundcube:label name="previewpane" />:</label> + <span style="margin-left: 12px"><label for="prevpaneswitch"><span><roundcube:label name="previewpane" />:</span></label> <input type="checkbox" id="prevpaneswitch" onclick="rcmail_ui.switch_preview_pane(this)"<roundcube:exp expression="config:preview_pane == true ? ' checked=checked' : ''" /> /> </span> <roundcube:endif /> @@ -110,12 +110,13 @@ <div id="searchmenu" class="popupmenu"> <ul class="toolbarmenu"> - <li><input type="checkbox" name="s_mods[]" value="subject" id="s_mod_subject" onclick="rcmail_ui.set_searchmod(this)" /><label for="s_mod_subject"><roundcube:label name="subject" /></label></li> - <li><input type="checkbox" name="s_mods[]" value="from" id="s_mod_from" onclick="rcmail_ui.set_searchmod(this)" /><label for="s_mod_from"><roundcube:label name="from" /></label></li> - <li><input type="checkbox" name="s_mods[]" value="to" id="s_mod_to" onclick="rcmail_ui.set_searchmod(this)" /><label for="s_mod_to"><roundcube:label name="to" /></label></li> - <li><input type="checkbox" name="s_mods[]" value="cc" id="s_mod_cc" onclick="rcmail_ui.set_searchmod(this)" /><label for="s_mod_cc"><roundcube:label name="cc" /></label></li> - <li><input type="checkbox" name="s_mods[]" value="bcc" id="s_mod_bcc" onclick="rcmail_ui.set_searchmod(this)" /><label for="s_mod_bcc"><roundcube:label name="bcc" /></label></li> - <li><input type="checkbox" name="s_mods[]" value="text" id="s_mod_text" onclick="rcmail_ui.set_searchmod(this)" /><label for="s_mod_text"><roundcube:label name="msgtext" /></label></li> + <li><label><input type="checkbox" name="s_mods[]" value="subject" id="s_mod_subject" onclick="rcmail_ui.set_searchmod(this)" /> <span><roundcube:label name="subject" /></span></label></li> + <li><label><input type="checkbox" name="s_mods[]" value="from" id="s_mod_from" onclick="rcmail_ui.set_searchmod(this)" /> <span><roundcube:label name="from" /></span></label></li> + <li><label><input type="checkbox" name="s_mods[]" value="to" id="s_mod_to" onclick="rcmail_ui.set_searchmod(this)" /> <span><roundcube:label name="to" /></span></label></li> + <li><label><input type="checkbox" name="s_mods[]" value="cc" id="s_mod_cc" onclick="rcmail_ui.set_searchmod(this)" /> <span><roundcube:label name="cc" /></span></label></li> + <li><label><input type="checkbox" name="s_mods[]" value="bcc" id="s_mod_bcc" onclick="rcmail_ui.set_searchmod(this)" /> <span><roundcube:label name="bcc" /></span></label></li> + <li><label><input type="checkbox" name="s_mods[]" value="body" id="s_mod_body" onclick="rcmail_ui.set_searchmod(this)" /> <span><roundcube:label name="body" /></span></label></li> + <li><label><input type="checkbox" name="s_mods[]" value="text" id="s_mod_text" onclick="rcmail_ui.set_searchmod(this)" /> <span><roundcube:label name="msgtext" /></span></label></li> </ul> </div> @@ -149,52 +150,52 @@ <roundcube:if condition="env:threads" /> <fieldset class="thinbordered"><legend><roundcube:label name="listmode" /></legend> <ul class="toolbarmenu"> - <li><input type="radio" name="view" value="list" id="view_default" /><label for="view_default"><roundcube:label name="list" /></label></li> - <li><input type="radio" name="view" value="thread" id="view_thread" /><label for="view_thread"><roundcube:label name="threads" /></label></li> + <li><label><input type="radio" name="view" value="list" id="view_default" /> <span><roundcube:label name="list" /></span></label></li> + <li><label><input type="radio" name="view" value="thread" id="view_thread" /> <span><roundcube:label name="threads" /></span></label></li> </ul> </fieldset> <roundcube:endif /> <roundcube:if condition="!in_array('list_cols', (array)config:dont_override)" /> <fieldset class="thinbordered"><legend><roundcube:label name="listcolumns" /></legend> <ul class="toolbarmenu"> - <li><input type="checkbox" name="list_col[]" value="threads" id="cols_threads" checked="checked" disabled="disabled" /><label for="cols_threads" class="disabled"><roundcube:label name="threads" /></label></li> - <li><input type="checkbox" name="list_col[]" value="subject" id="cols_subject" checked="checked" disabled="disabled" /><label for="cols_subject" class="disabled"><roundcube:label name="subject" /></label></li> - <li><input type="checkbox" name="list_col[]" value="fromto" id="cols_fromto" /><label for="cols_fromto"><roundcube:label name="fromto" /></label></li> - <li><input type="checkbox" name="list_col[]" value="from" id="cols_from" /><label for="cols_from"><roundcube:label name="from" /></label></li> - <li><input type="checkbox" name="list_col[]" value="to" id="cols_to" /><label for="cols_to"><roundcube:label name="to" /></label></li> - <li><input type="checkbox" name="list_col[]" value="replyto" id="cols_replyto" /><label for="cols_replyto"><roundcube:label name="replyto" /></label></li> - <li><input type="checkbox" name="list_col[]" value="cc" id="cols_cc" /><label for="cols_cc"><roundcube:label name="cc" /></label></li> - <li><input type="checkbox" name="list_col[]" value="date" id="cols_date" /><label for="cols_date"><roundcube:label name="date" /></label></li> - <li><input type="checkbox" name="list_col[]" value="size" id="cols_size" /><label for="cols_size"><roundcube:label name="size" /></label></li> - <li><input type="checkbox" name="list_col[]" value="status" id="cols_status" /><label for="cols_status"><roundcube:label name="readstatus" /></label></li> - <li><input type="checkbox" name="list_col[]" value="attachment" id="cols_attachment" /><label for="cols_attachment"><roundcube:label name="attachment" /></label></li> - <li><input type="checkbox" name="list_col[]" value="flag" id="cols_flag" /><label for="cols_flag"><roundcube:label name="flag" /></label></li> - <li><input type="checkbox" name="list_col[]" value="priority" id="cols_priority" /><label for="cols_priority"><roundcube:label name="priority" /></label></li> + <li><label><input type="checkbox" name="list_col[]" value="threads" id="cols_threads" checked="checked" disabled="disabled" /> <span class="disabled"><roundcube:label name="threads" /></span></label></li> + <li><label><input type="checkbox" name="list_col[]" value="subject" id="cols_subject" checked="checked" disabled="disabled" /> <span class="disabled"><roundcube:label name="subject" /></span></label></li> + <li><label><input type="checkbox" name="list_col[]" value="fromto" id="cols_fromto" /> <span><roundcube:label name="fromto" /></span></label></li> + <li><label><input type="checkbox" name="list_col[]" value="from" id="cols_from" /> <span><roundcube:label name="from" /></span></label></li> + <li><label><input type="checkbox" name="list_col[]" value="to" id="cols_to" /> <span><roundcube:label name="to" /></span></label></li> + <li><label><input type="checkbox" name="list_col[]" value="replyto" id="cols_replyto" /> <span><roundcube:label name="replyto" /></span></label></li> + <li><label><input type="checkbox" name="list_col[]" value="cc" id="cols_cc" /> <span><roundcube:label name="cc" /></span></label></li> + <li><label><input type="checkbox" name="list_col[]" value="date" id="cols_date" /> <span><roundcube:label name="date" /></span></label></li> + <li><label><input type="checkbox" name="list_col[]" value="size" id="cols_size" /> <span><roundcube:label name="size" /></span></label></li> + <li><label><input type="checkbox" name="list_col[]" value="status" id="cols_status" /> <span><roundcube:label name="readstatus" /></span></label></li> + <li><label><input type="checkbox" name="list_col[]" value="attachment" id="cols_attachment" /> <span><roundcube:label name="attachment" /></span></label></li> + <li><label><input type="checkbox" name="list_col[]" value="flag" id="cols_flag" /> <span><roundcube:label name="flag" /></span></label></li> + <li><label><input type="checkbox" name="list_col[]" value="priority" id="cols_priority" /> <span><roundcube:label name="priority" /></span></label></li> </ul> </fieldset> <roundcube:endif /> <roundcube:if condition="!in_array('message_sort_col', (array)config:dont_override)" /> <fieldset class="thinbordered"><legend><roundcube:label name="listsorting" /></legend> <ul class="toolbarmenu"> - <li><input type="radio" name="sort_col" value="" id="sort_default" /><label for="sort_default"><roundcube:label name="nonesort" /></label></li> - <li><input type="radio" name="sort_col" value="arrival" id="sort_arrival" /><label for="sort_arrival"><roundcube:label name="arrival" /></label></li> - <li><input type="radio" name="sort_col" value="date" id="sort_date" /><label for="sort_date"><roundcube:label name="sentdate" /></label></li> - <li><input type="radio" name="sort_col" value="subject" id="sort_subject" /><label for="sort_subject"><roundcube:label name="subject" /></label></li> - <li><input type="radio" name="sort_col" value="fromto" id="sort_fromto" /><label for="sort_fromto"><roundcube:label name="fromto" /></label></li> - <li><input type="radio" name="sort_col" value="from" id="sort_from" /><label for="sort_from"><roundcube:label name="from" /></label></li> - <li><input type="radio" name="sort_col" value="to" id="sort_to" /><label for="sort_to"><roundcube:label name="to" /></label></li> - <li><input type="radio" name="sort_col" value="to" id="sort_replyto" /><label for="sort_replyto"><roundcube:label name="replyto" /></label></li> - <li><input type="radio" name="sort_col" value="cc" id="sort_cc" /><label for="sort_cc"><roundcube:label name="cc" /></label></li> - <li><input type="radio" name="sort_col" value="size" id="sort_size" /><label for="sort_size"><roundcube:label name="size" /></label></li> + <li><label><input type="radio" name="sort_col" value="" id="sort_default" /> <span><roundcube:label name="nonesort" /></span></label></li> + <li><label><input type="radio" name="sort_col" value="arrival" id="sort_arrival" /> <span><roundcube:label name="arrival" /></span></label></li> + <li><label><input type="radio" name="sort_col" value="date" id="sort_date" /> <span><roundcube:label name="sentdate" /></span></label></li> + <li><label><input type="radio" name="sort_col" value="subject" id="sort_subject" /> <span><roundcube:label name="subject" /></span></label></li> + <li><label><input type="radio" name="sort_col" value="fromto" id="sort_fromto" /> <span><roundcube:label name="fromto" /></span></label></li> + <li><label><input type="radio" name="sort_col" value="from" id="sort_from" /> <span><roundcube:label name="from" /></span></label></li> + <li><label><input type="radio" name="sort_col" value="to" id="sort_to" /> <span><roundcube:label name="to" /></span></label></li> + <li><label><input type="radio" name="sort_col" value="to" id="sort_replyto" /> <span><roundcube:label name="replyto" /></span></label></li> + <li><label><input type="radio" name="sort_col" value="cc" id="sort_cc" /> <span><roundcube:label name="cc" /></span></label></li> + <li><label><input type="radio" name="sort_col" value="size" id="sort_size" /> <span><roundcube:label name="size" /></span></label></li> </ul> </fieldset> <roundcube:endif /> <roundcube:if condition="!in_array('message_sort_order', (array)config:dont_override)" /> <fieldset><legend><roundcube:label name="listorder" /></legend> - <ul class="toolbarmenu"> - <li><input type="radio" name="sort_ord" value="ASC" id="sort_asc" /><label for="sort_asc"><roundcube:label name="asc" /></label></li> - <li><input type="radio" name="sort_ord" value="DESC" id="sort_desc" /><label for="sort_desc"><roundcube:label name="desc" /></label></li> - </ul> + <ul class="toolbarmenu"> + <li><label><input type="radio" name="sort_ord" value="ASC" id="sort_asc" /> <span><roundcube:label name="asc" /></span></label></li> + <li><label><input type="radio" name="sort_ord" value="DESC" id="sort_desc" /> <span><roundcube:label name="desc" /></span></label></li> + </ul> </fieldset> <roundcube:endif /> <div> diff --git a/skins/classic/templates/message.html b/skins/classic/templates/message.html index fcf0b22c8..11e58c711 100644 --- a/skins/classic/templates/message.html +++ b/skins/classic/templates/message.html @@ -30,7 +30,7 @@ <div id="mailboxlist-container"> <div id="mailboxlist-title" class="boxtitle"><roundcube:label name="mailboxlist" /></div> <div class="boxlistcontent"> - <roundcube:object name="mailboxlist" id="mailboxlist" maxlength="25" /> + <roundcube:object name="mailboxlist" id="mailboxlist" class="treelist" maxlength="25" /> </div> <div class="boxfooter"></div> </div> @@ -39,6 +39,14 @@ <div id="messageframe"> <div class="boxlistcontent" style="top:0; overflow-x:auto"> + <div id="messagelinks"> + <roundcube:if condition="env:optional_format=='text'" /> + <roundcube:button command="change-format" prop="text" image="/images/icons/text.png" width="15" height="15" title="changeformattext" id="changeformattext" /> + <roundcube:endif /> + <roundcube:if condition="env:optional_format=='html'" /> + <roundcube:button command="change-format" prop="html" image="/images/icons/html.png" width="15" height="15" title="changeformathtml" id="changeformathtml" /> + <roundcube:endif /> + </div> <roundcube:object name="messageHeaders" class="headers-table" cellspacing="0" cellpadding="2" addicon="/images/icons/silhouette.png" summary="Message headers" /> <roundcube:object name="messageFullHeaders" id="full-headers" /> <roundcube:object name="messageAttachments" id="attachment-list" /> @@ -58,10 +66,20 @@ </div> +<roundcube:if condition="!env:extwin" /> <script type="text/javascript"> var mailviewsplitv = new rcube_splitter({id:'mailviewsplitterv', p1: 'mailboxlist-container', p2: 'messageframe', orientation: 'v', relative: true, start: 165}); rcmail.add_onload('mailviewsplitv.init()'); </script> +<roundcube:endif /> + +<div id="attachmentmenu" class="popupmenu"> + <ul class="toolbarmenu"> + <li><roundcube:button command="open-attachment" id="attachmenuopen" type="link" label="open" class="openlink" classAct="openlink active" innerclass="openlink" /></li> + <li><roundcube:button command="download-attachment" id="attachmenudownload" type="link" label="download" class="downloadlink" classAct="downloadlink active" innerclass="downloadlink" /></li> + <roundcube:container name="attachmentmenu" id="attachmentmenu" /> + </ul> +</div> </body> </html> diff --git a/skins/classic/templates/messageerror.html b/skins/classic/templates/messageerror.html index 918e3092a..d02508942 100644 --- a/skins/classic/templates/messageerror.html +++ b/skins/classic/templates/messageerror.html @@ -42,7 +42,7 @@ <div id="mailboxlist-container"> <div class="boxtitle"><roundcube:label name="mailboxlist" /></div> <div class="boxlistcontent"> - <roundcube:object name="mailboxlist" id="mailboxlist" folder_filter="mail" /> + <roundcube:object name="mailboxlist" id="mailboxlist" class="treelist" folder_filter="mail" /> </div> <div class="boxfooter"></div> </div> diff --git a/skins/classic/templates/messagepreview.html b/skins/classic/templates/messagepreview.html index 78b2306f6..80dbe381a 100644 --- a/skins/classic/templates/messagepreview.html +++ b/skins/classic/templates/messagepreview.html @@ -3,11 +3,21 @@ <head> <title><roundcube:object name="pagetitle" /></title> <roundcube:include file="/includes/links.html" /> +<script type="text/javascript" src="/splitter.js"></script> +<script type="text/javascript" src="/functions.js"></script> </head> -<body class="iframe"> +<body class="iframe" onload="rcube_init_mail_ui()"> <div class="messageheaderbox"> -<roundcube:button command="extwin" image="/images/icons/extwin.png" width="15" height="15" title="openinextwin" id="openextwinlink" /> + <div id="messagelinks"> + <roundcube:if condition="env:optional_format=='text'" /> + <roundcube:button command="change-format" prop="text" image="/images/icons/text.png" width="15" height="15" title="changeformattext" id="changeformattext" /> + <roundcube:endif /> + <roundcube:if condition="env:optional_format=='html'" /> + <roundcube:button command="change-format" prop="html" image="/images/icons/html.png" width="15" height="15" title="changeformathtml" id="changeformathtml" /> + <roundcube:endif /> + <roundcube:button command="extwin" image="/images/icons/extwin.png" width="15" height="15" title="openinextwin" id="openextwinlink" /> + </div> <roundcube:object name="messageHeaders" class="headers-table" cellspacing="0" cellpadding="2" addicon="/images/icons/silhouette.png" summary="Message headers" /> <roundcube:object name="messageFullHeaders" id="full-headers" /> <roundcube:object name="messageAttachments" id="attachment-list" /> @@ -16,5 +26,13 @@ <roundcube:object name="messageObjects" id="message-objects" /> <roundcube:object name="messageBody" id="messagebody" /> +<div id="attachmentmenu" class="popupmenu"> + <ul class="toolbarmenu"> + <li><roundcube:button command="open-attachment" id="attachmenuopen" type="link" label="open" class="openlink" classAct="openlink active" innerclass="openlink" /></li> + <li><roundcube:button command="download-attachment" id="attachmenudownload" type="link" label="download" class="downloadlink" classAct="downloadlink active" innerclass="downloadlink" /></li> + <roundcube:container name="attachmentmenu" id="attachmentmenu" /> + </ul> +</div> + </body> </html> diff --git a/skins/larry/addressbook.css b/skins/larry/addressbook.css index 74bc0d7d8..ff3951497 100644 --- a/skins/larry/addressbook.css +++ b/skins/larry/addressbook.css @@ -8,8 +8,6 @@ * License. It is allowed to copy, distribute, transmit and to adapt the work * by keeping credits to the original autors in the README file. * See http://creativecommons.org/licenses/by-sa/3.0/ for details. - * - * $Id$ */ #addressview-left { @@ -85,10 +83,23 @@ background-position: 6px -766px; } -#directorylist li.addressbook.selected a { +#directorylist li.addressbook.selected > a { background-position: 6px -791px; } +#directorylist li.addressbook ul li:last-child { + border-bottom: 0; +} + +#directorylist li.addressbook ul.groups { + margin: 0; + padding: 0; +} + +#directorylist li.addressbook ul.groups li { + width: 100%; +} + #directorylist li.contactgroup a { padding-left: 62px; background-position: 32px -1555px; @@ -114,6 +125,12 @@ margin-left: 8px; } +#directorylist li.addressbook div.collapsed, +#directorylist li.addressbook div.expanded { + top: 15px; + left: 20px; +} + #contacts-table .contact td.name { background-position: 6px -1603px; } @@ -319,3 +336,13 @@ a.deletebutton { text-indent: -5000px; background: url(images/buttons.png) -7px -377px no-repeat; } + +#import-box { + position: absolute; + bottom: 28px; + top: 34px; + left: 0; + right: 0; + overflow: auto; + padding: 10px; +} diff --git a/skins/larry/embed.css b/skins/larry/embed.css new file mode 100644 index 000000000..2c8ba39dc --- /dev/null +++ b/skins/larry/embed.css @@ -0,0 +1,34 @@ +/** + * Roundcube webmail "embedded" stylesheets + * + * Copyright (c) 2012, The Roundcube Dev Team + * + * The contents are subject to the Creative Commons Attribution-ShareAlike + * License. It is allowed to copy, distribute, transmit and to adapt the work + * by keeping credits to the original autors in the README file. + * See http://creativecommons.org/licenses/by-sa/3.0/ for details. + */ + +.rcmail-inline-message { + font-family: sans-serif; + font-size: 11px; + font-weight: bold; + color: #996600; + border: 1px solid #ffdf0e; + background: url("images/messages.png") no-repeat scroll 5px -83px #fef893; + padding: 6px 12px 4px 30px; + margin-bottom: 0.8em; +} + +.rcmail-inline-message > button { + margin-left: 1em; + vertical-align: baseline; +} + +.rcmail-inline-message em { + font-size: 90%; +} + +.rcmail-inline-buttons { + margin-bottom: 0; +} diff --git a/skins/larry/ie7hacks.css b/skins/larry/ie7hacks.css index f07d79a65..6d7af4787 100644 --- a/skins/larry/ie7hacks.css +++ b/skins/larry/ie7hacks.css @@ -17,6 +17,18 @@ height: expression((parseInt(document.documentElement.clientHeight)-150)+'px'); } +.minimal #mainscreen { + height: expression((parseInt(document.documentElement.clientHeight)-82)+'px'); +} + +.minimal #mainscreen.offset { + height: expression((parseInt(document.documentElement.clientHeight)-120)+'px'); +} + +#messagepartframe { + height: expression((parseInt(this.parentNode.offsetHeight)-1)+'px'); +} + input.button { display: inline; font-size: 90%; @@ -29,7 +41,8 @@ a.deletebutton, .boxfooter .listbutton .inner, .attachmentslist li a.delete, .attachmentslist li a.cancelupload, -.previewheader .iconlink { +.previewheader .iconlink, +.minimal #taskbar .button-inner { /* workaround for text-indent which also offsets the background image */ text-indent: 0; font-size: 0; @@ -125,7 +138,7 @@ ul.toolbarmenu li label { padding: 3px 8px; } -#quicksearchbar input { +.searchbox input { padding-top: 4px; padding-bottom: 2px; } @@ -183,3 +196,16 @@ ul.toolbarmenu li label { padding: 0 1px 0 0; } +.minimal #topline { + width: 100%; + height: 18px; + box-sizing: border-box; +} + + +.minimal #taskbar a:hover .tooltip { + right: 34px; + top: 1px; +} + + diff --git a/skins/larry/iehacks.css b/skins/larry/iehacks.css index 83ea946fa..960ce7648 100644 --- a/skins/larry/iehacks.css +++ b/skins/larry/iehacks.css @@ -7,8 +7,6 @@ * License. It is allowed to copy, distribute, transmit and to adapt the work * by keeping credits to the original autors in the README file. * See http://creativecommons.org/licenses/by-sa/3.0/ for details. - * - * $Id$ */ input.button { @@ -31,7 +29,8 @@ input.button.mainaction:active { filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#2a2e31', endColorstr='#505050', GradientType=0); } -a.button { +a.button, +.buttongroup { filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#e6e6e6', GradientType=0); } @@ -49,6 +48,10 @@ input.button:active { filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#bababa', endColorstr='#d8d8d8', GradientType=0); } +.buttongroup a.button.selected { + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#909090', endColorstr='#858585', GradientType=0); +} + #message.statusbar { filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eaeaea', endColorstr='#c8c8c8', GradientType=0); } @@ -65,6 +68,12 @@ input.button:active { filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#404040', endColorstr='#060606', GradientType=0); } +#toplogo { + position: absolute; + top: 0px; + left: 10px; +} + .records-table tr.selected td { filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#019bc6', endColorstr='#017cb4', GradientType=0); } diff --git a/skins/larry/images/buttons.gif b/skins/larry/images/buttons.gif Binary files differindex d8a33d6b2..8a4a78ee4 100644 --- a/skins/larry/images/buttons.gif +++ b/skins/larry/images/buttons.gif diff --git a/skins/larry/images/buttons.png b/skins/larry/images/buttons.png Binary files differindex 7d042cb23..54bee0156 100644 --- a/skins/larry/images/buttons.png +++ b/skins/larry/images/buttons.png diff --git a/skins/larry/images/filetypes.png b/skins/larry/images/filetypes.png Binary files differindex 0e197d55a..53b2eee9a 100644 --- a/skins/larry/images/filetypes.png +++ b/skins/larry/images/filetypes.png diff --git a/skins/larry/includes/footer.html b/skins/larry/includes/footer.html index ee93fcf57..a4fa69296 100644 --- a/skins/larry/includes/footer.html +++ b/skins/larry/includes/footer.html @@ -8,4 +8,16 @@ $(document).ready(function(){ }); </script> +<!--[if lte IE 8]> +<script type="text/javascript"> + +// fix missing :last-child selectors +$(document).ready(function(){ + $('ul.treelist ul').each(function(i,ul){ + $('li:last-child', ul).css('border-bottom', 0); + }); +}); + +</script> +<![endif]--> diff --git a/skins/larry/includes/header.html b/skins/larry/includes/header.html index 4be475bac..f2efb8e06 100644 --- a/skins/larry/includes/header.html +++ b/skins/larry/includes/header.html @@ -1,31 +1,33 @@ <div id="header"> <div id="topline"> <div class="topleft"> + <roundcube:container name="topline-left" id="topline-left" /> <roundcube:button name="about" type="link" label="about" class="about-link" onclick="UI.show_about(this);return false" /> <roundcube:if condition="config:support_url" /> <a href="<roundcube:var name='config:support_url' />" target="_blank" class="support-link" id="supportlink"><roundcube:label name="support" /></a> <roundcube:endif /> </div> - + <roundcube:container name="topline-center" id="topline-center" /> <div class="topright"> - <roundcube:if condition="!env:extwin" /> + <roundcube:container name="topline-right" id="topline-right" /> + <roundcube:if condition="!env:extwin && !env:framed" /> <span class="username"><roundcube:object name="username" /></span> <roundcube:button command="logout" label="logout" class="button-logout" /> - <roundcube:else /> + <roundcube:elseif condition="env:extwin" /> <roundcube:button command="close" label="close" class="closelink" /> <roundcube:endif /> </div> - - <roundcube:container name="topline" id="topline" /> </div> -<roundcube:if condition="!env:extwin" /> +<roundcube:if condition="!env:extwin && !env:framed" /> <div id="topnav"> <div id="taskbar" class="topright"> <roundcube:button command="mail" label="mail" class="button-mail" classSel="button-mail button-selected" innerClass="button-inner" /> <roundcube:button command="addressbook" label="addressbook" class="button-addressbook" classSel="button-addressbook button-selected" innerClass="button-inner" /> <roundcube:container name="taskbar" id="taskbar" /> <roundcube:button command="settings" label="settings" class="button-settings" classSel="button-settings button-selected" innerClass="button-inner" /> + <roundcube:button command="logout" label="logout" class="button-logout" classSel="button-logout" innerClass="button-inner" /> + <span class="minmodetoggle"></span> </div> <roundcube:object name="logo" src="/images/roundcube_logo.png" id="toplogo" border="0" alt="Logo" onclick="rcmail.command('switch-task','mail');return false;" /> </div> diff --git a/skins/larry/includes/mailtoolbar.html b/skins/larry/includes/mailtoolbar.html index 31472cbb3..59f2d581a 100644 --- a/skins/larry/includes/mailtoolbar.html +++ b/skins/larry/includes/mailtoolbar.html @@ -1,3 +1,5 @@ +<roundcube:button command="compose" type="link" class="button compose disabled" classAct="button compose" classSel="button compose pressed" label="compose" title="writenewmessage" /> +<span class="spacer"></span> <roundcube:button command="reply" type="link" class="button reply disabled" classAct="button reply" classSel="button reply pressed" label="reply" title="replytomessage" /> <span class="dropbutton"> <roundcube:button command="reply-all" type="link" class="button reply-all disabled" classAct="button reply-all" classSel="button reply-all pressed" label="replyall" title="replytoallmessage" /> @@ -17,7 +19,7 @@ <div id="forwardmenu" class="popupmenu"> <ul class="toolbarmenu"> - <li><roundcube:button command="forward" label="forwardinline" prop="sub" classAct="forwardlink active" class="forwardlink" /></li> + <li><roundcube:button command="forward-inline" label="forwardinline" prop="sub" classAct="forwardlink active" class="forwardlink" /></li> <li><roundcube:button command="forward-attachment" label="forwardattachment" prop="sub" classAct="forwardattachmentlink active" class="forwardattachmentlink" /></li> <roundcube:container name="forwardmenu" id="forwardmenu" /> </ul> diff --git a/skins/larry/mail.css b/skins/larry/mail.css index 48eba6e02..b5f0822a3 100644 --- a/skins/larry/mail.css +++ b/skins/larry/mail.css @@ -2,14 +2,12 @@ * Roundcube webmail styles for the Email section * * Copyright (c) 2012, The Roundcube Dev Team - * Screendesign by FLINT / Büro für Gestaltung, bueroflint.com + * Screendesign by FLINT / B�ro f�r Gestaltung, bueroflint.com * * The contents are subject to the Creative Commons Attribution-ShareAlike * License. It is allowed to copy, distribute, transmit and to adapt the work * by keeping credits to the original autors in the README file. * See http://creativecommons.org/licenses/by-sa/3.0/ for details. - * - * $Id$ */ #mailview-left { @@ -143,7 +141,7 @@ a.iconbutton.threadmode.selected { background-position: 6px 2px; } -#mailboxlist li:first-child { +#mailboxlist > li:first-child { border-radius: 4px 4px 0 0; border-top: 0; } @@ -158,7 +156,7 @@ a.iconbutton.threadmode.selected { background-position: 6px 3px; } -#mailboxlist li.mailbox.unread a { +#mailboxlist li.mailbox.unread > a { padding-right: 36px; } @@ -226,6 +224,17 @@ a.iconbutton.threadmode.selected { color: #017cb4; } +#mailboxlist li.mailbox div.treetoggle { + top: 13px; + left: 19px; +} + +#mailboxlist li.mailbox ul li:last-child { + border-bottom: 0; +} + +/* nested mailboxes */ + #mailboxlist li.mailbox ul { list-style: none; margin: 0; @@ -233,50 +242,57 @@ a.iconbutton.threadmode.selected { border-top: 1px solid #bbd3da; } -#mailboxlist li.mailbox ul li { - padding-left: 26px; -} - #mailboxlist li.mailbox ul li a { - background-position: 6px -93px; + padding-left: 52px; /* 36 + 1 x 16 */ + background-position: 22px -93px; /* 6 + 1 x 16 */ } - #mailboxlist li.mailbox ul li.selected > a { - background-position: 6px -117px; + background-position: 22px -117px; } - -#mailboxlist li.mailbox ul li:last-child { - border-bottom: 0; +#mailboxlist li.mailbox ul li div.treetoggle { + left: 33px; + top: 14px; } -#mailboxlist li.mailbox div.collapsed, -#mailboxlist li.mailbox div.expanded { - position: absolute; - top: 13px; - left: 19px; - width: 13px; - height: 13px; - background: url(images/listicons.png) -3px -144px no-repeat; - cursor: pointer; +#mailboxlist li.mailbox ul ul li.mailbox a { + padding-left: 68px; /* 2x */ + background-position: 38px -93px; } - -#mailboxlist li.mailbox div.expanded { - background-position: -3px -168px; +#mailboxlist li.mailbox ul ul li.selected > a { + background-position: 38px -117px; } - -#mailboxlist li.mailbox.selected > div.collapsed { - background-position: -23px -144px; +#mailboxlist li.mailbox ul ul li div.treetoggle { + left: 48px; } -#mailboxlist li.mailbox.selected > div.expanded { - background-position: -23px -168px; +#mailboxlist li.mailbox ul ul ul li.mailbox a { + padding-left: 84px; /* 3x */ + background-position: 54px -93px; +} +#mailboxlist li.mailbox ul ul ul li.selected > a { + background-position: 54px -117px; +} +#mailboxlist li.mailbox ul ul ul li div.treetoggle { + left: 64px; } +#mailboxlist li.mailbox ul ul ul ul li.mailbox a { + padding-left: 100px; /* 4x */ + background-position: 70px -93px; +} +#mailboxlist li.mailbox ul ul ul ul li.selected > a { + background-position: 70px -117px; +} +#mailboxlist li.mailbox ul ul ul ul li div.treetoggle { + left: 80px; +} -#mailboxlist li.mailbox ul li div.collapsed, -#mailboxlist li.mailbox ul li div.expanded { - left: 43px; - top: 14px; +/* indent folders on levels > 4 */ +#mailboxlist li.mailbox ul ul ul ul ul li { + padding-left: 16px; +} +#mailboxlist li.mailbox ul ul ul ul ul li div.treetoggle { + left: 96px; } #mailboxlist li.mailbox .unreadcount { @@ -332,7 +348,7 @@ a.iconbutton.threadmode.selected { position: absolute; right: 256px; width: auto; - top: 7px; + top: 2px; } #searchfilter select { @@ -440,7 +456,7 @@ a.iconbutton.threadmode.selected { } #messagelist tr td.date { - width: 125px; + width: 135px; } #messagelist tr.message { @@ -729,7 +745,7 @@ h2.subject { h3.subject { font-size: 14px; - margin: 0 8em 0 0; + margin: 0 12em 0 0; padding: 8px 8px 4px 8px; white-space: nowrap; overflow: hidden; @@ -852,7 +868,7 @@ div.more-headers { } div.hide-headers { - background-position: center -1589px; + background-position: center -1600px; } #all-headers { @@ -934,15 +950,20 @@ div.hide-headers { border-radius: 4px; } -#messageheader #countcontrols { +#messageheader #countcontrols, +#messageheader #formatcontrols { position: absolute; top: 8px; right: 8px; - width: 20em; text-align: right; white-space: nowrap; } +#messageheader #formatcontrols { + top: 38px; + right: 8px; +} + #messageheader .pagenav .countdisplay { min-width: 0; padding-right: 0.5em; @@ -988,7 +1009,7 @@ div.hide-headers { color: #960; border: 1px solid #ffdf0e; background-color: #fef893; - background-position: 5px -85px; + background-position: 5px -83px; padding: 6px 12px 4px 30px; white-space: normal; } @@ -999,20 +1020,22 @@ div.hide-headers { } div.message-part, -div.message-htmlpart { - padding: 0 2px 10px 2px; - border-top: 2px solid #f0f0f0; +div.message-htmlpart, +div.message-partheaders { + padding: 10px 2px; + border-top: 1px solid #ccc; } #messagebody div:first-child { + padding-top: 0; border-top: 0; } div.message-part pre, div.message-htmlpart pre, div.message-part div.pre { - margin: 0px; - padding: 0px; + margin: 0; + padding: 0; font-family: monospace; font-size: 12px; white-space: -moz-pre-wrap !important; @@ -1021,7 +1044,7 @@ div.message-part div.pre { } div.message-part span.sig { - color: #666666; + color: #666; } div.message-part blockquote { @@ -1029,7 +1052,7 @@ div.message-part blockquote { border-left: 2px solid blue; border-right: 2px solid blue; background-color: #F6F6F6; - margin: 2px 0px 2px 0px; + margin: 2px 0 2px 0; padding: 1px 8px 1px 10px; } @@ -1040,9 +1063,27 @@ div.message-part blockquote blockquote { } div.message-part blockquote blockquote blockquote { - color: #990000; - border-left: 2px solid #bb0000; - border-right: 2px solid #bb0000; + color: #900; + border-left: 2px solid #b00; + border-right: 2px solid #b00; +} + +div.message-partheaders { + margin-top: 8px; + padding: 8px 0; +} + +div.message-partheaders .headers-table { + width: 100%; +} + +div.message-partheaders .headers-table td.header-title { + width: auto; + padding-left: 0; +} + +div.message-partheaders .headers-table td.header { + width: 88%; } #messagebody > hr { @@ -1100,13 +1141,15 @@ div.message-part blockquote blockquote blockquote { #messagepartcontainer { position: absolute; top: 60px; - left: 0px; - right: 0px; - bottom: 0px; + left: 0; + right: 0; + bottom: 0; } #messagepartframe { border: 0; + width: 100%; + height: 100%; } /*** message composition ***/ @@ -1135,6 +1178,23 @@ div.message-part blockquote blockquote blockquote { bottom: 0; } +#composequicksearch { + position: relative; + padding: 4px; + background: #c7e3ef; +} + +#composequicksearch .searchbox input { + width: 100%; + height: 26px; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +#composequicksearch #searchmenulink { + width: 15px; +} + #compose-contacts #directorylist { border-bottom: 4px solid #c7e3ef; } diff --git a/skins/larry/print.css b/skins/larry/print.css index fa256746b..6481ea9e6 100644 --- a/skins/larry/print.css +++ b/skins/larry/print.css @@ -7,8 +7,6 @@ * License. It is allowed to copy, distribute, transmit and to adapt the work * by keeping credits to the original autors in the README file. * See http://creativecommons.org/licenses/by-sa/3.0/ for details. - * - * $Id$ */ body { font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif; diff --git a/skins/larry/styles.css b/skins/larry/styles.css index b4a4d81e1..cfbf9ac5f 100644 --- a/skins/larry/styles.css +++ b/skins/larry/styles.css @@ -8,8 +8,6 @@ * License. It is allowed to copy, distribute, transmit and to adapt the work * by keeping credits to the original autors in the README file. * See http://creativecommons.org/licenses/by-sa/3.0/ for details. - * - * $Id$ */ body { @@ -71,6 +69,12 @@ textarea.placeholder { font-weight: bold; } +/* fixes vertical alignment of checkboxes and labels */ +label input, +label span { + vertical-align: middle; +} + /*** buttons ***/ input.button { @@ -173,7 +177,8 @@ input.mainaction { /** link buttons **/ -a.button { +a.button, +.buttongroup { display: inline-block; margin: 0 2px; padding: 2px 5px; @@ -194,6 +199,11 @@ a.button { text-decoration: none; } +.buttongroup { + padding: 0; + white-space: nowrap; +} + a.button:focus, input.button:focus { border-color: #4fadd5; @@ -227,6 +237,29 @@ a.button.disabled span.inner { filter: alpha(opacity=40); } +.buttongroup a.button { + margin: 0; + border-width: 0 1px 0 0; + border-radius: 0; + background: none; + box-shadow: none; + -o-box-shadow: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; +} + +.buttongroup a.button.first, +.buttongroup a.button:first-child { + border-radius: 4px 0 0 4px; + border-left: 0; +} + +.buttongroup a.button.last, +.buttongroup a.button:last-child { + border-radius: 0 4px 4px 0; + border-right: 0; +} + a.button.pressed, a.button:active, input.button:active { @@ -262,6 +295,21 @@ input.button:active { background: linear-gradient(top, #bababa 0%, #d8d8d8 100%); } +.buttongroup a.button.selected, +.buttongroup a.button.selected:hover { + background: #8a8a8a; + background: -moz-linear-gradient(top, #909090 0%, #858585 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#909090), color-stop(100%,#858585)); + background: -o-linear-gradient(top, #909090 0%, #858585 100%); + background: -ms-linear-gradient(top, #909090 0%, #858585 100%); + background: linear-gradient(top, #909090 0%, #858585 100%); + -webkit-box-shadow: inset 0 1px 2px 0 #555; + -moz-box-shadow: inset 0 1px 2px 0 #555; + box-shadow: inset 0 1px 2px 0 #555; + border-right-color: #555; + border-left-color: #555; +} + .pagenav a.button { padding: 1px 3px; height: 16px; @@ -269,6 +317,12 @@ input.button:active { margin-bottom: 1px; } +.pagenav .buttongroup a.button, +.pagenav .buttongroup a.button:hover { + padding: 1px 5px; + margin-bottom: 0; +} + .pagenav a.button span.inner { display: inline-block; width: 16px; @@ -314,6 +368,20 @@ input.button:active { background-position: -29px -271px; } +.pagenav a.changeformat.html span.inner { + background-position: -7px -1859px; +} +.pagenav a.changeformat.html.selected span.inner { + background-position: -29px -1859px; +} + +.pagenav a.changeformat.text span.inner { + background-position: -7px -1874px; +} +.pagenav a.changeformat.text.selected span.inner { + background-position: -29px -1874px; +} + .pagenav .countdisplay { display: inline-block; padding: 3px 1em 0 1em; @@ -504,15 +572,21 @@ a.iconlink.upload { /*** basic page layout ***/ +#header { + overflow-x: hidden; /* Chrome bug #1488851 */ +} + #topline { height: 18px; background: url(images/linen_header.jpg) repeat #666; border-bottom: 1px solid #4f4f4f; padding: 2px 0 2px 10px; color: #aaa; + text-align: center; } #topnav { + position: relative; height: 46px; margin-bottom: 10px; padding: 0 0 0 10px; @@ -569,9 +643,157 @@ a.iconlink.upload { color: #fff; } +#taskbar .button-logout { + display: none; +} + +#taskbar a.button-logout span.button-inner { + background-position: -2px -1791px; +} + +#taskbar a.button-logout:hover span.button-inner { + background-position: -2px -1829px; +} + + +/*** minimal version of the page header ***/ + +.minimal #topline { + position: fixed; + top: -18px; + background: #444; + z-index: 5000; + width: 100%; + height: 22px; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.minimal #topline:hover { + top: 0px; + opacity: 0.94; + filter: alpha(opacity=94); + -webkit-transition: top 0.3s ease-in-out; + -moz-transition: top 0.3s ease-in-out; + -o-transition: top 0.3s ease-in-out; + transition: top 0.3s ease-in-out; +} + +.extwin #topline, +.extwin #topline:hover { + position: static; + top: 0px; + height: 18px; + width: auto; + -moz-box-sizing: content-box; + box-sizing: content-box; + opacity: 0.999; +} + +.partwin #topline { + position: absolute; + right: 6px; + top: 18px; + width: auto; + z-index: 100; + background: transparent; + background: none; + border: 0; +} + +.minimal #topline a.button-logout { + display: none; +} + +.minimal #topline span.username { + display: inline-block; + padding-top: 2px; +} + +.minimal #topnav { + position: relative; + top: 4px; + height: 42px; +} + +.minimal #taskbar a { + position: relative; + padding: 10px 10px 0 6px; + height: 32px; +} + +.minimal #taskbar .button-logout { + display: inline-block; +} + +.minimal #taskbar .button-inner { + top: -4px; + padding: 0; + height: 24px !important; + width: 27px; + text-indent: -5000px; +} + +#taskbar .tooltip { + display: none; +} + +.minimal #taskbar .tooltip { + position: absolute; + top: -500px; + right: 2px; + display: inline-block; + padding: 2px 8px 3px 8px; + background: #444; + background: -moz-linear-gradient(top, #444 0%, #333 100%); + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#444), color-stop(100%,#333)); + background: -o-linear-gradient(top, #444 0%, #333 100%); + background: -ms-linear-gradient(top, #444 0%, #333 100%); + background: linear-gradient(top, #444 0%, #333 100%); + color: #eee; + font-weight: bold; + white-space: nowrap; + border: 1px solid #777; + box-shadow: 0 1px 5px 0 #333; + -moz-box-shadow: 0 1px 5px 0 #333; + -webkit-box-shadow: 0 1px 5px 0 #333; + -o-box-shadow: 0 1px 5px 0 #333; + z-index: 200; + white-space: nowrap; + text-shadow: 0px 1px 1px #000; +} + +.minimal #taskbar .tooltip:after { + content: ""; + position: absolute; + top: -4px; + right: 15px; + border-style: solid; + border-width: 0 4px 4px; + border-color: #888 transparent; + /* reduce the damage in FF3.0 */ + display: block; + width: 0; + z-index: 251; +} + +.ie8 .minimal #taskbar .tooltip:after { + top: -6px; +} + +.minimal #taskbar a:hover .tooltip { + display: block; + top: 39px; +} + /*** taskbar ***/ +#taskbar { + position: relative; + padding-right: 18px; +} + #taskbar a { display: inline-block; height: 34px; @@ -629,6 +851,22 @@ a.iconlink.upload { background-position: 0 -168px; } +#taskbar .minmodetoggle { + position: absolute; + top: 0; + right: 0; + display: block; + width: 19px; + height: 46px; + cursor: pointer; + background: url(images/buttons.png) -35px -1778px no-repeat; +} + +.minimal #taskbar .minmodetoggle { + height: 42px; + background-position: -35px -1820px; +} + #mainscreen { position: absolute; top: 88px; @@ -637,12 +875,24 @@ a.iconlink.upload { bottom: 20px; } +.minimal #mainscreen { + top: 62px; +} + +.minimal #mainscreen.offset { + top: 102px; +} + +.partwin #mainscreen { + top: 60px +} + .extwin #mainscreen { top: 40px; } #mainscreen.offset { - top: 130px; + top: 132px; } #mainscreen .offset { @@ -800,6 +1050,10 @@ ul.listing li { background-color: #d9ecf4; } +ul.listing li ul { + border-top: 1px solid #bbd3da; +} + ul.listing li.droptarget, table.listing tr.droptarget td { background-color: #e8e798; @@ -816,6 +1070,32 @@ table.layout td { vertical-align: top; } +ul.treelist li { + position: relative; +} + +ul.treelist li div.treetoggle { + position: absolute; + top: 13px; + left: 19px; + width: 13px; + height: 13px; + background: url(images/listicons.png) -3px -144px no-repeat; + cursor: pointer; +} + +ul.treelist li div.treetoggle.expanded { + background-position: -3px -168px; +} + +ul.treelist li.selected > div.collapsed { + background-position: -23px -144px; +} + +ul.treelist li.selected > div.expanded { + background-position: -23px -168px; +} + .listbox .boxfooter { position: absolute; bottom: 0; @@ -1060,6 +1340,10 @@ body.iframe { margin: 38px 0 10px 0; } +body.iframe.error { + background: #ededed; +} + body.iframe.floatingbuttons { margin-bottom: 40px; } @@ -1328,17 +1612,21 @@ ul.proplist li { /*** quicksearch **/ +.searchbox { + position: relative; +} + #quicksearchbar { position: absolute; right: 1px; - top: 0; + top: 2px; width: 240px; } +.searchbox input, #quicksearchbar input { width: 176px; margin: 0; - margin-top: 7px; padding: 3px 30px 3px 34px; height: 18px; background: #f1f1f1; @@ -1347,15 +1635,17 @@ ul.proplist li { font-size: 11px; } +.searchbox #searchmenulink, #quicksearchbar #searchmenulink { position: absolute; - top: 12px; + top: 5px; left: 6px; } +.searchbox #searchreset, #quicksearchbar #searchreset { position: absolute; - top: 11px; + top: 4px; right: 1px; } @@ -1507,6 +1797,7 @@ ul.proplist li { } .toolbar a.button.export { + min-width: 74px; background-position: center -1054px; } @@ -1522,7 +1813,6 @@ ul.proplist li { background-position: 0 -1745px; } - a.menuselector { display: inline-block; border: 1px solid #ababab; @@ -1973,16 +2263,27 @@ ul.toolbarmenu li span.conversation { background-position: 0 -390px; } -.attachmentslist li.html { +.attachmentslist li.sig, +.attachmentslist li.pgp-signature, +.attachmentslist li.pkcs7-signature { background-position: 0 -442px; } +.attachmentslist li.html { + background-position: 0 -468px; +} + +.attachmentslist li.eml, +.attachmentslist li.rfc822 { + background-position: 0 -494px; +} + .attachmentslist li a, #compose-attachments ul li { display: block; color: #333; font-weight: bold; - padding: 8px 4px 3px 30px; + padding: 8px 15px 3px 30px; text-shadow: 0px 1px 1px #fff; text-decoration: none; white-space: nowrap; @@ -1990,6 +2291,17 @@ ul.toolbarmenu li span.conversation { text-overflow: ellipsis; } +.attachmentslist li a.drop { + background: url(images/buttons.png) no-repeat scroll center -1570px; + width: 14px; + height: 20px; + cursor: pointer; + position: absolute; + right: 0; + top: 0; + padding: 0; +} + #compose-attachments ul li { padding-right: 28px; } diff --git a/skins/larry/svggradients.css b/skins/larry/svggradients.css index 06c6f4732..c40d44f4b 100644 --- a/skins/larry/svggradients.css +++ b/skins/larry/svggradients.css @@ -7,8 +7,6 @@ * License. It is allowed to copy, distribute, transmit and to adapt the work * by keeping credits to the original autors in the README file. * See http://creativecommons.org/licenses/by-sa/3.0/ for details. - * - * $Id$ */ input.button { @@ -31,7 +29,8 @@ input.button.mainaction:active { background-image: url(svggradient.php?c=2a2e31;505050); } -a.button { +a.button, +.buttongroup { background-image: url(svggradient.php?c=f9f9f9;e6e6e6); } @@ -49,6 +48,10 @@ input.button:active { background-image: url(svggradient.php?c=bababa;d8d8d8); } +.buttongroup a.button.selected { + background-image: url(svggradient.php?c=909090;858585); +} + #message.statusbar { background-image: url(svggradient.php?c=eaeaea;c8c8c8); } diff --git a/skins/larry/templates/about.html b/skins/larry/templates/about.html index 2c18e8889..301c301a9 100644 --- a/skins/larry/templates/about.html +++ b/skins/larry/templates/about.html @@ -10,7 +10,7 @@ <roundcube:object name="aboutcontent" /> <h2 class="sysname">Roundcube Webmail <roundcube:object name="version" /></h2> -<p class="copyright">Copyright © 2005-2012, The Roundcube Dev Team</p> +<p class="copyright">Copyright © 2005-2013, The Roundcube Dev Team</p> <p class="license">This program is free software; you can redistribute it and/or modify it under the terms of the <a href="http://www.gnu.org/licenses/gpl.html" target="_blank">GNU General Public License</a> as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.<br/> diff --git a/skins/larry/templates/addressbook.html b/skins/larry/templates/addressbook.html index c39c2fe87..401640f1f 100644 --- a/skins/larry/templates/addressbook.html +++ b/skins/larry/templates/addressbook.html @@ -13,7 +13,11 @@ <!-- toolbar --> <div id="addressbooktoolbar" class="toolbar"> <roundcube:button command="import" type="link" class="button import disabled" classAct="button import" classSel="button import pressed" label="import" title="importcontacts" /> - <roundcube:button command="export" type="link" class="button export disabled" classAct="button export" classSel="button export pressed" label="export" title="exportvcards" /> + <span class="dropbutton"> + <roundcube:button command="export" type="link" class="button export disabled" classAct="button export" classSel="button export pressed" label="export" title="exportvcards" /> + <span class="dropbuttontip" id="exportmenulink" onclick="UI.show_popup('exportmenu');return false"></span> + </span> + <span class="spacer"></span> <roundcube:button command="compose" type="link" class="button compose disabled" classAct="button compose" classSel="button compose pressed" label="compose" title="writenewmessage" /> <roundcube:button command="advanced-search" type="link" class="button search disabled" classAct="button search" classSel="button search pressed" label="advanced" title="advsearch" /> @@ -26,7 +30,7 @@ <div id="directorylistbox" class="uibox listbox"> <h2 id="directorylist-header" class="boxtitle"><roundcube:label name="groups" /></h2> <div id="directorylist-content" class="scroller withfooter"> - <roundcube:object name="directorylist" id="directorylist" class="listing" /> + <roundcube:object name="directorylist" id="directorylist" class="treelist listing" /> </div> <div id="directorylist-footer" class="boxfooter"> <roundcube:button command="group-create" type="link" title="newcontactgroup" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" content="+" /><roundcube:button name="groupoptions" id="groupoptionslink" type="link" title="moreactions" class="listbutton groupactions" onclick="UI.show_popup('groupoptions');return false" innerClass="inner" content="⚙" /> @@ -38,7 +42,7 @@ <div id="addressview-right"> <!-- search box --> -<div id="quicksearchbar"> +<div id="quicksearchbar" class="searchbox"> <roundcube:object name="searchform" id="quicksearchbox" /> <roundcube:button name="searchmenulink" id="searchmenulink" class="iconbutton searchoptions" onclick="UI.show_popup('searchmenu');return false" title="searchmod" content=" " /> <roundcube:button command="reset-search" id="searchreset" class="iconbutton reset" title="resetsearch" content=" " /> @@ -75,14 +79,20 @@ </div><!-- end mainscreen --> +<div id="exportmenu" class="popupmenu"> + <ul class="toolbarmenu"> + <li><roundcube:button command="export" label="exportall" prop="sub" class="exportalllink" classAct="exportalllink active" /></li> + <li><roundcube:button command="export-selected" label="exportsel" prop="sub" class="exportsellink" classAct="exportsellink active" /></li> + </ul> +</div> <div id="searchmenu" class="popupmenu"> <ul class="toolbarmenu"> - <li><label><input type="checkbox" name="s_mods[]" value="name" id="s_mod_name" onclick="UI.set_searchmod(this)" /> <roundcube:label name="name" /></label></li> - <li><label><input type="checkbox" name="s_mods[]" value="firstname" id="s_mod_firstname" onclick="UI.set_searchmod(this)" /> <roundcube:label name="firstname" /></label></li> - <li><label><input type="checkbox" name="s_mods[]" value="surname" id="s_mod_surname" onclick="UI.set_searchmod(this)" /> <roundcube:label name="surname" /></label></li> - <li><label><input type="checkbox" name="s_mods[]" value="email" id="s_mod_email" onclick="UI.set_searchmod(this)" /> <roundcube:label name="email" /></label></li> - <li><label><input type="checkbox" name="s_mods[]" value="*" id="s_mod_all" onclick="UI.set_searchmod(this)" /> <roundcube:label name="allfields" /></label></li> + <li><label><input type="checkbox" name="s_mods[]" value="name" id="s_mod_name" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="name" /></span></label></li> + <li><label><input type="checkbox" name="s_mods[]" value="firstname" id="s_mod_firstname" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="firstname" /></span></label></li> + <li><label><input type="checkbox" name="s_mods[]" value="surname" id="s_mod_surname" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="surname" /></span></label></li> + <li><label><input type="checkbox" name="s_mods[]" value="email" id="s_mod_email" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="email" /></span></label></li> + <li><label><input type="checkbox" name="s_mods[]" value="*" id="s_mod_all" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="allfields" /></span></label></li> </ul> </div> diff --git a/skins/larry/templates/compose.html b/skins/larry/templates/compose.html index de3b5bfff..9cfe7fe4c 100644 --- a/skins/larry/templates/compose.html +++ b/skins/larry/templates/compose.html @@ -39,6 +39,13 @@ <!-- inline address book --> <div id="compose-contacts" class="uibox listbox"> <h2 class="boxtitle"><roundcube:label name="contacts" /></h2> + <div id="composequicksearch"> + <div class="searchbox"> + <roundcube:object name="searchform" id="contactsearchbox" /> + <a id="searchmenulink" class="iconbutton searchoptions"> </a> + <roundcube:button command="reset-search" id="searchreset" class="iconbutton reset" title="resetsearch" content=" " /> + </div> + </div> <roundcube:object name="addressbooks" id="directorylist" class="listing" /> <div class="scroller withfooter"> <roundcube:object name="addresslist" id="contacts-table" class="listing" noheader="true" /> diff --git a/skins/larry/templates/error.html b/skins/larry/templates/error.html index cd0fc9656..a65733eb0 100644 --- a/skins/larry/templates/error.html +++ b/skins/larry/templates/error.html @@ -4,9 +4,12 @@ <title><roundcube:object name="pagetitle" /></title> <roundcube:include file="/includes/links.html" /> </head> -<body> - +<roundcube:if condition="!env:framed" /> +<body class="error"> <roundcube:include file="/includes/header.html" /> +<roundcube:else /> +<body class="error iframe"> +<roundcube:endif /> <div class="uibox centerbox errorbox"> $__page_content diff --git a/skins/larry/templates/importcontacts.html b/skins/larry/templates/importcontacts.html index 89aea0a2e..d3d0f2b93 100644 --- a/skins/larry/templates/importcontacts.html +++ b/skins/larry/templates/importcontacts.html @@ -14,20 +14,19 @@ <roundcube:button command="list" type="link" class="button back disabled" classAct="button back" classSel="button back pressed" label="back" /> </div> -<div class="offset uibox contentbox"> +<div id="pluginbody" class="offset uibox contentbox"> <h2 class="boxtitle"><roundcube:label name="importcontacts" /></h2> -<div class="boxcontent readtext"> +<div id="import-box" class="boxcontent"> <roundcube:object name="importstep" /> - <br/> - <p class="formbuttons"> <roundcube:object name="importnav" class="button" /> </p> - </div> +<roundcube:object name="message" id="message" class="statusbar" /> + </div> <roundcube:include file="/includes/footer.html" /> diff --git a/skins/larry/templates/mail.html b/skins/larry/templates/mail.html index 8b205efbe..85cd5203b 100644 --- a/skins/larry/templates/mail.html +++ b/skins/larry/templates/mail.html @@ -21,8 +21,6 @@ <!-- toolbar --> <div id="messagetoolbar" class="toolbar"> <roundcube:button command="checkmail" type="link" class="button checkmail disabled" classAct="button checkmail" classSel="button checkmail pressed" label="refresh" title="checkmail" /> - <roundcube:button command="compose" type="link" class="button compose disabled" classAct="button compose" classSel="button compose pressed" label="compose" title="writenewmessage" /> - <span class="spacer"></span> <roundcube:include file="/includes/mailtoolbar.html" /> </div> @@ -32,7 +30,7 @@ <div id="folderlist-header"></div> <div id="mailboxcontainer" class="uibox listbox"> <div id="folderlist-content" class="scroller withfooter"> -<roundcube:object name="mailboxlist" id="mailboxlist" class="listing" folder_filter="mail" unreadwrap="%s" /> +<roundcube:object name="mailboxlist" id="mailboxlist" class="treelist listing" folder_filter="mail" unreadwrap="%s" /> </div> <div id="folderlist-footer" class="boxfooter"> <roundcube:button name="mailboxmenulink" id="mailboxmenulink" type="link" title="folderactions" class="listbutton groupactions" onclick="UI.show_popup('mailboxmenu');return false" innerClass="inner" content="⚙" /> @@ -54,7 +52,7 @@ </div> <!-- search box --> -<div id="quicksearchbar"> +<div id="quicksearchbar" class="searchbox"> <roundcube:object name="searchform" id="quicksearchbox" /> <roundcube:button name="searchmenulink" id="searchmenulink" class="iconbutton searchoptions" onclick="UI.show_popup('searchmenu');return false" title="searchmod" content=" " /> <roundcube:button command="reset-search" id="searchreset" class="iconbutton reset" title="resetsearch" content=" " /> @@ -130,12 +128,13 @@ <div id="searchmenu" class="popupmenu"> <ul class="toolbarmenu"> - <li><label><input type="checkbox" name="s_mods[]" value="subject" id="s_mod_subject" onclick="UI.set_searchmod(this)" /> <roundcube:label name="subject" /></label></li> - <li><label><input type="checkbox" name="s_mods[]" value="from" id="s_mod_from" onclick="UI.set_searchmod(this)" /> <roundcube:label name="from" /></label></li> - <li><label><input type="checkbox" name="s_mods[]" value="to" id="s_mod_to" onclick="UI.set_searchmod(this)" /> <roundcube:label name="to" /></label></li> - <li><label><input type="checkbox" name="s_mods[]" value="cc" id="s_mod_cc" onclick="UI.set_searchmod(this)" /> <roundcube:label name="cc" /></label></li> - <li><label><input type="checkbox" name="s_mods[]" value="bcc" id="s_mod_bcc" onclick="UI.set_searchmod(this)" /> <roundcube:label name="bcc" /></label></li> - <li><label><input type="checkbox" name="s_mods[]" value="text" id="s_mod_text" onclick="UI.set_searchmod(this)" /> <roundcube:label name="msgtext" /></label></li> + <li><label><input type="checkbox" name="s_mods[]" value="subject" id="s_mod_subject" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="subject" /></span></label></li> + <li><label><input type="checkbox" name="s_mods[]" value="from" id="s_mod_from" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="from" /></span></label></li> + <li><label><input type="checkbox" name="s_mods[]" value="to" id="s_mod_to" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="to" /></span></label></li> + <li><label><input type="checkbox" name="s_mods[]" value="cc" id="s_mod_cc" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="cc" /></span></label></li> + <li><label><input type="checkbox" name="s_mods[]" value="bcc" id="s_mod_bcc" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="bcc" /></span></label></li> + <li><label><input type="checkbox" name="s_mods[]" value="body" id="s_mod_body" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="body" /></span></label></li> + <li><label><input type="checkbox" name="s_mods[]" value="text" id="s_mod_text" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="msgtext" /></span></label></li> </ul> </div> @@ -179,19 +178,19 @@ <fieldset class="floating"> <legend><roundcube:label name="listcolumns" /></legend> <ul class="proplist"> - <li><label class="disabled"><input type="checkbox" name="list_col[]" value="threads" checked="checked" disabled="disabled" /> <roundcube:label name="threads" /></label></li> - <li><label class="disabled"><input type="checkbox" name="list_col[]" value="subject" checked="checked" disabled="disabled" /> <roundcube:label name="subject" /></label></li> - <li><label><input type="checkbox" name="list_col[]" value="fromto" /> <roundcube:label name="fromto" /></label></li> - <li><label><input type="checkbox" name="list_col[]" value="from" /> <roundcube:label name="from" /></label></li> - <li><label><input type="checkbox" name="list_col[]" value="to" /> <roundcube:label name="to" /></label></li> - <li><label><input type="checkbox" name="list_col[]" value="replyto" /> <roundcube:label name="replyto" /></label></li> - <li><label><input type="checkbox" name="list_col[]" value="cc" /> <roundcube:label name="cc" /></label></li> - <li><label><input type="checkbox" name="list_col[]" value="date" /> <roundcube:label name="date" /></label></li> - <li><label><input type="checkbox" name="list_col[]" value="size" /> <roundcube:label name="size" /></label></li> - <li><label><input type="checkbox" name="list_col[]" value="status" /> <roundcube:label name="readstatus" /></label></li> - <li><label><input type="checkbox" name="list_col[]" value="attachment" /> <roundcube:label name="attachment" /></label></li> - <li><label><input type="checkbox" name="list_col[]" value="flag" /> <roundcube:label name="flag" /></label></li> - <li><label><input type="checkbox" name="list_col[]" value="priority" /> <roundcube:label name="priority" /></label></li> + <li><label class="disabled"><input type="checkbox" name="list_col[]" value="threads" checked="checked" disabled="disabled" /> <span><roundcube:label name="threads" /></span></label></li> + <li><label class="disabled"><input type="checkbox" name="list_col[]" value="subject" checked="checked" disabled="disabled" /> <span><roundcube:label name="subject" /></span></label></li> + <li><label><input type="checkbox" name="list_col[]" value="fromto" /> <span><roundcube:label name="fromto" /></span></label></li> + <li><label><input type="checkbox" name="list_col[]" value="from" /> <span><roundcube:label name="from" /></span></label></li> + <li><label><input type="checkbox" name="list_col[]" value="to" /> <span><roundcube:label name="to" /></span></label></li> + <li><label><input type="checkbox" name="list_col[]" value="replyto" /> <span><roundcube:label name="replyto" /></span></label></li> + <li><label><input type="checkbox" name="list_col[]" value="cc" /> <span><roundcube:label name="cc" /></span></label></li> + <li><label><input type="checkbox" name="list_col[]" value="date" /> <span><roundcube:label name="date" /></span></label></li> + <li><label><input type="checkbox" name="list_col[]" value="size" /> <span><roundcube:label name="size" /></span></label></li> + <li><label><input type="checkbox" name="list_col[]" value="status" /> <span><roundcube:label name="readstatus" /></span></label></li> + <li><label><input type="checkbox" name="list_col[]" value="attachment" /> <span><roundcube:label name="attachment" /></span></label></li> + <li><label><input type="checkbox" name="list_col[]" value="flag" /> <span><roundcube:label name="flag" /></span></label></li> + <li><label><input type="checkbox" name="list_col[]" value="priority" /> <span><roundcube:label name="priority" /></span></label></li> </ul> </fieldset> <roundcube:endif /> @@ -199,15 +198,15 @@ <fieldset class="floating"> <legend><roundcube:label name="listsorting" /></legend> <ul class="proplist"> - <li><label><input type="radio" name="sort_col" value="" /> <roundcube:label name="nonesort" /></label></li> - <li><label><input type="radio" name="sort_col" value="arrival" /> <roundcube:label name="arrival" /></label></li> - <li><label><input type="radio" name="sort_col" value="date" /> <roundcube:label name="sentdate" /></label></li> - <li><label><input type="radio" name="sort_col" value="subject" /> <roundcube:label name="subject" /></label></li> - <li><label><input type="radio" name="sort_col" value="fromto" /> <roundcube:label name="fromto" /></label></li> - <li><label><input type="radio" name="sort_col" value="from" /> <roundcube:label name="from" /></label></li> - <li><label><input type="radio" name="sort_col" value="to" /> <roundcube:label name="to" /></label></li> - <li><label><input type="radio" name="sort_col" value="cc" /> <roundcube:label name="cc" /></label></li> - <li><label><input type="radio" name="sort_col" value="size" /> <roundcube:label name="size" /></label></li> + <li><label><input type="radio" name="sort_col" value="" /> <span><roundcube:label name="nonesort" /></span></label></li> + <li><label><input type="radio" name="sort_col" value="arrival" /> <span><roundcube:label name="arrival" /></span></label></li> + <li><label><input type="radio" name="sort_col" value="date" /> <span><roundcube:label name="sentdate" /></span></label></li> + <li><label><input type="radio" name="sort_col" value="subject" /> <span><roundcube:label name="subject" /></span></label></li> + <li><label><input type="radio" name="sort_col" value="fromto" /> <span><roundcube:label name="fromto" /></span></label></li> + <li><label><input type="radio" name="sort_col" value="from" /> <span><roundcube:label name="from" /></span></label></li> + <li><label><input type="radio" name="sort_col" value="to" /> <span><roundcube:label name="to" /></span></label></li> + <li><label><input type="radio" name="sort_col" value="cc" /> <span><roundcube:label name="cc" /></span></label></li> + <li><label><input type="radio" name="sort_col" value="size" /> <span><roundcube:label name="size" /></span></label></li> </ul> </fieldset> <roundcube:endif /> @@ -215,8 +214,8 @@ <fieldset class="floating"> <legend><roundcube:label name="listorder" /></legend> <ul class="proplist"> - <li><label><input type="radio" name="sort_ord" value="ASC" /> <roundcube:label name="asc" /></label></li> - <li><label><input type="radio" name="sort_ord" value="DESC" /> <roundcube:label name="desc" /></label></li> + <li><label><input type="radio" name="sort_ord" value="ASC" /> <span><roundcube:label name="asc" /></span></label></li> + <li><label><input type="radio" name="sort_ord" value="DESC" /> <span><roundcube:label name="desc" /></span></label></li> </ul> </fieldset> <roundcube:endif /> diff --git a/skins/larry/templates/message.html b/skins/larry/templates/message.html index f7e188f5f..0e19afa40 100644 --- a/skins/larry/templates/message.html +++ b/skins/larry/templates/message.html @@ -14,7 +14,6 @@ <div id="messagetoolbar" class="toolbar fullwidth"> <roundcube:if condition="!env:extwin" /> <roundcube:button command="list" type="link" class="button back disabled" classAct="button back" classSel="button back pressed" label="back" /> - <span class="spacer"></span> <roundcube:endif /> <roundcube:include file="/includes/mailtoolbar.html" /> <div class="toolbarselect"> @@ -29,7 +28,7 @@ <!-- folders list --> <div id="mailboxcontainer" class="uibox listbox"> <div class="scroller"> -<roundcube:object name="mailboxlist" id="mailboxlist" class="listing" folder_filter="mail" unreadwrap="%s" /> +<roundcube:object name="mailboxlist" id="mailboxlist" class="treelist listing" folder_filter="mail" unreadwrap="%s" /> </div> </div> @@ -55,6 +54,21 @@ <roundcube:button command="nextmessage" type="link" class="button nextpage disabled" classAct="button nextpage" classSel="button nextpage pressed" innerClass="inner" title="nextmessage" content="&gt;" /> </div> +<roundcube:if condition="env:optional_format=='text'" /> +<div class="pagenav" id="formatcontrols"> + <span class="buttongroup"> + <roundcube:button command="change-format" prop="html" type="link" class="button first changeformat html selected" innerClass="inner" title="changeformathtml" /><roundcube:button command="change-format" prop="text" type="link" class="button last changeformat text" classSel="button last changeformat text pressed" innerClass="inner" title="changeformattext" /> + </span> +</div> +<roundcube:elseif condition="env:optional_format=='html'" /> +<div class="pagenav" id="formatcontrols"> + <span class="buttongroup"> + <roundcube:button command="change-format" prop="html" type="link" class="button first changeformat html" classSel="button first changeformat html pressed" innerClass="inner" title="changeformathtml" /><roundcube:button command="change-format" prop="text" type="link" class="button last changeformat text selected" innerClass="inner" title="changeformattext" /> + </span> +</div> +<roundcube:endif /> + + <div id="contactphoto"><roundcube:object name="contactphoto" /></div> </div> @@ -64,7 +78,7 @@ </div> <div class="leftcol"> <roundcube:object name="messageObjects" id="message-objects" /> -<roundcube:object name="messageBody" id="messagebody" /> +<roundcube:object name="messageBody" id="messagebody" headertableclass="message-partheaders headers-table" /> </div> </div> @@ -74,6 +88,14 @@ </div><!-- end mainscreen --> +<div id="attachmentmenu" class="popupmenu dropdown"> + <ul class="toolbarmenu"> + <li><roundcube:button command="open-attachment" id="attachmenuopen" type="link" label="open" class="icon" classAct="icon active" innerclass="icon extwin" /></li> + <li><roundcube:button command="download-attachment" id="attachmenudownload" type="link" label="download" class="icon" classAct="icon active" innerclass="icon download" /></li> + <roundcube:container name="attachmentmenu" id="attachmentmenu" /> + </ul> +</div> + <roundcube:include file="/includes/footer.html" /> </body> diff --git a/skins/larry/templates/messageerror.html b/skins/larry/templates/messageerror.html index 3c3c9acdb..a735d47f2 100644 --- a/skins/larry/templates/messageerror.html +++ b/skins/larry/templates/messageerror.html @@ -28,7 +28,7 @@ <!-- folders list --> <div id="mailboxcontainer" class="uibox listbox"> <div class="scroller"> - <roundcube:object name="mailboxlist" id="mailboxlist" class="listing" folder_filter="mail" unreadwrap="%s" /> + <roundcube:object name="mailboxlist" id="mailboxlist" class="treelist listing" folder_filter="mail" unreadwrap="%s" /> </div> </div> diff --git a/skins/larry/templates/messagepart.html b/skins/larry/templates/messagepart.html index e029973a8..dbb4940de 100644 --- a/skins/larry/templates/messagepart.html +++ b/skins/larry/templates/messagepart.html @@ -27,7 +27,7 @@ </div> <div id="messagepartcontainer" class="uibox"> -<roundcube:object name="messagePartFrame" id="messagepartframe" style="width:100%; height:100%" /> +<roundcube:object name="messagePartFrame" id="messagepartframe" frameborder="0" /> </div> </div> diff --git a/skins/larry/templates/messagepreview.html b/skins/larry/templates/messagepreview.html index 9eb4d1e00..b2af03485 100644 --- a/skins/larry/templates/messagepreview.html +++ b/skins/larry/templates/messagepreview.html @@ -30,6 +30,17 @@ <!-- record navigation --> <div id="countcontrols" class="pagenav"> +<roundcube:if condition="env:optional_format=='text'" /> + <span class="buttongroup"> + <roundcube:button command="change-format" prop="html" type="link" class="button first changeformat html selected" innerClass="inner" title="changeformathtml" content="HTML" /><roundcube:button command="change-format" prop="text" type="link" class="button last changeformat text" classSel="button changeformat text pressed" innerClass="inner" title="changeformattext" content="Text" /> + </span> + +<roundcube:elseif condition="env:optional_format=='html'" /> + <span class="buttongroup"> + <roundcube:button command="change-format" prop="html" type="link" class="button first changeformat html" classSel="button changeformat html pressed" innerClass="inner" title="changeformathtml" content="HTML" /><roundcube:button command="change-format" prop="text" type="link" class="button last changeformat text selected" innerClass="inner" title="changeformattext" content="Text" /> + </span> + +<roundcube:endif /> <roundcube:if condition="env:mailbox != config:drafts_mbox"> <roundcube:button command="reply" type="link" class="button reply" classSel="button reply pressed" innerClass="inner" title="replytomessage" content="<-" /> <roundcube:button command="reply-all" type="link" class="button replyall" classSel="button replyall pressed" innerClass="inner" title="replytoallmessage" content="<<-" /> @@ -47,10 +58,18 @@ </div> <div class="leftcol"> <roundcube:object name="messageObjects" id="message-objects" /> -<roundcube:object name="messageBody" id="messagebody" /> +<roundcube:object name="messageBody" id="messagebody" headertableclass="message-partheaders headers-table" /> </div> </div> +<div id="attachmentmenu" class="popupmenu dropdown"> + <ul class="toolbarmenu"> + <li><roundcube:button command="open-attachment" id="attachmenuopen" type="link" label="open" class="icon" classAct="icon active" innerclass="icon extwin" /></li> + <li><roundcube:button command="download-attachment" id="attachmenudownload" type="link" label="download" class="icon" classAct="icon active" innerclass="icon download" /></li> + <roundcube:container name="attachmentmenu" id="attachmentmenu" /> + </ul> +</div> + <roundcube:include file="/includes/footer.html" /> </body> diff --git a/skins/larry/ui.js b/skins/larry/ui.js index da4f2300e..75d38d9aa 100644 --- a/skins/larry/ui.js +++ b/skins/larry/ui.js @@ -1,7 +1,7 @@ /** * Roundcube functions for default skin interface * - * Copyright (c) 2011, The Roundcube Dev Team + * Copyright (c) 2013, The Roundcube Dev Team * * The contents are subject to the Creative Commons Attribution-ShareAlike * License. It is allowed to copy, distribute, transmit and to adapt the work @@ -17,6 +17,7 @@ function rcube_mail_ui() var popupconfig = { forwardmenu: { editable:1 }, searchmenu: { editable:1, callback:searchmenu }, + attachmentmenu: { }, listoptions: { editable:1 }, dragmessagemenu: { sticky:1 }, groupmenu: { above:1 }, @@ -37,12 +38,22 @@ function rcube_mail_ui() this.init_tabs = init_tabs; this.show_about = show_about; this.show_popup = show_popup; + this.add_popup = add_popup; this.set_searchmod = set_searchmod; this.show_uploadform = show_uploadform; this.show_header_row = show_header_row; this.hide_header_row = hide_header_row; + // set minimal mode on small screens (don't wait for document.ready) + if (window.$ && document.body) { + var minmode = rcmail.get_cookie('minimalmode'); + if (parseInt(minmode) || (minmode === null && $(window).height() < 850)) { + $(document.body).addClass('minimal'); + } + } + + /** * */ @@ -59,10 +70,21 @@ function rcube_mail_ui() { rcmail.addEventListener('message', message_displayed); + /*** prepare minmode functions ***/ + $('#taskbar a').each(function(i,elem){ + $(elem).append('<span class="tooltip">' + $('.button-inner', this).html() + '</span>') + }); + + $('#taskbar .minmodetoggle').click(function(e){ + var ismin = $(document.body).toggleClass('minimal').hasClass('minimal'); + rcmail.set_cookie('minimalmode', ismin?1:0); + $(window).resize(); + }); + /*** mail task ***/ if (rcmail.env.task == 'mail') { - rcmail.addEventListener('menu-open', show_listoptions); - rcmail.addEventListener('menu-save', save_listoptions); + rcmail.addEventListener('menu-open', menu_open); + rcmail.addEventListener('menu-save', menu_save); rcmail.addEventListener('responseafterlist', function(e){ switch_view_mode(rcmail.env.threading ? 'thread' : 'list') }); var dragmenu = $('#dragmessagemenu'); @@ -75,6 +97,11 @@ function rcube_mail_ui() rcmail.addEventListener('aftershow-headers', function() { layout_messageview(); }); rcmail.addEventListener('afterhide-headers', function() { layout_messageview(); }); $('#previewheaderstoggle').click(function(e){ toggle_preview_headers(this); return false }); + + // add menu link for each attachment + $('#attachment-list > li').each(function() { + $(this).append($('<a class="drop">').click(function() { attachmentmenu(this); })); + }); } else if (rcmail.env.action == 'compose') { rcmail.addEventListener('aftertoggle-editor', function(){ window.setTimeout(function(){ layout_composeview() }, 200); }); @@ -97,7 +124,8 @@ function rcube_mail_ui() }).css('cursor', 'pointer'); // toggle compose options if opened in new window and they were visible before - if (window.opener && opener.rcmail && opener.rcmail.env.action == 'compose' && $('#composeoptionstoggle', opener.document).hasClass('remove')) + var opener_rc = rcmail.opener(); + if (opener_rc && opener_rc.env.action == 'compose' && $('#composeoptionstoggle', opener.document).hasClass('remove')) $('#composeoptionstoggle').click(); new rcube_splitter({ id:'composesplitterv', p1:'#composeview-left', p2:'#composeview-right', @@ -260,28 +288,36 @@ function rcube_mail_ui() /** * Update UI on window resize */ - function resize() + function resize(e) { - if (rcmail.env.task == 'mail') { - if (rcmail.env.action == 'show' || rcmail.env.action == 'preview') - layout_messageview(); - else if (rcmail.env.action == 'compose') - layout_composeview(); - } + // resize in intervals to prevent lags and double onresize calls in Chrome (#1489005) + var interval = e ? 10 : 0; - // make iframe footer buttons float if scrolling is active - $('body.iframe .footerleft').each(function(){ - var footer = $(this), - body = $(document.body), - floating = footer.hasClass('floating'), - overflow = body.outerHeight(true) > $(window).height(); - - if (overflow != floating) { - var action = overflow ? 'addClass' : 'removeClass'; - footer[action]('floating'); - body[action]('floatingbuttons'); + if (rcmail.resize_timeout) + window.clearTimeout(rcmail.resize_timeout); + + rcmail.resize_timeout = window.setTimeout(function() { + if (rcmail.env.task == 'mail') { + if (rcmail.env.action == 'show' || rcmail.env.action == 'preview') + layout_messageview(); + else if (rcmail.env.action == 'compose') + layout_composeview(); } - }); + + // make iframe footer buttons float if scrolling is active + $('body.iframe .footerleft').each(function(){ + var footer = $(this), + body = $(document.body), + floating = footer.hasClass('floating'), + overflow = body.outerHeight(true) > $(window).height(); + + if (overflow != floating) { + var action = overflow ? 'addClass' : 'removeClass'; + footer[action]('floating'); + body[action]('floatingbuttons'); + } + }); + }, interval); } /** @@ -395,13 +431,25 @@ function rcube_mail_ui() /** + * Register a popup menu + */ + function add_popup(popup, config) + { + var obj = popups[popup] = $('#'+popup); + obj.appendTo(document.body); // move it to top for proper absolute positioning + + if (obj.length) + popupconfig[popup] = $.extend(popupconfig[popup] || {}, config || {}); + } + + /** * Trigger for popup menus */ function show_popup(popup, show, config) { // auto-register menu object if (config || !popupconfig[popup]) - popupconfig[popup] = $.extend(popupconfig[popup] || {}, config); + add_popup(popup, config); var visible = show_popupmenu(popup, show), config = popupconfig[popup]; @@ -416,7 +464,7 @@ function rcube_mail_ui() { var obj = popups[popup], config = popupconfig[popup], - ref = $('#'+popup+'link'), + ref = $(config.link ? config.link : '#'+popup+'link'), above = config.above; if (!obj) { @@ -432,7 +480,7 @@ function rcube_mail_ui() else if (config.toggle && show && obj.is(':visible')) show = false; - if (show && ref) { + if (show && ref.length) { var parent = ref.parent(), win = $(window), pos; @@ -555,6 +603,19 @@ function rcube_mail_ui() /**** popup callbacks ****/ + function menu_open(p) + { + if (p && p.props && p.props.menu == 'attachmentmenu') + show_popupmenu('attachmentmenu'); + else + show_listoptions(); + } + + function menu_save(prop) + { + save_listoptions(); + } + function searchmenu(show) { if (show && rcmail.env.search_mods) { @@ -585,6 +646,21 @@ function rcube_mail_ui() } } + function attachmentmenu(elem) + { + var id = elem.parentNode.id.replace(/^attach/, ''); + + $('#attachmenuopen').unbind('click').attr('onclick', '').click(function(e) { + return rcmail.command('open-attachment', id, this); + }); + + $('#attachmenudownload').unbind('click').attr('onclick', '').click(function() { + rcmail.command('download-attachment', id, this); + }); + + popupconfig.attachmentmenu.link = elem; + rcmail.command('menu-open', {menu: 'attachmentmenu', id: id}); + } function spellmenu(show) { @@ -920,11 +996,11 @@ function rcube_scroller(list, top, bottom) this.delay = 500; this.top - .mouseenter(function() { ref.ts = window.setTimeout(function() { ref.scroll('down'); }, ref.delay); }) + .mouseenter(function() { if (rcmail.drag_active) ref.ts = window.setTimeout(function() { ref.scroll('down'); }, ref.delay); }) .mouseout(function() { if (ref.ts) window.clearTimeout(ref.ts); }); this.bottom - .mouseenter(function() { ref.ts = window.setTimeout(function() { ref.scroll('up'); }, ref.delay); }) + .mouseenter(function() { if (rcmail.drag_active) ref.ts = window.setTimeout(function() { ref.scroll('up'); }, ref.delay); }) .mouseout(function() { if (ref.ts) window.clearTimeout(ref.ts); }); this.scroll = function(dir) |