From 6782fe1fd7d3230350153ba307dd5d49b9670604 Mon Sep 17 00:00:00 2001
From: Thomas Bruederli <thomas@roundcube.net>
Date: Mon, 28 Jan 2013 14:25:05 -0500
Subject: [PATCH] Merge branch 'release-0.9' of github.com:roundcube/roundcubemail into release-0.9

---
 CHANGELOG                                   |    1 
 program/include/rcmail_output_html.php      |    2 
 skins/classic/images/icons/groupactions.png |    0 
 skins/classic/splitter.js                   |    9 
 skins/classic/images/icons/groupactions.gif |    0 
 skins/classic/templates/compose.html        |   84 +++++++++----
 skins/classic/ie6hacks.css                  |   16 +
 skins/classic/googiespell.css               |    1 
 skins/classic/mail.css                      |  154 +++++++++++++++++++++++--
 skins/classic/templates/mail.html           |    6 
 skins/classic/functions.js                  |   20 ++-
 skins/classic/addressbook.css               |    2 
 skins/classic/iehacks.css                   |   10 -
 13 files changed, 234 insertions(+), 71 deletions(-)

diff --git a/CHANGELOG b/CHANGELOG
index e2c61e4..16d6285 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 CHANGELOG Roundcube Webmail
 ===========================
 
+- Add addressbook widget on compose page in classic skin
 - Add search box to compose address book widget (#1488381)
 - Fix login in case when default_host is an array with one element (#1488928)
 - Use LDAP fallback hosts on connect + bind instead of ldap_connect() only.
diff --git a/program/include/rcmail_output_html.php b/program/include/rcmail_output_html.php
index ef7c498..88af550 100644
--- a/program/include/rcmail_output_html.php
+++ b/program/include/rcmail_output_html.php
@@ -215,7 +215,7 @@
      * @param string Additional path to search in
      * @return mixed Relative path to the requested file or False if not found
      */
-    public function get_skin_file($file, &$skin_path, $add_path = null)
+    public function get_skin_file($file, &$skin_path = null, $add_path = null)
     {
         $skin_paths = $this->skin_paths;
         if ($add_path)
diff --git a/skins/classic/addressbook.css b/skins/classic/addressbook.css
index a398325..39d5e5a 100644
--- a/skins/classic/addressbook.css
+++ b/skins/classic/addressbook.css
@@ -21,7 +21,7 @@
   width: 32px;
   height: 32px;
   padding: 0;
-  margin-right: 10px;
+  margin: 0 5px;
   overflow: hidden;
   background: url(images/abook_toolbar.png) 0 0 no-repeat transparent;
   opacity: 0.99; /* this is needed to make buttons appear correctly in Chrome */
diff --git a/skins/classic/functions.js b/skins/classic/functions.js
index 1742150..ee68ee7 100644
--- a/skins/classic/functions.js
+++ b/skins/classic/functions.js
@@ -355,7 +355,7 @@
 
     for (i in rcmail.env.spell_langs) {
       li = $('<li>');
-      link = $('<a href="#">').text(rcmail.env.spell_langs[i])
+      link = $('<a href="#"></a>').text(rcmail.env.spell_langs[i])
         .addClass('active').data('lang', i)
         .click(function() {
           rcmail.spellcheck_lang_set($(this).data('lang'));
@@ -491,17 +491,23 @@
 
   div.style.top = (parseInt(headers_div.offsetHeight, 10) + 3) + 'px';
   $(window).resize();
+
+  // contacts search submit
+  $('#quicksearchbox').keydown(function(e) {
+    if (rcube_event.get_keycode(e) == 13)
+      rcmail.command('search');
+  });
 },
 
 resize_compose_body: function()
 {
-  var div = $('#compose-div .boxlistcontent'), w = div.width(), h = div.height();
-  w -= 8;  // 2 x 3px padding + 2 x 1px border
-  h -= 4;
+  var div = $('#compose-div .boxlistcontent'),
+    w = div.width() - 2, h = div.height(),
+    x = bw.ie || bw.opera ? 4 : 0;
 
-  $('#compose-body_tbl').width((w+6)+'px').height('');
-  $('#compose-body_ifr').width((w+6)+'px').height((h-54)+'px');
-  $('#compose-body').width(w+'px').height(h+'px');
+  $('#compose-body_tbl').width((w+3)+'px').height('');
+  $('#compose-body_ifr').width((w+3)+'px').height((h-54)+'px');
+  $('#compose-body').width((w-x)+'px').height(h+'px');
   $('#googie_edit_layer').height(h+'px');
 },
 
diff --git a/skins/classic/googiespell.css b/skins/classic/googiespell.css
index 8adadc2..b4fab5b 100644
--- a/skins/classic/googiespell.css
+++ b/skins/classic/googiespell.css
@@ -12,7 +12,6 @@
   padding: 0 4px;
   font-size: 9pt;
   font-family: monospace;
-  border: 1px solid #999;
 }
 
 .googie_edit_layer span {
diff --git a/skins/classic/ie6hacks.css b/skins/classic/ie6hacks.css
index ac95386..a431ee4 100644
--- a/skins/classic/ie6hacks.css
+++ b/skins/classic/ie6hacks.css
@@ -3,6 +3,7 @@
 #taskbar
 {
   background: url(images/taskbar.gif) top right no-repeat;
+  width: expression((parseInt(document.documentElement.clientWidth)-250)+'px');
 }
 
 img
@@ -36,11 +37,6 @@
 #mailboxlist li
 {
   background-image: url(images/icons/folders.gif);
-}
-
-#attachment-list
-{
-  height: expression(Math.min(16, parseInt(document.documentElement.clientHeight))+'px');
 }
 
 #messagetoolbar a
@@ -124,6 +120,11 @@
   height: expression((parseInt(this.parentNode.offsetHeight)-23-parseInt(this.style.top?this.style.top:21))+'px');
 }
 
+#compose-body-div
+{
+  height: expression(parseInt(this.parentNode.offsetHeight)+'px');
+}
+
 #folder-manager
 {
   height: expression((parseInt(document.documentElement.clientHeight)-105)+'px');
@@ -176,3 +177,8 @@
 {
   zoom: 1;
 }
+
+#abookactions a
+{
+  background-image: url("images/icons/groupactions.gif");
+}
diff --git a/skins/classic/iehacks.css b/skins/classic/iehacks.css
index c8b9b37..1855580 100644
--- a/skins/classic/iehacks.css
+++ b/skins/classic/iehacks.css
@@ -116,6 +116,7 @@
 #mailrightcontainer,
 #compose-container,
 #compose-attachments,
+#compose-contacts,
 #mailcontframe,
 #mailboxlist-container,
 #mailrightcontent,
@@ -201,11 +202,6 @@
   width: expression((parseInt(document.documentElement.clientWidth)-245)+'px');
 }
 
-#contacts-table
-{
-  width: expression(document.getElementById('addresslist').clientWidth);
-}
-
 #contacts-box,
 #prefs-box,
 #folder-box
@@ -288,8 +284,8 @@
 
 .contactfieldgroup legend
 {
-	padding: 0 0 0.5em 0;
-	margin-left: -4px;
+  padding: 0 0 0.5em 0;
+  margin-left: -4px;
 }
 
 /* fix "jumping" login form in IE7 */
diff --git a/skins/classic/images/icons/groupactions.gif b/skins/classic/images/icons/groupactions.gif
index a399d10..eba6a6c 100644
--- a/skins/classic/images/icons/groupactions.gif
+++ b/skins/classic/images/icons/groupactions.gif
Binary files differ
diff --git a/skins/classic/images/icons/groupactions.png b/skins/classic/images/icons/groupactions.png
index 43c34a4..f29a36a 100644
--- a/skins/classic/images/icons/groupactions.png
+++ b/skins/classic/images/icons/groupactions.png
Binary files differ
diff --git a/skins/classic/mail.css b/skins/classic/mail.css
index 98325d9..54673fe 100644
--- a/skins/classic/mail.css
+++ b/skins/classic/mail.css
@@ -255,7 +255,7 @@
   top: 0;
   left: 0;
   bottom: 0;
-  width: 195px;
+  width: 160px;
 }
 
 #mailrightcontainer
@@ -1392,7 +1392,7 @@
 {
   position: absolute;
   top: 0;
-  left: 185px;
+  left: 205px;
   right: 0;
   bottom: 0;
   margin: 0;
@@ -1402,16 +1402,20 @@
 {
   position: absolute;
   top: 85px;
+  right: 0;
+  left: 0;
   bottom: 0;
   margin: 0;
-  width: 100%;
 }
 
-#compose-div .boxfooter
+#compose-body-div
 {
-  height: 22px;
-  background: none;
-  border-top: 0;
+  position: absolute;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 175px;
+  border: 1px solid #999;
 }
 
 #compose-div .boxlistcontent
@@ -1429,15 +1433,12 @@
   margin: 0;
   font-size: 9pt;
   font-family: monospace;
-  border: 1px solid #999;
   resize: none;
+  border: none;
+  outline: none;
 }
 
-#compose-body_tbl
-{
-  border: 1px solid #999;
-}
-
+#compose-body_tbl,
 #compose-body_tbl td
 {
   border: none;
@@ -1504,9 +1505,10 @@
 #compose-editorfooter
 {
   position: absolute;
-  right: 0;
+  right: 5px;
   bottom: 0;
   text-align: right;
+  line-height: 20px;
 }
 
 #compose-editorfooter label
@@ -1519,9 +1521,20 @@
 #compose-buttons
 {
   position: absolute;
+  left: 5px;
+  bottom: 1px;
+  width: auto;
+}
+
+#compose-contacts
+{
+  position: absolute;
+  top: 0;
   left: 0;
   bottom: 0;
-  width: auto;
+  width: 195px;
+  border: 1px solid #999;
+  background-color: #F9F9F9;
 }
 
 #compose-attachments
@@ -1529,8 +1542,8 @@
   position: absolute;
   top: 0;
   left: 0;
+  right: 0;
   bottom: 0;
-  width: 175px;
   border: 1px solid #999;
   background-color: #F9F9F9;
 }
@@ -1622,3 +1635,112 @@
   right: 6px;
   z-index: 101;
 }
+
+/* addressbook in compose - copy from addressbook.css */
+
+#directorylist
+{
+  list-style: none;
+  margin: 0;
+  padding: 0;
+  background-color: #FFFFFF;
+}
+
+#directorylist li
+{
+  display: block;
+  font-size: 11px;
+  background: url(images/icons/folders.png) 5px -108px no-repeat;
+  border-bottom: 1px solid #EBEBEB;
+  white-space: nowrap;
+}
+
+#directorylist li a
+{
+  cursor: default;
+  display: block;
+  padding-left: 25px;
+  padding-top: 2px;
+  padding-bottom: 2px;
+  text-decoration: none;
+  white-space: nowrap;
+  height: 15px;
+}
+
+#directorylist li.selected
+{
+  background-color: #929292;
+  border-bottom: 1px solid #898989;
+}
+
+#directorylist li.selected a
+{
+  color: #FFF;
+  font-weight: bold;
+}
+
+#contacts-table
+{
+  width: 100%;
+  table-layout: fixed;
+}
+
+#contacts-table tbody td
+{
+  cursor: default;
+  text-overflow: ellipsis;
+  -o-text-overflow: ellipsis;
+}
+
+#abookcountbar
+{
+  margin-top: 4px;
+  margin-left: 4px;
+  position: absolute;
+  margin-right: 5px;
+  right: 0;
+}
+
+#abookactions
+{
+  position: absolute;
+  text-underline: none;
+}
+
+#abookactions a
+{
+  font-weight: bold;
+  line-height: 22px;
+  height: 22px;
+  width: auto;
+  margin: 0;
+  padding-left: 5px;
+  padding-right: 5px;
+  text-shadow: 1px 1px white;
+  background: url("images/icons/groupactions.png") no-repeat right -70px;
+}
+
+#abookactions a.disabled
+{
+  color: #999;
+}
+
+#compose-contacts #quicksearchbar
+{
+  top: 2px;
+  left: 7px;
+}
+
+#compose-contacts #directorylist
+{
+  width: 100%;
+  top: 23px;
+  position: absolute;
+  border-top: 1px solid #eee;
+}
+
+#compose-contacts #contacts-table
+{
+  top: 45px;
+  position: absolute;
+}
diff --git a/skins/classic/splitter.js b/skins/classic/splitter.js
index 3f1c973..72ada57 100644
--- a/skins/classic/splitter.js
+++ b/skins/classic/splitter.js
@@ -28,13 +28,13 @@
 
     if (this.horizontal) {
       var top = this.p1pos.top + this.p1.offsetHeight;
-      this.layer = new rcube_layer(this.id, {x: 0, y: top, height: 10, 
-    	    width: '100%', vis: 1, parent: this.p1.parentNode});
+      this.layer = new rcube_layer(this.id, {x: 0, y: top, height: 10,
+        width: '100%', vis: 1, parent: this.p1.parentNode});
     }
     else {
       var left = this.p1pos.left + this.p1.offsetWidth;
-      this.layer = new rcube_layer(this.id, {x: left, y: 0, width: 10, 
-    	    height: '100%', vis: 1,  parent: this.p1.parentNode});
+      this.layer = new rcube_layer(this.id, {x: left, y: 0, width: 10,
+        height: '100%', vis: 1,  parent: this.p1.parentNode});
     }
 
     this.elm = this.layer.elm;
@@ -147,6 +147,7 @@
 
     this.p1pos = this.relative ? $(this.p1).position() : $(this.p1).offset();
     this.p2pos = this.relative ? $(this.p2).position() : $(this.p2).offset();
+
     return false;
   };
 
diff --git a/skins/classic/templates/compose.html b/skins/classic/templates/compose.html
index f764d6b..6ca5e2c 100644
--- a/skins/classic/templates/compose.html
+++ b/skins/classic/templates/compose.html
@@ -9,9 +9,9 @@
 <script type="text/javascript" src="/functions.js"></script>
 <script type="text/javascript" src="/splitter.js"></script>
 <style type="text/css">
-#compose-attachments { width: <roundcube:exp expression="!empty(cookie:composesplitterv) ? cookie:composesplitterv-5 : 175" />px; }
-#compose-container { left: <roundcube:exp expression="!empty(cookie:composesplitterv) ? cookie:composesplitterv+5 : 185" />px;
-<roundcube:exp expression="browser:ie ? ('width: expression((parseInt(this.parentNode.offsetWidth)-'.(!empty(cookie:composesplitterv) ? cookie:composesplitterv+5 : 180).')+\\'px\\');') : ''" />
+#compose-contacts { width: <roundcube:exp expression="!empty(cookie:composesplitterv1) ? cookie:composesplitterv1-5 : 195" />px; }
+#compose-container { left: <roundcube:exp expression="!empty(cookie:composesplitterv1) ? cookie:composesplitterv1+5 : 205" />px;
+<roundcube:exp expression="browser:ie ? ('width: expression((parseInt(this.parentNode.offsetWidth)-'.(!empty(cookie:composesplitterv1) ? cookie:composesplitterv1+5 : 200).')+\\'px\\');') : ''" />
 }
 </style>
 </head>
@@ -23,8 +23,6 @@
 <roundcube:include file="/includes/taskbar.html" />
 <roundcube:include file="/includes/header.html" />
 <roundcube:endif />
-
-<form name="form" action="./" method="post">
 
 <div id="messagetoolbar">
 <roundcube:if condition="env:extwin" />
@@ -46,22 +44,40 @@
     <roundcube:button name="messageoptions" id="composemenulink" type="link" class="button messagemenu" title="messageoptions" onclick="rcmail_ui.show_popup('composemenu', true);return false" content=" " />
 </div>
 
+<form name="form" action="./" method="post">
+
 <div id="mainscreen">
 
-<div id="compose-attachments">
-<div class="boxtitle"><roundcube:label name="attachments" /></div>
+<div id="compose-contacts">
+<div class="boxtitle"><roundcube:label name="contacts" /></div>
 <div class="boxlistcontent">
-    <roundcube:object name="composeAttachmentList" id="attachmentslist" loadingIcon="/images/display/loading_blue.gif" />
+    <div id="quicksearchbar">
+        <img id="searchmenulink" src="/images/icons/glass.png" width="16" height="16" />
+        <roundcube:object name="searchform" id="quicksearchbox" form="true" tabindex="13" />
+        <roundcube:button command="reset-search" id="searchreset" image="/images/icons/reset.gif" title="resetsearch" width="13" height="13" />
+    </div>
+    <roundcube:object name="addressbooks" id="directorylist" />
+    <roundcube:object name="addresslist" id="contacts-table" class="records-table" cellspacing="0" noheader="true" />
 </div>
 <div class="boxfooter">
-  <roundcube:button name="uploadmenulink" id="uploadmenulink" type="link" title="addattachment" class="button addgroup" onclick="rcmail_ui.show_popup('uploadmenu', true);return false" content=" " />
+    <div id="abookactions" class="pagenav">
+        <roundcube:button command="add-recipient" prop="to" type="link" title="to" class="button disabled" classAct="button" content="To &amp;raquo;" />
+        <roundcube:button command="add-recipient" prop="cc" type="link" title="cc" class="button disabled" classAct="button" content="Cc &amp;raquo;" />
+        <roundcube:button command="add-recipient" prop="bcc" type="link" title="bcc" class="button disabled" classAct="button" content="Bcc &amp;raquo;" />
+    </div>
+    <div id="abookcountbar" class="pagenav">
+        <roundcube:button command="firstpage" type="link" class="buttonPas firstpage" classAct="button firstpage" classSel="button firstpageSel" title="firstpage" content=" " />
+        <roundcube:button command="previouspage" type="link" class="buttonPas prevpage" classAct="button prevpage" classSel="button prevpageSel" title="previouspage" content=" " />
+        <span style="float:left">&nbsp;</span>
+        <roundcube:button command="nextpage" type="link" class="buttonPas nextpage" classAct="button nextpage" classSel="button nextpageSel" title="nextpage" content=" " />
+        <roundcube:button command="lastpage" type="link" class="buttonPas lastpage" classAct="button lastpage" classSel="button lastpageSel" title="lastpage" content=" " />
+    </div>
 </div>
 </div>
-<roundcube:object name="fileDropArea" id="compose-attachments" />
 
 <script type="text/javascript">
-  var composesplitv = new rcube_splitter({id:'composesplitterv', p1: 'compose-attachments', p2: 'compose-container', orientation: 'v', relative: true, start: 175});
-  rcmail.add_onload('composesplitv.init()');
+  var composesplitv1 = new rcube_splitter({id:'composesplitterv1', p1: 'compose-contacts', p2: 'compose-container', orientation: 'v', relative: true, start: 200});
+  rcmail.add_onload('composesplitv1.init()');
 </script>
 
 <div id="compose-container">
@@ -119,23 +135,39 @@
         </table>
     </div>
     <div id="compose-div">
-        <div class="boxlistcontent" style="overflow: hidden; top: 0">
-            <roundcube:object name="composeBody" id="compose-body" form="form" cols="70" rows="20" tabindex="9" />
-        </div>
-        <div class="boxfooter">
-            <div id="compose-buttons">
-                <roundcube:button type="input" command="send" class="button mainaction" label="sendmessage" tabindex="10" />
-                <roundcube:button type="input" command="list" class="button" label="cancel" tabindex="11" />
+        <div id="compose-body-div">
+            <div class="boxlistcontent" style="overflow: hidden; top: 0">
+                <roundcube:object name="composeBody" id="compose-body" form="form" cols="70" rows="20" tabindex="9" />
             </div>
-            <div id="compose-editorfooter">
-                <roundcube:if condition="!in_array('htmleditor', (array)config:dont_override)" />
-                <span>
-                    <label><roundcube:label name="editortype" /></label>
-                    <roundcube:object name="editorSelector" editorid="compose-body" tabindex="12" />
-                </span>
-                <roundcube:endif />
+            <div class="boxfooter">
+                <div id="compose-buttons">
+                    <roundcube:button type="input" command="send" class="button mainaction" label="sendmessage" tabindex="10" />
+                    <roundcube:button type="input" command="list" class="button" label="cancel" tabindex="11" />
+                </div>
+                <div id="compose-editorfooter" class="pagenav">
+                    <roundcube:if condition="!in_array('htmleditor', (array)config:dont_override)" />
+                    <span>
+                        <label><roundcube:label name="editortype" /></label>
+                        <roundcube:object name="editorSelector" editorid="compose-body" tabindex="12" />
+                    </span>
+                    <roundcube:endif />
+                </div>
             </div>
         </div>
+<script type="text/javascript">
+  var composesplitv2 = new rcube_splitter({id:'composesplitterv2', p1: 'compose-body-div', p2: 'compose-attachments', orientation: 'v', relative: true, start: $('#compose-headers-div').width() - 175});
+  rcmail.add_onload('composesplitv2.init()');
+</script>
+        <div id="compose-attachments">
+            <div class="boxtitle"><roundcube:label name="attachments" /></div>
+            <div class="boxlistcontent">
+                <roundcube:object name="composeAttachmentList" id="attachmentslist" loadingIcon="/images/display/loading_blue.gif" />
+            </div>
+            <div class="boxfooter">
+                <roundcube:button name="uploadmenulink" id="uploadmenulink" type="link" title="addattachment" class="button addgroup" onclick="rcmail_ui.show_popup('uploadmenu', true);return false" content=" " />
+            </div>
+        </div>
+        <roundcube:object name="fileDropArea" id="compose-attachments" />
     </div>
 </div>
 
diff --git a/skins/classic/templates/mail.html b/skins/classic/templates/mail.html
index 3ad2582..75a112f 100644
--- a/skins/classic/templates/mail.html
+++ b/skins/classic/templates/mail.html
@@ -12,9 +12,9 @@
 <roundcube:exp expression="browser:ie ? ('height: expression((parseInt(this.parentNode.offsetHeight)-'.(!empty(cookie:mailviewsplitter) ? cookie:mailviewsplitter+25 : 245).')+\\'px\\');') : ''" />
 }
 <roundcube:endif />
-#mailleftcontainer { width: <roundcube:exp expression="!empty(cookie:mailviewsplitterv) ? cookie:mailviewsplitterv-5 : 175" />px; }
-#mailrightcontainer { left: <roundcube:exp expression="!empty(cookie:mailviewsplitterv) ? cookie:mailviewsplitterv+5 : 185" />px;
-<roundcube:exp expression="browser:ie ? ('width: expression((parseInt(this.parentNode.offsetWidth)-'.(!empty(cookie:mailviewsplitterv) ? cookie:mailviewsplitterv+5 : 180).')+\\'px\\');') : ''" />
+#mailleftcontainer { width: <roundcube:exp expression="!empty(cookie:mailviewsplitterv) ? cookie:mailviewsplitterv-5 : 160" />px; }
+#mailrightcontainer { left: <roundcube:exp expression="!empty(cookie:mailviewsplitterv) ? cookie:mailviewsplitterv+5 : 170" />px;
+<roundcube:exp expression="browser:ie ? ('width: expression((parseInt(this.parentNode.offsetWidth)-'.(!empty(cookie:mailviewsplitterv) ? cookie:mailviewsplitterv+5 : 165).')+\\'px\\');') : ''" />
 }
 </style>
 </head>

--
Gitblit v1.9.1