Ticket #8936: Allow switching back to no sort (i.e. sequence sort)
authorMichael M Slusarz <slusarz@curecanti.org>
Tue, 30 Mar 2010 18:58:58 +0000 (12:58 -0600)
committerMichael M Slusarz <slusarz@curecanti.org>
Tue, 30 Mar 2010 19:47:24 +0000 (13:47 -0600)
imp/js/DimpBase.js
imp/js/mailbox.js
imp/mailbox.php
imp/templates/dimp/index.inc
imp/templates/dimp/javascript_defs_dimp.php
imp/templates/imp/mailbox/message_headers.html
imp/themes/screen.css

index 37336c3..2334747 100644 (file)
@@ -866,6 +866,10 @@ var DimpBase = {
             }
             break;
 
+        case 'ctx_mboxsort_none':
+            this.sort($H(DIMP.conf.sort).get('sequence').v);
+            break;
+
         default:
             if (menu.endsWith('_setflag') || menu.endsWith('_unsetflag')) {
                 flag = elt.readAttribute('flag');
@@ -1004,17 +1008,14 @@ var DimpBase = {
         DimpCore.setTitle(label);
     },
 
-    sort: function(e)
+    sort: function(sortby)
     {
-        var s,
-            sortby = e.element().retrieve('sortby');
+        var s;
 
         if (Object.isUndefined(sortby)) {
             return;
         }
 
-        e.stop();
-
         sortby = Number(sortby);
         if (sortby == this.viewport.getMetaData('sortby')) {
             s = { sortdir: (this.viewport.getMetaData('sortdir') ? 0 : 1) };
@@ -1077,9 +1078,14 @@ var DimpBase = {
         }
 
         ptr.find(function(s) {
-            return (sortby == s.value.v)
-                ? s.value.e.up().addClassName(this.viewport.getMetaData('sortdir') ? 'sortup' : 'sortdown')
-                : false;
+            if (sortby != s.value.v) {
+                return false;
+            }
+            var elt = s.value.e.up();
+            if (elt) {
+                elt.addClassName(this.viewport.getMetaData('sortdir') ? 'sortup' : 'sortdown');
+            }
+            return true;
         }, this);
     },
 
@@ -2012,7 +2018,8 @@ var DimpBase = {
                 return;
 
             case 'msglistHeader':
-                this.sort(e);
+                this.sort(e.element().retrieve('sortby'));
+                e.stop();
                 return;
 
             case 'th_expand':
@@ -2974,6 +2981,8 @@ var DimpBase = {
             DM.disable('button_forward_img', true, true);
         }
 
+        this._addMouseEvents({ id: 'msglistHeader', type: 'mboxsort' });
+
         new Drop('dropbase', this._folderDropConfig);
 
         if (DIMP.conf.toggle_pref) {
index 7317fff..97d9bdb 100644 (file)
@@ -231,6 +231,8 @@ var ImpMailbox = {
             } else if (elt.hasClassName('checkbox')) {
                 this.selectRange(e);
                 // Fall through to elt.up() call below.
+            } else if (elt.hasClassName('nosort')) {
+                return;
             }
 
             id = elt.readAttribute('id');
index 4aaac81..2bf761b 100644 (file)
@@ -651,6 +651,10 @@ if ($pageOb['msgcount']) {
     $mh_template->set('sessiontag', Horde_Util::formInput());
     $mh_template->set('headers', $headers);
 
+    if ($sortpref['by'] != Horde_Imap_Client::SORT_SEQUENCE) {
+        $mh_template->set('no_sort', Horde::widget($sort_url->copy()->remove('sortdir')->add(array('sortby' => Horde_Imap_Client::SORT_SEQUENCE, 'actionID' => 'change_sort', 'mailbox_token' => $mailbox_token)), _("Clear Sort"), 'widget', '', '', _("Clear Sort")));
+    }
+
     if (!$search_mbox) {
         $mh_template->set('mh_count', $mh_count++);
         echo $mh_template->fetch(IMP_TEMPLATES . '/imp/mailbox/message_headers.html');
index e8e130f..3ff828b 100644 (file)
@@ -461,6 +461,10 @@ function _simpleButton($id, $text, $image, $nodisplay = false)
  <a id="ctx_contacts_add"><span class="contextImg"></span><?php echo _("Add to Address Book") ?></a>
 </div>
 
+<div class="context" id="ctx_mboxsort" style="display:none">
+ <a id="ctx_mboxsort_none"><?php echo _("Clear Sort") ?></a>
+</div>
+
 <?php if ($_SESSION['imp']['protocol'] != 'pop'): ?>
 <div class="context" id="ctx_qsearchopts" style="display:none">
  <a id="ctx_qsearchopts_by"><?php echo _("Search By") ?></a>
index 82d6922..46efec6 100644 (file)
@@ -74,6 +74,10 @@ $code['conf'] = array_filter(array(
     'searchprefix' => IMP_Search::MBOX_PREFIX,
     'sidebar_width' => max((int)$GLOBALS['prefs']->getValue('sidebar_width'), 150) . 'px',
     'sort' => array(
+        'sequence' => array(
+            't' => '',
+            'v' => Horde_Imap_Client::SORT_SEQUENCE
+        ),
         'from' => array(
             't' => _("From"),
             'v' => Horde_Imap_Client::SORT_FROM
index cd5c70b..fd4bf46 100644 (file)
@@ -12,6 +12,9 @@
   <th id="checkheader" width="8%">
    <label for="checkAll" class="hidden"><gettext>Check All/None</gettext></label>
    <input type="checkbox" class="checkbox" id="checkAll" name="checkAll" <tag:check_all /> />
+<if:no_sort>
+   <span class="nosort">[<tag:no_sort />]</span>
+</if:no_sort>
   </th>
 </else:mh_count></if:mh_count>
 <loop:headers>
index f0aea12..b80a6b2 100644 (file)
     margin-left: 3px;
 }
 
+#checkheader input {
+    float: left;
+}
+#checkheader span.nosort {
+    font-weight: normal;
+    font-size: 90%;
+    padding-left: 3px;
+}
+
 /* Newmail alerts. */
 #newmail {
     padding: 1em;