106 lines
No EOL
3.7 KiB
JavaScript
106 lines
No EOL
3.7 KiB
JavaScript
function getCookie(name) {
|
|
// Split document.cookie into individual cookie strings
|
|
const cookies = document.cookie.split(';');
|
|
|
|
// Iterate through each cookie
|
|
for (let cookie of cookies) {
|
|
// Trim whitespace and split into name-value pair
|
|
const [cookieName, cookieValue] = cookie.trim().split('=');
|
|
|
|
// Check if this is the cookie we're looking for
|
|
if (cookieName === name) {
|
|
// Return the decoded value
|
|
return decodeURIComponent(cookieValue);
|
|
}
|
|
}
|
|
|
|
// Return null if cookie not found
|
|
return null;
|
|
}
|
|
|
|
$(document).ready(function () {
|
|
|
|
JSONEditor.defaults.callbacks.upload = {
|
|
"defaultUploadHandler": function (jseditor, type, file, cbs) {
|
|
// Create a new XMLHttpRequest object
|
|
var xhr = new XMLHttpRequest();
|
|
const htmlElement = document.documentElement;
|
|
let url = '/admin/json-editor-upload-handler/'
|
|
if (htmlElement.hasAttribute('data-use-i18n') && htmlElement.getAttribute('data-use-i18n') === "1") {
|
|
const djangoLang = htmlElement.getAttribute('lang');
|
|
if (djangoLang) {
|
|
url = `/${djangoLang}${url}`;
|
|
}
|
|
}
|
|
|
|
// Configure it to send a POST request to the server endpoint
|
|
xhr.open('POST', url, true);
|
|
|
|
// Handle upload progress
|
|
xhr.upload.addEventListener('progress', function (event) {
|
|
if (event.lengthComputable) {
|
|
var percent = Math.round((event.loaded / event.total) * 100);
|
|
cbs.updateProgress(percent); // Update progress bar with percentage
|
|
}
|
|
});
|
|
|
|
// Handle successful upload
|
|
xhr.addEventListener('load', function () {
|
|
if (xhr.status >= 200 && xhr.status < 300) {
|
|
var response = xhr.responseText; // Server returns the URL as plain text
|
|
cbs.success(response); // Call success callback with the URL
|
|
} else {
|
|
cbs.failure('Upload failed: ' + xhr.statusText); // Call failure callback with error
|
|
}
|
|
});
|
|
|
|
// Handle upload errors
|
|
xhr.addEventListener('error', function () {
|
|
cbs.failure('Upload failed'); // Call failure callback on network error
|
|
});
|
|
|
|
// Prepare the file for upload
|
|
var formData = new FormData();
|
|
formData.append('file', file); // Append the file to FormData
|
|
|
|
// Send the request to the server
|
|
xhr.send(formData);
|
|
}
|
|
};
|
|
|
|
function init_editor_json_editor(
|
|
editor,
|
|
schema,
|
|
json_viewer_div,
|
|
) {
|
|
let schema_str = JSON.parse(editor.value)
|
|
|
|
let jsoneditor__ = new JSONEditor(
|
|
json_viewer_div, {
|
|
theme: 'tailwind',
|
|
schema: JSON.parse(schema),
|
|
disable_edit_json: true,
|
|
disable_properties: true,
|
|
disable_array_delete_all_rows: true,
|
|
disable_array_delete_last_row: true,
|
|
disable_array_reorder: true,
|
|
grid_columns: 3,
|
|
prompt_before_delete: false,
|
|
disable_collapse: true,
|
|
startval: schema_str || []
|
|
})
|
|
|
|
jsoneditor__.on('change', () => {
|
|
$(editor).val(JSON.stringify(jsoneditor__.getValue()))
|
|
})
|
|
}
|
|
|
|
$('.django-json-editor-field').each(function (i, editor) {
|
|
let editor_id = $(editor).attr('id')
|
|
init_editor_json_editor(
|
|
editor,
|
|
$(`#${editor_id}-schema-template`).html(),
|
|
$(`#${editor_id}-viewer`)[0]
|
|
)
|
|
})
|
|
}) |