summaryrefslogtreecommitdiff
path: root/skins/larry
diff options
context:
space:
mode:
Diffstat (limited to 'skins/larry')
-rw-r--r--skins/larry/addressbook.css33
-rw-r--r--skins/larry/embed.css34
-rw-r--r--skins/larry/ie7hacks.css30
-rw-r--r--skins/larry/iehacks.css15
-rw-r--r--skins/larry/images/buttons.gifbin13054 -> 14997 bytes
-rw-r--r--skins/larry/images/buttons.pngbin34009 -> 37956 bytes
-rw-r--r--skins/larry/images/filetypes.pngbin8142 -> 8551 bytes
-rw-r--r--skins/larry/includes/footer.html12
-rw-r--r--skins/larry/includes/header.html14
-rw-r--r--skins/larry/includes/mailtoolbar.html4
-rw-r--r--skins/larry/mail.css172
-rw-r--r--skins/larry/print.css2
-rw-r--r--skins/larry/styles.css334
-rw-r--r--skins/larry/svggradients.css9
-rw-r--r--skins/larry/templates/about.html2
-rw-r--r--skins/larry/templates/addressbook.html26
-rw-r--r--skins/larry/templates/compose.html7
-rw-r--r--skins/larry/templates/error.html7
-rw-r--r--skins/larry/templates/importcontacts.html9
-rw-r--r--skins/larry/templates/mail.html67
-rw-r--r--skins/larry/templates/message.html28
-rw-r--r--skins/larry/templates/messageerror.html2
-rw-r--r--skins/larry/templates/messagepart.html2
-rw-r--r--skins/larry/templates/messagepreview.html21
-rw-r--r--skins/larry/ui.js132
25 files changed, 791 insertions, 171 deletions
diff --git a/skins/larry/addressbook.css b/skins/larry/addressbook.css
index 74bc0d7d8..ff3951497 100644
--- a/skins/larry/addressbook.css
+++ b/skins/larry/addressbook.css
@@ -8,8 +8,6 @@
* License. It is allowed to copy, distribute, transmit and to adapt the work
* by keeping credits to the original autors in the README file.
* See http://creativecommons.org/licenses/by-sa/3.0/ for details.
- *
- * $Id$
*/
#addressview-left {
@@ -85,10 +83,23 @@
background-position: 6px -766px;
}
-#directorylist li.addressbook.selected a {
+#directorylist li.addressbook.selected > a {
background-position: 6px -791px;
}
+#directorylist li.addressbook ul li:last-child {
+ border-bottom: 0;
+}
+
+#directorylist li.addressbook ul.groups {
+ margin: 0;
+ padding: 0;
+}
+
+#directorylist li.addressbook ul.groups li {
+ width: 100%;
+}
+
#directorylist li.contactgroup a {
padding-left: 62px;
background-position: 32px -1555px;
@@ -114,6 +125,12 @@
margin-left: 8px;
}
+#directorylist li.addressbook div.collapsed,
+#directorylist li.addressbook div.expanded {
+ top: 15px;
+ left: 20px;
+}
+
#contacts-table .contact td.name {
background-position: 6px -1603px;
}
@@ -319,3 +336,13 @@ a.deletebutton {
text-indent: -5000px;
background: url(images/buttons.png) -7px -377px no-repeat;
}
+
+#import-box {
+ position: absolute;
+ bottom: 28px;
+ top: 34px;
+ left: 0;
+ right: 0;
+ overflow: auto;
+ padding: 10px;
+}
diff --git a/skins/larry/embed.css b/skins/larry/embed.css
new file mode 100644
index 000000000..2c8ba39dc
--- /dev/null
+++ b/skins/larry/embed.css
@@ -0,0 +1,34 @@
+/**
+ * Roundcube webmail "embedded" stylesheets
+ *
+ * Copyright (c) 2012, The Roundcube Dev Team
+ *
+ * The contents are subject to the Creative Commons Attribution-ShareAlike
+ * License. It is allowed to copy, distribute, transmit and to adapt the work
+ * by keeping credits to the original autors in the README file.
+ * See http://creativecommons.org/licenses/by-sa/3.0/ for details.
+ */
+
+.rcmail-inline-message {
+ font-family: sans-serif;
+ font-size: 11px;
+ font-weight: bold;
+ color: #996600;
+ border: 1px solid #ffdf0e;
+ background: url("images/messages.png") no-repeat scroll 5px -83px #fef893;
+ padding: 6px 12px 4px 30px;
+ margin-bottom: 0.8em;
+}
+
+.rcmail-inline-message > button {
+ margin-left: 1em;
+ vertical-align: baseline;
+}
+
+.rcmail-inline-message em {
+ font-size: 90%;
+}
+
+.rcmail-inline-buttons {
+ margin-bottom: 0;
+}
diff --git a/skins/larry/ie7hacks.css b/skins/larry/ie7hacks.css
index f07d79a65..6d7af4787 100644
--- a/skins/larry/ie7hacks.css
+++ b/skins/larry/ie7hacks.css
@@ -17,6 +17,18 @@
height: expression((parseInt(document.documentElement.clientHeight)-150)+'px');
}
+.minimal #mainscreen {
+ height: expression((parseInt(document.documentElement.clientHeight)-82)+'px');
+}
+
+.minimal #mainscreen.offset {
+ height: expression((parseInt(document.documentElement.clientHeight)-120)+'px');
+}
+
+#messagepartframe {
+ height: expression((parseInt(this.parentNode.offsetHeight)-1)+'px');
+}
+
input.button {
display: inline;
font-size: 90%;
@@ -29,7 +41,8 @@ a.deletebutton,
.boxfooter .listbutton .inner,
.attachmentslist li a.delete,
.attachmentslist li a.cancelupload,
-.previewheader .iconlink {
+.previewheader .iconlink,
+.minimal #taskbar .button-inner {
/* workaround for text-indent which also offsets the background image */
text-indent: 0;
font-size: 0;
@@ -125,7 +138,7 @@ ul.toolbarmenu li label {
padding: 3px 8px;
}
-#quicksearchbar input {
+.searchbox input {
padding-top: 4px;
padding-bottom: 2px;
}
@@ -183,3 +196,16 @@ ul.toolbarmenu li label {
padding: 0 1px 0 0;
}
+.minimal #topline {
+ width: 100%;
+ height: 18px;
+ box-sizing: border-box;
+}
+
+
+.minimal #taskbar a:hover .tooltip {
+ right: 34px;
+ top: 1px;
+}
+
+
diff --git a/skins/larry/iehacks.css b/skins/larry/iehacks.css
index 83ea946fa..960ce7648 100644
--- a/skins/larry/iehacks.css
+++ b/skins/larry/iehacks.css
@@ -7,8 +7,6 @@
* License. It is allowed to copy, distribute, transmit and to adapt the work
* by keeping credits to the original autors in the README file.
* See http://creativecommons.org/licenses/by-sa/3.0/ for details.
- *
- * $Id$
*/
input.button {
@@ -31,7 +29,8 @@ input.button.mainaction:active {
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#2a2e31', endColorstr='#505050', GradientType=0);
}
-a.button {
+a.button,
+.buttongroup {
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#e6e6e6', GradientType=0);
}
@@ -49,6 +48,10 @@ input.button:active {
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#bababa', endColorstr='#d8d8d8', GradientType=0);
}
+.buttongroup a.button.selected {
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#909090', endColorstr='#858585', GradientType=0);
+}
+
#message.statusbar {
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eaeaea', endColorstr='#c8c8c8', GradientType=0);
}
@@ -65,6 +68,12 @@ input.button:active {
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#404040', endColorstr='#060606', GradientType=0);
}
+#toplogo {
+ position: absolute;
+ top: 0px;
+ left: 10px;
+}
+
.records-table tr.selected td {
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#019bc6', endColorstr='#017cb4', GradientType=0);
}
diff --git a/skins/larry/images/buttons.gif b/skins/larry/images/buttons.gif
index d8a33d6b2..8a4a78ee4 100644
--- a/skins/larry/images/buttons.gif
+++ b/skins/larry/images/buttons.gif
Binary files differ
diff --git a/skins/larry/images/buttons.png b/skins/larry/images/buttons.png
index 7d042cb23..54bee0156 100644
--- a/skins/larry/images/buttons.png
+++ b/skins/larry/images/buttons.png
Binary files differ
diff --git a/skins/larry/images/filetypes.png b/skins/larry/images/filetypes.png
index 0e197d55a..53b2eee9a 100644
--- a/skins/larry/images/filetypes.png
+++ b/skins/larry/images/filetypes.png
Binary files differ
diff --git a/skins/larry/includes/footer.html b/skins/larry/includes/footer.html
index ee93fcf57..a4fa69296 100644
--- a/skins/larry/includes/footer.html
+++ b/skins/larry/includes/footer.html
@@ -8,4 +8,16 @@ $(document).ready(function(){
});
</script>
+<!--[if lte IE 8]>
+<script type="text/javascript">
+
+// fix missing :last-child selectors
+$(document).ready(function(){
+ $('ul.treelist ul').each(function(i,ul){
+ $('li:last-child', ul).css('border-bottom', 0);
+ });
+});
+
+</script>
+<![endif]-->
diff --git a/skins/larry/includes/header.html b/skins/larry/includes/header.html
index 4be475bac..f2efb8e06 100644
--- a/skins/larry/includes/header.html
+++ b/skins/larry/includes/header.html
@@ -1,31 +1,33 @@
<div id="header">
<div id="topline">
<div class="topleft">
+ <roundcube:container name="topline-left" id="topline-left" />
<roundcube:button name="about" type="link" label="about" class="about-link" onclick="UI.show_about(this);return false" />
<roundcube:if condition="config:support_url" />
<a href="<roundcube:var name='config:support_url' />" target="_blank" class="support-link" id="supportlink"><roundcube:label name="support" /></a>
<roundcube:endif />
</div>
-
+ <roundcube:container name="topline-center" id="topline-center" />
<div class="topright">
- <roundcube:if condition="!env:extwin" />
+ <roundcube:container name="topline-right" id="topline-right" />
+ <roundcube:if condition="!env:extwin &amp;&amp; !env:framed" />
<span class="username"><roundcube:object name="username" /></span>
<roundcube:button command="logout" label="logout" class="button-logout" />
- <roundcube:else />
+ <roundcube:elseif condition="env:extwin" />
<roundcube:button command="close" label="close" class="closelink" />
<roundcube:endif />
</div>
-
- <roundcube:container name="topline" id="topline" />
</div>
-<roundcube:if condition="!env:extwin" />
+<roundcube:if condition="!env:extwin &amp;&amp; !env:framed" />
<div id="topnav">
<div id="taskbar" class="topright">
<roundcube:button command="mail" label="mail" class="button-mail" classSel="button-mail button-selected" innerClass="button-inner" />
<roundcube:button command="addressbook" label="addressbook" class="button-addressbook" classSel="button-addressbook button-selected" innerClass="button-inner" />
<roundcube:container name="taskbar" id="taskbar" />
<roundcube:button command="settings" label="settings" class="button-settings" classSel="button-settings button-selected" innerClass="button-inner" />
+ <roundcube:button command="logout" label="logout" class="button-logout" classSel="button-logout" innerClass="button-inner" />
+ <span class="minmodetoggle"></span>
</div>
<roundcube:object name="logo" src="/images/roundcube_logo.png" id="toplogo" border="0" alt="Logo" onclick="rcmail.command('switch-task','mail');return false;" />
</div>
diff --git a/skins/larry/includes/mailtoolbar.html b/skins/larry/includes/mailtoolbar.html
index 31472cbb3..59f2d581a 100644
--- a/skins/larry/includes/mailtoolbar.html
+++ b/skins/larry/includes/mailtoolbar.html
@@ -1,3 +1,5 @@
+<roundcube:button command="compose" type="link" class="button compose disabled" classAct="button compose" classSel="button compose pressed" label="compose" title="writenewmessage" />
+<span class="spacer"></span>
<roundcube:button command="reply" type="link" class="button reply disabled" classAct="button reply" classSel="button reply pressed" label="reply" title="replytomessage" />
<span class="dropbutton">
<roundcube:button command="reply-all" type="link" class="button reply-all disabled" classAct="button reply-all" classSel="button reply-all pressed" label="replyall" title="replytoallmessage" />
@@ -17,7 +19,7 @@
<div id="forwardmenu" class="popupmenu">
<ul class="toolbarmenu">
- <li><roundcube:button command="forward" label="forwardinline" prop="sub" classAct="forwardlink active" class="forwardlink" /></li>
+ <li><roundcube:button command="forward-inline" label="forwardinline" prop="sub" classAct="forwardlink active" class="forwardlink" /></li>
<li><roundcube:button command="forward-attachment" label="forwardattachment" prop="sub" classAct="forwardattachmentlink active" class="forwardattachmentlink" /></li>
<roundcube:container name="forwardmenu" id="forwardmenu" />
</ul>
diff --git a/skins/larry/mail.css b/skins/larry/mail.css
index 48eba6e02..b5f0822a3 100644
--- a/skins/larry/mail.css
+++ b/skins/larry/mail.css
@@ -2,14 +2,12 @@
* Roundcube webmail styles for the Email section
*
* Copyright (c) 2012, The Roundcube Dev Team
- * Screendesign by FLINT / Büro für Gestaltung, bueroflint.com
+ * Screendesign by FLINT / B�ro f�r Gestaltung, bueroflint.com
*
* The contents are subject to the Creative Commons Attribution-ShareAlike
* License. It is allowed to copy, distribute, transmit and to adapt the work
* by keeping credits to the original autors in the README file.
* See http://creativecommons.org/licenses/by-sa/3.0/ for details.
- *
- * $Id$
*/
#mailview-left {
@@ -143,7 +141,7 @@ a.iconbutton.threadmode.selected {
background-position: 6px 2px;
}
-#mailboxlist li:first-child {
+#mailboxlist > li:first-child {
border-radius: 4px 4px 0 0;
border-top: 0;
}
@@ -158,7 +156,7 @@ a.iconbutton.threadmode.selected {
background-position: 6px 3px;
}
-#mailboxlist li.mailbox.unread a {
+#mailboxlist li.mailbox.unread > a {
padding-right: 36px;
}
@@ -226,6 +224,17 @@ a.iconbutton.threadmode.selected {
color: #017cb4;
}
+#mailboxlist li.mailbox div.treetoggle {
+ top: 13px;
+ left: 19px;
+}
+
+#mailboxlist li.mailbox ul li:last-child {
+ border-bottom: 0;
+}
+
+/* nested mailboxes */
+
#mailboxlist li.mailbox ul {
list-style: none;
margin: 0;
@@ -233,50 +242,57 @@ a.iconbutton.threadmode.selected {
border-top: 1px solid #bbd3da;
}
-#mailboxlist li.mailbox ul li {
- padding-left: 26px;
-}
-
#mailboxlist li.mailbox ul li a {
- background-position: 6px -93px;
+ padding-left: 52px; /* 36 + 1 x 16 */
+ background-position: 22px -93px; /* 6 + 1 x 16 */
}
-
#mailboxlist li.mailbox ul li.selected > a {
- background-position: 6px -117px;
+ background-position: 22px -117px;
}
-
-#mailboxlist li.mailbox ul li:last-child {
- border-bottom: 0;
+#mailboxlist li.mailbox ul li div.treetoggle {
+ left: 33px;
+ top: 14px;
}
-#mailboxlist li.mailbox div.collapsed,
-#mailboxlist li.mailbox div.expanded {
- position: absolute;
- top: 13px;
- left: 19px;
- width: 13px;
- height: 13px;
- background: url(images/listicons.png) -3px -144px no-repeat;
- cursor: pointer;
+#mailboxlist li.mailbox ul ul li.mailbox a {
+ padding-left: 68px; /* 2x */
+ background-position: 38px -93px;
}
-
-#mailboxlist li.mailbox div.expanded {
- background-position: -3px -168px;
+#mailboxlist li.mailbox ul ul li.selected > a {
+ background-position: 38px -117px;
}
-
-#mailboxlist li.mailbox.selected > div.collapsed {
- background-position: -23px -144px;
+#mailboxlist li.mailbox ul ul li div.treetoggle {
+ left: 48px;
}
-#mailboxlist li.mailbox.selected > div.expanded {
- background-position: -23px -168px;
+#mailboxlist li.mailbox ul ul ul li.mailbox a {
+ padding-left: 84px; /* 3x */
+ background-position: 54px -93px;
+}
+#mailboxlist li.mailbox ul ul ul li.selected > a {
+ background-position: 54px -117px;
+}
+#mailboxlist li.mailbox ul ul ul li div.treetoggle {
+ left: 64px;
}
+#mailboxlist li.mailbox ul ul ul ul li.mailbox a {
+ padding-left: 100px; /* 4x */
+ background-position: 70px -93px;
+}
+#mailboxlist li.mailbox ul ul ul ul li.selected > a {
+ background-position: 70px -117px;
+}
+#mailboxlist li.mailbox ul ul ul ul li div.treetoggle {
+ left: 80px;
+}
-#mailboxlist li.mailbox ul li div.collapsed,
-#mailboxlist li.mailbox ul li div.expanded {
- left: 43px;
- top: 14px;
+/* indent folders on levels > 4 */
+#mailboxlist li.mailbox ul ul ul ul ul li {
+ padding-left: 16px;
+}
+#mailboxlist li.mailbox ul ul ul ul ul li div.treetoggle {
+ left: 96px;
}
#mailboxlist li.mailbox .unreadcount {
@@ -332,7 +348,7 @@ a.iconbutton.threadmode.selected {
position: absolute;
right: 256px;
width: auto;
- top: 7px;
+ top: 2px;
}
#searchfilter select {
@@ -440,7 +456,7 @@ a.iconbutton.threadmode.selected {
}
#messagelist tr td.date {
- width: 125px;
+ width: 135px;
}
#messagelist tr.message {
@@ -729,7 +745,7 @@ h2.subject {
h3.subject {
font-size: 14px;
- margin: 0 8em 0 0;
+ margin: 0 12em 0 0;
padding: 8px 8px 4px 8px;
white-space: nowrap;
overflow: hidden;
@@ -852,7 +868,7 @@ div.more-headers {
}
div.hide-headers {
- background-position: center -1589px;
+ background-position: center -1600px;
}
#all-headers {
@@ -934,15 +950,20 @@ div.hide-headers {
border-radius: 4px;
}
-#messageheader #countcontrols {
+#messageheader #countcontrols,
+#messageheader #formatcontrols {
position: absolute;
top: 8px;
right: 8px;
- width: 20em;
text-align: right;
white-space: nowrap;
}
+#messageheader #formatcontrols {
+ top: 38px;
+ right: 8px;
+}
+
#messageheader .pagenav .countdisplay {
min-width: 0;
padding-right: 0.5em;
@@ -988,7 +1009,7 @@ div.hide-headers {
color: #960;
border: 1px solid #ffdf0e;
background-color: #fef893;
- background-position: 5px -85px;
+ background-position: 5px -83px;
padding: 6px 12px 4px 30px;
white-space: normal;
}
@@ -999,20 +1020,22 @@ div.hide-headers {
}
div.message-part,
-div.message-htmlpart {
- padding: 0 2px 10px 2px;
- border-top: 2px solid #f0f0f0;
+div.message-htmlpart,
+div.message-partheaders {
+ padding: 10px 2px;
+ border-top: 1px solid #ccc;
}
#messagebody div:first-child {
+ padding-top: 0;
border-top: 0;
}
div.message-part pre,
div.message-htmlpart pre,
div.message-part div.pre {
- margin: 0px;
- padding: 0px;
+ margin: 0;
+ padding: 0;
font-family: monospace;
font-size: 12px;
white-space: -moz-pre-wrap !important;
@@ -1021,7 +1044,7 @@ div.message-part div.pre {
}
div.message-part span.sig {
- color: #666666;
+ color: #666;
}
div.message-part blockquote {
@@ -1029,7 +1052,7 @@ div.message-part blockquote {
border-left: 2px solid blue;
border-right: 2px solid blue;
background-color: #F6F6F6;
- margin: 2px 0px 2px 0px;
+ margin: 2px 0 2px 0;
padding: 1px 8px 1px 10px;
}
@@ -1040,9 +1063,27 @@ div.message-part blockquote blockquote {
}
div.message-part blockquote blockquote blockquote {
- color: #990000;
- border-left: 2px solid #bb0000;
- border-right: 2px solid #bb0000;
+ color: #900;
+ border-left: 2px solid #b00;
+ border-right: 2px solid #b00;
+}
+
+div.message-partheaders {
+ margin-top: 8px;
+ padding: 8px 0;
+}
+
+div.message-partheaders .headers-table {
+ width: 100%;
+}
+
+div.message-partheaders .headers-table td.header-title {
+ width: auto;
+ padding-left: 0;
+}
+
+div.message-partheaders .headers-table td.header {
+ width: 88%;
}
#messagebody > hr {
@@ -1100,13 +1141,15 @@ div.message-part blockquote blockquote blockquote {
#messagepartcontainer {
position: absolute;
top: 60px;
- left: 0px;
- right: 0px;
- bottom: 0px;
+ left: 0;
+ right: 0;
+ bottom: 0;
}
#messagepartframe {
border: 0;
+ width: 100%;
+ height: 100%;
}
/*** message composition ***/
@@ -1135,6 +1178,23 @@ div.message-part blockquote blockquote blockquote {
bottom: 0;
}
+#composequicksearch {
+ position: relative;
+ padding: 4px;
+ background: #c7e3ef;
+}
+
+#composequicksearch .searchbox input {
+ width: 100%;
+ height: 26px;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+#composequicksearch #searchmenulink {
+ width: 15px;
+}
+
#compose-contacts #directorylist {
border-bottom: 4px solid #c7e3ef;
}
diff --git a/skins/larry/print.css b/skins/larry/print.css
index fa256746b..6481ea9e6 100644
--- a/skins/larry/print.css
+++ b/skins/larry/print.css
@@ -7,8 +7,6 @@
* License. It is allowed to copy, distribute, transmit and to adapt the work
* by keeping credits to the original autors in the README file.
* See http://creativecommons.org/licenses/by-sa/3.0/ for details.
- *
- * $Id$
*/
body {
font-family: "Lucida Grande", Verdana, Arial, Helvetica, sans-serif;
diff --git a/skins/larry/styles.css b/skins/larry/styles.css
index b4a4d81e1..cfbf9ac5f 100644
--- a/skins/larry/styles.css
+++ b/skins/larry/styles.css
@@ -8,8 +8,6 @@
* License. It is allowed to copy, distribute, transmit and to adapt the work
* by keeping credits to the original autors in the README file.
* See http://creativecommons.org/licenses/by-sa/3.0/ for details.
- *
- * $Id$
*/
body {
@@ -71,6 +69,12 @@ textarea.placeholder {
font-weight: bold;
}
+/* fixes vertical alignment of checkboxes and labels */
+label input,
+label span {
+ vertical-align: middle;
+}
+
/*** buttons ***/
input.button {
@@ -173,7 +177,8 @@ input.mainaction {
/** link buttons **/
-a.button {
+a.button,
+.buttongroup {
display: inline-block;
margin: 0 2px;
padding: 2px 5px;
@@ -194,6 +199,11 @@ a.button {
text-decoration: none;
}
+.buttongroup {
+ padding: 0;
+ white-space: nowrap;
+}
+
a.button:focus,
input.button:focus {
border-color: #4fadd5;
@@ -227,6 +237,29 @@ a.button.disabled span.inner {
filter: alpha(opacity=40);
}
+.buttongroup a.button {
+ margin: 0;
+ border-width: 0 1px 0 0;
+ border-radius: 0;
+ background: none;
+ box-shadow: none;
+ -o-box-shadow: none;
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+}
+
+.buttongroup a.button.first,
+.buttongroup a.button:first-child {
+ border-radius: 4px 0 0 4px;
+ border-left: 0;
+}
+
+.buttongroup a.button.last,
+.buttongroup a.button:last-child {
+ border-radius: 0 4px 4px 0;
+ border-right: 0;
+}
+
a.button.pressed,
a.button:active,
input.button:active {
@@ -262,6 +295,21 @@ input.button:active {
background: linear-gradient(top, #bababa 0%, #d8d8d8 100%);
}
+.buttongroup a.button.selected,
+.buttongroup a.button.selected:hover {
+ background: #8a8a8a;
+ background: -moz-linear-gradient(top, #909090 0%, #858585 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#909090), color-stop(100%,#858585));
+ background: -o-linear-gradient(top, #909090 0%, #858585 100%);
+ background: -ms-linear-gradient(top, #909090 0%, #858585 100%);
+ background: linear-gradient(top, #909090 0%, #858585 100%);
+ -webkit-box-shadow: inset 0 1px 2px 0 #555;
+ -moz-box-shadow: inset 0 1px 2px 0 #555;
+ box-shadow: inset 0 1px 2px 0 #555;
+ border-right-color: #555;
+ border-left-color: #555;
+}
+
.pagenav a.button {
padding: 1px 3px;
height: 16px;
@@ -269,6 +317,12 @@ input.button:active {
margin-bottom: 1px;
}
+.pagenav .buttongroup a.button,
+.pagenav .buttongroup a.button:hover {
+ padding: 1px 5px;
+ margin-bottom: 0;
+}
+
.pagenav a.button span.inner {
display: inline-block;
width: 16px;
@@ -314,6 +368,20 @@ input.button:active {
background-position: -29px -271px;
}
+.pagenav a.changeformat.html span.inner {
+ background-position: -7px -1859px;
+}
+.pagenav a.changeformat.html.selected span.inner {
+ background-position: -29px -1859px;
+}
+
+.pagenav a.changeformat.text span.inner {
+ background-position: -7px -1874px;
+}
+.pagenav a.changeformat.text.selected span.inner {
+ background-position: -29px -1874px;
+}
+
.pagenav .countdisplay {
display: inline-block;
padding: 3px 1em 0 1em;
@@ -504,15 +572,21 @@ a.iconlink.upload {
/*** basic page layout ***/
+#header {
+ overflow-x: hidden; /* Chrome bug #1488851 */
+}
+
#topline {
height: 18px;
background: url(images/linen_header.jpg) repeat #666;
border-bottom: 1px solid #4f4f4f;
padding: 2px 0 2px 10px;
color: #aaa;
+ text-align: center;
}
#topnav {
+ position: relative;
height: 46px;
margin-bottom: 10px;
padding: 0 0 0 10px;
@@ -569,9 +643,157 @@ a.iconlink.upload {
color: #fff;
}
+#taskbar .button-logout {
+ display: none;
+}
+
+#taskbar a.button-logout span.button-inner {
+ background-position: -2px -1791px;
+}
+
+#taskbar a.button-logout:hover span.button-inner {
+ background-position: -2px -1829px;
+}
+
+
+/*** minimal version of the page header ***/
+
+.minimal #topline {
+ position: fixed;
+ top: -18px;
+ background: #444;
+ z-index: 5000;
+ width: 100%;
+ height: 22px;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+.minimal #topline:hover {
+ top: 0px;
+ opacity: 0.94;
+ filter: alpha(opacity=94);
+ -webkit-transition: top 0.3s ease-in-out;
+ -moz-transition: top 0.3s ease-in-out;
+ -o-transition: top 0.3s ease-in-out;
+ transition: top 0.3s ease-in-out;
+}
+
+.extwin #topline,
+.extwin #topline:hover {
+ position: static;
+ top: 0px;
+ height: 18px;
+ width: auto;
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ opacity: 0.999;
+}
+
+.partwin #topline {
+ position: absolute;
+ right: 6px;
+ top: 18px;
+ width: auto;
+ z-index: 100;
+ background: transparent;
+ background: none;
+ border: 0;
+}
+
+.minimal #topline a.button-logout {
+ display: none;
+}
+
+.minimal #topline span.username {
+ display: inline-block;
+ padding-top: 2px;
+}
+
+.minimal #topnav {
+ position: relative;
+ top: 4px;
+ height: 42px;
+}
+
+.minimal #taskbar a {
+ position: relative;
+ padding: 10px 10px 0 6px;
+ height: 32px;
+}
+
+.minimal #taskbar .button-logout {
+ display: inline-block;
+}
+
+.minimal #taskbar .button-inner {
+ top: -4px;
+ padding: 0;
+ height: 24px !important;
+ width: 27px;
+ text-indent: -5000px;
+}
+
+#taskbar .tooltip {
+ display: none;
+}
+
+.minimal #taskbar .tooltip {
+ position: absolute;
+ top: -500px;
+ right: 2px;
+ display: inline-block;
+ padding: 2px 8px 3px 8px;
+ background: #444;
+ background: -moz-linear-gradient(top, #444 0%, #333 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#444), color-stop(100%,#333));
+ background: -o-linear-gradient(top, #444 0%, #333 100%);
+ background: -ms-linear-gradient(top, #444 0%, #333 100%);
+ background: linear-gradient(top, #444 0%, #333 100%);
+ color: #eee;
+ font-weight: bold;
+ white-space: nowrap;
+ border: 1px solid #777;
+ box-shadow: 0 1px 5px 0 #333;
+ -moz-box-shadow: 0 1px 5px 0 #333;
+ -webkit-box-shadow: 0 1px 5px 0 #333;
+ -o-box-shadow: 0 1px 5px 0 #333;
+ z-index: 200;
+ white-space: nowrap;
+ text-shadow: 0px 1px 1px #000;
+}
+
+.minimal #taskbar .tooltip:after {
+ content: "";
+ position: absolute;
+ top: -4px;
+ right: 15px;
+ border-style: solid;
+ border-width: 0 4px 4px;
+ border-color: #888 transparent;
+ /* reduce the damage in FF3.0 */
+ display: block;
+ width: 0;
+ z-index: 251;
+}
+
+.ie8 .minimal #taskbar .tooltip:after {
+ top: -6px;
+}
+
+.minimal #taskbar a:hover .tooltip {
+ display: block;
+ top: 39px;
+}
+
/*** taskbar ***/
+#taskbar {
+ position: relative;
+ padding-right: 18px;
+}
+
#taskbar a {
display: inline-block;
height: 34px;
@@ -629,6 +851,22 @@ a.iconlink.upload {
background-position: 0 -168px;
}
+#taskbar .minmodetoggle {
+ position: absolute;
+ top: 0;
+ right: 0;
+ display: block;
+ width: 19px;
+ height: 46px;
+ cursor: pointer;
+ background: url(images/buttons.png) -35px -1778px no-repeat;
+}
+
+.minimal #taskbar .minmodetoggle {
+ height: 42px;
+ background-position: -35px -1820px;
+}
+
#mainscreen {
position: absolute;
top: 88px;
@@ -637,12 +875,24 @@ a.iconlink.upload {
bottom: 20px;
}
+.minimal #mainscreen {
+ top: 62px;
+}
+
+.minimal #mainscreen.offset {
+ top: 102px;
+}
+
+.partwin #mainscreen {
+ top: 60px
+}
+
.extwin #mainscreen {
top: 40px;
}
#mainscreen.offset {
- top: 130px;
+ top: 132px;
}
#mainscreen .offset {
@@ -800,6 +1050,10 @@ ul.listing li {
background-color: #d9ecf4;
}
+ul.listing li ul {
+ border-top: 1px solid #bbd3da;
+}
+
ul.listing li.droptarget,
table.listing tr.droptarget td {
background-color: #e8e798;
@@ -816,6 +1070,32 @@ table.layout td {
vertical-align: top;
}
+ul.treelist li {
+ position: relative;
+}
+
+ul.treelist li div.treetoggle {
+ position: absolute;
+ top: 13px;
+ left: 19px;
+ width: 13px;
+ height: 13px;
+ background: url(images/listicons.png) -3px -144px no-repeat;
+ cursor: pointer;
+}
+
+ul.treelist li div.treetoggle.expanded {
+ background-position: -3px -168px;
+}
+
+ul.treelist li.selected > div.collapsed {
+ background-position: -23px -144px;
+}
+
+ul.treelist li.selected > div.expanded {
+ background-position: -23px -168px;
+}
+
.listbox .boxfooter {
position: absolute;
bottom: 0;
@@ -1060,6 +1340,10 @@ body.iframe {
margin: 38px 0 10px 0;
}
+body.iframe.error {
+ background: #ededed;
+}
+
body.iframe.floatingbuttons {
margin-bottom: 40px;
}
@@ -1328,17 +1612,21 @@ ul.proplist li {
/*** quicksearch **/
+.searchbox {
+ position: relative;
+}
+
#quicksearchbar {
position: absolute;
right: 1px;
- top: 0;
+ top: 2px;
width: 240px;
}
+.searchbox input,
#quicksearchbar input {
width: 176px;
margin: 0;
- margin-top: 7px;
padding: 3px 30px 3px 34px;
height: 18px;
background: #f1f1f1;
@@ -1347,15 +1635,17 @@ ul.proplist li {
font-size: 11px;
}
+.searchbox #searchmenulink,
#quicksearchbar #searchmenulink {
position: absolute;
- top: 12px;
+ top: 5px;
left: 6px;
}
+.searchbox #searchreset,
#quicksearchbar #searchreset {
position: absolute;
- top: 11px;
+ top: 4px;
right: 1px;
}
@@ -1507,6 +1797,7 @@ ul.proplist li {
}
.toolbar a.button.export {
+ min-width: 74px;
background-position: center -1054px;
}
@@ -1522,7 +1813,6 @@ ul.proplist li {
background-position: 0 -1745px;
}
-
a.menuselector {
display: inline-block;
border: 1px solid #ababab;
@@ -1973,16 +2263,27 @@ ul.toolbarmenu li span.conversation {
background-position: 0 -390px;
}
-.attachmentslist li.html {
+.attachmentslist li.sig,
+.attachmentslist li.pgp-signature,
+.attachmentslist li.pkcs7-signature {
background-position: 0 -442px;
}
+.attachmentslist li.html {
+ background-position: 0 -468px;
+}
+
+.attachmentslist li.eml,
+.attachmentslist li.rfc822 {
+ background-position: 0 -494px;
+}
+
.attachmentslist li a,
#compose-attachments ul li {
display: block;
color: #333;
font-weight: bold;
- padding: 8px 4px 3px 30px;
+ padding: 8px 15px 3px 30px;
text-shadow: 0px 1px 1px #fff;
text-decoration: none;
white-space: nowrap;
@@ -1990,6 +2291,17 @@ ul.toolbarmenu li span.conversation {
text-overflow: ellipsis;
}
+.attachmentslist li a.drop {
+ background: url(images/buttons.png) no-repeat scroll center -1570px;
+ width: 14px;
+ height: 20px;
+ cursor: pointer;
+ position: absolute;
+ right: 0;
+ top: 0;
+ padding: 0;
+}
+
#compose-attachments ul li {
padding-right: 28px;
}
diff --git a/skins/larry/svggradients.css b/skins/larry/svggradients.css
index 06c6f4732..c40d44f4b 100644
--- a/skins/larry/svggradients.css
+++ b/skins/larry/svggradients.css
@@ -7,8 +7,6 @@
* License. It is allowed to copy, distribute, transmit and to adapt the work
* by keeping credits to the original autors in the README file.
* See http://creativecommons.org/licenses/by-sa/3.0/ for details.
- *
- * $Id$
*/
input.button {
@@ -31,7 +29,8 @@ input.button.mainaction:active {
background-image: url(svggradient.php?c=2a2e31;505050);
}
-a.button {
+a.button,
+.buttongroup {
background-image: url(svggradient.php?c=f9f9f9;e6e6e6);
}
@@ -49,6 +48,10 @@ input.button:active {
background-image: url(svggradient.php?c=bababa;d8d8d8);
}
+.buttongroup a.button.selected {
+ background-image: url(svggradient.php?c=909090;858585);
+}
+
#message.statusbar {
background-image: url(svggradient.php?c=eaeaea;c8c8c8);
}
diff --git a/skins/larry/templates/about.html b/skins/larry/templates/about.html
index 2c18e8889..301c301a9 100644
--- a/skins/larry/templates/about.html
+++ b/skins/larry/templates/about.html
@@ -10,7 +10,7 @@
<roundcube:object name="aboutcontent" />
<h2 class="sysname">Roundcube Webmail <roundcube:object name="version" /></h2>
-<p class="copyright">Copyright &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/larry/templates/addressbook.html b/skins/larry/templates/addressbook.html
index c39c2fe87..401640f1f 100644
--- a/skins/larry/templates/addressbook.html
+++ b/skins/larry/templates/addressbook.html
@@ -13,7 +13,11 @@
<!-- toolbar -->
<div id="addressbooktoolbar" class="toolbar">
<roundcube:button command="import" type="link" class="button import disabled" classAct="button import" classSel="button import pressed" label="import" title="importcontacts" />
- <roundcube:button command="export" type="link" class="button export disabled" classAct="button export" classSel="button export pressed" label="export" title="exportvcards" />
+ <span class="dropbutton">
+ <roundcube:button command="export" type="link" class="button export disabled" classAct="button export" classSel="button export pressed" label="export" title="exportvcards" />
+ <span class="dropbuttontip" id="exportmenulink" onclick="UI.show_popup('exportmenu');return false"></span>
+ </span>
+
<span class="spacer"></span>
<roundcube:button command="compose" type="link" class="button compose disabled" classAct="button compose" classSel="button compose pressed" label="compose" title="writenewmessage" />
<roundcube:button command="advanced-search" type="link" class="button search disabled" classAct="button search" classSel="button search pressed" label="advanced" title="advsearch" />
@@ -26,7 +30,7 @@
<div id="directorylistbox" class="uibox listbox">
<h2 id="directorylist-header" class="boxtitle"><roundcube:label name="groups" /></h2>
<div id="directorylist-content" class="scroller withfooter">
- <roundcube:object name="directorylist" id="directorylist" class="listing" />
+ <roundcube:object name="directorylist" id="directorylist" class="treelist listing" />
</div>
<div id="directorylist-footer" class="boxfooter">
<roundcube:button command="group-create" type="link" title="newcontactgroup" class="listbutton add disabled" classAct="listbutton add" innerClass="inner" content="+" /><roundcube:button name="groupoptions" id="groupoptionslink" type="link" title="moreactions" class="listbutton groupactions" onclick="UI.show_popup('groupoptions');return false" innerClass="inner" content="&#9881;" />
@@ -38,7 +42,7 @@
<div id="addressview-right">
<!-- search box -->
-<div id="quicksearchbar">
+<div id="quicksearchbar" class="searchbox">
<roundcube:object name="searchform" id="quicksearchbox" />
<roundcube:button name="searchmenulink" id="searchmenulink" class="iconbutton searchoptions" onclick="UI.show_popup('searchmenu');return false" title="searchmod" content=" " />
<roundcube:button command="reset-search" id="searchreset" class="iconbutton reset" title="resetsearch" content=" " />
@@ -75,14 +79,20 @@
</div><!-- end mainscreen -->
+<div id="exportmenu" class="popupmenu">
+ <ul class="toolbarmenu">
+ <li><roundcube:button command="export" label="exportall" prop="sub" class="exportalllink" classAct="exportalllink active" /></li>
+ <li><roundcube:button command="export-selected" label="exportsel" prop="sub" class="exportsellink" classAct="exportsellink active" /></li>
+ </ul>
+</div>
<div id="searchmenu" class="popupmenu">
<ul class="toolbarmenu">
- <li><label><input type="checkbox" name="s_mods[]" value="name" id="s_mod_name" onclick="UI.set_searchmod(this)" /> <roundcube:label name="name" /></label></li>
- <li><label><input type="checkbox" name="s_mods[]" value="firstname" id="s_mod_firstname" onclick="UI.set_searchmod(this)" /> <roundcube:label name="firstname" /></label></li>
- <li><label><input type="checkbox" name="s_mods[]" value="surname" id="s_mod_surname" onclick="UI.set_searchmod(this)" /> <roundcube:label name="surname" /></label></li>
- <li><label><input type="checkbox" name="s_mods[]" value="email" id="s_mod_email" onclick="UI.set_searchmod(this)" /> <roundcube:label name="email" /></label></li>
- <li><label><input type="checkbox" name="s_mods[]" value="*" id="s_mod_all" onclick="UI.set_searchmod(this)" /> <roundcube:label name="allfields" /></label></li>
+ <li><label><input type="checkbox" name="s_mods[]" value="name" id="s_mod_name" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="name" /></span></label></li>
+ <li><label><input type="checkbox" name="s_mods[]" value="firstname" id="s_mod_firstname" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="firstname" /></span></label></li>
+ <li><label><input type="checkbox" name="s_mods[]" value="surname" id="s_mod_surname" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="surname" /></span></label></li>
+ <li><label><input type="checkbox" name="s_mods[]" value="email" id="s_mod_email" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="email" /></span></label></li>
+ <li><label><input type="checkbox" name="s_mods[]" value="*" id="s_mod_all" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="allfields" /></span></label></li>
</ul>
</div>
diff --git a/skins/larry/templates/compose.html b/skins/larry/templates/compose.html
index de3b5bfff..9cfe7fe4c 100644
--- a/skins/larry/templates/compose.html
+++ b/skins/larry/templates/compose.html
@@ -39,6 +39,13 @@
<!-- inline address book -->
<div id="compose-contacts" class="uibox listbox">
<h2 class="boxtitle"><roundcube:label name="contacts" /></h2>
+ <div id="composequicksearch">
+ <div class="searchbox">
+ <roundcube:object name="searchform" id="contactsearchbox" />
+ <a id="searchmenulink" class="iconbutton searchoptions"> </a>
+ <roundcube:button command="reset-search" id="searchreset" class="iconbutton reset" title="resetsearch" content=" " />
+ </div>
+ </div>
<roundcube:object name="addressbooks" id="directorylist" class="listing" />
<div class="scroller withfooter">
<roundcube:object name="addresslist" id="contacts-table" class="listing" noheader="true" />
diff --git a/skins/larry/templates/error.html b/skins/larry/templates/error.html
index cd0fc9656..a65733eb0 100644
--- a/skins/larry/templates/error.html
+++ b/skins/larry/templates/error.html
@@ -4,9 +4,12 @@
<title><roundcube:object name="pagetitle" /></title>
<roundcube:include file="/includes/links.html" />
</head>
-<body>
-
+<roundcube:if condition="!env:framed" />
+<body class="error">
<roundcube:include file="/includes/header.html" />
+<roundcube:else />
+<body class="error iframe">
+<roundcube:endif />
<div class="uibox centerbox errorbox">
$__page_content
diff --git a/skins/larry/templates/importcontacts.html b/skins/larry/templates/importcontacts.html
index 89aea0a2e..d3d0f2b93 100644
--- a/skins/larry/templates/importcontacts.html
+++ b/skins/larry/templates/importcontacts.html
@@ -14,20 +14,19 @@
<roundcube:button command="list" type="link" class="button back disabled" classAct="button back" classSel="button back pressed" label="back" />
</div>
-<div class="offset uibox contentbox">
+<div id="pluginbody" class="offset uibox contentbox">
<h2 class="boxtitle"><roundcube:label name="importcontacts" /></h2>
-<div class="boxcontent readtext">
+<div id="import-box" class="boxcontent">
<roundcube:object name="importstep" />
-
<br/>
-
<p class="formbuttons">
<roundcube:object name="importnav" class="button" />
</p>
-
</div>
+<roundcube:object name="message" id="message" class="statusbar" />
+
</div>
<roundcube:include file="/includes/footer.html" />
diff --git a/skins/larry/templates/mail.html b/skins/larry/templates/mail.html
index 8b205efbe..85cd5203b 100644
--- a/skins/larry/templates/mail.html
+++ b/skins/larry/templates/mail.html
@@ -21,8 +21,6 @@
<!-- toolbar -->
<div id="messagetoolbar" class="toolbar">
<roundcube:button command="checkmail" type="link" class="button checkmail disabled" classAct="button checkmail" classSel="button checkmail pressed" label="refresh" title="checkmail" />
- <roundcube:button command="compose" type="link" class="button compose disabled" classAct="button compose" classSel="button compose pressed" label="compose" title="writenewmessage" />
- <span class="spacer"></span>
<roundcube:include file="/includes/mailtoolbar.html" />
</div>
@@ -32,7 +30,7 @@
<div id="folderlist-header"></div>
<div id="mailboxcontainer" class="uibox listbox">
<div id="folderlist-content" class="scroller withfooter">
-<roundcube:object name="mailboxlist" id="mailboxlist" class="listing" folder_filter="mail" unreadwrap="%s" />
+<roundcube:object name="mailboxlist" id="mailboxlist" class="treelist listing" folder_filter="mail" unreadwrap="%s" />
</div>
<div id="folderlist-footer" class="boxfooter">
<roundcube:button name="mailboxmenulink" id="mailboxmenulink" type="link" title="folderactions" class="listbutton groupactions" onclick="UI.show_popup('mailboxmenu');return false" innerClass="inner" content="&#9881;" />
@@ -54,7 +52,7 @@
</div>
<!-- search box -->
-<div id="quicksearchbar">
+<div id="quicksearchbar" class="searchbox">
<roundcube:object name="searchform" id="quicksearchbox" />
<roundcube:button name="searchmenulink" id="searchmenulink" class="iconbutton searchoptions" onclick="UI.show_popup('searchmenu');return false" title="searchmod" content=" " />
<roundcube:button command="reset-search" id="searchreset" class="iconbutton reset" title="resetsearch" content=" " />
@@ -130,12 +128,13 @@
<div id="searchmenu" class="popupmenu">
<ul class="toolbarmenu">
- <li><label><input type="checkbox" name="s_mods[]" value="subject" id="s_mod_subject" onclick="UI.set_searchmod(this)" /> <roundcube:label name="subject" /></label></li>
- <li><label><input type="checkbox" name="s_mods[]" value="from" id="s_mod_from" onclick="UI.set_searchmod(this)" /> <roundcube:label name="from" /></label></li>
- <li><label><input type="checkbox" name="s_mods[]" value="to" id="s_mod_to" onclick="UI.set_searchmod(this)" /> <roundcube:label name="to" /></label></li>
- <li><label><input type="checkbox" name="s_mods[]" value="cc" id="s_mod_cc" onclick="UI.set_searchmod(this)" /> <roundcube:label name="cc" /></label></li>
- <li><label><input type="checkbox" name="s_mods[]" value="bcc" id="s_mod_bcc" onclick="UI.set_searchmod(this)" /> <roundcube:label name="bcc" /></label></li>
- <li><label><input type="checkbox" name="s_mods[]" value="text" id="s_mod_text" onclick="UI.set_searchmod(this)" /> <roundcube:label name="msgtext" /></label></li>
+ <li><label><input type="checkbox" name="s_mods[]" value="subject" id="s_mod_subject" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="subject" /></span></label></li>
+ <li><label><input type="checkbox" name="s_mods[]" value="from" id="s_mod_from" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="from" /></span></label></li>
+ <li><label><input type="checkbox" name="s_mods[]" value="to" id="s_mod_to" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="to" /></span></label></li>
+ <li><label><input type="checkbox" name="s_mods[]" value="cc" id="s_mod_cc" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="cc" /></span></label></li>
+ <li><label><input type="checkbox" name="s_mods[]" value="bcc" id="s_mod_bcc" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="bcc" /></span></label></li>
+ <li><label><input type="checkbox" name="s_mods[]" value="body" id="s_mod_body" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="body" /></span></label></li>
+ <li><label><input type="checkbox" name="s_mods[]" value="text" id="s_mod_text" onclick="UI.set_searchmod(this)" /> <span><roundcube:label name="msgtext" /></span></label></li>
</ul>
</div>
@@ -179,19 +178,19 @@
<fieldset class="floating">
<legend><roundcube:label name="listcolumns" /></legend>
<ul class="proplist">
- <li><label class="disabled"><input type="checkbox" name="list_col[]" value="threads" checked="checked" disabled="disabled" /> <roundcube:label name="threads" /></label></li>
- <li><label class="disabled"><input type="checkbox" name="list_col[]" value="subject" checked="checked" disabled="disabled" /> <roundcube:label name="subject" /></label></li>
- <li><label><input type="checkbox" name="list_col[]" value="fromto" /> <roundcube:label name="fromto" /></label></li>
- <li><label><input type="checkbox" name="list_col[]" value="from" /> <roundcube:label name="from" /></label></li>
- <li><label><input type="checkbox" name="list_col[]" value="to" /> <roundcube:label name="to" /></label></li>
- <li><label><input type="checkbox" name="list_col[]" value="replyto" /> <roundcube:label name="replyto" /></label></li>
- <li><label><input type="checkbox" name="list_col[]" value="cc" /> <roundcube:label name="cc" /></label></li>
- <li><label><input type="checkbox" name="list_col[]" value="date" /> <roundcube:label name="date" /></label></li>
- <li><label><input type="checkbox" name="list_col[]" value="size" /> <roundcube:label name="size" /></label></li>
- <li><label><input type="checkbox" name="list_col[]" value="status" /> <roundcube:label name="readstatus" /></label></li>
- <li><label><input type="checkbox" name="list_col[]" value="attachment" /> <roundcube:label name="attachment" /></label></li>
- <li><label><input type="checkbox" name="list_col[]" value="flag" /> <roundcube:label name="flag" /></label></li>
- <li><label><input type="checkbox" name="list_col[]" value="priority" /> <roundcube:label name="priority" /></label></li>
+ <li><label class="disabled"><input type="checkbox" name="list_col[]" value="threads" checked="checked" disabled="disabled" /> <span><roundcube:label name="threads" /></span></label></li>
+ <li><label class="disabled"><input type="checkbox" name="list_col[]" value="subject" checked="checked" disabled="disabled" /> <span><roundcube:label name="subject" /></span></label></li>
+ <li><label><input type="checkbox" name="list_col[]" value="fromto" /> <span><roundcube:label name="fromto" /></span></label></li>
+ <li><label><input type="checkbox" name="list_col[]" value="from" /> <span><roundcube:label name="from" /></span></label></li>
+ <li><label><input type="checkbox" name="list_col[]" value="to" /> <span><roundcube:label name="to" /></span></label></li>
+ <li><label><input type="checkbox" name="list_col[]" value="replyto" /> <span><roundcube:label name="replyto" /></span></label></li>
+ <li><label><input type="checkbox" name="list_col[]" value="cc" /> <span><roundcube:label name="cc" /></span></label></li>
+ <li><label><input type="checkbox" name="list_col[]" value="date" /> <span><roundcube:label name="date" /></span></label></li>
+ <li><label><input type="checkbox" name="list_col[]" value="size" /> <span><roundcube:label name="size" /></span></label></li>
+ <li><label><input type="checkbox" name="list_col[]" value="status" /> <span><roundcube:label name="readstatus" /></span></label></li>
+ <li><label><input type="checkbox" name="list_col[]" value="attachment" /> <span><roundcube:label name="attachment" /></span></label></li>
+ <li><label><input type="checkbox" name="list_col[]" value="flag" /> <span><roundcube:label name="flag" /></span></label></li>
+ <li><label><input type="checkbox" name="list_col[]" value="priority" /> <span><roundcube:label name="priority" /></span></label></li>
</ul>
</fieldset>
<roundcube:endif />
@@ -199,15 +198,15 @@
<fieldset class="floating">
<legend><roundcube:label name="listsorting" /></legend>
<ul class="proplist">
- <li><label><input type="radio" name="sort_col" value="" /> <roundcube:label name="nonesort" /></label></li>
- <li><label><input type="radio" name="sort_col" value="arrival" /> <roundcube:label name="arrival" /></label></li>
- <li><label><input type="radio" name="sort_col" value="date" /> <roundcube:label name="sentdate" /></label></li>
- <li><label><input type="radio" name="sort_col" value="subject" /> <roundcube:label name="subject" /></label></li>
- <li><label><input type="radio" name="sort_col" value="fromto" /> <roundcube:label name="fromto" /></label></li>
- <li><label><input type="radio" name="sort_col" value="from" /> <roundcube:label name="from" /></label></li>
- <li><label><input type="radio" name="sort_col" value="to" /> <roundcube:label name="to" /></label></li>
- <li><label><input type="radio" name="sort_col" value="cc" /> <roundcube:label name="cc" /></label></li>
- <li><label><input type="radio" name="sort_col" value="size" /> <roundcube:label name="size" /></label></li>
+ <li><label><input type="radio" name="sort_col" value="" /> <span><roundcube:label name="nonesort" /></span></label></li>
+ <li><label><input type="radio" name="sort_col" value="arrival" /> <span><roundcube:label name="arrival" /></span></label></li>
+ <li><label><input type="radio" name="sort_col" value="date" /> <span><roundcube:label name="sentdate" /></span></label></li>
+ <li><label><input type="radio" name="sort_col" value="subject" /> <span><roundcube:label name="subject" /></span></label></li>
+ <li><label><input type="radio" name="sort_col" value="fromto" /> <span><roundcube:label name="fromto" /></span></label></li>
+ <li><label><input type="radio" name="sort_col" value="from" /> <span><roundcube:label name="from" /></span></label></li>
+ <li><label><input type="radio" name="sort_col" value="to" /> <span><roundcube:label name="to" /></span></label></li>
+ <li><label><input type="radio" name="sort_col" value="cc" /> <span><roundcube:label name="cc" /></span></label></li>
+ <li><label><input type="radio" name="sort_col" value="size" /> <span><roundcube:label name="size" /></span></label></li>
</ul>
</fieldset>
<roundcube:endif />
@@ -215,8 +214,8 @@
<fieldset class="floating">
<legend><roundcube:label name="listorder" /></legend>
<ul class="proplist">
- <li><label><input type="radio" name="sort_ord" value="ASC" /> <roundcube:label name="asc" /></label></li>
- <li><label><input type="radio" name="sort_ord" value="DESC" /> <roundcube:label name="desc" /></label></li>
+ <li><label><input type="radio" name="sort_ord" value="ASC" /> <span><roundcube:label name="asc" /></span></label></li>
+ <li><label><input type="radio" name="sort_ord" value="DESC" /> <span><roundcube:label name="desc" /></span></label></li>
</ul>
</fieldset>
<roundcube:endif />
diff --git a/skins/larry/templates/message.html b/skins/larry/templates/message.html
index f7e188f5f..0e19afa40 100644
--- a/skins/larry/templates/message.html
+++ b/skins/larry/templates/message.html
@@ -14,7 +14,6 @@
<div id="messagetoolbar" class="toolbar fullwidth">
<roundcube:if condition="!env:extwin" />
<roundcube:button command="list" type="link" class="button back disabled" classAct="button back" classSel="button back pressed" label="back" />
- <span class="spacer"></span>
<roundcube:endif />
<roundcube:include file="/includes/mailtoolbar.html" />
<div class="toolbarselect">
@@ -29,7 +28,7 @@
<!-- folders list -->
<div id="mailboxcontainer" class="uibox listbox">
<div class="scroller">
-<roundcube:object name="mailboxlist" id="mailboxlist" class="listing" folder_filter="mail" unreadwrap="%s" />
+<roundcube:object name="mailboxlist" id="mailboxlist" class="treelist listing" folder_filter="mail" unreadwrap="%s" />
</div>
</div>
@@ -55,6 +54,21 @@
<roundcube:button command="nextmessage" type="link" class="button nextpage disabled" classAct="button nextpage" classSel="button nextpage pressed" innerClass="inner" title="nextmessage" content="&amp;gt;" />
</div>
+<roundcube:if condition="env:optional_format=='text'" />
+<div class="pagenav" id="formatcontrols">
+ <span class="buttongroup">
+ <roundcube:button command="change-format" prop="html" type="link" class="button first changeformat html selected" innerClass="inner" title="changeformathtml" /><roundcube:button command="change-format" prop="text" type="link" class="button last changeformat text" classSel="button last changeformat text pressed" innerClass="inner" title="changeformattext" />
+ </span>
+</div>
+<roundcube:elseif condition="env:optional_format=='html'" />
+<div class="pagenav" id="formatcontrols">
+ <span class="buttongroup">
+ <roundcube:button command="change-format" prop="html" type="link" class="button first changeformat html" classSel="button first changeformat html pressed" innerClass="inner" title="changeformathtml" /><roundcube:button command="change-format" prop="text" type="link" class="button last changeformat text selected" innerClass="inner" title="changeformattext" />
+ </span>
+</div>
+<roundcube:endif />
+
+
<div id="contactphoto"><roundcube:object name="contactphoto" /></div>
</div>
@@ -64,7 +78,7 @@
</div>
<div class="leftcol">
<roundcube:object name="messageObjects" id="message-objects" />
-<roundcube:object name="messageBody" id="messagebody" />
+<roundcube:object name="messageBody" id="messagebody" headertableclass="message-partheaders headers-table" />
</div>
</div>
@@ -74,6 +88,14 @@
</div><!-- end mainscreen -->
+<div id="attachmentmenu" class="popupmenu dropdown">
+ <ul class="toolbarmenu">
+ <li><roundcube:button command="open-attachment" id="attachmenuopen" type="link" label="open" class="icon" classAct="icon active" innerclass="icon extwin" /></li>
+ <li><roundcube:button command="download-attachment" id="attachmenudownload" type="link" label="download" class="icon" classAct="icon active" innerclass="icon download" /></li>
+ <roundcube:container name="attachmentmenu" id="attachmentmenu" />
+ </ul>
+</div>
+
<roundcube:include file="/includes/footer.html" />
</body>
diff --git a/skins/larry/templates/messageerror.html b/skins/larry/templates/messageerror.html
index 3c3c9acdb..a735d47f2 100644
--- a/skins/larry/templates/messageerror.html
+++ b/skins/larry/templates/messageerror.html
@@ -28,7 +28,7 @@
<!-- folders list -->
<div id="mailboxcontainer" class="uibox listbox">
<div class="scroller">
- <roundcube:object name="mailboxlist" id="mailboxlist" class="listing" folder_filter="mail" unreadwrap="%s" />
+ <roundcube:object name="mailboxlist" id="mailboxlist" class="treelist listing" folder_filter="mail" unreadwrap="%s" />
</div>
</div>
diff --git a/skins/larry/templates/messagepart.html b/skins/larry/templates/messagepart.html
index e029973a8..dbb4940de 100644
--- a/skins/larry/templates/messagepart.html
+++ b/skins/larry/templates/messagepart.html
@@ -27,7 +27,7 @@
</div>
<div id="messagepartcontainer" class="uibox">
-<roundcube:object name="messagePartFrame" id="messagepartframe" style="width:100%; height:100%" />
+<roundcube:object name="messagePartFrame" id="messagepartframe" frameborder="0" />
</div>
</div>
diff --git a/skins/larry/templates/messagepreview.html b/skins/larry/templates/messagepreview.html
index 9eb4d1e00..b2af03485 100644
--- a/skins/larry/templates/messagepreview.html
+++ b/skins/larry/templates/messagepreview.html
@@ -30,6 +30,17 @@
<!-- record navigation -->
<div id="countcontrols" class="pagenav">
+<roundcube:if condition="env:optional_format=='text'" />
+ <span class="buttongroup">
+ <roundcube:button command="change-format" prop="html" type="link" class="button first changeformat html selected" innerClass="inner" title="changeformathtml" content="HTML" /><roundcube:button command="change-format" prop="text" type="link" class="button last changeformat text" classSel="button changeformat text pressed" innerClass="inner" title="changeformattext" content="Text" />
+ </span>
+ &nbsp;
+<roundcube:elseif condition="env:optional_format=='html'" />
+ <span class="buttongroup">
+ <roundcube:button command="change-format" prop="html" type="link" class="button first changeformat html" classSel="button changeformat html pressed" innerClass="inner" title="changeformathtml" content="HTML" /><roundcube:button command="change-format" prop="text" type="link" class="button last changeformat text selected" innerClass="inner" title="changeformattext" content="Text" />
+ </span>
+ &nbsp;
+<roundcube:endif />
<roundcube:if condition="env:mailbox != config:drafts_mbox">
<roundcube:button command="reply" type="link" class="button reply" classSel="button reply pressed" innerClass="inner" title="replytomessage" content="&lt;-" />
<roundcube:button command="reply-all" type="link" class="button replyall" classSel="button replyall pressed" innerClass="inner" title="replytoallmessage" content="&lt;&lt;-" />
@@ -47,10 +58,18 @@
</div>
<div class="leftcol">
<roundcube:object name="messageObjects" id="message-objects" />
-<roundcube:object name="messageBody" id="messagebody" />
+<roundcube:object name="messageBody" id="messagebody" headertableclass="message-partheaders headers-table" />
</div>
</div>
+<div id="attachmentmenu" class="popupmenu dropdown">
+ <ul class="toolbarmenu">
+ <li><roundcube:button command="open-attachment" id="attachmenuopen" type="link" label="open" class="icon" classAct="icon active" innerclass="icon extwin" /></li>
+ <li><roundcube:button command="download-attachment" id="attachmenudownload" type="link" label="download" class="icon" classAct="icon active" innerclass="icon download" /></li>
+ <roundcube:container name="attachmentmenu" id="attachmentmenu" />
+ </ul>
+</div>
+
<roundcube:include file="/includes/footer.html" />
</body>
diff --git a/skins/larry/ui.js b/skins/larry/ui.js
index da4f2300e..75d38d9aa 100644
--- a/skins/larry/ui.js
+++ b/skins/larry/ui.js
@@ -1,7 +1,7 @@
/**
* Roundcube functions for default skin interface
*
- * Copyright (c) 2011, The Roundcube Dev Team
+ * Copyright (c) 2013, The Roundcube Dev Team
*
* The contents are subject to the Creative Commons Attribution-ShareAlike
* License. It is allowed to copy, distribute, transmit and to adapt the work
@@ -17,6 +17,7 @@ function rcube_mail_ui()
var popupconfig = {
forwardmenu: { editable:1 },
searchmenu: { editable:1, callback:searchmenu },
+ attachmentmenu: { },
listoptions: { editable:1 },
dragmessagemenu: { sticky:1 },
groupmenu: { above:1 },
@@ -37,12 +38,22 @@ function rcube_mail_ui()
this.init_tabs = init_tabs;
this.show_about = show_about;
this.show_popup = show_popup;
+ this.add_popup = add_popup;
this.set_searchmod = set_searchmod;
this.show_uploadform = show_uploadform;
this.show_header_row = show_header_row;
this.hide_header_row = hide_header_row;
+ // set minimal mode on small screens (don't wait for document.ready)
+ if (window.$ && document.body) {
+ var minmode = rcmail.get_cookie('minimalmode');
+ if (parseInt(minmode) || (minmode === null && $(window).height() < 850)) {
+ $(document.body).addClass('minimal');
+ }
+ }
+
+
/**
*
*/
@@ -59,10 +70,21 @@ function rcube_mail_ui()
{
rcmail.addEventListener('message', message_displayed);
+ /*** prepare minmode functions ***/
+ $('#taskbar a').each(function(i,elem){
+ $(elem).append('<span class="tooltip">' + $('.button-inner', this).html() + '</span>')
+ });
+
+ $('#taskbar .minmodetoggle').click(function(e){
+ var ismin = $(document.body).toggleClass('minimal').hasClass('minimal');
+ rcmail.set_cookie('minimalmode', ismin?1:0);
+ $(window).resize();
+ });
+
/*** mail task ***/
if (rcmail.env.task == 'mail') {
- rcmail.addEventListener('menu-open', show_listoptions);
- rcmail.addEventListener('menu-save', save_listoptions);
+ rcmail.addEventListener('menu-open', menu_open);
+ rcmail.addEventListener('menu-save', menu_save);
rcmail.addEventListener('responseafterlist', function(e){ switch_view_mode(rcmail.env.threading ? 'thread' : 'list') });
var dragmenu = $('#dragmessagemenu');
@@ -75,6 +97,11 @@ function rcube_mail_ui()
rcmail.addEventListener('aftershow-headers', function() { layout_messageview(); });
rcmail.addEventListener('afterhide-headers', function() { layout_messageview(); });
$('#previewheaderstoggle').click(function(e){ toggle_preview_headers(this); return false });
+
+ // add menu link for each attachment
+ $('#attachment-list > li').each(function() {
+ $(this).append($('<a class="drop">').click(function() { attachmentmenu(this); }));
+ });
}
else if (rcmail.env.action == 'compose') {
rcmail.addEventListener('aftertoggle-editor', function(){ window.setTimeout(function(){ layout_composeview() }, 200); });
@@ -97,7 +124,8 @@ function rcube_mail_ui()
}).css('cursor', 'pointer');
// toggle compose options if opened in new window and they were visible before
- if (window.opener && opener.rcmail && opener.rcmail.env.action == 'compose' && $('#composeoptionstoggle', opener.document).hasClass('remove'))
+ var opener_rc = rcmail.opener();
+ if (opener_rc && opener_rc.env.action == 'compose' && $('#composeoptionstoggle', opener.document).hasClass('remove'))
$('#composeoptionstoggle').click();
new rcube_splitter({ id:'composesplitterv', p1:'#composeview-left', p2:'#composeview-right',
@@ -260,28 +288,36 @@ function rcube_mail_ui()
/**
* Update UI on window resize
*/
- function resize()
+ function resize(e)
{
- if (rcmail.env.task == 'mail') {
- if (rcmail.env.action == 'show' || rcmail.env.action == 'preview')
- layout_messageview();
- else if (rcmail.env.action == 'compose')
- layout_composeview();
- }
+ // resize in intervals to prevent lags and double onresize calls in Chrome (#1489005)
+ var interval = e ? 10 : 0;
- // make iframe footer buttons float if scrolling is active
- $('body.iframe .footerleft').each(function(){
- var footer = $(this),
- body = $(document.body),
- floating = footer.hasClass('floating'),
- overflow = body.outerHeight(true) > $(window).height();
-
- if (overflow != floating) {
- var action = overflow ? 'addClass' : 'removeClass';
- footer[action]('floating');
- body[action]('floatingbuttons');
+ if (rcmail.resize_timeout)
+ window.clearTimeout(rcmail.resize_timeout);
+
+ rcmail.resize_timeout = window.setTimeout(function() {
+ if (rcmail.env.task == 'mail') {
+ if (rcmail.env.action == 'show' || rcmail.env.action == 'preview')
+ layout_messageview();
+ else if (rcmail.env.action == 'compose')
+ layout_composeview();
}
- });
+
+ // make iframe footer buttons float if scrolling is active
+ $('body.iframe .footerleft').each(function(){
+ var footer = $(this),
+ body = $(document.body),
+ floating = footer.hasClass('floating'),
+ overflow = body.outerHeight(true) > $(window).height();
+
+ if (overflow != floating) {
+ var action = overflow ? 'addClass' : 'removeClass';
+ footer[action]('floating');
+ body[action]('floatingbuttons');
+ }
+ });
+ }, interval);
}
/**
@@ -395,13 +431,25 @@ function rcube_mail_ui()
/**
+ * Register a popup menu
+ */
+ function add_popup(popup, config)
+ {
+ var obj = popups[popup] = $('#'+popup);
+ obj.appendTo(document.body); // move it to top for proper absolute positioning
+
+ if (obj.length)
+ popupconfig[popup] = $.extend(popupconfig[popup] || {}, config || {});
+ }
+
+ /**
* Trigger for popup menus
*/
function show_popup(popup, show, config)
{
// auto-register menu object
if (config || !popupconfig[popup])
- popupconfig[popup] = $.extend(popupconfig[popup] || {}, config);
+ add_popup(popup, config);
var visible = show_popupmenu(popup, show),
config = popupconfig[popup];
@@ -416,7 +464,7 @@ function rcube_mail_ui()
{
var obj = popups[popup],
config = popupconfig[popup],
- ref = $('#'+popup+'link'),
+ ref = $(config.link ? config.link : '#'+popup+'link'),
above = config.above;
if (!obj) {
@@ -432,7 +480,7 @@ function rcube_mail_ui()
else if (config.toggle && show && obj.is(':visible'))
show = false;
- if (show && ref) {
+ if (show && ref.length) {
var parent = ref.parent(),
win = $(window),
pos;
@@ -555,6 +603,19 @@ function rcube_mail_ui()
/**** popup callbacks ****/
+ function menu_open(p)
+ {
+ if (p && p.props && p.props.menu == 'attachmentmenu')
+ show_popupmenu('attachmentmenu');
+ else
+ show_listoptions();
+ }
+
+ function menu_save(prop)
+ {
+ save_listoptions();
+ }
+
function searchmenu(show)
{
if (show && rcmail.env.search_mods) {
@@ -585,6 +646,21 @@ function rcube_mail_ui()
}
}
+ function attachmentmenu(elem)
+ {
+ var id = elem.parentNode.id.replace(/^attach/, '');
+
+ $('#attachmenuopen').unbind('click').attr('onclick', '').click(function(e) {
+ return rcmail.command('open-attachment', id, this);
+ });
+
+ $('#attachmenudownload').unbind('click').attr('onclick', '').click(function() {
+ rcmail.command('download-attachment', id, this);
+ });
+
+ popupconfig.attachmentmenu.link = elem;
+ rcmail.command('menu-open', {menu: 'attachmentmenu', id: id});
+ }
function spellmenu(show)
{
@@ -920,11 +996,11 @@ function rcube_scroller(list, top, bottom)
this.delay = 500;
this.top
- .mouseenter(function() { ref.ts = window.setTimeout(function() { ref.scroll('down'); }, ref.delay); })
+ .mouseenter(function() { if (rcmail.drag_active) ref.ts = window.setTimeout(function() { ref.scroll('down'); }, ref.delay); })
.mouseout(function() { if (ref.ts) window.clearTimeout(ref.ts); });
this.bottom
- .mouseenter(function() { ref.ts = window.setTimeout(function() { ref.scroll('up'); }, ref.delay); })
+ .mouseenter(function() { if (rcmail.drag_active) ref.ts = window.setTimeout(function() { ref.scroll('up'); }, ref.delay); })
.mouseout(function() { if (ref.ts) window.clearTimeout(ref.ts); });
this.scroll = function(dir)