File: D:/HostingSpaces/slenders/slenders.nl/resources/js/kms/kms.js
'use strict';
document.addEventListener('DOMContentLoaded', function () {
//Add csrf token for all axios requests.
window.axios.defaults.headers.common = {
'X-Requested-With': 'XMLHttpRequest',
'X-CSRF-TOKEN' : document.querySelector('meta[name="csrf-token"]').getAttribute('content')
};
//Make the tabs work
new TabsController('tab-content', 'entity-tabs', 'active', true, 'input[name="tabslug"]');
//Add a style manager for the visible save button
//enable save button when present add add a
let visibleSaveButton = document.getElementById('save-button');
let saveButtonStyleController = new styleClassController(visibleSaveButton);
if(visibleSaveButton) {
let realSaveButton = document.querySelector('input[value="submit-cloaked"]');
visibleSaveButton.addEventListener('click', function (visibleSaveButtonClickEvent) {
visibleSaveButtonClickEvent.preventDefault();
saveButtonStyleController.requestAddClass('disabled');
realSaveButton.click();
});
}
//Make the trash button only work when it is confirmed by a model
let trashButton = document.querySelector('input.trash.confirm');
if(trashButton) new ConfirmationController(trashButton);
//Get the form and its translations
let form = document.getElementById('entity-form');
let globalTranslations = (form) ? form.dataset.globalTranslations :{};
//Create an entityInitializer that will look inside of the selected element and when something changes in it, triggers callbacks if needed
let entityInitializer = new Initializer('#entity-form');
//Make sure all component areas will be initialized when they show up
entityInitializer.bindSelectorToCallback('.js-components-area', function(attributesInitializer, componentAreaAttributeElement) {
let componentAreaManager = new ComponentAreaManager(componentAreaAttributeElement, new ComponentManagerApiController());
});
//Make sure all documents attributes are initialized when they show up.
entityInitializer.bindSelectorToCallback('.entity-attribute-documents', function(attributesInitializer, documentsGroupAttributeElement) {
let uploadRoute = form.dataset.uploadRoute;
let maxPostSize = form.dataset.maxPostSize;
let maxUploadSize = form.dataset.maxUploadSize;
let html5Uploader = new HTML5Uploader(uploadRoute, maxPostSize, maxUploadSize, globalTranslations);
let documentManager = new DocumentManager(documentsGroupAttributeElement, html5Uploader);
new FileDragAndDropHandler(documentsGroupAttributeElement.querySelector('.drag-and-drop-area'))
.hookTo(documentManager);
//Enable or disable the save button depending on the uploads
html5Uploader.on('uploadStart', function () {
saveButtonStyleController.requestAddClass('disabled')
});
html5Uploader.on('uploadComplete', function () {
saveButtonStyleController.requestRemoveClass('disabled')
});
html5Uploader.on('uploadCanceled', function () {
saveButtonStyleController.requestRemoveClass('disabled')
});
html5Uploader.on('uploadFailed', function () {
saveButtonStyleController.requestRemoveClass('disabled')
});
});
entityInitializer.bindSelectorToCallback('.entity-attribute-multiselect-combo-box', function(attributesInitializer, multiselectComboBoxAttributeElement) {
if(multiselectComboBoxAttributeElement.dataset.readonly === 'false') {
let multiSelect = new MultiSelect(multiselectComboBoxAttributeElement);
}
});
entityInitializer.bindSelectorToCallback('.entity-attribute-on-off', function(attributesInitializer, onOffAttributeElement) {
let onOff = new OnOff(onOffAttributeElement);
});
entityInitializer.bindSelectorToCallback('.js-video', function(attributesInitializer, videoAttributeElement) {
let video = new Video(videoAttributeElement);
});
//Make sure all confirmable things are initialized when they show up
entityInitializer.bindSelectorToCallback('.confirm', function(attributesInitializer, confirmableHtmlElement) {
new ConfirmationController(confirmableHtmlElement);
});
entityInitializer.bindSelectorToCallback('.entity-attribute-select', function(attributesInitializer, selectAttributeElement) {
let select = new Select(selectAttributeElement);
});
entityInitializer.bindSelectorToCallback('[data-to-copy]', function(attributesInitializer, element) {
console.log('found copy text element');
new CopyText(element);
});
//Make sure all tiny mce editors are initialized //TODO. needs fix
entityInitializer.bindSelectorToCallback('.tiny-mce', function (attributesInitializer, inputElement) {
if(!inputElement.id) inputElement.id = (new Date().getTime())+Math.random().toString(36).substring(7); //Gives the element a random id if it does not have any. Makes it selectable by tinyMce's remove method.
tinymce.remove('#'+inputElement.id); //Removes the previous tiny mce editor instance if any.
tinymce.init({
target: inputElement,
skin: 'kms',
menubar: false,
statusbar: false,
plugins: ['code', 'paste', 'link'],
toolbar: 'styleselect | bold italic underline | bullist numlist | indent | link image | code',
height: '200',
paste_as_text: true,
style_formats: [{title: 'Titel 1', block: 'h1'}, {title: 'Titel 2', block: 'h2'}, {title: 'Titel 3', block: 'h3'}, {title: 'Titel 4', block: 'h4'}],
convert_urls: false,
setup: function(editor) {
editor.on('change', function(changeEvent) {
updateOriginalInput(editor, inputElement);
});
}
});
function updateOriginalInput(tinyMceEditor, inputElement) {
tinyMceEditor.save();
let changeEvent = createNewEvent('change');
dispatchEventForElement(inputElement, changeEvent);
}
}, false);
//Start looking for changes in #entity-form. And if one occurs, check if it did include one of the bound selector.
entityInitializer.startObserving();
new PreventNavigationController(document.querySelector('.entity-attributes'));
});