diff options
Diffstat (limited to 'skins')
46 files changed, 1018 insertions, 410 deletions
diff --git a/skins/classic/addressbook.css b/skins/classic/addressbook.css index 5afa4592f..415142e0c 100644 --- a/skins/classic/addressbook.css +++ b/skins/classic/addressbook.css @@ -224,6 +224,37 @@ -o-text-overflow: ellipsis; } +#contacts-table .contact.readonly td +{ + font-style: italic; +} + +#contacts-table td.name +{ + width: 95%; +} + +#contacts-table td.action +{ + width: 12px; + padding: 0px 6px 0 4px; + text-align: right; +} + +#contacts-table td.action a +{ + font-size: 16px; + font-weight: bold; + font-style: normal; + text-decoration: none; + color: #333; +} + +#contacts-table .selected td.action a +{ + color: #fff; +} + #contacts-box { position: absolute; diff --git a/skins/classic/common.css b/skins/classic/common.css index 1f62fbe07..3c322f0ed 100644 --- a/skins/classic/common.css +++ b/skins/classic/common.css @@ -283,6 +283,15 @@ body > #message a text-decoration: underline; } +body.extwin #closelink +{ + position: absolute; + top: 5px; + right: 20px; + text-align: right; + z-index:100; +} + .box { border: 1px solid #999; diff --git a/skins/classic/embed.css b/skins/classic/embed.css index b9715c77c..6d2c63c6a 100644 --- a/skins/classic/embed.css +++ b/skins/classic/embed.css @@ -14,12 +14,16 @@ font-size: 14px; color: #000; margin-bottom: .8em; - min-height: 20px; + 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; diff --git a/skins/classic/functions.js b/skins/classic/functions.js index 499783b3f..af561c37b 100644 --- a/skins/classic/functions.js +++ b/skins/classic/functions.js @@ -94,7 +94,7 @@ function rcube_mail_ui() messagemenu: {id:'messagemenu'}, attachmentmenu: {id:'attachmentmenu'}, listmenu: {id:'listmenu', editable:1}, - dragmessagemenu:{id:'dragmessagemenu', sticky:1}, + dragmenu: {id:'dragmenu', sticky:1}, groupmenu: {id:'groupoptionsmenu', above:1}, mailboxmenu: {id:'mailboxoptionsmenu', above:1}, composemenu: {id:'composeoptionsmenu', editable:1, overlap:1}, @@ -162,9 +162,9 @@ show_popupmenu: function(popup, show) } }, -dragmessagemenu: function(show) +dragmenu: function(show) { - this.popups.dragmessagemenu.obj[show?'show':'hide'](); + this.popups.dragmenu.obj[show?'show':'hide'](); }, forwardmenu: function(show) @@ -492,14 +492,18 @@ switch_preview_pane: function(elem) /* Message composing */ init_compose_form: function() { - var f, field, fields = ['cc', 'bcc', 'replyto', 'followupto'], + var f, v, field, fields = ['cc', 'bcc', 'replyto', 'followupto'], div = document.getElementById('compose-div'), headers_div = document.getElementById('compose-headers-div'); // Show input elements with non-empty value for (f=0; f<fields.length; f++) { - if ((field = $('#_'+fields[f])) && field.length && field.val() != '') - rcmail_ui.show_header_form(fields[f]); + v = fields[f]; field = $('#_'+v); + if (field.length) { + field.on('change', {v:v}, function(e) { if (this.value) rcmail_ui.show_header_form(e.data.v); }); + if (field.val() != '') + rcmail_ui.show_header_form(v); + } } // prevent from form data loss when pressing ESC key in IE @@ -617,14 +621,130 @@ prev_sibling: function(elm) while (ps && ps.nodeType == 3) ps = ps.previousSibling; return ps; +}, + +enable_command: function(p) +{ + if (p.command == 'reply-list') { + var label = rcmail.gettext(p.status ? 'replylist' : 'replyall'); + $('a.button.replyAll').attr('title', label); + } } }; /** - * Scroller + * Roundcube generic layer (floating box) class + * + * @constructor */ +function rcube_layer(id, attributes) +{ + this.name = id; + // create a new layer in the current document + this.create = function(arg) + { + var l = (arg.x) ? arg.x : 0, + t = (arg.y) ? arg.y : 0, + w = arg.width, + h = arg.height, + z = arg.zindex, + vis = arg.vis, + parent = arg.parent, + obj = document.createElement('DIV'); + + obj.id = this.name; + obj.style.position = 'absolute'; + obj.style.visibility = (vis) ? (vis==2) ? 'inherit' : 'visible' : 'hidden'; + obj.style.left = l+'px'; + obj.style.top = t+'px'; + if (w) + obj.style.width = w.toString().match(/\%$/) ? w : w+'px'; + if (h) + obj.style.height = h.toString().match(/\%$/) ? h : h+'px'; + if (z) + obj.style.zIndex = z; + + if (parent) + parent.appendChild(obj); + else + document.body.appendChild(obj); + + this.elm = obj; + }; + + // create new layer + if (attributes != null) { + this.create(attributes); + this.name = this.elm.id; + } + else // just refer to the object + this.elm = document.getElementById(id); + + if (!this.elm) + return false; + + + // ********* layer object properties ********* + + this.css = this.elm.style; + this.event = this.elm; + this.width = this.elm.offsetWidth; + this.height = this.elm.offsetHeight; + this.x = parseInt(this.elm.offsetLeft); + this.y = parseInt(this.elm.offsetTop); + this.visible = (this.css.visibility=='visible' || this.css.visibility=='show' || this.css.visibility=='inherit') ? true : false; + + + // ********* layer object methods ********* + + // move the layer to a specific position + this.move = function(x, y) + { + this.x = x; + this.y = y; + this.css.left = Math.round(this.x)+'px'; + this.css.top = Math.round(this.y)+'px'; + }; + + // change the layers width and height + this.resize = function(w,h) + { + this.css.width = w+'px'; + this.css.height = h+'px'; + this.width = w; + this.height = h; + }; + + // show or hide the layer + this.show = function(a) + { + if(a == 1) { + this.css.visibility = 'visible'; + this.visible = true; + } + else if(a == 2) { + this.css.visibility = 'inherit'; + this.visible = true; + } + else { + this.css.visibility = 'hidden'; + this.visible = false; + } + }; + + // write new content into a Layer + this.write = function(cont) + { + this.elm.innerHTML = cont; + }; + +}; + +/** + * Scroller + */ function rcmail_scroller(list, top, bottom) { var ref = this; @@ -664,31 +784,37 @@ function rcmail_scroller(list, top, bottom) function iframe_events() { // this==iframe - var doc = this.contentDocument ? this.contentDocument : this.contentWindow ? this.contentWindow.document : null; - rcube_event.add_listener({ element: doc, object:rcmail_ui, method:'body_mouseup', event:'mouseup' }); + try { + var doc = this.contentDocument ? this.contentDocument : this.contentWindow ? this.contentWindow.document : null; + rcube_event.add_listener({ element: doc, object:rcmail_ui, method:'body_mouseup', event:'mouseup' }); + } + catch (e) { + // catch possible "Permission denied" error in IE + }; }; // Abbreviate mailbox names to fit width of the container function rcube_render_mailboxlist() { - var list = $('#mailboxlist > li a, #mailboxlist ul:visible > li a'); + var list = $('#mailboxlist > li > a, #mailboxlist ul:visible > li > a'); // it's too slow with really big number of folders, especially on IE - if (list.length > (bw.ie ? 25 : 100)) + if (list.length > (bw.ie && bw.vendver < 9 ? 40 : 100)) return; - list.each(function(){ + list.each(function() { var elem = $(this), text = elem.data('text'); if (!text) { - text = elem.text().replace(/\s+\(.+$/, ''); + text = elem.text().replace(/\s+\([0-9]+\)$/, ''); elem.data('text', text); } + if (text.length < 6) return; - var abbrev = fit_string_to_size(text, elem, elem.width() - elem.children('span.unreadcount').width()); + var abbrev = fit_string_to_size(text, elem, elem.width() - elem.children('span.unreadcount').width() - 16); if (abbrev != text) elem.attr('title', text); elem.contents().filter(function(){ return (this.nodeType == 3); }).get(0).data = abbrev; @@ -698,19 +824,23 @@ function rcube_render_mailboxlist() // inspired by https://gist.github.com/24261/7fdb113f1e26111bd78c0c6fe515f6c0bf418af5 function fit_string_to_size(str, elem, len) { - var w, span, result = str, ellip = '...'; + var w, span, $span, result = str, ellip = '...'; if (!rcmail.env.tmp_span) { // it should be appended to elem to use the same css style // but for performance reasons we'll append it to body (once) - span = $('<b>').css({visibility: 'hidden', padding: '0px'}) + span = $('<b>').css({visibility: 'hidden', padding: '0px', + 'font-family': elem.css('font-family'), + 'font-size': elem.css('font-size')}) .appendTo($('body', document)).get(0); rcmail.env.tmp_span = span; } else { span = rcmail.env.tmp_span; } - span.innerHTML = result; + + $span = $(span); + $span.text(result); // on first run, check if string fits into the length already. w = span.offsetWidth; @@ -723,7 +853,7 @@ function fit_string_to_size(str, elem, len) while (true) { offLeft = mid - cut; offRight = mid + cut; - span.innerHTML = str.substring(0,offLeft) + ellip + str.substring(offRight); + $span.text(str.substring(0,offLeft) + ellip + str.substring(offRight)); // break loop if string fits size if (offLeft < 3 || span.offsetWidth) @@ -787,7 +917,7 @@ function percent_indicator(obj, data) var bar2 = $('<div>'); bar2.css({position: 'absolute', top: pos.top + 1, left: pos.left + 1, width: width + 'px', height: height + 'px', zIndex: 98}) - .addClass('quota_bg'); + .addClass('quota_bg'); if (quota >= limit_high) { main.addClass(' quota_text_high'); @@ -810,8 +940,8 @@ function percent_indicator(obj, data) // Optional parameters used by TinyMCE var rcmail_editor_settings = { - skin : "default", // "default", "o2k7" - skin_variant : "" // "", "silver", "black" + skin: "default", // "default", "o2k7" + skin_variant: "" // "", "silver", "black" }; var rcmail_ui; @@ -822,45 +952,52 @@ function rcube_init_mail_ui() rcube_event.add_listener({ object:rcmail_ui, method:'body_mouseup', event:'mouseup' }); rcube_event.add_listener({ object:rcmail_ui, method:'body_keydown', event:'keydown' }); - if (rcmail.env.quota_content) - update_quota(rcmail.env.quota_content); - rcmail.addEventListener('setquota', update_quota); - - $('iframe').load(iframe_events) - .contents().mouseup(function(e){rcmail_ui.body_mouseup(e)}); - - if (rcmail.env.task == 'mail') { - 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'); - - if (rcmail.gui_objects.mailboxlist) { - rcmail.addEventListener('responseaftermark', rcube_render_mailboxlist); - rcmail.addEventListener('responseaftergetunread', rcube_render_mailboxlist); - rcmail.addEventListener('responseaftercheck-recent', rcube_render_mailboxlist); - rcmail.addEventListener('aftercollapse-folder', rcube_render_mailboxlist); + rcmail.addEventListener('init', function() { + if (rcmail.env.quota_content) + update_quota(rcmail.env.quota_content); + rcmail.addEventListener('setquota', update_quota); + + $('iframe').load(iframe_events) + .contents().mouseup(function(e){rcmail_ui.body_mouseup(e)}); + + if (rcmail.env.task == 'mail') { + rcmail.addEventListener('enable-command', 'enable_command', 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('dragmenu', 'dragmenu'); + + if (rcmail.gui_objects.mailboxlist) { + rcmail.treelist.addEventListener('expand', rcube_render_mailboxlist); + rcmail.addEventListener('responseaftermark', rcube_render_mailboxlist); + rcmail.addEventListener('responseaftergetunread', rcube_render_mailboxlist); + rcmail.addEventListener('responseaftercheck-recent', rcube_render_mailboxlist); + rcmail.addEventListener('responseafterrefresh', rcube_render_mailboxlist); + rcmail.addEventListener('afterimport-messages', function(){ rcmail_ui.show_popup('uploadform', false); }); + + new rcmail_scroller('#mailboxlist-content', '#mailboxlist-title', '#mailboxlist-footer'); + } - new rcmail_scroller('#mailboxlist-content', '#mailboxlist-title', '#mailboxlist-footer'); + 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); }); - 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); }); + if (rcmail.gui_objects.folderlist) + new rcmail_scroller('#directorylist-content', '#directorylist-title', '#directorylist-footer'); - if (rcmail.gui_objects.folderlist) - new rcmail_scroller('#directorylist-content', '#directorylist-title', '#directorylist-footer'); - } - else if (rcmail.env.task == 'settings') { - if (rcmail.gui_objects.subscriptionlist) - new rcmail_scroller('#folderlist-content', '#folderlist-title', '#folderlist-footer'); - } + rcmail.gui_object('dragmenu', 'dragmenu'); + } + else if (rcmail.env.task == 'settings') { + if (rcmail.gui_objects.subscriptionlist) + new rcmail_scroller('#folderlist-content', '#folderlist-title', '#folderlist-footer'); + } + }); } diff --git a/skins/classic/images/contactgroup.png b/skins/classic/images/contactgroup.png Binary files differnew file mode 100644 index 000000000..c46383255 --- /dev/null +++ b/skins/classic/images/contactgroup.png diff --git a/skins/classic/images/favicon.ico b/skins/classic/images/favicon.ico Binary files differindex b3bd18c12..9ef2f3b9e 100644 --- a/skins/classic/images/favicon.ico +++ b/skins/classic/images/favicon.ico diff --git a/skins/classic/images/mail_toolbar.png b/skins/classic/images/mail_toolbar.png Binary files differindex e68035da5..4a8431715 100644 --- a/skins/classic/images/mail_toolbar.png +++ b/skins/classic/images/mail_toolbar.png diff --git a/skins/classic/includes/messagetoolbar.html b/skins/classic/includes/messagetoolbar.html index bd14f490f..8f8efd291 100644 --- a/skins/classic/includes/messagetoolbar.html +++ b/skins/classic/includes/messagetoolbar.html @@ -21,7 +21,7 @@ <roundcube:button name="markmenulink" id="markmenulink" type="link" class="button markmessage" title="markmessages" onclick="rcmail_ui.show_popup('markmenu');return false" content=" " /> <roundcube:button name="messagemenulink" id="messagemenulink" type="link" class="button messagemenu" title="moreactions" onclick="rcmail_ui.show_popup('messagemenu');return false" content=" " /> <roundcube:if condition="template:name == 'message'" /> -<roundcube:object name="mailboxlist" type="select" noSelection="moveto" maxlength="25" onchange="rcmail.command('moveto', this.options[this.selectedIndex].value)" class="mboxlist" folder_filter="mail" /> +<roundcube:object name="mailboxlist" type="select" noSelection="moveto" maxlength="25" onchange="rcmail.command('move', this.options[this.selectedIndex].value)" class="mboxlist" folder_filter="mail" /> <roundcube:endif /> </div> diff --git a/skins/classic/mail.css b/skins/classic/mail.css index 7c350ca3d..b8cc9f351 100644 --- a/skins/classic/mail.css +++ b/skins/classic/mail.css @@ -107,6 +107,14 @@ background-position: -192px -32px; } +#messagetoolbar a.print { + background-position: -224px 0; +} + +#messagetoolbar a.printSel { + background-position: -224px -32px; +} + #messagetoolbar a.markmessage { background-position: -256px 0; } @@ -155,6 +163,14 @@ background-position: -416px -32px; } +#messagetoolbar a.download { + background-position: -480px 0; +} + +#messagetoolbar a.downloadSel { + background-position: -480px -32px; +} + #messagetoolbar select.mboxlist { position: relative; @@ -284,10 +300,38 @@ #messagepartcontainer { position: absolute; - top: 80px; - left: 20px; - right: 20px; - bottom: 20px; + top: 0; + left: 170px; + right: 0; + bottom: 0; +} + +#messagepartheader +{ + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 160px; + border: 1px solid #999999; + background-color: #F9F9F9; + overflow: hidden; +} + +#messagepartheader table +{ + width: 100%; + table-layout: fixed; +} + +#messagepartheader table td +{ + text-overflow: ellipsis; +} + +#messagepartheader table td.title +{ + width: 60px; } #mailcontframe @@ -329,31 +373,7 @@ height: 100%; min-height: 100%; /* Chrome 14 bug */ border: 1px solid #999999; - background-color: #F9F9F9; -} - - -#partheader -{ - position: absolute; - top: 10px; - left: 220px; - right: 20px; - height: 40px; -} - -#partheader table td -{ - padding-left: 2px; - padding-right: 4px; - vertical-align: middle; - font-size: 11px; -} - -#partheader table td.title -{ - color: #666666; - font-weight: bold; + background-color: #fff; } @@ -611,14 +631,22 @@ body.messagelist background-color: #F9F9F9; } -#messagelist +table.messagelist { width: 100%; display: table; table-layout: fixed; + border-collapse: collapse; + border-spacing: 0; + z-index: 1; } -#messagelist thead tr td +table.messagelist.fixedcopy +{ + z-index: 2; +} + +.messagelist thead tr td { height: 20px; padding: 0 4px 0 2px; @@ -630,23 +658,23 @@ body.messagelist font-weight: bold; } -#messagelist thead tr td.sortedASC, -#messagelist thead tr td.sortedDESC +.messagelist thead tr td.sortedASC, +.messagelist thead tr td.sortedDESC { background-position: 0 -26px; } -#messagelist thead tr td.sortedASC a +.messagelist thead tr td.sortedASC a { background: url(images/icons/sort.gif) right 0 no-repeat; } -#messagelist thead tr td.sortedDESC a +.messagelist thead tr td.sortedDESC a { background: url(images/icons/sort.gif) right -14px no-repeat; } -#messagelist thead tr td a +.messagelist thead tr td a { display: block; width: auto !important; @@ -655,18 +683,19 @@ body.messagelist text-decoration: none; } -#messagelist thead tr td.size +.messagelist thead tr td.size.sortedASC a, +.messagelist thead tr td.size.sortedDESC a { - text-align: left; + padding-right: 18px; } -#messagelist thead tr td.subject +.messagelist thead tr td.subject { padding-left: 18px; width: 99%; } -#messagelist tbody tr td +.messagelist tbody tr td { height: 20px; padding: 0; @@ -680,7 +709,7 @@ body.messagelist cursor: default; } -#messagelist tbody tr td a +.messagelist tbody tr td a { color: #000; text-decoration: none; @@ -688,53 +717,53 @@ body.messagelist cursor: inherit; } -#messagelist td img +.messagelist td img { vertical-align: middle; display: inline-block; } -#messagelist tbody tr td.flag, -#messagelist tbody tr td.status, -#messagelist tbody tr td.subject span.status +.messagelist tbody tr td.flag, +.messagelist tbody tr td.status, +.messagelist tbody tr td.subject span.status { cursor: pointer; } -#messagelist tr td.flag span, -#messagelist tr td.status span, -#messagelist tr td.attachment span, -#messagelist tr td.priority span +.messagelist tr td.flag span, +.messagelist tr td.status span, +.messagelist tr td.attachment span, +.messagelist tr td.priority span { display: block; width: 15px; } -#messagelist tr td div.collapsed, -#messagelist tr td div.expanded, -#messagelist tr td.threads div.listmenu, -#messagelist tr td.attachment span.attachment, -#messagelist tr td.attachment span.report, -#messagelist tr td.priority span.priority, -#messagelist tr td.priority span.prio1, -#messagelist tr td.priority span.prio2, -#messagelist tr td.priority span.prio3, -#messagelist tr td.priority span.prio4, -#messagelist tr td.priority span.prio5, -#messagelist tr td.flag span.flagged, -#messagelist tr td.flag span.unflagged, -#messagelist tr td.flag span.unflagged:hover, -#messagelist tr td.status span.status, -#messagelist tr td.status span.msgicon, -#messagelist tr td.status span.deleted, -#messagelist tr td.status span.unread, -#messagelist tr td.status span.unreadchildren, -#messagelist tr td.subject span.msgicon, -#messagelist tr td.subject span.deleted, -#messagelist tr td.subject span.unread, -#messagelist tr td.subject span.replied, -#messagelist tr td.subject span.forwarded, -#messagelist tr td.subject span.unreadchildren +.messagelist tr td div.collapsed, +.messagelist tr td div.expanded, +.messagelist tr td.threads div.listmenu, +.messagelist tr td.attachment span.attachment, +.messagelist tr td.attachment span.report, +.messagelist tr td.priority span.priority, +.messagelist tr td.priority span.prio1, +.messagelist tr td.priority span.prio2, +.messagelist tr td.priority span.prio3, +.messagelist tr td.priority span.prio4, +.messagelist tr td.priority span.prio5, +.messagelist tr td.flag span.flagged, +.messagelist tr td.flag span.unflagged, +.messagelist tr td.flag span.unflagged:hover, +.messagelist tr td.status span.status, +.messagelist tr td.status span.msgicon, +.messagelist tr td.status span.deleted, +.messagelist tr td.status span.unread, +.messagelist tr td.status span.unreadchildren, +.messagelist tr td.subject span.msgicon, +.messagelist tr td.subject span.deleted, +.messagelist tr td.subject span.unread, +.messagelist tr td.subject span.replied, +.messagelist tr td.subject span.forwarded, +.messagelist tr td.subject span.unreadchildren { display: inline-block; vertical-align: middle; @@ -743,212 +772,212 @@ body.messagelist background: url(images/messageicons.png) center no-repeat; } -#messagelist tr td.attachment span.attachment +.messagelist tr td.attachment span.attachment { background-position: 0 -170px; } -#messagelist tr td.attachment span.report +.messagelist tr td.attachment span.report { background-position: 0 -255px; } -#messagelist tr td.priority span.priority +.messagelist tr td.priority span.priority { background-position: 0 -309px; } -#messagelist tr td.priority span.prio5 +.messagelist tr td.priority span.prio5 { background-position: 0 -358px; } -#messagelist tr td.priority span.prio4 +.messagelist tr td.priority span.prio4 { background-position: 0 -340px; } -#messagelist tr td.priority span.prio3 +.messagelist tr td.priority span.prio3 { background-position: 0 -324px; } -#messagelist tr td.priority span.prio2 +.messagelist tr td.priority span.prio2 { background-position: 0 -309px; } -#messagelist tr td.priority span.prio1 +.messagelist tr td.priority span.prio1 { background-position: 0 -290px; } -#messagelist tr td.flag span.flagged +.messagelist tr td.flag span.flagged { background-position: 0 -153px; } -#messagelist tr td.flag span.unflagged:hover +.messagelist tr td.flag span.unflagged:hover { background-position: 0 -136px; } -#messagelist tr td.subject span.msgicon, -#messagelist tr td.subject span.unreadchildren +.messagelist tr td.subject span.msgicon, +.messagelist tr td.subject span.unreadchildren { background-position: 0 -51px; margin: 0 2px; } -#messagelist tr td.subject span.replied +.messagelist tr td.subject span.replied { background-position: 0 -85px; } -#messagelist tr td.subject span.forwarded +.messagelist tr td.subject span.forwarded { background-position: 0 -68px; } -#messagelist tr td.subject span.replied.forwarded +.messagelist tr td.subject span.replied.forwarded { background-position: 0 -102px; } -#messagelist tr td.status span.msgicon, -#messagelist tr td.flag span.unflagged, -#messagelist tr td.status span.unreadchildren +.messagelist tr td.status span.msgicon, +.messagelist tr td.flag span.unflagged, +.messagelist tr td.status span.unreadchildren { background-position: 0 17px; /* no icon */ } -#messagelist tr td.status span.msgicon:hover +.messagelist tr td.status span.msgicon:hover { background-position: 0 -272px; } -#messagelist tr td.status span.deleted, -#messagelist tr td.subject span.deleted +.messagelist tr td.status span.deleted, +.messagelist tr td.subject span.deleted { background-position: 0 -187px; } -#messagelist tr td.status span.status, -#messagelist tr td.status span.unread, -#messagelist tr td.subject span.unread +.messagelist tr td.status span.status, +.messagelist tr td.status span.unread, +.messagelist tr td.subject span.unread { background-position: 0 -119px; } -#messagelist tr td div.collapsed +.messagelist tr td div.collapsed { background-position: 0 -221px; cursor: pointer; } -#messagelist tr td div.expanded +.messagelist tr td div.expanded { background-position: 0 -204px; cursor: pointer; } -#messagelist tr td.threads div.listmenu +.messagelist tr td.threads div.listmenu { background-position: 0 -238px; cursor: pointer; } -#messagelist tbody tr td.subject +.messagelist tbody tr td.subject { width: 99%; } -#messagelist tbody tr td.subject a +.messagelist tbody tr td.subject a { cursor: default; vertical-align: middle; /* #1487091 */ } /* thread parent message with unread children */ -#messagelist tbody tr.unroot td.subject a +.messagelist tbody tr.unroot td.subject a { text-decoration: underline; } -#messagelist tr td.attachment, -#messagelist tr td.threads, -#messagelist tr td.status, -#messagelist tr td.flag, -#messagelist tr td.priority +.messagelist tr td.attachment, +.messagelist tr td.threads, +.messagelist tr td.status, +.messagelist tr td.flag, +.messagelist tr td.priority { width: 17px; padding: 0 0 0 2px; } -#messagelist tr td.size +.messagelist tr td.size { width: 60px; text-align: right; padding: 0 2px; } -#messagelist tr td.fromto, -#messagelist tr td.from, -#messagelist tr td.to, -#messagelist tr td.cc, -#messagelist tr td.replyto +.messagelist tr td.fromto, +.messagelist tr td.from, +.messagelist tr td.to, +.messagelist tr td.cc, +.messagelist tr td.replyto { width: 180px; padding: 0 2px; } -#messagelist tr td.date +.messagelist tr td.date { width: 118px; padding: 0 2px; } -#messagelist tr.message +.messagelist tr.message { background-color: #FFF; } -#messagelist tr.unread +.messagelist tr.unread { font-weight: bold; background-color: #FFFFFF; } -#messagelist tr.flagged td, -#messagelist tr.flagged td a +.messagelist tr.flagged td, +.messagelist tr.flagged td a { color: #CC0000; } -#messagelist tr.selected td +.messagelist tr.selected td { color: #FFFFFF; background-color: #CC3333; } -#messagelist tr.unfocused td +.messagelist tr.unfocused td { color: #FFFFFF; background-color: #929292; } -#messagelist tr.selected td a +.messagelist tr.selected td a { color: #FFFFFF; } -#messagelist tr.unfocused td a +.messagelist tr.unfocused td a { color: #FFFFFF; } -#messagelist tr.deleted td, -#messagelist tr.deleted td a +.messagelist tr.deleted td, +.messagelist tr.deleted td a { color: #CCCCCC; } @@ -1600,16 +1629,19 @@ input.from_address vertical-align: middle; } +#upload-form, #attachment-form { padding: 6px; } +#upload-form div, #attachment-form div { padding: 2px; } +#upload-form div.buttons, #attachment-form div.buttons { margin-top: 4px; @@ -1687,6 +1719,14 @@ input.from_address -o-text-overflow: ellipsis; } +#contacts-table td span.email +{ + display: inline; + color: #ccc; + font-style: italic; + margin-left: 0.5em; +} + #abookcountbar { margin-top: 4px; diff --git a/skins/classic/print.css b/skins/classic/print.css index 34125b0d3..d7e332dba 100644 --- a/skins/classic/print.css +++ b/skins/classic/print.css @@ -136,3 +136,32 @@ div.message-part blockquote blockquote blockquote border-left: 2px solid #bb0000; border-right: 2px solid #bb0000; } + +p.image-attachment +{ + position: relative; + padding: 1em; + border-top: 1px solid #ccc; +} + +p.image-attachment a.image-link +{ + float: left; + display: block; + margin-right: 2em; + min-width: 160px; + min-height: 60px; + text-align: center; +} + +p.image-attachment .image-filename +{ + display: block; + line-height: 1.6em; +} + +p.image-attachment .attachment-links +{ + display: none; +} + diff --git a/skins/classic/settings.css b/skins/classic/settings.css index c918e3c18..2433f5040 100644 --- a/skins/classic/settings.css +++ b/skins/classic/settings.css @@ -85,6 +85,8 @@ { font-weight: bold; text-align: right; + width: 1%; + white-space: nowrap; } #bottomboxes @@ -253,3 +255,15 @@ div.crop { overflow: auto; } + +#rcmfd_signature +{ + width: 99%; + min-width: 390px; +} + +#rcmfd_signature_toolbar1 td, +#rcmfd_signature_toolbar2 td +{ + width: auto; +} diff --git a/skins/classic/templates/about.html b/skins/classic/templates/about.html index 519acf773..429dfcf5f 100644 --- a/skins/classic/templates/about.html +++ b/skins/classic/templates/about.html @@ -7,11 +7,15 @@ </head> <body> +<roundcube:if condition="!request:_framed" /> + <roundcube:include file="/includes/taskbar.html" /> <roundcube:include file="/includes/header.html" /> <roundcube:include file="/includes/settingstabs.html" /> <div id="mainscreen" class="box darkbg crop"> +<roundcube:endif /> + <div class="readtext"> <div id="license"> <roundcube:object name="aboutcontent" /> @@ -29,7 +33,10 @@ Some <a href="http://roundcube.net/license">exceptions</a> for skins & plugi <roundcube:object name="pluginlist" id="pluginlist" class="records-table" cellspacing="0" /> </div> + +<roundcube:if condition="!request:_framed" /> </div> +<roundcube:endif /> </body> </html> diff --git a/skins/classic/templates/addressbook.html b/skins/classic/templates/addressbook.html index 9d959d5ef..429b83438 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\\');') : ''" /> @@ -16,7 +17,7 @@ </style> </head> -<body onload="rcube_init_mail_ui()"> +<body> <roundcube:include file="/includes/taskbar.html" /> <roundcube:include file="/includes/header.html" /> @@ -74,7 +75,7 @@ <div id="addressscreen"> <div id="addresslist"> -<div class="boxtitle"><roundcube:label name="contacts" /></div> +<roundcube:object name="addresslisttitle" label="contacts" tag="div" class="boxtitle" /> <div class="boxlistcontent"> <roundcube:object name="addresslist" id="contacts-table" class="records-table" cellspacing="0" summary="Contacts list" noheader="true" /> </div> @@ -115,5 +116,16 @@ </ul> </div> +<div id="dragmenu" class="popupmenu"> + <ul> + <li><roundcube:button command="move" onclick="return rcmail.drag_menu_action('move')" label="move" classAct="active" /></li> + <li><roundcube:button command="copy" onclick="return rcmail.drag_menu_action('copy')" label="copy" classAct="active" /></li> + </ul> +</div> + +<script type="text/javascript"> +rcube_init_mail_ui(); +</script> + </body> </html> diff --git a/skins/classic/templates/compose.html b/skins/classic/templates/compose.html index 5b0b47924..5e259e11c 100644 --- a/skins/classic/templates/compose.html +++ b/skins/classic/templates/compose.html @@ -16,10 +16,10 @@ </style> </head> <roundcube:if condition="env:extwin" /> -<body class="extwin" onload="rcube_init_mail_ui()"> +<body class="extwin"> <roundcube:object name="message" id="message" /> <roundcube:else /> -<body onload="rcube_init_mail_ui()"> +<body> <roundcube:include file="/includes/taskbar.html" /> <roundcube:include file="/includes/header.html" /> <roundcube:endif /> @@ -44,7 +44,7 @@ <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"> +<roundcube:form name="form" method="post"> <div id="mainscreen"> @@ -197,5 +197,9 @@ <roundcube:object name="composeAttachmentForm" id="attachment-form" attachmentFieldSize="40" class="popupmenu" /> +<script type="text/javascript"> +rcube_init_mail_ui(); +</script> + </body> </html> diff --git a/skins/classic/templates/contact.html b/skins/classic/templates/contact.html index d74a78b27..8be112b49 100644 --- a/skins/classic/templates/contact.html +++ b/skins/classic/templates/contact.html @@ -13,7 +13,7 @@ <div id="sourcename"><roundcube:label name="addressbook" />: <roundcube:var name="env:sourcename" /></div> <roundcube:endif /> - <div id="contactphoto"><roundcube:object name="contactphoto" id="contactpic" placeholder="/images/contactpic.png" /></div> + <div id="contactphoto"><roundcube:object name="contactphoto" id="contactpic" placeholder="/images/contactpic.png" placeholderGroup="/images/contactgroup.png" /></div> <roundcube:object name="contacthead" id="contacthead" /> <div style="clear:both"></div> <div id="contacttabs"> diff --git a/skins/classic/templates/contactadd.html b/skins/classic/templates/contactadd.html index 05cc8aa82..bad6daf28 100644 --- a/skins/classic/templates/contactadd.html +++ b/skins/classic/templates/contactadd.html @@ -5,11 +5,11 @@ <roundcube:include file="/includes/links.html" /> <script type="text/javascript" src="/functions.js"></script> </head> -<body class="iframe" onload="rcube_init_mail_ui()"> +<body class="iframe"> <div id="contact-title" class="boxtitle"><roundcube:label name="addcontact" /></div> <div id="contact-details" class="boxcontent"> -<form name="editform" method="post" action="./"> +<roundcube:form name="editform" method="post"> <roundcube:if condition="strlen(env:sourcename)" /> <div id="sourcename"><roundcube:label name="addressbook" />: <roundcube:object name="sourceselector" class="hint" id="sourceselect" /></div> <roundcube:endif /> @@ -35,7 +35,10 @@ <roundcube:object name="photoUploadForm" id="upload-form" size="30" class="popupmenu" /> <roundcube:object name="fileDropArea" id="contactpic" /> -<script type="text/javascript">rcube_init_tabs('contacttabs')</script> +<script type="text/javascript"> +rcube_init_tabs('contacttabs'); +rcube_init_mail_ui(); +</script> </body> </html> diff --git a/skins/classic/templates/contactedit.html b/skins/classic/templates/contactedit.html index db8599ac6..c51cbf296 100644 --- a/skins/classic/templates/contactedit.html +++ b/skins/classic/templates/contactedit.html @@ -5,11 +5,11 @@ <roundcube:include file="/includes/links.html" /> <script type="text/javascript" src="/functions.js"></script> </head> -<body class="iframe" onload="rcube_init_mail_ui()"> +<body class="iframe"> <div id="contact-title" class="boxtitle"><roundcube:label name="editcontact" /></div> <div id="contact-details" class="boxcontent"> -<form name="editform" method="post" action="./"> +<roundcube:form name="editform" method="post"> <roundcube:if condition="strlen(env:sourcename)" /> <div id="sourcename"><roundcube:label name="addressbook" />: <roundcube:var name="env:sourcename" /></div> <roundcube:endif /> @@ -35,7 +35,10 @@ <roundcube:object name="photoUploadForm" id="upload-form" size="30" class="popupmenu" /> <roundcube:object name="fileDropArea" id="contactpic" /> -<script type="text/javascript">rcube_init_tabs('contacttabs')</script> +<script type="text/javascript"> +rcube_init_tabs('contacttabs'); +rcube_init_mail_ui(); +</script> </body> </html> diff --git a/skins/classic/templates/folders.html b/skins/classic/templates/folders.html index 1ae8809ec..f86be092b 100644 --- a/skins/classic/templates/folders.html +++ b/skins/classic/templates/folders.html @@ -12,7 +12,7 @@ } </style> </head> -<body onload="rcube_init_mail_ui()"> +<body> <roundcube:include file="/includes/taskbar.html" /> <roundcube:include file="/includes/header.html" /> @@ -58,5 +58,9 @@ </ul> </div> +<script type="text/javascript"> +rcube_init_mail_ui(); +</script> + </body> </html> diff --git a/skins/classic/templates/login.html b/skins/classic/templates/login.html index cca2bd934..2dacd48ff 100644 --- a/skins/classic/templates/login.html +++ b/skins/classic/templates/login.html @@ -15,7 +15,7 @@ <div class="boxtitle"><roundcube:label name="welcome" /></div> <div class="boxcontent"> -<form name="form" action="./" method="post"> +<roundcube:form name="form" method="post"> <roundcube:object name="loginform" form="form" /> <p style="text-align:center;"><input type="submit" class="button mainaction" value="<roundcube:label name='login' />" /></p> diff --git a/skins/classic/templates/mail.html b/skins/classic/templates/mail.html index c7010e87c..10aebc96d 100644 --- a/skins/classic/templates/mail.html +++ b/skins/classic/templates/mail.html @@ -18,7 +18,7 @@ } </style> </head> -<body onload="rcube_init_mail_ui()"> +<body> <roundcube:include file="/includes/taskbar.html" /> <roundcube:include file="/includes/header.html" /> @@ -55,6 +55,7 @@ <div id="messagelistcontainer" class="boxlistcontent" style="top:0"> <roundcube:object name="messages" id="messagelist" + class="messagelist fixedheader" cellspacing="0" columns="" summary="Message list" @@ -130,9 +131,9 @@ <roundcube:button command="reset-search" id="searchreset" image="/images/icons/reset.gif" title="resetsearch" width="13" height="13" /> </div> -<div id="dragmessagemenu" class="popupmenu"> +<div id="dragmenu" class="popupmenu"> <ul> - <li><roundcube:button command="moveto" onclick="return rcmail.drag_menu_action('moveto')" label="move" classAct="active" /></li> + <li><roundcube:button command="move" onclick="return rcmail.drag_menu_action('move')" label="move" classAct="active" /></li> <li><roundcube:button command="copy" onclick="return rcmail.drag_menu_action('copy')" label="copy" classAct="active" /></li> </ul> </div> @@ -140,7 +141,8 @@ <div id="mailboxoptionsmenu" class="popupmenu"> <ul> <li><roundcube:button command="expunge" type="link" label="compact" classAct="active" /></li> - <li class="separator_below"><roundcube:button command="purge" type="link" label="empty" classAct="active" /></li> + <li><roundcube:button command="purge" type="link" label="empty" classAct="active" /></li> + <li class="separator_below"><roundcube:button name="messageimport" type="link" class="active" label="importmessages" id="uploadformlink" onclick="rcmail_ui.show_popup('uploadform', true); return false" /></li> <li><roundcube:button command="folders" task="settings" type="link" label="managefolders" classAct="active" /></li> <roundcube:container name="mailboxoptions" id="mailboxoptionsmenu" /> </ul> @@ -204,5 +206,11 @@ </div> </div> +<roundcube:object name="messageimportform" id="upload-form" attachmentFieldSize="40" class="popupmenu" /> + +<script type="text/javascript"> +rcube_init_mail_ui(); +</script> + </body> </html> diff --git a/skins/classic/templates/message.html b/skins/classic/templates/message.html index 11e58c711..757c0a635 100644 --- a/skins/classic/templates/message.html +++ b/skins/classic/templates/message.html @@ -13,10 +13,10 @@ </style> </head> <roundcube:if condition="env:extwin" /> -<body class="extwin" onload="rcube_init_mail_ui()"> +<body class="extwin"> <roundcube:object name="message" id="message" /> <roundcube:else /> -<body onload="rcube_init_mail_ui()"> +<body> <roundcube:include file="/includes/taskbar.html" /> <roundcube:include file="/includes/header.html" /> @@ -81,5 +81,9 @@ </ul> </div> +<script type="text/javascript"> +rcube_init_mail_ui(); +</script> + </body> </html> diff --git a/skins/classic/templates/messageerror.html b/skins/classic/templates/messageerror.html index d02508942..eb8c7e058 100644 --- a/skins/classic/templates/messageerror.html +++ b/skins/classic/templates/messageerror.html @@ -27,7 +27,7 @@ </style> </head> -<body onload="rcube_init_mail_ui()"> +<body> <roundcube:include file="/includes/taskbar.html" /> <roundcube:include file="/includes/header.html" /> @@ -61,6 +61,10 @@ rcmail.add_onload('mailviewsplitv.init()'); </script> +<script type="text/javascript"> +rcube_init_mail_ui(); +</script> + </body> <roundcube:endif /> diff --git a/skins/classic/templates/messagepart.html b/skins/classic/templates/messagepart.html index ce7dbe2e1..9f2215679 100644 --- a/skins/classic/templates/messagepart.html +++ b/skins/classic/templates/messagepart.html @@ -3,23 +3,39 @@ <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> +<style type="text/css"> +#messagepartheader { width: <roundcube:exp expression="!empty(cookie:mailpartsplitter) ? cookie:mailpartsplitter-5 : 170" />px; } +#messagepartcontainer { left: <roundcube:exp expression="!empty(cookie:mailpartsplitter) ? cookie:mailpartsplitter+5 : 180" />px; +<roundcube:exp expression="browser:ie ? ('width: expression((parseInt(this.parentNode.offsetWidth)-'.(!empty(cookie:mailpartsplitter) ? cookie:mailpartsplitter+5 : 180).')+\\'px\\');') : ''" /> +} +</style> </head> <body class="extwin"> +<roundcube:object name="message" id="message" /> -<roundcube:include file="/includes/header.html" /> - -<div id="partheader"> -<roundcube:object name="messagePartControls" cellpadding="2" cellspacing="0" /> - -<div style="position:absolute; top:2px; right:0; width:12em; text-align:right"> - [<a href="#close" class="closelink" onclick="self.close()"><roundcube:label name="close" /></a>] +<div id="messagetoolbar"> + <roundcube:button command="download" type="link" class="button download" classAct="button download" classSel="button downloadSel" title="download" content=" " /> + <roundcube:button command="print" type="link" class="button print" classAct="button print" classSel="button printSel" title="print" content=" " /> + <roundcube:container name="toolbar" id="messagetoolbar" /> </div> -</div> - -<div id="messagepartcontainer"> -<roundcube:object name="messagePartFrame" id="messagepartframe" width="100%" height="100%" /> +<div id="mainscreen"> + <div id="messagepartheader"> + <div class="boxtitle" /><roundcube:label name="properties" /></div> + <div class="boxlistcontent"> + <roundcube:object name="messagePartControls" class="records-table" cellspacing="0" /> + </div> + </div> + <div id="messagepartcontainer"> + <roundcube:object name="messagePartFrame" id="messagepartframe" width="100%" height="100%" /> + </div> </div> +<script type="text/javascript"> +var mailpartsplit = new rcube_splitter({id:'mailpartsplitter', p1: 'messagepartheader', p2: 'messagepartcontainer', orientation: 'v', relative: true, start: 165}); +rcmail.add_onload('mailpartsplit.init()'); +</script> </body> </html> diff --git a/skins/classic/templates/messagepreview.html b/skins/classic/templates/messagepreview.html index 80dbe381a..b42a06342 100644 --- a/skins/classic/templates/messagepreview.html +++ b/skins/classic/templates/messagepreview.html @@ -6,7 +6,7 @@ <script type="text/javascript" src="/splitter.js"></script> <script type="text/javascript" src="/functions.js"></script> </head> -<body class="iframe" onload="rcube_init_mail_ui()"> +<body class="iframe"> <div class="messageheaderbox"> <div id="messagelinks"> @@ -34,5 +34,9 @@ </ul> </div> +<script type="text/javascript"> +rcube_init_mail_ui(); +</script> + </body> </html> diff --git a/skins/larry/addressbook.css b/skins/larry/addressbook.css index ff3951497..090e54c7b 100644 --- a/skins/larry/addressbook.css +++ b/skins/larry/addressbook.css @@ -75,10 +75,6 @@ text-overflow: ellipsis; } -#contacts-table .contact.readonly td { - font-style: italic; -} - #directorylist li.addressbook a { background-position: 6px -766px; } @@ -131,6 +127,28 @@ left: 20px; } +#contacts-table .contact.readonly td { + font-style: italic; +} + +#contacts-table td.name { + width: 95%; +} + +#contacts-table td.action { + width: 24px; + padding: 4px; +} + +#contacts-table td.action a { + display: block; + width: 16px; + height: 14px; + text-indent: -5000px; + overflow: hidden; + background: url(images/listicons.png) -2px -1180px no-repeat; +} + #contacts-table .contact td.name { background-position: 6px -1603px; } @@ -141,6 +159,29 @@ font-weight: bold; } +#contacts-table .group td.name { + background-position: 6px -1555px; +} + +#contacts-table .group.selected td.name, +#contacts-table .group.unfocused td.name { + background-position: 6px -1579px; + font-weight: bold; +} + +#addresslist .boxtitle { + padding-right: 95px; + overflow: hidden; + text-overflow: ellipsis; +} + +#addresslist .boxtitle a.poplink { + color: #004458; + font-size: 14px; + line-height: 12px; + text-decoration: none; +} + #contact-frame { position: absolute; top: 0; diff --git a/skins/larry/ie7hacks.css b/skins/larry/ie7hacks.css index 6d7af4787..fc4713361 100644 --- a/skins/larry/ie7hacks.css +++ b/skins/larry/ie7hacks.css @@ -41,6 +41,7 @@ a.deletebutton, .boxfooter .listbutton .inner, .attachmentslist li a.delete, .attachmentslist li a.cancelupload, +#contacts-table td.action a, .previewheader .iconlink, .minimal #taskbar .button-inner { /* workaround for text-indent which also offsets the background image */ diff --git a/skins/larry/images/buttons.png b/skins/larry/images/buttons.png Binary files differindex 54bee0156..9f8f44536 100644 --- a/skins/larry/images/buttons.png +++ b/skins/larry/images/buttons.png diff --git a/skins/larry/images/contactgroup.png b/skins/larry/images/contactgroup.png Binary files differnew file mode 100644 index 000000000..8303cf02f --- /dev/null +++ b/skins/larry/images/contactgroup.png diff --git a/skins/larry/images/favicon.ico b/skins/larry/images/favicon.ico Binary files differindex b3bd18c12..9ef2f3b9e 100644 --- a/skins/larry/images/favicon.ico +++ b/skins/larry/images/favicon.ico diff --git a/skins/larry/images/listicons.png b/skins/larry/images/listicons.png Binary files differindex f4505d4fa..e4ffef660 100644 --- a/skins/larry/images/listicons.png +++ b/skins/larry/images/listicons.png diff --git a/skins/larry/includes/header.html b/skins/larry/includes/header.html index f2efb8e06..c8b3b26f6 100644 --- a/skins/larry/includes/header.html +++ b/skins/larry/includes/header.html @@ -2,7 +2,7 @@ <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:button name="about" type="link" label="about" class="about-link" onclick="UI.show_about(this);return false" condition="!env:extwin" /> <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 /> @@ -14,7 +14,7 @@ <span class="username"><roundcube:object name="username" /></span> <roundcube:button command="logout" label="logout" class="button-logout" /> <roundcube:elseif condition="env:extwin" /> - <roundcube:button command="close" label="close" class="closelink" /> + <roundcube:button name="close" type="link" label="close" class="closelink" onclick="self.close()" /> <roundcube:endif /> </div> </div> @@ -35,5 +35,3 @@ <br style="clear:both" /> </div> - - diff --git a/skins/larry/mail.css b/skins/larry/mail.css index b5f0822a3..b65b08112 100644 --- a/skins/larry/mail.css +++ b/skins/larry/mail.css @@ -2,7 +2,7 @@ * 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 @@ -54,6 +54,10 @@ border-top: none; } +#composeview-right #mailview-bottom { + border-radius: 0 0 4px 4px; +} + #folderlist-header { width: 100%; height: 12px; @@ -75,6 +79,12 @@ overflow: auto; } +/* Real browsers accept this (not IE) */ +html>/**/body #messagelist { + overflow: auto; + overflow-x: hidden; +} + #messagelistfooter { position: absolute; bottom: 0; @@ -212,6 +222,46 @@ a.iconbutton.threadmode.selected { background-position: 6px -1723px; } +#mailboxlist li.mailbox ul li.drafts > a { + background-position: 23px -238px; +} + +#mailboxlist li.mailbox ul li.drafts.selected > a { + background-position: 23px -262px; +} + +#mailboxlist li.mailbox ul li.sent > a { + background-position: 23px -286px; +} + +#mailboxlist li.mailbox ul li.sent.selected > a { + background-position: 23px -310px; +} + +#mailboxlist li.mailbox ul li.junk > a { + background-position: 23px -334px; +} + +#mailboxlist li.mailbox ul li.junk.selected > a { + background-position: 23px -358px; +} + +#mailboxlist li.mailbox ul li.trash > a { + background-position: 23px -382px; +} + +#mailboxlist li.mailbox ul li.trash.selected > a { + background-position: 23px -406px; +} + +#mailboxlist li.mailbox ul li.archive > a { + background-position: 23px -1699px; +} + +#mailboxlist li.mailbox ul li.archive.selected > a { + background-position: 23px -1723px; +} + #mailboxlist li.unread { font-weight: bold; } @@ -384,7 +434,6 @@ a.iconbutton.threadmode.selected { position: absolute; right: 0; top: 0; - width: 400px; } #mailpreviewtoggle { @@ -404,141 +453,154 @@ a.iconbutton.threadmode.selected { /*** message list ***/ -#messagelist thead td:first-child { +/* this is necessary to make FF3 display borders */ +body:-moz-last-node #messagelist { + border-collapse: separate; +} + +table.messagelist { + z-index: 1; +} + +table.messagelist.fixedcopy { + z-index: 2; +} + +.messagelist thead td:first-child { border-radius: 4px 0 0 0; /* for Chrome */ } -#messagelist tr td.attachment, -#messagelist tr td.threads, -#messagelist tr td.status, -#messagelist tr td.flag, -#messagelist tr td.priority { +.messagelist tr td.attachment, +.messagelist tr td.threads, +.messagelist tr td.status, +.messagelist tr td.flag, +.messagelist tr td.priority { width: 20px; padding: 2px 3px; } -.webkit #messagelist tr td.attachment, -.webkit #messagelist tr td.threads, -.webkit #messagelist tr td.status, -.webkit #messagelist tr td.flag, -.webkit #messagelist tr td.priority { +.webkit .messagelist tr td.attachment, +.webkit .messagelist tr td.threads, +.webkit .messagelist tr td.status, +.webkit .messagelist tr td.flag, +.webkit .messagelist tr td.priority { width: 26px; } -#messagelist tr td.threads { +.messagelist tr td.threads { width: 26px; } -.webkit #messagelist tr td.threads { +.webkit .messagelist tr td.threads { width: 30px; } -#messagelist tr td.threads, -#messagelist tr td.threads + td { +.messagelist tr td.threads, +.messagelist tr td.threads + td { border-left: 0; } -#messagelist tr td.size { +.messagelist tr td.size { width: 60px; text-align: right; } -#messagelist thead tr td.size { +.messagelist thead tr td.size { text-align: left; } -#messagelist tr td.fromto, -#messagelist tr td.from, -#messagelist tr td.to, -#messagelist tr td.cc, -#messagelist tr td.replyto { +.messagelist tr td.fromto, +.messagelist tr td.from, +.messagelist tr td.to, +.messagelist tr td.cc, +.messagelist tr td.replyto { width: 200px; } -#messagelist tr td.date { +.messagelist tr td.date { width: 135px; } -#messagelist tr.message { +.messagelist tr.message { /* background-color: #fff; */ } -#messagelist tr.thread.expanded td { +.messagelist tr.thread.expanded td { background-color: #ededed; } -#messagelist tr.unread { +.messagelist tr.unread { font-weight: bold; /* background-color: #fff; */ } -#messagelist tr.flagged td, -#messagelist tr.flagged td a { +.messagelist tr.flagged td, +.messagelist tr.flagged td a { color: #f30; } -#messagelist thead tr td.sortedASC a, -#messagelist thead tr td.sortedDESC a { +.messagelist thead tr td.sortedASC a, +.messagelist thead tr td.sortedDESC a { color: #004458; text-decoration: underline; background: url(images/listicons.png) right -912px no-repeat; } -#messagelist thead tr td.sortedASC a { +.messagelist thead tr td.sortedASC a { background-position: right -944px; } -#messagelist td img { +.messagelist td img { vertical-align: middle; display: inline-block; } -#messagelist tbody td a { +.messagelist tbody td a { color: #333; text-decoration: none; white-space: nowrap; cursor: default; } -#messagelist tbody tr td.flag, -#messagelist tbody tr td.status, -#messagelist tbody tr td.subject span.status { +.messagelist tbody tr td.flag, +.messagelist tbody tr td.status, +.messagelist tbody tr td.subject span.status { cursor: pointer; } -#messagelist tr td.flag span, -#messagelist tr td.status span, -#messagelist tr td.attachment span, -#messagelist tr td.priority span { +.messagelist tr td.flag span, +.messagelist tr td.status span, +.messagelist tr td.attachment span, +.messagelist tr td.priority span { display: block; width: 20px; } -#messagelist tr td div.collapsed, -#messagelist tr td div.expanded, -#messagelist tr td.threads div.listmenu, -#messagelist tr td.attachment span.attachment, -#messagelist tr td.attachment span.report, -#messagelist tr td.priority span.priority, -#messagelist tr td.priority span.prio1, -#messagelist tr td.priority span.prio2, -#messagelist tr td.priority span.prio3, -#messagelist tr td.priority span.prio4, -#messagelist tr td.priority span.prio5, -#messagelist tr td.flag span.flagged, -#messagelist tr td.flag span.unflagged, -#messagelist tr td.flag span.unflagged:hover, -#messagelist tr td.status span.status, -#messagelist tr td.status span.msgicon, -#messagelist tr td.status span.deleted, -#messagelist tr td.status span.unread, -#messagelist tr td.status span.unreadchildren, -#messagelist tr td.subject span.msgicon, -#messagelist tr td.subject span.deleted, -#messagelist tr td.subject span.unread, -#messagelist tr td.subject span.replied, -#messagelist tr td.subject span.forwarded, -#messagelist tr td.subject span.unreadchildren { +.messagelist tr td div.collapsed, +.messagelist tr td div.expanded, +.messagelist tr td.threads div.listmenu, +.messagelist tr td.attachment span.attachment, +.messagelist tr td.attachment span.report, +.messagelist tr td.priority span.priority, +.messagelist tr td.priority span.prio1, +.messagelist tr td.priority span.prio2, +.messagelist tr td.priority span.prio3, +.messagelist tr td.priority span.prio4, +.messagelist tr td.priority span.prio5, +.messagelist tr td.flag span.flagged, +.messagelist tr td.flag span.unflagged, +.messagelist tr td.flag span.unflagged:hover, +.messagelist tr td.status span.status, +.messagelist tr td.status span.msgicon, +.messagelist tr td.status span.deleted, +.messagelist tr td.status span.unread, +.messagelist tr td.status span.unreadchildren, +.messagelist tr td.subject span.msgicon, +.messagelist tr td.subject span.deleted, +.messagelist tr td.subject span.unread, +.messagelist tr td.subject span.replied, +.messagelist tr td.subject span.forwarded, +.messagelist tr td.subject span.unreadchildren { display: inline-block; vertical-align: middle; height: 18px; @@ -547,135 +609,135 @@ a.iconbutton.threadmode.selected { background: url(images/listicons.png) -100px 0 no-repeat; } -#messagelist tbody tr td.attachment span.attachment { +.messagelist tbody tr td.attachment span.attachment { background-position: 0 -996px; } -#messagelist thead tr td.attachment span.attachment { +.messagelist thead tr td.attachment span.attachment { background-position: -24px -997px; } -#messagelist tbody tr td.attachment span.report { +.messagelist tbody tr td.attachment span.report { background-position: -24px -1116px; } -#messagelist tr td.priority span.prio5 { +.messagelist tr td.priority span.prio5 { background-position: 0 -1905px; } -#messagelist tr td.priority span.prio4 { +.messagelist tr td.priority span.prio4 { background-position: 0 -1885px; } -#messagelist tr td.priority span.prio2 { +.messagelist tr td.priority span.prio2 { background-position: 0 -1865px; } -#messagelist tr td.priority span.prio1 { +.messagelist tr td.priority span.prio1 { background-position: 0 -1845px; } -#messagelist tbody tr td.flag span.flagged { +.messagelist tbody tr td.flag span.flagged { background-position: 0 -1036px; } -#messagelist thead tr td.flag span.flagged { +.messagelist thead tr td.flag span.flagged { background-position: -24px -1036px; } -#messagelist tr td.status span.msgicon:hover { +.messagelist tr td.status span.msgicon:hover { background-position: -23px -1056px; } -#messagelist tr td.flag span.unflagged:hover { +.messagelist tr td.flag span.unflagged:hover { background-position: -23px -1076px; } -#messagelist tr td.subject span.msgicon, -#messagelist tr td.subject span.unreadchildren { +.messagelist tr td.subject span.msgicon, +.messagelist tr td.subject span.unreadchildren { background-position: 0 -1056px; margin: 0 1px 0 0; width: 24px; } -#messagelist tr td.subject span.replied { +.messagelist tr td.subject span.replied { background-position: 0 -1076px; } -#messagelist tr td.subject span.forwarded { +.messagelist tr td.subject span.forwarded { background-position: 0 -1096px; } -#messagelist tr td.subject span.replied.forwarded { +.messagelist tr td.subject span.replied.forwarded { background-position: 0 -1116px; } -#messagelist tr td.status span.msgicon, -#messagelist tr td.flag span.unflagged, -#messagelist tr td.status span.unreadchildren { +.messagelist tr td.status span.msgicon, +.messagelist tr td.flag span.unflagged, +.messagelist tr td.status span.unreadchildren { background-position: 0 1056px; /* no icon */ } /* -#messagelist tr td.status span.msgicon:hover { +.messagelist tr td.status span.msgicon:hover { background-position: 0 -272px; } */ -#messagelist tr td.status span.deleted, -#messagelist tr td.status span.deleted:hover, -#messagelist tr td.subject span.deleted { +.messagelist tr td.status span.deleted, +.messagelist tr td.status span.deleted:hover, +.messagelist tr td.subject span.deleted { background-position: -22px -1096px; } -#messagelist tr td.status span.status, -#messagelist tr td.status span.unread, -#messagelist tr td.subject span.unread, -#messagelist tr td.status span.unread:hover { +.messagelist tr td.status span.status, +.messagelist tr td.status span.unread, +.messagelist tr td.subject span.unread, +.messagelist tr td.status span.unread:hover { background-position: 0 -1016px; } -#messagelist thead tr td.status span.status { +.messagelist thead tr td.status span.status { background-position: -24px -1016px; } -#messagelist tr td div.collapsed { +.messagelist tr td div.collapsed { background-position: 0 -1137px; cursor: pointer; } -#messagelist tr td div.expanded { +.messagelist tr td div.expanded { background-position: 0 -1157px; cursor: pointer; } -#messagelist tr td.threads div.listmenu { +.messagelist tr td.threads div.listmenu { background-position: 0 -976px; cursor: pointer; width: 26px; } -#messagelist thead tr td.subject, -#messagelist tbody tr td.subject { +.messagelist thead tr td.subject, +.messagelist tbody tr td.subject { width: 99%; white-space: nowrap; } -#messagelist tbody tr td.subject a { +.messagelist tbody tr td.subject a { cursor: default; vertical-align: middle; /* #1487091 */ } /* thread parent message with unread children */ -#messagelist tbody tr.unroot td.subject a { +.messagelist tbody tr.unroot td.subject a { text-decoration: underline; } /**** tree indicators ****/ -#messagelist tbody tr td span.branch div { +.messagelist tbody tr td span.branch div { display: inline-block; } -#messagelist tbody tr td span.branch div.tree { +.messagelist tbody tr td span.branch div.tree { width: 15px; } @@ -709,7 +771,6 @@ a.iconbutton.threadmode.selected { } #messageheader, -#partheader, #composeheaders { position: relative; padding: 3px 0; @@ -868,7 +929,7 @@ div.more-headers { } div.hide-headers { - background-position: center -1600px; + background-position: center -1590px; } #all-headers { @@ -931,6 +992,10 @@ div.hide-headers { border-radius: 3px; } +#messageheader .message-headers { + min-height: 60px; +} + #messageheader #contactphoto { display: block; position: absolute; @@ -1140,8 +1205,8 @@ div.message-partheaders .headers-table td.header { #messagepartcontainer { position: absolute; - top: 60px; - left: 0; + top: 42px; + left: 232px; right: 0; bottom: 0; } @@ -1152,6 +1217,30 @@ div.message-partheaders .headers-table td.header { height: 100%; } +#messagepartheader { + position: absolute; + top: 42px; + left: 0; + width: 220px; + bottom: 0; +} + +#messagepartheader table { + table-layout: fixed; + overflow: hidden; +} + +#messagepartheader table td { + text-overflow: ellipsis; + overflow: hidden; +} + +#messagepartheader table td.title { + width: 60px; + padding-right: 0; +} + + /*** message composition ***/ #composeview-left { @@ -1230,6 +1319,19 @@ div.message-partheaders .headers-table td.header { text-overflow: ellipsis; } +#contacts-table td.contactgroup a { + color: #376572; + text-decoration: none; +} + +#contacts-table td.contactgroup a span { + display: inline-block; + font-size: 16px; + font-weight: bold; + line-height: 11px; + margin-left: 0.3em; +} + #contacts-table tr:first-child td { border-top: 0; } diff --git a/skins/larry/print.css b/skins/larry/print.css index 6481ea9e6..a56c9b938 100644 --- a/skins/larry/print.css +++ b/skins/larry/print.css @@ -123,3 +123,28 @@ div.message-part blockquote blockquote blockquote { border-left: 2px solid #b00; border-right: 2px solid #b00; } + +p.image-attachment { + position: relative; + padding: 1em; + border-top: 1px solid #ccc; +} + +p.image-attachment a.image-link { + float: left; + display: block; + margin-right: 2em; + min-width: 160px; + min-height: 60px; + text-align: center; +} + +p.image-attachment .image-filename { + display: block; + line-height: 1.6em; +} + +p.image-attachment .attachment-links { + display: none; +} + diff --git a/skins/larry/settings.css b/skins/larry/settings.css index 1734b55e5..59037ac76 100644 --- a/skins/larry/settings.css +++ b/skins/larry/settings.css @@ -267,3 +267,13 @@ img.skinthumbnail { .webkit #pluginlist td.source { width: 9em; } + +#rcmfd_signature { + width: 99%; + min-width: 390px; +} + +#rcmfd_signature_toolbar1 td, +#rcmfd_signature_toolbar2 td { + width: auto; +} diff --git a/skins/larry/styles.css b/skins/larry/styles.css index cfbf9ac5f..ec4f3047c 100644 --- a/skins/larry/styles.css +++ b/skins/larry/styles.css @@ -690,17 +690,6 @@ a.iconlink.upload { 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; } @@ -883,10 +872,6 @@ a.iconlink.upload { top: 102px; } -.partwin #mainscreen { - top: 60px -} - .extwin #mainscreen { top: 40px; } @@ -896,7 +881,7 @@ a.iconlink.upload { } #mainscreen .offset { - margin-top: 42px; + top: 42px; } .uibox { @@ -1059,6 +1044,10 @@ table.listing tr.droptarget td { background-color: #e8e798; } +.listbox table.listing { + background-color: #d9ecf4; +} + table.listing, table.layout { border: 0; @@ -1813,6 +1802,10 @@ ul.proplist li { background-position: 0 -1745px; } +.toolbar a.button.download { + background-position: center -1906px; +} + a.menuselector { display: inline-block; border: 1px solid #ababab; @@ -1858,6 +1851,7 @@ select.decorated { filter: alpha(opacity=0); -khtml-appearance: none; -webkit-appearance: none; + border: 0; } html.opera select.decorated { @@ -1873,6 +1867,7 @@ select.decorated option { text-shadow: 0px 1px 1px #333; padding: 4px 6px; outline: none; + cursor: default; } diff --git a/skins/larry/templates/about.html b/skins/larry/templates/about.html index 301c301a9..e2bd0b019 100644 --- a/skins/larry/templates/about.html +++ b/skins/larry/templates/about.html @@ -4,7 +4,11 @@ <title><roundcube:object name="pagetitle" /></title> <roundcube:include file="/includes/links.html" /> </head> +<roundcube:if condition="request:_framed" /> +<body class="iframe fullheight"> +<roundcube:else /> <body class="ui-widget-content"> +<roundcube:endif /> <div class="readtext"> <roundcube:object name="aboutcontent" /> diff --git a/skins/larry/templates/addressbook.html b/skins/larry/templates/addressbook.html index 401640f1f..b33ebd999 100644 --- a/skins/larry/templates/addressbook.html +++ b/skins/larry/templates/addressbook.html @@ -50,7 +50,7 @@ <!-- contacts list --> <div id="addresslist" class="uibox listbox"> -<h2 class="boxtitle"><roundcube:label name="contacts" /></h2> +<roundcube:object name="addresslisttitle" label="contacts" tag="h2" class="boxtitle" /> <div class="scroller withfooter"> <roundcube:object name="addresslist" id="contacts-table" class="listing" noheader="true" /> </div> @@ -106,6 +106,13 @@ </ul> </div> +<div id="dragcontactmenu" class="popupmenu"> + <ul class="toolbarmenu"> + <li><roundcube:button command="move" onclick="return rcmail.drag_menu_action('move')" label="move" classAct="active" /></li> + <li><roundcube:button command="copy" onclick="return rcmail.drag_menu_action('copy')" label="copy" classAct="active" /></li> + </ul> +</div> + <roundcube:include file="/includes/footer.html" /> </body> diff --git a/skins/larry/templates/compose.html b/skins/larry/templates/compose.html index 9cfe7fe4c..09eafe73b 100644 --- a/skins/larry/templates/compose.html +++ b/skins/larry/templates/compose.html @@ -65,7 +65,7 @@ <div id="composeview-right"> -<form name="form" action="./" method="post" id="compose-content" class="uibox"> +<roundcube:form name="form" method="post" id="compose-content" class="uibox"> <!-- message headers --> <div id="composeheaders"> diff --git a/skins/larry/templates/contact.html b/skins/larry/templates/contact.html index d252049cd..59fe6f79f 100644 --- a/skins/larry/templates/contact.html +++ b/skins/larry/templates/contact.html @@ -13,7 +13,7 @@ <div id="sourcename"><roundcube:label name="addressbook" />: <roundcube:var name="env:sourcename" /></div> <roundcube:endif /> - <div id="contactphoto"><roundcube:object name="contactphoto" id="contactpic" placeholder="/images/contactpic.png" /></div> + <div id="contactphoto"><roundcube:object name="contactphoto" id="contactpic" placeholder="/images/contactpic.png" placeholderGroup="/images/contactgroup.png" /></div> <roundcube:object name="contacthead" id="contacthead" /> <br style="clear:both" /> diff --git a/skins/larry/templates/contactedit.html b/skins/larry/templates/contactedit.html index f84936635..3467ebe8e 100644 --- a/skins/larry/templates/contactedit.html +++ b/skins/larry/templates/contactedit.html @@ -11,7 +11,7 @@ <roundcube:else /><roundcube:label name="editcontact" /> <roundcube:endif /></h1> -<form name="editform" method="post" action="./" id="contact-details" class="boxcontent"> +<roundcube:form name="editform" method="post" id="contact-details" class="boxcontent"> <roundcube:if condition="strlen(env:sourcename)" /> <div id="sourcename"><roundcube:label name="addressbook" />: <roundcube:var name="env:sourcename" condition="env:action!='add'" /><roundcube:object name="sourceselector" id="sourceselect" condition="env:action=='add'" /></div> <roundcube:endif /> diff --git a/skins/larry/templates/login.html b/skins/larry/templates/login.html index a605eb7fe..6e56ee2fd 100644 --- a/skins/larry/templates/login.html +++ b/skins/larry/templates/login.html @@ -11,7 +11,7 @@ <div class="box-inner"> <roundcube:object name="logo" src="/images/roundcube_logo.png" id="logo" border="0" /> -<form name="form" action="./" method="post"> +<roundcube:form name="form" method="post"> <roundcube:object name="loginform" form="form" size="40" /> <p class="formbuttons"><input type="submit" class="button mainaction" value="<roundcube:label name='login' />" /></p> diff --git a/skins/larry/templates/mail.html b/skins/larry/templates/mail.html index 85cd5203b..6015054d3 100644 --- a/skins/larry/templates/mail.html +++ b/skins/larry/templates/mail.html @@ -70,7 +70,7 @@ <div id="messagelistcontainer" class="boxlistcontent"> <roundcube:object name="messages" id="messagelist" - class="records-table sortheader" + class="records-table messagelist sortheader fixedheader" optionsmenuIcon="true" /> </div> @@ -140,7 +140,7 @@ <div id="dragmessagemenu" class="popupmenu"> <ul class="toolbarmenu"> - <li><roundcube:button command="moveto" onclick="return rcmail.drag_menu_action('moveto')" label="move" classAct="active" /></li> + <li><roundcube:button command="move" onclick="return rcmail.drag_menu_action('move')" label="move" classAct="active" /></li> <li><roundcube:button command="copy" onclick="return rcmail.drag_menu_action('copy')" label="copy" classAct="active" /></li> </ul> </div> @@ -148,7 +148,8 @@ <div id="mailboxmenu" class="popupmenu"> <ul class="toolbarmenu" id="mailboxoptionsmenu"> <li><roundcube:button command="expunge" type="link" label="compact" classAct="active" /></li> - <li class="separator_below"><roundcube:button command="purge" type="link" label="empty" classAct="active" /></li> + <li><roundcube:button command="purge" type="link" label="empty" classAct="active" /></li> + <li><roundcube:button name="messageimport" type="link" class="active" label="importmessages" onclick="UI.show_uploadform()" /></li> <li><roundcube:button command="folders" task="settings" type="link" label="managefolders" classAct="active" /></li> <roundcube:container name="mailboxoptions" id="mailboxoptionsmenu" /> </ul> @@ -226,6 +227,14 @@ </div> </div> +<div id="upload-dialog" class="propform popupdialog" title="<roundcube:label name='importmessages' />"> + <roundcube:object name="messageimportform" id="uploadform" attachmentFieldSize="40" buttons="no" /> + <div class="formbuttons"> + <roundcube:button command="import-messages" type="input" class="button mainaction" label="upload" /> + <roundcube:button name="close" type="input" class="button" label="cancel" onclick="UI.show_uploadform()" /> + </div> +</div> + <roundcube:include file="/includes/footer.html" /> </body> diff --git a/skins/larry/templates/message.html b/skins/larry/templates/message.html index 0e19afa40..6937b00af 100644 --- a/skins/larry/templates/message.html +++ b/skins/larry/templates/message.html @@ -17,7 +17,7 @@ <roundcube:endif /> <roundcube:include file="/includes/mailtoolbar.html" /> <div class="toolbarselect"> - <roundcube:object name="mailboxlist" type="select" noSelection="moveto" maxlength="25" onchange="rcmail.command('moveto', this.options[this.selectedIndex].value)" class="mailboxlist decorated" folder_filter="mail" /> + <roundcube:object name="mailboxlist" type="select" noSelection="moveto" maxlength="25" onchange="rcmail.command('move', this.options[this.selectedIndex].value)" class="mailboxlist decorated" folder_filter="mail" /> </div> </div> @@ -44,7 +44,9 @@ <span class="moreheaderstoggle"></span> <h2 class="subject"><roundcube:object name="messageHeaders" valueOf="subject" /></h2> +<div class="message-headers"> <roundcube:object name="messageHeaders" class="headers-table" addicon="/images/addcontact.png" exclude="subject" max="20" /> +</div> <roundcube:object name="messageFullHeaders" id="full-headers" /> <!-- record navigation --> @@ -88,7 +90,7 @@ </div><!-- end mainscreen --> -<div id="attachmentmenu" class="popupmenu dropdown"> +<div id="attachmentmenu" class="popupmenu"> <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> diff --git a/skins/larry/templates/messagepart.html b/skins/larry/templates/messagepart.html index dbb4940de..d0e3a808d 100644 --- a/skins/larry/templates/messagepart.html +++ b/skins/larry/templates/messagepart.html @@ -4,33 +4,35 @@ <title><roundcube:object name="pagetitle" /></title> <roundcube:include file="/includes/links.html" /> </head> -<body class="partwin"> +<body class="extwin noscroll"> -<div id="header"> -<div id="topline"> - <div class="topright"> - <a href="#close" class="closelink" onclick="self.close()"><roundcube:label name="close" /></a> - </div> -</div> +<roundcube:include file="/includes/header.html" /> -<div id="topnav"> - <roundcube:object name="logo" src="/images/roundcube_logo.png" id="toplogo" border="0" alt="Logo" /> -</div> +<div id="mainscreen"> -<br style="clear:both" /> +<div id="messagetoolbar" class="toolbar fullwidth"> + <roundcube:button command="download" type="link" class="button download disabled" classAct="button download" classSel="button download pressed" label="download" /> + <roundcube:button command="print" type="link" class="button print disabled" classAct="button print" classSel="button print pressed" label="print" /> + <roundcube:container name="toolbar" id="messagetoolbar" /> </div> -<div id="mainscreen"> - -<div id="partheader" class="uibox"> -<roundcube:object name="messagePartControls" class="headers-table" /> +<div id="messagepartheader" class="uibox listbox"> + <h2 class="boxtitle"><roundcube:label name="properties" /></h2> + <div class="scroller"> + <roundcube:object name="messagePartControls" class="listing" /> + </div> </div> <div id="messagepartcontainer" class="uibox"> -<roundcube:object name="messagePartFrame" id="messagepartframe" frameborder="0" /> + <div class="iframebox"> + <roundcube:object name="messagePartFrame" id="messagepartframe" frameborder="0" /> + </div> + <roundcube:object name="message" id="message" class="statusbar" /> </div> </div> +<roundcube:include file="/includes/footer.html" /> + </body> </html> diff --git a/skins/larry/templates/messagepreview.html b/skins/larry/templates/messagepreview.html index b2af03485..f69f65125 100644 --- a/skins/larry/templates/messagepreview.html +++ b/skins/larry/templates/messagepreview.html @@ -62,7 +62,7 @@ </div> </div> -<div id="attachmentmenu" class="popupmenu dropdown"> +<div id="attachmentmenu" class="popupmenu"> <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> diff --git a/skins/larry/ui.js b/skins/larry/ui.js index 58e03fbdc..e5733bd23 100644 --- a/skins/larry/ui.js +++ b/skins/larry/ui.js @@ -19,7 +19,7 @@ function rcube_mail_ui() searchmenu: { editable:1, callback:searchmenu }, attachmentmenu: { }, listoptions: { editable:1 }, - dragmessagemenu: { sticky:1 }, + dragmenu: { sticky:1 }, groupmenu: { above:1 }, mailboxmenu: { above:1 }, spellmenu: { callback: spellmenu }, @@ -38,10 +38,12 @@ 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; + this.update_quota = update_quota; // set minimal mode on small screens (don't wait for document.ready) @@ -88,14 +90,15 @@ function rcube_mail_ui() var dragmenu = $('#dragmessagemenu'); if (dragmenu.length) { - rcmail.gui_object('message_dragmenu', 'dragmessagemenu'); - popups.dragmessagemenu = dragmenu; + rcmail.gui_object('dragmenu', 'dragmessagemenu'); + popups.dragmenu = dragmenu; } if (rcmail.env.action == 'show' || rcmail.env.action == 'preview') { + rcmail.addEventListener('enable-command', enable_command); rcmail.addEventListener('aftershow-headers', function() { layout_messageview(); }); rcmail.addEventListener('afterhide-headers', function() { layout_messageview(); }); - $('#previewheaderstoggle').click(function(e){ toggle_preview_headers(this); return false }); + $('#previewheaderstoggle').click(function(e){ toggle_preview_headers(); return false }); // add menu link for each attachment $('#attachment-list > li').each(function() { @@ -109,10 +112,14 @@ function rcube_mail_ui() layout_composeview(); // Show input elements with non-empty value - var field, fields = ['cc', 'bcc', 'replyto', 'followupto']; - for (var f=0; f < fields.length; f++) { - if ((field = $('#_'+fields[f])) && field.length && field.val() != '') - show_header_row(fields[f], true); + var f, v, field, fields = ['cc', 'bcc', 'replyto', 'followupto']; + for (f=0; f < fields.length; f++) { + v = fields[f]; field = $('#_'+v); + if (field.length) { + field.on('change', {v: v}, function(e) { if (this.value) show_header_row(e.data.v, true); }); + if (field.val() != '') + show_header_row(v, true); + } } $('#composeoptionstoggle').click(function(){ @@ -144,6 +151,12 @@ function rcube_mail_ui() new rcube_scroller('#folderlist-content', '#folderlist-header', '#folderlist-footer'); rcmail.addEventListener('setquota', update_quota); + rcmail.addEventListener('enable-command', enable_command); + rcmail.addEventListener('afterimport-messages', show_uploadform); + } + else if (rcmail.env.action == 'get') { + new rcube_splitter({ id:'mailpartsplitterv', p1:'#messagepartheader', p2:'#messagepartcontainer', + orientation:'v', relative:true, start:226, min:150, size:12}).init(); } if ($('#mailview-left').length) { @@ -182,6 +195,8 @@ function rcube_mail_ui() /*** addressbook task ***/ else if (rcmail.env.task == 'addressbook') { rcmail.addEventListener('afterupload-photo', show_uploadform); + rcmail.addEventListener('beforepushgroup', push_contactgroup); + rcmail.addEventListener('beforepopgroup', pop_contactgroup); if (rcmail.env.action == '') { new rcube_splitter({ id:'addressviewsplitterd', p1:'#addressview-left', p2:'#addressview-right', @@ -191,12 +206,12 @@ function rcube_mail_ui() new rcube_scroller('#directorylist-content', '#directorylist-header', '#directorylist-footer'); } - } - // set min-width to show all toolbar buttons - var screen = $('.minwidth'); - if (screen.length) { - screen.css('min-width', $('.toolbar').width() + $('#quicksearchbar').parent().width() + 20); + var dragmenu = $('#dragcontactmenu'); + if (dragmenu.length) { + rcmail.gui_object('dragmenu', 'dragcontactmenu'); + popups.dragmenu = dragmenu; + } } // turn a group of fieldsets into tabs @@ -210,6 +225,7 @@ function rcube_mail_ui() } var select = $(this), + parent = select.parent(), height = Math.max(select.height(), 26) - 2, width = select.width() - 22, title = $('option', this).first().text(); @@ -224,19 +240,23 @@ function rcube_mail_ui() overlay.children().width(width).height(height).css('line-height', (height - 1) + 'px'); - select.change(function() { - var val = $('option:selected', this).text(); - $(this).next().children().html(val); - }); - - var parent = select.parent(); if (parent.css('position') != 'absolute') parent.css('position', 'relative'); // re-set original select width to fix click action and options width in some browsers - select.width(overlay.width()); + select.width(overlay.width()) + .change(function() { + var val = $('option:selected', this).text(); + $(this).next().children().text(val); + }); }); + // set min-width to show all toolbar buttons + var screen = $('body > div.minwidth'); + if (screen.length) { + screen.css('min-width', $('.toolbar').width() + $('#quicksearchbar').width() + $('#searchfilter').width() + 30); + } + $(document.body) .bind('mouseup', body_mouseup) .bind('keyup', function(e){ @@ -250,8 +270,13 @@ function rcube_mail_ui() $('iframe').load(function(e){ // this = iframe - var doc = this.contentDocument ? this.contentDocument : this.contentWindow ? this.contentWindow.document : null; - $(doc).mouseup(body_mouseup); + try { + var doc = this.contentDocument ? this.contentDocument : this.contentWindow ? this.contentWindow.document : null; + $(doc).mouseup(body_mouseup); + } + catch (e) { + // catch possible "Permission denied" error in IE + }; }) .contents().mouseup(body_mouseup); @@ -429,6 +454,30 @@ function rcube_mail_ui() } + function enable_command(p) + { + if (p.command == 'reply-list') { + var label = rcmail.gettext(p.status ? 'replylist' : 'replyall'); + if (rcmail.env.action == 'preview') + $('a.button.replyall').attr('title', label); + else + $('a.button.reply-all').text(label).attr('title', label); + } + } + + + /** + * 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 */ @@ -436,7 +485,7 @@ function rcube_mail_ui() { // 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]; @@ -551,8 +600,11 @@ function rcube_mail_ui() mailviewsplit.handle.hide(); } - if (visible && uid && rcmail.message_list) - rcmail.message_list.scrollto(uid); + if (rcmail.message_list) { + if (visible && uid) + rcmail.message_list.scrollto(uid); + rcmail.message_list.resize(); + } rcmail.command('save-pref', { name:'preview_pane', value:(visible?1:0) }); } @@ -561,7 +613,7 @@ function rcube_mail_ui() /** * Switch between short and full headers display in message preview */ - function toggle_preview_headers(button) + function toggle_preview_headers() { $('#preview-shortheaders').toggle(); var full = $('#preview-allheaders').toggle(), @@ -702,8 +754,6 @@ function rcube_mail_ui() $('input[name="sort_col"][value="'+rcmail.env.sort_col+'"]').prop('checked', true); $('input[name="sort_ord"][value="DESC"]').prop('checked', rcmail.env.sort_order == 'DESC'); $('input[name="sort_ord"][value="ASC"]').prop('checked', rcmail.env.sort_order != 'DESC'); - $('input[name="view"][value="thread"]').prop('checked', rcmail.env.threading ? true : false); - $('input[name="view"][value="list"]').prop('checked', rcmail.env.threading ? false : true); // set checkboxes $('input[name="list_col[]"]').each(function() { @@ -718,7 +768,8 @@ function rcube_mail_ui() close: function() { $dialog.dialog('destroy').hide(); }, - width: 650 + minWidth: 500, + width: $dialog.width()+25 }).show(); } @@ -732,11 +783,10 @@ function rcube_mail_ui() var sort = $('input[name="sort_col"]:checked').val(), ord = $('input[name="sort_ord"]:checked').val(), - thread = $('input[name="view"]:checked').val(), cols = $('input[name="list_col[]"]:checked') .map(function(){ return this.value; }).get(); - rcmail.set_list_options(cols, sort, ord, thread == 'thread' ? 1 : 0); + rcmail.set_list_options(cols, sort, ord, rcmail.env.threading); } @@ -788,6 +838,35 @@ function rcube_mail_ui() }); } + function push_contactgroup(p) + { + // lets the contacts list swipe to the left, nice! + var table = $('#contacts-table'), + scroller = table.parent().css('overflow', 'hidden'); + + table.clone() + .css({ position:'absolute', top:'0', left:'0', width:table.width()+'px', 'z-index':10 }) + .appendTo(scroller) + .animate({ left: -(table.width()+5) + 'px' }, 300, 'swing', function(){ + $(this).remove(); + scroller.css('overflow', 'auto') + }); + } + + function pop_contactgroup(p) + { + // lets the contacts list swipe to the left, nice! + var table = $('#contacts-table'), + scroller = table.parent().css('overflow', 'hidden'), + clone = table.clone().appendTo(scroller); + + table.css({ position:'absolute', top:'0', left:-(table.width()+5) + 'px', width:table.width()+'px', height:table.height()+'px', 'z-index':10 }) + .animate({ left:'0' }, 300, 'linear', function(){ + clone.remove(); + $(this).css({ position:'relative', left:'0', width:'100%', height:'auto', 'z-index':1 }); + scroller.css('overflow', 'auto') + }); + } function show_uploadform() { @@ -798,7 +877,7 @@ function rcube_mail_ui() $dialog.dialog('close'); return; } - + // add icons to clone file input field if (rcmail.env.action == 'compose' && !$dialog.data('extended')) { $('<a>') |