70 lines
2.3 KiB
JavaScript
70 lines
2.3 KiB
JavaScript
|
import $ from 'jquery';
|
|||
|
import '../../utils/jquery-utils';
|
|||
|
import request from '../../utils/request';
|
|||
|
import { config } from 'grav-config';
|
|||
|
|
|||
|
let custom = false;
|
|||
|
let folder = $('[data-remodal-id="modal"] input[name="data[folder]"], [data-remodal-id="module"] input[name="data[folder]"], [data-remodal-id="modal-page-copy"] input[name="data[folder]"]');
|
|||
|
let title = $('[data-remodal-id="modal"] input[name="data[title]"], [data-remodal-id="module"] input[name="data[title]"], [data-remodal-id="modal-page-copy"] input[name="data[title]"]');
|
|||
|
let getFields = (type, target) => {
|
|||
|
target = $(target);
|
|||
|
let query = `[data-remodal-id="${target.closest('[data-remodal-id]').data('remodal-id')}"]`;
|
|||
|
|
|||
|
return {
|
|||
|
title: type === 'title' ? $(target) : $(`${query} input[name="data[title]"]`),
|
|||
|
folder: type === 'folder' ? $(target) : $(`${query} input[name="data[folder]"]`)
|
|||
|
};
|
|||
|
};
|
|||
|
|
|||
|
title.on('input focus blur', (event) => {
|
|||
|
if (custom) { return true; }
|
|||
|
let elements = getFields('title', event.currentTarget);
|
|||
|
|
|||
|
let slug = $.slugify(elements.title.val(), {custom: { "'": '', '‘': '', '’': '' }});
|
|||
|
elements.folder.val(slug);
|
|||
|
});
|
|||
|
|
|||
|
folder.on('input', (event) => {
|
|||
|
let elements = getFields('folder', event.currentTarget);
|
|||
|
|
|||
|
let input = elements.folder.get(0);
|
|||
|
let value = elements.folder.val();
|
|||
|
let selection = {
|
|||
|
start: input.selectionStart,
|
|||
|
end: input.selectionEnd
|
|||
|
};
|
|||
|
|
|||
|
value = value.toLowerCase().replace(/\s/g, '-').replace(/[^a-z0-9_\-]/g, '');
|
|||
|
elements.folder.val(value);
|
|||
|
custom = !!value;
|
|||
|
|
|||
|
// restore cursor position
|
|||
|
input.setSelectionRange(selection.start, selection.end);
|
|||
|
|
|||
|
});
|
|||
|
|
|||
|
folder.on('focus blur', (event) => {
|
|||
|
getFields('title').title.trigger('input');
|
|||
|
});
|
|||
|
|
|||
|
$(document).on('change', '[name="data[route]"]', (event) => {
|
|||
|
const rawroute = $(event.currentTarget).val();
|
|||
|
const pageTemplate = $('[name="data[name]"]');
|
|||
|
const URI = `${config.base_url_relative}/ajax.json/task${config.param_sep}getChildTypes`;
|
|||
|
|
|||
|
if (pageTemplate.length === 0) {
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
request(URI, {
|
|||
|
method: 'post',
|
|||
|
body: { rawroute }
|
|||
|
}, (response) => {
|
|||
|
const type = response.child_type;
|
|||
|
if (type !== '' && type !== 'default') {
|
|||
|
pageTemplate.val(type);
|
|||
|
pageTemplate.data('selectize').setValue(type);
|
|||
|
}
|
|||
|
});
|
|||
|
});
|