summaryrefslogtreecommitdiff
path: root/skins/classic
diff options
context:
space:
mode:
Diffstat (limited to 'skins/classic')
-rw-r--r--skins/classic/common.css2
-rw-r--r--skins/classic/embed.css6
-rw-r--r--skins/classic/functions.js197
-rw-r--r--skins/classic/images/icons/html.pngbin0 -> 379 bytes
-rw-r--r--skins/classic/images/icons/text.pngbin0 -> 372 bytes
-rw-r--r--skins/classic/mail.css42
-rw-r--r--skins/classic/print.css29
-rw-r--r--skins/classic/templates/about.html2
-rw-r--r--skins/classic/templates/addressbook.html1
-rw-r--r--skins/classic/templates/mail.html5
-rw-r--r--skins/classic/templates/message.html16
-rw-r--r--skins/classic/templates/messagepreview.html22
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
new file mode 100644
index 000000000..3f022f678
--- /dev/null
+++ b/skins/classic/images/icons/html.png
Binary files differ
diff --git a/skins/classic/images/icons/text.png b/skins/classic/images/icons/text.png
new file mode 100644
index 000000000..94891be80
--- /dev/null
+++ b/skins/classic/images/icons/text.png
Binary files differ
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 &copy; 2005-2012, The Roundcube Dev Team</p>
+<p class="copyright">Copyright &copy; 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>