Re-add quicksearch field selection and make it persist across sessions.
authorMichael M Slusarz <slusarz@curecanti.org>
Thu, 30 Jul 2009 06:56:43 +0000 (00:56 -0600)
committerMichael M Slusarz <slusarz@curecanti.org>
Thu, 30 Jul 2009 06:58:10 +0000 (00:58 -0600)
imp/config/prefs.php.dist
imp/docs/CHANGES
imp/js/src/DimpBase.js
imp/lib/Views/ListMessages.php
imp/templates/index/index-dimp.inc
imp/templates/javascript_defs_dimp.php
imp/themes/screen-dimp.css
imp/themes/silver/screen-dimp.css

index 031dc97..953a109 100644 (file)
@@ -1677,19 +1677,25 @@ $_prefs['dimp_login_view'] = array(
 );
 
 // Other Implicit DIMP preferences
+$_prefs['dimp_qsearch_field'] = array(
+    'value' => 'all',
+    'locked' => false,
+    'shared' => false,
+    'type' => 'implicit');
+
 $_prefs['dimp_show_preview'] = array(
     'value' => true,
     'locked' => false,
     'shared' => false,
     'type' => 'implicit');
 
-$_prefs['dimp_toggle_headers'] = array(
+$_prefs['dimp_splitbar'] = array(
     'value' => 0,
     'locked' => false,
     'shared' => false,
     'type' => 'implicit');
 
-$_prefs['dimp_splitbar'] = array(
+$_prefs['dimp_toggle_headers'] = array(
     'value' => 0,
     'locked' => false,
     'shared' => false,
index ba42486..e5e7d74 100644 (file)
@@ -2,6 +2,7 @@
 v5.0-git
 --------
 
+[mms] Make DIMP quicksearch field selection persist across sessions.
 [mms] Move JS/CSS caching to Horde framework.
 [mms] Add simple search function to MIMP.
 [mms] DIMP now honors the 'mailbox_start' preference.
index 39c6701..1b20d7e 100644 (file)
@@ -749,6 +749,14 @@ var DimpBase = {
             this.purgeDeleted();
             break;
 
+        case 'ctx_qsearchopts_all':
+        case 'ctx_qsearchopts_body':
+        case 'ctx_qsearchopts_from':
+        case 'ctx_qsearchopts_subject':
+            DIMP.conf.qsearchfield = id.substring(16);
+            this._updatePrefs('dimp_qsearch_field', DIMP.conf.qsearchfield);
+            break;
+
         default:
             if (menu.endsWith('_setflag') || menu.endsWith('_unsetflag')) {
                 flag = elt.readAttribute('flag');
@@ -813,6 +821,11 @@ var DimpBase = {
             tmp.compact().invoke(this.viewport.getSelected().size() ? 'show' : 'hide');
             break;
 
+        case 'ctx_qsearchopts':
+            $(ctx_id).descendants().invoke('removeClassName', 'contextSelected');
+            $(ctx_id + '_' + DIMP.conf.qsearchfield).addClassName('contextSelected');
+            break;
+
         default:
             parentfunc(ctx_id, baseelt);
             break;
@@ -1670,8 +1683,8 @@ var DimpBase = {
                 }
                 break;
 
-            case 'qsearch_close':
-                this.quicksearchClear();
+            case 'qsearch_icon':
+                DimpCore.DMenu.trigger($('qsearch_icon'), true);
                 e.stop();
                 return;
 
@@ -1683,6 +1696,11 @@ var DimpBase = {
                 $('qsearch_input').focus();
                 break;
 
+            case 'qsearch_close':
+                this.quicksearchClear();
+                e.stop();
+                return;
+
             default:
                 if (elt.hasClassName('RBFolderOk')) {
                     this.cfolderaction(e);
@@ -2433,6 +2451,7 @@ var DimpBase = {
         /* Add popdown menus. Check for disabled compose at the same time. */
         this._addMouseEvents({ id: 'button_other', type: 'otheractions' }, $('button_other'));
         this._addMouseEvents({ id: 'folderopts', type: 'folderopts' }, $('folderopts').down(1));
+        this._addMouseEvents({ id: 'qsearch_icon', left: true, type: 'qsearchopts' });
 
         DM.addSubMenu('ctx_message_reply', 'ctx_reply');
         [ 'ctx_message_', 'oa_', 'ctx_draft_' ].each(function(i) {
index 099535b..9c4ff68 100644 (file)
@@ -31,7 +31,25 @@ class IMP_Views_ListMessages
             strlen($args['qsearchmbox'])) {
             /* Create the search query. */
             $query = new Horde_Imap_Client_Search_Query();
-            $query->text($args['qsearch'], false);
+
+            switch ($GLOBALS['prefs']->getValue('dimp_qsearch_field')) {
+            case 'body':
+                $query->text($args['qsearch'], true);
+                break;
+
+            case 'from':
+                $query->headerText('From', $args['qsearch']);
+                break;
+
+            case 'subject':
+                $query->headerText('Subject', $args['qsearch']);
+                break;
+
+            case 'all':
+            default:
+                $query->text($args['qsearch'], false);
+                break;
+            }
 
             /* Set the search in the IMP session. */
             $GLOBALS['imp_search']->createSearchQuery($query, array($args['qsearchmbox']), array(), _("Search Results"), $mbox);
index 0119eb5..28bf8b2 100644 (file)
@@ -175,10 +175,11 @@ function _simpleButton($id, $text, $image, $imagedir = null)
 
      <div class="dimpActions">
       <div id="qsearch">
+       <span id="qsearch_icon"></span>
        <form action="#" method="post">
         <input autocomplete="off" id="qsearch_input" type="text" size="25" />
        </form>
-       <span>
+       <span class="qsearchClose">
         <?php echo Horde::img('close.png', '', array('id' => 'qsearch_close', 'style' => 'display:none', 'title' => _("Clear Search")), $hordeimg) ?>
        </span>
       </div>
@@ -439,6 +440,13 @@ function _simpleButton($id, $text, $image, $imagedir = null)
  <a id="ctx_contacts_add"><span class="contextImg"></span><?php echo _("Add to Address Book") ?></a>
 </div>
 
+<div class="context" id="ctx_qsearchopts" style="display:none">
+ <a id="ctx_qsearchopts_all"><?php echo _("Entire Message") ?></a>
+ <a id="ctx_qsearchopts_body"><?php echo _("Body") ?></a>
+ <a id="ctx_qsearchopts_from"><?php echo _("From") ?></a>
+ <a id="ctx_qsearchopts_subject"><?php echo _("Subject") ?></a>
+</div>
+
 <div style="display:none">
  <span id="largeaddrspan">
   <span class="largeaddrtoggle">
index 9d659f7..2627b9b 100644 (file)
@@ -73,6 +73,7 @@ $code['conf'] = array_filter(array(
     'popup_width' => 820,
     'preview_pref' => intval($GLOBALS['prefs']->getValue('dimp_show_preview')),
     'qsearchid' => IMP_Search::MBOX_PREFIX . 'dimpqsearch',
+    'qsearchfield' => $GLOBALS['prefs']->getValue('dimp_qsearch_field'),
     'refresh_time' => intval($GLOBALS['prefs']->getValue('refresh_time')),
     'sortdate' => Horde_Imap_Client::SORT_DATE,
     'sortthread' => Horde_Imap_Client::SORT_THREAD,
index 3970dd4..b95fe6d 100644 (file)
@@ -761,6 +761,9 @@ div.dimpActionsCompose, div.dimpActionsMsg {
     background: url("graphics/popright.png") 95% 50% no-repeat;
     padding-left: 16px;
 }
+.contextSelected {
+    background: yellow;
+}
 
 /* Email Addresses. */
 a.address {
@@ -800,23 +803,31 @@ a.address:hover img {
 
 /* Search-related styles */
 #qsearch {
-    background: #f3f3f3 url("graphics/search.png") 2px center no-repeat;
-    padding: 1px 0 1px 20px;
+    padding: 1px 0 1px 1px;
     float: right;
     border: 1px solid #999;
     cursor: default;
+    background-color: #f3f3f3;
     -moz-border-radius: 3px;
     -webkit-border-radius: 3px;
 }
 #qsearch form {
     display: inline;
 }
-#qsearch span {
+.qsearchClose {
     display: -moz-inline-stack;
     display: inline-block;
     margin-left: -2px;
     width: 17px;
 }
+#qsearch_icon {
+    height: 16px;
+    width: 16px;
+    display: -moz-inline-stack;
+    display: inline-block;
+    background: #f3f3f3 url("graphics/search.png") center no-repeat;
+    vertical-align: top;
+}
 #qsearch_input {
     border: none;
     color: #a0a0a0;
@@ -826,7 +837,7 @@ a.address:hover img {
 #qsearch_close {
     margin-top: -1px;
 }
-.qsearchFocus {
+.qsearchFocus, .qsearchFocus #qsearch_icon {
     background-color: #fff !important;
 }
 .qsearchFocus #qsearch_input {
index e85b2e9..7cd7dfc 100644 (file)
@@ -145,7 +145,7 @@ span.dimpactionDrafts {
     background-image: url("graphics/newwin.png");
 }
 
-#qsearch {
+#qsearch_icon {
     background-image: url("graphics/search.png");
 }