@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 +70 -54
- package/js/one-select.js +10 -4
- 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.
|
|
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
|
|
141
|
-
|
|
140
|
+
| Parameter | Type | Default | Description |
|
|
141
|
+
|---------|-----|-----------------------|-------------|
|
|
142
142
|
| `placeholder` | String | `'Select options...'` | Placeholder text when nothing selected |
|
|
143
|
-
| `selectAllText` | String | `'Select All'`
|
|
144
|
-
| `okText` | String | `'OK'`
|
|
145
|
-
| `cancelText` | String | `'Cancel'`
|
|
146
|
-
| `data` | Array/Object | `[]`
|
|
147
|
-
| `value` | Number/Array/String/null | `null`
|
|
148
|
-
| `showCheckbox` | Boolean | `true`
|
|
149
|
-
| `showBadges` | Boolean | `false`
|
|
150
|
-
| `showBadgesExternal` | String/null | `null`
|
|
151
|
-
| `showSearch` | Boolean | `false`
|
|
152
|
-
| `searchPlaceholder` | String | `'Search...'`
|
|
153
|
-
| `searchUrl` | String/null | `null`
|
|
154
|
-
| `searchDebounceDelay` | Number | `300`
|
|
155
|
-
| `
|
|
156
|
-
| `
|
|
157
|
-
| `
|
|
158
|
-
| `
|
|
159
|
-
| `
|
|
160
|
-
| `
|
|
161
|
-
| `
|
|
162
|
-
| `
|
|
163
|
-
| `
|
|
164
|
-
| `
|
|
165
|
-
| `
|
|
166
|
-
| `
|
|
167
|
-
| `
|
|
168
|
-
| `
|
|
169
|
-
| `
|
|
170
|
-
| `
|
|
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-
|
|
196
|
-
| `data-ones-close-on-
|
|
197
|
-
| `data-ones-
|
|
198
|
-
| `data-ones-submit-
|
|
199
|
-
| `data-ones-
|
|
200
|
-
| `data-ones-
|
|
201
|
-
| `data-ones-
|
|
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.
|
|
4
|
-
* https://github.com/
|
|
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
|
-
|
|
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
|
-
|
|
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
|
}
|
package/js/one-select.min.js
CHANGED
|
@@ -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,"&").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 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">×</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">×</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,"&").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 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">×</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">×</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});
|