Files
Django_kube/django_code/templates/static/djangoql/js/completion_admin.js
T
pierre.geeraert 8e43ea9dbd
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 2s
maybe finished
2026-08-26 20:33:58 +01:00

114 lines
3.2 KiB
JavaScript

(function (DjangoQL) {
'use strict';
function parseQueryString() {
var qs = window.location.search.substring(1);
var result = {};
var vars = qs.split('&');
var i;
var l = vars.length;
var pair;
var key;
for (i = 0; i < l; i++) {
pair = vars[i].split('=');
key = decodeURIComponent(pair[0]);
if (key) {
if (typeof result[key] !== 'undefined') {
if (({}).toString.call(result[key]) !== '[object Array]') {
result[key] = [result[key]];
}
result[key].push(decodeURIComponent(pair[1]));
} else {
result[key] = decodeURIComponent(pair[1]);
}
}
}
return result;
}
// Replace standard search input with textarea and add completion toggle
DjangoQL.DOMReady(function () {
// use '-' in the param name to prevent conflicts with any model field name
var QLParamName = 'q-l';
var QLEnabled;
var QLEnabledInURL;
var QLInput;
var QLToggle;
var QLPlaceholder = 'Advanced search with Query Language';
var originalPlaceholder;
var textarea;
var input = document.querySelector('input[name=q]');
var djangoQL;
if (!input) {
return;
}
originalPlaceholder = input.placeholder;
QLEnabledInURL = parseQueryString()[QLParamName];
if (QLEnabledInURL === 'on') {
QLEnabled = true;
} else if (QLEnabledInURL === 'off') {
QLEnabled = false;
} else {
QLEnabled = Boolean(DjangoQL._toggleOnByDefault);
}
function onCompletionToggle(e) {
if (e.target.checked) {
djangoQL.enableCompletion();
QLInput.value = 'on';
textarea.placeholder = QLPlaceholder;
textarea.focus();
djangoQL.popupCompletion();
} else {
djangoQL.disableCompletion();
QLInput.value = 'off';
textarea.placeholder = originalPlaceholder;
textarea.focus();
}
}
if (DjangoQL._enableToggle) {
QLInput = document.querySelector('input[name=' + QLParamName + ']');
if (!QLInput) {
QLInput = document.createElement('input');
QLInput.type = 'hidden';
input.parentNode.insertBefore(QLInput, input);
}
QLInput.name = QLParamName;
QLInput.value = QLEnabled ? 'on' : 'off';
QLToggle = document.createElement('input');
QLToggle.type = 'checkbox';
QLToggle.checked = QLEnabled;
QLToggle.className = 'djangoql-toggle';
QLToggle.title = QLPlaceholder;
QLToggle.onchange = onCompletionToggle;
input.parentNode.insertBefore(QLToggle, input);
} else {
QLEnabled = true;
}
textarea = document.createElement('textarea');
textarea.value = input.value;
textarea.id = input.id;
textarea.name = input.name;
textarea.rows = 1;
textarea.placeholder = QLEnabled ? QLPlaceholder : originalPlaceholder;
textarea.setAttribute('maxlength', 2000);
input.parentNode.insertBefore(textarea, input);
input.parentNode.removeChild(input);
textarea.focus();
djangoQL = new DjangoQL({
completionEnabled: QLEnabled,
introspections: 'introspect/',
syntaxHelp: 'djangoql-syntax/',
selector: 'textarea[name=q]',
autoResize: true
});
});
}(window.DjangoQL));