summaryrefslogtreecommitdiff
path: root/searx/static/themes/simple/src/js/main/00_toolkit.js
diff options
context:
space:
mode:
authorAlexandre Flament <alex@al-f.net>2021-11-05 09:51:27 +0100
committerAlexandre Flament <alex@al-f.net>2021-11-05 09:51:27 +0100
commit680d70865f763aff45a9d5fea8649c6fa1725deb (patch)
treed289e1fe5d29e51b0b7fb05fda0ed29199410e05 /searx/static/themes/simple/src/js/main/00_toolkit.js
parent523b3c095222fc615dc02f27de1e94b2a7b6e270 (diff)
[mod] SearXNG: remove "searx" from the searx*.js file names.
Diffstat (limited to 'searx/static/themes/simple/src/js/main/00_toolkit.js')
-rw-r--r--searx/static/themes/simple/src/js/main/00_toolkit.js152
1 files changed, 152 insertions, 0 deletions
diff --git a/searx/static/themes/simple/src/js/main/00_toolkit.js b/searx/static/themes/simple/src/js/main/00_toolkit.js
new file mode 100644
index 000000000..7dc50108b
--- /dev/null
+++ b/searx/static/themes/simple/src/js/main/00_toolkit.js
@@ -0,0 +1,152 @@
+/**
+ * @license
+ * (C) Copyright Contributors to the SearXNG project.
+ * (C) Copyright Contributors to the searx project (2014 - 2021).
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+window.searxng = (function(w, d) {
+
+ 'use strict';
+
+ // not invented here tookit with bugs fixed elsewhere
+ // purposes : be just good enough and as small as possible
+
+ // from https://plainjs.com/javascript/events/live-binding-event-handlers-14/
+ if (w.Element) {
+ (function(ElementPrototype) {
+ ElementPrototype.matches = ElementPrototype.matches ||
+ ElementPrototype.matchesSelector ||
+ ElementPrototype.webkitMatchesSelector ||
+ ElementPrototype.msMatchesSelector ||
+ function(selector) {
+ var node = this, nodes = (node.parentNode || node.document).querySelectorAll(selector), i = -1;
+ while (nodes[++i] && nodes[i] != node);
+ return !!nodes[i];
+ };
+ })(Element.prototype);
+ }
+
+ function callbackSafe(callback, el, e) {
+ try {
+ callback.call(el, e);
+ } catch (exception) {
+ console.log(exception);
+ }
+ }
+
+ var searxng = window.searxng || {};
+
+ searxng.on = function(obj, eventType, callback, useCapture) {
+ useCapture = useCapture || false;
+ if (typeof obj !== 'string') {
+ // obj HTMLElement, HTMLDocument
+ obj.addEventListener(eventType, callback, useCapture);
+ } else {
+ // obj is a selector
+ d.addEventListener(eventType, function(e) {
+ var el = e.target || e.srcElement, found = false;
+ while (el && el.matches && el !== d && !(found = el.matches(obj))) el = el.parentElement;
+ if (found) callbackSafe(callback, el, e);
+ }, useCapture);
+ }
+ };
+
+ searxng.ready = function(callback) {
+ if (document.readyState != 'loading') {
+ callback.call(w);
+ } else {
+ w.addEventListener('DOMContentLoaded', callback.bind(w));
+ }
+ };
+
+ searxng.http = function(method, url) {
+ var req = new XMLHttpRequest(),
+ resolve = function() {},
+ reject = function() {},
+ promise = {
+ then: function(callback) { resolve = callback; return promise; },
+ catch: function(callback) { reject = callback; return promise; }
+ };
+
+ try {
+ req.open(method, url, true);
+
+ // On load
+ req.onload = function() {
+ if (req.status == 200) {
+ resolve(req.response, req.responseType);
+ } else {
+ reject(Error(req.statusText));
+ }
+ };
+
+ // Handle network errors
+ req.onerror = function() {
+ reject(Error("Network Error"));
+ };
+
+ req.onabort = function() {
+ reject(Error("Transaction is aborted"));
+ };
+
+ // Make the request
+ req.send();
+ } catch (ex) {
+ reject(ex);
+ }
+
+ return promise;
+ };
+
+ searxng.loadStyle = function(src) {
+ var path = searxng.static_path + src,
+ id = "style_" + src.replace('.', '_'),
+ s = d.getElementById(id);
+ if (s === null) {
+ s = d.createElement('link');
+ s.setAttribute('id', id);
+ s.setAttribute('rel', 'stylesheet');
+ s.setAttribute('type', 'text/css');
+ s.setAttribute('href', path);
+ d.body.appendChild(s);
+ }
+ };
+
+ searxng.loadScript = function(src, callback) {
+ var path = searxng.static_path + src,
+ id = "script_" + src.replace('.', '_'),
+ s = d.getElementById(id);
+ if (s === null) {
+ s = d.createElement('script');
+ s.setAttribute('id', id);
+ s.setAttribute('src', path);
+ s.onload = callback;
+ s.onerror = function() {
+ s.setAttribute('error', '1');
+ };
+ d.body.appendChild(s);
+ } else if (!s.hasAttribute('error')) {
+ try {
+ callback.apply(s, []);
+ } catch (exception) {
+ console.log(exception);
+ }
+ } else {
+ console.log("callback not executed : script '" + path + "' not loaded.");
+ }
+ };
+
+ searxng.insertBefore = function (newNode, referenceNode) {
+ referenceNode.parentNode.insertBefore(newNode, referenceNode);
+ };
+
+ searxng.insertAfter = function(newNode, referenceNode) {
+ referenceNode.parentNode.insertAfter(newNode, referenceNode.nextSibling);
+ };
+
+ searxng.on('.close', 'click', function() {
+ this.parentNode.classList.add('invisible');
+ });
+
+ return searxng;
+})(window, document);