From 41bece1a1adffb524daa2203dfb91211f63989d8 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Thu, 17 May 2007 14:41:24 -0400
Subject: [PATCH] Add link to message subjects (#1484257); don't make selected list items bold; remove duplicate function

---
 program/js/list.js                   |    7 ++-
 skins/default/common.css             |    2 -
 program/include/rcmail_template.inc  |    4 +-
 program/include/main.inc             |   30 ++++----------
 program/steps/addressbook/mailto.inc |    2 
 skins/default/mail.css               |   15 ++++---
 program/steps/addressbook/func.inc   |    4 +-
 program/steps/mail/func.inc          |   28 +++++++++----
 8 files changed, 46 insertions(+), 46 deletions(-)

diff --git a/program/include/main.inc b/program/include/main.inc
index 71534f6..6aa8b91 100644
--- a/program/include/main.inc
+++ b/program/include/main.inc
@@ -753,8 +753,15 @@
   }
 
 
-// compose a URL to the given action
-function rcmail_self_url($action, $p=array(), $task=null)
+/**
+ * Compose an URL for a specific action
+ *
+ * @param string  Request action
+ * @param array   More URL parameters
+ * @param string  Request task (omit if the same)
+ * @return The application URL
+ */
+function rcmail_url($action, $p=array(), $task=null)
 {
   global $MAIN_TASKS, $COMM_PATH;
   $qstring = '';
@@ -1120,25 +1127,6 @@
 function strip_newlines($str)
 {
   return preg_replace('/[\r\n]/', '', $str);
-}
-
-
-/**
- * Compose an URL for a specific action
- *
- * @param string Request action
- * @param array  More URL parameters
- * @return The application URL
- */
-function rcmail_url($action, $param=NULL)
-{
-  $url = $GLOBALS['COMM_PATH'] . '&'.$action;
-
-  if (is_array($param))
-    foreach ($param as $p => $val)
-      $url .= sprintf('&%s=%s', urlencode($p), urlencode($val));
-
-  return $url;
 }
 
 
diff --git a/program/include/rcmail_template.inc b/program/include/rcmail_template.inc
index 6e3fe52..3609bec 100644
--- a/program/include/rcmail_template.inc
+++ b/program/include/rcmail_template.inc
@@ -563,9 +563,9 @@
 
       // make valid href to specific buttons
       if (in_array($attrib['command'], $MAIN_TASKS))
-        $attrib['href'] = Q(rcmail_self_url(null, null, $attrib['command']));
+        $attrib['href'] = Q(rcmail_url(null, null, $attrib['command']));
       else if (in_array($attrib['command'], $a_static_commands))
-        $attrib['href'] = Q(rcmail_self_url($attrib['command']));
+        $attrib['href'] = Q(rcmail_url($attrib['command']));
     }
 
     // overwrite attributes
diff --git a/program/js/list.js b/program/js/list.js
index 7195858..23a9c34 100644
--- a/program/js/list.js
+++ b/program/js/list.js
@@ -584,7 +584,7 @@
   
     // get subjects of selectedd messages
     var names = '';
-    var c, subject, obj;
+    var c, node, subject, obj;
     for(var n=0; n<this.selection.length; n++)
     {
       if (n>12)  // only show 12 lines
@@ -599,10 +599,11 @@
         subject = '';
 
         for(c=0; c<obj.childNodes.length; c++)
-          if (!subject && obj.childNodes[c].nodeName=='TD' && obj.childNodes[c].firstChild && obj.childNodes[c].firstChild.nodeType==3)
+          if (obj.childNodes[c].nodeName=='TD' && (node = obj.childNodes[c].firstChild) && (node.nodeType==3 || node.nodeName=='A'))
           {
-            subject = obj.childNodes[c].firstChild.data;
+            subject = node.nodeType==3 ? node.data : node.innerHTML;
             names += (subject.length > 50 ? subject.substring(0, 50)+'...' : subject) + '<br />';
+            break;
           }
       }
     }
diff --git a/program/steps/addressbook/func.inc b/program/steps/addressbook/func.inc
index 5329270..397b0a1 100644
--- a/program/steps/addressbook/func.inc
+++ b/program/steps/addressbook/func.inc
@@ -71,7 +71,7 @@
   $out .= sprintf($line_templ,
     'rcmli'.$local_id,
     !$current ? 'selected' : '',
-    Q(rcmail_self_url('list', array('_source' => 0))),
+    Q(rcmail_url('list', array('_source' => 0))),
     JS_OBJECT_NAME,
     $local_id,
     JS_OBJECT_NAME,
@@ -89,7 +89,7 @@
     $out .= sprintf($line_templ,
       'rcmli'.$dom_id,
       $current == $id ? 'selected' : '',
-      Q(rcmail_self_url('list', array('_source' => $id))),
+      Q(rcmail_url('list', array('_source' => $id))),
       JS_OBJECT_NAME,
       $js_id,
       JS_OBJECT_NAME,
diff --git a/program/steps/addressbook/mailto.inc b/program/steps/addressbook/mailto.inc
index ddbec30..27217e5 100644
--- a/program/steps/addressbook/mailto.inc
+++ b/program/steps/addressbook/mailto.inc
@@ -36,7 +36,7 @@
   $mailto_str = join(', ', $mailto);
   $mailto_id = substr(md5($mailto_str), 0, 16);
   $_SESSION['mailto'][$mailto_id] = $mailto_str;
-  $OUTPUT->command('redirect', rcmail_self_url('compose', array('_mailto' => $mailto_id), 'mail'));
+  $OUTPUT->command('redirect', rcmail_url('compose', array('_mailto' => $mailto_id), 'mail'));
 }
 else
   $OUTPUT->show_message('nocontactsfound', 'warning');
diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc
index 1848d30..991c3c1 100644
--- a/program/steps/mail/func.inc
+++ b/program/steps/mail/func.inc
@@ -58,7 +58,7 @@
 
 // define url for getting message parts
 if (strlen($_GET['_uid']))
-  $GET_URL = sprintf('%s&_action=get&_mbox=%s&_uid=%d', $COMM_PATH, $IMAP->get_mailbox_name(), get_input_value('_uid', RCUBE_INPUT_GET));
+  $GET_URL = rcmail_url('get', array('_mbox'=>$IMAP->get_mailbox_name(), '_uid'=>get_input_value('_uid', RCUBE_INPUT_GET)));
 
 
 // set current mailbox in client environment
@@ -233,7 +233,7 @@
                     $zebra_class,
                     $unread_count ? ' unread' : '',
                     $folder['id']==$mbox_name ? ' selected' : '',
-                    Q(rcmail_self_url('', array('_mbox' => $folder['id']))),
+                    Q(rcmail_url('', array('_mbox' => $folder['id']))),
                     JS_OBJECT_NAME,
                     $js_name,
                     JS_OBJECT_NAME,
@@ -323,9 +323,11 @@
   // define list of cols to be displayed
   $a_show_cols = is_array($CONFIG['list_cols']) ? $CONFIG['list_cols'] : array('subject');
   $a_sort_cols = array('subject', 'date', 'from', 'to', 'size');
+
+  $mbox = $IMAP->get_mailbox_name();
   
   // show 'to' instead of from in sent messages
-  if (($IMAP->get_mailbox_name()==$CONFIG['sent_mbox'] || $IMAP->get_mailbox_name()==$CONFIG['drafts_mbox']) && ($f = array_search('from', $a_show_cols))
+  if (($mbox==$CONFIG['sent_mbox'] || $mbox==$CONFIG['drafts_mbox']) && ($f = array_search('from', $a_show_cols))
       && !array_search('to', $a_show_cols))
     $a_show_cols[$f] = 'to';
   
@@ -382,11 +384,12 @@
       // just add a link tag to the header
       else
         {
-        $col_name = sprintf('<a href="./#sort" onclick="return %s.command(\'sort\',\'%s\',this)" title="%s">%s</a>',
-                            JS_OBJECT_NAME,
-                            $col,
-                            rcube_label('sortby'),
-                            $col_name);
+        $col_name = sprintf(
+          '<a href="./#sort" onclick="return %s.command(\'sort\',\'%s\',this)" title="%s">%s</a>',
+          JS_OBJECT_NAME,
+          $col,
+          rcube_label('sortby'),
+          $col_name);
         }
       }
       
@@ -453,8 +456,11 @@
         $cont = Q(rcmail_address_string($header->$col, 3, $attrib['addicon']), 'show');
       else if ($col=='subject')
         {
+        $action = $mbox==$CONFIG['drafts_mbox'] ? 'compose' : 'show';
+        $uid_param = $mbox==$CONFIG['drafts_mbox'] ? '_draf_uid' : '_uid';
         $cont = Q(rcube_imap::decode_mime_string($header->$col, $header->charset));
         if (empty($cont)) $cont = Q(rcube_label('nosubject'));
+        $cont = sprintf('<a href="%s" onclick="return false">%s</a>', Q(rcmail_url($action, array($uid_param=>$header->uid, '_mbox'=>$mbox))), $cont);
         }
       else if ($col=='size')
         $cont = show_bytes($header->$col);
@@ -513,9 +519,10 @@
   global $CONFIG, $IMAP, $OUTPUT;
 
   $a_show_cols = is_array($CONFIG['list_cols']) ? $CONFIG['list_cols'] : array('subject');
+  $mbox = $IMAP->get_mailbox_name();
 
   // show 'to' instead of from in sent messages
-  if (($IMAP->get_mailbox_name() == $CONFIG['sent_mbox'] || $IMAP->get_mailbox_name() == $CONFIG['drafts_mbox'])
+  if (($mbox == $CONFIG['sent_mbox'] || $mbox == $CONFIG['drafts_mbox'])
       && (($f = array_search('from', $a_show_cols)) !== false) && array_search('to', $a_show_cols) === false)
     $a_show_cols[$f] = 'to';
 
@@ -535,8 +542,11 @@
         $cont = Q(rcmail_address_string($header->$col, 3), 'show');
       else if ($col=='subject')
         {
+        $action = $mbox==$CONFIG['drafts_mbox'] ? 'compose' : 'show';
+        $uid_param = $mbox==$CONFIG['drafts_mbox'] ? '_draf_uid' : '_uid';
         $cont = Q(rcube_imap::decode_mime_string($header->$col, $header->charset));
         if (!$cont) $cont = Q(rcube_label('nosubject'));
+        $cont = sprintf('<a href="%s" onclick="return false">%s</a>', Q(rcmail_url($action, array($uid_param=>$header->uid, '_mbox'=>$mbox))), $cont);
         }
       else if ($col=='size')
         $cont = show_bytes($header->$col);
diff --git a/skins/default/common.css b/skins/default/common.css
index 2ce3dff..32105ef 100755
--- a/skins/default/common.css
+++ b/skins/default/common.css
@@ -289,7 +289,6 @@
 
 table.records-table tr.selected td
 {
-  font-weight: bold;
   color: #FFFFFF;
   background-color: #CC3333;
 }
@@ -300,7 +299,6 @@
 
 table.records-table tr.unfocused td
 {
-  font-weight: bold;
   color: #FFFFFF;
   background-color: #929292;
 }
diff --git a/skins/default/mail.css b/skins/default/mail.css
index 67ce7e6..f060491 100644
--- a/skins/default/mail.css
+++ b/skins/default/mail.css
@@ -396,7 +396,7 @@
 }
 
 #messagelist thead tr td a,
-#messagelist thead tr td a:hover
+#messagelist tbody tr td a
 {
   display: block;
   width: auto !important;
@@ -416,6 +416,11 @@
   text-overflow: ellipsis;
   border-bottom: 1px solid #EBEBEB;
   cursor: pointer;
+}
+
+#messagelist tbody tr td a
+{
+  color: #000;
 }
 
 #messagelist col
@@ -477,29 +482,27 @@
 
 #messagelist tr.selected td
 {
-  font-weight: bold;
   color: #FFFFFF;
   background-color: #CC3333;
 }
 
 #messagelist tr.unfocused td
 {
-  font-weight: bold;
   color: #FFFFFF;
   background-color: #929292;
 }
 
-#messagelist tr.selected td a.rcmContactAddress
+#messagelist tr.selected td a
 {
   color: #FFFFFF;
 }
 
-#messagelist tr.unfocused td a.rcmContactAddress
+#messagelist tr.unfocused td a
 {
   color: #FFFFFF;
 }
 
-#messagelist tr.deleted td a.rcmContactAddress
+#messagelist tr.deleted td a
 {
   color: #CCCCCC;
 }

--
Gitblit v1.9.1