diff options
Diffstat (limited to 'skins/classic')
-rw-r--r-- | skins/classic/common.css | 2 | ||||
-rw-r--r-- | skins/classic/embed.css | 6 | ||||
-rw-r--r-- | skins/classic/functions.js | 197 | ||||
-rw-r--r-- | skins/classic/images/icons/html.png | bin | 0 -> 379 bytes | |||
-rw-r--r-- | skins/classic/images/icons/text.png | bin | 0 -> 372 bytes | |||
-rw-r--r-- | skins/classic/mail.css | 42 | ||||
-rw-r--r-- | skins/classic/print.css | 29 | ||||
-rw-r--r-- | skins/classic/templates/about.html | 2 | ||||
-rw-r--r-- | skins/classic/templates/addressbook.html | 1 | ||||
-rw-r--r-- | skins/classic/templates/mail.html | 5 | ||||
-rw-r--r-- | skins/classic/templates/message.html | 16 | ||||
-rw-r--r-- | skins/classic/templates/messagepreview.html | 22 |
12 files changed, 291 insertions, 31 deletions
diff --git a/skins/classic/common.css b/skins/classic/common.css index 121616700..1f62fbe07 100644 --- a/skins/classic/common.css +++ b/skins/classic/common.css @@ -20,7 +20,7 @@ body.extwin margin: 10px; } -td, th, div, p, select, input, textarea +select, input, textarea { font-size: 12px; font-family: inherit; 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 ee68ee729..d10812c57 100644 --- a/skins/classic/functions.js +++ b/skins/classic/functions.js @@ -92,6 +92,7 @@ function rcube_mail_ui() forwardmenu: {id:'forwardmenu', editable:1}, searchmenu: {id:'searchmenu', editable:1}, messagemenu: {id:'messagemenu'}, + attachmentmenu: {id:'attachmentmenu'}, listmenu: {id:'listmenu', editable:1}, dragmessagemenu:{id:'dragmessagemenu', sticky:1}, groupmenu: {id:'groupoptionsmenu', above:1}, @@ -133,24 +134,24 @@ show_popupmenu: function(popup, show) { var obj = this.popups[popup].obj, above = this.popups[popup].above, - ref = rcube_find_object(popup+'link'); + ref = $(this.popups[popup].link ? this.popups[popup].link : rcube_find_object(popup+'link')); if (typeof show == 'undefined') show = obj.is(':visible') ? false : true; else if (this.popups[popup].toggle && show && this.popups[popup].obj.is(':visible') ) show = false; - if (show && ref) { - var parent = $(ref).parent(), + if (show && ref.length) { + var parent = ref.parent(), win = $(window), - pos = parent.hasClass('dropbutton') ? parent.offset() : $(ref).offset(); + pos = parent.hasClass('dropbutton') ? parent.offset() : ref.offset(); - if (!above && pos.top + ref.offsetHeight + obj.height() > win.height()) + if (!above && pos.top + ref.height() + obj.height() > win.height()) above = true; if (pos.left + obj.width() > win.width()) pos.left = win.width() - obj.width() - 30; - obj.css({ left:pos.left, top:(pos.top + (above ? -obj.height() : ref.offsetHeight)) }); + obj.css({ left:pos.left, top:(pos.top + (above ? -obj.height() : ref.height())) }); } obj[show?'show':'hide'](); @@ -325,7 +326,7 @@ listmenu: function(show) }; }, -open_listmenu: function(e) +open_listmenu: function() { this.listmenu(); }, @@ -380,6 +381,35 @@ spellmenu: function(show) this.show_popupmenu('spellmenu', show); }, +show_attachmentmenu: function(elem) +{ + var id = elem.parentNode.id.replace(/^attach/, ''); + + $('#attachmenuopen').unbind('click').attr('onclick', '').click(function(e) { + return rcmail.command('open-attachment', id, this); + }); + + $('#attachmenudownload').unbind('click').attr('onclick', '').click(function() { + rcmail.command('download-attachment', id, this); + }); + + this.popups.attachmentmenu.link = elem; + rcmail.command('menu-open', {menu: 'attachmentmenu', id: id}); +}, + +menu_open: function(p) +{ + if (p && p.props && p.props.menu == 'attachmentmenu') + this.show_popup('attachmentmenu'); + else + this.open_listmenu(); +}, + +menu_save: function(prop) +{ + this.save_listmenu(); +}, + body_mouseup: function(evt, p) { var i, target = rcube_event.get_target(evt); @@ -462,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 @@ -492,6 +526,9 @@ init_compose_form: function() div.style.top = (parseInt(headers_div.offsetHeight, 10) + 3) + 'px'; $(window).resize(); + // fixes contacts-table position when there's more than one addressbook + $('#contacts-table').css('top', $('#directorylist').height() + 24 + 'px'); + // contacts search submit $('#quicksearchbox').keydown(function(e) { if (rcube_event.get_keycode(e) == 13) @@ -584,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; @@ -631,8 +784,13 @@ 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 @@ -754,7 +912,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'); @@ -797,8 +955,9 @@ function rcube_init_mail_ui() .contents().mouseup(function(e){rcmail_ui.body_mouseup(e)}); if (rcmail.env.task == 'mail') { - rcmail.addEventListener('menu-open', 'open_listmenu', rcmail_ui); - rcmail.addEventListener('menu-save', 'save_listmenu', rcmail_ui); + rcmail.addEventListener('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('message_dragmenu', 'dragmessagemenu'); @@ -808,12 +967,18 @@ function rcube_init_mail_ui() rcmail.addEventListener('responseaftergetunread', rcube_render_mailboxlist); rcmail.addEventListener('responseaftercheck-recent', rcube_render_mailboxlist); rcmail.addEventListener('aftercollapse-folder', rcube_render_mailboxlist); + rcmail.addEventListener('afterimport-messages', function(){ rcmail_ui.show_popup('uploadform', false); }); 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); }); diff --git a/skins/classic/images/icons/html.png b/skins/classic/images/icons/html.png Binary files differnew file mode 100644 index 000000000..3f022f678 --- /dev/null +++ b/skins/classic/images/icons/html.png diff --git a/skins/classic/images/icons/text.png b/skins/classic/images/icons/text.png Binary files differnew file mode 100644 index 000000000..94891be80 --- /dev/null +++ b/skins/classic/images/icons/text.png diff --git a/skins/classic/mail.css b/skins/classic/mail.css index d0ea4b369..0193e87ff 100644 --- a/skins/classic/mail.css +++ b/skins/classic/mail.css @@ -173,13 +173,15 @@ } #messagemenu li a.active:hover, +#attachmentmenu li a.active:hover, #markmessagemenu li a.active:hover { color: #fff; background-color: #c00; } -#messagemenu li a +#messagemenu li a, +#attachmentmenu li a { background: url(images/messageactions.png) no-repeat 7px 0; background-position: 7px 20px; @@ -190,7 +192,8 @@ background-position: 7px 1px; } -#messagemenu li a.downloadlink +#messagemenu li a.downloadlink, +#attachmentmenu li a.downloadlink { background-position: 7px -17px; } @@ -200,7 +203,8 @@ background-position: 7px -35px; } -#messagemenu li a.openlink +#messagemenu li a.openlink, +#attachmentmenu li a.openlink { background-position: 7px -53px; } @@ -1135,6 +1139,16 @@ table.headers-table tr td.header span text-decoration: underline; } +#attachment-list li a.drop { + background: url(images/icons/down_small.gif) no-repeat center 6px; + width: 12px; + height: 7px; + cursor: pointer; + padding: 5px 0 0; + margin-left: 3px; + display: inline-block; +} + #messagebody { position:relative; @@ -1298,20 +1312,27 @@ div.message-htmlpart div.rcmBody text-decoration: underline; } -#openextwinlink +#messagelinks { position: absolute; top: 8px; right: 10px; - width: 15px; - height: 15px; - border: 0; + height: 16px; + text-align: right; +} + +#messageframe #messagelinks +{ + top: 2px; + right: 2px; } #compose-headers #openextwinlink { - top: 4px; - right: 2px; + position: absolute; + height: 15px; + top: 4px; + right: 2px; } #full-headers @@ -1579,16 +1600,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; 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/templates/about.html b/skins/classic/templates/about.html index d84ccbd3c..519acf773 100644 --- a/skins/classic/templates/about.html +++ b/skins/classic/templates/about.html @@ -16,7 +16,7 @@ <div id="license"> <roundcube:object name="aboutcontent" /> <h2 class="sysname">Roundcube Webmail <roundcube:object name="version" /></h2> -<p class="copyright">Copyright © 2005-2012, The Roundcube Dev Team</p> +<p class="copyright">Copyright © 2005-2013, The Roundcube Dev Team</p> <p class="license">This program is free software; you can redistribute it and/or modify it under the terms of the <a href="http://www.gnu.org/licenses/gpl.html" target="_blank">GNU General Public License</a> as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.<br/> diff --git a/skins/classic/templates/addressbook.html b/skins/classic/templates/addressbook.html index 4d809095b..fdcd1847f 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\\');') : ''" /> diff --git a/skins/classic/templates/mail.html b/skins/classic/templates/mail.html index c7010e87c..c3b4004cc 100644 --- a/skins/classic/templates/mail.html +++ b/skins/classic/templates/mail.html @@ -140,7 +140,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 +205,7 @@ </div> </div> +<roundcube:object name="messageimportform" id="upload-form" attachmentFieldSize="40" class="popupmenu" /> + </body> </html> diff --git a/skins/classic/templates/message.html b/skins/classic/templates/message.html index d1594ea28..11e58c711 100644 --- a/skins/classic/templates/message.html +++ b/skins/classic/templates/message.html @@ -39,6 +39,14 @@ <div id="messageframe"> <div class="boxlistcontent" style="top:0; overflow-x:auto"> + <div id="messagelinks"> + <roundcube:if condition="env:optional_format=='text'" /> + <roundcube:button command="change-format" prop="text" image="/images/icons/text.png" width="15" height="15" title="changeformattext" id="changeformattext" /> + <roundcube:endif /> + <roundcube:if condition="env:optional_format=='html'" /> + <roundcube:button command="change-format" prop="html" image="/images/icons/html.png" width="15" height="15" title="changeformathtml" id="changeformathtml" /> + <roundcube:endif /> + </div> <roundcube:object name="messageHeaders" class="headers-table" cellspacing="0" cellpadding="2" addicon="/images/icons/silhouette.png" summary="Message headers" /> <roundcube:object name="messageFullHeaders" id="full-headers" /> <roundcube:object name="messageAttachments" id="attachment-list" /> @@ -65,5 +73,13 @@ </script> <roundcube:endif /> +<div id="attachmentmenu" class="popupmenu"> + <ul class="toolbarmenu"> + <li><roundcube:button command="open-attachment" id="attachmenuopen" type="link" label="open" class="openlink" classAct="openlink active" innerclass="openlink" /></li> + <li><roundcube:button command="download-attachment" id="attachmenudownload" type="link" label="download" class="downloadlink" classAct="downloadlink active" innerclass="downloadlink" /></li> + <roundcube:container name="attachmentmenu" id="attachmentmenu" /> + </ul> +</div> + </body> </html> diff --git a/skins/classic/templates/messagepreview.html b/skins/classic/templates/messagepreview.html index 78b2306f6..80dbe381a 100644 --- a/skins/classic/templates/messagepreview.html +++ b/skins/classic/templates/messagepreview.html @@ -3,11 +3,21 @@ <head> <title><roundcube:object name="pagetitle" /></title> <roundcube:include file="/includes/links.html" /> +<script type="text/javascript" src="/splitter.js"></script> +<script type="text/javascript" src="/functions.js"></script> </head> -<body class="iframe"> +<body class="iframe" onload="rcube_init_mail_ui()"> <div class="messageheaderbox"> -<roundcube:button command="extwin" image="/images/icons/extwin.png" width="15" height="15" title="openinextwin" id="openextwinlink" /> + <div id="messagelinks"> + <roundcube:if condition="env:optional_format=='text'" /> + <roundcube:button command="change-format" prop="text" image="/images/icons/text.png" width="15" height="15" title="changeformattext" id="changeformattext" /> + <roundcube:endif /> + <roundcube:if condition="env:optional_format=='html'" /> + <roundcube:button command="change-format" prop="html" image="/images/icons/html.png" width="15" height="15" title="changeformathtml" id="changeformathtml" /> + <roundcube:endif /> + <roundcube:button command="extwin" image="/images/icons/extwin.png" width="15" height="15" title="openinextwin" id="openextwinlink" /> + </div> <roundcube:object name="messageHeaders" class="headers-table" cellspacing="0" cellpadding="2" addicon="/images/icons/silhouette.png" summary="Message headers" /> <roundcube:object name="messageFullHeaders" id="full-headers" /> <roundcube:object name="messageAttachments" id="attachment-list" /> @@ -16,5 +26,13 @@ <roundcube:object name="messageObjects" id="message-objects" /> <roundcube:object name="messageBody" id="messagebody" /> +<div id="attachmentmenu" class="popupmenu"> + <ul class="toolbarmenu"> + <li><roundcube:button command="open-attachment" id="attachmenuopen" type="link" label="open" class="openlink" classAct="openlink active" innerclass="openlink" /></li> + <li><roundcube:button command="download-attachment" id="attachmenudownload" type="link" label="download" class="downloadlink" classAct="downloadlink active" innerclass="downloadlink" /></li> + <roundcube:container name="attachmentmenu" id="attachmentmenu" /> + </ul> +</div> + </body> </html> |