From 30b152b1947e773a618bc29bfa3b5b505ceeb1d7 Mon Sep 17 00:00:00 2001 From: alecpl Date: Sat, 2 May 2009 14:19:24 +0000 Subject: [PATCH] - Added quick search box menu (#1484304) --- CHANGELOG | 1 + program/js/app.js | 15 +++++-- program/localization/en_GB/labels.inc | 2 + program/localization/en_US/labels.inc | 2 + program/localization/pl_PL/labels.inc | 2 + program/steps/mail/func.inc | 1 + program/steps/mail/search.inc | 45 ++++++++++++-------- skins/default/common.css | 9 +++- skins/default/functions.js | 50 ++++++++++++++++++++++- skins/default/images/icons/glass.gif | Bin 0 -> 909 bytes skins/default/images/searchfield.gif | Bin 484 -> 397 bytes skins/default/mail.css | 13 +++++- skins/default/templates/addressbook.html | 4 +- skins/default/templates/mail.html | 15 ++++++- 14 files changed, 131 insertions(+), 28 deletions(-) create mode 100644 skins/default/images/icons/glass.gif diff --git a/CHANGELOG b/CHANGELOG index da99c7ef2..84c0726ae 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ CHANGELOG RoundCube Webmail =========================== +- Added quick search box menu (#1484304) - Fix wrong column sort order icons (#1485823) - Updated TinyMCE to 3.2.3 version - Fix attachment names encoding when charset isn't specified in attachment part (#1484969) diff --git a/program/js/app.js b/program/js/app.js index 8ac0e7256..e8444031d 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -2392,19 +2392,26 @@ function rcube_webmail() }; // send remote request to search mail or contacts - this.qsearch = function(value, addurl) + this.qsearch = function(value) { if (value != '') { - if (this.message_list) + var addurl = ''; + if (this.message_list) { this.message_list.clear(); - else if (this.contact_list) { + if (this.env.search_mods) { + var head_arr = new Array(); + for (var n in this.env.search_mods) + head_arr.push(n); + addurl += '&_headers='+head_arr.join(','); + } + } else if (this.contact_list) { this.contact_list.clear(true); this.show_contentframe(false); } if (this.gui_objects.search_filter) - addurl = '&_filter=' + this.gui_objects.search_filter.value; + addurl += '&_filter=' + this.gui_objects.search_filter.value; // reset vars this.env.current_page = 1; diff --git a/program/localization/en_GB/labels.inc b/program/localization/en_GB/labels.inc index fae87c558..da2709c70 100644 --- a/program/localization/en_GB/labels.inc +++ b/program/localization/en_GB/labels.inc @@ -131,6 +131,8 @@ $labels['unknown'] = 'unknown'; $labels['unlimited'] = 'unlimited'; $labels['quicksearch'] = 'Quick search'; $labels['resetsearch'] = 'Reset search'; +$labels['searchmod'] = 'Search modifiers'; +$labels['msgtext'] = 'Entire message'; $labels['openinextwin'] = 'Open in new window'; $labels['compose'] = 'Compose a message'; $labels['savemessage'] = 'Save this draft'; diff --git a/program/localization/en_US/labels.inc b/program/localization/en_US/labels.inc index 7f0538703..87cb08b49 100644 --- a/program/localization/en_US/labels.inc +++ b/program/localization/en_US/labels.inc @@ -161,6 +161,8 @@ $labels['unlimited'] = 'unlimited'; $labels['quicksearch'] = 'Quick search'; $labels['resetsearch'] = 'Reset search'; +$labels['searchmod'] = 'Search modifiers'; +$labels['msgtext'] = 'Entire message'; $labels['openinextwin'] = 'Open in new window'; diff --git a/program/localization/pl_PL/labels.inc b/program/localization/pl_PL/labels.inc index dba23a8e0..7b8a39d64 100644 --- a/program/localization/pl_PL/labels.inc +++ b/program/localization/pl_PL/labels.inc @@ -142,6 +142,8 @@ $labels['unknown'] = 'nieznane'; $labels['unlimited'] = 'bez limitu'; $labels['quicksearch'] = 'Szybkie wyszukiwanie'; $labels['resetsearch'] = 'Wyczyść filtr'; +$labels['searchmod'] = 'Parametry wyszukiwania'; +$labels['msgtext'] = 'Cała wiadomość'; $labels['openinextwin'] = 'Otwórz w nowym oknie'; $labels['compose'] = 'Utwórz wiadomość'; $labels['savemessage'] = 'Zapisz kopię roboczą'; diff --git a/program/steps/mail/func.inc b/program/steps/mail/func.inc index f0d7d6f01..537199cc8 100644 --- a/program/steps/mail/func.inc +++ b/program/steps/mail/func.inc @@ -79,6 +79,7 @@ if (empty($RCMAIL->action) || $RCMAIL->action == 'list') $OUTPUT->set_env('search_request', $search_request); } + $OUTPUT->set_env('search_mods', $_SESSION['search_mods'] ? $_SESSION['search_mods'] : array('subject'=>'subject')); // make sure the message count is refreshed (for default view) $IMAP->messagecount($mbox_name, 'ALL', true); } diff --git a/program/steps/mail/search.inc b/program/steps/mail/search.inc index 95ca67a12..8d24460bc 100644 --- a/program/steps/mail/search.inc +++ b/program/steps/mail/search.inc @@ -28,6 +28,7 @@ $imap_charset = 'UTF-8'; $str = get_input_value('_q', RCUBE_INPUT_GET); $filter = get_input_value('_filter', RCUBE_INPUT_GET); $mbox = get_input_value('_mbox', RCUBE_INPUT_GET); +$headers = get_input_value('_headers', RCUBE_INPUT_GET); $search_request = md5($mbox.$filter.$str); // add list filter string @@ -39,47 +40,55 @@ $_SESSION['search_filter'] = $filter; if (preg_match("/^from:.*/i", $str)) { list(,$srch) = explode(":", $str); - $subject = "HEADER FROM"; - $search = trim($srch); + $subject['from'] = "HEADER FROM"; } else if (preg_match("/^to:.*/i", $str)) { list(,$srch) = explode(":", $str); - $subject = "HEADER TO"; - $search = trim($srch); + $subject['to'] = "HEADER TO"; } else if (preg_match("/^cc:.*/i", $str)) { list(,$srch) = explode(":", $str); - $subject = "HEADER CC"; - $search = trim($srch); + $subject['cc'] = "HEADER CC"; +} +else if (preg_match("/^bcc:.*/i", $str)) +{ + list(,$srch) = explode(":", $str); + $subject['bcc'] = "HEADER BCC"; } else if (preg_match("/^subject:.*/i", $str)) { list(,$srch) = explode(":", $str); - $subject = "HEADER SUBJECT"; - $search = trim($srch); + $subject['subject'] = "HEADER SUBJECT"; } else if (preg_match("/^body:.*/i", $str)) { list(,$srch) = explode(":", $str); - $subject = "TEXT"; - $search = trim($srch); + $subject['text'] = "TEXT"; } // search in subject and sender by default else if(trim($str)) { - $from = ($mbox == $CONFIG['sent_mbox'] || $mbox == $CONFIG['drafts_mbox']) ? "TO" : "FROM"; - $subject = array("HEADER SUBJECT", "HEADER $from"); - $search = trim($str); + if ($headers) { + $headers = explode(',', $headers); + foreach($headers as $header) + switch ($header) { + case 'text': $subject['text'] = 'TEXT'; break; + default: $subject[$header] = 'HEADER '.$header; + } + } else { + $subject['subject'] = 'HEADER SUBJECT'; + } } -if ($subject && !is_array($subject)) - $search_str .= sprintf(" %s {%d}\r\n%s", $subject, strlen($search), $search); -else if ($subject) { - $search_str .= ' OR'; - foreach($subject as $sub) +$search = $srch ? trim($srch) : trim($str); + +if ($subject) { + $search_str .= str_repeat(' OR', count($subject)-1); + foreach ($subject as $sub) $search_str .= sprintf(" %s {%d}\r\n%s", $sub, strlen($search), $search); + $_SESSION['search_mods'] = $subject; } $search_str = trim($search_str); diff --git a/skins/default/common.css b/skins/default/common.css index a01985413..b445cd2c9 100644 --- a/skins/default/common.css +++ b/skins/default/common.css @@ -347,7 +347,7 @@ table.records-table tr.unfocused td background: url('images/searchfield.gif') top left no-repeat; } -#quicksearchbar a +#searchreset { position: absolute; top: 3px; @@ -355,6 +355,13 @@ table.records-table tr.unfocused td text-decoration: none; } +#searchmod +{ + position: absolute; + top: 3px; + right: 162px; +} + #quicksearchbar img { vertical-align: middle; diff --git a/skins/default/functions.js b/skins/default/functions.js index fd6e612ee..31c464792 100644 --- a/skins/default/functions.js +++ b/skins/default/functions.js @@ -121,6 +121,7 @@ function rcmail_init_compose_form() function rcube_mail_ui() { this.markmenu = $('#markmessagemenu'); + this.searchmenu = $('#searchmenu'); } rcube_mail_ui.prototype = { @@ -137,16 +138,61 @@ show_markmenu: function(show) this.markmenu[show?'show':'hide'](); }, +show_searchmenu: function(show) +{ + if (typeof show == 'undefined') + show = this.searchmenu.is(':visible') ? false : true; + + var ref = rcube_find_object('searchmod'); + if (show && ref) { + var pos = $(ref).offset(); + this.searchmenu.css({ left:pos.left, top:(pos.top + ref.offsetHeight + 2)}); + + if (rcmail.env.search_mods) { + for (var n in rcmail.env.search_mods) { + box = rcube_find_object('s_mod_' + n); + box.checked = 'checked'; + } + } + } + this.searchmenu[show?'show':'hide'](); +}, + +set_searchmod: function(elem) +{ + if (!rcmail.env.search_mods) + rcmail.env.search_mods = new Object(); + + if (!elem.checked) + delete(rcmail.env.search_mods[elem.value]); + else + rcmail.env.search_mods[elem.value] = elem.value; +}, + body_mouseup: function(evt, p) { if (this.markmenu && this.markmenu.is(':visible') && rcube_event.get_target(evt) != rcube_find_object('markreadbutton')) this.show_markmenu(false); + else if (this.searchmenu && this.searchmenu.is(':visible') && rcube_event.get_target(evt) != rcube_find_object('searchmod')) { + var menu = rcube_find_object('searchmenu'); + var target = rcube_event.get_target(evt); + while (target.parentNode) { + if (target.parentNode == menu) + return; + target = target.parentNode; + } + this.show_searchmenu(false); + } }, body_keypress: function(evt, p) { - if (rcube_event.get_keycode(evt) == 27 && this.markmenu && this.markmenu.is(':visible')) - this.show_markmenu(false); + if (rcube_event.get_keycode(evt) == 27) { + if (this.markmenu && this.markmenu.is(':visible')) + this.show_markmenu(false); + if (this.searchmenu && this.searchmenu.is(':visible')) + this.show_searchmenu(false); + } } }; diff --git a/skins/default/images/icons/glass.gif b/skins/default/images/icons/glass.gif new file mode 100644 index 0000000000000000000000000000000000000000..9a705b4105bc8a7b02d57ae365834ebd1844705d GIT binary patch literal 909 zcmV;819JRFNk%w1VGsZi0Ou3{000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LW3IP59EC2ui01yBW000PT0R0IZNU)&6g9!c6I&|j{t%UwY-I+LX z6hc}JX?0t8=b=G{z~b492dv@2iRtwH)0b}IL6HAqmOOM2x0yw*L literal 0 HcmV?d00001 diff --git a/skins/default/images/searchfield.gif b/skins/default/images/searchfield.gif index b1dc9389ee863978757c6bbdbb0f2ea11557abd0..756a17e47b89e3021ba12b76414d0ead368ff3f7 100644 GIT binary patch delta 282 zcmV+#0pblp6%qgewaC!X(tZK~0L--0+S|vy*9o(h+~ee` zy`l*R1mflG?wA4u2NDBy4bSiR`G5`r4Z;Zo6fhvBuV6t33=~9C=8T}hhvoPM_$R>; zEr+}yYTU)oB8)Xd>lSSsSxis7Do+|UXmF*LqL(mZ%A85Frp=o;bL!m5)209h1y<5Y gSuw!Mqezn~UCOkn)2C3QN}Wozs?-2OUqk=^I|2}O-T(jq delta 370 zcmV-&0ge8R1LOk?M@dFFIbpT{69BUSkqj{uA^8LV00000EC2ui0JZ=V000F4kx5X0 z5C|OjJpRG&`~QG}f`f#GhKGoWiiLWA2?Z4ZP7@Xl3<3o+3rq!zo}ZwhqNAb=Q3w-J z1D6E=8~~l9va__cwtNf&0B;8f1$PLW2mzW1x5voI%6ynL5(oncco+u^2@D6D4$Iu# z-iiqo5&!{r0vW##m>B}!?(gsd0RZEF=>pV!*#_4QI|uVTFo?*pVDdffC2{FVlq%u zpg@2O23Wov8qom*1(U*+%Nf&-fCN7m#3D+yU(5hBB|!SM?T-VfC98^c7jr8`j5QYb zj9m*456CJ{9yMri<&K`ac=PJr%eSxJzkmY^9t>E(&bf5rY7H>AvE#>(BTJr4xw7TU Qm@{kMj5$E!7ZCseJEpmh@c;k- diff --git a/skins/default/mail.css b/skins/default/mail.css index 93c63de0f..00f8ca327 100644 --- a/skins/default/mail.css +++ b/skins/default/mail.css @@ -45,7 +45,8 @@ padding-left: 2px; } -#markmessagemenu +#markmessagemenu, +#searchmenu { position: absolute; top: 32px; @@ -60,6 +61,11 @@ z-index: 240; } +#searchmenu +{ + width: 172px; +} + ul.toolbarmenu { margin: 0; @@ -89,6 +95,11 @@ ul.toolbarmenu li a.active:hover background-color: #ddd; } +ul.toolbarmenu li input +{ + vertical-align: middle; +} + #searchfilter { position: absolute; diff --git a/skins/default/templates/addressbook.html b/skins/default/templates/addressbook.html index 431c0589e..b341172f1 100644 --- a/skins/default/templates/addressbook.html +++ b/skins/default/templates/addressbook.html @@ -41,7 +41,9 @@
- + + +
diff --git a/skins/default/templates/mail.html b/skins/default/templates/mail.html index 4e1d7ce3a..735144646 100644 --- a/skins/default/templates/mail.html +++ b/skins/default/templates/mail.html @@ -136,8 +136,21 @@ +
+
    +
  • +
  • +
  • +
  • +
  • +
  • +
+
+
- + + +