var DimpBase = {
// Vars used and defaulting to null/false:
- // cfolderaction, folder, folderswitch, offset, pollPE, pp, sfolder,
+ // cfolderaction, folder, folderswitch, offset, pollPE, pp, search,
// uid, viewport
// message_list_template set via js/mailbox-dimp.js
bcache: $H(),
}
// This catches the refresh case - no need to re-add to history
- if (!Object.isUndefined(this.folder) && !this.sfolder) {
+ if (!Object.isUndefined(this.folder) && !this.search) {
this._addHistory(loc);
}
- if (this.isSearch(f) && !this.sfolder) {
- this._quicksearchDeactivate();
- }
}
+
this.loadMailbox(f);
return;
}
$('msgHeader').update();
this.folderswitch = true;
this.folder = f;
+
+ if (this.isSearch(f) &&
+ (!this.search || this.search.flag)) {
+ this._quicksearchDeactivate(!this.search);
+ }
}
}
// Callbacks
onAjaxRequest: function(id) {
- var p = this.isSearch(id, true) && $('qsearch_input').visible()
- ? $H({
- qsearch: $F('qsearch_input'),
- qsearchmbox: this.sfolder
- })
- : $H();
+ var p = $H();
+ if (this.isSearch(id, true) && $('qsearch_input').visible()) {
+ p.set('qsearchmbox', this.search.mbox);
+ if (this.search.flag) {
+ p.update({ qsearchflag: this.search.flag, qsearchflagnot: Number(this.search.not) });
+ } else {
+ p.set('qsearch', $F('qsearch_input'));
+ }
+ }
return DimpCore.addRequestParams(p);
}.bind(this),
onAjaxResponse: DimpCore.doActionComplete.bind(DimpCore),
l = this.viewport.getMetaData('label');
if (l) {
if (this.isSearch(null, true)) {
- l += ' (' + this.sfolder + ')';
+ l += ' (' + this.search.mbox + ')';
}
$('folderName').update(l);
}
if (menu.endsWith('_setflag') || menu.endsWith('_unsetflag')) {
flag = elt.readAttribute('flag');
this.flag(flag, this.convertFlag(flag, menu.endsWith('_setflag')));
+ } else if (menu.endsWith('_filter') || menu.endsWith('_filternot')) {
+ this.search = {
+ flag: elt.readAttribute('flag'),
+ mbox: this.folder,
+ not: menu.endsWith('_filternot')
+ };
+ this.loadMailbox(DIMP.conf.fsearchid);
} else {
parentfunc(elt, baseelt, menu);
}
label = this.viewport.getMetaData('label');
if (this.isSearch(null, true)) {
- label += ' (' + this.sfolder + ')';
+ label += ' (' + this.search.mbox + ')';
} else {
elt = $(this.getFolderId(this.folder));
if (elt) {
isSearch: function(id, qsearch)
{
id = id ? id : this.folder;
- return id && id.startsWith(DIMP.conf.searchprefix) && (!qsearch || this.sfolder);
+ return id && id.startsWith(DIMP.conf.searchprefix) && (!qsearch || this.search);
},
_quicksearchOnBlur: function()
if (this.isSearch()) {
this.viewport.reload();
} else {
- this.sfolder = this.folder;
+ this.search = { mbox: this.folder };
this.loadMailbox(DIMP.conf.qsearchid);
}
},
if (this.isSearch()) {
DimpCore.DMenu.disable('qsearch_icon', true, false);
this.resetSelected();
- $('qsearch_input').show();
+ $('qsearch', 'qsearch_input').invoke('show');
if (!noload) {
- this.loadMailbox(this.sfolder || 'INBOX');
+ this.loadMailbox(this.search ? this.search.mbox : 'INBOX');
}
this.viewport.deleteView(f);
- this.sfolder = null;
+ this.search = null;
}
},
{
$('qsearch_input').setValue(d ? DIMP.text.search + ' (' + $('ctx_qsearchby_' + DIMP.conf.qsearchfield).getText() + ')' : '');
[ $('qsearch') ].invoke(d ? 'removeClassName' : 'addClassName', 'qsearchActive');
- $('qsearch_close').hide();
+ if ($('qsearch_input').visible()) {
+ $('qsearch_close').hide();
+ }
},
- _quicksearchDeactivate: function()
+ // hideall = (boolean) Hide entire searchbox?
+ _quicksearchDeactivate: function(hideall)
{
- $('qsearch_close').show();
- $('qsearch_input').hide();
+ if (hideall) {
+ $('qsearch').hide();
+ } else {
+ $('qsearch_close').show();
+ $('qsearch_input').hide();
+ }
DimpCore.DMenu.disable('qsearch_icon', true, true);
},
$('qsearch_input').observe('blur', this._quicksearchOnBlur.bind(this));
this._addMouseEvents({ id: 'qsearch_icon', left: true, offset: 'qsearch', type: 'qsearchopts' });
DM.addSubMenu('ctx_qsearchopts_by', 'ctx_qsearchby');
+ DM.addSubMenu('ctx_qsearchopts_filter', 'ctx_flag');
+ DM.addSubMenu('ctx_qsearchopts_filternot', 'ctx_flag');
}
/* Start message list loading as soon as possible. */
$sortpref = IMP::getSort($mbox);
/* Check for quicksearch request. */
- if (strlen($args['qsearch']) &&
- strlen($args['qsearchmbox'])) {
+ if (strlen($args['qsearchmbox'])) {
/* Create the search query. */
$query = new Horde_Imap_Client_Search_Query();
- $field = $GLOBALS['prefs']->getValue('dimp_qsearch_field');
- switch ($field) {
- case 'body':
- $query->text($args['qsearch'], true);
- break;
-
- case 'from':
- case 'subject':
- $query->headerText($field, $args['qsearch']);
- break;
-
- case 'to':
- $query2 = new Horde_Imap_Client_Search_Query();
- $query2->headerText('cc', $args['qsearch']);
-
- $query3 = new Horde_Imap_Client_Search_Query();
- $query3->headerText('bcc', $args['qsearch']);
-
- $query->headerText('to', $args['qsearch']);
- $query->orSearch(array($query2, $query3));
- break;
+ if (strlen($args['qsearchflag'])) {
+ $query->flag($args['qsearchflag'], empty($args['qsearchflagnot']));
+ $is_search = true;
+ } elseif (strlen($args['qsearch'])) {
+ $field = $GLOBALS['prefs']->getValue('dimp_qsearch_field');
+ switch ($field) {
+ case 'body':
+ $query->text($args['qsearch'], true);
+ break;
+
+ case 'from':
+ case 'subject':
+ $query->headerText($field, $args['qsearch']);
+ break;
+
+ case 'to':
+ $query2 = new Horde_Imap_Client_Search_Query();
+ $query2->headerText('cc', $args['qsearch']);
+
+ $query3 = new Horde_Imap_Client_Search_Query();
+ $query3->headerText('bcc', $args['qsearch']);
+
+ $query->headerText('to', $args['qsearch']);
+ $query->orSearch(array($query2, $query3));
+ break;
+
+ case 'all':
+ default:
+ $query->text($args['qsearch'], false);
+ break;
+ }
- case 'all':
- default:
- $query->text($args['qsearch'], false);
- break;
+ $is_search = true;
}
/* Set the search in the IMP session. */
- $GLOBALS['imp_search']->createSearchQuery($query, array($args['qsearchmbox']), array(), _("Search Results"), $mbox);
- $is_search = true;
+ if ($is_search) {
+ $GLOBALS['imp_search']->createSearchQuery($query, array($args['qsearchmbox']), array(), _("Search Results"), $mbox);
+ }
}
$label = IMP::getLabel($mbox);
Horde_Nls::setTimeZone();
/* Run filters now. */
- if (!empty($_SESSION['imp']['filteravail']) &&
+ if (!$is_search &&
+ !empty($_SESSION['imp']['filteravail']) &&
!empty($args['applyfilter']) ||
(($mbox == 'INBOX') &&
$GLOBALS['prefs']->getValue('filter_on_display'))) {