-function toggleAll(a){$("search").getInputs(null,"search_folders[]").each(function(b){b.checked=a})}function dateCheck(b){var a=$("search_"+b+"_month"),c=$("search_"+b+"_day"),e=$("search_"+b+"_year");if(a.selectedIndex==0){a.selectedIndex=search_month}if(c.selectedIndex==0){c.selectedIndex=search_day}if(e.value==""){e.value=search_year}}function formCheck(){if(not_search&&(!$("preselected_folders")||!$F("preselected_folders"))){if(!Form.getInputs("search",null,"search_folders[]").detect(function(a){return a.checked})){alert(IMP.text.search_select);return false}}$("actionID").setValue("do_search");return true}function search_reset(){$("actionID").setValue("reset_search");$("search").submit();return true}function saveCache(){$("edit_query").setValue($F("save_cache"));$("search").submit()}function delete_field(a){$("delete_field_id").setValue(a);$("actionID").setValue("delete_field");$("search").submit();return true}function show_subscribed(a){$("show_subscribed_only").setValue(a);$("search").submit();return false};
\ No newline at end of file
+var ImpSearch={_toggleAll:function(a){$("search").getInputs(null,"search_folders[]").each(function(b){b.checked=a})},_dateCheck:function(b){var a=$("search_"+b+"_month"),c=$("search_"+b+"_day"),e=$("search_"+b+"_year");if(a.selectedIndex==0){a.selectedIndex=this.search_date.m}if(c.selectedIndex==0){c.selectedIndex=this.search_date.d}if(e.value==""){e.value=this.search_date.y}},_formCheck:function(){if(this.not_search&&(!$("preselected_folders")||!$F("preselected_folders"))){if(!Form.getInputs("search",null,"search_folders[]").detect(function(a){return a.checked})){alert(IMP.text.search_select);return}}$("actionID").setValue("do_search")},_reset:function(){$("actionID").setValue("reset_search");$("search").submit()},_saveCache:function(){$("edit_query").setValue($F("save_cache"));$("search").submit()},_deleteField:function(a){$("delete_field_id").setValue(a);$("actionID").setValue("delete_field");$("search").submit()},_showSubscribed:function(a){$("show_subscribed_only").setValue(a);$("search").submit()},changeHandler:function(a){var b=a.element().readAttribute("id");switch(b){case"save_cache":this._saveCache();break;default:if(b.startsWith("field_")){$("search").submit()}else{if(b.startsWith("search_date_")){this._dateCheck("on")}}break}},clickHandler:function(b){var a=b.element();if(a.hasClassName("searchSubmit")){this._formCheck()}else{if(a.hasClassName("searchReset")){this._reset()}else{if(a.hasClassName("searchDelete")){this._deleteField(a.readAttribute("fid"))}else{switch(a.readAttribute("id")){case"link_sel_all":this._toggleAll(true);break;case"link_sel_none":this._toggleAll(false);break;case"link_sub":this._showSubscribed(this.inverse_sub);break;case"search_match_and":case"search_match_or":if($("field_1")){$("search").submit()}break}}}}}};document.observe("change",ImpSearch.changeHandler.bind(ImpSearch));document.observe("click",ImpSearch.clickHandler.bind(ImpSearch));
\ No newline at end of file
/**
- * Provides the javascript for the search.php script
+ * Provides the javascript for the search.php script (standard view).
*
* See the enclosed file COPYING for license information (GPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
*/
-function toggleAll(checked)
-{
- $('search').getInputs(null, 'search_folders[]').each(function(e) {
- e.checked = checked;
- });
-}
+var ImpSearch = {
+ // The following variables are defined in search.php:
+ // inverse_sub, not_search, search_date
-function dateCheck(field)
-{
- var m = $('search_' + field + '_month'), d = $('search_' + field + '_day'), y = $('search_' + field + '_year');
+ _toggleAll: function(checked)
+ {
+ $('search').getInputs(null, 'search_folders[]').each(function(e) {
+ e.checked = checked;
+ });
+ },
- if (m.selectedIndex == 0) {
- m.selectedIndex = search_month;
- }
+ _dateCheck: function(field)
+ {
+ var m = $('search_' + field + '_month'),
+ d = $('search_' + field + '_day'),
+ y = $('search_' + field + '_year');
- if (d.selectedIndex == 0) {
- d.selectedIndex = search_day;
- }
+ if (m.selectedIndex == 0) {
+ m.selectedIndex = this.search_date.m;
+ }
- if (y.value == "") {
- y.value = search_year;
- }
-}
-
-function formCheck()
-{
- if (not_search &&
- (!$('preselected_folders') || !$F('preselected_folders'))) {
- if (!Form.getInputs('search', null, 'search_folders[]').detect(function(e) { return e.checked; })) {
- alert(IMP.text.search_select);
- return false;
+ if (d.selectedIndex == 0) {
+ d.selectedIndex = this.search_date.d;
+ }
+
+ if (y.value == "") {
+ y.value = this.search_date.y;
+ }
+ },
+
+ _formCheck: function()
+ {
+ if (this.not_search &&
+ (!$('preselected_folders') || !$F('preselected_folders'))) {
+ if (!Form.getInputs('search', null, 'search_folders[]').detect(function(e) { return e.checked; })) {
+ alert(IMP.text.search_select);
+ return;
+ }
+ }
+
+ $('actionID').setValue('do_search');
+ },
+
+ _reset: function()
+ {
+ $('actionID').setValue('reset_search');
+ $('search').submit();
+ },
+
+ _saveCache: function()
+ {
+ $('edit_query').setValue($F('save_cache'));
+ $('search').submit();
+ },
+
+ _deleteField: function(i)
+ {
+ $('delete_field_id').setValue(i);
+ $('actionID').setValue('delete_field');
+ $('search').submit();
+ },
+
+ _showSubscribed: function(i)
+ {
+ $('show_subscribed_only').setValue(i);
+ $('search').submit();
+ },
+
+ changeHandler: function(e)
+ {
+ var id = e.element().readAttribute('id');
+
+ switch (id) {
+ case 'save_cache':
+ this._saveCache();
+ break;
+
+ default:
+ if (id.startsWith('field_')) {
+ $('search').submit();
+ } else if (id.startsWith('search_date_')) {
+ this._dateCheck('on');
+ }
+ break;
+ }
+ },
+
+ clickHandler: function(e)
+ {
+ var elt = e.element();
+
+ if (elt.hasClassName('searchSubmit')) {
+ this._formCheck();
+ } else if (elt.hasClassName('searchReset')) {
+ this._reset();
+ } else if (elt.hasClassName('searchDelete')) {
+ this._deleteField(elt.readAttribute('fid'));
+ } else {
+ switch (elt.readAttribute('id')) {
+ case 'link_sel_all':
+ this._toggleAll(true);
+ break;
+
+ case 'link_sel_none':
+ this._toggleAll(false);
+ break;
+
+ case 'link_sub':
+ this._showSubscribed(this.inverse_sub);
+ break;
+
+ case 'search_match_and':
+ case 'search_match_or':
+ if ($('field_1')) {
+ $('search').submit();
+ }
+ break;
+ }
}
}
- $('actionID').setValue('do_search');
- return true;
-}
-
-function search_reset()
-{
- $('actionID').setValue('reset_search');
- $('search').submit();
- return true;
-}
-
-function saveCache()
-{
- $('edit_query').setValue($F('save_cache'));
- $('search').submit();
-}
-
-function delete_field(i)
-{
- $('delete_field_id').setValue(i);
- $('actionID').setValue('delete_field');
- $('search').submit();
- return true;
-}
-
-function show_subscribed(i)
-{
- $('show_subscribed_only').setValue(i);
- $('search').submit();
- return false
-}
+};
+
+document.observe('change', ImpSearch.changeHandler.bind(ImpSearch));
+document.observe('click', ImpSearch.clickHandler.bind(ImpSearch));
$imp_search_fields = $imp_search->searchFields();
+$charset = NLS::getCharset();
+
/* Get URL parameter data. */
$search = array();
if (Util::getFormData('no_match')) {
}
}
$t->set('search_help', Help::link('imp', 'search'));
-$t->set('field_end', $search['field_end'] > 0);
$t->set('match_or', $search['match'] == 'or');
$t->set('label_or', Horde::label('search_match_or', _("Match Any Query")));
$t->set('match_and', ($search['match'] == null) || ($search['match'] == 'and'));
$fields[$i]['s_fields'][$curr]['sel'] = true;
if (in_array($imp_search_fields[$curr]['type'], array(IMP_Search::HEADER, IMP_Search::BODY, IMP_Search::TEXT, IMP_Search::SIZE))) {
$fields[$i]['search_text'] = true;
- $fields[$i]['search_text_val'] = (!empty($search['text'][$i])) ? @htmlspecialchars($search['text'][$i], ENT_COMPAT, NLS::getCharset()) : null;
+ $fields[$i]['search_text_val'] = (!empty($search['text'][$i])) ? @htmlspecialchars($search['text'][$i], ENT_COMPAT, $charset) : null;
if ($retrieve_search &&
($imp_search_fields[$curr]['type'] == IMP_Search::SIZE)) {
$fields[$i]['search_text_val'] /= 1024;
$t->set('virtualfolder', $_SESSION['imp']['protocol'] != 'pop');
if ($t->get('virtualfolder')) {
$t->set('save_vfolder', !empty($search['save_vfolder']));
- $t->set('vfolder_label', !empty($search['vfolder_label']) ? htmlspecialchars($search['vfolder_label'], ENT_COMPAT, NLS::getCharset()) : null);
+ $t->set('vfolder_label', !empty($search['vfolder_label']) ? htmlspecialchars($search['vfolder_label'], ENT_COMPAT, $charset) : null);
}
if (empty($search['mbox'])) {
}
$title = _("Message Search");
-Horde::addScriptFile('stripe.js', 'horde', true);
Horde::addScriptFile('prototype.js', 'horde', true);
+Horde::addScriptFile('stripe.js', 'horde', true);
Horde::addScriptFile('search.js', 'imp', true);
require IMP_TEMPLATES . '/common-header.inc';
IMP::menu();
IMP::status();
+
IMP::addInlineScript(array(
- 'var search_month = \'' . date('m') . '\'',
- 'var search_day = \'' . date('d') . '\'',
- 'var search_year = \'' . date('Y') . '\'',
- 'var not_search = ' . intval(empty($search['mbox'])),
+ 'ImpSearch.search_date = ' . Horde_Serialize::serialize(array('m' => date('m'), 'd' => date('d'), 'y' => date('Y')), SERIALIZE_JSON, $charset),
+ 'ImpSearch.not_search = ' . intval(empty($search['mbox'])),
+ 'ImpSearch.inverse_sub = ' . intval($t->get('inverse_subscribe')),
));
echo $t->fetch(IMP_TEMPLATES . '/search/search.html');
require $registry->get('templates', 'horde') . '/common-footer.inc';
</h1>
<div>
- <input type="submit" class="button" value="<if:edit_query_vfolder><gettext>Save</gettext><else:edit_query_vfolder><gettext>Submit</gettext></else:edit_query_vfolder></if:edit_query_vfolder>" onclick="return formCheck();" />
- <input type="button" class="button" value="<gettext>Reset</gettext>" onclick="return search_reset();" />
+ <input type="submit" class="button searchSubmit" value="<if:edit_query_vfolder><gettext>Save</gettext><else:edit_query_vfolder><gettext>Submit</gettext></else:edit_query_vfolder></if:edit_query_vfolder>" />
+ <input type="button" class="button searchReset" value="<gettext>Reset</gettext>" />
</div>
<if:saved_searches>
<div class="item">
<label for="save_cache" class="hidden"><gettext>Recent Searches:</gettext></label>
- <select id="save_cache" name="save_cache" onchange="saveCache();">
+ <select id="save_cache" name="save_cache">
<option value=""><gettext>Recent Searches:</gettext></option>
<loop:saved_searches>
<option value="<tag:saved_searches.val />"><tag:saved_searches.text /></option>
</div>
<div class="item">
- <input type="radio" class="checkbox" name="search_match" id="search_match_or" value="or"<if:field_end> onchange="$('search').submit();return true;" onclick="$('search').submit();return true;"</if:field_end><if:match_or> checked="checked"</if:match_or> />
+ <input type="radio" class="checkbox" name="search_match" id="search_match_or" value="or"<if:match_or> checked="checked"</if:match_or> />
<em><tag:label_or /></em>
- <input type="radio" class="checkbox" name="search_match" id="search_match_and" value="and"<if:field_end> onchange="$('search').submit();return true;" onclick="$('search').submit();return true;"</if:field_end><if:match_and> checked="checked"</if:match_and> />
+ <input type="radio" class="checkbox" name="search_match" id="search_match_and" value="and"<if:match_and> checked="checked"</if:match_and> />
<em><tag:label_and /></em>
<table class="item" cellspacing="0">
</else:fields.first></if:fields.first>
<td>
<label for="field_<tag:fields.i />" class="hidden"><gettext>Select a field</gettext></label>
- <select onchange="$('search').submit();return true;" name="field[<tag:fields.i />]" id="field_<tag:fields.i />">
+ <select name="field[<tag:fields.i />]" id="field_<tag:fields.i />">
<if:fields.last>
<option value=""><gettext>Select a field</gettext></option>
<option value="" disabled="disabled">- - - - - - - - -</option>
</loop:fields.month>
</select>
<label for="search_date_<tag:fields.i />_day" class="hidden"><gettext>Day</gettext></label>
- <select id="search_date_<tag:fields.i />_day" name="search_date[<tag:fields.i />][day]" onchange="dateCheck('on')">
+ <select id="search_date_<tag:fields.i />_day" name="search_date[<tag:fields.i />][day]">
<loop:fields.day>
<option value="<tag:fields.day.val />" <if:fields.day.sel>selected="selected" </if:fields.day.sel>><tag:fields.day.val /></option>
</loop:fields.day>
</select>
<label for="search_date_<tag:fields.i />_year" class="hidden"><gettext>Year</gettext></label>
- <select id="search_date_<tag:fields.i />_year" name="search_date[<tag:fields.i />][year]" onchange="dateCheck('on')">
+ <select id="search_date_<tag:fields.i />_year" name="search_date[<tag:fields.i />][year]">
<loop:fields.year>
<option value="<tag:fields.year.val />" <if:fields.year.sel>selected="selected"</if:fields.year.sel>><tag:fields.year.val /></option>
</loop:fields.year>
<td> </td>
</if:fields.i>
<else:fields.last>
- <td><input type="image" class="image" src="<tag:delete_img />" onclick="return delete_field(<tag:fields.i />);" value="<tag:remove />" /></td>
+ <td><input type="image" class="image searchDelete" fid="<tag:fields.i />" src="<tag:delete_img />" value="<tag:remove />" /></td>
</else:fields.last></if:fields.last>
</tr>
</loop:fields>
</div>
<div class="item">
- <a href="#" onclick="toggleAll(true); return false;"><gettext>Select all</gettext></a> |
- <a href="#" onclick="toggleAll(false); return false;"><gettext>Select none</gettext></a>
+ <a id="link_sel_all" href="#"><gettext>Select all</gettext></a> |
+ <a id="link_sel_none" href="#"><gettext>Select none</gettext></a>
<if:subscribe>
- | <a href="#" onclick="return show_subscribed('<tag:inverse_subscribe />');"><if:inverse_subscribe><gettext>Show Only Subscribed Folders</gettext><else:inverse_subscribe><gettext>Show All Folders</gettext></else:inverse_subscribe></if:inverse_subscribe></a>
+ | <a id="link_sub" href="#"><if:inverse_subscribe><gettext>Show Only Subscribed Folders</gettext><else:inverse_subscribe><gettext>Show All Folders</gettext></else:inverse_subscribe></if:inverse_subscribe></a>
</if:subscribe>
</div>
</if:virtualfolder>
<div>
- <input type="submit" class="button" value="<if:edit_query_vfolder><gettext>Save</gettext><else:edit_query_vfolder><gettext>Submit</gettext></else:edit_query_vfolder></if:edit_query_vfolder>" onclick="return formCheck();" />
- <input type="button" class="button" value="<gettext>Reset</gettext>" onclick="return search_reset();" />
+ <input type="submit" class="button searchSubmit" value="<if:edit_query_vfolder><gettext>Save</gettext><else:edit_query_vfolder><gettext>Submit</gettext></else:edit_query_vfolder></if:edit_query_vfolder>" />
+ <input type="button" class="button searchReset" value="<gettext>Reset</gettext>" />
</div>
</form>