diff options
Diffstat (limited to 'skins')
-rw-r--r-- | skins/classic/common.css | 51 | ||||
-rw-r--r-- | skins/classic/functions.js | 1 | ||||
-rw-r--r-- | skins/classic/includes/messagetoolbar.html | 5 | ||||
-rw-r--r-- | skins/classic/mail.css | 74 | ||||
-rw-r--r-- | skins/classic/splitter.js | 82 | ||||
-rw-r--r-- | skins/classic/templates/message.html | 4 | ||||
-rw-r--r-- | skins/larry/images/listicons.png | bin | 26546 -> 37369 bytes | |||
-rw-r--r-- | skins/larry/includes/mailtoolbar.html | 2 | ||||
-rw-r--r-- | skins/larry/mail.css | 6 | ||||
-rw-r--r-- | skins/larry/styles.css | 46 | ||||
-rw-r--r-- | skins/larry/templates/mail.html | 4 | ||||
-rw-r--r-- | skins/larry/templates/message.html | 4 | ||||
-rw-r--r-- | skins/larry/ui.js | 60 |
13 files changed, 241 insertions, 98 deletions
diff --git a/skins/classic/common.css b/skins/classic/common.css index 186be2485..10bc91c09 100644 --- a/skins/classic/common.css +++ b/skins/classic/common.css @@ -965,6 +965,57 @@ ul.toolbarmenu li.separator_above } +/*** folder selector ***/ + +#folder-selector li a +{ + padding: 0; +} + +#folder-selector li a span +{ + background: url(images/icons/folders.png) no-repeat 6px 0; + display: block; + height: 15px; + min-height: 14px; + padding: 2px 4px 2px 28px; + overflow: hidden; + max-width: 120px; + text-overflow: ellipsis; +} + +#folder-selector li a.virtual +{ + color: #A0A0A0; +} + +#folder-selector li a.active:hover span +{ + color: white; +} + +#folder-selector li a.inbox span +{ + background-position: 6px -18px; +} +#folder-selector li a.drafts span +{ + background-position: 6px -37px; +} +#folder-selector li a.sent span +{ + background-position: 6px -54px; +} +#folder-selector li a.trash span +{ + background-position: 6px -91px; +} +#folder-selector li a.junk span +{ + background-position: 6px -73px; +} + + /***** tabbed interface elements *****/ div.tabsbar, diff --git a/skins/classic/functions.js b/skins/classic/functions.js index 2b7886d38..4312d57bc 100644 --- a/skins/classic/functions.js +++ b/skins/classic/functions.js @@ -419,6 +419,7 @@ body_mouseup: function(evt, p) && !this.popups[i].toggle && (!this.popups[i].editable || !this.target_overlaps(target, this.popups[i].id)) && (!this.popups[i].sticky || !rcube_mouse_is_over(evt, rcube_find_object(this.popups[i].id))) + && !$(target).is('.folder-selector-link') && !$(target).children('.folder-selector-link').length ) { window.setTimeout('rcmail_ui.show_popup("'+i+'",false);', 50); } diff --git a/skins/classic/includes/messagetoolbar.html b/skins/classic/includes/messagetoolbar.html index 8f8efd291..8d98c7e42 100644 --- a/skins/classic/includes/messagetoolbar.html +++ b/skins/classic/includes/messagetoolbar.html @@ -20,9 +20,6 @@ <roundcube:container name="toolbar" id="messagetoolbar" /> <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('move', this.options[this.selectedIndex].value)" class="mboxlist" folder_filter="mail" /> -<roundcube:endif /> </div> <div id="forwardmenu" class="popupmenu"> @@ -46,6 +43,8 @@ <li><roundcube:button class="printlink" command="print" label="printmessage" classAct="printlink active" /></li> <li><roundcube:button class="downloadlink" command="download" label="emlsave" classAct="downloadlink active" /></li> <li><roundcube:button class="editlink" command="edit" prop="new" label="editasnew" classAct="editlink active" /></li> + <li><roundcube:button class="movelink" command="move" label="moveto" classAct="copylink active" innerclass="folder-selector-link" /></li> + <li><roundcube:button class="copylink" command="copy" label="copyto" classAct="movelink active" innerclass="folder-selector-link" /></li> <li class="separator_below"><roundcube:button class="sourcelink" command="viewsource" label="viewsource" classAct="sourcelink active" /></li> <li><roundcube:button class="openlink" command="open" label="openinextwin" target="_blank" classAct="openlink active" /></li> <roundcube:container name="messagemenu" id="messagemenu" /> diff --git a/skins/classic/mail.css b/skins/classic/mail.css index e5d55e05c..bf07383c9 100644 --- a/skins/classic/mail.css +++ b/skins/classic/mail.css @@ -175,23 +175,6 @@ background-position: -512px 0; } -#messagetoolbar select.mboxlist -{ - position: relative; - margin: 0 8px; - top: 7px; -} - -#messagetoolbar select.mboxlist option -{ - padding-left: 15px; -} - -#messagetoolbar select.mboxlist option[value=""] -{ - padding-left: 2px; -} - #messagemenu li a.active:hover, #attachmentmenu li a.active:hover, #markmessagemenu li a.active:hover @@ -412,36 +395,35 @@ display: block; position: relative; font-size: 11px; - background: url(images/icons/folders.png) 5px 0 no-repeat; border-bottom: 1px solid #EBEBEB; } #mailboxlist li ul li:last-child { - border-bottom: none; + border-bottom: 0 none; } -#mailboxlist li.inbox +#mailboxlist li.inbox a { background-position: 5px -18px; } -#mailboxlist li.drafts +#mailboxlist li.drafts a { background-position: 5px -37px; } -#mailboxlist li.sent +#mailboxlist li.sent a { background-position: 5px -54px; } -#mailboxlist li.junk +#mailboxlist li.junk a { background-position: 5px -73px; } -#mailboxlist li.trash +#mailboxlist li.trash a { background-position: 5px -91px; } @@ -456,6 +438,7 @@ padding-bottom: 2px; text-decoration: none; height: 15px; + background: url(images/icons/folders.png) 5px 0 no-repeat; } #mailboxlist li.unread @@ -497,13 +480,50 @@ padding: 0; margin: 0; border-top: 1px solid #EBEBEB; - padding-left: 15px; - background-position: 25px 1px; background-color: #FFF; - color: blue; font-weight: normal; } +#mailboxlist li.mailbox ul li a { + padding-left: 40px; /* 24 + 1 x 16 */ + background-position: 20px 0; /* 4 + 1 x 16 */ +} +#mailboxlist li.mailbox ul li div.treetoggle { + left: 23px !important; +} + +#mailboxlist li.mailbox ul ul li.mailbox a { + padding-left: 56px; /* 2x */ + background-position: 36px 0; +} +#mailboxlist li.mailbox ul ul li div.treetoggle { + left: 39px !important; +} + +#mailboxlist li.mailbox ul ul ul li.mailbox a { + padding-left: 72px; /* 3x */ + background-position: 52px 0; +} +#mailboxlist li.mailbox ul ul ul li div.treetoggle { + left: 55px !important; +} + +#mailboxlist li.mailbox ul ul ul ul li.mailbox a { + padding-left: 88px; /* 4x */ + background-position: 68px 0; +} +#mailboxlist li.mailbox ul ul ul ul li div.treetoggle { + left: 71px !important; +} + +/* 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: 87px !important; +} + #listcontrols { position: relative; diff --git a/skins/classic/splitter.js b/skins/classic/splitter.js index b94f0bd6f..cec6a4713 100644 --- a/skins/classic/splitter.js +++ b/skins/classic/splitter.js @@ -17,6 +17,8 @@ function rcube_splitter(attrib) this.drag_active = false; this.callback = attrib.callback; + var me = this; + this.init = function() { this.p1 = document.getElementById(this.p1id); @@ -42,9 +44,9 @@ function rcube_splitter(attrib) this.elm.unselectable = 'on'; // add the mouse event listeners - rcube_event.add_listener({element: this.elm, event:'mousedown', object:this, method:'onDragStart'}); + $(this.elm).mousedown(onDragStart); if (bw.ie) - rcube_event.add_listener({element: window, event:'resize', object:this, method:'onResize'}); + $(window).resize(onResize); // read saved position from cookie var cookie = rcmail.get_cookie(this.id); @@ -90,19 +92,19 @@ function rcube_splitter(attrib) /** * Handler for mousedown events */ - this.onDragStart = function(e) + function onDragStart(e) { + me.drag_active = true; + // disable text selection while dragging the splitter if (bw.konq || bw.chrome || bw.safari) document.body.style.webkitUserSelect = 'none'; - this.p1pos = this.relative ? $(this.p1).position() : $(this.p1).offset(); - this.p2pos = this.relative ? $(this.p2).position() : $(this.p2).offset(); - this.drag_active = true; + me.p1pos = me.relative ? $(me.p1).position() : $(me.p1).offset(); + me.p2pos = me.relative ? $(me.p2).position() : $(me.p2).offset(); // start listening to mousemove events - rcube_event.add_listener({element:document, event:'mousemove', object:this, method:'onDrag'}); - rcube_event.add_listener({element:document, event:'mouseup', object:this, method:'onDragStop'}); + $(document).bind('mousemove.'+me.id, onDrag).bind('mouseup.'+me.id, onDragStop); // enable dragging above iframes $('iframe').each(function() { @@ -119,68 +121,64 @@ function rcube_splitter(attrib) /** * Handler for mousemove events */ - this.onDrag = function(e) + function onDrag(e) { - if (!this.drag_active) + if (!me.drag_active) return false; - ref = this; - // with timing events dragging action is more responsive - window.clearTimeout(this.ts); - this.ts = window.setTimeout(function() { ref.onDragAction(e); }, 1); + window.clearTimeout(me.ts); + me.ts = window.setTimeout(function() { onDragAction(e); }, 1); return false; }; - this.onDragAction = function(e) + function onDragAction(e) { var pos = rcube_event.get_mouse_pos(e); - if (this.relative) { - var parent = $(this.p1.parentNode).offset(); + if (me.relative) { + var parent = $(me.p1.parentNode).offset(); pos.x -= parent.left; pos.y -= parent.top; } - if (this.horizontal) { - if (((pos.y - this.layer.height * 1.5) > this.p1pos.top) && ((pos.y + this.layer.height * 1.5) < (this.p2pos.top + this.p2.offsetHeight))) { - this.pos = pos.y; - this.resize(); + if (me.horizontal) { + if (((pos.y - me.layer.height * 1.5) > me.p1pos.top) && ((pos.y + me.layer.height * 1.5) < (me.p2pos.top + me.p2.offsetHeight))) { + me.pos = pos.y; + me.resize(); } } - else { - if (((pos.x - this.layer.width * 1.5) > this.p1pos.left) && ((pos.x + this.layer.width * 1.5) < (this.p2pos.left + this.p2.offsetWidth))) { - this.pos = pos.x; - this.resize(); - } + else if (((pos.x - me.layer.width * 1.5) > me.p1pos.left) && ((pos.x + me.layer.width * 1.5) < (me.p2pos.left + me.p2.offsetWidth))) { + me.pos = pos.x; + me.resize(); } - this.p1pos = this.relative ? $(this.p1).position() : $(this.p1).offset(); - this.p2pos = this.relative ? $(this.p2).position() : $(this.p2).offset(); + me.p1pos = me.relative ? $(me.p1).position() : $(me.p1).offset(); + me.p2pos = me.relative ? $(me.p2).position() : $(me.p2).offset(); }; /** * Handler for mouseup events */ - this.onDragStop = function(e) + function onDragStop(e) { + me.drag_active = false; + // resume the ability to highlight text if (bw.konq || bw.chrome || bw.safari) document.body.style.webkitUserSelect = 'auto'; // cancel the listening for drag events - rcube_event.remove_listener({element:document, event:'mousemove', object:this, method:'onDrag'}); - rcube_event.remove_listener({element:document, event:'mouseup', object:this, method:'onDragStop'}); - this.drag_active = false; + $(document).unbind('.' + me.id); // remove temp divs - $('div.iframe-splitter-fix').each(function() { this.parentNode.removeChild(this); }); + $('div.iframe-splitter-fix').remove(); - this.set_cookie(); + me.set_cookie(); - if (typeof this.callback == 'function') - this.callback(this); + if (typeof me.callback == 'function') + me.callback(me); return bw.safari ? true : rcube_event.cancel(e); }; @@ -188,15 +186,15 @@ function rcube_splitter(attrib) /** * Handler for window resize events */ - this.onResize = function(e) + function onResize(e) { - if (this.horizontal) { - var new_height = parseInt(this.p2.parentNode.offsetHeight, 10) - parseInt(this.p2.style.top, 10) - (bw.ie8 ? 2 : 0); - this.p2.style.height = (new_height > 0 ? new_height : 0) +'px'; + if (me.horizontal) { + var new_height = parseInt(me.p2.parentNode.offsetHeight, 10) - parseInt(me.p2.style.top, 10) - (bw.ie8 ? 2 : 0); + me.p2.style.height = (new_height > 0 ? new_height : 0) +'px'; } else { - var new_width = parseInt(this.p2.parentNode.offsetWidth, 10) - parseInt(this.p2.style.left, 10); - this.p2.style.width = (new_width > 0 ? new_width : 0) + 'px'; + var new_width = parseInt(me.p2.parentNode.offsetWidth, 10) - parseInt(me.p2.style.left, 10); + me.p2.style.width = (new_width > 0 ? new_width : 0) + 'px'; } }; diff --git a/skins/classic/templates/message.html b/skins/classic/templates/message.html index bd4fbf277..3ab0a2e5e 100644 --- a/skins/classic/templates/message.html +++ b/skins/classic/templates/message.html @@ -30,11 +30,13 @@ <div id="mailboxlist-container"> <div id="mailboxlist-title" class="boxtitle"><roundcube:label name="mailboxlist" /></div> <div class="boxlistcontent"> - <roundcube:object name="mailboxlist" id="mailboxlist" class="treelist" maxlength="25" /> + <roundcube:object name="mailboxlist" id="mailboxlist" class="treelist" folder_filter="mail" /> </div> <div class="boxfooter"></div> </div> </div> +<roundcube:else /> +<roundcube:object name="mailboxlist" folder_filter="mail" type="js" /> <roundcube:endif /> <div id="messageframe"> diff --git a/skins/larry/images/listicons.png b/skins/larry/images/listicons.png Binary files differindex 8a17cc5bd..49342a318 100644 --- a/skins/larry/images/listicons.png +++ b/skins/larry/images/listicons.png diff --git a/skins/larry/includes/mailtoolbar.html b/skins/larry/includes/mailtoolbar.html index 59f2d581a..5708a94f1 100644 --- a/skins/larry/includes/mailtoolbar.html +++ b/skins/larry/includes/mailtoolbar.html @@ -39,6 +39,8 @@ <li><roundcube:button command="download" label="emlsave" class="icon" classAct="icon active" innerclass="icon download" /></li> <li><roundcube:button command="edit" prop="new" label="editasnew" class="icon" classAct="icon active" innerclass="icon edit" /></li> <li><roundcube:button command="viewsource" label="viewsource" class="icon" classAct="icon active" innerclass="icon viewsource" /></li> + <li><roundcube:button command="move" label="moveto" class="icon" classAct="icon active" innerclass="icon move folder-selector-link" /></li> + <li><roundcube:button command="copy" label="copyto" class="icon" classAct="icon active" innerclass="icon copy folder-selector-link" /></li> <li><roundcube:button command="open" label="openinextwin" target="_blank" class="icon" classAct="icon active" innerclass="icon extwin" /></li> <roundcube:container name="messagemenu" id="messagemenu" /> </ul> diff --git a/skins/larry/mail.css b/skins/larry/mail.css index 8e1634ad7..d3b09c087 100644 --- a/skins/larry/mail.css +++ b/skins/larry/mail.css @@ -417,12 +417,6 @@ a.iconbutton.threadmode.selected { right: 0; } -#messagetoolbar .toolbarselect { - position: absolute; - bottom: 6px; - right: 3px; -} - #messagesearchtools { position: absolute; right: 0; diff --git a/skins/larry/styles.css b/skins/larry/styles.css index 0b2c0904f..21d93c106 100644 --- a/skins/larry/styles.css +++ b/skins/larry/styles.css @@ -616,6 +616,15 @@ a.iconlink.upload { background: url(images/ajaxloader_dark.gif) 0 4px no-repeat; } +#messagestack div a { + color: #94c0da; +} + +#messagestack div a:hover { + text-decoration: underline; + cursor: pointer; +} + .ui-dialog.error .ui-dialog-title, .ui-dialog.warning .ui-dialog-title, .ui-dialog.confirmation .ui-dialog-title { @@ -1133,6 +1142,9 @@ ul.listing { ul.listing li { background-color: #d9ecf4; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } ul.listing li ul { @@ -2007,11 +2019,11 @@ select.decorated option { #quotadisplay { left: 6px; + height: 18px; font-size: 12px; font-weight: bold; text-shadow: 0px 1px 1px #fff; padding-left: 30px; - height: 18px; background: url(images/quota.png) -100px 0 no-repeat; } @@ -2317,6 +2329,38 @@ ul.toolbarmenu li span.conversation { z-index: 255; } +/*** folder selector ***/ + +#folder-selector li a span { + background: url("images/listicons.png") 4px -2021px no-repeat; + display: block; + height: 17px; + min-height: 14px; + padding: 4px 4px 1px 28px; + overflow: hidden; + max-width: 120px; + text-overflow: ellipsis; +} + +#folder-selector li a.virtual { + opacity: .2; +} + +#folder-selector li a.inbox span { + background-position: 4px -2049px; +} +#folder-selector li a.drafts span { + background-position: 4px -1388px; +} +#folder-selector li a.sent span { + background-position: 4px -2074px; +} +#folder-selector li a.trash span { + background-position: 4px -1508px; +} +#folder-selector li a.junk span { + background-position: 4px -2100px; +} /*** attachment list ***/ diff --git a/skins/larry/templates/mail.html b/skins/larry/templates/mail.html index 2e7c0c105..8f19b9f7f 100644 --- a/skins/larry/templates/mail.html +++ b/skins/larry/templates/mail.html @@ -5,8 +5,8 @@ <roundcube:include file="/includes/links.html" /> <style type="text/css"> <roundcube:if condition="config:preview_pane == true" /> - #mailview-top { height: <roundcube:exp expression="!empty(cookie:mailviewsplitter) ? cookie:mailviewsplitter-48 : 276" />px; } - #mailview-bottom { top: <roundcube:exp expression="!empty(cookie:mailviewsplitter) ? cookie:mailviewsplitter+6 : 330" />px; height: auto; display: block; } + #mailview-top { height: 276px; } + #mailview-bottom { top: 330px; height: auto; display: block; } #mailpreviewframe { display: block; } <roundcube:endif /> </style> diff --git a/skins/larry/templates/message.html b/skins/larry/templates/message.html index e63705f76..df92b7511 100644 --- a/skins/larry/templates/message.html +++ b/skins/larry/templates/message.html @@ -16,9 +16,6 @@ <roundcube:button command="list" type="link" class="button back disabled" classAct="button back" classSel="button back pressed" label="back" /> <roundcube:endif /> <roundcube:include file="/includes/mailtoolbar.html" /> - <div class="toolbarselect"> - <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> <roundcube:if condition="!env:extwin" /> @@ -36,6 +33,7 @@ <div id="mailview-right" class="offset uibox"> <roundcube:else /> +<roundcube:object name="mailboxlist" folder_filter="mail" type="js" /> <div id="mailview-right" class="offset fullwidth uibox"> <roundcube:endif /> diff --git a/skins/larry/ui.js b/skins/larry/ui.js index 9183291c5..3c4740df2 100644 --- a/skins/larry/ui.js +++ b/skins/larry/ui.js @@ -31,6 +31,7 @@ function rcube_mail_ui() var me = this; var mailviewsplit; var compose_headers = {}; + var prefs; // export public methods this.set = setenv; @@ -74,7 +75,25 @@ function rcube_mail_ui() */ function get_pref(key) { - return rcmail.get_cookie(key); + if (!prefs) { + prefs = window.localStorage ? rcmail.local_storage_get_item('prefs.larry', {}) : {}; + } + + // fall-back to cookies + if (prefs[key] == null) { + var cookie = rcmail.get_cookie(key); + if (cookie != null) { + prefs[key] = cookie; + + // copy value to local storage and remove cookie + if (window.localStorage) { + rcmail.local_storage_set_item('prefs.larry', prefs); + rcmail.set_cookie(key, cookie, new Date()); // expire cookie + } + } + } + + return prefs[key]; } /** @@ -82,9 +101,18 @@ function rcube_mail_ui() */ function save_pref(key, val) { - var exp = new Date(); - exp.setYear(exp.getFullYear() + 1); - rcmail.set_cookie(key, val, exp); + prefs[key] = val; + + // write prefs to local storage + if (window.localStorage) { + rcmail.local_storage_set_item('prefs.larry', prefs); + } + else { + // store value in cookie + var exp = new Date(); + exp.setYear(exp.getFullYear() + 1); + rcmail.set_cookie(key, val, exp); + } } /** @@ -345,8 +373,10 @@ function rcube_mail_ui() function body_mouseup(e) { var config, obj, target = e.target; + if (target.className == 'inner') target = e.target.parentNode; + for (var id in popups) { obj = popups[id]; config = popupconfig[id]; @@ -355,9 +385,10 @@ function rcube_mail_ui() && !config.toggle && (!config.editable || !target_overlaps(target, obj.get(0))) && (!config.sticky || !rcube_mouse_is_over(e, obj.get(0))) + && !$(target).is('.folder-selector-link') ) { var myid = id+''; - window.setTimeout(function(){ show_popupmenu(myid, false) }, 10); + window.setTimeout(function() { show_popupmenu(myid, false); }, 10); } } } @@ -408,6 +439,9 @@ function rcube_mail_ui() // show a popup dialog on errors if (p.type == 'error' && rcmail.env.task != 'login') { + // hide original message object, we don't want both + rcmail.hide_message(p.object); + if (me.message_timer) { window.clearTimeout(me.message_timer); } @@ -416,8 +450,10 @@ function rcube_mail_ui() } var msg = p.message, - pos = $(p.object).offset(); - pos.top -= (rcmail.env.task == 'login' ? 20 : 160); + dialog_close = function() { + // check if dialog is still displayed, to prevent from js error + me.messagedialog.is(':visible') && me.messagedialog.dialog('destroy').hide(); + }; if (me.messagedialog.is(':visible')) msg = me.messagedialog.html() + '<p>' + p.message + '</p>'; @@ -428,16 +464,14 @@ function rcube_mail_ui() closeOnEscape: true, dialogClass: 'popupmessage ' + p.type, title: env.errortitle, - close: function() { - me.messagedialog.dialog('destroy').hide(); - }, - position: ['center', pos.top], - hide: { effect:'drop', direction:'right' }, + close: dialog_close, + position: ['center', 'center'], + hide: {effect: 'fadeOut'}, width: 420, minHeight: 90 }).show(); - me.message_timer = window.setTimeout(function(){ me.messagedialog.dialog('close'); }, Math.max(3000, p.timeout / 2)); + me.message_timer = window.setTimeout(dialog_close, p.timeout); } } |