var oldAdditionalsToggleFilter = window.toggleFilter;
window.toggleFilter = function(field) {
oldAdditionalsToggleFilter(field);
return additionals_transform_to_select2(field);
};
function filterAdditionalsFormatState (opt) {
var $opt = $('' + opt.name_with_icon + '');
return $opt;
}
/* global availableFilters additionals_field_formats additionals_filter_urls:true* */
function additionals_transform_to_select2(field){
var field_format = availableFilters[field]['field_format'];
var initialized_select2 = $('#tr_' + field + ' .values .select2');
if (initialized_select2.length == 0 && (typeof additionals_field_formats !== 'undefined') && $.inArray(field_format, additionals_field_formats) >= 0) {
$('#tr_' + field + ' .toggle-multiselect').hide();
$('#tr_' + field + ' .values .value').attr('multiple', 'multiple');
$('#tr_' + field + ' .values .value').select2({
ajax: {
url: additionals_filter_urls[field_format],
dataType: 'json',
delay: 250,
data: function(params) {
return { q: params.term };
},
processResults: function(data, params) {
return { results: data };
},
cache: true
},
placeholder: ' ',
minimumInputLength: 1,
width: '90%',
templateResult: filterAdditionalsFormatState
}).on('select2:open', function (e) {
$(this).parent('span').find('.select2-search__field').val(' ').trigger($.Event('input', { which: 13 })).val('');
});
}
}
var SELECT2_DELAY = 250;
var select2Filters = {};
function setSelect2Filter(type, options) {
if (typeof operatorByType === 'undefined') { return; }
operatorByType[type] = operatorByType[type] || operatorByType['list_optional'];
select2Filters[type] = options;
}
var oldBuildFilterRow = buildFilterRow;
buildFilterRow = function (field, operator, values) {
oldBuildFilterRow(field, operator, values);
var options = select2Options(field);
if (options) {
setSelect2FilterValues(field, options, values);
transformToSelect2(field, options);
}
};
function select2Options(field) {
var filter = availableFilters[field];
var options = select2Filters[filter['type']];
if (!options && filter['field_format']) {
options = select2Filters[field];
}
return options;
}
function setSelect2FilterValues(field, options, values) {
var needAddValues = !rowHasSelectTag(field);
if (needAddValues) { addSelectTag(field); }
var $select = findSelectTagInRowBy(field);
if (options['multiple'] !== false) { $select.attr('multiple', true); }
if (needAddValues) { addOptionTags($select, field, values); }
}
function addSelectTag(field) {
var fieldId = sanitizeToId(field);
$('#tr_' + fieldId).find('td.values').append(
''
);
}
function addOptionTags($select, field, values) {
var filterValues = availableFilters[field]['values'];
for (var i = 0; i < filterValues.length; i++) {
var filterValue = filterValues[i];
var option = $('