398 lines
13 KiB
JavaScript
398 lines
13 KiB
JavaScript
/**
|
|
* Theme: Attex - Responsive Tailwind CSS 3 Admin Dashboard
|
|
* Author: Coderthemes
|
|
* Module/App: choices (Select)
|
|
*/
|
|
|
|
|
|
document.addEventListener('DOMContentLoaded', function () {
|
|
var genericExamples = document.querySelectorAll('[data-trigger]');
|
|
for (i = 0; i < genericExamples.length; ++i) {
|
|
var element = genericExamples[i];
|
|
new Choices(element, {
|
|
allowHTML: true,
|
|
placeholderValue: 'placeholder set config',
|
|
searchPlaceholderValue: 'This is a search placeholder',
|
|
});
|
|
}
|
|
|
|
var textRemove = new Choices(
|
|
document.getElementById('choices-text-remove-button'),
|
|
{
|
|
allowHTML: true,
|
|
delimiter: ',',
|
|
editItems: true,
|
|
maxItemCount: 5,
|
|
removeItemButton: true,
|
|
}
|
|
);
|
|
|
|
var textUniqueVals = new Choices('#choices-text-unique-values', {
|
|
allowHTML: true,
|
|
paste: false,
|
|
duplicateItemsAllowed: false,
|
|
editItems: true,
|
|
});
|
|
|
|
var texti18n = new Choices('#choices-text-i18n', {
|
|
allowHTML: true,
|
|
paste: false,
|
|
duplicateItemsAllowed: false,
|
|
editItems: true,
|
|
maxItemCount: 5,
|
|
addItemText: function (value) {
|
|
return (
|
|
'Appuyez sur Entrée pour ajouter <b>"' + String(value) + '"</b>'
|
|
);
|
|
},
|
|
maxItemText: function (maxItemCount) {
|
|
return String(maxItemCount) + 'valeurs peuvent être ajoutées';
|
|
},
|
|
uniqueItemText: 'Cette valeur est déjà présente',
|
|
});
|
|
|
|
var textEmailFilter = new Choices('#choices-text-email-filter', {
|
|
allowHTML: true,
|
|
editItems: true,
|
|
addItemFilter: function (value) {
|
|
if (!value) {
|
|
return false;
|
|
}
|
|
|
|
const regex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
|
|
const expression = new RegExp(regex.source, 'i');
|
|
return expression.test(value);
|
|
},
|
|
}).setValue(['joe@bloggs.com']);
|
|
|
|
var textDisabled = new Choices('#choices-text-disabled', {
|
|
allowHTML: true,
|
|
addItems: false,
|
|
removeItems: false,
|
|
}).disable();
|
|
|
|
var textPrependAppendVal = new Choices(
|
|
'#choices-text-prepend-append-value',
|
|
{
|
|
allowHTML: true,
|
|
prependValue: 'item-',
|
|
appendValue: '-' + Date.now(),
|
|
}
|
|
).removeActiveItems();
|
|
|
|
var textPresetVal = new Choices('#choices-text-preset-values', {
|
|
allowHTML: true,
|
|
items: [
|
|
'Josh Johnson',
|
|
{
|
|
value: 'joe@bloggs.co.uk',
|
|
label: 'Joe Bloggs',
|
|
customProperties: {
|
|
description: 'Joe Blogg is such a generic name',
|
|
},
|
|
},
|
|
],
|
|
});
|
|
|
|
var multipleDefault = new Choices(
|
|
document.getElementById('choices-multiple-groups'),
|
|
{ allowHTML: true }
|
|
);
|
|
|
|
var multipleFetch = new Choices('#choices-multiple-remote-fetch', {
|
|
allowHTML: false,
|
|
placeholder: true,
|
|
placeholderValue: 'Pick an Strokes record',
|
|
maxItemCount: 5,
|
|
}).setChoices(function () {
|
|
return fetch(
|
|
'https://api.discogs.com/artists/55980/releases?token=QBRmstCkwXEvCjTclCpumbtNwvVkEzGAdELXyRyW'
|
|
)
|
|
.then(function (response) {
|
|
return response.json();
|
|
})
|
|
.then(function (data) {
|
|
return data.releases.map(function (release) {
|
|
return { value: release.title, label: release.title };
|
|
});
|
|
});
|
|
});
|
|
|
|
var multipleCancelButton = new Choices(
|
|
'#choices-multiple-remove-button',
|
|
{
|
|
allowHTML: true,
|
|
removeItemButton: true,
|
|
}
|
|
);
|
|
|
|
/* Use label on event */
|
|
var choicesSelect = new Choices('#choices-multiple-labels', {
|
|
allowHTML: true,
|
|
removeItemButton: true,
|
|
choices: [
|
|
{ value: 'One', label: 'Label One' },
|
|
{ value: 'Two', label: 'Label Two', disabled: true },
|
|
{ value: 'Three', label: 'Label Three' },
|
|
],
|
|
}).setChoices(
|
|
[
|
|
{ value: 'Four', label: 'Label Four', disabled: true },
|
|
{ value: 'Five', label: 'Label Five' },
|
|
{ value: 'Six', label: 'Label Six', selected: true },
|
|
],
|
|
'value',
|
|
'label',
|
|
false
|
|
);
|
|
|
|
choicesSelect.passedElement.element.addEventListener(
|
|
'addItem',
|
|
function (event) {
|
|
document.getElementById('message').innerHTML =
|
|
'You just added "' + event.detail.label + '"';
|
|
}
|
|
);
|
|
|
|
choicesSelect.passedElement.element.addEventListener(
|
|
'removeItem',
|
|
function (event) {
|
|
document.getElementById('message').innerHTML =
|
|
'You just removed "' + event.detail.label + '"';
|
|
}
|
|
);
|
|
|
|
var singleFetch = new Choices('#choices-single-remote-fetch', {
|
|
allowHTML: false,
|
|
searchPlaceholderValue: 'Search for an Arctic Monkeys record',
|
|
})
|
|
.setChoices(function () {
|
|
return fetch(
|
|
'https://api.discogs.com/artists/391170/releases?token=QBRmstCkwXEvCjTclCpumbtNwvVkEzGAdELXyRyW'
|
|
)
|
|
.then(function (response) {
|
|
return response.json();
|
|
})
|
|
.then(function (data) {
|
|
return data.releases.map(function (release) {
|
|
return { label: release.title, value: release.title };
|
|
});
|
|
});
|
|
})
|
|
.then(function (instance) {
|
|
instance.setChoiceByValue('Fake Tales Of San Francisco');
|
|
});
|
|
|
|
var singleXhrRemove = new Choices('#choices-single-remove-xhr', {
|
|
allowHTML: true,
|
|
removeItemButton: true,
|
|
searchPlaceholderValue: "Search for a Smiths' record",
|
|
}).setChoices(function (callback) {
|
|
return fetch(
|
|
'https://api.discogs.com/artists/83080/releases?token=QBRmstCkwXEvCjTclCpumbtNwvVkEzGAdELXyRyW'
|
|
)
|
|
.then(function (res) {
|
|
return res.json();
|
|
})
|
|
.then(function (data) {
|
|
return data.releases.map(function (release) {
|
|
return { label: release.title, value: release.title };
|
|
});
|
|
});
|
|
});
|
|
|
|
var singleNoSearch = new Choices('#choices-single-no-search', {
|
|
allowHTML: true,
|
|
searchEnabled: false,
|
|
removeItemButton: true,
|
|
choices: [
|
|
{ value: 'One', label: 'Label One' },
|
|
{ value: 'Two', label: 'Label Two', disabled: true },
|
|
{ value: 'Three', label: 'Label Three' },
|
|
],
|
|
}).setChoices(
|
|
[
|
|
{ value: 'Four', label: 'Label Four', disabled: true },
|
|
{ value: 'Five', label: 'Label Five' },
|
|
{ value: 'Six', label: 'Label Six', selected: true },
|
|
],
|
|
'value',
|
|
'label',
|
|
false
|
|
);
|
|
|
|
var singlePresetOpts = new Choices('#choices-single-preset-options', {
|
|
allowHTML: true,
|
|
placeholder: true,
|
|
}).setChoices(
|
|
[
|
|
{
|
|
label: 'Group one',
|
|
id: 1,
|
|
disabled: false,
|
|
choices: [
|
|
{ value: 'Child One', label: 'Child One', selected: true },
|
|
{ value: 'Child Two', label: 'Child Two', disabled: true },
|
|
{ value: 'Child Three', label: 'Child Three' },
|
|
],
|
|
},
|
|
{
|
|
label: 'Group two',
|
|
id: 2,
|
|
disabled: false,
|
|
choices: [
|
|
{ value: 'Child Four', label: 'Child Four', disabled: true },
|
|
{ value: 'Child Five', label: 'Child Five' },
|
|
{ value: 'Child Six', label: 'Child Six' },
|
|
],
|
|
},
|
|
],
|
|
'value',
|
|
'label'
|
|
);
|
|
|
|
var singleSelectedOpt = new Choices('#choices-single-selected-option', {
|
|
allowHTML: true,
|
|
searchFields: ['label', 'value', 'customProperties.description'],
|
|
choices: [
|
|
{ value: 'One', label: 'Label One', selected: true },
|
|
{ value: 'Two', label: 'Label Two', disabled: true },
|
|
{
|
|
value: 'Three',
|
|
label: 'Label Three',
|
|
customProperties: {
|
|
description: 'This option is fantastic',
|
|
},
|
|
},
|
|
],
|
|
}).setChoiceByValue('Two');
|
|
|
|
var customChoicesPropertiesViaDataAttributes = new Choices(
|
|
'#choices-with-custom-props-via-html',
|
|
{
|
|
allowHTML: true,
|
|
searchFields: ['label', 'value', 'customProperties'],
|
|
}
|
|
);
|
|
|
|
var singleNoSorting = new Choices('#choices-single-no-sorting', {
|
|
allowHTML: true,
|
|
shouldSort: false,
|
|
labelId: 'choices-single-no-sorting-label',
|
|
});
|
|
|
|
var cities = new Choices(document.getElementById('cities'), { allowHTML: true });
|
|
var tubeStations = new Choices(
|
|
document.getElementById('tube-stations'),
|
|
{ allowHTML: true }
|
|
).disable();
|
|
|
|
cities.passedElement.element.addEventListener('change', function (e) {
|
|
if (e.detail.value === 'London') {
|
|
tubeStations.enable();
|
|
} else {
|
|
tubeStations.disable();
|
|
}
|
|
});
|
|
|
|
var customTemplates = new Choices(
|
|
document.getElementById('choices-single-custom-templates'),
|
|
{
|
|
allowHTML: true,
|
|
callbackOnCreateTemplates: function (strToEl) {
|
|
var classNames = this.config.classNames;
|
|
var itemSelectText = this.config.itemSelectText;
|
|
return {
|
|
item: function ({ classNames }, data) {
|
|
return strToEl(
|
|
'\
|
|
<div\
|
|
class="' +
|
|
String(classNames.item) +
|
|
' ' +
|
|
String(
|
|
data.highlighted
|
|
? classNames.highlightedState
|
|
: classNames.itemSelectable
|
|
) +
|
|
'"\
|
|
data-item\
|
|
data-id="' +
|
|
String(data.id) +
|
|
'"\
|
|
data-value="' +
|
|
String(data.value) +
|
|
'"\
|
|
' +
|
|
String(data.active ? 'aria-selected="true"' : '') +
|
|
'\
|
|
' +
|
|
String(data.disabled ? 'aria-disabled="true"' : '') +
|
|
'\
|
|
>\
|
|
<span style="margin-right:10px;">🎉</span> ' +
|
|
String(data.label) +
|
|
'\
|
|
</div>\
|
|
'
|
|
);
|
|
},
|
|
choice: function ({ classNames }, data) {
|
|
return strToEl(
|
|
'\
|
|
<div\
|
|
class="' +
|
|
String(classNames.item) +
|
|
' ' +
|
|
String(classNames.itemChoice) +
|
|
' ' +
|
|
String(
|
|
data.disabled
|
|
? classNames.itemDisabled
|
|
: classNames.itemSelectable
|
|
) +
|
|
'"\
|
|
data-select-text="' +
|
|
String(itemSelectText) +
|
|
'"\
|
|
data-choice \
|
|
' +
|
|
String(
|
|
data.disabled
|
|
? 'data-choice-disabled aria-disabled="true"'
|
|
: 'data-choice-selectable'
|
|
) +
|
|
'\
|
|
data-id="' +
|
|
String(data.id) +
|
|
'"\
|
|
data-value="' +
|
|
String(data.value) +
|
|
'"\
|
|
' +
|
|
String(
|
|
data.groupId > 0 ? 'role="treeitem"' : 'role="option"'
|
|
) +
|
|
'\
|
|
>\
|
|
<span style="margin-right:10px;">👉🏽</span> ' +
|
|
String(data.label) +
|
|
'\
|
|
</div>\
|
|
'
|
|
);
|
|
},
|
|
};
|
|
},
|
|
}
|
|
);
|
|
|
|
var resetSimple = new Choices(document.getElementById('reset-simple'), {
|
|
allowHTML: true,
|
|
});
|
|
|
|
var resetMultiple = new Choices('#reset-multiple', {
|
|
allowHTML: true,
|
|
removeItemButton: true,
|
|
});
|
|
}); |