From 2bdc651e4ccc342dfc140112f3e39b2930fe9da0 Mon Sep 17 00:00:00 2001 From: vfilippov Date: Mon, 30 Nov 2009 19:24:29 +0000 Subject: [PATCH] Bug 57482 Multiple-selection combobox git-svn-id: svn://svn.office.custis.ru/3rdparty/bugzilla.org/trunk@553 6955db30-a419-402b-8a0d-67ecbb4d7f56 --- images/dn.gif | Bin 0 -> 91 bytes images/dnpush.gif | Bin 0 -> 79 bytes js/global.js | 74 +++++++++++++----- .../global/userselect-combobox.html.tmpl | 29 ++++++- template/en/default/flag/list.html.tmpl | 1 + 5 files changed, 81 insertions(+), 23 deletions(-) create mode 100644 images/dn.gif create mode 100644 images/dnpush.gif diff --git a/images/dn.gif b/images/dn.gif new file mode 100644 index 0000000000000000000000000000000000000000..ea9187ba1231cc9ee8f1dabca2614f2ad2ff0399 GIT binary patch literal 91 zcmZ?wbh9u|6krf$Sjfx(1fij!cke&>|Np-ZhzAm9U^1D~&uR4b{UNE9Tqko5g~-3F s4bEs_YFOrNDfQ}9n)|M;#i?yOw`cGDdiZ8Vcf-dHmwnStGci~L0IDJ-ApigX literal 0 HcmV?d00001 diff --git a/images/dnpush.gif b/images/dnpush.gif new file mode 100644 index 0000000000000000000000000000000000000000..4b6dec9a410e43ac8c9a6c8a1381f3e3a21b2631 GIT binary patch literal 79 zcmZ?wbhEHb6krf$SjfZx1fij!cke#|A{`J9B+kI3(bAuJ=bv!jL>vX9ByWdyo>6WJ792gm_0r4vvbN~PV literal 0 HcmV?d00001 diff --git a/js/global.js b/js/global.js index 602fdf194..7fbc9e3e5 100644 --- a/js/global.js +++ b/js/global.js @@ -113,7 +113,7 @@ function check_mini_login_fields( suffix ) { /* template/en/global/menuforusers.html.tmpl */ -function menuforusers_initcombo(id) +function menuforusers_initcombo(id, multi) { var sel = document.getElementById(id+"_s"); var ed = document.getElementById(id); @@ -124,31 +124,65 @@ function menuforusers_initcombo(id) menuforusers_tocombo(id); } -function menuforusers_tocombo(id) -{ - var sel = document.getElementById(id+"_s"); - var ed = document.getElementById(id); - if (!sel || !ed) - return; - var v = ed.value.toLowerCase(); - for (var i = 0; i < sel.options.length; i++) - { - if (sel.options[i].value.toLowerCase().indexOf(v) >= 0 || - sel.options[i].text.toLowerCase().indexOf(v) >= 0) - { - sel.selectedIndex = i; - menuforusers_fromcombo(id); - break; - } +RegExp.escape = function(text) { + if (!arguments.callee.sRE) { + var specials = [ + '/', '.', '*', '+', '?', '|', + '(', ')', '[', ']', '{', '}', '\\' + ]; + arguments.callee.sRE = new RegExp( + '(\\' + specials.join('|\\') + ')', 'g' + ); } + return text.replace(arguments.callee.sRE, '\\$1'); } -function menuforusers_fromcombo(id) +function menuforusers_tocombo(id, multi) { var sel = document.getElementById(id+"_s"); var ed = document.getElementById(id); if (!sel || !ed) return; - if (sel.selectedIndex >= 0) - ed.value = sel.options[sel.selectedIndex].value; + var v = ed.value.toLowerCase().split(/[\s,]+/); + for (var i = 0; i < v.length; i++) + v[i] = RegExp.escape(v[i].replace(/^\s+|\s+$/, '')); + v = v.join('|'); + v = new RegExp(v); + for (var i = 0; i < sel.options.length; i++) + { + if (sel.options[i].value.toLowerCase().match(v) || + sel.options[i].text.toLowerCase().match(v)) + { + sel.options[i].selected = true; + if (!multi) + break; + } + else if (multi) + sel.options[i].selected = false; + } + menuforusers_fromcombo(id); +} + +function menuforusers_fromcombo(id, multi) +{ + var sel = document.getElementById(id+"_s"); + var ed = document.getElementById(id); + if (!sel || !ed) + return; + v = []; + for (var i = 0; i < sel.options.length; i++) + if (sel.options[i].selected) + v.push(sel.options[i].value); + ed.value = v.join(', '); +} + +function menuforusers_showmulti(id) +{ + var sel = document.getElementById(id+"_s"); + var btn = document.getElementById(id+"_b"); + if (!sel || !btn) + return; + var show = sel.style.visibility == 'hidden' && !sel.disabled; + sel.style.visibility = show ? '' : 'hidden'; + btn.src = 'images/dn' + (show ? 'push' : '') + '.gif'; } diff --git a/template/en/custom/global/userselect-combobox.html.tmpl b/template/en/custom/global/userselect-combobox.html.tmpl index 6a310cc7d..88bf0842e 100644 --- a/template/en/custom/global/userselect-combobox.html.tmpl +++ b/template/en/custom/global/userselect-combobox.html.tmpl @@ -28,6 +28,7 @@
[% SET id="userselect_" _ name IF !id %] +[% UNLESS multiple %]
+ onchange="menuforusers_tocombo('[% id | js %]', 0); [% onchange | html %]" />[% IF multiple %]dropdown list[% END %] [%# http://anton-egorov.blogspot.com/2007/11/ie-select-z-index.html %]
+[% ELSE %] +
+dropdown list +
+ +
+
+[% END %] diff --git a/template/en/default/flag/list.html.tmpl b/template/en/default/flag/list.html.tmpl index 19363e980..1ea78dad3 100644 --- a/template/en/default/flag/list.html.tmpl +++ b/template/en/default/flag/list.html.tmpl @@ -181,6 +181,7 @@ name => "requestee_type-$type.id" id => "requestee_type-$type.id" value => "" + multiple => type.is_multiplicable emptyok => !type.is_multiplicable usemenuforusers => type.custom_list custom_userlist => type.custom_list