@kamranbaylarov/one-select 1.2.4 → 1.3.0

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # 🎯 OneSelect - jQuery Multi-Select Dropdown Component
2
2
 
3
- **Version:** 1.2.3 | **Author:** Kamran Baylarov
3
+ **Version:** 1.3.0 | **Author:** Kamran Baylarov
4
4
 
5
5
  A powerful, flexible, and feature-rich multi-select dropdown component for jQuery.
6
6
 
@@ -137,37 +137,38 @@ $('#mySelect').oneSelect({
137
137
 
138
138
  ## ⚙️ All Parameters
139
139
 
140
- | Parameter | Type | Default | Description |
141
- |---------|-----|---------|-------------|
140
+ | Parameter | Type | Default | Description |
141
+ |---------|-----|-----------------------|-------------|
142
142
  | `placeholder` | String | `'Select options...'` | Placeholder text when nothing selected |
143
- | `selectAllText` | String | `'Select All'` | "Select All" button text |
144
- | `okText` | String | `'OK'` | OK button text |
145
- | `cancelText` | String | `'Cancel'` | Cancel button text |
146
- | `data` | Array/Object | `[]` | Options list (string array or key-value object) |
147
- | `value` | Number/Array/String/null | `null` | Single index, key, or array to pre-select |
148
- | `showCheckbox` | Boolean | `true` | Show/hide checkboxes |
149
- | `showBadges` | Boolean | `false` | Show badges in trigger |
150
- | `showBadgesExternal` | String/null | `null` | External element ID (for badges) |
151
- | `showSearch` | Boolean | `false` | Show search input in dropdown |
152
- | `searchPlaceholder` | String | `'Search...'` | Search input placeholder text |
153
- | `searchUrl` | String/null | `null` | URL for AJAX search (GET request with `q` parameter) |
154
- | `searchDebounceDelay` | Number | `300` | Delay in milliseconds for search debounce |
155
- | `closeOnScroll` | Boolean | `false` | Close dropdown on page scroll |
156
- | `closeOnOutside` | Boolean | `true` | Close dropdown when clicking outside |
157
- | `submitForm` | Boolean | `false` | Submit form on OK click |
158
- | `submitOnOutside` | Boolean | `false` | Submit form on outside click |
159
- | `formId` | String/null | `null` | Specific form ID (null: parent form) |
160
- | `name` | String/null | `null` | Hidden input name attribute |
161
- | `multiple` | Boolean | `true` | Submit as array (name[]) |
162
- | `ajax` | Object/null | `null` | AJAX configuration object |
163
- | `autoLoad` | Boolean | `true` | Auto load data via AJAX |
164
- | `beforeLoad` | Function/null | `null` | Called before AJAX |
165
- | `afterLoad` | Function/null | `null` | Called after AJAX success |
166
- | `onLoadError` | Function/null | `null` | Called on AJAX error |
167
- | `onChange` | Function/null | `null` | Called when selection changes |
168
- | `onSelect` | Function/null | `null` | Previous version of onChange |
169
- | `onOk` | Function/null | `null` | Called when OK clicked |
170
- | `onCancel` | Function/null | `null` | Called when Cancel clicked |
143
+ | `selectAllText` | String | `'Select All'` | "Select All" button text |
144
+ | `okText` | String | `'OK'` | OK button text |
145
+ | `cancelText` | String | `'Cancel'` | Cancel button text |
146
+ | `data` | Array/Object | `[]` | Options list (string array or key-value object) |
147
+ | `value` | Number/Array/String/null | `null` | Single index, key, or array to pre-select |
148
+ | `showCheckbox` | Boolean | `true` | Show/hide checkboxes |
149
+ | `showBadges` | Boolean | `false` | Show badges in trigger |
150
+ | `showBadgesExternal` | String/null | `null` | External element ID (for badges) |
151
+ | `showSearch` | Boolean | `false` | Show search input in dropdown |
152
+ | `searchPlaceholder` | String | `'Search...'` | Search input placeholder text |
153
+ | `searchUrl` | String/null | `null` | URL for AJAX search (GET request with `q` parameter) |
154
+ | `searchDebounceDelay` | Number | `300` | Delay in milliseconds for search debounce |
155
+ | `locale` | String | `'az-AZ'` | Locale for case-insensitive search (e.g., `'tr-TR'`, `'az-AZ'`, `'en-US'`) |
156
+ | `closeOnScroll` | Boolean | `false` | Close dropdown on page scroll |
157
+ | `closeOnOutside` | Boolean | `true` | Close dropdown when clicking outside |
158
+ | `submitForm` | Boolean | `false` | Submit form on OK click |
159
+ | `submitOnOutside` | Boolean | `false` | Submit form on outside click |
160
+ | `formId` | String/null | `null` | Specific form ID (null: parent form) |
161
+ | `name` | String/null | `null` | Hidden input name attribute |
162
+ | `multiple` | Boolean | `true` | Submit as array (name[]) |
163
+ | `ajax` | Object/null | `null` | AJAX configuration object |
164
+ | `autoLoad` | Boolean | `true` | Auto load data via AJAX |
165
+ | `beforeLoad` | Function/null | `null` | Called before AJAX |
166
+ | `afterLoad` | Function/null | `null` | Called after AJAX success |
167
+ | `onLoadError` | Function/null | `null` | Called on AJAX error |
168
+ | `onChange` | Function/null | `null` | Called when selection changes |
169
+ | `onSelect` | Function/null | `null` | Previous version of onChange |
170
+ | `onOk` | Function/null | `null` | Called when OK clicked |
171
+ | `onCancel` | Function/null | `null` | Called when Cancel clicked |
171
172
 
172
173
  ---
173
174
 
@@ -175,30 +176,31 @@ $('#mySelect').oneSelect({
175
176
 
176
177
  All parameters can be set via HTML data attributes. Data attributes **override JS parameters**.
177
178
 
178
- | Data Attribute | Parameter | Type | Example |
179
- |----------------|----------|-----|---------|
180
- | `data-ones-placeholder` | `placeholder` | String | `data-ones-placeholder="Select..."` |
181
- | `data-ones-select-all-text` | `selectAllText` | String | `data-ones-select-all-text="Select All"` |
182
- | `data-ones-ok-text` | `okText` | String | `data-ones-ok-text="Confirm"` |
183
- | `data-ones-cancel-text` | `cancelText` | String | `data-ones-cancel-text="Cancel"` |
184
- | `data-ones-data` | `data` | Array | `data-ones-data='["A","B","C"]'` |
179
+ | Data Attribute | Parameter | Type | Example |
180
+ |----------------|----------|-----|-----------------------------------------------------------------------------------------------|
181
+ | `data-ones-placeholder` | `placeholder` | String | `data-ones-placeholder="Select..."` |
182
+ | `data-ones-select-all-text` | `selectAllText` | String | `data-ones-select-all-text="Select All"` |
183
+ | `data-ones-ok-text` | `okText` | String | `data-ones-ok-text="Confirm"` |
184
+ | `data-ones-cancel-text` | `cancelText` | String | `data-ones-cancel-text="Cancel"` |
185
+ | `data-ones-data` | `data` | Array | `data-ones-data='["A","B","C"]'` |
185
186
  | `data-ones-value` | `value` | Number/Array | `data-ones-value='"0"'` or `data-ones-value='["0","2"]'` (Real-time sync, removed when empty) |
186
- | `data-ones-name` | `name` | String | `data-ones-name="items"` |
187
- | `data-ones-multiple` | `multiple` | Boolean | `data-ones-multiple="true"` |
188
- | `data-ones-show-checkbox` | `showCheckbox` | Boolean | `data-ones-show-checkbox="false"` |
189
- | `data-ones-show-badges` | `showBadges` | Boolean | `data-ones-show-badges="true"` |
190
- | `data-ones-show-badges-external` | `showBadgesExternal` | String | `data-ones-show-badges-external="badgesDiv"` |
191
- | `data-ones-show-search` | `showSearch` | Boolean | `data-ones-show-search="true"` |
192
- | `data-ones-search-placeholder` | `searchPlaceholder` | String | `data-ones-search-placeholder="Search items..."` |
193
- | `data-ones-search-url` | `searchUrl` | String | `data-ones-search-url="/api/search"` |
194
- | `data-ones-search-debounce-delay` | `searchDebounceDelay` | Number | `data-ones-search-debounce-delay="500"` |
195
- | `data-ones-close-on-scroll` | `closeOnScroll` | Boolean | `data-ones-close-on-scroll="true"` |
196
- | `data-ones-close-on-outside` | `closeOnOutside` | Boolean | `data-ones-close-on-outside="true"` |
197
- | `data-ones-submit-form` | `submitForm` | Boolean | `data-ones-submit-form="true"` |
198
- | `data-ones-submit-on-outside` | `submitOnOutside` | Boolean | `data-ones-submit-on-outside="true"` |
199
- | `data-ones-form-id` | `formId` | String | `data-ones-form-id="myForm"` |
200
- | `data-ones-auto-load` | `autoLoad` | Boolean | `data-ones-auto-load="false"` |
201
- | `data-ones-ajax` | `ajax` | String/Object | `data-ones-ajax="/api/items"` or `data-ones-ajax='{"url": "/api/items","method":"POST"}'` |
187
+ | `data-ones-name` | `name` | String | `data-ones-name="items"` |
188
+ | `data-ones-multiple` | `multiple` | Boolean | `data-ones-multiple="true"` |
189
+ | `data-ones-show-checkbox` | `showCheckbox` | Boolean | `data-ones-show-checkbox="false"` |
190
+ | `data-ones-show-badges` | `showBadges` | Boolean | `data-ones-show-badges="true"` |
191
+ | `data-ones-show-badges-external` | `showBadgesExternal` | String | `data-ones-show-badges-external="badgesDiv"` |
192
+ | `data-ones-show-search` | `showSearch` | Boolean | `data-ones-show-search="true"` |
193
+ | `data-ones-search-placeholder` | `searchPlaceholder` | String | `data-ones-search-placeholder="Search items..."` |
194
+ | `data-ones-search-url` | `searchUrl` | String | `data-ones-search-url="/api/search"` |
195
+ | `data-ones-search-debounce-delay` | `searchDebounceDelay` | Number | `data-ones-search-debounce-delay="500"` |
196
+ | `data-ones-locale` | `locale` | String | `data-ones-locale="az-AZ"` |
197
+ | `data-ones-close-on-scroll` | `closeOnScroll` | Boolean | `data-ones-close-on-scroll="true"` |
198
+ | `data-ones-close-on-outside` | `closeOnOutside` | Boolean | `data-ones-close-on-outside="true"` |
199
+ | `data-ones-submit-form` | `submitForm` | Boolean | `data-ones-submit-form="true"` |
200
+ | `data-ones-submit-on-outside` | `submitOnOutside` | Boolean | `data-ones-submit-on-outside="true"` |
201
+ | `data-ones-form-id` | `formId` | String | `data-ones-form-id="myForm"` |
202
+ | `data-ones-auto-load` | `autoLoad` | Boolean | `data-ones-auto-load="false"` |
203
+ | `data-ones-ajax` | `ajax` | String/Object | `data-ones-ajax="/api/items"` or `data-ones-ajax='{"url": "/api/items","method":"POST"}'` |
202
204
 
203
205
  ### Example:
204
206
 
@@ -566,6 +568,13 @@ $('#mySelect').oneSelect({
566
568
  searchPlaceholder: 'Search items...'
567
569
  });
568
570
 
571
+ // Search with locale support for case-insensitive search
572
+ $('#mySelect').oneSelect({
573
+ data: ['İstanbul', 'Isparta', 'Ankara', 'İzmir'],
574
+ showSearch: true,
575
+ locale: 'tr-TR' // Turkish locale for proper İ → i, I → ı mapping
576
+ });
577
+
569
578
  // HTML data attribute example (local search)
570
579
  <div class="one-select"
571
580
  data-ones-data='["Apple", "Banana", "Cherry", "Mango"]'
@@ -573,6 +582,13 @@ $('#mySelect').oneSelect({
573
582
  data-ones-search-placeholder="Find a fruit...">
574
583
  </div>
575
584
 
585
+ // HTML data attribute example (local search with Turkish locale)
586
+ <div class="one-select"
587
+ data-ones-data='["İstanbul", "Isparta", "Ankara"]'
588
+ data-ones-show-search="true"
589
+ data-ones-locale="tr-TR">
590
+ </div>
591
+
576
592
  // HTML data attribute example (AJAX search)
577
593
  <div class="one-select"
578
594
  data-ones-show-search="true"
package/js/one-select.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * OneSelect - jQuery Multi-Select Dropdown Plugin
3
- * Version: 1.2.4
4
- * https://github.com/your-repo/one-select
3
+ * Version: 1.3.0
4
+ * https://github.com/KamranBeylarov/one-select
5
5
  *
6
6
  * Copyright 2026
7
7
  * Licensed under MIT
@@ -95,6 +95,7 @@
95
95
  searchPlaceholder: 'Search...',
96
96
  searchUrl: null, // URL for AJAX search (GET request)
97
97
  searchDebounceDelay: 300,// Delay in milliseconds for search debounce
98
+ locale: 'az-AZ', // Locale for case-insensitive search (e.g., 'en-US', 'tr-TR', 'az-AZ')
98
99
  closeOnScroll: false,
99
100
  closeOnOutside: true, // Close dropdown when clicking outside (default: true)
100
101
  submitForm: false,
@@ -143,6 +144,7 @@
143
144
  'ones-search-placeholder': 'searchPlaceholder',
144
145
  'ones-search-url': 'searchUrl',
145
146
  'ones-search-debounce-delay': 'searchDebounceDelay',
147
+ 'ones-locale': 'locale',
146
148
  'ones-close-on-scroll': 'closeOnScroll',
147
149
  'ones-close-on-outside': 'closeOnOutside',
148
150
  'ones-submit-form': 'submitForm',
@@ -510,7 +512,10 @@
510
512
  // Filter options by label
511
513
  options.each(function () {
512
514
  var option = $(this);
513
- var label = option.find('label').text().toLowerCase();
515
+ // Use configured locale for proper case-insensitive search
516
+ // This handles special characters correctly based on locale
517
+ // Examples: 'tr-TR' for Turkish, 'az-AZ' for Azerbaijani, 'en-US' for English
518
+ var label = option.find('label').text().toLocaleLowerCase(self.settings.locale);
514
519
 
515
520
  if (label.indexOf(searchText) !== -1) {
516
521
  option.show();
@@ -613,7 +618,8 @@
613
618
  } else {
614
619
  // Local filtering (default)
615
620
  this.searchInput.find('.cms-search-input').on('keyup', function () {
616
- var searchText = $(this).val().toLowerCase();
621
+ // Use configured locale for proper case-insensitive search
622
+ var searchText = $(this).val().toLocaleLowerCase(self.settings.locale);
617
623
  self.filterOptions(searchText);
618
624
  });
619
625
  }
@@ -1 +1 @@
1
- (s=>{"function"==typeof define&&define.amd?define(["jquery"],s):"object"==typeof module&&module.exports?module.exports=function(t,e){return void 0===e&&(e="undefined"!=typeof window?require("jquery"):require("jquery")(t)),s(e),e}:s(window.jQuery||window.$)})(function(c){var s={},a="oneSelect";function n(s,n){var i;return function(){var t=this,e=arguments;clearTimeout(i),i=setTimeout(function(){s.apply(t,e)},n)}}function o(t,e){this.element=t,this.$element=c(t),this.instanceId="ones-"+Math.random().toString(36).substr(2,9),t=this.readDataAttributes(),this.settings=c.extend({},o.defaults,e,t),this.init()}o.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},o.prototype={readDataAttributes:function(){var t=this,i={},e=(c.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,s){var n=t.$element.data(e);if(void 0!==n)if("data"===s||"value"===s)if("string"==typeof n)try{i[s]=JSON.parse(n)}catch(t){console.warn("OneSelect: Invalid JSON for "+e,n),i[s]=n}else i[s]=n;else i[s]="multiple"===s||"showCheckbox"===s||"showBadges"===s||"showSearch"===s||"closeOnScroll"===s||"closeOnOutside"===s||"submitForm"===s||"submitOnOutside"===s||"autoLoad"===s||"infinityScroll"===s?"string"==typeof n?"true"===n||"1"===n:!!n:"searchDebounceDelay"===s?"string"==typeof n?parseInt(n,10)||300:n||300:n}),this.$element.data("ones-ajax"));return e&&("string"==typeof e?i.ajax={url:e,method:"GET"}:"object"==typeof e&&(i.ajax=e)),i},isAppleDevice:function(){return 0<=navigator.platform.toUpperCase().indexOf("MAC")||0<=navigator.platform.toUpperCase().indexOf("IPHONE")||0<=navigator.platform.toUpperCase().indexOf("IPAD")||-1!==navigator.userAgent.indexOf("Macintosh")},init:function(){var e;null!=(s[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._isAppleDevice=this.isAppleDevice(),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),c("body").append(this.dropdown),this.renderOptions(),this.updateTriggerText(),this.updateHiddenInputs()},updateHiddenInputs:function(){var s,n,t,e;this.settings.name&&(t=null,(s=(t=this.settings.formId?c("#"+this.settings.formId):this.$element.closest("form")).length?t:this.wrapper).find('input.cms-hidden-input[data-cms-input="'+this.settings.name+'"]').remove(),n=this.settings.name,this.settings.multiple&&-1===n.indexOf("[")&&(n+="[]"),t=this.getSelectedValues(),Array.isArray(t)&&(t=t.filter(function(t){return null!=t&&""!==String(t).trim()})),this.settings.multiple?0===t.length?(e=c('<input type="hidden" class="cms-hidden-input">').attr("name",this.settings.name).attr("value","").attr("data-cms-input",this.settings.name),s.append(e)):c.each(t,function(t,e){e=c('<input type="hidden" class="cms-hidden-input">').attr("name",n).attr("value",e).attr("data-cms-input",this.settings.name).attr("data-cms-value",e);s.append(e)}.bind(this)):(t=0<t.length?t[0]:"",e=c('<input type="hidden" class="cms-hidden-input">').attr("name",n).attr("value",t).attr("data-cms-input",this.settings.name),s.append(e)))},createWrapper:function(){return c('<div class="cms-wrapper"></div>')},createTrigger:function(){return c('<div class="cms-trigger"><span class="cms-selected-text cms-placeholder">'+this.settings.placeholder+"</span></div>")},createDropdown:function(){return c('<div class="cms-dropdown"></div>')},createSearchInput:function(){return c('<div class="cms-search-wrapper"><input type="text" class="cms-search-input" placeholder="'+this.settings.searchPlaceholder+'" /></div>')},createOptionsContainer:function(){return c('<div class="cms-options-container"></div>')},createPreloader:function(){return c('<div class="cms-infinity-preloader"><div class="cms-spinner"></div></div>')},createButtons:function(){var t=c('<div class="cms-buttons"></div>');return this.okBtn=c('<button class="cms-btn cms-btn-ok">'+this.settings.okText+"</button>"),this.cancelBtn=c('<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),n=(this.optionsContainer.append(t),this);c.each(this.settings.data,function(t,e){var s=n.isValueSelected(t),t=n.createOption(t,e,s);n.optionsContainer.append(t)}),this.updateSelectAllState()},htmlEncode:function(t){return String(t).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")},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 n=this;c.each(t,function(t,e){var s;0<n.optionsContainer.find('.cms-option[data-value="'+n.htmlEncode(t)+'"]').length||(s=n.isValueSelected(t),t=n.createOption(t,e,s),n.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,s){var n="cms-option",i=(this.settings.showCheckbox||(n+=" cms-hide-checkbox"),s&&"select-all"!==t&&(n+=" selected"),this.generateCheckboxId(t)),n=c('<div class="'+n+'" data-value="'+this.htmlEncode(t)+'"></div>'),t=c('<input type="checkbox" id="'+this.htmlEncode(i)+'" value="'+this.htmlEncode(t)+'"'+(s?" checked":"")+">"),s=c('<label for="'+this.htmlEncode(i)+'">'+e+"</label>");return n.append(t),n.append(s),n},filterOptions:function(e){var t=this.optionsContainer.find('.cms-option:not([data-value="select-all"])');""===e?t.show():t.each(function(){var t=c(this);-1!==t.find("label").text().toLowerCase().indexOf(e)?t.show():t.hide()})},performAjaxSearch:function(t){var n=this;this.optionsContainer.addClass("cms-loading"),c.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),n.updateSearchResults(e||[]),n.optionsContainer.removeClass("cms-loading")},error:function(t,e,s){console.error("OneSelect: Search error",s),n.optionsContainer.removeClass("cms-loading"),n.settings.onLoadError&&n.settings.onLoadError.call(n,t,e,s)}})},updateSearchResults:function(t){this.optionsContainer.find('.cms-option:not([data-value="select-all"])').remove();var n=this;c.each(t,function(t,e){var s=n.isValueSelected(t),t=n.createOption(t,e,s);n.optionsContainer.append(t)}),this.updateSelectAllState()},attachEvents:function(){function t(t){if(o.wrapper.hasClass("open")){var e=t.target;if(0<c(e).closest(".cms-dropdown, .cms-wrapper").length)l[e]={left:e.scrollLeft,top:e.scrollTop};else if(!(e.scrollWidth<=e.clientWidth&&e.scrollHeight<=e.clientHeight)){var s=l[e];if(s){var n=e.scrollLeft,i=e.scrollTop,a=Math.abs(n-s.left);Math.abs(i-s.top);if(0!==a)if(o._isAppleDevice){if(o._accumulatedHorizontalDelta+=a,o._accumulatedHorizontalDelta>r)return void o.close()}else if(r<a)return void o.close();l[e]={left:n,top:i}}else l[e]={left:e.scrollLeft,top:e.scrollTop}}}else l[t.target]={left:t.target.scrollLeft,top:t.target.scrollTop}}var e,s,o=this,l=(this.trigger.on("click",function(t){t.stopPropagation(),o.toggle()}),this.settings.showSearch&&(this.settings.searchUrl?(e=n(function(t){o.performAjaxSearch(t)},this.settings.searchDebounceDelay),this.searchInput.find(".cms-search-input").on("keyup",function(){var t=c(this).val();0<t.length?e(t):o.filterOptions("")})):this.searchInput.find(".cms-search-input").on("keyup",function(){var t=c(this).val().toLowerCase();o.filterOptions(t)})),c(window).on("resize.cms",function(){o.wrapper.hasClass("open")&&o.updateDropdownPosition()}),this.settings.closeOnScroll?c(window).on("scroll.cms",function(){o.wrapper.hasClass("open")&&o.close()}):c(window).on("scroll.cms",function(){o.wrapper.hasClass("open")&&o.updateDropdownPosition()}),{}),r=(o._accumulatedHorizontalDelta=0,o._isAppleDevice?100:0);document.addEventListener("scroll",t,!0),o._scrollHandler=t,c(window).on("click.ones",function(t){!o.settings.closeOnOutside||!o.wrapper.hasClass("open")||0<(t=c(t.target)).closest(".cms-wrapper").length||0<t.closest(".cms-dropdown").length||(o.settings.submitOnOutside&&(o.updateTriggerText(),o.settings.onOk&&o.settings.onOk.call(o,o.getSelectedValues(),o.getSelectedLabels()),o.submitForm()),o.close())}),this.optionsContainer.on("click",".cms-option",function(t){var e=c(t.target);e.is('input[type="checkbox"]')||0<e.closest("label").length||0<e.closest("button").length||(t.preventDefault(),t.stopPropagation(),(e=c(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=c(this),e=t.closest(".cms-option");"select-all"===e.data("value")?o.handleSelectAll(t.prop("checked")):o.handleOptionChange(e)}),this.okBtn.on("click",function(t){t.stopPropagation(),o.handleOk()}),this.cancelBtn.on("click",function(t){t.stopPropagation(),o.handleCancel()}),this.settings.infinityScroll&&this.settings.ajax&&this.settings.ajax.url&&(s=n(function(){!o.hasNextPage||o.settings.loading||o.loadNextPage()},200),this.optionsContainer.on("scroll",function(){var t=c(this);t.scrollTop()+t.innerHeight()>=t[0].scrollHeight-50&&s()})),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(s){var n=this;s||Array.isArray(this.settings.value)&&(this.settings.value=[]),this.optionsContainer.find('.cms-option:not([data-value="select-all"])').each(function(){var t,e=c(this);e.find('input[type="checkbox"]').prop("checked",s),s?(e.addClass("selected"),t=e.find('input[type="checkbox"]').val(),Array.isArray(n.settings.value)&&!n.isValueSelected(t)&&n.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,s=this.optionsContainer.find('.cms-option[data-value="select-all"] input[type="checkbox"]');s.prop("indeterminate",!1),s.prop("checked",!1),0!==e&&(e===t&&0<t?s.prop("checked",!0):s.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(c(this).text())}),t},updateTriggerText:function(){var a,t=this.getSelectedLabels(),e=this.getSelectedValues(),s=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,c.each(e,function(t,e){var s=c('<span class="cms-badge"></span>'),n=e,i=a.optionsContainer.find('.cms-option[data-value="'+a.htmlEncode(e)+'"]'),i=(i.length&&(n=i.find("label").text()),c("<span></span>").text(n)),n=c('<button type="button" class="cms-badge-remove">&times;</button>');n.on("click",function(t){t.stopPropagation(),a.unselect(e)}),s.append(i),s.append(n),o.append(s)})):(o.empty().removeClass("cms-placeholder"),o.text(s+" items selected")),this.updateExternalBadges(e,t)},updateExternalBadges:function(t,i){var a,o;this.settings.showBadgesExternal&&(0===(a=c("#"+this.settings.showBadgesExternal)).length?console.warn("OneSelect: External container not found - #"+this.settings.showBadgesExternal):(a.empty(),0!==t.length&&(o=this,c.each(t,function(t,e){var s=c('<span class="cms-badge"></span>'),t=c("<span></span>").text(i[t]),n=c('<button type="button" class="cms-badge-remove">&times;</button>');n.on("click",function(t){t.preventDefault(),t.stopPropagation(),o.unselect(e)}),s.append(t),s.append(n),a.append(s)}))))},toggle:function(){this.wrapper.hasClass("open")?this.close():this.open()},open:function(){this._accumulatedHorizontalDelta=0,c(".cms-wrapper.open").not(this.wrapper).removeClass("open"),c(".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._accumulatedHorizontalDelta=0,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=c("#"+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,s,n,i){var e,a,o=this,l=t||this.settings.ajax;l&&l.url?(this.settings.beforeLoad&&this.settings.beforeLoad.call(this,l),i||this.trigger.find(".cms-selected-text").text("Loading..."),t=c.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=c.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),s&&s.call(o,e,t)},error:function(t,e,s){i||o.trigger.find(".cms-selected-text").text("Error loading data"),o.settings.onLoadError&&o.settings.onLoadError.call(o,t,e,s),n&&n.call(o,t,e,s)}},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,s){l.error(t,e,s),a(t,e,s)}),c.ajax(t)):console.error("OneSelect: Ajax configuration or url is missing")},loadNextPage:function(){var s=this,t=(this.settings.loading=!0,this.preloader.show(),c.extend(!0,{},this.settings.ajax));t.data=t.data||{},t.data.page=this.currentPage+1,this.loadData(t,function(t,e){s.settings.loading=!1,s.preloader.hide(),e.currentPage||s.currentPage++},function(){s.settings.loading=!1,s.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,s=this.optionsContainer.find('.cms-option:not([data-value="select-all"]) input[type="checkbox"][value="'+this.htmlEncode(t)+'"]');s.length&&(s.prop("checked",!1),s.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,s,n=this.optionsContainer.find('.cms-option:not([data-value="select-all"]) input[type="checkbox"][value="'+this.htmlEncode(t)+'"]');n.length&&(e=n.prop("checked"),n.prop("checked",!e),n=n.closest(".cms-option"),e?(n.removeClass("selected"),Array.isArray(this.settings.value)&&(s=String(t).trim(),this.settings.value=this.settings.value.filter(function(t){return String(t).trim()!==s}))):(n.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 s[this.instanceId],c(window).off(".cms"),c(window).off(".ones"),c(document).off(".onescroll"),this._scrollHandler&&(document.removeEventListener("scroll",this._scrollHandler,!0),this._scrollHandler=null),this._accumulatedHorizontalDelta=null,this.trigger.off(),this.okBtn.off(),this.cancelBtn.off(),this.optionsContainer.off(),c('input.cms-hidden-input[data-cms-input="'+this.settings.name+'"]').remove(),this.wrapper.remove(),this.dropdown.remove(),this.$element.removeData(a)}},o.getInstance=function(t){return s[t]||null},o.getAllInstances=function(){return s},c.fn[a]=function(s){var n=arguments,i=this;return this.each(function(){var t=c(this),e=t.data(a);if(!e){if("object"!=typeof s&&s)return;e=new o(this,s),t.data(a,e)}"string"==typeof s&&("value"===s?i=void 0!==n[1]?(e.setValue(n[1]),t):e.getValue():"getValues"===s?i=e.getSelectedValues():"getLabels"===s?i=e.getSelectedLabels():"getInstanceId"===s?i=e.getInstanceId():"updateData"===s?e.updateData(n[1]):"loadData"===s?e.loadData(n[1],n[2],n[3]):"reload"===s?e.reload():"select"===s?e.select(n[1]):"unselect"===s?e.unselect(n[1]):"selectAll"===s?e.selectAll():"unselectAll"===s?e.unselectAll():"toggleSelection"===s?e.toggleSelection(n[1]):"open"===s?e.open():"close"===s?e.close():"destroy"===s&&e.destroy())}),i},c.fn[a].Constructor=o,c.fn[a].getInstance=o.getInstance,c.fn[a].getAllInstances=o.getAllInstances});
1
+ (s=>{"function"==typeof define&&define.amd?define(["jquery"],s):"object"==typeof module&&module.exports?module.exports=function(t,e){return void 0===e&&(e="undefined"!=typeof window?require("jquery"):require("jquery")(t)),s(e),e}:s(window.jQuery||window.$)})(function(c){var s={},a="oneSelect";function n(s,n){var i;return function(){var t=this,e=arguments;clearTimeout(i),i=setTimeout(function(){s.apply(t,e)},n)}}function o(t,e){this.element=t,this.$element=c(t),this.instanceId="ones-"+Math.random().toString(36).substr(2,9),t=this.readDataAttributes(),this.settings=c.extend({},o.defaults,e,t),this.init()}o.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,locale:"az-AZ",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},o.prototype={readDataAttributes:function(){var t=this,i={},e=(c.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-locale":"locale","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,s){var n=t.$element.data(e);if(void 0!==n)if("data"===s||"value"===s)if("string"==typeof n)try{i[s]=JSON.parse(n)}catch(t){console.warn("OneSelect: Invalid JSON for "+e,n),i[s]=n}else i[s]=n;else i[s]="multiple"===s||"showCheckbox"===s||"showBadges"===s||"showSearch"===s||"closeOnScroll"===s||"closeOnOutside"===s||"submitForm"===s||"submitOnOutside"===s||"autoLoad"===s||"infinityScroll"===s?"string"==typeof n?"true"===n||"1"===n:!!n:"searchDebounceDelay"===s?"string"==typeof n?parseInt(n,10)||300:n||300:n}),this.$element.data("ones-ajax"));return e&&("string"==typeof e?i.ajax={url:e,method:"GET"}:"object"==typeof e&&(i.ajax=e)),i},isAppleDevice:function(){return 0<=navigator.platform.toUpperCase().indexOf("MAC")||0<=navigator.platform.toUpperCase().indexOf("IPHONE")||0<=navigator.platform.toUpperCase().indexOf("IPAD")||-1!==navigator.userAgent.indexOf("Macintosh")},init:function(){var e;null!=(s[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._isAppleDevice=this.isAppleDevice(),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),c("body").append(this.dropdown),this.renderOptions(),this.updateTriggerText(),this.updateHiddenInputs()},updateHiddenInputs:function(){var s,n,t,e;this.settings.name&&(t=null,(s=(t=this.settings.formId?c("#"+this.settings.formId):this.$element.closest("form")).length?t:this.wrapper).find('input.cms-hidden-input[data-cms-input="'+this.settings.name+'"]').remove(),n=this.settings.name,this.settings.multiple&&-1===n.indexOf("[")&&(n+="[]"),t=this.getSelectedValues(),Array.isArray(t)&&(t=t.filter(function(t){return null!=t&&""!==String(t).trim()})),this.settings.multiple?0===t.length?(e=c('<input type="hidden" class="cms-hidden-input">').attr("name",this.settings.name).attr("value","").attr("data-cms-input",this.settings.name),s.append(e)):c.each(t,function(t,e){e=c('<input type="hidden" class="cms-hidden-input">').attr("name",n).attr("value",e).attr("data-cms-input",this.settings.name).attr("data-cms-value",e);s.append(e)}.bind(this)):(t=0<t.length?t[0]:"",e=c('<input type="hidden" class="cms-hidden-input">').attr("name",n).attr("value",t).attr("data-cms-input",this.settings.name),s.append(e)))},createWrapper:function(){return c('<div class="cms-wrapper"></div>')},createTrigger:function(){return c('<div class="cms-trigger"><span class="cms-selected-text cms-placeholder">'+this.settings.placeholder+"</span></div>")},createDropdown:function(){return c('<div class="cms-dropdown"></div>')},createSearchInput:function(){return c('<div class="cms-search-wrapper"><input type="text" class="cms-search-input" placeholder="'+this.settings.searchPlaceholder+'" /></div>')},createOptionsContainer:function(){return c('<div class="cms-options-container"></div>')},createPreloader:function(){return c('<div class="cms-infinity-preloader"><div class="cms-spinner"></div></div>')},createButtons:function(){var t=c('<div class="cms-buttons"></div>');return this.okBtn=c('<button class="cms-btn cms-btn-ok">'+this.settings.okText+"</button>"),this.cancelBtn=c('<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),n=(this.optionsContainer.append(t),this);c.each(this.settings.data,function(t,e){var s=n.isValueSelected(t),t=n.createOption(t,e,s);n.optionsContainer.append(t)}),this.updateSelectAllState()},htmlEncode:function(t){return String(t).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")},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 n=this;c.each(t,function(t,e){var s;0<n.optionsContainer.find('.cms-option[data-value="'+n.htmlEncode(t)+'"]').length||(s=n.isValueSelected(t),t=n.createOption(t,e,s),n.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,s){var n="cms-option",i=(this.settings.showCheckbox||(n+=" cms-hide-checkbox"),s&&"select-all"!==t&&(n+=" selected"),this.generateCheckboxId(t)),n=c('<div class="'+n+'" data-value="'+this.htmlEncode(t)+'"></div>'),t=c('<input type="checkbox" id="'+this.htmlEncode(i)+'" value="'+this.htmlEncode(t)+'"'+(s?" checked":"")+">"),s=c('<label for="'+this.htmlEncode(i)+'">'+e+"</label>");return n.append(t),n.append(s),n},filterOptions:function(e){var s=this,t=this.optionsContainer.find('.cms-option:not([data-value="select-all"])');""===e?t.show():t.each(function(){var t=c(this);-1!==t.find("label").text().toLocaleLowerCase(s.settings.locale).indexOf(e)?t.show():t.hide()})},performAjaxSearch:function(t){var n=this;this.optionsContainer.addClass("cms-loading"),c.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),n.updateSearchResults(e||[]),n.optionsContainer.removeClass("cms-loading")},error:function(t,e,s){console.error("OneSelect: Search error",s),n.optionsContainer.removeClass("cms-loading"),n.settings.onLoadError&&n.settings.onLoadError.call(n,t,e,s)}})},updateSearchResults:function(t){this.optionsContainer.find('.cms-option:not([data-value="select-all"])').remove();var n=this;c.each(t,function(t,e){var s=n.isValueSelected(t),t=n.createOption(t,e,s);n.optionsContainer.append(t)}),this.updateSelectAllState()},attachEvents:function(){function t(t){if(o.wrapper.hasClass("open")){var e=t.target;if(0<c(e).closest(".cms-dropdown, .cms-wrapper").length)l[e]={left:e.scrollLeft,top:e.scrollTop};else if(!(e.scrollWidth<=e.clientWidth&&e.scrollHeight<=e.clientHeight)){var s=l[e];if(s){var n=e.scrollLeft,i=e.scrollTop,a=Math.abs(n-s.left);Math.abs(i-s.top);if(0!==a)if(o._isAppleDevice){if(o._accumulatedHorizontalDelta+=a,o._accumulatedHorizontalDelta>r)return void o.close()}else if(r<a)return void o.close();l[e]={left:n,top:i}}else l[e]={left:e.scrollLeft,top:e.scrollTop}}}else l[t.target]={left:t.target.scrollLeft,top:t.target.scrollTop}}var e,s,o=this,l=(this.trigger.on("click",function(t){t.stopPropagation(),o.toggle()}),this.settings.showSearch&&(this.settings.searchUrl?(e=n(function(t){o.performAjaxSearch(t)},this.settings.searchDebounceDelay),this.searchInput.find(".cms-search-input").on("keyup",function(){var t=c(this).val();0<t.length?e(t):o.filterOptions("")})):this.searchInput.find(".cms-search-input").on("keyup",function(){var t=c(this).val().toLocaleLowerCase(o.settings.locale);o.filterOptions(t)})),c(window).on("resize.cms",function(){o.wrapper.hasClass("open")&&o.updateDropdownPosition()}),this.settings.closeOnScroll?c(window).on("scroll.cms",function(){o.wrapper.hasClass("open")&&o.close()}):c(window).on("scroll.cms",function(){o.wrapper.hasClass("open")&&o.updateDropdownPosition()}),{}),r=(o._accumulatedHorizontalDelta=0,o._isAppleDevice?100:0);document.addEventListener("scroll",t,!0),o._scrollHandler=t,c(window).on("click.ones",function(t){!o.settings.closeOnOutside||!o.wrapper.hasClass("open")||0<(t=c(t.target)).closest(".cms-wrapper").length||0<t.closest(".cms-dropdown").length||(o.settings.submitOnOutside&&(o.updateTriggerText(),o.settings.onOk&&o.settings.onOk.call(o,o.getSelectedValues(),o.getSelectedLabels()),o.submitForm()),o.close())}),this.optionsContainer.on("click",".cms-option",function(t){var e=c(t.target);e.is('input[type="checkbox"]')||0<e.closest("label").length||0<e.closest("button").length||(t.preventDefault(),t.stopPropagation(),(e=c(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=c(this),e=t.closest(".cms-option");"select-all"===e.data("value")?o.handleSelectAll(t.prop("checked")):o.handleOptionChange(e)}),this.okBtn.on("click",function(t){t.stopPropagation(),o.handleOk()}),this.cancelBtn.on("click",function(t){t.stopPropagation(),o.handleCancel()}),this.settings.infinityScroll&&this.settings.ajax&&this.settings.ajax.url&&(s=n(function(){!o.hasNextPage||o.settings.loading||o.loadNextPage()},200),this.optionsContainer.on("scroll",function(){var t=c(this);t.scrollTop()+t.innerHeight()>=t[0].scrollHeight-50&&s()})),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(s){var n=this;s||Array.isArray(this.settings.value)&&(this.settings.value=[]),this.optionsContainer.find('.cms-option:not([data-value="select-all"])').each(function(){var t,e=c(this);e.find('input[type="checkbox"]').prop("checked",s),s?(e.addClass("selected"),t=e.find('input[type="checkbox"]').val(),Array.isArray(n.settings.value)&&!n.isValueSelected(t)&&n.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,s=this.optionsContainer.find('.cms-option[data-value="select-all"] input[type="checkbox"]');s.prop("indeterminate",!1),s.prop("checked",!1),0!==e&&(e===t&&0<t?s.prop("checked",!0):s.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(c(this).text())}),t},updateTriggerText:function(){var a,t=this.getSelectedLabels(),e=this.getSelectedValues(),s=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,c.each(e,function(t,e){var s=c('<span class="cms-badge"></span>'),n=e,i=a.optionsContainer.find('.cms-option[data-value="'+a.htmlEncode(e)+'"]'),i=(i.length&&(n=i.find("label").text()),c("<span></span>").text(n)),n=c('<button type="button" class="cms-badge-remove">&times;</button>');n.on("click",function(t){t.stopPropagation(),a.unselect(e)}),s.append(i),s.append(n),o.append(s)})):(o.empty().removeClass("cms-placeholder"),o.text(s+" items selected")),this.updateExternalBadges(e,t)},updateExternalBadges:function(t,i){var a,o;this.settings.showBadgesExternal&&(0===(a=c("#"+this.settings.showBadgesExternal)).length?console.warn("OneSelect: External container not found - #"+this.settings.showBadgesExternal):(a.empty(),0!==t.length&&(o=this,c.each(t,function(t,e){var s=c('<span class="cms-badge"></span>'),t=c("<span></span>").text(i[t]),n=c('<button type="button" class="cms-badge-remove">&times;</button>');n.on("click",function(t){t.preventDefault(),t.stopPropagation(),o.unselect(e)}),s.append(t),s.append(n),a.append(s)}))))},toggle:function(){this.wrapper.hasClass("open")?this.close():this.open()},open:function(){this._accumulatedHorizontalDelta=0,c(".cms-wrapper.open").not(this.wrapper).removeClass("open"),c(".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._accumulatedHorizontalDelta=0,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=c("#"+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,s,n,i){var e,a,o=this,l=t||this.settings.ajax;l&&l.url?(this.settings.beforeLoad&&this.settings.beforeLoad.call(this,l),i||this.trigger.find(".cms-selected-text").text("Loading..."),t=c.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=c.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),s&&s.call(o,e,t)},error:function(t,e,s){i||o.trigger.find(".cms-selected-text").text("Error loading data"),o.settings.onLoadError&&o.settings.onLoadError.call(o,t,e,s),n&&n.call(o,t,e,s)}},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,s){l.error(t,e,s),a(t,e,s)}),c.ajax(t)):console.error("OneSelect: Ajax configuration or url is missing")},loadNextPage:function(){var s=this,t=(this.settings.loading=!0,this.preloader.show(),c.extend(!0,{},this.settings.ajax));t.data=t.data||{},t.data.page=this.currentPage+1,this.loadData(t,function(t,e){s.settings.loading=!1,s.preloader.hide(),e.currentPage||s.currentPage++},function(){s.settings.loading=!1,s.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,s=this.optionsContainer.find('.cms-option:not([data-value="select-all"]) input[type="checkbox"][value="'+this.htmlEncode(t)+'"]');s.length&&(s.prop("checked",!1),s.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,s,n=this.optionsContainer.find('.cms-option:not([data-value="select-all"]) input[type="checkbox"][value="'+this.htmlEncode(t)+'"]');n.length&&(e=n.prop("checked"),n.prop("checked",!e),n=n.closest(".cms-option"),e?(n.removeClass("selected"),Array.isArray(this.settings.value)&&(s=String(t).trim(),this.settings.value=this.settings.value.filter(function(t){return String(t).trim()!==s}))):(n.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 s[this.instanceId],c(window).off(".cms"),c(window).off(".ones"),c(document).off(".onescroll"),this._scrollHandler&&(document.removeEventListener("scroll",this._scrollHandler,!0),this._scrollHandler=null),this._accumulatedHorizontalDelta=null,this.trigger.off(),this.okBtn.off(),this.cancelBtn.off(),this.optionsContainer.off(),c('input.cms-hidden-input[data-cms-input="'+this.settings.name+'"]').remove(),this.wrapper.remove(),this.dropdown.remove(),this.$element.removeData(a)}},o.getInstance=function(t){return s[t]||null},o.getAllInstances=function(){return s},c.fn[a]=function(s){var n=arguments,i=this;return this.each(function(){var t=c(this),e=t.data(a);if(!e){if("object"!=typeof s&&s)return;e=new o(this,s),t.data(a,e)}"string"==typeof s&&("value"===s?i=void 0!==n[1]?(e.setValue(n[1]),t):e.getValue():"getValues"===s?i=e.getSelectedValues():"getLabels"===s?i=e.getSelectedLabels():"getInstanceId"===s?i=e.getInstanceId():"updateData"===s?e.updateData(n[1]):"loadData"===s?e.loadData(n[1],n[2],n[3]):"reload"===s?e.reload():"select"===s?e.select(n[1]):"unselect"===s?e.unselect(n[1]):"selectAll"===s?e.selectAll():"unselectAll"===s?e.unselectAll():"toggleSelection"===s?e.toggleSelection(n[1]):"open"===s?e.open():"close"===s?e.close():"destroy"===s&&e.destroy())}),i},c.fn[a].Constructor=o,c.fn[a].getInstance=o.getInstance,c.fn[a].getAllInstances=o.getAllInstances});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kamranbaylarov/one-select",
3
- "version": "1.2.4",
3
+ "version": "1.3.0",
4
4
  "description": "A powerful, flexible, and feature-rich multi-select dropdown component for jQuery",
5
5
  "main": "js/one-select.js",
6
6
  "scripts": {