mirror of
https://github.com/Choices-js/Choices.git
synced 2024-05-23 07:52:22 +02:00
Expose methods from wrapped elements
This commit is contained in:
parent
bd77f458b3
commit
859653ff72
|
@ -359,9 +359,9 @@ class Choices {
|
||||||
// Simplify store data to just values
|
// Simplify store data to just values
|
||||||
const itemsFiltered = this.store.getItemsReducedToValues(items);
|
const itemsFiltered = this.store.getItemsReducedToValues(items);
|
||||||
const itemsFilteredString = itemsFiltered.join(this.config.delimiter);
|
const itemsFilteredString = itemsFiltered.join(this.config.delimiter);
|
||||||
|
|
||||||
// Update the value of the hidden input
|
// Update the value of the hidden input
|
||||||
this.passedElement.element.setAttribute('value', itemsFilteredString);
|
this.passedElement.setValue(itemsFilteredString);
|
||||||
this.passedElement.element.value = itemsFilteredString;
|
|
||||||
} else {
|
} else {
|
||||||
const selectedOptionsFragment = document.createDocumentFragment();
|
const selectedOptionsFragment = document.createDocumentFragment();
|
||||||
const addOptionToFragment = (item) => {
|
const addOptionToFragment = (item) => {
|
||||||
|
@ -373,10 +373,8 @@ class Choices {
|
||||||
|
|
||||||
// Add each list item to list
|
// Add each list item to list
|
||||||
items.forEach(item => addOptionToFragment(item));
|
items.forEach(item => addOptionToFragment(item));
|
||||||
|
// Update the options of the hidden input
|
||||||
// Update selected choices
|
this.passedElement.setOptions(selectedOptionsFragment);
|
||||||
this.passedElement.element.innerHTML = '';
|
|
||||||
this.passedElement.element.appendChild(selectedOptionsFragment);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const addItemToFragment = (item) => {
|
const addItemToFragment = (item) => {
|
||||||
|
@ -922,11 +920,10 @@ class Choices {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.passedElement.element.disabled = false;
|
this.passedElement.enable();
|
||||||
|
|
||||||
if (this.containerOuter.isDisabled) {
|
if (this.containerOuter.isDisabled) {
|
||||||
this._addEventListeners();
|
this._addEventListeners();
|
||||||
this.passedElement.element.removeAttribute('disabled');
|
|
||||||
this.input.enable();
|
this.input.enable();
|
||||||
this.containerOuter.enable();
|
this.containerOuter.enable();
|
||||||
}
|
}
|
||||||
|
@ -944,11 +941,10 @@ class Choices {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.passedElement.element.disabled = true;
|
this.passedElement.disable();
|
||||||
|
|
||||||
if (!this.containerOuter.isDisabled) {
|
if (!this.containerOuter.isDisabled) {
|
||||||
this._removeEventListeners();
|
this._removeEventListeners();
|
||||||
this.passedElement.element.setAttribute('disabled', '');
|
|
||||||
this.input.disable();
|
this.input.disable();
|
||||||
this.containerOuter.disable();
|
this.containerOuter.disable();
|
||||||
}
|
}
|
||||||
|
@ -2309,14 +2305,14 @@ class Choices {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.isSelectElement) {
|
if (this.isSelectElement) {
|
||||||
const passedGroups = Array.from(this.passedElement.element.getElementsByTagName('OPTGROUP'));
|
const passedGroups = this.passedElement.getOptionGroups();
|
||||||
|
|
||||||
this.highlightPosition = 0;
|
this.highlightPosition = 0;
|
||||||
this.isSearching = false;
|
this.isSearching = false;
|
||||||
|
|
||||||
if (passedGroups && passedGroups.length) {
|
if (passedGroups && passedGroups.length) {
|
||||||
// If we have a placeholder option
|
// If we have a placeholder option
|
||||||
const placeholderChoice = this.passedElement.element.querySelector('option[placeholder]');
|
const placeholderChoice = this.passedElement.getPlaceholderOption();
|
||||||
if (placeholderChoice && placeholderChoice.parentNode.tagName === 'SELECT') {
|
if (placeholderChoice && placeholderChoice.parentNode.tagName === 'SELECT') {
|
||||||
this._addChoice(
|
this._addChoice(
|
||||||
placeholderChoice.value,
|
placeholderChoice.value,
|
||||||
|
@ -2333,7 +2329,7 @@ class Choices {
|
||||||
this._addGroup(group, (group.id || null));
|
this._addGroup(group, (group.id || null));
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
const passedOptions = Array.from(this.passedElement.element.options);
|
const passedOptions = this.passedElement.getOptions();
|
||||||
const filter = this.config.sortFilter;
|
const filter = this.config.sortFilter;
|
||||||
const allChoices = this.presetChoices;
|
const allChoices = this.presetChoices;
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ export default class WrappedElement {
|
||||||
this.parentInstance = instance;
|
this.parentInstance = instance;
|
||||||
this.element = element;
|
this.element = element;
|
||||||
this.classNames = classNames;
|
this.classNames = classNames;
|
||||||
|
this.isDisabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
conceal() {
|
conceal() {
|
||||||
|
@ -50,4 +51,16 @@ export default class WrappedElement {
|
||||||
// Re-assign values - this is weird, I know
|
// Re-assign values - this is weird, I know
|
||||||
this.element.value = this.element.value;
|
this.element.value = this.element.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enable() {
|
||||||
|
this.element.removeAttribute('disabled');
|
||||||
|
this.element.disabled = false;
|
||||||
|
this.isDisabled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
disable() {
|
||||||
|
this.element.setAttribute('disabled', '');
|
||||||
|
this.element.disabled = true;
|
||||||
|
this.isDisabled = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,4 +15,17 @@ export default class WrappedInput extends WrappedElement {
|
||||||
reveal() {
|
reveal() {
|
||||||
super.reveal();
|
super.reveal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enable() {
|
||||||
|
super.enable();
|
||||||
|
}
|
||||||
|
|
||||||
|
disable() {
|
||||||
|
super.enable();
|
||||||
|
}
|
||||||
|
|
||||||
|
setValue(value) {
|
||||||
|
this.element.setAttribute('value', value);
|
||||||
|
this.element.value = value;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,4 +15,30 @@ export default class WrappedSelect extends WrappedElement {
|
||||||
reveal() {
|
reveal() {
|
||||||
super.reveal();
|
super.reveal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enable() {
|
||||||
|
super.enable();
|
||||||
|
}
|
||||||
|
|
||||||
|
disable() {
|
||||||
|
super.enable();
|
||||||
|
}
|
||||||
|
|
||||||
|
setOptions(options) {
|
||||||
|
this.element.innerHTML = '';
|
||||||
|
this.element.appendChild(options);
|
||||||
|
}
|
||||||
|
|
||||||
|
getPlaceholderOption() {
|
||||||
|
return this.element.querySelector('option[placeholder]');
|
||||||
|
}
|
||||||
|
|
||||||
|
getOptions() {
|
||||||
|
return Array.from(this.element.options);
|
||||||
|
}
|
||||||
|
|
||||||
|
getOptionGroups() {
|
||||||
|
return Array.from(this.element.getElementsByTagName('OPTGROUP'));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue