Page MenuHomeIn-Portal Phabricator

in-portal
No OneTemporary

File Metadata

Created
Sun, Jan 5, 10:17 PM

in-portal

Index: branches/5.2.x/core/admin_templates/js/grid_filters.js
===================================================================
--- branches/5.2.x/core/admin_templates/js/grid_filters.js (revision 16550)
+++ branches/5.2.x/core/admin_templates/js/grid_filters.js (revision 16551)
@@ -1,153 +1,153 @@
/*
Class used to convert <select multiple="multiple" ...> into div with checkboxes for each option
The select is hidden, but the data is still submitted through hidden control. This class is used for multioptions filter.
Basic usage:
<script type="text/javascript">
MultiOptions.ConvertSelect('hidden_id');
</script>
* @TODO: Make the Search/Close buttons optional.
* This will make the class flexible and it could be used for other purposes also.
*/
function MultiOptions() {}
MultiOptions.Selectors = [];
MultiOptions.ConvertSelect = function($id, $ajax) {
// custom_filters[partner-service][Default][Status][multioptions]
$id.match(/custom_filters\[(.*?)\]\[(.*?)\]\[.*?\]\[.*?\]/);
var $prefix = RegExp.$1;
var $grid_name = RegExp.$2;
var $select = $('#' + jq($id) + '_select');
if (!$select.length) {
return ;
}
// hide <select> element
$select.hide();
// create div with checkboxes and buttons
var $cur_index = MultiOptions.Selectors.length;
var $div = $('<div id="' + $id + '_div" class="multioptions_filter"></div>');
MultiOptions.Selectors.push($id);
// set defaults for missing phrases
if (!phrases['la_btn_SelectAll']) phrases['la_SelectAll'] = 'Select All';
if (!phrases['la_btn_OpenMultiFilter']) phrases['la_OpenMultiFilter'] = 'Open Filter';
if (!phrases['la_btn_Search']) phrases['la_ToolTip_Search'] = 'Search';
if (!phrases['la_btn_Close']) phrases['la_tooltip_close'] = 'Close';
// create div with checkboxes
var $options_div = $('<div></div>');
// add "Select All" checkbox
$options_div.append(
'<input type="checkbox" id="_mutlioptions_cb_' + $cur_index + '_all"/>\
<label for="_mutlioptions_cb_' + $cur_index + '_all">' + phrases['la_SelectAll'] + '</label><br/>'
);
var $options = $('option', $select);
// add each <select> option as checkbox to above div
$options.each(
function () {
var $checked = this.selected ? ' checked="checked"' : '';
$options_div.append(
'<input type="checkbox" class="_mutlioptions_cb_' + $cur_index + '" id="_mutlioptions_cb_' + $cur_index + '_' + this.value + '"' + $checked + ' value="' + this.value + '"/>\
<label for="_mutlioptions_cb_' + $cur_index + '_' + this.value + '">' + this.text + '</label><br/>'
);
}
);
// add buttons to search or close filter
$div
.append($options_div)
.append(
'<div style="margin-top: 7px; text-align: center">\
<input type="button" class="button" value="' + phrases['la_ToolTip_Search'] + '" onclick="search(\'' + $prefix + '\', \'' + $grid_name + '\', ' + parseInt($ajax) + ')"/>&nbsp;\
<input type="button" class="button" value="' + phrases['la_tooltip_close'] + '" onclick="MultiOptions.CloseSelector(' + $cur_index + ')">\
</div>'
);
$('#' + jq($form_name)).append($div);
// set click handlers
$('#_mutlioptions_cb_' + $cur_index + '_all')
.click(
function ($e) {
MultiOptions.SelectAll($cur_index);
}
)
- .prop('checked', $options.length == $options.filter(':selected').length > 0);
+ .prop('checked', $options.length == $options.filter(':selected').length);
$('input._mutlioptions_cb_' + $cur_index).click(
function ($e) {
MultiOptions.ItemChecked($cur_index);
}
);
// add filter placeholder, used for filter opening filter
var $filter = $('<div class="filter" style="cursor: pointer;">' + phrases['la_OpenMultiFilter'] + '</div>');
if ($select.hasClass('filter-active')) {
$filter.addClass('filter-active');
}
$filter
.click(
function($e) {
var $offset = $(this).offset();
var $box_left = $offset.left;
$('#' + jq($id) + '_div').css( {left: 0, top: $offset.top} ).show();
var $box_width = $('#' + jq($id) + '_div').outerWidth();
if ($box_left + $box_width > document.body.offsetWidth) {
// move left
$box_left -= $box_width;
}
$('#' + jq($id) + '_div').css('left', $box_left);
}
)
.insertAfter($select);
}
MultiOptions.CloseSelector = function(selector_index) {
$('#' + jq(MultiOptions.Selectors[selector_index]) + '_div').hide();
}
MultiOptions.ItemChecked = function(selector_index) {
// sync hidden field
var $reg_exp = new RegExp('^_mutlioptions_cb_' + selector_index + '_(?!all)([0-9A-Za-z-]+)');
update_checkbox_options($reg_exp, MultiOptions.Selectors[selector_index]);
// update "Select All" checkbox
var $select_all = $('#_mutlioptions_cb_' + selector_index + '_all');
var $options = $("input[type='checkbox']", '#' + jq(MultiOptions.Selectors[selector_index]) + '_div').not($select_all);
- $select_all.prop('checked', $options.length == $options.filter(':checked').length > 0);
+ $select_all.prop('checked', $options.length == $options.filter(':checked').length);
}
MultiOptions.SelectAll = function(selector_index) {
// set all checkbox to match "Select All" checkbox
var $select_all = $('#_mutlioptions_cb_' + selector_index + '_all');
var $checked = $select_all.prop('checked');
$("input[type='checkbox']", '#' + jq(MultiOptions.Selectors[selector_index]) + '_div').not($select_all).prop('checked', $checked);
// sync hidden field
var $reg_exp = new RegExp('^_mutlioptions_cb_' + selector_index + '_(?!all)([0-9A-Za-z-]+)');
update_checkbox_options($reg_exp, MultiOptions.Selectors[selector_index]);
}

Event Timeline