Skip to content
Snippets Groups Projects
Commit fdbb74a9 authored by Forsteri Workstation's avatar Forsteri Workstation
Browse files

update new build

parent 22bfba75
No related branches found
No related tags found
No related merge requests found
#image-container[data-v-58445a1f]{position:relative}img[data-v-58445a1f]{height:100%;width:100%}#checkmark[data-v-58445a1f]{font-family:Lucida Console,monospace;font-weight:700;color:#fff;background:#d12727;position:absolute;top:.4em;left:.4em;padding:.4em .6em}.login-button[data-v-b6e9e1e8]{margin-left:.5rem;display:inline-block;stroke:currentColor;--tw-text-opacity:1;color:rgba(75,85,99,var(--tw-text-opacity))}.login-button[data-v-b6e9e1e8]:hover{--tw-text-opacity:1;color:rgba(31,41,55,var(--tw-text-opacity))}img[data-v-b47bc4fe]{height:100%}#image-container[data-v-b47bc4fe]{height:100vh;display:flex;justify-content:center}
/*! tailwindcss v2.2.4 | MIT License | https://tailwindcss.com */
/*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */html{-moz-tab-size:4;-o-tab-size:4;tab-size:4;line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji}hr{height:0;color:inherit}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],button{-webkit-appearance:button}legend{padding:0}progress{vertical-align:baseline}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:transparent;background-image:none}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{font-family:inherit;line-height:inherit}*,:after,:before{box-sizing:border-box;border-width:0;border-style:solid;border-color:currentColor}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input:-ms-input-placeholder,textarea:-ms-input-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}*,:after,:before{--tw-border-opacity:1;border-color:rgba(229,231,235,var(--tw-border-opacity))}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.top-0{top:0}.top-0\.5{top:.125rem}.right-0{right:0}.right-0\.5{right:.125rem}.bottom-0{bottom:0}.z-10{z-index:10}.m-2{margin:.5rem}.m-4{margin:1rem}.mx-auto{margin-left:auto;margin-right:auto}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mr-2{margin-right:.5rem}.mb-1{margin-bottom:.25rem}.ml-1{margin-left:.25rem}.last\:mr-0:last-child{margin-right:0}.inline-block{display:inline-block}.flex{display:flex}.table{display:table}.h-48{height:12rem}.h-full{height:100%}.h-screen{height:100vh}.max-h-28{max-height:7rem}.w-1\/3{width:33.333333%}.w-full{width:100%}.max-w-xs{max-width:20rem}.max-w-max{max-width:-webkit-max-content;max-width:-moz-max-content;max-width:max-content}@-webkit-keyframes spin{to{transform:rotate(1turn)}}@keyframes spin{to{transform:rotate(1turn)}}@-webkit-keyframes ping{75%,to{transform:scale(2);opacity:0}}@keyframes ping{75%,to{transform:scale(2);opacity:0}}@-webkit-keyframes pulse{50%{opacity:.5}}@keyframes pulse{50%{opacity:.5}}@-webkit-keyframes bounce{0%,to{transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1)}}@keyframes bounce{0%,to{transform:translateY(-25%);-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:none;-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1)}}.cursor-pointer{cursor:pointer}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.content-start{align-content:flex-start}.items-center{align-items:center}.justify-center{justify-content:center}.self-start{align-self:flex-start}.self-end{align-self:flex-end}.overflow-y-auto{overflow-y:auto}.whitespace-normal{white-space:normal}.rounded{border-radius:.25rem}.border-4{border-width:4px}.border{border-width:1px}.border-dotted{border-style:dotted}.border-transparent{border-color:transparent}.border-gray-400{--tw-border-opacity:1;border-color:rgba(156,163,175,var(--tw-border-opacity))}.border-gray-500{--tw-border-opacity:1;border-color:rgba(107,114,128,var(--tw-border-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgba(229,231,235,var(--tw-bg-opacity))}.bg-red-400{--tw-bg-opacity:1;background-color:rgba(248,113,113,var(--tw-bg-opacity))}.bg-blue-300{--tw-bg-opacity:1;background-color:rgba(147,197,253,var(--tw-bg-opacity))}.hover\:bg-gray-800:hover{--tw-bg-opacity:1;background-color:rgba(31,41,55,var(--tw-bg-opacity))}.stroke-current{stroke:currentColor}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.font-semibold{font-weight:600}.font-bold{font-weight:700}.text-gray-50{--tw-text-opacity:1;color:rgba(249,250,251,var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgba(107,114,128,var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgba(75,85,99,var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgba(31,41,55,var(--tw-text-opacity))}.text-red-600{--tw-text-opacity:1;color:rgba(220,38,38,var(--tw-text-opacity))}.text-red-800{--tw-text-opacity:1;color:rgba(153,27,27,var(--tw-text-opacity))}.hover\:text-gray-100:hover{--tw-text-opacity:1;color:rgba(243,244,246,var(--tw-text-opacity))}.hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgba(75,85,99,var(--tw-text-opacity))}.hover\:text-gray-800:hover{--tw-text-opacity:1;color:rgba(31,41,55,var(--tw-text-opacity))}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-40{opacity:.4}.hover\:opacity-75:hover{opacity:.75}*,:after,:before{--tw-shadow:0 0 transparent}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 rgba(0,0,0,0.06);box-shadow:var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}*,:after,:before{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,0.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent}.focus\:ring-2:focus,.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 transparent)}.ring-red-500{--tw-ring-opacity:1;--tw-ring-color:rgba(239,68,68,var(--tw-ring-opacity))}.focus\:ring-gray-400:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(156,163,175,var(--tw-ring-opacity))}.filter{--tw-blur:var(--tw-empty,/*!*/ /*!*/);--tw-brightness:var(--tw-empty,/*!*/ /*!*/);--tw-contrast:var(--tw-empty,/*!*/ /*!*/);--tw-grayscale:var(--tw-empty,/*!*/ /*!*/);--tw-hue-rotate:var(--tw-empty,/*!*/ /*!*/);--tw-invert:var(--tw-empty,/*!*/ /*!*/);--tw-saturate:var(--tw-empty,/*!*/ /*!*/);--tw-sepia:var(--tw-empty,/*!*/ /*!*/);--tw-drop-shadow:var(--tw-empty,/*!*/ /*!*/);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}
\ No newline at end of file
<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/web/favicon.ico"><title>imageboard-web</title><link href="/web/css/app.d5673b45.css" rel="preload" as="style"><link href="/web/js/app.1d48c5ce.js" rel="preload" as="script"><link href="/web/js/chunk-vendors.ca44873e.js" rel="preload" as="script"><link href="/web/css/app.d5673b45.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but imageboard-web doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="/web/js/chunk-vendors.ca44873e.js"></script><script src="/web/js/app.1d48c5ce.js"></script></body></html> <!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/web/favicon.ico"><title>imageboard-web</title><link href="/web/css/app.f8fa2665.css" rel="preload" as="style"><link href="/web/js/app.e837c338.js" rel="preload" as="script"><link href="/web/js/chunk-vendors.ca44873e.js" rel="preload" as="script"><link href="/web/css/app.f8fa2665.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but imageboard-web doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="/web/js/chunk-vendors.ca44873e.js"></script><script src="/web/js/app.e837c338.js"></script></body></html>
\ No newline at end of file \ No newline at end of file
(function(e){function t(t){for(var a,s,c=t[0],o=t[1],l=t[2],g=0,d=[];g<c.length;g++)s=c[g],Object.prototype.hasOwnProperty.call(r,s)&&r[s]&&d.push(r[s][0]),r[s]=0;for(a in o)Object.prototype.hasOwnProperty.call(o,a)&&(e[a]=o[a]);u&&u(t);while(d.length)d.shift()();return i.push.apply(i,l||[]),n()}function n(){for(var e,t=0;t<i.length;t++){for(var n=i[t],a=!0,c=1;c<n.length;c++){var o=n[c];0!==r[o]&&(a=!1)}a&&(i.splice(t--,1),e=s(s.s=n[0]))}return e}var a={},r={app:0},i=[];function s(t){if(a[t])return a[t].exports;var n=a[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,s),n.l=!0,n.exports}s.m=e,s.c=a,s.d=function(e,t,n){s.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},s.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.t=function(e,t){if(1&t&&(e=s(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(s.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var a in e)s.d(n,a,function(t){return e[t]}.bind(null,a));return n},s.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return s.d(t,"a",t),t},s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.p="/web/";var c=window["webpackJsonp"]=window["webpackJsonp"]||[],o=c.push.bind(c);c.push=t,c=c.slice();for(var l=0;l<c.length;l++)t(c[l]);var u=o;i.push([0,"chunk-vendors"]),n()})({0:function(e,t,n){e.exports=n("56d7")},"31f9":function(e,t,n){},"4feb":function(e,t,n){"use strict";n("a595")},"56d7":function(e,t,n){"use strict";n.r(t);n("e260"),n("e6cf"),n("cca6"),n("a79d");var a=n("2b0e"),r=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{attrs:{id:"app"}},[n("header",[n("nav",[n("router-link",{staticClass:"p-4",attrs:{to:"/"}},[e._v("Home")]),n("router-link",{attrs:{to:"/upload"}},[e._v("Upload")])],1)]),n("router-view")],1)},i=[],s=n("2877"),c={},o=Object(s["a"])(c,r,i,!1,null,null,null),l=o.exports,u=n("8c4f"),g=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"flex flex-row"},[n("section",{directives:[{name:"show",rawName:"v-show",value:!e.sideBarHidden,expression:"!sideBarHidden"}],staticClass:"flex flex-col sticky top-0 h-screen w-1/3"},[n("button",{staticClass:"self-end mt-2",on:{click:function(t){e.sideBarHidden=!0}}},[n("IconXCircle",{staticClass:"stroke-current text-gray-500 hover:text-gray-600"})],1),n("TagCreation"),n("UserAuthentication",{staticClass:"absolute bottom-0"})],1),n("button",{directives:[{name:"show",rawName:"v-show",value:e.sideBarHidden,expression:"sideBarHidden"}],staticClass:"self-start sticky top-0",on:{click:function(t){e.sideBarHidden=!1}}},[n("IconChevronsRight",{staticClass:"mt-1 stroke-current text-gray-500 hover:text-gray-600",attrs:{width:"27",height:"27"}})],1),n("ImageList")],1)},d=[],p=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("section",{staticClass:"w-full"},[n("PaginationBar",{attrs:{"current-page":e.currentPage,"last-page":e.lastPage},on:{onPageChange:e.pageChange}}),n("div",{staticClass:"w-full flex flex-row flex-wrap justify-center"},e._l(e.stateImageSnowflakes,(function(t,a){return n("div",{key:a,staticClass:"max-w-xs flex flex-col"},[n("ImageItem",{attrs:{flake:t},on:{checked:e.appendToDeleteArray}})],1)})),0),n("PaginationBar",{attrs:{"current-page":e.currentPage,"last-page":e.lastPage},on:{onPageChange:e.pageChange}}),n("button",{directives:[{name:"show",rawName:"v-show",value:e.deleteArray.length,expression:"deleteArray.length"}],staticClass:"fixed bottom-0 right-0 p-1 bg-blue-300",on:{click:function(t){return e.deleteImages(e.deleteArray)}}},[e._v(" Delete ")])],1)},f=[],h=n("1da1"),m=n("5530"),v=(n("96cf"),n("a9e3"),n("ac1f"),n("466d"),n("1276"),n("d3b7"),n("a434"),function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{attrs:{id:"image-container"},on:{click:function(t){return t.ctrlKey&&t.shiftKey?t.altKey||t.metaKey?null:(e.checked=!e.checked,void e.$emit("checked",e.checked,e.flake)):null}}},[n("div",{directives:[{name:"show",rawName:"v-show",value:e.checked,expression:"checked"}],attrs:{id:"checkmark"},on:{click:function(t){e.checked=!e.checked,e.$emit("checked",e.checked,e.flake)}}},[e._v(" X ")]),n("router-link",{attrs:{to:"/image/"+e.flake},nativeOn:{click:function(e){return e.ctrlKey&&e.shiftKey?void e.preventDefault():null}}},[n("img",{attrs:{src:"/api/image/"+e.flake+"/preview"}})])],1)}),w=[],b={data:function(){return{checked:!1}},props:{flake:{required:!0}},methods:{}},y=b,x=(n("b5d5"),Object(s["a"])(y,v,w,!1,null,"58445a1f",null)),k=x.exports,_=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"mx-auto max-w-max"},e._l(e.pages,(function(t,a){return n("router-link",{key:a,staticClass:"mr-2 last:mr-0 text-lg",class:{"text-red-800":t===e.currentPage,"font-bold":t===e.currentPage},attrs:{to:"/"+t},nativeOn:{click:function(t){return e.$emit("onPageChange")}}},[e._v(" "+e._s(t)+" ")])})),1)},j=[],O=(n("4de4"),{props:{currentPage:{type:Number,required:!0},lastPage:{type:Number,required:!0}},computed:{pages:function(){return[this.currentPage>1?0:null,this.currentPage>2?"...":null,this.currentPage>0?this.currentPage-1:null,this.currentPage,this.currentPage<this.lastPage-1?this.currentPage+1:null,this.currentPage<this.lastPage-3?"...":null,this.currentPage<this.lastPage-2?this.lastPage-1:null].filter((function(e){return null!==e}))}}}),C=O,T=Object(s["a"])(C,_,j,!1,null,null,null),P=T.exports,I=n("2f62"),S={components:{ImageItem:k,PaginationBar:P},data:function(){return{deleteArray:[],currentPage:0,lastPage:0}},computed:Object(m["a"])({},Object(I["c"])(["stateUser","stateImageSnowflakes"])),created:function(){var e=this;return Object(h["a"])(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.t0=Number,t.next=3,e.getLastPage();case 3:t.t1=t.sent,e.lastPage=(0,t.t0)(t.t1),e.pageChange();case 6:case"end":return t.stop()}}),t)})))()},methods:Object(m["a"])({pageChange:function(){var e=this;return Object(h["a"])(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return e.currentPage=Number(window.location.pathname.split("/").pop().match(/^\d+$/)),window.scrollTo(0,0),t.t0=e,t.next=5,e.getSnowflakes(e.currentPage);case 5:t.t1=t.sent,t.t0.setStateImageSnowflakes.call(t.t0,t.t1);case 7:case"end":return t.stop()}}),t)})))()},getSnowflakes:function(e){return Object(h["a"])(regeneratorRuntime.mark((function t(){var n,a;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,fetch("/api/image/page/".concat(e,"/"));case 2:return n=t.sent,t.next=5,n.json();case 5:return a=t.sent,t.abrupt("return",a);case 7:case"end":return t.stop()}}),t)})))()},getLastPage:function(){return Object(h["a"])(regeneratorRuntime.mark((function e(){var t,n;return regeneratorRuntime.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.next=2,fetch("/api/image/page");case 2:return t=e.sent,e.next=5,t.text();case 5:return n=e.sent,e.abrupt("return",n);case 7:case"end":return e.stop()}}),e)})))()},appendToDeleteArray:function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];var a=t[0],r=t[1];a?this.deleteArray.push(r):this.deleteArray.splice(this.deleteArray.indexOf(r),1)},deleteImages:function(e){for(var t={method:"DELETE",headers:{secret:this.stateUser.secret}},n=0;n<e.length;n++)fetch("/api/image/".concat(e[n]),t);this.deleteArray=[]}},Object(I["b"])(["setStateImageSnowflakes"]))},U=S,L=Object(s["a"])(U,p,f,!1,null,null,null),$=L.exports,A=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("div",{staticClass:"h-48 m-4 border-dotted border-4 border-gray-400",on:{drop:function(t){t.preventDefault(),e.updateWrapper(t),t.currentTarget.classList.remove("bg-gray-200")},dragover:function(e){return e.preventDefault(),e.currentTarget.classList.add("bg-gray-200")},dragleave:function(e){return e.preventDefault(),e.currentTarget.classList.remove("bg-gray-200")}}},[n("div",{staticClass:"relative h-full"},[n("input",{ref:"imageInput",staticClass:"h-full w-full opacity-0 absolute z-10 cursor-pointer",attrs:{type:"file",accept:"image/png, image/jpeg,\n image/gif",multiple:""},on:{change:function(t){return e.updateWrapper()}}}),n("div",{directives:[{name:"show",rawName:"v-show",value:!e.imageList.length,expression:"!imageList.length"}],staticClass:"\n h-full\n font-semibold\n opacity-25\n flex\n justify-center\n items-center\n "},[e._v(" Drag and drop images here or click here to browse. ")]),n("div",{directives:[{name:"show",rawName:"v-show",value:e.imageList.length,expression:"imageList.length"}],staticClass:"h-full flex flex-row flex-wrap content-start overflow-y-auto"},e._l(e.previews,(function(t,a){return n("img",{key:a,staticClass:"max-h-28 relative z-10",attrs:{src:t.url,alt:""},on:{click:function(n){return e.removeImage(t.image)}}})})),0)])]),n("div",{staticClass:"flex flex-col items-center m-4"},[e.invalidType?n("WarningBox",{on:{click:function(t){e.invalidType=!1}}},[e._v(" Please upload PNG, JPEG or GIF image only. ")]):e._e(),n("button",{directives:[{name:"show",rawName:"v-show",value:e.imageList.length,expression:"imageList.length"}],staticClass:"\n border border-gray-500\n p-2\n rounded\n mx-auto\n font-semibold\n text-gray-800\n hover:bg-gray-800 hover:text-gray-100\n ",on:{click:e.submitImage}},[e._v(" Submit ")])],1)])},E=[],R=n("2909"),B=(n("159b"),n("3ca3"),n("ddb0"),n("2b3d"),n("99af"),n("caad"),function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"\n p-5\n m-2\n font-semibold\n bg-red-400\n ring-2 ring-red-500\n rounded\n text-gray-50\n relative\n max-w-xs\n whitespace-normal\n "},[e._t("default"),n("XCircle",{staticClass:"\n absolute\n top-0.5\n right-0.5\n stroke-current\n text-red-600\n opacity-40\n hover:opacity-75\n ",nativeOn:{click:function(t){return e.$emit("click")}}})],2)}),N=[],D=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("svg",{attrs:{xmlns:"http://www.w3.org/2000/svg",width:e.width,height:e.height,viewBox:"0 0 24 24",fill:"none",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}},[n("circle",{attrs:{cx:"12",cy:"12",r:"10"}}),n("line",{attrs:{x1:"15",y1:"9",x2:"9",y2:"15"}}),n("line",{attrs:{x1:"9",y1:"9",x2:"15",y2:"15"}})])},H=[],M={props:{width:{default:24},height:{default:24}}},W=M,F=Object(s["a"])(W,D,H,!1,null,null,null),X=F.exports,K={components:{XCircle:X}},G=K,z=Object(s["a"])(G,B,N,!1,null,null,null),J=z.exports,q={components:{WarningBox:J},data:function(){return{imageList:[],invalidType:!1}},computed:Object(m["a"])({previews:function(){var e=[];return this.imageList.forEach((function(t){return e.push({url:URL.createObjectURL(t),image:t})})),e}},Object(I["c"])(["stateUser"])),methods:Object(m["a"])({updateWrapper:function(e){this.checkImageType(e)?this.updateImageList(e):this.$refs.imageInput.value=""},updateImageList:function(e){this.imageList=this.imageList.concat(e?Object(R["a"])(e.dataTransfer.files):Object(R["a"])(this.$refs.imageInput.files))},checkImageType:function(e){for(var t=["image/png","image/jpeg","image/gif"],n=e?Object(R["a"])(e.dataTransfer.files):Object(R["a"])(this.$refs.imageInput.files),a=0;a<n.length;a++)if(!t.includes(n[a].type))return this.invalidType=!0,!1;return this.invalidType=!1,!0},removeImage:function(e){this.imageList.splice(this.imageList.indexOf(e),1)},submitImage:function(){for(var e=new FormData,t=0;t<this.imageList.length;t++)e.set("image",this.imageList[t]),this.postImage(e);this.invalidType=!1,this.imageList=[]},postImage:function(e){var t=this;return Object(h["a"])(regeneratorRuntime.mark((function n(){var a,r,i;return regeneratorRuntime.wrap((function(n){while(1)switch(n.prev=n.next){case 0:return n.prev=0,a={method:"POST",headers:{secret:t.stateUser.secret},body:e},n.next=4,fetch("/api/image",a);case 4:return r=n.sent,n.next=7,r.json();case 7:i=n.sent,t.addStateImageSnowflake(i.snowflake),n.next=14;break;case 11:n.prev=11,n.t0=n["catch"](0);case 14:case"end":return n.stop()}}),n,null,[[0,11]])})))()}},Object(I["b"])(["addStateImageSnowflake"]))},V=q,Q=Object(s["a"])(V,A,E,!1,null,null,null),Y=Q.exports,Z=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("div",[e._v("Add tag/Change tag type")]),n("div",[n("input",{directives:[{name:"model",rawName:"v-model",value:e.tag,expression:"tag"}],attrs:{placeholder:"Tag to add"},domProps:{value:e.tag},on:{input:function(t){t.target.composing||(e.tag=t.target.value)}}}),n("select",{directives:[{name:"model",rawName:"v-model",value:e.tagType,expression:"tagType"}],on:{change:function(t){var n=Array.prototype.filter.call(t.target.options,(function(e){return e.selected})).map((function(e){var t="_value"in e?e._value:e.value;return t}));e.tagType=t.target.multiple?n:n[0]}}},[n("option",{attrs:{disabled:""}},[e._v("Tag type")]),n("option",{attrs:{value:"artist"}},[e._v("Artist")]),n("option",{attrs:{value:"character"}},[e._v("Character")]),n("option",{attrs:{value:"copyright"}},[e._v("Copyright")]),n("option",{attrs:{value:"generic"}},[e._v("Generic")]),n("option",{attrs:{value:"group"}},[e._v("Group")]),n("option",{attrs:{value:"meta"}},[e._v("Meta")])])]),n("div",[n("button",{attrs:{disabled:e.tagIncorrect},on:{click:function(t){e.setTag(),e.setType(),e.resetTagAndType()}}},[e._v(" Submit ")])]),e.tagIncorrect?n("div",[e._v(" Tag incorrect. Make sure your tag doesn't exceed 128 characters and matches "),n("b",[e._v("/^[a-z0-9()_-]*$/g")])]):e._e(),n("div",[e._v("Type: "+e._s(e.tagType)+", Tag: "+e._s(e.tag))])])},ee=[],te={data:function(){return{tag:"",tagType:"generic"}},computed:Object(m["a"])({tagIncorrect:function(){var e=/^[a-z0-9()_-]*$/g;return!this.tag.match(e)||this.tag.length>128}},Object(I["c"])(["stateUser"])),methods:{setTag:function(){fetch("/api/tag/".concat(this.tag),{method:"PUT",headers:{secret:this.stateUser.secret}}).then((function(e){console.log(e)})).catch((function(e){return console.error(e)}))},setType:function(){var e={method:"PATCH",headers:{"Content-Type":"application/json",secret:this.stateUser.secret},body:JSON.stringify({type:this.tagType})};fetch("/api/tag/".concat(this.tag,"/info"),e).then((function(e){return console.log(e)})).catch((function(e){return console.error(e)}))},resetTagAndType:function(){this.tag="",this.tagType="generic"}}},ne=te,ae=Object(s["a"])(ne,Z,ee,!1,null,null,null),re=ae.exports,ie=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[e.stateUser.id?n("div",{staticClass:"text-lg ml-1 mb-1"},[e._v(" Welcome, "+e._s(e.stateUser.username)+" ")]):n("div",[e.authenticating?e._e():n("button",{staticClass:"\n hover:text-gray-600\n focus:outline-none\n text-gray-800\n font-semibold\n p-2\n ",on:{click:function(t){e.authenticating=!0}}},[e._v(" Authenticate ")]),e.authenticating?n("div",[e.authenticationFailed?n("WarningBox",{on:{click:function(t){e.authenticationFailed=!1}}},[e._v(" Authentication failed. Please check your secret token. ")]):e._e(),n("input",{directives:[{name:"model",rawName:"v-model",value:e.secret,expression:"secret"}],staticClass:"\n border border-transparent\n rounded\n m-4\n p-1\n shadow-inner\n bg-gray-200\n focus:ring-2 focus:ring-gray-400\n ",attrs:{type:"text",placeholder:"Secret token"},domProps:{value:e.secret},on:{keyup:function(t){if(!t.type.indexOf("key")&&e._k(t.keyCode,"enter",13,t.key,"Enter"))return null;e.authenticate(e.secret.trim())},input:function(t){t.target.composing||(e.secret=t.target.value)}}}),n("span",[n("button",{on:{click:function(t){e.authenticate(e.secret.trim())}}},[n("Checkmark",{staticClass:"login-button",attrs:{width:"30",height:"30"}})],1),n("button",{on:{click:function(t){e.authenticating=!1,e.authenticationFailed=!1,e.secret=""}}},[n("XCircle",{staticClass:"login-button",attrs:{width:"30",height:"30"}})],1)])],1):e._e()])])},se=[],ce=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("svg",{attrs:{xmlns:"http://www.w3.org/2000/svg",width:e.width,height:e.height,viewBox:"0 0 24 24",fill:"none",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}},[n("path",{attrs:{d:"M22 11.08V12a10 10 0 1 1-5.93-9.14"}}),n("polyline",{attrs:{points:"22 4 12 14.01 9 11.01"}})])},oe=[],le={props:{width:{default:24},height:{default:24}}},ue=le,ge=Object(s["a"])(ue,ce,oe,!1,null,null,null),de=ge.exports,pe={components:{Checkmark:de,XCircle:X,WarningBox:J},data:function(){return{authenticating:!1,authenticationFailed:!1,secret:""}},computed:Object(m["a"])({},Object(I["c"])(["stateUser"])),methods:Object(m["a"])({authenticate:function(e){var t=this;return Object(h["a"])(regeneratorRuntime.mark((function n(){var a,r;return regeneratorRuntime.wrap((function(n){while(1)switch(n.prev=n.next){case 0:return n.prev=0,n.next=3,fetch("/api/user/this",{headers:{secret:e}});case 3:return a=n.sent,n.next=6,a.json();case 6:r=n.sent,a.ok?t.saveStateUser({id:r.id,privileged:r.privileged,username:r.username,secret:e}):t.authenticationFailed=!0,n.next=13;break;case 10:n.prev=10,n.t0=n["catch"](0);case 13:case"end":return n.stop()}}),n,null,[[0,10]])})))()}},Object(I["b"])(["saveStateUser"]))},fe=pe,he=(n("4feb"),Object(s["a"])(fe,ie,se,!1,null,"b6e9e1e8",null)),me=he.exports,ve=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("svg",{attrs:{xmlns:"http://www.w3.org/2000/svg",width:e.width,height:e.height,viewBox:"0 0 24 24",fill:"none",stroke:"#000000","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}},[n("path",{attrs:{d:"M13 17l5-5-5-5M6 17l5-5-5-5"}})])},we=[],be={props:{width:{default:24},height:{default:24}}},ye=be,xe=Object(s["a"])(ye,ve,we,!1,null,null,null),ke=xe.exports,_e={components:{ImageList:$,ImageUpload:Y,TagCreation:re,UserAuthentication:me,IconXCircle:X,IconChevronsRight:ke},data:function(){return{sideBarHidden:!1}}},je=_e,Oe=Object(s["a"])(je,g,d,!1,null,null,null),Ce=Oe.exports,Te=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("image-upload")],1)},Pe=[],Ie={components:{ImageUpload:Y}},Se=Ie,Ue=Object(s["a"])(Se,Te,Pe,!1,null,null,null),Le=Ue.exports,$e=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"flex flex-row"},[n("section",{staticClass:"flex flex-col sticky top-0 h-screen w-1/3"},[n("div",[e._v(" Tags: "),e._l(e.imageTags,(function(t){return n("span",[e._v(" "+e._s(t)+" ")])}))],2)]),n("div",{attrs:{id:"image-container"}},[n("img",{attrs:{src:"/api/image/"+e.flake+"/file",alt:""}})])])},Ae=[],Ee={data:function(){return{imageTags:Array}},computed:{flake:function(){return window.location.pathname.split("/").pop()}},methods:{getImageTags:function(){var e=this;return Object(h["a"])(regeneratorRuntime.mark((function t(){var n,a;return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,fetch("/api/image/".concat(e.flake,"/tag"));case 2:return n=t.sent,t.next=5,n.json();case 5:return a=t.sent,t.abrupt("return",a);case 7:case"end":return t.stop()}}),t)})))()}},created:function(){var e=this;return Object(h["a"])(regeneratorRuntime.mark((function t(){return regeneratorRuntime.wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,e.getImageTags();case 2:e.imageTags=t.sent;case 3:case"end":return t.stop()}}),t)})))()}},Re=Ee,Be=(n("a69b"),Object(s["a"])(Re,$e,Ae,!1,null,"b47bc4fe",null)),Ne=Be.exports;a["a"].use(u["a"]);var De=[{path:"/",name:"Home",component:Ce},{path:"/upload",name:"UploadNew",component:Le},{path:"/:page",name:"Page",component:Ce},{path:"/image/:hash",name:"ImageView",component:Ne}],He=new u["a"]({mode:"history",base:"/web/",routes:De}),Me=He,We=n("0e44");a["a"].use(I["a"]);var Fe=Object(We["a"])({key:"imageboard",paths:["stateUser"]}),Xe=new I["a"].Store({state:{stateImageSnowflakes:[],stateUser:{id:null,privileged:null,username:null,secret:null}},mutations:{setStateImageSnowflakes:function(e,t){e.stateImageSnowflakes=t},addStateImageSnowflake:function(e,t){e.stateImageSnowflakes.push(t)},saveStateUser:function(e,t){e.stateUser.id=t.id,e.stateUser.privileged=t.privileged,e.stateUser.username=t.username,e.stateUser.secret=t.secret}},actions:{setStateImageSnowflakes:function(e,t){e.commit("setStateImageSnowflakes",t)},addStateImageSnowflake:function(e,t){e.commit("addStateImageSnowflake",t)},saveStateUser:function(e,t){e.commit("saveStateUser",t)}},modules:{},plugins:[Fe]});n("def6");a["a"].config.productionTip=!1,new a["a"]({router:Me,store:Xe,render:function(e){return e(l)}}).$mount("#app")},a595:function(e,t,n){},a69b:function(e,t,n){"use strict";n("ff7e")},b5d5:function(e,t,n){"use strict";n("31f9")},def6:function(e,t,n){},ff7e:function(e,t,n){}});
//# sourceMappingURL=app.e837c338.js.map
\ No newline at end of file
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/components/UserAuthentication.vue?894f","webpack:///./src/App.vue?8b40","webpack:///./src/App.vue","webpack:///./src/views/Home.vue?c752","webpack:///./src/components/ImageList.vue?75be","webpack:///./src/components/ImageItem.vue?562a","webpack:///src/components/ImageItem.vue","webpack:///./src/components/ImageItem.vue?457b","webpack:///./src/components/ImageItem.vue","webpack:///./src/components/PaginationBar.vue?97d8","webpack:///src/components/PaginationBar.vue","webpack:///./src/components/PaginationBar.vue?4402","webpack:///./src/components/PaginationBar.vue","webpack:///src/components/ImageList.vue","webpack:///./src/components/ImageList.vue?7e18","webpack:///./src/components/ImageList.vue","webpack:///./src/components/ImageUpload.vue?fe05","webpack:///./src/components/WarningBox.vue?8182","webpack:///./src/components/icons/IconXCircle.vue?f45d","webpack:///src/components/icons/IconXCircle.vue","webpack:///./src/components/icons/IconXCircle.vue?9e44","webpack:///./src/components/icons/IconXCircle.vue","webpack:///src/components/WarningBox.vue","webpack:///./src/components/WarningBox.vue?d19e","webpack:///./src/components/WarningBox.vue","webpack:///src/components/ImageUpload.vue","webpack:///./src/components/ImageUpload.vue?1bcd","webpack:///./src/components/ImageUpload.vue","webpack:///./src/components/TagCreation.vue?17b7","webpack:///src/components/TagCreation.vue","webpack:///./src/components/TagCreation.vue?bc0d","webpack:///./src/components/TagCreation.vue","webpack:///./src/components/UserAuthentication.vue?a8c0","webpack:///./src/components/icons/IconCheckmark.vue?6723","webpack:///src/components/icons/IconCheckmark.vue","webpack:///./src/components/icons/IconCheckmark.vue?cd82","webpack:///./src/components/icons/IconCheckmark.vue","webpack:///src/components/UserAuthentication.vue","webpack:///./src/components/UserAuthentication.vue?4e14","webpack:///./src/components/UserAuthentication.vue","webpack:///./src/components/icons/IconChevronsRight.vue?2f15","webpack:///src/components/icons/IconChevronsRight.vue","webpack:///./src/components/icons/IconChevronsRight.vue?43da","webpack:///./src/components/icons/IconChevronsRight.vue","webpack:///src/views/Home.vue","webpack:///./src/views/Home.vue?2b8c","webpack:///./src/views/Home.vue","webpack:///./src/views/UploadNew.vue?6e57","webpack:///src/views/UploadNew.vue","webpack:///./src/views/UploadNew.vue?96a2","webpack:///./src/views/UploadNew.vue","webpack:///./src/views/ImageView.vue?ec52","webpack:///src/views/ImageView.vue","webpack:///./src/views/ImageView.vue?2152","webpack:///./src/views/ImageView.vue","webpack:///./src/router/index.js","webpack:///./src/store/index.js","webpack:///./src/main.js","webpack:///./src/views/ImageView.vue?be50","webpack:///./src/components/ImageItem.vue?e6b8"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","_vm","this","_h","$createElement","_c","_self","attrs","staticClass","_v","staticRenderFns","script","component","directives","rawName","sideBarHidden","expression","on","$event","currentPage","lastPage","pageChange","_l","flake","index","appendToDeleteArray","deleteArray","deleteImages","ctrlKey","shiftKey","altKey","metaKey","checked","$emit","nativeOn","preventDefault","props","required","methods","page","class","_s","type","Number","computed","pages","components","ImageItem","PaginationBar","method","headers","fetch","updateWrapper","currentTarget","classList","remove","add","ref","imageList","preview","url","removeImage","image","invalidType","_e","submitImage","_t","width","height","default","XCircle","WarningBox","previews","forEach","tempArray","checkImageType","event","updateImageList","concat","acceptedTypes","includes","indexOf","formData","set","postImage","domProps","target","composing","tag","$$selectedVal","Array","filter","options","selected","map","val","_value","tagType","multiple","tagIncorrect","setTag","setType","resetTagAndType","match","regex","secret","stateUser","body","JSON","stringify","id","username","authenticating","authenticationFailed","_k","keyCode","authenticate","trim","Checkmark","ImageList","ImageUpload","TagCreation","UserAuthentication","IconXCircle","IconChevronsRight","imageTag","imageTags","location","pathname","split","pop","Vue","use","VueRouter","routes","path","Home","UploadNew","ImageView","router","base","process","Vuex","vuexLocal","VuexPersistedState","paths","Store","state","stateImageSnowflakes","privileged","mutations","setStateImageSnowflakes","array","addStateImageSnowflake","hash","saveStateUser","payload","actions","context","commit","plugins","config","productionTip","store","render","h","App","$mount"],"mappings":"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","file":"js/app.e837c338.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/web/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserAuthentication.vue?vue&type=style&index=0&id=b6e9e1e8&lang=postcss&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('header',[_c('nav',[_c('router-link',{staticClass:\"p-4\",attrs:{\"to\":\"/\"}},[_vm._v(\"Home\")]),_c('router-link',{attrs:{\"to\":\"/upload\"}},[_vm._v(\"Upload\")])],1)]),_c('router-view')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=2fe87f47&\"\nvar script = {}\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"flex flex-row\"},[_c('section',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.sideBarHidden),expression:\"!sideBarHidden\"}],staticClass:\"flex flex-col sticky top-0 h-screen w-1/3\"},[_c('button',{staticClass:\"self-end mt-2\",on:{\"click\":function($event){_vm.sideBarHidden = true}}},[_c('IconXCircle',{staticClass:\"stroke-current text-gray-500 hover:text-gray-600\"})],1),_c('TagCreation'),_c('UserAuthentication',{staticClass:\"absolute bottom-0\"})],1),_c('button',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.sideBarHidden),expression:\"sideBarHidden\"}],staticClass:\"self-start sticky top-0\",on:{\"click\":function($event){_vm.sideBarHidden = false}}},[_c('IconChevronsRight',{staticClass:\"mt-1 stroke-current text-gray-500 hover:text-gray-600\",attrs:{\"width\":\"27\",\"height\":\"27\"}})],1),_c('ImageList')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',{staticClass:\"w-full\"},[_c('PaginationBar',{attrs:{\"current-page\":_vm.currentPage,\"last-page\":_vm.lastPage},on:{\"onPageChange\":_vm.pageChange}}),_c('div',{staticClass:\"w-full flex flex-row flex-wrap justify-center\"},_vm._l((_vm.stateImageSnowflakes),function(flake,index){return _c('div',{key:index,staticClass:\"max-w-xs flex flex-col\"},[_c('ImageItem',{attrs:{\"flake\":flake},on:{\"checked\":_vm.appendToDeleteArray}})],1)}),0),_c('PaginationBar',{attrs:{\"current-page\":_vm.currentPage,\"last-page\":_vm.lastPage},on:{\"onPageChange\":_vm.pageChange}}),_c('button',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.deleteArray.length),expression:\"deleteArray.length\"}],staticClass:\"fixed bottom-0 right-0 p-1 bg-blue-300\",on:{\"click\":function($event){return _vm.deleteImages(_vm.deleteArray)}}},[_vm._v(\" Delete \")])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"image-container\"},on:{\"click\":function($event){if(!$event.ctrlKey){ return null; }if(!$event.shiftKey){ return null; }if($event.altKey||$event.metaKey){ return null; }_vm.checked = !_vm.checked;\n _vm.$emit('checked', _vm.checked, _vm.flake);}}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.checked),expression:\"checked\"}],attrs:{\"id\":\"checkmark\"},on:{\"click\":function($event){_vm.checked = !_vm.checked;\n _vm.$emit('checked', _vm.checked, _vm.flake);}}},[_vm._v(\" X \")]),_c('router-link',{attrs:{\"to\":(\"/image/\" + _vm.flake)},nativeOn:{\"click\":function($event){if(!$event.ctrlKey){ return null; }if(!$event.shiftKey){ return null; }$event.preventDefault();}}},[_c('img',{attrs:{\"src\":(\"/api/image/\" + _vm.flake + \"/preview\")}})])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div\n @click.ctrl.shift.exact=\"\n checked = !checked;\n $emit('checked', checked, flake);\n \"\n id=\"image-container\"\n >\n <div\n @click=\"\n checked = !checked;\n $emit('checked', checked, flake);\n \"\n v-show=\"checked\"\n id=\"checkmark\"\n >\n X\n </div>\n <router-link @click.ctrl.shift.native.prevent :to=\"`/image/${flake}`\">\n <img :src=\"`/api/image/${flake}/preview`\" />\n </router-link>\n </div>\n</template>\n\n<script>\nexport default {\n data: () => {\n return {\n checked: false,\n };\n },\n props: {\n flake: {\n required: true,\n },\n },\n methods: {},\n};\n</script>\n\n<style scoped>\n#image-container {\n position: relative;\n}\nimg {\n height: 100%;\n width: 100%;\n}\n#checkmark {\n font-family: \"Lucida Console\", monospace;\n font-weight: bold;\n color: white;\n background: rgb(209, 39, 39);\n position: absolute;\n top: 0.4em;\n left: 0.4em;\n padding: 0.4em 0.6em;\n}\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageItem.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageItem.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImageItem.vue?vue&type=template&id=58445a1f&scoped=true&\"\nimport script from \"./ImageItem.vue?vue&type=script&lang=js&\"\nexport * from \"./ImageItem.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ImageItem.vue?vue&type=style&index=0&id=58445a1f&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"58445a1f\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"mx-auto max-w-max\"},_vm._l((_vm.pages),function(page,index){return _c('router-link',{key:index,staticClass:\"mr-2 last:mr-0 text-lg\",class:{\n 'text-red-800': page === _vm.currentPage,\n 'font-bold': page === _vm.currentPage,\n },attrs:{\"to\":(\"/\" + page)},nativeOn:{\"click\":function($event){return _vm.$emit('onPageChange')}}},[_vm._v(\" \"+_vm._s(page)+\" \")])}),1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"mx-auto max-w-max\">\n <router-link\n v-for=\"(page, index) in pages\"\n :key=\"index\"\n :to=\"`/${page}`\"\n @click.native=\"$emit('onPageChange')\"\n :class=\"{\n 'text-red-800': page === currentPage,\n 'font-bold': page === currentPage,\n }\"\n class=\"mr-2 last:mr-0 text-lg\"\n >\n {{ page }}\n </router-link>\n </div>\n</template>\n\n<script>\nexport default {\n props: {\n currentPage: {\n type: Number,\n required: true,\n },\n lastPage: {\n type: Number,\n required: true,\n },\n },\n computed: {\n // TODO: Rewrite this less confusingly if possible.\n // This returns an array that represents the pagination bar\n pages: function () {\n return [\n this.currentPage > 1 ? 0 : null,\n this.currentPage > 2 ? \"...\" : null,\n this.currentPage > 0 ? this.currentPage - 1 : null,\n this.currentPage,\n this.currentPage < this.lastPage - 1 ? this.currentPage + 1 : null,\n this.currentPage < this.lastPage - 3 ? \"...\" : null,\n this.currentPage < this.lastPage - 2 ? this.lastPage - 1 : null,\n ].filter((element) => element !== null);\n },\n },\n};\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PaginationBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PaginationBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PaginationBar.vue?vue&type=template&id=62f30345&\"\nimport script from \"./PaginationBar.vue?vue&type=script&lang=js&\"\nexport * from \"./PaginationBar.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <section class=\"w-full\">\n <PaginationBar\n :current-page=\"currentPage\"\n :last-page=\"lastPage\"\n @onPageChange=\"pageChange\"\n />\n <div class=\"w-full flex flex-row flex-wrap justify-center\">\n <div\n v-for=\"(flake, index) in stateImageSnowflakes\"\n :key=\"index\"\n class=\"max-w-xs flex flex-col\"\n >\n <ImageItem :flake=\"flake\" @checked=\"appendToDeleteArray\"></ImageItem>\n </div>\n </div>\n <PaginationBar\n :current-page=\"currentPage\"\n :last-page=\"lastPage\"\n @onPageChange=\"pageChange\"\n />\n <button\n v-show=\"deleteArray.length\"\n @click=\"deleteImages(deleteArray)\"\n class=\"fixed bottom-0 right-0 p-1 bg-blue-300\"\n >\n Delete\n </button>\n </section>\n</template>\n\n<script>\nimport ImageItem from \"@/components/ImageItem.vue\";\nimport PaginationBar from \"@/components/PaginationBar.vue\";\nimport { mapState, mapActions } from \"vuex\";\n\nexport default {\n components: {\n ImageItem,\n PaginationBar,\n },\n data: () => {\n return {\n deleteArray: [],\n currentPage: 0,\n lastPage: 0,\n };\n },\n computed: {\n ...mapState([\"stateUser\", \"stateImageSnowflakes\"]),\n },\n async created() {\n this.lastPage = Number(await this.getLastPage());\n this.pageChange();\n },\n methods: {\n async pageChange() {\n this.currentPage = Number(\n window.location.pathname.split(\"/\").pop().match(/^\\d+$/)\n );\n window.scrollTo(0, 0);\n this.setStateImageSnowflakes(await this.getSnowflakes(this.currentPage));\n },\n async getSnowflakes(pageEntry) {\n const response = await fetch(`/api/image/page/${pageEntry}/`);\n const snowflakes = await response.json();\n return snowflakes;\n },\n async getLastPage() {\n const response = await fetch(\"/api/image/page\");\n const lastPage = await response.text();\n return lastPage;\n },\n appendToDeleteArray(...args) {\n const [checked, hash] = args;\n checked\n ? this.deleteArray.push(hash)\n : this.deleteArray.splice(this.deleteArray.indexOf(hash), 1);\n },\n deleteImages(deleteArray) {\n const options = {\n method: \"DELETE\",\n headers: { secret: this.stateUser.secret },\n };\n for (let i = 0; i < deleteArray.length; i++) {\n fetch(`/api/image/${deleteArray[i]}`, options);\n }\n this.deleteArray = [];\n },\n ...mapActions([\"setStateImageSnowflakes\"]),\n },\n};\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageList.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImageList.vue?vue&type=template&id=250650ed&\"\nimport script from \"./ImageList.vue?vue&type=script&lang=js&\"\nexport * from \"./ImageList.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',{staticClass:\"h-48 m-4 border-dotted border-4 border-gray-400\",on:{\"drop\":function($event){$event.preventDefault();_vm.updateWrapper($event);\n $event.currentTarget.classList.remove('bg-gray-200');},\"dragover\":function($event){$event.preventDefault();return $event.currentTarget.classList.add('bg-gray-200')},\"dragleave\":function($event){$event.preventDefault();return $event.currentTarget.classList.remove('bg-gray-200')}}},[_c('div',{staticClass:\"relative h-full\"},[_c('input',{ref:\"imageInput\",staticClass:\"h-full w-full opacity-0 absolute z-10 cursor-pointer\",attrs:{\"type\":\"file\",\"accept\":\"image/png, image/jpeg,\\n image/gif\",\"multiple\":\"\"},on:{\"change\":function($event){return _vm.updateWrapper()}}}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.imageList.length),expression:\"!imageList.length\"}],staticClass:\"\\n h-full\\n font-semibold\\n opacity-25\\n flex\\n justify-center\\n items-center\\n \"},[_vm._v(\" Drag and drop images here or click here to browse. \")]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.imageList.length),expression:\"imageList.length\"}],staticClass:\"h-full flex flex-row flex-wrap content-start overflow-y-auto\"},_vm._l((_vm.previews),function(preview,index){return _c('img',{key:index,staticClass:\"max-h-28 relative z-10\",attrs:{\"src\":preview.url,\"alt\":\"\"},on:{\"click\":function($event){return _vm.removeImage(preview.image)}}})}),0)])]),_c('div',{staticClass:\"flex flex-col items-center m-4\"},[(_vm.invalidType)?_c('WarningBox',{on:{\"click\":function($event){_vm.invalidType = false}}},[_vm._v(\" Please upload PNG, JPEG or GIF image only. \")]):_vm._e(),_c('button',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.imageList.length),expression:\"imageList.length\"}],staticClass:\"\\n border border-gray-500\\n p-2\\n rounded\\n mx-auto\\n font-semibold\\n text-gray-800\\n hover:bg-gray-800 hover:text-gray-100\\n \",on:{\"click\":_vm.submitImage}},[_vm._v(\" Submit \")])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"\\n p-5\\n m-2\\n font-semibold\\n bg-red-400\\n ring-2 ring-red-500\\n rounded\\n text-gray-50\\n relative\\n max-w-xs\\n whitespace-normal\\n \"},[_vm._t(\"default\"),_c('XCircle',{staticClass:\"\\n absolute\\n top-0.5\\n right-0.5\\n stroke-current\\n text-red-600\\n opacity-40\\n hover:opacity-75\\n \",nativeOn:{\"click\":function($event){return _vm.$emit('click')}}})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('svg',{attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":_vm.width,\"height\":_vm.height,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"#000000\",\"stroke-width\":\"2\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\"}},[_c('circle',{attrs:{\"cx\":\"12\",\"cy\":\"12\",\"r\":\"10\"}}),_c('line',{attrs:{\"x1\":\"15\",\"y1\":\"9\",\"x2\":\"9\",\"y2\":\"15\"}}),_c('line',{attrs:{\"x1\":\"9\",\"y1\":\"9\",\"x2\":\"15\",\"y2\":\"15\"}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n :width=\"width\"\n :height=\"height\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"#000000\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\"></circle>\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\"></line>\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\"></line>\n </svg>\n</template>\n\n<script>\nexport default {\n props: {\n width: {\n default: 24,\n },\n height: {\n default: 24,\n },\n },\n};\n</script>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./IconXCircle.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./IconXCircle.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./IconXCircle.vue?vue&type=template&id=5479a6fd&\"\nimport script from \"./IconXCircle.vue?vue&type=script&lang=js&\"\nexport * from \"./IconXCircle.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div\n class=\"\n p-5\n m-2\n font-semibold\n bg-red-400\n ring-2 ring-red-500\n rounded\n text-gray-50\n relative\n max-w-xs\n whitespace-normal\n \"\n >\n <slot></slot>\n <XCircle\n @click.native=\"$emit('click')\"\n class=\"\n absolute\n top-0.5\n right-0.5\n stroke-current\n text-red-600\n opacity-40\n hover:opacity-75\n \"\n ></XCircle>\n </div>\n</template>\n\n<script>\nimport XCircle from \"@/components/icons/IconXCircle.vue\";\nexport default {\n components: {\n XCircle,\n },\n};\n</script>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WarningBox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./WarningBox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./WarningBox.vue?vue&type=template&id=4b591be2&\"\nimport script from \"./WarningBox.vue?vue&type=script&lang=js&\"\nexport * from \"./WarningBox.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <div\n class=\"h-48 m-4 border-dotted border-4 border-gray-400\"\n @drop.prevent=\"\n updateWrapper($event);\n $event.currentTarget.classList.remove('bg-gray-200');\n \"\n @dragover.prevent=\"$event.currentTarget.classList.add('bg-gray-200')\"\n @dragleave.prevent=\"$event.currentTarget.classList.remove('bg-gray-200')\"\n >\n <div class=\"relative h-full\">\n <input\n type=\"file\"\n ref=\"imageInput\"\n accept=\"image/png, image/jpeg,\n image/gif\"\n @change=\"updateWrapper()\"\n multiple\n class=\"h-full w-full opacity-0 absolute z-10 cursor-pointer\"\n />\n <div\n v-show=\"!imageList.length\"\n class=\"\n h-full\n font-semibold\n opacity-25\n flex\n justify-center\n items-center\n \"\n >\n Drag and drop images here or click here to browse.\n </div>\n <div\n v-show=\"imageList.length\"\n class=\"h-full flex flex-row flex-wrap content-start overflow-y-auto\"\n >\n <img\n v-for=\"(preview, index) in previews\"\n :key=\"index\"\n :src=\"preview.url\"\n @click=\"removeImage(preview.image)\"\n alt=\"\"\n class=\"max-h-28 relative z-10\"\n />\n </div>\n </div>\n </div>\n <div class=\"flex flex-col items-center m-4\">\n <WarningBox v-if=\"invalidType\" @click=\"invalidType = false\">\n Please upload PNG, JPEG or GIF image only.\n </WarningBox>\n <button\n v-show=\"imageList.length\"\n @click=\"submitImage\"\n class=\"\n border border-gray-500\n p-2\n rounded\n mx-auto\n font-semibold\n text-gray-800\n hover:bg-gray-800 hover:text-gray-100\n \"\n >\n Submit\n </button>\n </div>\n </div>\n</template>\n\n<script>\nimport { mapActions, mapState } from \"vuex\";\nimport WarningBox from \"@/components/WarningBox.vue\";\n\nexport default {\n components: {\n WarningBox,\n },\n data: () => {\n return {\n imageList: [],\n invalidType: false,\n };\n },\n computed: {\n previews: function () {\n let tempArray = [];\n this.imageList.forEach((image) =>\n tempArray.push({ url: URL.createObjectURL(image), image })\n );\n return tempArray;\n },\n ...mapState([\"stateUser\"]),\n },\n methods: {\n updateWrapper(event) {\n this.checkImageType(event)\n ? this.updateImageList(event)\n : (this.$refs.imageInput.value = \"\");\n },\n updateImageList(event) {\n this.imageList = this.imageList.concat(\n event ? [...event.dataTransfer.files] : [...this.$refs.imageInput.files]\n );\n },\n checkImageType(event) {\n const acceptedTypes = [\"image/png\", \"image/jpeg\", \"image/gif\"];\n let imageList = event\n ? [...event.dataTransfer.files]\n : [...this.$refs.imageInput.files];\n for (let i = 0; i < imageList.length; i++) {\n if (!acceptedTypes.includes(imageList[i].type)) {\n this.invalidType = true;\n return false;\n }\n }\n this.invalidType = false;\n return true;\n },\n removeImage(image) {\n this.imageList.splice(this.imageList.indexOf(image), 1);\n },\n submitImage() {\n let formData = new FormData();\n for (let i = 0; i < this.imageList.length; i++) {\n formData.set(\"image\", this.imageList[i]);\n this.postImage(formData);\n }\n // Clean up\n this.invalidType = false;\n this.imageList = [];\n },\n async postImage(fd) {\n try {\n const options = {\n method: \"POST\",\n headers: {\n secret: this.stateUser.secret,\n },\n body: fd,\n };\n const response = await fetch(\"/api/image\", options);\n const data = await response.json();\n this.addStateImageSnowflake(data.snowflake);\n } catch {\n (error) => console.error(error);\n }\n },\n ...mapActions([\"addStateImageSnowflake\"]),\n },\n};\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageUpload.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageUpload.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImageUpload.vue?vue&type=template&id=b99b0820&\"\nimport script from \"./ImageUpload.vue?vue&type=script&lang=js&\"\nexport * from \"./ImageUpload.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('div',[_vm._v(\"Add tag/Change tag type\")]),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.tag),expression:\"tag\"}],attrs:{\"placeholder\":\"Tag to add\"},domProps:{\"value\":(_vm.tag)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.tag=$event.target.value}}}),_c('select',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.tagType),expression:\"tagType\"}],on:{\"change\":function($event){var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return val}); _vm.tagType=$event.target.multiple ? $$selectedVal : $$selectedVal[0]}}},[_c('option',{attrs:{\"disabled\":\"\"}},[_vm._v(\"Tag type\")]),_c('option',{attrs:{\"value\":\"artist\"}},[_vm._v(\"Artist\")]),_c('option',{attrs:{\"value\":\"character\"}},[_vm._v(\"Character\")]),_c('option',{attrs:{\"value\":\"copyright\"}},[_vm._v(\"Copyright\")]),_c('option',{attrs:{\"value\":\"generic\"}},[_vm._v(\"Generic\")]),_c('option',{attrs:{\"value\":\"group\"}},[_vm._v(\"Group\")]),_c('option',{attrs:{\"value\":\"meta\"}},[_vm._v(\"Meta\")])])]),_c('div',[_c('button',{attrs:{\"disabled\":_vm.tagIncorrect},on:{\"click\":function($event){_vm.setTag();\n _vm.setType();\n _vm.resetTagAndType();}}},[_vm._v(\" Submit \")])]),(_vm.tagIncorrect)?_c('div',[_vm._v(\" Tag incorrect. Make sure your tag doesn't exceed 128 characters and matches \"),_c('b',[_vm._v(\"/^[a-z0-9()_-]*$/g\")])]):_vm._e(),_c('div',[_vm._v(\"Type: \"+_vm._s(_vm.tagType)+\", Tag: \"+_vm._s(_vm.tag))])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <div>Add tag/Change tag type</div>\n <div>\n <input v-model=\"tag\" placeholder=\"Tag to add\" />\n <select v-model=\"tagType\">\n <option disabled>Tag type</option>\n <option value=\"artist\">Artist</option>\n <option value=\"character\">Character</option>\n <option value=\"copyright\">Copyright</option>\n <option value=\"generic\">Generic</option>\n <option value=\"group\">Group</option>\n <option value=\"meta\">Meta</option>\n </select>\n </div>\n <div>\n <button\n @click=\"\n setTag();\n setType();\n resetTagAndType();\n \"\n :disabled=\"tagIncorrect\"\n >\n Submit\n </button>\n </div>\n <div v-if=\"tagIncorrect\">\n Tag incorrect. Make sure your tag doesn't exceed 128 characters and\n matches <b>/^[a-z0-9()_-]*$/g</b>\n </div>\n <div>Type: {{ tagType }}, Tag: {{ tag }}</div>\n </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\nexport default {\n data: () => {\n return {\n tag: \"\",\n tagType: \"generic\",\n };\n },\n computed: {\n tagIncorrect: function () {\n const regex = /^[a-z0-9()_-]*$/g;\n if (!this.tag.match(regex) || this.tag.length > 128) {\n return true;\n }\n return false;\n },\n ...mapState([\"stateUser\"]),\n },\n methods: {\n setTag() {\n fetch(`/api/tag/${this.tag}`, {\n method: \"PUT\",\n headers: {\n secret: this.stateUser.secret,\n },\n })\n .then((response) => {\n console.log(response);\n })\n .catch((error) => console.error(error));\n },\n setType() {\n let options = {\n method: \"PATCH\",\n headers: {\n \"Content-Type\": \"application/json\",\n secret: this.stateUser.secret,\n },\n body: JSON.stringify({ type: this.tagType }),\n };\n fetch(`/api/tag/${this.tag}/info`, options)\n .then((response) => console.log(response))\n .catch((error) => console.error(error));\n },\n resetTagAndType() {\n this.tag = \"\";\n this.tagType = \"generic\";\n },\n },\n};\n</script>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TagCreation.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TagCreation.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TagCreation.vue?vue&type=template&id=6c8cff3c&\"\nimport script from \"./TagCreation.vue?vue&type=script&lang=js&\"\nexport * from \"./TagCreation.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(!_vm.stateUser.id)?_c('div',[(!_vm.authenticating)?_c('button',{staticClass:\"\\n hover:text-gray-600\\n focus:outline-none\\n text-gray-800\\n font-semibold\\n p-2\\n \",on:{\"click\":function($event){_vm.authenticating = true}}},[_vm._v(\" Authenticate \")]):_vm._e(),(_vm.authenticating)?_c('div',[(_vm.authenticationFailed)?_c('WarningBox',{on:{\"click\":function($event){_vm.authenticationFailed = false}}},[_vm._v(\" Authentication failed. Please check your secret token. \")]):_vm._e(),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.secret),expression:\"secret\"}],staticClass:\"\\n border border-transparent\\n rounded\\n m-4\\n p-1\\n shadow-inner\\n bg-gray-200\\n focus:ring-2 focus:ring-gray-400\\n \",attrs:{\"type\":\"text\",\"placeholder\":\"Secret token\"},domProps:{\"value\":(_vm.secret)},on:{\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }_vm.authenticate(_vm.secret.trim())},\"input\":function($event){if($event.target.composing){ return; }_vm.secret=$event.target.value}}}),_c('span',[_c('button',{on:{\"click\":function($event){_vm.authenticate(_vm.secret.trim())}}},[_c('Checkmark',{staticClass:\"login-button\",attrs:{\"width\":\"30\",\"height\":\"30\"}})],1),_c('button',{on:{\"click\":function($event){_vm.authenticating = false;\n _vm.authenticationFailed = false;\n _vm.secret = '';}}},[_c('XCircle',{staticClass:\"login-button\",attrs:{\"width\":\"30\",\"height\":\"30\"}})],1)])],1):_vm._e()]):_c('div',{staticClass:\"text-lg ml-1 mb-1\"},[_vm._v(\" Welcome, \"+_vm._s(_vm.stateUser.username)+\" \")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('svg',{attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":_vm.width,\"height\":_vm.height,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"#000000\",\"stroke-width\":\"2\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\"}},[_c('path',{attrs:{\"d\":\"M22 11.08V12a10 10 0 1 1-5.93-9.14\"}}),_c('polyline',{attrs:{\"points\":\"22 4 12 14.01 9 11.01\"}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n :width=\"width\"\n :height=\"height\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"#000000\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\"></path>\n <polyline points=\"22 4 12 14.01 9 11.01\"></polyline>\n </svg>\n</template>\n\n<script>\nexport default {\n props: {\n width: {\n default: 24,\n },\n height: {\n default: 24,\n },\n },\n};\n</script>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./IconCheckmark.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./IconCheckmark.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./IconCheckmark.vue?vue&type=template&id=05c13968&\"\nimport script from \"./IconCheckmark.vue?vue&type=script&lang=js&\"\nexport * from \"./IconCheckmark.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <div v-if=\"!stateUser.id\">\n <button\n v-if=\"!authenticating\"\n @click=\"authenticating = true\"\n class=\"\n hover:text-gray-600\n focus:outline-none\n text-gray-800\n font-semibold\n p-2\n \"\n >\n Authenticate\n </button>\n <div v-if=\"authenticating\">\n <WarningBox\n v-if=\"authenticationFailed\"\n @click=\"authenticationFailed = false\"\n >\n Authentication failed. Please check your secret token.\n </WarningBox>\n <input\n type=\"text\"\n placeholder=\"Secret token\"\n v-model=\"secret\"\n @keyup.enter=\"authenticate(secret.trim())\"\n class=\"\n border border-transparent\n rounded\n m-4\n p-1\n shadow-inner\n bg-gray-200\n focus:ring-2 focus:ring-gray-400\n \"\n />\n <span>\n <button @click=\"authenticate(secret.trim())\">\n <Checkmark width=\"30\" height=\"30\" class=\"login-button\"></Checkmark>\n </button>\n <button\n @click=\"\n authenticating = false;\n authenticationFailed = false;\n secret = '';\n \"\n >\n <XCircle width=\"30\" height=\"30\" class=\"login-button\"></XCircle>\n </button>\n </span>\n </div>\n </div>\n <div v-else class=\"text-lg ml-1 mb-1\">\n Welcome, {{ stateUser.username }}\n </div>\n </div>\n</template>\n\n<script>\nimport { mapActions, mapState } from \"vuex\";\nimport Checkmark from \"@/components/icons/IconCheckmark.vue\";\nimport XCircle from \"@/components/icons/IconXCircle.vue\";\nimport WarningBox from \"@/components/WarningBox.vue\";\n\nexport default {\n components: {\n Checkmark,\n XCircle,\n WarningBox,\n },\n data: function () {\n return {\n authenticating: false,\n authenticationFailed: false,\n secret: \"\",\n };\n },\n computed: {\n ...mapState([\"stateUser\"]),\n },\n methods: {\n async authenticate(secret) {\n try {\n const response = await fetch(`/api/user/this`, {\n headers: { secret: secret },\n });\n const data = await response.json();\n if (response.ok) {\n this.saveStateUser({\n id: data.id,\n privileged: data.privileged,\n username: data.username,\n secret,\n });\n } else {\n this.authenticationFailed = true;\n }\n } catch {\n (error) => console.error(\"Something went terribly wrong... \", error);\n }\n },\n ...mapActions([\"saveStateUser\"]),\n },\n};\n</script>\n\n<style lang=\"postcss\" scoped>\n.login-button {\n @apply stroke-current text-gray-600 hover:text-gray-800 inline-block ml-2;\n}\n</style>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserAuthentication.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserAuthentication.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UserAuthentication.vue?vue&type=template&id=b6e9e1e8&scoped=true&\"\nimport script from \"./UserAuthentication.vue?vue&type=script&lang=js&\"\nexport * from \"./UserAuthentication.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserAuthentication.vue?vue&type=style&index=0&id=b6e9e1e8&lang=postcss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b6e9e1e8\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('svg',{attrs:{\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":_vm.width,\"height\":_vm.height,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"#000000\",\"stroke-width\":\"2\",\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\"}},[_c('path',{attrs:{\"d\":\"M13 17l5-5-5-5M6 17l5-5-5-5\"}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n :width=\"width\"\n :height=\"height\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"#000000\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M13 17l5-5-5-5M6 17l5-5-5-5\" />\n </svg>\n</template>\n\n<script>\nexport default {\n props: {\n width: {\n default: 24,\n },\n height: {\n default: 24,\n },\n },\n};\n</script>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./IconChevronsRight.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./IconChevronsRight.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./IconChevronsRight.vue?vue&type=template&id=603ce9fc&\"\nimport script from \"./IconChevronsRight.vue?vue&type=script&lang=js&\"\nexport * from \"./IconChevronsRight.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div class=\"flex flex-row\">\n <section\n v-show=\"!sideBarHidden\"\n class=\"flex flex-col sticky top-0 h-screen w-1/3\"\n >\n <button @click=\"sideBarHidden = true\" class=\"self-end mt-2\">\n <IconXCircle\n class=\"stroke-current text-gray-500 hover:text-gray-600\"\n ></IconXCircle>\n </button>\n <TagCreation></TagCreation>\n <UserAuthentication class=\"absolute bottom-0\"></UserAuthentication>\n </section>\n <button\n v-show=\"sideBarHidden\"\n @click=\"sideBarHidden = false\"\n class=\"self-start sticky top-0\"\n >\n <IconChevronsRight\n class=\"mt-1 stroke-current text-gray-500 hover:text-gray-600\"\n width=\"27\"\n height=\"27\"\n ></IconChevronsRight>\n </button>\n <ImageList></ImageList>\n </div>\n</template>\n\n<script>\nimport ImageList from \"@/components/ImageList.vue\";\nimport ImageUpload from \"@/components/ImageUpload.vue\";\nimport TagCreation from \"@/components/TagCreation.vue\";\nimport UserAuthentication from \"@/components/UserAuthentication.vue\";\nimport IconXCircle from \"@/components/icons/IconXCircle.vue\";\nimport IconChevronsRight from \"@/components/icons/IconChevronsRight.vue\";\n\nexport default {\n components: {\n ImageList,\n ImageUpload,\n TagCreation,\n UserAuthentication,\n IconXCircle,\n IconChevronsRight,\n },\n data: function () {\n return {\n sideBarHidden: false,\n };\n },\n};\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Home.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Home.vue?vue&type=template&id=5e4cc451&\"\nimport script from \"./Home.vue?vue&type=script&lang=js&\"\nexport * from \"./Home.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('image-upload')],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <image-upload></image-upload>\n </div>\n</template>\n\n<script>\nimport ImageUpload from \"../components/ImageUpload.vue\";\n\nexport default {\n components: {\n ImageUpload,\n },\n};\n</script>","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UploadNew.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UploadNew.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./UploadNew.vue?vue&type=template&id=fb433ab6&\"\nimport script from \"./UploadNew.vue?vue&type=script&lang=js&\"\nexport * from \"./UploadNew.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"flex flex-row\"},[_c('section',{staticClass:\"flex flex-col sticky top-0 h-screen w-1/3\"},[_c('div',[_vm._v(\" Tags: \"),_vm._l((_vm.imageTags),function(imageTag){return _c('span',[_vm._v(\" \"+_vm._s(imageTag)+\" \")])})],2)]),_c('div',{attrs:{\"id\":\"image-container\"}},[_c('img',{attrs:{\"src\":(\"/api/image/\" + _vm.flake + \"/file\"),\"alt\":\"\"}})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"flex flex-row\">\n <section class=\"flex flex-col sticky top-0 h-screen w-1/3\">\n <div>\n Tags:\n <span v-for=\"imageTag in imageTags\">\n {{ imageTag }}\n </span>\n </div>\n </section>\n <div id=\"image-container\">\n <img :src=\"`/api/image/${flake}/file`\" alt=\"\" />\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n data: function () {\n return {\n imageTags: Array,\n };\n },\n computed: {\n flake: () => {\n return window.location.pathname.split(\"/\").pop();\n },\n },\n methods: {\n async getImageTags() {\n const response = await fetch(`/api/image/${this.flake}/tag`);\n const imageTags = await response.json();\n return imageTags;\n },\n },\n async created() {\n this.imageTags = await this.getImageTags();\n },\n};\n</script>\n\n<style scoped>\nimg {\n height: 100%;\n}\n#image-container {\n height: 100vh;\n display: flex;\n justify-content: center;\n}\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageView.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageView.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImageView.vue?vue&type=template&id=b47bc4fe&scoped=true&\"\nimport script from \"./ImageView.vue?vue&type=script&lang=js&\"\nexport * from \"./ImageView.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ImageView.vue?vue&type=style&index=0&id=b47bc4fe&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b47bc4fe\",\n null\n \n)\n\nexport default component.exports","import Vue from \"vue\";\nimport VueRouter from \"vue-router\";\nimport Home from \"../views/Home.vue\";\nimport UploadNew from \"../views/UploadNew.vue\"\nimport ImageView from \"../views/ImageView.vue\";\n\nVue.use(VueRouter);\n\nconst routes = [\n {\n path: \"/\",\n name: \"Home\",\n component: Home,\n },\n {\n path: \"/upload\",\n name: \"UploadNew\",\n component: UploadNew,\n },\n {\n path: \"/:page\",\n name: \"Page\",\n component: Home,\n },\n {\n path: \"/image/:hash\",\n name: \"ImageView\",\n component: ImageView,\n },\n];\n\nconst router = new VueRouter({\n mode: \"history\",\n base: process.env.BASE_URL,\n routes,\n});\n\nexport default router;\n","import Vue from \"vue\";\nimport Vuex from \"vuex\";\nimport VuexPersistedState from \"vuex-persistedstate\";\n\nVue.use(Vuex);\nconst vuexLocal = VuexPersistedState({\n key: \"imageboard\",\n paths: [\"stateUser\"],\n});\n\nexport default new Vuex.Store({\n state: {\n stateImageSnowflakes: [],\n stateUser: {\n id: null,\n privileged: null,\n username: null,\n secret: null,\n },\n },\n mutations: {\n setStateImageSnowflakes(state, array) {\n state.stateImageSnowflakes = array;\n },\n addStateImageSnowflake(state, hash) {\n state.stateImageSnowflakes.push(hash);\n },\n saveStateUser(state, payload) {\n state.stateUser.id = payload.id;\n state.stateUser.privileged = payload.privileged;\n state.stateUser.username = payload.username;\n state.stateUser.secret = payload.secret;\n },\n },\n actions: {\n setStateImageSnowflakes(context, payload) {\n context.commit(\"setStateImageSnowflakes\", payload);\n },\n addStateImageSnowflake(context, payload) {\n context.commit(\"addStateImageSnowflake\", payload);\n },\n saveStateUser(context, payload) {\n context.commit(\"saveStateUser\", payload);\n },\n },\n modules: {},\n plugins: [vuexLocal],\n});\n","import Vue from 'vue'\nimport App from './App.vue'\nimport router from './router'\nimport store from './store'\nimport './assets/css/tailwind.css'\n\nVue.config.productionTip = false\n\nnew Vue({\n router,\n store,\n render: h => h(App)\n}).$mount('#app')\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageView.vue?vue&type=style&index=0&id=b47bc4fe&scoped=true&lang=css&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageItem.vue?vue&type=style&index=0&id=58445a1f&scoped=true&lang=css&\""],"sourceRoot":""}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment