pkmntrade.club/staticfiles/admin/fields/json-editor/json_editor_init.js

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]
)
})
})