55 lines
1.6 KiB
JavaScript
55 lines
1.6 KiB
JavaScript
|
|
(function () {
|
||
|
|
function slugify(value) {
|
||
|
|
return (value || '')
|
||
|
|
.toString()
|
||
|
|
.toLowerCase()
|
||
|
|
.trim()
|
||
|
|
.replace(/[^a-z0-9-_\s]/g, '')
|
||
|
|
.replace(/\s+/g, '-')
|
||
|
|
.replace(/-+/g, '-');
|
||
|
|
}
|
||
|
|
|
||
|
|
function bindSlugHelpers() {
|
||
|
|
document.querySelectorAll('.ansico-slug-source').forEach(function (source) {
|
||
|
|
var form = source.closest('form');
|
||
|
|
if (!form) return;
|
||
|
|
var target = form.querySelector('.ansico-slug-target');
|
||
|
|
if (!target || target.value) return;
|
||
|
|
source.addEventListener('input', function () {
|
||
|
|
if (!target.dataset.userEdited) {
|
||
|
|
target.value = slugify(source.value);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
target.addEventListener('input', function () {
|
||
|
|
if (target.value) {
|
||
|
|
target.dataset.userEdited = '1';
|
||
|
|
}
|
||
|
|
});
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
function bindFieldRows() {
|
||
|
|
var addButton = document.getElementById('ansico-add-field');
|
||
|
|
var tableBody = document.querySelector('#ansico-fields-table tbody');
|
||
|
|
var template = document.getElementById('tmpl-ansico-field-row');
|
||
|
|
if (!addButton || !tableBody || !template) return;
|
||
|
|
|
||
|
|
addButton.addEventListener('click', function () {
|
||
|
|
tableBody.insertAdjacentHTML('beforeend', template.innerHTML);
|
||
|
|
});
|
||
|
|
|
||
|
|
tableBody.addEventListener('click', function (event) {
|
||
|
|
var removeButton = event.target.closest('.ansico-remove-field');
|
||
|
|
if (removeButton) {
|
||
|
|
var row = removeButton.closest('.ansico-field-row');
|
||
|
|
if (row) row.remove();
|
||
|
|
}
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
document.addEventListener('DOMContentLoaded', function () {
|
||
|
|
bindSlugHelpers();
|
||
|
|
bindFieldRows();
|
||
|
|
});
|
||
|
|
})();
|