setka-8.x-1.0/js/setkaEditorWidget.js
js/setkaEditorWidget.js
(function ($, Drupal) {
Drupal.behaviors.setkaEditorWidget = {
attach: function (context, settings) {
function status(response) {
if (response.status >= 200 && response.status < 300) {
return Promise.resolve(response)
} else {
return Promise.reject(new Error(response.statusText))
}
}
function json(response) {
return response.json()
}
function tryParseJson(jsonString) {
try {
var setkaEditorData = JSON.parse(jsonString);
if (typeof setkaEditorData['postTheme'] !== 'undefined'
&& typeof setkaEditorData['postGrid'] !== 'undefined'
&& typeof setkaEditorData['postHtml'] !== 'undefined') {
return setkaEditorData;
}
}
catch (e) {
return false;
}
return false;
}
$('#setka-editor').once('setka-editor-widget').each(function () {
var meta = settings.setkaEditorMetaFile;
var publicToken = settings.setkaEditorPublicToken;
var entityId = settings.setkaEditorEntityId;
var entityType = settings.setkaEditorEntityType;
var entityUuid = settings.setkaEditorEntityUuid;
var entityImages = settings.setkaEditorEntityImages;
var headerTopOffset = settings.setkaEditorHeaderTopOffset;
var initError = settings.setkaEditorInitError;
var uploadMaxSize = settings.setkaEditorUploadMaxSize;
var $form = $(this).parents('form');
if (initError.postTheme === true && initError.postGrid === true) {
fetch(meta)
.then(status)
.then(json)
.then(function (data) {
const config = data.config;
const assets = data.assets;
if (entityImages) {
assets.images = entityImages;
}
config.public_token = publicToken;
config.token = publicToken;
config.headerTopOffset = headerTopOffset;
config.uploadMaxSize = uploadMaxSize;
var setkaEditorHtml = false;
var setkaEditorData = tryParseJson($form.find("textarea[setka-editor='true']").val());
if (setkaEditorData !== false) {
config.theme = setkaEditorData['postTheme'];
config.layout = setkaEditorData['postGrid'];
setkaEditorHtml = setkaEditorData['postHtml'];
}
config.restApiUrl = '/api/setka-editor/';
config.restApiRequestPayload = {
entityId: entityId,
entityType: entityType,
entityUuid: entityUuid
};
SetkaEditor.start(config, assets);
if (setkaEditorHtml !== false) {
SetkaEditor.replaceHTML(setkaEditorHtml);
}
});
$form.submit(function () {
var setkaEditorVal = {};
var setkaEditorTheme = SetkaEditor.getCurrentTheme();
setkaEditorVal['postUuid'] = entityUuid;
setkaEditorVal['postTheme'] = setkaEditorTheme.id;
if (typeof setkaEditorTheme.kit_id !== 'undefined') {
setkaEditorVal['postTypeKit'] = setkaEditorTheme.kit_id;
}
setkaEditorVal['postGrid'] = SetkaEditor.getCurrentLayout().id;
setkaEditorVal['postHtml'] = SetkaEditor.getHTML({includeContainer: true});
$(this).find("textarea[setka-editor='true']").val(JSON.stringify(setkaEditorVal));
});
}
else {
var setkaEditorData = tryParseJson($form.find("textarea[setka-editor='true']").val());
if (setkaEditorData !== false) {
if (typeof setkaEditorData['postHtml'] !== 'undefined') {
var rawTextarea = document.createElement("textarea");
rawTextarea.disabled = true;
rawTextarea.style.width = '100%';
rawTextarea.style.height = '200px';
rawTextarea.setAttribute('class', 'form-textarea resize-vertical');
rawTextarea.innerHTML = setkaEditorData['postHtml'];
var buttonValue = Drupal.t('Copy raw post');
var copyRawButton = document.createElement("input");
copyRawButton.setAttribute('type', 'button');
copyRawButton.setAttribute('value', buttonValue);
copyRawButton.setAttribute('class', 'button');
copyRawButton.addEventListener("click", function () {
rawTextarea.disabled = false;
rawTextarea.focus();
rawTextarea.select();
document.execCommand('copy');
rawTextarea.disabled = true;
});
$(this).after(copyRawButton);
$(this).after(rawTextarea);
}
}
}
});
}
};
})(jQuery, Drupal);
