@kamranbaylarov/one-select 1.2.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -2
- package/js/one-select.js +15 -3
- package/js/one-select.min.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 🎯 OneSelect - jQuery Multi-Select Dropdown Component
|
|
2
2
|
|
|
3
|
-
**Version:** 1.2.
|
|
3
|
+
**Version:** 1.2.1 | **Author:** Kamran Baylarov
|
|
4
4
|
|
|
5
5
|
A powerful, flexible, and feature-rich multi-select dropdown component for jQuery.
|
|
6
6
|
|
|
@@ -38,6 +38,7 @@ OneSelect is a powerful **jQuery-based** plugin that provides multi-select funct
|
|
|
38
38
|
- 📱 **Responsive** - Works on all devices
|
|
39
39
|
- 🌐 **Data Attributes** - Configure via HTML attributes
|
|
40
40
|
- 🔄 **Real-time Sync** - `data-ones-value` attribute updates automatically
|
|
41
|
+
- 🔗 **Label-Checkbox Binding** - Native HTML label-for-id connection for proper accessibility
|
|
41
42
|
- 🎪 **Multiple Instances** - Independent selects on same page
|
|
42
43
|
- 🌪 **Click Outside** - Close dropdown when clicking outside (default: true)
|
|
43
44
|
- 📍 **Smart Positioning** - Dropdown positioned with `position: fixed` using viewport coordinates
|
|
@@ -813,7 +814,10 @@ Main CSS classes with `cms-` prefix:
|
|
|
813
814
|
</div>
|
|
814
815
|
<div class="cms-options-container">
|
|
815
816
|
<div class="cms-option select-all">...</div>
|
|
816
|
-
<div class="cms-option"
|
|
817
|
+
<div class="cms-option">
|
|
818
|
+
<input type="checkbox" id="cms-checkbox-ones-abc123-value-xy7z9q2" value="Apple">
|
|
819
|
+
<label for="cms-checkbox-ones-abc123-value-xy7z9q2">Apple</label>
|
|
820
|
+
</div>
|
|
817
821
|
</div>
|
|
818
822
|
<div class="cms-buttons">
|
|
819
823
|
<button class="cms-btn cms-btn-ok">OK</button>
|
|
@@ -824,6 +828,34 @@ Main CSS classes with `cms-` prefix:
|
|
|
824
828
|
|
|
825
829
|
**Note:** The dropdown is positioned using `position: fixed` with viewport coordinates (`getBoundingClientRect()`). This ensures it stays correctly positioned even when parent elements scroll.
|
|
826
830
|
|
|
831
|
+
### Accessibility & Label-Checkbox Binding
|
|
832
|
+
|
|
833
|
+
**Native HTML Label-Checkbox Connection:**
|
|
834
|
+
|
|
835
|
+
Each checkbox is automatically assigned a unique ID, and the label is linked to it using the native HTML `for` attribute:
|
|
836
|
+
|
|
837
|
+
```html
|
|
838
|
+
<div class="cms-option">
|
|
839
|
+
<input type="checkbox" id="cms-checkbox-ones-abc123-value-xy7z9q2" value="Apple">
|
|
840
|
+
<label for="cms-checkbox-ones-abc123-value-xy7z9q2">Apple</label>
|
|
841
|
+
</div>
|
|
842
|
+
```
|
|
843
|
+
|
|
844
|
+
**Benefits:**
|
|
845
|
+
- ✅ **Proper Accessibility**: Screen readers correctly announce checkbox-label pairs
|
|
846
|
+
- ✅ **Native Browser Behavior**: Clicking the label toggles the checkbox automatically
|
|
847
|
+
- ✅ **No ID Conflicts**: Each checkbox gets a unique ID using instance ID + value + random suffix
|
|
848
|
+
- ✅ **Change Events**: Native `change` event fires when label is clicked
|
|
849
|
+
- ✅ **Multiple Instances**: Different OneSelect instances don't conflict with each other
|
|
850
|
+
|
|
851
|
+
**ID Format:**
|
|
852
|
+
```
|
|
853
|
+
cms-checkbox-{instanceId}-{sanitizedValue}-{random}
|
|
854
|
+
```
|
|
855
|
+
|
|
856
|
+
Example: `cms-checkbox-ones-abc123-apple-xy7z9q2`
|
|
857
|
+
|
|
858
|
+
|
|
827
859
|
### Custom CSS Example
|
|
828
860
|
|
|
829
861
|
```css
|
package/js/one-select.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* OneSelect - jQuery Multi-Select Dropdown Plugin
|
|
3
|
-
* Version: 1.2.
|
|
3
|
+
* Version: 1.2.1
|
|
4
4
|
* https://github.com/your-repo/one-select
|
|
5
5
|
*
|
|
6
6
|
* Copyright 2026
|
|
@@ -447,6 +447,15 @@
|
|
|
447
447
|
this.updateSelectAllState();
|
|
448
448
|
},
|
|
449
449
|
|
|
450
|
+
/**
|
|
451
|
+
* Generate unique checkbox ID
|
|
452
|
+
* @param {String} value - Option value
|
|
453
|
+
* @returns {String} Unique ID
|
|
454
|
+
*/
|
|
455
|
+
generateCheckboxId: function (value) {
|
|
456
|
+
return 'cms-checkbox-' + this.instanceId + '-' + String(value).replace(/[^a-zA-Z0-9]/g, '-') + '-' + Math.random().toString(36).substr(2, 9);
|
|
457
|
+
},
|
|
458
|
+
|
|
450
459
|
createOption: function (value, label, checked) {
|
|
451
460
|
var optionClass = 'cms-option';
|
|
452
461
|
if (!this.settings.showCheckbox) {
|
|
@@ -457,10 +466,13 @@
|
|
|
457
466
|
optionClass += ' selected';
|
|
458
467
|
}
|
|
459
468
|
|
|
469
|
+
// Generate unique checkbox ID
|
|
470
|
+
var checkboxId = this.generateCheckboxId(value);
|
|
471
|
+
|
|
460
472
|
var option = $('<div class="' + optionClass + '" data-value="' + this.htmlEncode(value) + '"></div>');
|
|
461
|
-
var checkbox = $('<input type="checkbox" value="' + this.htmlEncode(value) + '"' +
|
|
473
|
+
var checkbox = $('<input type="checkbox" id="' + this.htmlEncode(checkboxId) + '" value="' + this.htmlEncode(value) + '"' +
|
|
462
474
|
(checked ? ' checked' : '') + '>');
|
|
463
|
-
var labelEl = $('<label>' + label + '</label>');
|
|
475
|
+
var labelEl = $('<label for="' + this.htmlEncode(checkboxId) + '">' + label + '</label>');
|
|
464
476
|
|
|
465
477
|
option.append(checkbox);
|
|
466
478
|
option.append(labelEl);
|
package/js/one-select.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(n=>{"function"==typeof define&&define.amd?define(["jquery"],n):"object"==typeof module&&module.exports?module.exports=function(t,e){return void 0===e&&(e="undefined"!=typeof window?require("jquery"):require("jquery")(t)),n(e),e}:n(window.jQuery||window.$)})(function(r){var n={},a="oneSelect";function o(n,s){var i;return function(){var t=this,e=arguments;clearTimeout(i),i=setTimeout(function(){n.apply(t,e)},s)}}function l(t,e){this.element=t,this.$element=r(t),this.instanceId="ones-"+Math.random().toString(36).substr(2,9),t=this.readDataAttributes(),this.settings=r.extend({},l.defaults,e,t),this.init()}l.defaults={placeholder:"Select options...",selectAllText:"Select All",okText:"OK",cancelText:"Cancel",data:[],value:null,showCheckbox:!0,showBadges:!1,showBadgesExternal:null,showSearch:!1,searchPlaceholder:"Search...",searchUrl:null,searchDebounceDelay:300,closeOnScroll:!1,closeOnOutside:!0,submitForm:!1,submitOnOutside:!1,formId:null,name:null,multiple:!0,ajax:null,autoLoad:!0,beforeLoad:null,afterLoad:null,onLoadError:null,onChange:null,onSelect:null,onOk:null,onCancel:null,infinityScroll:!1,onInfinityScroll:null,loading:!1},l.prototype={readDataAttributes:function(){var t=this,i={},e=(r.each({"ones-placeholder":"placeholder","ones-select-all-text":"selectAllText","ones-ok-text":"okText","ones-cancel-text":"cancelText","ones-data":"data","ones-value":"value","ones-name":"name","ones-multiple":"multiple","ones-show-checkbox":"showCheckbox","ones-show-badges":"showBadges","ones-show-badges-external":"showBadgesExternal","ones-show-search":"showSearch","ones-search-placeholder":"searchPlaceholder","ones-search-url":"searchUrl","ones-search-debounce-delay":"searchDebounceDelay","ones-close-on-scroll":"closeOnScroll","ones-close-on-outside":"closeOnOutside","ones-submit-form":"submitForm","ones-submit-on-outside":"submitOnOutside","ones-form-id":"formId","ones-auto-load":"autoLoad","ones-infinity-scroll":"infinityScroll"},function(e,n){var s=t.$element.data(e);if(void 0!==s)if("data"===n||"value"===n)if("string"==typeof s)try{i[n]=JSON.parse(s)}catch(t){console.warn("OneSelect: Invalid JSON for "+e,s),i[n]=s}else i[n]=s;else i[n]="multiple"===n||"showCheckbox"===n||"showBadges"===n||"showSearch"===n||"closeOnScroll"===n||"closeOnOutside"===n||"submitForm"===n||"submitOnOutside"===n||"autoLoad"===n||"infinityScroll"===n?"string"==typeof s?"true"===s||"1"===s:!!s:"searchDebounceDelay"===n?"string"==typeof s?parseInt(s,10)||300:s||300:s}),this.$element.data("ones-ajax"));return e&&("string"==typeof e?i.ajax={url:e,method:"GET"}:"object"==typeof e&&(i.ajax=e)),i},init:function(){var e;null!=(n[this.instanceId]=this).settings.value?(Array.isArray(this.settings.value)||(this.settings.value=[this.settings.value]),e={},this.settings.value=this.settings.value.filter(function(t){return null!=t&&(t=String(t).trim(),!e[t])&&(e[t]=!0)})):this.settings.value=[],this.updateDataValueAttribute(),this.currentPage=1,this.hasNextPage=!1,this.wrapper=this.createWrapper(),this.trigger=this.createTrigger(),this.dropdown=this.createDropdown(),this.searchInput=this.createSearchInput(),this.optionsContainer=this.createOptionsContainer(),this.preloader=this.createPreloader(),this.buttons=this.createButtons(),this.build(),this.attachEvents(),this.settings.ajax&&this.settings.autoLoad&&this.loadData()},build:function(){this.settings.showSearch&&this.dropdown.append(this.searchInput),this.dropdown.append(this.optionsContainer),this.dropdown.append(this.preloader),this.dropdown.append(this.buttons),this.wrapper.append(this.trigger),this.$element.append(this.wrapper),r("body").append(this.dropdown),this.renderOptions(),this.updateTriggerText(),this.updateHiddenInputs()},updateHiddenInputs:function(){var n,s,t,e;this.settings.name&&(t=null,(n=(t=this.settings.formId?r("#"+this.settings.formId):this.$element.closest("form")).length?t:this.wrapper).find('input.cms-hidden-input[data-cms-input="'+this.settings.name+'"]').remove(),s=this.settings.name,this.settings.multiple&&-1===s.indexOf("[")&&(s+="[]"),t=this.getSelectedValues(),Array.isArray(t)&&(t=t.filter(function(t){return null!=t&&""!==String(t).trim()})),this.settings.multiple?0===t.length?(e=r('<input type="hidden" class="cms-hidden-input">').attr("name",this.settings.name).attr("value","").attr("data-cms-input",this.settings.name),n.append(e)):r.each(t,function(t,e){e=r('<input type="hidden" class="cms-hidden-input">').attr("name",s).attr("value",e).attr("data-cms-input",this.settings.name).attr("data-cms-value",e);n.append(e)}.bind(this)):(t=0<t.length?t[0]:"",e=r('<input type="hidden" class="cms-hidden-input">').attr("name",s).attr("value",t).attr("data-cms-input",this.settings.name),n.append(e)))},createWrapper:function(){return r('<div class="cms-wrapper"></div>')},createTrigger:function(){return r('<div class="cms-trigger"><span class="cms-selected-text cms-placeholder">'+this.settings.placeholder+"</span></div>")},createDropdown:function(){return r('<div class="cms-dropdown"></div>')},createSearchInput:function(){return r('<div class="cms-search-wrapper"><input type="text" class="cms-search-input" placeholder="'+this.settings.searchPlaceholder+'" /></div>')},createOptionsContainer:function(){return r('<div class="cms-options-container"></div>')},createPreloader:function(){return r('<div class="cms-infinity-preloader"><div class="cms-spinner"></div></div>')},createButtons:function(){var t=r('<div class="cms-buttons"></div>');return this.okBtn=r('<button class="cms-btn cms-btn-ok">'+this.settings.okText+"</button>"),this.cancelBtn=r('<button class="cms-btn cms-btn-cancel">'+this.settings.cancelText+"</button>"),t.append(this.okBtn),t.append(this.cancelBtn),t},renderOptions:function(){this.optionsContainer.empty();var t=this.createOption("select-all",this.settings.selectAllText,!1),s=(this.optionsContainer.append(t),this);r.each(this.settings.data,function(t,e){var n=s.isValueSelected(t),t=s.createOption(t,e,n);s.optionsContainer.append(t)}),this.updateSelectAllState()},htmlEncode:function(t){return String(t).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},isValueSelected:function(t){var e;return!!this.settings.value&&(Array.isArray(this.settings.value)?(e=String(t).trim(),this.settings.value.some(function(t){return String(t).trim()===e})):String(this.settings.value).trim()===String(t).trim())},updateDataValueAttribute:function(){this.settings.value&&0!==this.settings.value.length?this.$element.attr("data-ones-value",JSON.stringify(this.settings.value)):this.$element.removeAttr("data-ones-value")},appendOptions:function(t){var s=this;r.each(t,function(t,e){var n;0<s.optionsContainer.find('.cms-option[data-value="'+s.htmlEncode(t)+'"]').length||(n=s.isValueSelected(t),t=s.createOption(t,e,n),s.optionsContainer.append(t))}),this.updateSelectAllState()},createOption:function(t,e,n){var s="cms-option",s=(this.settings.showCheckbox||(s+=" cms-hide-checkbox"),n&&"select-all"!==t&&(s+=" selected"),r('<div class="'+s+'" data-value="'+this.htmlEncode(t)+'"></div>')),t=r('<input type="checkbox" value="'+this.htmlEncode(t)+'"'+(n?" checked":"")+">"),n=r("<label>"+e+"</label>");return s.append(t),s.append(n),s},filterOptions:function(e){var t=this.optionsContainer.find('.cms-option:not([data-value="select-all"])');""===e?t.show():t.each(function(){var t=r(this);-1!==t.find("label").text().toLowerCase().indexOf(e)?t.show():t.hide()})},performAjaxSearch:function(t){var s=this;this.optionsContainer.addClass("cms-loading"),r.ajax({url:this.settings.searchUrl,method:"GET",data:{q:t},dataType:"json",success:function(t){var e=t;"object"==typeof t&&t.data?e=t.data:"object"==typeof t&&t.results&&(e=t.results),s.updateSearchResults(e||[]),s.optionsContainer.removeClass("cms-loading")},error:function(t,e,n){console.error("OneSelect: Search error",n),s.optionsContainer.removeClass("cms-loading"),s.settings.onLoadError&&s.settings.onLoadError.call(s,t,e,n)}})},updateSearchResults:function(t){this.optionsContainer.find('.cms-option:not([data-value="select-all"])').remove();var s=this;r.each(t,function(t,e){var n=s.isValueSelected(t),t=s.createOption(t,e,n);s.optionsContainer.append(t)}),this.updateSelectAllState()},attachEvents:function(){var e,i=this;function a(t){return t===document?"document":t===document.documentElement?"html":t===document.body?"body":t.tagName+"-"+(t.id||t.className||Math.random().toString(36).substr(2,9))}this.trigger.on("click",function(t){t.stopPropagation(),i.toggle()}),this.settings.showSearch&&(this.settings.searchUrl?(e=o(function(t){i.performAjaxSearch(t)},this.settings.searchDebounceDelay),this.searchInput.find(".cms-search-input").on("keyup",function(){var t=r(this).val();0<t.length?e(t):i.filterOptions("")})):this.searchInput.find(".cms-search-input").on("keyup",function(){var t=r(this).val().toLowerCase();i.filterOptions(t)})),r(window).on("resize.cms",function(){i.wrapper.hasClass("open")&&i.updateDropdownPosition()}),this.settings.closeOnScroll?r(window).on("scroll.cms",function(){i.wrapper.hasClass("open")&&i.close()}):r(window).on("scroll.cms",function(){i.wrapper.hasClass("open")&&i.updateDropdownPosition()}),r(document).on("wheel.onescroll",function(t){i.wrapper.hasClass("open")&&t.originalEvent&&0<Math.abs(t.originalEvent.deltaX)&&i.close()}),i._detectHorizontalScroll=function(){if(i.wrapper.hasClass("open"))if(window.scrollX!==i._lastWindowScrollX&&(i._lastWindowScrollX=window.scrollX,0<i._lastWindowScrollX))i.close();else for(var t=document.querySelectorAll("*"),e=0;e<t.length;e++){var n=t[e],s=a(n);if(void 0!==i._elementScrollPositions[s])if(n.scrollLeft!==i._elementScrollPositions[s])return void i.close()}},i._elementScrollPositions={},i._lastWindowScrollX=window.scrollX;var n,s=i.open.bind(i),t=(i.open=function(){i._elementScrollPositions={},i._lastWindowScrollX=window.scrollX;for(var t=document.querySelectorAll("*"),e=0;e<t.length;e++){var n=t[e];(n.scrollWidth>n.clientWidth||n.scrollHeight>n.clientHeight)&&(i._elementScrollPositions[a(n)]=n.scrollLeft)}i._horizontalScrollInterval&&clearInterval(i._horizontalScrollInterval),i._horizontalScrollInterval=setInterval(function(){i._detectHorizontalScroll()},50),s()},i.close.bind(i));i.close=function(){i._horizontalScrollInterval&&(clearInterval(i._horizontalScrollInterval),i._horizontalScrollInterval=null),i._elementScrollPositions={},t()},r(window).on("click.ones",function(t){!i.settings.closeOnOutside||!i.wrapper.hasClass("open")||0<(t=r(t.target)).closest(".cms-wrapper").length||0<t.closest(".cms-dropdown").length||(i.settings.submitOnOutside&&(i.updateTriggerText(),i.settings.onOk&&i.settings.onOk.call(i,i.getSelectedValues(),i.getSelectedLabels()),i.submitForm()),i.close())}),this.optionsContainer.on("click",".cms-option",function(t){var e=r(t.target);e.is('input[type="checkbox"]')||0<e.closest("label").length||0<e.closest("button").length||(t.preventDefault(),t.stopPropagation(),(e=r(this).find('input[type="checkbox"]')).prop("checked",!e.prop("checked")).trigger("change"))}),this.optionsContainer.on("change",'input[type="checkbox"]',function(t){t.stopPropagation();var t=r(this),e=t.closest(".cms-option");"select-all"===e.data("value")?i.handleSelectAll(t.prop("checked")):i.handleOptionChange(e)}),this.okBtn.on("click",function(t){t.stopPropagation(),i.handleOk()}),this.cancelBtn.on("click",function(t){t.stopPropagation(),i.handleCancel()}),this.settings.infinityScroll&&this.settings.ajax&&this.settings.ajax.url&&(n=o(function(){!i.hasNextPage||i.settings.loading||i.loadNextPage()},200),this.optionsContainer.on("scroll",function(){var t=r(this);t.scrollTop()+t.innerHeight()>=t[0].scrollHeight-50&&n()})),this.settings.infinityScroll&&this.settings.onInfinityScroll&&!this.settings.ajax&&console.warn("OneSelect: infinityScroll requires ajax configuration. onInfinityScroll callback is deprecated.")},handleOptionChange:function(t){var e=t.data("value");t.find('input[type="checkbox"]').prop("checked")?this.select(e):this.unselect(e),this.settings.onChange&&this.settings.onChange.call(this,this.getSelectedValues(),this.getSelectedLabels()),this.settings.onSelect&&this.settings.onSelect.call(this,this.getSelectedValues())},handleSelectAll:function(n){var s=this;n||Array.isArray(this.settings.value)&&(this.settings.value=[]),this.optionsContainer.find('.cms-option:not([data-value="select-all"])').each(function(){var t,e=r(this);e.find('input[type="checkbox"]').prop("checked",n),n?(e.addClass("selected"),t=e.find('input[type="checkbox"]').val(),Array.isArray(s.settings.value)&&!s.isValueSelected(t)&&s.settings.value.push(t)):e.removeClass("selected")}),this.updateSelectAllState(),this.updateTriggerText(),this.updateHiddenInputs(),this.updateDataValueAttribute()},updateSelectAllState:function(){var t=this.optionsContainer.find('.cms-option:not([data-value="select-all"]) input[type="checkbox"]'),e=t.filter(":checked"),t=t.length,e=e.length,n=this.optionsContainer.find('.cms-option[data-value="select-all"] input[type="checkbox"]');n.prop("indeterminate",!1),n.prop("checked",!1),0!==e&&(e===t&&0<t?n.prop("checked",!0):n.prop("indeterminate",!0))},getSelectedValues:function(){return Array.isArray(this.settings.value)?this.settings.value:[]},getSelectedLabels:function(){var t=[];return this.optionsContainer.find('.cms-option:not([data-value="select-all"]) input[type="checkbox"]:checked').siblings("label").each(function(){t.push(r(this).text())}),t},updateTriggerText:function(){var a,t=this.getSelectedLabels(),e=this.getSelectedValues(),n=this.settings.value?this.settings.value.length:0,o=this.trigger.find(".cms-selected-text");0===t.length?o.empty().text(this.settings.placeholder).addClass("cms-placeholder"):this.settings.showBadges?(o.empty().removeClass("cms-placeholder"),a=this,r.each(e,function(t,e){var n=r('<span class="cms-badge"></span>'),s=e,i=a.optionsContainer.find('.cms-option[data-value="'+a.htmlEncode(e)+'"]'),i=(i.length&&(s=i.find("label").text()),r("<span></span>").text(s)),s=r('<button type="button" class="cms-badge-remove">×</button>');s.on("click",function(t){t.stopPropagation(),a.unselect(e)}),n.append(i),n.append(s),o.append(n)})):(o.empty().removeClass("cms-placeholder"),o.text(n+" items selected")),this.updateExternalBadges(e,t)},updateExternalBadges:function(t,i){var a,o;this.settings.showBadgesExternal&&(0===(a=r("#"+this.settings.showBadgesExternal)).length?console.warn("OneSelect: External container not found - #"+this.settings.showBadgesExternal):(a.empty(),0!==t.length&&(o=this,r.each(t,function(t,e){var n=r('<span class="cms-badge"></span>'),t=r("<span></span>").text(i[t]),s=r('<button type="button" class="cms-badge-remove">×</button>');s.on("click",function(t){t.preventDefault(),t.stopPropagation(),o.unselect(e)}),n.append(t),n.append(s),a.append(n)}))))},toggle:function(){this.wrapper.hasClass("open")?this.close():this.open()},open:function(){r(".cms-wrapper.open").not(this.wrapper).removeClass("open"),r(".cms-dropdown.open").not(this.dropdown).removeClass("open"),this.updateDropdownPosition(),this.wrapper.addClass("open"),this.dropdown.addClass("open")},updateDropdownPosition:function(){var t=this.wrapper[0].getBoundingClientRect(),e=(this.wrapper.outerHeight(),this.wrapper.outerWidth());this.dropdown.css({position:"fixed",top:t.bottom+"px",left:t.left+"px",width:e+"px"})},close:function(){this.wrapper.removeClass("open"),this.dropdown.removeClass("open")},handleOk:function(){this.updateTriggerText();var t=this.getSelectedValues(),e=this.getSelectedLabels();this.settings.onOk&&this.settings.onOk.call(this,t,e),this.settings.submitForm&&this.submitForm(),this.updateDataValueAttribute(),this.close()},submitForm:function(){var t=null;if(this.settings.formId){if(0===(t=r("#"+this.settings.formId)).length)return void console.warn('OneSelect: Form with ID "'+this.settings.formId+'" not found')}else if(0===(t=this.$element.closest("form")).length)return void console.warn("OneSelect: No parent form found");t[0].submit()},handleCancel:function(){this.settings.value=[],this.optionsContainer.find('input[type="checkbox"]').prop("checked",!1),this.optionsContainer.find(".cms-option").removeClass("selected"),this.updateSelectAllState(),this.updateTriggerText(),this.updateHiddenInputs(),this.updateDataValueAttribute(),this.settings.onCancel&&this.settings.onCancel.call(this),this.settings.submitForm&&this.submitForm(),this.close()},setValue:function(t){this.settings.value=t||[],this.renderOptions(),this.updateTriggerText(),this.updateHiddenInputs(),this.updateDataValueAttribute()},getValue:function(){return this.getSelectedValues()},updateData:function(t){this.settings.data=t||[],this.settings.value=[],this.renderOptions(),this.updateTriggerText(),this.updateHiddenInputs(),this.updateDataValueAttribute()},loadData:function(t,n,s,i){var e,a,o=this,l=t||this.settings.ajax;l&&l.url?(this.settings.beforeLoad&&this.settings.beforeLoad.call(this),i||this.trigger.find(".cms-selected-text").text("Loading..."),t=r.extend(!0,{url:l.url,method:l.method||"GET",data:l.data||{},dataType:l.dataType||"json",success:function(t){var e=t;"object"==typeof t&&t.data?e=t.data:"object"==typeof t&&t.results&&(e=t.results),t&&void 0!==t.hasNextPage?o.hasNextPage=t.hasNextPage:o.hasNextPage=!1,t&&void 0!==t.currentPage&&(o.currentPage=t.currentPage),i?(o.settings.data=r.extend({},o.settings.data,e||{}),o.appendOptions(e||{})):(o.settings.data=e||[],o.renderOptions()),o.updateTriggerText(),o.settings.afterLoad&&o.settings.afterLoad.call(o,e,t),n&&n.call(o,e,t)},error:function(t,e,n){i||o.trigger.find(".cms-selected-text").text("Error loading data"),o.settings.onLoadError&&o.settings.onLoadError.call(o,t,e,n),s&&s.call(o,t,e,n)}},l),l.success&&(e=t.success,t.success=function(t){l.success(t),e(t)}),l.error&&(a=t.error,t.error=function(t,e,n){l.error(t,e,n),a(t,e,n)}),r.ajax(t)):console.error("OneSelect: Ajax configuration or url is missing")},loadNextPage:function(){var n=this,t=(this.settings.loading=!0,this.preloader.show(),r.extend(!0,{},this.settings.ajax));t.data=t.data||{},t.data.page=this.currentPage+1,this.loadData(t,function(t,e){n.settings.loading=!1,n.preloader.hide(),e.currentPage||n.currentPage++},function(){n.settings.loading=!1,n.preloader.hide()},!0)},reload:function(){this.settings.ajax?this.loadData():console.warn("OneSelect: No ajax configuration found")},select:function(t){var e=this.optionsContainer.find('.cms-option:not([data-value="select-all"]) input[type="checkbox"][value="'+this.htmlEncode(t)+'"]');e.length&&(e.prop("checked",!0),e.closest(".cms-option").addClass("selected")),Array.isArray(this.settings.value)&&!this.isValueSelected(t)&&this.settings.value.push(t),this.updateSelectAllState(),this.updateTriggerText(),this.updateHiddenInputs(),this.updateDataValueAttribute()},unselect:function(t){var e,n=this.optionsContainer.find('.cms-option:not([data-value="select-all"]) input[type="checkbox"][value="'+this.htmlEncode(t)+'"]');n.length&&(n.prop("checked",!1),n.closest(".cms-option").removeClass("selected")),Array.isArray(this.settings.value)&&(e=String(t).trim(),this.settings.value=this.settings.value.filter(function(t){return String(t).trim()!==e})),this.updateSelectAllState(),this.updateTriggerText(),this.updateHiddenInputs(),this.updateDataValueAttribute()},selectAll:function(){this.handleSelectAll(!0)},unselectAll:function(){this.handleSelectAll(!1)},toggleSelection:function(t){var e,n,s=this.optionsContainer.find('.cms-option:not([data-value="select-all"]) input[type="checkbox"][value="'+this.htmlEncode(t)+'"]');s.length&&(e=s.prop("checked"),s.prop("checked",!e),s=s.closest(".cms-option"),e?(s.removeClass("selected"),Array.isArray(this.settings.value)&&(n=String(t).trim(),this.settings.value=this.settings.value.filter(function(t){return String(t).trim()!==n}))):(s.addClass("selected"),Array.isArray(this.settings.value)&&!this.isValueSelected(t)&&this.settings.value.push(t)),this.updateSelectAllState(),this.updateTriggerText(),this.updateHiddenInputs())},getInstanceId:function(){return this.instanceId},destroy:function(){delete n[this.instanceId],r(window).off(".cms"),r(window).off(".ones"),r(document).off(".onescroll"),this.trigger.off(),this.okBtn.off(),this.cancelBtn.off(),this.optionsContainer.off(),this._horizontalScrollInterval&&(clearInterval(this._horizontalScrollInterval),this._horizontalScrollInterval=null),r('input.cms-hidden-input[data-cms-input="'+this.settings.name+'"]').remove(),this.wrapper.remove(),this.dropdown.remove(),this.$element.removeData(a)}},l.getInstance=function(t){return n[t]||null},l.getAllInstances=function(){return n},r.fn[a]=function(n){var s=arguments,i=this;return this.each(function(){var t=r(this),e=t.data(a);if(!e){if("object"!=typeof n&&n)return;e=new l(this,n),t.data(a,e)}"string"==typeof n&&("value"===n?i=void 0!==s[1]?(e.setValue(s[1]),t):e.getValue():"getValues"===n?i=e.getSelectedValues():"getLabels"===n?i=e.getSelectedLabels():"getInstanceId"===n?i=e.getInstanceId():"updateData"===n?e.updateData(s[1]):"loadData"===n?e.loadData(s[1],s[2],s[3]):"reload"===n?e.reload():"select"===n?e.select(s[1]):"unselect"===n?e.unselect(s[1]):"selectAll"===n?e.selectAll():"unselectAll"===n?e.unselectAll():"toggleSelection"===n?e.toggleSelection(s[1]):"open"===n?e.open():"close"===n?e.close():"destroy"===n&&e.destroy())}),i},r.fn[a].Constructor=l,r.fn[a].getInstance=l.getInstance,r.fn[a].getAllInstances=l.getAllInstances});
|
|
1
|
+
(n=>{"function"==typeof define&&define.amd?define(["jquery"],n):"object"==typeof module&&module.exports?module.exports=function(t,e){return void 0===e&&(e="undefined"!=typeof window?require("jquery"):require("jquery")(t)),n(e),e}:n(window.jQuery||window.$)})(function(r){var n={},a="oneSelect";function o(n,s){var i;return function(){var t=this,e=arguments;clearTimeout(i),i=setTimeout(function(){n.apply(t,e)},s)}}function l(t,e){this.element=t,this.$element=r(t),this.instanceId="ones-"+Math.random().toString(36).substr(2,9),t=this.readDataAttributes(),this.settings=r.extend({},l.defaults,e,t),this.init()}l.defaults={placeholder:"Select options...",selectAllText:"Select All",okText:"OK",cancelText:"Cancel",data:[],value:null,showCheckbox:!0,showBadges:!1,showBadgesExternal:null,showSearch:!1,searchPlaceholder:"Search...",searchUrl:null,searchDebounceDelay:300,closeOnScroll:!1,closeOnOutside:!0,submitForm:!1,submitOnOutside:!1,formId:null,name:null,multiple:!0,ajax:null,autoLoad:!0,beforeLoad:null,afterLoad:null,onLoadError:null,onChange:null,onSelect:null,onOk:null,onCancel:null,infinityScroll:!1,onInfinityScroll:null,loading:!1},l.prototype={readDataAttributes:function(){var t=this,i={},e=(r.each({"ones-placeholder":"placeholder","ones-select-all-text":"selectAllText","ones-ok-text":"okText","ones-cancel-text":"cancelText","ones-data":"data","ones-value":"value","ones-name":"name","ones-multiple":"multiple","ones-show-checkbox":"showCheckbox","ones-show-badges":"showBadges","ones-show-badges-external":"showBadgesExternal","ones-show-search":"showSearch","ones-search-placeholder":"searchPlaceholder","ones-search-url":"searchUrl","ones-search-debounce-delay":"searchDebounceDelay","ones-close-on-scroll":"closeOnScroll","ones-close-on-outside":"closeOnOutside","ones-submit-form":"submitForm","ones-submit-on-outside":"submitOnOutside","ones-form-id":"formId","ones-auto-load":"autoLoad","ones-infinity-scroll":"infinityScroll"},function(e,n){var s=t.$element.data(e);if(void 0!==s)if("data"===n||"value"===n)if("string"==typeof s)try{i[n]=JSON.parse(s)}catch(t){console.warn("OneSelect: Invalid JSON for "+e,s),i[n]=s}else i[n]=s;else i[n]="multiple"===n||"showCheckbox"===n||"showBadges"===n||"showSearch"===n||"closeOnScroll"===n||"closeOnOutside"===n||"submitForm"===n||"submitOnOutside"===n||"autoLoad"===n||"infinityScroll"===n?"string"==typeof s?"true"===s||"1"===s:!!s:"searchDebounceDelay"===n?"string"==typeof s?parseInt(s,10)||300:s||300:s}),this.$element.data("ones-ajax"));return e&&("string"==typeof e?i.ajax={url:e,method:"GET"}:"object"==typeof e&&(i.ajax=e)),i},init:function(){var e;null!=(n[this.instanceId]=this).settings.value?(Array.isArray(this.settings.value)||(this.settings.value=[this.settings.value]),e={},this.settings.value=this.settings.value.filter(function(t){return null!=t&&(t=String(t).trim(),!e[t])&&(e[t]=!0)})):this.settings.value=[],this.updateDataValueAttribute(),this.currentPage=1,this.hasNextPage=!1,this.wrapper=this.createWrapper(),this.trigger=this.createTrigger(),this.dropdown=this.createDropdown(),this.searchInput=this.createSearchInput(),this.optionsContainer=this.createOptionsContainer(),this.preloader=this.createPreloader(),this.buttons=this.createButtons(),this.build(),this.attachEvents(),this.settings.ajax&&this.settings.autoLoad&&this.loadData()},build:function(){this.settings.showSearch&&this.dropdown.append(this.searchInput),this.dropdown.append(this.optionsContainer),this.dropdown.append(this.preloader),this.dropdown.append(this.buttons),this.wrapper.append(this.trigger),this.$element.append(this.wrapper),r("body").append(this.dropdown),this.renderOptions(),this.updateTriggerText(),this.updateHiddenInputs()},updateHiddenInputs:function(){var n,s,t,e;this.settings.name&&(t=null,(n=(t=this.settings.formId?r("#"+this.settings.formId):this.$element.closest("form")).length?t:this.wrapper).find('input.cms-hidden-input[data-cms-input="'+this.settings.name+'"]').remove(),s=this.settings.name,this.settings.multiple&&-1===s.indexOf("[")&&(s+="[]"),t=this.getSelectedValues(),Array.isArray(t)&&(t=t.filter(function(t){return null!=t&&""!==String(t).trim()})),this.settings.multiple?0===t.length?(e=r('<input type="hidden" class="cms-hidden-input">').attr("name",this.settings.name).attr("value","").attr("data-cms-input",this.settings.name),n.append(e)):r.each(t,function(t,e){e=r('<input type="hidden" class="cms-hidden-input">').attr("name",s).attr("value",e).attr("data-cms-input",this.settings.name).attr("data-cms-value",e);n.append(e)}.bind(this)):(t=0<t.length?t[0]:"",e=r('<input type="hidden" class="cms-hidden-input">').attr("name",s).attr("value",t).attr("data-cms-input",this.settings.name),n.append(e)))},createWrapper:function(){return r('<div class="cms-wrapper"></div>')},createTrigger:function(){return r('<div class="cms-trigger"><span class="cms-selected-text cms-placeholder">'+this.settings.placeholder+"</span></div>")},createDropdown:function(){return r('<div class="cms-dropdown"></div>')},createSearchInput:function(){return r('<div class="cms-search-wrapper"><input type="text" class="cms-search-input" placeholder="'+this.settings.searchPlaceholder+'" /></div>')},createOptionsContainer:function(){return r('<div class="cms-options-container"></div>')},createPreloader:function(){return r('<div class="cms-infinity-preloader"><div class="cms-spinner"></div></div>')},createButtons:function(){var t=r('<div class="cms-buttons"></div>');return this.okBtn=r('<button class="cms-btn cms-btn-ok">'+this.settings.okText+"</button>"),this.cancelBtn=r('<button class="cms-btn cms-btn-cancel">'+this.settings.cancelText+"</button>"),t.append(this.okBtn),t.append(this.cancelBtn),t},renderOptions:function(){this.optionsContainer.empty();var t=this.createOption("select-all",this.settings.selectAllText,!1),s=(this.optionsContainer.append(t),this);r.each(this.settings.data,function(t,e){var n=s.isValueSelected(t),t=s.createOption(t,e,n);s.optionsContainer.append(t)}),this.updateSelectAllState()},htmlEncode:function(t){return String(t).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},isValueSelected:function(t){var e;return!!this.settings.value&&(Array.isArray(this.settings.value)?(e=String(t).trim(),this.settings.value.some(function(t){return String(t).trim()===e})):String(this.settings.value).trim()===String(t).trim())},updateDataValueAttribute:function(){this.settings.value&&0!==this.settings.value.length?this.$element.attr("data-ones-value",JSON.stringify(this.settings.value)):this.$element.removeAttr("data-ones-value")},appendOptions:function(t){var s=this;r.each(t,function(t,e){var n;0<s.optionsContainer.find('.cms-option[data-value="'+s.htmlEncode(t)+'"]').length||(n=s.isValueSelected(t),t=s.createOption(t,e,n),s.optionsContainer.append(t))}),this.updateSelectAllState()},generateCheckboxId:function(t){return"cms-checkbox-"+this.instanceId+"-"+String(t).replace(/[^a-zA-Z0-9]/g,"-")+"-"+Math.random().toString(36).substr(2,9)},createOption:function(t,e,n){var s="cms-option",i=(this.settings.showCheckbox||(s+=" cms-hide-checkbox"),n&&"select-all"!==t&&(s+=" selected"),this.generateCheckboxId(t)),s=r('<div class="'+s+'" data-value="'+this.htmlEncode(t)+'"></div>'),t=r('<input type="checkbox" id="'+this.htmlEncode(i)+'" value="'+this.htmlEncode(t)+'"'+(n?" checked":"")+">"),n=r('<label for="'+this.htmlEncode(i)+'">'+e+"</label>");return s.append(t),s.append(n),s},filterOptions:function(e){var t=this.optionsContainer.find('.cms-option:not([data-value="select-all"])');""===e?t.show():t.each(function(){var t=r(this);-1!==t.find("label").text().toLowerCase().indexOf(e)?t.show():t.hide()})},performAjaxSearch:function(t){var s=this;this.optionsContainer.addClass("cms-loading"),r.ajax({url:this.settings.searchUrl,method:"GET",data:{q:t},dataType:"json",success:function(t){var e=t;"object"==typeof t&&t.data?e=t.data:"object"==typeof t&&t.results&&(e=t.results),s.updateSearchResults(e||[]),s.optionsContainer.removeClass("cms-loading")},error:function(t,e,n){console.error("OneSelect: Search error",n),s.optionsContainer.removeClass("cms-loading"),s.settings.onLoadError&&s.settings.onLoadError.call(s,t,e,n)}})},updateSearchResults:function(t){this.optionsContainer.find('.cms-option:not([data-value="select-all"])').remove();var s=this;r.each(t,function(t,e){var n=s.isValueSelected(t),t=s.createOption(t,e,n);s.optionsContainer.append(t)}),this.updateSelectAllState()},attachEvents:function(){var e,i=this;function a(t){return t===document?"document":t===document.documentElement?"html":t===document.body?"body":t.tagName+"-"+(t.id||t.className||Math.random().toString(36).substr(2,9))}this.trigger.on("click",function(t){t.stopPropagation(),i.toggle()}),this.settings.showSearch&&(this.settings.searchUrl?(e=o(function(t){i.performAjaxSearch(t)},this.settings.searchDebounceDelay),this.searchInput.find(".cms-search-input").on("keyup",function(){var t=r(this).val();0<t.length?e(t):i.filterOptions("")})):this.searchInput.find(".cms-search-input").on("keyup",function(){var t=r(this).val().toLowerCase();i.filterOptions(t)})),r(window).on("resize.cms",function(){i.wrapper.hasClass("open")&&i.updateDropdownPosition()}),this.settings.closeOnScroll?r(window).on("scroll.cms",function(){i.wrapper.hasClass("open")&&i.close()}):r(window).on("scroll.cms",function(){i.wrapper.hasClass("open")&&i.updateDropdownPosition()}),r(document).on("wheel.onescroll",function(t){i.wrapper.hasClass("open")&&t.originalEvent&&0<Math.abs(t.originalEvent.deltaX)&&i.close()}),i._detectHorizontalScroll=function(){if(i.wrapper.hasClass("open"))if(window.scrollX!==i._lastWindowScrollX&&(i._lastWindowScrollX=window.scrollX,0<i._lastWindowScrollX))i.close();else for(var t=document.querySelectorAll("*"),e=0;e<t.length;e++){var n=t[e],s=a(n);if(void 0!==i._elementScrollPositions[s])if(n.scrollLeft!==i._elementScrollPositions[s])return void i.close()}},i._elementScrollPositions={},i._lastWindowScrollX=window.scrollX;var n,s=i.open.bind(i),t=(i.open=function(){i._elementScrollPositions={},i._lastWindowScrollX=window.scrollX;for(var t=document.querySelectorAll("*"),e=0;e<t.length;e++){var n=t[e];(n.scrollWidth>n.clientWidth||n.scrollHeight>n.clientHeight)&&(i._elementScrollPositions[a(n)]=n.scrollLeft)}i._horizontalScrollInterval&&clearInterval(i._horizontalScrollInterval),i._horizontalScrollInterval=setInterval(function(){i._detectHorizontalScroll()},50),s()},i.close.bind(i));i.close=function(){i._horizontalScrollInterval&&(clearInterval(i._horizontalScrollInterval),i._horizontalScrollInterval=null),i._elementScrollPositions={},t()},r(window).on("click.ones",function(t){!i.settings.closeOnOutside||!i.wrapper.hasClass("open")||0<(t=r(t.target)).closest(".cms-wrapper").length||0<t.closest(".cms-dropdown").length||(i.settings.submitOnOutside&&(i.updateTriggerText(),i.settings.onOk&&i.settings.onOk.call(i,i.getSelectedValues(),i.getSelectedLabels()),i.submitForm()),i.close())}),this.optionsContainer.on("click",".cms-option",function(t){var e=r(t.target);e.is('input[type="checkbox"]')||0<e.closest("label").length||0<e.closest("button").length||(t.preventDefault(),t.stopPropagation(),(e=r(this).find('input[type="checkbox"]')).prop("checked",!e.prop("checked")).trigger("change"))}),this.optionsContainer.on("change",'input[type="checkbox"]',function(t){t.stopPropagation();var t=r(this),e=t.closest(".cms-option");"select-all"===e.data("value")?i.handleSelectAll(t.prop("checked")):i.handleOptionChange(e)}),this.okBtn.on("click",function(t){t.stopPropagation(),i.handleOk()}),this.cancelBtn.on("click",function(t){t.stopPropagation(),i.handleCancel()}),this.settings.infinityScroll&&this.settings.ajax&&this.settings.ajax.url&&(n=o(function(){!i.hasNextPage||i.settings.loading||i.loadNextPage()},200),this.optionsContainer.on("scroll",function(){var t=r(this);t.scrollTop()+t.innerHeight()>=t[0].scrollHeight-50&&n()})),this.settings.infinityScroll&&this.settings.onInfinityScroll&&!this.settings.ajax&&console.warn("OneSelect: infinityScroll requires ajax configuration. onInfinityScroll callback is deprecated.")},handleOptionChange:function(t){var e=t.data("value");t.find('input[type="checkbox"]').prop("checked")?this.select(e):this.unselect(e),this.settings.onChange&&this.settings.onChange.call(this,this.getSelectedValues(),this.getSelectedLabels()),this.settings.onSelect&&this.settings.onSelect.call(this,this.getSelectedValues())},handleSelectAll:function(n){var s=this;n||Array.isArray(this.settings.value)&&(this.settings.value=[]),this.optionsContainer.find('.cms-option:not([data-value="select-all"])').each(function(){var t,e=r(this);e.find('input[type="checkbox"]').prop("checked",n),n?(e.addClass("selected"),t=e.find('input[type="checkbox"]').val(),Array.isArray(s.settings.value)&&!s.isValueSelected(t)&&s.settings.value.push(t)):e.removeClass("selected")}),this.updateSelectAllState(),this.updateTriggerText(),this.updateHiddenInputs(),this.updateDataValueAttribute()},updateSelectAllState:function(){var t=this.optionsContainer.find('.cms-option:not([data-value="select-all"]) input[type="checkbox"]'),e=t.filter(":checked"),t=t.length,e=e.length,n=this.optionsContainer.find('.cms-option[data-value="select-all"] input[type="checkbox"]');n.prop("indeterminate",!1),n.prop("checked",!1),0!==e&&(e===t&&0<t?n.prop("checked",!0):n.prop("indeterminate",!0))},getSelectedValues:function(){return Array.isArray(this.settings.value)?this.settings.value:[]},getSelectedLabels:function(){var t=[];return this.optionsContainer.find('.cms-option:not([data-value="select-all"]) input[type="checkbox"]:checked').siblings("label").each(function(){t.push(r(this).text())}),t},updateTriggerText:function(){var a,t=this.getSelectedLabels(),e=this.getSelectedValues(),n=this.settings.value?this.settings.value.length:0,o=this.trigger.find(".cms-selected-text");0===t.length?o.empty().text(this.settings.placeholder).addClass("cms-placeholder"):this.settings.showBadges?(o.empty().removeClass("cms-placeholder"),a=this,r.each(e,function(t,e){var n=r('<span class="cms-badge"></span>'),s=e,i=a.optionsContainer.find('.cms-option[data-value="'+a.htmlEncode(e)+'"]'),i=(i.length&&(s=i.find("label").text()),r("<span></span>").text(s)),s=r('<button type="button" class="cms-badge-remove">×</button>');s.on("click",function(t){t.stopPropagation(),a.unselect(e)}),n.append(i),n.append(s),o.append(n)})):(o.empty().removeClass("cms-placeholder"),o.text(n+" items selected")),this.updateExternalBadges(e,t)},updateExternalBadges:function(t,i){var a,o;this.settings.showBadgesExternal&&(0===(a=r("#"+this.settings.showBadgesExternal)).length?console.warn("OneSelect: External container not found - #"+this.settings.showBadgesExternal):(a.empty(),0!==t.length&&(o=this,r.each(t,function(t,e){var n=r('<span class="cms-badge"></span>'),t=r("<span></span>").text(i[t]),s=r('<button type="button" class="cms-badge-remove">×</button>');s.on("click",function(t){t.preventDefault(),t.stopPropagation(),o.unselect(e)}),n.append(t),n.append(s),a.append(n)}))))},toggle:function(){this.wrapper.hasClass("open")?this.close():this.open()},open:function(){r(".cms-wrapper.open").not(this.wrapper).removeClass("open"),r(".cms-dropdown.open").not(this.dropdown).removeClass("open"),this.updateDropdownPosition(),this.wrapper.addClass("open"),this.dropdown.addClass("open")},updateDropdownPosition:function(){var t=this.wrapper[0].getBoundingClientRect(),e=(this.wrapper.outerHeight(),this.wrapper.outerWidth());this.dropdown.css({position:"fixed",top:t.bottom+"px",left:t.left+"px",width:e+"px"})},close:function(){this.wrapper.removeClass("open"),this.dropdown.removeClass("open")},handleOk:function(){this.updateTriggerText();var t=this.getSelectedValues(),e=this.getSelectedLabels();this.settings.onOk&&this.settings.onOk.call(this,t,e),this.settings.submitForm&&this.submitForm(),this.updateDataValueAttribute(),this.close()},submitForm:function(){var t=null;if(this.settings.formId){if(0===(t=r("#"+this.settings.formId)).length)return void console.warn('OneSelect: Form with ID "'+this.settings.formId+'" not found')}else if(0===(t=this.$element.closest("form")).length)return void console.warn("OneSelect: No parent form found");t[0].submit()},handleCancel:function(){this.settings.value=[],this.optionsContainer.find('input[type="checkbox"]').prop("checked",!1),this.optionsContainer.find(".cms-option").removeClass("selected"),this.updateSelectAllState(),this.updateTriggerText(),this.updateHiddenInputs(),this.updateDataValueAttribute(),this.settings.onCancel&&this.settings.onCancel.call(this),this.settings.submitForm&&this.submitForm(),this.close()},setValue:function(t){this.settings.value=t||[],this.renderOptions(),this.updateTriggerText(),this.updateHiddenInputs(),this.updateDataValueAttribute()},getValue:function(){return this.getSelectedValues()},updateData:function(t){this.settings.data=t||[],this.settings.value=[],this.renderOptions(),this.updateTriggerText(),this.updateHiddenInputs(),this.updateDataValueAttribute()},loadData:function(t,n,s,i){var e,a,o=this,l=t||this.settings.ajax;l&&l.url?(this.settings.beforeLoad&&this.settings.beforeLoad.call(this),i||this.trigger.find(".cms-selected-text").text("Loading..."),t=r.extend(!0,{url:l.url,method:l.method||"GET",data:l.data||{},dataType:l.dataType||"json",success:function(t){var e=t;"object"==typeof t&&t.data?e=t.data:"object"==typeof t&&t.results&&(e=t.results),t&&void 0!==t.hasNextPage?o.hasNextPage=t.hasNextPage:o.hasNextPage=!1,t&&void 0!==t.currentPage&&(o.currentPage=t.currentPage),i?(o.settings.data=r.extend({},o.settings.data,e||{}),o.appendOptions(e||{})):(o.settings.data=e||[],o.renderOptions()),o.updateTriggerText(),o.settings.afterLoad&&o.settings.afterLoad.call(o,e,t),n&&n.call(o,e,t)},error:function(t,e,n){i||o.trigger.find(".cms-selected-text").text("Error loading data"),o.settings.onLoadError&&o.settings.onLoadError.call(o,t,e,n),s&&s.call(o,t,e,n)}},l),l.success&&(e=t.success,t.success=function(t){l.success(t),e(t)}),l.error&&(a=t.error,t.error=function(t,e,n){l.error(t,e,n),a(t,e,n)}),r.ajax(t)):console.error("OneSelect: Ajax configuration or url is missing")},loadNextPage:function(){var n=this,t=(this.settings.loading=!0,this.preloader.show(),r.extend(!0,{},this.settings.ajax));t.data=t.data||{},t.data.page=this.currentPage+1,this.loadData(t,function(t,e){n.settings.loading=!1,n.preloader.hide(),e.currentPage||n.currentPage++},function(){n.settings.loading=!1,n.preloader.hide()},!0)},reload:function(){this.settings.ajax?this.loadData():console.warn("OneSelect: No ajax configuration found")},select:function(t){var e=this.optionsContainer.find('.cms-option:not([data-value="select-all"]) input[type="checkbox"][value="'+this.htmlEncode(t)+'"]');e.length&&(e.prop("checked",!0),e.closest(".cms-option").addClass("selected")),Array.isArray(this.settings.value)&&!this.isValueSelected(t)&&this.settings.value.push(t),this.updateSelectAllState(),this.updateTriggerText(),this.updateHiddenInputs(),this.updateDataValueAttribute()},unselect:function(t){var e,n=this.optionsContainer.find('.cms-option:not([data-value="select-all"]) input[type="checkbox"][value="'+this.htmlEncode(t)+'"]');n.length&&(n.prop("checked",!1),n.closest(".cms-option").removeClass("selected")),Array.isArray(this.settings.value)&&(e=String(t).trim(),this.settings.value=this.settings.value.filter(function(t){return String(t).trim()!==e})),this.updateSelectAllState(),this.updateTriggerText(),this.updateHiddenInputs(),this.updateDataValueAttribute()},selectAll:function(){this.handleSelectAll(!0)},unselectAll:function(){this.handleSelectAll(!1)},toggleSelection:function(t){var e,n,s=this.optionsContainer.find('.cms-option:not([data-value="select-all"]) input[type="checkbox"][value="'+this.htmlEncode(t)+'"]');s.length&&(e=s.prop("checked"),s.prop("checked",!e),s=s.closest(".cms-option"),e?(s.removeClass("selected"),Array.isArray(this.settings.value)&&(n=String(t).trim(),this.settings.value=this.settings.value.filter(function(t){return String(t).trim()!==n}))):(s.addClass("selected"),Array.isArray(this.settings.value)&&!this.isValueSelected(t)&&this.settings.value.push(t)),this.updateSelectAllState(),this.updateTriggerText(),this.updateHiddenInputs())},getInstanceId:function(){return this.instanceId},destroy:function(){delete n[this.instanceId],r(window).off(".cms"),r(window).off(".ones"),r(document).off(".onescroll"),this.trigger.off(),this.okBtn.off(),this.cancelBtn.off(),this.optionsContainer.off(),this._horizontalScrollInterval&&(clearInterval(this._horizontalScrollInterval),this._horizontalScrollInterval=null),r('input.cms-hidden-input[data-cms-input="'+this.settings.name+'"]').remove(),this.wrapper.remove(),this.dropdown.remove(),this.$element.removeData(a)}},l.getInstance=function(t){return n[t]||null},l.getAllInstances=function(){return n},r.fn[a]=function(n){var s=arguments,i=this;return this.each(function(){var t=r(this),e=t.data(a);if(!e){if("object"!=typeof n&&n)return;e=new l(this,n),t.data(a,e)}"string"==typeof n&&("value"===n?i=void 0!==s[1]?(e.setValue(s[1]),t):e.getValue():"getValues"===n?i=e.getSelectedValues():"getLabels"===n?i=e.getSelectedLabels():"getInstanceId"===n?i=e.getInstanceId():"updateData"===n?e.updateData(s[1]):"loadData"===n?e.loadData(s[1],s[2],s[3]):"reload"===n?e.reload():"select"===n?e.select(s[1]):"unselect"===n?e.unselect(s[1]):"selectAll"===n?e.selectAll():"unselectAll"===n?e.unselectAll():"toggleSelection"===n?e.toggleSelection(s[1]):"open"===n?e.open():"close"===n?e.close():"destroy"===n&&e.destroy())}),i},r.fn[a].Constructor=l,r.fn[a].getInstance=l.getInstance,r.fn[a].getAllInstances=l.getAllInstances});
|