Page Menu
Home
In-Portal Phabricator
Search
Configure Global Search
Log In
Files
F726668
in-portal
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sun, Jan 5, 10:17 PM
Size
5 KB
Mime Type
text/x-diff
Expires
Tue, Jan 7, 10:17 PM (1 d, 16 h ago)
Engine
blob
Format
Raw Data
Handle
536769
Attached To
rINP In-Portal
in-portal
View Options
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) + ')"/> \
<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
Log In to Comment