const $i = document.getElementById.bind(document); const $c = document.getElementsByClassName.bind(document); const $q = document.querySelector.bind(document); const $qa = document.querySelectorAll.bind(document); const $r = function(element) { if(element && element.parentNode) element.parentNode.removeChild(element); }; const $ri = function(name) { $r($i(name)); }; const $ib = function(ref, elem) { ref.parentNode.insertBefore(elem, ref); }; const $rc = function(element) { while(element.lastChild) element.removeChild(element.lastChild); }; const $rp = function(target, replace) { $ib(target, replace); $r(target); }; const $ar = function(array, index) { array.splice(index, 1); }; const $ari = function(array, item) { let index; while(array.length > 0 && (index = array.indexOf(item)) >= 0) $ar(array, index); }; const $arf = function(array, predicate) { let index; while(array.length > 0 && (index = array.findIndex(predicate)) >= 0) $ar(array, index); }; const $as = function(array) { if(array.length < 2) return; for(let i = array.length - 1; i > 0; --i) { let j = Math.floor(Math.random() * (i + 1)), tmp = array[i]; array[i] = array[j]; array[j] = tmp; } }; const $csrfp = (function() { const elem = $q('meta[name="csrfp-token"]'); return { get: () => elem?.content ?? '', set: token => { if(elem != null) elem.content = token?.toString() ?? ''; }, }; })();