修訂 | 57 (tree) |
---|---|
時間 | 2021-07-08 22:14:35 |
作者 | ![]() |
frozen ver 20210708 in tags
@@ -0,0 +1,10 @@ | ||
1 | +@charset "UTF-8"; | |
2 | +/*! | |
3 | + * SimpleSlider v1.9.0 | |
4 | + * Simple responsive slider created in pure javascript. | |
5 | + * https://github.com/michu2k/SimpleSlider | |
6 | + * | |
7 | + * Copyright 2017-2019 Michał Strumpf | |
8 | + * Published under MIT License | |
9 | + */ | |
10 | +.simple-slider{overflow:hidden;position:relative}.simple-slider .slider-wrapper{height:100%;position:relative;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-transition-timing-function:cubic-bezier(.7,0,.3,1);transition-timing-function:cubic-bezier(.7,0,.3,1)}.simple-slider .slider-slide{background-size:cover;background-position:center top;height:100%;float:left}.simple-slider .slider-pagination{text-align:center;width:100%;bottom:0;position:absolute}.simple-slider .slider-pagination .pagination-bullet{display:inline-block;cursor:pointer;width:16px;height:5px;margin:4px;background-color:#fff;-webkit-transition:all .3s ease;transition:all .3s ease}.simple-slider .slider-pagination .pagination-bullet.is-active{background-color:#999}.simple-slider .slider-btn{width:30px;height:50px;top:50%;cursor:pointer;background-repeat:no-repeat;position:absolute;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.simple-slider .slider-btn.slider-btn-prev{left:20px;background-image:url(../img/prev.svg);background-position:left}.simple-slider .slider-btn.slider-btn-next{right:20px;background-image:url(../img/next.svg);background-position:right} | |
\ No newline at end of file |
@@ -0,0 +1,9 @@ | ||
1 | +/*! | |
2 | + * SimpleSlider v1.9.0 | |
3 | + * Simple responsive slider created in pure javascript. | |
4 | + * https://github.com/michu2k/SimpleSlider | |
5 | + * | |
6 | + * Copyright 2017-2019 Michał Strumpf | |
7 | + * Published under MIT License | |
8 | + */ | |
9 | +"use strict";function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function _toConsumableArray(e){return _arrayWithoutHoles(e)||_iterableToArray(e)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function _iterableToArray(e){if(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e))return Array.from(e)}function _arrayWithoutHoles(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t<e.length;t++)n[t]=e[t];return n}}!function(i){function e(s,e){var d=this,t=1<arguments.length&&void 0!==e?e:{};this.init=function(){d.options=n({speed:600,delay:5e3,enableDrag:!0,autoplay:!1,loop:!0,slidesPerView:{},class:{wrapper:"slider-wrapper",slide:"slider-slide",buttons:"slider-btn",pagination:"slider-pagination",paginationItem:"pagination-bullet"},onInit:function(){},onChange:function(){}},t),function(){var e=d.options,t=e.slidesPerView,n=e.class,i=n.wrapper,a=n.slide,r=n.buttons,o=n.pagination;d.container=document.querySelector(s),d.wrapper=d.container.querySelector(".".concat(i)),d.slides=d.container.querySelectorAll(".".concat(a)),d.buttons=d.container.querySelectorAll(".".concat(r)),d.pagination=d.container.querySelector(".".concat(o)),d.disableEvents=!1,d.slidesWithClones=d.slides,d.maxSlidesPerView=Math.max.apply(Math,_toConsumableArray(Object.keys(t).map(function(e){return t[e]})).concat([1])),d.index=0,d.wrapperWidth=0,d.transitionDuration=l("transitionDuration"),d.transform=l("transform"),d.timer,d.drag={startX:0,endX:0,dragDiff:0,focused:!1,isLink:!1}}();var e=d.options.onInit;d.calculateSlidesPerView(),d.createClones(),d.setWidth(),d.moveWrapper(),d.createPagination(),d.autoplay(),d.attachEvents(),e()},this.attachEvents=function(){var e=d.options.enableDrag,t=d.container;["touchstartHandler","touchmoveHandler","touchendHandler","clickHandler","mousedownHandler","mousemoveHandler","mouseupHandler","mouseleaveHandler","resizeHandler","visibilitychangeHandler","paginationBulletsHandler","prevSlide","nextSlide"].map(function(e){d[e]=d[e].bind(d)}),e&&(t.addEventListener("touchstart",d.touchstartHandler),t.addEventListener("touchmove",d.touchmoveHandler),t.addEventListener("touchend",d.touchendHandler),t.addEventListener("click",d.clickHandler),t.addEventListener("mousedown",d.mousedownHandler),t.addEventListener("mousemove",d.mousemoveHandler),t.addEventListener("mouseup",d.mouseupHandler),t.addEventListener("mouseleave",d.mouseleaveHandler)),t.addEventListener("click",d.paginationBulletsHandler),2===d.buttons.length&&(d.buttons[0].addEventListener("click",d.prevSlide),d.buttons[1].addEventListener("click",d.nextSlide)),i.addEventListener("resize",d.resizeHandler),i.addEventListener("visibilitychange",d.visibilitychangeHandler)},this.detachEvents=function(){var e=d.container;e.removeEventListener("touchstart",d.touchstartHandler),e.removeEventListener("touchmove",d.touchmoveHandler),e.removeEventListener("touchend",d.touchendHandler),e.removeEventListener("click",d.clickHandler),e.removeEventListener("mousedown",d.mousedownHandler),e.removeEventListener("mousemove",d.mousemoveHandler),e.removeEventListener("mouseup",d.mouseupHandler),e.removeEventListener("mouseleave",d.mouseleaveHandler),e.removeEventListener("click",d.paginationBulletsHandler),d.buttons[0].removeEventListener("click",d.prevSlide),d.buttons[1].removeEventListener("click",d.nextSlide),i.removeEventListener("resize",d.resizeHandler),i.removeEventListener("visibilitychange",d.visibilitychangeHandler)},this.calculateSlidesPerView=function(){var e=d.options,t=e.loop,n=e.slidesPerView;d.slidesPerView=1,Object.keys(n).forEach(function(e){document.body.offsetWidth>=e&&(d.slidesPerView=n[e])}),d.maxIndex=t?d.slides.length:d.slides.length-d.slidesPerView+1},this.createClones=function(){if(d.options.loop){for(var e,t=d.options.class.slide,n=d.wrapper,i=d.slides.length-1,a=document.createDocumentFragment(),r=document.createDocumentFragment(),o=0;o<d.maxSlidesPerView&&!(i-o<0||i<o);o++)e=n.children[i-o].cloneNode(!0),r.insertBefore(e,r.childNodes[0]),e=n.children[o].cloneNode(!0),a.appendChild(e);n.appendChild(a),n.insertBefore(r,d.slides[0]),d.slidesWithClones=d.container.querySelectorAll(".".concat(t))}},this.setWidth=function(){var n=Math.round(d.container.offsetWidth/d.slidesPerView)+"px";d.wrapperWidth=0,Object.keys(d.slidesWithClones).map(function(e){var t=d.slidesWithClones[e];t.style.width=n,d.wrapperWidth+=t.offsetWidth}),d.wrapper.style.width=d.wrapperWidth+"px"},this.moveWrapper=function(){var e=d.options.loop,t=d.maxSlidesPerView+1-d.slidesPerView+Math.floor(d.slidesPerView/2)+d.index;d.wrapperPosition=0,e||(t=d.index>=d.maxIndex-Math.floor(d.slidesPerView/2)?d.maxIndex-1:d.index);for(var n=0;n<t;n++)d.wrapperPosition+=d.slidesWithClones[n].offsetWidth;d.wrapper.style[d.transform]="translate3d(-".concat(d.wrapperPosition,"px, 0, 0)")},this.changeSlide=function(){var e=0<arguments.length&&void 0!==arguments[0]&&arguments[0],t=d.options,n=t.speed,i=t.loop,a=t.onChange;d.disableEvents||(e||(d.resetAutoplay(),d.autoplay()),i?d.disableEvents=!0:(0<=d.index&&d.index<d.maxIndex&&(d.disableEvents=!0),d.index=d.updateIndex(d.index)),d.highlightPaginationBullet(),d.wrapper.style[d.transitionDuration]=n+"ms",d.moveWrapper(),a(),setTimeout(function(){i&&(d.index<0||d.index>=d.slides.length)&&(d.index=d.updateIndex(d.index),d.wrapper.style[d.transitionDuration]="0ms",d.moveWrapper()),d.disableEvents=!1},n))},this.createPagination=function(){if(d.pagination){for(var e,t=d.options,n=t.loop,i=t.class.paginationItem,a=document.createDocumentFragment(),r=n?0:Math.min(d.index,d.maxIndex-1),o=0;o<d.maxIndex;o++)(e=document.createElement("span")).classList.add(i),o==r&&e.classList.add("is-active"),a.appendChild(e);d.pagination.appendChild(a),d.paginationBullets=d.pagination.querySelectorAll(".".concat(i))}},this.destroyPagination=function(){d.pagination&&(d.pagination.innerHTML="")},this.paginationBulletsHandler=function(e){var t=d.options.class.paginationItem,n=[];if(e.target.classList.contains(t)){for(var i=0;i<d.paginationBullets.length;i++)n.push(d.paginationBullets[i]);var a=n.indexOf(e.target);d.disableEvents||(d.index=a-1,d.nextSlide())}},this.highlightPaginationBullet=function(){if(d.pagination){var e=d.options.class.paginationItem;d.pagination.querySelector(".is-active").classList.remove("is-active"),d.pagination.querySelectorAll(".".concat(e))[d.updateIndex(d.index)].classList.add("is-active")}},this.prevSlide=function(){d.decreaseIndex(),d.changeSlide()},this.nextSlide=function(){d.increaseIndex(),d.changeSlide()},this.increaseIndex=function(){d.disableEvents||d.index++},this.decreaseIndex=function(){d.disableEvents||d.index--},this.updateIndex=function(e){return d.options.loop?e>=d.slides.length?0:e<0?d.slides.length-1:e:e>=d.maxIndex?d.maxIndex-1:e<=0?0:e},this.autoplay=function(){var e=d.options,t=e.autoplay,n=e.delay,i=e.speed;t&&(d.timer=setTimeout(function(){d.increaseIndex(),d.changeSlide(!0),d.autoplay()},n+i))},this.resetAutoplay=function(){return clearTimeout(d.timer)},this.updateSliderAfterDrag=function(){var e=d.options.speed;d.drag.focused=!1,d.drag.dragDiff&&(d.autoplay(),100<Math.abs(d.drag.dragDiff)&&(d.drag.dragDiff<0?d.nextSlide():d.prevSlide()),d.wrapper.style[d.transitionDuration]=e+"ms",d.moveWrapper(),d.drag.dragDiff=0,d.drag.isLink=!1)},this.updateSliderDuringDrag=function(){d.resetAutoplay();var e=d.options.loop,t=d.slides[d.index].offsetWidth,n=d.wrapperPosition-d.drag.dragDiff,i=100+t;d.drag.dragDiff=d.drag.endX-d.drag.startX,e||(d.index<=0&&0<d.drag.dragDiff&&(i=100),d.index>=d.maxIndex-1&&d.drag.dragDiff<0&&(i=100)),d.drag.dragDiff<i&&d.drag.dragDiff>-1*i?d.wrapper.style[d.transform]="translate3d(".concat(-1*n,"px, 0, 0)"):d.updateSliderAfterDrag()},this.mousedownHandler=function(e){e.stopPropagation(),e.preventDefault(),d.wrapper.style[d.transitionDuration]="0ms",d.drag.focused=!0,d.drag.startX=e.pageX},this.mousemoveHandler=function(e){e.stopPropagation(),!d.disableEvents&&d.drag.focused&&("A"===e.target.nodeName&&(d.drag.isLink=!0),d.drag.endX=e.pageX,d.updateSliderDuringDrag())},this.mouseupHandler=function(e){e.stopPropagation(),d.updateSliderAfterDrag()},this.mouseleaveHandler=function(e){e.stopPropagation(),d.updateSliderAfterDrag()},this.clickHandler=function(e){d.drag.isLink&&e.preventDefault(),d.drag.isLink=!1},this.touchstartHandler=function(e){e.stopPropagation(),d.wrapper.style[d.transitionDuration]="0ms",d.drag.focused=!0,d.drag.startX=e.touches[0].pageX},this.touchmoveHandler=function(e){e.stopPropagation(),!d.disableEvents&&d.drag.focused&&(d.drag.endX=e.touches[0].pageX,d.updateSliderDuringDrag())},this.touchendHandler=function(e){e.stopPropagation(),d.updateSliderAfterDrag()},this.visibilitychangeHandler=function(){d.resetAutoplay(),document.hidden||d.autoplay()},this.resizeHandler=function(){var e=d.options.loop,t=d.slidesPerView;d.wrapper.style[d.transitionDuration]="0ms",d.calculateSlidesPerView(),d.setWidth(),d.moveWrapper(),e||t===d.slidesPerView||(d.destroyPagination(),d.createPagination())};var l=function(e){return"string"==typeof document.documentElement.style[e]?e:(e=e.charAt(0).toUpperCase()+e.slice(1),"webkit".concat(e))},n=function(e,t){var n,i;if(null!=t&&"undefined"!=t)for(n in t){var a=t[n];if("object"===_typeof(a))for(i in a)e[n][i]=a[i];else e[n]=a}return e};this.init()}"undefined"!=typeof module&&void 0!==module.exports?module.exports=e:i.SimpleSlider=e}(window); | |
\ No newline at end of file |
@@ -0,0 +1,2 @@ | ||
1 | +node_modules | |
2 | +.DS_Store | |
\ No newline at end of file |
@@ -0,0 +1 @@ | ||
1 | +.dropzone,.dropzone *{box-sizing:border-box}.dropzone{position:relative}.dropzone .dz-preview{position:relative;display:inline-block;width:120px;margin:.5em}.dropzone .dz-preview .dz-progress{display:block;height:15px;border:1px solid #aaa}.dropzone .dz-preview .dz-progress .dz-upload{display:block;height:100%;width:0;background:green}.dropzone .dz-preview .dz-error-message{color:red;display:none}.dropzone .dz-preview.dz-error .dz-error-message,.dropzone .dz-preview.dz-error .dz-error-mark{display:block}.dropzone .dz-preview.dz-success .dz-success-mark{display:block}.dropzone .dz-preview .dz-error-mark,.dropzone .dz-preview .dz-success-mark{position:absolute;display:none;left:30px;top:30px;width:54px;height:58px;left:50%;margin-left:-27px} | |
\ No newline at end of file |
@@ -0,0 +1 @@ | ||
1 | +@-webkit-keyframes passing-through{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%,70%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}100%{opacity:0;-webkit-transform:translateY(-40px);-moz-transform:translateY(-40px);-ms-transform:translateY(-40px);-o-transform:translateY(-40px);transform:translateY(-40px)}}@-moz-keyframes passing-through{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%,70%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}100%{opacity:0;-webkit-transform:translateY(-40px);-moz-transform:translateY(-40px);-ms-transform:translateY(-40px);-o-transform:translateY(-40px);transform:translateY(-40px)}}@keyframes passing-through{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%,70%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}100%{opacity:0;-webkit-transform:translateY(-40px);-moz-transform:translateY(-40px);-ms-transform:translateY(-40px);-o-transform:translateY(-40px);transform:translateY(-40px)}}@-webkit-keyframes slide-in{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}}@-moz-keyframes slide-in{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}}@keyframes slide-in{0%{opacity:0;-webkit-transform:translateY(40px);-moz-transform:translateY(40px);-ms-transform:translateY(40px);-o-transform:translateY(40px);transform:translateY(40px)}30%{opacity:1;-webkit-transform:translateY(0px);-moz-transform:translateY(0px);-ms-transform:translateY(0px);-o-transform:translateY(0px);transform:translateY(0px)}}@-webkit-keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}10%{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);-o-transform:scale(1.1);transform:scale(1.1)}20%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}@-moz-keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}10%{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);-o-transform:scale(1.1);transform:scale(1.1)}20%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}@keyframes pulse{0%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}10%{-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-ms-transform:scale(1.1);-o-transform:scale(1.1);transform:scale(1.1)}20%{-webkit-transform:scale(1);-moz-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1)}}.dropzone,.dropzone *{box-sizing:border-box}.dropzone{min-height:150px;border:2px solid rgba(0,0,0,.3);background:#fff;padding:20px 20px}.dropzone.dz-clickable{cursor:pointer}.dropzone.dz-clickable *{cursor:default}.dropzone.dz-clickable .dz-message,.dropzone.dz-clickable .dz-message *{cursor:pointer}.dropzone.dz-started .dz-message{display:none}.dropzone.dz-drag-hover{border-style:solid}.dropzone.dz-drag-hover .dz-message{opacity:.5}.dropzone .dz-message{text-align:center;margin:2em 0}.dropzone .dz-message .dz-button{background:none;color:inherit;border:none;padding:0;font:inherit;cursor:pointer;outline:inherit}.dropzone .dz-preview{position:relative;display:inline-block;vertical-align:top;margin:16px;min-height:100px}.dropzone .dz-preview:hover{z-index:1000}.dropzone .dz-preview:hover .dz-details{opacity:1}.dropzone .dz-preview.dz-file-preview .dz-image{border-radius:20px;background:#999;background:linear-gradient(to bottom, #eee, #ddd)}.dropzone .dz-preview.dz-file-preview .dz-details{opacity:1}.dropzone .dz-preview.dz-image-preview{background:#fff}.dropzone .dz-preview.dz-image-preview .dz-details{-webkit-transition:opacity 0.2s linear;-moz-transition:opacity 0.2s linear;-ms-transition:opacity 0.2s linear;-o-transition:opacity 0.2s linear;transition:opacity 0.2s linear}.dropzone .dz-preview .dz-remove{font-size:14px;text-align:center;display:block;cursor:pointer;border:none}.dropzone .dz-preview .dz-remove:hover{text-decoration:underline}.dropzone .dz-preview:hover .dz-details{opacity:1}.dropzone .dz-preview .dz-details{z-index:20;position:absolute;top:0;left:0;opacity:0;font-size:13px;min-width:100%;max-width:100%;padding:2em 1em;text-align:center;color:rgba(0,0,0,.9);line-height:150%}.dropzone .dz-preview .dz-details .dz-size{margin-bottom:1em;font-size:16px}.dropzone .dz-preview .dz-details .dz-filename{white-space:nowrap}.dropzone .dz-preview .dz-details .dz-filename:hover span{border:1px solid rgba(200,200,200,.8);background-color:rgba(255,255,255,.8)}.dropzone .dz-preview .dz-details .dz-filename:not(:hover){overflow:hidden;text-overflow:ellipsis}.dropzone .dz-preview .dz-details .dz-filename:not(:hover) span{border:1px solid transparent}.dropzone .dz-preview .dz-details .dz-filename span,.dropzone .dz-preview .dz-details .dz-size span{background-color:rgba(255,255,255,.4);padding:0 .4em;border-radius:3px}.dropzone .dz-preview:hover .dz-image img{-webkit-transform:scale(1.05, 1.05);-moz-transform:scale(1.05, 1.05);-ms-transform:scale(1.05, 1.05);-o-transform:scale(1.05, 1.05);transform:scale(1.05, 1.05);-webkit-filter:blur(8px);filter:blur(8px)}.dropzone .dz-preview .dz-image{border-radius:20px;overflow:hidden;width:120px;height:120px;position:relative;display:block;z-index:10}.dropzone .dz-preview .dz-image img{display:block}.dropzone .dz-preview.dz-success .dz-success-mark{-webkit-animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);-moz-animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);-ms-animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);-o-animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1);animation:passing-through 3s cubic-bezier(0.77, 0, 0.175, 1)}.dropzone .dz-preview.dz-error .dz-error-mark{opacity:1;-webkit-animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);-moz-animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);-ms-animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);-o-animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1);animation:slide-in 3s cubic-bezier(0.77, 0, 0.175, 1)}.dropzone .dz-preview .dz-success-mark,.dropzone .dz-preview .dz-error-mark{pointer-events:none;opacity:0;z-index:500;position:absolute;display:block;top:50%;left:50%;margin-left:-27px;margin-top:-27px}.dropzone .dz-preview .dz-success-mark svg,.dropzone .dz-preview .dz-error-mark svg{display:block;width:54px;height:54px}.dropzone .dz-preview.dz-processing .dz-progress{opacity:1;-webkit-transition:all 0.2s linear;-moz-transition:all 0.2s linear;-ms-transition:all 0.2s linear;-o-transition:all 0.2s linear;transition:all 0.2s linear}.dropzone .dz-preview.dz-complete .dz-progress{opacity:0;-webkit-transition:opacity 0.4s ease-in;-moz-transition:opacity 0.4s ease-in;-ms-transition:opacity 0.4s ease-in;-o-transition:opacity 0.4s ease-in;transition:opacity 0.4s ease-in}.dropzone .dz-preview:not(.dz-processing) .dz-progress{-webkit-animation:pulse 6s ease infinite;-moz-animation:pulse 6s ease infinite;-ms-animation:pulse 6s ease infinite;-o-animation:pulse 6s ease infinite;animation:pulse 6s ease infinite}.dropzone .dz-preview .dz-progress{opacity:1;z-index:1000;pointer-events:none;position:absolute;height:16px;left:50%;top:50%;margin-top:-8px;width:80px;margin-left:-40px;background:rgba(255,255,255,.9);-webkit-transform:scale(1);border-radius:8px;overflow:hidden}.dropzone .dz-preview .dz-progress .dz-upload{background:#333;background:linear-gradient(to bottom, #666, #444);position:absolute;top:0;left:0;bottom:0;width:0;-webkit-transition:width 300ms ease-in-out;-moz-transition:width 300ms ease-in-out;-ms-transition:width 300ms ease-in-out;-o-transition:width 300ms ease-in-out;transition:width 300ms ease-in-out}.dropzone .dz-preview.dz-error .dz-error-message{display:block}.dropzone .dz-preview.dz-error:hover .dz-error-message{opacity:1;pointer-events:auto}.dropzone .dz-preview .dz-error-message{pointer-events:none;z-index:1000;position:absolute;display:block;display:none;opacity:0;-webkit-transition:opacity 0.3s ease;-moz-transition:opacity 0.3s ease;-ms-transition:opacity 0.3s ease;-o-transition:opacity 0.3s ease;transition:opacity 0.3s ease;border-radius:8px;font-size:13px;top:130px;left:-10px;width:140px;background:#be2626;background:linear-gradient(to bottom, #be2626, #a92222);padding:.5em 1.2em;color:#fff}.dropzone .dz-preview .dz-error-message:after{content:"";position:absolute;top:-6px;left:64px;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #be2626} | |
\ No newline at end of file |
@@ -0,0 +1 @@ | ||
1 | +!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var n=t();for(var r in n)("object"==typeof exports?exports:e)[r]=n[r]}}(self,(function(){return function(){var e={3099:function(e){e.exports=function(e){if("function"!=typeof e)throw TypeError(String(e)+" is not a function");return e}},6077:function(e,t,n){var r=n(111);e.exports=function(e){if(!r(e)&&null!==e)throw TypeError("Can't set "+String(e)+" as a prototype");return e}},1223:function(e,t,n){var r=n(5112),i=n(30),o=n(3070),a=r("unscopables"),u=Array.prototype;null==u[a]&&o.f(u,a,{configurable:!0,value:i(null)}),e.exports=function(e){u[a][e]=!0}},1530:function(e,t,n){"use strict";var r=n(8710).charAt;e.exports=function(e,t,n){return t+(n?r(e,t).length:1)}},5787:function(e){e.exports=function(e,t,n){if(!(e instanceof t))throw TypeError("Incorrect "+(n?n+" ":"")+"invocation");return e}},9670:function(e,t,n){var r=n(111);e.exports=function(e){if(!r(e))throw TypeError(String(e)+" is not an object");return e}},4019:function(e){e.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},260:function(e,t,n){"use strict";var r,i=n(4019),o=n(9781),a=n(7854),u=n(111),s=n(6656),l=n(648),c=n(8880),f=n(1320),p=n(3070).f,h=n(9518),d=n(7674),v=n(5112),y=n(9711),g=a.Int8Array,m=g&&g.prototype,b=a.Uint8ClampedArray,x=b&&b.prototype,w=g&&h(g),E=m&&h(m),k=Object.prototype,A=k.isPrototypeOf,S=v("toStringTag"),F=y("TYPED_ARRAY_TAG"),T=i&&!!d&&"Opera"!==l(a.opera),C=!1,L={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},R={BigInt64Array:8,BigUint64Array:8},I=function(e){if(!u(e))return!1;var t=l(e);return s(L,t)||s(R,t)};for(r in L)a[r]||(T=!1);if((!T||"function"!=typeof w||w===Function.prototype)&&(w=function(){throw TypeError("Incorrect invocation")},T))for(r in L)a[r]&&d(a[r],w);if((!T||!E||E===k)&&(E=w.prototype,T))for(r in L)a[r]&&d(a[r].prototype,E);if(T&&h(x)!==E&&d(x,E),o&&!s(E,S))for(r in C=!0,p(E,S,{get:function(){return u(this)?this[F]:void 0}}),L)a[r]&&c(a[r],F,r);e.exports={NATIVE_ARRAY_BUFFER_VIEWS:T,TYPED_ARRAY_TAG:C&&F,aTypedArray:function(e){if(I(e))return e;throw TypeError("Target is not a typed array")},aTypedArrayConstructor:function(e){if(d){if(A.call(w,e))return e}else for(var t in L)if(s(L,r)){var n=a[t];if(n&&(e===n||A.call(n,e)))return e}throw TypeError("Target is not a typed array constructor")},exportTypedArrayMethod:function(e,t,n){if(o){if(n)for(var r in L){var i=a[r];i&&s(i.prototype,e)&&delete i.prototype[e]}E[e]&&!n||f(E,e,n?t:T&&m[e]||t)}},exportTypedArrayStaticMethod:function(e,t,n){var r,i;if(o){if(d){if(n)for(r in L)(i=a[r])&&s(i,e)&&delete i[e];if(w[e]&&!n)return;try{return f(w,e,n?t:T&&g[e]||t)}catch(e){}}for(r in L)!(i=a[r])||i[e]&&!n||f(i,e,t)}},isView:function(e){if(!u(e))return!1;var t=l(e);return"DataView"===t||s(L,t)||s(R,t)},isTypedArray:I,TypedArray:w,TypedArrayPrototype:E}},3331:function(e,t,n){"use strict";var r=n(7854),i=n(9781),o=n(4019),a=n(8880),u=n(2248),s=n(7293),l=n(5787),c=n(9958),f=n(7466),p=n(7067),h=n(1179),d=n(9518),v=n(7674),y=n(8006).f,g=n(3070).f,m=n(1285),b=n(8003),x=n(9909),w=x.get,E=x.set,k="ArrayBuffer",A="DataView",S="Wrong index",F=r.ArrayBuffer,T=F,C=r.DataView,L=C&&C.prototype,R=Object.prototype,I=r.RangeError,U=h.pack,O=h.unpack,_=function(e){return[255&e]},M=function(e){return[255&e,e>>8&255]},z=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},P=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},j=function(e){return U(e,23,4)},D=function(e){return U(e,52,8)},N=function(e,t){g(e.prototype,t,{get:function(){return w(this)[t]}})},B=function(e,t,n,r){var i=p(n),o=w(e);if(i+t>o.byteLength)throw I(S);var a=w(o.buffer).bytes,u=i+o.byteOffset,s=a.slice(u,u+t);return r?s:s.reverse()},q=function(e,t,n,r,i,o){var a=p(n),u=w(e);if(a+t>u.byteLength)throw I(S);for(var s=w(u.buffer).bytes,l=a+u.byteOffset,c=r(+i),f=0;f<t;f++)s[l+f]=c[o?f:t-f-1]};if(o){if(!s((function(){F(1)}))||!s((function(){new F(-1)}))||s((function(){return new F,new F(1.5),new F(NaN),F.name!=k}))){for(var W,H=(T=function(e){return l(this,T),new F(p(e))}).prototype=F.prototype,Y=y(F),G=0;Y.length>G;)(W=Y[G++])in T||a(T,W,F[W]);H.constructor=T}v&&d(L)!==R&&v(L,R);var Q=new C(new T(2)),$=L.setInt8;Q.setInt8(0,2147483648),Q.setInt8(1,2147483649),!Q.getInt8(0)&&Q.getInt8(1)||u(L,{setInt8:function(e,t){$.call(this,e,t<<24>>24)},setUint8:function(e,t){$.call(this,e,t<<24>>24)}},{unsafe:!0})}else T=function(e){l(this,T,k);var t=p(e);E(this,{bytes:m.call(new Array(t),0),byteLength:t}),i||(this.byteLength=t)},C=function(e,t,n){l(this,C,A),l(e,T,A);var r=w(e).byteLength,o=c(t);if(o<0||o>r)throw I("Wrong offset");if(o+(n=void 0===n?r-o:f(n))>r)throw I("Wrong length");E(this,{buffer:e,byteLength:n,byteOffset:o}),i||(this.buffer=e,this.byteLength=n,this.byteOffset=o)},i&&(N(T,"byteLength"),N(C,"buffer"),N(C,"byteLength"),N(C,"byteOffset")),u(C.prototype,{getInt8:function(e){return B(this,1,e)[0]<<24>>24},getUint8:function(e){return B(this,1,e)[0]},getInt16:function(e){var t=B(this,2,e,arguments.length>1?arguments[1]:void 0);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=B(this,2,e,arguments.length>1?arguments[1]:void 0);return t[1]<<8|t[0]},getInt32:function(e){return P(B(this,4,e,arguments.length>1?arguments[1]:void 0))},getUint32:function(e){return P(B(this,4,e,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(e){return O(B(this,4,e,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(e){return O(B(this,8,e,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(e,t){q(this,1,e,_,t)},setUint8:function(e,t){q(this,1,e,_,t)},setInt16:function(e,t){q(this,2,e,M,t,arguments.length>2?arguments[2]:void 0)},setUint16:function(e,t){q(this,2,e,M,t,arguments.length>2?arguments[2]:void 0)},setInt32:function(e,t){q(this,4,e,z,t,arguments.length>2?arguments[2]:void 0)},setUint32:function(e,t){q(this,4,e,z,t,arguments.length>2?arguments[2]:void 0)},setFloat32:function(e,t){q(this,4,e,j,t,arguments.length>2?arguments[2]:void 0)},setFloat64:function(e,t){q(this,8,e,D,t,arguments.length>2?arguments[2]:void 0)}});b(T,k),b(C,A),e.exports={ArrayBuffer:T,DataView:C}},1048:function(e,t,n){"use strict";var r=n(7908),i=n(1400),o=n(7466),a=Math.min;e.exports=[].copyWithin||function(e,t){var n=r(this),u=o(n.length),s=i(e,u),l=i(t,u),c=arguments.length>2?arguments[2]:void 0,f=a((void 0===c?u:i(c,u))-l,u-s),p=1;for(l<s&&s<l+f&&(p=-1,l+=f-1,s+=f-1);f-- >0;)l in n?n[s]=n[l]:delete n[s],s+=p,l+=p;return n}},1285:function(e,t,n){"use strict";var r=n(7908),i=n(1400),o=n(7466);e.exports=function(e){for(var t=r(this),n=o(t.length),a=arguments.length,u=i(a>1?arguments[1]:void 0,n),s=a>2?arguments[2]:void 0,l=void 0===s?n:i(s,n);l>u;)t[u++]=e;return t}},8533:function(e,t,n){"use strict";var r=n(2092).forEach,i=n(9341)("forEach");e.exports=i?[].forEach:function(e){return r(this,e,arguments.length>1?arguments[1]:void 0)}},8457:function(e,t,n){"use strict";var r=n(9974),i=n(7908),o=n(3411),a=n(7659),u=n(7466),s=n(6135),l=n(1246);e.exports=function(e){var t,n,c,f,p,h,d=i(e),v="function"==typeof this?this:Array,y=arguments.length,g=y>1?arguments[1]:void 0,m=void 0!==g,b=l(d),x=0;if(m&&(g=r(g,y>2?arguments[2]:void 0,2)),null==b||v==Array&&a(b))for(n=new v(t=u(d.length));t>x;x++)h=m?g(d[x],x):d[x],s(n,x,h);else for(p=(f=b.call(d)).next,n=new v;!(c=p.call(f)).done;x++)h=m?o(f,g,[c.value,x],!0):c.value,s(n,x,h);return n.length=x,n}},1318:function(e,t,n){var r=n(5656),i=n(7466),o=n(1400),a=function(e){return function(t,n,a){var u,s=r(t),l=i(s.length),c=o(a,l);if(e&&n!=n){for(;l>c;)if((u=s[c++])!=u)return!0}else for(;l>c;c++)if((e||c in s)&&s[c]===n)return e||c||0;return!e&&-1}};e.exports={includes:a(!0),indexOf:a(!1)}},2092:function(e,t,n){var r=n(9974),i=n(8361),o=n(7908),a=n(7466),u=n(5417),s=[].push,l=function(e){var t=1==e,n=2==e,l=3==e,c=4==e,f=6==e,p=7==e,h=5==e||f;return function(d,v,y,g){for(var m,b,x=o(d),w=i(x),E=r(v,y,3),k=a(w.length),A=0,S=g||u,F=t?S(d,k):n||p?S(d,0):void 0;k>A;A++)if((h||A in w)&&(b=E(m=w[A],A,x),e))if(t)F[A]=b;else if(b)switch(e){case 3:return!0;case 5:return m;case 6:return A;case 2:s.call(F,m)}else switch(e){case 4:return!1;case 7:s.call(F,m)}return f?-1:l||c?c:F}};e.exports={forEach:l(0),map:l(1),filter:l(2),some:l(3),every:l(4),find:l(5),findIndex:l(6),filterOut:l(7)}},6583:function(e,t,n){"use strict";var r=n(5656),i=n(9958),o=n(7466),a=n(9341),u=Math.min,s=[].lastIndexOf,l=!!s&&1/[1].lastIndexOf(1,-0)<0,c=a("lastIndexOf"),f=l||!c;e.exports=f?function(e){if(l)return s.apply(this,arguments)||0;var t=r(this),n=o(t.length),a=n-1;for(arguments.length>1&&(a=u(a,i(arguments[1]))),a<0&&(a=n+a);a>=0;a--)if(a in t&&t[a]===e)return a||0;return-1}:s},1194:function(e,t,n){var r=n(7293),i=n(5112),o=n(7392),a=i("species");e.exports=function(e){return o>=51||!r((function(){var t=[];return(t.constructor={})[a]=function(){return{foo:1}},1!==t[e](Boolean).foo}))}},9341:function(e,t,n){"use strict";var r=n(7293);e.exports=function(e,t){var n=[][e];return!!n&&r((function(){n.call(null,t||function(){throw 1},1)}))}},3671:function(e,t,n){var r=n(3099),i=n(7908),o=n(8361),a=n(7466),u=function(e){return function(t,n,u,s){r(n);var l=i(t),c=o(l),f=a(l.length),p=e?f-1:0,h=e?-1:1;if(u<2)for(;;){if(p in c){s=c[p],p+=h;break}if(p+=h,e?p<0:f<=p)throw TypeError("Reduce of empty array with no initial value")}for(;e?p>=0:f>p;p+=h)p in c&&(s=n(s,c[p],p,l));return s}};e.exports={left:u(!1),right:u(!0)}},5417:function(e,t,n){var r=n(111),i=n(3157),o=n(5112)("species");e.exports=function(e,t){var n;return i(e)&&("function"!=typeof(n=e.constructor)||n!==Array&&!i(n.prototype)?r(n)&&null===(n=n[o])&&(n=void 0):n=void 0),new(void 0===n?Array:n)(0===t?0:t)}},3411:function(e,t,n){var r=n(9670),i=n(9212);e.exports=function(e,t,n,o){try{return o?t(r(n)[0],n[1]):t(n)}catch(t){throw i(e),t}}},7072:function(e,t,n){var r=n(5112)("iterator"),i=!1;try{var o=0,a={next:function(){return{done:!!o++}},return:function(){i=!0}};a[r]=function(){return this},Array.from(a,(function(){throw 2}))}catch(e){}e.exports=function(e,t){if(!t&&!i)return!1;var n=!1;try{var o={};o[r]=function(){return{next:function(){return{done:n=!0}}}},e(o)}catch(e){}return n}},4326:function(e){var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},648:function(e,t,n){var r=n(1694),i=n(4326),o=n(5112)("toStringTag"),a="Arguments"==i(function(){return arguments}());e.exports=r?i:function(e){var t,n,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),o))?n:a?i(t):"Object"==(r=i(t))&&"function"==typeof t.callee?"Arguments":r}},9920:function(e,t,n){var r=n(6656),i=n(3887),o=n(1236),a=n(3070);e.exports=function(e,t){for(var n=i(t),u=a.f,s=o.f,l=0;l<n.length;l++){var c=n[l];r(e,c)||u(e,c,s(t,c))}}},8544:function(e,t,n){var r=n(7293);e.exports=!r((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},4994:function(e,t,n){"use strict";var r=n(3383).IteratorPrototype,i=n(30),o=n(9114),a=n(8003),u=n(7497),s=function(){return this};e.exports=function(e,t,n){var l=t+" Iterator";return e.prototype=i(r,{next:o(1,n)}),a(e,l,!1,!0),u[l]=s,e}},8880:function(e,t,n){var r=n(9781),i=n(3070),o=n(9114);e.exports=r?function(e,t,n){return i.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},9114:function(e){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},6135:function(e,t,n){"use strict";var r=n(7593),i=n(3070),o=n(9114);e.exports=function(e,t,n){var a=r(t);a in e?i.f(e,a,o(0,n)):e[a]=n}},654:function(e,t,n){"use strict";var r=n(2109),i=n(4994),o=n(9518),a=n(7674),u=n(8003),s=n(8880),l=n(1320),c=n(5112),f=n(1913),p=n(7497),h=n(3383),d=h.IteratorPrototype,v=h.BUGGY_SAFARI_ITERATORS,y=c("iterator"),g="keys",m="values",b="entries",x=function(){return this};e.exports=function(e,t,n,c,h,w,E){i(n,t,c);var k,A,S,F=function(e){if(e===h&&I)return I;if(!v&&e in L)return L[e];switch(e){case g:case m:case b:return function(){return new n(this,e)}}return function(){return new n(this)}},T=t+" Iterator",C=!1,L=e.prototype,R=L[y]||L["@@iterator"]||h&&L[h],I=!v&&R||F(h),U="Array"==t&&L.entries||R;if(U&&(k=o(U.call(new e)),d!==Object.prototype&&k.next&&(f||o(k)===d||(a?a(k,d):"function"!=typeof k[y]&&s(k,y,x)),u(k,T,!0,!0),f&&(p[T]=x))),h==m&&R&&R.name!==m&&(C=!0,I=function(){return R.call(this)}),f&&!E||L[y]===I||s(L,y,I),p[t]=I,h)if(A={values:F(m),keys:w?I:F(g),entries:F(b)},E)for(S in A)(v||C||!(S in L))&&l(L,S,A[S]);else r({target:t,proto:!0,forced:v||C},A);return A}},9781:function(e,t,n){var r=n(7293);e.exports=!r((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},317:function(e,t,n){var r=n(7854),i=n(111),o=r.document,a=i(o)&&i(o.createElement);e.exports=function(e){return a?o.createElement(e):{}}},8324:function(e){e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},8113:function(e,t,n){var r=n(5005);e.exports=r("navigator","userAgent")||""},7392:function(e,t,n){var r,i,o=n(7854),a=n(8113),u=o.process,s=u&&u.versions,l=s&&s.v8;l?i=(r=l.split("."))[0]+r[1]:a&&(!(r=a.match(/Edge\/(\d+)/))||r[1]>=74)&&(r=a.match(/Chrome\/(\d+)/))&&(i=r[1]),e.exports=i&&+i},748:function(e){e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},2109:function(e,t,n){var r=n(7854),i=n(1236).f,o=n(8880),a=n(1320),u=n(3505),s=n(9920),l=n(4705);e.exports=function(e,t){var n,c,f,p,h,d=e.target,v=e.global,y=e.stat;if(n=v?r:y?r[d]||u(d,{}):(r[d]||{}).prototype)for(c in t){if(p=t[c],f=e.noTargetGet?(h=i(n,c))&&h.value:n[c],!l(v?c:d+(y?".":"#")+c,e.forced)&&void 0!==f){if(typeof p==typeof f)continue;s(p,f)}(e.sham||f&&f.sham)&&o(p,"sham",!0),a(n,c,p,e)}}},7293:function(e){e.exports=function(e){try{return!!e()}catch(e){return!0}}},7007:function(e,t,n){"use strict";n(4916);var r=n(1320),i=n(7293),o=n(5112),a=n(2261),u=n(8880),s=o("species"),l=!i((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$<a>")})),c="$0"==="a".replace(/./,"$0"),f=o("replace"),p=!!/./[f]&&""===/./[f]("a","$0"),h=!i((function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n="ab".split(e);return 2!==n.length||"a"!==n[0]||"b"!==n[1]}));e.exports=function(e,t,n,f){var d=o(e),v=!i((function(){var t={};return t[d]=function(){return 7},7!=""[e](t)})),y=v&&!i((function(){var t=!1,n=/a/;return"split"===e&&((n={}).constructor={},n.constructor[s]=function(){return n},n.flags="",n[d]=/./[d]),n.exec=function(){return t=!0,null},n[d](""),!t}));if(!v||!y||"replace"===e&&(!l||!c||p)||"split"===e&&!h){var g=/./[d],m=n(d,""[e],(function(e,t,n,r,i){return t.exec===a?v&&!i?{done:!0,value:g.call(t,n,r)}:{done:!0,value:e.call(n,t,r)}:{done:!1}}),{REPLACE_KEEPS_$0:c,REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE:p}),b=m[0],x=m[1];r(String.prototype,e,b),r(RegExp.prototype,d,2==t?function(e,t){return x.call(e,this,t)}:function(e){return x.call(e,this)})}f&&u(RegExp.prototype[d],"sham",!0)}},9974:function(e,t,n){var r=n(3099);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 0:return function(){return e.call(t)};case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,i){return e.call(t,n,r,i)}}return function(){return e.apply(t,arguments)}}},5005:function(e,t,n){var r=n(857),i=n(7854),o=function(e){return"function"==typeof e?e:void 0};e.exports=function(e,t){return arguments.length<2?o(r[e])||o(i[e]):r[e]&&r[e][t]||i[e]&&i[e][t]}},1246:function(e,t,n){var r=n(648),i=n(7497),o=n(5112)("iterator");e.exports=function(e){if(null!=e)return e[o]||e["@@iterator"]||i[r(e)]}},8554:function(e,t,n){var r=n(9670),i=n(1246);e.exports=function(e){var t=i(e);if("function"!=typeof t)throw TypeError(String(e)+" is not iterable");return r(t.call(e))}},647:function(e,t,n){var r=n(7908),i=Math.floor,o="".replace,a=/\$([$&'`]|\d\d?|<[^>]*>)/g,u=/\$([$&'`]|\d\d?)/g;e.exports=function(e,t,n,s,l,c){var f=n+e.length,p=s.length,h=u;return void 0!==l&&(l=r(l),h=a),o.call(c,h,(function(r,o){var a;switch(o.charAt(0)){case"$":return"$";case"&":return e;case"`":return t.slice(0,n);case"'":return t.slice(f);case"<":a=l[o.slice(1,-1)];break;default:var u=+o;if(0===u)return r;if(u>p){var c=i(u/10);return 0===c?r:c<=p?void 0===s[c-1]?o.charAt(1):s[c-1]+o.charAt(1):r}a=s[u-1]}return void 0===a?"":a}))}},7854:function(e,t,n){var r=function(e){return e&&e.Math==Math&&e};e.exports=r("object"==typeof globalThis&&globalThis)||r("object"==typeof window&&window)||r("object"==typeof self&&self)||r("object"==typeof n.g&&n.g)||function(){return this}()||Function("return this")()},6656:function(e){var t={}.hasOwnProperty;e.exports=function(e,n){return t.call(e,n)}},3501:function(e){e.exports={}},490:function(e,t,n){var r=n(5005);e.exports=r("document","documentElement")},4664:function(e,t,n){var r=n(9781),i=n(7293),o=n(317);e.exports=!r&&!i((function(){return 7!=Object.defineProperty(o("div"),"a",{get:function(){return 7}}).a}))},1179:function(e){var t=Math.abs,n=Math.pow,r=Math.floor,i=Math.log,o=Math.LN2;e.exports={pack:function(e,a,u){var s,l,c,f=new Array(u),p=8*u-a-1,h=(1<<p)-1,d=h>>1,v=23===a?n(2,-24)-n(2,-77):0,y=e<0||0===e&&1/e<0?1:0,g=0;for((e=t(e))!=e||e===1/0?(l=e!=e?1:0,s=h):(s=r(i(e)/o),e*(c=n(2,-s))<1&&(s--,c*=2),(e+=s+d>=1?v/c:v*n(2,1-d))*c>=2&&(s++,c/=2),s+d>=h?(l=0,s=h):s+d>=1?(l=(e*c-1)*n(2,a),s+=d):(l=e*n(2,d-1)*n(2,a),s=0));a>=8;f[g++]=255&l,l/=256,a-=8);for(s=s<<a|l,p+=a;p>0;f[g++]=255&s,s/=256,p-=8);return f[--g]|=128*y,f},unpack:function(e,t){var r,i=e.length,o=8*i-t-1,a=(1<<o)-1,u=a>>1,s=o-7,l=i-1,c=e[l--],f=127&c;for(c>>=7;s>0;f=256*f+e[l],l--,s-=8);for(r=f&(1<<-s)-1,f>>=-s,s+=t;s>0;r=256*r+e[l],l--,s-=8);if(0===f)f=1-u;else{if(f===a)return r?NaN:c?-1/0:1/0;r+=n(2,t),f-=u}return(c?-1:1)*r*n(2,f-t)}}},8361:function(e,t,n){var r=n(7293),i=n(4326),o="".split;e.exports=r((function(){return!Object("z").propertyIsEnumerable(0)}))?function(e){return"String"==i(e)?o.call(e,""):Object(e)}:Object},9587:function(e,t,n){var r=n(111),i=n(7674);e.exports=function(e,t,n){var o,a;return i&&"function"==typeof(o=t.constructor)&&o!==n&&r(a=o.prototype)&&a!==n.prototype&&i(e,a),e}},2788:function(e,t,n){var r=n(5465),i=Function.toString;"function"!=typeof r.inspectSource&&(r.inspectSource=function(e){return i.call(e)}),e.exports=r.inspectSource},9909:function(e,t,n){var r,i,o,a=n(8536),u=n(7854),s=n(111),l=n(8880),c=n(6656),f=n(5465),p=n(6200),h=n(3501),d=u.WeakMap;if(a){var v=f.state||(f.state=new d),y=v.get,g=v.has,m=v.set;r=function(e,t){return t.facade=e,m.call(v,e,t),t},i=function(e){return y.call(v,e)||{}},o=function(e){return g.call(v,e)}}else{var b=p("state");h[b]=!0,r=function(e,t){return t.facade=e,l(e,b,t),t},i=function(e){return c(e,b)?e[b]:{}},o=function(e){return c(e,b)}}e.exports={set:r,get:i,has:o,enforce:function(e){return o(e)?i(e):r(e,{})},getterFor:function(e){return function(t){var n;if(!s(t)||(n=i(t)).type!==e)throw TypeError("Incompatible receiver, "+e+" required");return n}}}},7659:function(e,t,n){var r=n(5112),i=n(7497),o=r("iterator"),a=Array.prototype;e.exports=function(e){return void 0!==e&&(i.Array===e||a[o]===e)}},3157:function(e,t,n){var r=n(4326);e.exports=Array.isArray||function(e){return"Array"==r(e)}},4705:function(e,t,n){var r=n(7293),i=/#|\.prototype\./,o=function(e,t){var n=u[a(e)];return n==l||n!=s&&("function"==typeof t?r(t):!!t)},a=o.normalize=function(e){return String(e).replace(i,".").toLowerCase()},u=o.data={},s=o.NATIVE="N",l=o.POLYFILL="P";e.exports=o},111:function(e){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},1913:function(e){e.exports=!1},7850:function(e,t,n){var r=n(111),i=n(4326),o=n(5112)("match");e.exports=function(e){var t;return r(e)&&(void 0!==(t=e[o])?!!t:"RegExp"==i(e))}},9212:function(e,t,n){var r=n(9670);e.exports=function(e){var t=e.return;if(void 0!==t)return r(t.call(e)).value}},3383:function(e,t,n){"use strict";var r,i,o,a=n(7293),u=n(9518),s=n(8880),l=n(6656),c=n(5112),f=n(1913),p=c("iterator"),h=!1;[].keys&&("next"in(o=[].keys())?(i=u(u(o)))!==Object.prototype&&(r=i):h=!0);var d=null==r||a((function(){var e={};return r[p].call(e)!==e}));d&&(r={}),f&&!d||l(r,p)||s(r,p,(function(){return this})),e.exports={IteratorPrototype:r,BUGGY_SAFARI_ITERATORS:h}},7497:function(e){e.exports={}},133:function(e,t,n){var r=n(7293);e.exports=!!Object.getOwnPropertySymbols&&!r((function(){return!String(Symbol())}))},590:function(e,t,n){var r=n(7293),i=n(5112),o=n(1913),a=i("iterator");e.exports=!r((function(){var e=new URL("b?a=1&b=2&c=3","http://a"),t=e.searchParams,n="";return e.pathname="c%20d",t.forEach((function(e,r){t.delete("b"),n+=r+e})),o&&!e.toJSON||!t.sort||"http://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[a]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==n||"x"!==new URL("http://x",void 0).host}))},8536:function(e,t,n){var r=n(7854),i=n(2788),o=r.WeakMap;e.exports="function"==typeof o&&/native code/.test(i(o))},1574:function(e,t,n){"use strict";var r=n(9781),i=n(7293),o=n(1956),a=n(5181),u=n(5296),s=n(7908),l=n(8361),c=Object.assign,f=Object.defineProperty;e.exports=!c||i((function(){if(r&&1!==c({b:1},c(f({},"a",{enumerable:!0,get:function(){f(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},n=Symbol(),i="abcdefghijklmnopqrst";return e[n]=7,i.split("").forEach((function(e){t[e]=e})),7!=c({},e)[n]||o(c({},t)).join("")!=i}))?function(e,t){for(var n=s(e),i=arguments.length,c=1,f=a.f,p=u.f;i>c;)for(var h,d=l(arguments[c++]),v=f?o(d).concat(f(d)):o(d),y=v.length,g=0;y>g;)h=v[g++],r&&!p.call(d,h)||(n[h]=d[h]);return n}:c},30:function(e,t,n){var r,i=n(9670),o=n(6048),a=n(748),u=n(3501),s=n(490),l=n(317),c=n(6200)("IE_PROTO"),f=function(){},p=function(e){return"<script>"+e+"<\/script>"},h=function(){try{r=document.domain&&new ActiveXObject("htmlfile")}catch(e){}var e,t;h=r?function(e){e.write(p("")),e.close();var t=e.parentWindow.Object;return e=null,t}(r):((t=l("iframe")).style.display="none",s.appendChild(t),t.src=String("javascript:"),(e=t.contentWindow.document).open(),e.write(p("document.F=Object")),e.close(),e.F);for(var n=a.length;n--;)delete h.prototype[a[n]];return h()};u[c]=!0,e.exports=Object.create||function(e,t){var n;return null!==e?(f.prototype=i(e),n=new f,f.prototype=null,n[c]=e):n=h(),void 0===t?n:o(n,t)}},6048:function(e,t,n){var r=n(9781),i=n(3070),o=n(9670),a=n(1956);e.exports=r?Object.defineProperties:function(e,t){o(e);for(var n,r=a(t),u=r.length,s=0;u>s;)i.f(e,n=r[s++],t[n]);return e}},3070:function(e,t,n){var r=n(9781),i=n(4664),o=n(9670),a=n(7593),u=Object.defineProperty;t.f=r?u:function(e,t,n){if(o(e),t=a(t,!0),o(n),i)try{return u(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported");return"value"in n&&(e[t]=n.value),e}},1236:function(e,t,n){var r=n(9781),i=n(5296),o=n(9114),a=n(5656),u=n(7593),s=n(6656),l=n(4664),c=Object.getOwnPropertyDescriptor;t.f=r?c:function(e,t){if(e=a(e),t=u(t,!0),l)try{return c(e,t)}catch(e){}if(s(e,t))return o(!i.f.call(e,t),e[t])}},8006:function(e,t,n){var r=n(6324),i=n(748).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,i)}},5181:function(e,t){t.f=Object.getOwnPropertySymbols},9518:function(e,t,n){var r=n(6656),i=n(7908),o=n(6200),a=n(8544),u=o("IE_PROTO"),s=Object.prototype;e.exports=a?Object.getPrototypeOf:function(e){return e=i(e),r(e,u)?e[u]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?s:null}},6324:function(e,t,n){var r=n(6656),i=n(5656),o=n(1318).indexOf,a=n(3501);e.exports=function(e,t){var n,u=i(e),s=0,l=[];for(n in u)!r(a,n)&&r(u,n)&&l.push(n);for(;t.length>s;)r(u,n=t[s++])&&(~o(l,n)||l.push(n));return l}},1956:function(e,t,n){var r=n(6324),i=n(748);e.exports=Object.keys||function(e){return r(e,i)}},5296:function(e,t){"use strict";var n={}.propertyIsEnumerable,r=Object.getOwnPropertyDescriptor,i=r&&!n.call({1:2},1);t.f=i?function(e){var t=r(this,e);return!!t&&t.enumerable}:n},7674:function(e,t,n){var r=n(9670),i=n(6077);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,n={};try{(e=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(n,[]),t=n instanceof Array}catch(e){}return function(n,o){return r(n),i(o),t?e.call(n,o):n.__proto__=o,n}}():void 0)},288:function(e,t,n){"use strict";var r=n(1694),i=n(648);e.exports=r?{}.toString:function(){return"[object "+i(this)+"]"}},3887:function(e,t,n){var r=n(5005),i=n(8006),o=n(5181),a=n(9670);e.exports=r("Reflect","ownKeys")||function(e){var t=i.f(a(e)),n=o.f;return n?t.concat(n(e)):t}},857:function(e,t,n){var r=n(7854);e.exports=r},2248:function(e,t,n){var r=n(1320);e.exports=function(e,t,n){for(var i in t)r(e,i,t[i],n);return e}},1320:function(e,t,n){var r=n(7854),i=n(8880),o=n(6656),a=n(3505),u=n(2788),s=n(9909),l=s.get,c=s.enforce,f=String(String).split("String");(e.exports=function(e,t,n,u){var s,l=!!u&&!!u.unsafe,p=!!u&&!!u.enumerable,h=!!u&&!!u.noTargetGet;"function"==typeof n&&("string"!=typeof t||o(n,"name")||i(n,"name",t),(s=c(n)).source||(s.source=f.join("string"==typeof t?t:""))),e!==r?(l?!h&&e[t]&&(p=!0):delete e[t],p?e[t]=n:i(e,t,n)):p?e[t]=n:a(t,n)})(Function.prototype,"toString",(function(){return"function"==typeof this&&l(this).source||u(this)}))},7651:function(e,t,n){var r=n(4326),i=n(2261);e.exports=function(e,t){var n=e.exec;if("function"==typeof n){var o=n.call(e,t);if("object"!=typeof o)throw TypeError("RegExp exec method returned something other than an Object or null");return o}if("RegExp"!==r(e))throw TypeError("RegExp#exec called on incompatible receiver");return i.call(e,t)}},2261:function(e,t,n){"use strict";var r,i,o=n(7066),a=n(2999),u=RegExp.prototype.exec,s=String.prototype.replace,l=u,c=(r=/a/,i=/b*/g,u.call(r,"a"),u.call(i,"a"),0!==r.lastIndex||0!==i.lastIndex),f=a.UNSUPPORTED_Y||a.BROKEN_CARET,p=void 0!==/()??/.exec("")[1];(c||p||f)&&(l=function(e){var t,n,r,i,a=this,l=f&&a.sticky,h=o.call(a),d=a.source,v=0,y=e;return l&&(-1===(h=h.replace("y","")).indexOf("g")&&(h+="g"),y=String(e).slice(a.lastIndex),a.lastIndex>0&&(!a.multiline||a.multiline&&"\n"!==e[a.lastIndex-1])&&(d="(?: "+d+")",y=" "+y,v++),n=new RegExp("^(?:"+d+")",h)),p&&(n=new RegExp("^"+d+"$(?!\\s)",h)),c&&(t=a.lastIndex),r=u.call(l?n:a,y),l?r?(r.input=r.input.slice(v),r[0]=r[0].slice(v),r.index=a.lastIndex,a.lastIndex+=r[0].length):a.lastIndex=0:c&&r&&(a.lastIndex=a.global?r.index+r[0].length:t),p&&r&&r.length>1&&s.call(r[0],n,(function(){for(i=1;i<arguments.length-2;i++)void 0===arguments[i]&&(r[i]=void 0)})),r}),e.exports=l},7066:function(e,t,n){"use strict";var r=n(9670);e.exports=function(){var e=r(this),t="";return e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.sticky&&(t+="y"),t}},2999:function(e,t,n){"use strict";var r=n(7293);function i(e,t){return RegExp(e,t)}t.UNSUPPORTED_Y=r((function(){var e=i("a","y");return e.lastIndex=2,null!=e.exec("abcd")})),t.BROKEN_CARET=r((function(){var e=i("^r","gy");return e.lastIndex=2,null!=e.exec("str")}))},4488:function(e){e.exports=function(e){if(null==e)throw TypeError("Can't call method on "+e);return e}},3505:function(e,t,n){var r=n(7854),i=n(8880);e.exports=function(e,t){try{i(r,e,t)}catch(n){r[e]=t}return t}},6340:function(e,t,n){"use strict";var r=n(5005),i=n(3070),o=n(5112),a=n(9781),u=o("species");e.exports=function(e){var t=r(e),n=i.f;a&&t&&!t[u]&&n(t,u,{configurable:!0,get:function(){return this}})}},8003:function(e,t,n){var r=n(3070).f,i=n(6656),o=n(5112)("toStringTag");e.exports=function(e,t,n){e&&!i(e=n?e:e.prototype,o)&&r(e,o,{configurable:!0,value:t})}},6200:function(e,t,n){var r=n(2309),i=n(9711),o=r("keys");e.exports=function(e){return o[e]||(o[e]=i(e))}},5465:function(e,t,n){var r=n(7854),i=n(3505),o="__core-js_shared__",a=r[o]||i(o,{});e.exports=a},2309:function(e,t,n){var r=n(1913),i=n(5465);(e.exports=function(e,t){return i[e]||(i[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.9.0",mode:r?"pure":"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"})},6707:function(e,t,n){var r=n(9670),i=n(3099),o=n(5112)("species");e.exports=function(e,t){var n,a=r(e).constructor;return void 0===a||null==(n=r(a)[o])?t:i(n)}},8710:function(e,t,n){var r=n(9958),i=n(4488),o=function(e){return function(t,n){var o,a,u=String(i(t)),s=r(n),l=u.length;return s<0||s>=l?e?"":void 0:(o=u.charCodeAt(s))<55296||o>56319||s+1===l||(a=u.charCodeAt(s+1))<56320||a>57343?e?u.charAt(s):o:e?u.slice(s,s+2):a-56320+(o-55296<<10)+65536}};e.exports={codeAt:o(!1),charAt:o(!0)}},3197:function(e){"use strict";var t=2147483647,n=/[^\0-\u007E]/,r=/[.\u3002\uFF0E\uFF61]/g,i="Overflow: input needs wider integers to process",o=Math.floor,a=String.fromCharCode,u=function(e){return e+22+75*(e<26)},s=function(e,t,n){var r=0;for(e=n?o(e/700):e>>1,e+=o(e/t);e>455;r+=36)e=o(e/35);return o(r+36*e/(e+38))},l=function(e){var n,r,l=[],c=(e=function(e){for(var t=[],n=0,r=e.length;n<r;){var i=e.charCodeAt(n++);if(i>=55296&&i<=56319&&n<r){var o=e.charCodeAt(n++);56320==(64512&o)?t.push(((1023&i)<<10)+(1023&o)+65536):(t.push(i),n--)}else t.push(i)}return t}(e)).length,f=128,p=0,h=72;for(n=0;n<e.length;n++)(r=e[n])<128&&l.push(a(r));var d=l.length,v=d;for(d&&l.push("-");v<c;){var y=t;for(n=0;n<e.length;n++)(r=e[n])>=f&&r<y&&(y=r);var g=v+1;if(y-f>o((t-p)/g))throw RangeError(i);for(p+=(y-f)*g,f=y,n=0;n<e.length;n++){if((r=e[n])<f&&++p>t)throw RangeError(i);if(r==f){for(var m=p,b=36;;b+=36){var x=b<=h?1:b>=h+26?26:b-h;if(m<x)break;var w=m-x,E=36-x;l.push(a(u(x+w%E))),m=o(w/E)}l.push(a(u(m))),h=s(p,g,v==d),p=0,++v}}++p,++f}return l.join("")};e.exports=function(e){var t,i,o=[],a=e.toLowerCase().replace(r,".").split(".");for(t=0;t<a.length;t++)i=a[t],o.push(n.test(i)?"xn--"+l(i):i);return o.join(".")}},6091:function(e,t,n){var r=n(7293),i=n(1361);e.exports=function(e){return r((function(){return!!i[e]()||" "!=" "[e]()||i[e].name!==e}))}},3111:function(e,t,n){var r=n(4488),i="["+n(1361)+"]",o=RegExp("^"+i+i+"*"),a=RegExp(i+i+"*$"),u=function(e){return function(t){var n=String(r(t));return 1&e&&(n=n.replace(o,"")),2&e&&(n=n.replace(a,"")),n}};e.exports={start:u(1),end:u(2),trim:u(3)}},1400:function(e,t,n){var r=n(9958),i=Math.max,o=Math.min;e.exports=function(e,t){var n=r(e);return n<0?i(n+t,0):o(n,t)}},7067:function(e,t,n){var r=n(9958),i=n(7466);e.exports=function(e){if(void 0===e)return 0;var t=r(e),n=i(t);if(t!==n)throw RangeError("Wrong length or index");return n}},5656:function(e,t,n){var r=n(8361),i=n(4488);e.exports=function(e){return r(i(e))}},9958:function(e){var t=Math.ceil,n=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?n:t)(e)}},7466:function(e,t,n){var r=n(9958),i=Math.min;e.exports=function(e){return e>0?i(r(e),9007199254740991):0}},7908:function(e,t,n){var r=n(4488);e.exports=function(e){return Object(r(e))}},4590:function(e,t,n){var r=n(3002);e.exports=function(e,t){var n=r(e);if(n%t)throw RangeError("Wrong offset");return n}},3002:function(e,t,n){var r=n(9958);e.exports=function(e){var t=r(e);if(t<0)throw RangeError("The argument can't be less than 0");return t}},7593:function(e,t,n){var r=n(111);e.exports=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")}},1694:function(e,t,n){var r={};r[n(5112)("toStringTag")]="z",e.exports="[object z]"===String(r)},9843:function(e,t,n){"use strict";var r=n(2109),i=n(7854),o=n(9781),a=n(3832),u=n(260),s=n(3331),l=n(5787),c=n(9114),f=n(8880),p=n(7466),h=n(7067),d=n(4590),v=n(7593),y=n(6656),g=n(648),m=n(111),b=n(30),x=n(7674),w=n(8006).f,E=n(7321),k=n(2092).forEach,A=n(6340),S=n(3070),F=n(1236),T=n(9909),C=n(9587),L=T.get,R=T.set,I=S.f,U=F.f,O=Math.round,_=i.RangeError,M=s.ArrayBuffer,z=s.DataView,P=u.NATIVE_ARRAY_BUFFER_VIEWS,j=u.TYPED_ARRAY_TAG,D=u.TypedArray,N=u.TypedArrayPrototype,B=u.aTypedArrayConstructor,q=u.isTypedArray,W="BYTES_PER_ELEMENT",H="Wrong length",Y=function(e,t){for(var n=0,r=t.length,i=new(B(e))(r);r>n;)i[n]=t[n++];return i},G=function(e,t){I(e,t,{get:function(){return L(this)[t]}})},Q=function(e){var t;return e instanceof M||"ArrayBuffer"==(t=g(e))||"SharedArrayBuffer"==t},$=function(e,t){return q(e)&&"symbol"!=typeof t&&t in e&&String(+t)==String(t)},V=function(e,t){return $(e,t=v(t,!0))?c(2,e[t]):U(e,t)},X=function(e,t,n){return!($(e,t=v(t,!0))&&m(n)&&y(n,"value"))||y(n,"get")||y(n,"set")||n.configurable||y(n,"writable")&&!n.writable||y(n,"enumerable")&&!n.enumerable?I(e,t,n):(e[t]=n.value,e)};o?(P||(F.f=V,S.f=X,G(N,"buffer"),G(N,"byteOffset"),G(N,"byteLength"),G(N,"length")),r({target:"Object",stat:!0,forced:!P},{getOwnPropertyDescriptor:V,defineProperty:X}),e.exports=function(e,t,n){var o=e.match(/\d+$/)[0]/8,u=e+(n?"Clamped":"")+"Array",s="get"+e,c="set"+e,v=i[u],y=v,g=y&&y.prototype,S={},F=function(e,t){I(e,t,{get:function(){return function(e,t){var n=L(e);return n.view[s](t*o+n.byteOffset,!0)}(this,t)},set:function(e){return function(e,t,r){var i=L(e);n&&(r=(r=O(r))<0?0:r>255?255:255&r),i.view[c](t*o+i.byteOffset,r,!0)}(this,t,e)},enumerable:!0})};P?a&&(y=t((function(e,t,n,r){return l(e,y,u),C(m(t)?Q(t)?void 0!==r?new v(t,d(n,o),r):void 0!==n?new v(t,d(n,o)):new v(t):q(t)?Y(y,t):E.call(y,t):new v(h(t)),e,y)})),x&&x(y,D),k(w(v),(function(e){e in y||f(y,e,v[e])})),y.prototype=g):(y=t((function(e,t,n,r){l(e,y,u);var i,a,s,c=0,f=0;if(m(t)){if(!Q(t))return q(t)?Y(y,t):E.call(y,t);i=t,f=d(n,o);var v=t.byteLength;if(void 0===r){if(v%o)throw _(H);if((a=v-f)<0)throw _(H)}else if((a=p(r)*o)+f>v)throw _(H);s=a/o}else s=h(t),i=new M(a=s*o);for(R(e,{buffer:i,byteOffset:f,byteLength:a,length:s,view:new z(i)});c<s;)F(e,c++)})),x&&x(y,D),g=y.prototype=b(N)),g.constructor!==y&&f(g,"constructor",y),j&&f(g,j,u),S[u]=y,r({global:!0,forced:y!=v,sham:!P},S),W in y||f(y,W,o),W in g||f(g,W,o),A(u)}):e.exports=function(){}},3832:function(e,t,n){var r=n(7854),i=n(7293),o=n(7072),a=n(260).NATIVE_ARRAY_BUFFER_VIEWS,u=r.ArrayBuffer,s=r.Int8Array;e.exports=!a||!i((function(){s(1)}))||!i((function(){new s(-1)}))||!o((function(e){new s,new s(null),new s(1.5),new s(e)}),!0)||i((function(){return 1!==new s(new u(2),1,void 0).length}))},3074:function(e,t,n){var r=n(260).aTypedArrayConstructor,i=n(6707);e.exports=function(e,t){for(var n=i(e,e.constructor),o=0,a=t.length,u=new(r(n))(a);a>o;)u[o]=t[o++];return u}},7321:function(e,t,n){var r=n(7908),i=n(7466),o=n(1246),a=n(7659),u=n(9974),s=n(260).aTypedArrayConstructor;e.exports=function(e){var t,n,l,c,f,p,h=r(e),d=arguments.length,v=d>1?arguments[1]:void 0,y=void 0!==v,g=o(h);if(null!=g&&!a(g))for(p=(f=g.call(h)).next,h=[];!(c=p.call(f)).done;)h.push(c.value);for(y&&d>2&&(v=u(v,arguments[2],2)),n=i(h.length),l=new(s(this))(n),t=0;n>t;t++)l[t]=y?v(h[t],t):h[t];return l}},9711:function(e){var t=0,n=Math.random();e.exports=function(e){return"Symbol("+String(void 0===e?"":e)+")_"+(++t+n).toString(36)}},3307:function(e,t,n){var r=n(133);e.exports=r&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},5112:function(e,t,n){var r=n(7854),i=n(2309),o=n(6656),a=n(9711),u=n(133),s=n(3307),l=i("wks"),c=r.Symbol,f=s?c:c&&c.withoutSetter||a;e.exports=function(e){return o(l,e)||(u&&o(c,e)?l[e]=c[e]:l[e]=f("Symbol."+e)),l[e]}},1361:function(e){e.exports="\t\n\v\f\r \u2028\u2029\ufeff"},8264:function(e,t,n){"use strict";var r=n(2109),i=n(7854),o=n(3331),a=n(6340),u=o.ArrayBuffer;r({global:!0,forced:i.ArrayBuffer!==u},{ArrayBuffer:u}),a("ArrayBuffer")},2222:function(e,t,n){"use strict";var r=n(2109),i=n(7293),o=n(3157),a=n(111),u=n(7908),s=n(7466),l=n(6135),c=n(5417),f=n(1194),p=n(5112),h=n(7392),d=p("isConcatSpreadable"),v=9007199254740991,y="Maximum allowed index exceeded",g=h>=51||!i((function(){var e=[];return e[d]=!1,e.concat()[0]!==e})),m=f("concat"),b=function(e){if(!a(e))return!1;var t=e[d];return void 0!==t?!!t:o(e)};r({target:"Array",proto:!0,forced:!g||!m},{concat:function(e){var t,n,r,i,o,a=u(this),f=c(a,0),p=0;for(t=-1,r=arguments.length;t<r;t++)if(b(o=-1===t?a:arguments[t])){if(p+(i=s(o.length))>v)throw TypeError(y);for(n=0;n<i;n++,p++)n in o&&l(f,p,o[n])}else{if(p>=v)throw TypeError(y);l(f,p++,o)}return f.length=p,f}})},7327:function(e,t,n){"use strict";var r=n(2109),i=n(2092).filter;r({target:"Array",proto:!0,forced:!n(1194)("filter")},{filter:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}})},2772:function(e,t,n){"use strict";var r=n(2109),i=n(1318).indexOf,o=n(9341),a=[].indexOf,u=!!a&&1/[1].indexOf(1,-0)<0,s=o("indexOf");r({target:"Array",proto:!0,forced:u||!s},{indexOf:function(e){return u?a.apply(this,arguments)||0:i(this,e,arguments.length>1?arguments[1]:void 0)}})},6992:function(e,t,n){"use strict";var r=n(5656),i=n(1223),o=n(7497),a=n(9909),u=n(654),s="Array Iterator",l=a.set,c=a.getterFor(s);e.exports=u(Array,"Array",(function(e,t){l(this,{type:s,target:r(e),index:0,kind:t})}),(function(){var e=c(this),t=e.target,n=e.kind,r=e.index++;return!t||r>=t.length?(e.target=void 0,{value:void 0,done:!0}):"keys"==n?{value:r,done:!1}:"values"==n?{value:t[r],done:!1}:{value:[r,t[r]],done:!1}}),"values"),o.Arguments=o.Array,i("keys"),i("values"),i("entries")},1249:function(e,t,n){"use strict";var r=n(2109),i=n(2092).map;r({target:"Array",proto:!0,forced:!n(1194)("map")},{map:function(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}})},7042:function(e,t,n){"use strict";var r=n(2109),i=n(111),o=n(3157),a=n(1400),u=n(7466),s=n(5656),l=n(6135),c=n(5112),f=n(1194)("slice"),p=c("species"),h=[].slice,d=Math.max;r({target:"Array",proto:!0,forced:!f},{slice:function(e,t){var n,r,c,f=s(this),v=u(f.length),y=a(e,v),g=a(void 0===t?v:t,v);if(o(f)&&("function"!=typeof(n=f.constructor)||n!==Array&&!o(n.prototype)?i(n)&&null===(n=n[p])&&(n=void 0):n=void 0,n===Array||void 0===n))return h.call(f,y,g);for(r=new(void 0===n?Array:n)(d(g-y,0)),c=0;y<g;y++,c++)y in f&&l(r,c,f[y]);return r.length=c,r}})},561:function(e,t,n){"use strict";var r=n(2109),i=n(1400),o=n(9958),a=n(7466),u=n(7908),s=n(5417),l=n(6135),c=n(1194)("splice"),f=Math.max,p=Math.min,h=9007199254740991,d="Maximum allowed length exceeded";r({target:"Array",proto:!0,forced:!c},{splice:function(e,t){var n,r,c,v,y,g,m=u(this),b=a(m.length),x=i(e,b),w=arguments.length;if(0===w?n=r=0:1===w?(n=0,r=b-x):(n=w-2,r=p(f(o(t),0),b-x)),b+n-r>h)throw TypeError(d);for(c=s(m,r),v=0;v<r;v++)(y=x+v)in m&&l(c,v,m[y]);if(c.length=r,n<r){for(v=x;v<b-r;v++)g=v+n,(y=v+r)in m?m[g]=m[y]:delete m[g];for(v=b;v>b-r+n;v--)delete m[v-1]}else if(n>r)for(v=b-r;v>x;v--)g=v+n-1,(y=v+r-1)in m?m[g]=m[y]:delete m[g];for(v=0;v<n;v++)m[v+x]=arguments[v+2];return m.length=b-r+n,c}})},8309:function(e,t,n){var r=n(9781),i=n(3070).f,o=Function.prototype,a=o.toString,u=/^\s*function ([^ (]*)/,s="name";r&&!(s in o)&&i(o,s,{configurable:!0,get:function(){try{return a.call(this).match(u)[1]}catch(e){return""}}})},489:function(e,t,n){var r=n(2109),i=n(7293),o=n(7908),a=n(9518),u=n(8544);r({target:"Object",stat:!0,forced:i((function(){a(1)})),sham:!u},{getPrototypeOf:function(e){return a(o(e))}})},1539:function(e,t,n){var r=n(1694),i=n(1320),o=n(288);r||i(Object.prototype,"toString",o,{unsafe:!0})},4916:function(e,t,n){"use strict";var r=n(2109),i=n(2261);r({target:"RegExp",proto:!0,forced:/./.exec!==i},{exec:i})},9714:function(e,t,n){"use strict";var r=n(1320),i=n(9670),o=n(7293),a=n(7066),u="toString",s=RegExp.prototype,l=s.toString,c=o((function(){return"/a/b"!=l.call({source:"a",flags:"b"})})),f=l.name!=u;(c||f)&&r(RegExp.prototype,u,(function(){var e=i(this),t=String(e.source),n=e.flags;return"/"+t+"/"+String(void 0===n&&e instanceof RegExp&&!("flags"in s)?a.call(e):n)}),{unsafe:!0})},8783:function(e,t,n){"use strict";var r=n(8710).charAt,i=n(9909),o=n(654),a="String Iterator",u=i.set,s=i.getterFor(a);o(String,"String",(function(e){u(this,{type:a,string:String(e),index:0})}),(function(){var e,t=s(this),n=t.string,i=t.index;return i>=n.length?{value:void 0,done:!0}:(e=r(n,i),t.index+=e.length,{value:e,done:!1})}))},4723:function(e,t,n){"use strict";var r=n(7007),i=n(9670),o=n(7466),a=n(4488),u=n(1530),s=n(7651);r("match",1,(function(e,t,n){return[function(t){var n=a(this),r=null==t?void 0:t[e];return void 0!==r?r.call(t,n):new RegExp(t)[e](String(n))},function(e){var r=n(t,e,this);if(r.done)return r.value;var a=i(e),l=String(this);if(!a.global)return s(a,l);var c=a.unicode;a.lastIndex=0;for(var f,p=[],h=0;null!==(f=s(a,l));){var d=String(f[0]);p[h]=d,""===d&&(a.lastIndex=u(l,o(a.lastIndex),c)),h++}return 0===h?null:p}]}))},5306:function(e,t,n){"use strict";var r=n(7007),i=n(9670),o=n(7466),a=n(9958),u=n(4488),s=n(1530),l=n(647),c=n(7651),f=Math.max,p=Math.min;r("replace",2,(function(e,t,n,r){var h=r.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE,d=r.REPLACE_KEEPS_$0,v=h?"$":"$0";return[function(n,r){var i=u(this),o=null==n?void 0:n[e];return void 0!==o?o.call(n,i,r):t.call(String(i),n,r)},function(e,r){if(!h&&d||"string"==typeof r&&-1===r.indexOf(v)){var u=n(t,e,this,r);if(u.done)return u.value}var y=i(e),g=String(this),m="function"==typeof r;m||(r=String(r));var b=y.global;if(b){var x=y.unicode;y.lastIndex=0}for(var w=[];;){var E=c(y,g);if(null===E)break;if(w.push(E),!b)break;""===String(E[0])&&(y.lastIndex=s(g,o(y.lastIndex),x))}for(var k,A="",S=0,F=0;F<w.length;F++){E=w[F];for(var T=String(E[0]),C=f(p(a(E.index),g.length),0),L=[],R=1;R<E.length;R++)L.push(void 0===(k=E[R])?k:String(k));var I=E.groups;if(m){var U=[T].concat(L,C,g);void 0!==I&&U.push(I);var O=String(r.apply(void 0,U))}else O=l(T,g,C,L,I,r);C>=S&&(A+=g.slice(S,C)+O,S=C+T.length)}return A+g.slice(S)}]}))},3123:function(e,t,n){"use strict";var r=n(7007),i=n(7850),o=n(9670),a=n(4488),u=n(6707),s=n(1530),l=n(7466),c=n(7651),f=n(2261),p=n(7293),h=[].push,d=Math.min,v=4294967295,y=!p((function(){return!RegExp(v,"y")}));r("split",2,(function(e,t,n){var r;return r="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(e,n){var r=String(a(this)),o=void 0===n?v:n>>>0;if(0===o)return[];if(void 0===e)return[r];if(!i(e))return t.call(r,e,o);for(var u,s,l,c=[],p=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),d=0,y=new RegExp(e.source,p+"g");(u=f.call(y,r))&&!((s=y.lastIndex)>d&&(c.push(r.slice(d,u.index)),u.length>1&&u.index<r.length&&h.apply(c,u.slice(1)),l=u[0].length,d=s,c.length>=o));)y.lastIndex===u.index&&y.lastIndex++;return d===r.length?!l&&y.test("")||c.push(""):c.push(r.slice(d)),c.length>o?c.slice(0,o):c}:"0".split(void 0,0).length?function(e,n){return void 0===e&&0===n?[]:t.call(this,e,n)}:t,[function(t,n){var i=a(this),o=null==t?void 0:t[e];return void 0!==o?o.call(t,i,n):r.call(String(i),t,n)},function(e,i){var a=n(r,e,this,i,r!==t);if(a.done)return a.value;var f=o(e),p=String(this),h=u(f,RegExp),g=f.unicode,m=(f.ignoreCase?"i":"")+(f.multiline?"m":"")+(f.unicode?"u":"")+(y?"y":"g"),b=new h(y?f:"^(?:"+f.source+")",m),x=void 0===i?v:i>>>0;if(0===x)return[];if(0===p.length)return null===c(b,p)?[p]:[];for(var w=0,E=0,k=[];E<p.length;){b.lastIndex=y?E:0;var A,S=c(b,y?p:p.slice(E));if(null===S||(A=d(l(b.lastIndex+(y?0:E)),p.length))===w)E=s(p,E,g);else{if(k.push(p.slice(w,E)),k.length===x)return k;for(var F=1;F<=S.length-1;F++)if(k.push(S[F]),k.length===x)return k;E=w=A}}return k.push(p.slice(w)),k}]}),!y)},3210:function(e,t,n){"use strict";var r=n(2109),i=n(3111).trim;r({target:"String",proto:!0,forced:n(6091)("trim")},{trim:function(){return i(this)}})},2990:function(e,t,n){"use strict";var r=n(260),i=n(1048),o=r.aTypedArray;(0,r.exportTypedArrayMethod)("copyWithin",(function(e,t){return i.call(o(this),e,t,arguments.length>2?arguments[2]:void 0)}))},8927:function(e,t,n){"use strict";var r=n(260),i=n(2092).every,o=r.aTypedArray;(0,r.exportTypedArrayMethod)("every",(function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)}))},3105:function(e,t,n){"use strict";var r=n(260),i=n(1285),o=r.aTypedArray;(0,r.exportTypedArrayMethod)("fill",(function(e){return i.apply(o(this),arguments)}))},5035:function(e,t,n){"use strict";var r=n(260),i=n(2092).filter,o=n(3074),a=r.aTypedArray;(0,r.exportTypedArrayMethod)("filter",(function(e){var t=i(a(this),e,arguments.length>1?arguments[1]:void 0);return o(this,t)}))},7174:function(e,t,n){"use strict";var r=n(260),i=n(2092).findIndex,o=r.aTypedArray;(0,r.exportTypedArrayMethod)("findIndex",(function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)}))},4345:function(e,t,n){"use strict";var r=n(260),i=n(2092).find,o=r.aTypedArray;(0,r.exportTypedArrayMethod)("find",(function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)}))},2846:function(e,t,n){"use strict";var r=n(260),i=n(2092).forEach,o=r.aTypedArray;(0,r.exportTypedArrayMethod)("forEach",(function(e){i(o(this),e,arguments.length>1?arguments[1]:void 0)}))},4731:function(e,t,n){"use strict";var r=n(260),i=n(1318).includes,o=r.aTypedArray;(0,r.exportTypedArrayMethod)("includes",(function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)}))},7209:function(e,t,n){"use strict";var r=n(260),i=n(1318).indexOf,o=r.aTypedArray;(0,r.exportTypedArrayMethod)("indexOf",(function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)}))},6319:function(e,t,n){"use strict";var r=n(7854),i=n(260),o=n(6992),a=n(5112)("iterator"),u=r.Uint8Array,s=o.values,l=o.keys,c=o.entries,f=i.aTypedArray,p=i.exportTypedArrayMethod,h=u&&u.prototype[a],d=!!h&&("values"==h.name||null==h.name),v=function(){return s.call(f(this))};p("entries",(function(){return c.call(f(this))})),p("keys",(function(){return l.call(f(this))})),p("values",v,!d),p(a,v,!d)},8867:function(e,t,n){"use strict";var r=n(260),i=r.aTypedArray,o=r.exportTypedArrayMethod,a=[].join;o("join",(function(e){return a.apply(i(this),arguments)}))},7789:function(e,t,n){"use strict";var r=n(260),i=n(6583),o=r.aTypedArray;(0,r.exportTypedArrayMethod)("lastIndexOf",(function(e){return i.apply(o(this),arguments)}))},3739:function(e,t,n){"use strict";var r=n(260),i=n(2092).map,o=n(6707),a=r.aTypedArray,u=r.aTypedArrayConstructor;(0,r.exportTypedArrayMethod)("map",(function(e){return i(a(this),e,arguments.length>1?arguments[1]:void 0,(function(e,t){return new(u(o(e,e.constructor)))(t)}))}))},4483:function(e,t,n){"use strict";var r=n(260),i=n(3671).right,o=r.aTypedArray;(0,r.exportTypedArrayMethod)("reduceRight",(function(e){return i(o(this),e,arguments.length,arguments.length>1?arguments[1]:void 0)}))},9368:function(e,t,n){"use strict";var r=n(260),i=n(3671).left,o=r.aTypedArray;(0,r.exportTypedArrayMethod)("reduce",(function(e){return i(o(this),e,arguments.length,arguments.length>1?arguments[1]:void 0)}))},2056:function(e,t,n){"use strict";var r=n(260),i=r.aTypedArray,o=r.exportTypedArrayMethod,a=Math.floor;o("reverse",(function(){for(var e,t=this,n=i(t).length,r=a(n/2),o=0;o<r;)e=t[o],t[o++]=t[--n],t[n]=e;return t}))},3462:function(e,t,n){"use strict";var r=n(260),i=n(7466),o=n(4590),a=n(7908),u=n(7293),s=r.aTypedArray;(0,r.exportTypedArrayMethod)("set",(function(e){s(this);var t=o(arguments.length>1?arguments[1]:void 0,1),n=this.length,r=a(e),u=i(r.length),l=0;if(u+t>n)throw RangeError("Wrong length");for(;l<u;)this[t+l]=r[l++]}),u((function(){new Int8Array(1).set({})})))},678:function(e,t,n){"use strict";var r=n(260),i=n(6707),o=n(7293),a=r.aTypedArray,u=r.aTypedArrayConstructor,s=r.exportTypedArrayMethod,l=[].slice;s("slice",(function(e,t){for(var n=l.call(a(this),e,t),r=i(this,this.constructor),o=0,s=n.length,c=new(u(r))(s);s>o;)c[o]=n[o++];return c}),o((function(){new Int8Array(1).slice()})))},7462:function(e,t,n){"use strict";var r=n(260),i=n(2092).some,o=r.aTypedArray;(0,r.exportTypedArrayMethod)("some",(function(e){return i(o(this),e,arguments.length>1?arguments[1]:void 0)}))},3824:function(e,t,n){"use strict";var r=n(260),i=r.aTypedArray,o=r.exportTypedArrayMethod,a=[].sort;o("sort",(function(e){return a.call(i(this),e)}))},5021:function(e,t,n){"use strict";var r=n(260),i=n(7466),o=n(1400),a=n(6707),u=r.aTypedArray;(0,r.exportTypedArrayMethod)("subarray",(function(e,t){var n=u(this),r=n.length,s=o(e,r);return new(a(n,n.constructor))(n.buffer,n.byteOffset+s*n.BYTES_PER_ELEMENT,i((void 0===t?r:o(t,r))-s))}))},2974:function(e,t,n){"use strict";var r=n(7854),i=n(260),o=n(7293),a=r.Int8Array,u=i.aTypedArray,s=i.exportTypedArrayMethod,l=[].toLocaleString,c=[].slice,f=!!a&&o((function(){l.call(new a(1))}));s("toLocaleString",(function(){return l.apply(f?c.call(u(this)):u(this),arguments)}),o((function(){return[1,2].toLocaleString()!=new a([1,2]).toLocaleString()}))||!o((function(){a.prototype.toLocaleString.call([1,2])})))},5016:function(e,t,n){"use strict";var r=n(260).exportTypedArrayMethod,i=n(7293),o=n(7854).Uint8Array,a=o&&o.prototype||{},u=[].toString,s=[].join;i((function(){u.call({})}))&&(u=function(){return s.call(this)});var l=a.toString!=u;r("toString",u,l)},2472:function(e,t,n){n(9843)("Uint8",(function(e){return function(t,n,r){return e(this,t,n,r)}}))},4747:function(e,t,n){var r=n(7854),i=n(8324),o=n(8533),a=n(8880);for(var u in i){var s=r[u],l=s&&s.prototype;if(l&&l.forEach!==o)try{a(l,"forEach",o)}catch(e){l.forEach=o}}},3948:function(e,t,n){var r=n(7854),i=n(8324),o=n(6992),a=n(8880),u=n(5112),s=u("iterator"),l=u("toStringTag"),c=o.values;for(var f in i){var p=r[f],h=p&&p.prototype;if(h){if(h[s]!==c)try{a(h,s,c)}catch(e){h[s]=c}if(h[l]||a(h,l,f),i[f])for(var d in o)if(h[d]!==o[d])try{a(h,d,o[d])}catch(e){h[d]=o[d]}}}},1637:function(e,t,n){"use strict";n(6992);var r=n(2109),i=n(5005),o=n(590),a=n(1320),u=n(2248),s=n(8003),l=n(4994),c=n(9909),f=n(5787),p=n(6656),h=n(9974),d=n(648),v=n(9670),y=n(111),g=n(30),m=n(9114),b=n(8554),x=n(1246),w=n(5112),E=i("fetch"),k=i("Headers"),A=w("iterator"),S="URLSearchParams",F="URLSearchParamsIterator",T=c.set,C=c.getterFor(S),L=c.getterFor(F),R=/\+/g,I=Array(4),U=function(e){return I[e-1]||(I[e-1]=RegExp("((?:%[\\da-f]{2}){"+e+"})","gi"))},O=function(e){try{return decodeURIComponent(e)}catch(t){return e}},_=function(e){var t=e.replace(R," "),n=4;try{return decodeURIComponent(t)}catch(e){for(;n;)t=t.replace(U(n--),O);return t}},M=/[!'()~]|%20/g,z={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},P=function(e){return z[e]},j=function(e){return encodeURIComponent(e).replace(M,P)},D=function(e,t){if(t)for(var n,r,i=t.split("&"),o=0;o<i.length;)(n=i[o++]).length&&(r=n.split("="),e.push({key:_(r.shift()),value:_(r.join("="))}))},N=function(e){this.entries.length=0,D(this.entries,e)},B=function(e,t){if(e<t)throw TypeError("Not enough arguments")},q=l((function(e,t){T(this,{type:F,iterator:b(C(e).entries),kind:t})}),"Iterator",(function(){var e=L(this),t=e.kind,n=e.iterator.next(),r=n.value;return n.done||(n.value="keys"===t?r.key:"values"===t?r.value:[r.key,r.value]),n})),W=function(){f(this,W,S);var e,t,n,r,i,o,a,u,s,l=arguments.length>0?arguments[0]:void 0,c=this,h=[];if(T(c,{type:S,entries:h,updateURL:function(){},updateSearchParams:N}),void 0!==l)if(y(l))if("function"==typeof(e=x(l)))for(n=(t=e.call(l)).next;!(r=n.call(t)).done;){if((a=(o=(i=b(v(r.value))).next).call(i)).done||(u=o.call(i)).done||!o.call(i).done)throw TypeError("Expected sequence with length 2");h.push({key:a.value+"",value:u.value+""})}else for(s in l)p(l,s)&&h.push({key:s,value:l[s]+""});else D(h,"string"==typeof l?"?"===l.charAt(0)?l.slice(1):l:l+"")},H=W.prototype;u(H,{append:function(e,t){B(arguments.length,2);var n=C(this);n.entries.push({key:e+"",value:t+""}),n.updateURL()},delete:function(e){B(arguments.length,1);for(var t=C(this),n=t.entries,r=e+"",i=0;i<n.length;)n[i].key===r?n.splice(i,1):i++;t.updateURL()},get:function(e){B(arguments.length,1);for(var t=C(this).entries,n=e+"",r=0;r<t.length;r++)if(t[r].key===n)return t[r].value;return null},getAll:function(e){B(arguments.length,1);for(var t=C(this).entries,n=e+"",r=[],i=0;i<t.length;i++)t[i].key===n&&r.push(t[i].value);return r},has:function(e){B(arguments.length,1);for(var t=C(this).entries,n=e+"",r=0;r<t.length;)if(t[r++].key===n)return!0;return!1},set:function(e,t){B(arguments.length,1);for(var n,r=C(this),i=r.entries,o=!1,a=e+"",u=t+"",s=0;s<i.length;s++)(n=i[s]).key===a&&(o?i.splice(s--,1):(o=!0,n.value=u));o||i.push({key:a,value:u}),r.updateURL()},sort:function(){var e,t,n,r=C(this),i=r.entries,o=i.slice();for(i.length=0,n=0;n<o.length;n++){for(e=o[n],t=0;t<n;t++)if(i[t].key>e.key){i.splice(t,0,e);break}t===n&&i.push(e)}r.updateURL()},forEach:function(e){for(var t,n=C(this).entries,r=h(e,arguments.length>1?arguments[1]:void 0,3),i=0;i<n.length;)r((t=n[i++]).value,t.key,this)},keys:function(){return new q(this,"keys")},values:function(){return new q(this,"values")},entries:function(){return new q(this,"entries")}},{enumerable:!0}),a(H,A,H.entries),a(H,"toString",(function(){for(var e,t=C(this).entries,n=[],r=0;r<t.length;)e=t[r++],n.push(j(e.key)+"="+j(e.value));return n.join("&")}),{enumerable:!0}),s(W,S),r({global:!0,forced:!o},{URLSearchParams:W}),o||"function"!=typeof E||"function"!=typeof k||r({global:!0,enumerable:!0,forced:!0},{fetch:function(e){var t,n,r,i=[e];return arguments.length>1&&(y(t=arguments[1])&&(n=t.body,d(n)===S&&((r=t.headers?new k(t.headers):new k).has("content-type")||r.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"),t=g(t,{body:m(0,String(n)),headers:m(0,r)}))),i.push(t)),E.apply(this,i)}}),e.exports={URLSearchParams:W,getState:C}},285:function(e,t,n){"use strict";n(8783);var r,i=n(2109),o=n(9781),a=n(590),u=n(7854),s=n(6048),l=n(1320),c=n(5787),f=n(6656),p=n(1574),h=n(8457),d=n(8710).codeAt,v=n(3197),y=n(8003),g=n(1637),m=n(9909),b=u.URL,x=g.URLSearchParams,w=g.getState,E=m.set,k=m.getterFor("URL"),A=Math.floor,S=Math.pow,F="Invalid scheme",T="Invalid host",C="Invalid port",L=/[A-Za-z]/,R=/[\d+-.A-Za-z]/,I=/\d/,U=/^(0x|0X)/,O=/^[0-7]+$/,_=/^\d+$/,M=/^[\dA-Fa-f]+$/,z=/[\u0000\t\u000A\u000D #%/:?@[\\]]/,P=/[\u0000\t\u000A\u000D #/:?@[\\]]/,j=/^[\u0000-\u001F ]+|[\u0000-\u001F ]+$/g,D=/[\t\u000A\u000D]/g,N=function(e,t){var n,r,i;if("["==t.charAt(0)){if("]"!=t.charAt(t.length-1))return T;if(!(n=q(t.slice(1,-1))))return T;e.host=n}else if(X(e)){if(t=v(t),z.test(t))return T;if(null===(n=B(t)))return T;e.host=n}else{if(P.test(t))return T;for(n="",r=h(t),i=0;i<r.length;i++)n+=$(r[i],H);e.host=n}},B=function(e){var t,n,r,i,o,a,u,s=e.split(".");if(s.length&&""==s[s.length-1]&&s.pop(),(t=s.length)>4)return e;for(n=[],r=0;r<t;r++){if(""==(i=s[r]))return e;if(o=10,i.length>1&&"0"==i.charAt(0)&&(o=U.test(i)?16:8,i=i.slice(8==o?1:2)),""===i)a=0;else{if(!(10==o?_:8==o?O:M).test(i))return e;a=parseInt(i,o)}n.push(a)}for(r=0;r<t;r++)if(a=n[r],r==t-1){if(a>=S(256,5-t))return null}else if(a>255)return null;for(u=n.pop(),r=0;r<n.length;r++)u+=n[r]*S(256,3-r);return u},q=function(e){var t,n,r,i,o,a,u,s=[0,0,0,0,0,0,0,0],l=0,c=null,f=0,p=function(){return e.charAt(f)};if(":"==p()){if(":"!=e.charAt(1))return;f+=2,c=++l}for(;p();){if(8==l)return;if(":"!=p()){for(t=n=0;n<4&&M.test(p());)t=16*t+parseInt(p(),16),f++,n++;if("."==p()){if(0==n)return;if(f-=n,l>6)return;for(r=0;p();){if(i=null,r>0){if(!("."==p()&&r<4))return;f++}if(!I.test(p()))return;for(;I.test(p());){if(o=parseInt(p(),10),null===i)i=o;else{if(0==i)return;i=10*i+o}if(i>255)return;f++}s[l]=256*s[l]+i,2!=++r&&4!=r||l++}if(4!=r)return;break}if(":"==p()){if(f++,!p())return}else if(p())return;s[l++]=t}else{if(null!==c)return;f++,c=++l}}if(null!==c)for(a=l-c,l=7;0!=l&&a>0;)u=s[l],s[l--]=s[c+a-1],s[c+--a]=u;else if(8!=l)return;return s},W=function(e){var t,n,r,i;if("number"==typeof e){for(t=[],n=0;n<4;n++)t.unshift(e%256),e=A(e/256);return t.join(".")}if("object"==typeof e){for(t="",r=function(e){for(var t=null,n=1,r=null,i=0,o=0;o<8;o++)0!==e[o]?(i>n&&(t=r,n=i),r=null,i=0):(null===r&&(r=o),++i);return i>n&&(t=r,n=i),t}(e),n=0;n<8;n++)i&&0===e[n]||(i&&(i=!1),r===n?(t+=n?":":"::",i=!0):(t+=e[n].toString(16),n<7&&(t+=":")));return"["+t+"]"}return e},H={},Y=p({},H,{" ":1,'"':1,"<":1,">":1,"`":1}),G=p({},Y,{"#":1,"?":1,"{":1,"}":1}),Q=p({},G,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\":1,"]":1,"^":1,"|":1}),$=function(e,t){var n=d(e,0);return n>32&&n<127&&!f(t,e)?e:encodeURIComponent(e)},V={ftp:21,file:null,http:80,https:443,ws:80,wss:443},X=function(e){return f(V,e.scheme)},K=function(e){return""!=e.username||""!=e.password},Z=function(e){return!e.host||e.cannotBeABaseURL||"file"==e.scheme},J=function(e,t){var n;return 2==e.length&&L.test(e.charAt(0))&&(":"==(n=e.charAt(1))||!t&&"|"==n)},ee=function(e){var t;return e.length>1&&J(e.slice(0,2))&&(2==e.length||"/"===(t=e.charAt(2))||"\\"===t||"?"===t||"#"===t)},te=function(e){var t=e.path,n=t.length;!n||"file"==e.scheme&&1==n&&J(t[0],!0)||t.pop()},ne=function(e){return"."===e||"%2e"===e.toLowerCase()},re={},ie={},oe={},ae={},ue={},se={},le={},ce={},fe={},pe={},he={},de={},ve={},ye={},ge={},me={},be={},xe={},we={},Ee={},ke={},Ae=function(e,t,n,i){var o,a,u,s,l,c=n||re,p=0,d="",v=!1,y=!1,g=!1;for(n||(e.scheme="",e.username="",e.password="",e.host=null,e.port=null,e.path=[],e.query=null,e.fragment=null,e.cannotBeABaseURL=!1,t=t.replace(j,"")),t=t.replace(D,""),o=h(t);p<=o.length;){switch(a=o[p],c){case re:if(!a||!L.test(a)){if(n)return F;c=oe;continue}d+=a.toLowerCase(),c=ie;break;case ie:if(a&&(R.test(a)||"+"==a||"-"==a||"."==a))d+=a.toLowerCase();else{if(":"!=a){if(n)return F;d="",c=oe,p=0;continue}if(n&&(X(e)!=f(V,d)||"file"==d&&(K(e)||null!==e.port)||"file"==e.scheme&&!e.host))return;if(e.scheme=d,n)return void(X(e)&&V[e.scheme]==e.port&&(e.port=null));d="","file"==e.scheme?c=ye:X(e)&&i&&i.scheme==e.scheme?c=ae:X(e)?c=ce:"/"==o[p+1]?(c=ue,p++):(e.cannotBeABaseURL=!0,e.path.push(""),c=we)}break;case oe:if(!i||i.cannotBeABaseURL&&"#"!=a)return F;if(i.cannotBeABaseURL&&"#"==a){e.scheme=i.scheme,e.path=i.path.slice(),e.query=i.query,e.fragment="",e.cannotBeABaseURL=!0,c=ke;break}c="file"==i.scheme?ye:se;continue;case ae:if("/"!=a||"/"!=o[p+1]){c=se;continue}c=fe,p++;break;case ue:if("/"==a){c=pe;break}c=xe;continue;case se:if(e.scheme=i.scheme,a==r)e.username=i.username,e.password=i.password,e.host=i.host,e.port=i.port,e.path=i.path.slice(),e.query=i.query;else if("/"==a||"\\"==a&&X(e))c=le;else if("?"==a)e.username=i.username,e.password=i.password,e.host=i.host,e.port=i.port,e.path=i.path.slice(),e.query="",c=Ee;else{if("#"!=a){e.username=i.username,e.password=i.password,e.host=i.host,e.port=i.port,e.path=i.path.slice(),e.path.pop(),c=xe;continue}e.username=i.username,e.password=i.password,e.host=i.host,e.port=i.port,e.path=i.path.slice(),e.query=i.query,e.fragment="",c=ke}break;case le:if(!X(e)||"/"!=a&&"\\"!=a){if("/"!=a){e.username=i.username,e.password=i.password,e.host=i.host,e.port=i.port,c=xe;continue}c=pe}else c=fe;break;case ce:if(c=fe,"/"!=a||"/"!=d.charAt(p+1))continue;p++;break;case fe:if("/"!=a&&"\\"!=a){c=pe;continue}break;case pe:if("@"==a){v&&(d="%40"+d),v=!0,u=h(d);for(var m=0;m<u.length;m++){var b=u[m];if(":"!=b||g){var x=$(b,Q);g?e.password+=x:e.username+=x}else g=!0}d=""}else if(a==r||"/"==a||"?"==a||"#"==a||"\\"==a&&X(e)){if(v&&""==d)return"Invalid authority";p-=h(d).length+1,d="",c=he}else d+=a;break;case he:case de:if(n&&"file"==e.scheme){c=me;continue}if(":"!=a||y){if(a==r||"/"==a||"?"==a||"#"==a||"\\"==a&&X(e)){if(X(e)&&""==d)return T;if(n&&""==d&&(K(e)||null!==e.port))return;if(s=N(e,d))return s;if(d="",c=be,n)return;continue}"["==a?y=!0:"]"==a&&(y=!1),d+=a}else{if(""==d)return T;if(s=N(e,d))return s;if(d="",c=ve,n==de)return}break;case ve:if(!I.test(a)){if(a==r||"/"==a||"?"==a||"#"==a||"\\"==a&&X(e)||n){if(""!=d){var w=parseInt(d,10);if(w>65535)return C;e.port=X(e)&&w===V[e.scheme]?null:w,d=""}if(n)return;c=be;continue}return C}d+=a;break;case ye:if(e.scheme="file","/"==a||"\\"==a)c=ge;else{if(!i||"file"!=i.scheme){c=xe;continue}if(a==r)e.host=i.host,e.path=i.path.slice(),e.query=i.query;else if("?"==a)e.host=i.host,e.path=i.path.slice(),e.query="",c=Ee;else{if("#"!=a){ee(o.slice(p).join(""))||(e.host=i.host,e.path=i.path.slice(),te(e)),c=xe;continue}e.host=i.host,e.path=i.path.slice(),e.query=i.query,e.fragment="",c=ke}}break;case ge:if("/"==a||"\\"==a){c=me;break}i&&"file"==i.scheme&&!ee(o.slice(p).join(""))&&(J(i.path[0],!0)?e.path.push(i.path[0]):e.host=i.host),c=xe;continue;case me:if(a==r||"/"==a||"\\"==a||"?"==a||"#"==a){if(!n&&J(d))c=xe;else if(""==d){if(e.host="",n)return;c=be}else{if(s=N(e,d))return s;if("localhost"==e.host&&(e.host=""),n)return;d="",c=be}continue}d+=a;break;case be:if(X(e)){if(c=xe,"/"!=a&&"\\"!=a)continue}else if(n||"?"!=a)if(n||"#"!=a){if(a!=r&&(c=xe,"/"!=a))continue}else e.fragment="",c=ke;else e.query="",c=Ee;break;case xe:if(a==r||"/"==a||"\\"==a&&X(e)||!n&&("?"==a||"#"==a)){if(".."===(l=(l=d).toLowerCase())||"%2e."===l||".%2e"===l||"%2e%2e"===l?(te(e),"/"==a||"\\"==a&&X(e)||e.path.push("")):ne(d)?"/"==a||"\\"==a&&X(e)||e.path.push(""):("file"==e.scheme&&!e.path.length&&J(d)&&(e.host&&(e.host=""),d=d.charAt(0)+":"),e.path.push(d)),d="","file"==e.scheme&&(a==r||"?"==a||"#"==a))for(;e.path.length>1&&""===e.path[0];)e.path.shift();"?"==a?(e.query="",c=Ee):"#"==a&&(e.fragment="",c=ke)}else d+=$(a,G);break;case we:"?"==a?(e.query="",c=Ee):"#"==a?(e.fragment="",c=ke):a!=r&&(e.path[0]+=$(a,H));break;case Ee:n||"#"!=a?a!=r&&("'"==a&&X(e)?e.query+="%27":e.query+="#"==a?"%23":$(a,H)):(e.fragment="",c=ke);break;case ke:a!=r&&(e.fragment+=$(a,Y))}p++}},Se=function(e){var t,n,r=c(this,Se,"URL"),i=arguments.length>1?arguments[1]:void 0,a=String(e),u=E(r,{type:"URL"});if(void 0!==i)if(i instanceof Se)t=k(i);else if(n=Ae(t={},String(i)))throw TypeError(n);if(n=Ae(u,a,null,t))throw TypeError(n);var s=u.searchParams=new x,l=w(s);l.updateSearchParams(u.query),l.updateURL=function(){u.query=String(s)||null},o||(r.href=Te.call(r),r.origin=Ce.call(r),r.protocol=Le.call(r),r.username=Re.call(r),r.password=Ie.call(r),r.host=Ue.call(r),r.hostname=Oe.call(r),r.port=_e.call(r),r.pathname=Me.call(r),r.search=ze.call(r),r.searchParams=Pe.call(r),r.hash=je.call(r))},Fe=Se.prototype,Te=function(){var e=k(this),t=e.scheme,n=e.username,r=e.password,i=e.host,o=e.port,a=e.path,u=e.query,s=e.fragment,l=t+":";return null!==i?(l+="//",K(e)&&(l+=n+(r?":"+r:"")+"@"),l+=W(i),null!==o&&(l+=":"+o)):"file"==t&&(l+="//"),l+=e.cannotBeABaseURL?a[0]:a.length?"/"+a.join("/"):"",null!==u&&(l+="?"+u),null!==s&&(l+="#"+s),l},Ce=function(){var e=k(this),t=e.scheme,n=e.port;if("blob"==t)try{return new URL(t.path[0]).origin}catch(e){return"null"}return"file"!=t&&X(e)?t+"://"+W(e.host)+(null!==n?":"+n:""):"null"},Le=function(){return k(this).scheme+":"},Re=function(){return k(this).username},Ie=function(){return k(this).password},Ue=function(){var e=k(this),t=e.host,n=e.port;return null===t?"":null===n?W(t):W(t)+":"+n},Oe=function(){var e=k(this).host;return null===e?"":W(e)},_e=function(){var e=k(this).port;return null===e?"":String(e)},Me=function(){var e=k(this),t=e.path;return e.cannotBeABaseURL?t[0]:t.length?"/"+t.join("/"):""},ze=function(){var e=k(this).query;return e?"?"+e:""},Pe=function(){return k(this).searchParams},je=function(){var e=k(this).fragment;return e?"#"+e:""},De=function(e,t){return{get:e,set:t,configurable:!0,enumerable:!0}};if(o&&s(Fe,{href:De(Te,(function(e){var t=k(this),n=String(e),r=Ae(t,n);if(r)throw TypeError(r);w(t.searchParams).updateSearchParams(t.query)})),origin:De(Ce),protocol:De(Le,(function(e){var t=k(this);Ae(t,String(e)+":",re)})),username:De(Re,(function(e){var t=k(this),n=h(String(e));if(!Z(t)){t.username="";for(var r=0;r<n.length;r++)t.username+=$(n[r],Q)}})),password:De(Ie,(function(e){var t=k(this),n=h(String(e));if(!Z(t)){t.password="";for(var r=0;r<n.length;r++)t.password+=$(n[r],Q)}})),host:De(Ue,(function(e){var t=k(this);t.cannotBeABaseURL||Ae(t,String(e),he)})),hostname:De(Oe,(function(e){var t=k(this);t.cannotBeABaseURL||Ae(t,String(e),de)})),port:De(_e,(function(e){var t=k(this);Z(t)||(""==(e=String(e))?t.port=null:Ae(t,e,ve))})),pathname:De(Me,(function(e){var t=k(this);t.cannotBeABaseURL||(t.path=[],Ae(t,e+"",be))})),search:De(ze,(function(e){var t=k(this);""==(e=String(e))?t.query=null:("?"==e.charAt(0)&&(e=e.slice(1)),t.query="",Ae(t,e,Ee)),w(t.searchParams).updateSearchParams(t.query)})),searchParams:De(Pe),hash:De(je,(function(e){var t=k(this);""!=(e=String(e))?("#"==e.charAt(0)&&(e=e.slice(1)),t.fragment="",Ae(t,e,ke)):t.fragment=null}))}),l(Fe,"toJSON",(function(){return Te.call(this)}),{enumerable:!0}),l(Fe,"toString",(function(){return Te.call(this)}),{enumerable:!0}),b){var Ne=b.createObjectURL,Be=b.revokeObjectURL;Ne&&l(Se,"createObjectURL",(function(e){return Ne.apply(b,arguments)})),Be&&l(Se,"revokeObjectURL",(function(e){return Be.apply(b,arguments)}))}y(Se,"URL"),i({global:!0,forced:!a,sham:!o},{URL:Se})}},t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={exports:{}};return e[r](i,i.exports,n),i.exports}n.d=function(e,t){for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};return function(){"use strict";function e(e,n){var r;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(r=function(e,n){if(e){if("string"==typeof e)return t(e,n);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?t(e,n):void 0}}(e))||n&&e&&"number"==typeof e.length){r&&(e=r);var i=0,o=function(){};return{s:o,n:function(){return i>=e.length?{done:!0}:{done:!1,value:e[i++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,u=!0,s=!1;return{s:function(){r=e[Symbol.iterator]()},n:function(){var e=r.next();return u=e.done,e},e:function(e){s=!0,a=e},f:function(){try{u||null==r.return||r.return()}finally{if(s)throw a}}}}function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function i(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}n.r(r),n.d(r,{Dropzone:function(){return b},default:function(){return A}}),n(2222),n(7327),n(2772),n(6992),n(1249),n(7042),n(561),n(8264),n(8309),n(489),n(1539),n(4916),n(9714),n(8783),n(4723),n(5306),n(3123),n(3210),n(2472),n(2990),n(8927),n(3105),n(5035),n(4345),n(7174),n(2846),n(4731),n(7209),n(6319),n(8867),n(7789),n(3739),n(9368),n(4483),n(2056),n(3462),n(678),n(7462),n(3824),n(5021),n(2974),n(5016),n(4747),n(3948),n(285);var o=function(){function t(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t)}var n,r;return n=t,(r=[{key:"on",value:function(e,t){return this._callbacks=this._callbacks||{},this._callbacks[e]||(this._callbacks[e]=[]),this._callbacks[e].push(t),this}},{key:"emit",value:function(t){this._callbacks=this._callbacks||{};for(var n=this._callbacks[t],r=arguments.length,i=new Array(r>1?r-1:0),o=1;o<r;o++)i[o-1]=arguments[o];if(n){var a,u=e(n,!0);try{for(u.s();!(a=u.n()).done;){var s=a.value;s.apply(this,i)}}catch(e){u.e(e)}finally{u.f()}}return this.element&&this.element.dispatchEvent(this.makeEvent("dropzone:"+t,{args:i})),this}},{key:"makeEvent",value:function(e,t){var n={bubbles:!0,cancelable:!0,detail:t};if("function"==typeof window.CustomEvent)return new CustomEvent(e,n);var r=document.createEvent("CustomEvent");return r.initCustomEvent(e,n.bubbles,n.cancelable,n.detail),r}},{key:"off",value:function(e,t){if(!this._callbacks||0===arguments.length)return this._callbacks={},this;var n=this._callbacks[e];if(!n)return this;if(1===arguments.length)return delete this._callbacks[e],this;for(var r=0;r<n.length;r++){var i=n[r];if(i===t){n.splice(r,1);break}}return this}}])&&i(n.prototype,r),t}();function a(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return u(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?u(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var s={url:null,method:"post",withCredentials:!1,timeout:null,parallelUploads:2,uploadMultiple:!1,chunking:!1,forceChunking:!1,chunkSize:2e6,parallelChunkUploads:!1,retryChunks:!1,retryChunksLimit:3,maxFilesize:256,paramName:"file",createImageThumbnails:!0,maxThumbnailFilesize:10,thumbnailWidth:120,thumbnailHeight:120,thumbnailMethod:"crop",resizeWidth:null,resizeHeight:null,resizeMimeType:null,resizeQuality:.8,resizeMethod:"contain",filesizeBase:1e3,maxFiles:null,headers:null,clickable:!0,ignoreHiddenFiles:!0,acceptedFiles:null,acceptedMimeTypes:null,autoProcessQueue:!0,autoQueue:!0,addRemoveLinks:!1,previewsContainer:null,disablePreviews:!1,hiddenInputContainer:"body",capture:null,renameFilename:null,renameFile:null,forceFallback:!1,dictDefaultMessage:"Drop files here to upload",dictFallbackMessage:"Your browser does not support drag'n'drop file uploads.",dictFallbackText:"Please use the fallback form below to upload your files like in the olden days.",dictFileTooBig:"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.",dictInvalidFileType:"You can't upload files of this type.",dictResponseError:"Server responded with {{statusCode}} code.",dictCancelUpload:"Cancel upload",dictUploadCanceled:"Upload canceled.",dictCancelUploadConfirmation:"Are you sure you want to cancel this upload?",dictRemoveFile:"Remove file",dictRemoveFileConfirmation:null,dictMaxFilesExceeded:"You can not upload any more files.",dictFileSizeUnits:{tb:"TB",gb:"GB",mb:"MB",kb:"KB",b:"b"},init:function(){},params:function(e,t,n){if(n)return{dzuuid:n.file.upload.uuid,dzchunkindex:n.index,dztotalfilesize:n.file.size,dzchunksize:this.options.chunkSize,dztotalchunkcount:n.file.upload.totalChunkCount,dzchunkbyteoffset:n.index*this.options.chunkSize}},accept:function(e,t){return t()},chunksUploaded:function(e,t){t()},fallback:function(){var e;this.element.className="".concat(this.element.className," dz-browser-not-supported");var t,n=a(this.element.getElementsByTagName("div"),!0);try{for(n.s();!(t=n.n()).done;){var r=t.value;if(/(^| )dz-message($| )/.test(r.className)){e=r,r.className="dz-message";break}}}catch(e){n.e(e)}finally{n.f()}e||(e=b.createElement('<div class="dz-message"><span></span></div>'),this.element.appendChild(e));var i=e.getElementsByTagName("span")[0];return i&&(null!=i.textContent?i.textContent=this.options.dictFallbackMessage:null!=i.innerText&&(i.innerText=this.options.dictFallbackMessage)),this.element.appendChild(this.getFallbackForm())},resize:function(e,t,n,r){var i={srcX:0,srcY:0,srcWidth:e.width,srcHeight:e.height},o=e.width/e.height;null==t&&null==n?(t=i.srcWidth,n=i.srcHeight):null==t?t=n*o:null==n&&(n=t/o);var a=(t=Math.min(t,i.srcWidth))/(n=Math.min(n,i.srcHeight));if(i.srcWidth>t||i.srcHeight>n)if("crop"===r)o>a?(i.srcHeight=e.height,i.srcWidth=i.srcHeight*a):(i.srcWidth=e.width,i.srcHeight=i.srcWidth/a);else{if("contain"!==r)throw new Error("Unknown resizeMethod '".concat(r,"'"));o>a?n=t/o:t=n*o}return i.srcX=(e.width-i.srcWidth)/2,i.srcY=(e.height-i.srcHeight)/2,i.trgWidth=t,i.trgHeight=n,i},transformFile:function(e,t){return(this.options.resizeWidth||this.options.resizeHeight)&&e.type.match(/image.*/)?this.resizeImage(e,this.options.resizeWidth,this.options.resizeHeight,this.options.resizeMethod,t):t(e)},previewTemplate:'<div class="dz-preview dz-file-preview"> <div class="dz-image"><img data-dz-thumbnail/></div> <div class="dz-details"> <div class="dz-size"><span data-dz-size></span></div> <div class="dz-filename"><span data-dz-name></span></div> </div> <div class="dz-progress"> <span class="dz-upload" data-dz-uploadprogress></span> </div> <div class="dz-error-message"><span data-dz-errormessage></span></div> <div class="dz-success-mark"> <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>Check</title> <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <path d="M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" stroke-opacity="0.198794158" stroke="#747474" fill-opacity="0.816519475" fill="#FFFFFF"></path> </g> </svg> </div> <div class="dz-error-mark"> <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>Error</title> <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> <g stroke="#747474" stroke-opacity="0.198794158" fill="#FFFFFF" fill-opacity="0.816519475"> <path d="M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z"></path> </g> </g> </svg> </div> </div> ',drop:function(e){return this.element.classList.remove("dz-drag-hover")},dragstart:function(e){},dragend:function(e){return this.element.classList.remove("dz-drag-hover")},dragenter:function(e){return this.element.classList.add("dz-drag-hover")},dragover:function(e){return this.element.classList.add("dz-drag-hover")},dragleave:function(e){return this.element.classList.remove("dz-drag-hover")},paste:function(e){},reset:function(){return this.element.classList.remove("dz-started")},addedfile:function(e){var t=this;if(this.element===this.previewsContainer&&this.element.classList.add("dz-started"),this.previewsContainer&&!this.options.disablePreviews){e.previewElement=b.createElement(this.options.previewTemplate.trim()),e.previewTemplate=e.previewElement,this.previewsContainer.appendChild(e.previewElement);var n,r=a(e.previewElement.querySelectorAll("[data-dz-name]"),!0);try{for(r.s();!(n=r.n()).done;){var i=n.value;i.textContent=e.name}}catch(e){r.e(e)}finally{r.f()}var o,u=a(e.previewElement.querySelectorAll("[data-dz-size]"),!0);try{for(u.s();!(o=u.n()).done;)(i=o.value).innerHTML=this.filesize(e.size)}catch(e){u.e(e)}finally{u.f()}this.options.addRemoveLinks&&(e._removeLink=b.createElement('<a class="dz-remove" href="javascript:undefined;" data-dz-remove>'.concat(this.options.dictRemoveFile,"</a>")),e.previewElement.appendChild(e._removeLink));var s,l=function(n){return n.preventDefault(),n.stopPropagation(),e.status===b.UPLOADING?b.confirm(t.options.dictCancelUploadConfirmation,(function(){return t.removeFile(e)})):t.options.dictRemoveFileConfirmation?b.confirm(t.options.dictRemoveFileConfirmation,(function(){return t.removeFile(e)})):t.removeFile(e)},c=a(e.previewElement.querySelectorAll("[data-dz-remove]"),!0);try{for(c.s();!(s=c.n()).done;)s.value.addEventListener("click",l)}catch(e){c.e(e)}finally{c.f()}}},removedfile:function(e){return null!=e.previewElement&&null!=e.previewElement.parentNode&&e.previewElement.parentNode.removeChild(e.previewElement),this._updateMaxFilesReachedClass()},thumbnail:function(e,t){if(e.previewElement){e.previewElement.classList.remove("dz-file-preview");var n,r=a(e.previewElement.querySelectorAll("[data-dz-thumbnail]"),!0);try{for(r.s();!(n=r.n()).done;){var i=n.value;i.alt=e.name,i.src=t}}catch(e){r.e(e)}finally{r.f()}return setTimeout((function(){return e.previewElement.classList.add("dz-image-preview")}),1)}},error:function(e,t){if(e.previewElement){e.previewElement.classList.add("dz-error"),"string"!=typeof t&&t.error&&(t=t.error);var n,r=a(e.previewElement.querySelectorAll("[data-dz-errormessage]"),!0);try{for(r.s();!(n=r.n()).done;)n.value.textContent=t}catch(e){r.e(e)}finally{r.f()}}},errormultiple:function(){},processing:function(e){if(e.previewElement&&(e.previewElement.classList.add("dz-processing"),e._removeLink))return e._removeLink.innerHTML=this.options.dictCancelUpload},processingmultiple:function(){},uploadprogress:function(e,t,n){if(e.previewElement){var r,i=a(e.previewElement.querySelectorAll("[data-dz-uploadprogress]"),!0);try{for(i.s();!(r=i.n()).done;){var o=r.value;"PROGRESS"===o.nodeName?o.value=t:o.style.width="".concat(t,"%")}}catch(e){i.e(e)}finally{i.f()}}},totaluploadprogress:function(){},sending:function(){},sendingmultiple:function(){},success:function(e){if(e.previewElement)return e.previewElement.classList.add("dz-success")},successmultiple:function(){},canceled:function(e){return this.emit("error",e,this.options.dictUploadCanceled)},canceledmultiple:function(){},complete:function(e){if(e._removeLink&&(e._removeLink.innerHTML=this.options.dictRemoveFile),e.previewElement)return e.previewElement.classList.add("dz-complete")},completemultiple:function(){},maxfilesexceeded:function(){},maxfilesreached:function(){},queuecomplete:function(){},addedfiles:function(){}};function l(e){return(l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function c(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return f(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?f(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return a=e.done,e},e:function(e){u=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(u)throw o}}}}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function p(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function h(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function d(e,t,n){return t&&h(e.prototype,t),n&&h(e,n),e}function v(e,t){return(v=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function y(e,t){return!t||"object"!==l(t)&&"function"!=typeof t?g(e):t}function g(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function m(e){return(m=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}var b=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&v(e,t)}(i,e);var t,n,r=(t=i,n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,r=m(t);if(n){var i=m(this).constructor;e=Reflect.construct(r,arguments,i)}else e=r.apply(this,arguments);return y(this,e)});function i(e,t){var n,o,a;if(p(this,i),(n=r.call(this)).element=e,n.version=i.version,n.clickableElements=[],n.listeners=[],n.files=[],"string"==typeof n.element&&(n.element=document.querySelector(n.element)),!n.element||null==n.element.nodeType)throw new Error("Invalid dropzone element.");if(n.element.dropzone)throw new Error("Dropzone already attached.");i.instances.push(g(n)),n.element.dropzone=g(n);var u=null!=(a=i.optionsForElement(n.element))?a:{};if(n.options=i.extend({},s,u,null!=t?t:{}),n.options.previewTemplate=n.options.previewTemplate.replace(/\n*/g,""),n.options.forceFallback||!i.isBrowserSupported())return y(n,n.options.fallback.call(g(n)));if(null==n.options.url&&(n.options.url=n.element.getAttribute("action")),!n.options.url)throw new Error("No URL provided.");if(n.options.acceptedFiles&&n.options.acceptedMimeTypes)throw new Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.");if(n.options.uploadMultiple&&n.options.chunking)throw new Error("You cannot set both: uploadMultiple and chunking.");return n.options.acceptedMimeTypes&&(n.options.acceptedFiles=n.options.acceptedMimeTypes,delete n.options.acceptedMimeTypes),null!=n.options.renameFilename&&(n.options.renameFile=function(e){return n.options.renameFilename.call(g(n),e.name,e)}),"string"==typeof n.options.method&&(n.options.method=n.options.method.toUpperCase()),(o=n.getExistingFallback())&&o.parentNode&&o.parentNode.removeChild(o),!1!==n.options.previewsContainer&&(n.options.previewsContainer?n.previewsContainer=i.getElement(n.options.previewsContainer,"previewsContainer"):n.previewsContainer=n.element),n.options.clickable&&(!0===n.options.clickable?n.clickableElements=[n.element]:n.clickableElements=i.getElements(n.options.clickable,"clickable")),n.init(),n}return d(i,[{key:"getAcceptedFiles",value:function(){return this.files.filter((function(e){return e.accepted})).map((function(e){return e}))}},{key:"getRejectedFiles",value:function(){return this.files.filter((function(e){return!e.accepted})).map((function(e){return e}))}},{key:"getFilesWithStatus",value:function(e){return this.files.filter((function(t){return t.status===e})).map((function(e){return e}))}},{key:"getQueuedFiles",value:function(){return this.getFilesWithStatus(i.QUEUED)}},{key:"getUploadingFiles",value:function(){return this.getFilesWithStatus(i.UPLOADING)}},{key:"getAddedFiles",value:function(){return this.getFilesWithStatus(i.ADDED)}},{key:"getActiveFiles",value:function(){return this.files.filter((function(e){return e.status===i.UPLOADING||e.status===i.QUEUED})).map((function(e){return e}))}},{key:"init",value:function(){var e=this;"form"===this.element.tagName&&this.element.setAttribute("enctype","multipart/form-data"),this.element.classList.contains("dropzone")&&!this.element.querySelector(".dz-message")&&this.element.appendChild(i.createElement('<div class="dz-default dz-message"><button class="dz-button" type="button">'.concat(this.options.dictDefaultMessage,"</button></div>"))),this.clickableElements.length&&function t(){e.hiddenFileInput&&e.hiddenFileInput.parentNode.removeChild(e.hiddenFileInput),e.hiddenFileInput=document.createElement("input"),e.hiddenFileInput.setAttribute("type","file"),(null===e.options.maxFiles||e.options.maxFiles>1)&&e.hiddenFileInput.setAttribute("multiple","multiple"),e.hiddenFileInput.className="dz-hidden-input",null!==e.options.acceptedFiles&&e.hiddenFileInput.setAttribute("accept",e.options.acceptedFiles),null!==e.options.capture&&e.hiddenFileInput.setAttribute("capture",e.options.capture),e.hiddenFileInput.setAttribute("tabindex","-1"),e.hiddenFileInput.style.visibility="hidden",e.hiddenFileInput.style.position="absolute",e.hiddenFileInput.style.top="0",e.hiddenFileInput.style.left="0",e.hiddenFileInput.style.height="0",e.hiddenFileInput.style.width="0",i.getElement(e.options.hiddenInputContainer,"hiddenInputContainer").appendChild(e.hiddenFileInput),e.hiddenFileInput.addEventListener("change",(function(){var n=e.hiddenFileInput.files;if(n.length){var r,i=c(n,!0);try{for(i.s();!(r=i.n()).done;){var o=r.value;e.addFile(o)}}catch(e){i.e(e)}finally{i.f()}}e.emit("addedfiles",n),t()}))}(),this.URL=null!==window.URL?window.URL:window.webkitURL;var t,n=c(this.events,!0);try{for(n.s();!(t=n.n()).done;){var r=t.value;this.on(r,this.options[r])}}catch(e){n.e(e)}finally{n.f()}this.on("uploadprogress",(function(){return e.updateTotalUploadProgress()})),this.on("removedfile",(function(){return e.updateTotalUploadProgress()})),this.on("canceled",(function(t){return e.emit("complete",t)})),this.on("complete",(function(t){if(0===e.getAddedFiles().length&&0===e.getUploadingFiles().length&&0===e.getQueuedFiles().length)return setTimeout((function(){return e.emit("queuecomplete")}),0)}));var o=function(e){if(function(e){if(e.dataTransfer.types)for(var t=0;t<e.dataTransfer.types.length;t++)if("Files"===e.dataTransfer.types[t])return!0;return!1}(e))return e.stopPropagation(),e.preventDefault?e.preventDefault():e.returnValue=!1};return this.listeners=[{element:this.element,events:{dragstart:function(t){return e.emit("dragstart",t)},dragenter:function(t){return o(t),e.emit("dragenter",t)},dragover:function(t){var n;try{n=t.dataTransfer.effectAllowed}catch(e){}return t.dataTransfer.dropEffect="move"===n||"linkMove"===n?"move":"copy",o(t),e.emit("dragover",t)},dragleave:function(t){return e.emit("dragleave",t)},drop:function(t){return o(t),e.drop(t)},dragend:function(t){return e.emit("dragend",t)}}}],this.clickableElements.forEach((function(t){return e.listeners.push({element:t,events:{click:function(n){return(t!==e.element||n.target===e.element||i.elementInside(n.target,e.element.querySelector(".dz-message")))&&e.hiddenFileInput.click(),!0}}})})),this.enable(),this.options.init.call(this)}},{key:"destroy",value:function(){return this.disable(),this.removeAllFiles(!0),(null!=this.hiddenFileInput?this.hiddenFileInput.parentNode:void 0)&&(this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput),this.hiddenFileInput=null),delete this.element.dropzone,i.instances.splice(i.instances.indexOf(this),1)}},{key:"updateTotalUploadProgress",value:function(){var e,t=0,n=0;if(this.getActiveFiles().length){var r,i=c(this.getActiveFiles(),!0);try{for(i.s();!(r=i.n()).done;){var o=r.value;t+=o.upload.bytesSent,n+=o.upload.total}}catch(e){i.e(e)}finally{i.f()}e=100*t/n}else e=100;return this.emit("totaluploadprogress",e,n,t)}},{key:"_getParamName",value:function(e){return"function"==typeof this.options.paramName?this.options.paramName(e):"".concat(this.options.paramName).concat(this.options.uploadMultiple?"[".concat(e,"]"):"")}},{key:"_renameFile",value:function(e){return"function"!=typeof this.options.renameFile?e.name:this.options.renameFile(e)}},{key:"getFallbackForm",value:function(){var e,t;if(e=this.getExistingFallback())return e;var n='<div class="dz-fallback">';this.options.dictFallbackText&&(n+="<p>".concat(this.options.dictFallbackText,"</p>")),n+='<input type="file" name="'.concat(this._getParamName(0),'" ').concat(this.options.uploadMultiple?'multiple="multiple"':void 0,' /><input type="submit" value="Upload!"></div>');var r=i.createElement(n);return"FORM"!==this.element.tagName?(t=i.createElement('<form action="'.concat(this.options.url,'" enctype="multipart/form-data" method="').concat(this.options.method,'"></form>'))).appendChild(r):(this.element.setAttribute("enctype","multipart/form-data"),this.element.setAttribute("method",this.options.method)),null!=t?t:r}},{key:"getExistingFallback",value:function(){for(var e=function(e){var t,n=c(e,!0);try{for(n.s();!(t=n.n()).done;){var r=t.value;if(/(^| )fallback($| )/.test(r.className))return r}}catch(e){n.e(e)}finally{n.f()}},t=0,n=["div","form"];t<n.length;t++){var r,i=n[t];if(r=e(this.element.getElementsByTagName(i)))return r}}},{key:"setupEventListeners",value:function(){return this.listeners.map((function(e){return function(){var t=[];for(var n in e.events){var r=e.events[n];t.push(e.element.addEventListener(n,r,!1))}return t}()}))}},{key:"removeEventListeners",value:function(){return this.listeners.map((function(e){return function(){var t=[];for(var n in e.events){var r=e.events[n];t.push(e.element.removeEventListener(n,r,!1))}return t}()}))}},{key:"disable",value:function(){var e=this;return this.clickableElements.forEach((function(e){return e.classList.remove("dz-clickable")})),this.removeEventListeners(),this.disabled=!0,this.files.map((function(t){return e.cancelUpload(t)}))}},{key:"enable",value:function(){return delete this.disabled,this.clickableElements.forEach((function(e){return e.classList.add("dz-clickable")})),this.setupEventListeners()}},{key:"filesize",value:function(e){var t=0,n="b";if(e>0){for(var r=["tb","gb","mb","kb","b"],i=0;i<r.length;i++){var o=r[i];if(e>=Math.pow(this.options.filesizeBase,4-i)/10){t=e/Math.pow(this.options.filesizeBase,4-i),n=o;break}}t=Math.round(10*t)/10}return"<strong>".concat(t,"</strong> ").concat(this.options.dictFileSizeUnits[n])}},{key:"_updateMaxFilesReachedClass",value:function(){return null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(this.getAcceptedFiles().length===this.options.maxFiles&&this.emit("maxfilesreached",this.files),this.element.classList.add("dz-max-files-reached")):this.element.classList.remove("dz-max-files-reached")}},{key:"drop",value:function(e){if(e.dataTransfer){this.emit("drop",e);for(var t=[],n=0;n<e.dataTransfer.files.length;n++)t[n]=e.dataTransfer.files[n];if(t.length){var r=e.dataTransfer.items;r&&r.length&&null!=r[0].webkitGetAsEntry?this._addFilesFromItems(r):this.handleFiles(t)}this.emit("addedfiles",t)}}},{key:"paste",value:function(e){if(null!=(null!=(t=null!=e?e.clipboardData:void 0)?function(e){return e.items}(t):void 0)){var t;this.emit("paste",e);var n=e.clipboardData.items;return n.length?this._addFilesFromItems(n):void 0}}},{key:"handleFiles",value:function(e){var t,n=c(e,!0);try{for(n.s();!(t=n.n()).done;){var r=t.value;this.addFile(r)}}catch(e){n.e(e)}finally{n.f()}}},{key:"_addFilesFromItems",value:function(e){var t=this;return function(){var n,r=[],i=c(e,!0);try{for(i.s();!(n=i.n()).done;){var o,a=n.value;null!=a.webkitGetAsEntry&&(o=a.webkitGetAsEntry())?o.isFile?r.push(t.addFile(a.getAsFile())):o.isDirectory?r.push(t._addFilesFromDirectory(o,o.name)):r.push(void 0):null==a.getAsFile||null!=a.kind&&"file"!==a.kind?r.push(void 0):r.push(t.addFile(a.getAsFile()))}}catch(e){i.e(e)}finally{i.f()}return r}()}},{key:"_addFilesFromDirectory",value:function(e,t){var n=this,r=e.createReader(),i=function(e){return"log",n=function(t){return t.log(e)},null!=(t=console)&&"function"==typeof t.log?n(t):void 0;var t,n};return function e(){return r.readEntries((function(r){if(r.length>0){var i,o=c(r,!0);try{for(o.s();!(i=o.n()).done;){var a=i.value;a.isFile?a.file((function(e){if(!n.options.ignoreHiddenFiles||"."!==e.name.substring(0,1))return e.fullPath="".concat(t,"/").concat(e.name),n.addFile(e)})):a.isDirectory&&n._addFilesFromDirectory(a,"".concat(t,"/").concat(a.name))}}catch(e){o.e(e)}finally{o.f()}e()}return null}),i)}()}},{key:"accept",value:function(e,t){this.options.maxFilesize&&e.size>1024*this.options.maxFilesize*1024?t(this.options.dictFileTooBig.replace("{{filesize}}",Math.round(e.size/1024/10.24)/100).replace("{{maxFilesize}}",this.options.maxFilesize)):i.isValidFile(e,this.options.acceptedFiles)?null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(t(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}",this.options.maxFiles)),this.emit("maxfilesexceeded",e)):this.options.accept.call(this,e,t):t(this.options.dictInvalidFileType)}},{key:"addFile",value:function(e){var t=this;e.upload={uuid:i.uuidv4(),progress:0,total:e.size,bytesSent:0,filename:this._renameFile(e)},this.files.push(e),e.status=i.ADDED,this.emit("addedfile",e),this._enqueueThumbnail(e),this.accept(e,(function(n){n?(e.accepted=!1,t._errorProcessing([e],n)):(e.accepted=!0,t.options.autoQueue&&t.enqueueFile(e)),t._updateMaxFilesReachedClass()}))}},{key:"enqueueFiles",value:function(e){var t,n=c(e,!0);try{for(n.s();!(t=n.n()).done;){var r=t.value;this.enqueueFile(r)}}catch(e){n.e(e)}finally{n.f()}return null}},{key:"enqueueFile",value:function(e){var t=this;if(e.status!==i.ADDED||!0!==e.accepted)throw new Error("This file can't be queued because it has already been processed or was rejected.");if(e.status=i.QUEUED,this.options.autoProcessQueue)return setTimeout((function(){return t.processQueue()}),0)}},{key:"_enqueueThumbnail",value:function(e){var t=this;if(this.options.createImageThumbnails&&e.type.match(/image.*/)&&e.size<=1024*this.options.maxThumbnailFilesize*1024)return this._thumbnailQueue.push(e),setTimeout((function(){return t._processThumbnailQueue()}),0)}},{key:"_processThumbnailQueue",value:function(){var e=this;if(!this._processingThumbnail&&0!==this._thumbnailQueue.length){this._processingThumbnail=!0;var t=this._thumbnailQueue.shift();return this.createThumbnail(t,this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.thumbnailMethod,!0,(function(n){return e.emit("thumbnail",t,n),e._processingThumbnail=!1,e._processThumbnailQueue()}))}}},{key:"removeFile",value:function(e){if(e.status===i.UPLOADING&&this.cancelUpload(e),this.files=x(this.files,e),this.emit("removedfile",e),0===this.files.length)return this.emit("reset")}},{key:"removeAllFiles",value:function(e){null==e&&(e=!1);var t,n=c(this.files.slice(),!0);try{for(n.s();!(t=n.n()).done;){var r=t.value;(r.status!==i.UPLOADING||e)&&this.removeFile(r)}}catch(e){n.e(e)}finally{n.f()}return null}},{key:"resizeImage",value:function(e,t,n,r,o){var a=this;return this.createThumbnail(e,t,n,r,!0,(function(t,n){if(null==n)return o(e);var r=a.options.resizeMimeType;null==r&&(r=e.type);var u=n.toDataURL(r,a.options.resizeQuality);return"image/jpeg"!==r&&"image/jpg"!==r||(u=k.restore(e.dataURL,u)),o(i.dataURItoBlob(u))}))}},{key:"createThumbnail",value:function(e,t,n,r,i,o){var a=this,u=new FileReader;u.onload=function(){e.dataURL=u.result,"image/svg+xml"!==e.type?a.createThumbnailFromUrl(e,t,n,r,i,o):null!=o&&o(u.result)},u.readAsDataURL(e)}},{key:"displayExistingFile",value:function(e,t,n,r){var i=this,o=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];if(this.emit("addedfile",e),this.emit("complete",e),o){var a=function(t){i.emit("thumbnail",e,t),n&&n()};e.dataURL=t,this.createThumbnailFromUrl(e,this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.resizeMethod,this.options.fixOrientation,a,r)}else this.emit("thumbnail",e,t),n&&n()}},{key:"createThumbnailFromUrl",value:function(e,t,n,r,i,o,a){var u=this,s=document.createElement("img");return a&&(s.crossOrigin=a),i="from-image"!=getComputedStyle(document.body).imageOrientation&&i,s.onload=function(){var a=function(e){return e(1)};return"undefined"!=typeof EXIF&&null!==EXIF&&i&&(a=function(e){return EXIF.getData(s,(function(){return e(EXIF.getTag(this,"Orientation"))}))}),a((function(i){e.width=s.width,e.height=s.height;var a=u.options.resize.call(u,e,t,n,r),l=document.createElement("canvas"),c=l.getContext("2d");switch(l.width=a.trgWidth,l.height=a.trgHeight,i>4&&(l.width=a.trgHeight,l.height=a.trgWidth),i){case 2:c.translate(l.width,0),c.scale(-1,1);break;case 3:c.translate(l.width,l.height),c.rotate(Math.PI);break;case 4:c.translate(0,l.height),c.scale(1,-1);break;case 5:c.rotate(.5*Math.PI),c.scale(1,-1);break;case 6:c.rotate(.5*Math.PI),c.translate(0,-l.width);break;case 7:c.rotate(.5*Math.PI),c.translate(l.height,-l.width),c.scale(-1,1);break;case 8:c.rotate(-.5*Math.PI),c.translate(-l.height,0)}E(c,s,null!=a.srcX?a.srcX:0,null!=a.srcY?a.srcY:0,a.srcWidth,a.srcHeight,null!=a.trgX?a.trgX:0,null!=a.trgY?a.trgY:0,a.trgWidth,a.trgHeight);var f=l.toDataURL("image/png");if(null!=o)return o(f,l)}))},null!=o&&(s.onerror=o),s.src=e.dataURL}},{key:"processQueue",value:function(){var e=this.options.parallelUploads,t=this.getUploadingFiles().length,n=t;if(!(t>=e)){var r=this.getQueuedFiles();if(r.length>0){if(this.options.uploadMultiple)return this.processFiles(r.slice(0,e-t));for(;n<e;){if(!r.length)return;this.processFile(r.shift()),n++}}}}},{key:"processFile",value:function(e){return this.processFiles([e])}},{key:"processFiles",value:function(e){var t,n=c(e,!0);try{for(n.s();!(t=n.n()).done;){var r=t.value;r.processing=!0,r.status=i.UPLOADING,this.emit("processing",r)}}catch(e){n.e(e)}finally{n.f()}return this.options.uploadMultiple&&this.emit("processingmultiple",e),this.uploadFiles(e)}},{key:"_getFilesWithXhr",value:function(e){return this.files.filter((function(t){return t.xhr===e})).map((function(e){return e}))}},{key:"cancelUpload",value:function(e){if(e.status===i.UPLOADING){var t,n=this._getFilesWithXhr(e.xhr),r=c(n,!0);try{for(r.s();!(t=r.n()).done;)t.value.status=i.CANCELED}catch(e){r.e(e)}finally{r.f()}void 0!==e.xhr&&e.xhr.abort();var o,a=c(n,!0);try{for(a.s();!(o=a.n()).done;){var u=o.value;this.emit("canceled",u)}}catch(e){a.e(e)}finally{a.f()}this.options.uploadMultiple&&this.emit("canceledmultiple",n)}else e.status!==i.ADDED&&e.status!==i.QUEUED||(e.status=i.CANCELED,this.emit("canceled",e),this.options.uploadMultiple&&this.emit("canceledmultiple",[e]));if(this.options.autoProcessQueue)return this.processQueue()}},{key:"resolveOption",value:function(e){if("function"==typeof e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return e.apply(this,n)}return e}},{key:"uploadFile",value:function(e){return this.uploadFiles([e])}},{key:"uploadFiles",value:function(e){var t=this;this._transformFiles(e,(function(n){if(t.options.chunking){var r=n[0];e[0].upload.chunked=t.options.chunking&&(t.options.forceChunking||r.size>t.options.chunkSize),e[0].upload.totalChunkCount=Math.ceil(r.size/t.options.chunkSize)}if(e[0].upload.chunked){var o=e[0],a=n[0];o.upload.chunks=[];var u=function(){for(var n=0;void 0!==o.upload.chunks[n];)n++;if(!(n>=o.upload.totalChunkCount)){var r=n*t.options.chunkSize,u=Math.min(r+t.options.chunkSize,a.size),s={name:t._getParamName(0),data:a.webkitSlice?a.webkitSlice(r,u):a.slice(r,u),filename:o.upload.filename,chunkIndex:n};o.upload.chunks[n]={file:o,index:n,dataBlock:s,status:i.UPLOADING,progress:0,retries:0},t._uploadData(e,[s])}};if(o.upload.finishedChunkUpload=function(n,r){var a=!0;n.status=i.SUCCESS,n.dataBlock=null,n.xhr=null;for(var s=0;s<o.upload.totalChunkCount;s++){if(void 0===o.upload.chunks[s])return u();o.upload.chunks[s].status!==i.SUCCESS&&(a=!1)}a&&t.options.chunksUploaded(o,(function(){t._finished(e,r,null)}))},t.options.parallelChunkUploads)for(var s=0;s<o.upload.totalChunkCount;s++)u();else u()}else{for(var l=[],c=0;c<e.length;c++)l[c]={name:t._getParamName(c),data:n[c],filename:e[c].upload.filename};t._uploadData(e,l)}}))}},{key:"_getChunk",value:function(e,t){for(var n=0;n<e.upload.totalChunkCount;n++)if(void 0!==e.upload.chunks[n]&&e.upload.chunks[n].xhr===t)return e.upload.chunks[n]}},{key:"_uploadData",value:function(e,t){var n,r=this,o=new XMLHttpRequest,a=c(e,!0);try{for(a.s();!(n=a.n()).done;)n.value.xhr=o}catch(e){a.e(e)}finally{a.f()}e[0].upload.chunked&&(e[0].upload.chunks[t[0].chunkIndex].xhr=o);var u=this.resolveOption(this.options.method,e),s=this.resolveOption(this.options.url,e);o.open(u,s,!0),this.resolveOption(this.options.timeout,e)&&(o.timeout=this.resolveOption(this.options.timeout,e)),o.withCredentials=!!this.options.withCredentials,o.onload=function(t){r._finishedUploading(e,o,t)},o.ontimeout=function(){r._handleUploadError(e,o,"Request timedout after ".concat(r.options.timeout/1e3," seconds"))},o.onerror=function(){r._handleUploadError(e,o)},(null!=o.upload?o.upload:o).onprogress=function(t){return r._updateFilesUploadProgress(e,o,t)};var l={Accept:"application/json","Cache-Control":"no-cache","X-Requested-With":"XMLHttpRequest"};for(var f in this.options.headers&&i.extend(l,this.options.headers),l){var p=l[f];p&&o.setRequestHeader(f,p)}var h=new FormData;if(this.options.params){var d=this.options.params;for(var v in"function"==typeof d&&(d=d.call(this,e,o,e[0].upload.chunked?this._getChunk(e[0],o):null)),d){var y=d[v];if(Array.isArray(y))for(var g=0;g<y.length;g++)h.append(v,y[g]);else h.append(v,y)}}var m,b=c(e,!0);try{for(b.s();!(m=b.n()).done;){var x=m.value;this.emit("sending",x,o,h)}}catch(e){b.e(e)}finally{b.f()}this.options.uploadMultiple&&this.emit("sendingmultiple",e,o,h),this._addFormElementData(h);for(var w=0;w<t.length;w++){var E=t[w];h.append(E.name,E.data,E.filename)}this.submitRequest(o,h,e)}},{key:"_transformFiles",value:function(e,t){for(var n=this,r=[],i=0,o=function(o){n.options.transformFile.call(n,e[o],(function(n){r[o]=n,++i===e.length&&t(r)}))},a=0;a<e.length;a++)o(a)}},{key:"_addFormElementData",value:function(e){if("FORM"===this.element.tagName){var t,n=c(this.element.querySelectorAll("input, textarea, select, button"),!0);try{for(n.s();!(t=n.n()).done;){var r=t.value,i=r.getAttribute("name"),o=r.getAttribute("type");if(o&&(o=o.toLowerCase()),null!=i)if("SELECT"===r.tagName&&r.hasAttribute("multiple")){var a,u=c(r.options,!0);try{for(u.s();!(a=u.n()).done;){var s=a.value;s.selected&&e.append(i,s.value)}}catch(e){u.e(e)}finally{u.f()}}else(!o||"checkbox"!==o&&"radio"!==o||r.checked)&&e.append(i,r.value)}}catch(e){n.e(e)}finally{n.f()}}}},{key:"_updateFilesUploadProgress",value:function(e,t,n){if(e[0].upload.chunked){var r=e[0],i=this._getChunk(r,t);n?(i.progress=100*n.loaded/n.total,i.total=n.total,i.bytesSent=n.loaded):(i.progress=100,i.bytesSent=i.total),r.upload.progress=0,r.upload.total=0,r.upload.bytesSent=0;for(var o=0;o<r.upload.totalChunkCount;o++)r.upload.chunks[o]&&void 0!==r.upload.chunks[o].progress&&(r.upload.progress+=r.upload.chunks[o].progress,r.upload.total+=r.upload.chunks[o].total,r.upload.bytesSent+=r.upload.chunks[o].bytesSent);r.upload.progress=r.upload.progress/r.upload.totalChunkCount,this.emit("uploadprogress",r,r.upload.progress,r.upload.bytesSent)}else{var a,u=c(e,!0);try{for(u.s();!(a=u.n()).done;){var s=a.value;s.upload.total&&s.upload.bytesSent&&s.upload.bytesSent==s.upload.total||(n?(s.upload.progress=100*n.loaded/n.total,s.upload.total=n.total,s.upload.bytesSent=n.loaded):(s.upload.progress=100,s.upload.bytesSent=s.upload.total),this.emit("uploadprogress",s,s.upload.progress,s.upload.bytesSent))}}catch(e){u.e(e)}finally{u.f()}}}},{key:"_finishedUploading",value:function(e,t,n){var r;if(e[0].status!==i.CANCELED&&4===t.readyState){if("arraybuffer"!==t.responseType&&"blob"!==t.responseType&&(r=t.responseText,t.getResponseHeader("content-type")&&~t.getResponseHeader("content-type").indexOf("application/json")))try{r=JSON.parse(r)}catch(e){n=e,r="Invalid JSON response from server."}this._updateFilesUploadProgress(e,t),200<=t.status&&t.status<300?e[0].upload.chunked?e[0].upload.finishedChunkUpload(this._getChunk(e[0],t),r):this._finished(e,r,n):this._handleUploadError(e,t,r)}}},{key:"_handleUploadError",value:function(e,t,n){if(e[0].status!==i.CANCELED){if(e[0].upload.chunked&&this.options.retryChunks){var r=this._getChunk(e[0],t);if(r.retries++<this.options.retryChunksLimit)return void this._uploadData(e,[r.dataBlock]);console.warn("Retried this chunk too often. Giving up.")}this._errorProcessing(e,n||this.options.dictResponseError.replace("{{statusCode}}",t.status),t)}}},{key:"submitRequest",value:function(e,t,n){1==e.readyState?e.send(t):console.warn("Cannot send this request because the XMLHttpRequest.readyState is not OPENED.")}},{key:"_finished",value:function(e,t,n){var r,o=c(e,!0);try{for(o.s();!(r=o.n()).done;){var a=r.value;a.status=i.SUCCESS,this.emit("success",a,t,n),this.emit("complete",a)}}catch(e){o.e(e)}finally{o.f()}if(this.options.uploadMultiple&&(this.emit("successmultiple",e,t,n),this.emit("completemultiple",e)),this.options.autoProcessQueue)return this.processQueue()}},{key:"_errorProcessing",value:function(e,t,n){var r,o=c(e,!0);try{for(o.s();!(r=o.n()).done;){var a=r.value;a.status=i.ERROR,this.emit("error",a,t,n),this.emit("complete",a)}}catch(e){o.e(e)}finally{o.f()}if(this.options.uploadMultiple&&(this.emit("errormultiple",e,t,n),this.emit("completemultiple",e)),this.options.autoProcessQueue)return this.processQueue()}}],[{key:"initClass",value:function(){this.prototype.Emitter=o,this.prototype.events=["drop","dragstart","dragend","dragenter","dragover","dragleave","addedfile","addedfiles","removedfile","thumbnail","error","errormultiple","processing","processingmultiple","uploadprogress","totaluploadprogress","sending","sendingmultiple","success","successmultiple","canceled","canceledmultiple","complete","completemultiple","reset","maxfilesexceeded","maxfilesreached","queuecomplete"],this.prototype._thumbnailQueue=[],this.prototype._processingThumbnail=!1}},{key:"extend",value:function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];for(var i=0,o=n;i<o.length;i++){var a=o[i];for(var u in a){var s=a[u];e[u]=s}}return e}},{key:"uuidv4",value:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}))}}]),i}(o);b.initClass(),b.version="5.9.2",b.options={},b.optionsForElement=function(e){return e.getAttribute("id")?b.options[w(e.getAttribute("id"))]:void 0},b.instances=[],b.forElement=function(e){if("string"==typeof e&&(e=document.querySelector(e)),null==(null!=e?e.dropzone:void 0))throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.");return e.dropzone},b.autoDiscover=!0,b.discover=function(){var e;if(document.querySelectorAll)e=document.querySelectorAll(".dropzone");else{e=[];var t=function(t){return function(){var n,r=[],i=c(t,!0);try{for(i.s();!(n=i.n()).done;){var o=n.value;/(^| )dropzone($| )/.test(o.className)?r.push(e.push(o)):r.push(void 0)}}catch(e){i.e(e)}finally{i.f()}return r}()};t(document.getElementsByTagName("div")),t(document.getElementsByTagName("form"))}return function(){var t,n=[],r=c(e,!0);try{for(r.s();!(t=r.n()).done;){var i=t.value;!1!==b.optionsForElement(i)?n.push(new b(i)):n.push(void 0)}}catch(e){r.e(e)}finally{r.f()}return n}()},b.blockedBrowsers=[/opera.*(Macintosh|Windows Phone).*version\/12/i],b.isBrowserSupported=function(){var e=!0;if(window.File&&window.FileReader&&window.FileList&&window.Blob&&window.FormData&&document.querySelector)if("classList"in document.createElement("a")){void 0!==b.blacklistedBrowsers&&(b.blockedBrowsers=b.blacklistedBrowsers);var t,n=c(b.blockedBrowsers,!0);try{for(n.s();!(t=n.n()).done;)t.value.test(navigator.userAgent)&&(e=!1)}catch(e){n.e(e)}finally{n.f()}}else e=!1;else e=!1;return e},b.dataURItoBlob=function(e){for(var t=atob(e.split(",")[1]),n=e.split(",")[0].split(":")[1].split(";")[0],r=new ArrayBuffer(t.length),i=new Uint8Array(r),o=0,a=t.length,u=0<=a;u?o<=a:o>=a;u?o++:o--)i[o]=t.charCodeAt(o);return new Blob([r],{type:n})};var x=function(e,t){return e.filter((function(e){return e!==t})).map((function(e){return e}))},w=function(e){return e.replace(/[\-_](\w)/g,(function(e){return e.charAt(1).toUpperCase()}))};b.createElement=function(e){var t=document.createElement("div");return t.innerHTML=e,t.childNodes[0]},b.elementInside=function(e,t){if(e===t)return!0;for(;e=e.parentNode;)if(e===t)return!0;return!1},b.getElement=function(e,t){var n;if("string"==typeof e?n=document.querySelector(e):null!=e.nodeType&&(n=e),null==n)throw new Error("Invalid `".concat(t,"` option provided. Please provide a CSS selector or a plain HTML element."));return n},b.getElements=function(e,t){var n,r;if(e instanceof Array){r=[];try{var i,o=c(e,!0);try{for(o.s();!(i=o.n()).done;)n=i.value,r.push(this.getElement(n,t))}catch(e){o.e(e)}finally{o.f()}}catch(e){r=null}}else if("string"==typeof e){r=[];var a,u=c(document.querySelectorAll(e),!0);try{for(u.s();!(a=u.n()).done;)n=a.value,r.push(n)}catch(e){u.e(e)}finally{u.f()}}else null!=e.nodeType&&(r=[e]);if(null==r||!r.length)throw new Error("Invalid `".concat(t,"` option provided. Please provide a CSS selector, a plain HTML element or a list of those."));return r},b.confirm=function(e,t,n){return window.confirm(e)?t():null!=n?n():void 0},b.isValidFile=function(e,t){if(!t)return!0;t=t.split(",");var n,r=e.type,i=r.replace(/\/.*$/,""),o=c(t,!0);try{for(o.s();!(n=o.n()).done;){var a=n.value;if("."===(a=a.trim()).charAt(0)){if(-1!==e.name.toLowerCase().indexOf(a.toLowerCase(),e.name.length-a.length))return!0}else if(/\/\*$/.test(a)){if(i===a.replace(/\/.*$/,""))return!0}else if(r===a)return!0}}catch(e){o.e(e)}finally{o.f()}return!1},"undefined"!=typeof jQuery&&null!==jQuery&&(jQuery.fn.dropzone=function(e){return this.each((function(){return new b(this,e)}))}),b.ADDED="added",b.QUEUED="queued",b.ACCEPTED=b.QUEUED,b.UPLOADING="uploading",b.PROCESSING=b.UPLOADING,b.CANCELED="canceled",b.ERROR="error",b.SUCCESS="success";var E=function(e,t,n,r,i,o,a,u,s,l){var c=function(e){e.naturalWidth;var t=e.naturalHeight,n=document.createElement("canvas");n.width=1,n.height=t;var r=n.getContext("2d");r.drawImage(e,0,0);for(var i=r.getImageData(1,0,1,t).data,o=0,a=t,u=t;u>o;)0===i[4*(u-1)+3]?a=u:o=u,u=a+o>>1;var s=u/t;return 0===s?1:s}(t);return e.drawImage(t,n,r,i,o,a,u,s,l/c)},k=function(){function e(){p(this,e)}return d(e,null,[{key:"initClass",value:function(){this.KEY_STR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}},{key:"encode64",value:function(e){for(var t="",n=void 0,r=void 0,i="",o=void 0,a=void 0,u=void 0,s="",l=0;o=(n=e[l++])>>2,a=(3&n)<<4|(r=e[l++])>>4,u=(15&r)<<2|(i=e[l++])>>6,s=63&i,isNaN(r)?u=s=64:isNaN(i)&&(s=64),t=t+this.KEY_STR.charAt(o)+this.KEY_STR.charAt(a)+this.KEY_STR.charAt(u)+this.KEY_STR.charAt(s),n=r=i="",o=a=u=s="",l<e.length;);return t}},{key:"restore",value:function(e,t){if(!e.match("data:image/jpeg;base64,"))return t;var n=this.decode64(e.replace("data:image/jpeg;base64,","")),r=this.slice2Segments(n),i=this.exifManipulation(t,r);return"data:image/jpeg;base64,".concat(this.encode64(i))}},{key:"exifManipulation",value:function(e,t){var n=this.getExifArray(t),r=this.insertExif(e,n);return new Uint8Array(r)}},{key:"getExifArray",value:function(e){for(var t=void 0,n=0;n<e.length;){if(255===(t=e[n])[0]&225===t[1])return t;n++}return[]}},{key:"insertExif",value:function(e,t){var n=e.replace("data:image/jpeg;base64,",""),r=this.decode64(n),i=r.indexOf(255,3),o=r.slice(0,i),a=r.slice(i),u=o;return(u=u.concat(t)).concat(a)}},{key:"slice2Segments",value:function(e){for(var t=0,n=[];!(255===e[t]&218===e[t+1]);){if(255===e[t]&216===e[t+1])t+=2;else{var r=t+(256*e[t+2]+e[t+3])+2,i=e.slice(t,r);n.push(i),t=r}if(t>e.length)break}return n}},{key:"decode64",value:function(e){var t=void 0,n=void 0,r="",i=void 0,o=void 0,a="",u=0,s=[];for(/[^A-Za-z0-9\+\/\=]/g.exec(e)&&console.warn("There were invalid base64 characters in the input text.\nValid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\nExpect errors in decoding."),e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");t=this.KEY_STR.indexOf(e.charAt(u++))<<2|(i=this.KEY_STR.indexOf(e.charAt(u++)))>>4,n=(15&i)<<4|(o=this.KEY_STR.indexOf(e.charAt(u++)))>>2,r=(3&o)<<6|(a=this.KEY_STR.indexOf(e.charAt(u++))),s.push(t),64!==o&&s.push(n),64!==a&&s.push(r),t=n=r="",i=o=a="",u<e.length;);return s}}]),e}();k.initClass(),b._autoDiscoverFunction=function(){if(b.autoDiscover)return b.discover()},function(e,t){var n=!1,r=!0,i=e.document,o=i.documentElement,a=i.addEventListener?"addEventListener":"attachEvent",u=i.addEventListener?"removeEventListener":"detachEvent",s=i.addEventListener?"":"on",l=function r(o){if("readystatechange"!==o.type||"complete"===i.readyState)return("load"===o.type?e:i)[u](s+o.type,r,!1),!n&&(n=!0)?t.call(e,o.type||o):void 0};if("complete"!==i.readyState){if(i.createEventObject&&o.doScroll){try{r=!e.frameElement}catch(e){}r&&function e(){try{o.doScroll("left")}catch(t){return void setTimeout(e,50)}return l("poll")}()}i[a](s+"DOMContentLoaded",l,!1),i[a](s+"readystatechange",l,!1),e[a](s+"load",l,!1)}}(window,b._autoDiscoverFunction),window.Dropzone=b;var A=b}(),r}()})); | |
\ No newline at end of file |
@@ -0,0 +1,1994 @@ | ||
1 | +<?php | |
2 | + | |
3 | +# | |
4 | +# | |
5 | +# Parsedown | |
6 | +# http://parsedown.org | |
7 | +# | |
8 | +# (c) Emanuil Rusev | |
9 | +# http://erusev.com | |
10 | +# | |
11 | +# For the full license information, view the LICENSE file that was distributed | |
12 | +# with this source code. | |
13 | +# | |
14 | +# | |
15 | + | |
16 | +class Parsedown | |
17 | +{ | |
18 | + # ~ | |
19 | + | |
20 | + const version = '1.8.0-beta-7'; | |
21 | + | |
22 | + # ~ | |
23 | + | |
24 | + function text($text) | |
25 | + { | |
26 | + $Elements = $this->textElements($text); | |
27 | + | |
28 | + # convert to markup | |
29 | + $markup = $this->elements($Elements); | |
30 | + | |
31 | + # trim line breaks | |
32 | + $markup = trim($markup, "\n"); | |
33 | + | |
34 | + return $markup; | |
35 | + } | |
36 | + | |
37 | + protected function textElements($text) | |
38 | + { | |
39 | + # make sure no definitions are set | |
40 | + $this->DefinitionData = array(); | |
41 | + | |
42 | + # standardize line breaks | |
43 | + $text = str_replace(array("\r\n", "\r"), "\n", $text); | |
44 | + | |
45 | + # remove surrounding line breaks | |
46 | + $text = trim($text, "\n"); | |
47 | + | |
48 | + # split text into lines | |
49 | + $lines = explode("\n", $text); | |
50 | + | |
51 | + # iterate through lines to identify blocks | |
52 | + return $this->linesElements($lines); | |
53 | + } | |
54 | + | |
55 | + # | |
56 | + # Setters | |
57 | + # | |
58 | + | |
59 | + function setBreaksEnabled($breaksEnabled) | |
60 | + { | |
61 | + $this->breaksEnabled = $breaksEnabled; | |
62 | + | |
63 | + return $this; | |
64 | + } | |
65 | + | |
66 | + protected $breaksEnabled; | |
67 | + | |
68 | + function setMarkupEscaped($markupEscaped) | |
69 | + { | |
70 | + $this->markupEscaped = $markupEscaped; | |
71 | + | |
72 | + return $this; | |
73 | + } | |
74 | + | |
75 | + protected $markupEscaped; | |
76 | + | |
77 | + function setUrlsLinked($urlsLinked) | |
78 | + { | |
79 | + $this->urlsLinked = $urlsLinked; | |
80 | + | |
81 | + return $this; | |
82 | + } | |
83 | + | |
84 | + protected $urlsLinked = true; | |
85 | + | |
86 | + function setSafeMode($safeMode) | |
87 | + { | |
88 | + $this->safeMode = (bool) $safeMode; | |
89 | + | |
90 | + return $this; | |
91 | + } | |
92 | + | |
93 | + protected $safeMode; | |
94 | + | |
95 | + function setStrictMode($strictMode) | |
96 | + { | |
97 | + $this->strictMode = (bool) $strictMode; | |
98 | + | |
99 | + return $this; | |
100 | + } | |
101 | + | |
102 | + protected $strictMode; | |
103 | + | |
104 | + protected $safeLinksWhitelist = array( | |
105 | + 'http://', | |
106 | + 'https://', | |
107 | + 'ftp://', | |
108 | + 'ftps://', | |
109 | + 'mailto:', | |
110 | + 'tel:', | |
111 | + 'data:image/png;base64,', | |
112 | + 'data:image/gif;base64,', | |
113 | + 'data:image/jpeg;base64,', | |
114 | + 'irc:', | |
115 | + 'ircs:', | |
116 | + 'git:', | |
117 | + 'ssh:', | |
118 | + 'news:', | |
119 | + 'steam:', | |
120 | + ); | |
121 | + | |
122 | + # | |
123 | + # Lines | |
124 | + # | |
125 | + | |
126 | + protected $BlockTypes = array( | |
127 | + '#' => array('Header'), | |
128 | + '*' => array('Rule', 'List'), | |
129 | + '+' => array('List'), | |
130 | + '-' => array('SetextHeader', 'Table', 'Rule', 'List'), | |
131 | + '0' => array('List'), | |
132 | + '1' => array('List'), | |
133 | + '2' => array('List'), | |
134 | + '3' => array('List'), | |
135 | + '4' => array('List'), | |
136 | + '5' => array('List'), | |
137 | + '6' => array('List'), | |
138 | + '7' => array('List'), | |
139 | + '8' => array('List'), | |
140 | + '9' => array('List'), | |
141 | + ':' => array('Table'), | |
142 | + '<' => array('Comment', 'Markup'), | |
143 | + '=' => array('SetextHeader'), | |
144 | + '>' => array('Quote'), | |
145 | + '[' => array('Reference'), | |
146 | + '_' => array('Rule'), | |
147 | + '`' => array('FencedCode'), | |
148 | + '|' => array('Table'), | |
149 | + '~' => array('FencedCode'), | |
150 | + ); | |
151 | + | |
152 | + # ~ | |
153 | + | |
154 | + protected $unmarkedBlockTypes = array( | |
155 | + 'Code', | |
156 | + ); | |
157 | + | |
158 | + # | |
159 | + # Blocks | |
160 | + # | |
161 | + | |
162 | + protected function lines(array $lines) | |
163 | + { | |
164 | + return $this->elements($this->linesElements($lines)); | |
165 | + } | |
166 | + | |
167 | + protected function linesElements(array $lines) | |
168 | + { | |
169 | + $Elements = array(); | |
170 | + $CurrentBlock = null; | |
171 | + | |
172 | + foreach ($lines as $line) | |
173 | + { | |
174 | + if (chop($line) === '') | |
175 | + { | |
176 | + if (isset($CurrentBlock)) | |
177 | + { | |
178 | + $CurrentBlock['interrupted'] = (isset($CurrentBlock['interrupted']) | |
179 | + ? $CurrentBlock['interrupted'] + 1 : 1 | |
180 | + ); | |
181 | + } | |
182 | + | |
183 | + continue; | |
184 | + } | |
185 | + | |
186 | + while (($beforeTab = strstr($line, "\t", true)) !== false) | |
187 | + { | |
188 | + $shortage = 4 - mb_strlen($beforeTab, 'utf-8') % 4; | |
189 | + | |
190 | + $line = $beforeTab | |
191 | + . str_repeat(' ', $shortage) | |
192 | + . substr($line, strlen($beforeTab) + 1) | |
193 | + ; | |
194 | + } | |
195 | + | |
196 | + $indent = strspn($line, ' '); | |
197 | + | |
198 | + $text = $indent > 0 ? substr($line, $indent) : $line; | |
199 | + | |
200 | + # ~ | |
201 | + | |
202 | + $Line = array('body' => $line, 'indent' => $indent, 'text' => $text); | |
203 | + | |
204 | + # ~ | |
205 | + | |
206 | + if (isset($CurrentBlock['continuable'])) | |
207 | + { | |
208 | + $methodName = 'block' . $CurrentBlock['type'] . 'Continue'; | |
209 | + $Block = $this->$methodName($Line, $CurrentBlock); | |
210 | + | |
211 | + if (isset($Block)) | |
212 | + { | |
213 | + $CurrentBlock = $Block; | |
214 | + | |
215 | + continue; | |
216 | + } | |
217 | + else | |
218 | + { | |
219 | + if ($this->isBlockCompletable($CurrentBlock['type'])) | |
220 | + { | |
221 | + $methodName = 'block' . $CurrentBlock['type'] . 'Complete'; | |
222 | + $CurrentBlock = $this->$methodName($CurrentBlock); | |
223 | + } | |
224 | + } | |
225 | + } | |
226 | + | |
227 | + # ~ | |
228 | + | |
229 | + $marker = $text[0]; | |
230 | + | |
231 | + # ~ | |
232 | + | |
233 | + $blockTypes = $this->unmarkedBlockTypes; | |
234 | + | |
235 | + if (isset($this->BlockTypes[$marker])) | |
236 | + { | |
237 | + foreach ($this->BlockTypes[$marker] as $blockType) | |
238 | + { | |
239 | + $blockTypes []= $blockType; | |
240 | + } | |
241 | + } | |
242 | + | |
243 | + # | |
244 | + # ~ | |
245 | + | |
246 | + foreach ($blockTypes as $blockType) | |
247 | + { | |
248 | + $Block = $this->{"block$blockType"}($Line, $CurrentBlock); | |
249 | + | |
250 | + if (isset($Block)) | |
251 | + { | |
252 | + $Block['type'] = $blockType; | |
253 | + | |
254 | + if ( ! isset($Block['identified'])) | |
255 | + { | |
256 | + if (isset($CurrentBlock)) | |
257 | + { | |
258 | + $Elements[] = $this->extractElement($CurrentBlock); | |
259 | + } | |
260 | + | |
261 | + $Block['identified'] = true; | |
262 | + } | |
263 | + | |
264 | + if ($this->isBlockContinuable($blockType)) | |
265 | + { | |
266 | + $Block['continuable'] = true; | |
267 | + } | |
268 | + | |
269 | + $CurrentBlock = $Block; | |
270 | + | |
271 | + continue 2; | |
272 | + } | |
273 | + } | |
274 | + | |
275 | + # ~ | |
276 | + | |
277 | + if (isset($CurrentBlock) and $CurrentBlock['type'] === 'Paragraph') | |
278 | + { | |
279 | + $Block = $this->paragraphContinue($Line, $CurrentBlock); | |
280 | + } | |
281 | + | |
282 | + if (isset($Block)) | |
283 | + { | |
284 | + $CurrentBlock = $Block; | |
285 | + } | |
286 | + else | |
287 | + { | |
288 | + if (isset($CurrentBlock)) | |
289 | + { | |
290 | + $Elements[] = $this->extractElement($CurrentBlock); | |
291 | + } | |
292 | + | |
293 | + $CurrentBlock = $this->paragraph($Line); | |
294 | + | |
295 | + $CurrentBlock['identified'] = true; | |
296 | + } | |
297 | + } | |
298 | + | |
299 | + # ~ | |
300 | + | |
301 | + if (isset($CurrentBlock['continuable']) and $this->isBlockCompletable($CurrentBlock['type'])) | |
302 | + { | |
303 | + $methodName = 'block' . $CurrentBlock['type'] . 'Complete'; | |
304 | + $CurrentBlock = $this->$methodName($CurrentBlock); | |
305 | + } | |
306 | + | |
307 | + # ~ | |
308 | + | |
309 | + if (isset($CurrentBlock)) | |
310 | + { | |
311 | + $Elements[] = $this->extractElement($CurrentBlock); | |
312 | + } | |
313 | + | |
314 | + # ~ | |
315 | + | |
316 | + return $Elements; | |
317 | + } | |
318 | + | |
319 | + protected function extractElement(array $Component) | |
320 | + { | |
321 | + if ( ! isset($Component['element'])) | |
322 | + { | |
323 | + if (isset($Component['markup'])) | |
324 | + { | |
325 | + $Component['element'] = array('rawHtml' => $Component['markup']); | |
326 | + } | |
327 | + elseif (isset($Component['hidden'])) | |
328 | + { | |
329 | + $Component['element'] = array(); | |
330 | + } | |
331 | + } | |
332 | + | |
333 | + return $Component['element']; | |
334 | + } | |
335 | + | |
336 | + protected function isBlockContinuable($Type) | |
337 | + { | |
338 | + return method_exists($this, 'block' . $Type . 'Continue'); | |
339 | + } | |
340 | + | |
341 | + protected function isBlockCompletable($Type) | |
342 | + { | |
343 | + return method_exists($this, 'block' . $Type . 'Complete'); | |
344 | + } | |
345 | + | |
346 | + # | |
347 | + # Code | |
348 | + | |
349 | + protected function blockCode($Line, $Block = null) | |
350 | + { | |
351 | + if (isset($Block) and $Block['type'] === 'Paragraph' and ! isset($Block['interrupted'])) | |
352 | + { | |
353 | + return; | |
354 | + } | |
355 | + | |
356 | + if ($Line['indent'] >= 4) | |
357 | + { | |
358 | + $text = substr($Line['body'], 4); | |
359 | + | |
360 | + $Block = array( | |
361 | + 'element' => array( | |
362 | + 'name' => 'pre', | |
363 | + 'element' => array( | |
364 | + 'name' => 'code', | |
365 | + 'text' => $text, | |
366 | + ), | |
367 | + ), | |
368 | + ); | |
369 | + | |
370 | + return $Block; | |
371 | + } | |
372 | + } | |
373 | + | |
374 | + protected function blockCodeContinue($Line, $Block) | |
375 | + { | |
376 | + if ($Line['indent'] >= 4) | |
377 | + { | |
378 | + if (isset($Block['interrupted'])) | |
379 | + { | |
380 | + $Block['element']['element']['text'] .= str_repeat("\n", $Block['interrupted']); | |
381 | + | |
382 | + unset($Block['interrupted']); | |
383 | + } | |
384 | + | |
385 | + $Block['element']['element']['text'] .= "\n"; | |
386 | + | |
387 | + $text = substr($Line['body'], 4); | |
388 | + | |
389 | + $Block['element']['element']['text'] .= $text; | |
390 | + | |
391 | + return $Block; | |
392 | + } | |
393 | + } | |
394 | + | |
395 | + protected function blockCodeComplete($Block) | |
396 | + { | |
397 | + return $Block; | |
398 | + } | |
399 | + | |
400 | + # | |
401 | + # Comment | |
402 | + | |
403 | + protected function blockComment($Line) | |
404 | + { | |
405 | + if ($this->markupEscaped or $this->safeMode) | |
406 | + { | |
407 | + return; | |
408 | + } | |
409 | + | |
410 | + if (strpos($Line['text'], '<!--') === 0) | |
411 | + { | |
412 | + $Block = array( | |
413 | + 'element' => array( | |
414 | + 'rawHtml' => $Line['body'], | |
415 | + 'autobreak' => true, | |
416 | + ), | |
417 | + ); | |
418 | + | |
419 | + if (strpos($Line['text'], '-->') !== false) | |
420 | + { | |
421 | + $Block['closed'] = true; | |
422 | + } | |
423 | + | |
424 | + return $Block; | |
425 | + } | |
426 | + } | |
427 | + | |
428 | + protected function blockCommentContinue($Line, array $Block) | |
429 | + { | |
430 | + if (isset($Block['closed'])) | |
431 | + { | |
432 | + return; | |
433 | + } | |
434 | + | |
435 | + $Block['element']['rawHtml'] .= "\n" . $Line['body']; | |
436 | + | |
437 | + if (strpos($Line['text'], '-->') !== false) | |
438 | + { | |
439 | + $Block['closed'] = true; | |
440 | + } | |
441 | + | |
442 | + return $Block; | |
443 | + } | |
444 | + | |
445 | + # | |
446 | + # Fenced Code | |
447 | + | |
448 | + protected function blockFencedCode($Line) | |
449 | + { | |
450 | + $marker = $Line['text'][0]; | |
451 | + | |
452 | + $openerLength = strspn($Line['text'], $marker); | |
453 | + | |
454 | + if ($openerLength < 3) | |
455 | + { | |
456 | + return; | |
457 | + } | |
458 | + | |
459 | + $infostring = trim(substr($Line['text'], $openerLength), "\t "); | |
460 | + | |
461 | + if (strpos($infostring, '`') !== false) | |
462 | + { | |
463 | + return; | |
464 | + } | |
465 | + | |
466 | + $Element = array( | |
467 | + 'name' => 'code', | |
468 | + 'text' => '', | |
469 | + ); | |
470 | + | |
471 | + if ($infostring !== '') | |
472 | + { | |
473 | + /** | |
474 | + * https://www.w3.org/TR/2011/WD-html5-20110525/elements.html#classes | |
475 | + * Every HTML element may have a class attribute specified. | |
476 | + * The attribute, if specified, must have a value that is a set | |
477 | + * of space-separated tokens representing the various classes | |
478 | + * that the element belongs to. | |
479 | + * [...] | |
480 | + * The space characters, for the purposes of this specification, | |
481 | + * are U+0020 SPACE, U+0009 CHARACTER TABULATION (tab), | |
482 | + * U+000A LINE FEED (LF), U+000C FORM FEED (FF), and | |
483 | + * U+000D CARRIAGE RETURN (CR). | |
484 | + */ | |
485 | + $language = substr($infostring, 0, strcspn($infostring, " \t\n\f\r")); | |
486 | + | |
487 | + $Element['attributes'] = array('class' => "language-$language"); | |
488 | + } | |
489 | + | |
490 | + $Block = array( | |
491 | + 'char' => $marker, | |
492 | + 'openerLength' => $openerLength, | |
493 | + 'element' => array( | |
494 | + 'name' => 'pre', | |
495 | + 'element' => $Element, | |
496 | + ), | |
497 | + ); | |
498 | + | |
499 | + return $Block; | |
500 | + } | |
501 | + | |
502 | + protected function blockFencedCodeContinue($Line, $Block) | |
503 | + { | |
504 | + if (isset($Block['complete'])) | |
505 | + { | |
506 | + return; | |
507 | + } | |
508 | + | |
509 | + if (isset($Block['interrupted'])) | |
510 | + { | |
511 | + $Block['element']['element']['text'] .= str_repeat("\n", $Block['interrupted']); | |
512 | + | |
513 | + unset($Block['interrupted']); | |
514 | + } | |
515 | + | |
516 | + if (($len = strspn($Line['text'], $Block['char'])) >= $Block['openerLength'] | |
517 | + and chop(substr($Line['text'], $len), ' ') === '' | |
518 | + ) { | |
519 | + $Block['element']['element']['text'] = substr($Block['element']['element']['text'], 1); | |
520 | + | |
521 | + $Block['complete'] = true; | |
522 | + | |
523 | + return $Block; | |
524 | + } | |
525 | + | |
526 | + $Block['element']['element']['text'] .= "\n" . $Line['body']; | |
527 | + | |
528 | + return $Block; | |
529 | + } | |
530 | + | |
531 | + protected function blockFencedCodeComplete($Block) | |
532 | + { | |
533 | + return $Block; | |
534 | + } | |
535 | + | |
536 | + # | |
537 | + # Header | |
538 | + | |
539 | + protected function blockHeader($Line) | |
540 | + { | |
541 | + $level = strspn($Line['text'], '#'); | |
542 | + | |
543 | + if ($level > 6) | |
544 | + { | |
545 | + return; | |
546 | + } | |
547 | + | |
548 | + $text = trim($Line['text'], '#'); | |
549 | + | |
550 | + if ($this->strictMode and isset($text[0]) and $text[0] !== ' ') | |
551 | + { | |
552 | + return; | |
553 | + } | |
554 | + | |
555 | + $text = trim($text, ' '); | |
556 | + | |
557 | + $Block = array( | |
558 | + 'element' => array( | |
559 | + 'name' => 'h' . $level, | |
560 | + 'handler' => array( | |
561 | + 'function' => 'lineElements', | |
562 | + 'argument' => $text, | |
563 | + 'destination' => 'elements', | |
564 | + ) | |
565 | + ), | |
566 | + ); | |
567 | + | |
568 | + return $Block; | |
569 | + } | |
570 | + | |
571 | + # | |
572 | + # List | |
573 | + | |
574 | + protected function blockList($Line, array $CurrentBlock = null) | |
575 | + { | |
576 | + list($name, $pattern) = $Line['text'][0] <= '-' ? array('ul', '[*+-]') : array('ol', '[0-9]{1,9}+[.\)]'); | |
577 | + | |
578 | + if (preg_match('/^('.$pattern.'([ ]++|$))(.*+)/', $Line['text'], $matches)) | |
579 | + { | |
580 | + $contentIndent = strlen($matches[2]); | |
581 | + | |
582 | + if ($contentIndent >= 5) | |
583 | + { | |
584 | + $contentIndent -= 1; | |
585 | + $matches[1] = substr($matches[1], 0, -$contentIndent); | |
586 | + $matches[3] = str_repeat(' ', $contentIndent) . $matches[3]; | |
587 | + } | |
588 | + elseif ($contentIndent === 0) | |
589 | + { | |
590 | + $matches[1] .= ' '; | |
591 | + } | |
592 | + | |
593 | + $markerWithoutWhitespace = strstr($matches[1], ' ', true); | |
594 | + | |
595 | + $Block = array( | |
596 | + 'indent' => $Line['indent'], | |
597 | + 'pattern' => $pattern, | |
598 | + 'data' => array( | |
599 | + 'type' => $name, | |
600 | + 'marker' => $matches[1], | |
601 | + 'markerType' => ($name === 'ul' ? $markerWithoutWhitespace : substr($markerWithoutWhitespace, -1)), | |
602 | + ), | |
603 | + 'element' => array( | |
604 | + 'name' => $name, | |
605 | + 'elements' => array(), | |
606 | + ), | |
607 | + ); | |
608 | + $Block['data']['markerTypeRegex'] = preg_quote($Block['data']['markerType'], '/'); | |
609 | + | |
610 | + if ($name === 'ol') | |
611 | + { | |
612 | + $listStart = ltrim(strstr($matches[1], $Block['data']['markerType'], true), '0') ?: '0'; | |
613 | + | |
614 | + if ($listStart !== '1') | |
615 | + { | |
616 | + if ( | |
617 | + isset($CurrentBlock) | |
618 | + and $CurrentBlock['type'] === 'Paragraph' | |
619 | + and ! isset($CurrentBlock['interrupted']) | |
620 | + ) { | |
621 | + return; | |
622 | + } | |
623 | + | |
624 | + $Block['element']['attributes'] = array('start' => $listStart); | |
625 | + } | |
626 | + } | |
627 | + | |
628 | + $Block['li'] = array( | |
629 | + 'name' => 'li', | |
630 | + 'handler' => array( | |
631 | + 'function' => 'li', | |
632 | + 'argument' => !empty($matches[3]) ? array($matches[3]) : array(), | |
633 | + 'destination' => 'elements' | |
634 | + ) | |
635 | + ); | |
636 | + | |
637 | + $Block['element']['elements'] []= & $Block['li']; | |
638 | + | |
639 | + return $Block; | |
640 | + } | |
641 | + } | |
642 | + | |
643 | + protected function blockListContinue($Line, array $Block) | |
644 | + { | |
645 | + if (isset($Block['interrupted']) and empty($Block['li']['handler']['argument'])) | |
646 | + { | |
647 | + return null; | |
648 | + } | |
649 | + | |
650 | + $requiredIndent = ($Block['indent'] + strlen($Block['data']['marker'])); | |
651 | + | |
652 | + if ($Line['indent'] < $requiredIndent | |
653 | + and ( | |
654 | + ( | |
655 | + $Block['data']['type'] === 'ol' | |
656 | + and preg_match('/^[0-9]++'.$Block['data']['markerTypeRegex'].'(?:[ ]++(.*)|$)/', $Line['text'], $matches) | |
657 | + ) or ( | |
658 | + $Block['data']['type'] === 'ul' | |
659 | + and preg_match('/^'.$Block['data']['markerTypeRegex'].'(?:[ ]++(.*)|$)/', $Line['text'], $matches) | |
660 | + ) | |
661 | + ) | |
662 | + ) { | |
663 | + if (isset($Block['interrupted'])) | |
664 | + { | |
665 | + $Block['li']['handler']['argument'] []= ''; | |
666 | + | |
667 | + $Block['loose'] = true; | |
668 | + | |
669 | + unset($Block['interrupted']); | |
670 | + } | |
671 | + | |
672 | + unset($Block['li']); | |
673 | + | |
674 | + $text = isset($matches[1]) ? $matches[1] : ''; | |
675 | + | |
676 | + $Block['indent'] = $Line['indent']; | |
677 | + | |
678 | + $Block['li'] = array( | |
679 | + 'name' => 'li', | |
680 | + 'handler' => array( | |
681 | + 'function' => 'li', | |
682 | + 'argument' => array($text), | |
683 | + 'destination' => 'elements' | |
684 | + ) | |
685 | + ); | |
686 | + | |
687 | + $Block['element']['elements'] []= & $Block['li']; | |
688 | + | |
689 | + return $Block; | |
690 | + } | |
691 | + elseif ($Line['indent'] < $requiredIndent and $this->blockList($Line)) | |
692 | + { | |
693 | + return null; | |
694 | + } | |
695 | + | |
696 | + if ($Line['text'][0] === '[' and $this->blockReference($Line)) | |
697 | + { | |
698 | + return $Block; | |
699 | + } | |
700 | + | |
701 | + if ($Line['indent'] >= $requiredIndent) | |
702 | + { | |
703 | + if (isset($Block['interrupted'])) | |
704 | + { | |
705 | + $Block['li']['handler']['argument'] []= ''; | |
706 | + | |
707 | + $Block['loose'] = true; | |
708 | + | |
709 | + unset($Block['interrupted']); | |
710 | + } | |
711 | + | |
712 | + $text = substr($Line['body'], $requiredIndent); | |
713 | + | |
714 | + $Block['li']['handler']['argument'] []= $text; | |
715 | + | |
716 | + return $Block; | |
717 | + } | |
718 | + | |
719 | + if ( ! isset($Block['interrupted'])) | |
720 | + { | |
721 | + $text = preg_replace('/^[ ]{0,'.$requiredIndent.'}+/', '', $Line['body']); | |
722 | + | |
723 | + $Block['li']['handler']['argument'] []= $text; | |
724 | + | |
725 | + return $Block; | |
726 | + } | |
727 | + } | |
728 | + | |
729 | + protected function blockListComplete(array $Block) | |
730 | + { | |
731 | + if (isset($Block['loose'])) | |
732 | + { | |
733 | + foreach ($Block['element']['elements'] as &$li) | |
734 | + { | |
735 | + if (end($li['handler']['argument']) !== '') | |
736 | + { | |
737 | + $li['handler']['argument'] []= ''; | |
738 | + } | |
739 | + } | |
740 | + } | |
741 | + | |
742 | + return $Block; | |
743 | + } | |
744 | + | |
745 | + # | |
746 | + # Quote | |
747 | + | |
748 | + protected function blockQuote($Line) | |
749 | + { | |
750 | + if (preg_match('/^>[ ]?+(.*+)/', $Line['text'], $matches)) | |
751 | + { | |
752 | + $Block = array( | |
753 | + 'element' => array( | |
754 | + 'name' => 'blockquote', | |
755 | + 'handler' => array( | |
756 | + 'function' => 'linesElements', | |
757 | + 'argument' => (array) $matches[1], | |
758 | + 'destination' => 'elements', | |
759 | + ) | |
760 | + ), | |
761 | + ); | |
762 | + | |
763 | + return $Block; | |
764 | + } | |
765 | + } | |
766 | + | |
767 | + protected function blockQuoteContinue($Line, array $Block) | |
768 | + { | |
769 | + if (isset($Block['interrupted'])) | |
770 | + { | |
771 | + return; | |
772 | + } | |
773 | + | |
774 | + if ($Line['text'][0] === '>' and preg_match('/^>[ ]?+(.*+)/', $Line['text'], $matches)) | |
775 | + { | |
776 | + $Block['element']['handler']['argument'] []= $matches[1]; | |
777 | + | |
778 | + return $Block; | |
779 | + } | |
780 | + | |
781 | + if ( ! isset($Block['interrupted'])) | |
782 | + { | |
783 | + $Block['element']['handler']['argument'] []= $Line['text']; | |
784 | + | |
785 | + return $Block; | |
786 | + } | |
787 | + } | |
788 | + | |
789 | + # | |
790 | + # Rule | |
791 | + | |
792 | + protected function blockRule($Line) | |
793 | + { | |
794 | + $marker = $Line['text'][0]; | |
795 | + | |
796 | + if (substr_count($Line['text'], $marker) >= 3 and chop($Line['text'], " $marker") === '') | |
797 | + { | |
798 | + $Block = array( | |
799 | + 'element' => array( | |
800 | + 'name' => 'hr', | |
801 | + ), | |
802 | + ); | |
803 | + | |
804 | + return $Block; | |
805 | + } | |
806 | + } | |
807 | + | |
808 | + # | |
809 | + # Setext | |
810 | + | |
811 | + protected function blockSetextHeader($Line, array $Block = null) | |
812 | + { | |
813 | + if ( ! isset($Block) or $Block['type'] !== 'Paragraph' or isset($Block['interrupted'])) | |
814 | + { | |
815 | + return; | |
816 | + } | |
817 | + | |
818 | + if ($Line['indent'] < 4 and chop(chop($Line['text'], ' '), $Line['text'][0]) === '') | |
819 | + { | |
820 | + $Block['element']['name'] = $Line['text'][0] === '=' ? 'h1' : 'h2'; | |
821 | + | |
822 | + return $Block; | |
823 | + } | |
824 | + } | |
825 | + | |
826 | + # | |
827 | + # Markup | |
828 | + | |
829 | + protected function blockMarkup($Line) | |
830 | + { | |
831 | + if ($this->markupEscaped or $this->safeMode) | |
832 | + { | |
833 | + return; | |
834 | + } | |
835 | + | |
836 | + if (preg_match('/^<[\/]?+(\w*)(?:[ ]*+'.$this->regexHtmlAttribute.')*+[ ]*+(\/)?>/', $Line['text'], $matches)) | |
837 | + { | |
838 | + $element = strtolower($matches[1]); | |
839 | + | |
840 | + if (in_array($element, $this->textLevelElements)) | |
841 | + { | |
842 | + return; | |
843 | + } | |
844 | + | |
845 | + $Block = array( | |
846 | + 'name' => $matches[1], | |
847 | + 'element' => array( | |
848 | + 'rawHtml' => $Line['text'], | |
849 | + 'autobreak' => true, | |
850 | + ), | |
851 | + ); | |
852 | + | |
853 | + return $Block; | |
854 | + } | |
855 | + } | |
856 | + | |
857 | + protected function blockMarkupContinue($Line, array $Block) | |
858 | + { | |
859 | + if (isset($Block['closed']) or isset($Block['interrupted'])) | |
860 | + { | |
861 | + return; | |
862 | + } | |
863 | + | |
864 | + $Block['element']['rawHtml'] .= "\n" . $Line['body']; | |
865 | + | |
866 | + return $Block; | |
867 | + } | |
868 | + | |
869 | + # | |
870 | + # Reference | |
871 | + | |
872 | + protected function blockReference($Line) | |
873 | + { | |
874 | + if (strpos($Line['text'], ']') !== false | |
875 | + and preg_match('/^\[(.+?)\]:[ ]*+<?(\S+?)>?(?:[ ]+["\'(](.+)["\')])?[ ]*+$/', $Line['text'], $matches) | |
876 | + ) { | |
877 | + $id = strtolower($matches[1]); | |
878 | + | |
879 | + $Data = array( | |
880 | + 'url' => $matches[2], | |
881 | + 'title' => isset($matches[3]) ? $matches[3] : null, | |
882 | + ); | |
883 | + | |
884 | + $this->DefinitionData['Reference'][$id] = $Data; | |
885 | + | |
886 | + $Block = array( | |
887 | + 'element' => array(), | |
888 | + ); | |
889 | + | |
890 | + return $Block; | |
891 | + } | |
892 | + } | |
893 | + | |
894 | + # | |
895 | + # Table | |
896 | + | |
897 | + protected function blockTable($Line, array $Block = null) | |
898 | + { | |
899 | + if ( ! isset($Block) or $Block['type'] !== 'Paragraph' or isset($Block['interrupted'])) | |
900 | + { | |
901 | + return; | |
902 | + } | |
903 | + | |
904 | + if ( | |
905 | + strpos($Block['element']['handler']['argument'], '|') === false | |
906 | + and strpos($Line['text'], '|') === false | |
907 | + and strpos($Line['text'], ':') === false | |
908 | + or strpos($Block['element']['handler']['argument'], "\n") !== false | |
909 | + ) { | |
910 | + return; | |
911 | + } | |
912 | + | |
913 | + if (chop($Line['text'], ' -:|') !== '') | |
914 | + { | |
915 | + return; | |
916 | + } | |
917 | + | |
918 | + $alignments = array(); | |
919 | + | |
920 | + $divider = $Line['text']; | |
921 | + | |
922 | + $divider = trim($divider); | |
923 | + $divider = trim($divider, '|'); | |
924 | + | |
925 | + $dividerCells = explode('|', $divider); | |
926 | + | |
927 | + foreach ($dividerCells as $dividerCell) | |
928 | + { | |
929 | + $dividerCell = trim($dividerCell); | |
930 | + | |
931 | + if ($dividerCell === '') | |
932 | + { | |
933 | + return; | |
934 | + } | |
935 | + | |
936 | + $alignment = null; | |
937 | + | |
938 | + if ($dividerCell[0] === ':') | |
939 | + { | |
940 | + $alignment = 'left'; | |
941 | + } | |
942 | + | |
943 | + if (substr($dividerCell, - 1) === ':') | |
944 | + { | |
945 | + $alignment = $alignment === 'left' ? 'center' : 'right'; | |
946 | + } | |
947 | + | |
948 | + $alignments []= $alignment; | |
949 | + } | |
950 | + | |
951 | + # ~ | |
952 | + | |
953 | + $HeaderElements = array(); | |
954 | + | |
955 | + $header = $Block['element']['handler']['argument']; | |
956 | + | |
957 | + $header = trim($header); | |
958 | + $header = trim($header, '|'); | |
959 | + | |
960 | + $headerCells = explode('|', $header); | |
961 | + | |
962 | + if (count($headerCells) !== count($alignments)) | |
963 | + { | |
964 | + return; | |
965 | + } | |
966 | + | |
967 | + foreach ($headerCells as $index => $headerCell) | |
968 | + { | |
969 | + $headerCell = trim($headerCell); | |
970 | + | |
971 | + $HeaderElement = array( | |
972 | + 'name' => 'th', | |
973 | + 'handler' => array( | |
974 | + 'function' => 'lineElements', | |
975 | + 'argument' => $headerCell, | |
976 | + 'destination' => 'elements', | |
977 | + ) | |
978 | + ); | |
979 | + | |
980 | + if (isset($alignments[$index])) | |
981 | + { | |
982 | + $alignment = $alignments[$index]; | |
983 | + | |
984 | + $HeaderElement['attributes'] = array( | |
985 | + 'style' => "text-align: $alignment;", | |
986 | + ); | |
987 | + } | |
988 | + | |
989 | + $HeaderElements []= $HeaderElement; | |
990 | + } | |
991 | + | |
992 | + # ~ | |
993 | + | |
994 | + $Block = array( | |
995 | + 'alignments' => $alignments, | |
996 | + 'identified' => true, | |
997 | + 'element' => array( | |
998 | + 'name' => 'table', | |
999 | + 'elements' => array(), | |
1000 | + ), | |
1001 | + ); | |
1002 | + | |
1003 | + $Block['element']['elements'] []= array( | |
1004 | + 'name' => 'thead', | |
1005 | + ); | |
1006 | + | |
1007 | + $Block['element']['elements'] []= array( | |
1008 | + 'name' => 'tbody', | |
1009 | + 'elements' => array(), | |
1010 | + ); | |
1011 | + | |
1012 | + $Block['element']['elements'][0]['elements'] []= array( | |
1013 | + 'name' => 'tr', | |
1014 | + 'elements' => $HeaderElements, | |
1015 | + ); | |
1016 | + | |
1017 | + return $Block; | |
1018 | + } | |
1019 | + | |
1020 | + protected function blockTableContinue($Line, array $Block) | |
1021 | + { | |
1022 | + if (isset($Block['interrupted'])) | |
1023 | + { | |
1024 | + return; | |
1025 | + } | |
1026 | + | |
1027 | + if (count($Block['alignments']) === 1 or $Line['text'][0] === '|' or strpos($Line['text'], '|')) | |
1028 | + { | |
1029 | + $Elements = array(); | |
1030 | + | |
1031 | + $row = $Line['text']; | |
1032 | + | |
1033 | + $row = trim($row); | |
1034 | + $row = trim($row, '|'); | |
1035 | + | |
1036 | + preg_match_all('/(?:(\\\\[|])|[^|`]|`[^`]++`|`)++/', $row, $matches); | |
1037 | + | |
1038 | + $cells = array_slice($matches[0], 0, count($Block['alignments'])); | |
1039 | + | |
1040 | + foreach ($cells as $index => $cell) | |
1041 | + { | |
1042 | + $cell = trim($cell); | |
1043 | + | |
1044 | + $Element = array( | |
1045 | + 'name' => 'td', | |
1046 | + 'handler' => array( | |
1047 | + 'function' => 'lineElements', | |
1048 | + 'argument' => $cell, | |
1049 | + 'destination' => 'elements', | |
1050 | + ) | |
1051 | + ); | |
1052 | + | |
1053 | + if (isset($Block['alignments'][$index])) | |
1054 | + { | |
1055 | + $Element['attributes'] = array( | |
1056 | + 'style' => 'text-align: ' . $Block['alignments'][$index] . ';', | |
1057 | + ); | |
1058 | + } | |
1059 | + | |
1060 | + $Elements []= $Element; | |
1061 | + } | |
1062 | + | |
1063 | + $Element = array( | |
1064 | + 'name' => 'tr', | |
1065 | + 'elements' => $Elements, | |
1066 | + ); | |
1067 | + | |
1068 | + $Block['element']['elements'][1]['elements'] []= $Element; | |
1069 | + | |
1070 | + return $Block; | |
1071 | + } | |
1072 | + } | |
1073 | + | |
1074 | + # | |
1075 | + # ~ | |
1076 | + # | |
1077 | + | |
1078 | + protected function paragraph($Line) | |
1079 | + { | |
1080 | + return array( | |
1081 | + 'type' => 'Paragraph', | |
1082 | + 'element' => array( | |
1083 | + 'name' => 'p', | |
1084 | + 'handler' => array( | |
1085 | + 'function' => 'lineElements', | |
1086 | + 'argument' => $Line['text'], | |
1087 | + 'destination' => 'elements', | |
1088 | + ), | |
1089 | + ), | |
1090 | + ); | |
1091 | + } | |
1092 | + | |
1093 | + protected function paragraphContinue($Line, array $Block) | |
1094 | + { | |
1095 | + if (isset($Block['interrupted'])) | |
1096 | + { | |
1097 | + return; | |
1098 | + } | |
1099 | + | |
1100 | + $Block['element']['handler']['argument'] .= "\n".$Line['text']; | |
1101 | + | |
1102 | + return $Block; | |
1103 | + } | |
1104 | + | |
1105 | + # | |
1106 | + # Inline Elements | |
1107 | + # | |
1108 | + | |
1109 | + protected $InlineTypes = array( | |
1110 | + '!' => array('Image'), | |
1111 | + '&' => array('SpecialCharacter'), | |
1112 | + '*' => array('Emphasis'), | |
1113 | + ':' => array('Url'), | |
1114 | + '<' => array('UrlTag', 'EmailTag', 'Markup'), | |
1115 | + '[' => array('Link'), | |
1116 | + '_' => array('Emphasis'), | |
1117 | + '`' => array('Code'), | |
1118 | + '~' => array('Strikethrough'), | |
1119 | + '\\' => array('EscapeSequence'), | |
1120 | + ); | |
1121 | + | |
1122 | + # ~ | |
1123 | + | |
1124 | + protected $inlineMarkerList = '!*_&[:<`~\\'; | |
1125 | + | |
1126 | + # | |
1127 | + # ~ | |
1128 | + # | |
1129 | + | |
1130 | + public function line($text, $nonNestables = array()) | |
1131 | + { | |
1132 | + return $this->elements($this->lineElements($text, $nonNestables)); | |
1133 | + } | |
1134 | + | |
1135 | + protected function lineElements($text, $nonNestables = array()) | |
1136 | + { | |
1137 | + # standardize line breaks | |
1138 | + $text = str_replace(array("\r\n", "\r"), "\n", $text); | |
1139 | + | |
1140 | + $Elements = array(); | |
1141 | + | |
1142 | + $nonNestables = (empty($nonNestables) | |
1143 | + ? array() | |
1144 | + : array_combine($nonNestables, $nonNestables) | |
1145 | + ); | |
1146 | + | |
1147 | + # $excerpt is based on the first occurrence of a marker | |
1148 | + | |
1149 | + while ($excerpt = strpbrk($text, $this->inlineMarkerList)) | |
1150 | + { | |
1151 | + $marker = $excerpt[0]; | |
1152 | + | |
1153 | + $markerPosition = strlen($text) - strlen($excerpt); | |
1154 | + | |
1155 | + $Excerpt = array('text' => $excerpt, 'context' => $text); | |
1156 | + | |
1157 | + foreach ($this->InlineTypes[$marker] as $inlineType) | |
1158 | + { | |
1159 | + # check to see if the current inline type is nestable in the current context | |
1160 | + | |
1161 | + if (isset($nonNestables[$inlineType])) | |
1162 | + { | |
1163 | + continue; | |
1164 | + } | |
1165 | + | |
1166 | + $Inline = $this->{"inline$inlineType"}($Excerpt); | |
1167 | + | |
1168 | + if ( ! isset($Inline)) | |
1169 | + { | |
1170 | + continue; | |
1171 | + } | |
1172 | + | |
1173 | + # makes sure that the inline belongs to "our" marker | |
1174 | + | |
1175 | + if (isset($Inline['position']) and $Inline['position'] > $markerPosition) | |
1176 | + { | |
1177 | + continue; | |
1178 | + } | |
1179 | + | |
1180 | + # sets a default inline position | |
1181 | + | |
1182 | + if ( ! isset($Inline['position'])) | |
1183 | + { | |
1184 | + $Inline['position'] = $markerPosition; | |
1185 | + } | |
1186 | + | |
1187 | + # cause the new element to 'inherit' our non nestables | |
1188 | + | |
1189 | + | |
1190 | + $Inline['element']['nonNestables'] = isset($Inline['element']['nonNestables']) | |
1191 | + ? array_merge($Inline['element']['nonNestables'], $nonNestables) | |
1192 | + : $nonNestables | |
1193 | + ; | |
1194 | + | |
1195 | + # the text that comes before the inline | |
1196 | + $unmarkedText = substr($text, 0, $Inline['position']); | |
1197 | + | |
1198 | + # compile the unmarked text | |
1199 | + $InlineText = $this->inlineText($unmarkedText); | |
1200 | + $Elements[] = $InlineText['element']; | |
1201 | + | |
1202 | + # compile the inline | |
1203 | + $Elements[] = $this->extractElement($Inline); | |
1204 | + | |
1205 | + # remove the examined text | |
1206 | + $text = substr($text, $Inline['position'] + $Inline['extent']); | |
1207 | + | |
1208 | + continue 2; | |
1209 | + } | |
1210 | + | |
1211 | + # the marker does not belong to an inline | |
1212 | + | |
1213 | + $unmarkedText = substr($text, 0, $markerPosition + 1); | |
1214 | + | |
1215 | + $InlineText = $this->inlineText($unmarkedText); | |
1216 | + $Elements[] = $InlineText['element']; | |
1217 | + | |
1218 | + $text = substr($text, $markerPosition + 1); | |
1219 | + } | |
1220 | + | |
1221 | + $InlineText = $this->inlineText($text); | |
1222 | + $Elements[] = $InlineText['element']; | |
1223 | + | |
1224 | + foreach ($Elements as &$Element) | |
1225 | + { | |
1226 | + if ( ! isset($Element['autobreak'])) | |
1227 | + { | |
1228 | + $Element['autobreak'] = false; | |
1229 | + } | |
1230 | + } | |
1231 | + | |
1232 | + return $Elements; | |
1233 | + } | |
1234 | + | |
1235 | + # | |
1236 | + # ~ | |
1237 | + # | |
1238 | + | |
1239 | + protected function inlineText($text) | |
1240 | + { | |
1241 | + $Inline = array( | |
1242 | + 'extent' => strlen($text), | |
1243 | + 'element' => array(), | |
1244 | + ); | |
1245 | + | |
1246 | + $Inline['element']['elements'] = self::pregReplaceElements( | |
1247 | + $this->breaksEnabled ? '/[ ]*+\n/' : '/(?:[ ]*+\\\\|[ ]{2,}+)\n/', | |
1248 | + array( | |
1249 | + array('name' => 'br'), | |
1250 | + array('text' => "\n"), | |
1251 | + ), | |
1252 | + $text | |
1253 | + ); | |
1254 | + | |
1255 | + return $Inline; | |
1256 | + } | |
1257 | + | |
1258 | + protected function inlineCode($Excerpt) | |
1259 | + { | |
1260 | + $marker = $Excerpt['text'][0]; | |
1261 | + | |
1262 | + if (preg_match('/^(['.$marker.']++)[ ]*+(.+?)[ ]*+(?<!['.$marker.'])\1(?!'.$marker.')/s', $Excerpt['text'], $matches)) | |
1263 | + { | |
1264 | + $text = $matches[2]; | |
1265 | + $text = preg_replace('/[ ]*+\n/', ' ', $text); | |
1266 | + | |
1267 | + return array( | |
1268 | + 'extent' => strlen($matches[0]), | |
1269 | + 'element' => array( | |
1270 | + 'name' => 'code', | |
1271 | + 'text' => $text, | |
1272 | + ), | |
1273 | + ); | |
1274 | + } | |
1275 | + } | |
1276 | + | |
1277 | + protected function inlineEmailTag($Excerpt) | |
1278 | + { | |
1279 | + $hostnameLabel = '[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?'; | |
1280 | + | |
1281 | + $commonMarkEmail = '[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]++@' | |
1282 | + . $hostnameLabel . '(?:\.' . $hostnameLabel . ')*'; | |
1283 | + | |
1284 | + if (strpos($Excerpt['text'], '>') !== false | |
1285 | + and preg_match("/^<((mailto:)?$commonMarkEmail)>/i", $Excerpt['text'], $matches) | |
1286 | + ){ | |
1287 | + $url = $matches[1]; | |
1288 | + | |
1289 | + if ( ! isset($matches[2])) | |
1290 | + { | |
1291 | + $url = "mailto:$url"; | |
1292 | + } | |
1293 | + | |
1294 | + return array( | |
1295 | + 'extent' => strlen($matches[0]), | |
1296 | + 'element' => array( | |
1297 | + 'name' => 'a', | |
1298 | + 'text' => $matches[1], | |
1299 | + 'attributes' => array( | |
1300 | + 'href' => $url, | |
1301 | + ), | |
1302 | + ), | |
1303 | + ); | |
1304 | + } | |
1305 | + } | |
1306 | + | |
1307 | + protected function inlineEmphasis($Excerpt) | |
1308 | + { | |
1309 | + if ( ! isset($Excerpt['text'][1])) | |
1310 | + { | |
1311 | + return; | |
1312 | + } | |
1313 | + | |
1314 | + $marker = $Excerpt['text'][0]; | |
1315 | + | |
1316 | + if ($Excerpt['text'][1] === $marker and preg_match($this->StrongRegex[$marker], $Excerpt['text'], $matches)) | |
1317 | + { | |
1318 | + $emphasis = 'strong'; | |
1319 | + } | |
1320 | + elseif (preg_match($this->EmRegex[$marker], $Excerpt['text'], $matches)) | |
1321 | + { | |
1322 | + $emphasis = 'em'; | |
1323 | + } | |
1324 | + else | |
1325 | + { | |
1326 | + return; | |
1327 | + } | |
1328 | + | |
1329 | + return array( | |
1330 | + 'extent' => strlen($matches[0]), | |
1331 | + 'element' => array( | |
1332 | + 'name' => $emphasis, | |
1333 | + 'handler' => array( | |
1334 | + 'function' => 'lineElements', | |
1335 | + 'argument' => $matches[1], | |
1336 | + 'destination' => 'elements', | |
1337 | + ) | |
1338 | + ), | |
1339 | + ); | |
1340 | + } | |
1341 | + | |
1342 | + protected function inlineEscapeSequence($Excerpt) | |
1343 | + { | |
1344 | + if (isset($Excerpt['text'][1]) and in_array($Excerpt['text'][1], $this->specialCharacters)) | |
1345 | + { | |
1346 | + return array( | |
1347 | + 'element' => array('rawHtml' => $Excerpt['text'][1]), | |
1348 | + 'extent' => 2, | |
1349 | + ); | |
1350 | + } | |
1351 | + } | |
1352 | + | |
1353 | + protected function inlineImage($Excerpt) | |
1354 | + { | |
1355 | + if ( ! isset($Excerpt['text'][1]) or $Excerpt['text'][1] !== '[') | |
1356 | + { | |
1357 | + return; | |
1358 | + } | |
1359 | + | |
1360 | + $Excerpt['text']= substr($Excerpt['text'], 1); | |
1361 | + | |
1362 | + $Link = $this->inlineLink($Excerpt); | |
1363 | + | |
1364 | + if ($Link === null) | |
1365 | + { | |
1366 | + return; | |
1367 | + } | |
1368 | + | |
1369 | + $Inline = array( | |
1370 | + 'extent' => $Link['extent'] + 1, | |
1371 | + 'element' => array( | |
1372 | + 'name' => 'img', | |
1373 | + 'attributes' => array( | |
1374 | + 'src' => $Link['element']['attributes']['href'], | |
1375 | + 'alt' => $Link['element']['handler']['argument'], | |
1376 | + ), | |
1377 | + 'autobreak' => true, | |
1378 | + ), | |
1379 | + ); | |
1380 | + | |
1381 | + $Inline['element']['attributes'] += $Link['element']['attributes']; | |
1382 | + | |
1383 | + unset($Inline['element']['attributes']['href']); | |
1384 | + | |
1385 | + return $Inline; | |
1386 | + } | |
1387 | + | |
1388 | + protected function inlineLink($Excerpt) | |
1389 | + { | |
1390 | + $Element = array( | |
1391 | + 'name' => 'a', | |
1392 | + 'handler' => array( | |
1393 | + 'function' => 'lineElements', | |
1394 | + 'argument' => null, | |
1395 | + 'destination' => 'elements', | |
1396 | + ), | |
1397 | + 'nonNestables' => array('Url', 'Link'), | |
1398 | + 'attributes' => array( | |
1399 | + 'href' => null, | |
1400 | + 'title' => null, | |
1401 | + ), | |
1402 | + ); | |
1403 | + | |
1404 | + $extent = 0; | |
1405 | + | |
1406 | + $remainder = $Excerpt['text']; | |
1407 | + | |
1408 | + if (preg_match('/\[((?:[^][]++|(?R))*+)\]/', $remainder, $matches)) | |
1409 | + { | |
1410 | + $Element['handler']['argument'] = $matches[1]; | |
1411 | + | |
1412 | + $extent += strlen($matches[0]); | |
1413 | + | |
1414 | + $remainder = substr($remainder, $extent); | |
1415 | + } | |
1416 | + else | |
1417 | + { | |
1418 | + return; | |
1419 | + } | |
1420 | + | |
1421 | + if (preg_match('/^[(]\s*+((?:[^ ()]++|[(][^ )]+[)])++)(?:[ ]+("[^"]*+"|\'[^\']*+\'))?\s*+[)]/', $remainder, $matches)) | |
1422 | + { | |
1423 | + $Element['attributes']['href'] = $matches[1]; | |
1424 | + | |
1425 | + if (isset($matches[2])) | |
1426 | + { | |
1427 | + $Element['attributes']['title'] = substr($matches[2], 1, - 1); | |
1428 | + } | |
1429 | + | |
1430 | + $extent += strlen($matches[0]); | |
1431 | + } | |
1432 | + else | |
1433 | + { | |
1434 | + if (preg_match('/^\s*\[(.*?)\]/', $remainder, $matches)) | |
1435 | + { | |
1436 | + $definition = strlen($matches[1]) ? $matches[1] : $Element['handler']['argument']; | |
1437 | + $definition = strtolower($definition); | |
1438 | + | |
1439 | + $extent += strlen($matches[0]); | |
1440 | + } | |
1441 | + else | |
1442 | + { | |
1443 | + $definition = strtolower($Element['handler']['argument']); | |
1444 | + } | |
1445 | + | |
1446 | + if ( ! isset($this->DefinitionData['Reference'][$definition])) | |
1447 | + { | |
1448 | + return; | |
1449 | + } | |
1450 | + | |
1451 | + $Definition = $this->DefinitionData['Reference'][$definition]; | |
1452 | + | |
1453 | + $Element['attributes']['href'] = $Definition['url']; | |
1454 | + $Element['attributes']['title'] = $Definition['title']; | |
1455 | + } | |
1456 | + | |
1457 | + return array( | |
1458 | + 'extent' => $extent, | |
1459 | + 'element' => $Element, | |
1460 | + ); | |
1461 | + } | |
1462 | + | |
1463 | + protected function inlineMarkup($Excerpt) | |
1464 | + { | |
1465 | + if ($this->markupEscaped or $this->safeMode or strpos($Excerpt['text'], '>') === false) | |
1466 | + { | |
1467 | + return; | |
1468 | + } | |
1469 | + | |
1470 | + if ($Excerpt['text'][1] === '/' and preg_match('/^<\/\w[\w-]*+[ ]*+>/s', $Excerpt['text'], $matches)) | |
1471 | + { | |
1472 | + return array( | |
1473 | + 'element' => array('rawHtml' => $matches[0]), | |
1474 | + 'extent' => strlen($matches[0]), | |
1475 | + ); | |
1476 | + } | |
1477 | + | |
1478 | + if ($Excerpt['text'][1] === '!' and preg_match('/^<!---?[^>-](?:-?+[^-])*-->/s', $Excerpt['text'], $matches)) | |
1479 | + { | |
1480 | + return array( | |
1481 | + 'element' => array('rawHtml' => $matches[0]), | |
1482 | + 'extent' => strlen($matches[0]), | |
1483 | + ); | |
1484 | + } | |
1485 | + | |
1486 | + if ($Excerpt['text'][1] !== ' ' and preg_match('/^<\w[\w-]*+(?:[ ]*+'.$this->regexHtmlAttribute.')*+[ ]*+\/?>/s', $Excerpt['text'], $matches)) | |
1487 | + { | |
1488 | + return array( | |
1489 | + 'element' => array('rawHtml' => $matches[0]), | |
1490 | + 'extent' => strlen($matches[0]), | |
1491 | + ); | |
1492 | + } | |
1493 | + } | |
1494 | + | |
1495 | + protected function inlineSpecialCharacter($Excerpt) | |
1496 | + { | |
1497 | + if (substr($Excerpt['text'], 1, 1) !== ' ' and strpos($Excerpt['text'], ';') !== false | |
1498 | + and preg_match('/^&(#?+[0-9a-zA-Z]++);/', $Excerpt['text'], $matches) | |
1499 | + ) { | |
1500 | + return array( | |
1501 | + 'element' => array('rawHtml' => '&' . $matches[1] . ';'), | |
1502 | + 'extent' => strlen($matches[0]), | |
1503 | + ); | |
1504 | + } | |
1505 | + | |
1506 | + return; | |
1507 | + } | |
1508 | + | |
1509 | + protected function inlineStrikethrough($Excerpt) | |
1510 | + { | |
1511 | + if ( ! isset($Excerpt['text'][1])) | |
1512 | + { | |
1513 | + return; | |
1514 | + } | |
1515 | + | |
1516 | + if ($Excerpt['text'][1] === '~' and preg_match('/^~~(?=\S)(.+?)(?<=\S)~~/', $Excerpt['text'], $matches)) | |
1517 | + { | |
1518 | + return array( | |
1519 | + 'extent' => strlen($matches[0]), | |
1520 | + 'element' => array( | |
1521 | + 'name' => 'del', | |
1522 | + 'handler' => array( | |
1523 | + 'function' => 'lineElements', | |
1524 | + 'argument' => $matches[1], | |
1525 | + 'destination' => 'elements', | |
1526 | + ) | |
1527 | + ), | |
1528 | + ); | |
1529 | + } | |
1530 | + } | |
1531 | + | |
1532 | + protected function inlineUrl($Excerpt) | |
1533 | + { | |
1534 | + if ($this->urlsLinked !== true or ! isset($Excerpt['text'][2]) or $Excerpt['text'][2] !== '/') | |
1535 | + { | |
1536 | + return; | |
1537 | + } | |
1538 | + | |
1539 | + if (strpos($Excerpt['context'], 'http') !== false | |
1540 | + and preg_match('/\bhttps?+:[\/]{2}[^\s<]+\b\/*+/ui', $Excerpt['context'], $matches, PREG_OFFSET_CAPTURE) | |
1541 | + ) { | |
1542 | + $url = $matches[0][0]; | |
1543 | + | |
1544 | + $Inline = array( | |
1545 | + 'extent' => strlen($matches[0][0]), | |
1546 | + 'position' => $matches[0][1], | |
1547 | + 'element' => array( | |
1548 | + 'name' => 'a', | |
1549 | + 'text' => $url, | |
1550 | + 'attributes' => array( | |
1551 | + 'href' => $url, | |
1552 | + ), | |
1553 | + ), | |
1554 | + ); | |
1555 | + | |
1556 | + return $Inline; | |
1557 | + } | |
1558 | + } | |
1559 | + | |
1560 | + protected function inlineUrlTag($Excerpt) | |
1561 | + { | |
1562 | + if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<(\w++:\/{2}[^ >]++)>/i', $Excerpt['text'], $matches)) | |
1563 | + { | |
1564 | + $url = $matches[1]; | |
1565 | + | |
1566 | + return array( | |
1567 | + 'extent' => strlen($matches[0]), | |
1568 | + 'element' => array( | |
1569 | + 'name' => 'a', | |
1570 | + 'text' => $url, | |
1571 | + 'attributes' => array( | |
1572 | + 'href' => $url, | |
1573 | + ), | |
1574 | + ), | |
1575 | + ); | |
1576 | + } | |
1577 | + } | |
1578 | + | |
1579 | + # ~ | |
1580 | + | |
1581 | + protected function unmarkedText($text) | |
1582 | + { | |
1583 | + $Inline = $this->inlineText($text); | |
1584 | + return $this->element($Inline['element']); | |
1585 | + } | |
1586 | + | |
1587 | + # | |
1588 | + # Handlers | |
1589 | + # | |
1590 | + | |
1591 | + protected function handle(array $Element) | |
1592 | + { | |
1593 | + if (isset($Element['handler'])) | |
1594 | + { | |
1595 | + if (!isset($Element['nonNestables'])) | |
1596 | + { | |
1597 | + $Element['nonNestables'] = array(); | |
1598 | + } | |
1599 | + | |
1600 | + if (is_string($Element['handler'])) | |
1601 | + { | |
1602 | + $function = $Element['handler']; | |
1603 | + $argument = $Element['text']; | |
1604 | + unset($Element['text']); | |
1605 | + $destination = 'rawHtml'; | |
1606 | + } | |
1607 | + else | |
1608 | + { | |
1609 | + $function = $Element['handler']['function']; | |
1610 | + $argument = $Element['handler']['argument']; | |
1611 | + $destination = $Element['handler']['destination']; | |
1612 | + } | |
1613 | + | |
1614 | + $Element[$destination] = $this->{$function}($argument, $Element['nonNestables']); | |
1615 | + | |
1616 | + if ($destination === 'handler') | |
1617 | + { | |
1618 | + $Element = $this->handle($Element); | |
1619 | + } | |
1620 | + | |
1621 | + unset($Element['handler']); | |
1622 | + } | |
1623 | + | |
1624 | + return $Element; | |
1625 | + } | |
1626 | + | |
1627 | + protected function handleElementRecursive(array $Element) | |
1628 | + { | |
1629 | + return $this->elementApplyRecursive(array($this, 'handle'), $Element); | |
1630 | + } | |
1631 | + | |
1632 | + protected function handleElementsRecursive(array $Elements) | |
1633 | + { | |
1634 | + return $this->elementsApplyRecursive(array($this, 'handle'), $Elements); | |
1635 | + } | |
1636 | + | |
1637 | + protected function elementApplyRecursive($closure, array $Element) | |
1638 | + { | |
1639 | + $Element = call_user_func($closure, $Element); | |
1640 | + | |
1641 | + if (isset($Element['elements'])) | |
1642 | + { | |
1643 | + $Element['elements'] = $this->elementsApplyRecursive($closure, $Element['elements']); | |
1644 | + } | |
1645 | + elseif (isset($Element['element'])) | |
1646 | + { | |
1647 | + $Element['element'] = $this->elementApplyRecursive($closure, $Element['element']); | |
1648 | + } | |
1649 | + | |
1650 | + return $Element; | |
1651 | + } | |
1652 | + | |
1653 | + protected function elementApplyRecursiveDepthFirst($closure, array $Element) | |
1654 | + { | |
1655 | + if (isset($Element['elements'])) | |
1656 | + { | |
1657 | + $Element['elements'] = $this->elementsApplyRecursiveDepthFirst($closure, $Element['elements']); | |
1658 | + } | |
1659 | + elseif (isset($Element['element'])) | |
1660 | + { | |
1661 | + $Element['element'] = $this->elementsApplyRecursiveDepthFirst($closure, $Element['element']); | |
1662 | + } | |
1663 | + | |
1664 | + $Element = call_user_func($closure, $Element); | |
1665 | + | |
1666 | + return $Element; | |
1667 | + } | |
1668 | + | |
1669 | + protected function elementsApplyRecursive($closure, array $Elements) | |
1670 | + { | |
1671 | + foreach ($Elements as &$Element) | |
1672 | + { | |
1673 | + $Element = $this->elementApplyRecursive($closure, $Element); | |
1674 | + } | |
1675 | + | |
1676 | + return $Elements; | |
1677 | + } | |
1678 | + | |
1679 | + protected function elementsApplyRecursiveDepthFirst($closure, array $Elements) | |
1680 | + { | |
1681 | + foreach ($Elements as &$Element) | |
1682 | + { | |
1683 | + $Element = $this->elementApplyRecursiveDepthFirst($closure, $Element); | |
1684 | + } | |
1685 | + | |
1686 | + return $Elements; | |
1687 | + } | |
1688 | + | |
1689 | + protected function element(array $Element) | |
1690 | + { | |
1691 | + if ($this->safeMode) | |
1692 | + { | |
1693 | + $Element = $this->sanitiseElement($Element); | |
1694 | + } | |
1695 | + | |
1696 | + # identity map if element has no handler | |
1697 | + $Element = $this->handle($Element); | |
1698 | + | |
1699 | + $hasName = isset($Element['name']); | |
1700 | + | |
1701 | + $markup = ''; | |
1702 | + | |
1703 | + if ($hasName) | |
1704 | + { | |
1705 | + $markup .= '<' . $Element['name']; | |
1706 | + | |
1707 | + if (isset($Element['attributes'])) | |
1708 | + { | |
1709 | + foreach ($Element['attributes'] as $name => $value) | |
1710 | + { | |
1711 | + if ($value === null) | |
1712 | + { | |
1713 | + continue; | |
1714 | + } | |
1715 | + | |
1716 | + $markup .= " $name=\"".self::escape($value).'"'; | |
1717 | + } | |
1718 | + } | |
1719 | + } | |
1720 | + | |
1721 | + $permitRawHtml = false; | |
1722 | + | |
1723 | + if (isset($Element['text'])) | |
1724 | + { | |
1725 | + $text = $Element['text']; | |
1726 | + } | |
1727 | + // very strongly consider an alternative if you're writing an | |
1728 | + // extension | |
1729 | + elseif (isset($Element['rawHtml'])) | |
1730 | + { | |
1731 | + $text = $Element['rawHtml']; | |
1732 | + | |
1733 | + $allowRawHtmlInSafeMode = isset($Element['allowRawHtmlInSafeMode']) && $Element['allowRawHtmlInSafeMode']; | |
1734 | + $permitRawHtml = !$this->safeMode || $allowRawHtmlInSafeMode; | |
1735 | + } | |
1736 | + | |
1737 | + $hasContent = isset($text) || isset($Element['element']) || isset($Element['elements']); | |
1738 | + | |
1739 | + if ($hasContent) | |
1740 | + { | |
1741 | + $markup .= $hasName ? '>' : ''; | |
1742 | + | |
1743 | + if (isset($Element['elements'])) | |
1744 | + { | |
1745 | + $markup .= $this->elements($Element['elements']); | |
1746 | + } | |
1747 | + elseif (isset($Element['element'])) | |
1748 | + { | |
1749 | + $markup .= $this->element($Element['element']); | |
1750 | + } | |
1751 | + else | |
1752 | + { | |
1753 | + if (!$permitRawHtml) | |
1754 | + { | |
1755 | + $markup .= self::escape($text, true); | |
1756 | + } | |
1757 | + else | |
1758 | + { | |
1759 | + $markup .= $text; | |
1760 | + } | |
1761 | + } | |
1762 | + | |
1763 | + $markup .= $hasName ? '</' . $Element['name'] . '>' : ''; | |
1764 | + } | |
1765 | + elseif ($hasName) | |
1766 | + { | |
1767 | + $markup .= ' />'; | |
1768 | + } | |
1769 | + | |
1770 | + return $markup; | |
1771 | + } | |
1772 | + | |
1773 | + protected function elements(array $Elements) | |
1774 | + { | |
1775 | + $markup = ''; | |
1776 | + | |
1777 | + $autoBreak = true; | |
1778 | + | |
1779 | + foreach ($Elements as $Element) | |
1780 | + { | |
1781 | + if (empty($Element)) | |
1782 | + { | |
1783 | + continue; | |
1784 | + } | |
1785 | + | |
1786 | + $autoBreakNext = (isset($Element['autobreak']) | |
1787 | + ? $Element['autobreak'] : isset($Element['name']) | |
1788 | + ); | |
1789 | + // (autobreak === false) covers both sides of an element | |
1790 | + $autoBreak = !$autoBreak ? $autoBreak : $autoBreakNext; | |
1791 | + | |
1792 | + $markup .= ($autoBreak ? "\n" : '') . $this->element($Element); | |
1793 | + $autoBreak = $autoBreakNext; | |
1794 | + } | |
1795 | + | |
1796 | + $markup .= $autoBreak ? "\n" : ''; | |
1797 | + | |
1798 | + return $markup; | |
1799 | + } | |
1800 | + | |
1801 | + # ~ | |
1802 | + | |
1803 | + protected function li($lines) | |
1804 | + { | |
1805 | + $Elements = $this->linesElements($lines); | |
1806 | + | |
1807 | + if ( ! in_array('', $lines) | |
1808 | + and isset($Elements[0]) and isset($Elements[0]['name']) | |
1809 | + and $Elements[0]['name'] === 'p' | |
1810 | + ) { | |
1811 | + unset($Elements[0]['name']); | |
1812 | + } | |
1813 | + | |
1814 | + return $Elements; | |
1815 | + } | |
1816 | + | |
1817 | + # | |
1818 | + # AST Convenience | |
1819 | + # | |
1820 | + | |
1821 | + /** | |
1822 | + * Replace occurrences $regexp with $Elements in $text. Return an array of | |
1823 | + * elements representing the replacement. | |
1824 | + */ | |
1825 | + protected static function pregReplaceElements($regexp, $Elements, $text) | |
1826 | + { | |
1827 | + $newElements = array(); | |
1828 | + | |
1829 | + while (preg_match($regexp, $text, $matches, PREG_OFFSET_CAPTURE)) | |
1830 | + { | |
1831 | + $offset = $matches[0][1]; | |
1832 | + $before = substr($text, 0, $offset); | |
1833 | + $after = substr($text, $offset + strlen($matches[0][0])); | |
1834 | + | |
1835 | + $newElements[] = array('text' => $before); | |
1836 | + | |
1837 | + foreach ($Elements as $Element) | |
1838 | + { | |
1839 | + $newElements[] = $Element; | |
1840 | + } | |
1841 | + | |
1842 | + $text = $after; | |
1843 | + } | |
1844 | + | |
1845 | + $newElements[] = array('text' => $text); | |
1846 | + | |
1847 | + return $newElements; | |
1848 | + } | |
1849 | + | |
1850 | + # | |
1851 | + # Deprecated Methods | |
1852 | + # | |
1853 | + | |
1854 | + function parse($text) | |
1855 | + { | |
1856 | + $markup = $this->text($text); | |
1857 | + | |
1858 | + return $markup; | |
1859 | + } | |
1860 | + | |
1861 | + protected function sanitiseElement(array $Element) | |
1862 | + { | |
1863 | + static $goodAttribute = '/^[a-zA-Z0-9][a-zA-Z0-9-_]*+$/'; | |
1864 | + static $safeUrlNameToAtt = array( | |
1865 | + 'a' => 'href', | |
1866 | + 'img' => 'src', | |
1867 | + ); | |
1868 | + | |
1869 | + if ( ! isset($Element['name'])) | |
1870 | + { | |
1871 | + unset($Element['attributes']); | |
1872 | + return $Element; | |
1873 | + } | |
1874 | + | |
1875 | + if (isset($safeUrlNameToAtt[$Element['name']])) | |
1876 | + { | |
1877 | + $Element = $this->filterUnsafeUrlInAttribute($Element, $safeUrlNameToAtt[$Element['name']]); | |
1878 | + } | |
1879 | + | |
1880 | + if ( ! empty($Element['attributes'])) | |
1881 | + { | |
1882 | + foreach ($Element['attributes'] as $att => $val) | |
1883 | + { | |
1884 | + # filter out badly parsed attribute | |
1885 | + if ( ! preg_match($goodAttribute, $att)) | |
1886 | + { | |
1887 | + unset($Element['attributes'][$att]); | |
1888 | + } | |
1889 | + # dump onevent attribute | |
1890 | + elseif (self::striAtStart($att, 'on')) | |
1891 | + { | |
1892 | + unset($Element['attributes'][$att]); | |
1893 | + } | |
1894 | + } | |
1895 | + } | |
1896 | + | |
1897 | + return $Element; | |
1898 | + } | |
1899 | + | |
1900 | + protected function filterUnsafeUrlInAttribute(array $Element, $attribute) | |
1901 | + { | |
1902 | + foreach ($this->safeLinksWhitelist as $scheme) | |
1903 | + { | |
1904 | + if (self::striAtStart($Element['attributes'][$attribute], $scheme)) | |
1905 | + { | |
1906 | + return $Element; | |
1907 | + } | |
1908 | + } | |
1909 | + | |
1910 | + $Element['attributes'][$attribute] = str_replace(':', '%3A', $Element['attributes'][$attribute]); | |
1911 | + | |
1912 | + return $Element; | |
1913 | + } | |
1914 | + | |
1915 | + # | |
1916 | + # Static Methods | |
1917 | + # | |
1918 | + | |
1919 | + protected static function escape($text, $allowQuotes = false) | |
1920 | + { | |
1921 | + return htmlspecialchars($text, $allowQuotes ? ENT_NOQUOTES : ENT_QUOTES, 'UTF-8'); | |
1922 | + } | |
1923 | + | |
1924 | + protected static function striAtStart($string, $needle) | |
1925 | + { | |
1926 | + $len = strlen($needle); | |
1927 | + | |
1928 | + if ($len > strlen($string)) | |
1929 | + { | |
1930 | + return false; | |
1931 | + } | |
1932 | + else | |
1933 | + { | |
1934 | + return strtolower(substr($string, 0, $len)) === strtolower($needle); | |
1935 | + } | |
1936 | + } | |
1937 | + | |
1938 | + static function instance($name = 'default') | |
1939 | + { | |
1940 | + if (isset(self::$instances[$name])) | |
1941 | + { | |
1942 | + return self::$instances[$name]; | |
1943 | + } | |
1944 | + | |
1945 | + $instance = new static(); | |
1946 | + | |
1947 | + self::$instances[$name] = $instance; | |
1948 | + | |
1949 | + return $instance; | |
1950 | + } | |
1951 | + | |
1952 | + private static $instances = array(); | |
1953 | + | |
1954 | + # | |
1955 | + # Fields | |
1956 | + # | |
1957 | + | |
1958 | + protected $DefinitionData; | |
1959 | + | |
1960 | + # | |
1961 | + # Read-Only | |
1962 | + | |
1963 | + protected $specialCharacters = array( | |
1964 | + '\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '>', '#', '+', '-', '.', '!', '|', '~' | |
1965 | + ); | |
1966 | + | |
1967 | + protected $StrongRegex = array( | |
1968 | + '*' => '/^[*]{2}((?:\\\\\*|[^*]|[*][^*]*+[*])+?)[*]{2}(?![*])/s', | |
1969 | + '_' => '/^__((?:\\\\_|[^_]|_[^_]*+_)+?)__(?!_)/us', | |
1970 | + ); | |
1971 | + | |
1972 | + protected $EmRegex = array( | |
1973 | + '*' => '/^[*]((?:\\\\\*|[^*]|[*][*][^*]+?[*][*])+?)[*](?![*])/s', | |
1974 | + '_' => '/^_((?:\\\\_|[^_]|__[^_]*__)+?)_(?!_)\b/us', | |
1975 | + ); | |
1976 | + | |
1977 | + protected $regexHtmlAttribute = '[a-zA-Z_:][\w:.-]*+(?:\s*+=\s*+(?:[^"\'=<>`\s]+|"[^"]*+"|\'[^\']*+\'))?+'; | |
1978 | + | |
1979 | + protected $voidElements = array( | |
1980 | + 'area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source', | |
1981 | + ); | |
1982 | + | |
1983 | + protected $textLevelElements = array( | |
1984 | + 'a', 'br', 'bdo', 'abbr', 'blink', 'nextid', 'acronym', 'basefont', | |
1985 | + 'b', 'em', 'big', 'cite', 'small', 'spacer', 'listing', | |
1986 | + 'i', 'rp', 'del', 'code', 'strike', 'marquee', | |
1987 | + 'q', 'rt', 'ins', 'font', 'strong', | |
1988 | + 's', 'tt', 'kbd', 'mark', | |
1989 | + 'u', 'xm', 'sub', 'nobr', | |
1990 | + 'sup', 'ruby', | |
1991 | + 'var', 'span', | |
1992 | + 'wbr', 'time', | |
1993 | + ); | |
1994 | +} |
@@ -0,0 +1,31 @@ | ||
1 | + | |
2 | +****************************************************************************** | |
3 | +*** ptiblogphp history ******************************************************* | |
4 | +****************************************************************************** | |
5 | + | |
6 | +ver 20210708 | |
7 | + - articles and welcome message are filtered through a markdown processor | |
8 | + - welcome message is editable online | |
9 | + - authentication form features a cancel link | |
10 | + - UI can be easily localized through settings (defaults to english) | |
11 | + - format and language of timestamps are configurable | |
12 | + - configurable jpeg rescaling ($RESIZEJPG_MAXWIDTH and $RESIZEJPG_MAXHEIGHT) | |
13 | + - title string is properly htmlized (special characters escaped) | |
14 | + - configurable timezone ($MYTIMEZONE) | |
15 | + - upgraded dropzone.js from v5.7.0 to v5.9.2 | |
16 | + - improved css styling | |
17 | + | |
18 | +ver 20210627 | |
19 | + - improved readability of cursors on the photo slider | |
20 | + - authentication fails with an explicit message when no password is defined | |
21 | + - pagination bar is shown only when there are at least 2 pages | |
22 | + - pagination is reversed (most recent entries land on the last page) | |
23 | + - lots of css improvements | |
24 | + - replaced some strings by pictograms to ease future localizations | |
25 | + - articles are stored in text files under data directory, while the | |
26 | + per-article directories are used only for attachments now | |
27 | + MIGRATION NOTE: when migrating from ver 20210622, you have to move all | |
28 | + "data/$articleid/body.txt" files to "data/$articleid.txt" | |
29 | + | |
30 | +ver 20210622 "Summertime" | |
31 | + - first public release |
@@ -0,0 +1 @@ | ||
1 | +/* custom CSS - put here any ptiblogphp styles you'd like to overload */ |
@@ -0,0 +1,405 @@ | ||
1 | +<!DOCTYPE html> | |
2 | +<?php | |
3 | + | |
4 | +// | |
5 | +// ptiblogphp | |
6 | +// | |
7 | +// This is a simple blogging system, requires only standard PHP. All content | |
8 | +// is stored in filesystem (no database). | |
9 | +// | |
10 | +// Copyright (C) 2021 Mateusz Viste | |
11 | +// Published under the terms of the MIT license. | |
12 | +// | |
13 | + | |
14 | +$PVER = '20210708'; | |
15 | + | |
16 | +// preinit a few global settings with default values | |
17 | +$ENTRIES_PER_PAGE = 5; | |
18 | +$ADMINPASS = ''; | |
19 | +$ADMINLOGIN = ''; | |
20 | +$TITLE = "MISSING TITLE"; | |
21 | +$DATELOCALE = 'en_US'; | |
22 | +$TIMESTAMPFORMAT = 'written %A, %B %e, %Y at %H:%M'; | |
23 | +$MYTIMEZONE = ''; | |
24 | +$RESIZEJPG_MAXWIDTH = ''; | |
25 | +$RESIZEJPG_MAXHEIGHT = ''; | |
26 | +// lang | |
27 | +$LANG_USERNAME = 'username'; | |
28 | +$LANG_PASSWORD = 'password'; | |
29 | +$LANG_CANCEL = 'cancel'; | |
30 | +$LANG_SIGNIN = 'sign in'; | |
31 | +$LANG_SAVE = 'save'; | |
32 | +$LANG_AUTHERR = 'invalid authentication'; | |
33 | +$LANG_NEWENTRY = 'add a new entry'; | |
34 | +$LANG_TITLE = 'title'; | |
35 | +$LANG_MESSAGE = 'message'; | |
36 | +$LANG_FILESMGMT = 'Files management'; | |
37 | +$LANG_DROPFILESHERE = 'drop your files here'; | |
38 | +$LANG_REFRESH = 'refresh'; | |
39 | +$LANG_GOBACK = 'go back'; | |
40 | + | |
41 | +include 'settings.php'; | |
42 | +include 'Parsedown.php'; | |
43 | + | |
44 | +if (! empty($LANG)) { | |
45 | + echo '<html lang="' . $LANG . '">' . "\n"; | |
46 | +} else { | |
47 | + echo '<html>' . "\n"; | |
48 | +} | |
49 | +?> | |
50 | + <head> | |
51 | + <title><?php echo htmlentities($TITLE); ?></title> | |
52 | + <meta charset="UTF-8"> | |
53 | + <meta name="viewport" content="width=device-width, initial-scale=1"> | |
54 | + <meta name="generator" content="ptiblogphp/<?php echo $PVER; ?>"> | |
55 | + <link rel="stylesheet" type="text/css" href="style.css"> | |
56 | + <link rel="stylesheet" type="text/css" href="slide.css"> | |
57 | + <link rel="stylesheet" type="text/css" href="dropzone592/dropzone.min.css"> | |
58 | + <link rel="stylesheet" type="text/css" href="custom.css"> | |
59 | + </head> | |
60 | + | |
61 | + <body> | |
62 | + <div class="banner"> | |
63 | + <h1><?php echo htmlentities($TITLE); ?></h1> | |
64 | + </div> | |
65 | + | |
66 | + <?php | |
67 | + $isadmin = false; | |
68 | + | |
69 | + // funkcja ładująca listę artykułów | |
70 | + function LadujArtykuly() { | |
71 | + $r = array(); | |
72 | + $dirhandle = opendir('data'); | |
73 | + if (! $dirhandle) return($r); | |
74 | + while (($entry = readdir($dirhandle)) !== false) { | |
75 | + if ($entry[0] == '.') continue; // ignoruj ukryte pliki i katalogi oraz '.' i '..' | |
76 | + if (is_dir('data/' . $entry)) continue; // ignoruj katalogi | |
77 | + $r[] = pathinfo($entry, PATHINFO_FILENAME); | |
78 | + } | |
79 | + closedir($dirhandle); | |
80 | + arsort($r); // sortuj anty-alfanumerycznie | |
81 | + return($r); | |
82 | + } | |
83 | + | |
84 | + // ładuj listę plików z katalogu. Flaga: | |
85 | + // 0 = wszystkie pliki | |
86 | + // 1 = tylko zdjęcia | |
87 | + // 2 = tylko nie-zdjęcia | |
88 | + function ListaPlikow($artid, $flaga) { | |
89 | + $r = array(); | |
90 | + $katalog = 'data/' . $artid; | |
91 | + $dirhandle = opendir($katalog); | |
92 | + if (! $dirhandle) return($r); | |
93 | + while (($entry = readdir($dirhandle)) !== false) { | |
94 | + if ($entry[0] == '.') continue; // ignoruj ukryte pliki i katalogi oraz '.' i '..' | |
95 | + if (is_dir($katalog . '/' . $entry)) continue; // ignoruj katalogi | |
96 | + if (preg_match('/\.(jpg|jpeg|png)$/i', $entry)) { | |
97 | + if ($flaga != 2) $r[$entry] = true; | |
98 | + } else { // not a photo | |
99 | + if ($flaga != 1) $r[$entry] = false; | |
100 | + } | |
101 | + } | |
102 | + closedir($dirhandle); | |
103 | + ksort($r); // sortuj alfanumerycznie | |
104 | + return($r); | |
105 | + } | |
106 | + | |
107 | + function LadujPlikLinii($plik) { | |
108 | + $r = explode("\n", file_get_contents($plik), 2); | |
109 | + return($r); | |
110 | + } | |
111 | + | |
112 | + function PaginationLink($p, $lastp = 0) { | |
113 | + if (($p != $lastp) && ($p != 0)) return('./?p=' . $p); | |
114 | + return('./'); | |
115 | + } | |
116 | + | |
117 | + // zwraca tablicę z listą stron dla paska paginacji | |
118 | + // wartość 0 oznacza symbol '...' | |
119 | + function ListaStronDoPaginacji($p, $maxp) { | |
120 | + $r = array(); | |
121 | + if ($p == 0) $p = $maxp; // p=0 znaczy "ostatnia strona" | |
122 | + $pierwsza = $p - 3; | |
123 | + $ostatnia = $p + 3; | |
124 | + while ($pierwsza < 1) { | |
125 | + $pierwsza++; | |
126 | + $ostatnia++; | |
127 | + } | |
128 | + while ($ostatnia > $maxp) { | |
129 | + $ostatnia--; | |
130 | + if ($pierwsza > 1) $pierwsza--; | |
131 | + } | |
132 | + // dodaj pierwszą stronę oraz symbol '...' jeśli potrzeba | |
133 | + if ($pierwsza > 1) { | |
134 | + $r[] = 1; | |
135 | + $r[] = 0; | |
136 | + } else { | |
137 | + $r[] = $pierwsza; | |
138 | + } | |
139 | + // dodaj wszystkie 'środkowe' wartości | |
140 | + for ($pp = $pierwsza + 1; $pp < $ostatnia; $pp++) $r[] = $pp; | |
141 | + // dodaj ostatnią wartość, ew. poprzedzoną symbolem '...' | |
142 | + if ($ostatnia < $maxp) { | |
143 | + $r[] = 0; | |
144 | + $r[] = $maxp; | |
145 | + } else if ($ostatnia != $pierwsza) { | |
146 | + $r[] = $ostatnia; | |
147 | + } | |
148 | + | |
149 | + // jeśli tylko jedna strona to daj se spokój | |
150 | + if (count($r) < 2) $r = array(); | |
151 | + | |
152 | + return(array_reverse($r)); | |
153 | + } | |
154 | + | |
155 | + function markdownoutput($md) { | |
156 | + $Parsedown = new Parsedown(); | |
157 | + $Parsedown->setBreaksEnabled(true); | |
158 | + echo $Parsedown->text($md) . "\n"; | |
159 | + } | |
160 | + | |
161 | + // ustaw locale dla generowania dat | |
162 | + setlocale(LC_TIME, $DATELOCALE); | |
163 | + | |
164 | + // strefa czasowa dla obliczania lokalnych dat i godzin | |
165 | + if (!empty($MYTIMEZONE)) date_default_timezone_set($MYTIMEZONE); | |
166 | + | |
167 | + // czytaj zmienne przekazane via get | |
168 | + $p = 0; | |
169 | + $action = ""; | |
170 | + $artid = ""; | |
171 | + if (!empty($_GET['p'])) $p = intval($_GET['p']); | |
172 | + if (!empty($_GET['action'])) $action = $_GET['action']; | |
173 | + if (!empty($_GET['artid'])) $artid = $_GET['artid']; | |
174 | + if (!empty($_GET['zdjid'])) $zdjid = $_GET['zdjid']; | |
175 | + | |
176 | + // nadpisz zmienne jeśli dostalismy operację POST | |
177 | + if (!empty($_POST['p'])) $p = intval($_POST['p']); | |
178 | + if (!empty($_POST['action'])) $action = $_POST['action']; | |
179 | + if (!empty($_POST['artid'])) $artid = $_POST['artid']; | |
180 | + | |
181 | + // inicjalizacja sesji | |
182 | + session_set_cookie_params(3600 * 24 * 365); // set auth cookie lifetime to 1 year | |
183 | + session_start(); | |
184 | + | |
185 | + // czy dostałem hasło? jeśli tak, sprawdź czy cokolwiek warte | |
186 | + if ((isset($_POST['password'])) && (isset($_POST['login']))) { | |
187 | + if ((!empty($ADMINPASS)) && ($_POST['login'] === $ADMINLOGIN) && ($_POST['password'] === $ADMINPASS)) { | |
188 | + $_SESSION['login'] = $_POST['login']; | |
189 | + } else { | |
190 | + echo '<p class="autherr">' . htmlentities($LANG_AUTHERR) . '</p>' . "\n"; | |
191 | + } | |
192 | + } | |
193 | + | |
194 | + // prośba o logout? | |
195 | + if ($action === 'logout') { | |
196 | + session_destroy(); | |
197 | + unset($_SESSION); | |
198 | + $action = ''; | |
199 | + } | |
200 | + | |
201 | + // admin? | |
202 | + if ($_SESSION['login'] === $ADMINLOGIN) $isadmin = true; | |
203 | + | |
204 | + if (isset($_SESSION['login'])) { | |
205 | + echo "<p class=\"bonjour\">{$_SESSION['login']} <a href=\"./?action=logout&p={$p}\"><img src=\"svg/padlockopen.svg\"></a></p>\n"; | |
206 | + } else { | |
207 | + echo "<p class=\"bonjour\"><a href=\"./?action=login&p={$p}\"><img src=\"svg/padlockclosed.svg\"></a></p>\n"; | |
208 | + } | |
209 | + | |
210 | + echo '<div class="zawartosc">' . "\n"; | |
211 | + | |
212 | + // wyświetl błąd jeśli nie-admin coś kombinuje | |
213 | + if (! $isadmin) { | |
214 | + if (($action === 'nowywpis') || ($action === 'dodajwpis')) { | |
215 | + echo '<p class="autherr">' . htmlentities($LANG_AUTHERR) . '</p>' . "\n"; | |
216 | + $action = ''; | |
217 | + } | |
218 | + } | |
219 | + | |
220 | + // dodanie nowego wpisu? (albo edycja istniejącego) | |
221 | + if (($isadmin) && ($action === 'dodajwpis')) { | |
222 | + if (empty($artid)) $artid = time(); // notka: date_default_timezone_set() nie ma wpływu na time(), ten zawsze zwraca timestamp UTC (unix epoch) | |
223 | + if ($artid < 0) { | |
224 | + $dh = fopen('welcome.txt', 'w'); | |
225 | + fwrite($dh, trim($_POST['artbody'])); | |
226 | + fclose($dh); | |
227 | + } else { | |
228 | + $artfile = 'data/' . $artid . '.txt'; | |
229 | + if (!is_dir('data')) { | |
230 | + if (!mkdir('data')) echo "<!-- mkdir(data) error! -->\n"; // stwórz katalog danych jeśli jeszcze nie istnieje | |
231 | + } | |
232 | + $dh = fopen($artfile, 'w'); | |
233 | + fwrite($dh, trim($_POST['arttit'])); | |
234 | + fwrite($dh, "\n"); | |
235 | + fwrite($dh, trim($_POST['artbody'])); | |
236 | + fclose($dh); | |
237 | + // empty art? (delete) | |
238 | + if (empty(trim($_POST['arttit'])) && empty(trim($_POST['artbody'])) && empty(ListaPlikow($artid, 0))) { | |
239 | + unlink("data/{$artid}.txt"); | |
240 | + if (is_dir("data/{$artid}")) rmdir("data/{$artid}"); | |
241 | + } | |
242 | + } | |
243 | + $action = ''; | |
244 | + } | |
245 | + | |
246 | + if (($p == 0) && (empty($action))) { | |
247 | + if ($isadmin) { | |
248 | + echo "<p class=\"admintool\"><a href=\"./?action=nowywpis&artid=-1&p={$p}\"><img src=\"svg/edit.svg\"></a></p>\n"; | |
249 | + } | |
250 | + markdownoutput(file_get_contents('welcome.txt')); | |
251 | + } else if (($action === 'nowywpis') && (empty($artid))) { | |
252 | + echo '<p>' . htmlentities($LANG_NEWENTRY) . "</p>\n"; | |
253 | + } else if ($action === 'login') { | |
254 | + echo '<div class="authbox">' . "\n"; | |
255 | + echo '<div class="authimg"><img src="svg/padlockclosed.svg"></div>' . "\n"; | |
256 | + echo '<div class="auth">' . "\n"; | |
257 | + echo '<form action="' . PaginationLink($p) . '" method="post" class="auth">' . "\n"; | |
258 | + echo '<div class="authcred">' . "\n"; | |
259 | + echo '<input type="text" name="login" id="login" placeholder="' . htmlentities($LANG_USERNAME) . '"><br>' . "\n"; | |
260 | + echo '<input type="password" name="password" id="password" placeholder="' . htmlentities($LANG_PASSWORD) . '"><br>' . "\n"; | |
261 | + echo "</div>\n"; | |
262 | + echo '<div class="buttons"><div><a href="' . PaginationLink($p) . '">' . htmlentities($LANG_CANCEL) . '</a></div><div><input type="submit" value="' . htmlentities($LANG_SIGNIN) . '"></div></div>' . "\n"; | |
263 | + echo "</form>\n"; | |
264 | + echo "</div>\n"; | |
265 | + echo "</div>\n"; | |
266 | + goto BOTTOM; | |
267 | + } | |
268 | + | |
269 | + // załaduj skrypt simpleSlider carousel: https://github.com/michu2k/SimpleSlider | |
270 | + echo '<script src="SimpleSlider-v.1.9.0/dist/simpleSlider.min.js"></script>' . "\n"; | |
271 | + | |
272 | + // akcje adminowe | |
273 | + if (($isadmin) && ($action === 'usunzdjecie')) { | |
274 | + unlink("data/{$artid}/" . urldecode($zdjid)); | |
275 | + if (empty(ListaPlikow($artid, 0))) rmdir('data/' . $artid); // usuń katalog jeśli już nic w nim nie ma | |
276 | + $action = 'zdjecia'; | |
277 | + } | |
278 | + | |
279 | + if (($isadmin) && ($action === 'nowywpis')) { // nowy wpis | |
280 | + $art_title = ''; | |
281 | + $art_body = ''; | |
282 | + if (! empty($artid)) { // edycja istniejącego wpisu | |
283 | + if ($artid < 0) { | |
284 | + $art_body = file_get_contents('welcome.txt'); | |
285 | + } else { | |
286 | + $plik = LadujPlikLinii("data/{$artid}.txt"); | |
287 | + $art_title = $plik[0]; | |
288 | + $art_body = $plik[1]; | |
289 | + } | |
290 | + } | |
291 | + echo '<form action="' . PaginationLink($p, -1) . '" method="post" class="nowywpis">' . "\n"; | |
292 | + echo "<div class=\"nowywpis\">\n"; | |
293 | + if (! empty($artid)) { | |
294 | + echo '<input type="hidden" id="artid" name="artid" value="' . $artid . '">' . "\n"; | |
295 | + } | |
296 | + echo '<input type="hidden" id="action" name="action" value="dodajwpis">' . "\n"; | |
297 | + if ($artid >= 0) { | |
298 | + echo '<p>' . htmlentities($LANG_TITLE) . "</p>\n"; | |
299 | + echo '<input type="text" id="arttit" name="arttit" value="' . htmlentities($art_title) . '">' . "\n"; | |
300 | + echo '<p>' . htmlentities($LANG_MESSAGE) . "</p>\n"; | |
301 | + } | |
302 | + echo '<textarea name="artbody" id="artbody" rows="20">' . "\n"; | |
303 | + echo htmlentities($art_body); | |
304 | + echo "</textarea>\n"; | |
305 | + echo "</div>\n"; | |
306 | + echo '<p style="text-align: center;"><a href="' . PaginationLink($p, -1) . '">' . htmlentities($LANG_CANCEL) . '</a> <input type="submit" value="' . htmlentities($LANG_SAVE) . '" style="width: auto;"></p>' . "\n"; | |
307 | + echo "</form>\n"; | |
308 | + goto BOTTOM; | |
309 | + } else if (($isadmin) && ($action === 'zdjecia') && (! empty($artid))) { // zarządzanie zdjęciami | |
310 | + echo '<p>' . htmlentities($LANG_FILESMGMT) . "</p>\n"; | |
311 | + echo '<form action="./?artid=' . $artid . '&action=uploadzdjecie" class="dropzone" id="formularzdropzone"></form>' . "\n"; | |
312 | + echo '<p class="admintool" style="text-align: center;"><a href="./?artid=' . $artid . '&action=zdjecia&p=' . $p . '">' . htmlentities($LANG_REFRESH) . '</a> <a href="' . PaginationLink($p, -1) . '">' . htmlentities($LANG_GOBACK) . '</a></p>' . "\n"; | |
313 | + echo '<script src="./dropzone592/dropzone.min.js"></script>' . "\n"; | |
314 | + echo '<script>Dropzone.options.formularzdropzone = {'; | |
315 | + if (!empty($RESIZEJPG_MAXWIDTH)) echo 'resizeWidth: ' . intval($RESIZEJPG_MAXWIDTH) . ', '; | |
316 | + if (!empty($RESIZEJPG_MAXHEIGHT)) echo 'resizeHeight: ' . intval($RESIZEJPG_MAXHEIGHT) . ', '; | |
317 | + echo 'dictDefaultMessage: "' . $LANG_DROPFILESHERE . '"};</script>' . "\n"; | |
318 | + $lista_plikow = ListaPlikow($artid, 0); | |
319 | + foreach ($lista_plikow as $zd => $flaga_zdj) { | |
320 | + $icon = 'svg/file.svg'; | |
321 | + if ($flaga_zdj) $icon = "data/{$artid}/" . rawurlencode($zd); | |
322 | + echo "<div class=\"managezd\"><div class=\"thumbcontainer\" style=\"background-image: url('{$icon}');\"></div><p>" . htmlentities($zd) . '</p><p>' . round(filesize("data/{$artid}/{$zd}") / 1024) . " KiB <a href=\"./?artid={$artid}&action=usunzdjecie&zdjid=" . rawurlencode($zd) . "\"><img src=\"svg/trash.svg\" style=\"height: 1em; width: auto;\"></a></p></div>\n"; | |
323 | + } | |
324 | + goto BOTTOM; | |
325 | + } else if (($isadmin) && ($action === 'uploadzdjecie')) { // dropzone upload zdjęcia | |
326 | + //$fh = fopen('log.txt', 'a'); | |
327 | + //fwrite($fh, "--- UPLOAD ---\n"); | |
328 | + if (!is_dir("data/{$artid}")) mkdir("data/{$artid}"); | |
329 | + foreach ($_FILES as $fname) { | |
330 | + // fwrite($fh, $fname['name'] . "\n"); | |
331 | + move_uploaded_file($fname['tmp_name'], "data/{$artid}/{$fname['name']}"); | |
332 | + } | |
333 | + //fclose($fh); | |
334 | + } else if (($isadmin) && ($p == 0)) { // nic szczególnego | |
335 | + echo "<p class=\"admintool\"><a href=\"./?action=nowywpis\">" . htmlentities($LANG_NEWENTRY) . "</a></p>\n"; | |
336 | + } | |
337 | + | |
338 | + // wylistuj dostępne artykuły | |
339 | + $arty = LadujArtykuly(); | |
340 | + $liczbastron = intval((count($arty) / $ENTRIES_PER_PAGE) + 0.9); | |
341 | + if ($liczbastron < 1) $liczbastron = 1; | |
342 | + if ($p > 0) array_splice($arty, 0, ($liczbastron - $p) * $ENTRIES_PER_PAGE); // usuń nieinteresujące wpisy PRZED | |
343 | + array_splice($arty, $ENTRIES_PER_PAGE); // zostaw odpowiednią ilość wpisów do wyświetlenia | |
344 | + $licznik = 0; | |
345 | + | |
346 | + foreach ($arty as $art) { | |
347 | + $licznik++; | |
348 | + $artcontent = LadujPlikLinii("data/{$art}.txt"); | |
349 | + echo "<div class=\"blogentry\">\n"; | |
350 | + if ($isadmin) { | |
351 | + echo "<p class=\"admintool\"><a href=\"./?action=nowywpis&artid={$art}&p={$p}\"><img src=\"svg/edit.svg\"></a></p>\n"; | |
352 | + } | |
353 | + echo "<h2>{$artcontent[0]}</h2>\n"; | |
354 | + echo '<h3>' . strftime($TIMESTAMPFORMAT, $art) . "</h3>\n"; | |
355 | + markdownoutput($artcontent[1]); | |
356 | + // mamy jakieś załączniki? (nie zdjęcia) | |
357 | + $lista_plikow = ListaPlikow($art, 2); | |
358 | + if (!empty($lista_plikow)) { | |
359 | + echo '<p>'; | |
360 | + foreach ($lista_plikow as $plik => $plik_flaga) { | |
361 | + echo "<img src=\"svg/file.svg\" style=\"height: 1em; width: auto;\"> <a href=\"data/{$art}/" . rawurlencode($plik) . "\">" . htmlentities($plik) . "</a> (" . round(filesize("data/{$art}/{$plik}") / 1024) . " KiB)<br>\n"; | |
362 | + } | |
363 | + echo "</p>\n"; | |
364 | + } | |
365 | + // SLAJDY START | |
366 | + $lista_zdjec = ListaPlikow($art, 1); | |
367 | + if (! empty($lista_zdjec)) { // zdjęcia? | |
368 | + echo '<div class="simple-slider simple-slider-' . $licznik . '">' . "\n"; | |
369 | + if (count($lista_zdjec) > 1) echo ' <div class="slider-wrapper">' . "\n"; | |
370 | + foreach ($lista_zdjec as $f => $flaga_zdj) { | |
371 | + echo ' <div class="slider-slide" style="background-image: url(\'data/' . $art . '/' . rawurlencode($f) . '\'); background-size: contain;"></div>' . "\n"; | |
372 | + } | |
373 | + if (count($lista_zdjec) > 1) { | |
374 | + echo " </div>\n"; | |
375 | + echo ' <div class="slider-btn slider-btn-prev"></div>' . "\n"; | |
376 | + echo ' <div class="slider-btn slider-btn-next"></div>' . "\n"; | |
377 | + } | |
378 | + echo "</div>\n"; | |
379 | + if (count($lista_zdjec) > 1) echo "<script>var slide = new SimpleSlider('.simple-slider-{$licznik}', {autoplay: false, speed: 700});</script>\n"; | |
380 | + } | |
381 | + // SLAJDY STOP | |
382 | + | |
383 | + if ($isadmin) { | |
384 | + echo "<p class=\"admintool\"><a href=\"./?action=zdjecia&artid={$art}&p={$p}\"><img src=\"svg/attachadd.svg\"></a></p>\n"; | |
385 | + } | |
386 | + echo "</div>\n"; | |
387 | + } | |
388 | + echo '<p class="paginacja">'; | |
389 | + $listastron = ListaStronDoPaginacji($p, $liczbastron); | |
390 | + foreach ($listastron as $s) { | |
391 | + if ($s > 0) { | |
392 | + $class = ''; | |
393 | + if (($s == $p) || (($p == 0) && ($s == $liczbastron))) $class = 'class="curpage" '; | |
394 | + echo "<a {$class}href=\"" . PaginationLink($s, $liczbastron) . "\">{$s}</a> "; | |
395 | + } else { | |
396 | + echo "… "; | |
397 | + } | |
398 | + } | |
399 | + echo "</p>\n"; | |
400 | + | |
401 | + BOTTOM: | |
402 | + ?> | |
403 | + </div> | |
404 | + </body> | |
405 | +</html> |
@@ -0,0 +1,56 @@ | ||
1 | + | |
2 | + ptiblogphp - a tiny PHP blog that is easy to set up and easy to run | |
3 | + Copyright (C) 2021 Mateusz Viste | |
4 | + | |
5 | + | |
6 | +ptiblogphp is a tiny, extremely light PHP blog engine. It stores all its | |
7 | +content in filesystem, hence it requires no database. Only a web server with | |
8 | +PHP. | |
9 | + | |
10 | +Homepage: http://ptiblogphp.osdn.io | |
11 | + | |
12 | + | |
13 | +=== INSTALLATION AND SETUP =================================================== | |
14 | + | |
15 | +Installing ptiblogphp is as simple as copying all its files to a directory | |
16 | +that is exposed by your web server. Then, edit out the settings.php file to | |
17 | +set an admin account and adapt ptiblogphp to your preferences. | |
18 | +You might also want to tune the CSS styles and banner image (and possibly add | |
19 | +a background image). | |
20 | + | |
21 | + | |
22 | +=== ARTICLES FORMAT ========================================================== | |
23 | + | |
24 | +All messages are filtered through a markdown processor, this means that you | |
25 | +can use the markdown syntax to format your entries. | |
26 | + | |
27 | + | |
28 | +=== CONTACT ================================================================== | |
29 | + | |
30 | +Wanna get in touch with me? Follow this trail: http://mateusz.viste.fr | |
31 | + | |
32 | + | |
33 | +=== LICENSE ================================================================== | |
34 | + | |
35 | +ptiblogphp has been created by Mateusz Viste, who published it under the terms | |
36 | +of the MIT license, as listed below. | |
37 | + | |
38 | +Copyright (C) 2021 Mateusz Viste | |
39 | + | |
40 | +Permission is hereby granted, free of charge, to any person obtaining a copy | |
41 | +of this software and associated documentation files (the "Software"), to deal | |
42 | +in the Software without restriction, including without limitation the rights | |
43 | +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
44 | +copies of the Software, and to permit persons to whom the Software is | |
45 | +furnished to do so, subject to the following conditions: | |
46 | + | |
47 | +The above copyright notice and this permission notice shall be included in all | |
48 | +copies or substantial portions of the Software. | |
49 | + | |
50 | +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
51 | +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
52 | +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
53 | +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
54 | +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
55 | +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |
56 | +SOFTWARE. |
@@ -0,0 +1,55 @@ | ||
1 | +<?php | |
2 | + | |
3 | +$TITLE = 'ptiblogphp is online!'; | |
4 | +$LANG = 'en'; | |
5 | +$ENTRIES_PER_PAGE = 5; | |
6 | + | |
7 | +$ADMINLOGIN = 'admin'; | |
8 | +$ADMINPASS = ''; | |
9 | + | |
10 | +// when a big jpeg picture is being uploaded, ptiblogphp automatically | |
11 | +// scales it down to the limits set below. if you comment out these settings, | |
12 | +// then no scaling will be applied. | |
13 | +$RESIZEJPG_MAXWIDTH = 1600; | |
14 | +$RESIZEJPG_MAXHEIGHT = 1200; | |
15 | + | |
16 | +// you may enforce a specific timezone here so timestamps are displayed | |
17 | +// according to your timezone instead of the web server's system timezone. | |
18 | +// the timezone should be passed in the standard "IANA TZ DATABASE" format. | |
19 | +// Examples: Europe/Warsaw, America/New_York, Africa/Tripoli, Etc/GMT+5 | |
20 | +$MYTIMEZONE = ''; | |
21 | + | |
22 | +// LOCALIZATION | |
23 | +// adapt the phrases below to your language | |
24 | +$LANG_USERNAME = 'username'; | |
25 | +$LANG_PASSWORD = 'password'; | |
26 | +$LANG_CANCEL = 'cancel'; | |
27 | +$LANG_SIGNIN = 'sign in'; | |
28 | +$LANG_SAVE = 'save'; | |
29 | +$LANG_AUTHERR = 'invalid authentication'; | |
30 | +$LANG_NEWENTRY = 'add a new entry'; | |
31 | +$LANG_TITLE = 'title'; | |
32 | +$LANG_MESSAGE = 'message'; | |
33 | +$LANG_FILESMGMT = 'Files management'; | |
34 | +$LANG_DROPFILESHERE = 'drop your files here'; | |
35 | +$LANG_REFRESH = 'refresh'; | |
36 | +$LANG_GOBACK = 'go back'; | |
37 | + | |
38 | +// the timestamp in front of each blog entry is generated through a PHP | |
39 | +// strftime() call. First, setlocale() is called to set up the preferred | |
40 | +// language (defaults to 'en_US'), then strftime() is used to compute the | |
41 | +// timestamp string using the specified format. | |
42 | +// See https://www.php.net/manual/en/function.strftime.php for details. | |
43 | + | |
44 | +$DATELOCALE = 'en_US'; | |
45 | +$TIMESTAMPFORMAT = 'written %A, %B %e, %Y at %H:%M'; | |
46 | + | |
47 | +// french | |
48 | +//$DATELOCALE = 'fr_FR'; | |
49 | +//$TIMESTAMPFORMAT = 'rédigé le %A, %e %B %Y à %H:%M'; | |
50 | + | |
51 | +// polish | |
52 | +//$DATELOCALE = 'pl_PL'; | |
53 | +//$TIMESTAMPFORMAT = '%A, %e %B %Y, %H:%M'; | |
54 | + | |
55 | +?> |
@@ -0,0 +1,42 @@ | ||
1 | + | |
2 | +/* DO NOT MODIFY THIS FILE! PUT ALL YOUR CSS CUSTOMIZATIONS INTO CUSTOM.CSS */ | |
3 | + | |
4 | +@import url('./SimpleSlider-v.1.9.0/dist/simpleSlider.min.css'); | |
5 | + | |
6 | +div.simple-slider { | |
7 | + height: 26em; | |
8 | + width: 100%; | |
9 | + margin: 0; | |
10 | + border: 1px #ccc solid; | |
11 | + border-radius: 0.2em; | |
12 | +} | |
13 | + | |
14 | +@media (max-width: 800px) { | |
15 | + div.simple-slider { | |
16 | + height: 20em; | |
17 | + } | |
18 | +} | |
19 | + | |
20 | +@media (max-width: 640px) { | |
21 | + div.simple-slider { | |
22 | + height: 16em; | |
23 | + } | |
24 | +} | |
25 | + | |
26 | +@media (max-width: 500px) { | |
27 | + div.simple-slider { | |
28 | + height: 12em; | |
29 | + } | |
30 | +} | |
31 | + | |
32 | +div.slider-slide { | |
33 | + width: 100%; | |
34 | + background-size: contain; | |
35 | + background-repeat: no-repeat; | |
36 | + background-color: #eee; | |
37 | +} | |
38 | + | |
39 | +.slider-btn { | |
40 | + stroke: rgb(255,0,255); | |
41 | + stroke-width: 2; | |
42 | +} |
@@ -0,0 +1,272 @@ | ||
1 | + | |
2 | +/* DO NOT MODIFY THIS FILE! PUT ALL YOUR CSS CUSTOMIZATIONS INTO CUSTOM.CSS */ | |
3 | + | |
4 | +html { | |
5 | + background-color: #f5f7ff; | |
6 | +} | |
7 | + | |
8 | +body { | |
9 | + font-size: 1.2em; | |
10 | + font-family: sans-serif; | |
11 | + max-width: 1200px; | |
12 | + border-left: 1px #ccc solid; | |
13 | + border-right: 1px #ccc solid; | |
14 | + border-bottom: 1px #ccc solid; | |
15 | + margin: 0 auto; | |
16 | + padding: 0; | |
17 | + background: #fff; | |
18 | +} | |
19 | + | |
20 | +a { | |
21 | + color: #00d; | |
22 | + text-decoration: underline dotted; | |
23 | +} | |
24 | + | |
25 | +a:hover { | |
26 | + color: #880; | |
27 | +} | |
28 | + | |
29 | +div.banner { | |
30 | + display: table; | |
31 | + width: 100%; | |
32 | + height: 12em; | |
33 | + overflow: hidden; | |
34 | + background-color: #235; | |
35 | + background: url("banner.jpg"); | |
36 | + background-size: cover; | |
37 | + background-position: center; | |
38 | + border-bottom: 1px #ccc solid; | |
39 | +} | |
40 | + | |
41 | +div.banner h1 { | |
42 | + font-family: sans-serif; | |
43 | + display: table-cell; | |
44 | + vertical-align: middle; | |
45 | + text-align: center; | |
46 | + font-size: 4em; | |
47 | + padding: 0 0.5em; | |
48 | + color: #fff; | |
49 | + text-shadow: | |
50 | + -1px -1px 1px #000, | |
51 | + 1px -1px 1px #000, | |
52 | + -1px 1px 1px #000, | |
53 | + 1px 1px 1px #000; | |
54 | +} | |
55 | +/* zmniejsz tytuł na ekranach o niskiej rozdzielczości */ | |
56 | +@media (max-width: 1024px) { | |
57 | + div.banner h1 { | |
58 | + font-size: 3em; | |
59 | + } | |
60 | +} | |
61 | +@media (max-width: 500px) { | |
62 | + div.banner h1 { | |
63 | + font-size: 2.5em; | |
64 | + } | |
65 | +} | |
66 | + | |
67 | +div.zawartosc { | |
68 | + line-height: 1.5em; | |
69 | + margin: 0.75em 0 0 0; | |
70 | + padding: 0 0.5em 0.5em 0.5em; | |
71 | +} | |
72 | +/* clearfix - so photos or stuff never go beyond div */ | |
73 | +div.zawartosc:after { | |
74 | + content: ""; | |
75 | + display: table; | |
76 | + clear: both; | |
77 | +} | |
78 | + | |
79 | +div.authbox { | |
80 | + margin: 1em 0; | |
81 | + text-align: center; | |
82 | + display: flex; | |
83 | + align-items: center; | |
84 | + justify-content: center; | |
85 | + flex-wrap: wrap; | |
86 | +} | |
87 | + | |
88 | +div.auth div.buttons { | |
89 | + display: flex; | |
90 | + justify-content: space-around; | |
91 | + margin: 0.4em 0; | |
92 | +} | |
93 | + | |
94 | +div.authimg img { | |
95 | + height: 6.5em; | |
96 | + width: auto; | |
97 | + margin: 0.5em 1em; | |
98 | +} | |
99 | + | |
100 | +div.auth { | |
101 | + padding: 0.5em 0.5em 0 0.5em; | |
102 | + border: 1px #ddd solid; | |
103 | + border-radius: 0.2em; | |
104 | + display: inline-block; | |
105 | + text-align: center; | |
106 | +} | |
107 | + | |
108 | +div.auth p { | |
109 | + line-height: 1.15em; | |
110 | +} | |
111 | + | |
112 | +div.authcred { | |
113 | + text-align: right; | |
114 | + line-height: 2em; | |
115 | +} | |
116 | + | |
117 | +p.bonjour { | |
118 | + background-color: #fec; | |
119 | + border: 1px #999 solid; | |
120 | + border-radius: 0.2em; | |
121 | + float: right; | |
122 | + padding: 0.2em 0.5em 0 0.5em; | |
123 | + margin: -1em 0.4em 0 0; | |
124 | + font-size: 0.9em; | |
125 | +} | |
126 | + | |
127 | +p.bonjour img { | |
128 | + height: 1em; | |
129 | + width: auto; | |
130 | +} | |
131 | + | |
132 | +div.blogentry { | |
133 | + background-color: #fefefe; | |
134 | + margin: 0 0 0.9em 0; | |
135 | + padding: 0.5em; | |
136 | + border: 1px #ccc dotted; | |
137 | + border-radius: 0.2em; | |
138 | +} | |
139 | + | |
140 | +div.blogentry h2 { | |
141 | + font-size: 1.2em; | |
142 | + text-align: left; | |
143 | + font-weight: bold; | |
144 | + font-style: normal; | |
145 | + margin: 0; | |
146 | +} | |
147 | + | |
148 | +div.blogentry h3 { | |
149 | + font-size: 0.85em; | |
150 | + color: #888; | |
151 | + text-align: left; | |
152 | + font-weight: normal; | |
153 | + font-style: normal; | |
154 | + margin: -0.4em 0 0.5em 0; | |
155 | +} | |
156 | + | |
157 | +div.blogentry p { | |
158 | + line-height: normal; | |
159 | +} | |
160 | + | |
161 | +p.paginacja { | |
162 | + text-align: center; | |
163 | + font-size: 0.8em; | |
164 | +} | |
165 | + | |
166 | +p.paginacja a { | |
167 | + text-decoration: none; | |
168 | + border: 1px #bbd solid; | |
169 | + border-radius: 0.15em; | |
170 | + padding: 0.1em 0.4em; | |
171 | + background: #fcfcfc; | |
172 | +} | |
173 | + | |
174 | +p.paginacja a.curpage { | |
175 | + font-weight: bold; | |
176 | + background: #fea; | |
177 | +} | |
178 | + | |
179 | +p.paginacja a:hover { | |
180 | + color: #000; | |
181 | + background: #ff0; | |
182 | + border: 1px #999 solid; | |
183 | +} | |
184 | + | |
185 | +p.autherr { | |
186 | + font-weight: bold; | |
187 | + color: #000; | |
188 | + background-color: #faa; | |
189 | + text-align: center; | |
190 | +} | |
191 | + | |
192 | +p.admintool { | |
193 | + text-align: right; | |
194 | + margin: 1px 0 0.25em 0; | |
195 | + font-size: 0.9em; | |
196 | +} | |
197 | + | |
198 | +p.admintool a { | |
199 | + background-color: #ff4; | |
200 | + border-radius: 0.2em; | |
201 | + padding: 0 0.5em; | |
202 | +} | |
203 | + | |
204 | +p.admintool a img { | |
205 | + height: 1.3em; | |
206 | + width: auto; | |
207 | + margin: 0; | |
208 | + padding: 0; | |
209 | +} | |
210 | + | |
211 | +div.nowywpis { | |
212 | + border: 1px #ccc solid; | |
213 | + border-radius: 0.2em; | |
214 | + background-color: #f2f2f2; | |
215 | + padding: 0.5em; | |
216 | + margin-bottom: 1em; | |
217 | +} | |
218 | + | |
219 | +div.nowywpis p { | |
220 | + margin: 0; | |
221 | +} | |
222 | + | |
223 | +form.nowywpis { | |
224 | + width: 100%; | |
225 | +} | |
226 | + | |
227 | +form.nowywpis textarea, input { | |
228 | + width: 100%; | |
229 | + box-sizing: border-box; | |
230 | + border: 1px #ccc solid; | |
231 | + border-radius: 0.3em; | |
232 | +} | |
233 | + | |
234 | +form.nowywpis textarea { | |
235 | + resize: vertical; | |
236 | +} | |
237 | + | |
238 | +div.managezd { | |
239 | + border: 1px #aaa dashed; | |
240 | + border-radius: 0.2em; | |
241 | + background-color: #eee; | |
242 | + padding: 0.3em 0.5em; | |
243 | + margin: 0.5em 0; | |
244 | + overflow: hidden; /* div zwieksza rozmiar do obrazka */ | |
245 | +} | |
246 | + | |
247 | +div.thumbcontainer { | |
248 | + width: 10em; | |
249 | + height: 10em; | |
250 | + margin: 0 0.5em 0 0; | |
251 | + border: 1px #ccc solid; | |
252 | + border-radius: 0.2em; | |
253 | + float: left; | |
254 | + background-size: contain; | |
255 | + background-position: center; | |
256 | + background-repeat: no-repeat; | |
257 | +} | |
258 | + | |
259 | +div.managezd p { | |
260 | + margin: 0; | |
261 | +} | |
262 | + | |
263 | +div.managezd a { | |
264 | + border-radius: 0.2em; | |
265 | + background-color: #fa4; | |
266 | + padding: 0.25em 0.5em 0 0.5em; | |
267 | +} | |
268 | + | |
269 | +div.managezd a:hover { | |
270 | + background-color: #f22; | |
271 | + color: #111; | |
272 | +} |
@@ -0,0 +1,3 @@ | ||
1 | +Welcome to ptiblogphp! This is a default message that you should modify. It uses the markdown syntax, so you may use all kinds of markdown constructs like ***special font effects*** or [cool links](http://ptiblogphp.osdn.io). | |
2 | + | |
3 | +You may also use inline HTML for any <span title="hello, I am a popup message" style="text-decoration: underline wavy;">other fancy stuff</span>. |