From 62a14ad82203c1183f7262390e462d6d3fa6596a Mon Sep 17 00:00:00 2001 From: Taly Date: Sat, 2 Dec 2017 18:10:37 +0300 Subject: [PATCH 1/2] Update api link style --- public/app/css/pages/index.css | 12 +++++++++++- public/build/bundle.css | 2 +- public/build/bundle.js.map | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/public/app/css/pages/index.css b/public/app/css/pages/index.css index 538ca86..90fceb8 100644 --- a/public/app/css/pages/index.css +++ b/public/app/css/pages/index.css @@ -103,7 +103,17 @@ a { color: #8051ff; - text-decoration-line: none; + text-decoration: none; + position: relative; + + &::after { + content: ''; + border-bottom: 2px solid #8051ff; + position: absolute; + left: 0; + top: 100%; + width: 100%; + } } } diff --git a/public/build/bundle.css b/public/build/bundle.css index ccbfbce..bfd1b13 100644 --- a/public/build/bundle.css +++ b/public/build/bundle.css @@ -1,4 +1,4 @@ .cdx-notifies{position:fixed;z-index:2;bottom:20px;left:20px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.cdx-notify{position:relative;width:220px;margin-top:15px;padding:13px 16px;background:#fff;-webkit-box-shadow:0 11px 17px 0 rgba(23,32,61,.13);box-shadow:0 11px 17px 0 rgba(23,32,61,.13);border-radius:5px;font-size:14px;line-height:1.4em;word-wrap:break-word}.cdx-notify:before{content:"";position:absolute;display:block;top:0;left:0;width:3px;height:calc(100% - 6px);margin:3px;border-radius:5px;background:transparent}.cdx-notify__cross{position:absolute;top:5px;right:5px;width:10px;height:10px;padding:5px;opacity:.54;cursor:pointer}.cdx-notify__cross:after,.cdx-notify__cross:before{content:"";position:absolute;left:9px;top:5px;height:12px;width:2px;background:#575d67}.cdx-notify__cross:before{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.cdx-notify__cross:after{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.cdx-notify__cross:hover{opacity:1}.cdx-notify__btns-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;margin-top:5px}.cdx-notify__button{border:none;border-radius:3px;font-size:13px;padding:5px 10px;cursor:pointer}.cdx-notify__button:last-child{margin-left:10px}.cdx-notify__button--cancel{background:#f2f5f7;-webkit-box-shadow:0 2px 1px 0 rgba(16,19,29,0);box-shadow:0 2px 1px 0 rgba(16,19,29,0);color:#656b7c}.cdx-notify__button--cancel:hover{background:#eee}.cdx-notify__button--confirm{background:#34c992;-webkit-box-shadow:0 1px 1px 0 rgba(18,49,35,.05);box-shadow:0 1px 1px 0 rgba(18,49,35,.05);color:#fff}.cdx-notify__button--confirm:hover{background:#33b082}.cdx-notify__input{max-width:130px;padding:5px 10px;background:#f7f7f7;border:0;border-radius:3px;font-size:13px;color:#656b7c;outline:none}.cdx-notify__input::-webkit-input-placeholder{color:#656b7c}.cdx-notify__input:-ms-input-placeholder,.cdx-notify__input::-ms-input-placeholder{color:#656b7c}.cdx-notify__input::placeholder{color:#656b7c}.cdx-notify__input:focus::-webkit-input-placeholder{color:rgba(101,107,124,.3)}.cdx-notify__input:focus:-ms-input-placeholder,.cdx-notify__input:focus::-ms-input-placeholder{color:rgba(101,107,124,.3)}.cdx-notify__input:focus::placeholder{color:rgba(101,107,124,.3)}@-webkit-keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(.3);transform:scale(.3)}50%{opacity:1;-webkit-transform:scale(1.05);transform:scale(1.05)}70%{-webkit-transform:scale(.9);transform:scale(.9)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(.3);transform:scale(.3)}50%{opacity:1;-webkit-transform:scale(1.05);transform:scale(1.05)}70%{-webkit-transform:scale(.9);transform:scale(.9)}to{-webkit-transform:scale(1);transform:scale(1)}}.cdx-notify--bounce-in{-webkit-animation-name:bounceIn;animation-name:bounceIn;-webkit-animation-duration:.6s;animation-duration:.6s;-webkit-animation-iteration-count:1;animation-iteration-count:1}.cdx-notify--success{background:#fafffe}.cdx-notify--success:before{background:#41ffb1}.cdx-notify--error{background:#fffbfb}.cdx-notify--error:before{background:#fb5d5d} -/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit;font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}[hidden],template{display:none}body,html{height:100%}body{background-size:cover;background:#11173e url(/public/app/img/space-bg.jpg);background-position:50%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue;font-size:18px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:1.5em;color:#aea2d9}.js-hidden{opacity:0!important}.safari #startup{display:none}.spaceship{-webkit-animation:sniff 10s linear infinite;animation:sniff 10s linear infinite;-webkit-transform-origin:center;transform-origin:center}.spaceship__nozzle{-webkit-animation:nozzle 2s linear infinite;animation:nozzle 2s linear infinite}@-webkit-keyframes sniff{0%{-webkit-transform:rotate3d(0,0,0,0) scale(1);transform:rotate3d(0,0,0,0) scale(1)}35%{-webkit-transform:rotate3d(0,0,0,0) scale(1);transform:rotate3d(0,0,0,0) scale(1)}40%{-webkit-transform:rotate3d(-.1,.1,0,50deg) scale(.8);transform:rotate3d(-.1,.1,0,50deg) scale(.8)}45%{-webkit-transform:rotate3d(-.1,.1,0,20deg) scale(.6);transform:rotate3d(-.1,.1,0,20deg) scale(.6)}50%{-webkit-transform:rotate3d(0,0,0,0) scale(.6);transform:rotate3d(0,0,0,0) scale(.6)}85%{-webkit-transform:rotate3d(0,0,0,0) scale(.6);transform:rotate3d(0,0,0,0) scale(.6)}90%{-webkit-transform:rotate3d(-.1,.1,0,-20deg) scale(.6);transform:rotate3d(-.1,.1,0,-20deg) scale(.6)}95%{-webkit-transform:rotate3d(-.1,.1,0,-50deg) scale(.8);transform:rotate3d(-.1,.1,0,-50deg) scale(.8)}to{-webkit-transform:rotate3d(0,0,0,0) scale(1);transform:rotate3d(0,0,0,0) scale(1)}}@keyframes sniff{0%{-webkit-transform:rotate3d(0,0,0,0) scale(1);transform:rotate3d(0,0,0,0) scale(1)}35%{-webkit-transform:rotate3d(0,0,0,0) scale(1);transform:rotate3d(0,0,0,0) scale(1)}40%{-webkit-transform:rotate3d(-.1,.1,0,50deg) scale(.8);transform:rotate3d(-.1,.1,0,50deg) scale(.8)}45%{-webkit-transform:rotate3d(-.1,.1,0,20deg) scale(.6);transform:rotate3d(-.1,.1,0,20deg) scale(.6)}50%{-webkit-transform:rotate3d(0,0,0,0) scale(.6);transform:rotate3d(0,0,0,0) scale(.6)}85%{-webkit-transform:rotate3d(0,0,0,0) scale(.6);transform:rotate3d(0,0,0,0) scale(.6)}90%{-webkit-transform:rotate3d(-.1,.1,0,-20deg) scale(.6);transform:rotate3d(-.1,.1,0,-20deg) scale(.6)}95%{-webkit-transform:rotate3d(-.1,.1,0,-50deg) scale(.8);transform:rotate3d(-.1,.1,0,-50deg) scale(.8)}to{-webkit-transform:rotate3d(0,0,0,0) scale(1);transform:rotate3d(0,0,0,0) scale(1)}}@-webkit-keyframes nozzle{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.15);transform:scale(1.15)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes nozzle{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.15);transform:scale(1.15)}to{-webkit-transform:scale(1);transform:scale(1)}}.capella{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-height:100%}.capella__drag-n-drop-activator,.capella__uploading{display:none}.capella--dark{background:rgba(7,7,25,.88)}.capella--dark .capella__drag-n-drop{position:relative;border-color:#564c90}.capella--dark .capella__dark-contents{opacity:.3}.capella--dark .capella__drag-n-drop-activator{display:block;position:absolute;bottom:40px;left:50%;width:100%;-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:33px;color:#8129ff}.capella--dark .capella__drag-n-drop-activator img{display:block;margin:15px auto}.capella--loading .capella__logo{margin-bottom:10px}.capella--loading .capella__dark-contents{display:none}.capella--loading .capella__uploading{display:block}.capella--loading .capella__uploading-title{margin-bottom:12px;font-size:22px}.capella--loading .capella__uploading-progress{height:5px;width:277px;background:#0d0918;border-radius:3px;margin:13px auto}.capella--loading .capella__uploading-progress div{height:100%;background:#830cff;border-radius:3px;transition:width .4s,-webkit-transform .4s;transition:width .4s,transform .4s;transition:width .4s,transform .4s,-webkit-transform .4s}.capella--loading .capella__uploading-filename{font-size:15px}.capella__drag-n-drop{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;box-sizing:border-box;margin:30px;padding:40px 0;border:2px dashed #564c90}.capella__contents{height:470px;text-align:center}.capella__contents p{max-width:430px}.capella__contents a{color:#8051ff;-webkit-text-decoration-line:none;text-decoration-line:none}.capella__logo{display:inline-block;margin:16px auto 80px}.capella__button{padding:0 30px;margin-top:32px;border:0;border-radius:25px;background:#6c0bd1;font-family:inherit;line-height:51px;color:#fff;-webkit-appearance:none;outline:none;cursor:pointer}.capella__button,.capella__button:before{display:inline-block;vertical-align:middle}.capella__button:before{content:url(/public/app/svg/instagram-logo.svg);line-height:normal;margin:0 10px 0 -5px}.capella__button:hover{background:#6004c0}.capella__input{margin-top:40px;padding-bottom:10px;background:transparent;border-color:transparent;border-bottom:2px solid rgba(181,155,218,.44);border-radius:0;text-align:center;font-family:inherit;font-size:17px;line-height:1.3em;color:#fff;-webkit-appearance:none;outline:none}.capella__input:focus::-webkit-input-placeholder{opacity:0;transition:opacity .1s ease .1s}.capella__input::-webkit-input-placeholder{color:#b59bda}.safari .capella__uploading{margin-top:250px}@media (max-width:980px){.capella{overflow-y:scroll;overflow-x:hidden}.capella,.capella__drag-n-drop{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.capella__drag-n-drop{width:100%;height:auto;padding:20px 0;border:0 solid transparent}.capella__logo{margin-bottom:50px}.capella__button{margin:50px auto 0}.capella__contents{height:auto;padding:0 10px}.capella__contents p{margin:0 auto}.capella--loading .capella__uploading{margin-top:100px}.capella--loading .capella__uploading-progress{width:200px}}.body--black,.result{background:#101012}.result{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;height:100%;color:#59555e;font-size:14.5px}.result__contents{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;min-width:100%}.result a{color:inherit;text-decoration:none}.result a:hover{color:#fff}.result input{display:none;width:121px;background:transparent;border:0 solid transparent;color:inherit;text-align:right;outline:none}.result input:first-of-type{margin-left:10px}.result__img{height:auto;width:auto;max-height:70vh;max-width:90vw;margin:50px 0}.result__copy .result__copy-text{display:none}.result__copy svg{width:15px;height:17px;margin-right:10px;vertical-align:text-bottom}.result__copy:hover{color:#fff;cursor:pointer}.result__copy:hover svg path{fill:#fff}.result__is-copied{color:#fff}.result__is-copied svg{margin-right:10px}.result__footer{padding:0 20px;background:#101012}.result__footer-logo{margin-right:35px;vertical-align:sub}.result__footer-filters{padding:14px 0}.result__footer-about{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:14px 0;border-top:1px solid #28282e}.result__footer-link{line-height:20px}.result__footer-link:not(:first-of-type):not(:nth-of-type(2)):before{content:"";display:inline-block;vertical-align:middle;width:4px;height:4px;border-radius:50%;background:#313137;margin:0 .5em}.result__footer .codex-team{margin-left:auto;color:#fff}@media (max-width:980px){.result{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.result__is-copied{margin-left:9px}.result__is-copied svg{margin-right:6px}.result__img{-ms-flex-item-align:start;align-self:flex-start;max-width:calc(100% - 30px);height:auto;padding:0;margin:15px auto}.result__copy{display:inline-block;margin:6px 0 13px;padding:0 9px;background:#222123;line-height:33px;border-radius:2px}.result__copy .result__copy-text{display:initial}.result__copy .result__copy-link{position:absolute;top:-200%;left:13px}.result__copy svg{margin-right:5px}.result__copy:hover{color:#59555e}.result__copy:hover svg path{fill:#59555e}.result__footer{min-width:100%;padding:0 15px;box-sizing:border-box}.result__footer-filters{padding:0}.result__footer .codex-team{margin-left:0;color:inherit}.result__footer .codex-team:before{content:"";display:inline-block;vertical-align:middle;width:4px;height:4px;border-radius:50%;background:#313137;margin:0 .5em}.result__footer-logo-link{margin-right:auto}}.cdx-notifies{left:auto;right:75px;bottom:78px}@media (max-width:980px){.cdx-notifies{right:40px;bottom:40px}}.cdx-notify{border-radius:1px;font-size:15px;padding:20px 33px;color:#434152;background:#d1d7ec;width:auto}.cdx-notify__cross{display:none}.cdx-notify__warning-sign{background-image:url(/public/app/svg/warning.svg);background-repeat:no-repeat;width:23px;height:19.7px;margin-right:17px;margin-left:-8px;margin-bottom:-4px;display:inline-block} +/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit;font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}[hidden],template{display:none}body,html{height:100%}body{background-size:cover;background:#11173e url(/public/app/img/space-bg.jpg);background-position:50%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue;font-size:18px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:1.5em;color:#aea2d9}.js-hidden{opacity:0!important}.safari #startup{display:none}.spaceship{-webkit-animation:sniff 10s linear infinite;animation:sniff 10s linear infinite;-webkit-transform-origin:center;transform-origin:center}.spaceship__nozzle{-webkit-animation:nozzle 2s linear infinite;animation:nozzle 2s linear infinite}@-webkit-keyframes sniff{0%{-webkit-transform:rotate3d(0,0,0,0) scale(1);transform:rotate3d(0,0,0,0) scale(1)}35%{-webkit-transform:rotate3d(0,0,0,0) scale(1);transform:rotate3d(0,0,0,0) scale(1)}40%{-webkit-transform:rotate3d(-.1,.1,0,50deg) scale(.8);transform:rotate3d(-.1,.1,0,50deg) scale(.8)}45%{-webkit-transform:rotate3d(-.1,.1,0,20deg) scale(.6);transform:rotate3d(-.1,.1,0,20deg) scale(.6)}50%{-webkit-transform:rotate3d(0,0,0,0) scale(.6);transform:rotate3d(0,0,0,0) scale(.6)}85%{-webkit-transform:rotate3d(0,0,0,0) scale(.6);transform:rotate3d(0,0,0,0) scale(.6)}90%{-webkit-transform:rotate3d(-.1,.1,0,-20deg) scale(.6);transform:rotate3d(-.1,.1,0,-20deg) scale(.6)}95%{-webkit-transform:rotate3d(-.1,.1,0,-50deg) scale(.8);transform:rotate3d(-.1,.1,0,-50deg) scale(.8)}to{-webkit-transform:rotate3d(0,0,0,0) scale(1);transform:rotate3d(0,0,0,0) scale(1)}}@keyframes sniff{0%{-webkit-transform:rotate3d(0,0,0,0) scale(1);transform:rotate3d(0,0,0,0) scale(1)}35%{-webkit-transform:rotate3d(0,0,0,0) scale(1);transform:rotate3d(0,0,0,0) scale(1)}40%{-webkit-transform:rotate3d(-.1,.1,0,50deg) scale(.8);transform:rotate3d(-.1,.1,0,50deg) scale(.8)}45%{-webkit-transform:rotate3d(-.1,.1,0,20deg) scale(.6);transform:rotate3d(-.1,.1,0,20deg) scale(.6)}50%{-webkit-transform:rotate3d(0,0,0,0) scale(.6);transform:rotate3d(0,0,0,0) scale(.6)}85%{-webkit-transform:rotate3d(0,0,0,0) scale(.6);transform:rotate3d(0,0,0,0) scale(.6)}90%{-webkit-transform:rotate3d(-.1,.1,0,-20deg) scale(.6);transform:rotate3d(-.1,.1,0,-20deg) scale(.6)}95%{-webkit-transform:rotate3d(-.1,.1,0,-50deg) scale(.8);transform:rotate3d(-.1,.1,0,-50deg) scale(.8)}to{-webkit-transform:rotate3d(0,0,0,0) scale(1);transform:rotate3d(0,0,0,0) scale(1)}}@-webkit-keyframes nozzle{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.15);transform:scale(1.15)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes nozzle{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.15);transform:scale(1.15)}to{-webkit-transform:scale(1);transform:scale(1)}}.capella{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-height:100%}.capella__drag-n-drop-activator,.capella__uploading{display:none}.capella--dark{background:rgba(7,7,25,.88)}.capella--dark .capella__drag-n-drop{position:relative;border-color:#564c90}.capella--dark .capella__dark-contents{opacity:.3}.capella--dark .capella__drag-n-drop-activator{display:block;position:absolute;bottom:40px;left:50%;width:100%;-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:33px;color:#8129ff}.capella--dark .capella__drag-n-drop-activator img{display:block;margin:15px auto}.capella--loading .capella__logo{margin-bottom:10px}.capella--loading .capella__dark-contents{display:none}.capella--loading .capella__uploading{display:block}.capella--loading .capella__uploading-title{margin-bottom:12px;font-size:22px}.capella--loading .capella__uploading-progress{height:5px;width:277px;background:#0d0918;border-radius:3px;margin:13px auto}.capella--loading .capella__uploading-progress div{height:100%;background:#830cff;border-radius:3px;transition:width .4s,-webkit-transform .4s;transition:width .4s,transform .4s;transition:width .4s,transform .4s,-webkit-transform .4s}.capella--loading .capella__uploading-filename{font-size:15px}.capella__drag-n-drop{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;box-sizing:border-box;margin:30px;padding:40px 0;border:2px dashed #564c90}.capella__contents{height:470px;text-align:center}.capella__contents p{max-width:430px}.capella__contents a{color:#8051ff;text-decoration:none;position:relative}.capella__contents a:after{content:"";border-bottom:2px solid #8051ff;position:absolute;left:0;top:100%;width:100%}.capella__logo{display:inline-block;margin:16px auto 80px}.capella__button{padding:0 30px;margin-top:32px;border:0;border-radius:25px;background:#6c0bd1;font-family:inherit;line-height:51px;color:#fff;-webkit-appearance:none;outline:none;cursor:pointer}.capella__button,.capella__button:before{display:inline-block;vertical-align:middle}.capella__button:before{content:url(/public/app/svg/instagram-logo.svg);line-height:normal;margin:0 10px 0 -5px}.capella__button:hover{background:#6004c0}.capella__input{margin-top:40px;padding-bottom:10px;background:transparent;border-color:transparent;border-bottom:2px solid rgba(181,155,218,.44);border-radius:0;text-align:center;font-family:inherit;font-size:17px;line-height:1.3em;color:#fff;-webkit-appearance:none;outline:none}.capella__input:focus::-webkit-input-placeholder{opacity:0;transition:opacity .1s ease .1s}.capella__input::-webkit-input-placeholder{color:#b59bda}.safari .capella__uploading{margin-top:250px}@media (max-width:980px){.capella{overflow-y:scroll;overflow-x:hidden}.capella,.capella__drag-n-drop{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.capella__drag-n-drop{width:100%;height:auto;padding:20px 0;border:0 solid transparent}.capella__logo{margin-bottom:50px}.capella__button{margin:50px auto 0}.capella__contents{height:auto;padding:0 10px}.capella__contents p{margin:0 auto}.capella--loading .capella__uploading{margin-top:100px}.capella--loading .capella__uploading-progress{width:200px}}.body--black,.result{background:#101012}.result{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;height:100%;color:#59555e;font-size:14.5px}.result__contents{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;min-width:100%}.result a{color:inherit;text-decoration:none}.result a:hover{color:#fff}.result input{display:none;width:121px;background:transparent;border:0 solid transparent;color:inherit;text-align:right;outline:none}.result input:first-of-type{margin-left:10px}.result__img{height:auto;width:auto;max-height:70vh;max-width:90vw;margin:50px 0}.result__copy .result__copy-text{display:none}.result__copy svg{width:15px;height:17px;margin-right:10px;vertical-align:text-bottom}.result__copy:hover{color:#fff;cursor:pointer}.result__copy:hover svg path{fill:#fff}.result__is-copied{color:#fff}.result__is-copied svg{margin-right:10px}.result__footer{padding:0 20px;background:#101012}.result__footer-logo{margin-right:35px;vertical-align:sub}.result__footer-filters{padding:14px 0}.result__footer-about{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:14px 0;border-top:1px solid #28282e}.result__footer-link{line-height:20px}.result__footer-link:not(:first-of-type):not(:nth-of-type(2)):before{content:"";display:inline-block;vertical-align:middle;width:4px;height:4px;border-radius:50%;background:#313137;margin:0 .5em}.result__footer .codex-team{margin-left:auto;color:#fff}@media (max-width:980px){.result{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.result__is-copied{margin-left:9px}.result__is-copied svg{margin-right:6px}.result__img{-ms-flex-item-align:start;align-self:flex-start;max-width:calc(100% - 30px);height:auto;padding:0;margin:15px auto}.result__copy{display:inline-block;margin:6px 0 13px;padding:0 9px;background:#222123;line-height:33px;border-radius:2px}.result__copy .result__copy-text{display:initial}.result__copy .result__copy-link{position:absolute;top:-200%;left:13px}.result__copy svg{margin-right:5px}.result__copy:hover{color:#59555e}.result__copy:hover svg path{fill:#59555e}.result__footer{min-width:100%;padding:0 15px;box-sizing:border-box}.result__footer-filters{padding:0}.result__footer .codex-team{margin-left:0;color:inherit}.result__footer .codex-team:before{content:"";display:inline-block;vertical-align:middle;width:4px;height:4px;border-radius:50%;background:#313137;margin:0 .5em}.result__footer-logo-link{margin-right:auto}}.cdx-notifies{left:auto;right:75px;bottom:78px}@media (max-width:980px){.cdx-notifies{right:40px;bottom:40px}}.cdx-notify{border-radius:1px;font-size:15px;padding:20px 33px;color:#434152;background:#d1d7ec;width:auto}.cdx-notify__cross{display:none}.cdx-notify__warning-sign{background-image:url(/public/app/svg/warning.svg);background-repeat:no-repeat;width:23px;height:19.7px;margin-right:17px;margin-left:-8px;margin-bottom:-4px;display:inline-block} /*# sourceMappingURL=bundle.css.map*/ \ No newline at end of file diff --git a/public/build/bundle.js.map b/public/build/bundle.js.map index 3803c34..f3ca5ae 100644 --- a/public/build/bundle.js.map +++ b/public/build/bundle.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///public/build/bundle.js","webpack:///webpack/bootstrap bd520a1a4de5be0f8a6a","webpack:///./public/app/js/uploader.js","webpack:///./public/app/entry.js","webpack:///./public/app/js/main.js","webpack:///./public/app/js/clipboard.js","webpack:///./public/app/js/dragndrop.js","webpack:///./public/app/js/uploadScreen.js","webpack:///./node_modules/codex.ajax/lib/bundle.js","webpack:///./node_modules/codex.transport/lib/bundle.js","webpack:///./public/app/js/copyable.js","webpack:///./public/app/js/notificationToggler.js","webpack:///./public/app/js/checkForSafari.js","webpack:///./node_modules/codex-notifier/notifier.js"],"names":["capella","modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","_classCallCheck","instance","Constructor","TypeError","value","_createClass","defineProperties","target","props","length","descriptor","writable","key","protoProps","staticProps","Uploader","this","uploadUrl","uploadFileButton","document","getElementById","uploadLinkField","addEventListener","uploadByTransport","bind","uploadByUrl","transport","init","url","multiple","accept","data","before","progress","success","error","after","e","keyCode","preventDefault","upload","link","file","formData","FormData","currentFileName","append","ajax","type","filename","File","uploadScreen","show","percentage","response","console","log","window","location","href","id","hide","notifier","message","time","default","Clipboard","DNDFileUploader","UploadScreen","uploader","copyable","notificationToggler","checkForSafari","clipboard","dnd","body","pasteFromClipboard","event","clipboardData","originalEvent","items","getData","blob","stopPropagation","regex","match","indexOf","getAsFile","reader","FileReader","onload","uploadBlob","readAsDataURL","wrapper","querySelector","dragover","drageleave","drop","classList","add","remove","dataTransfer","files","mainContainer","progressBar","loadingClass","textContent","percents","style","width","t","r","a","XMLHttpRequest","ActiveXObject","u","async","test","withCredentials","open","f","parseInt","loaded","total","setRequestHeader","onreadystatechange","readyState","responseText","JSON","parse","status","send","Symbol","iterator","constructor","input","click","y","b","createElement","setAttribute","NAMES","authorized","prepareElement","element","copiedCallback","elementClicked","authorize","authorizedCopy","selection","getSelection","range","createRange","selectNodeContents","removeAllRanges","addRange","execCommand","CopiedEvent","CustomEvent","bubbles","cancelable","detail","toString","dispatchEvent","elems","getElementsByName","authorizedElems","clipboardButton","toggleCopiedIcon","CSS","notificationClass","notificationHideClass","notificationElement","notificationIsVisibleTimer","ctrlKey","metaKey","which","clearTimeout","setTimeout","userAgent","navigator","notification","crossBtn","okBtn","cancelBtn","btn","btnsWrapper","innerHTML","appendChild","alert","confirm","cancelHandler","okHandler","okText","cancelText","prompt","placeholder","inputType"],"mappings":"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","file":"./public/build/bundle.js","sourcesContent":["var capella =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\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, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\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 = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 1);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * @class Uploader\n * Handle images uploading\n *\n * @property {String} uploadUrl — url to upload images\n * @property {HTMLElement} uploadFilButton — transport initialization trigger\n * @property {HTMLElement} uploadLinkField — input to insert image link\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Uploader = function () {\n /**\n * Uploader class constructor. Get needed elements and bind events\n */\n function Uploader() {\n _classCallCheck(this, Uploader);\n\n this.uploadUrl = '/upload';\n this.uploadFileButton = document.getElementById('uploadFileButton');\n this.uploadLinkField = document.getElementById('uploadLinkField');\n\n if (this.uploadFileButton) {\n this.uploadFileButton.addEventListener('click', this.uploadByTransport.bind(this), false);\n }\n\n if (this.uploadLinkField) {\n this.uploadLinkField.addEventListener('keydown', this.uploadByUrl.bind(this), false);\n }\n }\n\n /**\n * Init codex.transport to select image from user's computer\n */\n\n\n _createClass(Uploader, [{\n key: 'uploadByTransport',\n value: function uploadByTransport() {\n capella.transport.init({\n url: this.uploadUrl,\n multiple: false,\n accept: 'image/png, image/gif, image/jpg, image/jpeg, image/bmp',\n data: {},\n before: this.before,\n progress: this.progress,\n success: this.success,\n error: this.error,\n after: this.after\n });\n }\n\n /**\n * Handle upload by image url\n *\n * @param e\n */\n\n }, {\n key: 'uploadByUrl',\n value: function uploadByUrl(e) {\n /** Check for Enter key */\n if (e.keyCode !== 13) {\n return;\n }\n e.preventDefault();\n\n if (this.uploadLinkField) {\n this.upload({ 'link': this.uploadLinkField.value });\n }\n }\n\n /**\n * Handler to upload blob data using FormData\n *\n * @param {Blob|File} file — file to send\n */\n\n }, {\n key: 'uploadBlob',\n value: function uploadBlob(file) {\n var formData = new FormData();\n\n this.currentFileName = file.name;\n\n formData.append('file', file, file.name);\n\n this.upload(formData);\n }\n\n /**\n * Send AJAX request to uploadUrl with passed data\n *\n * @param {*} data — data to send\n */\n\n }, {\n key: 'upload',\n value: function upload(data) {\n capella.ajax.call({\n type: 'POST',\n url: this.uploadUrl,\n data: data,\n before: this.before.bind(this),\n progress: this.progress,\n success: this.success,\n error: this.error,\n after: this.after\n });\n }\n\n /**\n * Method to call before upload starts\n */\n\n }, {\n key: 'before',\n value: function before(data) {\n var filename = void 0;\n\n if (data instanceof FormData) {\n filename = this.currentFileName;\n }\n if (data && data.link) {\n filename = data.link;\n }\n if (data[0] instanceof File) {\n filename = data[0].name;\n }\n\n capella.uploadScreen.show(filename);\n }\n\n /**\n * Handle upload progress\n *\n * @param percentage — upload percentage\n */\n\n }, {\n key: 'progress',\n value: function progress(percentage) {\n percentage = 0.95 * percentage;\n capella.uploadScreen.progress(percentage);\n }\n\n /**\n * Successful upload handler\n *\n * @param {Object} response — response object\n * @param {Boolean} response.success — upload status\n * @param {String} response.url — if upload was successful, contains uploaded image url\n * @param {String} response.id — if upload was succesful, contains uploaded image id\n * @param {String} response.message — if upload failed, contains reason\n */\n\n }, {\n key: 'success',\n value: function success(response) {\n console.log(response);\n\n if (response.success) {\n capella.uploadScreen.progress(100);\n\n /** Redirect to uploaded image */\n window.location.href = '/image/' + response.id;\n } else {\n capella.uploadScreen.hide();\n }\n }\n\n /**\n * Upload error handler\n *\n * @param {Error} error — raised error\n */\n\n }, {\n key: 'error',\n value: function error(response) {\n capella.notifier.show({\n message: '' + response.message,\n time: 7000\n });\n capella.uploadScreen.hide();\n }\n\n /**\n * Method to call after upload\n */\n\n }, {\n key: 'after',\n value: function after() {}\n }]);\n\n return Uploader;\n}();\n\nexports.default = Uploader;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Require CSS build\n */\n__webpack_require__(2);\n\nmodule.exports = __webpack_require__(3);\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar capella = {};\n\nvar Uploader = __webpack_require__(0).default;\nvar Clipboard = __webpack_require__(4).default;\nvar DNDFileUploader = __webpack_require__(5).default;\nvar UploadScreen = __webpack_require__(6).default;\n\n/**\n * Require modules\n */\ncapella.ajax = __webpack_require__(7);\ncapella.transport = __webpack_require__(8);\ncapella.uploader = __webpack_require__(0);\ncapella.copyable = __webpack_require__(9);\ncapella.notificationToggler = __webpack_require__(10);\ncapella.checkForSafari = __webpack_require__(11);\ncapella.notifier = __webpack_require__(12);\n\ncapella.uploadScreen = new UploadScreen();\ncapella.uploader = new Uploader();\ncapella.clipboard = new Clipboard();\ncapella.dnd = new DNDFileUploader('.capella');\n\ncapella.init = function () {\n capella.copyable.init();\n capella.checkForSafari.init();\n};\n\nmodule.exports = capella;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Paste from clipboard module\n */\nvar Clipboard = function () {\n /**\n * Initialization of Clipboard module\n */\n function Clipboard() {\n _classCallCheck(this, Clipboard);\n\n document.body.addEventListener('paste', this.pasteFromClipboard);\n }\n\n /**\n * Pasted image from clipboard\n */\n\n\n _createClass(Clipboard, [{\n key: 'pasteFromClipboard',\n value: function pasteFromClipboard(event) {\n var clipboard = event.clipboardData || event.originalEvent.clipboardData || window.clipboardData;\n\n /**\n * items - for images\n * data - for links\n */\n var items = clipboard.items;\n var data = clipboard.getData('Text');\n var blob = null;\n\n event.stopPropagation();\n event.preventDefault();\n\n /**\n * Checking if clipboard has a link\n */\n if (data) {\n /**\n * Parsing on valid URL\n */\n var regex = /^((http[s]?):\\/)?\\/?([^:\\/\\s]+)((\\/\\w+)*\\/)([\\w\\-\\.]+[^#?\\s]+)(.*)?(#[\\w\\-]+)?$/;\n\n if (data.match(regex)) {\n capella.uploader.upload({ 'link': data });\n } else {\n document.getElementById('uploadLinkField').value = data;\n }\n }\n\n if (items) {\n /**\n * Checking all clipboard's files and choosing last image file\n */\n for (var i = items.length - 1; i >= 0; --i) {\n if (items[i].type.indexOf('image') === 0) {\n blob = items[i].getAsFile();\n break;\n }\n }\n }\n\n if (blob !== null) {\n /**\n * FilerReader is used for asynchronous image reading from blob: function at onload\n */\n var reader = new FileReader();\n\n reader.onload = function () {\n capella.uploader.uploadBlob(blob);\n };\n reader.readAsDataURL(blob);\n }\n }\n }]);\n\n return Clipboard;\n}();\n\nexports.default = Clipboard;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Class for working with drag and drop files to browser\n *\n * @class DNDFileUploader\n *\n * @property {HTMLElement} wrapper — page wrapper element\n *\n */\nvar DNDFileUploader = function () {\n /**\n * Bind drag and drop events\n *\n * @param {String} wrapper - page wrapper selector\n */\n function DNDFileUploader(wrapper) {\n _classCallCheck(this, DNDFileUploader);\n\n this.wrapper = document.querySelector(wrapper);\n\n this.wrapper.addEventListener('dragenter', this.dragover.bind(this));\n this.wrapper.addEventListener('dragover', this.dragover.bind(this));\n this.wrapper.addEventListener('dragleave', this.drageleave.bind(this));\n this.wrapper.addEventListener('drop', this.drop.bind(this));\n }\n\n /**\n *\n * File dragover handler\n *\n * @param {Event} event — dragover event\n */\n\n\n _createClass(DNDFileUploader, [{\n key: 'dragover',\n value: function dragover(event) {\n event.preventDefault();\n\n this.wrapper.classList.add('capella--dark');\n }\n\n /**\n *\n * File dragleave handler\n *\n * @param {Event} event — dragleave event\n */\n\n }, {\n key: 'drageleave',\n value: function drageleave(event) {\n event.preventDefault();\n\n this.wrapper.classList.remove('capella--dark');\n }\n\n /**\n * File drop handler\n *\n * @param {Event} event — drop event\n */\n\n }, {\n key: 'drop',\n value: function drop(event) {\n this.wrapper.classList.remove('capella--dark');\n\n var file = event.dataTransfer.files[0];\n\n capella.uploader.uploadBlob(file);\n\n event.preventDefault();\n }\n }]);\n\n return DNDFileUploader;\n}();\n\nexports.default = DNDFileUploader;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Class to control upload screen appearance\n *\n * @property {HTMLElement} mainContainer — page wrapper\n * @property {HTMLElement} progressBar — progress bar slider element\n * @property {String} loadingClass — upload screen class\n *\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar UploadScreen = function () {\n /**\n * @constructor\n * Get needed elements from page\n */\n function UploadScreen() {\n _classCallCheck(this, UploadScreen);\n\n this.mainContainer = document.querySelector('.capella');\n this.progressBar = document.querySelector('.js-capella__uploading-progress');\n this.loadingClass = 'capella--loading';\n }\n\n /**\n * Show loading screen by adding loadingClass to page wrapper\n *\n * @param {String} filename — file which is uploading now\n */\n\n\n _createClass(UploadScreen, [{\n key: 'show',\n value: function show(filename) {\n var filenameHolder = this.mainContainer.querySelector('.capella__uploading-filename');\n\n filenameHolder.textContent = filename;\n this.mainContainer.classList.add(this.loadingClass);\n }\n\n /**\n * Hide loading screen by removing loadingClass from page wrapper\n */\n\n }, {\n key: 'hide',\n value: function hide() {\n this.mainContainer.classList.remove(this.loadingClass);\n }\n\n /**\n * Method to control loading progress bar\n *\n * @param {Number} percents — uploading percentage\n */\n\n }, {\n key: 'progress',\n value: function progress(percents) {\n this.progressBar.style.width = percents + '%';\n }\n }]);\n\n return UploadScreen;\n}();\n\nexports.default = UploadScreen;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n!function(t,e){ true?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.ajax=e():t.ajax=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var a=n[r]={i:r,l:!1,exports:{}};return t[r].call(a.exports,a,a.exports,e),a.l=!0,a.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"\",e(e.s=0)}([function(t,e,n){\"use strict\";t.exports=function(){var t=function(t){return t instanceof FormData};return{call:function(e){if(e&&e.url){var n=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject(\"Microsoft.XMLHTTP\"),r=e.progress||null,a=e.success||function(){},o=e.error||function(){},u=e.before||null,i=e.after?e.after.bind(null,e.data):null;if(e.async=!0,e.type=e.type||\"GET\",e.data=e.data||\"\",e[\"content-type\"]=e[\"content-type\"]||\"application/json; charset=utf-8\",\"GET\"===e.type&&e.data&&(e.url=/\\?/.test(e.url)?e.url+\"&\"+e.data:e.url+\"?\"+e.data),e.withCredentials&&(n.withCredentials=!0),u&&\"function\"==typeof u){if(!1===u(e.data))return}if(n.open(e.type,e.url,e.async),!t(e.data)){var c=new FormData;for(var f in e.data)c.append(f,e.data[f]);e.data=c}r&&\"function\"==typeof r&&n.upload.addEventListener(\"progress\",function(t){var e=parseInt(t.loaded/t.total*100);r(e)},!1),n.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\"),n.onreadystatechange=function(){if(4===n.readyState){var t=n.responseText;try{t=JSON.parse(t)}catch(t){}200===n.status?a(t):o(t),i&&\"function\"==typeof i&&i()}},n.send(e.data)}}}}()}])});\n//# sourceMappingURL=bundle.js.map\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n!function(t,e){ true?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.transport=e():t.transport=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"\",e(e.s=0)}([function(t,e,n){\"use strict\";var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},o=n(1);t.exports=function(t){var e=null;t.input=null;var n=function(){t.input.click()},u=function(){e.before(t.input.files)},a=function(){var n=e.url,a=e.data,i=u,c=e.progress,f=e.success,s=e.error,p=e.after,l=new FormData,d=t.input.files;if(d.length>1)for(var y=0;yClick to copy\n *\n * You can pass callback function to init method. Callback will fire when something has copied\n *\n * @type {{init}}\n */\nmodule.exports = function () {\n var NAMES = {\n copyable: 'js-copyable',\n authorized: 'js-copyable-authorize'\n };\n\n /**\n * Take element by name and pass it to prepareElement function\n *\n * @param {Function} copiedCallback - fires when something has copied\n */\n var init = function init(copiedCallback) {\n var elems = document.getElementsByName(NAMES.copyable);\n\n if (!elems) {\n console.log('There are no copyable elements');\n return;\n }\n\n for (var i = 0; i < elems.length; i++) {\n prepareElement(elems[i], copiedCallback);\n }\n\n var authorizedElems = document.getElementsByName(NAMES.authorized);\n\n for (var _i = 0; _i < authorizedElems.length; _i++) {\n authorize(authorizedElems[_i]);\n }\n\n console.log('Copyable module initialized');\n\n this.clipboardButton = document.querySelector('.js-result__copy');\n\n if (this.clipboardButton) {\n this.clipboardButton.addEventListener('click', capella.notificationToggler.toggleCopiedIcon, true);\n }\n };\n\n /**\n * Add click and copied listeners to copyable element\n *\n * @param element\n * @param copiedCallback\n */\n var prepareElement = function prepareElement(element, copiedCallback) {\n element.addEventListener('click', elementClicked);\n element.addEventListener('copied', copiedCallback);\n };\n\n /**\n * Add click listener for authorized element\n *\n * @param element\n */\n var authorize = function authorize(element) {\n element.addEventListener('click', authorizedCopy);\n };\n\n /**\n * Click handler for authorized elements\n */\n var authorizedCopy = function authorizedCopy() {\n var authorizedElem = this;\n var copyable = authorizedElem.querySelector('[name=' + NAMES.copyable + ']');\n\n copyable.click();\n };\n\n /**\n * Click handler\n * Create new range, select copyable element and add range to selection. Then exec 'copy' command\n */\n var elementClicked = function elementClicked(event) {\n var selection = window.getSelection(),\n range = document.createRange();\n\n range.selectNodeContents(this);\n selection.removeAllRanges();\n selection.addRange(range);\n\n document.execCommand('copy');\n selection.removeAllRanges();\n\n /**\n * We create new CustomEvent and dispatch it on copyable element\n * Consist copied text in detail property\n */\n var CopiedEvent = new CustomEvent('copied', {\n bubbles: false,\n cancelable: false,\n detail: range.toString()\n });\n\n this.dispatchEvent(CopiedEvent);\n event.stopPropagation();\n };\n\n return {\n init: init\n };\n}();\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function () {\n var CSS = {\n /* Class of 'Copied' notification element */\n notificationClass: '.js-result__is-copied',\n\n /* Class used to hide notification after showTimeout */\n notificationHideClass: 'js-hidden'\n };\n\n /* 'Copied' notification element */\n var notificationElement = document.querySelector(CSS.notificationClass);\n\n /* Timeout after which notificationElement will be hidden */\n var showTimeout = 2000;\n\n /* Timer to hide notification */\n var notificationIsVisibleTimer = void 0;\n\n /**\n * Show and hide after showTimeout seconds copy-notifications\n */\n var toggleCopiedIcon = function toggleCopiedIcon(event) {\n /* Don't open link in new window unless one of these keys is pressed */\n if (event.ctrlKey || event.metaKey || event.which === 2) {\n return false;\n }\n\n event.preventDefault();\n\n /* Clear timer if it was set previously */\n if (notificationIsVisibleTimer) {\n clearTimeout(notificationIsVisibleTimer);\n }\n\n /* First reveal zero-opacity notification elem, then after timeout hide it again */\n notificationElement.classList.remove(CSS.notificationHideClass);\n notificationIsVisibleTimer = setTimeout(function () {\n notificationElement.classList.add(CSS.notificationHideClass);\n }, showTimeout);\n };\n\n return {\n toggleCopiedIcon: toggleCopiedIcon\n };\n}();\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * TEMP fix. Detect Safari and add class to body\n */\n\nmodule.exports = function () {\n var init = function init() {\n var userAgent = window.navigator.userAgent;\n\n if (userAgent.indexOf('Safari') >= 0 && userAgent.indexOf('Chrome') < 0) {\n document.body.classList.add('safari');\n }\n };\n\n return {\n init: init\n };\n}();\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\nvar notifier=function(e){function t(r){if(n[r])return n[r].exports;var c=n[r]={i:r,l:!1,exports:{}};return e[r].call(c.exports,c,c.exports,t),c.l=!0,c.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,\"a\",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p=\"\",t(t.s=2)}([function(e,t,n){\"use strict\";e.exports=function(){var e={wrapper:\"cdx-notifies\",notification:\"cdx-notify\",crossBtn:\"cdx-notify__cross\",okBtn:\"cdx-notify__button--confirm\",cancelBtn:\"cdx-notify__button--cancel\",input:\"cdx-notify__input\",btn:\"cdx-notify__button\",btnsWrapper:\"cdx-notify__btns-wrapper\"},t=function(t){var n=document.createElement(\"DIV\"),r=document.createElement(\"DIV\"),c=t.message,i=t.style;return n.classList.add(e.notification),i&&n.classList.add(e.notification+\"--\"+i),n.innerHTML=c,r.classList.add(e.crossBtn),r.addEventListener(\"click\",n.remove.bind(n)),n.appendChild(r),n};return{alert:t,confirm:function(n){var r=t(n),c=document.createElement(\"div\"),i=document.createElement(\"button\"),a=document.createElement(\"button\"),o=r.querySelector(e.crossBtn),d=n.cancelHandler,s=n.okHandler;return c.classList.add(e.btnsWrapper),i.innerHTML=n.okText||\"Confirm\",a.innerHTML=n.cancelText||\"Cancel\",i.classList.add(e.btn),a.classList.add(e.btn),i.classList.add(e.okBtn),a.classList.add(e.cancelBtn),d&&\"function\"==typeof d&&(a.addEventListener(\"click\",d),o.addEventListener(\"click\",d)),s&&\"function\"==typeof s&&i.addEventListener(\"click\",s),i.addEventListener(\"click\",r.remove.bind(r)),a.addEventListener(\"click\",r.remove.bind(r)),c.appendChild(i),c.appendChild(a),r.appendChild(c),r},prompt:function(n){var r=t(n),c=document.createElement(\"div\"),i=document.createElement(\"button\"),a=document.createElement(\"input\"),o=r.querySelector(e.crossBtn),d=n.cancelHandler,s=n.okHandler;return c.classList.add(e.btnsWrapper),i.innerHTML=n.okText||\"Ok\",i.classList.add(e.btn),i.classList.add(e.okBtn),a.classList.add(e.input),n.placeholder&&a.setAttribute(\"placeholder\",n.placeholder),n.default&&(a.value=n.default),n.inputType&&(a.type=n.inputType),d&&\"function\"==typeof d&&o.addEventListener(\"click\",d),s&&\"function\"==typeof s&&i.addEventListener(\"click\",function(){s(a.value)}),i.addEventListener(\"click\",r.remove.bind(r)),c.appendChild(a),c.appendChild(i),r.appendChild(c),r},wrapper:function(){var t=document.createElement(\"DIV\");return t.classList.add(e.wrapper),t}}}()},function(e,t){},function(e,t,n){\"use strict\";/*!\n * Codex JavaScript Notification module\n * https://github.com/codex-team/js-notifier\n *\n * Codex Team - https://ifmo.su\n *\n * MIT License | (c) Codex 2017\n */\ne.exports=function(){function e(){if(i)return!0;i=r.wrapper(),document.body.appendChild(i)}function t(t){if(t.message){e();var n=null,a=t.time||8e3;switch(t.type){case\"confirm\":n=r.confirm(t);break;case\"prompt\":n=r.prompt(t);break;default:n=r.alert(t),window.setTimeout(function(){n.remove()},a)}i.appendChild(n),n.classList.add(c)}}n(1);var r=n(0),c=\"cdx-notify--bounce-in\",i=null;return{show:t}}()}]);\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = notifier;\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// public/build/bundle.js"," \t// The module cache\n \tvar installedModules = {};\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, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\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 = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap bd520a1a4de5be0f8a6a","'use strict';\n\n/**\n * @class Uploader\n * Handle images uploading\n *\n * @property {String} uploadUrl — url to upload images\n * @property {HTMLElement} uploadFilButton — transport initialization trigger\n * @property {HTMLElement} uploadLinkField — input to insert image link\n */\nexport default class Uploader {\n /**\n * Uploader class constructor. Get needed elements and bind events\n */\n constructor() {\n this.uploadUrl = '/upload';\n this.uploadFileButton = document.getElementById('uploadFileButton');\n this.uploadLinkField = document.getElementById('uploadLinkField');\n\n if (this.uploadFileButton) {\n this.uploadFileButton.addEventListener('click', this.uploadByTransport.bind(this), false);\n }\n\n if (this.uploadLinkField) {\n this.uploadLinkField.addEventListener('keydown', this.uploadByUrl.bind(this), false);\n }\n }\n\n /**\n * Init codex.transport to select image from user's computer\n */\n uploadByTransport() {\n capella.transport.init({\n url: this.uploadUrl,\n multiple: false,\n accept: 'image/png, image/gif, image/jpg, image/jpeg, image/bmp',\n data: {},\n before: this.before,\n progress: this.progress,\n success: this.success,\n error: this.error,\n after: this.after\n });\n }\n\n /**\n * Handle upload by image url\n *\n * @param e\n */\n uploadByUrl(e) {\n /** Check for Enter key */\n if (e.keyCode !== 13) {\n return;\n }\n e.preventDefault();\n\n if (this.uploadLinkField) {\n this.upload({'link': this.uploadLinkField.value});\n }\n }\n\n /**\n * Handler to upload blob data using FormData\n *\n * @param {Blob|File} file — file to send\n */\n uploadBlob(file) {\n let formData = new FormData();\n\n this.currentFileName = file.name;\n\n formData.append('file', file, file.name);\n\n this.upload(formData);\n }\n\n /**\n * Send AJAX request to uploadUrl with passed data\n *\n * @param {*} data — data to send\n */\n upload(data) {\n capella.ajax.call({\n type: 'POST',\n url: this.uploadUrl,\n data: data,\n before: this.before.bind(this),\n progress: this.progress,\n success: this.success,\n error: this.error,\n after: this.after\n });\n }\n\n /**\n * Method to call before upload starts\n */\n before(data) {\n let filename;\n\n if (data instanceof FormData) {\n filename = this.currentFileName;\n }\n if (data && data.link) {\n filename = data.link;\n }\n if (data[0] instanceof File) {\n filename = data[0].name;\n }\n\n capella.uploadScreen.show(filename);\n }\n\n /**\n * Handle upload progress\n *\n * @param percentage — upload percentage\n */\n progress(percentage) {\n percentage = 0.95 * percentage;\n capella.uploadScreen.progress(percentage);\n }\n\n /**\n * Successful upload handler\n *\n * @param {Object} response — response object\n * @param {Boolean} response.success — upload status\n * @param {String} response.url — if upload was successful, contains uploaded image url\n * @param {String} response.id — if upload was succesful, contains uploaded image id\n * @param {String} response.message — if upload failed, contains reason\n */\n success(response) {\n console.log(response);\n\n if (response.success) {\n capella.uploadScreen.progress(100);\n\n /** Redirect to uploaded image */\n window.location.href = '/image/' + response.id;\n } else {\n capella.uploadScreen.hide();\n }\n }\n\n /**\n * Upload error handler\n *\n * @param {Error} error — raised error\n */\n error(response) {\n capella.notifier.show({\n message: '' + response.message,\n time: 7000\n });\n capella.uploadScreen.hide();\n }\n\n /**\n * Method to call after upload\n */\n after() {}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/uploader.js","/**\n * Require CSS build\n */\nrequire('./css/main.css');\n\nmodule.exports = require('./js/main.js');\n\n\n\n// WEBPACK FOOTER //\n// ./public/app/entry.js","'use strict';\n\n\nconst capella = {};\n\nlet Uploader = require('./uploader').default;\nlet Clipboard = require('./clipboard').default;\nlet DNDFileUploader = require('./dragndrop').default;\nlet UploadScreen = require('./uploadScreen').default;\n\n/**\n * Require modules\n */\ncapella.ajax = require('codex.ajax');\ncapella.transport = require('codex.transport');\ncapella.uploader = require('./uploader');\ncapella.copyable = require('./copyable');\ncapella.notificationToggler = require('./notificationToggler');\ncapella.checkForSafari = require('./checkForSafari');\ncapella.notifier = require('exports-loader?notifier!codex-notifier');\n\ncapella.uploadScreen = new UploadScreen();\ncapella.uploader = new Uploader();\ncapella.clipboard = new Clipboard();\ncapella.dnd = new DNDFileUploader('.capella');\n\ncapella.init = function () {\n capella.copyable.init();\n capella.checkForSafari.init();\n};\n\nmodule.exports = capella;\n\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/main.js","/**\n * Paste from clipboard module\n */\nexport default class Clipboard {\n /**\n * Initialization of Clipboard module\n */\n constructor() {\n document.body.addEventListener('paste', this.pasteFromClipboard);\n }\n\n /**\n * Pasted image from clipboard\n */\n pasteFromClipboard(event) {\n let clipboard = (event.clipboardData || event.originalEvent.clipboardData || window.clipboardData);\n\n /**\n * items - for images\n * data - for links\n */\n let items = clipboard.items;\n let data = clipboard.getData('Text');\n let blob = null;\n\n event.stopPropagation();\n event.preventDefault();\n\n /**\n * Checking if clipboard has a link\n */\n if (data) {\n /**\n * Parsing on valid URL\n */\n let regex = /^((http[s]?):\\/)?\\/?([^:\\/\\s]+)((\\/\\w+)*\\/)([\\w\\-\\.]+[^#?\\s]+)(.*)?(#[\\w\\-]+)?$/;\n\n if (data.match(regex)) {\n capella.uploader.upload({'link': data});\n } else {\n document.getElementById('uploadLinkField').value = data;\n }\n }\n\n if (items) {\n /**\n * Checking all clipboard's files and choosing last image file\n */\n for (let i = items.length - 1; i >= 0; --i) {\n if (items[i].type.indexOf('image') === 0) {\n blob = items[i].getAsFile();\n break;\n }\n }\n }\n\n if (blob !== null) {\n /**\n * FilerReader is used for asynchronous image reading from blob: function at onload\n */\n let reader = new FileReader();\n\n reader.onload = function () {\n capella.uploader.uploadBlob(blob);\n };\n reader.readAsDataURL(blob);\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/clipboard.js","/**\n * Class for working with drag and drop files to browser\n *\n * @class DNDFileUploader\n *\n * @property {HTMLElement} wrapper — page wrapper element\n *\n */\nexport default class DNDFileUploader {\n /**\n * Bind drag and drop events\n *\n * @param {String} wrapper - page wrapper selector\n */\n constructor(wrapper) {\n this.wrapper = document.querySelector(wrapper);\n\n this.wrapper.addEventListener('dragenter', this.dragover.bind(this));\n this.wrapper.addEventListener('dragover', this.dragover.bind(this));\n this.wrapper.addEventListener('dragleave', this.drageleave.bind(this));\n this.wrapper.addEventListener('drop', this.drop.bind(this));\n }\n\n /**\n *\n * File dragover handler\n *\n * @param {Event} event — dragover event\n */\n dragover(event) {\n event.preventDefault();\n\n this.wrapper.classList.add('capella--dark');\n }\n\n /**\n *\n * File dragleave handler\n *\n * @param {Event} event — dragleave event\n */\n drageleave(event) {\n event.preventDefault();\n\n this.wrapper.classList.remove('capella--dark');\n }\n\n /**\n * File drop handler\n *\n * @param {Event} event — drop event\n */\n drop(event) {\n this.wrapper.classList.remove('capella--dark');\n\n let file = event.dataTransfer.files[0];\n\n capella.uploader.uploadBlob(file);\n\n event.preventDefault();\n }\n}\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/dragndrop.js","'use strict';\n\n/**\n * Class to control upload screen appearance\n *\n * @property {HTMLElement} mainContainer — page wrapper\n * @property {HTMLElement} progressBar — progress bar slider element\n * @property {String} loadingClass — upload screen class\n *\n */\nexport default class UploadScreen {\n /**\n * @constructor\n * Get needed elements from page\n */\n constructor() {\n this.mainContainer = document.querySelector('.capella');\n this.progressBar = document.querySelector('.js-capella__uploading-progress');\n this.loadingClass = 'capella--loading';\n }\n\n /**\n * Show loading screen by adding loadingClass to page wrapper\n *\n * @param {String} filename — file which is uploading now\n */\n show(filename) {\n let filenameHolder = this.mainContainer.querySelector('.capella__uploading-filename');\n\n filenameHolder.textContent = filename;\n this.mainContainer.classList.add(this.loadingClass);\n }\n\n /**\n * Hide loading screen by removing loadingClass from page wrapper\n */\n hide() {\n this.mainContainer.classList.remove(this.loadingClass);\n }\n\n /**\n * Method to control loading progress bar\n *\n * @param {Number} percents — uploading percentage\n */\n progress(percents) {\n this.progressBar.style.width = percents + '%';\n }\n}\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/uploadScreen.js","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.ajax=e():t.ajax=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var a=n[r]={i:r,l:!1,exports:{}};return t[r].call(a.exports,a,a.exports,e),a.l=!0,a.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"\",e(e.s=0)}([function(t,e,n){\"use strict\";t.exports=function(){var t=function(t){return t instanceof FormData};return{call:function(e){if(e&&e.url){var n=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject(\"Microsoft.XMLHTTP\"),r=e.progress||null,a=e.success||function(){},o=e.error||function(){},u=e.before||null,i=e.after?e.after.bind(null,e.data):null;if(e.async=!0,e.type=e.type||\"GET\",e.data=e.data||\"\",e[\"content-type\"]=e[\"content-type\"]||\"application/json; charset=utf-8\",\"GET\"===e.type&&e.data&&(e.url=/\\?/.test(e.url)?e.url+\"&\"+e.data:e.url+\"?\"+e.data),e.withCredentials&&(n.withCredentials=!0),u&&\"function\"==typeof u){if(!1===u(e.data))return}if(n.open(e.type,e.url,e.async),!t(e.data)){var c=new FormData;for(var f in e.data)c.append(f,e.data[f]);e.data=c}r&&\"function\"==typeof r&&n.upload.addEventListener(\"progress\",function(t){var e=parseInt(t.loaded/t.total*100);r(e)},!1),n.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\"),n.onreadystatechange=function(){if(4===n.readyState){var t=n.responseText;try{t=JSON.parse(t)}catch(t){}200===n.status?a(t):o(t),i&&\"function\"==typeof i&&i()}},n.send(e.data)}}}}()}])});\n//# sourceMappingURL=bundle.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/codex.ajax/lib/bundle.js\n// module id = 7\n// module chunks = 0","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.transport=e():t.transport=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"\",e(e.s=0)}([function(t,e,n){\"use strict\";var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},o=n(1);t.exports=function(t){var e=null;t.input=null;var n=function(){t.input.click()},u=function(){e.before(t.input.files)},a=function(){var n=e.url,a=e.data,i=u,c=e.progress,f=e.success,s=e.error,p=e.after,l=new FormData,d=t.input.files;if(d.length>1)for(var y=0;yClick to copy\n *\n * You can pass callback function to init method. Callback will fire when something has copied\n *\n * @type {{init}}\n */\nmodule.exports = function () {\n const NAMES = {\n copyable: 'js-copyable',\n authorized: 'js-copyable-authorize'\n };\n\n /**\n * Take element by name and pass it to prepareElement function\n *\n * @param {Function} copiedCallback - fires when something has copied\n */\n let init = function (copiedCallback) {\n let elems = document.getElementsByName(NAMES.copyable);\n\n if (!elems) {\n console.log('There are no copyable elements');\n return;\n }\n\n for (let i = 0; i < elems.length; i++) {\n prepareElement(elems[i], copiedCallback);\n }\n\n let authorizedElems = document.getElementsByName(NAMES.authorized);\n\n for (let i = 0; i < authorizedElems.length; i++) {\n authorize(authorizedElems[i]);\n }\n\n console.log('Copyable module initialized');\n\n this.clipboardButton = document.querySelector('.js-result__copy');\n\n if (this.clipboardButton) {\n this.clipboardButton.addEventListener('click', capella.notificationToggler.toggleCopiedIcon, true);\n }\n };\n\n /**\n * Add click and copied listeners to copyable element\n *\n * @param element\n * @param copiedCallback\n */\n let prepareElement = function (element, copiedCallback) {\n element.addEventListener('click', elementClicked);\n element.addEventListener('copied', copiedCallback);\n };\n\n /**\n * Add click listener for authorized element\n *\n * @param element\n */\n let authorize = function (element) {\n element.addEventListener('click', authorizedCopy);\n };\n\n /**\n * Click handler for authorized elements\n */\n let authorizedCopy = function () {\n let authorizedElem = this;\n let copyable = authorizedElem.querySelector('[name='+NAMES.copyable+']');\n\n copyable.click();\n };\n\n /**\n * Click handler\n * Create new range, select copyable element and add range to selection. Then exec 'copy' command\n */\n let elementClicked = function (event) {\n let selection = window.getSelection(),\n range = document.createRange();\n\n range.selectNodeContents(this);\n selection.removeAllRanges();\n selection.addRange(range);\n\n document.execCommand('copy');\n selection.removeAllRanges();\n\n /**\n * We create new CustomEvent and dispatch it on copyable element\n * Consist copied text in detail property\n */\n let CopiedEvent = new CustomEvent('copied', {\n bubbles: false,\n cancelable: false,\n detail: range.toString()\n });\n\n this.dispatchEvent(CopiedEvent);\n event.stopPropagation();\n };\n\n return {\n init: init\n };\n}();\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/copyable.js","'use strict';\n\nmodule.exports = function () {\n const CSS = {\n /* Class of 'Copied' notification element */\n notificationClass: '.js-result__is-copied',\n\n /* Class used to hide notification after showTimeout */\n notificationHideClass: 'js-hidden'\n };\n\n /* 'Copied' notification element */\n const notificationElement = document.querySelector(CSS.notificationClass);\n\n /* Timeout after which notificationElement will be hidden */\n const showTimeout = 2000;\n\n /* Timer to hide notification */\n let notificationIsVisibleTimer;\n\n /**\n * Show and hide after showTimeout seconds copy-notifications\n */\n let toggleCopiedIcon = function (event) {\n /* Don't open link in new window unless one of these keys is pressed */\n if (event.ctrlKey || event.metaKey || event.which === 2) {\n return false;\n }\n\n event.preventDefault();\n\n /* Clear timer if it was set previously */\n if (notificationIsVisibleTimer) {\n clearTimeout(notificationIsVisibleTimer);\n }\n\n /* First reveal zero-opacity notification elem, then after timeout hide it again */\n notificationElement.classList.remove(CSS.notificationHideClass);\n notificationIsVisibleTimer = setTimeout(function () {\n notificationElement.classList.add(CSS.notificationHideClass);\n }, showTimeout);\n };\n\n return {\n toggleCopiedIcon : toggleCopiedIcon\n };\n}();\n\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/notificationToggler.js","'use strict';\n\n\n/**\n * TEMP fix. Detect Safari and add class to body\n */\nmodule.exports = function () {\n let init = function () {\n let userAgent = window.navigator.userAgent;\n\n if (userAgent.indexOf('Safari') >= 0 && userAgent.indexOf('Chrome') < 0) {\n document.body.classList.add('safari');\n }\n };\n\n return {\n init\n };\n}();\n\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/checkForSafari.js","var notifier=function(e){function t(r){if(n[r])return n[r].exports;var c=n[r]={i:r,l:!1,exports:{}};return e[r].call(c.exports,c,c.exports,t),c.l=!0,c.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,\"a\",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p=\"\",t(t.s=2)}([function(e,t,n){\"use strict\";e.exports=function(){var e={wrapper:\"cdx-notifies\",notification:\"cdx-notify\",crossBtn:\"cdx-notify__cross\",okBtn:\"cdx-notify__button--confirm\",cancelBtn:\"cdx-notify__button--cancel\",input:\"cdx-notify__input\",btn:\"cdx-notify__button\",btnsWrapper:\"cdx-notify__btns-wrapper\"},t=function(t){var n=document.createElement(\"DIV\"),r=document.createElement(\"DIV\"),c=t.message,i=t.style;return n.classList.add(e.notification),i&&n.classList.add(e.notification+\"--\"+i),n.innerHTML=c,r.classList.add(e.crossBtn),r.addEventListener(\"click\",n.remove.bind(n)),n.appendChild(r),n};return{alert:t,confirm:function(n){var r=t(n),c=document.createElement(\"div\"),i=document.createElement(\"button\"),a=document.createElement(\"button\"),o=r.querySelector(e.crossBtn),d=n.cancelHandler,s=n.okHandler;return c.classList.add(e.btnsWrapper),i.innerHTML=n.okText||\"Confirm\",a.innerHTML=n.cancelText||\"Cancel\",i.classList.add(e.btn),a.classList.add(e.btn),i.classList.add(e.okBtn),a.classList.add(e.cancelBtn),d&&\"function\"==typeof d&&(a.addEventListener(\"click\",d),o.addEventListener(\"click\",d)),s&&\"function\"==typeof s&&i.addEventListener(\"click\",s),i.addEventListener(\"click\",r.remove.bind(r)),a.addEventListener(\"click\",r.remove.bind(r)),c.appendChild(i),c.appendChild(a),r.appendChild(c),r},prompt:function(n){var r=t(n),c=document.createElement(\"div\"),i=document.createElement(\"button\"),a=document.createElement(\"input\"),o=r.querySelector(e.crossBtn),d=n.cancelHandler,s=n.okHandler;return c.classList.add(e.btnsWrapper),i.innerHTML=n.okText||\"Ok\",i.classList.add(e.btn),i.classList.add(e.okBtn),a.classList.add(e.input),n.placeholder&&a.setAttribute(\"placeholder\",n.placeholder),n.default&&(a.value=n.default),n.inputType&&(a.type=n.inputType),d&&\"function\"==typeof d&&o.addEventListener(\"click\",d),s&&\"function\"==typeof s&&i.addEventListener(\"click\",function(){s(a.value)}),i.addEventListener(\"click\",r.remove.bind(r)),c.appendChild(a),c.appendChild(i),r.appendChild(c),r},wrapper:function(){var t=document.createElement(\"DIV\");return t.classList.add(e.wrapper),t}}}()},function(e,t){},function(e,t,n){\"use strict\";/*!\n * Codex JavaScript Notification module\n * https://github.com/codex-team/js-notifier\n *\n * Codex Team - https://ifmo.su\n *\n * MIT License | (c) Codex 2017\n */\ne.exports=function(){function e(){if(i)return!0;i=r.wrapper(),document.body.appendChild(i)}function t(t){if(t.message){e();var n=null,a=t.time||8e3;switch(t.type){case\"confirm\":n=r.confirm(t);break;case\"prompt\":n=r.prompt(t);break;default:n=r.alert(t),window.setTimeout(function(){n.remove()},a)}i.appendChild(n),n.classList.add(c)}}n(1);var r=n(0),c=\"cdx-notify--bounce-in\",i=null;return{show:t}}()}]);\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = notifier;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/exports-loader?notifier!./node_modules/codex-notifier/notifier.js\n// module id = 12\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///public/build/bundle.js","webpack:///webpack/bootstrap 6b1120b3ebb7773e1a5c","webpack:///./public/app/js/uploader.js","webpack:///./public/app/entry.js","webpack:///./public/app/js/main.js","webpack:///./public/app/js/clipboard.js","webpack:///./public/app/js/dragndrop.js","webpack:///./public/app/js/uploadScreen.js","webpack:///./node_modules/codex.ajax/lib/bundle.js","webpack:///./node_modules/codex.transport/lib/bundle.js","webpack:///./public/app/js/copyable.js","webpack:///./public/app/js/notificationToggler.js","webpack:///./public/app/js/checkForSafari.js","webpack:///./node_modules/codex-notifier/notifier.js"],"names":["capella","modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","_classCallCheck","instance","Constructor","TypeError","value","_createClass","defineProperties","target","props","length","descriptor","writable","key","protoProps","staticProps","Uploader","this","uploadUrl","uploadFileButton","document","getElementById","uploadLinkField","addEventListener","uploadByTransport","bind","uploadByUrl","transport","init","url","multiple","accept","data","before","progress","success","error","after","e","keyCode","preventDefault","upload","link","file","formData","FormData","currentFileName","append","ajax","type","filename","File","uploadScreen","show","percentage","response","console","log","window","location","href","id","hide","notifier","message","time","default","Clipboard","DNDFileUploader","UploadScreen","uploader","copyable","notificationToggler","checkForSafari","clipboard","dnd","body","pasteFromClipboard","event","clipboardData","originalEvent","items","getData","blob","stopPropagation","regex","match","indexOf","getAsFile","reader","FileReader","onload","uploadBlob","readAsDataURL","wrapper","querySelector","dragover","drageleave","drop","classList","add","remove","dataTransfer","files","mainContainer","progressBar","loadingClass","textContent","percents","style","width","t","r","a","XMLHttpRequest","ActiveXObject","u","async","test","withCredentials","open","f","parseInt","loaded","total","setRequestHeader","onreadystatechange","readyState","responseText","JSON","parse","status","send","Symbol","iterator","constructor","input","click","y","b","createElement","setAttribute","NAMES","authorized","prepareElement","element","copiedCallback","elementClicked","authorize","authorizedCopy","selection","getSelection","range","createRange","selectNodeContents","removeAllRanges","addRange","execCommand","CopiedEvent","CustomEvent","bubbles","cancelable","detail","toString","dispatchEvent","elems","getElementsByName","authorizedElems","clipboardButton","toggleCopiedIcon","CSS","notificationClass","notificationHideClass","notificationElement","notificationIsVisibleTimer","ctrlKey","metaKey","which","clearTimeout","setTimeout","userAgent","navigator","notification","crossBtn","okBtn","cancelBtn","btn","btnsWrapper","innerHTML","appendChild","alert","confirm","cancelHandler","okHandler","okText","cancelText","prompt","placeholder","inputType"],"mappings":"AAAA,GAAIA,SACK,SAAUC,GCGnB,QAAAC,GAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAE,OAGA,IAAAC,GAAAF,EAAAD,IACAI,EAAAJ,EACAK,GAAA,EACAH,WAUA,OANAJ,GAAAE,GAAAM,KAAAH,EAAAD,QAAAC,IAAAD,QAAAH,GAGAI,EAAAE,GAAA,EAGAF,EAAAD,QAvBA,GAAAD,KA4DA,OAhCAF,GAAAQ,EAAAT,EAGAC,EAAAS,EAAAP,EAGAF,EAAAU,EAAA,SAAAP,EAAAQ,EAAAC,GACAZ,EAAAa,EAAAV,EAAAQ,IACAG,OAAAC,eAAAZ,EAAAQ,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAZ,EAAAmB,EAAA,SAAAf,GACA,GAAAQ,GAAAR,KAAAgB,WACA,WAA2B,MAAAhB,GAAA,SAC3B,WAAiC,MAAAA,GAEjC,OADAJ,GAAAU,EAAAE,EAAA,IAAAA,GACAA,GAIAZ,EAAAa,EAAA,SAAAQ,EAAAC,GAAsD,MAAAR,QAAAS,UAAAC,eAAAjB,KAAAc,EAAAC,IAGtDtB,EAAAyB,EAAA,GAGAzB,IAAA0B,EAAA,KDOM,SAAUtB,EAAQD,EAASH,GAEjC,YAkBA,SAAS2B,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCANhHhB,OAAOC,eAAeZ,EAAS,cAC7B4B,OAAO,GAGT,IAAIC,GAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAI9B,GAAI,EAAGA,EAAI8B,EAAMC,OAAQ/B,IAAK,CAAE,GAAIgC,GAAaF,EAAM9B,EAAIgC,GAAWpB,WAAaoB,EAAWpB,aAAc,EAAOoB,EAAWrB,cAAe,EAAU,SAAWqB,KAAYA,EAAWC,UAAW,GAAMxB,OAAOC,eAAemB,EAAQG,EAAWE,IAAKF,IAAiB,MAAO,UAAUR,EAAaW,EAAYC,GAAiJ,MAA9HD,IAAYP,EAAiBJ,EAAYN,UAAWiB,GAAiBC,GAAaR,EAAiBJ,EAAaY,GAAqBZ,ME5E3gBa,EFgFN,WE5Eb,QAAAA,KAAcf,EAAAgB,KAAAD,GACZC,KAAKC,UAAY,UACjBD,KAAKE,iBAAmBC,SAASC,eAAe,oBAChDJ,KAAKK,gBAAkBF,SAASC,eAAe,mBAE3CJ,KAAKE,kBACPF,KAAKE,iBAAiBI,iBAAiB,QAASN,KAAKO,kBAAkBC,KAAKR,OAAO,GAGjFA,KAAKK,iBACPL,KAAKK,gBAAgBC,iBAAiB,UAAWN,KAAKS,YAAYD,KAAKR,OAAO,GF2PlF,MAhKAX,GAAaU,IACXH,IAAK,oBACLR,MAAO,WErFPjC,QAAQuD,UAAUC,MAChBC,IAAKZ,KAAKC,UACVY,UAAU,EACVC,OAAQ,yDACRC,QACAC,OAAQhB,KAAKgB,OACbC,SAAUjB,KAAKiB,SACfC,QAASlB,KAAKkB,QACdC,MAAOnB,KAAKmB,MACZC,MAAOpB,KAAKoB,WFiGdxB,IAAK,cACLR,MAAO,SEzFGiC,GAEQ,KAAdA,EAAEC,UAGND,EAAEE,iBAEEvB,KAAKK,iBACPL,KAAKwB,QAAQC,KAAQzB,KAAKK,gBAAgBjB,YFoG5CQ,IAAK,aACLR,MAAO,SE5FEsC,GACT,GAAIC,GAAW,GAAIC,SAEnB5B,MAAK6B,gBAAkBH,EAAK1D,KAE5B2D,EAASG,OAAO,OAAQJ,EAAMA,EAAK1D,MAEnCgC,KAAKwB,OAAOG,MFsGZ/B,IAAK,SACLR,MAAO,SE/FF2B,GACL5D,QAAQ4E,KAAKnE,MACXoE,KAAM,OACNpB,IAAKZ,KAAKC,UACVc,KAAMA,EACNC,OAAQhB,KAAKgB,OAAOR,KAAKR,MACzBiB,SAAUjB,KAAKiB,SACfC,QAASlB,KAAKkB,QACdC,MAAOnB,KAAKmB,MACZC,MAAOpB,KAAKoB,WFwGdxB,IAAK,SACLR,MAAO,SElGF2B,GACL,GAAIkB,SAEAlB,aAAgBa,YAClBK,EAAWjC,KAAK6B,iBAEdd,GAAQA,EAAKU,OACfQ,EAAWlB,EAAKU,MAEdV,EAAK,YAAcmB,QACrBD,EAAWlB,EAAK,GAAG/C,MAGrBb,QAAQgF,aAAaC,KAAKH,MF4G1BrC,IAAK,WACLR,MAAO,SErGAiD,GACPA,GAAa,IACblF,QAAQgF,aAAalB,SAASoB,MFmH9BzC,IAAK,UACLR,MAAO,SExGDkD,GACNC,QAAQC,IAAIF,GAERA,EAASpB,SACX/D,QAAQgF,aAAalB,SAAS,KAG9BwB,OAAOC,SAASC,KAAO,UAAYL,EAASM,IAE5CzF,QAAQgF,aAAaU,UFmHvBjD,IAAK,QACLR,MAAO,SE3GHkD,GACJnF,QAAQ2F,SAASV,MACfW,QAAS,2CAA+CT,EAASS,QACjEC,KAAM,MAER7F,QAAQgF,aAAaU,UFmHrBjD,IAAK,QACLR,MAAO,gBAGFW,IAGTvC,GAAQyF,QE5QalD,GFgRf,SAAUtC,EAAQD,EAASH,GAEjC,YGzRAA,GAAQ,GAERI,EAAOD,QAAUH,EAAQ,IHmSnB,SAAUI,EAAQD,KAMlB,SAAUC,EAAQD,EAASH,GAEjC,YI7SA,IAAMF,MAEF4C,EAAW1C,EAAQ,GAAc4F,QACjCC,EAAY7F,EAAQ,GAAe4F,QACnCE,EAAkB9F,EAAQ,GAAe4F,QACzCG,EAAe/F,EAAQ,GAAkB4F,OAK7C9F,GAAQ4E,KAAO1E,EAAQ,GACvBF,EAAQuD,UAAYrD,EAAQ,GAC5BF,EAAQkG,SAAWhG,EAAQ,GAC3BF,EAAQmG,SAAWjG,EAAQ,GAC3BF,EAAQoG,oBAAsBlG,EAAQ,IACtCF,EAAQqG,eAAiBnG,EAAQ,IACjCF,EAAQ2F,SAAWzF,EAAQ,IAE3BF,EAAQgF,aAAe,GAAIiB,GAC3BjG,EAAQkG,SAAW,GAAItD,GACvB5C,EAAQsG,UAAY,GAAIP,GACxB/F,EAAQuG,IAAM,GAAIP,GAAgB,YAElChG,EAAQwD,KAAO,WACbxD,EAAQmG,SAAS3C,OACjBxD,EAAQqG,eAAe7C,QAGzBlD,EAAOD,QAAUL,GJoTX,SAAUM,EAAQD,EAASH,GAEjC,YASA,SAAS2B,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCANhHhB,OAAOC,eAAeZ,EAAS,cAC7B4B,OAAO,GAGT,IAAIC,GAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAI9B,GAAI,EAAGA,EAAI8B,EAAMC,OAAQ/B,IAAK,CAAE,GAAIgC,GAAaF,EAAM9B,EAAIgC,GAAWpB,WAAaoB,EAAWpB,aAAc,EAAOoB,EAAWrB,cAAe,EAAU,SAAWqB,KAAYA,EAAWC,UAAW,GAAMxB,OAAOC,eAAemB,EAAQG,EAAWE,IAAKF,IAAiB,MAAO,UAAUR,EAAaW,EAAYC,GAAiJ,MAA9HD,IAAYP,EAAiBJ,EAAYN,UAAWiB,GAAiBC,GAAaR,EAAiBJ,EAAaY,GAAqBZ,MKzV3gBgE,ELgWL,WK5Vd,QAAAA,KAAclE,EAAAgB,KAAAkD,GACZ/C,SAASwD,KAAKrD,iBAAiB,QAASN,KAAK4D,oBLoa/C,MA1DAvE,GAAa6D,IACXtD,IAAK,qBACLR,MAAO,SKtWUyE,GACjB,GAAIJ,GAAaI,EAAMC,eAAkBD,EAAME,cAAcD,eAAiBrB,OAAOqB,cAMjFE,EAAQP,EAAUO,MAClBjD,EAAO0C,EAAUQ,QAAQ,QACzBC,EAAO,IAQX,IANAL,EAAMM,kBACNN,EAAMtC,iBAKFR,EAAM,CAIR,GAAIqD,GAAQ,iFAERrD,GAAKsD,MAAMD,GACbjH,QAAQkG,SAAS7B,QAAQC,KAAQV,IAEjCZ,SAASC,eAAe,mBAAmBhB,MAAQ2B,EAIvD,GAAIiD,EAIF,IAAK,GAAItG,GAAIsG,EAAMvE,OAAS,EAAG/B,GAAK,IAAKA,EACvC,GAAuC,IAAnCsG,EAAMtG,GAAGsE,KAAKsC,QAAQ,SAAgB,CACxCJ,EAAOF,EAAMtG,GAAG6G,WAChB,OAKN,GAAa,OAATL,EAAe,CAIjB,GAAIM,GAAS,GAAIC,WAEjBD,GAAOE,OAAS,WACdvH,QAAQkG,SAASsB,WAAWT,IAE9BM,EAAOI,cAAcV,QL2WlBhB,IAGT1F,GAAQyF,QK5aaC,GLgbf,SAAUzF,EAAQD,EAASH,GAEjC,YASA,SAAS2B,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCANhHhB,OAAOC,eAAeZ,EAAS,cAC7B4B,OAAO,GAGT,IAAIC,GAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAI9B,GAAI,EAAGA,EAAI8B,EAAMC,OAAQ/B,IAAK,CAAE,GAAIgC,GAAaF,EAAM9B,EAAIgC,GAAWpB,WAAaoB,EAAWpB,aAAc,EAAOoB,EAAWrB,cAAe,EAAU,SAAWqB,KAAYA,EAAWC,UAAW,GAAMxB,OAAOC,eAAemB,EAAQG,EAAWE,IAAKF,IAAiB,MAAO,UAAUR,EAAaW,EAAYC,GAAiJ,MAA9HD,IAAYP,EAAiBJ,EAAYN,UAAWiB,GAAiBC,GAAaR,EAAiBJ,EAAaY,GAAqBZ,MMpb3gBiE,ENgcC,WM1bpB,QAAAA,GAAY0B,GAAS7F,EAAAgB,KAAAmD,GACnBnD,KAAK6E,QAAU1E,SAAS2E,cAAcD,GAEtC7E,KAAK6E,QAAQvE,iBAAiB,YAAaN,KAAK+E,SAASvE,KAAKR,OAC9DA,KAAK6E,QAAQvE,iBAAiB,WAAYN,KAAK+E,SAASvE,KAAKR,OAC7DA,KAAK6E,QAAQvE,iBAAiB,YAAaN,KAAKgF,WAAWxE,KAAKR,OAChEA,KAAK6E,QAAQvE,iBAAiB,OAAQN,KAAKiF,KAAKzE,KAAKR,ONufvD,MA1CAX,GAAa8D,IACXvD,IAAK,WACLR,MAAO,SMtcAyE,GACPA,EAAMtC,iBAENvB,KAAK6E,QAAQK,UAAUC,IAAI,oBNid3BvF,IAAK,aACLR,MAAO,SMzcEyE,GACTA,EAAMtC,iBAENvB,KAAK6E,QAAQK,UAAUE,OAAO,oBNmd9BxF,IAAK,OACLR,MAAO,SM5cJyE,GACH7D,KAAK6E,QAAQK,UAAUE,OAAO,gBAE9B,IAAI1D,GAAOmC,EAAMwB,aAAaC,MAAM,EAEpCnI,SAAQkG,SAASsB,WAAWjD,GAE5BmC,EAAMtC,qBNgdD4B,IAGT3F,GAAQyF,QMtgBaE,GN0gBf,SAAU1F,EAAQD,EAASH,GAEjC,YAkBA,SAAS2B,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCANhHhB,OAAOC,eAAeZ,EAAS,cAC7B4B,OAAO,GAGT,IAAIC,GAAe,WAAc,QAASC,GAAiBC,EAAQC,GAAS,IAAK,GAAI9B,GAAI,EAAGA,EAAI8B,EAAMC,OAAQ/B,IAAK,CAAE,GAAIgC,GAAaF,EAAM9B,EAAIgC,GAAWpB,WAAaoB,EAAWpB,aAAc,EAAOoB,EAAWrB,cAAe,EAAU,SAAWqB,KAAYA,EAAWC,UAAW,GAAMxB,OAAOC,eAAemB,EAAQG,EAAWE,IAAKF,IAAiB,MAAO,UAAUR,EAAaW,EAAYC,GAAiJ,MAA9HD,IAAYP,EAAiBJ,EAAYN,UAAWiB,GAAiBC,GAAaR,EAAiBJ,EAAaY,GAAqBZ,MO1hB3gBkE,EP8hBF,WOzhBjB,QAAAA,KAAcpE,EAAAgB,KAAAoD,GACZpD,KAAKuF,cAAgBpF,SAAS2E,cAAc,YAC5C9E,KAAKwF,YAAcrF,SAAS2E,cAAc,mCAC1C9E,KAAKyF,aAAe,mBP0kBtB,MAhCApG,GAAa+D,IACXxD,IAAK,OACLR,MAAO,SOpiBJ6C,GACkBjC,KAAKuF,cAAcT,cAAc,gCAEvCY,YAAczD,EAC7BjC,KAAKuF,cAAcL,UAAUC,IAAInF,KAAKyF,iBP4iBtC7F,IAAK,OACLR,MAAO,WOtiBPY,KAAKuF,cAAcL,UAAUE,OAAOpF,KAAKyF,iBPijBzC7F,IAAK,WACLR,MAAO,SO1iBAuG,GACP3F,KAAKwF,YAAYI,MAAMC,MAAQF,EAAW,QP8iBrCvC,IAGT5F,GAAQyF,QOrlBaG,GPylBf,SAAU3F,EAAQD,EAASH,IQnmBjC,SAAAyI,EAAAzE,GAAe5D,EAAAD,QAAA6D,KAA6KrB,EAAA,WAAiB,gBAAA8F,GAAmB,QAAAzE,GAAA0E,GAAc,GAAAvH,EAAAuH,GAAA,MAAAvH,GAAAuH,GAAAvI,OAA4B,IAAAwI,GAAAxH,EAAAuH,IAAYrI,EAAAqI,EAAApI,GAAA,EAAAH,WAAqB,OAAAsI,GAAAC,GAAAnI,KAAAoI,EAAAxI,QAAAwI,IAAAxI,QAAA6D,GAAA2E,EAAArI,GAAA,EAAAqI,EAAAxI,QAA2D,GAAAgB,KAAS,OAAA6C,GAAAxD,EAAAiI,EAAAzE,EAAAvD,EAAAU,EAAA6C,EAAAtD,EAAA,SAAA+H,EAAAtH,EAAAuH,GAAuC1E,EAAAnD,EAAA4H,EAAAtH,IAAAL,OAAAC,eAAA0H,EAAAtH,GAAqCH,cAAA,EAAAC,YAAA,EAAAC,IAAAwH,KAAsC1E,EAAA7C,EAAA,SAAAsH,GAAiB,GAAAtH,GAAAsH,KAAArH,WAAA,WAAiC,MAAAqH,GAAA7C,SAAiB,WAAY,MAAA6C,GAAU,OAAAzE,GAAAtD,EAAAS,EAAA,IAAAA,MAAsB6C,EAAAnD,EAAA,SAAA4H,EAAAzE,GAAmB,MAAAlD,QAAAS,UAAAC,eAAAjB,KAAAkI,EAAAzE,IAAiDA,EAAAvC,EAAA,GAAAuC,IAAAtC,EAAA,KAAiB,SAAA+G,EAAAzE,EAAA7C,GAAkB,YAAasH,GAAAtI,QAAA,WAAqB,GAAAsI,GAAA,SAAAA,GAAkB,MAAAA,aAAAlE,UAA8B,QAAOhE,KAAA,SAAAyD,GAAiB,GAAAA,KAAAT,IAAA,CAAa,GAAApC,GAAAiE,OAAAwD,eAAA,GAAAxD,QAAAwD,eAAA,GAAAxD,QAAAyD,cAAA,qBAAAH,EAAA1E,EAAAJ,UAAA,KAAA+E,EAAA3E,EAAAH,SAAA,aAAgJhD,EAAAmD,EAAAF,OAAA,aAAwBgF,EAAA9E,EAAAL,QAAA,KAAAtD,EAAA2D,EAAAD,MAAAC,EAAAD,MAAAZ,KAAA,KAAAa,EAAAN,MAAA,IAA2D,IAAAM,EAAA+E,OAAA,EAAA/E,EAAAW,KAAAX,EAAAW,MAAA,MAAAX,EAAAN,KAAAM,EAAAN,MAAA,GAAAM,EAAA,gBAAAA,EAAA,mDAA4G,QAAAA,EAAAW,MAAAX,EAAAN,OAAAM,EAAAT,IAAA,KAAAyF,KAAAhF,EAAAT,KAAAS,EAAAT,IAAA,IAAAS,EAAAN,KAAAM,EAAAT,IAAA,IAAAS,EAAAN,MAAAM,EAAAiF,kBAAA9H,EAAA8H,iBAAA,GAAAH,GAAA,kBAAAA,KAAsK,IAAAA,EAAA9E,EAAAN,MAAA,MAAyB,IAAAvC,EAAA+H,KAAAlF,EAAAW,KAAAX,EAAAT,IAAAS,EAAA+E,QAAAN,EAAAzE,EAAAN,MAAA,CAA4C,GAAAjD,GAAA,GAAA8D,SAAmB,QAAA4E,KAAAnF,GAAAN,KAAAjD,EAAAgE,OAAA0E,EAAAnF,EAAAN,KAAAyF,GAA0CnF,GAAAN,KAAAjD,EAASiI,GAAA,kBAAAA,IAAAvH,EAAAgD,OAAAlB,iBAAA,oBAAAwF,GAA0E,GAAAzE,GAAAoF,SAAAX,EAAAY,OAAAZ,EAAAa,MAAA,IAAqCZ,GAAA1E,KAAK,GAAA7C,EAAAoI,iBAAA,qCAAApI,EAAAqI,mBAAA,WAA6F,OAAArI,EAAAsI,WAAA,CAAqB,GAAAhB,GAAAtH,EAAAuI,YAAqB,KAAIjB,EAAAkB,KAAAC,MAAAnB,GAAgB,MAAAA,IAAU,MAAAtH,EAAA0I,OAAAlB,EAAAF,GAAA5H,EAAA4H,GAAApI,GAAA,kBAAAA,UAAuDc,EAAA2I,KAAA9F,EAAAN,kBR0mBxvD,SAAUtD,EAAQD,EAASH,IS1mBjC,SAAAyI,EAAAzE,GAAe5D,EAAAD,QAAA6D,KAAuLrB,EAAA,WAAiB,gBAAA8F,GAAmB,QAAAzE,GAAA0E,GAAc,GAAAvH,EAAAuH,GAAA,MAAAvH,GAAAuH,GAAAvI,OAA4B,IAAAU,GAAAM,EAAAuH,IAAYrI,EAAAqI,EAAApI,GAAA,EAAAH,WAAqB,OAAAsI,GAAAC,GAAAnI,KAAAM,EAAAV,QAAAU,IAAAV,QAAA6D,GAAAnD,EAAAP,GAAA,EAAAO,EAAAV,QAA2D,GAAAgB,KAAS,OAAA6C,GAAAxD,EAAAiI,EAAAzE,EAAAvD,EAAAU,EAAA6C,EAAAtD,EAAA,SAAA+H,EAAAtH,EAAAuH,GAAuC1E,EAAAnD,EAAA4H,EAAAtH,IAAAL,OAAAC,eAAA0H,EAAAtH,GAAqCH,cAAA,EAAAC,YAAA,EAAAC,IAAAwH,KAAsC1E,EAAA7C,EAAA,SAAAsH,GAAiB,GAAAtH,GAAAsH,KAAArH,WAAA,WAAiC,MAAAqH,GAAA7C,SAAiB,WAAY,MAAA6C,GAAU,OAAAzE,GAAAtD,EAAAS,EAAA,IAAAA,MAAsB6C,EAAAnD,EAAA,SAAA4H,EAAAzE,GAAmB,MAAAlD,QAAAS,UAAAC,eAAAjB,KAAAkI,EAAAzE,IAAiDA,EAAAvC,EAAA,GAAAuC,IAAAtC,EAAA,KAAiB,SAAA+G,EAAAzE,EAAA7C,GAAkB,YAAa,IAAAuH,GAAA,kBAAAqB,SAAA,gBAAAA,QAAAC,SAAA,SAAAvB,GAA8E,aAAAA,IAAgB,SAAAA,GAAa,MAAAA,IAAA,kBAAAsB,SAAAtB,EAAAwB,cAAAF,QAAAtB,IAAAsB,OAAAxI,UAAA,eAAAkH,IAAoG5H,EAAAM,EAAA,EAAQsH,GAAAtI,QAAA,SAAAsI,GAAsB,GAAAzE,GAAA,IAAWyE,GAAAyB,MAAA,IAAa,IAAA/I,GAAA,WAAiBsH,EAAAyB,MAAAC,SAAgBrB,EAAA,WAAc9E,EAAAL,OAAA8E,EAAAyB,MAAAjC,QAAwBU,EAAA,WAAc,GAAAxH,GAAA6C,EAAAT,IAAAoF,EAAA3E,EAAAN,KAAArD,EAAAyI,EAAArI,EAAAuD,EAAAJ,SAAAuF,EAAAnF,EAAAH,QAAAnC,EAAAsC,EAAAF,MAAArC,EAAAuC,EAAAD,MAAAzD,EAAA,GAAAiE,UAAA7D,EAAA+H,EAAAyB,MAAAjC,KAAqG,IAAAvH,EAAA0B,OAAA,SAAAgI,GAAA,EAA0BA,EAAA1J,EAAA0B,OAAWgI,IAAA9J,EAAAmE,OAAA,UAAA/D,EAAA0J,GAAA1J,EAAA0J,GAAAzJ,UAAuCL,GAAAmE,OAAA,OAAA/D,EAAA,GAAAA,EAAA,GAAAC,KAAqC,WAAAgI,GAAA,qBAAAA,EAAA,YAAAD,EAAAC,IAAA,OAAA0B,KAAA1B,GAAArI,EAAAmE,OAAA4F,EAAA1B,EAAA0B,GAAsFxJ,GAAAN,MAAQoE,KAAA,OAAAjB,KAAApD,EAAAiD,IAAApC,EAAAwC,OAAAtD,EAAAuD,SAAAnD,EAAAoD,QAAAsF,EAAArF,MAAApC,EAAAqC,MAAAtC,IAA0E,OAAAgH,GAAAnF,KAAA,SAAAoF,GAA0B,IAAAA,EAAAnF,IAAA,WAAA2B,SAAAC,IAAA,6CAAgFnB,GAAA0E,CAAI,IAAA7H,GAAAiC,SAAAwH,cAAA,QAAsCzJ,GAAA8D,KAAA,OAAAX,KAAAR,UAAA3C,EAAA0J,aAAA,uBAAAvG,KAAAP,QAAA5C,EAAA0J,aAAA,SAAAvG,EAAAP,QAAA5C,EAAAoC,iBAAA,SAAA0F,GAAA,GAAAF,EAAAyB,MAAArJ,EAAAM,KAAkKsH,QAAQ,SAAAA,EAAAzE,EAAA7C,IAAiB,SAAA6C,EAAA7C,GAAesH,EAAAtI,QAAc,WAAc,gBAAAsI,GAAmB,QAAAzE,GAAA0E,GAAc,GAAAvH,EAAAuH,GAAA,MAAAvH,GAAAuH,GAAAvI,OAA4B,IAAAU,GAAAM,EAAAuH,IAAYrI,EAAAqI,EAAApI,GAAA,EAAAH,WAAqB,OAAAsI,GAAAC,GAAAnI,KAAAM,EAAAV,QAAAU,IAAAV,QAAA6D,GAAAnD,EAAAP,GAAA,EAAAO,EAAAV,QAA2D,GAAAgB,KAAS,OAAA6C,GAAAxD,EAAAiI,EAAAzE,EAAAvD,EAAAU,EAAA6C,EAAAtD,EAAA,SAAA+H,EAAAtH,EAAAuH,GAAuC1E,EAAAnD,EAAA4H,EAAAtH,IAAAL,OAAAC,eAAA0H,EAAAtH,GAAqCH,cAAA,EAAAC,YAAA,EAAAC,IAAAwH,KAAsC1E,EAAA7C,EAAA,SAAAsH,GAAiB,GAAAtH,GAAAsH,KAAArH,WAAA,WAAiC,MAAAqH,GAAA7C,SAAiB,WAAY,MAAA6C,GAAU,OAAAzE,GAAAtD,EAAAS,EAAA,IAAAA,MAAsB6C,EAAAnD,EAAA,SAAA4H,EAAAzE,GAAmB,MAAAlD,QAAAS,UAAAC,eAAAjB,KAAAkI,EAAAzE,IAAiDA,EAAAvC,EAAA,GAAAuC,IAAAtC,EAAA,KAAiB,SAAA+G,EAAAzE,EAAA7C,GAAkB,YAAasH,GAAAtI,QAAA,WAAqB,GAAAsI,GAAA,SAAAA,GAAkB,MAAAA,aAAAlE,UAA8B,QAAOhE,KAAA,SAAAyD,GAAiB,GAAAA,KAAAT,IAAA,CAAa,GAAApC,GAAAiE,OAAAwD,eAAA,GAAAxD,QAAAwD,eAAA,GAAAxD,QAAAyD,cAAA,qBAAAH,EAAA1E,EAAAJ,UAAA,KAAA/C,EAAAmD,EAAAH,SAAA,aAAgJiF,EAAA9E,EAAAF,OAAA,aAAwB6E,EAAA3E,EAAAL,QAAA,KAAAtD,EAAA2D,EAAAD,MAAAC,EAAAD,MAAAZ,KAAA,KAAAa,EAAAN,MAAA,IAA2D,IAAAM,EAAA+E,OAAA,EAAA/E,EAAAW,KAAAX,EAAAW,MAAA,MAAAX,EAAAN,KAAAM,EAAAN,MAAA,GAAAM,EAAA,gBAAAA,EAAA,mDAA4G,QAAAA,EAAAW,MAAAX,EAAAN,OAAAM,EAAAT,IAAA,KAAAyF,KAAAhF,EAAAT,KAAAS,EAAAT,IAAA,IAAAS,EAAAN,KAAAM,EAAAT,IAAA,IAAAS,EAAAN,MAAAM,EAAAiF,kBAAA9H,EAAA8H,iBAAA,GAAAN,GAAA,kBAAAA,KAAA,IAAAA,EAAA3E,EAAAN,MAAA,MAA4L,IAAAvC,EAAA+H,KAAAlF,EAAAW,KAAAX,EAAAT,IAAAS,EAAA+E,QAAAN,EAAAzE,EAAAN,MAAA,CAA4C,GAAAjD,GAAA,GAAA8D,SAAmB,QAAA4E,KAAAnF,GAAAN,KAAAjD,EAAAgE,OAAA0E,EAAAnF,EAAAN,KAAAyF,GAA0CnF,GAAAN,KAAAjD,EAASiI,GAAA,kBAAAA,IAAAvH,EAAAgD,OAAAlB,iBAAA,oBAAAwF,GAA0E,GAAAzE,GAAAoF,SAAAX,EAAAY,OAAAZ,EAAAa,MAAA,IAAqCZ,GAAA1E,KAAK,GAAA7C,EAAAoI,iBAAA,qCAAApI,EAAAqI,mBAAA,WAA6F,OAAArI,EAAAsI,WAAA,CAAqB,GAAAhB,GAAAtH,EAAAuI,YAAqB,KAAIjB,EAAAkB,KAAAC,MAAAnB,GAAgB,MAAAA,IAAU,MAAAtH,EAAA0I,OAAAhJ,EAAA4H,GAAAK,EAAAL,GAAApI,GAAA,kBAAAA,UAAuDc,EAAA2I,KAAA9F,EAAAN,2BTinBx0G,SAAUtD,EAAQD,EAASH,GAEjC,YUxmBAI,GAAOD,QAAU,WACf,GAAMqK,IACJvE,SAAU,cACVwE,WAAY,yBAyCVC,EAAiB,SAAUC,EAASC,GACtCD,EAAQ1H,iBAAiB,QAAS4H,GAClCF,EAAQ1H,iBAAiB,SAAU2H,IAQjCE,EAAY,SAAUH,GACxBA,EAAQ1H,iBAAiB,QAAS8H,IAMhCA,EAAiB,WACEpI,KACS8E,cAAc,SAAS+C,EAAMvE,SAAS,KAE3DkE,SAOPU,EAAiB,SAAUrE,GAC7B,GAAIwE,GAAY5F,OAAO6F,eACnBC,EAAYpI,SAASqI,aAEzBD,GAAME,mBAAmBzI,MACzBqI,EAAUK,kBACVL,EAAUM,SAASJ,GAEnBpI,SAASyI,YAAY,QACrBP,EAAUK,iBAMV,IAAIG,GAAc,GAAIC,aAAY,UAChCC,SAAS,EACTC,YAAY,EACZC,OAAQV,EAAMW,YAGhBlJ,MAAKmJ,cAAcN,GACnBhF,EAAMM,kBAGR,QACExD,KAvFS,SAAUsH,GACnB,GAAImB,GAAQjJ,SAASkJ,kBAAkBxB,EAAMvE,SAE7C,KAAK8F,EAEH,WADA7G,SAAQC,IAAI,iCAId,KAAK,GAAI9E,GAAI,EAAGA,EAAI0L,EAAM3J,OAAQ/B,IAChCqK,EAAeqB,EAAM1L,GAAIuK,EAK3B,KAAK,GAFDqB,GAAkBnJ,SAASkJ,kBAAkBxB,EAAMC,YAE9CpK,EAAI,EAAGA,EAAI4L,EAAgB7J,OAAQ/B,IAC1CyK,EAAUmB,EAAgB5L,GAG5B6E,SAAQC,IAAI,+BAEZxC,KAAKuJ,gBAAkBpJ,SAAS2E,cAAc,oBAE1C9E,KAAKuJ,iBACPvJ,KAAKuJ,gBAAgBjJ,iBAAiB,QAASnD,QAAQoG,oBAAoBiG,kBAAkB,SV4rB7F,SAAU/L,EAAQD,EAASH,GAEjC,YWzuBAI,GAAOD,QAAU,WACf,GAAMiM,IAEJC,kBAAmB,wBAGnBC,sBAAuB,aAInBC,EAAsBzJ,SAAS2E,cAAc2E,EAAIC,mBAMnDG,QAyBJ,QACEL,iBArBqB,SAAU3F,GAE/B,GAAIA,EAAMiG,SAAWjG,EAAMkG,SAA2B,IAAhBlG,EAAMmG,MAC1C,OAAO,CAGTnG,GAAMtC,iBAGFsI,GACFI,aAAaJ,GAIfD,EAAoB1E,UAAUE,OAAOqE,EAAIE,uBACzCE,EAA6BK,WAAW,WACtCN,EAAoB1E,UAAUC,IAAIsE,EAAIE,wBAxBtB,WX+wBhB,SAAUlM,EAAQD,EAASH,GAEjC,YY1xBAI,GAAOD,QAAU,WASf,OACEmD,KATS,WACT,GAAIwJ,GAAY1H,OAAO2H,UAAUD,SAE7BA,GAAU7F,QAAQ,WAAa,GAAK6F,EAAU7F,QAAQ,UAAY,GACpEnE,SAASwD,KAAKuB,UAAUC,IAAI,gBZ4yB5B,SAAU1H,EAAQD,GavzBxB,GAAAsF,GAAA,SAAAzB,GAAyB,QAAAyE,GAAAC,GAAc,GAAAvH,EAAAuH,GAAA,MAAAvH,GAAAuH,GAAAvI,OAA4B,IAAAM,GAAAU,EAAAuH,IAAYrI,EAAAqI,EAAApI,GAAA,EAAAH,WAAqB,OAAA6D,GAAA0E,GAAAnI,KAAAE,EAAAN,QAAAM,IAAAN,QAAAsI,GAAAhI,EAAAH,GAAA,EAAAG,EAAAN,QAA2D,GAAAgB,KAAS,OAAAsH,GAAAjI,EAAAwD,EAAAyE,EAAAhI,EAAAU,EAAAsH,EAAApI,EAAA,SAAA2D,GAAmC,MAAAA,IAASyE,EAAA/H,EAAA,SAAAsD,EAAA7C,EAAAuH,GAAqBD,EAAA5H,EAAAmD,EAAA7C,IAAAL,OAAAC,eAAAiD,EAAA7C,GAAqCH,cAAA,EAAAC,YAAA,EAAAC,IAAAwH,KAAsCD,EAAAtH,EAAA,SAAA6C,GAAiB,GAAA7C,GAAA6C,KAAA5C,WAAA,WAAiC,MAAA4C,GAAA4B,SAAiB,WAAY,MAAA5B,GAAU,OAAAyE,GAAA/H,EAAAS,EAAA,IAAAA,MAAsBsH,EAAA5H,EAAA,SAAAmD,EAAAyE,GAAmB,MAAA3H,QAAAS,UAAAC,eAAAjB,KAAAyD,EAAAyE,IAAiDA,EAAAhH,EAAA,GAAAgH,IAAA/G,EAAA,KAAiB,SAAAsC,EAAAyE,EAAAtH,GAAkB,YAAa6C,GAAA7D,QAAA,WAAqB,GAAA6D,IAAOwD,QAAA,eAAAwF,aAAA,aAAAC,SAAA,oBAAAC,MAAA,8BAAAC,UAAA,6BAAAjD,MAAA,oBAAAkD,IAAA,qBAAAC,YAAA,4BAAmP5E,EAAA,SAAAA,GAAe,GAAAtH,GAAA2B,SAAAwH,cAAA,OAAA5B,EAAA5F,SAAAwH,cAAA,OAAA7J,EAAAgI,EAAA/C,QAAArF,EAAAoI,EAAAF,KAA0F,OAAApH,GAAA0G,UAAAC,IAAA9D,EAAAgJ,cAAA3M,GAAAc,EAAA0G,UAAAC,IAAA9D,EAAAgJ,aAAA,KAAA3M,GAAAc,EAAAmM,UAAA7M,EAAAiI,EAAAb,UAAAC,IAAA9D,EAAAiJ,UAAAvE,EAAAzF,iBAAA,QAAA9B,EAAA4G,OAAA5E,KAAAhC,MAAAoM,YAAA7E,GAAAvH,EAA4L,QAAOqM,MAAA/E,EAAAgF,QAAA,SAAAtM,GAA4B,GAAAuH,GAAAD,EAAAtH,GAAAV,EAAAqC,SAAAwH,cAAA,OAAAjK,EAAAyC,SAAAwH,cAAA,UAAA3B,EAAA7F,SAAAwH,cAAA,UAAAzJ,EAAA6H,EAAAjB,cAAAzD,EAAAiJ,UAAAvM,EAAAS,EAAAuM,cAAAhM,EAAAP,EAAAwM,SAA+K,OAAAlN,GAAAoH,UAAAC,IAAA9D,EAAAqJ,aAAAhN,EAAAiN,UAAAnM,EAAAyM,QAAA,UAAAjF,EAAA2E,UAAAnM,EAAA0M,YAAA,SAAAxN,EAAAwH,UAAAC,IAAA9D,EAAAoJ,KAAAzE,EAAAd,UAAAC,IAAA9D,EAAAoJ,KAAA/M,EAAAwH,UAAAC,IAAA9D,EAAAkJ,OAAAvE,EAAAd,UAAAC,IAAA9D,EAAAmJ,WAAAzM,GAAA,kBAAAA,KAAAiI,EAAA1F,iBAAA,QAAAvC,GAAAG,EAAAoC,iBAAA,QAAAvC,IAAAgB,GAAA,kBAAAA,IAAArB,EAAA4C,iBAAA,QAAAvB,GAAArB,EAAA4C,iBAAA,QAAAyF,EAAAX,OAAA5E,KAAAuF,IAAAC,EAAA1F,iBAAA,QAAAyF,EAAAX,OAAA5E,KAAAuF,IAAAjI,EAAA8M,YAAAlN,GAAAI,EAAA8M,YAAA5E,GAAAD,EAAA6E,YAAA9M,GAAAiI,GAA0eoF,OAAA,SAAA3M,GAAoB,GAAAuH,GAAAD,EAAAtH,GAAAV,EAAAqC,SAAAwH,cAAA,OAAAjK,EAAAyC,SAAAwH,cAAA,UAAA3B,EAAA7F,SAAAwH,cAAA,SAAAzJ,EAAA6H,EAAAjB,cAAAzD,EAAAiJ,UAAAvM,EAAAS,EAAAuM,cAAAhM,EAAAP,EAAAwM,SAA8K,OAAAlN,GAAAoH,UAAAC,IAAA9D,EAAAqJ,aAAAhN,EAAAiN,UAAAnM,EAAAyM,QAAA,KAAAvN,EAAAwH,UAAAC,IAAA9D,EAAAoJ,KAAA/M,EAAAwH,UAAAC,IAAA9D,EAAAkJ,OAAAvE,EAAAd,UAAAC,IAAA9D,EAAAkG,OAAA/I,EAAA4M,aAAApF,EAAA4B,aAAA,cAAApJ,EAAA4M,aAAA5M,EAAAyE,UAAA+C,EAAA5G,MAAAZ,EAAAyE,SAAAzE,EAAA6M,YAAArF,EAAAhE,KAAAxD,EAAA6M,WAAAtN,GAAA,kBAAAA,IAAAG,EAAAoC,iBAAA,QAAAvC,GAAAgB,GAAA,kBAAAA,IAAArB,EAAA4C,iBAAA,mBAA4XvB,EAAAiH,EAAA5G,SAAW1B,EAAA4C,iBAAA,QAAAyF,EAAAX,OAAA5E,KAAAuF,IAAAjI,EAAA8M,YAAA5E,GAAAlI,EAAA8M,YAAAlN,GAAAqI,EAAA6E,YAAA9M,GAAAiI,GAAoGlB,QAAA,WAAoB,GAAAiB,GAAA3F,SAAAwH,cAAA,MAAoC,OAAA7B,GAAAZ,UAAAC,IAAA9D,EAAAwD,SAAAiB,QAAyC,SAAAzE,EAAAyE,KAAgB,SAAAzE,EAAAyE,EAAAtH,GAAiB;;;;;;;;AAQtjF6C,EAAA7D,QAAA,WAAqB,QAAA6D,KAAa,GAAA3D,EAAA,QAAcA,GAAAqI,EAAAlB,UAAA1E,SAAAwD,KAAAiH,YAAAlN,GAA2C,QAAAoI,MAAc,GAAAA,EAAA/C,QAAA,CAAc1B,GAAI,IAAA7C,GAAA,KAAAwH,EAAAF,EAAA9C,MAAA,GAAyB,QAAA8C,EAAA9D,MAAe,cAAAxD,EAAAuH,EAAA+E,QAAAhF,EAA6B,MAAM,cAAAtH,EAAAuH,EAAAoF,OAAArF,EAA2B,MAAM,SAAAtH,EAAAuH,EAAA8E,MAAA/E,GAAArD,OAAAyH,WAAA,WAAkD1L,EAAA4G,UAAWY,GAAItI,EAAAkN,YAAApM,KAAA0G,UAAAC,IAAArH,IAAqCU,EAAA,EAAK,IAAAuH,GAAAvH,EAAA,GAAAV,EAAA,wBAAAJ,EAAA,IAA4C,QAAO0E,KAAA0D,QAGrYrI,GAAAD,QAAAsF","file":"./public/build/bundle.js","sourcesContent":["var capella =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\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, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\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 = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 1);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * @class Uploader\n * Handle images uploading\n *\n * @property {String} uploadUrl — url to upload images\n * @property {HTMLElement} uploadFilButton — transport initialization trigger\n * @property {HTMLElement} uploadLinkField — input to insert image link\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Uploader = function () {\n /**\n * Uploader class constructor. Get needed elements and bind events\n */\n function Uploader() {\n _classCallCheck(this, Uploader);\n\n this.uploadUrl = '/upload';\n this.uploadFileButton = document.getElementById('uploadFileButton');\n this.uploadLinkField = document.getElementById('uploadLinkField');\n\n if (this.uploadFileButton) {\n this.uploadFileButton.addEventListener('click', this.uploadByTransport.bind(this), false);\n }\n\n if (this.uploadLinkField) {\n this.uploadLinkField.addEventListener('keydown', this.uploadByUrl.bind(this), false);\n }\n }\n\n /**\n * Init codex.transport to select image from user's computer\n */\n\n\n _createClass(Uploader, [{\n key: 'uploadByTransport',\n value: function uploadByTransport() {\n capella.transport.init({\n url: this.uploadUrl,\n multiple: false,\n accept: 'image/png, image/gif, image/jpg, image/jpeg, image/bmp',\n data: {},\n before: this.before,\n progress: this.progress,\n success: this.success,\n error: this.error,\n after: this.after\n });\n }\n\n /**\n * Handle upload by image url\n *\n * @param e\n */\n\n }, {\n key: 'uploadByUrl',\n value: function uploadByUrl(e) {\n /** Check for Enter key */\n if (e.keyCode !== 13) {\n return;\n }\n e.preventDefault();\n\n if (this.uploadLinkField) {\n this.upload({ 'link': this.uploadLinkField.value });\n }\n }\n\n /**\n * Handler to upload blob data using FormData\n *\n * @param {Blob|File} file — file to send\n */\n\n }, {\n key: 'uploadBlob',\n value: function uploadBlob(file) {\n var formData = new FormData();\n\n this.currentFileName = file.name;\n\n formData.append('file', file, file.name);\n\n this.upload(formData);\n }\n\n /**\n * Send AJAX request to uploadUrl with passed data\n *\n * @param {*} data — data to send\n */\n\n }, {\n key: 'upload',\n value: function upload(data) {\n capella.ajax.call({\n type: 'POST',\n url: this.uploadUrl,\n data: data,\n before: this.before.bind(this),\n progress: this.progress,\n success: this.success,\n error: this.error,\n after: this.after\n });\n }\n\n /**\n * Method to call before upload starts\n */\n\n }, {\n key: 'before',\n value: function before(data) {\n var filename = void 0;\n\n if (data instanceof FormData) {\n filename = this.currentFileName;\n }\n if (data && data.link) {\n filename = data.link;\n }\n if (data[0] instanceof File) {\n filename = data[0].name;\n }\n\n capella.uploadScreen.show(filename);\n }\n\n /**\n * Handle upload progress\n *\n * @param percentage — upload percentage\n */\n\n }, {\n key: 'progress',\n value: function progress(percentage) {\n percentage = 0.95 * percentage;\n capella.uploadScreen.progress(percentage);\n }\n\n /**\n * Successful upload handler\n *\n * @param {Object} response — response object\n * @param {Boolean} response.success — upload status\n * @param {String} response.url — if upload was successful, contains uploaded image url\n * @param {String} response.id — if upload was succesful, contains uploaded image id\n * @param {String} response.message — if upload failed, contains reason\n */\n\n }, {\n key: 'success',\n value: function success(response) {\n console.log(response);\n\n if (response.success) {\n capella.uploadScreen.progress(100);\n\n /** Redirect to uploaded image */\n window.location.href = '/image/' + response.id;\n } else {\n capella.uploadScreen.hide();\n }\n }\n\n /**\n * Upload error handler\n *\n * @param {Error} error — raised error\n */\n\n }, {\n key: 'error',\n value: function error(response) {\n capella.notifier.show({\n message: '' + response.message,\n time: 7000\n });\n capella.uploadScreen.hide();\n }\n\n /**\n * Method to call after upload\n */\n\n }, {\n key: 'after',\n value: function after() {}\n }]);\n\n return Uploader;\n}();\n\nexports.default = Uploader;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Require CSS build\n */\n__webpack_require__(2);\n\nmodule.exports = __webpack_require__(3);\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar capella = {};\n\nvar Uploader = __webpack_require__(0).default;\nvar Clipboard = __webpack_require__(4).default;\nvar DNDFileUploader = __webpack_require__(5).default;\nvar UploadScreen = __webpack_require__(6).default;\n\n/**\n * Require modules\n */\ncapella.ajax = __webpack_require__(7);\ncapella.transport = __webpack_require__(8);\ncapella.uploader = __webpack_require__(0);\ncapella.copyable = __webpack_require__(9);\ncapella.notificationToggler = __webpack_require__(10);\ncapella.checkForSafari = __webpack_require__(11);\ncapella.notifier = __webpack_require__(12);\n\ncapella.uploadScreen = new UploadScreen();\ncapella.uploader = new Uploader();\ncapella.clipboard = new Clipboard();\ncapella.dnd = new DNDFileUploader('.capella');\n\ncapella.init = function () {\n capella.copyable.init();\n capella.checkForSafari.init();\n};\n\nmodule.exports = capella;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Paste from clipboard module\n */\nvar Clipboard = function () {\n /**\n * Initialization of Clipboard module\n */\n function Clipboard() {\n _classCallCheck(this, Clipboard);\n\n document.body.addEventListener('paste', this.pasteFromClipboard);\n }\n\n /**\n * Pasted image from clipboard\n */\n\n\n _createClass(Clipboard, [{\n key: 'pasteFromClipboard',\n value: function pasteFromClipboard(event) {\n var clipboard = event.clipboardData || event.originalEvent.clipboardData || window.clipboardData;\n\n /**\n * items - for images\n * data - for links\n */\n var items = clipboard.items;\n var data = clipboard.getData('Text');\n var blob = null;\n\n event.stopPropagation();\n event.preventDefault();\n\n /**\n * Checking if clipboard has a link\n */\n if (data) {\n /**\n * Parsing on valid URL\n */\n var regex = /^((http[s]?):\\/)?\\/?([^:\\/\\s]+)((\\/\\w+)*\\/)([\\w\\-\\.]+[^#?\\s]+)(.*)?(#[\\w\\-]+)?$/;\n\n if (data.match(regex)) {\n capella.uploader.upload({ 'link': data });\n } else {\n document.getElementById('uploadLinkField').value = data;\n }\n }\n\n if (items) {\n /**\n * Checking all clipboard's files and choosing last image file\n */\n for (var i = items.length - 1; i >= 0; --i) {\n if (items[i].type.indexOf('image') === 0) {\n blob = items[i].getAsFile();\n break;\n }\n }\n }\n\n if (blob !== null) {\n /**\n * FilerReader is used for asynchronous image reading from blob: function at onload\n */\n var reader = new FileReader();\n\n reader.onload = function () {\n capella.uploader.uploadBlob(blob);\n };\n reader.readAsDataURL(blob);\n }\n }\n }]);\n\n return Clipboard;\n}();\n\nexports.default = Clipboard;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Class for working with drag and drop files to browser\n *\n * @class DNDFileUploader\n *\n * @property {HTMLElement} wrapper — page wrapper element\n *\n */\nvar DNDFileUploader = function () {\n /**\n * Bind drag and drop events\n *\n * @param {String} wrapper - page wrapper selector\n */\n function DNDFileUploader(wrapper) {\n _classCallCheck(this, DNDFileUploader);\n\n this.wrapper = document.querySelector(wrapper);\n\n this.wrapper.addEventListener('dragenter', this.dragover.bind(this));\n this.wrapper.addEventListener('dragover', this.dragover.bind(this));\n this.wrapper.addEventListener('dragleave', this.drageleave.bind(this));\n this.wrapper.addEventListener('drop', this.drop.bind(this));\n }\n\n /**\n *\n * File dragover handler\n *\n * @param {Event} event — dragover event\n */\n\n\n _createClass(DNDFileUploader, [{\n key: 'dragover',\n value: function dragover(event) {\n event.preventDefault();\n\n this.wrapper.classList.add('capella--dark');\n }\n\n /**\n *\n * File dragleave handler\n *\n * @param {Event} event — dragleave event\n */\n\n }, {\n key: 'drageleave',\n value: function drageleave(event) {\n event.preventDefault();\n\n this.wrapper.classList.remove('capella--dark');\n }\n\n /**\n * File drop handler\n *\n * @param {Event} event — drop event\n */\n\n }, {\n key: 'drop',\n value: function drop(event) {\n this.wrapper.classList.remove('capella--dark');\n\n var file = event.dataTransfer.files[0];\n\n capella.uploader.uploadBlob(file);\n\n event.preventDefault();\n }\n }]);\n\n return DNDFileUploader;\n}();\n\nexports.default = DNDFileUploader;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Class to control upload screen appearance\n *\n * @property {HTMLElement} mainContainer — page wrapper\n * @property {HTMLElement} progressBar — progress bar slider element\n * @property {String} loadingClass — upload screen class\n *\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar UploadScreen = function () {\n /**\n * @constructor\n * Get needed elements from page\n */\n function UploadScreen() {\n _classCallCheck(this, UploadScreen);\n\n this.mainContainer = document.querySelector('.capella');\n this.progressBar = document.querySelector('.js-capella__uploading-progress');\n this.loadingClass = 'capella--loading';\n }\n\n /**\n * Show loading screen by adding loadingClass to page wrapper\n *\n * @param {String} filename — file which is uploading now\n */\n\n\n _createClass(UploadScreen, [{\n key: 'show',\n value: function show(filename) {\n var filenameHolder = this.mainContainer.querySelector('.capella__uploading-filename');\n\n filenameHolder.textContent = filename;\n this.mainContainer.classList.add(this.loadingClass);\n }\n\n /**\n * Hide loading screen by removing loadingClass from page wrapper\n */\n\n }, {\n key: 'hide',\n value: function hide() {\n this.mainContainer.classList.remove(this.loadingClass);\n }\n\n /**\n * Method to control loading progress bar\n *\n * @param {Number} percents — uploading percentage\n */\n\n }, {\n key: 'progress',\n value: function progress(percents) {\n this.progressBar.style.width = percents + '%';\n }\n }]);\n\n return UploadScreen;\n}();\n\nexports.default = UploadScreen;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n!function(t,e){ true?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.ajax=e():t.ajax=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var a=n[r]={i:r,l:!1,exports:{}};return t[r].call(a.exports,a,a.exports,e),a.l=!0,a.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"\",e(e.s=0)}([function(t,e,n){\"use strict\";t.exports=function(){var t=function(t){return t instanceof FormData};return{call:function(e){if(e&&e.url){var n=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject(\"Microsoft.XMLHTTP\"),r=e.progress||null,a=e.success||function(){},o=e.error||function(){},u=e.before||null,i=e.after?e.after.bind(null,e.data):null;if(e.async=!0,e.type=e.type||\"GET\",e.data=e.data||\"\",e[\"content-type\"]=e[\"content-type\"]||\"application/json; charset=utf-8\",\"GET\"===e.type&&e.data&&(e.url=/\\?/.test(e.url)?e.url+\"&\"+e.data:e.url+\"?\"+e.data),e.withCredentials&&(n.withCredentials=!0),u&&\"function\"==typeof u){if(!1===u(e.data))return}if(n.open(e.type,e.url,e.async),!t(e.data)){var c=new FormData;for(var f in e.data)c.append(f,e.data[f]);e.data=c}r&&\"function\"==typeof r&&n.upload.addEventListener(\"progress\",function(t){var e=parseInt(t.loaded/t.total*100);r(e)},!1),n.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\"),n.onreadystatechange=function(){if(4===n.readyState){var t=n.responseText;try{t=JSON.parse(t)}catch(t){}200===n.status?a(t):o(t),i&&\"function\"==typeof i&&i()}},n.send(e.data)}}}}()}])});\n//# sourceMappingURL=bundle.js.map\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n!function(t,e){ true?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.transport=e():t.transport=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"\",e(e.s=0)}([function(t,e,n){\"use strict\";var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},o=n(1);t.exports=function(t){var e=null;t.input=null;var n=function(){t.input.click()},u=function(){e.before(t.input.files)},a=function(){var n=e.url,a=e.data,i=u,c=e.progress,f=e.success,s=e.error,p=e.after,l=new FormData,d=t.input.files;if(d.length>1)for(var y=0;yClick to copy\n *\n * You can pass callback function to init method. Callback will fire when something has copied\n *\n * @type {{init}}\n */\nmodule.exports = function () {\n var NAMES = {\n copyable: 'js-copyable',\n authorized: 'js-copyable-authorize'\n };\n\n /**\n * Take element by name and pass it to prepareElement function\n *\n * @param {Function} copiedCallback - fires when something has copied\n */\n var init = function init(copiedCallback) {\n var elems = document.getElementsByName(NAMES.copyable);\n\n if (!elems) {\n console.log('There are no copyable elements');\n return;\n }\n\n for (var i = 0; i < elems.length; i++) {\n prepareElement(elems[i], copiedCallback);\n }\n\n var authorizedElems = document.getElementsByName(NAMES.authorized);\n\n for (var _i = 0; _i < authorizedElems.length; _i++) {\n authorize(authorizedElems[_i]);\n }\n\n console.log('Copyable module initialized');\n\n this.clipboardButton = document.querySelector('.js-result__copy');\n\n if (this.clipboardButton) {\n this.clipboardButton.addEventListener('click', capella.notificationToggler.toggleCopiedIcon, true);\n }\n };\n\n /**\n * Add click and copied listeners to copyable element\n *\n * @param element\n * @param copiedCallback\n */\n var prepareElement = function prepareElement(element, copiedCallback) {\n element.addEventListener('click', elementClicked);\n element.addEventListener('copied', copiedCallback);\n };\n\n /**\n * Add click listener for authorized element\n *\n * @param element\n */\n var authorize = function authorize(element) {\n element.addEventListener('click', authorizedCopy);\n };\n\n /**\n * Click handler for authorized elements\n */\n var authorizedCopy = function authorizedCopy() {\n var authorizedElem = this;\n var copyable = authorizedElem.querySelector('[name=' + NAMES.copyable + ']');\n\n copyable.click();\n };\n\n /**\n * Click handler\n * Create new range, select copyable element and add range to selection. Then exec 'copy' command\n */\n var elementClicked = function elementClicked(event) {\n var selection = window.getSelection(),\n range = document.createRange();\n\n range.selectNodeContents(this);\n selection.removeAllRanges();\n selection.addRange(range);\n\n document.execCommand('copy');\n selection.removeAllRanges();\n\n /**\n * We create new CustomEvent and dispatch it on copyable element\n * Consist copied text in detail property\n */\n var CopiedEvent = new CustomEvent('copied', {\n bubbles: false,\n cancelable: false,\n detail: range.toString()\n });\n\n this.dispatchEvent(CopiedEvent);\n event.stopPropagation();\n };\n\n return {\n init: init\n };\n}();\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function () {\n var CSS = {\n /* Class of 'Copied' notification element */\n notificationClass: '.js-result__is-copied',\n\n /* Class used to hide notification after showTimeout */\n notificationHideClass: 'js-hidden'\n };\n\n /* 'Copied' notification element */\n var notificationElement = document.querySelector(CSS.notificationClass);\n\n /* Timeout after which notificationElement will be hidden */\n var showTimeout = 2000;\n\n /* Timer to hide notification */\n var notificationIsVisibleTimer = void 0;\n\n /**\n * Show and hide after showTimeout seconds copy-notifications\n */\n var toggleCopiedIcon = function toggleCopiedIcon(event) {\n /* Don't open link in new window unless one of these keys is pressed */\n if (event.ctrlKey || event.metaKey || event.which === 2) {\n return false;\n }\n\n event.preventDefault();\n\n /* Clear timer if it was set previously */\n if (notificationIsVisibleTimer) {\n clearTimeout(notificationIsVisibleTimer);\n }\n\n /* First reveal zero-opacity notification elem, then after timeout hide it again */\n notificationElement.classList.remove(CSS.notificationHideClass);\n notificationIsVisibleTimer = setTimeout(function () {\n notificationElement.classList.add(CSS.notificationHideClass);\n }, showTimeout);\n };\n\n return {\n toggleCopiedIcon: toggleCopiedIcon\n };\n}();\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * TEMP fix. Detect Safari and add class to body\n */\n\nmodule.exports = function () {\n var init = function init() {\n var userAgent = window.navigator.userAgent;\n\n if (userAgent.indexOf('Safari') >= 0 && userAgent.indexOf('Chrome') < 0) {\n document.body.classList.add('safari');\n }\n };\n\n return {\n init: init\n };\n}();\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\nvar notifier=function(e){function t(r){if(n[r])return n[r].exports;var c=n[r]={i:r,l:!1,exports:{}};return e[r].call(c.exports,c,c.exports,t),c.l=!0,c.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,\"a\",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p=\"\",t(t.s=2)}([function(e,t,n){\"use strict\";e.exports=function(){var e={wrapper:\"cdx-notifies\",notification:\"cdx-notify\",crossBtn:\"cdx-notify__cross\",okBtn:\"cdx-notify__button--confirm\",cancelBtn:\"cdx-notify__button--cancel\",input:\"cdx-notify__input\",btn:\"cdx-notify__button\",btnsWrapper:\"cdx-notify__btns-wrapper\"},t=function(t){var n=document.createElement(\"DIV\"),r=document.createElement(\"DIV\"),c=t.message,i=t.style;return n.classList.add(e.notification),i&&n.classList.add(e.notification+\"--\"+i),n.innerHTML=c,r.classList.add(e.crossBtn),r.addEventListener(\"click\",n.remove.bind(n)),n.appendChild(r),n};return{alert:t,confirm:function(n){var r=t(n),c=document.createElement(\"div\"),i=document.createElement(\"button\"),a=document.createElement(\"button\"),o=r.querySelector(e.crossBtn),d=n.cancelHandler,s=n.okHandler;return c.classList.add(e.btnsWrapper),i.innerHTML=n.okText||\"Confirm\",a.innerHTML=n.cancelText||\"Cancel\",i.classList.add(e.btn),a.classList.add(e.btn),i.classList.add(e.okBtn),a.classList.add(e.cancelBtn),d&&\"function\"==typeof d&&(a.addEventListener(\"click\",d),o.addEventListener(\"click\",d)),s&&\"function\"==typeof s&&i.addEventListener(\"click\",s),i.addEventListener(\"click\",r.remove.bind(r)),a.addEventListener(\"click\",r.remove.bind(r)),c.appendChild(i),c.appendChild(a),r.appendChild(c),r},prompt:function(n){var r=t(n),c=document.createElement(\"div\"),i=document.createElement(\"button\"),a=document.createElement(\"input\"),o=r.querySelector(e.crossBtn),d=n.cancelHandler,s=n.okHandler;return c.classList.add(e.btnsWrapper),i.innerHTML=n.okText||\"Ok\",i.classList.add(e.btn),i.classList.add(e.okBtn),a.classList.add(e.input),n.placeholder&&a.setAttribute(\"placeholder\",n.placeholder),n.default&&(a.value=n.default),n.inputType&&(a.type=n.inputType),d&&\"function\"==typeof d&&o.addEventListener(\"click\",d),s&&\"function\"==typeof s&&i.addEventListener(\"click\",function(){s(a.value)}),i.addEventListener(\"click\",r.remove.bind(r)),c.appendChild(a),c.appendChild(i),r.appendChild(c),r},wrapper:function(){var t=document.createElement(\"DIV\");return t.classList.add(e.wrapper),t}}}()},function(e,t){},function(e,t,n){\"use strict\";/*!\n * Codex JavaScript Notification module\n * https://github.com/codex-team/js-notifier\n *\n * Codex Team - https://ifmo.su\n *\n * MIT License | (c) Codex 2017\n */\ne.exports=function(){function e(){if(i)return!0;i=r.wrapper(),document.body.appendChild(i)}function t(t){if(t.message){e();var n=null,a=t.time||8e3;switch(t.type){case\"confirm\":n=r.confirm(t);break;case\"prompt\":n=r.prompt(t);break;default:n=r.alert(t),window.setTimeout(function(){n.remove()},a)}i.appendChild(n),n.classList.add(c)}}n(1);var r=n(0),c=\"cdx-notify--bounce-in\",i=null;return{show:t}}()}]);\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = notifier;\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// public/build/bundle.js"," \t// The module cache\n \tvar installedModules = {};\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, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\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 = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 6b1120b3ebb7773e1a5c","'use strict';\n\n/**\n * @class Uploader\n * Handle images uploading\n *\n * @property {String} uploadUrl — url to upload images\n * @property {HTMLElement} uploadFilButton — transport initialization trigger\n * @property {HTMLElement} uploadLinkField — input to insert image link\n */\nexport default class Uploader {\n /**\n * Uploader class constructor. Get needed elements and bind events\n */\n constructor() {\n this.uploadUrl = '/upload';\n this.uploadFileButton = document.getElementById('uploadFileButton');\n this.uploadLinkField = document.getElementById('uploadLinkField');\n\n if (this.uploadFileButton) {\n this.uploadFileButton.addEventListener('click', this.uploadByTransport.bind(this), false);\n }\n\n if (this.uploadLinkField) {\n this.uploadLinkField.addEventListener('keydown', this.uploadByUrl.bind(this), false);\n }\n }\n\n /**\n * Init codex.transport to select image from user's computer\n */\n uploadByTransport() {\n capella.transport.init({\n url: this.uploadUrl,\n multiple: false,\n accept: 'image/png, image/gif, image/jpg, image/jpeg, image/bmp',\n data: {},\n before: this.before,\n progress: this.progress,\n success: this.success,\n error: this.error,\n after: this.after\n });\n }\n\n /**\n * Handle upload by image url\n *\n * @param e\n */\n uploadByUrl(e) {\n /** Check for Enter key */\n if (e.keyCode !== 13) {\n return;\n }\n e.preventDefault();\n\n if (this.uploadLinkField) {\n this.upload({'link': this.uploadLinkField.value});\n }\n }\n\n /**\n * Handler to upload blob data using FormData\n *\n * @param {Blob|File} file — file to send\n */\n uploadBlob(file) {\n let formData = new FormData();\n\n this.currentFileName = file.name;\n\n formData.append('file', file, file.name);\n\n this.upload(formData);\n }\n\n /**\n * Send AJAX request to uploadUrl with passed data\n *\n * @param {*} data — data to send\n */\n upload(data) {\n capella.ajax.call({\n type: 'POST',\n url: this.uploadUrl,\n data: data,\n before: this.before.bind(this),\n progress: this.progress,\n success: this.success,\n error: this.error,\n after: this.after\n });\n }\n\n /**\n * Method to call before upload starts\n */\n before(data) {\n let filename;\n\n if (data instanceof FormData) {\n filename = this.currentFileName;\n }\n if (data && data.link) {\n filename = data.link;\n }\n if (data[0] instanceof File) {\n filename = data[0].name;\n }\n\n capella.uploadScreen.show(filename);\n }\n\n /**\n * Handle upload progress\n *\n * @param percentage — upload percentage\n */\n progress(percentage) {\n percentage = 0.95 * percentage;\n capella.uploadScreen.progress(percentage);\n }\n\n /**\n * Successful upload handler\n *\n * @param {Object} response — response object\n * @param {Boolean} response.success — upload status\n * @param {String} response.url — if upload was successful, contains uploaded image url\n * @param {String} response.id — if upload was succesful, contains uploaded image id\n * @param {String} response.message — if upload failed, contains reason\n */\n success(response) {\n console.log(response);\n\n if (response.success) {\n capella.uploadScreen.progress(100);\n\n /** Redirect to uploaded image */\n window.location.href = '/image/' + response.id;\n } else {\n capella.uploadScreen.hide();\n }\n }\n\n /**\n * Upload error handler\n *\n * @param {Error} error — raised error\n */\n error(response) {\n capella.notifier.show({\n message: '' + response.message,\n time: 7000\n });\n capella.uploadScreen.hide();\n }\n\n /**\n * Method to call after upload\n */\n after() {}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/uploader.js","/**\n * Require CSS build\n */\nrequire('./css/main.css');\n\nmodule.exports = require('./js/main.js');\n\n\n\n// WEBPACK FOOTER //\n// ./public/app/entry.js","'use strict';\n\n\nconst capella = {};\n\nlet Uploader = require('./uploader').default;\nlet Clipboard = require('./clipboard').default;\nlet DNDFileUploader = require('./dragndrop').default;\nlet UploadScreen = require('./uploadScreen').default;\n\n/**\n * Require modules\n */\ncapella.ajax = require('codex.ajax');\ncapella.transport = require('codex.transport');\ncapella.uploader = require('./uploader');\ncapella.copyable = require('./copyable');\ncapella.notificationToggler = require('./notificationToggler');\ncapella.checkForSafari = require('./checkForSafari');\ncapella.notifier = require('exports-loader?notifier!codex-notifier');\n\ncapella.uploadScreen = new UploadScreen();\ncapella.uploader = new Uploader();\ncapella.clipboard = new Clipboard();\ncapella.dnd = new DNDFileUploader('.capella');\n\ncapella.init = function () {\n capella.copyable.init();\n capella.checkForSafari.init();\n};\n\nmodule.exports = capella;\n\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/main.js","/**\n * Paste from clipboard module\n */\nexport default class Clipboard {\n /**\n * Initialization of Clipboard module\n */\n constructor() {\n document.body.addEventListener('paste', this.pasteFromClipboard);\n }\n\n /**\n * Pasted image from clipboard\n */\n pasteFromClipboard(event) {\n let clipboard = (event.clipboardData || event.originalEvent.clipboardData || window.clipboardData);\n\n /**\n * items - for images\n * data - for links\n */\n let items = clipboard.items;\n let data = clipboard.getData('Text');\n let blob = null;\n\n event.stopPropagation();\n event.preventDefault();\n\n /**\n * Checking if clipboard has a link\n */\n if (data) {\n /**\n * Parsing on valid URL\n */\n let regex = /^((http[s]?):\\/)?\\/?([^:\\/\\s]+)((\\/\\w+)*\\/)([\\w\\-\\.]+[^#?\\s]+)(.*)?(#[\\w\\-]+)?$/;\n\n if (data.match(regex)) {\n capella.uploader.upload({'link': data});\n } else {\n document.getElementById('uploadLinkField').value = data;\n }\n }\n\n if (items) {\n /**\n * Checking all clipboard's files and choosing last image file\n */\n for (let i = items.length - 1; i >= 0; --i) {\n if (items[i].type.indexOf('image') === 0) {\n blob = items[i].getAsFile();\n break;\n }\n }\n }\n\n if (blob !== null) {\n /**\n * FilerReader is used for asynchronous image reading from blob: function at onload\n */\n let reader = new FileReader();\n\n reader.onload = function () {\n capella.uploader.uploadBlob(blob);\n };\n reader.readAsDataURL(blob);\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/clipboard.js","/**\n * Class for working with drag and drop files to browser\n *\n * @class DNDFileUploader\n *\n * @property {HTMLElement} wrapper — page wrapper element\n *\n */\nexport default class DNDFileUploader {\n /**\n * Bind drag and drop events\n *\n * @param {String} wrapper - page wrapper selector\n */\n constructor(wrapper) {\n this.wrapper = document.querySelector(wrapper);\n\n this.wrapper.addEventListener('dragenter', this.dragover.bind(this));\n this.wrapper.addEventListener('dragover', this.dragover.bind(this));\n this.wrapper.addEventListener('dragleave', this.drageleave.bind(this));\n this.wrapper.addEventListener('drop', this.drop.bind(this));\n }\n\n /**\n *\n * File dragover handler\n *\n * @param {Event} event — dragover event\n */\n dragover(event) {\n event.preventDefault();\n\n this.wrapper.classList.add('capella--dark');\n }\n\n /**\n *\n * File dragleave handler\n *\n * @param {Event} event — dragleave event\n */\n drageleave(event) {\n event.preventDefault();\n\n this.wrapper.classList.remove('capella--dark');\n }\n\n /**\n * File drop handler\n *\n * @param {Event} event — drop event\n */\n drop(event) {\n this.wrapper.classList.remove('capella--dark');\n\n let file = event.dataTransfer.files[0];\n\n capella.uploader.uploadBlob(file);\n\n event.preventDefault();\n }\n}\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/dragndrop.js","'use strict';\n\n/**\n * Class to control upload screen appearance\n *\n * @property {HTMLElement} mainContainer — page wrapper\n * @property {HTMLElement} progressBar — progress bar slider element\n * @property {String} loadingClass — upload screen class\n *\n */\nexport default class UploadScreen {\n /**\n * @constructor\n * Get needed elements from page\n */\n constructor() {\n this.mainContainer = document.querySelector('.capella');\n this.progressBar = document.querySelector('.js-capella__uploading-progress');\n this.loadingClass = 'capella--loading';\n }\n\n /**\n * Show loading screen by adding loadingClass to page wrapper\n *\n * @param {String} filename — file which is uploading now\n */\n show(filename) {\n let filenameHolder = this.mainContainer.querySelector('.capella__uploading-filename');\n\n filenameHolder.textContent = filename;\n this.mainContainer.classList.add(this.loadingClass);\n }\n\n /**\n * Hide loading screen by removing loadingClass from page wrapper\n */\n hide() {\n this.mainContainer.classList.remove(this.loadingClass);\n }\n\n /**\n * Method to control loading progress bar\n *\n * @param {Number} percents — uploading percentage\n */\n progress(percents) {\n this.progressBar.style.width = percents + '%';\n }\n}\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/uploadScreen.js","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.ajax=e():t.ajax=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var a=n[r]={i:r,l:!1,exports:{}};return t[r].call(a.exports,a,a.exports,e),a.l=!0,a.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"\",e(e.s=0)}([function(t,e,n){\"use strict\";t.exports=function(){var t=function(t){return t instanceof FormData};return{call:function(e){if(e&&e.url){var n=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject(\"Microsoft.XMLHTTP\"),r=e.progress||null,a=e.success||function(){},o=e.error||function(){},u=e.before||null,i=e.after?e.after.bind(null,e.data):null;if(e.async=!0,e.type=e.type||\"GET\",e.data=e.data||\"\",e[\"content-type\"]=e[\"content-type\"]||\"application/json; charset=utf-8\",\"GET\"===e.type&&e.data&&(e.url=/\\?/.test(e.url)?e.url+\"&\"+e.data:e.url+\"?\"+e.data),e.withCredentials&&(n.withCredentials=!0),u&&\"function\"==typeof u){if(!1===u(e.data))return}if(n.open(e.type,e.url,e.async),!t(e.data)){var c=new FormData;for(var f in e.data)c.append(f,e.data[f]);e.data=c}r&&\"function\"==typeof r&&n.upload.addEventListener(\"progress\",function(t){var e=parseInt(t.loaded/t.total*100);r(e)},!1),n.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\"),n.onreadystatechange=function(){if(4===n.readyState){var t=n.responseText;try{t=JSON.parse(t)}catch(t){}200===n.status?a(t):o(t),i&&\"function\"==typeof i&&i()}},n.send(e.data)}}}}()}])});\n//# sourceMappingURL=bundle.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/codex.ajax/lib/bundle.js\n// module id = 7\n// module chunks = 0","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.transport=e():t.transport=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"\",e(e.s=0)}([function(t,e,n){\"use strict\";var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},o=n(1);t.exports=function(t){var e=null;t.input=null;var n=function(){t.input.click()},u=function(){e.before(t.input.files)},a=function(){var n=e.url,a=e.data,i=u,c=e.progress,f=e.success,s=e.error,p=e.after,l=new FormData,d=t.input.files;if(d.length>1)for(var y=0;yClick to copy\n *\n * You can pass callback function to init method. Callback will fire when something has copied\n *\n * @type {{init}}\n */\nmodule.exports = function () {\n const NAMES = {\n copyable: 'js-copyable',\n authorized: 'js-copyable-authorize'\n };\n\n /**\n * Take element by name and pass it to prepareElement function\n *\n * @param {Function} copiedCallback - fires when something has copied\n */\n let init = function (copiedCallback) {\n let elems = document.getElementsByName(NAMES.copyable);\n\n if (!elems) {\n console.log('There are no copyable elements');\n return;\n }\n\n for (let i = 0; i < elems.length; i++) {\n prepareElement(elems[i], copiedCallback);\n }\n\n let authorizedElems = document.getElementsByName(NAMES.authorized);\n\n for (let i = 0; i < authorizedElems.length; i++) {\n authorize(authorizedElems[i]);\n }\n\n console.log('Copyable module initialized');\n\n this.clipboardButton = document.querySelector('.js-result__copy');\n\n if (this.clipboardButton) {\n this.clipboardButton.addEventListener('click', capella.notificationToggler.toggleCopiedIcon, true);\n }\n };\n\n /**\n * Add click and copied listeners to copyable element\n *\n * @param element\n * @param copiedCallback\n */\n let prepareElement = function (element, copiedCallback) {\n element.addEventListener('click', elementClicked);\n element.addEventListener('copied', copiedCallback);\n };\n\n /**\n * Add click listener for authorized element\n *\n * @param element\n */\n let authorize = function (element) {\n element.addEventListener('click', authorizedCopy);\n };\n\n /**\n * Click handler for authorized elements\n */\n let authorizedCopy = function () {\n let authorizedElem = this;\n let copyable = authorizedElem.querySelector('[name='+NAMES.copyable+']');\n\n copyable.click();\n };\n\n /**\n * Click handler\n * Create new range, select copyable element and add range to selection. Then exec 'copy' command\n */\n let elementClicked = function (event) {\n let selection = window.getSelection(),\n range = document.createRange();\n\n range.selectNodeContents(this);\n selection.removeAllRanges();\n selection.addRange(range);\n\n document.execCommand('copy');\n selection.removeAllRanges();\n\n /**\n * We create new CustomEvent and dispatch it on copyable element\n * Consist copied text in detail property\n */\n let CopiedEvent = new CustomEvent('copied', {\n bubbles: false,\n cancelable: false,\n detail: range.toString()\n });\n\n this.dispatchEvent(CopiedEvent);\n event.stopPropagation();\n };\n\n return {\n init: init\n };\n}();\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/copyable.js","'use strict';\n\nmodule.exports = function () {\n const CSS = {\n /* Class of 'Copied' notification element */\n notificationClass: '.js-result__is-copied',\n\n /* Class used to hide notification after showTimeout */\n notificationHideClass: 'js-hidden'\n };\n\n /* 'Copied' notification element */\n const notificationElement = document.querySelector(CSS.notificationClass);\n\n /* Timeout after which notificationElement will be hidden */\n const showTimeout = 2000;\n\n /* Timer to hide notification */\n let notificationIsVisibleTimer;\n\n /**\n * Show and hide after showTimeout seconds copy-notifications\n */\n let toggleCopiedIcon = function (event) {\n /* Don't open link in new window unless one of these keys is pressed */\n if (event.ctrlKey || event.metaKey || event.which === 2) {\n return false;\n }\n\n event.preventDefault();\n\n /* Clear timer if it was set previously */\n if (notificationIsVisibleTimer) {\n clearTimeout(notificationIsVisibleTimer);\n }\n\n /* First reveal zero-opacity notification elem, then after timeout hide it again */\n notificationElement.classList.remove(CSS.notificationHideClass);\n notificationIsVisibleTimer = setTimeout(function () {\n notificationElement.classList.add(CSS.notificationHideClass);\n }, showTimeout);\n };\n\n return {\n toggleCopiedIcon : toggleCopiedIcon\n };\n}();\n\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/notificationToggler.js","'use strict';\n\n\n/**\n * TEMP fix. Detect Safari and add class to body\n */\nmodule.exports = function () {\n let init = function () {\n let userAgent = window.navigator.userAgent;\n\n if (userAgent.indexOf('Safari') >= 0 && userAgent.indexOf('Chrome') < 0) {\n document.body.classList.add('safari');\n }\n };\n\n return {\n init\n };\n}();\n\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/checkForSafari.js","var notifier=function(e){function t(r){if(n[r])return n[r].exports;var c=n[r]={i:r,l:!1,exports:{}};return e[r].call(c.exports,c,c.exports,t),c.l=!0,c.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,\"a\",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p=\"\",t(t.s=2)}([function(e,t,n){\"use strict\";e.exports=function(){var e={wrapper:\"cdx-notifies\",notification:\"cdx-notify\",crossBtn:\"cdx-notify__cross\",okBtn:\"cdx-notify__button--confirm\",cancelBtn:\"cdx-notify__button--cancel\",input:\"cdx-notify__input\",btn:\"cdx-notify__button\",btnsWrapper:\"cdx-notify__btns-wrapper\"},t=function(t){var n=document.createElement(\"DIV\"),r=document.createElement(\"DIV\"),c=t.message,i=t.style;return n.classList.add(e.notification),i&&n.classList.add(e.notification+\"--\"+i),n.innerHTML=c,r.classList.add(e.crossBtn),r.addEventListener(\"click\",n.remove.bind(n)),n.appendChild(r),n};return{alert:t,confirm:function(n){var r=t(n),c=document.createElement(\"div\"),i=document.createElement(\"button\"),a=document.createElement(\"button\"),o=r.querySelector(e.crossBtn),d=n.cancelHandler,s=n.okHandler;return c.classList.add(e.btnsWrapper),i.innerHTML=n.okText||\"Confirm\",a.innerHTML=n.cancelText||\"Cancel\",i.classList.add(e.btn),a.classList.add(e.btn),i.classList.add(e.okBtn),a.classList.add(e.cancelBtn),d&&\"function\"==typeof d&&(a.addEventListener(\"click\",d),o.addEventListener(\"click\",d)),s&&\"function\"==typeof s&&i.addEventListener(\"click\",s),i.addEventListener(\"click\",r.remove.bind(r)),a.addEventListener(\"click\",r.remove.bind(r)),c.appendChild(i),c.appendChild(a),r.appendChild(c),r},prompt:function(n){var r=t(n),c=document.createElement(\"div\"),i=document.createElement(\"button\"),a=document.createElement(\"input\"),o=r.querySelector(e.crossBtn),d=n.cancelHandler,s=n.okHandler;return c.classList.add(e.btnsWrapper),i.innerHTML=n.okText||\"Ok\",i.classList.add(e.btn),i.classList.add(e.okBtn),a.classList.add(e.input),n.placeholder&&a.setAttribute(\"placeholder\",n.placeholder),n.default&&(a.value=n.default),n.inputType&&(a.type=n.inputType),d&&\"function\"==typeof d&&o.addEventListener(\"click\",d),s&&\"function\"==typeof s&&i.addEventListener(\"click\",function(){s(a.value)}),i.addEventListener(\"click\",r.remove.bind(r)),c.appendChild(a),c.appendChild(i),r.appendChild(c),r},wrapper:function(){var t=document.createElement(\"DIV\");return t.classList.add(e.wrapper),t}}}()},function(e,t){},function(e,t,n){\"use strict\";/*!\n * Codex JavaScript Notification module\n * https://github.com/codex-team/js-notifier\n *\n * Codex Team - https://ifmo.su\n *\n * MIT License | (c) Codex 2017\n */\ne.exports=function(){function e(){if(i)return!0;i=r.wrapper(),document.body.appendChild(i)}function t(t){if(t.message){e();var n=null,a=t.time||8e3;switch(t.type){case\"confirm\":n=r.confirm(t);break;case\"prompt\":n=r.prompt(t);break;default:n=r.alert(t),window.setTimeout(function(){n.remove()},a)}i.appendChild(n),n.classList.add(c)}}n(1);var r=n(0),c=\"cdx-notify--bounce-in\",i=null;return{show:t}}()}]);\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = notifier;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/exports-loader?notifier!./node_modules/codex-notifier/notifier.js\n// module id = 12\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file From a5031d66314c4c9c980bdc9bf16bab3b4d42fda1 Mon Sep 17 00:00:00 2001 From: Taly Date: Mon, 4 Dec 2017 14:58:17 +0300 Subject: [PATCH 2/2] Change color --- public/app/css/pages/index.css | 13 ++----------- public/build/bundle.css | 2 +- public/build/bundle.js.map | 2 +- 3 files changed, 4 insertions(+), 13 deletions(-) diff --git a/public/app/css/pages/index.css b/public/app/css/pages/index.css index 90fceb8..cf40840 100644 --- a/public/app/css/pages/index.css +++ b/public/app/css/pages/index.css @@ -102,18 +102,9 @@ } a { - color: #8051ff; text-decoration: none; - position: relative; - - &::after { - content: ''; - border-bottom: 2px solid #8051ff; - position: absolute; - left: 0; - top: 100%; - width: 100%; - } + color: #7a96ff; + border-bottom: 2px solid #4d72da; } } diff --git a/public/build/bundle.css b/public/build/bundle.css index bfd1b13..fefb487 100644 --- a/public/build/bundle.css +++ b/public/build/bundle.css @@ -1,4 +1,4 @@ .cdx-notifies{position:fixed;z-index:2;bottom:20px;left:20px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif}.cdx-notify{position:relative;width:220px;margin-top:15px;padding:13px 16px;background:#fff;-webkit-box-shadow:0 11px 17px 0 rgba(23,32,61,.13);box-shadow:0 11px 17px 0 rgba(23,32,61,.13);border-radius:5px;font-size:14px;line-height:1.4em;word-wrap:break-word}.cdx-notify:before{content:"";position:absolute;display:block;top:0;left:0;width:3px;height:calc(100% - 6px);margin:3px;border-radius:5px;background:transparent}.cdx-notify__cross{position:absolute;top:5px;right:5px;width:10px;height:10px;padding:5px;opacity:.54;cursor:pointer}.cdx-notify__cross:after,.cdx-notify__cross:before{content:"";position:absolute;left:9px;top:5px;height:12px;width:2px;background:#575d67}.cdx-notify__cross:before{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.cdx-notify__cross:after{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.cdx-notify__cross:hover{opacity:1}.cdx-notify__btns-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;margin-top:5px}.cdx-notify__button{border:none;border-radius:3px;font-size:13px;padding:5px 10px;cursor:pointer}.cdx-notify__button:last-child{margin-left:10px}.cdx-notify__button--cancel{background:#f2f5f7;-webkit-box-shadow:0 2px 1px 0 rgba(16,19,29,0);box-shadow:0 2px 1px 0 rgba(16,19,29,0);color:#656b7c}.cdx-notify__button--cancel:hover{background:#eee}.cdx-notify__button--confirm{background:#34c992;-webkit-box-shadow:0 1px 1px 0 rgba(18,49,35,.05);box-shadow:0 1px 1px 0 rgba(18,49,35,.05);color:#fff}.cdx-notify__button--confirm:hover{background:#33b082}.cdx-notify__input{max-width:130px;padding:5px 10px;background:#f7f7f7;border:0;border-radius:3px;font-size:13px;color:#656b7c;outline:none}.cdx-notify__input::-webkit-input-placeholder{color:#656b7c}.cdx-notify__input:-ms-input-placeholder,.cdx-notify__input::-ms-input-placeholder{color:#656b7c}.cdx-notify__input::placeholder{color:#656b7c}.cdx-notify__input:focus::-webkit-input-placeholder{color:rgba(101,107,124,.3)}.cdx-notify__input:focus:-ms-input-placeholder,.cdx-notify__input:focus::-ms-input-placeholder{color:rgba(101,107,124,.3)}.cdx-notify__input:focus::placeholder{color:rgba(101,107,124,.3)}@-webkit-keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(.3);transform:scale(.3)}50%{opacity:1;-webkit-transform:scale(1.05);transform:scale(1.05)}70%{-webkit-transform:scale(.9);transform:scale(.9)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(.3);transform:scale(.3)}50%{opacity:1;-webkit-transform:scale(1.05);transform:scale(1.05)}70%{-webkit-transform:scale(.9);transform:scale(.9)}to{-webkit-transform:scale(1);transform:scale(1)}}.cdx-notify--bounce-in{-webkit-animation-name:bounceIn;animation-name:bounceIn;-webkit-animation-duration:.6s;animation-duration:.6s;-webkit-animation-iteration-count:1;animation-iteration-count:1}.cdx-notify--success{background:#fafffe}.cdx-notify--success:before{background:#41ffb1}.cdx-notify--error{background:#fffbfb}.cdx-notify--error:before{background:#fb5d5d} -/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit;font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}[hidden],template{display:none}body,html{height:100%}body{background-size:cover;background:#11173e url(/public/app/img/space-bg.jpg);background-position:50%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue;font-size:18px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:1.5em;color:#aea2d9}.js-hidden{opacity:0!important}.safari #startup{display:none}.spaceship{-webkit-animation:sniff 10s linear infinite;animation:sniff 10s linear infinite;-webkit-transform-origin:center;transform-origin:center}.spaceship__nozzle{-webkit-animation:nozzle 2s linear infinite;animation:nozzle 2s linear infinite}@-webkit-keyframes sniff{0%{-webkit-transform:rotate3d(0,0,0,0) scale(1);transform:rotate3d(0,0,0,0) scale(1)}35%{-webkit-transform:rotate3d(0,0,0,0) scale(1);transform:rotate3d(0,0,0,0) scale(1)}40%{-webkit-transform:rotate3d(-.1,.1,0,50deg) scale(.8);transform:rotate3d(-.1,.1,0,50deg) scale(.8)}45%{-webkit-transform:rotate3d(-.1,.1,0,20deg) scale(.6);transform:rotate3d(-.1,.1,0,20deg) scale(.6)}50%{-webkit-transform:rotate3d(0,0,0,0) scale(.6);transform:rotate3d(0,0,0,0) scale(.6)}85%{-webkit-transform:rotate3d(0,0,0,0) scale(.6);transform:rotate3d(0,0,0,0) scale(.6)}90%{-webkit-transform:rotate3d(-.1,.1,0,-20deg) scale(.6);transform:rotate3d(-.1,.1,0,-20deg) scale(.6)}95%{-webkit-transform:rotate3d(-.1,.1,0,-50deg) scale(.8);transform:rotate3d(-.1,.1,0,-50deg) scale(.8)}to{-webkit-transform:rotate3d(0,0,0,0) scale(1);transform:rotate3d(0,0,0,0) scale(1)}}@keyframes sniff{0%{-webkit-transform:rotate3d(0,0,0,0) scale(1);transform:rotate3d(0,0,0,0) scale(1)}35%{-webkit-transform:rotate3d(0,0,0,0) scale(1);transform:rotate3d(0,0,0,0) scale(1)}40%{-webkit-transform:rotate3d(-.1,.1,0,50deg) scale(.8);transform:rotate3d(-.1,.1,0,50deg) scale(.8)}45%{-webkit-transform:rotate3d(-.1,.1,0,20deg) scale(.6);transform:rotate3d(-.1,.1,0,20deg) scale(.6)}50%{-webkit-transform:rotate3d(0,0,0,0) scale(.6);transform:rotate3d(0,0,0,0) scale(.6)}85%{-webkit-transform:rotate3d(0,0,0,0) scale(.6);transform:rotate3d(0,0,0,0) scale(.6)}90%{-webkit-transform:rotate3d(-.1,.1,0,-20deg) scale(.6);transform:rotate3d(-.1,.1,0,-20deg) scale(.6)}95%{-webkit-transform:rotate3d(-.1,.1,0,-50deg) scale(.8);transform:rotate3d(-.1,.1,0,-50deg) scale(.8)}to{-webkit-transform:rotate3d(0,0,0,0) scale(1);transform:rotate3d(0,0,0,0) scale(1)}}@-webkit-keyframes nozzle{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.15);transform:scale(1.15)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes nozzle{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.15);transform:scale(1.15)}to{-webkit-transform:scale(1);transform:scale(1)}}.capella{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-height:100%}.capella__drag-n-drop-activator,.capella__uploading{display:none}.capella--dark{background:rgba(7,7,25,.88)}.capella--dark .capella__drag-n-drop{position:relative;border-color:#564c90}.capella--dark .capella__dark-contents{opacity:.3}.capella--dark .capella__drag-n-drop-activator{display:block;position:absolute;bottom:40px;left:50%;width:100%;-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:33px;color:#8129ff}.capella--dark .capella__drag-n-drop-activator img{display:block;margin:15px auto}.capella--loading .capella__logo{margin-bottom:10px}.capella--loading .capella__dark-contents{display:none}.capella--loading .capella__uploading{display:block}.capella--loading .capella__uploading-title{margin-bottom:12px;font-size:22px}.capella--loading .capella__uploading-progress{height:5px;width:277px;background:#0d0918;border-radius:3px;margin:13px auto}.capella--loading .capella__uploading-progress div{height:100%;background:#830cff;border-radius:3px;transition:width .4s,-webkit-transform .4s;transition:width .4s,transform .4s;transition:width .4s,transform .4s,-webkit-transform .4s}.capella--loading .capella__uploading-filename{font-size:15px}.capella__drag-n-drop{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;box-sizing:border-box;margin:30px;padding:40px 0;border:2px dashed #564c90}.capella__contents{height:470px;text-align:center}.capella__contents p{max-width:430px}.capella__contents a{color:#8051ff;text-decoration:none;position:relative}.capella__contents a:after{content:"";border-bottom:2px solid #8051ff;position:absolute;left:0;top:100%;width:100%}.capella__logo{display:inline-block;margin:16px auto 80px}.capella__button{padding:0 30px;margin-top:32px;border:0;border-radius:25px;background:#6c0bd1;font-family:inherit;line-height:51px;color:#fff;-webkit-appearance:none;outline:none;cursor:pointer}.capella__button,.capella__button:before{display:inline-block;vertical-align:middle}.capella__button:before{content:url(/public/app/svg/instagram-logo.svg);line-height:normal;margin:0 10px 0 -5px}.capella__button:hover{background:#6004c0}.capella__input{margin-top:40px;padding-bottom:10px;background:transparent;border-color:transparent;border-bottom:2px solid rgba(181,155,218,.44);border-radius:0;text-align:center;font-family:inherit;font-size:17px;line-height:1.3em;color:#fff;-webkit-appearance:none;outline:none}.capella__input:focus::-webkit-input-placeholder{opacity:0;transition:opacity .1s ease .1s}.capella__input::-webkit-input-placeholder{color:#b59bda}.safari .capella__uploading{margin-top:250px}@media (max-width:980px){.capella{overflow-y:scroll;overflow-x:hidden}.capella,.capella__drag-n-drop{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.capella__drag-n-drop{width:100%;height:auto;padding:20px 0;border:0 solid transparent}.capella__logo{margin-bottom:50px}.capella__button{margin:50px auto 0}.capella__contents{height:auto;padding:0 10px}.capella__contents p{margin:0 auto}.capella--loading .capella__uploading{margin-top:100px}.capella--loading .capella__uploading-progress{width:200px}}.body--black,.result{background:#101012}.result{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;height:100%;color:#59555e;font-size:14.5px}.result__contents{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;min-width:100%}.result a{color:inherit;text-decoration:none}.result a:hover{color:#fff}.result input{display:none;width:121px;background:transparent;border:0 solid transparent;color:inherit;text-align:right;outline:none}.result input:first-of-type{margin-left:10px}.result__img{height:auto;width:auto;max-height:70vh;max-width:90vw;margin:50px 0}.result__copy .result__copy-text{display:none}.result__copy svg{width:15px;height:17px;margin-right:10px;vertical-align:text-bottom}.result__copy:hover{color:#fff;cursor:pointer}.result__copy:hover svg path{fill:#fff}.result__is-copied{color:#fff}.result__is-copied svg{margin-right:10px}.result__footer{padding:0 20px;background:#101012}.result__footer-logo{margin-right:35px;vertical-align:sub}.result__footer-filters{padding:14px 0}.result__footer-about{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:14px 0;border-top:1px solid #28282e}.result__footer-link{line-height:20px}.result__footer-link:not(:first-of-type):not(:nth-of-type(2)):before{content:"";display:inline-block;vertical-align:middle;width:4px;height:4px;border-radius:50%;background:#313137;margin:0 .5em}.result__footer .codex-team{margin-left:auto;color:#fff}@media (max-width:980px){.result{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.result__is-copied{margin-left:9px}.result__is-copied svg{margin-right:6px}.result__img{-ms-flex-item-align:start;align-self:flex-start;max-width:calc(100% - 30px);height:auto;padding:0;margin:15px auto}.result__copy{display:inline-block;margin:6px 0 13px;padding:0 9px;background:#222123;line-height:33px;border-radius:2px}.result__copy .result__copy-text{display:initial}.result__copy .result__copy-link{position:absolute;top:-200%;left:13px}.result__copy svg{margin-right:5px}.result__copy:hover{color:#59555e}.result__copy:hover svg path{fill:#59555e}.result__footer{min-width:100%;padding:0 15px;box-sizing:border-box}.result__footer-filters{padding:0}.result__footer .codex-team{margin-left:0;color:inherit}.result__footer .codex-team:before{content:"";display:inline-block;vertical-align:middle;width:4px;height:4px;border-radius:50%;background:#313137;margin:0 .5em}.result__footer-logo-link{margin-right:auto}}.cdx-notifies{left:auto;right:75px;bottom:78px}@media (max-width:980px){.cdx-notifies{right:40px;bottom:40px}}.cdx-notify{border-radius:1px;font-size:15px;padding:20px 33px;color:#434152;background:#d1d7ec;width:auto}.cdx-notify__cross{display:none}.cdx-notify__warning-sign{background-image:url(/public/app/svg/warning.svg);background-repeat:no-repeat;width:23px;height:19.7px;margin-right:17px;margin-left:-8px;margin-bottom:-4px;display:inline-block} +/*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit;font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}[hidden],template{display:none}body,html{height:100%}body{background-size:cover;background:#11173e url(/public/app/img/space-bg.jpg);background-position:50%;font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue;font-size:18px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:1.5em;color:#aea2d9}.js-hidden{opacity:0!important}.safari #startup{display:none}.spaceship{-webkit-animation:sniff 10s linear infinite;animation:sniff 10s linear infinite;-webkit-transform-origin:center;transform-origin:center}.spaceship__nozzle{-webkit-animation:nozzle 2s linear infinite;animation:nozzle 2s linear infinite}@-webkit-keyframes sniff{0%{-webkit-transform:rotate3d(0,0,0,0) scale(1);transform:rotate3d(0,0,0,0) scale(1)}35%{-webkit-transform:rotate3d(0,0,0,0) scale(1);transform:rotate3d(0,0,0,0) scale(1)}40%{-webkit-transform:rotate3d(-.1,.1,0,50deg) scale(.8);transform:rotate3d(-.1,.1,0,50deg) scale(.8)}45%{-webkit-transform:rotate3d(-.1,.1,0,20deg) scale(.6);transform:rotate3d(-.1,.1,0,20deg) scale(.6)}50%{-webkit-transform:rotate3d(0,0,0,0) scale(.6);transform:rotate3d(0,0,0,0) scale(.6)}85%{-webkit-transform:rotate3d(0,0,0,0) scale(.6);transform:rotate3d(0,0,0,0) scale(.6)}90%{-webkit-transform:rotate3d(-.1,.1,0,-20deg) scale(.6);transform:rotate3d(-.1,.1,0,-20deg) scale(.6)}95%{-webkit-transform:rotate3d(-.1,.1,0,-50deg) scale(.8);transform:rotate3d(-.1,.1,0,-50deg) scale(.8)}to{-webkit-transform:rotate3d(0,0,0,0) scale(1);transform:rotate3d(0,0,0,0) scale(1)}}@keyframes sniff{0%{-webkit-transform:rotate3d(0,0,0,0) scale(1);transform:rotate3d(0,0,0,0) scale(1)}35%{-webkit-transform:rotate3d(0,0,0,0) scale(1);transform:rotate3d(0,0,0,0) scale(1)}40%{-webkit-transform:rotate3d(-.1,.1,0,50deg) scale(.8);transform:rotate3d(-.1,.1,0,50deg) scale(.8)}45%{-webkit-transform:rotate3d(-.1,.1,0,20deg) scale(.6);transform:rotate3d(-.1,.1,0,20deg) scale(.6)}50%{-webkit-transform:rotate3d(0,0,0,0) scale(.6);transform:rotate3d(0,0,0,0) scale(.6)}85%{-webkit-transform:rotate3d(0,0,0,0) scale(.6);transform:rotate3d(0,0,0,0) scale(.6)}90%{-webkit-transform:rotate3d(-.1,.1,0,-20deg) scale(.6);transform:rotate3d(-.1,.1,0,-20deg) scale(.6)}95%{-webkit-transform:rotate3d(-.1,.1,0,-50deg) scale(.8);transform:rotate3d(-.1,.1,0,-50deg) scale(.8)}to{-webkit-transform:rotate3d(0,0,0,0) scale(1);transform:rotate3d(0,0,0,0) scale(1)}}@-webkit-keyframes nozzle{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.15);transform:scale(1.15)}to{-webkit-transform:scale(1);transform:scale(1)}}@keyframes nozzle{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.15);transform:scale(1.15)}to{-webkit-transform:scale(1);transform:scale(1)}}.capella{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;min-height:100%}.capella__drag-n-drop-activator,.capella__uploading{display:none}.capella--dark{background:rgba(7,7,25,.88)}.capella--dark .capella__drag-n-drop{position:relative;border-color:#564c90}.capella--dark .capella__dark-contents{opacity:.3}.capella--dark .capella__drag-n-drop-activator{display:block;position:absolute;bottom:40px;left:50%;width:100%;-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:33px;color:#8129ff}.capella--dark .capella__drag-n-drop-activator img{display:block;margin:15px auto}.capella--loading .capella__logo{margin-bottom:10px}.capella--loading .capella__dark-contents{display:none}.capella--loading .capella__uploading{display:block}.capella--loading .capella__uploading-title{margin-bottom:12px;font-size:22px}.capella--loading .capella__uploading-progress{height:5px;width:277px;background:#0d0918;border-radius:3px;margin:13px auto}.capella--loading .capella__uploading-progress div{height:100%;background:#830cff;border-radius:3px;transition:width .4s,-webkit-transform .4s;transition:width .4s,transform .4s;transition:width .4s,transform .4s,-webkit-transform .4s}.capella--loading .capella__uploading-filename{font-size:15px}.capella__drag-n-drop{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;box-sizing:border-box;margin:30px;padding:40px 0;border:2px dashed #564c90}.capella__contents{height:470px;text-align:center}.capella__contents p{max-width:430px}.capella__contents a{text-decoration:none;color:#7a96ff;border-bottom:2px solid #4d72da}.capella__logo{display:inline-block;margin:16px auto 80px}.capella__button{padding:0 30px;margin-top:32px;border:0;border-radius:25px;background:#6c0bd1;font-family:inherit;line-height:51px;color:#fff;-webkit-appearance:none;outline:none;cursor:pointer}.capella__button,.capella__button:before{display:inline-block;vertical-align:middle}.capella__button:before{content:url(/public/app/svg/instagram-logo.svg);line-height:normal;margin:0 10px 0 -5px}.capella__button:hover{background:#6004c0}.capella__input{margin-top:40px;padding-bottom:10px;background:transparent;border-color:transparent;border-bottom:2px solid rgba(181,155,218,.44);border-radius:0;text-align:center;font-family:inherit;font-size:17px;line-height:1.3em;color:#fff;-webkit-appearance:none;outline:none}.capella__input:focus::-webkit-input-placeholder{opacity:0;transition:opacity .1s ease .1s}.capella__input::-webkit-input-placeholder{color:#b59bda}.safari .capella__uploading{margin-top:250px}@media (max-width:980px){.capella{overflow-y:scroll;overflow-x:hidden}.capella,.capella__drag-n-drop{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.capella__drag-n-drop{width:100%;height:auto;padding:20px 0;border:0 solid transparent}.capella__logo{margin-bottom:50px}.capella__button{margin:50px auto 0}.capella__contents{height:auto;padding:0 10px}.capella__contents p{margin:0 auto}.capella--loading .capella__uploading{margin-top:100px}.capella--loading .capella__uploading-progress{width:200px}}.body--black,.result{background:#101012}.result{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;height:100%;color:#59555e;font-size:14.5px}.result__contents{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;min-width:100%}.result a{color:inherit;text-decoration:none}.result a:hover{color:#fff}.result input{display:none;width:121px;background:transparent;border:0 solid transparent;color:inherit;text-align:right;outline:none}.result input:first-of-type{margin-left:10px}.result__img{height:auto;width:auto;max-height:70vh;max-width:90vw;margin:50px 0}.result__copy .result__copy-text{display:none}.result__copy svg{width:15px;height:17px;margin-right:10px;vertical-align:text-bottom}.result__copy:hover{color:#fff;cursor:pointer}.result__copy:hover svg path{fill:#fff}.result__is-copied{color:#fff}.result__is-copied svg{margin-right:10px}.result__footer{padding:0 20px;background:#101012}.result__footer-logo{margin-right:35px;vertical-align:sub}.result__footer-filters{padding:14px 0}.result__footer-about{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:14px 0;border-top:1px solid #28282e}.result__footer-link{line-height:20px}.result__footer-link:not(:first-of-type):not(:nth-of-type(2)):before{content:"";display:inline-block;vertical-align:middle;width:4px;height:4px;border-radius:50%;background:#313137;margin:0 .5em}.result__footer .codex-team{margin-left:auto;color:#fff}@media (max-width:980px){.result{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.result__is-copied{margin-left:9px}.result__is-copied svg{margin-right:6px}.result__img{-ms-flex-item-align:start;align-self:flex-start;max-width:calc(100% - 30px);height:auto;padding:0;margin:15px auto}.result__copy{display:inline-block;margin:6px 0 13px;padding:0 9px;background:#222123;line-height:33px;border-radius:2px}.result__copy .result__copy-text{display:initial}.result__copy .result__copy-link{position:absolute;top:-200%;left:13px}.result__copy svg{margin-right:5px}.result__copy:hover{color:#59555e}.result__copy:hover svg path{fill:#59555e}.result__footer{min-width:100%;padding:0 15px;box-sizing:border-box}.result__footer-filters{padding:0}.result__footer .codex-team{margin-left:0;color:inherit}.result__footer .codex-team:before{content:"";display:inline-block;vertical-align:middle;width:4px;height:4px;border-radius:50%;background:#313137;margin:0 .5em}.result__footer-logo-link{margin-right:auto}}.cdx-notifies{left:auto;right:75px;bottom:78px}@media (max-width:980px){.cdx-notifies{right:40px;bottom:40px}}.cdx-notify{border-radius:1px;font-size:15px;padding:20px 33px;color:#434152;background:#d1d7ec;width:auto}.cdx-notify__cross{display:none}.cdx-notify__warning-sign{background-image:url(/public/app/svg/warning.svg);background-repeat:no-repeat;width:23px;height:19.7px;margin-right:17px;margin-left:-8px;margin-bottom:-4px;display:inline-block} /*# sourceMappingURL=bundle.css.map*/ \ No newline at end of file diff --git a/public/build/bundle.js.map b/public/build/bundle.js.map index f3ca5ae..5a4b1ab 100644 --- a/public/build/bundle.js.map +++ b/public/build/bundle.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///public/build/bundle.js","webpack:///webpack/bootstrap 6b1120b3ebb7773e1a5c","webpack:///./public/app/js/uploader.js","webpack:///./public/app/entry.js","webpack:///./public/app/js/main.js","webpack:///./public/app/js/clipboard.js","webpack:///./public/app/js/dragndrop.js","webpack:///./public/app/js/uploadScreen.js","webpack:///./node_modules/codex.ajax/lib/bundle.js","webpack:///./node_modules/codex.transport/lib/bundle.js","webpack:///./public/app/js/copyable.js","webpack:///./public/app/js/notificationToggler.js","webpack:///./public/app/js/checkForSafari.js","webpack:///./node_modules/codex-notifier/notifier.js"],"names":["capella","modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","_classCallCheck","instance","Constructor","TypeError","value","_createClass","defineProperties","target","props","length","descriptor","writable","key","protoProps","staticProps","Uploader","this","uploadUrl","uploadFileButton","document","getElementById","uploadLinkField","addEventListener","uploadByTransport","bind","uploadByUrl","transport","init","url","multiple","accept","data","before","progress","success","error","after","e","keyCode","preventDefault","upload","link","file","formData","FormData","currentFileName","append","ajax","type","filename","File","uploadScreen","show","percentage","response","console","log","window","location","href","id","hide","notifier","message","time","default","Clipboard","DNDFileUploader","UploadScreen","uploader","copyable","notificationToggler","checkForSafari","clipboard","dnd","body","pasteFromClipboard","event","clipboardData","originalEvent","items","getData","blob","stopPropagation","regex","match","indexOf","getAsFile","reader","FileReader","onload","uploadBlob","readAsDataURL","wrapper","querySelector","dragover","drageleave","drop","classList","add","remove","dataTransfer","files","mainContainer","progressBar","loadingClass","textContent","percents","style","width","t","r","a","XMLHttpRequest","ActiveXObject","u","async","test","withCredentials","open","f","parseInt","loaded","total","setRequestHeader","onreadystatechange","readyState","responseText","JSON","parse","status","send","Symbol","iterator","constructor","input","click","y","b","createElement","setAttribute","NAMES","authorized","prepareElement","element","copiedCallback","elementClicked","authorize","authorizedCopy","selection","getSelection","range","createRange","selectNodeContents","removeAllRanges","addRange","execCommand","CopiedEvent","CustomEvent","bubbles","cancelable","detail","toString","dispatchEvent","elems","getElementsByName","authorizedElems","clipboardButton","toggleCopiedIcon","CSS","notificationClass","notificationHideClass","notificationElement","notificationIsVisibleTimer","ctrlKey","metaKey","which","clearTimeout","setTimeout","userAgent","navigator","notification","crossBtn","okBtn","cancelBtn","btn","btnsWrapper","innerHTML","appendChild","alert","confirm","cancelHandler","okHandler","okText","cancelText","prompt","placeholder","inputType"],"mappings":"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","file":"./public/build/bundle.js","sourcesContent":["var capella =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\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, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\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 = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 1);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * @class Uploader\n * Handle images uploading\n *\n * @property {String} uploadUrl — url to upload images\n * @property {HTMLElement} uploadFilButton — transport initialization trigger\n * @property {HTMLElement} uploadLinkField — input to insert image link\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Uploader = function () {\n /**\n * Uploader class constructor. Get needed elements and bind events\n */\n function Uploader() {\n _classCallCheck(this, Uploader);\n\n this.uploadUrl = '/upload';\n this.uploadFileButton = document.getElementById('uploadFileButton');\n this.uploadLinkField = document.getElementById('uploadLinkField');\n\n if (this.uploadFileButton) {\n this.uploadFileButton.addEventListener('click', this.uploadByTransport.bind(this), false);\n }\n\n if (this.uploadLinkField) {\n this.uploadLinkField.addEventListener('keydown', this.uploadByUrl.bind(this), false);\n }\n }\n\n /**\n * Init codex.transport to select image from user's computer\n */\n\n\n _createClass(Uploader, [{\n key: 'uploadByTransport',\n value: function uploadByTransport() {\n capella.transport.init({\n url: this.uploadUrl,\n multiple: false,\n accept: 'image/png, image/gif, image/jpg, image/jpeg, image/bmp',\n data: {},\n before: this.before,\n progress: this.progress,\n success: this.success,\n error: this.error,\n after: this.after\n });\n }\n\n /**\n * Handle upload by image url\n *\n * @param e\n */\n\n }, {\n key: 'uploadByUrl',\n value: function uploadByUrl(e) {\n /** Check for Enter key */\n if (e.keyCode !== 13) {\n return;\n }\n e.preventDefault();\n\n if (this.uploadLinkField) {\n this.upload({ 'link': this.uploadLinkField.value });\n }\n }\n\n /**\n * Handler to upload blob data using FormData\n *\n * @param {Blob|File} file — file to send\n */\n\n }, {\n key: 'uploadBlob',\n value: function uploadBlob(file) {\n var formData = new FormData();\n\n this.currentFileName = file.name;\n\n formData.append('file', file, file.name);\n\n this.upload(formData);\n }\n\n /**\n * Send AJAX request to uploadUrl with passed data\n *\n * @param {*} data — data to send\n */\n\n }, {\n key: 'upload',\n value: function upload(data) {\n capella.ajax.call({\n type: 'POST',\n url: this.uploadUrl,\n data: data,\n before: this.before.bind(this),\n progress: this.progress,\n success: this.success,\n error: this.error,\n after: this.after\n });\n }\n\n /**\n * Method to call before upload starts\n */\n\n }, {\n key: 'before',\n value: function before(data) {\n var filename = void 0;\n\n if (data instanceof FormData) {\n filename = this.currentFileName;\n }\n if (data && data.link) {\n filename = data.link;\n }\n if (data[0] instanceof File) {\n filename = data[0].name;\n }\n\n capella.uploadScreen.show(filename);\n }\n\n /**\n * Handle upload progress\n *\n * @param percentage — upload percentage\n */\n\n }, {\n key: 'progress',\n value: function progress(percentage) {\n percentage = 0.95 * percentage;\n capella.uploadScreen.progress(percentage);\n }\n\n /**\n * Successful upload handler\n *\n * @param {Object} response — response object\n * @param {Boolean} response.success — upload status\n * @param {String} response.url — if upload was successful, contains uploaded image url\n * @param {String} response.id — if upload was succesful, contains uploaded image id\n * @param {String} response.message — if upload failed, contains reason\n */\n\n }, {\n key: 'success',\n value: function success(response) {\n console.log(response);\n\n if (response.success) {\n capella.uploadScreen.progress(100);\n\n /** Redirect to uploaded image */\n window.location.href = '/image/' + response.id;\n } else {\n capella.uploadScreen.hide();\n }\n }\n\n /**\n * Upload error handler\n *\n * @param {Error} error — raised error\n */\n\n }, {\n key: 'error',\n value: function error(response) {\n capella.notifier.show({\n message: '' + response.message,\n time: 7000\n });\n capella.uploadScreen.hide();\n }\n\n /**\n * Method to call after upload\n */\n\n }, {\n key: 'after',\n value: function after() {}\n }]);\n\n return Uploader;\n}();\n\nexports.default = Uploader;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Require CSS build\n */\n__webpack_require__(2);\n\nmodule.exports = __webpack_require__(3);\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar capella = {};\n\nvar Uploader = __webpack_require__(0).default;\nvar Clipboard = __webpack_require__(4).default;\nvar DNDFileUploader = __webpack_require__(5).default;\nvar UploadScreen = __webpack_require__(6).default;\n\n/**\n * Require modules\n */\ncapella.ajax = __webpack_require__(7);\ncapella.transport = __webpack_require__(8);\ncapella.uploader = __webpack_require__(0);\ncapella.copyable = __webpack_require__(9);\ncapella.notificationToggler = __webpack_require__(10);\ncapella.checkForSafari = __webpack_require__(11);\ncapella.notifier = __webpack_require__(12);\n\ncapella.uploadScreen = new UploadScreen();\ncapella.uploader = new Uploader();\ncapella.clipboard = new Clipboard();\ncapella.dnd = new DNDFileUploader('.capella');\n\ncapella.init = function () {\n capella.copyable.init();\n capella.checkForSafari.init();\n};\n\nmodule.exports = capella;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Paste from clipboard module\n */\nvar Clipboard = function () {\n /**\n * Initialization of Clipboard module\n */\n function Clipboard() {\n _classCallCheck(this, Clipboard);\n\n document.body.addEventListener('paste', this.pasteFromClipboard);\n }\n\n /**\n * Pasted image from clipboard\n */\n\n\n _createClass(Clipboard, [{\n key: 'pasteFromClipboard',\n value: function pasteFromClipboard(event) {\n var clipboard = event.clipboardData || event.originalEvent.clipboardData || window.clipboardData;\n\n /**\n * items - for images\n * data - for links\n */\n var items = clipboard.items;\n var data = clipboard.getData('Text');\n var blob = null;\n\n event.stopPropagation();\n event.preventDefault();\n\n /**\n * Checking if clipboard has a link\n */\n if (data) {\n /**\n * Parsing on valid URL\n */\n var regex = /^((http[s]?):\\/)?\\/?([^:\\/\\s]+)((\\/\\w+)*\\/)([\\w\\-\\.]+[^#?\\s]+)(.*)?(#[\\w\\-]+)?$/;\n\n if (data.match(regex)) {\n capella.uploader.upload({ 'link': data });\n } else {\n document.getElementById('uploadLinkField').value = data;\n }\n }\n\n if (items) {\n /**\n * Checking all clipboard's files and choosing last image file\n */\n for (var i = items.length - 1; i >= 0; --i) {\n if (items[i].type.indexOf('image') === 0) {\n blob = items[i].getAsFile();\n break;\n }\n }\n }\n\n if (blob !== null) {\n /**\n * FilerReader is used for asynchronous image reading from blob: function at onload\n */\n var reader = new FileReader();\n\n reader.onload = function () {\n capella.uploader.uploadBlob(blob);\n };\n reader.readAsDataURL(blob);\n }\n }\n }]);\n\n return Clipboard;\n}();\n\nexports.default = Clipboard;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Class for working with drag and drop files to browser\n *\n * @class DNDFileUploader\n *\n * @property {HTMLElement} wrapper — page wrapper element\n *\n */\nvar DNDFileUploader = function () {\n /**\n * Bind drag and drop events\n *\n * @param {String} wrapper - page wrapper selector\n */\n function DNDFileUploader(wrapper) {\n _classCallCheck(this, DNDFileUploader);\n\n this.wrapper = document.querySelector(wrapper);\n\n this.wrapper.addEventListener('dragenter', this.dragover.bind(this));\n this.wrapper.addEventListener('dragover', this.dragover.bind(this));\n this.wrapper.addEventListener('dragleave', this.drageleave.bind(this));\n this.wrapper.addEventListener('drop', this.drop.bind(this));\n }\n\n /**\n *\n * File dragover handler\n *\n * @param {Event} event — dragover event\n */\n\n\n _createClass(DNDFileUploader, [{\n key: 'dragover',\n value: function dragover(event) {\n event.preventDefault();\n\n this.wrapper.classList.add('capella--dark');\n }\n\n /**\n *\n * File dragleave handler\n *\n * @param {Event} event — dragleave event\n */\n\n }, {\n key: 'drageleave',\n value: function drageleave(event) {\n event.preventDefault();\n\n this.wrapper.classList.remove('capella--dark');\n }\n\n /**\n * File drop handler\n *\n * @param {Event} event — drop event\n */\n\n }, {\n key: 'drop',\n value: function drop(event) {\n this.wrapper.classList.remove('capella--dark');\n\n var file = event.dataTransfer.files[0];\n\n capella.uploader.uploadBlob(file);\n\n event.preventDefault();\n }\n }]);\n\n return DNDFileUploader;\n}();\n\nexports.default = DNDFileUploader;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Class to control upload screen appearance\n *\n * @property {HTMLElement} mainContainer — page wrapper\n * @property {HTMLElement} progressBar — progress bar slider element\n * @property {String} loadingClass — upload screen class\n *\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar UploadScreen = function () {\n /**\n * @constructor\n * Get needed elements from page\n */\n function UploadScreen() {\n _classCallCheck(this, UploadScreen);\n\n this.mainContainer = document.querySelector('.capella');\n this.progressBar = document.querySelector('.js-capella__uploading-progress');\n this.loadingClass = 'capella--loading';\n }\n\n /**\n * Show loading screen by adding loadingClass to page wrapper\n *\n * @param {String} filename — file which is uploading now\n */\n\n\n _createClass(UploadScreen, [{\n key: 'show',\n value: function show(filename) {\n var filenameHolder = this.mainContainer.querySelector('.capella__uploading-filename');\n\n filenameHolder.textContent = filename;\n this.mainContainer.classList.add(this.loadingClass);\n }\n\n /**\n * Hide loading screen by removing loadingClass from page wrapper\n */\n\n }, {\n key: 'hide',\n value: function hide() {\n this.mainContainer.classList.remove(this.loadingClass);\n }\n\n /**\n * Method to control loading progress bar\n *\n * @param {Number} percents — uploading percentage\n */\n\n }, {\n key: 'progress',\n value: function progress(percents) {\n this.progressBar.style.width = percents + '%';\n }\n }]);\n\n return UploadScreen;\n}();\n\nexports.default = UploadScreen;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n!function(t,e){ true?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.ajax=e():t.ajax=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var a=n[r]={i:r,l:!1,exports:{}};return t[r].call(a.exports,a,a.exports,e),a.l=!0,a.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"\",e(e.s=0)}([function(t,e,n){\"use strict\";t.exports=function(){var t=function(t){return t instanceof FormData};return{call:function(e){if(e&&e.url){var n=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject(\"Microsoft.XMLHTTP\"),r=e.progress||null,a=e.success||function(){},o=e.error||function(){},u=e.before||null,i=e.after?e.after.bind(null,e.data):null;if(e.async=!0,e.type=e.type||\"GET\",e.data=e.data||\"\",e[\"content-type\"]=e[\"content-type\"]||\"application/json; charset=utf-8\",\"GET\"===e.type&&e.data&&(e.url=/\\?/.test(e.url)?e.url+\"&\"+e.data:e.url+\"?\"+e.data),e.withCredentials&&(n.withCredentials=!0),u&&\"function\"==typeof u){if(!1===u(e.data))return}if(n.open(e.type,e.url,e.async),!t(e.data)){var c=new FormData;for(var f in e.data)c.append(f,e.data[f]);e.data=c}r&&\"function\"==typeof r&&n.upload.addEventListener(\"progress\",function(t){var e=parseInt(t.loaded/t.total*100);r(e)},!1),n.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\"),n.onreadystatechange=function(){if(4===n.readyState){var t=n.responseText;try{t=JSON.parse(t)}catch(t){}200===n.status?a(t):o(t),i&&\"function\"==typeof i&&i()}},n.send(e.data)}}}}()}])});\n//# sourceMappingURL=bundle.js.map\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n!function(t,e){ true?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.transport=e():t.transport=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"\",e(e.s=0)}([function(t,e,n){\"use strict\";var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},o=n(1);t.exports=function(t){var e=null;t.input=null;var n=function(){t.input.click()},u=function(){e.before(t.input.files)},a=function(){var n=e.url,a=e.data,i=u,c=e.progress,f=e.success,s=e.error,p=e.after,l=new FormData,d=t.input.files;if(d.length>1)for(var y=0;yClick to copy\n *\n * You can pass callback function to init method. Callback will fire when something has copied\n *\n * @type {{init}}\n */\nmodule.exports = function () {\n var NAMES = {\n copyable: 'js-copyable',\n authorized: 'js-copyable-authorize'\n };\n\n /**\n * Take element by name and pass it to prepareElement function\n *\n * @param {Function} copiedCallback - fires when something has copied\n */\n var init = function init(copiedCallback) {\n var elems = document.getElementsByName(NAMES.copyable);\n\n if (!elems) {\n console.log('There are no copyable elements');\n return;\n }\n\n for (var i = 0; i < elems.length; i++) {\n prepareElement(elems[i], copiedCallback);\n }\n\n var authorizedElems = document.getElementsByName(NAMES.authorized);\n\n for (var _i = 0; _i < authorizedElems.length; _i++) {\n authorize(authorizedElems[_i]);\n }\n\n console.log('Copyable module initialized');\n\n this.clipboardButton = document.querySelector('.js-result__copy');\n\n if (this.clipboardButton) {\n this.clipboardButton.addEventListener('click', capella.notificationToggler.toggleCopiedIcon, true);\n }\n };\n\n /**\n * Add click and copied listeners to copyable element\n *\n * @param element\n * @param copiedCallback\n */\n var prepareElement = function prepareElement(element, copiedCallback) {\n element.addEventListener('click', elementClicked);\n element.addEventListener('copied', copiedCallback);\n };\n\n /**\n * Add click listener for authorized element\n *\n * @param element\n */\n var authorize = function authorize(element) {\n element.addEventListener('click', authorizedCopy);\n };\n\n /**\n * Click handler for authorized elements\n */\n var authorizedCopy = function authorizedCopy() {\n var authorizedElem = this;\n var copyable = authorizedElem.querySelector('[name=' + NAMES.copyable + ']');\n\n copyable.click();\n };\n\n /**\n * Click handler\n * Create new range, select copyable element and add range to selection. Then exec 'copy' command\n */\n var elementClicked = function elementClicked(event) {\n var selection = window.getSelection(),\n range = document.createRange();\n\n range.selectNodeContents(this);\n selection.removeAllRanges();\n selection.addRange(range);\n\n document.execCommand('copy');\n selection.removeAllRanges();\n\n /**\n * We create new CustomEvent and dispatch it on copyable element\n * Consist copied text in detail property\n */\n var CopiedEvent = new CustomEvent('copied', {\n bubbles: false,\n cancelable: false,\n detail: range.toString()\n });\n\n this.dispatchEvent(CopiedEvent);\n event.stopPropagation();\n };\n\n return {\n init: init\n };\n}();\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function () {\n var CSS = {\n /* Class of 'Copied' notification element */\n notificationClass: '.js-result__is-copied',\n\n /* Class used to hide notification after showTimeout */\n notificationHideClass: 'js-hidden'\n };\n\n /* 'Copied' notification element */\n var notificationElement = document.querySelector(CSS.notificationClass);\n\n /* Timeout after which notificationElement will be hidden */\n var showTimeout = 2000;\n\n /* Timer to hide notification */\n var notificationIsVisibleTimer = void 0;\n\n /**\n * Show and hide after showTimeout seconds copy-notifications\n */\n var toggleCopiedIcon = function toggleCopiedIcon(event) {\n /* Don't open link in new window unless one of these keys is pressed */\n if (event.ctrlKey || event.metaKey || event.which === 2) {\n return false;\n }\n\n event.preventDefault();\n\n /* Clear timer if it was set previously */\n if (notificationIsVisibleTimer) {\n clearTimeout(notificationIsVisibleTimer);\n }\n\n /* First reveal zero-opacity notification elem, then after timeout hide it again */\n notificationElement.classList.remove(CSS.notificationHideClass);\n notificationIsVisibleTimer = setTimeout(function () {\n notificationElement.classList.add(CSS.notificationHideClass);\n }, showTimeout);\n };\n\n return {\n toggleCopiedIcon: toggleCopiedIcon\n };\n}();\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * TEMP fix. Detect Safari and add class to body\n */\n\nmodule.exports = function () {\n var init = function init() {\n var userAgent = window.navigator.userAgent;\n\n if (userAgent.indexOf('Safari') >= 0 && userAgent.indexOf('Chrome') < 0) {\n document.body.classList.add('safari');\n }\n };\n\n return {\n init: init\n };\n}();\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\nvar notifier=function(e){function t(r){if(n[r])return n[r].exports;var c=n[r]={i:r,l:!1,exports:{}};return e[r].call(c.exports,c,c.exports,t),c.l=!0,c.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,\"a\",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p=\"\",t(t.s=2)}([function(e,t,n){\"use strict\";e.exports=function(){var e={wrapper:\"cdx-notifies\",notification:\"cdx-notify\",crossBtn:\"cdx-notify__cross\",okBtn:\"cdx-notify__button--confirm\",cancelBtn:\"cdx-notify__button--cancel\",input:\"cdx-notify__input\",btn:\"cdx-notify__button\",btnsWrapper:\"cdx-notify__btns-wrapper\"},t=function(t){var n=document.createElement(\"DIV\"),r=document.createElement(\"DIV\"),c=t.message,i=t.style;return n.classList.add(e.notification),i&&n.classList.add(e.notification+\"--\"+i),n.innerHTML=c,r.classList.add(e.crossBtn),r.addEventListener(\"click\",n.remove.bind(n)),n.appendChild(r),n};return{alert:t,confirm:function(n){var r=t(n),c=document.createElement(\"div\"),i=document.createElement(\"button\"),a=document.createElement(\"button\"),o=r.querySelector(e.crossBtn),d=n.cancelHandler,s=n.okHandler;return c.classList.add(e.btnsWrapper),i.innerHTML=n.okText||\"Confirm\",a.innerHTML=n.cancelText||\"Cancel\",i.classList.add(e.btn),a.classList.add(e.btn),i.classList.add(e.okBtn),a.classList.add(e.cancelBtn),d&&\"function\"==typeof d&&(a.addEventListener(\"click\",d),o.addEventListener(\"click\",d)),s&&\"function\"==typeof s&&i.addEventListener(\"click\",s),i.addEventListener(\"click\",r.remove.bind(r)),a.addEventListener(\"click\",r.remove.bind(r)),c.appendChild(i),c.appendChild(a),r.appendChild(c),r},prompt:function(n){var r=t(n),c=document.createElement(\"div\"),i=document.createElement(\"button\"),a=document.createElement(\"input\"),o=r.querySelector(e.crossBtn),d=n.cancelHandler,s=n.okHandler;return c.classList.add(e.btnsWrapper),i.innerHTML=n.okText||\"Ok\",i.classList.add(e.btn),i.classList.add(e.okBtn),a.classList.add(e.input),n.placeholder&&a.setAttribute(\"placeholder\",n.placeholder),n.default&&(a.value=n.default),n.inputType&&(a.type=n.inputType),d&&\"function\"==typeof d&&o.addEventListener(\"click\",d),s&&\"function\"==typeof s&&i.addEventListener(\"click\",function(){s(a.value)}),i.addEventListener(\"click\",r.remove.bind(r)),c.appendChild(a),c.appendChild(i),r.appendChild(c),r},wrapper:function(){var t=document.createElement(\"DIV\");return t.classList.add(e.wrapper),t}}}()},function(e,t){},function(e,t,n){\"use strict\";/*!\n * Codex JavaScript Notification module\n * https://github.com/codex-team/js-notifier\n *\n * Codex Team - https://ifmo.su\n *\n * MIT License | (c) Codex 2017\n */\ne.exports=function(){function e(){if(i)return!0;i=r.wrapper(),document.body.appendChild(i)}function t(t){if(t.message){e();var n=null,a=t.time||8e3;switch(t.type){case\"confirm\":n=r.confirm(t);break;case\"prompt\":n=r.prompt(t);break;default:n=r.alert(t),window.setTimeout(function(){n.remove()},a)}i.appendChild(n),n.classList.add(c)}}n(1);var r=n(0),c=\"cdx-notify--bounce-in\",i=null;return{show:t}}()}]);\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = notifier;\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// public/build/bundle.js"," \t// The module cache\n \tvar installedModules = {};\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, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\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 = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 6b1120b3ebb7773e1a5c","'use strict';\n\n/**\n * @class Uploader\n * Handle images uploading\n *\n * @property {String} uploadUrl — url to upload images\n * @property {HTMLElement} uploadFilButton — transport initialization trigger\n * @property {HTMLElement} uploadLinkField — input to insert image link\n */\nexport default class Uploader {\n /**\n * Uploader class constructor. Get needed elements and bind events\n */\n constructor() {\n this.uploadUrl = '/upload';\n this.uploadFileButton = document.getElementById('uploadFileButton');\n this.uploadLinkField = document.getElementById('uploadLinkField');\n\n if (this.uploadFileButton) {\n this.uploadFileButton.addEventListener('click', this.uploadByTransport.bind(this), false);\n }\n\n if (this.uploadLinkField) {\n this.uploadLinkField.addEventListener('keydown', this.uploadByUrl.bind(this), false);\n }\n }\n\n /**\n * Init codex.transport to select image from user's computer\n */\n uploadByTransport() {\n capella.transport.init({\n url: this.uploadUrl,\n multiple: false,\n accept: 'image/png, image/gif, image/jpg, image/jpeg, image/bmp',\n data: {},\n before: this.before,\n progress: this.progress,\n success: this.success,\n error: this.error,\n after: this.after\n });\n }\n\n /**\n * Handle upload by image url\n *\n * @param e\n */\n uploadByUrl(e) {\n /** Check for Enter key */\n if (e.keyCode !== 13) {\n return;\n }\n e.preventDefault();\n\n if (this.uploadLinkField) {\n this.upload({'link': this.uploadLinkField.value});\n }\n }\n\n /**\n * Handler to upload blob data using FormData\n *\n * @param {Blob|File} file — file to send\n */\n uploadBlob(file) {\n let formData = new FormData();\n\n this.currentFileName = file.name;\n\n formData.append('file', file, file.name);\n\n this.upload(formData);\n }\n\n /**\n * Send AJAX request to uploadUrl with passed data\n *\n * @param {*} data — data to send\n */\n upload(data) {\n capella.ajax.call({\n type: 'POST',\n url: this.uploadUrl,\n data: data,\n before: this.before.bind(this),\n progress: this.progress,\n success: this.success,\n error: this.error,\n after: this.after\n });\n }\n\n /**\n * Method to call before upload starts\n */\n before(data) {\n let filename;\n\n if (data instanceof FormData) {\n filename = this.currentFileName;\n }\n if (data && data.link) {\n filename = data.link;\n }\n if (data[0] instanceof File) {\n filename = data[0].name;\n }\n\n capella.uploadScreen.show(filename);\n }\n\n /**\n * Handle upload progress\n *\n * @param percentage — upload percentage\n */\n progress(percentage) {\n percentage = 0.95 * percentage;\n capella.uploadScreen.progress(percentage);\n }\n\n /**\n * Successful upload handler\n *\n * @param {Object} response — response object\n * @param {Boolean} response.success — upload status\n * @param {String} response.url — if upload was successful, contains uploaded image url\n * @param {String} response.id — if upload was succesful, contains uploaded image id\n * @param {String} response.message — if upload failed, contains reason\n */\n success(response) {\n console.log(response);\n\n if (response.success) {\n capella.uploadScreen.progress(100);\n\n /** Redirect to uploaded image */\n window.location.href = '/image/' + response.id;\n } else {\n capella.uploadScreen.hide();\n }\n }\n\n /**\n * Upload error handler\n *\n * @param {Error} error — raised error\n */\n error(response) {\n capella.notifier.show({\n message: '' + response.message,\n time: 7000\n });\n capella.uploadScreen.hide();\n }\n\n /**\n * Method to call after upload\n */\n after() {}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/uploader.js","/**\n * Require CSS build\n */\nrequire('./css/main.css');\n\nmodule.exports = require('./js/main.js');\n\n\n\n// WEBPACK FOOTER //\n// ./public/app/entry.js","'use strict';\n\n\nconst capella = {};\n\nlet Uploader = require('./uploader').default;\nlet Clipboard = require('./clipboard').default;\nlet DNDFileUploader = require('./dragndrop').default;\nlet UploadScreen = require('./uploadScreen').default;\n\n/**\n * Require modules\n */\ncapella.ajax = require('codex.ajax');\ncapella.transport = require('codex.transport');\ncapella.uploader = require('./uploader');\ncapella.copyable = require('./copyable');\ncapella.notificationToggler = require('./notificationToggler');\ncapella.checkForSafari = require('./checkForSafari');\ncapella.notifier = require('exports-loader?notifier!codex-notifier');\n\ncapella.uploadScreen = new UploadScreen();\ncapella.uploader = new Uploader();\ncapella.clipboard = new Clipboard();\ncapella.dnd = new DNDFileUploader('.capella');\n\ncapella.init = function () {\n capella.copyable.init();\n capella.checkForSafari.init();\n};\n\nmodule.exports = capella;\n\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/main.js","/**\n * Paste from clipboard module\n */\nexport default class Clipboard {\n /**\n * Initialization of Clipboard module\n */\n constructor() {\n document.body.addEventListener('paste', this.pasteFromClipboard);\n }\n\n /**\n * Pasted image from clipboard\n */\n pasteFromClipboard(event) {\n let clipboard = (event.clipboardData || event.originalEvent.clipboardData || window.clipboardData);\n\n /**\n * items - for images\n * data - for links\n */\n let items = clipboard.items;\n let data = clipboard.getData('Text');\n let blob = null;\n\n event.stopPropagation();\n event.preventDefault();\n\n /**\n * Checking if clipboard has a link\n */\n if (data) {\n /**\n * Parsing on valid URL\n */\n let regex = /^((http[s]?):\\/)?\\/?([^:\\/\\s]+)((\\/\\w+)*\\/)([\\w\\-\\.]+[^#?\\s]+)(.*)?(#[\\w\\-]+)?$/;\n\n if (data.match(regex)) {\n capella.uploader.upload({'link': data});\n } else {\n document.getElementById('uploadLinkField').value = data;\n }\n }\n\n if (items) {\n /**\n * Checking all clipboard's files and choosing last image file\n */\n for (let i = items.length - 1; i >= 0; --i) {\n if (items[i].type.indexOf('image') === 0) {\n blob = items[i].getAsFile();\n break;\n }\n }\n }\n\n if (blob !== null) {\n /**\n * FilerReader is used for asynchronous image reading from blob: function at onload\n */\n let reader = new FileReader();\n\n reader.onload = function () {\n capella.uploader.uploadBlob(blob);\n };\n reader.readAsDataURL(blob);\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/clipboard.js","/**\n * Class for working with drag and drop files to browser\n *\n * @class DNDFileUploader\n *\n * @property {HTMLElement} wrapper — page wrapper element\n *\n */\nexport default class DNDFileUploader {\n /**\n * Bind drag and drop events\n *\n * @param {String} wrapper - page wrapper selector\n */\n constructor(wrapper) {\n this.wrapper = document.querySelector(wrapper);\n\n this.wrapper.addEventListener('dragenter', this.dragover.bind(this));\n this.wrapper.addEventListener('dragover', this.dragover.bind(this));\n this.wrapper.addEventListener('dragleave', this.drageleave.bind(this));\n this.wrapper.addEventListener('drop', this.drop.bind(this));\n }\n\n /**\n *\n * File dragover handler\n *\n * @param {Event} event — dragover event\n */\n dragover(event) {\n event.preventDefault();\n\n this.wrapper.classList.add('capella--dark');\n }\n\n /**\n *\n * File dragleave handler\n *\n * @param {Event} event — dragleave event\n */\n drageleave(event) {\n event.preventDefault();\n\n this.wrapper.classList.remove('capella--dark');\n }\n\n /**\n * File drop handler\n *\n * @param {Event} event — drop event\n */\n drop(event) {\n this.wrapper.classList.remove('capella--dark');\n\n let file = event.dataTransfer.files[0];\n\n capella.uploader.uploadBlob(file);\n\n event.preventDefault();\n }\n}\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/dragndrop.js","'use strict';\n\n/**\n * Class to control upload screen appearance\n *\n * @property {HTMLElement} mainContainer — page wrapper\n * @property {HTMLElement} progressBar — progress bar slider element\n * @property {String} loadingClass — upload screen class\n *\n */\nexport default class UploadScreen {\n /**\n * @constructor\n * Get needed elements from page\n */\n constructor() {\n this.mainContainer = document.querySelector('.capella');\n this.progressBar = document.querySelector('.js-capella__uploading-progress');\n this.loadingClass = 'capella--loading';\n }\n\n /**\n * Show loading screen by adding loadingClass to page wrapper\n *\n * @param {String} filename — file which is uploading now\n */\n show(filename) {\n let filenameHolder = this.mainContainer.querySelector('.capella__uploading-filename');\n\n filenameHolder.textContent = filename;\n this.mainContainer.classList.add(this.loadingClass);\n }\n\n /**\n * Hide loading screen by removing loadingClass from page wrapper\n */\n hide() {\n this.mainContainer.classList.remove(this.loadingClass);\n }\n\n /**\n * Method to control loading progress bar\n *\n * @param {Number} percents — uploading percentage\n */\n progress(percents) {\n this.progressBar.style.width = percents + '%';\n }\n}\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/uploadScreen.js","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.ajax=e():t.ajax=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var a=n[r]={i:r,l:!1,exports:{}};return t[r].call(a.exports,a,a.exports,e),a.l=!0,a.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"\",e(e.s=0)}([function(t,e,n){\"use strict\";t.exports=function(){var t=function(t){return t instanceof FormData};return{call:function(e){if(e&&e.url){var n=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject(\"Microsoft.XMLHTTP\"),r=e.progress||null,a=e.success||function(){},o=e.error||function(){},u=e.before||null,i=e.after?e.after.bind(null,e.data):null;if(e.async=!0,e.type=e.type||\"GET\",e.data=e.data||\"\",e[\"content-type\"]=e[\"content-type\"]||\"application/json; charset=utf-8\",\"GET\"===e.type&&e.data&&(e.url=/\\?/.test(e.url)?e.url+\"&\"+e.data:e.url+\"?\"+e.data),e.withCredentials&&(n.withCredentials=!0),u&&\"function\"==typeof u){if(!1===u(e.data))return}if(n.open(e.type,e.url,e.async),!t(e.data)){var c=new FormData;for(var f in e.data)c.append(f,e.data[f]);e.data=c}r&&\"function\"==typeof r&&n.upload.addEventListener(\"progress\",function(t){var e=parseInt(t.loaded/t.total*100);r(e)},!1),n.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\"),n.onreadystatechange=function(){if(4===n.readyState){var t=n.responseText;try{t=JSON.parse(t)}catch(t){}200===n.status?a(t):o(t),i&&\"function\"==typeof i&&i()}},n.send(e.data)}}}}()}])});\n//# sourceMappingURL=bundle.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/codex.ajax/lib/bundle.js\n// module id = 7\n// module chunks = 0","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.transport=e():t.transport=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"\",e(e.s=0)}([function(t,e,n){\"use strict\";var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},o=n(1);t.exports=function(t){var e=null;t.input=null;var n=function(){t.input.click()},u=function(){e.before(t.input.files)},a=function(){var n=e.url,a=e.data,i=u,c=e.progress,f=e.success,s=e.error,p=e.after,l=new FormData,d=t.input.files;if(d.length>1)for(var y=0;yClick to copy\n *\n * You can pass callback function to init method. Callback will fire when something has copied\n *\n * @type {{init}}\n */\nmodule.exports = function () {\n const NAMES = {\n copyable: 'js-copyable',\n authorized: 'js-copyable-authorize'\n };\n\n /**\n * Take element by name and pass it to prepareElement function\n *\n * @param {Function} copiedCallback - fires when something has copied\n */\n let init = function (copiedCallback) {\n let elems = document.getElementsByName(NAMES.copyable);\n\n if (!elems) {\n console.log('There are no copyable elements');\n return;\n }\n\n for (let i = 0; i < elems.length; i++) {\n prepareElement(elems[i], copiedCallback);\n }\n\n let authorizedElems = document.getElementsByName(NAMES.authorized);\n\n for (let i = 0; i < authorizedElems.length; i++) {\n authorize(authorizedElems[i]);\n }\n\n console.log('Copyable module initialized');\n\n this.clipboardButton = document.querySelector('.js-result__copy');\n\n if (this.clipboardButton) {\n this.clipboardButton.addEventListener('click', capella.notificationToggler.toggleCopiedIcon, true);\n }\n };\n\n /**\n * Add click and copied listeners to copyable element\n *\n * @param element\n * @param copiedCallback\n */\n let prepareElement = function (element, copiedCallback) {\n element.addEventListener('click', elementClicked);\n element.addEventListener('copied', copiedCallback);\n };\n\n /**\n * Add click listener for authorized element\n *\n * @param element\n */\n let authorize = function (element) {\n element.addEventListener('click', authorizedCopy);\n };\n\n /**\n * Click handler for authorized elements\n */\n let authorizedCopy = function () {\n let authorizedElem = this;\n let copyable = authorizedElem.querySelector('[name='+NAMES.copyable+']');\n\n copyable.click();\n };\n\n /**\n * Click handler\n * Create new range, select copyable element and add range to selection. Then exec 'copy' command\n */\n let elementClicked = function (event) {\n let selection = window.getSelection(),\n range = document.createRange();\n\n range.selectNodeContents(this);\n selection.removeAllRanges();\n selection.addRange(range);\n\n document.execCommand('copy');\n selection.removeAllRanges();\n\n /**\n * We create new CustomEvent and dispatch it on copyable element\n * Consist copied text in detail property\n */\n let CopiedEvent = new CustomEvent('copied', {\n bubbles: false,\n cancelable: false,\n detail: range.toString()\n });\n\n this.dispatchEvent(CopiedEvent);\n event.stopPropagation();\n };\n\n return {\n init: init\n };\n}();\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/copyable.js","'use strict';\n\nmodule.exports = function () {\n const CSS = {\n /* Class of 'Copied' notification element */\n notificationClass: '.js-result__is-copied',\n\n /* Class used to hide notification after showTimeout */\n notificationHideClass: 'js-hidden'\n };\n\n /* 'Copied' notification element */\n const notificationElement = document.querySelector(CSS.notificationClass);\n\n /* Timeout after which notificationElement will be hidden */\n const showTimeout = 2000;\n\n /* Timer to hide notification */\n let notificationIsVisibleTimer;\n\n /**\n * Show and hide after showTimeout seconds copy-notifications\n */\n let toggleCopiedIcon = function (event) {\n /* Don't open link in new window unless one of these keys is pressed */\n if (event.ctrlKey || event.metaKey || event.which === 2) {\n return false;\n }\n\n event.preventDefault();\n\n /* Clear timer if it was set previously */\n if (notificationIsVisibleTimer) {\n clearTimeout(notificationIsVisibleTimer);\n }\n\n /* First reveal zero-opacity notification elem, then after timeout hide it again */\n notificationElement.classList.remove(CSS.notificationHideClass);\n notificationIsVisibleTimer = setTimeout(function () {\n notificationElement.classList.add(CSS.notificationHideClass);\n }, showTimeout);\n };\n\n return {\n toggleCopiedIcon : toggleCopiedIcon\n };\n}();\n\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/notificationToggler.js","'use strict';\n\n\n/**\n * TEMP fix. Detect Safari and add class to body\n */\nmodule.exports = function () {\n let init = function () {\n let userAgent = window.navigator.userAgent;\n\n if (userAgent.indexOf('Safari') >= 0 && userAgent.indexOf('Chrome') < 0) {\n document.body.classList.add('safari');\n }\n };\n\n return {\n init\n };\n}();\n\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/checkForSafari.js","var notifier=function(e){function t(r){if(n[r])return n[r].exports;var c=n[r]={i:r,l:!1,exports:{}};return e[r].call(c.exports,c,c.exports,t),c.l=!0,c.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,\"a\",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p=\"\",t(t.s=2)}([function(e,t,n){\"use strict\";e.exports=function(){var e={wrapper:\"cdx-notifies\",notification:\"cdx-notify\",crossBtn:\"cdx-notify__cross\",okBtn:\"cdx-notify__button--confirm\",cancelBtn:\"cdx-notify__button--cancel\",input:\"cdx-notify__input\",btn:\"cdx-notify__button\",btnsWrapper:\"cdx-notify__btns-wrapper\"},t=function(t){var n=document.createElement(\"DIV\"),r=document.createElement(\"DIV\"),c=t.message,i=t.style;return n.classList.add(e.notification),i&&n.classList.add(e.notification+\"--\"+i),n.innerHTML=c,r.classList.add(e.crossBtn),r.addEventListener(\"click\",n.remove.bind(n)),n.appendChild(r),n};return{alert:t,confirm:function(n){var r=t(n),c=document.createElement(\"div\"),i=document.createElement(\"button\"),a=document.createElement(\"button\"),o=r.querySelector(e.crossBtn),d=n.cancelHandler,s=n.okHandler;return c.classList.add(e.btnsWrapper),i.innerHTML=n.okText||\"Confirm\",a.innerHTML=n.cancelText||\"Cancel\",i.classList.add(e.btn),a.classList.add(e.btn),i.classList.add(e.okBtn),a.classList.add(e.cancelBtn),d&&\"function\"==typeof d&&(a.addEventListener(\"click\",d),o.addEventListener(\"click\",d)),s&&\"function\"==typeof s&&i.addEventListener(\"click\",s),i.addEventListener(\"click\",r.remove.bind(r)),a.addEventListener(\"click\",r.remove.bind(r)),c.appendChild(i),c.appendChild(a),r.appendChild(c),r},prompt:function(n){var r=t(n),c=document.createElement(\"div\"),i=document.createElement(\"button\"),a=document.createElement(\"input\"),o=r.querySelector(e.crossBtn),d=n.cancelHandler,s=n.okHandler;return c.classList.add(e.btnsWrapper),i.innerHTML=n.okText||\"Ok\",i.classList.add(e.btn),i.classList.add(e.okBtn),a.classList.add(e.input),n.placeholder&&a.setAttribute(\"placeholder\",n.placeholder),n.default&&(a.value=n.default),n.inputType&&(a.type=n.inputType),d&&\"function\"==typeof d&&o.addEventListener(\"click\",d),s&&\"function\"==typeof s&&i.addEventListener(\"click\",function(){s(a.value)}),i.addEventListener(\"click\",r.remove.bind(r)),c.appendChild(a),c.appendChild(i),r.appendChild(c),r},wrapper:function(){var t=document.createElement(\"DIV\");return t.classList.add(e.wrapper),t}}}()},function(e,t){},function(e,t,n){\"use strict\";/*!\n * Codex JavaScript Notification module\n * https://github.com/codex-team/js-notifier\n *\n * Codex Team - https://ifmo.su\n *\n * MIT License | (c) Codex 2017\n */\ne.exports=function(){function e(){if(i)return!0;i=r.wrapper(),document.body.appendChild(i)}function t(t){if(t.message){e();var n=null,a=t.time||8e3;switch(t.type){case\"confirm\":n=r.confirm(t);break;case\"prompt\":n=r.prompt(t);break;default:n=r.alert(t),window.setTimeout(function(){n.remove()},a)}i.appendChild(n),n.classList.add(c)}}n(1);var r=n(0),c=\"cdx-notify--bounce-in\",i=null;return{show:t}}()}]);\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = notifier;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/exports-loader?notifier!./node_modules/codex-notifier/notifier.js\n// module id = 12\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///public/build/bundle.js","webpack:///webpack/bootstrap de6f8a94af1b8b8017a2","webpack:///./public/app/js/uploader.js","webpack:///./public/app/entry.js","webpack:///./public/app/js/main.js","webpack:///./public/app/js/clipboard.js","webpack:///./public/app/js/dragndrop.js","webpack:///./public/app/js/uploadScreen.js","webpack:///./node_modules/codex.ajax/lib/bundle.js","webpack:///./node_modules/codex.transport/lib/bundle.js","webpack:///./public/app/js/copyable.js","webpack:///./public/app/js/notificationToggler.js","webpack:///./public/app/js/checkForSafari.js","webpack:///./node_modules/codex-notifier/notifier.js"],"names":["capella","modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","_classCallCheck","instance","Constructor","TypeError","value","_createClass","defineProperties","target","props","length","descriptor","writable","key","protoProps","staticProps","Uploader","this","uploadUrl","uploadFileButton","document","getElementById","uploadLinkField","addEventListener","uploadByTransport","bind","uploadByUrl","transport","init","url","multiple","accept","data","before","progress","success","error","after","e","keyCode","preventDefault","upload","link","file","formData","FormData","currentFileName","append","ajax","type","filename","File","uploadScreen","show","percentage","response","console","log","window","location","href","id","hide","notifier","message","time","default","Clipboard","DNDFileUploader","UploadScreen","uploader","copyable","notificationToggler","checkForSafari","clipboard","dnd","body","pasteFromClipboard","event","clipboardData","originalEvent","items","getData","blob","stopPropagation","regex","match","indexOf","getAsFile","reader","FileReader","onload","uploadBlob","readAsDataURL","wrapper","querySelector","dragover","drageleave","drop","classList","add","remove","dataTransfer","files","mainContainer","progressBar","loadingClass","textContent","percents","style","width","t","r","a","XMLHttpRequest","ActiveXObject","u","async","test","withCredentials","open","f","parseInt","loaded","total","setRequestHeader","onreadystatechange","readyState","responseText","JSON","parse","status","send","Symbol","iterator","constructor","input","click","y","b","createElement","setAttribute","NAMES","authorized","prepareElement","element","copiedCallback","elementClicked","authorize","authorizedCopy","selection","getSelection","range","createRange","selectNodeContents","removeAllRanges","addRange","execCommand","CopiedEvent","CustomEvent","bubbles","cancelable","detail","toString","dispatchEvent","elems","getElementsByName","authorizedElems","clipboardButton","toggleCopiedIcon","CSS","notificationClass","notificationHideClass","notificationElement","notificationIsVisibleTimer","ctrlKey","metaKey","which","clearTimeout","setTimeout","userAgent","navigator","notification","crossBtn","okBtn","cancelBtn","btn","btnsWrapper","innerHTML","appendChild","alert","confirm","cancelHandler","okHandler","okText","cancelText","prompt","placeholder","inputType"],"mappings":"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","file":"./public/build/bundle.js","sourcesContent":["var capella =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\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, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\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 = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 1);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * @class Uploader\n * Handle images uploading\n *\n * @property {String} uploadUrl — url to upload images\n * @property {HTMLElement} uploadFilButton — transport initialization trigger\n * @property {HTMLElement} uploadLinkField — input to insert image link\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Uploader = function () {\n /**\n * Uploader class constructor. Get needed elements and bind events\n */\n function Uploader() {\n _classCallCheck(this, Uploader);\n\n this.uploadUrl = '/upload';\n this.uploadFileButton = document.getElementById('uploadFileButton');\n this.uploadLinkField = document.getElementById('uploadLinkField');\n\n if (this.uploadFileButton) {\n this.uploadFileButton.addEventListener('click', this.uploadByTransport.bind(this), false);\n }\n\n if (this.uploadLinkField) {\n this.uploadLinkField.addEventListener('keydown', this.uploadByUrl.bind(this), false);\n }\n }\n\n /**\n * Init codex.transport to select image from user's computer\n */\n\n\n _createClass(Uploader, [{\n key: 'uploadByTransport',\n value: function uploadByTransport() {\n capella.transport.init({\n url: this.uploadUrl,\n multiple: false,\n accept: 'image/png, image/gif, image/jpg, image/jpeg, image/bmp',\n data: {},\n before: this.before,\n progress: this.progress,\n success: this.success,\n error: this.error,\n after: this.after\n });\n }\n\n /**\n * Handle upload by image url\n *\n * @param e\n */\n\n }, {\n key: 'uploadByUrl',\n value: function uploadByUrl(e) {\n /** Check for Enter key */\n if (e.keyCode !== 13) {\n return;\n }\n e.preventDefault();\n\n if (this.uploadLinkField) {\n this.upload({ 'link': this.uploadLinkField.value });\n }\n }\n\n /**\n * Handler to upload blob data using FormData\n *\n * @param {Blob|File} file — file to send\n */\n\n }, {\n key: 'uploadBlob',\n value: function uploadBlob(file) {\n var formData = new FormData();\n\n this.currentFileName = file.name;\n\n formData.append('file', file, file.name);\n\n this.upload(formData);\n }\n\n /**\n * Send AJAX request to uploadUrl with passed data\n *\n * @param {*} data — data to send\n */\n\n }, {\n key: 'upload',\n value: function upload(data) {\n capella.ajax.call({\n type: 'POST',\n url: this.uploadUrl,\n data: data,\n before: this.before.bind(this),\n progress: this.progress,\n success: this.success,\n error: this.error,\n after: this.after\n });\n }\n\n /**\n * Method to call before upload starts\n */\n\n }, {\n key: 'before',\n value: function before(data) {\n var filename = void 0;\n\n if (data instanceof FormData) {\n filename = this.currentFileName;\n }\n if (data && data.link) {\n filename = data.link;\n }\n if (data[0] instanceof File) {\n filename = data[0].name;\n }\n\n capella.uploadScreen.show(filename);\n }\n\n /**\n * Handle upload progress\n *\n * @param percentage — upload percentage\n */\n\n }, {\n key: 'progress',\n value: function progress(percentage) {\n percentage = 0.95 * percentage;\n capella.uploadScreen.progress(percentage);\n }\n\n /**\n * Successful upload handler\n *\n * @param {Object} response — response object\n * @param {Boolean} response.success — upload status\n * @param {String} response.url — if upload was successful, contains uploaded image url\n * @param {String} response.id — if upload was succesful, contains uploaded image id\n * @param {String} response.message — if upload failed, contains reason\n */\n\n }, {\n key: 'success',\n value: function success(response) {\n console.log(response);\n\n if (response.success) {\n capella.uploadScreen.progress(100);\n\n /** Redirect to uploaded image */\n window.location.href = '/image/' + response.id;\n } else {\n capella.uploadScreen.hide();\n }\n }\n\n /**\n * Upload error handler\n *\n * @param {Error} error — raised error\n */\n\n }, {\n key: 'error',\n value: function error(response) {\n capella.notifier.show({\n message: '' + response.message,\n time: 7000\n });\n capella.uploadScreen.hide();\n }\n\n /**\n * Method to call after upload\n */\n\n }, {\n key: 'after',\n value: function after() {}\n }]);\n\n return Uploader;\n}();\n\nexports.default = Uploader;\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Require CSS build\n */\n__webpack_require__(2);\n\nmodule.exports = __webpack_require__(3);\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar capella = {};\n\nvar Uploader = __webpack_require__(0).default;\nvar Clipboard = __webpack_require__(4).default;\nvar DNDFileUploader = __webpack_require__(5).default;\nvar UploadScreen = __webpack_require__(6).default;\n\n/**\n * Require modules\n */\ncapella.ajax = __webpack_require__(7);\ncapella.transport = __webpack_require__(8);\ncapella.uploader = __webpack_require__(0);\ncapella.copyable = __webpack_require__(9);\ncapella.notificationToggler = __webpack_require__(10);\ncapella.checkForSafari = __webpack_require__(11);\ncapella.notifier = __webpack_require__(12);\n\ncapella.uploadScreen = new UploadScreen();\ncapella.uploader = new Uploader();\ncapella.clipboard = new Clipboard();\ncapella.dnd = new DNDFileUploader('.capella');\n\ncapella.init = function () {\n capella.copyable.init();\n capella.checkForSafari.init();\n};\n\nmodule.exports = capella;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Paste from clipboard module\n */\nvar Clipboard = function () {\n /**\n * Initialization of Clipboard module\n */\n function Clipboard() {\n _classCallCheck(this, Clipboard);\n\n document.body.addEventListener('paste', this.pasteFromClipboard);\n }\n\n /**\n * Pasted image from clipboard\n */\n\n\n _createClass(Clipboard, [{\n key: 'pasteFromClipboard',\n value: function pasteFromClipboard(event) {\n var clipboard = event.clipboardData || event.originalEvent.clipboardData || window.clipboardData;\n\n /**\n * items - for images\n * data - for links\n */\n var items = clipboard.items;\n var data = clipboard.getData('Text');\n var blob = null;\n\n event.stopPropagation();\n event.preventDefault();\n\n /**\n * Checking if clipboard has a link\n */\n if (data) {\n /**\n * Parsing on valid URL\n */\n var regex = /^((http[s]?):\\/)?\\/?([^:\\/\\s]+)((\\/\\w+)*\\/)([\\w\\-\\.]+[^#?\\s]+)(.*)?(#[\\w\\-]+)?$/;\n\n if (data.match(regex)) {\n capella.uploader.upload({ 'link': data });\n } else {\n document.getElementById('uploadLinkField').value = data;\n }\n }\n\n if (items) {\n /**\n * Checking all clipboard's files and choosing last image file\n */\n for (var i = items.length - 1; i >= 0; --i) {\n if (items[i].type.indexOf('image') === 0) {\n blob = items[i].getAsFile();\n break;\n }\n }\n }\n\n if (blob !== null) {\n /**\n * FilerReader is used for asynchronous image reading from blob: function at onload\n */\n var reader = new FileReader();\n\n reader.onload = function () {\n capella.uploader.uploadBlob(blob);\n };\n reader.readAsDataURL(blob);\n }\n }\n }]);\n\n return Clipboard;\n}();\n\nexports.default = Clipboard;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * Class for working with drag and drop files to browser\n *\n * @class DNDFileUploader\n *\n * @property {HTMLElement} wrapper — page wrapper element\n *\n */\nvar DNDFileUploader = function () {\n /**\n * Bind drag and drop events\n *\n * @param {String} wrapper - page wrapper selector\n */\n function DNDFileUploader(wrapper) {\n _classCallCheck(this, DNDFileUploader);\n\n this.wrapper = document.querySelector(wrapper);\n\n this.wrapper.addEventListener('dragenter', this.dragover.bind(this));\n this.wrapper.addEventListener('dragover', this.dragover.bind(this));\n this.wrapper.addEventListener('dragleave', this.drageleave.bind(this));\n this.wrapper.addEventListener('drop', this.drop.bind(this));\n }\n\n /**\n *\n * File dragover handler\n *\n * @param {Event} event — dragover event\n */\n\n\n _createClass(DNDFileUploader, [{\n key: 'dragover',\n value: function dragover(event) {\n event.preventDefault();\n\n this.wrapper.classList.add('capella--dark');\n }\n\n /**\n *\n * File dragleave handler\n *\n * @param {Event} event — dragleave event\n */\n\n }, {\n key: 'drageleave',\n value: function drageleave(event) {\n event.preventDefault();\n\n this.wrapper.classList.remove('capella--dark');\n }\n\n /**\n * File drop handler\n *\n * @param {Event} event — drop event\n */\n\n }, {\n key: 'drop',\n value: function drop(event) {\n this.wrapper.classList.remove('capella--dark');\n\n var file = event.dataTransfer.files[0];\n\n capella.uploader.uploadBlob(file);\n\n event.preventDefault();\n }\n }]);\n\n return DNDFileUploader;\n}();\n\nexports.default = DNDFileUploader;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Class to control upload screen appearance\n *\n * @property {HTMLElement} mainContainer — page wrapper\n * @property {HTMLElement} progressBar — progress bar slider element\n * @property {String} loadingClass — upload screen class\n *\n */\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar UploadScreen = function () {\n /**\n * @constructor\n * Get needed elements from page\n */\n function UploadScreen() {\n _classCallCheck(this, UploadScreen);\n\n this.mainContainer = document.querySelector('.capella');\n this.progressBar = document.querySelector('.js-capella__uploading-progress');\n this.loadingClass = 'capella--loading';\n }\n\n /**\n * Show loading screen by adding loadingClass to page wrapper\n *\n * @param {String} filename — file which is uploading now\n */\n\n\n _createClass(UploadScreen, [{\n key: 'show',\n value: function show(filename) {\n var filenameHolder = this.mainContainer.querySelector('.capella__uploading-filename');\n\n filenameHolder.textContent = filename;\n this.mainContainer.classList.add(this.loadingClass);\n }\n\n /**\n * Hide loading screen by removing loadingClass from page wrapper\n */\n\n }, {\n key: 'hide',\n value: function hide() {\n this.mainContainer.classList.remove(this.loadingClass);\n }\n\n /**\n * Method to control loading progress bar\n *\n * @param {Number} percents — uploading percentage\n */\n\n }, {\n key: 'progress',\n value: function progress(percents) {\n this.progressBar.style.width = percents + '%';\n }\n }]);\n\n return UploadScreen;\n}();\n\nexports.default = UploadScreen;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n!function(t,e){ true?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.ajax=e():t.ajax=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var a=n[r]={i:r,l:!1,exports:{}};return t[r].call(a.exports,a,a.exports,e),a.l=!0,a.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"\",e(e.s=0)}([function(t,e,n){\"use strict\";t.exports=function(){var t=function(t){return t instanceof FormData};return{call:function(e){if(e&&e.url){var n=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject(\"Microsoft.XMLHTTP\"),r=e.progress||null,a=e.success||function(){},o=e.error||function(){},u=e.before||null,i=e.after?e.after.bind(null,e.data):null;if(e.async=!0,e.type=e.type||\"GET\",e.data=e.data||\"\",e[\"content-type\"]=e[\"content-type\"]||\"application/json; charset=utf-8\",\"GET\"===e.type&&e.data&&(e.url=/\\?/.test(e.url)?e.url+\"&\"+e.data:e.url+\"?\"+e.data),e.withCredentials&&(n.withCredentials=!0),u&&\"function\"==typeof u){if(!1===u(e.data))return}if(n.open(e.type,e.url,e.async),!t(e.data)){var c=new FormData;for(var f in e.data)c.append(f,e.data[f]);e.data=c}r&&\"function\"==typeof r&&n.upload.addEventListener(\"progress\",function(t){var e=parseInt(t.loaded/t.total*100);r(e)},!1),n.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\"),n.onreadystatechange=function(){if(4===n.readyState){var t=n.responseText;try{t=JSON.parse(t)}catch(t){}200===n.status?a(t):o(t),i&&\"function\"==typeof i&&i()}},n.send(e.data)}}}}()}])});\n//# sourceMappingURL=bundle.js.map\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n!function(t,e){ true?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.transport=e():t.transport=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"\",e(e.s=0)}([function(t,e,n){\"use strict\";var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},o=n(1);t.exports=function(t){var e=null;t.input=null;var n=function(){t.input.click()},u=function(){e.before(t.input.files)},a=function(){var n=e.url,a=e.data,i=u,c=e.progress,f=e.success,s=e.error,p=e.after,l=new FormData,d=t.input.files;if(d.length>1)for(var y=0;yClick to copy\n *\n * You can pass callback function to init method. Callback will fire when something has copied\n *\n * @type {{init}}\n */\nmodule.exports = function () {\n var NAMES = {\n copyable: 'js-copyable',\n authorized: 'js-copyable-authorize'\n };\n\n /**\n * Take element by name and pass it to prepareElement function\n *\n * @param {Function} copiedCallback - fires when something has copied\n */\n var init = function init(copiedCallback) {\n var elems = document.getElementsByName(NAMES.copyable);\n\n if (!elems) {\n console.log('There are no copyable elements');\n return;\n }\n\n for (var i = 0; i < elems.length; i++) {\n prepareElement(elems[i], copiedCallback);\n }\n\n var authorizedElems = document.getElementsByName(NAMES.authorized);\n\n for (var _i = 0; _i < authorizedElems.length; _i++) {\n authorize(authorizedElems[_i]);\n }\n\n console.log('Copyable module initialized');\n\n this.clipboardButton = document.querySelector('.js-result__copy');\n\n if (this.clipboardButton) {\n this.clipboardButton.addEventListener('click', capella.notificationToggler.toggleCopiedIcon, true);\n }\n };\n\n /**\n * Add click and copied listeners to copyable element\n *\n * @param element\n * @param copiedCallback\n */\n var prepareElement = function prepareElement(element, copiedCallback) {\n element.addEventListener('click', elementClicked);\n element.addEventListener('copied', copiedCallback);\n };\n\n /**\n * Add click listener for authorized element\n *\n * @param element\n */\n var authorize = function authorize(element) {\n element.addEventListener('click', authorizedCopy);\n };\n\n /**\n * Click handler for authorized elements\n */\n var authorizedCopy = function authorizedCopy() {\n var authorizedElem = this;\n var copyable = authorizedElem.querySelector('[name=' + NAMES.copyable + ']');\n\n copyable.click();\n };\n\n /**\n * Click handler\n * Create new range, select copyable element and add range to selection. Then exec 'copy' command\n */\n var elementClicked = function elementClicked(event) {\n var selection = window.getSelection(),\n range = document.createRange();\n\n range.selectNodeContents(this);\n selection.removeAllRanges();\n selection.addRange(range);\n\n document.execCommand('copy');\n selection.removeAllRanges();\n\n /**\n * We create new CustomEvent and dispatch it on copyable element\n * Consist copied text in detail property\n */\n var CopiedEvent = new CustomEvent('copied', {\n bubbles: false,\n cancelable: false,\n detail: range.toString()\n });\n\n this.dispatchEvent(CopiedEvent);\n event.stopPropagation();\n };\n\n return {\n init: init\n };\n}();\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function () {\n var CSS = {\n /* Class of 'Copied' notification element */\n notificationClass: '.js-result__is-copied',\n\n /* Class used to hide notification after showTimeout */\n notificationHideClass: 'js-hidden'\n };\n\n /* 'Copied' notification element */\n var notificationElement = document.querySelector(CSS.notificationClass);\n\n /* Timeout after which notificationElement will be hidden */\n var showTimeout = 2000;\n\n /* Timer to hide notification */\n var notificationIsVisibleTimer = void 0;\n\n /**\n * Show and hide after showTimeout seconds copy-notifications\n */\n var toggleCopiedIcon = function toggleCopiedIcon(event) {\n /* Don't open link in new window unless one of these keys is pressed */\n if (event.ctrlKey || event.metaKey || event.which === 2) {\n return false;\n }\n\n event.preventDefault();\n\n /* Clear timer if it was set previously */\n if (notificationIsVisibleTimer) {\n clearTimeout(notificationIsVisibleTimer);\n }\n\n /* First reveal zero-opacity notification elem, then after timeout hide it again */\n notificationElement.classList.remove(CSS.notificationHideClass);\n notificationIsVisibleTimer = setTimeout(function () {\n notificationElement.classList.add(CSS.notificationHideClass);\n }, showTimeout);\n };\n\n return {\n toggleCopiedIcon: toggleCopiedIcon\n };\n}();\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * TEMP fix. Detect Safari and add class to body\n */\n\nmodule.exports = function () {\n var init = function init() {\n var userAgent = window.navigator.userAgent;\n\n if (userAgent.indexOf('Safari') >= 0 && userAgent.indexOf('Chrome') < 0) {\n document.body.classList.add('safari');\n }\n };\n\n return {\n init: init\n };\n}();\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\nvar notifier=function(e){function t(r){if(n[r])return n[r].exports;var c=n[r]={i:r,l:!1,exports:{}};return e[r].call(c.exports,c,c.exports,t),c.l=!0,c.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,\"a\",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p=\"\",t(t.s=2)}([function(e,t,n){\"use strict\";e.exports=function(){var e={wrapper:\"cdx-notifies\",notification:\"cdx-notify\",crossBtn:\"cdx-notify__cross\",okBtn:\"cdx-notify__button--confirm\",cancelBtn:\"cdx-notify__button--cancel\",input:\"cdx-notify__input\",btn:\"cdx-notify__button\",btnsWrapper:\"cdx-notify__btns-wrapper\"},t=function(t){var n=document.createElement(\"DIV\"),r=document.createElement(\"DIV\"),c=t.message,i=t.style;return n.classList.add(e.notification),i&&n.classList.add(e.notification+\"--\"+i),n.innerHTML=c,r.classList.add(e.crossBtn),r.addEventListener(\"click\",n.remove.bind(n)),n.appendChild(r),n};return{alert:t,confirm:function(n){var r=t(n),c=document.createElement(\"div\"),i=document.createElement(\"button\"),a=document.createElement(\"button\"),o=r.querySelector(e.crossBtn),d=n.cancelHandler,s=n.okHandler;return c.classList.add(e.btnsWrapper),i.innerHTML=n.okText||\"Confirm\",a.innerHTML=n.cancelText||\"Cancel\",i.classList.add(e.btn),a.classList.add(e.btn),i.classList.add(e.okBtn),a.classList.add(e.cancelBtn),d&&\"function\"==typeof d&&(a.addEventListener(\"click\",d),o.addEventListener(\"click\",d)),s&&\"function\"==typeof s&&i.addEventListener(\"click\",s),i.addEventListener(\"click\",r.remove.bind(r)),a.addEventListener(\"click\",r.remove.bind(r)),c.appendChild(i),c.appendChild(a),r.appendChild(c),r},prompt:function(n){var r=t(n),c=document.createElement(\"div\"),i=document.createElement(\"button\"),a=document.createElement(\"input\"),o=r.querySelector(e.crossBtn),d=n.cancelHandler,s=n.okHandler;return c.classList.add(e.btnsWrapper),i.innerHTML=n.okText||\"Ok\",i.classList.add(e.btn),i.classList.add(e.okBtn),a.classList.add(e.input),n.placeholder&&a.setAttribute(\"placeholder\",n.placeholder),n.default&&(a.value=n.default),n.inputType&&(a.type=n.inputType),d&&\"function\"==typeof d&&o.addEventListener(\"click\",d),s&&\"function\"==typeof s&&i.addEventListener(\"click\",function(){s(a.value)}),i.addEventListener(\"click\",r.remove.bind(r)),c.appendChild(a),c.appendChild(i),r.appendChild(c),r},wrapper:function(){var t=document.createElement(\"DIV\");return t.classList.add(e.wrapper),t}}}()},function(e,t){},function(e,t,n){\"use strict\";/*!\n * Codex JavaScript Notification module\n * https://github.com/codex-team/js-notifier\n *\n * Codex Team - https://ifmo.su\n *\n * MIT License | (c) Codex 2017\n */\ne.exports=function(){function e(){if(i)return!0;i=r.wrapper(),document.body.appendChild(i)}function t(t){if(t.message){e();var n=null,a=t.time||8e3;switch(t.type){case\"confirm\":n=r.confirm(t);break;case\"prompt\":n=r.prompt(t);break;default:n=r.alert(t),window.setTimeout(function(){n.remove()},a)}i.appendChild(n),n.classList.add(c)}}n(1);var r=n(0),c=\"cdx-notify--bounce-in\",i=null;return{show:t}}()}]);\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = notifier;\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// public/build/bundle.js"," \t// The module cache\n \tvar installedModules = {};\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, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\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 = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap de6f8a94af1b8b8017a2","'use strict';\n\n/**\n * @class Uploader\n * Handle images uploading\n *\n * @property {String} uploadUrl — url to upload images\n * @property {HTMLElement} uploadFilButton — transport initialization trigger\n * @property {HTMLElement} uploadLinkField — input to insert image link\n */\nexport default class Uploader {\n /**\n * Uploader class constructor. Get needed elements and bind events\n */\n constructor() {\n this.uploadUrl = '/upload';\n this.uploadFileButton = document.getElementById('uploadFileButton');\n this.uploadLinkField = document.getElementById('uploadLinkField');\n\n if (this.uploadFileButton) {\n this.uploadFileButton.addEventListener('click', this.uploadByTransport.bind(this), false);\n }\n\n if (this.uploadLinkField) {\n this.uploadLinkField.addEventListener('keydown', this.uploadByUrl.bind(this), false);\n }\n }\n\n /**\n * Init codex.transport to select image from user's computer\n */\n uploadByTransport() {\n capella.transport.init({\n url: this.uploadUrl,\n multiple: false,\n accept: 'image/png, image/gif, image/jpg, image/jpeg, image/bmp',\n data: {},\n before: this.before,\n progress: this.progress,\n success: this.success,\n error: this.error,\n after: this.after\n });\n }\n\n /**\n * Handle upload by image url\n *\n * @param e\n */\n uploadByUrl(e) {\n /** Check for Enter key */\n if (e.keyCode !== 13) {\n return;\n }\n e.preventDefault();\n\n if (this.uploadLinkField) {\n this.upload({'link': this.uploadLinkField.value});\n }\n }\n\n /**\n * Handler to upload blob data using FormData\n *\n * @param {Blob|File} file — file to send\n */\n uploadBlob(file) {\n let formData = new FormData();\n\n this.currentFileName = file.name;\n\n formData.append('file', file, file.name);\n\n this.upload(formData);\n }\n\n /**\n * Send AJAX request to uploadUrl with passed data\n *\n * @param {*} data — data to send\n */\n upload(data) {\n capella.ajax.call({\n type: 'POST',\n url: this.uploadUrl,\n data: data,\n before: this.before.bind(this),\n progress: this.progress,\n success: this.success,\n error: this.error,\n after: this.after\n });\n }\n\n /**\n * Method to call before upload starts\n */\n before(data) {\n let filename;\n\n if (data instanceof FormData) {\n filename = this.currentFileName;\n }\n if (data && data.link) {\n filename = data.link;\n }\n if (data[0] instanceof File) {\n filename = data[0].name;\n }\n\n capella.uploadScreen.show(filename);\n }\n\n /**\n * Handle upload progress\n *\n * @param percentage — upload percentage\n */\n progress(percentage) {\n percentage = 0.95 * percentage;\n capella.uploadScreen.progress(percentage);\n }\n\n /**\n * Successful upload handler\n *\n * @param {Object} response — response object\n * @param {Boolean} response.success — upload status\n * @param {String} response.url — if upload was successful, contains uploaded image url\n * @param {String} response.id — if upload was succesful, contains uploaded image id\n * @param {String} response.message — if upload failed, contains reason\n */\n success(response) {\n console.log(response);\n\n if (response.success) {\n capella.uploadScreen.progress(100);\n\n /** Redirect to uploaded image */\n window.location.href = '/image/' + response.id;\n } else {\n capella.uploadScreen.hide();\n }\n }\n\n /**\n * Upload error handler\n *\n * @param {Error} error — raised error\n */\n error(response) {\n capella.notifier.show({\n message: '' + response.message,\n time: 7000\n });\n capella.uploadScreen.hide();\n }\n\n /**\n * Method to call after upload\n */\n after() {}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/uploader.js","/**\n * Require CSS build\n */\nrequire('./css/main.css');\n\nmodule.exports = require('./js/main.js');\n\n\n\n// WEBPACK FOOTER //\n// ./public/app/entry.js","'use strict';\n\n\nconst capella = {};\n\nlet Uploader = require('./uploader').default;\nlet Clipboard = require('./clipboard').default;\nlet DNDFileUploader = require('./dragndrop').default;\nlet UploadScreen = require('./uploadScreen').default;\n\n/**\n * Require modules\n */\ncapella.ajax = require('codex.ajax');\ncapella.transport = require('codex.transport');\ncapella.uploader = require('./uploader');\ncapella.copyable = require('./copyable');\ncapella.notificationToggler = require('./notificationToggler');\ncapella.checkForSafari = require('./checkForSafari');\ncapella.notifier = require('exports-loader?notifier!codex-notifier');\n\ncapella.uploadScreen = new UploadScreen();\ncapella.uploader = new Uploader();\ncapella.clipboard = new Clipboard();\ncapella.dnd = new DNDFileUploader('.capella');\n\ncapella.init = function () {\n capella.copyable.init();\n capella.checkForSafari.init();\n};\n\nmodule.exports = capella;\n\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/main.js","/**\n * Paste from clipboard module\n */\nexport default class Clipboard {\n /**\n * Initialization of Clipboard module\n */\n constructor() {\n document.body.addEventListener('paste', this.pasteFromClipboard);\n }\n\n /**\n * Pasted image from clipboard\n */\n pasteFromClipboard(event) {\n let clipboard = (event.clipboardData || event.originalEvent.clipboardData || window.clipboardData);\n\n /**\n * items - for images\n * data - for links\n */\n let items = clipboard.items;\n let data = clipboard.getData('Text');\n let blob = null;\n\n event.stopPropagation();\n event.preventDefault();\n\n /**\n * Checking if clipboard has a link\n */\n if (data) {\n /**\n * Parsing on valid URL\n */\n let regex = /^((http[s]?):\\/)?\\/?([^:\\/\\s]+)((\\/\\w+)*\\/)([\\w\\-\\.]+[^#?\\s]+)(.*)?(#[\\w\\-]+)?$/;\n\n if (data.match(regex)) {\n capella.uploader.upload({'link': data});\n } else {\n document.getElementById('uploadLinkField').value = data;\n }\n }\n\n if (items) {\n /**\n * Checking all clipboard's files and choosing last image file\n */\n for (let i = items.length - 1; i >= 0; --i) {\n if (items[i].type.indexOf('image') === 0) {\n blob = items[i].getAsFile();\n break;\n }\n }\n }\n\n if (blob !== null) {\n /**\n * FilerReader is used for asynchronous image reading from blob: function at onload\n */\n let reader = new FileReader();\n\n reader.onload = function () {\n capella.uploader.uploadBlob(blob);\n };\n reader.readAsDataURL(blob);\n }\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/clipboard.js","/**\n * Class for working with drag and drop files to browser\n *\n * @class DNDFileUploader\n *\n * @property {HTMLElement} wrapper — page wrapper element\n *\n */\nexport default class DNDFileUploader {\n /**\n * Bind drag and drop events\n *\n * @param {String} wrapper - page wrapper selector\n */\n constructor(wrapper) {\n this.wrapper = document.querySelector(wrapper);\n\n this.wrapper.addEventListener('dragenter', this.dragover.bind(this));\n this.wrapper.addEventListener('dragover', this.dragover.bind(this));\n this.wrapper.addEventListener('dragleave', this.drageleave.bind(this));\n this.wrapper.addEventListener('drop', this.drop.bind(this));\n }\n\n /**\n *\n * File dragover handler\n *\n * @param {Event} event — dragover event\n */\n dragover(event) {\n event.preventDefault();\n\n this.wrapper.classList.add('capella--dark');\n }\n\n /**\n *\n * File dragleave handler\n *\n * @param {Event} event — dragleave event\n */\n drageleave(event) {\n event.preventDefault();\n\n this.wrapper.classList.remove('capella--dark');\n }\n\n /**\n * File drop handler\n *\n * @param {Event} event — drop event\n */\n drop(event) {\n this.wrapper.classList.remove('capella--dark');\n\n let file = event.dataTransfer.files[0];\n\n capella.uploader.uploadBlob(file);\n\n event.preventDefault();\n }\n}\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/dragndrop.js","'use strict';\n\n/**\n * Class to control upload screen appearance\n *\n * @property {HTMLElement} mainContainer — page wrapper\n * @property {HTMLElement} progressBar — progress bar slider element\n * @property {String} loadingClass — upload screen class\n *\n */\nexport default class UploadScreen {\n /**\n * @constructor\n * Get needed elements from page\n */\n constructor() {\n this.mainContainer = document.querySelector('.capella');\n this.progressBar = document.querySelector('.js-capella__uploading-progress');\n this.loadingClass = 'capella--loading';\n }\n\n /**\n * Show loading screen by adding loadingClass to page wrapper\n *\n * @param {String} filename — file which is uploading now\n */\n show(filename) {\n let filenameHolder = this.mainContainer.querySelector('.capella__uploading-filename');\n\n filenameHolder.textContent = filename;\n this.mainContainer.classList.add(this.loadingClass);\n }\n\n /**\n * Hide loading screen by removing loadingClass from page wrapper\n */\n hide() {\n this.mainContainer.classList.remove(this.loadingClass);\n }\n\n /**\n * Method to control loading progress bar\n *\n * @param {Number} percents — uploading percentage\n */\n progress(percents) {\n this.progressBar.style.width = percents + '%';\n }\n}\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/uploadScreen.js","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.ajax=e():t.ajax=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var a=n[r]={i:r,l:!1,exports:{}};return t[r].call(a.exports,a,a.exports,e),a.l=!0,a.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"\",e(e.s=0)}([function(t,e,n){\"use strict\";t.exports=function(){var t=function(t){return t instanceof FormData};return{call:function(e){if(e&&e.url){var n=window.XMLHttpRequest?new window.XMLHttpRequest:new window.ActiveXObject(\"Microsoft.XMLHTTP\"),r=e.progress||null,a=e.success||function(){},o=e.error||function(){},u=e.before||null,i=e.after?e.after.bind(null,e.data):null;if(e.async=!0,e.type=e.type||\"GET\",e.data=e.data||\"\",e[\"content-type\"]=e[\"content-type\"]||\"application/json; charset=utf-8\",\"GET\"===e.type&&e.data&&(e.url=/\\?/.test(e.url)?e.url+\"&\"+e.data:e.url+\"?\"+e.data),e.withCredentials&&(n.withCredentials=!0),u&&\"function\"==typeof u){if(!1===u(e.data))return}if(n.open(e.type,e.url,e.async),!t(e.data)){var c=new FormData;for(var f in e.data)c.append(f,e.data[f]);e.data=c}r&&\"function\"==typeof r&&n.upload.addEventListener(\"progress\",function(t){var e=parseInt(t.loaded/t.total*100);r(e)},!1),n.setRequestHeader(\"X-Requested-With\",\"XMLHttpRequest\"),n.onreadystatechange=function(){if(4===n.readyState){var t=n.responseText;try{t=JSON.parse(t)}catch(t){}200===n.status?a(t):o(t),i&&\"function\"==typeof i&&i()}},n.send(e.data)}}}}()}])});\n//# sourceMappingURL=bundle.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/codex.ajax/lib/bundle.js\n// module id = 7\n// module chunks = 0","!function(t,e){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define([],e):\"object\"==typeof exports?exports.transport=e():t.transport=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"\",e(e.s=0)}([function(t,e,n){\"use strict\";var r=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t},o=n(1);t.exports=function(t){var e=null;t.input=null;var n=function(){t.input.click()},u=function(){e.before(t.input.files)},a=function(){var n=e.url,a=e.data,i=u,c=e.progress,f=e.success,s=e.error,p=e.after,l=new FormData,d=t.input.files;if(d.length>1)for(var y=0;yClick to copy\n *\n * You can pass callback function to init method. Callback will fire when something has copied\n *\n * @type {{init}}\n */\nmodule.exports = function () {\n const NAMES = {\n copyable: 'js-copyable',\n authorized: 'js-copyable-authorize'\n };\n\n /**\n * Take element by name and pass it to prepareElement function\n *\n * @param {Function} copiedCallback - fires when something has copied\n */\n let init = function (copiedCallback) {\n let elems = document.getElementsByName(NAMES.copyable);\n\n if (!elems) {\n console.log('There are no copyable elements');\n return;\n }\n\n for (let i = 0; i < elems.length; i++) {\n prepareElement(elems[i], copiedCallback);\n }\n\n let authorizedElems = document.getElementsByName(NAMES.authorized);\n\n for (let i = 0; i < authorizedElems.length; i++) {\n authorize(authorizedElems[i]);\n }\n\n console.log('Copyable module initialized');\n\n this.clipboardButton = document.querySelector('.js-result__copy');\n\n if (this.clipboardButton) {\n this.clipboardButton.addEventListener('click', capella.notificationToggler.toggleCopiedIcon, true);\n }\n };\n\n /**\n * Add click and copied listeners to copyable element\n *\n * @param element\n * @param copiedCallback\n */\n let prepareElement = function (element, copiedCallback) {\n element.addEventListener('click', elementClicked);\n element.addEventListener('copied', copiedCallback);\n };\n\n /**\n * Add click listener for authorized element\n *\n * @param element\n */\n let authorize = function (element) {\n element.addEventListener('click', authorizedCopy);\n };\n\n /**\n * Click handler for authorized elements\n */\n let authorizedCopy = function () {\n let authorizedElem = this;\n let copyable = authorizedElem.querySelector('[name='+NAMES.copyable+']');\n\n copyable.click();\n };\n\n /**\n * Click handler\n * Create new range, select copyable element and add range to selection. Then exec 'copy' command\n */\n let elementClicked = function (event) {\n let selection = window.getSelection(),\n range = document.createRange();\n\n range.selectNodeContents(this);\n selection.removeAllRanges();\n selection.addRange(range);\n\n document.execCommand('copy');\n selection.removeAllRanges();\n\n /**\n * We create new CustomEvent and dispatch it on copyable element\n * Consist copied text in detail property\n */\n let CopiedEvent = new CustomEvent('copied', {\n bubbles: false,\n cancelable: false,\n detail: range.toString()\n });\n\n this.dispatchEvent(CopiedEvent);\n event.stopPropagation();\n };\n\n return {\n init: init\n };\n}();\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/copyable.js","'use strict';\n\nmodule.exports = function () {\n const CSS = {\n /* Class of 'Copied' notification element */\n notificationClass: '.js-result__is-copied',\n\n /* Class used to hide notification after showTimeout */\n notificationHideClass: 'js-hidden'\n };\n\n /* 'Copied' notification element */\n const notificationElement = document.querySelector(CSS.notificationClass);\n\n /* Timeout after which notificationElement will be hidden */\n const showTimeout = 2000;\n\n /* Timer to hide notification */\n let notificationIsVisibleTimer;\n\n /**\n * Show and hide after showTimeout seconds copy-notifications\n */\n let toggleCopiedIcon = function (event) {\n /* Don't open link in new window unless one of these keys is pressed */\n if (event.ctrlKey || event.metaKey || event.which === 2) {\n return false;\n }\n\n event.preventDefault();\n\n /* Clear timer if it was set previously */\n if (notificationIsVisibleTimer) {\n clearTimeout(notificationIsVisibleTimer);\n }\n\n /* First reveal zero-opacity notification elem, then after timeout hide it again */\n notificationElement.classList.remove(CSS.notificationHideClass);\n notificationIsVisibleTimer = setTimeout(function () {\n notificationElement.classList.add(CSS.notificationHideClass);\n }, showTimeout);\n };\n\n return {\n toggleCopiedIcon : toggleCopiedIcon\n };\n}();\n\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/notificationToggler.js","'use strict';\n\n\n/**\n * TEMP fix. Detect Safari and add class to body\n */\nmodule.exports = function () {\n let init = function () {\n let userAgent = window.navigator.userAgent;\n\n if (userAgent.indexOf('Safari') >= 0 && userAgent.indexOf('Chrome') < 0) {\n document.body.classList.add('safari');\n }\n };\n\n return {\n init\n };\n}();\n\n\n\n// WEBPACK FOOTER //\n// ./public/app/js/checkForSafari.js","var notifier=function(e){function t(r){if(n[r])return n[r].exports;var c=n[r]={i:r,l:!1,exports:{}};return e[r].call(c.exports,c,c.exports,t),c.l=!0,c.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,\"a\",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p=\"\",t(t.s=2)}([function(e,t,n){\"use strict\";e.exports=function(){var e={wrapper:\"cdx-notifies\",notification:\"cdx-notify\",crossBtn:\"cdx-notify__cross\",okBtn:\"cdx-notify__button--confirm\",cancelBtn:\"cdx-notify__button--cancel\",input:\"cdx-notify__input\",btn:\"cdx-notify__button\",btnsWrapper:\"cdx-notify__btns-wrapper\"},t=function(t){var n=document.createElement(\"DIV\"),r=document.createElement(\"DIV\"),c=t.message,i=t.style;return n.classList.add(e.notification),i&&n.classList.add(e.notification+\"--\"+i),n.innerHTML=c,r.classList.add(e.crossBtn),r.addEventListener(\"click\",n.remove.bind(n)),n.appendChild(r),n};return{alert:t,confirm:function(n){var r=t(n),c=document.createElement(\"div\"),i=document.createElement(\"button\"),a=document.createElement(\"button\"),o=r.querySelector(e.crossBtn),d=n.cancelHandler,s=n.okHandler;return c.classList.add(e.btnsWrapper),i.innerHTML=n.okText||\"Confirm\",a.innerHTML=n.cancelText||\"Cancel\",i.classList.add(e.btn),a.classList.add(e.btn),i.classList.add(e.okBtn),a.classList.add(e.cancelBtn),d&&\"function\"==typeof d&&(a.addEventListener(\"click\",d),o.addEventListener(\"click\",d)),s&&\"function\"==typeof s&&i.addEventListener(\"click\",s),i.addEventListener(\"click\",r.remove.bind(r)),a.addEventListener(\"click\",r.remove.bind(r)),c.appendChild(i),c.appendChild(a),r.appendChild(c),r},prompt:function(n){var r=t(n),c=document.createElement(\"div\"),i=document.createElement(\"button\"),a=document.createElement(\"input\"),o=r.querySelector(e.crossBtn),d=n.cancelHandler,s=n.okHandler;return c.classList.add(e.btnsWrapper),i.innerHTML=n.okText||\"Ok\",i.classList.add(e.btn),i.classList.add(e.okBtn),a.classList.add(e.input),n.placeholder&&a.setAttribute(\"placeholder\",n.placeholder),n.default&&(a.value=n.default),n.inputType&&(a.type=n.inputType),d&&\"function\"==typeof d&&o.addEventListener(\"click\",d),s&&\"function\"==typeof s&&i.addEventListener(\"click\",function(){s(a.value)}),i.addEventListener(\"click\",r.remove.bind(r)),c.appendChild(a),c.appendChild(i),r.appendChild(c),r},wrapper:function(){var t=document.createElement(\"DIV\");return t.classList.add(e.wrapper),t}}}()},function(e,t){},function(e,t,n){\"use strict\";/*!\n * Codex JavaScript Notification module\n * https://github.com/codex-team/js-notifier\n *\n * Codex Team - https://ifmo.su\n *\n * MIT License | (c) Codex 2017\n */\ne.exports=function(){function e(){if(i)return!0;i=r.wrapper(),document.body.appendChild(i)}function t(t){if(t.message){e();var n=null,a=t.time||8e3;switch(t.type){case\"confirm\":n=r.confirm(t);break;case\"prompt\":n=r.prompt(t);break;default:n=r.alert(t),window.setTimeout(function(){n.remove()},a)}i.appendChild(n),n.classList.add(c)}}n(1);var r=n(0),c=\"cdx-notify--bounce-in\",i=null;return{show:t}}()}]);\n\n/*** EXPORTS FROM exports-loader ***/\nmodule.exports = notifier;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/exports-loader?notifier!./node_modules/codex-notifier/notifier.js\n// module id = 12\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file