From f2efc54d0a142f31dc7c7bd5ae92e10f86297a28 Mon Sep 17 00:00:00 2001 From: Floorb <132411956+Neetpone@users.noreply.github.com> Date: Fri, 2 Jun 2023 15:37:06 -0400 Subject: [PATCH] chore: some HTML/CSS cleanup --- js/main.js | 8 - js/tag_input.js | 2 +- public/assets/bundle/archive.js | 10 +- public/assets/bundle/archive.min.js | 2 +- public/assets/bundle/archive.min.js.map | 2 +- public/assets/bundle/generic.js | 10 +- public/assets/bundle/generic.min.js | 2 +- public/assets/bundle/generic.min.js.map | 2 +- public/assets/bundle/user_profile.js | 10 +- public/assets/bundle/user_profile.min.js | 2 +- public/assets/bundle/user_profile.min.js.map | 2 +- public/theme/bulma/css/paste.css | 52 +++ theme/bulma/archive.php | 52 --- theme/bulma/main.php | 355 +++++++++---------- theme/bulma/view.php | 24 +- 15 files changed, 222 insertions(+), 313 deletions(-) diff --git a/js/main.js b/js/main.js index b90a407..d9bee99 100644 --- a/js/main.js +++ b/js/main.js @@ -72,14 +72,6 @@ const globalSetup = () => { }); } - const preloader = $('.preloader'); - const main = $('main'); - - if (preloader && main) { - preloader.remove(); - main.id = ''; - } - // CAPTCHA refresh const captchaContainer = $('.captcha_container'); diff --git a/js/tag_input.js b/js/tag_input.js index 7a81ff2..f0bf65a 100644 --- a/js/tag_input.js +++ b/js/tag_input.js @@ -15,7 +15,7 @@ class TagsInput { this.element.style.display = 'none'; this.containerNode = makeEl('
'); - this.inputNode = makeEl(''); + this.inputNode = makeEl(''); this.containerNode.appendChild(this.inputNode); this.element.parentNode.insertBefore(this.containerNode, this.element.nextSibling); diff --git a/public/assets/bundle/archive.js b/public/assets/bundle/archive.js index 39b4ec1..2ecdd41 100644 --- a/public/assets/bundle/archive.js +++ b/public/assets/bundle/archive.js @@ -333,7 +333,7 @@ class TagsInput { this.element.style.display = 'none'; this.containerNode = makeEl('
'); - this.inputNode = makeEl(''); + this.inputNode = makeEl(''); this.containerNode.appendChild(this.inputNode); this.element.parentNode.insertBefore(this.containerNode, this.element.nextSibling); @@ -501,14 +501,6 @@ const globalSetup = () => { }); } - const preloader = $('.preloader'); - const main = $('main'); - - if (preloader && main) { - preloader.remove(); - main.id = ''; - } - // CAPTCHA refresh const captchaContainer = $('.captcha_container'); diff --git a/public/assets/bundle/archive.min.js b/public/assets/bundle/archive.min.js index 9a75d99..20ad3db 100644 --- a/public/assets/bundle/archive.min.js +++ b/public/assets/bundle/archive.min.js @@ -1,2 +1,2 @@ -function t(t){return function(t){if(Array.isArray(t))return n(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||a(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function e(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=a(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var i=0,r=function(){};return{s:r,n:function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,l=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return s=t.done,t},e:function(t){l=!0,o=t},f:function(){try{s||null==n.return||n.return()}finally{if(l)throw o}}}}function a(t,e){if(t){if("string"==typeof t)return n(t,e);var a=Object.prototype.toString.call(t).slice(8,-1);return"Object"===a&&t.constructor&&(a=t.constructor.name),"Map"===a||"Set"===a?Array.from(t):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?n(t,e):void 0}}function n(t,e){(null==e||e>t.length)&&(e=t.length);for(var a=0,n=new Array(e);a/g,">").replace(/"/g,""").replace(/'/g,"'")},v=function(){function t(e){r(this,t),this.element=e}return s(t,[{key:"attach",value:function(t){this.element.addEventListener("click",(function(e){e.target&&e.target.classList.contains("paginator__button")&&t(+e.target.dataset.page)}))}},{key:"update",value:function(t,e,a){h(this.element);var n=Math.floor(t/e);if(0!==n){var i=a-2<0?0:a-2,r=a+2>n?n:a+2,o=Math.abs(0-a)>2,s=Math.abs(n-a)>2,l=0===a?"disabled":"";this.element.appendChild(d(''))),o&&(this.element.appendChild(d('"))),this.element.appendChild(d('')));for(var c=i;c<=r;c++){var u=c===a?"paginator__button--selected":"";this.element.appendChild(d('")))}s&&(this.element.appendChild(d('')),this.element.appendChild(d('"))));var p=a===n?"disabled":"";this.element.appendChild(d('')))}}}]),t}(),g=function(){function a(t,e){r(this,a),this.element=t,this.container=t.parentElement,this.options=e,this.ajaxCallback=e.ajaxCallback,this.data=[],this.unfilteredData=[],this.totalRecords=-1,this.perPage=20,this.currentPage=0,this.paginator=new v(this.container.querySelector(".paginator")),this.filterCallback=e.filterCallback,this.sortField=null,this.sortDir=!0}return s(a,[{key:"attach",value:function(){var t=this;this.filterField=this.container.querySelector("input.search"),this.filterField&&this.filterCallback&&(this.filterField.addEventListener("keyup",(function(e){e.target&&t._updateFilter(e.target.value)})),this.options.preFilter&&(this.filterField.value=this.options.preFilter)),this.perPageField=this.container.querySelector("select[name=per_page]"),this.perPageField&&this.perPageField.addEventListener("change",(function(e){t.perPage=Number(e.target.value),t._updatePage(0)}));var e=this.element.querySelector("tr.paginator__sort");e&&e.addEventListener("click",(function(e){var a=e.target;if(a.dataset.sortField){if(t.sortField){var n=t.element.querySelector("th[data-sort-field=".concat(t.sortField,"]"));n.classList.remove("paginator__sort--down"),n.classList.remove("paginator__sort--up")}t._updateSort(a.dataset.sortField,!t.sortDir),a.classList.add(t.sortDir?"paginator__sort--up":"paginator__sort--down")}})),this.paginator.attach(this._updatePage.bind(this)),this._loadEntries()}},{key:"_loadEntries",value:function(){var t=this;new Promise(this.ajaxCallback).then((function(e){t.element.classList.remove("hidden"),t.unfilteredData=e.data,t._updateFilter(t.options.preFilter)}))}},{key:"_updateEntries",value:function(t){this.data=t,this.totalRecords=this.data.length;var e=this.element.querySelector("tbody");h(e);for(var a=this.perPage*this.currentPage,n=a+this.perPage>this.totalRecords?this.totalRecords:a+this.perPage,i=a;in[e]?i=1:t[e]1&&void 0!==arguments[1]?arguments[1]:{};r(this,t),this.element=e,this.tags=[],this.options=a,this.maxTags=a.maxTags||32,this.inputNode=null,this.containerNode=null}return s(t,[{key:"attach",value:function(){var t=this;if(this.element.style.display="none",this.containerNode=d('
'),this.inputNode=d(''),this.containerNode.appendChild(this.inputNode),this.element.parentNode.insertBefore(this.containerNode,this.element.nextSibling),this.element.value){var a,n=e(this.element.value.split(","));try{for(n.s();!(a=n.n()).done;){var i=a.value;this.addTag(i)}}catch(t){n.e(t)}finally{n.f()}}this.containerNode.addEventListener("keydown",this._handleInputKeyUp.bind(this)),this.containerNode.addEventListener("click",this._handleContainerClick.bind(this)),this.inputNode.addEventListener("focusout",(function(e){t.inputNode.value&&(t.addTag(t.inputNode.value),t.inputNode.value="",t.updateHiddenInputValue())}))}},{key:"detach",value:function(){this.tags.clear(),this.containerNode.remove(),this.element.style.display="inline-block"}},{key:"updateHiddenInputValue",value:function(){this.element.value=this.tags.join(",")}},{key:"deleteTagNode",value:function(t){this.tags.splice(this.tags.indexOf(t.dataset.value.toLowerCase()),1),t.remove(),this.tags.length'+f(t)+''),this.inputNode),this.tags.length>=this.maxTags&&(this.inputNode.disabled=!0))}},{key:"_handleInputKeyUp",value:function(t){var e=this.inputNode.value;"Backspace"===t.key&&""===e?this.inputNode.previousSibling&&(this.deleteTagNode(this.inputNode.previousSibling),this.updateHiddenInputValue()):","===t.key?(this.addTag(e),this.inputNode.value="",this.updateHiddenInputValue(),t.preventDefault()):"Backspace"!==t.key&&e.length>255&&t.preventDefault()}},{key:"_handleContainerClick",value:function(t){t.target&&t.target.classList.contains("delete")&&(this.deleteTagNode(t.target.closest(".tag")),this.updateHiddenInputValue())}}]),t}(),b=function(){var t;Array.prototype.forEach.call(u(".js-tag-input"),(function(t){new y(t).attach()})),(t=c('[data-target~="#signin"],[data-target~="#signup"]'))&&(t.href="javascript:void(0)",t.addEventListener("click",(function(){c(".modal").classList.add("is-active")})),c(".modal-button-close").addEventListener("click",(function(){c(".modal").classList.remove("is-active")})));var e=c(".panel-tools .embed-tool");e&&e.addEventListener("click",(function(t){t.target&&t.target.closest(".panel-tools")&&p(t.target.closest(".panel-tools").querySelector(".panel-embed"))}));var a=c(".expand-tool");a&&a.addEventListener("click",(function(t){if(t.target&&t.target.closest(".panel")){var e=t.target.closest(".panel");e.classList.contains("panel-fullsize")?e.classList.remove("panel-fullsize"):e.classList.add("panel-fullsize")}})),(document.querySelectorAll(".notification .delete")||[]).forEach((function(t){var e=t.parentNode;t.addEventListener("click",(function(){e.parentNode.removeChild(e)}))}));var n=Array.prototype.slice.call(document.querySelectorAll(".navbar-burger"),0);n.length>0&&n.forEach((function(t){t.addEventListener("click",(function(){var e=t.dataset.target,a=document.getElementById(e);t.classList.toggle("is-active"),a.classList.toggle("is-active")}))}));var i=c(".preloader"),r=c("main");i&&r&&(i.remove(),r.id="");var o=c(".captcha_container");if(o){var s=o.querySelector("a"),l=o.querySelector("img");s&&l&&s.addEventListener("click",(function(){var t=l.src;-1!==t.indexOf("&refresh")?t=t.split("&rand=")[0]:t+="&refresh",l.src=t+"&rand="+Math.random()}))}var d=u(".js-hidden");d&&Array.prototype.forEach.call(d,(function(t){p(t)}))};l=function(){b();var t=new URLSearchParams(window.location.search).get("q");new g(document.getElementById("archive"),{ajaxCallback:function(t){fetch("/api/ajax_pastes.php").then((function(t){return t.json()})).then(t)},rowCallback:function(t){return'\n ').concat(f(t.title),'\n ').concat(f(t.author),"\n ").concat(f(t.updated_at),"\n ").concat(t.tags.map((function(t){var e,a=t.name.toLowerCase();return e="nsfw"===a||"explicit"===a?"is-danger":"safe"===a?"is-success":"/"===a.charAt(0)&&"/"===a.charAt(a.length-1)?"is-primary":"is-info",'\n ').concat(f(t.name),"\n ")})).join(""),"\n ")},filterCallback:m,preFilter:t}).attach()},"loading"!==document.readyState?l():document.addEventListener("DOMContentLoaded",l); +function t(t){return function(t){if(Array.isArray(t))return n(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||a(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function e(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=a(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var i=0,r=function(){};return{s:r,n:function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,l=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return s=t.done,t},e:function(t){l=!0,o=t},f:function(){try{s||null==n.return||n.return()}finally{if(l)throw o}}}}function a(t,e){if(t){if("string"==typeof t)return n(t,e);var a=Object.prototype.toString.call(t).slice(8,-1);return"Object"===a&&t.constructor&&(a=t.constructor.name),"Map"===a||"Set"===a?Array.from(t):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?n(t,e):void 0}}function n(t,e){(null==e||e>t.length)&&(e=t.length);for(var a=0,n=new Array(e);a/g,">").replace(/"/g,""").replace(/'/g,"'")},g=function(){function t(e){r(this,t),this.element=e}return s(t,[{key:"attach",value:function(t){this.element.addEventListener("click",(function(e){e.target&&e.target.classList.contains("paginator__button")&&t(+e.target.dataset.page)}))}},{key:"update",value:function(t,e,a){h(this.element);var n=Math.floor(t/e);if(0!==n){var i=a-2<0?0:a-2,r=a+2>n?n:a+2,o=Math.abs(0-a)>2,s=Math.abs(n-a)>2,l=0===a?"disabled":"";this.element.appendChild(d(''))),o&&(this.element.appendChild(d('"))),this.element.appendChild(d('')));for(var c=i;c<=r;c++){var u=c===a?"paginator__button--selected":"";this.element.appendChild(d('")))}s&&(this.element.appendChild(d('')),this.element.appendChild(d('"))));var p=a===n?"disabled":"";this.element.appendChild(d('')))}}}]),t}(),v=function(){function a(t,e){r(this,a),this.element=t,this.container=t.parentElement,this.options=e,this.ajaxCallback=e.ajaxCallback,this.data=[],this.unfilteredData=[],this.totalRecords=-1,this.perPage=20,this.currentPage=0,this.paginator=new g(this.container.querySelector(".paginator")),this.filterCallback=e.filterCallback,this.sortField=null,this.sortDir=!0}return s(a,[{key:"attach",value:function(){var t=this;this.filterField=this.container.querySelector("input.search"),this.filterField&&this.filterCallback&&(this.filterField.addEventListener("keyup",(function(e){e.target&&t._updateFilter(e.target.value)})),this.options.preFilter&&(this.filterField.value=this.options.preFilter)),this.perPageField=this.container.querySelector("select[name=per_page]"),this.perPageField&&this.perPageField.addEventListener("change",(function(e){t.perPage=Number(e.target.value),t._updatePage(0)}));var e=this.element.querySelector("tr.paginator__sort");e&&e.addEventListener("click",(function(e){var a=e.target;if(a.dataset.sortField){if(t.sortField){var n=t.element.querySelector("th[data-sort-field=".concat(t.sortField,"]"));n.classList.remove("paginator__sort--down"),n.classList.remove("paginator__sort--up")}t._updateSort(a.dataset.sortField,!t.sortDir),a.classList.add(t.sortDir?"paginator__sort--up":"paginator__sort--down")}})),this.paginator.attach(this._updatePage.bind(this)),this._loadEntries()}},{key:"_loadEntries",value:function(){var t=this;new Promise(this.ajaxCallback).then((function(e){t.element.classList.remove("hidden"),t.unfilteredData=e.data,t._updateFilter(t.options.preFilter)}))}},{key:"_updateEntries",value:function(t){this.data=t,this.totalRecords=this.data.length;var e=this.element.querySelector("tbody");h(e);for(var a=this.perPage*this.currentPage,n=a+this.perPage>this.totalRecords?this.totalRecords:a+this.perPage,i=a;in[e]?i=1:t[e]1&&void 0!==arguments[1]?arguments[1]:{};r(this,t),this.element=e,this.tags=[],this.options=a,this.maxTags=a.maxTags||32,this.inputNode=null,this.containerNode=null}return s(t,[{key:"attach",value:function(){var t=this;if(this.element.style.display="none",this.containerNode=d('
'),this.inputNode=d(''),this.containerNode.appendChild(this.inputNode),this.element.parentNode.insertBefore(this.containerNode,this.element.nextSibling),this.element.value){var a,n=e(this.element.value.split(","));try{for(n.s();!(a=n.n()).done;){var i=a.value;this.addTag(i)}}catch(t){n.e(t)}finally{n.f()}}this.containerNode.addEventListener("keydown",this._handleInputKeyUp.bind(this)),this.containerNode.addEventListener("click",this._handleContainerClick.bind(this)),this.inputNode.addEventListener("focusout",(function(e){t.inputNode.value&&(t.addTag(t.inputNode.value),t.inputNode.value="",t.updateHiddenInputValue())}))}},{key:"detach",value:function(){this.tags.clear(),this.containerNode.remove(),this.element.style.display="inline-block"}},{key:"updateHiddenInputValue",value:function(){this.element.value=this.tags.join(",")}},{key:"deleteTagNode",value:function(t){this.tags.splice(this.tags.indexOf(t.dataset.value.toLowerCase()),1),t.remove(),this.tags.length'+f(t)+''),this.inputNode),this.tags.length>=this.maxTags&&(this.inputNode.disabled=!0))}},{key:"_handleInputKeyUp",value:function(t){var e=this.inputNode.value;"Backspace"===t.key&&""===e?this.inputNode.previousSibling&&(this.deleteTagNode(this.inputNode.previousSibling),this.updateHiddenInputValue()):","===t.key?(this.addTag(e),this.inputNode.value="",this.updateHiddenInputValue(),t.preventDefault()):"Backspace"!==t.key&&e.length>255&&t.preventDefault()}},{key:"_handleContainerClick",value:function(t){t.target&&t.target.classList.contains("delete")&&(this.deleteTagNode(t.target.closest(".tag")),this.updateHiddenInputValue())}}]),t}(),b=function(){var t;Array.prototype.forEach.call(u(".js-tag-input"),(function(t){new y(t).attach()})),(t=c('[data-target~="#signin"],[data-target~="#signup"]'))&&(t.href="javascript:void(0)",t.addEventListener("click",(function(){c(".modal").classList.add("is-active")})),c(".modal-button-close").addEventListener("click",(function(){c(".modal").classList.remove("is-active")})));var e=c(".panel-tools .embed-tool");e&&e.addEventListener("click",(function(t){t.target&&t.target.closest(".panel-tools")&&p(t.target.closest(".panel-tools").querySelector(".panel-embed"))}));var a=c(".expand-tool");a&&a.addEventListener("click",(function(t){if(t.target&&t.target.closest(".panel")){var e=t.target.closest(".panel");e.classList.contains("panel-fullsize")?e.classList.remove("panel-fullsize"):e.classList.add("panel-fullsize")}})),(document.querySelectorAll(".notification .delete")||[]).forEach((function(t){var e=t.parentNode;t.addEventListener("click",(function(){e.parentNode.removeChild(e)}))}));var n=Array.prototype.slice.call(document.querySelectorAll(".navbar-burger"),0);n.length>0&&n.forEach((function(t){t.addEventListener("click",(function(){var e=t.dataset.target,a=document.getElementById(e);t.classList.toggle("is-active"),a.classList.toggle("is-active")}))}));var i=c(".captcha_container");if(i){var r=i.querySelector("a"),o=i.querySelector("img");r&&o&&r.addEventListener("click",(function(){var t=o.src;-1!==t.indexOf("&refresh")?t=t.split("&rand=")[0]:t+="&refresh",o.src=t+"&rand="+Math.random()}))}var s=u(".js-hidden");s&&Array.prototype.forEach.call(s,(function(t){p(t)}))};l=function(){b();var t=new URLSearchParams(window.location.search).get("q");new v(document.getElementById("archive"),{ajaxCallback:function(t){fetch("/api/ajax_pastes.php").then((function(t){return t.json()})).then(t)},rowCallback:function(t){return'\n ').concat(f(t.title),'\n ').concat(f(t.author),"\n ").concat(f(t.updated_at),"\n ").concat(t.tags.map((function(t){var e,a=t.name.toLowerCase();return e="nsfw"===a||"explicit"===a?"is-danger":"safe"===a?"is-success":"/"===a.charAt(0)&&"/"===a.charAt(a.length-1)?"is-primary":"is-info",'\n ').concat(f(t.name),"\n ")})).join(""),"\n ")},filterCallback:m,preFilter:t}).attach()},"loading"!==document.readyState?l():document.addEventListener("DOMContentLoaded",l); //# sourceMappingURL=archive.min.js.map diff --git a/public/assets/bundle/archive.min.js.map b/public/assets/bundle/archive.min.js.map index bdaf691..94277bf 100644 --- a/public/assets/bundle/archive.min.js.map +++ b/public/assets/bundle/archive.min.js.map @@ -1 +1 @@ -{"version":3,"file":"archive.min.js","sources":["../../../js/dom.js","../../../js/data_tables.js","../../../js/tag_input.js","../../../js/main.js","../../../js/archive.js","../../../js/utils.js"],"sourcesContent":["const $ = function(selector) {\n return document.querySelector(selector);\n};\n\nconst $$ = function(selector) {\n return document.querySelectorAll(selector) || [];\n};\n\nconst makeEl = function(html) {\n const template = document.createElement('template');\n\n template.innerHTML = html.trim();\n\n return template.content.firstChild;\n};\n\nconst clearEl = function(el) {\n while (el.firstChild) {\n el.removeChild(el.firstChild);\n }\n};\n\nconst toggleEl = function(el) {\n if (el.classList.contains('is-hidden')) {\n el.classList.remove('is-hidden');\n } else {\n el.classList.add('is-hidden');\n }\n};\n\nconst escape = function(unsafe) {\n return unsafe\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nconst whenReady = function(funcp) {\n if (document.readyState !== 'loading') {\n funcp();\n } else {\n document.addEventListener('DOMContentLoaded', funcp);\n }\n}\n\nexport { whenReady, $, $$, makeEl, clearEl, toggleEl, escape };","import { makeEl, clearEl } from \"./dom\";\n\nclass SimplePaginator {\n constructor(element) {\n this.element = element;\n }\n\n attach(pageCallback) {\n this.element.addEventListener('click', evt => {\n if (evt.target && evt.target.classList.contains('paginator__button')) {\n pageCallback(+evt.target.dataset.page);\n }\n });\n }\n\n update(totalRecords, perPage, currentPage) {\n clearEl(this.element);\n\n /* First and last page in existence */\n const firstPage = 0;\n const lastPage = Math.floor(totalRecords / perPage); // ish?\n const numPagesToShow = 2;\n\n if (lastPage === firstPage) {\n return;\n }\n\n /* First and last page the main paginator will show */\n const firstPageShow = (currentPage - numPagesToShow) < firstPage ? firstPage : (currentPage - numPagesToShow);\n const lastPageShow = (currentPage + numPagesToShow) > lastPage ? lastPage : (currentPage + numPagesToShow);\n\n /* Whether to show the first and last pages in existence at the ends of the paginator */\n const showFirstPage = (Math.abs(firstPage - currentPage)) > (numPagesToShow);\n const showLastPage = (Math.abs(lastPage - currentPage)) > (numPagesToShow);\n\n\n const prevButtonDisabled = currentPage === firstPage ? 'disabled' : ''\n\n /* Previous button */\n this.element.appendChild(makeEl(\n ``\n ));\n\n /* First page button */\n if (showFirstPage) {\n this.element.appendChild(makeEl(\n ``\n ));\n this.element.appendChild(makeEl(``));\n }\n\n /* \"window\" buttons */\n for (let i = firstPageShow; i <= lastPageShow; i++) {\n const selected = (i === currentPage ? 'paginator__button--selected' : '');\n this.element.appendChild(makeEl(\n ``\n ));\n }\n\n /* Last page button */\n if (showLastPage) {\n this.element.appendChild(makeEl(``));\n this.element.appendChild(makeEl(\n ``\n ));\n }\n\n const nextButtonDisabled = currentPage === lastPage ? 'disabled' : ''\n /* Next button */\n this.element.appendChild(makeEl(\n ``\n ));\n }\n}\n\nclass DataTable {\n constructor(element, options) {\n this.element = element;\n this.container = element.parentElement;\n this.options = options;\n\n this.ajaxCallback = options.ajaxCallback;\n this.data = [];\n this.unfilteredData = [];\n\n this.totalRecords = -1;\n this.perPage = 20;\n this.currentPage = 0;\n\n this.paginator = new SimplePaginator(this.container.querySelector('.paginator'));\n\n this.filterCallback = options.filterCallback;\n this.sortField = null;\n this.sortDir = true;\n }\n\n attach() {\n this.filterField = this.container.querySelector('input.search');\n if (this.filterField && this.filterCallback) {\n this.filterField.addEventListener('keyup', evt => {\n if (evt.target) {\n this._updateFilter(evt.target.value);\n }\n });\n\n if (this.options.preFilter) {\n this.filterField.value = this.options.preFilter;\n }\n }\n\n this.perPageField = this.container.querySelector('select[name=per_page]');\n\n if (this.perPageField) {\n this.perPageField.addEventListener('change', evt => {\n this.perPage = Number(evt.target.value);\n this._updatePage(0);\n });\n }\n\n const header = this.element.querySelector('tr.paginator__sort');\n\n if (header) {\n header.addEventListener('click', evt => {\n const target = evt.target;\n\n if (!target.dataset.sortField) {\n return;\n }\n\n if (this.sortField) {\n const elem = this.element.querySelector(`th[data-sort-field=${this.sortField}]`)\n elem.classList.remove('paginator__sort--down');\n elem.classList.remove('paginator__sort--up');\n }\n\n this._updateSort(target.dataset.sortField, !this.sortDir);\n\n target.classList.add(this.sortDir ? 'paginator__sort--up' : 'paginator__sort--down');\n });\n }\n\n this.paginator.attach(this._updatePage.bind(this));\n this._loadEntries();\n }\n\n /* Load the requested data from the server, and when done, update the DOM. */\n _loadEntries() {\n new Promise(this.ajaxCallback)\n .then(data => {\n this.element.classList.remove('hidden');\n this.unfilteredData = data.data;\n this._updateFilter(this.options.preFilter);\n });\n }\n\n /* Update the DOM to reflect the current state of the data we have loaded */\n _updateEntries(data) {\n this.data = data;\n this.totalRecords = this.data.length;\n\n const bodyElement = this.element.querySelector('tbody');\n clearEl(bodyElement);\n\n const firstIndex = (this.perPage * this.currentPage);\n const lastIndex = (firstIndex + this.perPage) > this.totalRecords ? this.totalRecords : (firstIndex + this.perPage);\n\n\n for (let i = firstIndex; i < lastIndex; i++) {\n const rowElem = makeEl(this.options.rowCallback(this.data[i]));\n rowElem.classList.add(i % 2 === 0 ? 'odd' : 'even');\n\n bodyElement.appendChild(rowElem);\n }\n\n this.paginator.update(this.totalRecords, this.perPage, this.currentPage);\n }\n\n _updatePage(n) {\n this.currentPage = n;\n this.paginator.update(this.totalRecords, this.perPage, this.currentPage);\n this._updateEntries(this.data);\n }\n\n _updateFilter(query) {\n /* clearing the query */\n if (query === null || query === '') {\n this._updateEntries(this.unfilteredData);\n return;\n }\n\n let data = [];\n for (const datum of this.unfilteredData) {\n if (this.filterCallback(datum, query)) {\n data.push(datum);\n }\n }\n\n this._updatePage(0)\n this._updateEntries(data);\n }\n\n _updateSort(field, direction) {\n this.sortField = field;\n this.sortDir = direction;\n\n let newEntries = [...this.data].sort((a, b) => {\n let sorter = 0;\n\n if (a[field] > b[field]) {\n sorter = 1;\n } else if (a[field] < b[field]) {\n sorter = -1;\n }\n\n if (!direction) {\n sorter = -sorter;\n }\n\n return sorter;\n });\n\n this._updatePage(0);\n this._updateEntries(newEntries);\n }\n}\n\nconst dumbFilterCallback = (datum, query) => {\n if (!query) {\n return true;\n }\n\n const queryLower = query.toLowerCase();\n\n if (queryLower === 'untagged' && datum.tags.length === 0) {\n return true;\n }\n\n if (datum.title.toLowerCase().indexOf(queryLower) !== -1) {\n return true;\n }\n\n if (datum.author.toLowerCase().indexOf(queryLower) !== -1) {\n return true;\n }\n\n /* this is inefficient */\n for (const tag of datum.tags) {\n if (tag.name.toLowerCase().indexOf(queryLower) !== -1) {\n return true;\n }\n }\n\n return false;\n};\n\nexport { DataTable, dumbFilterCallback };\n","import { makeEl, escape } from \"./dom\";\n\nclass TagsInput {\n constructor(element, options = {}) {\n this.element = element;\n this.tags = [];\n this.options = options\n\n this.maxTags = options.maxTags || 32;\n this.inputNode = null;\n this.containerNode = null;\n }\n\n attach() {\n this.element.style.display = 'none';\n\n this.containerNode = makeEl('
');\n this.inputNode = makeEl('');\n this.containerNode.appendChild(this.inputNode);\n\n this.element.parentNode.insertBefore(this.containerNode, this.element.nextSibling);\n\n /* Load existing tags from input */\n if (this.element.value) {\n for (const tag of this.element.value.split(',')) {\n this.addTag(tag);\n }\n }\n\n /* Handle addition and removal of tags via key-presses */\n this.containerNode.addEventListener('keydown', this._handleInputKeyUp.bind(this));\n\n /* Handle deletions by clicking the delete button */\n this.containerNode.addEventListener('click', this._handleContainerClick.bind(this));\n\n /* Handle clicks outside the input node to add the past tag */\n this.inputNode.addEventListener('focusout', (evt) => {\n if (this.inputNode.value) {\n this.addTag(this.inputNode.value);\n this.inputNode.value = \"\";\n this.updateHiddenInputValue();\n }\n });\n }\n\n detach() {\n this.tags.clear();\n this.containerNode.remove();\n this.element.style.display = 'inline-block';\n }\n\n updateHiddenInputValue() {\n this.element.value = this.tags.join(',');\n }\n\n deleteTagNode(node) {\n this.tags.splice(this.tags.indexOf(node.dataset.value.toLowerCase()), 1);\n node.remove();\n\n /* Below the limit? Make sure the input is enabled. */\n if (this.tags.length < this.maxTags) {\n this.inputNode.disabled = false;\n }\n }\n\n addTag(tagValue) {\n tagValue = tagValue.trim();\n\n /* Tag value is probably not empty and we don't already have the same tag. */\n if (tagValue !== '' && this.tags.indexOf(tagValue.toLowerCase()) === -1) {\n this.tags.push(tagValue.toLowerCase());\n\n this.inputNode.parentNode.insertBefore(\n makeEl('' + escape(tagValue) + ''),\n this.inputNode\n );\n\n /* Too many tags, disable the input for now. */\n if (this.tags.length >= this.maxTags) {\n this.inputNode.disabled = true;\n }\n }\n }\n\n _handleInputKeyUp(evt) {\n let tagValue = this.inputNode.value;\n\n if (evt.key === 'Backspace' && tagValue === '') {\n // Remove the child\n if (this.inputNode.previousSibling) {\n this.deleteTagNode(this.inputNode.previousSibling);\n\n this.updateHiddenInputValue();\n }\n } else if (evt.key === ',') {\n this.addTag(tagValue);\n\n this.inputNode.value = ''\n this.updateHiddenInputValue();\n\n evt.preventDefault();\n } else if (evt.key !== 'Backspace' && tagValue.length > 255) { // This could be improved to check if it would actually result in a new char being typed...\n evt.preventDefault();\n }\n }\n\n _handleContainerClick(evt) {\n if (evt.target && evt.target.classList.contains('delete')) {\n this.deleteTagNode(evt.target.closest('.tag'));\n this.updateHiddenInputValue();\n }\n }\n}\n\nexport { TagsInput };\n","import { $, $$, toggleEl } from './dom';\nimport { TagsInput } from \"./tag_input\";\n\nconst setupSignupModal = () => {\n const signupButton = $('[data-target~=\"#signin\"],[data-target~=\"#signup\"]');\n\n if (signupButton) {\n signupButton.href = 'javascript:void(0)';\n\n signupButton.addEventListener('click', () => {\n $('.modal').classList.add('is-active');\n });\n\n $('.modal-button-close').addEventListener('click', () => {\n $('.modal').classList.remove('is-active');\n });\n }\n}\n\nconst globalSetup = () => {\n Array.prototype.forEach.call($$('.js-tag-input'), (el) => {\n new TagsInput(el).attach();\n });\n\n setupSignupModal();\n\n const embedButton = $('.panel-tools .embed-tool');\n\n if (embedButton){\n embedButton.addEventListener('click', (evt) => {\n if (evt.target && evt.target.closest('.panel-tools')) {\n toggleEl(evt.target.closest('.panel-tools').querySelector('.panel-embed'));\n }\n });\n }\n\n const expandButton = $('.expand-tool');\n\n if (expandButton) {\n expandButton.addEventListener('click', (evt) => {\n if (evt.target && evt.target.closest('.panel')) {\n const panel = evt.target.closest('.panel');\n\n if (panel.classList.contains('panel-fullsize')) {\n panel.classList.remove('panel-fullsize');\n } else {\n panel.classList.add('panel-fullsize');\n }\n }\n });\n }\n\n // Notifications\n (document.querySelectorAll('.notification .delete') || []).forEach(($delete) => {\n const $notification = $delete.parentNode;\n\n $delete.addEventListener('click', () => {\n $notification.parentNode.removeChild($notification);\n });\n });\n\n // Hamburger menu\n const $navbarBurgers = Array.prototype.slice.call(document.querySelectorAll('.navbar-burger'), 0);\n if ($navbarBurgers.length > 0) {\n $navbarBurgers.forEach(el => {\n el.addEventListener('click', () => {\n const target = el.dataset.target;\n const $target = document.getElementById(target);\n el.classList.toggle('is-active');\n $target.classList.toggle('is-active');\n });\n });\n }\n\n const preloader = $('.preloader');\n const main = $('main');\n\n if (preloader && main) {\n preloader.remove();\n main.id = '';\n }\n\n // CAPTCHA refresh\n const captchaContainer = $('.captcha_container');\n\n if (captchaContainer) {\n const refreshElement = captchaContainer.querySelector('a');\n const imageElement = captchaContainer.querySelector('img');\n\n if (refreshElement && imageElement) {\n refreshElement.addEventListener('click', () => {\n let src = imageElement.src;\n\n if (src.indexOf('&refresh') !== -1) {\n // yeah, it's kinda cancerous. fuck off.\n src = src.split('&rand=')[0];\n } else {\n src += '&refresh';\n }\n\n imageElement.src = src + '&rand=' + Math.random();\n });\n }\n }\n\n const hiddenElements = $$('.js-hidden');\n\n if (hiddenElements) {\n Array.prototype.forEach.call(hiddenElements, (elem) => {\n toggleEl(elem);\n });\n }\n}\n\nexport { globalSetup };","import { escape, whenReady } from './dom';\nimport { DataTable, dumbFilterCallback } from './data_tables';\nimport { tagsToHtml } from \"./utils\";\nimport { globalSetup } from './main';\n\nwhenReady(() => {\n globalSetup();\n\n const urlParams = new URLSearchParams(window.location.search);\n const myParam = urlParams.get('q');\n const apiUrl = /* myParam !== null ? '/api/ajax_pastes.php?q=' + myParam : */ '/api/ajax_pastes.php';\n\n const table = new DataTable(document.getElementById('archive'), {\n ajaxCallback: (resolve) => {\n fetch(apiUrl)\n .then(r => r.json())\n .then(resolve);\n },\n rowCallback: (rowData) => {\n return `\n ${escape(rowData.title)}\n ${escape(rowData.author)}\n ${escape(rowData.updated_at)}\n ${tagsToHtml(rowData.tags)}\n `;\n },\n filterCallback: dumbFilterCallback,\n preFilter: myParam\n });\n table.attach();\n});","import { escape } from \"./dom\";\n\nconst tagsToHtml = (tags) => {\n return tags.map(tagData => {\n let tagColorClass;\n const tagLower = tagData.name.toLowerCase();\n if (tagLower === 'nsfw' || tagLower === 'explicit') {\n tagColorClass = 'is-danger';\n } else if (tagLower === 'safe') {\n tagColorClass = 'is-success';\n } else if (tagLower.charAt(0) === '/' && tagLower.charAt(tagLower.length - 1) === '/') {\n tagColorClass = 'is-primary';\n } else {\n tagColorClass = 'is-info';\n }\n\n return `\n ${escape(tagData.name)}\n `;\n }).join('');\n};\n\nexport { tagsToHtml };\n"],"names":["funcp","$","selector","document","querySelector","$$","querySelectorAll","makeEl","html","template","createElement","innerHTML","trim","content","firstChild","clearEl","el","removeChild","toggleEl","classList","contains","remove","add","escape","unsafe","replace","SimplePaginator","element","_classCallCheck","this","_createClass","key","value","pageCallback","addEventListener","evt","target","dataset","page","totalRecords","perPage","currentPage","lastPage","Math","floor","firstPageShow","lastPageShow","showFirstPage","abs","showLastPage","prevButtonDisabled","appendChild","concat","i","selected","nextButtonDisabled","DataTable","options","container","parentElement","ajaxCallback","data","unfilteredData","paginator","filterCallback","sortField","sortDir","_this","filterField","_updateFilter","preFilter","perPageField","Number","_updatePage","header","elem","_updateSort","attach","bind","_loadEntries","_this2","Promise","then","length","bodyElement","firstIndex","lastIndex","rowElem","rowCallback","update","n","_updateEntries","query","_step","_iterator","_createForOfIteratorHelper","s","done","datum","push","err","e","f","field","direction","newEntries","_toConsumableArray","sort","a","b","sorter","dumbFilterCallback","queryLower","toLowerCase","tags","title","indexOf","author","_step2","_iterator2","name","TagsInput","arguments","undefined","maxTags","inputNode","containerNode","_this3","style","display","parentNode","insertBefore","nextSibling","_step3","_iterator3","split","tag","addTag","_handleInputKeyUp","_handleContainerClick","updateHiddenInputValue","clear","join","node","splice","disabled","tagValue","previousSibling","deleteTagNode","preventDefault","closest","globalSetup","signupButton","Array","prototype","forEach","call","href","embedButton","expandButton","panel","$delete","$notification","$navbarBurgers","slice","$target","getElementById","toggle","preloader","main","id","captchaContainer","refreshElement","imageElement","src","random","hiddenElements","myParam","URLSearchParams","window","location","search","get","resolve","fetch","r","json","rowData","updated_at","map","tagData","tagColorClass","tagLower","charAt","slug","readyState"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"archive.min.js","sources":["../../../js/dom.js","../../../js/data_tables.js","../../../js/tag_input.js","../../../js/main.js","../../../js/archive.js","../../../js/utils.js"],"sourcesContent":["const $ = function(selector) {\n return document.querySelector(selector);\n};\n\nconst $$ = function(selector) {\n return document.querySelectorAll(selector) || [];\n};\n\nconst makeEl = function(html) {\n const template = document.createElement('template');\n\n template.innerHTML = html.trim();\n\n return template.content.firstChild;\n};\n\nconst clearEl = function(el) {\n while (el.firstChild) {\n el.removeChild(el.firstChild);\n }\n};\n\nconst toggleEl = function(el) {\n if (el.classList.contains('is-hidden')) {\n el.classList.remove('is-hidden');\n } else {\n el.classList.add('is-hidden');\n }\n};\n\nconst escape = function(unsafe) {\n return unsafe\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nconst whenReady = function(funcp) {\n if (document.readyState !== 'loading') {\n funcp();\n } else {\n document.addEventListener('DOMContentLoaded', funcp);\n }\n}\n\nexport { whenReady, $, $$, makeEl, clearEl, toggleEl, escape };","import { makeEl, clearEl } from \"./dom\";\n\nclass SimplePaginator {\n constructor(element) {\n this.element = element;\n }\n\n attach(pageCallback) {\n this.element.addEventListener('click', evt => {\n if (evt.target && evt.target.classList.contains('paginator__button')) {\n pageCallback(+evt.target.dataset.page);\n }\n });\n }\n\n update(totalRecords, perPage, currentPage) {\n clearEl(this.element);\n\n /* First and last page in existence */\n const firstPage = 0;\n const lastPage = Math.floor(totalRecords / perPage); // ish?\n const numPagesToShow = 2;\n\n if (lastPage === firstPage) {\n return;\n }\n\n /* First and last page the main paginator will show */\n const firstPageShow = (currentPage - numPagesToShow) < firstPage ? firstPage : (currentPage - numPagesToShow);\n const lastPageShow = (currentPage + numPagesToShow) > lastPage ? lastPage : (currentPage + numPagesToShow);\n\n /* Whether to show the first and last pages in existence at the ends of the paginator */\n const showFirstPage = (Math.abs(firstPage - currentPage)) > (numPagesToShow);\n const showLastPage = (Math.abs(lastPage - currentPage)) > (numPagesToShow);\n\n\n const prevButtonDisabled = currentPage === firstPage ? 'disabled' : ''\n\n /* Previous button */\n this.element.appendChild(makeEl(\n ``\n ));\n\n /* First page button */\n if (showFirstPage) {\n this.element.appendChild(makeEl(\n ``\n ));\n this.element.appendChild(makeEl(``));\n }\n\n /* \"window\" buttons */\n for (let i = firstPageShow; i <= lastPageShow; i++) {\n const selected = (i === currentPage ? 'paginator__button--selected' : '');\n this.element.appendChild(makeEl(\n ``\n ));\n }\n\n /* Last page button */\n if (showLastPage) {\n this.element.appendChild(makeEl(``));\n this.element.appendChild(makeEl(\n ``\n ));\n }\n\n const nextButtonDisabled = currentPage === lastPage ? 'disabled' : ''\n /* Next button */\n this.element.appendChild(makeEl(\n ``\n ));\n }\n}\n\nclass DataTable {\n constructor(element, options) {\n this.element = element;\n this.container = element.parentElement;\n this.options = options;\n\n this.ajaxCallback = options.ajaxCallback;\n this.data = [];\n this.unfilteredData = [];\n\n this.totalRecords = -1;\n this.perPage = 20;\n this.currentPage = 0;\n\n this.paginator = new SimplePaginator(this.container.querySelector('.paginator'));\n\n this.filterCallback = options.filterCallback;\n this.sortField = null;\n this.sortDir = true;\n }\n\n attach() {\n this.filterField = this.container.querySelector('input.search');\n if (this.filterField && this.filterCallback) {\n this.filterField.addEventListener('keyup', evt => {\n if (evt.target) {\n this._updateFilter(evt.target.value);\n }\n });\n\n if (this.options.preFilter) {\n this.filterField.value = this.options.preFilter;\n }\n }\n\n this.perPageField = this.container.querySelector('select[name=per_page]');\n\n if (this.perPageField) {\n this.perPageField.addEventListener('change', evt => {\n this.perPage = Number(evt.target.value);\n this._updatePage(0);\n });\n }\n\n const header = this.element.querySelector('tr.paginator__sort');\n\n if (header) {\n header.addEventListener('click', evt => {\n const target = evt.target;\n\n if (!target.dataset.sortField) {\n return;\n }\n\n if (this.sortField) {\n const elem = this.element.querySelector(`th[data-sort-field=${this.sortField}]`)\n elem.classList.remove('paginator__sort--down');\n elem.classList.remove('paginator__sort--up');\n }\n\n this._updateSort(target.dataset.sortField, !this.sortDir);\n\n target.classList.add(this.sortDir ? 'paginator__sort--up' : 'paginator__sort--down');\n });\n }\n\n this.paginator.attach(this._updatePage.bind(this));\n this._loadEntries();\n }\n\n /* Load the requested data from the server, and when done, update the DOM. */\n _loadEntries() {\n new Promise(this.ajaxCallback)\n .then(data => {\n this.element.classList.remove('hidden');\n this.unfilteredData = data.data;\n this._updateFilter(this.options.preFilter);\n });\n }\n\n /* Update the DOM to reflect the current state of the data we have loaded */\n _updateEntries(data) {\n this.data = data;\n this.totalRecords = this.data.length;\n\n const bodyElement = this.element.querySelector('tbody');\n clearEl(bodyElement);\n\n const firstIndex = (this.perPage * this.currentPage);\n const lastIndex = (firstIndex + this.perPage) > this.totalRecords ? this.totalRecords : (firstIndex + this.perPage);\n\n\n for (let i = firstIndex; i < lastIndex; i++) {\n const rowElem = makeEl(this.options.rowCallback(this.data[i]));\n rowElem.classList.add(i % 2 === 0 ? 'odd' : 'even');\n\n bodyElement.appendChild(rowElem);\n }\n\n this.paginator.update(this.totalRecords, this.perPage, this.currentPage);\n }\n\n _updatePage(n) {\n this.currentPage = n;\n this.paginator.update(this.totalRecords, this.perPage, this.currentPage);\n this._updateEntries(this.data);\n }\n\n _updateFilter(query) {\n /* clearing the query */\n if (query === null || query === '') {\n this._updateEntries(this.unfilteredData);\n return;\n }\n\n let data = [];\n for (const datum of this.unfilteredData) {\n if (this.filterCallback(datum, query)) {\n data.push(datum);\n }\n }\n\n this._updatePage(0)\n this._updateEntries(data);\n }\n\n _updateSort(field, direction) {\n this.sortField = field;\n this.sortDir = direction;\n\n let newEntries = [...this.data].sort((a, b) => {\n let sorter = 0;\n\n if (a[field] > b[field]) {\n sorter = 1;\n } else if (a[field] < b[field]) {\n sorter = -1;\n }\n\n if (!direction) {\n sorter = -sorter;\n }\n\n return sorter;\n });\n\n this._updatePage(0);\n this._updateEntries(newEntries);\n }\n}\n\nconst dumbFilterCallback = (datum, query) => {\n if (!query) {\n return true;\n }\n\n const queryLower = query.toLowerCase();\n\n if (queryLower === 'untagged' && datum.tags.length === 0) {\n return true;\n }\n\n if (datum.title.toLowerCase().indexOf(queryLower) !== -1) {\n return true;\n }\n\n if (datum.author.toLowerCase().indexOf(queryLower) !== -1) {\n return true;\n }\n\n /* this is inefficient */\n for (const tag of datum.tags) {\n if (tag.name.toLowerCase().indexOf(queryLower) !== -1) {\n return true;\n }\n }\n\n return false;\n};\n\nexport { DataTable, dumbFilterCallback };\n","import { makeEl, escape } from \"./dom\";\n\nclass TagsInput {\n constructor(element, options = {}) {\n this.element = element;\n this.tags = [];\n this.options = options\n\n this.maxTags = options.maxTags || 32;\n this.inputNode = null;\n this.containerNode = null;\n }\n\n attach() {\n this.element.style.display = 'none';\n\n this.containerNode = makeEl('
');\n this.inputNode = makeEl('');\n this.containerNode.appendChild(this.inputNode);\n\n this.element.parentNode.insertBefore(this.containerNode, this.element.nextSibling);\n\n /* Load existing tags from input */\n if (this.element.value) {\n for (const tag of this.element.value.split(',')) {\n this.addTag(tag);\n }\n }\n\n /* Handle addition and removal of tags via key-presses */\n this.containerNode.addEventListener('keydown', this._handleInputKeyUp.bind(this));\n\n /* Handle deletions by clicking the delete button */\n this.containerNode.addEventListener('click', this._handleContainerClick.bind(this));\n\n /* Handle clicks outside the input node to add the past tag */\n this.inputNode.addEventListener('focusout', (evt) => {\n if (this.inputNode.value) {\n this.addTag(this.inputNode.value);\n this.inputNode.value = \"\";\n this.updateHiddenInputValue();\n }\n });\n }\n\n detach() {\n this.tags.clear();\n this.containerNode.remove();\n this.element.style.display = 'inline-block';\n }\n\n updateHiddenInputValue() {\n this.element.value = this.tags.join(',');\n }\n\n deleteTagNode(node) {\n this.tags.splice(this.tags.indexOf(node.dataset.value.toLowerCase()), 1);\n node.remove();\n\n /* Below the limit? Make sure the input is enabled. */\n if (this.tags.length < this.maxTags) {\n this.inputNode.disabled = false;\n }\n }\n\n addTag(tagValue) {\n tagValue = tagValue.trim();\n\n /* Tag value is probably not empty and we don't already have the same tag. */\n if (tagValue !== '' && this.tags.indexOf(tagValue.toLowerCase()) === -1) {\n this.tags.push(tagValue.toLowerCase());\n\n this.inputNode.parentNode.insertBefore(\n makeEl('' + escape(tagValue) + ''),\n this.inputNode\n );\n\n /* Too many tags, disable the input for now. */\n if (this.tags.length >= this.maxTags) {\n this.inputNode.disabled = true;\n }\n }\n }\n\n _handleInputKeyUp(evt) {\n let tagValue = this.inputNode.value;\n\n if (evt.key === 'Backspace' && tagValue === '') {\n // Remove the child\n if (this.inputNode.previousSibling) {\n this.deleteTagNode(this.inputNode.previousSibling);\n\n this.updateHiddenInputValue();\n }\n } else if (evt.key === ',') {\n this.addTag(tagValue);\n\n this.inputNode.value = ''\n this.updateHiddenInputValue();\n\n evt.preventDefault();\n } else if (evt.key !== 'Backspace' && tagValue.length > 255) { // This could be improved to check if it would actually result in a new char being typed...\n evt.preventDefault();\n }\n }\n\n _handleContainerClick(evt) {\n if (evt.target && evt.target.classList.contains('delete')) {\n this.deleteTagNode(evt.target.closest('.tag'));\n this.updateHiddenInputValue();\n }\n }\n}\n\nexport { TagsInput };\n","import { $, $$, toggleEl } from './dom';\nimport { TagsInput } from \"./tag_input\";\n\nconst setupSignupModal = () => {\n const signupButton = $('[data-target~=\"#signin\"],[data-target~=\"#signup\"]');\n\n if (signupButton) {\n signupButton.href = 'javascript:void(0)';\n\n signupButton.addEventListener('click', () => {\n $('.modal').classList.add('is-active');\n });\n\n $('.modal-button-close').addEventListener('click', () => {\n $('.modal').classList.remove('is-active');\n });\n }\n}\n\nconst globalSetup = () => {\n Array.prototype.forEach.call($$('.js-tag-input'), (el) => {\n new TagsInput(el).attach();\n });\n\n setupSignupModal();\n\n const embedButton = $('.panel-tools .embed-tool');\n\n if (embedButton){\n embedButton.addEventListener('click', (evt) => {\n if (evt.target && evt.target.closest('.panel-tools')) {\n toggleEl(evt.target.closest('.panel-tools').querySelector('.panel-embed'));\n }\n });\n }\n\n const expandButton = $('.expand-tool');\n\n if (expandButton) {\n expandButton.addEventListener('click', (evt) => {\n if (evt.target && evt.target.closest('.panel')) {\n const panel = evt.target.closest('.panel');\n\n if (panel.classList.contains('panel-fullsize')) {\n panel.classList.remove('panel-fullsize');\n } else {\n panel.classList.add('panel-fullsize');\n }\n }\n });\n }\n\n // Notifications\n (document.querySelectorAll('.notification .delete') || []).forEach(($delete) => {\n const $notification = $delete.parentNode;\n\n $delete.addEventListener('click', () => {\n $notification.parentNode.removeChild($notification);\n });\n });\n\n // Hamburger menu\n const $navbarBurgers = Array.prototype.slice.call(document.querySelectorAll('.navbar-burger'), 0);\n if ($navbarBurgers.length > 0) {\n $navbarBurgers.forEach(el => {\n el.addEventListener('click', () => {\n const target = el.dataset.target;\n const $target = document.getElementById(target);\n el.classList.toggle('is-active');\n $target.classList.toggle('is-active');\n });\n });\n }\n\n // CAPTCHA refresh\n const captchaContainer = $('.captcha_container');\n\n if (captchaContainer) {\n const refreshElement = captchaContainer.querySelector('a');\n const imageElement = captchaContainer.querySelector('img');\n\n if (refreshElement && imageElement) {\n refreshElement.addEventListener('click', () => {\n let src = imageElement.src;\n\n if (src.indexOf('&refresh') !== -1) {\n // yeah, it's kinda cancerous. fuck off.\n src = src.split('&rand=')[0];\n } else {\n src += '&refresh';\n }\n\n imageElement.src = src + '&rand=' + Math.random();\n });\n }\n }\n\n const hiddenElements = $$('.js-hidden');\n\n if (hiddenElements) {\n Array.prototype.forEach.call(hiddenElements, (elem) => {\n toggleEl(elem);\n });\n }\n}\n\nexport { globalSetup };","import { escape, whenReady } from './dom';\nimport { DataTable, dumbFilterCallback } from './data_tables';\nimport { tagsToHtml } from \"./utils\";\nimport { globalSetup } from './main';\n\nwhenReady(() => {\n globalSetup();\n\n const urlParams = new URLSearchParams(window.location.search);\n const myParam = urlParams.get('q');\n const apiUrl = /* myParam !== null ? '/api/ajax_pastes.php?q=' + myParam : */ '/api/ajax_pastes.php';\n\n const table = new DataTable(document.getElementById('archive'), {\n ajaxCallback: (resolve) => {\n fetch(apiUrl)\n .then(r => r.json())\n .then(resolve);\n },\n rowCallback: (rowData) => {\n return `\n ${escape(rowData.title)}\n ${escape(rowData.author)}\n ${escape(rowData.updated_at)}\n ${tagsToHtml(rowData.tags)}\n `;\n },\n filterCallback: dumbFilterCallback,\n preFilter: myParam\n });\n table.attach();\n});","import { escape } from \"./dom\";\n\nconst tagsToHtml = (tags) => {\n return tags.map(tagData => {\n let tagColorClass;\n const tagLower = tagData.name.toLowerCase();\n if (tagLower === 'nsfw' || tagLower === 'explicit') {\n tagColorClass = 'is-danger';\n } else if (tagLower === 'safe') {\n tagColorClass = 'is-success';\n } else if (tagLower.charAt(0) === '/' && tagLower.charAt(tagLower.length - 1) === '/') {\n tagColorClass = 'is-primary';\n } else {\n tagColorClass = 'is-info';\n }\n\n return `\n ${escape(tagData.name)}\n `;\n }).join('');\n};\n\nexport { tagsToHtml };\n"],"names":["funcp","$","selector","document","querySelector","$$","querySelectorAll","makeEl","html","template","createElement","innerHTML","trim","content","firstChild","clearEl","el","removeChild","toggleEl","classList","contains","remove","add","escape","unsafe","replace","SimplePaginator","element","_classCallCheck","this","_createClass","key","value","pageCallback","addEventListener","evt","target","dataset","page","totalRecords","perPage","currentPage","lastPage","Math","floor","firstPageShow","lastPageShow","showFirstPage","abs","showLastPage","prevButtonDisabled","appendChild","concat","i","selected","nextButtonDisabled","DataTable","options","container","parentElement","ajaxCallback","data","unfilteredData","paginator","filterCallback","sortField","sortDir","_this","filterField","_updateFilter","preFilter","perPageField","Number","_updatePage","header","elem","_updateSort","attach","bind","_loadEntries","_this2","Promise","then","length","bodyElement","firstIndex","lastIndex","rowElem","rowCallback","update","n","_updateEntries","query","_step","_iterator","_createForOfIteratorHelper","s","done","datum","push","err","e","f","field","direction","newEntries","_toConsumableArray","sort","a","b","sorter","dumbFilterCallback","queryLower","toLowerCase","tags","title","indexOf","author","_step2","_iterator2","name","TagsInput","arguments","undefined","maxTags","inputNode","containerNode","_this3","style","display","parentNode","insertBefore","nextSibling","_step3","_iterator3","split","tag","addTag","_handleInputKeyUp","_handleContainerClick","updateHiddenInputValue","clear","join","node","splice","disabled","tagValue","previousSibling","deleteTagNode","preventDefault","closest","globalSetup","signupButton","Array","prototype","forEach","call","href","embedButton","expandButton","panel","$delete","$notification","$navbarBurgers","slice","$target","getElementById","toggle","captchaContainer","refreshElement","imageElement","src","random","hiddenElements","myParam","URLSearchParams","window","location","search","get","resolve","fetch","r","json","rowData","id","updated_at","map","tagData","tagColorClass","tagLower","charAt","slug","readyState"],"mappings":"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"} \ No newline at end of file diff --git a/public/assets/bundle/generic.js b/public/assets/bundle/generic.js index 657d30a..c25cbef 100644 --- a/public/assets/bundle/generic.js +++ b/public/assets/bundle/generic.js @@ -54,7 +54,7 @@ class TagsInput { this.element.style.display = 'none'; this.containerNode = makeEl('
'); - this.inputNode = makeEl(''); + this.inputNode = makeEl(''); this.containerNode.appendChild(this.inputNode); this.element.parentNode.insertBefore(this.containerNode, this.element.nextSibling); @@ -222,14 +222,6 @@ const globalSetup = () => { }); } - const preloader = $('.preloader'); - const main = $('main'); - - if (preloader && main) { - preloader.remove(); - main.id = ''; - } - // CAPTCHA refresh const captchaContainer = $('.captcha_container'); diff --git a/public/assets/bundle/generic.min.js b/public/assets/bundle/generic.min.js index 0251676..ab37f75 100644 --- a/public/assets/bundle/generic.min.js +++ b/public/assets/bundle/generic.min.js @@ -1,2 +1,2 @@ -function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(e,t){var i="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!i){if(Array.isArray(e)||(i=function(e,t){if(!e)return;if("string"==typeof e)return n(e,t);var i=Object.prototype.toString.call(e).slice(8,-1);"Object"===i&&e.constructor&&(i=e.constructor.name);if("Map"===i||"Set"===i)return Array.from(e);if("Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i))return n(e,t)}(e))||t&&e&&"number"==typeof e.length){i&&(e=i);var a=0,r=function(){};return{s:r,n:function(){return a>=e.length?{done:!0}:{done:!1,value:e[a++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,l=!0,s=!1;return{s:function(){i=i.call(e)},n:function(){var e=i.next();return l=e.done,e},e:function(e){s=!0,o=e},f:function(){try{l||null==i.return||i.return()}finally{if(s)throw o}}}}function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=new Array(t);n/g,">").replace(/"/g,""").replace(/'/g,"'")},c=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.element=t,this.tags=[],this.options=n,this.maxTags=n.maxTags||32,this.inputNode=null,this.containerNode=null}var n,a,r;return n=e,(a=[{key:"attach",value:function(){var e=this;if(this.element.style.display="none",this.containerNode=l('
'),this.inputNode=l(''),this.containerNode.appendChild(this.inputNode),this.element.parentNode.insertBefore(this.containerNode,this.element.nextSibling),this.element.value){var n,i=t(this.element.value.split(","));try{for(i.s();!(n=i.n()).done;){var a=n.value;this.addTag(a)}}catch(e){i.e(e)}finally{i.f()}}this.containerNode.addEventListener("keydown",this._handleInputKeyUp.bind(this)),this.containerNode.addEventListener("click",this._handleContainerClick.bind(this)),this.inputNode.addEventListener("focusout",(function(t){e.inputNode.value&&(e.addTag(e.inputNode.value),e.inputNode.value="",e.updateHiddenInputValue())}))}},{key:"detach",value:function(){this.tags.clear(),this.containerNode.remove(),this.element.style.display="inline-block"}},{key:"updateHiddenInputValue",value:function(){this.element.value=this.tags.join(",")}},{key:"deleteTagNode",value:function(e){this.tags.splice(this.tags.indexOf(e.dataset.value.toLowerCase()),1),e.remove(),this.tags.length'+u(e)+''),this.inputNode),this.tags.length>=this.maxTags&&(this.inputNode.disabled=!0))}},{key:"_handleInputKeyUp",value:function(e){var t=this.inputNode.value;"Backspace"===e.key&&""===t?this.inputNode.previousSibling&&(this.deleteTagNode(this.inputNode.previousSibling),this.updateHiddenInputValue()):","===e.key?(this.addTag(t),this.inputNode.value="",this.updateHiddenInputValue(),e.preventDefault()):"Backspace"!==e.key&&t.length>255&&e.preventDefault()}},{key:"_handleContainerClick",value:function(e){e.target&&e.target.classList.contains("delete")&&(this.deleteTagNode(e.target.closest(".tag")),this.updateHiddenInputValue())}}])&&i(n.prototype,a),r&&i(n,r),Object.defineProperty(n,"prototype",{writable:!1}),e}();a=function(){var e;Array.prototype.forEach.call(o(".js-tag-input"),(function(e){new c(e).attach()})),(e=r('[data-target~="#signin"],[data-target~="#signup"]'))&&(e.href="javascript:void(0)",e.addEventListener("click",(function(){r(".modal").classList.add("is-active")})),r(".modal-button-close").addEventListener("click",(function(){r(".modal").classList.remove("is-active")})));var t=r(".panel-tools .embed-tool");t&&t.addEventListener("click",(function(e){e.target&&e.target.closest(".panel-tools")&&s(e.target.closest(".panel-tools").querySelector(".panel-embed"))}));var n=r(".expand-tool");n&&n.addEventListener("click",(function(e){if(e.target&&e.target.closest(".panel")){var t=e.target.closest(".panel");t.classList.contains("panel-fullsize")?t.classList.remove("panel-fullsize"):t.classList.add("panel-fullsize")}})),(document.querySelectorAll(".notification .delete")||[]).forEach((function(e){var t=e.parentNode;e.addEventListener("click",(function(){t.parentNode.removeChild(t)}))}));var i=Array.prototype.slice.call(document.querySelectorAll(".navbar-burger"),0);i.length>0&&i.forEach((function(e){e.addEventListener("click",(function(){var t=e.dataset.target,n=document.getElementById(t);e.classList.toggle("is-active"),n.classList.toggle("is-active")}))}));var a=r(".preloader"),l=r("main");a&&l&&(a.remove(),l.id="");var u=r(".captcha_container");if(u){var d=u.querySelector("a"),p=u.querySelector("img");d&&p&&d.addEventListener("click",(function(){var e=p.src;-1!==e.indexOf("&refresh")?e=e.split("&rand=")[0]:e+="&refresh",p.src=e+"&rand="+Math.random()}))}var f=o(".js-hidden");f&&Array.prototype.forEach.call(f,(function(e){s(e)}))},"loading"!==document.readyState?a():document.addEventListener("DOMContentLoaded",a); +function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(e,t){var a="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!a){if(Array.isArray(e)||(a=function(e,t){if(!e)return;if("string"==typeof e)return n(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);"Object"===a&&e.constructor&&(a=e.constructor.name);if("Map"===a||"Set"===a)return Array.from(e);if("Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return n(e,t)}(e))||t&&e&&"number"==typeof e.length){a&&(e=a);var i=0,r=function(){};return{s:r,n:function(){return i>=e.length?{done:!0}:{done:!1,value:e[i++]}},e:function(e){throw e},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,l=!0,s=!1;return{s:function(){a=a.call(e)},n:function(){var e=a.next();return l=e.done,e},e:function(e){s=!0,o=e},f:function(){try{l||null==a.return||a.return()}finally{if(s)throw o}}}}function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n/g,">").replace(/"/g,""").replace(/'/g,"'")},u=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.element=t,this.tags=[],this.options=n,this.maxTags=n.maxTags||32,this.inputNode=null,this.containerNode=null}var n,i,r;return n=e,(i=[{key:"attach",value:function(){var e=this;if(this.element.style.display="none",this.containerNode=l('
'),this.inputNode=l(''),this.containerNode.appendChild(this.inputNode),this.element.parentNode.insertBefore(this.containerNode,this.element.nextSibling),this.element.value){var n,a=t(this.element.value.split(","));try{for(a.s();!(n=a.n()).done;){var i=n.value;this.addTag(i)}}catch(e){a.e(e)}finally{a.f()}}this.containerNode.addEventListener("keydown",this._handleInputKeyUp.bind(this)),this.containerNode.addEventListener("click",this._handleContainerClick.bind(this)),this.inputNode.addEventListener("focusout",(function(t){e.inputNode.value&&(e.addTag(e.inputNode.value),e.inputNode.value="",e.updateHiddenInputValue())}))}},{key:"detach",value:function(){this.tags.clear(),this.containerNode.remove(),this.element.style.display="inline-block"}},{key:"updateHiddenInputValue",value:function(){this.element.value=this.tags.join(",")}},{key:"deleteTagNode",value:function(e){this.tags.splice(this.tags.indexOf(e.dataset.value.toLowerCase()),1),e.remove(),this.tags.length'+c(e)+''),this.inputNode),this.tags.length>=this.maxTags&&(this.inputNode.disabled=!0))}},{key:"_handleInputKeyUp",value:function(e){var t=this.inputNode.value;"Backspace"===e.key&&""===t?this.inputNode.previousSibling&&(this.deleteTagNode(this.inputNode.previousSibling),this.updateHiddenInputValue()):","===e.key?(this.addTag(t),this.inputNode.value="",this.updateHiddenInputValue(),e.preventDefault()):"Backspace"!==e.key&&t.length>255&&e.preventDefault()}},{key:"_handleContainerClick",value:function(e){e.target&&e.target.classList.contains("delete")&&(this.deleteTagNode(e.target.closest(".tag")),this.updateHiddenInputValue())}}])&&a(n.prototype,i),r&&a(n,r),Object.defineProperty(n,"prototype",{writable:!1}),e}();i=function(){var e;Array.prototype.forEach.call(o(".js-tag-input"),(function(e){new u(e).attach()})),(e=r('[data-target~="#signin"],[data-target~="#signup"]'))&&(e.href="javascript:void(0)",e.addEventListener("click",(function(){r(".modal").classList.add("is-active")})),r(".modal-button-close").addEventListener("click",(function(){r(".modal").classList.remove("is-active")})));var t=r(".panel-tools .embed-tool");t&&t.addEventListener("click",(function(e){e.target&&e.target.closest(".panel-tools")&&s(e.target.closest(".panel-tools").querySelector(".panel-embed"))}));var n=r(".expand-tool");n&&n.addEventListener("click",(function(e){if(e.target&&e.target.closest(".panel")){var t=e.target.closest(".panel");t.classList.contains("panel-fullsize")?t.classList.remove("panel-fullsize"):t.classList.add("panel-fullsize")}})),(document.querySelectorAll(".notification .delete")||[]).forEach((function(e){var t=e.parentNode;e.addEventListener("click",(function(){t.parentNode.removeChild(t)}))}));var a=Array.prototype.slice.call(document.querySelectorAll(".navbar-burger"),0);a.length>0&&a.forEach((function(e){e.addEventListener("click",(function(){var t=e.dataset.target,n=document.getElementById(t);e.classList.toggle("is-active"),n.classList.toggle("is-active")}))}));var i=r(".captcha_container");if(i){var l=i.querySelector("a"),c=i.querySelector("img");l&&c&&l.addEventListener("click",(function(){var e=c.src;-1!==e.indexOf("&refresh")?e=e.split("&rand=")[0]:e+="&refresh",c.src=e+"&rand="+Math.random()}))}var d=o(".js-hidden");d&&Array.prototype.forEach.call(d,(function(e){s(e)}))},"loading"!==document.readyState?i():document.addEventListener("DOMContentLoaded",i); //# sourceMappingURL=generic.min.js.map diff --git a/public/assets/bundle/generic.min.js.map b/public/assets/bundle/generic.min.js.map index 18da356..a33eb41 100644 --- a/public/assets/bundle/generic.min.js.map +++ b/public/assets/bundle/generic.min.js.map @@ -1 +1 @@ -{"version":3,"file":"generic.min.js","sources":["../../../js/dom.js","../../../js/tag_input.js","../../../js/main.js"],"sourcesContent":["const $ = function(selector) {\n return document.querySelector(selector);\n};\n\nconst $$ = function(selector) {\n return document.querySelectorAll(selector) || [];\n};\n\nconst makeEl = function(html) {\n const template = document.createElement('template');\n\n template.innerHTML = html.trim();\n\n return template.content.firstChild;\n};\n\nconst clearEl = function(el) {\n while (el.firstChild) {\n el.removeChild(el.firstChild);\n }\n};\n\nconst toggleEl = function(el) {\n if (el.classList.contains('is-hidden')) {\n el.classList.remove('is-hidden');\n } else {\n el.classList.add('is-hidden');\n }\n};\n\nconst escape = function(unsafe) {\n return unsafe\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nconst whenReady = function(funcp) {\n if (document.readyState !== 'loading') {\n funcp();\n } else {\n document.addEventListener('DOMContentLoaded', funcp);\n }\n}\n\nexport { whenReady, $, $$, makeEl, clearEl, toggleEl, escape };","import { makeEl, escape } from \"./dom\";\n\nclass TagsInput {\n constructor(element, options = {}) {\n this.element = element;\n this.tags = [];\n this.options = options\n\n this.maxTags = options.maxTags || 32;\n this.inputNode = null;\n this.containerNode = null;\n }\n\n attach() {\n this.element.style.display = 'none';\n\n this.containerNode = makeEl('
');\n this.inputNode = makeEl('');\n this.containerNode.appendChild(this.inputNode);\n\n this.element.parentNode.insertBefore(this.containerNode, this.element.nextSibling);\n\n /* Load existing tags from input */\n if (this.element.value) {\n for (const tag of this.element.value.split(',')) {\n this.addTag(tag);\n }\n }\n\n /* Handle addition and removal of tags via key-presses */\n this.containerNode.addEventListener('keydown', this._handleInputKeyUp.bind(this));\n\n /* Handle deletions by clicking the delete button */\n this.containerNode.addEventListener('click', this._handleContainerClick.bind(this));\n\n /* Handle clicks outside the input node to add the past tag */\n this.inputNode.addEventListener('focusout', (evt) => {\n if (this.inputNode.value) {\n this.addTag(this.inputNode.value);\n this.inputNode.value = \"\";\n this.updateHiddenInputValue();\n }\n });\n }\n\n detach() {\n this.tags.clear();\n this.containerNode.remove();\n this.element.style.display = 'inline-block';\n }\n\n updateHiddenInputValue() {\n this.element.value = this.tags.join(',');\n }\n\n deleteTagNode(node) {\n this.tags.splice(this.tags.indexOf(node.dataset.value.toLowerCase()), 1);\n node.remove();\n\n /* Below the limit? Make sure the input is enabled. */\n if (this.tags.length < this.maxTags) {\n this.inputNode.disabled = false;\n }\n }\n\n addTag(tagValue) {\n tagValue = tagValue.trim();\n\n /* Tag value is probably not empty and we don't already have the same tag. */\n if (tagValue !== '' && this.tags.indexOf(tagValue.toLowerCase()) === -1) {\n this.tags.push(tagValue.toLowerCase());\n\n this.inputNode.parentNode.insertBefore(\n makeEl('' + escape(tagValue) + ''),\n this.inputNode\n );\n\n /* Too many tags, disable the input for now. */\n if (this.tags.length >= this.maxTags) {\n this.inputNode.disabled = true;\n }\n }\n }\n\n _handleInputKeyUp(evt) {\n let tagValue = this.inputNode.value;\n\n if (evt.key === 'Backspace' && tagValue === '') {\n // Remove the child\n if (this.inputNode.previousSibling) {\n this.deleteTagNode(this.inputNode.previousSibling);\n\n this.updateHiddenInputValue();\n }\n } else if (evt.key === ',') {\n this.addTag(tagValue);\n\n this.inputNode.value = ''\n this.updateHiddenInputValue();\n\n evt.preventDefault();\n } else if (evt.key !== 'Backspace' && tagValue.length > 255) { // This could be improved to check if it would actually result in a new char being typed...\n evt.preventDefault();\n }\n }\n\n _handleContainerClick(evt) {\n if (evt.target && evt.target.classList.contains('delete')) {\n this.deleteTagNode(evt.target.closest('.tag'));\n this.updateHiddenInputValue();\n }\n }\n}\n\nexport { TagsInput };\n","import { $, $$, toggleEl } from './dom';\nimport { TagsInput } from \"./tag_input\";\n\nconst setupSignupModal = () => {\n const signupButton = $('[data-target~=\"#signin\"],[data-target~=\"#signup\"]');\n\n if (signupButton) {\n signupButton.href = 'javascript:void(0)';\n\n signupButton.addEventListener('click', () => {\n $('.modal').classList.add('is-active');\n });\n\n $('.modal-button-close').addEventListener('click', () => {\n $('.modal').classList.remove('is-active');\n });\n }\n}\n\nconst globalSetup = () => {\n Array.prototype.forEach.call($$('.js-tag-input'), (el) => {\n new TagsInput(el).attach();\n });\n\n setupSignupModal();\n\n const embedButton = $('.panel-tools .embed-tool');\n\n if (embedButton){\n embedButton.addEventListener('click', (evt) => {\n if (evt.target && evt.target.closest('.panel-tools')) {\n toggleEl(evt.target.closest('.panel-tools').querySelector('.panel-embed'));\n }\n });\n }\n\n const expandButton = $('.expand-tool');\n\n if (expandButton) {\n expandButton.addEventListener('click', (evt) => {\n if (evt.target && evt.target.closest('.panel')) {\n const panel = evt.target.closest('.panel');\n\n if (panel.classList.contains('panel-fullsize')) {\n panel.classList.remove('panel-fullsize');\n } else {\n panel.classList.add('panel-fullsize');\n }\n }\n });\n }\n\n // Notifications\n (document.querySelectorAll('.notification .delete') || []).forEach(($delete) => {\n const $notification = $delete.parentNode;\n\n $delete.addEventListener('click', () => {\n $notification.parentNode.removeChild($notification);\n });\n });\n\n // Hamburger menu\n const $navbarBurgers = Array.prototype.slice.call(document.querySelectorAll('.navbar-burger'), 0);\n if ($navbarBurgers.length > 0) {\n $navbarBurgers.forEach(el => {\n el.addEventListener('click', () => {\n const target = el.dataset.target;\n const $target = document.getElementById(target);\n el.classList.toggle('is-active');\n $target.classList.toggle('is-active');\n });\n });\n }\n\n const preloader = $('.preloader');\n const main = $('main');\n\n if (preloader && main) {\n preloader.remove();\n main.id = '';\n }\n\n // CAPTCHA refresh\n const captchaContainer = $('.captcha_container');\n\n if (captchaContainer) {\n const refreshElement = captchaContainer.querySelector('a');\n const imageElement = captchaContainer.querySelector('img');\n\n if (refreshElement && imageElement) {\n refreshElement.addEventListener('click', () => {\n let src = imageElement.src;\n\n if (src.indexOf('&refresh') !== -1) {\n // yeah, it's kinda cancerous. fuck off.\n src = src.split('&rand=')[0];\n } else {\n src += '&refresh';\n }\n\n imageElement.src = src + '&rand=' + Math.random();\n });\n }\n }\n\n const hiddenElements = $$('.js-hidden');\n\n if (hiddenElements) {\n Array.prototype.forEach.call(hiddenElements, (elem) => {\n toggleEl(elem);\n });\n }\n}\n\nexport { globalSetup };"],"names":["funcp","$","selector","document","querySelector","$$","querySelectorAll","makeEl","html","template","createElement","innerHTML","trim","content","firstChild","toggleEl","el","classList","contains","remove","add","escape","unsafe","replace","TagsInput","element","options","arguments","length","undefined","_classCallCheck","this","tags","maxTags","inputNode","containerNode","key","value","_this","style","display","appendChild","parentNode","insertBefore","nextSibling","_step","_iterator","_createForOfIteratorHelper","split","s","n","done","tag","addTag","err","e","f","addEventListener","_handleInputKeyUp","bind","_handleContainerClick","evt","updateHiddenInputValue","clear","join","node","splice","indexOf","dataset","toLowerCase","disabled","tagValue","push","previousSibling","deleteTagNode","preventDefault","target","closest","signupButton","Array","prototype","forEach","call","attach","href","embedButton","expandButton","panel","$delete","$notification","removeChild","$navbarBurgers","slice","$target","getElementById","toggle","preloader","main","id","captchaContainer","refreshElement","imageElement","src","Math","random","hiddenElements","elem","readyState"],"mappings":"iuDAAA,IAuC2BA,EAvCrBC,EAAI,SAASC,GACf,OAAOC,SAASC,cAAcF,EAClC,EAEMG,EAAK,SAASH,GAChB,OAAOC,SAASG,iBAAiBJ,IAAa,EAClD,EAEMK,EAAS,SAASC,GACpB,IAAMC,EAAWN,SAASO,cAAc,YAIxC,OAFAD,EAASE,UAAYH,EAAKI,OAEnBH,EAASI,QAAQC,UAC5B,EAQMC,EAAW,SAASC,GAClBA,EAAGC,UAAUC,SAAS,aACtBF,EAAGC,UAAUE,OAAO,aAEpBH,EAAGC,UAAUG,IAAI,YAEzB,EAEMC,EAAS,SAASC,GACpB,OAAOA,EACFC,QAAQ,KAAM,SACdA,QAAQ,KAAM,QACdA,QAAQ,KAAM,QACdA,QAAQ,KAAM,UACdA,QAAQ,KAAM,SACvB,ECnCMC,EAAS,WACX,SAAAA,EAAYC,GAAuB,IAAdC,EAAOC,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,GAAG,gGAAEG,MAAAN,GAC7BO,KAAKN,QAAUA,EACfM,KAAKC,KAAO,GACZD,KAAKL,QAAUA,EAEfK,KAAKE,QAAUP,EAAQO,SAAW,GAClCF,KAAKG,UAAY,KACjBH,KAAKI,cAAgB,IACxB,WAoGA,SApGAX,KAAA,CAAA,CAAAY,IAAA,SAAAC,MAED,WAAS,IAAAC,EAAAP,KAUL,GATAA,KAAKN,QAAQc,MAAMC,QAAU,OAE7BT,KAAKI,cAAgB5B,EAAO,kCAC5BwB,KAAKG,UAAY3B,EAAO,8EACxBwB,KAAKI,cAAcM,YAAYV,KAAKG,WAEpCH,KAAKN,QAAQiB,WAAWC,aAAaZ,KAAKI,cAAeJ,KAAKN,QAAQmB,aAGlEb,KAAKN,QAAQY,MAAO,CAAA,IAC2BQ,EAD3BC,EAAAC,EACFhB,KAAKN,QAAQY,MAAMW,MAAM,MAAI,IAA/C,IAAAF,EAAAG,MAAAJ,EAAAC,EAAAI,KAAAC,MAAiD,CAAA,IAAtCC,EAAGP,EAAAR,MACVN,KAAKsB,OAAOD,EACf,CAAA,CAAA,MAAAE,GAAAR,EAAAS,EAAAD,EAAA,CAAA,QAAAR,EAAAU,GAAA,CACJ,CAGDzB,KAAKI,cAAcsB,iBAAiB,UAAW1B,KAAK2B,kBAAkBC,KAAK5B,OAG3EA,KAAKI,cAAcsB,iBAAiB,QAAS1B,KAAK6B,sBAAsBD,KAAK5B,OAG7EA,KAAKG,UAAUuB,iBAAiB,YAAY,SAACI,GACrCvB,EAAKJ,UAAUG,QACfC,EAAKe,OAAOf,EAAKJ,UAAUG,OAC3BC,EAAKJ,UAAUG,MAAQ,GACvBC,EAAKwB,yBAErB,GACK,GAAA,CAAA1B,IAAA,SAAAC,MAED,WACIN,KAAKC,KAAK+B,QACVhC,KAAKI,cAAchB,SACnBY,KAAKN,QAAQc,MAAMC,QAAU,cAChC,GAAA,CAAAJ,IAAA,yBAAAC,MAED,WACIN,KAAKN,QAAQY,MAAQN,KAAKC,KAAKgC,KAAK,IACvC,GAAA,CAAA5B,IAAA,gBAAAC,MAED,SAAc4B,GACVlC,KAAKC,KAAKkC,OAAOnC,KAAKC,KAAKmC,QAAQF,EAAKG,QAAQ/B,MAAMgC,eAAgB,GACtEJ,EAAK9C,SAGDY,KAAKC,KAAKJ,OAASG,KAAKE,UACxBF,KAAKG,UAAUoC,UAAW,EAEjC,GAAA,CAAAlC,IAAA,SAAAC,MAED,SAAOkC,GAIc,MAHjBA,EAAWA,EAAS3D,UAGkD,IAA/CmB,KAAKC,KAAKmC,QAAQI,EAASF,iBAC9CtC,KAAKC,KAAKwC,KAAKD,EAASF,eAExBtC,KAAKG,UAAUQ,WAAWC,aACtBpC,EAAO,yCAA2Cc,EAAOkD,GAAY,KAAOlD,EAAOkD,GAAY,2CAC/FxC,KAAKG,WAILH,KAAKC,KAAKJ,QAAUG,KAAKE,UACzBF,KAAKG,UAAUoC,UAAW,GAGrC,GAAA,CAAAlC,IAAA,oBAAAC,MAED,SAAkBwB,GACd,IAAIU,EAAWxC,KAAKG,UAAUG,MAEd,cAAZwB,EAAIzB,KAAoC,KAAbmC,EAEvBxC,KAAKG,UAAUuC,kBACf1C,KAAK2C,cAAc3C,KAAKG,UAAUuC,iBAElC1C,KAAK+B,0BAEU,MAAZD,EAAIzB,KACXL,KAAKsB,OAAOkB,GAEZxC,KAAKG,UAAUG,MAAQ,GACvBN,KAAK+B,yBAELD,EAAIc,kBACe,cAAZd,EAAIzB,KAAuBmC,EAAS3C,OAAS,KACpDiC,EAAIc,gBAEX,GAAA,CAAAvC,IAAA,wBAAAC,MAED,SAAsBwB,GACdA,EAAIe,QAAUf,EAAIe,OAAO3D,UAAUC,SAAS,YAC5Ca,KAAK2C,cAAcb,EAAIe,OAAOC,QAAQ,SACtC9C,KAAK+B,yBAEZ,oFAAAtC,CAAA,CA7GU,GDqCYxB,EEpBP,WAhBK,IACf8E,EAgBNC,MAAMC,UAAUC,QAAQC,KAAK7E,EAAG,kBAAkB,SAACW,GAC/C,IAAIQ,EAAUR,GAAImE,QAC1B,KAlBUL,EAAe7E,EAAE,wDAGnB6E,EAAaM,KAAO,qBAEpBN,EAAarB,iBAAiB,SAAS,WACnCxD,EAAE,UAAUgB,UAAUG,IAAI,YACtC,IAEQnB,EAAE,uBAAuBwD,iBAAiB,SAAS,WAC/CxD,EAAE,UAAUgB,UAAUE,OAAO,YACzC,KAWI,IAAMkE,EAAcpF,EAAE,4BAElBoF,GACAA,EAAY5B,iBAAiB,SAAS,SAACI,GAC/BA,EAAIe,QAAUf,EAAIe,OAAOC,QAAQ,iBACjC9D,EAAS8C,EAAIe,OAAOC,QAAQ,gBAAgBzE,cAAc,gBAE1E,IAGI,IAAMkF,EAAerF,EAAE,gBAEnBqF,GACAA,EAAa7B,iBAAiB,SAAS,SAACI,GACpC,GAAIA,EAAIe,QAAUf,EAAIe,OAAOC,QAAQ,UAAW,CAC5C,IAAMU,EAAQ1B,EAAIe,OAAOC,QAAQ,UAE7BU,EAAMtE,UAAUC,SAAS,kBACzBqE,EAAMtE,UAAUE,OAAO,kBAEvBoE,EAAMtE,UAAUG,IAAI,iBAE3B,CACb,KAIKjB,SAASG,iBAAiB,0BAA4B,IAAI2E,SAAQ,SAACO,GAChE,IAAMC,EAAgBD,EAAQ9C,WAE9B8C,EAAQ/B,iBAAiB,SAAS,WAC9BgC,EAAc/C,WAAWgD,YAAYD,EACjD,GACA,IAGI,IAAME,EAAiBZ,MAAMC,UAAUY,MAAMV,KAAK/E,SAASG,iBAAiB,kBAAmB,GAC3FqF,EAAe/D,OAAS,GACxB+D,EAAeV,SAAQ,SAAAjE,GACnBA,EAAGyC,iBAAiB,SAAS,WACzB,IAAMmB,EAAS5D,EAAGoD,QAAQQ,OACpBiB,EAAU1F,SAAS2F,eAAelB,GACxC5D,EAAGC,UAAU8E,OAAO,aACpBF,EAAQ5E,UAAU8E,OAAO,YACzC,GACA,IAGI,IAAMC,EAAY/F,EAAE,cACdgG,EAAOhG,EAAE,QAEX+F,GAAaC,IACbD,EAAU7E,SACV8E,EAAKC,GAAK,IAId,IAAMC,EAAmBlG,EAAE,sBAE3B,GAAIkG,EAAkB,CAClB,IAAMC,EAAiBD,EAAiB/F,cAAc,KAChDiG,EAAeF,EAAiB/F,cAAc,OAEhDgG,GAAkBC,GAClBD,EAAe3C,iBAAiB,SAAS,WACrC,IAAI6C,EAAMD,EAAaC,KAEU,IAA7BA,EAAInC,QAAQ,YAEZmC,EAAMA,EAAItD,MAAM,UAAU,GAE1BsD,GAAO,WAGXD,EAAaC,IAAMA,EAAM,SAAWC,KAAKC,QACzD,GAEK,CAED,IAAMC,EAAiBpG,EAAG,cAEtBoG,GACA1B,MAAMC,UAAUC,QAAQC,KAAKuB,GAAgB,SAACC,GAC1C3F,EAAS2F,EACrB,GAEA,EFxEgC,YAAxBvG,SAASwG,WACT3G,IAEAG,SAASsD,iBAAiB,mBAAoBzD"} \ No newline at end of file +{"version":3,"file":"generic.min.js","sources":["../../../js/dom.js","../../../js/tag_input.js","../../../js/main.js"],"sourcesContent":["const $ = function(selector) {\n return document.querySelector(selector);\n};\n\nconst $$ = function(selector) {\n return document.querySelectorAll(selector) || [];\n};\n\nconst makeEl = function(html) {\n const template = document.createElement('template');\n\n template.innerHTML = html.trim();\n\n return template.content.firstChild;\n};\n\nconst clearEl = function(el) {\n while (el.firstChild) {\n el.removeChild(el.firstChild);\n }\n};\n\nconst toggleEl = function(el) {\n if (el.classList.contains('is-hidden')) {\n el.classList.remove('is-hidden');\n } else {\n el.classList.add('is-hidden');\n }\n};\n\nconst escape = function(unsafe) {\n return unsafe\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nconst whenReady = function(funcp) {\n if (document.readyState !== 'loading') {\n funcp();\n } else {\n document.addEventListener('DOMContentLoaded', funcp);\n }\n}\n\nexport { whenReady, $, $$, makeEl, clearEl, toggleEl, escape };","import { makeEl, escape } from \"./dom\";\n\nclass TagsInput {\n constructor(element, options = {}) {\n this.element = element;\n this.tags = [];\n this.options = options\n\n this.maxTags = options.maxTags || 32;\n this.inputNode = null;\n this.containerNode = null;\n }\n\n attach() {\n this.element.style.display = 'none';\n\n this.containerNode = makeEl('
');\n this.inputNode = makeEl('');\n this.containerNode.appendChild(this.inputNode);\n\n this.element.parentNode.insertBefore(this.containerNode, this.element.nextSibling);\n\n /* Load existing tags from input */\n if (this.element.value) {\n for (const tag of this.element.value.split(',')) {\n this.addTag(tag);\n }\n }\n\n /* Handle addition and removal of tags via key-presses */\n this.containerNode.addEventListener('keydown', this._handleInputKeyUp.bind(this));\n\n /* Handle deletions by clicking the delete button */\n this.containerNode.addEventListener('click', this._handleContainerClick.bind(this));\n\n /* Handle clicks outside the input node to add the past tag */\n this.inputNode.addEventListener('focusout', (evt) => {\n if (this.inputNode.value) {\n this.addTag(this.inputNode.value);\n this.inputNode.value = \"\";\n this.updateHiddenInputValue();\n }\n });\n }\n\n detach() {\n this.tags.clear();\n this.containerNode.remove();\n this.element.style.display = 'inline-block';\n }\n\n updateHiddenInputValue() {\n this.element.value = this.tags.join(',');\n }\n\n deleteTagNode(node) {\n this.tags.splice(this.tags.indexOf(node.dataset.value.toLowerCase()), 1);\n node.remove();\n\n /* Below the limit? Make sure the input is enabled. */\n if (this.tags.length < this.maxTags) {\n this.inputNode.disabled = false;\n }\n }\n\n addTag(tagValue) {\n tagValue = tagValue.trim();\n\n /* Tag value is probably not empty and we don't already have the same tag. */\n if (tagValue !== '' && this.tags.indexOf(tagValue.toLowerCase()) === -1) {\n this.tags.push(tagValue.toLowerCase());\n\n this.inputNode.parentNode.insertBefore(\n makeEl('' + escape(tagValue) + ''),\n this.inputNode\n );\n\n /* Too many tags, disable the input for now. */\n if (this.tags.length >= this.maxTags) {\n this.inputNode.disabled = true;\n }\n }\n }\n\n _handleInputKeyUp(evt) {\n let tagValue = this.inputNode.value;\n\n if (evt.key === 'Backspace' && tagValue === '') {\n // Remove the child\n if (this.inputNode.previousSibling) {\n this.deleteTagNode(this.inputNode.previousSibling);\n\n this.updateHiddenInputValue();\n }\n } else if (evt.key === ',') {\n this.addTag(tagValue);\n\n this.inputNode.value = ''\n this.updateHiddenInputValue();\n\n evt.preventDefault();\n } else if (evt.key !== 'Backspace' && tagValue.length > 255) { // This could be improved to check if it would actually result in a new char being typed...\n evt.preventDefault();\n }\n }\n\n _handleContainerClick(evt) {\n if (evt.target && evt.target.classList.contains('delete')) {\n this.deleteTagNode(evt.target.closest('.tag'));\n this.updateHiddenInputValue();\n }\n }\n}\n\nexport { TagsInput };\n","import { $, $$, toggleEl } from './dom';\nimport { TagsInput } from \"./tag_input\";\n\nconst setupSignupModal = () => {\n const signupButton = $('[data-target~=\"#signin\"],[data-target~=\"#signup\"]');\n\n if (signupButton) {\n signupButton.href = 'javascript:void(0)';\n\n signupButton.addEventListener('click', () => {\n $('.modal').classList.add('is-active');\n });\n\n $('.modal-button-close').addEventListener('click', () => {\n $('.modal').classList.remove('is-active');\n });\n }\n}\n\nconst globalSetup = () => {\n Array.prototype.forEach.call($$('.js-tag-input'), (el) => {\n new TagsInput(el).attach();\n });\n\n setupSignupModal();\n\n const embedButton = $('.panel-tools .embed-tool');\n\n if (embedButton){\n embedButton.addEventListener('click', (evt) => {\n if (evt.target && evt.target.closest('.panel-tools')) {\n toggleEl(evt.target.closest('.panel-tools').querySelector('.panel-embed'));\n }\n });\n }\n\n const expandButton = $('.expand-tool');\n\n if (expandButton) {\n expandButton.addEventListener('click', (evt) => {\n if (evt.target && evt.target.closest('.panel')) {\n const panel = evt.target.closest('.panel');\n\n if (panel.classList.contains('panel-fullsize')) {\n panel.classList.remove('panel-fullsize');\n } else {\n panel.classList.add('panel-fullsize');\n }\n }\n });\n }\n\n // Notifications\n (document.querySelectorAll('.notification .delete') || []).forEach(($delete) => {\n const $notification = $delete.parentNode;\n\n $delete.addEventListener('click', () => {\n $notification.parentNode.removeChild($notification);\n });\n });\n\n // Hamburger menu\n const $navbarBurgers = Array.prototype.slice.call(document.querySelectorAll('.navbar-burger'), 0);\n if ($navbarBurgers.length > 0) {\n $navbarBurgers.forEach(el => {\n el.addEventListener('click', () => {\n const target = el.dataset.target;\n const $target = document.getElementById(target);\n el.classList.toggle('is-active');\n $target.classList.toggle('is-active');\n });\n });\n }\n\n // CAPTCHA refresh\n const captchaContainer = $('.captcha_container');\n\n if (captchaContainer) {\n const refreshElement = captchaContainer.querySelector('a');\n const imageElement = captchaContainer.querySelector('img');\n\n if (refreshElement && imageElement) {\n refreshElement.addEventListener('click', () => {\n let src = imageElement.src;\n\n if (src.indexOf('&refresh') !== -1) {\n // yeah, it's kinda cancerous. fuck off.\n src = src.split('&rand=')[0];\n } else {\n src += '&refresh';\n }\n\n imageElement.src = src + '&rand=' + Math.random();\n });\n }\n }\n\n const hiddenElements = $$('.js-hidden');\n\n if (hiddenElements) {\n Array.prototype.forEach.call(hiddenElements, (elem) => {\n toggleEl(elem);\n });\n }\n}\n\nexport { globalSetup };"],"names":["funcp","$","selector","document","querySelector","$$","querySelectorAll","makeEl","html","template","createElement","innerHTML","trim","content","firstChild","toggleEl","el","classList","contains","remove","add","escape","unsafe","replace","TagsInput","element","options","arguments","length","undefined","_classCallCheck","this","tags","maxTags","inputNode","containerNode","key","value","_this","style","display","appendChild","parentNode","insertBefore","nextSibling","_step","_iterator","_createForOfIteratorHelper","split","s","n","done","tag","addTag","err","e","f","addEventListener","_handleInputKeyUp","bind","_handleContainerClick","evt","updateHiddenInputValue","clear","join","node","splice","indexOf","dataset","toLowerCase","disabled","tagValue","push","previousSibling","deleteTagNode","preventDefault","target","closest","signupButton","Array","prototype","forEach","call","attach","href","embedButton","expandButton","panel","$delete","$notification","removeChild","$navbarBurgers","slice","$target","getElementById","toggle","captchaContainer","refreshElement","imageElement","src","Math","random","hiddenElements","elem","readyState"],"mappings":"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"} \ No newline at end of file diff --git a/public/assets/bundle/user_profile.js b/public/assets/bundle/user_profile.js index 41ce549..eae930c 100644 --- a/public/assets/bundle/user_profile.js +++ b/public/assets/bundle/user_profile.js @@ -333,7 +333,7 @@ class TagsInput { this.element.style.display = 'none'; this.containerNode = makeEl('
'); - this.inputNode = makeEl(''); + this.inputNode = makeEl(''); this.containerNode.appendChild(this.inputNode); this.element.parentNode.insertBefore(this.containerNode, this.element.nextSibling); @@ -501,14 +501,6 @@ const globalSetup = () => { }); } - const preloader = $('.preloader'); - const main = $('main'); - - if (preloader && main) { - preloader.remove(); - main.id = ''; - } - // CAPTCHA refresh const captchaContainer = $('.captcha_container'); diff --git a/public/assets/bundle/user_profile.min.js b/public/assets/bundle/user_profile.min.js index 9b75e40..9c553b8 100644 --- a/public/assets/bundle/user_profile.min.js +++ b/public/assets/bundle/user_profile.min.js @@ -1,2 +1,2 @@ -function t(t){return function(t){if(Array.isArray(t))return n(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||a(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function e(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=a(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var i=0,r=function(){};return{s:r,n:function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,l=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return s=t.done,t},e:function(t){l=!0,o=t},f:function(){try{s||null==n.return||n.return()}finally{if(l)throw o}}}}function a(t,e){if(t){if("string"==typeof t)return n(t,e);var a=Object.prototype.toString.call(t).slice(8,-1);return"Object"===a&&t.constructor&&(a=t.constructor.name),"Map"===a||"Set"===a?Array.from(t):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?n(t,e):void 0}}function n(t,e){(null==e||e>t.length)&&(e=t.length);for(var a=0,n=new Array(e);a/g,">").replace(/"/g,""").replace(/'/g,"'")},v=function(){function t(e){r(this,t),this.element=e}return s(t,[{key:"attach",value:function(t){this.element.addEventListener("click",(function(e){e.target&&e.target.classList.contains("paginator__button")&&t(+e.target.dataset.page)}))}},{key:"update",value:function(t,e,a){h(this.element);var n=Math.floor(t/e);if(0!==n){var i=a-2<0?0:a-2,r=a+2>n?n:a+2,o=Math.abs(0-a)>2,s=Math.abs(n-a)>2,l=0===a?"disabled":"";this.element.appendChild(u(''))),o&&(this.element.appendChild(u('"))),this.element.appendChild(u('')));for(var c=i;c<=r;c++){var d=c===a?"paginator__button--selected":"";this.element.appendChild(u('")))}s&&(this.element.appendChild(u('')),this.element.appendChild(u('"))));var p=a===n?"disabled":"";this.element.appendChild(u('')))}}}]),t}(),g=function(){function a(t,e){r(this,a),this.element=t,this.container=t.parentElement,this.options=e,this.ajaxCallback=e.ajaxCallback,this.data=[],this.unfilteredData=[],this.totalRecords=-1,this.perPage=20,this.currentPage=0,this.paginator=new v(this.container.querySelector(".paginator")),this.filterCallback=e.filterCallback,this.sortField=null,this.sortDir=!0}return s(a,[{key:"attach",value:function(){var t=this;this.filterField=this.container.querySelector("input.search"),this.filterField&&this.filterCallback&&(this.filterField.addEventListener("keyup",(function(e){e.target&&t._updateFilter(e.target.value)})),this.options.preFilter&&(this.filterField.value=this.options.preFilter)),this.perPageField=this.container.querySelector("select[name=per_page]"),this.perPageField&&this.perPageField.addEventListener("change",(function(e){t.perPage=Number(e.target.value),t._updatePage(0)}));var e=this.element.querySelector("tr.paginator__sort");e&&e.addEventListener("click",(function(e){var a=e.target;if(a.dataset.sortField){if(t.sortField){var n=t.element.querySelector("th[data-sort-field=".concat(t.sortField,"]"));n.classList.remove("paginator__sort--down"),n.classList.remove("paginator__sort--up")}t._updateSort(a.dataset.sortField,!t.sortDir),a.classList.add(t.sortDir?"paginator__sort--up":"paginator__sort--down")}})),this.paginator.attach(this._updatePage.bind(this)),this._loadEntries()}},{key:"_loadEntries",value:function(){var t=this;new Promise(this.ajaxCallback).then((function(e){t.element.classList.remove("hidden"),t.unfilteredData=e.data,t._updateFilter(t.options.preFilter)}))}},{key:"_updateEntries",value:function(t){this.data=t,this.totalRecords=this.data.length;var e=this.element.querySelector("tbody");h(e);for(var a=this.perPage*this.currentPage,n=a+this.perPage>this.totalRecords?this.totalRecords:a+this.perPage,i=a;in[e]?i=1:t[e]\n ').concat(f(t.name),"\n ")})).join("")},b=function(){function t(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};r(this,t),this.element=e,this.tags=[],this.options=a,this.maxTags=a.maxTags||32,this.inputNode=null,this.containerNode=null}return s(t,[{key:"attach",value:function(){var t=this;if(this.element.style.display="none",this.containerNode=u('
'),this.inputNode=u(''),this.containerNode.appendChild(this.inputNode),this.element.parentNode.insertBefore(this.containerNode,this.element.nextSibling),this.element.value){var a,n=e(this.element.value.split(","));try{for(n.s();!(a=n.n()).done;){var i=a.value;this.addTag(i)}}catch(t){n.e(t)}finally{n.f()}}this.containerNode.addEventListener("keydown",this._handleInputKeyUp.bind(this)),this.containerNode.addEventListener("click",this._handleContainerClick.bind(this)),this.inputNode.addEventListener("focusout",(function(e){t.inputNode.value&&(t.addTag(t.inputNode.value),t.inputNode.value="",t.updateHiddenInputValue())}))}},{key:"detach",value:function(){this.tags.clear(),this.containerNode.remove(),this.element.style.display="inline-block"}},{key:"updateHiddenInputValue",value:function(){this.element.value=this.tags.join(",")}},{key:"deleteTagNode",value:function(t){this.tags.splice(this.tags.indexOf(t.dataset.value.toLowerCase()),1),t.remove(),this.tags.length'+f(t)+''),this.inputNode),this.tags.length>=this.maxTags&&(this.inputNode.disabled=!0))}},{key:"_handleInputKeyUp",value:function(t){var e=this.inputNode.value;"Backspace"===t.key&&""===e?this.inputNode.previousSibling&&(this.deleteTagNode(this.inputNode.previousSibling),this.updateHiddenInputValue()):","===t.key?(this.addTag(e),this.inputNode.value="",this.updateHiddenInputValue(),t.preventDefault()):"Backspace"!==t.key&&e.length>255&&t.preventDefault()}},{key:"_handleContainerClick",value:function(t){t.target&&t.target.classList.contains("delete")&&(this.deleteTagNode(t.target.closest(".tag")),this.updateHiddenInputValue())}}]),t}(),k=function(){var t;Array.prototype.forEach.call(d(".js-tag-input"),(function(t){new b(t).attach()})),(t=c('[data-target~="#signin"],[data-target~="#signup"]'))&&(t.href="javascript:void(0)",t.addEventListener("click",(function(){c(".modal").classList.add("is-active")})),c(".modal-button-close").addEventListener("click",(function(){c(".modal").classList.remove("is-active")})));var e=c(".panel-tools .embed-tool");e&&e.addEventListener("click",(function(t){t.target&&t.target.closest(".panel-tools")&&p(t.target.closest(".panel-tools").querySelector(".panel-embed"))}));var a=c(".expand-tool");a&&a.addEventListener("click",(function(t){if(t.target&&t.target.closest(".panel")){var e=t.target.closest(".panel");e.classList.contains("panel-fullsize")?e.classList.remove("panel-fullsize"):e.classList.add("panel-fullsize")}})),(document.querySelectorAll(".notification .delete")||[]).forEach((function(t){var e=t.parentNode;t.addEventListener("click",(function(){e.parentNode.removeChild(e)}))}));var n=Array.prototype.slice.call(document.querySelectorAll(".navbar-burger"),0);n.length>0&&n.forEach((function(t){t.addEventListener("click",(function(){var e=t.dataset.target,a=document.getElementById(e);t.classList.toggle("is-active"),a.classList.toggle("is-active")}))}));var i=c(".preloader"),r=c("main");i&&r&&(i.remove(),r.id="");var o=c(".captcha_container");if(o){var s=o.querySelector("a"),l=o.querySelector("img");s&&l&&s.addEventListener("click",(function(){var t=l.src;-1!==t.indexOf("&refresh")?t=t.split("&rand=")[0]:t+="&refresh",l.src=t+"&rand="+Math.random()}))}var u=d(".js-hidden");u&&Array.prototype.forEach.call(u,(function(t){p(t)}))},_=function(t){return t.dataset.pasteInfo?JSON.parse(t.dataset.pasteInfo):null};l=function(){k();var t=new URLSearchParams(window.location.search).get("q"),e=document.getElementById("archive"),a="/api/user_pastes.php?user_id="+e.dataset.userId;console.log("myPastesElem",e),new g(e,{ajaxCallback:function(t){fetch(a).then((function(t){return t.json()})).then(t)},rowCallback:function(t){console.log("rowData",t);var e,a=(e=document.getElementById("js-data-holder"))?{userId:e.dataset.userId,csrfToken:e.dataset.csrfToken}:{userId:null,csrfToken:null},n=parseInt(t.author_id)===parseInt(a.userId);console.log(n);var i=n?'\n
\n \n \n \n
\n '):"",r=new Date(t.created_at).toLocaleString(),o=n?''.concat(["Public","Unlisted","Private"][t.visibility],""):"";return'\n ').concat(f(t.title),'\n ').concat(r,"\n ").concat(o,'\n ').concat(t.views||0,"\n ").concat(y(t.tags),"\n ").concat(i,"\n ")},filterCallback:m,preFilter:t}).attach();var n=document.getElementById("favs");n&&new g(n,{ajaxCallback:function(t){console.log("invoker invoked"),t({data:Array.prototype.map.call(n.querySelectorAll("tbody > tr"),_)})},rowCallback:function(t){var e=t.recently_updated?"":"",a=new Date(t.favourited_at).toLocaleString();return'\n ').concat(f(t.title),'\n ').concat(a,'\n ').concat(e,"\n ").concat(y(t.tags),"\n ")},filterCallback:m}).attach()},"loading"!==document.readyState?l():document.addEventListener("DOMContentLoaded",l); +function t(t){return function(t){if(Array.isArray(t))return n(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||a(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function e(t,e){var n="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!n){if(Array.isArray(t)||(n=a(t))||e&&t&&"number"==typeof t.length){n&&(t=n);var i=0,r=function(){};return{s:r,n:function(){return i>=t.length?{done:!0}:{done:!1,value:t[i++]}},e:function(t){throw t},f:r}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,s=!0,l=!1;return{s:function(){n=n.call(t)},n:function(){var t=n.next();return s=t.done,t},e:function(t){l=!0,o=t},f:function(){try{s||null==n.return||n.return()}finally{if(l)throw o}}}}function a(t,e){if(t){if("string"==typeof t)return n(t,e);var a=Object.prototype.toString.call(t).slice(8,-1);return"Object"===a&&t.constructor&&(a=t.constructor.name),"Map"===a||"Set"===a?Array.from(t):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?n(t,e):void 0}}function n(t,e){(null==e||e>t.length)&&(e=t.length);for(var a=0,n=new Array(e);a/g,">").replace(/"/g,""").replace(/'/g,"'")},v=function(){function t(e){r(this,t),this.element=e}return s(t,[{key:"attach",value:function(t){this.element.addEventListener("click",(function(e){e.target&&e.target.classList.contains("paginator__button")&&t(+e.target.dataset.page)}))}},{key:"update",value:function(t,e,a){h(this.element);var n=Math.floor(t/e);if(0!==n){var i=a-2<0?0:a-2,r=a+2>n?n:a+2,o=Math.abs(0-a)>2,s=Math.abs(n-a)>2,l=0===a?"disabled":"";this.element.appendChild(u(''))),o&&(this.element.appendChild(u('"))),this.element.appendChild(u('')));for(var c=i;c<=r;c++){var d=c===a?"paginator__button--selected":"";this.element.appendChild(u('")))}s&&(this.element.appendChild(u('')),this.element.appendChild(u('"))));var p=a===n?"disabled":"";this.element.appendChild(u('')))}}}]),t}(),g=function(){function a(t,e){r(this,a),this.element=t,this.container=t.parentElement,this.options=e,this.ajaxCallback=e.ajaxCallback,this.data=[],this.unfilteredData=[],this.totalRecords=-1,this.perPage=20,this.currentPage=0,this.paginator=new v(this.container.querySelector(".paginator")),this.filterCallback=e.filterCallback,this.sortField=null,this.sortDir=!0}return s(a,[{key:"attach",value:function(){var t=this;this.filterField=this.container.querySelector("input.search"),this.filterField&&this.filterCallback&&(this.filterField.addEventListener("keyup",(function(e){e.target&&t._updateFilter(e.target.value)})),this.options.preFilter&&(this.filterField.value=this.options.preFilter)),this.perPageField=this.container.querySelector("select[name=per_page]"),this.perPageField&&this.perPageField.addEventListener("change",(function(e){t.perPage=Number(e.target.value),t._updatePage(0)}));var e=this.element.querySelector("tr.paginator__sort");e&&e.addEventListener("click",(function(e){var a=e.target;if(a.dataset.sortField){if(t.sortField){var n=t.element.querySelector("th[data-sort-field=".concat(t.sortField,"]"));n.classList.remove("paginator__sort--down"),n.classList.remove("paginator__sort--up")}t._updateSort(a.dataset.sortField,!t.sortDir),a.classList.add(t.sortDir?"paginator__sort--up":"paginator__sort--down")}})),this.paginator.attach(this._updatePage.bind(this)),this._loadEntries()}},{key:"_loadEntries",value:function(){var t=this;new Promise(this.ajaxCallback).then((function(e){t.element.classList.remove("hidden"),t.unfilteredData=e.data,t._updateFilter(t.options.preFilter)}))}},{key:"_updateEntries",value:function(t){this.data=t,this.totalRecords=this.data.length;var e=this.element.querySelector("tbody");h(e);for(var a=this.perPage*this.currentPage,n=a+this.perPage>this.totalRecords?this.totalRecords:a+this.perPage,i=a;in[e]?i=1:t[e]\n ').concat(f(t.name),"\n ")})).join("")},b=function(){function t(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};r(this,t),this.element=e,this.tags=[],this.options=a,this.maxTags=a.maxTags||32,this.inputNode=null,this.containerNode=null}return s(t,[{key:"attach",value:function(){var t=this;if(this.element.style.display="none",this.containerNode=u('
'),this.inputNode=u(''),this.containerNode.appendChild(this.inputNode),this.element.parentNode.insertBefore(this.containerNode,this.element.nextSibling),this.element.value){var a,n=e(this.element.value.split(","));try{for(n.s();!(a=n.n()).done;){var i=a.value;this.addTag(i)}}catch(t){n.e(t)}finally{n.f()}}this.containerNode.addEventListener("keydown",this._handleInputKeyUp.bind(this)),this.containerNode.addEventListener("click",this._handleContainerClick.bind(this)),this.inputNode.addEventListener("focusout",(function(e){t.inputNode.value&&(t.addTag(t.inputNode.value),t.inputNode.value="",t.updateHiddenInputValue())}))}},{key:"detach",value:function(){this.tags.clear(),this.containerNode.remove(),this.element.style.display="inline-block"}},{key:"updateHiddenInputValue",value:function(){this.element.value=this.tags.join(",")}},{key:"deleteTagNode",value:function(t){this.tags.splice(this.tags.indexOf(t.dataset.value.toLowerCase()),1),t.remove(),this.tags.length'+f(t)+''),this.inputNode),this.tags.length>=this.maxTags&&(this.inputNode.disabled=!0))}},{key:"_handleInputKeyUp",value:function(t){var e=this.inputNode.value;"Backspace"===t.key&&""===e?this.inputNode.previousSibling&&(this.deleteTagNode(this.inputNode.previousSibling),this.updateHiddenInputValue()):","===t.key?(this.addTag(e),this.inputNode.value="",this.updateHiddenInputValue(),t.preventDefault()):"Backspace"!==t.key&&e.length>255&&t.preventDefault()}},{key:"_handleContainerClick",value:function(t){t.target&&t.target.classList.contains("delete")&&(this.deleteTagNode(t.target.closest(".tag")),this.updateHiddenInputValue())}}]),t}(),k=function(){var t;Array.prototype.forEach.call(d(".js-tag-input"),(function(t){new b(t).attach()})),(t=c('[data-target~="#signin"],[data-target~="#signup"]'))&&(t.href="javascript:void(0)",t.addEventListener("click",(function(){c(".modal").classList.add("is-active")})),c(".modal-button-close").addEventListener("click",(function(){c(".modal").classList.remove("is-active")})));var e=c(".panel-tools .embed-tool");e&&e.addEventListener("click",(function(t){t.target&&t.target.closest(".panel-tools")&&p(t.target.closest(".panel-tools").querySelector(".panel-embed"))}));var a=c(".expand-tool");a&&a.addEventListener("click",(function(t){if(t.target&&t.target.closest(".panel")){var e=t.target.closest(".panel");e.classList.contains("panel-fullsize")?e.classList.remove("panel-fullsize"):e.classList.add("panel-fullsize")}})),(document.querySelectorAll(".notification .delete")||[]).forEach((function(t){var e=t.parentNode;t.addEventListener("click",(function(){e.parentNode.removeChild(e)}))}));var n=Array.prototype.slice.call(document.querySelectorAll(".navbar-burger"),0);n.length>0&&n.forEach((function(t){t.addEventListener("click",(function(){var e=t.dataset.target,a=document.getElementById(e);t.classList.toggle("is-active"),a.classList.toggle("is-active")}))}));var i=c(".captcha_container");if(i){var r=i.querySelector("a"),o=i.querySelector("img");r&&o&&r.addEventListener("click",(function(){var t=o.src;-1!==t.indexOf("&refresh")?t=t.split("&rand=")[0]:t+="&refresh",o.src=t+"&rand="+Math.random()}))}var s=d(".js-hidden");s&&Array.prototype.forEach.call(s,(function(t){p(t)}))},_=function(t){return t.dataset.pasteInfo?JSON.parse(t.dataset.pasteInfo):null};l=function(){k();var t=new URLSearchParams(window.location.search).get("q"),e=document.getElementById("archive"),a="/api/user_pastes.php?user_id="+e.dataset.userId;console.log("myPastesElem",e),new g(e,{ajaxCallback:function(t){fetch(a).then((function(t){return t.json()})).then(t)},rowCallback:function(t){console.log("rowData",t);var e,a=(e=document.getElementById("js-data-holder"))?{userId:e.dataset.userId,csrfToken:e.dataset.csrfToken}:{userId:null,csrfToken:null},n=parseInt(t.author_id)===parseInt(a.userId);console.log(n);var i=n?'\n
\n \n \n \n
\n '):"",r=new Date(t.created_at).toLocaleString(),o=n?''.concat(["Public","Unlisted","Private"][t.visibility],""):"";return'\n ').concat(f(t.title),'\n ').concat(r,"\n ").concat(o,'\n ').concat(t.views||0,"\n ").concat(y(t.tags),"\n ").concat(i,"\n ")},filterCallback:m,preFilter:t}).attach();var n=document.getElementById("favs");n&&new g(n,{ajaxCallback:function(t){console.log("invoker invoked"),t({data:Array.prototype.map.call(n.querySelectorAll("tbody > tr"),_)})},rowCallback:function(t){var e=t.recently_updated?"":"",a=new Date(t.favourited_at).toLocaleString();return'\n ').concat(f(t.title),'\n ').concat(a,'\n ').concat(e,"\n ").concat(y(t.tags),"\n ")},filterCallback:m}).attach()},"loading"!==document.readyState?l():document.addEventListener("DOMContentLoaded",l); //# sourceMappingURL=user_profile.min.js.map diff --git a/public/assets/bundle/user_profile.min.js.map b/public/assets/bundle/user_profile.min.js.map index d16d074..3b58c20 100644 --- a/public/assets/bundle/user_profile.min.js.map +++ b/public/assets/bundle/user_profile.min.js.map @@ -1 +1 @@ -{"version":3,"file":"user_profile.min.js","sources":["../../../js/dom.js","../../../js/data_tables.js","../../../js/utils.js","../../../js/tag_input.js","../../../js/main.js","../../../js/user_profile.js"],"sourcesContent":["const $ = function(selector) {\n return document.querySelector(selector);\n};\n\nconst $$ = function(selector) {\n return document.querySelectorAll(selector) || [];\n};\n\nconst makeEl = function(html) {\n const template = document.createElement('template');\n\n template.innerHTML = html.trim();\n\n return template.content.firstChild;\n};\n\nconst clearEl = function(el) {\n while (el.firstChild) {\n el.removeChild(el.firstChild);\n }\n};\n\nconst toggleEl = function(el) {\n if (el.classList.contains('is-hidden')) {\n el.classList.remove('is-hidden');\n } else {\n el.classList.add('is-hidden');\n }\n};\n\nconst escape = function(unsafe) {\n return unsafe\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nconst whenReady = function(funcp) {\n if (document.readyState !== 'loading') {\n funcp();\n } else {\n document.addEventListener('DOMContentLoaded', funcp);\n }\n}\n\nexport { whenReady, $, $$, makeEl, clearEl, toggleEl, escape };","import { makeEl, clearEl } from \"./dom\";\n\nclass SimplePaginator {\n constructor(element) {\n this.element = element;\n }\n\n attach(pageCallback) {\n this.element.addEventListener('click', evt => {\n if (evt.target && evt.target.classList.contains('paginator__button')) {\n pageCallback(+evt.target.dataset.page);\n }\n });\n }\n\n update(totalRecords, perPage, currentPage) {\n clearEl(this.element);\n\n /* First and last page in existence */\n const firstPage = 0;\n const lastPage = Math.floor(totalRecords / perPage); // ish?\n const numPagesToShow = 2;\n\n if (lastPage === firstPage) {\n return;\n }\n\n /* First and last page the main paginator will show */\n const firstPageShow = (currentPage - numPagesToShow) < firstPage ? firstPage : (currentPage - numPagesToShow);\n const lastPageShow = (currentPage + numPagesToShow) > lastPage ? lastPage : (currentPage + numPagesToShow);\n\n /* Whether to show the first and last pages in existence at the ends of the paginator */\n const showFirstPage = (Math.abs(firstPage - currentPage)) > (numPagesToShow);\n const showLastPage = (Math.abs(lastPage - currentPage)) > (numPagesToShow);\n\n\n const prevButtonDisabled = currentPage === firstPage ? 'disabled' : ''\n\n /* Previous button */\n this.element.appendChild(makeEl(\n ``\n ));\n\n /* First page button */\n if (showFirstPage) {\n this.element.appendChild(makeEl(\n ``\n ));\n this.element.appendChild(makeEl(``));\n }\n\n /* \"window\" buttons */\n for (let i = firstPageShow; i <= lastPageShow; i++) {\n const selected = (i === currentPage ? 'paginator__button--selected' : '');\n this.element.appendChild(makeEl(\n ``\n ));\n }\n\n /* Last page button */\n if (showLastPage) {\n this.element.appendChild(makeEl(``));\n this.element.appendChild(makeEl(\n ``\n ));\n }\n\n const nextButtonDisabled = currentPage === lastPage ? 'disabled' : ''\n /* Next button */\n this.element.appendChild(makeEl(\n ``\n ));\n }\n}\n\nclass DataTable {\n constructor(element, options) {\n this.element = element;\n this.container = element.parentElement;\n this.options = options;\n\n this.ajaxCallback = options.ajaxCallback;\n this.data = [];\n this.unfilteredData = [];\n\n this.totalRecords = -1;\n this.perPage = 20;\n this.currentPage = 0;\n\n this.paginator = new SimplePaginator(this.container.querySelector('.paginator'));\n\n this.filterCallback = options.filterCallback;\n this.sortField = null;\n this.sortDir = true;\n }\n\n attach() {\n this.filterField = this.container.querySelector('input.search');\n if (this.filterField && this.filterCallback) {\n this.filterField.addEventListener('keyup', evt => {\n if (evt.target) {\n this._updateFilter(evt.target.value);\n }\n });\n\n if (this.options.preFilter) {\n this.filterField.value = this.options.preFilter;\n }\n }\n\n this.perPageField = this.container.querySelector('select[name=per_page]');\n\n if (this.perPageField) {\n this.perPageField.addEventListener('change', evt => {\n this.perPage = Number(evt.target.value);\n this._updatePage(0);\n });\n }\n\n const header = this.element.querySelector('tr.paginator__sort');\n\n if (header) {\n header.addEventListener('click', evt => {\n const target = evt.target;\n\n if (!target.dataset.sortField) {\n return;\n }\n\n if (this.sortField) {\n const elem = this.element.querySelector(`th[data-sort-field=${this.sortField}]`)\n elem.classList.remove('paginator__sort--down');\n elem.classList.remove('paginator__sort--up');\n }\n\n this._updateSort(target.dataset.sortField, !this.sortDir);\n\n target.classList.add(this.sortDir ? 'paginator__sort--up' : 'paginator__sort--down');\n });\n }\n\n this.paginator.attach(this._updatePage.bind(this));\n this._loadEntries();\n }\n\n /* Load the requested data from the server, and when done, update the DOM. */\n _loadEntries() {\n new Promise(this.ajaxCallback)\n .then(data => {\n this.element.classList.remove('hidden');\n this.unfilteredData = data.data;\n this._updateFilter(this.options.preFilter);\n });\n }\n\n /* Update the DOM to reflect the current state of the data we have loaded */\n _updateEntries(data) {\n this.data = data;\n this.totalRecords = this.data.length;\n\n const bodyElement = this.element.querySelector('tbody');\n clearEl(bodyElement);\n\n const firstIndex = (this.perPage * this.currentPage);\n const lastIndex = (firstIndex + this.perPage) > this.totalRecords ? this.totalRecords : (firstIndex + this.perPage);\n\n\n for (let i = firstIndex; i < lastIndex; i++) {\n const rowElem = makeEl(this.options.rowCallback(this.data[i]));\n rowElem.classList.add(i % 2 === 0 ? 'odd' : 'even');\n\n bodyElement.appendChild(rowElem);\n }\n\n this.paginator.update(this.totalRecords, this.perPage, this.currentPage);\n }\n\n _updatePage(n) {\n this.currentPage = n;\n this.paginator.update(this.totalRecords, this.perPage, this.currentPage);\n this._updateEntries(this.data);\n }\n\n _updateFilter(query) {\n /* clearing the query */\n if (query === null || query === '') {\n this._updateEntries(this.unfilteredData);\n return;\n }\n\n let data = [];\n for (const datum of this.unfilteredData) {\n if (this.filterCallback(datum, query)) {\n data.push(datum);\n }\n }\n\n this._updatePage(0)\n this._updateEntries(data);\n }\n\n _updateSort(field, direction) {\n this.sortField = field;\n this.sortDir = direction;\n\n let newEntries = [...this.data].sort((a, b) => {\n let sorter = 0;\n\n if (a[field] > b[field]) {\n sorter = 1;\n } else if (a[field] < b[field]) {\n sorter = -1;\n }\n\n if (!direction) {\n sorter = -sorter;\n }\n\n return sorter;\n });\n\n this._updatePage(0);\n this._updateEntries(newEntries);\n }\n}\n\nconst dumbFilterCallback = (datum, query) => {\n if (!query) {\n return true;\n }\n\n const queryLower = query.toLowerCase();\n\n if (queryLower === 'untagged' && datum.tags.length === 0) {\n return true;\n }\n\n if (datum.title.toLowerCase().indexOf(queryLower) !== -1) {\n return true;\n }\n\n if (datum.author.toLowerCase().indexOf(queryLower) !== -1) {\n return true;\n }\n\n /* this is inefficient */\n for (const tag of datum.tags) {\n if (tag.name.toLowerCase().indexOf(queryLower) !== -1) {\n return true;\n }\n }\n\n return false;\n};\n\nexport { DataTable, dumbFilterCallback };\n","import { escape } from \"./dom\";\n\nconst tagsToHtml = (tags) => {\n return tags.map(tagData => {\n let tagColorClass;\n const tagLower = tagData.name.toLowerCase();\n if (tagLower === 'nsfw' || tagLower === 'explicit') {\n tagColorClass = 'is-danger';\n } else if (tagLower === 'safe') {\n tagColorClass = 'is-success';\n } else if (tagLower.charAt(0) === '/' && tagLower.charAt(tagLower.length - 1) === '/') {\n tagColorClass = 'is-primary';\n } else {\n tagColorClass = 'is-info';\n }\n\n return `\n ${escape(tagData.name)}\n `;\n }).join('');\n};\n\nexport { tagsToHtml };\n","import { makeEl, escape } from \"./dom\";\n\nclass TagsInput {\n constructor(element, options = {}) {\n this.element = element;\n this.tags = [];\n this.options = options\n\n this.maxTags = options.maxTags || 32;\n this.inputNode = null;\n this.containerNode = null;\n }\n\n attach() {\n this.element.style.display = 'none';\n\n this.containerNode = makeEl('
');\n this.inputNode = makeEl('');\n this.containerNode.appendChild(this.inputNode);\n\n this.element.parentNode.insertBefore(this.containerNode, this.element.nextSibling);\n\n /* Load existing tags from input */\n if (this.element.value) {\n for (const tag of this.element.value.split(',')) {\n this.addTag(tag);\n }\n }\n\n /* Handle addition and removal of tags via key-presses */\n this.containerNode.addEventListener('keydown', this._handleInputKeyUp.bind(this));\n\n /* Handle deletions by clicking the delete button */\n this.containerNode.addEventListener('click', this._handleContainerClick.bind(this));\n\n /* Handle clicks outside the input node to add the past tag */\n this.inputNode.addEventListener('focusout', (evt) => {\n if (this.inputNode.value) {\n this.addTag(this.inputNode.value);\n this.inputNode.value = \"\";\n this.updateHiddenInputValue();\n }\n });\n }\n\n detach() {\n this.tags.clear();\n this.containerNode.remove();\n this.element.style.display = 'inline-block';\n }\n\n updateHiddenInputValue() {\n this.element.value = this.tags.join(',');\n }\n\n deleteTagNode(node) {\n this.tags.splice(this.tags.indexOf(node.dataset.value.toLowerCase()), 1);\n node.remove();\n\n /* Below the limit? Make sure the input is enabled. */\n if (this.tags.length < this.maxTags) {\n this.inputNode.disabled = false;\n }\n }\n\n addTag(tagValue) {\n tagValue = tagValue.trim();\n\n /* Tag value is probably not empty and we don't already have the same tag. */\n if (tagValue !== '' && this.tags.indexOf(tagValue.toLowerCase()) === -1) {\n this.tags.push(tagValue.toLowerCase());\n\n this.inputNode.parentNode.insertBefore(\n makeEl('' + escape(tagValue) + ''),\n this.inputNode\n );\n\n /* Too many tags, disable the input for now. */\n if (this.tags.length >= this.maxTags) {\n this.inputNode.disabled = true;\n }\n }\n }\n\n _handleInputKeyUp(evt) {\n let tagValue = this.inputNode.value;\n\n if (evt.key === 'Backspace' && tagValue === '') {\n // Remove the child\n if (this.inputNode.previousSibling) {\n this.deleteTagNode(this.inputNode.previousSibling);\n\n this.updateHiddenInputValue();\n }\n } else if (evt.key === ',') {\n this.addTag(tagValue);\n\n this.inputNode.value = ''\n this.updateHiddenInputValue();\n\n evt.preventDefault();\n } else if (evt.key !== 'Backspace' && tagValue.length > 255) { // This could be improved to check if it would actually result in a new char being typed...\n evt.preventDefault();\n }\n }\n\n _handleContainerClick(evt) {\n if (evt.target && evt.target.classList.contains('delete')) {\n this.deleteTagNode(evt.target.closest('.tag'));\n this.updateHiddenInputValue();\n }\n }\n}\n\nexport { TagsInput };\n","import { $, $$, toggleEl } from './dom';\nimport { TagsInput } from \"./tag_input\";\n\nconst setupSignupModal = () => {\n const signupButton = $('[data-target~=\"#signin\"],[data-target~=\"#signup\"]');\n\n if (signupButton) {\n signupButton.href = 'javascript:void(0)';\n\n signupButton.addEventListener('click', () => {\n $('.modal').classList.add('is-active');\n });\n\n $('.modal-button-close').addEventListener('click', () => {\n $('.modal').classList.remove('is-active');\n });\n }\n}\n\nconst globalSetup = () => {\n Array.prototype.forEach.call($$('.js-tag-input'), (el) => {\n new TagsInput(el).attach();\n });\n\n setupSignupModal();\n\n const embedButton = $('.panel-tools .embed-tool');\n\n if (embedButton){\n embedButton.addEventListener('click', (evt) => {\n if (evt.target && evt.target.closest('.panel-tools')) {\n toggleEl(evt.target.closest('.panel-tools').querySelector('.panel-embed'));\n }\n });\n }\n\n const expandButton = $('.expand-tool');\n\n if (expandButton) {\n expandButton.addEventListener('click', (evt) => {\n if (evt.target && evt.target.closest('.panel')) {\n const panel = evt.target.closest('.panel');\n\n if (panel.classList.contains('panel-fullsize')) {\n panel.classList.remove('panel-fullsize');\n } else {\n panel.classList.add('panel-fullsize');\n }\n }\n });\n }\n\n // Notifications\n (document.querySelectorAll('.notification .delete') || []).forEach(($delete) => {\n const $notification = $delete.parentNode;\n\n $delete.addEventListener('click', () => {\n $notification.parentNode.removeChild($notification);\n });\n });\n\n // Hamburger menu\n const $navbarBurgers = Array.prototype.slice.call(document.querySelectorAll('.navbar-burger'), 0);\n if ($navbarBurgers.length > 0) {\n $navbarBurgers.forEach(el => {\n el.addEventListener('click', () => {\n const target = el.dataset.target;\n const $target = document.getElementById(target);\n el.classList.toggle('is-active');\n $target.classList.toggle('is-active');\n });\n });\n }\n\n const preloader = $('.preloader');\n const main = $('main');\n\n if (preloader && main) {\n preloader.remove();\n main.id = '';\n }\n\n // CAPTCHA refresh\n const captchaContainer = $('.captcha_container');\n\n if (captchaContainer) {\n const refreshElement = captchaContainer.querySelector('a');\n const imageElement = captchaContainer.querySelector('img');\n\n if (refreshElement && imageElement) {\n refreshElement.addEventListener('click', () => {\n let src = imageElement.src;\n\n if (src.indexOf('&refresh') !== -1) {\n // yeah, it's kinda cancerous. fuck off.\n src = src.split('&rand=')[0];\n } else {\n src += '&refresh';\n }\n\n imageElement.src = src + '&rand=' + Math.random();\n });\n }\n }\n\n const hiddenElements = $$('.js-hidden');\n\n if (hiddenElements) {\n Array.prototype.forEach.call(hiddenElements, (elem) => {\n toggleEl(elem);\n });\n }\n}\n\nexport { globalSetup };","import { escape, whenReady } from './dom';\nimport { DataTable, dumbFilterCallback } from './data_tables';\nimport { tagsToHtml } from \"./utils\";\nimport { globalSetup } from './main';\n\nconst getUserInfo = () => {\n const elem = document.getElementById('js-data-holder');\n\n if (!elem) {\n return { userId: null, csrfToken: null };\n }\n\n return { userId: elem.dataset.userId, csrfToken: elem.dataset.csrfToken };\n};\n\nconst parsePasteInfo = (elem) => {\n if (!elem.dataset.pasteInfo) {\n return null;\n }\n\n return JSON.parse(elem.dataset.pasteInfo);\n};\n\nwhenReady(() => {\n globalSetup();\n\n const urlParams = new URLSearchParams(window.location.search);\n const myParam = urlParams.get('q');\n const myPastesElem = document.getElementById('archive');\n const apiUrl = '/api/user_pastes.php?user_id=' + myPastesElem.dataset.userId;\n console.log('myPastesElem', myPastesElem);\n const table = new DataTable(myPastesElem, {\n ajaxCallback: (resolve) => {\n fetch(apiUrl)\n .then(r => r.json())\n .then(resolve);\n },\n rowCallback: (rowData) => {\n console.log('rowData', rowData);\n const userData = getUserInfo();\n const ownedByUser = (parseInt(rowData.author_id) === parseInt(userData.userId));\n console.log(ownedByUser);\n const deleteElem = ownedByUser ? `\n
\n \n \n \n
\n ` : '';\n const pasteCreatedAt = new Date(rowData.created_at).toLocaleString();\n const pasteVisibility = ownedByUser ? `${['Public', 'Unlisted', 'Private'][rowData.visibility]}` : '';\n\n return `\n ${escape(rowData.title)}\n ${pasteCreatedAt}\n ${pasteVisibility}\n ${rowData.views || 0}\n ${tagsToHtml(rowData.tags)}\n ${deleteElem}\n `;\n },\n filterCallback: dumbFilterCallback,\n preFilter: myParam\n });\n table.attach();\n\n const myFavesElem = document.getElementById('favs');\n\n if (!myFavesElem) {\n return;\n }\n\n const faveTable = new DataTable(myFavesElem, {\n ajaxCallback: (resolve) => {\n console.log('invoker invoked');\n resolve({\n data: Array.prototype.map.call(myFavesElem.querySelectorAll('tbody > tr'), parsePasteInfo)\n });\n },\n rowCallback: (rowData) => {\n const recentUpdate = rowData.recently_updated ?\n `` :\n ``;\n const pasteFavedAt = new Date(rowData.favourited_at).toLocaleString();\n\n // ${escape(rowData.author)}\n return `\n ${escape(rowData.title)}\n ${pasteFavedAt}\n ${recentUpdate}\n ${tagsToHtml(rowData.tags)}\n `;\n },\n filterCallback: dumbFilterCallback\n });\n faveTable.attach();\n});"],"names":["funcp","$","selector","document","querySelector","$$","querySelectorAll","makeEl","html","template","createElement","innerHTML","trim","content","firstChild","clearEl","el","removeChild","toggleEl","classList","contains","remove","add","escape","unsafe","replace","SimplePaginator","element","_classCallCheck","this","_createClass","key","value","pageCallback","addEventListener","evt","target","dataset","page","totalRecords","perPage","currentPage","lastPage","Math","floor","firstPageShow","lastPageShow","showFirstPage","abs","showLastPage","prevButtonDisabled","appendChild","concat","i","selected","nextButtonDisabled","DataTable","options","container","parentElement","ajaxCallback","data","unfilteredData","paginator","filterCallback","sortField","sortDir","_this","filterField","_updateFilter","preFilter","perPageField","Number","_updatePage","header","elem","_updateSort","attach","bind","_loadEntries","_this2","Promise","then","length","bodyElement","firstIndex","lastIndex","rowElem","rowCallback","update","n","_updateEntries","query","_step","_iterator","_createForOfIteratorHelper","s","done","datum","push","err","e","f","field","direction","newEntries","_toConsumableArray","sort","a","b","sorter","dumbFilterCallback","queryLower","toLowerCase","tags","title","indexOf","author","_step2","_iterator2","name","tagsToHtml","map","tagData","tagColorClass","tagLower","charAt","slug","join","TagsInput","arguments","undefined","maxTags","inputNode","containerNode","_this3","style","display","parentNode","insertBefore","nextSibling","_step3","_iterator3","split","tag","addTag","_handleInputKeyUp","_handleContainerClick","updateHiddenInputValue","clear","node","splice","disabled","tagValue","previousSibling","deleteTagNode","preventDefault","closest","globalSetup","signupButton","Array","prototype","forEach","call","href","embedButton","expandButton","panel","$delete","$notification","$navbarBurgers","slice","$target","getElementById","toggle","preloader","main","id","captchaContainer","refreshElement","imageElement","src","random","hiddenElements","parsePasteInfo","pasteInfo","JSON","parse","myParam","URLSearchParams","window","location","search","get","myPastesElem","apiUrl","userId","console","log","resolve","fetch","r","json","rowData","userData","csrfToken","ownedByUser","parseInt","author_id","deleteElem","pasteCreatedAt","Date","created_at","toLocaleString","pasteVisibility","visibility","views","myFavesElem","recentUpdate","recently_updated","pasteFavedAt","favourited_at","readyState"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"user_profile.min.js","sources":["../../../js/dom.js","../../../js/data_tables.js","../../../js/utils.js","../../../js/tag_input.js","../../../js/main.js","../../../js/user_profile.js"],"sourcesContent":["const $ = function(selector) {\n return document.querySelector(selector);\n};\n\nconst $$ = function(selector) {\n return document.querySelectorAll(selector) || [];\n};\n\nconst makeEl = function(html) {\n const template = document.createElement('template');\n\n template.innerHTML = html.trim();\n\n return template.content.firstChild;\n};\n\nconst clearEl = function(el) {\n while (el.firstChild) {\n el.removeChild(el.firstChild);\n }\n};\n\nconst toggleEl = function(el) {\n if (el.classList.contains('is-hidden')) {\n el.classList.remove('is-hidden');\n } else {\n el.classList.add('is-hidden');\n }\n};\n\nconst escape = function(unsafe) {\n return unsafe\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n}\n\nconst whenReady = function(funcp) {\n if (document.readyState !== 'loading') {\n funcp();\n } else {\n document.addEventListener('DOMContentLoaded', funcp);\n }\n}\n\nexport { whenReady, $, $$, makeEl, clearEl, toggleEl, escape };","import { makeEl, clearEl } from \"./dom\";\n\nclass SimplePaginator {\n constructor(element) {\n this.element = element;\n }\n\n attach(pageCallback) {\n this.element.addEventListener('click', evt => {\n if (evt.target && evt.target.classList.contains('paginator__button')) {\n pageCallback(+evt.target.dataset.page);\n }\n });\n }\n\n update(totalRecords, perPage, currentPage) {\n clearEl(this.element);\n\n /* First and last page in existence */\n const firstPage = 0;\n const lastPage = Math.floor(totalRecords / perPage); // ish?\n const numPagesToShow = 2;\n\n if (lastPage === firstPage) {\n return;\n }\n\n /* First and last page the main paginator will show */\n const firstPageShow = (currentPage - numPagesToShow) < firstPage ? firstPage : (currentPage - numPagesToShow);\n const lastPageShow = (currentPage + numPagesToShow) > lastPage ? lastPage : (currentPage + numPagesToShow);\n\n /* Whether to show the first and last pages in existence at the ends of the paginator */\n const showFirstPage = (Math.abs(firstPage - currentPage)) > (numPagesToShow);\n const showLastPage = (Math.abs(lastPage - currentPage)) > (numPagesToShow);\n\n\n const prevButtonDisabled = currentPage === firstPage ? 'disabled' : ''\n\n /* Previous button */\n this.element.appendChild(makeEl(\n ``\n ));\n\n /* First page button */\n if (showFirstPage) {\n this.element.appendChild(makeEl(\n ``\n ));\n this.element.appendChild(makeEl(``));\n }\n\n /* \"window\" buttons */\n for (let i = firstPageShow; i <= lastPageShow; i++) {\n const selected = (i === currentPage ? 'paginator__button--selected' : '');\n this.element.appendChild(makeEl(\n ``\n ));\n }\n\n /* Last page button */\n if (showLastPage) {\n this.element.appendChild(makeEl(``));\n this.element.appendChild(makeEl(\n ``\n ));\n }\n\n const nextButtonDisabled = currentPage === lastPage ? 'disabled' : ''\n /* Next button */\n this.element.appendChild(makeEl(\n ``\n ));\n }\n}\n\nclass DataTable {\n constructor(element, options) {\n this.element = element;\n this.container = element.parentElement;\n this.options = options;\n\n this.ajaxCallback = options.ajaxCallback;\n this.data = [];\n this.unfilteredData = [];\n\n this.totalRecords = -1;\n this.perPage = 20;\n this.currentPage = 0;\n\n this.paginator = new SimplePaginator(this.container.querySelector('.paginator'));\n\n this.filterCallback = options.filterCallback;\n this.sortField = null;\n this.sortDir = true;\n }\n\n attach() {\n this.filterField = this.container.querySelector('input.search');\n if (this.filterField && this.filterCallback) {\n this.filterField.addEventListener('keyup', evt => {\n if (evt.target) {\n this._updateFilter(evt.target.value);\n }\n });\n\n if (this.options.preFilter) {\n this.filterField.value = this.options.preFilter;\n }\n }\n\n this.perPageField = this.container.querySelector('select[name=per_page]');\n\n if (this.perPageField) {\n this.perPageField.addEventListener('change', evt => {\n this.perPage = Number(evt.target.value);\n this._updatePage(0);\n });\n }\n\n const header = this.element.querySelector('tr.paginator__sort');\n\n if (header) {\n header.addEventListener('click', evt => {\n const target = evt.target;\n\n if (!target.dataset.sortField) {\n return;\n }\n\n if (this.sortField) {\n const elem = this.element.querySelector(`th[data-sort-field=${this.sortField}]`)\n elem.classList.remove('paginator__sort--down');\n elem.classList.remove('paginator__sort--up');\n }\n\n this._updateSort(target.dataset.sortField, !this.sortDir);\n\n target.classList.add(this.sortDir ? 'paginator__sort--up' : 'paginator__sort--down');\n });\n }\n\n this.paginator.attach(this._updatePage.bind(this));\n this._loadEntries();\n }\n\n /* Load the requested data from the server, and when done, update the DOM. */\n _loadEntries() {\n new Promise(this.ajaxCallback)\n .then(data => {\n this.element.classList.remove('hidden');\n this.unfilteredData = data.data;\n this._updateFilter(this.options.preFilter);\n });\n }\n\n /* Update the DOM to reflect the current state of the data we have loaded */\n _updateEntries(data) {\n this.data = data;\n this.totalRecords = this.data.length;\n\n const bodyElement = this.element.querySelector('tbody');\n clearEl(bodyElement);\n\n const firstIndex = (this.perPage * this.currentPage);\n const lastIndex = (firstIndex + this.perPage) > this.totalRecords ? this.totalRecords : (firstIndex + this.perPage);\n\n\n for (let i = firstIndex; i < lastIndex; i++) {\n const rowElem = makeEl(this.options.rowCallback(this.data[i]));\n rowElem.classList.add(i % 2 === 0 ? 'odd' : 'even');\n\n bodyElement.appendChild(rowElem);\n }\n\n this.paginator.update(this.totalRecords, this.perPage, this.currentPage);\n }\n\n _updatePage(n) {\n this.currentPage = n;\n this.paginator.update(this.totalRecords, this.perPage, this.currentPage);\n this._updateEntries(this.data);\n }\n\n _updateFilter(query) {\n /* clearing the query */\n if (query === null || query === '') {\n this._updateEntries(this.unfilteredData);\n return;\n }\n\n let data = [];\n for (const datum of this.unfilteredData) {\n if (this.filterCallback(datum, query)) {\n data.push(datum);\n }\n }\n\n this._updatePage(0)\n this._updateEntries(data);\n }\n\n _updateSort(field, direction) {\n this.sortField = field;\n this.sortDir = direction;\n\n let newEntries = [...this.data].sort((a, b) => {\n let sorter = 0;\n\n if (a[field] > b[field]) {\n sorter = 1;\n } else if (a[field] < b[field]) {\n sorter = -1;\n }\n\n if (!direction) {\n sorter = -sorter;\n }\n\n return sorter;\n });\n\n this._updatePage(0);\n this._updateEntries(newEntries);\n }\n}\n\nconst dumbFilterCallback = (datum, query) => {\n if (!query) {\n return true;\n }\n\n const queryLower = query.toLowerCase();\n\n if (queryLower === 'untagged' && datum.tags.length === 0) {\n return true;\n }\n\n if (datum.title.toLowerCase().indexOf(queryLower) !== -1) {\n return true;\n }\n\n if (datum.author.toLowerCase().indexOf(queryLower) !== -1) {\n return true;\n }\n\n /* this is inefficient */\n for (const tag of datum.tags) {\n if (tag.name.toLowerCase().indexOf(queryLower) !== -1) {\n return true;\n }\n }\n\n return false;\n};\n\nexport { DataTable, dumbFilterCallback };\n","import { escape } from \"./dom\";\n\nconst tagsToHtml = (tags) => {\n return tags.map(tagData => {\n let tagColorClass;\n const tagLower = tagData.name.toLowerCase();\n if (tagLower === 'nsfw' || tagLower === 'explicit') {\n tagColorClass = 'is-danger';\n } else if (tagLower === 'safe') {\n tagColorClass = 'is-success';\n } else if (tagLower.charAt(0) === '/' && tagLower.charAt(tagLower.length - 1) === '/') {\n tagColorClass = 'is-primary';\n } else {\n tagColorClass = 'is-info';\n }\n\n return `\n ${escape(tagData.name)}\n `;\n }).join('');\n};\n\nexport { tagsToHtml };\n","import { makeEl, escape } from \"./dom\";\n\nclass TagsInput {\n constructor(element, options = {}) {\n this.element = element;\n this.tags = [];\n this.options = options\n\n this.maxTags = options.maxTags || 32;\n this.inputNode = null;\n this.containerNode = null;\n }\n\n attach() {\n this.element.style.display = 'none';\n\n this.containerNode = makeEl('
');\n this.inputNode = makeEl('');\n this.containerNode.appendChild(this.inputNode);\n\n this.element.parentNode.insertBefore(this.containerNode, this.element.nextSibling);\n\n /* Load existing tags from input */\n if (this.element.value) {\n for (const tag of this.element.value.split(',')) {\n this.addTag(tag);\n }\n }\n\n /* Handle addition and removal of tags via key-presses */\n this.containerNode.addEventListener('keydown', this._handleInputKeyUp.bind(this));\n\n /* Handle deletions by clicking the delete button */\n this.containerNode.addEventListener('click', this._handleContainerClick.bind(this));\n\n /* Handle clicks outside the input node to add the past tag */\n this.inputNode.addEventListener('focusout', (evt) => {\n if (this.inputNode.value) {\n this.addTag(this.inputNode.value);\n this.inputNode.value = \"\";\n this.updateHiddenInputValue();\n }\n });\n }\n\n detach() {\n this.tags.clear();\n this.containerNode.remove();\n this.element.style.display = 'inline-block';\n }\n\n updateHiddenInputValue() {\n this.element.value = this.tags.join(',');\n }\n\n deleteTagNode(node) {\n this.tags.splice(this.tags.indexOf(node.dataset.value.toLowerCase()), 1);\n node.remove();\n\n /* Below the limit? Make sure the input is enabled. */\n if (this.tags.length < this.maxTags) {\n this.inputNode.disabled = false;\n }\n }\n\n addTag(tagValue) {\n tagValue = tagValue.trim();\n\n /* Tag value is probably not empty and we don't already have the same tag. */\n if (tagValue !== '' && this.tags.indexOf(tagValue.toLowerCase()) === -1) {\n this.tags.push(tagValue.toLowerCase());\n\n this.inputNode.parentNode.insertBefore(\n makeEl('' + escape(tagValue) + ''),\n this.inputNode\n );\n\n /* Too many tags, disable the input for now. */\n if (this.tags.length >= this.maxTags) {\n this.inputNode.disabled = true;\n }\n }\n }\n\n _handleInputKeyUp(evt) {\n let tagValue = this.inputNode.value;\n\n if (evt.key === 'Backspace' && tagValue === '') {\n // Remove the child\n if (this.inputNode.previousSibling) {\n this.deleteTagNode(this.inputNode.previousSibling);\n\n this.updateHiddenInputValue();\n }\n } else if (evt.key === ',') {\n this.addTag(tagValue);\n\n this.inputNode.value = ''\n this.updateHiddenInputValue();\n\n evt.preventDefault();\n } else if (evt.key !== 'Backspace' && tagValue.length > 255) { // This could be improved to check if it would actually result in a new char being typed...\n evt.preventDefault();\n }\n }\n\n _handleContainerClick(evt) {\n if (evt.target && evt.target.classList.contains('delete')) {\n this.deleteTagNode(evt.target.closest('.tag'));\n this.updateHiddenInputValue();\n }\n }\n}\n\nexport { TagsInput };\n","import { $, $$, toggleEl } from './dom';\nimport { TagsInput } from \"./tag_input\";\n\nconst setupSignupModal = () => {\n const signupButton = $('[data-target~=\"#signin\"],[data-target~=\"#signup\"]');\n\n if (signupButton) {\n signupButton.href = 'javascript:void(0)';\n\n signupButton.addEventListener('click', () => {\n $('.modal').classList.add('is-active');\n });\n\n $('.modal-button-close').addEventListener('click', () => {\n $('.modal').classList.remove('is-active');\n });\n }\n}\n\nconst globalSetup = () => {\n Array.prototype.forEach.call($$('.js-tag-input'), (el) => {\n new TagsInput(el).attach();\n });\n\n setupSignupModal();\n\n const embedButton = $('.panel-tools .embed-tool');\n\n if (embedButton){\n embedButton.addEventListener('click', (evt) => {\n if (evt.target && evt.target.closest('.panel-tools')) {\n toggleEl(evt.target.closest('.panel-tools').querySelector('.panel-embed'));\n }\n });\n }\n\n const expandButton = $('.expand-tool');\n\n if (expandButton) {\n expandButton.addEventListener('click', (evt) => {\n if (evt.target && evt.target.closest('.panel')) {\n const panel = evt.target.closest('.panel');\n\n if (panel.classList.contains('panel-fullsize')) {\n panel.classList.remove('panel-fullsize');\n } else {\n panel.classList.add('panel-fullsize');\n }\n }\n });\n }\n\n // Notifications\n (document.querySelectorAll('.notification .delete') || []).forEach(($delete) => {\n const $notification = $delete.parentNode;\n\n $delete.addEventListener('click', () => {\n $notification.parentNode.removeChild($notification);\n });\n });\n\n // Hamburger menu\n const $navbarBurgers = Array.prototype.slice.call(document.querySelectorAll('.navbar-burger'), 0);\n if ($navbarBurgers.length > 0) {\n $navbarBurgers.forEach(el => {\n el.addEventListener('click', () => {\n const target = el.dataset.target;\n const $target = document.getElementById(target);\n el.classList.toggle('is-active');\n $target.classList.toggle('is-active');\n });\n });\n }\n\n // CAPTCHA refresh\n const captchaContainer = $('.captcha_container');\n\n if (captchaContainer) {\n const refreshElement = captchaContainer.querySelector('a');\n const imageElement = captchaContainer.querySelector('img');\n\n if (refreshElement && imageElement) {\n refreshElement.addEventListener('click', () => {\n let src = imageElement.src;\n\n if (src.indexOf('&refresh') !== -1) {\n // yeah, it's kinda cancerous. fuck off.\n src = src.split('&rand=')[0];\n } else {\n src += '&refresh';\n }\n\n imageElement.src = src + '&rand=' + Math.random();\n });\n }\n }\n\n const hiddenElements = $$('.js-hidden');\n\n if (hiddenElements) {\n Array.prototype.forEach.call(hiddenElements, (elem) => {\n toggleEl(elem);\n });\n }\n}\n\nexport { globalSetup };","import { escape, whenReady } from './dom';\nimport { DataTable, dumbFilterCallback } from './data_tables';\nimport { tagsToHtml } from \"./utils\";\nimport { globalSetup } from './main';\n\nconst getUserInfo = () => {\n const elem = document.getElementById('js-data-holder');\n\n if (!elem) {\n return { userId: null, csrfToken: null };\n }\n\n return { userId: elem.dataset.userId, csrfToken: elem.dataset.csrfToken };\n};\n\nconst parsePasteInfo = (elem) => {\n if (!elem.dataset.pasteInfo) {\n return null;\n }\n\n return JSON.parse(elem.dataset.pasteInfo);\n};\n\nwhenReady(() => {\n globalSetup();\n\n const urlParams = new URLSearchParams(window.location.search);\n const myParam = urlParams.get('q');\n const myPastesElem = document.getElementById('archive');\n const apiUrl = '/api/user_pastes.php?user_id=' + myPastesElem.dataset.userId;\n console.log('myPastesElem', myPastesElem);\n const table = new DataTable(myPastesElem, {\n ajaxCallback: (resolve) => {\n fetch(apiUrl)\n .then(r => r.json())\n .then(resolve);\n },\n rowCallback: (rowData) => {\n console.log('rowData', rowData);\n const userData = getUserInfo();\n const ownedByUser = (parseInt(rowData.author_id) === parseInt(userData.userId));\n console.log(ownedByUser);\n const deleteElem = ownedByUser ? `\n
\n \n \n \n
\n ` : '';\n const pasteCreatedAt = new Date(rowData.created_at).toLocaleString();\n const pasteVisibility = ownedByUser ? `${['Public', 'Unlisted', 'Private'][rowData.visibility]}` : '';\n\n return `\n ${escape(rowData.title)}\n ${pasteCreatedAt}\n ${pasteVisibility}\n ${rowData.views || 0}\n ${tagsToHtml(rowData.tags)}\n ${deleteElem}\n `;\n },\n filterCallback: dumbFilterCallback,\n preFilter: myParam\n });\n table.attach();\n\n const myFavesElem = document.getElementById('favs');\n\n if (!myFavesElem) {\n return;\n }\n\n const faveTable = new DataTable(myFavesElem, {\n ajaxCallback: (resolve) => {\n console.log('invoker invoked');\n resolve({\n data: Array.prototype.map.call(myFavesElem.querySelectorAll('tbody > tr'), parsePasteInfo)\n });\n },\n rowCallback: (rowData) => {\n const recentUpdate = rowData.recently_updated ?\n `` :\n ``;\n const pasteFavedAt = new Date(rowData.favourited_at).toLocaleString();\n\n // ${escape(rowData.author)}\n return `\n ${escape(rowData.title)}\n ${pasteFavedAt}\n ${recentUpdate}\n ${tagsToHtml(rowData.tags)}\n `;\n },\n filterCallback: dumbFilterCallback\n });\n faveTable.attach();\n});"],"names":["funcp","$","selector","document","querySelector","$$","querySelectorAll","makeEl","html","template","createElement","innerHTML","trim","content","firstChild","clearEl","el","removeChild","toggleEl","classList","contains","remove","add","escape","unsafe","replace","SimplePaginator","element","_classCallCheck","this","_createClass","key","value","pageCallback","addEventListener","evt","target","dataset","page","totalRecords","perPage","currentPage","lastPage","Math","floor","firstPageShow","lastPageShow","showFirstPage","abs","showLastPage","prevButtonDisabled","appendChild","concat","i","selected","nextButtonDisabled","DataTable","options","container","parentElement","ajaxCallback","data","unfilteredData","paginator","filterCallback","sortField","sortDir","_this","filterField","_updateFilter","preFilter","perPageField","Number","_updatePage","header","elem","_updateSort","attach","bind","_loadEntries","_this2","Promise","then","length","bodyElement","firstIndex","lastIndex","rowElem","rowCallback","update","n","_updateEntries","query","_step","_iterator","_createForOfIteratorHelper","s","done","datum","push","err","e","f","field","direction","newEntries","_toConsumableArray","sort","a","b","sorter","dumbFilterCallback","queryLower","toLowerCase","tags","title","indexOf","author","_step2","_iterator2","name","tagsToHtml","map","tagData","tagColorClass","tagLower","charAt","slug","join","TagsInput","arguments","undefined","maxTags","inputNode","containerNode","_this3","style","display","parentNode","insertBefore","nextSibling","_step3","_iterator3","split","tag","addTag","_handleInputKeyUp","_handleContainerClick","updateHiddenInputValue","clear","node","splice","disabled","tagValue","previousSibling","deleteTagNode","preventDefault","closest","globalSetup","signupButton","Array","prototype","forEach","call","href","embedButton","expandButton","panel","$delete","$notification","$navbarBurgers","slice","$target","getElementById","toggle","captchaContainer","refreshElement","imageElement","src","random","hiddenElements","parsePasteInfo","pasteInfo","JSON","parse","myParam","URLSearchParams","window","location","search","get","myPastesElem","apiUrl","userId","console","log","resolve","fetch","r","json","rowData","userData","csrfToken","ownedByUser","parseInt","author_id","deleteElem","id","pasteCreatedAt","Date","created_at","toLocaleString","pasteVisibility","visibility","views","myFavesElem","recentUpdate","recently_updated","pasteFavedAt","favourited_at","readyState"],"mappings":"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"} \ No newline at end of file diff --git a/public/theme/bulma/css/paste.css b/public/theme/bulma/css/paste.css index 1453333..bec820f 100644 --- a/public/theme/bulma/css/paste.css +++ b/public/theme/bulma/css/paste.css @@ -281,4 +281,56 @@ code { .flex--space-between { justify-content: space-between; +} + +.paginator > a { + margin: 0.25rem; +} + +.paginator > a.disabled { + pointer-events: none; + color: gray; +} + +.paginator__sort > th { + cursor: pointer; +} + +.paginator__sort--down, .paginator__sort--up { + background-color: lightblue; +} + +.paginator__sort--down:after { + padding-left: 0.25rem; + content: '▼'; +} + +.paginator__sort--up:after { + padding-left: 0.25rem; + content: '▲'; +} + +.hidden { + display: none; + visibility: hidden; + opacity: 0; +} + +table.hidden + .loading_container { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + width: 100%; + height: 100vh; + z-index: 99999999; + background-image: url('/assets/img/loader/.gif'); + background-repeat: no-repeat; + background-color: #FFF; + background-position: center; +} + +.pp-width-auto { + width: auto; } \ No newline at end of file diff --git a/theme/bulma/archive.php b/theme/bulma/archive.php index 155b944..401a0f3 100644 --- a/theme/bulma/archive.php +++ b/theme/bulma/archive.php @@ -1,55 +1,3 @@ - -
diff --git a/theme/bulma/main.php b/theme/bulma/main.php index 1f24255..6a47dd7 100644 --- a/theme/bulma/main.php +++ b/theme/bulma/main.php @@ -1,219 +1,182 @@ -
-
-
-
- -
- -
- - - - - - - -

- New Paste -

-
- - - -

File Size: 1000/1000Kb

-
- -
-
-
-
-
- - Type a comma to separate each tag. -
- -
+
+
+ +
+
+ +
+
+
+
+ +
+
+
+
+ + +
+
-
-
-
- - -
- -
-
-
-
- - -
-
- CAPTCHA Image - - - - - - - -

and press - "Enter"

-
-
- - - - -
+ +
+
+ CAPTCHA Image + + + + + + + +

and press + "Enter"

- -
+ + + + +
diff --git a/theme/bulma/view.php b/theme/bulma/view.php index 6f9e81e..e0a4566 100644 --- a/theme/bulma/view.php +++ b/theme/bulma/view.php @@ -21,35 +21,13 @@ - - -
+