diff options
Diffstat (limited to 'build/resources/main/static/plugins/bootstrap4-duallistbox')
4 files changed, 991 insertions, 0 deletions
diff --git a/build/resources/main/static/plugins/bootstrap4-duallistbox/bootstrap-duallistbox.css b/build/resources/main/static/plugins/bootstrap4-duallistbox/bootstrap-duallistbox.css new file mode 100644 index 0000000..596831a --- /dev/null +++ b/build/resources/main/static/plugins/bootstrap4-duallistbox/bootstrap-duallistbox.css @@ -0,0 +1,87 @@ +/*
+ * Bootstrap Duallistbox - v4.0.2
+ * A responsive dual listbox widget optimized for Twitter Bootstrap. It works on all modern browsers and on touch devices.
+ * http://www.virtuosoft.eu/code/bootstrap-duallistbox/
+ *
+ * Made by István Ujj-Mészáros
+ * Under Apache License v2.0 License
+ */
+.bootstrap-duallistbox-container .buttons { + width: 100%; + margin-bottom: -1px; +} + +.bootstrap-duallistbox-container label { + display: block; +} + +.bootstrap-duallistbox-container .info { + display: inline-block; + margin-bottom: 5px; + font-size: 11px; +} + +.bootstrap-duallistbox-container .clear1, +.bootstrap-duallistbox-container .clear2 { + display: none; + font-size: 10px; +} + +.bootstrap-duallistbox-container .box1.filtered .clear1, +.bootstrap-duallistbox-container .box2.filtered .clear2 { + display: inline-block; +} + +.bootstrap-duallistbox-container .move, +.bootstrap-duallistbox-container .remove { + width: 50%; + box-sizing: content-box; +} + +.bootstrap-duallistbox-container .btn-group .btn { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +.bootstrap-duallistbox-container:not(.moveonselect) select { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.bootstrap-duallistbox-container .moveall, +.bootstrap-duallistbox-container .removeall { + width: 50%; + box-sizing: content-box; +} + +.bootstrap-duallistbox-container.bs2compatible .btn-group > .btn + .btn { + margin-left: 0; +} + +.bootstrap-duallistbox-container select { + width: 100%; + height: 300px; + padding: 0; +} + +.bootstrap-duallistbox-container .filter { + display: inline-block; + width: 100%; + height: 31px; + margin: 0 0 5px 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.bootstrap-duallistbox-container .filter.placeholder { + color: #aaa; +} + +.bootstrap-duallistbox-container.moveonselect .move, +.bootstrap-duallistbox-container.moveonselect .remove { + display:none; +} + +.bootstrap-duallistbox-container.moveonselect .moveall, +.bootstrap-duallistbox-container.moveonselect .removeall { + width: 100%; +} diff --git a/build/resources/main/static/plugins/bootstrap4-duallistbox/bootstrap-duallistbox.min.css b/build/resources/main/static/plugins/bootstrap4-duallistbox/bootstrap-duallistbox.min.css new file mode 100644 index 0000000..c957314 --- /dev/null +++ b/build/resources/main/static/plugins/bootstrap4-duallistbox/bootstrap-duallistbox.min.css @@ -0,0 +1 @@ +.bootstrap-duallistbox-container .buttons{width:100%;margin-bottom:-1px}.bootstrap-duallistbox-container label{display:block}.bootstrap-duallistbox-container .info{display:inline-block;margin-bottom:5px;font-size:11px}.bootstrap-duallistbox-container .clear1,.bootstrap-duallistbox-container .clear2{display:none;font-size:10px}.bootstrap-duallistbox-container .box1.filtered .clear1,.bootstrap-duallistbox-container .box2.filtered .clear2{display:inline-block}.bootstrap-duallistbox-container .move,.bootstrap-duallistbox-container .remove{width:50%;box-sizing:content-box}.bootstrap-duallistbox-container .btn-group .btn{border-bottom-left-radius:0;border-bottom-right-radius:0}.bootstrap-duallistbox-container:not(.moveonselect) select{border-top-left-radius:0;border-top-right-radius:0}.bootstrap-duallistbox-container .moveall,.bootstrap-duallistbox-container .removeall{width:50%;box-sizing:content-box}.bootstrap-duallistbox-container.bs2compatible .btn-group>.btn+.btn{margin-left:0}.bootstrap-duallistbox-container select{width:100%;height:300px;padding:0}.bootstrap-duallistbox-container .filter{display:inline-block;width:100%;height:31px;margin:0 0 5px 0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.bootstrap-duallistbox-container .filter.placeholder{color:#aaa}.bootstrap-duallistbox-container.moveonselect .move,.bootstrap-duallistbox-container.moveonselect .remove{display:none}.bootstrap-duallistbox-container.moveonselect .moveall,.bootstrap-duallistbox-container.moveonselect .removeall{width:100%}
\ No newline at end of file diff --git a/build/resources/main/static/plugins/bootstrap4-duallistbox/jquery.bootstrap-duallistbox.js b/build/resources/main/static/plugins/bootstrap4-duallistbox/jquery.bootstrap-duallistbox.js new file mode 100644 index 0000000..4862ec3 --- /dev/null +++ b/build/resources/main/static/plugins/bootstrap4-duallistbox/jquery.bootstrap-duallistbox.js @@ -0,0 +1,893 @@ +/*
+ * Bootstrap Duallistbox - v4.0.2
+ * A responsive dual listbox widget optimized for Twitter Bootstrap. It works on all modern browsers and on touch devices.
+ * http://www.virtuosoft.eu/code/bootstrap-duallistbox/
+ *
+ * Made by István Ujj-Mészáros
+ * Under Apache License v2.0 License
+ */
+(function(factory) { + if (typeof define === 'function' && define.amd) { + define(['jquery'], factory); + } else if (typeof module === 'object' && module.exports) { + module.exports = function(root, jQuery) { + if (jQuery === undefined) { + if (typeof window !== 'undefined') { + jQuery = require('jquery'); + } + else { + jQuery = require('jquery')(root); + } + } + factory(jQuery); + return jQuery; + }; + } else { + factory(jQuery); + } +}(function($) { + // Create the defaults once + var pluginName = 'bootstrapDualListbox', + defaults = { + filterTextClear: 'show all', + filterPlaceHolder: 'Filter', + moveSelectedLabel: 'Move selected', + moveAllLabel: 'Move all', + removeSelectedLabel: 'Remove selected', + removeAllLabel: 'Remove all', + moveOnSelect: true, // true/false (forced true on androids, see the comment later) + moveOnDoubleClick: true, // true/false (forced false on androids, cause moveOnSelect is forced to true) + preserveSelectionOnMove: false, // 'all' / 'moved' / false + selectedListLabel: false, // 'string', false + nonSelectedListLabel: false, // 'string', false + helperSelectNamePostfix: '_helper', // 'string_of_postfix' / false + selectorMinimalHeight: 100, + showFilterInputs: true, // whether to show filter inputs + nonSelectedFilter: '', // string, filter the non selected options + selectedFilter: '', // string, filter the selected options + infoText: 'Showing all {0}', // text when all options are visible / false for no info text + infoTextFiltered: '<span class="badge badge-warning">Filtered</span> {0} from {1}', // when not all of the options are visible due to the filter + infoTextEmpty: 'Empty list', // when there are no options present in the list + filterOnValues: false, // filter by selector's values, boolean + sortByInputOrder: false, + eventMoveOverride: false, // boolean, allows user to unbind default event behaviour and run their own instead + eventMoveAllOverride: false, // boolean, allows user to unbind default event behaviour and run their own instead + eventRemoveOverride: false, // boolean, allows user to unbind default event behaviour and run their own instead + eventRemoveAllOverride: false, // boolean, allows user to unbind default event behaviour and run their own instead + btnClass: 'btn-outline-secondary', // sets the button style class for all the buttons + btnMoveText: '>', // string, sets the text for the "Move" button + btnRemoveText: '<', // string, sets the text for the "Remove" button + btnMoveAllText: '>>', // string, sets the text for the "Move All" button + btnRemoveAllText: '<<' // string, sets the text for the "Remove All" button + }, + // Selections are invisible on android if the containing select is styled with CSS + // http://code.google.com/p/android/issues/detail?id=16922 + isBuggyAndroid = /android/i.test(navigator.userAgent.toLowerCase()); + + // The actual plugin constructor + function BootstrapDualListbox(element, options) { + this.element = $(element); + // jQuery has an extend method which merges the contents of two or + // more objects, storing the result in the first object. The first object + // is generally empty as we don't want to alter the default options for + // future instances of the plugin + this.settings = $.extend({}, defaults, options); + this._defaults = defaults; + this._name = pluginName; + this.init(); + } + + function triggerChangeEvent(dualListbox) { + dualListbox.element.trigger('change'); + } + + function updateSelectionStates(dualListbox) { + dualListbox.element.find('option').each(function(index, item) { + var $item = $(item); + if (typeof($item.data('original-index')) === 'undefined') { + $item.data('original-index', dualListbox.elementCount++); + } + if (typeof($item.data('_selected')) === 'undefined') { + $item.data('_selected', false); + } + }); + } + + function changeSelectionState(dualListbox, original_index, selected) { + dualListbox.element.find('option').each(function(index, item) { + var $item = $(item); + if ($item.data('original-index') === original_index) { + $item.prop('selected', selected); + if(selected){ + $item.attr('data-sortindex', dualListbox.sortIndex); + dualListbox.sortIndex++; + } else { + $item.removeAttr('data-sortindex'); + } + } + }); + } + + function formatString(s, args) { + console.log(s, args); + return s.replace(/{(\d+)}/g, function(match, number) { + return typeof args[number] !== 'undefined' ? args[number] : match; + }); + } + + function refreshInfo(dualListbox) { + if (!dualListbox.settings.infoText) { + return; + } + + var visible1 = dualListbox.elements.select1.find('option').length, + visible2 = dualListbox.elements.select2.find('option').length, + all1 = dualListbox.element.find('option').length - dualListbox.selectedElements, + all2 = dualListbox.selectedElements, + content = ''; + + if (all1 === 0) { + content = dualListbox.settings.infoTextEmpty; + } else if (visible1 === all1) { + content = formatString(dualListbox.settings.infoText, [visible1, all1]); + } else { + content = formatString(dualListbox.settings.infoTextFiltered, [visible1, all1]); + } + + dualListbox.elements.info1.html(content); + dualListbox.elements.box1.toggleClass('filtered', !(visible1 === all1 || all1 === 0)); + + if (all2 === 0) { + content = dualListbox.settings.infoTextEmpty; + } else if (visible2 === all2) { + content = formatString(dualListbox.settings.infoText, [visible2, all2]); + } else { + content = formatString(dualListbox.settings.infoTextFiltered, [visible2, all2]); + } + + dualListbox.elements.info2.html(content); + dualListbox.elements.box2.toggleClass('filtered', !(visible2 === all2 || all2 === 0)); + } + + function refreshSelects(dualListbox) { + dualListbox.selectedElements = 0; + + dualListbox.elements.select1.empty(); + dualListbox.elements.select2.empty(); + + dualListbox.element.find('option').each(function(index, item) { + var $item = $(item); + if ($item.prop('selected')) { + dualListbox.selectedElements++; + dualListbox.elements.select2.append($item.clone(true).prop('selected', $item.data('_selected'))); + } else { + dualListbox.elements.select1.append($item.clone(true).prop('selected', $item.data('_selected'))); + } + }); + + if (dualListbox.settings.showFilterInputs) { + filter(dualListbox, 1); + filter(dualListbox, 2); + } + refreshInfo(dualListbox); + } + + function filter(dualListbox, selectIndex) { + if (!dualListbox.settings.showFilterInputs) { + return; + } + + saveSelections(dualListbox, selectIndex); + + dualListbox.elements['select'+selectIndex].empty().scrollTop(0); + var regex, + allOptions = dualListbox.element.find('option'), + options = dualListbox.element; + + if (selectIndex === 1) { + options = allOptions.not(':selected'); + } else { + options = options.find('option:selected'); + } + + try { + regex = new RegExp($.trim(dualListbox.elements['filterInput'+selectIndex].val()), 'gi'); + } + catch(e) { + // a regex to match nothing + regex = new RegExp('/a^/', 'gi'); + } + + options.each(function(index, item) { + var $item = $(item), + isFiltered = true; + if (item.text.match(regex) || (dualListbox.settings.filterOnValues && $item.attr('value').match(regex) ) ) { + isFiltered = false; + dualListbox.elements['select'+selectIndex].append($item.clone(true).prop('selected', $item.data('_selected'))); + } + allOptions.eq($item.data('original-index')).data('filtered'+selectIndex, isFiltered); + }); + + refreshInfo(dualListbox); + } + + function saveSelections(dualListbox, selectIndex) { + var options = dualListbox.element.find('option'); + dualListbox.elements['select'+selectIndex].find('option').each(function(index, item) { + var $item = $(item); + options.eq($item.data('original-index')).data('_selected', $item.prop('selected')); + }); + } + + function sortOptionsByInputOrder(select){ + var selectopt = select.children('option'); + + selectopt.sort(function(a,b){ + var an = parseInt(a.getAttribute('data-sortindex')), + bn = parseInt(b.getAttribute('data-sortindex')); + + if(an > bn) { + return 1; + } + if(an < bn) { + return -1; + } + return 0; + }); + + selectopt.detach().appendTo(select); + } + + function sortOptions(select, dualListbox) { + select.find('option').sort(function(a, b) { + return ($(a).data('original-index') > $(b).data('original-index')) ? 1 : -1; + }).appendTo(select); + + // workaround for chromium bug: https://bugs.chromium.org/p/chromium/issues/detail?id=1072475 + refreshSelects(dualListbox); + } + + function clearSelections(dualListbox) { + dualListbox.elements.select1.find('option').each(function() { + dualListbox.element.find('option').data('_selected', false); + }); + } + + function move(dualListbox) { + if (dualListbox.settings.preserveSelectionOnMove === 'all' && !dualListbox.settings.moveOnSelect) { + saveSelections(dualListbox, 1); + saveSelections(dualListbox, 2); + } else if (dualListbox.settings.preserveSelectionOnMove === 'moved' && !dualListbox.settings.moveOnSelect) { + saveSelections(dualListbox, 1); + } + + dualListbox.elements.select1.find('option:selected').each(function(index, item) { + var $item = $(item); + if (!$item.data('filtered1')) { + changeSelectionState(dualListbox, $item.data('original-index'), true); + } + }); + + refreshSelects(dualListbox); + triggerChangeEvent(dualListbox); + if(dualListbox.settings.sortByInputOrder){ + sortOptionsByInputOrder(dualListbox.elements.select2); + } else { + sortOptions(dualListbox.elements.select2, dualListbox); + } + } + + function remove(dualListbox) { + if (dualListbox.settings.preserveSelectionOnMove === 'all' && !dualListbox.settings.moveOnSelect) { + saveSelections(dualListbox, 1); + saveSelections(dualListbox, 2); + } else if (dualListbox.settings.preserveSelectionOnMove === 'moved' && !dualListbox.settings.moveOnSelect) { + saveSelections(dualListbox, 2); + } + + dualListbox.elements.select2.find('option:selected').each(function(index, item) { + var $item = $(item); + if (!$item.data('filtered2')) { + changeSelectionState(dualListbox, $item.data('original-index'), false); + } + }); + + refreshSelects(dualListbox); + triggerChangeEvent(dualListbox); + sortOptions(dualListbox.elements.select1, dualListbox); + if(dualListbox.settings.sortByInputOrder){ + sortOptionsByInputOrder(dualListbox.elements.select2); + } + } + + function moveAll(dualListbox) { + if (dualListbox.settings.preserveSelectionOnMove === 'all' && !dualListbox.settings.moveOnSelect) { + saveSelections(dualListbox, 1); + saveSelections(dualListbox, 2); + } else if (dualListbox.settings.preserveSelectionOnMove === 'moved' && !dualListbox.settings.moveOnSelect) { + saveSelections(dualListbox, 1); + } + + dualListbox.element.find('option').each(function(index, item) { + var $item = $(item); + if (!$item.data('filtered1')) { + $item.prop('selected', true); + $item.attr('data-sortindex', dualListbox.sortIndex); + dualListbox.sortIndex++; + } + }); + + refreshSelects(dualListbox); + triggerChangeEvent(dualListbox); + } + + function removeAll(dualListbox) { + if (dualListbox.settings.preserveSelectionOnMove === 'all' && !dualListbox.settings.moveOnSelect) { + saveSelections(dualListbox, 1); + saveSelections(dualListbox, 2); + } else if (dualListbox.settings.preserveSelectionOnMove === 'moved' && !dualListbox.settings.moveOnSelect) { + saveSelections(dualListbox, 2); + } + + dualListbox.element.find('option').each(function(index, item) { + var $item = $(item); + if (!$item.data('filtered2')) { + $item.prop('selected', false); + $item.removeAttr('data-sortindex'); + } + }); + + refreshSelects(dualListbox); + triggerChangeEvent(dualListbox); + } + + function bindEvents(dualListbox) { + dualListbox.elements.form.submit(function(e) { + if (dualListbox.elements.filterInput1.is(':focus')) { + e.preventDefault(); + dualListbox.elements.filterInput1.focusout(); + } else if (dualListbox.elements.filterInput2.is(':focus')) { + e.preventDefault(); + dualListbox.elements.filterInput2.focusout(); + } + }); + + dualListbox.element.on('bootstrapDualListbox.refresh', function(e, mustClearSelections){ + dualListbox.refresh(mustClearSelections); + }); + + dualListbox.elements.filterClear1.on('click', function() { + dualListbox.setNonSelectedFilter('', true); + }); + + dualListbox.elements.filterClear2.on('click', function() { + dualListbox.setSelectedFilter('', true); + }); + + if (dualListbox.settings.eventMoveOverride === false) { + dualListbox.elements.moveButton.on('click', function() { + move(dualListbox); + }); + } + + if (dualListbox.settings.eventMoveAllOverride === false) { + dualListbox.elements.moveAllButton.on('click', function() { + moveAll(dualListbox); + }); + } + + if (dualListbox.settings.eventRemoveOverride === false) { + dualListbox.elements.removeButton.on('click', function() { + remove(dualListbox); + }); + } + + if (dualListbox.settings.eventRemoveAllOverride === false) { + dualListbox.elements.removeAllButton.on('click', function() { + removeAll(dualListbox); + }); + } + + dualListbox.elements.filterInput1.on('change keyup', function() { + filter(dualListbox, 1); + }); + + dualListbox.elements.filterInput2.on('change keyup', function() { + filter(dualListbox, 2); + }); + } + + BootstrapDualListbox.prototype = { + init: function () { + // Add the custom HTML template + this.container = $('' + + '<div class="bootstrap-duallistbox-container row">' + + ' <div class="box1 col-md-6">' + + ' <label></label>' + + ' <span class="info-container">' + + ' <span class="info"></span>' + + ' <button type="button" class="btn btn-sm clear1" style="float:right!important;"></button>' + + ' </span>' + + ' <input class="form-control filter" type="text">' + + ' <div class="btn-group buttons">' + + ' <button type="button" class="btn moveall"></button>' + + ' <button type="button" class="btn move"></button>' + + ' </div>' + + ' <select multiple="multiple"></select>' + + ' </div>' + + ' <div class="box2 col-md-6">' + + ' <label></label>' + + ' <span class="info-container">' + + ' <span class="info"></span>' + + ' <button type="button" class="btn btn-sm clear2" style="float:right!important;"></button>' + + ' </span>' + + ' <input class="form-control filter" type="text">' + + ' <div class="btn-group buttons">' + + ' <button type="button" class="btn remove"></button>' + + ' <button type="button" class="btn removeall"></button>' + + ' </div>' + + ' <select multiple="multiple"></select>' + + ' </div>' + + '</div>') + .insertBefore(this.element); + + // Cache the inner elements + this.elements = { + originalSelect: this.element, + box1: $('.box1', this.container), + box2: $('.box2', this.container), + filterInput1: $('.box1 .filter', this.container), + filterInput2: $('.box2 .filter', this.container), + filterClear1: $('.box1 .clear1', this.container), + filterClear2: $('.box2 .clear2', this.container), + label1: $('.box1 > label', this.container), + label2: $('.box2 > label', this.container), + info1: $('.box1 .info', this.container), + info2: $('.box2 .info', this.container), + select1: $('.box1 select', this.container), + select2: $('.box2 select', this.container), + moveButton: $('.box1 .move', this.container), + removeButton: $('.box2 .remove', this.container), + moveAllButton: $('.box1 .moveall', this.container), + removeAllButton: $('.box2 .removeall', this.container), + form: $($('.box1 .filter', this.container)[0].form) + }; + + // Set select IDs + this.originalSelectName = this.element.attr('name') || ''; + var select1Id = 'bootstrap-duallistbox-nonselected-list_' + this.originalSelectName, + select2Id = 'bootstrap-duallistbox-selected-list_' + this.originalSelectName; + this.elements.select1.attr('id', select1Id); + this.elements.select2.attr('id', select2Id); + this.elements.label1.attr('for', select1Id); + this.elements.label2.attr('for', select2Id); + + // Apply all settings + this.selectedElements = 0; + this.sortIndex = 0; + this.elementCount = 0; + this.setFilterTextClear(this.settings.filterTextClear); + this.setFilterPlaceHolder(this.settings.filterPlaceHolder); + this.setMoveSelectedLabel(this.settings.moveSelectedLabel); + this.setMoveAllLabel(this.settings.moveAllLabel); + this.setRemoveSelectedLabel(this.settings.removeSelectedLabel); + this.setRemoveAllLabel(this.settings.removeAllLabel); + this.setMoveOnSelect(this.settings.moveOnSelect); + this.setMoveOnDoubleClick(this.settings.moveOnDoubleClick); + this.setPreserveSelectionOnMove(this.settings.preserveSelectionOnMove); + this.setSelectedListLabel(this.settings.selectedListLabel); + this.setNonSelectedListLabel(this.settings.nonSelectedListLabel); + this.setHelperSelectNamePostfix(this.settings.helperSelectNamePostfix); + this.setSelectOrMinimalHeight(this.settings.selectorMinimalHeight); + + updateSelectionStates(this); + + this.setShowFilterInputs(this.settings.showFilterInputs); + this.setNonSelectedFilter(this.settings.nonSelectedFilter); + this.setSelectedFilter(this.settings.selectedFilter); + this.setInfoText(this.settings.infoText); + this.setInfoTextFiltered(this.settings.infoTextFiltered); + this.setInfoTextEmpty(this.settings.infoTextEmpty); + this.setFilterOnValues(this.settings.filterOnValues); + this.setSortByInputOrder(this.settings.sortByInputOrder); + this.setEventMoveOverride(this.settings.eventMoveOverride); + this.setEventMoveAllOverride(this.settings.eventMoveAllOverride); + this.setEventRemoveOverride(this.settings.eventRemoveOverride); + this.setEventRemoveAllOverride(this.settings.eventRemoveAllOverride); + this.setBtnClass(this.settings.btnClass); + this.setBtnMoveText(this.settings.btnMoveText); + this.setBtnRemoveText(this.settings.btnRemoveText); + this.setBtnMoveAllText(this.settings.btnMoveAllText); + this.setBtnRemoveAllText(this.settings.btnRemoveAllText); + + // Hide the original select + this.element.hide(); + + bindEvents(this); + refreshSelects(this); + + return this.element; + }, + setFilterTextClear: function(value, refresh) { + this.settings.filterTextClear = value; + this.elements.filterClear1.html(value); + this.elements.filterClear2.html(value); + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setFilterPlaceHolder: function(value, refresh) { + this.settings.filterPlaceHolder = value; + this.elements.filterInput1.attr('placeholder', value); + this.elements.filterInput2.attr('placeholder', value); + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setMoveSelectedLabel: function(value, refresh) { + this.settings.moveSelectedLabel = value; + this.elements.moveButton.attr('title', value); + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setMoveAllLabel: function(value, refresh) { + this.settings.moveAllLabel = value; + this.elements.moveAllButton.attr('title', value); + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setRemoveSelectedLabel: function(value, refresh) { + this.settings.removeSelectedLabel = value; + this.elements.removeButton.attr('title', value); + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setRemoveAllLabel: function(value, refresh) { + this.settings.removeAllLabel = value; + this.elements.removeAllButton.attr('title', value); + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setMoveOnSelect: function(value, refresh) { + if (isBuggyAndroid) { + value = true; + } + this.settings.moveOnSelect = value; + if (this.settings.moveOnSelect) { + this.container.addClass('moveonselect'); + var self = this; + this.elements.select1.on('change', function() { + move(self); + }); + this.elements.select2.on('change', function() { + remove(self); + }); + this.elements.moveButton.detach(); + this.elements.removeButton.detach(); + } else { + this.container.removeClass('moveonselect'); + this.elements.select1.off('change'); + this.elements.select2.off('change'); + this.elements.moveButton.insertAfter(this.elements.moveAllButton); + this.elements.removeButton.insertBefore(this.elements.removeAllButton); + } + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setMoveOnDoubleClick: function(value, refresh) { + if (isBuggyAndroid) { + value = false; + } + this.settings.moveOnDoubleClick = value; + if (this.settings.moveOnDoubleClick) { + this.container.addClass('moveondoubleclick'); + var self = this; + this.elements.select1.on('dblclick', function() { + move(self); + }); + this.elements.select2.on('dblclick', function() { + remove(self); + }); + } else { + this.container.removeClass('moveondoubleclick'); + this.elements.select1.off('dblclick'); + this.elements.select2.off('dblclick'); + } + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setPreserveSelectionOnMove: function(value, refresh) { + // We are forcing to move on select and disabling preserveSelectionOnMove on Android + if (isBuggyAndroid) { + value = false; + } + this.settings.preserveSelectionOnMove = value; + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setSelectedListLabel: function(value, refresh) { + this.settings.selectedListLabel = value; + if (value) { + this.elements.label2.show().html(value); + } else { + this.elements.label2.hide().html(value); + } + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setNonSelectedListLabel: function(value, refresh) { + this.settings.nonSelectedListLabel = value; + if (value) { + this.elements.label1.show().html(value); + } else { + this.elements.label1.hide().html(value); + } + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setHelperSelectNamePostfix: function(value, refresh) { + this.settings.helperSelectNamePostfix = value; + if (value) { + this.elements.select1.attr('name', this.originalSelectName + value + '1'); + this.elements.select2.attr('name', this.originalSelectName + value + '2'); + } else { + this.elements.select1.removeAttr('name'); + this.elements.select2.removeAttr('name'); + } + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setSelectOrMinimalHeight: function(value, refresh) { + this.settings.selectorMinimalHeight = value; + var height = this.element.height(); + if (this.element.height() < value) { + height = value; + } + this.elements.select1.height(height); + this.elements.select2.height(height); + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setShowFilterInputs: function(value, refresh) { + if (!value) { + this.setNonSelectedFilter(''); + this.setSelectedFilter(''); + refreshSelects(this); + this.elements.filterInput1.hide(); + this.elements.filterInput2.hide(); + } else { + this.elements.filterInput1.show(); + this.elements.filterInput2.show(); + } + this.settings.showFilterInputs = value; + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setNonSelectedFilter: function(value, refresh) { + if (this.settings.showFilterInputs) { + this.settings.nonSelectedFilter = value; + this.elements.filterInput1.val(value); + if (refresh) { + refreshSelects(this); + } + return this.element; + } + }, + setSelectedFilter: function(value, refresh) { + if (this.settings.showFilterInputs) { + this.settings.selectedFilter = value; + this.elements.filterInput2.val(value); + if (refresh) { + refreshSelects(this); + } + return this.element; + } + }, + setInfoText: function(value, refresh) { + this.settings.infoText = value; + if (value) { + this.elements.info1.show(); + this.elements.info2.show(); + } else { + this.elements.info1.hide(); + this.elements.info2.hide(); + } + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setInfoTextFiltered: function(value, refresh) { + this.settings.infoTextFiltered = value; + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setInfoTextEmpty: function(value, refresh) { + this.settings.infoTextEmpty = value; + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setFilterOnValues: function(value, refresh) { + this.settings.filterOnValues = value; + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setSortByInputOrder: function(value, refresh){ + this.settings.sortByInputOrder = value; + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setEventMoveOverride: function(value, refresh) { + this.settings.eventMoveOverride = value; + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setEventMoveAllOverride: function(value, refresh) { + this.settings.eventMoveAllOverride = value; + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setEventRemoveOverride: function(value, refresh) { + this.settings.eventRemoveOverride = value; + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setEventRemoveAllOverride: function(value, refresh) { + this.settings.eventRemoveAllOverride = value; + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setBtnClass: function(value, refresh) { + this.settings.btnClass = value; + this.elements.moveButton.attr('class', 'btn move').addClass(value); + this.elements.removeButton.attr('class', 'btn remove').addClass(value); + this.elements.moveAllButton.attr('class', 'btn moveall').addClass(value); + this.elements.removeAllButton.attr('class', 'btn removeall').addClass(value); + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setBtnMoveText: function(value, refresh) { + this.settings.btnMoveText = value; + this.elements.moveButton.html(value); + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setBtnRemoveText: function(value, refresh) { + this.settings.btnMoveText = value; + this.elements.removeButton.html(value); + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setBtnMoveAllText: function(value, refresh) { + this.settings.btnMoveText = value; + this.elements.moveAllButton.html(value); + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + setBtnRemoveAllText: function(value, refresh) { + this.settings.btnMoveText = value; + this.elements.removeAllButton.html(value); + if (refresh) { + refreshSelects(this); + } + return this.element; + }, + getContainer: function() { + return this.container; + }, + refresh: function(mustClearSelections) { + updateSelectionStates(this); + + if (!mustClearSelections) { + saveSelections(this, 1); + saveSelections(this, 2); + } else { + clearSelections(this); + } + + refreshSelects(this); + }, + destroy: function() { + this.container.remove(); + this.element.show(); + $.data(this, 'plugin_' + pluginName, null); + return this.element; + } + }; + + // A really lightweight plugin wrapper around the constructor, + // preventing against multiple instantiations + $.fn[ pluginName ] = function (options) { + var args = arguments; + + // Is the first parameter an object (options), or was omitted, instantiate a new instance of the plugin. + if (options === undefined || typeof options === 'object') { + return this.each(function () { + // If this is not a select + if (!$(this).is('select')) { + $(this).find('select').each(function(index, item) { + // For each nested select, instantiate the Dual List Box + $(item).bootstrapDualListbox(options); + }); + } else if (!$.data(this, 'plugin_' + pluginName)) { + // Only allow the plugin to be instantiated once so we check that the element has no plugin instantiation yet + + // if it has no instance, create a new one, pass options to our plugin constructor, + // and store the plugin instance in the elements jQuery data object. + $.data(this, 'plugin_' + pluginName, new BootstrapDualListbox(this, options)); + } + }); + // If the first parameter is a string and it doesn't start with an underscore or "contains" the `init`-function, + // treat this as a call to a public method. + } else if (typeof options === 'string' && options[0] !== '_' && options !== 'init') { + + // Cache the method call to make it possible to return a value + var returns; + + this.each(function () { + var instance = $.data(this, 'plugin_' + pluginName); + // Tests that there's already a plugin-instance and checks that the requested public method exists + if (instance instanceof BootstrapDualListbox && typeof instance[options] === 'function') { + // Call the method of our plugin instance, and pass it the supplied arguments. + returns = instance[options].apply(instance, Array.prototype.slice.call(args, 1)); + } + }); + + // If the earlier cached method gives a value back return the value, + // otherwise return this to preserve chainability. + return returns !== undefined ? returns : this; + } + + }; + +})); diff --git a/build/resources/main/static/plugins/bootstrap4-duallistbox/jquery.bootstrap-duallistbox.min.js b/build/resources/main/static/plugins/bootstrap4-duallistbox/jquery.bootstrap-duallistbox.min.js new file mode 100644 index 0000000..83ff092 --- /dev/null +++ b/build/resources/main/static/plugins/bootstrap4-duallistbox/jquery.bootstrap-duallistbox.min.js @@ -0,0 +1,10 @@ +/* + * Bootstrap Duallistbox - v4.0.2 + * A responsive dual listbox widget optimized for Twitter Bootstrap. It works on all modern browsers and on touch devices. + * http://www.virtuosoft.eu/code/bootstrap-duallistbox/ + * + * Made by István Ujj-Mészáros + * Under Apache License v2.0 License + */ + +!function(n){"function"==typeof define&&define.amd?define(["jquery"],n):"object"==typeof module&&module.exports?module.exports=function(e,t){return void 0===t&&(t="undefined"!=typeof window?require("jquery"):require("jquery")(e)),n(t),t}:n(jQuery)}(function(a){var i="bootstrapDualListbox",n={filterTextClear:"show all",filterPlaceHolder:"Filter",moveSelectedLabel:"Move selected",moveAllLabel:"Move all",removeSelectedLabel:"Remove selected",removeAllLabel:"Remove all",moveOnSelect:!0,moveOnDoubleClick:!0,preserveSelectionOnMove:!1,selectedListLabel:!1,nonSelectedListLabel:!1,helperSelectNamePostfix:"_helper",selectorMinimalHeight:100,showFilterInputs:!0,nonSelectedFilter:"",selectedFilter:"",infoText:"Showing all {0}",infoTextFiltered:'<span class="badge badge-warning">Filtered</span> {0} from {1}',infoTextEmpty:"Empty list",filterOnValues:!1,sortByInputOrder:!1,eventMoveOverride:!1,eventMoveAllOverride:!1,eventRemoveOverride:!1,eventRemoveAllOverride:!1,btnClass:"btn-outline-secondary",btnMoveText:">",btnRemoveText:"<",btnMoveAllText:">>",btnRemoveAllText:"<<"},s=/android/i.test(navigator.userAgent.toLowerCase());function l(e,t){this.element=a(e),this.settings=a.extend({},n,t),this._defaults=n,this._name=i,this.init()}function t(e){e.element.trigger("change")}function o(s){s.element.find("option").each(function(e,t){var n=a(t);void 0===n.data("original-index")&&n.data("original-index",s.elementCount++),void 0===n.data("_selected")&&n.data("_selected",!1)})}function r(s,i,l){s.element.find("option").each(function(e,t){var n=a(t);n.data("original-index")===i&&(n.prop("selected",l),l?(n.attr("data-sortindex",s.sortIndex),s.sortIndex++):n.removeAttr("data-sortindex"))})}function c(e,n){return console.log(e,n),e.replace(/{(\d+)}/g,function(e,t){return void 0!==n[t]?n[t]:e})}function h(e){if(e.settings.infoText){var t=e.elements.select1.find("option").length,n=e.elements.select2.find("option").length,s=e.element.find("option").length-e.selectedElements,i=e.selectedElements,l="";l=0==s?e.settings.infoTextEmpty:c(t===s?e.settings.infoText:e.settings.infoTextFiltered,[t,s]),e.elements.info1.html(l),e.elements.box1.toggleClass("filtered",!(t===s||0==s)),l=0===i?e.settings.infoTextEmpty:c(n===i?e.settings.infoText:e.settings.infoTextFiltered,[n,i]),e.elements.info2.html(l),e.elements.box2.toggleClass("filtered",!(n===i||0===i))}}function m(s){s.selectedElements=0,s.elements.select1.empty(),s.elements.select2.empty(),s.element.find("option").each(function(e,t){var n=a(t);n.prop("selected")?(s.selectedElements++,s.elements.select2.append(n.clone(!0).prop("selected",n.data("_selected")))):s.elements.select1.append(n.clone(!0).prop("selected",n.data("_selected")))}),s.settings.showFilterInputs&&(e(s,1),e(s,2)),h(s)}function e(i,l){if(i.settings.showFilterInputs){d(i,l),i.elements["select"+l].empty().scrollTop(0);var o,r=i.element.find("option"),e=i.element;e=1===l?r.not(":selected"):e.find("option:selected");try{o=new RegExp(a.trim(i.elements["filterInput"+l].val()),"gi")}catch(e){o=new RegExp("/a^/","gi")}e.each(function(e,t){var n=a(t),s=!0;(t.text.match(o)||i.settings.filterOnValues&&n.attr("value").match(o))&&(s=!1,i.elements["select"+l].append(n.clone(!0).prop("selected",n.data("_selected")))),r.eq(n.data("original-index")).data("filtered"+l,s)}),h(i)}}function d(e,t){var s=e.element.find("option");e.elements["select"+t].find("option").each(function(e,t){var n=a(t);s.eq(n.data("original-index")).data("_selected",n.prop("selected"))})}function u(e){var t=e.children("option");t.sort(function(e,t){var n=parseInt(e.getAttribute("data-sortindex")),s=parseInt(t.getAttribute("data-sortindex"));return s<n?1:n<s?-1:0}),t.detach().appendTo(e)}function v(e,t){e.find("option").sort(function(e,t){return a(e).data("original-index")>a(t).data("original-index")?1:-1}).appendTo(e),m(t)}function f(s){"all"!==s.settings.preserveSelectionOnMove||s.settings.moveOnSelect?"moved"!==s.settings.preserveSelectionOnMove||s.settings.moveOnSelect||d(s,1):(d(s,1),d(s,2)),s.elements.select1.find("option:selected").each(function(e,t){var n=a(t);n.data("filtered1")||r(s,n.data("original-index"),!0)}),m(s),t(s),s.settings.sortByInputOrder?u(s.elements.select2):v(s.elements.select2,s)}function p(s){"all"!==s.settings.preserveSelectionOnMove||s.settings.moveOnSelect?"moved"!==s.settings.preserveSelectionOnMove||s.settings.moveOnSelect||d(s,2):(d(s,1),d(s,2)),s.elements.select2.find("option:selected").each(function(e,t){var n=a(t);n.data("filtered2")||r(s,n.data("original-index"),!1)}),m(s),t(s),v(s.elements.select1,s),s.settings.sortByInputOrder&&u(s.elements.select2)}function g(n){n.elements.form.submit(function(e){n.elements.filterInput1.is(":focus")?(e.preventDefault(),n.elements.filterInput1.focusout()):n.elements.filterInput2.is(":focus")&&(e.preventDefault(),n.elements.filterInput2.focusout())}),n.element.on("bootstrapDualListbox.refresh",function(e,t){n.refresh(t)}),n.elements.filterClear1.on("click",function(){n.setNonSelectedFilter("",!0)}),n.elements.filterClear2.on("click",function(){n.setSelectedFilter("",!0)}),!1===n.settings.eventMoveOverride&&n.elements.moveButton.on("click",function(){f(n)}),!1===n.settings.eventMoveAllOverride&&n.elements.moveAllButton.on("click",function(){var s;"all"!==(s=n).settings.preserveSelectionOnMove||s.settings.moveOnSelect?"moved"!==s.settings.preserveSelectionOnMove||s.settings.moveOnSelect||d(s,1):(d(s,1),d(s,2)),s.element.find("option").each(function(e,t){var n=a(t);n.data("filtered1")||(n.prop("selected",!0),n.attr("data-sortindex",s.sortIndex),s.sortIndex++)}),m(s),t(s)}),!1===n.settings.eventRemoveOverride&&n.elements.removeButton.on("click",function(){p(n)}),!1===n.settings.eventRemoveAllOverride&&n.elements.removeAllButton.on("click",function(){var e;"all"!==(e=n).settings.preserveSelectionOnMove||e.settings.moveOnSelect?"moved"!==e.settings.preserveSelectionOnMove||e.settings.moveOnSelect||d(e,2):(d(e,1),d(e,2)),e.element.find("option").each(function(e,t){var n=a(t);n.data("filtered2")||(n.prop("selected",!1),n.removeAttr("data-sortindex"))}),m(e),t(e)}),n.elements.filterInput1.on("change keyup",function(){e(n,1)}),n.elements.filterInput2.on("change keyup",function(){e(n,2)})}l.prototype={init:function(){this.container=a('<div class="bootstrap-duallistbox-container row"> <div class="box1 col-md-6"> <label></label> <span class="info-container"> <span class="info"></span> <button type="button" class="btn btn-sm clear1" style="float:right!important;"></button> </span> <input class="form-control filter" type="text"> <div class="btn-group buttons"> <button type="button" class="btn moveall"></button> <button type="button" class="btn move"></button> </div> <select multiple="multiple"></select> </div> <div class="box2 col-md-6"> <label></label> <span class="info-container"> <span class="info"></span> <button type="button" class="btn btn-sm clear2" style="float:right!important;"></button> </span> <input class="form-control filter" type="text"> <div class="btn-group buttons"> <button type="button" class="btn remove"></button> <button type="button" class="btn removeall"></button> </div> <select multiple="multiple"></select> </div></div>').insertBefore(this.element),this.elements={originalSelect:this.element,box1:a(".box1",this.container),box2:a(".box2",this.container),filterInput1:a(".box1 .filter",this.container),filterInput2:a(".box2 .filter",this.container),filterClear1:a(".box1 .clear1",this.container),filterClear2:a(".box2 .clear2",this.container),label1:a(".box1 > label",this.container),label2:a(".box2 > label",this.container),info1:a(".box1 .info",this.container),info2:a(".box2 .info",this.container),select1:a(".box1 select",this.container),select2:a(".box2 select",this.container),moveButton:a(".box1 .move",this.container),removeButton:a(".box2 .remove",this.container),moveAllButton:a(".box1 .moveall",this.container),removeAllButton:a(".box2 .removeall",this.container),form:a(a(".box1 .filter",this.container)[0].form)},this.originalSelectName=this.element.attr("name")||"";var e="bootstrap-duallistbox-nonselected-list_"+this.originalSelectName,t="bootstrap-duallistbox-selected-list_"+this.originalSelectName;return this.elements.select1.attr("id",e),this.elements.select2.attr("id",t),this.elements.label1.attr("for",e),this.elements.label2.attr("for",t),this.selectedElements=0,this.sortIndex=0,this.elementCount=0,this.setFilterTextClear(this.settings.filterTextClear),this.setFilterPlaceHolder(this.settings.filterPlaceHolder),this.setMoveSelectedLabel(this.settings.moveSelectedLabel),this.setMoveAllLabel(this.settings.moveAllLabel),this.setRemoveSelectedLabel(this.settings.removeSelectedLabel),this.setRemoveAllLabel(this.settings.removeAllLabel),this.setMoveOnSelect(this.settings.moveOnSelect),this.setMoveOnDoubleClick(this.settings.moveOnDoubleClick),this.setPreserveSelectionOnMove(this.settings.preserveSelectionOnMove),this.setSelectedListLabel(this.settings.selectedListLabel),this.setNonSelectedListLabel(this.settings.nonSelectedListLabel),this.setHelperSelectNamePostfix(this.settings.helperSelectNamePostfix),this.setSelectOrMinimalHeight(this.settings.selectorMinimalHeight),o(this),this.setShowFilterInputs(this.settings.showFilterInputs),this.setNonSelectedFilter(this.settings.nonSelectedFilter),this.setSelectedFilter(this.settings.selectedFilter),this.setInfoText(this.settings.infoText),this.setInfoTextFiltered(this.settings.infoTextFiltered),this.setInfoTextEmpty(this.settings.infoTextEmpty),this.setFilterOnValues(this.settings.filterOnValues),this.setSortByInputOrder(this.settings.sortByInputOrder),this.setEventMoveOverride(this.settings.eventMoveOverride),this.setEventMoveAllOverride(this.settings.eventMoveAllOverride),this.setEventRemoveOverride(this.settings.eventRemoveOverride),this.setEventRemoveAllOverride(this.settings.eventRemoveAllOverride),this.setBtnClass(this.settings.btnClass),this.setBtnMoveText(this.settings.btnMoveText),this.setBtnRemoveText(this.settings.btnRemoveText),this.setBtnMoveAllText(this.settings.btnMoveAllText),this.setBtnRemoveAllText(this.settings.btnRemoveAllText),this.element.hide(),g(this),m(this),this.element},setFilterTextClear:function(e,t){return this.settings.filterTextClear=e,this.elements.filterClear1.html(e),this.elements.filterClear2.html(e),t&&m(this),this.element},setFilterPlaceHolder:function(e,t){return this.settings.filterPlaceHolder=e,this.elements.filterInput1.attr("placeholder",e),this.elements.filterInput2.attr("placeholder",e),t&&m(this),this.element},setMoveSelectedLabel:function(e,t){return this.settings.moveSelectedLabel=e,this.elements.moveButton.attr("title",e),t&&m(this),this.element},setMoveAllLabel:function(e,t){return this.settings.moveAllLabel=e,this.elements.moveAllButton.attr("title",e),t&&m(this),this.element},setRemoveSelectedLabel:function(e,t){return this.settings.removeSelectedLabel=e,this.elements.removeButton.attr("title",e),t&&m(this),this.element},setRemoveAllLabel:function(e,t){return this.settings.removeAllLabel=e,this.elements.removeAllButton.attr("title",e),t&&m(this),this.element},setMoveOnSelect:function(e,t){if(s&&(e=!0),this.settings.moveOnSelect=e,this.settings.moveOnSelect){this.container.addClass("moveonselect");var n=this;this.elements.select1.on("change",function(){f(n)}),this.elements.select2.on("change",function(){p(n)}),this.elements.moveButton.detach(),this.elements.removeButton.detach()}else this.container.removeClass("moveonselect"),this.elements.select1.off("change"),this.elements.select2.off("change"),this.elements.moveButton.insertAfter(this.elements.moveAllButton),this.elements.removeButton.insertBefore(this.elements.removeAllButton);return t&&m(this),this.element},setMoveOnDoubleClick:function(e,t){if(s&&(e=!1),this.settings.moveOnDoubleClick=e,this.settings.moveOnDoubleClick){this.container.addClass("moveondoubleclick");var n=this;this.elements.select1.on("dblclick",function(){f(n)}),this.elements.select2.on("dblclick",function(){p(n)})}else this.container.removeClass("moveondoubleclick"),this.elements.select1.off("dblclick"),this.elements.select2.off("dblclick");return t&&m(this),this.element},setPreserveSelectionOnMove:function(e,t){return s&&(e=!1),this.settings.preserveSelectionOnMove=e,t&&m(this),this.element},setSelectedListLabel:function(e,t){return(this.settings.selectedListLabel=e)?this.elements.label2.show().html(e):this.elements.label2.hide().html(e),t&&m(this),this.element},setNonSelectedListLabel:function(e,t){return(this.settings.nonSelectedListLabel=e)?this.elements.label1.show().html(e):this.elements.label1.hide().html(e),t&&m(this),this.element},setHelperSelectNamePostfix:function(e,t){return(this.settings.helperSelectNamePostfix=e)?(this.elements.select1.attr("name",this.originalSelectName+e+"1"),this.elements.select2.attr("name",this.originalSelectName+e+"2")):(this.elements.select1.removeAttr("name"),this.elements.select2.removeAttr("name")),t&&m(this),this.element},setSelectOrMinimalHeight:function(e,t){this.settings.selectorMinimalHeight=e;var n=this.element.height();return this.element.height()<e&&(n=e),this.elements.select1.height(n),this.elements.select2.height(n),t&&m(this),this.element},setShowFilterInputs:function(e,t){return e?(this.elements.filterInput1.show(),this.elements.filterInput2.show()):(this.setNonSelectedFilter(""),this.setSelectedFilter(""),m(this),this.elements.filterInput1.hide(),this.elements.filterInput2.hide()),this.settings.showFilterInputs=e,t&&m(this),this.element},setNonSelectedFilter:function(e,t){if(this.settings.showFilterInputs)return this.settings.nonSelectedFilter=e,this.elements.filterInput1.val(e),t&&m(this),this.element},setSelectedFilter:function(e,t){if(this.settings.showFilterInputs)return this.settings.selectedFilter=e,this.elements.filterInput2.val(e),t&&m(this),this.element},setInfoText:function(e,t){return(this.settings.infoText=e)?(this.elements.info1.show(),this.elements.info2.show()):(this.elements.info1.hide(),this.elements.info2.hide()),t&&m(this),this.element},setInfoTextFiltered:function(e,t){return this.settings.infoTextFiltered=e,t&&m(this),this.element},setInfoTextEmpty:function(e,t){return this.settings.infoTextEmpty=e,t&&m(this),this.element},setFilterOnValues:function(e,t){return this.settings.filterOnValues=e,t&&m(this),this.element},setSortByInputOrder:function(e,t){return this.settings.sortByInputOrder=e,t&&m(this),this.element},setEventMoveOverride:function(e,t){return this.settings.eventMoveOverride=e,t&&m(this),this.element},setEventMoveAllOverride:function(e,t){return this.settings.eventMoveAllOverride=e,t&&m(this),this.element},setEventRemoveOverride:function(e,t){return this.settings.eventRemoveOverride=e,t&&m(this),this.element},setEventRemoveAllOverride:function(e,t){return this.settings.eventRemoveAllOverride=e,t&&m(this),this.element},setBtnClass:function(e,t){return this.settings.btnClass=e,this.elements.moveButton.attr("class","btn move").addClass(e),this.elements.removeButton.attr("class","btn remove").addClass(e),this.elements.moveAllButton.attr("class","btn moveall").addClass(e),this.elements.removeAllButton.attr("class","btn removeall").addClass(e),t&&m(this),this.element},setBtnMoveText:function(e,t){return this.settings.btnMoveText=e,this.elements.moveButton.html(e),t&&m(this),this.element},setBtnRemoveText:function(e,t){return this.settings.btnMoveText=e,this.elements.removeButton.html(e),t&&m(this),this.element},setBtnMoveAllText:function(e,t){return this.settings.btnMoveText=e,this.elements.moveAllButton.html(e),t&&m(this),this.element},setBtnRemoveAllText:function(e,t){return this.settings.btnMoveText=e,this.elements.removeAllButton.html(e),t&&m(this),this.element},getContainer:function(){return this.container},refresh:function(e){var t;o(this),e?(t=this).elements.select1.find("option").each(function(){t.element.find("option").data("_selected",!1)}):(d(this,1),d(this,2)),m(this)},destroy:function(){return this.container.remove(),this.element.show(),a.data(this,"plugin_"+i,null),this.element}},a.fn[i]=function(n){var t,s=arguments;return void 0===n||"object"==typeof n?this.each(function(){a(this).is("select")?a.data(this,"plugin_"+i)||a.data(this,"plugin_"+i,new l(this,n)):a(this).find("select").each(function(e,t){a(t).bootstrapDualListbox(n)})}):"string"==typeof n&&"_"!==n[0]&&"init"!==n?(this.each(function(){var e=a.data(this,"plugin_"+i);e instanceof l&&"function"==typeof e[n]&&(t=e[n].apply(e,Array.prototype.slice.call(s,1)))}),void 0!==t?t:this):void 0}});
\ No newline at end of file |