dikplhd/public/assets/js/pages/form-choises.js

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,
});
});