From 819d58acec5194bc68fa5e14fe090244cde5f3c9 Mon Sep 17 00:00:00 2001 From: Stephen Beaver Date: Wed, 3 Feb 2016 11:18:32 -0500 Subject: Improvements to priv filtering --- src/usr/local/www/system_groupmanager_addprivs.php | 65 +++++++++++++++++++--- 1 file changed, 57 insertions(+), 8 deletions(-) (limited to 'src/usr/local/www') diff --git a/src/usr/local/www/system_groupmanager_addprivs.php b/src/usr/local/www/system_groupmanager_addprivs.php index 222501e..e668b67 100644 --- a/src/usr/local/www/system_groupmanager_addprivs.php +++ b/src/usr/local/www/system_groupmanager_addprivs.php @@ -207,7 +207,17 @@ $section->addInput(new Form_Select( $a_group['priv'], build_priv_list(), true -))->addClass('multiselect')->setHelp('Hold down CTRL (PC)/COMMAND (Mac) key to select multiple items.')->setAttribute('style', 'height:400px;'); +))->addClass('multiselect') + ->setHelp('Hold down CTRL (PC)/COMMAND (Mac) key to select multiple items.'); + +$section->addInput(new Form_Select( + 'shadow', + 'Shadow', + null, + build_priv_list(), + true +))->addClass('shadowselect') + ->setHelp('Hold down CTRL (PC)/COMMAND (Mac) key to select multiple items'); $section->addInput(new Form_Input( 'filtertxt', @@ -268,24 +278,38 @@ events.push(function() { echo $jdescs; } ?> + $('.shadowselect').hide(); + // Set the number of options to display $('.multiselect').attr("size","20"); + $('.shadowselect').attr("size","20"); // When the 'sysprivs" selector is clicked, we display a description $('.multiselect').click(function() { $('#pdesc').html('' + descs[$(this).children('option:selected').index()] + ''); + + // and update the shadow list from the real list + $(".multiselect option").each(function() { + shadowoption = $('.shadowselect option').filter('[value=' + $(this).val() + ']'); + + if ($(this).is(':selected')) { + shadowoption.prop("selected", true); + } else { + shadowoption.prop("selected", false); + } + }); }); $('#btnfilter').prop('type', 'button'); $('#btnfilter').click(function() { searchterm = $('#filtertxt').val().toLowerCase(); + copyselect(true); + // Then filter $(".multiselect > option").each(function() { - if (this.text.toLowerCase().indexOf(searchterm) > -1 ) { - $(this).show(); - } else { - $(this).hide(); + if (this.text.toLowerCase().indexOf(searchterm) == -1 ) { + $(this).remove(); } }); }); @@ -293,9 +317,10 @@ events.push(function() { $('#btnclear').prop('type', 'button'); $('#btnclear').click(function() { - $(".multiselect > option").each(function() { - $(this).show(); - }); + // Copy all options from shadow to sysprivs + copyselect(true) + + $('#filtertxt').val(''); }); $('#filtertxt').keypress(function(e) { @@ -307,9 +332,33 @@ events.push(function() { // On submit unhide all options (or else they will not submit) $('form').submit(function() { + $(".multiselect > option").each(function() { $(this).show(); }); + + $('.shadowselect').remove(); + }); + + function copyselect(selected) { + // Copy all optionsfrom shadow to sysprivs + $('.multiselect').html($('.shadowselect').html()); + + if (selected) { + // Update the shadow list from the real list + $(".shadowselect option").each(function() { + multioption = $('.multiselect option').filter('[value=' + $(this).val() + ']'); + if ($(this).is(':selected')) { + multioption.prop("selected", true); + } else { + multioption.prop("selected", false); + } + }); + } + } + + $('.multiselect').mouseup(function () { + $('.multiselect').trigger('click'); }); }); //]]> -- cgit v1.1