diff --git a/extensions/tags/js/dist-typings/forum/components/TagHero.d.ts b/extensions/tags/js/dist-typings/forum/components/TagHero.d.ts index 037294867..c7dad3045 100644 --- a/extensions/tags/js/dist-typings/forum/components/TagHero.d.ts +++ b/extensions/tags/js/dist-typings/forum/components/TagHero.d.ts @@ -1,5 +1,15 @@ export default class TagHero extends Component { constructor(); view(): JSX.Element; + /** + * @returns {ItemList} + */ + viewItems(): ItemList; + /** + * @returns {ItemList} + */ + contentItems(): ItemList; } import Component from "flarum/common/Component"; +import ItemList from "flarum/common/utils/ItemList"; +import Mithril from "mithril"; diff --git a/extensions/tags/js/dist/admin.js b/extensions/tags/js/dist/admin.js index a72f25c4a..ec058a924 100644 --- a/extensions/tags/js/dist/admin.js +++ b/extensions/tags/js/dist/admin.js @@ -1,3 +1,3 @@ /*! For license information please see admin.js.LICENSE.txt */ -(()=>{var t,e,n={400:(t,e,n)=>{"use strict";n.d(e,{X:()=>wn});const o=flarum.reg.get("core","admin/app");var a=n.n(o);const r=flarum.reg.get("core","common/extend"),i=flarum.reg.get("core","admin/components/PermissionGrid");var s=n.n(i);const l=flarum.reg.get("core","admin/components/PermissionDropdown");var c=n.n(l);const u=flarum.reg.get("core","common/components/Dropdown");var d=n.n(u),h=n(336),g=n.n(h),p=n(661),f=n.n(p),v=n(339),b=n(968),y=n(618);const _=flarum.reg.get("core","admin/components/BasicsPage");var w=n.n(_);function T(){(0,r.extend)(w(),"homePageItems",(t=>{t.add("tags",{path:"/tags",label:app.translator.trans("flarum-tags.admin.basics.tags_label")})}))}const S=flarum.reg.get("core","admin/components/SettingDropdown");var E=n.n(S),C=n(805),D=n(950),x=n.n(D),N=(n(414),n(443)),A=n.n(N);function P(t,e){void 0===e&&(e={});const n=[],{link:o,...a}=e;return a.className=A()("TagsLabel",a.className),t?(0,y.A)(t).forEach((e=>{(e||1===t.length)&&n.push((0,v.A)(e,{link:o}))})):n.push((0,v.A)()),m("span",a,n)}flarum.reg.add("flarum-tags","common/helpers/tagsLabel",P);class O extends(x()){constructor(){super(...arguments),(0,C.A)(this,"tags",[]),(0,C.A)(this,"loaded",!1)}view(){const t=JSON.parse(this.attrs.settingValue()||"[]");return this.loaded||a().tagList.load(["parent"]).then((e=>{this.tags=e.filter((e=>t.includes(e.id()))),this.loaded=!0,m.redraw()})),m("div",{className:"Form-group SelectTagsSettingComponent"},m("label",null,this.attrs.label),this.attrs.help&&m("p",{className:"helpText"},this.attrs.help),this.loaded?m(g(),{className:"Button Button--text",onclick:()=>a().modal.show((()=>n.e(955).then(n.bind(n,671))),{selectedTags:this.tags,onsubmit:t=>{this.tags=t,this.attrs.settingValue(JSON.stringify(t.map((t=>t.id()))))},...this.attrs.options})},this.tags.length?P(this.tags):m("span",{className:"TagLabel untagged"},a().translator.trans("flarum-tags.admin.settings.button_text"))):m(f(),{size:"small",display:"inline"}))}}flarum.reg.add("flarum-tags","admin/components/SelectTagsSettingComponent",O),flarum.reg.addChunkModule("955","671","flarum-tags","common/components/TagSelectionModal"),flarum.reg.addChunkModule("955","671","flarum-tags","forum/components/ToggleButton");const M=flarum.reg.get("core","common/components/FormGroup");var I=n.n(M),k=n(954),F=n.n(k);class L{constructor(){(0,C.A)(this,"loadedIncludes",void 0)}async load(t){if(void 0===t&&(t=[]),!this.loadedIncludes)return this.query(t);const e=t.filter((t=>!this.loadedIncludes.has(t)));return 0===e.length?Promise.resolve(F().store.all("tags")):this.query(e)}async query(t){return void 0===t&&(t=[]),this.loadedIncludes??=new Set,F().store.find("tags",{include:t.join(",")}).then((e=>{const n=Array.isArray(e)?e:[e];return t.forEach((t=>this.loadedIncludes.add(t))),n}))}}flarum.reg.add("flarum-tags","common/states/TagListState",L);const B=flarum.reg.get("core","common/extenders");var R=n.n(B);const X=flarum.reg.get("core","common/utils/computed");var Y=n.n(X);const j=flarum.reg.get("core","common/Model");var H=n.n(j);class G extends(H()){name(){return H().attribute("name").call(this)}slug(){return H().attribute("slug").call(this)}description(){return H().attribute("description").call(this)}color(){return H().attribute("color").call(this)}backgroundUrl(){return H().attribute("backgroundUrl").call(this)}backgroundMode(){return H().attribute("backgroundMode").call(this)}icon(){return H().attribute("icon").call(this)}position(){return H().attribute("position").call(this)}parent(){return H().hasOne("parent").call(this)}children(){return H().hasMany("children").call(this)}defaultSort(){return H().attribute("defaultSort").call(this)}isChild(){return H().attribute("isChild").call(this)}isHidden(){return H().attribute("isHidden").call(this)}isPrimary(){return H().attribute("isPrimary").call(this)}discussionCount(){return H().attribute("discussionCount").call(this)}lastPostedAt(){return H().attribute("lastPostedAt",H().transformDate).call(this)}lastPostedDiscussion(){return H().hasOne("lastPostedDiscussion").call(this)}isRestricted(){return H().attribute("isRestricted").call(this)}canStartDiscussion(){return H().attribute("canStartDiscussion").call(this)}canAddToDiscussion(){return H().attribute("canAddToDiscussion").call(this)}isPrimaryParent(){return Y()("position","parent",((t,e)=>null!==t&&!1===e)).call(this)}}flarum.reg.add("flarum-tags","common/models/Tag",G);const W=flarum.reg.get("core","common/query/IGambit");class q extends W.KeyValueGambit{constructor(){super(...arguments),(0,C.A)(this,"predicates",!0)}key(){return F().translator.trans("flarum-tags.lib.gambits.discussions.tag.key",{},!0)}hint(){return F().translator.trans("flarum-tags.lib.gambits.discussions.tag.hint",{},!0)}filterKey(){return"tag"}gambitValueToFilterValue(t){return[t]}fromFilter(t,e){let n=[];return Array.isArray(t)?(n=t.map((t=>this.fromFilter(t.toString(),e))),n.join(" ")):`${e?"-":""}${this.key()}:${this.filterValueToGambitValue(t)}`}filterValueToGambitValue(t){return t}}flarum.reg.add("flarum-tags","common/query/discussions/TagGambit",q);const z=[(new(R().Store)).add("tags",G),(new(R().Search)).gambit("discussions",q)];function V(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,o)}return n}function U(t){for(var e=1;e"===e[0]&&(e=e.substring(1)),t)try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return!1}return!1}}function ut(t){return t.host&&t!==document&&t.host.nodeType?t.host:t.parentNode}function dt(t,e,n,o){if(t){n=n||document;do{if(null!=e&&(">"===e[0]?t.parentNode===n&&ct(t,e):ct(t,e))||o&&t===n)return t;if(t===n)break}while(t=ut(t))}return null}var mt,ht=/\s+/g;function gt(t,e,n){if(t&&e)if(t.classList)t.classList[n?"add":"remove"](e);else{var o=(" "+t.className+" ").replace(ht," ").replace(" "+e+" "," ");t.className=(o+(n?" "+e:"")).replace(ht," ")}}function pt(t,e,n){var o=t&&t.style;if(o){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];e in o||-1!==e.indexOf("webkit")||(e="-webkit-"+e),o[e]=n+("string"==typeof n?"":"px")}}function ft(t,e){var n="";if("string"==typeof t)n=t;else do{var o=pt(t,"transform");o&&"none"!==o&&(n=o+" "+n)}while(!e&&(t=t.parentNode));var a=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return a&&new a(n)}function vt(t,e,n){if(t){var o=t.getElementsByTagName(e),a=0,r=o.length;if(n)for(;a=r:a<=r))return o;if(o===bt())break;o=Ct(o,!1)}return!1}function wt(t,e,n,o){for(var a=0,r=0,i=t.children;r2&&void 0!==arguments[2]?arguments[2]:{},o=n.evt,a=function(t,e){if(null==t)return{};var n,o,a=function(t,e){if(null==t)return{};var n,o,a={},r=Object.keys(t);for(o=0;o=0||(a[n]=t[n]);return a}(t,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(a[n]=t[n])}return a}(n,Ft);kt.pluginEvent.bind(Ne)(t,e,U({dragEl:Rt,parentEl:Xt,ghostEl:Yt,rootEl:jt,nextEl:Ht,lastDownEl:Gt,cloneEl:Wt,cloneHidden:qt,dragStarted:ae,putSortable:Jt,activeSortable:Ne.active,originalEvent:o,oldIndex:zt,oldDraggableIndex:$t,newIndex:Vt,newDraggableIndex:Ut,hideGhostForTarget:Ee,unhideGhostForTarget:Ce,cloneNowHidden:function(){qt=!0},cloneNowShown:function(){qt=!1},dispatchSortableEvent:function(t){Bt({sortable:e,name:t,originalEvent:o})}},a))};function Bt(t){!function(t){var e=t.sortable,n=t.rootEl,o=t.name,a=t.targetEl,r=t.cloneEl,i=t.toEl,s=t.fromEl,l=t.oldIndex,c=t.newIndex,u=t.oldDraggableIndex,d=t.newDraggableIndex,m=t.originalEvent,h=t.putSortable,g=t.extraEventProperties;if(e=e||n&&n[Ot]){var p,f=e.options,v="on"+o.charAt(0).toUpperCase()+o.substr(1);!window.CustomEvent||tt||et?(p=document.createEvent("Event")).initEvent(o,!0,!0):p=new CustomEvent(o,{bubbles:!0,cancelable:!0}),p.to=i||n,p.from=s||n,p.item=a||n,p.clone=r,p.oldIndex=l,p.newIndex=c,p.oldDraggableIndex=u,p.newDraggableIndex=d,p.originalEvent=m,p.pullMode=h?h.lastPutMode:void 0;var b=U(U({},g),kt.getEventProperties(o,e));for(var y in b)p[y]=b[y];n&&n.dispatchEvent(p),f[v]&&f[v].call(e,p)}}(U({putSortable:Jt,cloneEl:Wt,targetEl:Rt,rootEl:jt,oldIndex:zt,oldDraggableIndex:$t,newIndex:Vt,newDraggableIndex:Ut},t))}var Rt,Xt,Yt,jt,Ht,Gt,Wt,qt,zt,Vt,$t,Ut,Kt,Jt,Zt,Qt,te,ee,ne,oe,ae,re,ie,se,le,ce=!1,ue=!1,de=[],me=!1,he=!1,ge=[],pe=!1,fe=[],ve="undefined"!=typeof document,be=at,ye=et||tt?"cssFloat":"float",_e=ve&&!rt&&!at&&"draggable"in document.createElement("div"),we=function(){if(ve){if(tt)return!1;var t=document.createElement("x");return t.style.cssText="pointer-events:auto","auto"===t.style.pointerEvents}}(),Te=function(t,e){var n=pt(t),o=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),a=wt(t,0,e),r=wt(t,1,e),i=a&&pt(a),s=r&&pt(r),l=i&&parseInt(i.marginLeft)+parseInt(i.marginRight)+yt(a).width,c=s&&parseInt(s.marginLeft)+parseInt(s.marginRight)+yt(r).width;if("flex"===n.display)return"column"===n.flexDirection||"column-reverse"===n.flexDirection?"vertical":"horizontal";if("grid"===n.display)return n.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(a&&i.float&&"none"!==i.float){var u="left"===i.float?"left":"right";return!r||"both"!==s.clear&&s.clear!==u?"horizontal":"vertical"}return a&&("block"===i.display||"flex"===i.display||"table"===i.display||"grid"===i.display||l>=o&&"none"===n[ye]||r&&"none"===n[ye]&&l+c>o)?"vertical":"horizontal"},Se=function(t){function e(t,n){return function(o,a,r,i){var s=o.options.group.name&&a.options.group.name&&o.options.group.name===a.options.group.name;if(null==t&&(n||s))return!0;if(null==t||!1===t)return!1;if(n&&"clone"===t)return t;if("function"==typeof t)return e(t(o,a,r,i),n)(o,a,r,i);var l=(n?o:a).options.group.name;return!0===t||"string"==typeof t&&t===l||t.join&&t.indexOf(l)>-1}}var n={},o=t.group;o&&"object"==K(o)||(o={name:o}),n.name=o.name,n.checkPull=e(o.pull,!0),n.checkPut=e(o.put),n.revertClone=o.revertClone,t.group=n},Ee=function(){!we&&Yt&&pt(Yt,"display","none")},Ce=function(){!we&&Yt&&pt(Yt,"display","")};ve&&!rt&&document.addEventListener("click",(function(t){if(ue)return t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.stopImmediatePropagation&&t.stopImmediatePropagation(),ue=!1,!1}),!0);var De=function(t){if(Rt){t=t.touches?t.touches[0]:t;var e=(a=t.clientX,r=t.clientY,de.some((function(t){var e=t[Ot].options.emptyInsertThreshold;if(e&&!Tt(t)){var n=yt(t),o=a>=n.left-e&&a<=n.right+e,s=r>=n.top-e&&r<=n.bottom+e;return o&&s?i=t:void 0}})),i);if(e){var n={};for(var o in t)t.hasOwnProperty(o)&&(n[o]=t[o]);n.target=n.rootEl=e,n.preventDefault=void 0,n.stopPropagation=void 0,e[Ot]._onDragOver(n)}}var a,r,i},xe=function(t){Rt&&Rt.parentNode[Ot]._isOutsideThisEl(t.target)};function Ne(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=Z({},e),t[Ot]=this;var n,o,a={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Te(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Ne.supportPointer&&"PointerEvent"in window&&!ot,emptyInsertThreshold:5};for(var r in kt.initializePlugins(this,t,a),a)!(r in e)&&(e[r]=a[r]);for(var i in Se(e),this)"_"===i.charAt(0)&&"function"==typeof this[i]&&(this[i]=this[i].bind(this));this.nativeDraggable=!e.forceFallback&&_e,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?st(t,"pointerdown",this._onTapStart):(st(t,"mousedown",this._onTapStart),st(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(st(t,"dragover",this),st(t,"dragenter",this)),de.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),Z(this,(o=[],{captureAnimationState:function(){o=[],this.options.animation&&[].slice.call(this.el.children).forEach((function(t){if("none"!==pt(t,"display")&&t!==Ne.ghost){o.push({target:t,rect:yt(t)});var e=U({},o[o.length-1].rect);if(t.thisAnimationDuration){var n=ft(t,!0);n&&(e.top-=n.f,e.left-=n.e)}t.fromRect=e}}))},addAnimationState:function(t){o.push(t)},removeAnimationState:function(t){o.splice(function(t,e){for(var n in t)if(t.hasOwnProperty(n))for(var o in e)if(e.hasOwnProperty(o)&&e[o]===t[n][o])return Number(n);return-1}(o,{target:t}),1)},animateAll:function(t){var e=this;if(!this.options.animation)return clearTimeout(n),void("function"==typeof t&&t());var a=!1,r=0;o.forEach((function(t){var n=0,o=t.target,i=o.fromRect,s=yt(o),l=o.prevFromRect,c=o.prevToRect,u=t.rect,d=ft(o,!0);d&&(s.top-=d.f,s.left-=d.e),o.toRect=s,o.thisAnimationDuration&&Dt(l,s)&&!Dt(i,s)&&(u.top-s.top)/(u.left-s.left)==(i.top-s.top)/(i.left-s.left)&&(n=function(t,e,n,o){return Math.sqrt(Math.pow(e.top-t.top,2)+Math.pow(e.left-t.left,2))/Math.sqrt(Math.pow(e.top-n.top,2)+Math.pow(e.left-n.left,2))*o.animation}(u,l,c,e.options)),Dt(s,i)||(o.prevFromRect=i,o.prevToRect=s,n||(n=e.options.animation),e.animate(o,u,s,n)),n&&(a=!0,r=Math.max(r,n),clearTimeout(o.animationResetTimer),o.animationResetTimer=setTimeout((function(){o.animationTime=0,o.prevFromRect=null,o.fromRect=null,o.prevToRect=null,o.thisAnimationDuration=null}),n),o.thisAnimationDuration=n)})),clearTimeout(n),a?n=setTimeout((function(){"function"==typeof t&&t()}),r):"function"==typeof t&&t(),o=[]},animate:function(t,e,n,o){if(o){pt(t,"transition",""),pt(t,"transform","");var a=ft(this.el),r=a&&a.a,i=a&&a.d,s=(e.left-n.left)/(r||1),l=(e.top-n.top)/(i||1);t.animatingX=!!s,t.animatingY=!!l,pt(t,"transform","translate3d("+s+"px,"+l+"px,0)"),this.forRepaintDummy=function(t){return t.offsetWidth}(t),pt(t,"transition","transform "+o+"ms"+(this.options.easing?" "+this.options.easing:"")),pt(t,"transform","translate3d(0,0,0)"),"number"==typeof t.animated&&clearTimeout(t.animated),t.animated=setTimeout((function(){pt(t,"transition",""),pt(t,"transform",""),t.animated=!1,t.animatingX=!1,t.animatingY=!1}),o)}}}))}function Ae(t,e,n,o,a,r,i,s){var l,c,u=t[Ot],d=u.options.onMove;return!window.CustomEvent||tt||et?(l=document.createEvent("Event")).initEvent("move",!0,!0):l=new CustomEvent("move",{bubbles:!0,cancelable:!0}),l.to=e,l.from=t,l.dragged=n,l.draggedRect=o,l.related=a||e,l.relatedRect=r||yt(e),l.willInsertAfter=s,l.originalEvent=i,t.dispatchEvent(l),d&&(c=d.call(u,l,i)),c}function Pe(t){t.draggable=!1}function Oe(){pe=!1}function Me(t){for(var e=t.tagName+t.className+t.src+t.href+t.textContent,n=e.length,o=0;n--;)o+=e.charCodeAt(n);return o.toString(36)}function Ie(t){return setTimeout(t,0)}function ke(t){return clearTimeout(t)}Ne.prototype={constructor:Ne,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(re=null)},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,Rt):this.options.direction},_onTapStart:function(t){if(t.cancelable){var e=this,n=this.el,o=this.options,a=o.preventOnFilter,r=t.type,i=t.touches&&t.touches[0]||t.pointerType&&"touch"===t.pointerType&&t,s=(i||t).target,l=t.target.shadowRoot&&(t.path&&t.path[0]||t.composedPath&&t.composedPath()[0])||s,c=o.filter;if(function(t){fe.length=0;for(var e=t.getElementsByTagName("input"),n=e.length;n--;){var o=e[n];o.checked&&fe.push(o)}}(n),!Rt&&!(/mousedown|pointerdown/.test(r)&&0!==t.button||o.disabled)&&!l.isContentEditable&&(this.nativeDraggable||!ot||!s||"SELECT"!==s.tagName.toUpperCase())&&!((s=dt(s,o.draggable,n,!1))&&s.animated||Gt===s)){if(zt=St(s),$t=St(s,o.draggable),"function"==typeof c){if(c.call(this,t,s,this))return Bt({sortable:e,rootEl:l,name:"filter",targetEl:s,toEl:n,fromEl:n}),Lt("filter",e,{evt:t}),void(a&&t.cancelable&&t.preventDefault())}else if(c&&(c=c.split(",").some((function(o){if(o=dt(l,o.trim(),n,!1))return Bt({sortable:e,rootEl:o,name:"filter",targetEl:s,fromEl:n,toEl:n}),Lt("filter",e,{evt:t}),!0}))))return void(a&&t.cancelable&&t.preventDefault());o.handle&&!dt(l,o.handle,n,!1)||this._prepareDragStart(t,i,s)}}},_prepareDragStart:function(t,e,n){var o,a=this,r=a.el,i=a.options,s=r.ownerDocument;if(n&&!Rt&&n.parentNode===r){var l=yt(n);if(jt=r,Xt=(Rt=n).parentNode,Ht=Rt.nextSibling,Gt=n,Kt=i.group,Ne.dragged=Rt,Zt={target:Rt,clientX:(e||t).clientX,clientY:(e||t).clientY},ne=Zt.clientX-l.left,oe=Zt.clientY-l.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,Rt.style["will-change"]="all",o=function(){Lt("delayEnded",a,{evt:t}),Ne.eventCanceled?a._onDrop():(a._disableDelayedDragEvents(),!nt&&a.nativeDraggable&&(Rt.draggable=!0),a._triggerDragStart(t,e),Bt({sortable:a,name:"choose",originalEvent:t}),gt(Rt,i.chosenClass,!0))},i.ignore.split(",").forEach((function(t){vt(Rt,t.trim(),Pe)})),st(s,"dragover",De),st(s,"mousemove",De),st(s,"touchmove",De),st(s,"mouseup",a._onDrop),st(s,"touchend",a._onDrop),st(s,"touchcancel",a._onDrop),nt&&this.nativeDraggable&&(this.options.touchStartThreshold=4,Rt.draggable=!0),Lt("delayStart",this,{evt:t}),!i.delay||i.delayOnTouchOnly&&!e||this.nativeDraggable&&(et||tt))o();else{if(Ne.eventCanceled)return void this._onDrop();st(s,"mouseup",a._disableDelayedDrag),st(s,"touchend",a._disableDelayedDrag),st(s,"touchcancel",a._disableDelayedDrag),st(s,"mousemove",a._delayedDragTouchMoveHandler),st(s,"touchmove",a._delayedDragTouchMoveHandler),i.supportPointer&&st(s,"pointermove",a._delayedDragTouchMoveHandler),a._dragStartTimer=setTimeout(o,i.delay)}}},_delayedDragTouchMoveHandler:function(t){var e=t.touches?t.touches[0]:t;Math.max(Math.abs(e.clientX-this._lastX),Math.abs(e.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){Rt&&Pe(Rt),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;lt(t,"mouseup",this._disableDelayedDrag),lt(t,"touchend",this._disableDelayedDrag),lt(t,"touchcancel",this._disableDelayedDrag),lt(t,"mousemove",this._delayedDragTouchMoveHandler),lt(t,"touchmove",this._delayedDragTouchMoveHandler),lt(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?st(document,"pointermove",this._onTouchMove):st(document,e?"touchmove":"mousemove",this._onTouchMove):(st(Rt,"dragend",this),st(jt,"dragstart",this._onDragStart));try{document.selection?Ie((function(){document.selection.empty()})):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){if(ce=!1,jt&&Rt){Lt("dragStarted",this,{evt:e}),this.nativeDraggable&&st(document,"dragover",xe);var n=this.options;!t&>(Rt,n.dragClass,!1),gt(Rt,n.ghostClass,!0),Ne.active=this,t&&this._appendGhost(),Bt({sortable:this,name:"start",originalEvent:e})}else this._nulling()},_emulateDragOver:function(){if(Qt){this._lastX=Qt.clientX,this._lastY=Qt.clientY,Ee();for(var t=document.elementFromPoint(Qt.clientX,Qt.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(Qt.clientX,Qt.clientY))!==e;)e=t;if(Rt.parentNode[Ot]._isOutsideThisEl(t),e)do{if(e[Ot]&&e[Ot]._onDragOver({clientX:Qt.clientX,clientY:Qt.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break;t=e}while(e=ut(e));Ce()}},_onTouchMove:function(t){if(Zt){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,a=t.touches?t.touches[0]:t,r=Yt&&ft(Yt,!0),i=Yt&&r&&r.a,s=Yt&&r&&r.d,l=be&&le&&Et(le),c=(a.clientX-Zt.clientX+o.x)/(i||1)+(l?l[0]-ge[0]:0)/(i||1),u=(a.clientY-Zt.clientY+o.y)/(s||1)+(l?l[1]-ge[1]:0)/(s||1);if(!Ne.active&&!ce){if(n&&Math.max(Math.abs(a.clientX-this._lastX),Math.abs(a.clientY-this._lastY))a.right+10||t.clientY>o.bottom&&t.clientX>o.left:t.clientY>a.bottom+10||t.clientX>o.right&&t.clientY>o.top}(t,a,this)&&!p.animated){if(p===Rt)return O(!1);if(p&&r===t.target&&(i=p),i&&(n=yt(i)),!1!==Ae(jt,r,Rt,e,i,n,t,!!i))return P(),p&&p.nextSibling?r.insertBefore(Rt,p.nextSibling):r.appendChild(Rt),Xt=r,M(),O(!0)}else if(p&&function(t,e,n){var o=yt(wt(n.el,0,n.options,!0)),a=Pt(n.el,n.options,Yt);return e?t.clientXu+c*r/2:ld-se)return-ie}else if(l>u+c*(1-a)/2&&ld-c*r/2)?l>u+c/2?1:-1:0}(t,i,n,a,w?1:s.swapThreshold,null==s.invertedSwapThreshold?s.swapThreshold:s.invertedSwapThreshold,he,re===i),0!==v){var C=St(Rt);do{C-=v,y=Xt.children[C]}while(y&&("none"===pt(y,"display")||y===Yt))}if(0===v||y===i)return O(!1);re=i,ie=v;var D=i.nextElementSibling,x=!1,N=Ae(jt,r,Rt,e,i,n,t,x=1===v);if(!1!==N)return 1!==N&&-1!==N||(x=1===N),pe=!0,setTimeout(Oe,30),P(),x&&!D?r.appendChild(Rt):i.parentNode.insertBefore(Rt,x?D:i),S&&Nt(S,0,E-S.scrollTop),Xt=Rt.parentNode,void 0===b||he||(se=Math.abs(b-yt(i)[T])),M(),O(!0)}if(r.contains(Rt))return O(!1)}return!1}function A(s,l){Lt(s,h,U({evt:t,isOwner:u,axis:a?"vertical":"horizontal",revert:o,dragRect:e,targetRect:n,canSort:d,fromSortable:m,target:i,completed:O,onMove:function(n,o){return Ae(jt,r,Rt,e,n,yt(n),t,o)},changed:M},l))}function P(){A("dragOverAnimationCapture"),h.captureAnimationState(),h!==m&&m.captureAnimationState()}function O(e){return A("dragOverCompleted",{insertion:e}),e&&(u?c._hideClone():c._showClone(h),h!==m&&(gt(Rt,Jt?Jt.options.ghostClass:c.options.ghostClass,!1),gt(Rt,s.ghostClass,!0)),Jt!==h&&h!==Ne.active?Jt=h:h===Ne.active&&Jt&&(Jt=null),m===h&&(h._ignoreWhileAnimating=i),h.animateAll((function(){A("dragOverAnimationComplete"),h._ignoreWhileAnimating=null})),h!==m&&(m.animateAll(),m._ignoreWhileAnimating=null)),(i===Rt&&!Rt.animated||i===r&&!i.animated)&&(re=null),s.dragoverBubble||t.rootEl||i===document||(Rt.parentNode[Ot]._isOutsideThisEl(t.target),!e&&De(t)),!s.dragoverBubble&&t.stopPropagation&&t.stopPropagation(),g=!0}function M(){Vt=St(Rt),Ut=St(Rt,s.draggable),Bt({sortable:h,name:"change",toEl:r,newIndex:Vt,newDraggableIndex:Ut,originalEvent:t})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){lt(document,"mousemove",this._onTouchMove),lt(document,"touchmove",this._onTouchMove),lt(document,"pointermove",this._onTouchMove),lt(document,"dragover",De),lt(document,"mousemove",De),lt(document,"touchmove",De)},_offUpEvents:function(){var t=this.el.ownerDocument;lt(t,"mouseup",this._onDrop),lt(t,"touchend",this._onDrop),lt(t,"pointerup",this._onDrop),lt(t,"touchcancel",this._onDrop),lt(document,"selectstart",this)},_onDrop:function(t){var e=this.el,n=this.options;Vt=St(Rt),Ut=St(Rt,n.draggable),Lt("drop",this,{evt:t}),Xt=Rt&&Rt.parentNode,Vt=St(Rt),Ut=St(Rt,n.draggable),Ne.eventCanceled||(ce=!1,he=!1,me=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),ke(this.cloneId),ke(this._dragStartId),this.nativeDraggable&&(lt(document,"drop",this),lt(e,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),ot&&pt(document.body,"user-select",""),pt(Rt,"transform",""),t&&(ae&&(t.cancelable&&t.preventDefault(),!n.dropBubble&&t.stopPropagation()),Yt&&Yt.parentNode&&Yt.parentNode.removeChild(Yt),(jt===Xt||Jt&&"clone"!==Jt.lastPutMode)&&Wt&&Wt.parentNode&&Wt.parentNode.removeChild(Wt),Rt&&(this.nativeDraggable&<(Rt,"dragend",this),Pe(Rt),Rt.style["will-change"]="",ae&&!ce&>(Rt,Jt?Jt.options.ghostClass:this.options.ghostClass,!1),gt(Rt,this.options.chosenClass,!1),Bt({sortable:this,name:"unchoose",toEl:Xt,newIndex:null,newDraggableIndex:null,originalEvent:t}),jt!==Xt?(Vt>=0&&(Bt({rootEl:Xt,name:"add",toEl:Xt,fromEl:jt,originalEvent:t}),Bt({sortable:this,name:"remove",toEl:Xt,originalEvent:t}),Bt({rootEl:Xt,name:"sort",toEl:Xt,fromEl:jt,originalEvent:t}),Bt({sortable:this,name:"sort",toEl:Xt,originalEvent:t})),Jt&&Jt.save()):Vt!==zt&&Vt>=0&&(Bt({sortable:this,name:"update",toEl:Xt,originalEvent:t}),Bt({sortable:this,name:"sort",toEl:Xt,originalEvent:t})),Ne.active&&(null!=Vt&&-1!==Vt||(Vt=zt,Ut=$t),Bt({sortable:this,name:"end",toEl:Xt,originalEvent:t}),this.save())))),this._nulling()},_nulling:function(){Lt("nulling",this),jt=Rt=Xt=Yt=Ht=Wt=Gt=qt=Zt=Qt=ae=Vt=Ut=zt=$t=re=ie=Jt=Kt=Ne.dragged=Ne.ghost=Ne.clone=Ne.active=null,fe.forEach((function(t){t.checked=!0})),fe.length=te=ee=0},handleEvent:function(t){switch(t.type){case"drop":case"dragend":this._onDrop(t);break;case"dragenter":case"dragover":Rt&&(this._onDragOver(t),function(t){t.dataTransfer&&(t.dataTransfer.dropEffect="move"),t.cancelable&&t.preventDefault()}(t));break;case"selectstart":t.preventDefault()}},toArray:function(){for(var t,e=[],n=this.el.children,o=0,a=n.length,r=this.options;o{const e=t.target;this.name(e.value),this.slug((0,hn.slug)(e.value))}})),50),t.add("slug",m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.edit_tag.slug_label")),m("input",{className:"FormControl",bidi:this.slug})),40),t.add("description",m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.edit_tag.description_label")),m("textarea",{className:"FormControl",bidi:this.description})),30),t.add("color",m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.edit_tag.color_label")),m(un(),{className:"FormControl",placeholder:"#aaaaaa",bidi:this.color})),20),t.add("icon",m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.edit_tag.icon_label")),m("div",{className:"helpText"},a().translator.trans("flarum-tags.admin.edit_tag.icon_text",{a:m("a",{href:a().refs.fontawesome,tabindex:"-1"})})),m("input",{className:"FormControl",placeholder:"fas fa-bolt",bidi:this.icon})),10),t.add("hidden",m("div",{className:"Form-group"},m("div",null,m("label",{className:"checkbox"},m("input",{type:"checkbox",bidi:this.isHidden}),a().translator.trans("flarum-tags.admin.edit_tag.hide_label")))),10),t.add("submit",m("div",{className:"Form-group Form-controls"},m(g(),{type:"submit",className:"Button Button--primary EditTagModal-save",loading:this.loading},a().translator.trans("flarum-tags.admin.edit_tag.submit_button")),this.tag.exists&&m("button",{type:"button",className:"Button EditTagModal-delete",onclick:this.delete.bind(this)},a().translator.trans("flarum-tags.admin.edit_tag.delete_tag_button"))),-10),t}submitData(){return{name:this.name(),slug:this.slug(),description:this.description(),color:this.color(),icon:this.icon(),isHidden:this.isHidden(),isPrimary:this.isPrimary()}}onsubmit(t){t.preventDefault(),this.loading=!0,this.tag.save(this.submitData()).then((()=>this.hide()),(()=>this.loading=!1))}delete(){if(confirm(vn()(a().translator.trans("flarum-tags.admin.edit_tag.delete_tag_confirmation")))){const t=a().store.all("tags").filter((t=>t.parent()===this.tag));this.tag.delete().then((()=>{t.forEach((t=>t.pushData({attributes:{isChild:!1}}))),m.redraw()})),this.hide()}}}function yn(t){return m("li",{"data-id":t.id(),style:{color:t.color()}},m("div",{className:"TagListItem-info"},(0,b.A)(t),m("span",{className:"TagListItem-name"},t.name()),m(g(),{className:"Button Button--link",icon:"fas fa-pencil-alt","aria-label":a().translator.trans("flarum-tags.admin.tags.edit_tag_label",{tag:t.name()}),onclick:()=>a().modal.show(bn,{model:t})})),!t.isChild()&&null!==t.position()&&m("ol",{className:"TagListItem-children TagList"},(0,y.A)(a().store.all("tags")).filter((e=>e.parent()===t)).map(yn)))}flarum.reg.add("flarum-tags","admin/components/EditTagModal",bn);class _n extends(Je()){oninit(t){super.oninit(t),this.forcedRefreshKey=0,this.loading=!0,a().tagList.load(["parent"]).then((()=>{this.loading=!1,m.redraw()}))}content(){if(this.loading)return m(f(),null);const t=this.setting("flarum-tags.min_primary_tags",0),e=this.setting("flarum-tags.max_primary_tags",0),n=this.setting("flarum-tags.min_secondary_tags",0),o=this.setting("flarum-tags.max_secondary_tags",0),r=(0,y.A)(a().store.all("tags").filter((t=>!t.parent())));return m("div",{className:"TagsContent"},m("div",{className:"TagsContent-list"},m("div",{className:"container",key:this.forcedRefreshKey,oncreate:this.onListOnCreate.bind(this)},m(on(),null,m(rn(),{className:"TagGroup",label:a().translator.trans("flarum-tags.admin.tags.primary_heading")},m("ol",{className:"TagList TagList--primary"},r.filter((t=>null!==t.position()&&!t.isChild())).map(yn)),m(g(),{className:"Button TagList-button",icon:"fas fa-plus",onclick:()=>a().modal.show(bn,{primary:!0})},a().translator.trans("flarum-tags.admin.tags.create_primary_tag_button"))),m(rn(),{className:"TagGroup TagGroup--secondary",label:a().translator.trans("flarum-tags.admin.tags.secondary_heading")},m("ul",{className:"TagList"},r.filter((t=>null===t.position())).sort(((t,e)=>t.name().localeCompare(e.name()))).map(yn)),m(g(),{className:"Button TagList-button",icon:"fas fa-plus",onclick:()=>a().modal.show(bn,{primary:!1})},a().translator.trans("flarum-tags.admin.tags.create_secondary_tag_button"))),m(rn(),{label:a().translator.trans("flarum-tags.admin.tags.settings_heading")},m(en(),null,m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.tag_settings.required_primary_heading")),m("div",{className:"helpText"},a().translator.trans("flarum-tags.admin.tag_settings.required_primary_text")),m("div",{className:"TagSettings-rangeInput"},m("input",{className:"FormControl",type:"number",min:"0",value:t(),oninput:Qe()("value",this.setMinTags.bind(this,t,e))}),a().translator.trans("flarum-tags.admin.tag_settings.range_separator_text"),m("input",{className:"FormControl",type:"number",min:t(),bidi:e}))),m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.tag_settings.required_secondary_heading")),m("div",{className:"helpText"},a().translator.trans("flarum-tags.admin.tag_settings.required_secondary_text")),m("div",{className:"TagSettings-rangeInput"},m("input",{className:"FormControl",type:"number",min:"0",value:n(),oninput:Qe()("value",this.setMinTags.bind(this,n,o))}),a().translator.trans("flarum-tags.admin.tag_settings.range_separator_text"),m("input",{className:"FormControl",type:"number",min:n(),bidi:o}))),m("div",{className:"Form-group Form-controls"},this.submitButton())))),m("div",{className:"TagsContent-footer"},m("p",null,a().translator.trans("flarum-tags.admin.tags.about_tags_text"))))))}onListOnCreate(t){this.$(".TagList").get().map((t=>{Ue.create(t,{group:"tags",delay:50,delayOnTouchOnly:!0,touchStartThreshold:5,animation:150,swapThreshold:.65,dragClass:"sortable-dragging",ghostClass:"sortable-placeholder",onSort:t=>this.onSortUpdate(t)})}))}setMinTags(t,e,n){t(n),e(Math.max(n,e()))}onSortUpdate(t){t.from instanceof HTMLOListElement&&t.to instanceof HTMLUListElement&&a().store.getById("tags",t.item.getAttribute("data-id")).pushData({attributes:{position:null,isChild:!1},relationships:{parent:null}});const e=this.$(".TagList--primary > li").map((function(){return{id:$(this).data("id"),children:$(this).find("li").map((function(){return $(this).data("id")})).get()}})).get();e.forEach(((t,e)=>{const n=a().store.getById("tags",t.id);n.pushData({attributes:{position:e,isChild:!1},relationships:{parent:null}}),t.children.forEach(((t,e)=>{a().store.getById("tags",t).pushData({attributes:{position:e,isChild:!0},relationships:{parent:n}})}))})),a().request({url:a().forum.attribute("apiUrl")+"/tags/order",method:"POST",body:{order:e}}),this.forcedRefreshKey++,m.redraw()}}flarum.reg.add("flarum-tags","admin/components/TagsPage",_n);const wn=[...z,(new(R().Admin)).page(_n).permission((()=>({icon:"fas fa-tag",label:a().translator.trans("flarum-tags.admin.permissions.tag_discussions_label"),permission:"discussion.tag"})),"moderate",95).permission((()=>({icon:"fas fa-tags",label:a().translator.trans("flarum-tags.admin.permissions.bypass_tag_counts_label"),permission:"bypassTagCounts"})),"start",89)];a().initializers.add("flarum-tags",(t=>{t.tagList=new L,(0,r.extend)(s().prototype,"oninit",(function(){this.loading=!0})),(0,r.extend)(s().prototype,"oncreate",(function(){a().tagList.load().then((()=>{this.loading=!1,m.redraw()}))})),(0,r.override)(s().prototype,"view",(function(t,e){return this.loading?m(f(),null):t(e)})),(0,r.override)(a(),"getRequiredPermissions",((t,e)=>{const n=e.match(/^tag\d+\./);return n?t(e.substr(n[0].length)).map((t=>n[0]+t)):t(e)})),(0,r.extend)(s().prototype,"scopeItems",(t=>{(0,y.A)(a().store.all("tags")).filter((t=>t.isRestricted())).forEach((e=>t.add("tag"+e.id(),{label:(0,v.A)(e),onremove:()=>e.save({isRestricted:!1}),render:t=>"setting"in t?null:"viewForum"===t.permission||"startDiscussion"===t.permission||t.permission?.startsWith("discussion.")&&!1!==t.tagScoped||t.tagScoped?m(c(),{permission:`tag${e.id()}.${t.permission}`,allowGuest:t.allowGuest}):null})))})),(0,r.extend)(s().prototype,"scopeControlItems",(t=>{const e=(0,y.A)(a().store.all("tags").filter((t=>!t.isRestricted())));e.length&&t.add("tag",m(d(),{className:"Dropdown--restrictByTag",buttonClassName:"Button Button--link",label:a().translator.trans("flarum-tags.admin.permissions.restrict_by_tag_heading"),icon:"fas fa-plus",caretIcon:null},e.map((t=>m(g(),{icon:(0,b.A)(t,{className:"Button-icon"}),onclick:()=>t.save({isRestricted:!0})},t.name())))))})),T(),(0,r.extend)(s().prototype,"startItems",(t=>{t.add("allowTagChange",{icon:"fas fa-tag",label:a().translator.trans("flarum-tags.admin.permissions.allow_edit_tags_label"),setting:()=>{const t=parseInt(a().data.settings.allow_tag_change,10);return m(E(),{defaultLabel:t?a().translator.trans("core.admin.permissions_controls.allow_some_minutes_button",{count:t}):a().translator.trans("core.admin.permissions_controls.allow_indefinitely_button"),key:"allow_tag_change",options:[{value:"-1",label:a().translator.trans("core.admin.permissions_controls.allow_indefinitely_button")},{value:"10",label:a().translator.trans("core.admin.permissions_controls.allow_ten_minutes_button")},{value:"reply",label:a().translator.trans("core.admin.permissions_controls.allow_until_reply_button")}]})}},90)})),(0,r.extend)(I().prototype,"customFieldComponents",(function(t){t.add("flarum-tags.select-tags",(t=>m(O,Object.assign({},t,{settingValue:t.bidi}))))}))}))},968:(t,e,n)=>{"use strict";n.d(e,{A:()=>r});var o=n(443),a=n.n(o);function r(t,e,n){void 0===e&&(e={}),void 0===n&&(n={});const o=t&&t.icon(),{useColor:r=!0}=n;return e.className=a()([e.className,"icon text-colored",o?t.icon():"TagIcon"]),t&&r?(e.style=e.style||{},e.style["--color"]=t.color()):t||(e.className+=" untagged"),o?m("i",e):m("span",e)}flarum.reg.add("flarum-tags","common/helpers/tagIcon",r)},339:(t,e,n)=>{"use strict";n.d(e,{A:()=>h});var o=n(414),a=n.n(o),r=n(88),i=n.n(r),s=n(443),l=n.n(s),c=n(296),u=n.n(c),d=n(968);function h(t,e){void 0===e&&(e={}),e.style=e.style||{},e.className="TagLabel "+(e.className||"");const n=a()(e,"link"),o=t?t.name():app.translator.trans("flarum-tags.lib.deleted_tag_text");if(t){const o=t.color();o&&(e.style["--tag-bg"]=o,e.className=l()(e.className,"colored",u()(o))),n&&(e.title=t.description()||"",e.href=app.route("tag",{tags:t.slug()})),t.isChild()&&(e.className+=" TagLabel--child")}else e.className+=" untagged";return m(n?i():"span",e,m("span",{className:"TagLabel-text"},t&&t.icon()&&(0,d.A)(t,{className:"TagLabel-icon"},{useColor:!1}),m("span",{className:"TagLabel-name"},o)))}flarum.reg.add("flarum-tags","common/helpers/tagLabel",h)},85:()=>{},618:(t,e,n)=>{"use strict";function o(t){return t.slice(0).sort(((t,e)=>{const n=t.position(),o=e.position();if(null===n&&null===o)return e.discussionCount()-t.discussionCount();if(null===o)return-1;if(null===n)return 1;const a=t.parent(),r=e.parent();return a===r?n-o:a&&r?a.position()-r.position():a?a===e?1:a.position()-o:r?r===t?-1:n-r.position():0}))}n.d(e,{A:()=>o}),flarum.reg.add("flarum-tags","common/utils/sortTags",o)},950:t=>{"use strict";t.exports=flarum.reg.get("core","common/Component")},954:t=>{"use strict";t.exports=flarum.reg.get("core","common/app")},336:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Button")},15:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/FormModal")},88:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Link")},661:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/LoadingIndicator")},607:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/highlight")},296:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/textContrastClass")},280:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/KeyboardNavigatable")},821:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/Stream")},443:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/classList")},414:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extract")},233:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extractText")},805:(t,e,n)=>{"use strict";function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function a(t,e,n){return(e=function(t){var e=function(t){if("object"!=o(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,"string");if("object"!=o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==o(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}n.d(e,{A:()=>a})}},o={};function a(t){flarum.reg._webpack_runtimes["flarum-tags"]||=a;var e=o[t];if(void 0!==e)return e.exports;var r=o[t]={exports:{}};return n[t](r,r.exports,a),r.exports}a.m=n,a.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return a.d(e,{a:e}),e},a.d=(t,e)=>{for(var n in e)a.o(e,n)&&!a.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},a.f={},a.e=t=>Promise.all(Object.keys(a.f).reduce(((e,n)=>(a.f[n](t,e),e)),[])),a.u=t=>"common/components/TagSelectionModal.js",a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t={},e="module.exports:",a.l=(n,o,r,i)=>{if(t[n])t[n].push(o);else{var s,l;if(void 0!==r)for(var c=document.getElementsByTagName("script"),u=0;u{s.onerror=s.onload=null,clearTimeout(h);var a=t[n];if(delete t[n],s.parentNode&&s.parentNode.removeChild(s),a&&a.forEach((t=>t(o))),e)return e(o)},h=setTimeout(m.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=m.bind(null,s.onerror),s.onload=m.bind(null,s.onload),l&&document.head.appendChild(s)}},a.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;a.g.importScripts&&(t=a.g.location+"");var e=a.g.document;if(!t&&e&&(e.currentScript&&"SCRIPT"===e.currentScript.tagName.toUpperCase()&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");if(n.length)for(var o=n.length-1;o>-1&&(!t||!/^http(s?):/.test(t));)t=n[o--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=t})(),a.f.compat=(t,e)=>{const n=a.l;a.l=flarum.reg.loadChunk.bind(flarum.reg,n)},(()=>{var t={884:0};a.f.j=(e,n)=>{var o=a.o(t,e)?t[e]:void 0;if(0!==o)if(o)n.push(o[2]);else{var r=new Promise(((n,a)=>o=t[e]=[n,a]));n.push(o[2]=r);var i=a.p+a.u(e),s=new Error;a.l(i,(n=>{if(a.o(t,e)&&(0!==(o=t[e])&&(t[e]=void 0),o)){var r=n&&("load"===n.type?"missing":n.type),i=n&&n.target&&n.target.src;s.message="Loading chunk "+e+" failed.\n("+r+": "+i+")",s.name="ChunkLoadError",s.type=r,s.request=i,o[1](s)}}),"chunk-"+e,e)}};var e=(e,n)=>{var o,r,[i,s,l]=n,c=0;if(i.some((e=>0!==t[e]))){for(o in s)a.o(s,o)&&(a.m[o]=s[o]);l&&l(a)}for(e&&e(n);c{"use strict";a.r(r),a.d(r,{extend:()=>n.X});var t=a(85),e={};for(const n in t)"default"!==n&&(e[n]=()=>t[n]);a.d(r,e);var n=a(400)})(),module.exports=r})(); +(()=>{var t,e,n={4400:(t,e,n)=>{"use strict";n.d(e,{X:()=>wn});const o=flarum.reg.get("core","admin/app");var a=n.n(o);const r=flarum.reg.get("core","common/extend"),i=flarum.reg.get("core","admin/components/PermissionGrid");var s=n.n(i);const l=flarum.reg.get("core","admin/components/PermissionDropdown");var c=n.n(l);const u=flarum.reg.get("core","common/components/Dropdown");var d=n.n(u),h=n(5336),g=n.n(h),p=n(6661),f=n.n(p),v=n(339),b=n(8968),y=n(1618);const _=flarum.reg.get("core","admin/components/BasicsPage");var w=n.n(_);function T(){(0,r.extend)(w(),"homePageItems",(t=>{t.add("tags",{path:"/tags",label:app.translator.trans("flarum-tags.admin.basics.tags_label")})}))}const S=flarum.reg.get("core","admin/components/SettingDropdown");var E=n.n(S),C=n(8805),D=n(4950),x=n.n(D),N=(n(9414),n(8443)),A=n.n(N);function P(t,e){void 0===e&&(e={});const n=[],{link:o,...a}=e;return a.className=A()("TagsLabel",a.className),t?(0,y.A)(t).forEach((e=>{(e||1===t.length)&&n.push((0,v.A)(e,{link:o}))})):n.push((0,v.A)()),m("span",a,n)}flarum.reg.add("flarum-tags","common/helpers/tagsLabel",P);class O extends(x()){constructor(){super(...arguments),(0,C.A)(this,"tags",[]),(0,C.A)(this,"loaded",!1)}view(){const t=JSON.parse(this.attrs.settingValue()||"[]");return this.loaded||a().tagList.load(["parent"]).then((e=>{this.tags=e.filter((e=>t.includes(e.id()))),this.loaded=!0,m.redraw()})),m("div",{className:"Form-group SelectTagsSettingComponent"},m("label",null,this.attrs.label),this.attrs.help&&m("p",{className:"helpText"},this.attrs.help),this.loaded?m(g(),{className:"Button Button--text",onclick:()=>a().modal.show((()=>n.e(955).then(n.bind(n,6671))),{selectedTags:this.tags,onsubmit:t=>{this.tags=t,this.attrs.settingValue(JSON.stringify(t.map((t=>t.id()))))},...this.attrs.options})},this.tags.length?P(this.tags):m("span",{className:"TagLabel untagged"},a().translator.trans("flarum-tags.admin.settings.button_text"))):m(f(),{size:"small",display:"inline"}))}}flarum.reg.add("flarum-tags","admin/components/SelectTagsSettingComponent",O),flarum.reg.addChunkModule("955","6671","flarum-tags","common/components/TagSelectionModal"),flarum.reg.addChunkModule("955","6671","flarum-tags","forum/components/ToggleButton");const M=flarum.reg.get("core","common/components/FormGroup");var I=n.n(M),k=n(954),F=n.n(k);class L{constructor(){(0,C.A)(this,"loadedIncludes",void 0)}async load(t){if(void 0===t&&(t=[]),!this.loadedIncludes)return this.query(t);const e=t.filter((t=>!this.loadedIncludes.has(t)));return 0===e.length?Promise.resolve(F().store.all("tags")):this.query(e)}async query(t){return void 0===t&&(t=[]),this.loadedIncludes??=new Set,F().store.find("tags",{include:t.join(",")}).then((e=>{const n=Array.isArray(e)?e:[e];return t.forEach((t=>this.loadedIncludes.add(t))),n}))}}flarum.reg.add("flarum-tags","common/states/TagListState",L);const B=flarum.reg.get("core","common/extenders");var R=n.n(B);const X=flarum.reg.get("core","common/utils/computed");var Y=n.n(X);const j=flarum.reg.get("core","common/Model");var H=n.n(j);class G extends(H()){name(){return H().attribute("name").call(this)}slug(){return H().attribute("slug").call(this)}description(){return H().attribute("description").call(this)}color(){return H().attribute("color").call(this)}backgroundUrl(){return H().attribute("backgroundUrl").call(this)}backgroundMode(){return H().attribute("backgroundMode").call(this)}icon(){return H().attribute("icon").call(this)}position(){return H().attribute("position").call(this)}parent(){return H().hasOne("parent").call(this)}children(){return H().hasMany("children").call(this)}defaultSort(){return H().attribute("defaultSort").call(this)}isChild(){return H().attribute("isChild").call(this)}isHidden(){return H().attribute("isHidden").call(this)}isPrimary(){return H().attribute("isPrimary").call(this)}discussionCount(){return H().attribute("discussionCount").call(this)}lastPostedAt(){return H().attribute("lastPostedAt",H().transformDate).call(this)}lastPostedDiscussion(){return H().hasOne("lastPostedDiscussion").call(this)}isRestricted(){return H().attribute("isRestricted").call(this)}canStartDiscussion(){return H().attribute("canStartDiscussion").call(this)}canAddToDiscussion(){return H().attribute("canAddToDiscussion").call(this)}isPrimaryParent(){return Y()("position","parent",((t,e)=>null!==t&&!1===e)).call(this)}}flarum.reg.add("flarum-tags","common/models/Tag",G);const W=flarum.reg.get("core","common/query/IGambit");class q extends W.KeyValueGambit{constructor(){super(...arguments),(0,C.A)(this,"predicates",!0)}key(){return F().translator.trans("flarum-tags.lib.gambits.discussions.tag.key",{},!0)}hint(){return F().translator.trans("flarum-tags.lib.gambits.discussions.tag.hint",{},!0)}filterKey(){return"tag"}gambitValueToFilterValue(t){return[t]}fromFilter(t,e){let n=[];return Array.isArray(t)?(n=t.map((t=>this.fromFilter(t.toString(),e))),n.join(" ")):`${e?"-":""}${this.key()}:${this.filterValueToGambitValue(t)}`}filterValueToGambitValue(t){return t}}flarum.reg.add("flarum-tags","common/query/discussions/TagGambit",q);const z=[(new(R().Store)).add("tags",G),(new(R().Search)).gambit("discussions",q)];function V(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,o)}return n}function U(t){for(var e=1;e"===e[0]&&(e=e.substring(1)),t)try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return!1}return!1}}function ut(t){return t.host&&t!==document&&t.host.nodeType?t.host:t.parentNode}function dt(t,e,n,o){if(t){n=n||document;do{if(null!=e&&(">"===e[0]?t.parentNode===n&&ct(t,e):ct(t,e))||o&&t===n)return t;if(t===n)break}while(t=ut(t))}return null}var mt,ht=/\s+/g;function gt(t,e,n){if(t&&e)if(t.classList)t.classList[n?"add":"remove"](e);else{var o=(" "+t.className+" ").replace(ht," ").replace(" "+e+" "," ");t.className=(o+(n?" "+e:"")).replace(ht," ")}}function pt(t,e,n){var o=t&&t.style;if(o){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];e in o||-1!==e.indexOf("webkit")||(e="-webkit-"+e),o[e]=n+("string"==typeof n?"":"px")}}function ft(t,e){var n="";if("string"==typeof t)n=t;else do{var o=pt(t,"transform");o&&"none"!==o&&(n=o+" "+n)}while(!e&&(t=t.parentNode));var a=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return a&&new a(n)}function vt(t,e,n){if(t){var o=t.getElementsByTagName(e),a=0,r=o.length;if(n)for(;a=r:a<=r))return o;if(o===bt())break;o=Ct(o,!1)}return!1}function wt(t,e,n,o){for(var a=0,r=0,i=t.children;r2&&void 0!==arguments[2]?arguments[2]:{},o=n.evt,a=function(t,e){if(null==t)return{};var n,o,a=function(t,e){if(null==t)return{};var n,o,a={},r=Object.keys(t);for(o=0;o=0||(a[n]=t[n]);return a}(t,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(a[n]=t[n])}return a}(n,Ft);kt.pluginEvent.bind(Ne)(t,e,U({dragEl:Rt,parentEl:Xt,ghostEl:Yt,rootEl:jt,nextEl:Ht,lastDownEl:Gt,cloneEl:Wt,cloneHidden:qt,dragStarted:ae,putSortable:Jt,activeSortable:Ne.active,originalEvent:o,oldIndex:zt,oldDraggableIndex:$t,newIndex:Vt,newDraggableIndex:Ut,hideGhostForTarget:Ee,unhideGhostForTarget:Ce,cloneNowHidden:function(){qt=!0},cloneNowShown:function(){qt=!1},dispatchSortableEvent:function(t){Bt({sortable:e,name:t,originalEvent:o})}},a))};function Bt(t){!function(t){var e=t.sortable,n=t.rootEl,o=t.name,a=t.targetEl,r=t.cloneEl,i=t.toEl,s=t.fromEl,l=t.oldIndex,c=t.newIndex,u=t.oldDraggableIndex,d=t.newDraggableIndex,m=t.originalEvent,h=t.putSortable,g=t.extraEventProperties;if(e=e||n&&n[Ot]){var p,f=e.options,v="on"+o.charAt(0).toUpperCase()+o.substr(1);!window.CustomEvent||tt||et?(p=document.createEvent("Event")).initEvent(o,!0,!0):p=new CustomEvent(o,{bubbles:!0,cancelable:!0}),p.to=i||n,p.from=s||n,p.item=a||n,p.clone=r,p.oldIndex=l,p.newIndex=c,p.oldDraggableIndex=u,p.newDraggableIndex=d,p.originalEvent=m,p.pullMode=h?h.lastPutMode:void 0;var b=U(U({},g),kt.getEventProperties(o,e));for(var y in b)p[y]=b[y];n&&n.dispatchEvent(p),f[v]&&f[v].call(e,p)}}(U({putSortable:Jt,cloneEl:Wt,targetEl:Rt,rootEl:jt,oldIndex:zt,oldDraggableIndex:$t,newIndex:Vt,newDraggableIndex:Ut},t))}var Rt,Xt,Yt,jt,Ht,Gt,Wt,qt,zt,Vt,$t,Ut,Kt,Jt,Zt,Qt,te,ee,ne,oe,ae,re,ie,se,le,ce=!1,ue=!1,de=[],me=!1,he=!1,ge=[],pe=!1,fe=[],ve="undefined"!=typeof document,be=at,ye=et||tt?"cssFloat":"float",_e=ve&&!rt&&!at&&"draggable"in document.createElement("div"),we=function(){if(ve){if(tt)return!1;var t=document.createElement("x");return t.style.cssText="pointer-events:auto","auto"===t.style.pointerEvents}}(),Te=function(t,e){var n=pt(t),o=parseInt(n.width)-parseInt(n.paddingLeft)-parseInt(n.paddingRight)-parseInt(n.borderLeftWidth)-parseInt(n.borderRightWidth),a=wt(t,0,e),r=wt(t,1,e),i=a&&pt(a),s=r&&pt(r),l=i&&parseInt(i.marginLeft)+parseInt(i.marginRight)+yt(a).width,c=s&&parseInt(s.marginLeft)+parseInt(s.marginRight)+yt(r).width;if("flex"===n.display)return"column"===n.flexDirection||"column-reverse"===n.flexDirection?"vertical":"horizontal";if("grid"===n.display)return n.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal";if(a&&i.float&&"none"!==i.float){var u="left"===i.float?"left":"right";return!r||"both"!==s.clear&&s.clear!==u?"horizontal":"vertical"}return a&&("block"===i.display||"flex"===i.display||"table"===i.display||"grid"===i.display||l>=o&&"none"===n[ye]||r&&"none"===n[ye]&&l+c>o)?"vertical":"horizontal"},Se=function(t){function e(t,n){return function(o,a,r,i){var s=o.options.group.name&&a.options.group.name&&o.options.group.name===a.options.group.name;if(null==t&&(n||s))return!0;if(null==t||!1===t)return!1;if(n&&"clone"===t)return t;if("function"==typeof t)return e(t(o,a,r,i),n)(o,a,r,i);var l=(n?o:a).options.group.name;return!0===t||"string"==typeof t&&t===l||t.join&&t.indexOf(l)>-1}}var n={},o=t.group;o&&"object"==K(o)||(o={name:o}),n.name=o.name,n.checkPull=e(o.pull,!0),n.checkPut=e(o.put),n.revertClone=o.revertClone,t.group=n},Ee=function(){!we&&Yt&&pt(Yt,"display","none")},Ce=function(){!we&&Yt&&pt(Yt,"display","")};ve&&!rt&&document.addEventListener("click",(function(t){if(ue)return t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.stopImmediatePropagation&&t.stopImmediatePropagation(),ue=!1,!1}),!0);var De=function(t){if(Rt){t=t.touches?t.touches[0]:t;var e=(a=t.clientX,r=t.clientY,de.some((function(t){var e=t[Ot].options.emptyInsertThreshold;if(e&&!Tt(t)){var n=yt(t),o=a>=n.left-e&&a<=n.right+e,s=r>=n.top-e&&r<=n.bottom+e;return o&&s?i=t:void 0}})),i);if(e){var n={};for(var o in t)t.hasOwnProperty(o)&&(n[o]=t[o]);n.target=n.rootEl=e,n.preventDefault=void 0,n.stopPropagation=void 0,e[Ot]._onDragOver(n)}}var a,r,i},xe=function(t){Rt&&Rt.parentNode[Ot]._isOutsideThisEl(t.target)};function Ne(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=Z({},e),t[Ot]=this;var n,o,a={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Te(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Ne.supportPointer&&"PointerEvent"in window&&!ot,emptyInsertThreshold:5};for(var r in kt.initializePlugins(this,t,a),a)!(r in e)&&(e[r]=a[r]);for(var i in Se(e),this)"_"===i.charAt(0)&&"function"==typeof this[i]&&(this[i]=this[i].bind(this));this.nativeDraggable=!e.forceFallback&&_e,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?st(t,"pointerdown",this._onTapStart):(st(t,"mousedown",this._onTapStart),st(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(st(t,"dragover",this),st(t,"dragenter",this)),de.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),Z(this,(o=[],{captureAnimationState:function(){o=[],this.options.animation&&[].slice.call(this.el.children).forEach((function(t){if("none"!==pt(t,"display")&&t!==Ne.ghost){o.push({target:t,rect:yt(t)});var e=U({},o[o.length-1].rect);if(t.thisAnimationDuration){var n=ft(t,!0);n&&(e.top-=n.f,e.left-=n.e)}t.fromRect=e}}))},addAnimationState:function(t){o.push(t)},removeAnimationState:function(t){o.splice(function(t,e){for(var n in t)if(t.hasOwnProperty(n))for(var o in e)if(e.hasOwnProperty(o)&&e[o]===t[n][o])return Number(n);return-1}(o,{target:t}),1)},animateAll:function(t){var e=this;if(!this.options.animation)return clearTimeout(n),void("function"==typeof t&&t());var a=!1,r=0;o.forEach((function(t){var n=0,o=t.target,i=o.fromRect,s=yt(o),l=o.prevFromRect,c=o.prevToRect,u=t.rect,d=ft(o,!0);d&&(s.top-=d.f,s.left-=d.e),o.toRect=s,o.thisAnimationDuration&&Dt(l,s)&&!Dt(i,s)&&(u.top-s.top)/(u.left-s.left)==(i.top-s.top)/(i.left-s.left)&&(n=function(t,e,n,o){return Math.sqrt(Math.pow(e.top-t.top,2)+Math.pow(e.left-t.left,2))/Math.sqrt(Math.pow(e.top-n.top,2)+Math.pow(e.left-n.left,2))*o.animation}(u,l,c,e.options)),Dt(s,i)||(o.prevFromRect=i,o.prevToRect=s,n||(n=e.options.animation),e.animate(o,u,s,n)),n&&(a=!0,r=Math.max(r,n),clearTimeout(o.animationResetTimer),o.animationResetTimer=setTimeout((function(){o.animationTime=0,o.prevFromRect=null,o.fromRect=null,o.prevToRect=null,o.thisAnimationDuration=null}),n),o.thisAnimationDuration=n)})),clearTimeout(n),a?n=setTimeout((function(){"function"==typeof t&&t()}),r):"function"==typeof t&&t(),o=[]},animate:function(t,e,n,o){if(o){pt(t,"transition",""),pt(t,"transform","");var a=ft(this.el),r=a&&a.a,i=a&&a.d,s=(e.left-n.left)/(r||1),l=(e.top-n.top)/(i||1);t.animatingX=!!s,t.animatingY=!!l,pt(t,"transform","translate3d("+s+"px,"+l+"px,0)"),this.forRepaintDummy=function(t){return t.offsetWidth}(t),pt(t,"transition","transform "+o+"ms"+(this.options.easing?" "+this.options.easing:"")),pt(t,"transform","translate3d(0,0,0)"),"number"==typeof t.animated&&clearTimeout(t.animated),t.animated=setTimeout((function(){pt(t,"transition",""),pt(t,"transform",""),t.animated=!1,t.animatingX=!1,t.animatingY=!1}),o)}}}))}function Ae(t,e,n,o,a,r,i,s){var l,c,u=t[Ot],d=u.options.onMove;return!window.CustomEvent||tt||et?(l=document.createEvent("Event")).initEvent("move",!0,!0):l=new CustomEvent("move",{bubbles:!0,cancelable:!0}),l.to=e,l.from=t,l.dragged=n,l.draggedRect=o,l.related=a||e,l.relatedRect=r||yt(e),l.willInsertAfter=s,l.originalEvent=i,t.dispatchEvent(l),d&&(c=d.call(u,l,i)),c}function Pe(t){t.draggable=!1}function Oe(){pe=!1}function Me(t){for(var e=t.tagName+t.className+t.src+t.href+t.textContent,n=e.length,o=0;n--;)o+=e.charCodeAt(n);return o.toString(36)}function Ie(t){return setTimeout(t,0)}function ke(t){return clearTimeout(t)}Ne.prototype={constructor:Ne,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(re=null)},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,Rt):this.options.direction},_onTapStart:function(t){if(t.cancelable){var e=this,n=this.el,o=this.options,a=o.preventOnFilter,r=t.type,i=t.touches&&t.touches[0]||t.pointerType&&"touch"===t.pointerType&&t,s=(i||t).target,l=t.target.shadowRoot&&(t.path&&t.path[0]||t.composedPath&&t.composedPath()[0])||s,c=o.filter;if(function(t){fe.length=0;for(var e=t.getElementsByTagName("input"),n=e.length;n--;){var o=e[n];o.checked&&fe.push(o)}}(n),!Rt&&!(/mousedown|pointerdown/.test(r)&&0!==t.button||o.disabled)&&!l.isContentEditable&&(this.nativeDraggable||!ot||!s||"SELECT"!==s.tagName.toUpperCase())&&!((s=dt(s,o.draggable,n,!1))&&s.animated||Gt===s)){if(zt=St(s),$t=St(s,o.draggable),"function"==typeof c){if(c.call(this,t,s,this))return Bt({sortable:e,rootEl:l,name:"filter",targetEl:s,toEl:n,fromEl:n}),Lt("filter",e,{evt:t}),void(a&&t.cancelable&&t.preventDefault())}else if(c&&(c=c.split(",").some((function(o){if(o=dt(l,o.trim(),n,!1))return Bt({sortable:e,rootEl:o,name:"filter",targetEl:s,fromEl:n,toEl:n}),Lt("filter",e,{evt:t}),!0}))))return void(a&&t.cancelable&&t.preventDefault());o.handle&&!dt(l,o.handle,n,!1)||this._prepareDragStart(t,i,s)}}},_prepareDragStart:function(t,e,n){var o,a=this,r=a.el,i=a.options,s=r.ownerDocument;if(n&&!Rt&&n.parentNode===r){var l=yt(n);if(jt=r,Xt=(Rt=n).parentNode,Ht=Rt.nextSibling,Gt=n,Kt=i.group,Ne.dragged=Rt,Zt={target:Rt,clientX:(e||t).clientX,clientY:(e||t).clientY},ne=Zt.clientX-l.left,oe=Zt.clientY-l.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,Rt.style["will-change"]="all",o=function(){Lt("delayEnded",a,{evt:t}),Ne.eventCanceled?a._onDrop():(a._disableDelayedDragEvents(),!nt&&a.nativeDraggable&&(Rt.draggable=!0),a._triggerDragStart(t,e),Bt({sortable:a,name:"choose",originalEvent:t}),gt(Rt,i.chosenClass,!0))},i.ignore.split(",").forEach((function(t){vt(Rt,t.trim(),Pe)})),st(s,"dragover",De),st(s,"mousemove",De),st(s,"touchmove",De),st(s,"mouseup",a._onDrop),st(s,"touchend",a._onDrop),st(s,"touchcancel",a._onDrop),nt&&this.nativeDraggable&&(this.options.touchStartThreshold=4,Rt.draggable=!0),Lt("delayStart",this,{evt:t}),!i.delay||i.delayOnTouchOnly&&!e||this.nativeDraggable&&(et||tt))o();else{if(Ne.eventCanceled)return void this._onDrop();st(s,"mouseup",a._disableDelayedDrag),st(s,"touchend",a._disableDelayedDrag),st(s,"touchcancel",a._disableDelayedDrag),st(s,"mousemove",a._delayedDragTouchMoveHandler),st(s,"touchmove",a._delayedDragTouchMoveHandler),i.supportPointer&&st(s,"pointermove",a._delayedDragTouchMoveHandler),a._dragStartTimer=setTimeout(o,i.delay)}}},_delayedDragTouchMoveHandler:function(t){var e=t.touches?t.touches[0]:t;Math.max(Math.abs(e.clientX-this._lastX),Math.abs(e.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){Rt&&Pe(Rt),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;lt(t,"mouseup",this._disableDelayedDrag),lt(t,"touchend",this._disableDelayedDrag),lt(t,"touchcancel",this._disableDelayedDrag),lt(t,"mousemove",this._delayedDragTouchMoveHandler),lt(t,"touchmove",this._delayedDragTouchMoveHandler),lt(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?st(document,"pointermove",this._onTouchMove):st(document,e?"touchmove":"mousemove",this._onTouchMove):(st(Rt,"dragend",this),st(jt,"dragstart",this._onDragStart));try{document.selection?Ie((function(){document.selection.empty()})):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){if(ce=!1,jt&&Rt){Lt("dragStarted",this,{evt:e}),this.nativeDraggable&&st(document,"dragover",xe);var n=this.options;!t&>(Rt,n.dragClass,!1),gt(Rt,n.ghostClass,!0),Ne.active=this,t&&this._appendGhost(),Bt({sortable:this,name:"start",originalEvent:e})}else this._nulling()},_emulateDragOver:function(){if(Qt){this._lastX=Qt.clientX,this._lastY=Qt.clientY,Ee();for(var t=document.elementFromPoint(Qt.clientX,Qt.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(Qt.clientX,Qt.clientY))!==e;)e=t;if(Rt.parentNode[Ot]._isOutsideThisEl(t),e)do{if(e[Ot]&&e[Ot]._onDragOver({clientX:Qt.clientX,clientY:Qt.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break;t=e}while(e=ut(e));Ce()}},_onTouchMove:function(t){if(Zt){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,a=t.touches?t.touches[0]:t,r=Yt&&ft(Yt,!0),i=Yt&&r&&r.a,s=Yt&&r&&r.d,l=be&&le&&Et(le),c=(a.clientX-Zt.clientX+o.x)/(i||1)+(l?l[0]-ge[0]:0)/(i||1),u=(a.clientY-Zt.clientY+o.y)/(s||1)+(l?l[1]-ge[1]:0)/(s||1);if(!Ne.active&&!ce){if(n&&Math.max(Math.abs(a.clientX-this._lastX),Math.abs(a.clientY-this._lastY))a.right+10||t.clientY>o.bottom&&t.clientX>o.left:t.clientY>a.bottom+10||t.clientX>o.right&&t.clientY>o.top}(t,a,this)&&!p.animated){if(p===Rt)return O(!1);if(p&&r===t.target&&(i=p),i&&(n=yt(i)),!1!==Ae(jt,r,Rt,e,i,n,t,!!i))return P(),p&&p.nextSibling?r.insertBefore(Rt,p.nextSibling):r.appendChild(Rt),Xt=r,M(),O(!0)}else if(p&&function(t,e,n){var o=yt(wt(n.el,0,n.options,!0)),a=Pt(n.el,n.options,Yt);return e?t.clientXu+c*r/2:ld-se)return-ie}else if(l>u+c*(1-a)/2&&ld-c*r/2)?l>u+c/2?1:-1:0}(t,i,n,a,w?1:s.swapThreshold,null==s.invertedSwapThreshold?s.swapThreshold:s.invertedSwapThreshold,he,re===i),0!==v){var C=St(Rt);do{C-=v,y=Xt.children[C]}while(y&&("none"===pt(y,"display")||y===Yt))}if(0===v||y===i)return O(!1);re=i,ie=v;var D=i.nextElementSibling,x=!1,N=Ae(jt,r,Rt,e,i,n,t,x=1===v);if(!1!==N)return 1!==N&&-1!==N||(x=1===N),pe=!0,setTimeout(Oe,30),P(),x&&!D?r.appendChild(Rt):i.parentNode.insertBefore(Rt,x?D:i),S&&Nt(S,0,E-S.scrollTop),Xt=Rt.parentNode,void 0===b||he||(se=Math.abs(b-yt(i)[T])),M(),O(!0)}if(r.contains(Rt))return O(!1)}return!1}function A(s,l){Lt(s,h,U({evt:t,isOwner:u,axis:a?"vertical":"horizontal",revert:o,dragRect:e,targetRect:n,canSort:d,fromSortable:m,target:i,completed:O,onMove:function(n,o){return Ae(jt,r,Rt,e,n,yt(n),t,o)},changed:M},l))}function P(){A("dragOverAnimationCapture"),h.captureAnimationState(),h!==m&&m.captureAnimationState()}function O(e){return A("dragOverCompleted",{insertion:e}),e&&(u?c._hideClone():c._showClone(h),h!==m&&(gt(Rt,Jt?Jt.options.ghostClass:c.options.ghostClass,!1),gt(Rt,s.ghostClass,!0)),Jt!==h&&h!==Ne.active?Jt=h:h===Ne.active&&Jt&&(Jt=null),m===h&&(h._ignoreWhileAnimating=i),h.animateAll((function(){A("dragOverAnimationComplete"),h._ignoreWhileAnimating=null})),h!==m&&(m.animateAll(),m._ignoreWhileAnimating=null)),(i===Rt&&!Rt.animated||i===r&&!i.animated)&&(re=null),s.dragoverBubble||t.rootEl||i===document||(Rt.parentNode[Ot]._isOutsideThisEl(t.target),!e&&De(t)),!s.dragoverBubble&&t.stopPropagation&&t.stopPropagation(),g=!0}function M(){Vt=St(Rt),Ut=St(Rt,s.draggable),Bt({sortable:h,name:"change",toEl:r,newIndex:Vt,newDraggableIndex:Ut,originalEvent:t})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){lt(document,"mousemove",this._onTouchMove),lt(document,"touchmove",this._onTouchMove),lt(document,"pointermove",this._onTouchMove),lt(document,"dragover",De),lt(document,"mousemove",De),lt(document,"touchmove",De)},_offUpEvents:function(){var t=this.el.ownerDocument;lt(t,"mouseup",this._onDrop),lt(t,"touchend",this._onDrop),lt(t,"pointerup",this._onDrop),lt(t,"touchcancel",this._onDrop),lt(document,"selectstart",this)},_onDrop:function(t){var e=this.el,n=this.options;Vt=St(Rt),Ut=St(Rt,n.draggable),Lt("drop",this,{evt:t}),Xt=Rt&&Rt.parentNode,Vt=St(Rt),Ut=St(Rt,n.draggable),Ne.eventCanceled||(ce=!1,he=!1,me=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),ke(this.cloneId),ke(this._dragStartId),this.nativeDraggable&&(lt(document,"drop",this),lt(e,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),ot&&pt(document.body,"user-select",""),pt(Rt,"transform",""),t&&(ae&&(t.cancelable&&t.preventDefault(),!n.dropBubble&&t.stopPropagation()),Yt&&Yt.parentNode&&Yt.parentNode.removeChild(Yt),(jt===Xt||Jt&&"clone"!==Jt.lastPutMode)&&Wt&&Wt.parentNode&&Wt.parentNode.removeChild(Wt),Rt&&(this.nativeDraggable&<(Rt,"dragend",this),Pe(Rt),Rt.style["will-change"]="",ae&&!ce&>(Rt,Jt?Jt.options.ghostClass:this.options.ghostClass,!1),gt(Rt,this.options.chosenClass,!1),Bt({sortable:this,name:"unchoose",toEl:Xt,newIndex:null,newDraggableIndex:null,originalEvent:t}),jt!==Xt?(Vt>=0&&(Bt({rootEl:Xt,name:"add",toEl:Xt,fromEl:jt,originalEvent:t}),Bt({sortable:this,name:"remove",toEl:Xt,originalEvent:t}),Bt({rootEl:Xt,name:"sort",toEl:Xt,fromEl:jt,originalEvent:t}),Bt({sortable:this,name:"sort",toEl:Xt,originalEvent:t})),Jt&&Jt.save()):Vt!==zt&&Vt>=0&&(Bt({sortable:this,name:"update",toEl:Xt,originalEvent:t}),Bt({sortable:this,name:"sort",toEl:Xt,originalEvent:t})),Ne.active&&(null!=Vt&&-1!==Vt||(Vt=zt,Ut=$t),Bt({sortable:this,name:"end",toEl:Xt,originalEvent:t}),this.save())))),this._nulling()},_nulling:function(){Lt("nulling",this),jt=Rt=Xt=Yt=Ht=Wt=Gt=qt=Zt=Qt=ae=Vt=Ut=zt=$t=re=ie=Jt=Kt=Ne.dragged=Ne.ghost=Ne.clone=Ne.active=null,fe.forEach((function(t){t.checked=!0})),fe.length=te=ee=0},handleEvent:function(t){switch(t.type){case"drop":case"dragend":this._onDrop(t);break;case"dragenter":case"dragover":Rt&&(this._onDragOver(t),function(t){t.dataTransfer&&(t.dataTransfer.dropEffect="move"),t.cancelable&&t.preventDefault()}(t));break;case"selectstart":t.preventDefault()}},toArray:function(){for(var t,e=[],n=this.el.children,o=0,a=n.length,r=this.options;o{const e=t.target;this.name(e.value),this.slug((0,hn.slug)(e.value))}})),50),t.add("slug",m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.edit_tag.slug_label")),m("input",{className:"FormControl",bidi:this.slug})),40),t.add("description",m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.edit_tag.description_label")),m("textarea",{className:"FormControl",bidi:this.description})),30),t.add("color",m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.edit_tag.color_label")),m(un(),{className:"FormControl",placeholder:"#aaaaaa",bidi:this.color})),20),t.add("icon",m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.edit_tag.icon_label")),m("div",{className:"helpText"},a().translator.trans("flarum-tags.admin.edit_tag.icon_text",{a:m("a",{href:a().refs.fontawesome,tabindex:"-1"})})),m("input",{className:"FormControl",placeholder:"fas fa-bolt",bidi:this.icon})),10),t.add("hidden",m("div",{className:"Form-group"},m("div",null,m("label",{className:"checkbox"},m("input",{type:"checkbox",bidi:this.isHidden}),a().translator.trans("flarum-tags.admin.edit_tag.hide_label")))),10),t.add("submit",m("div",{className:"Form-group Form-controls"},m(g(),{type:"submit",className:"Button Button--primary EditTagModal-save",loading:this.loading},a().translator.trans("flarum-tags.admin.edit_tag.submit_button")),this.tag.exists&&m("button",{type:"button",className:"Button EditTagModal-delete",onclick:this.delete.bind(this)},a().translator.trans("flarum-tags.admin.edit_tag.delete_tag_button"))),-10),t}submitData(){return{name:this.name(),slug:this.slug(),description:this.description(),color:this.color(),icon:this.icon(),isHidden:this.isHidden(),isPrimary:this.isPrimary()}}onsubmit(t){t.preventDefault(),this.loading=!0,this.tag.save(this.submitData()).then((()=>this.hide()),(()=>this.loading=!1))}delete(){if(confirm(vn()(a().translator.trans("flarum-tags.admin.edit_tag.delete_tag_confirmation")))){const t=a().store.all("tags").filter((t=>t.parent()===this.tag));this.tag.delete().then((()=>{t.forEach((t=>t.pushData({attributes:{isChild:!1}}))),m.redraw()})),this.hide()}}}function yn(t){return m("li",{"data-id":t.id(),style:{color:t.color()}},m("div",{className:"TagListItem-info"},(0,b.A)(t),m("span",{className:"TagListItem-name"},t.name()),m(g(),{className:"Button Button--link",icon:"fas fa-pencil-alt","aria-label":a().translator.trans("flarum-tags.admin.tags.edit_tag_label",{tag:t.name()}),onclick:()=>a().modal.show(bn,{model:t})})),!t.isChild()&&null!==t.position()&&m("ol",{className:"TagListItem-children TagList"},(0,y.A)(a().store.all("tags")).filter((e=>e.parent()===t)).map(yn)))}flarum.reg.add("flarum-tags","admin/components/EditTagModal",bn);class _n extends(Je()){oninit(t){super.oninit(t),this.forcedRefreshKey=0,this.loading=!0,a().tagList.load(["parent"]).then((()=>{this.loading=!1,m.redraw()}))}content(){if(this.loading)return m(f(),null);const t=this.setting("flarum-tags.min_primary_tags",0),e=this.setting("flarum-tags.max_primary_tags",0),n=this.setting("flarum-tags.min_secondary_tags",0),o=this.setting("flarum-tags.max_secondary_tags",0),r=(0,y.A)(a().store.all("tags").filter((t=>!t.parent())));return m("div",{className:"TagsContent"},m("div",{className:"TagsContent-list"},m("div",{className:"container",key:this.forcedRefreshKey,oncreate:this.onListOnCreate.bind(this)},m(on(),null,m(rn(),{className:"TagGroup",label:a().translator.trans("flarum-tags.admin.tags.primary_heading")},m("ol",{className:"TagList TagList--primary"},r.filter((t=>null!==t.position()&&!t.isChild())).map(yn)),m(g(),{className:"Button TagList-button",icon:"fas fa-plus",onclick:()=>a().modal.show(bn,{primary:!0})},a().translator.trans("flarum-tags.admin.tags.create_primary_tag_button"))),m(rn(),{className:"TagGroup TagGroup--secondary",label:a().translator.trans("flarum-tags.admin.tags.secondary_heading")},m("ul",{className:"TagList"},r.filter((t=>null===t.position())).sort(((t,e)=>t.name().localeCompare(e.name()))).map(yn)),m(g(),{className:"Button TagList-button",icon:"fas fa-plus",onclick:()=>a().modal.show(bn,{primary:!1})},a().translator.trans("flarum-tags.admin.tags.create_secondary_tag_button"))),m(rn(),{label:a().translator.trans("flarum-tags.admin.tags.settings_heading")},m(en(),null,m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.tag_settings.required_primary_heading")),m("div",{className:"helpText"},a().translator.trans("flarum-tags.admin.tag_settings.required_primary_text")),m("div",{className:"TagSettings-rangeInput"},m("input",{className:"FormControl",type:"number",min:"0",value:t(),oninput:Qe()("value",this.setMinTags.bind(this,t,e))}),a().translator.trans("flarum-tags.admin.tag_settings.range_separator_text"),m("input",{className:"FormControl",type:"number",min:t(),bidi:e}))),m("div",{className:"Form-group"},m("label",null,a().translator.trans("flarum-tags.admin.tag_settings.required_secondary_heading")),m("div",{className:"helpText"},a().translator.trans("flarum-tags.admin.tag_settings.required_secondary_text")),m("div",{className:"TagSettings-rangeInput"},m("input",{className:"FormControl",type:"number",min:"0",value:n(),oninput:Qe()("value",this.setMinTags.bind(this,n,o))}),a().translator.trans("flarum-tags.admin.tag_settings.range_separator_text"),m("input",{className:"FormControl",type:"number",min:n(),bidi:o}))),m("div",{className:"Form-group Form-controls"},this.submitButton())))),m("div",{className:"TagsContent-footer"},m("p",null,a().translator.trans("flarum-tags.admin.tags.about_tags_text"))))))}onListOnCreate(t){this.$(".TagList").get().map((t=>{Ue.create(t,{group:"tags",delay:50,delayOnTouchOnly:!0,touchStartThreshold:5,animation:150,swapThreshold:.65,dragClass:"sortable-dragging",ghostClass:"sortable-placeholder",onSort:t=>this.onSortUpdate(t)})}))}setMinTags(t,e,n){t(n),e(Math.max(n,e()))}onSortUpdate(t){t.from instanceof HTMLOListElement&&t.to instanceof HTMLUListElement&&a().store.getById("tags",t.item.getAttribute("data-id")).pushData({attributes:{position:null,isChild:!1},relationships:{parent:null}});const e=this.$(".TagList--primary > li").map((function(){return{id:$(this).data("id"),children:$(this).find("li").map((function(){return $(this).data("id")})).get()}})).get();e.forEach(((t,e)=>{const n=a().store.getById("tags",t.id);n.pushData({attributes:{position:e,isChild:!1},relationships:{parent:null}}),t.children.forEach(((t,e)=>{a().store.getById("tags",t).pushData({attributes:{position:e,isChild:!0},relationships:{parent:n}})}))})),a().request({url:a().forum.attribute("apiUrl")+"/tags/order",method:"POST",body:{order:e}}),this.forcedRefreshKey++,m.redraw()}}flarum.reg.add("flarum-tags","admin/components/TagsPage",_n);const wn=[...z,(new(R().Admin)).page(_n).permission((()=>({icon:"fas fa-tag",label:a().translator.trans("flarum-tags.admin.permissions.tag_discussions_label"),permission:"discussion.tag"})),"moderate",95).permission((()=>({icon:"fas fa-tags",label:a().translator.trans("flarum-tags.admin.permissions.bypass_tag_counts_label"),permission:"bypassTagCounts"})),"start",89)];a().initializers.add("flarum-tags",(t=>{t.tagList=new L,(0,r.extend)(s().prototype,"oninit",(function(){this.loading=!0})),(0,r.extend)(s().prototype,"oncreate",(function(){a().tagList.load().then((()=>{this.loading=!1,m.redraw()}))})),(0,r.override)(s().prototype,"view",(function(t,e){return this.loading?m(f(),null):t(e)})),(0,r.override)(a(),"getRequiredPermissions",((t,e)=>{const n=e.match(/^tag\d+\./);return n?t(e.substr(n[0].length)).map((t=>n[0]+t)):t(e)})),(0,r.extend)(s().prototype,"scopeItems",(t=>{(0,y.A)(a().store.all("tags")).filter((t=>t.isRestricted())).forEach((e=>t.add("tag"+e.id(),{label:(0,v.A)(e),onremove:()=>e.save({isRestricted:!1}),render:t=>"setting"in t?null:"viewForum"===t.permission||"startDiscussion"===t.permission||t.permission?.startsWith("discussion.")&&!1!==t.tagScoped||t.tagScoped?m(c(),{permission:`tag${e.id()}.${t.permission}`,allowGuest:t.allowGuest}):null})))})),(0,r.extend)(s().prototype,"scopeControlItems",(t=>{const e=(0,y.A)(a().store.all("tags").filter((t=>!t.isRestricted())));e.length&&t.add("tag",m(d(),{className:"Dropdown--restrictByTag",buttonClassName:"Button Button--link",label:a().translator.trans("flarum-tags.admin.permissions.restrict_by_tag_heading"),icon:"fas fa-plus",caretIcon:null},e.map((t=>m(g(),{icon:(0,b.A)(t,{className:"Button-icon"}),onclick:()=>t.save({isRestricted:!0})},t.name())))))})),T(),(0,r.extend)(s().prototype,"startItems",(t=>{t.add("allowTagChange",{icon:"fas fa-tag",label:a().translator.trans("flarum-tags.admin.permissions.allow_edit_tags_label"),setting:()=>{const t=parseInt(a().data.settings.allow_tag_change,10);return m(E(),{defaultLabel:t?a().translator.trans("core.admin.permissions_controls.allow_some_minutes_button",{count:t}):a().translator.trans("core.admin.permissions_controls.allow_indefinitely_button"),key:"allow_tag_change",options:[{value:"-1",label:a().translator.trans("core.admin.permissions_controls.allow_indefinitely_button")},{value:"10",label:a().translator.trans("core.admin.permissions_controls.allow_ten_minutes_button")},{value:"reply",label:a().translator.trans("core.admin.permissions_controls.allow_until_reply_button")}]})}},90)})),(0,r.extend)(I().prototype,"customFieldComponents",(function(t){t.add("flarum-tags.select-tags",(t=>m(O,Object.assign({},t,{settingValue:t.bidi}))))}))}))},8968:(t,e,n)=>{"use strict";n.d(e,{A:()=>r});var o=n(8443),a=n.n(o);function r(t,e,n){void 0===e&&(e={}),void 0===n&&(n={});const o=t&&t.icon(),{useColor:r=!0}=n;return e.className=a()([e.className,"icon text-colored",o?t.icon():"TagIcon"]),t&&r?(e.style=e.style||{},e.style["--color"]=t.color()):t||(e.className+=" untagged"),o?m("i",e):m("span",e)}flarum.reg.add("flarum-tags","common/helpers/tagIcon",r)},339:(t,e,n)=>{"use strict";n.d(e,{A:()=>h});var o=n(9414),a=n.n(o),r=n(2088),i=n.n(r),s=n(8443),l=n.n(s),c=n(8296),u=n.n(c),d=n(8968);function h(t,e){void 0===e&&(e={}),e.style=e.style||{},e.className="TagLabel "+(e.className||"");const n=a()(e,"link"),o=t?t.name():app.translator.trans("flarum-tags.lib.deleted_tag_text");if(t){const o=t.color();o&&(e.style["--tag-bg"]=o,e.className=l()(e.className,"colored",u()(o))),n&&(e.title=t.description()||"",e.href=app.route("tag",{tags:t.slug()})),t.isChild()&&(e.className+=" TagLabel--child")}else e.className+=" untagged";return m(n?i():"span",e,m("span",{className:"TagLabel-text"},t&&t.icon()&&(0,d.A)(t,{className:"TagLabel-icon"},{useColor:!1}),m("span",{className:"TagLabel-name"},o)))}flarum.reg.add("flarum-tags","common/helpers/tagLabel",h)},4085:()=>{},1618:(t,e,n)=>{"use strict";function o(t){return t.slice(0).sort(((t,e)=>{const n=t.position(),o=e.position();if(null===n&&null===o)return e.discussionCount()-t.discussionCount();if(null===o)return-1;if(null===n)return 1;const a=t.parent(),r=e.parent();return a===r?n-o:a&&r?a.position()-r.position():a?a===e?1:a.position()-o:r?r===t?-1:n-r.position():0}))}n.d(e,{A:()=>o}),flarum.reg.add("flarum-tags","common/utils/sortTags",o)},4950:t=>{"use strict";t.exports=flarum.reg.get("core","common/Component")},954:t=>{"use strict";t.exports=flarum.reg.get("core","common/app")},5336:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Button")},3015:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/FormModal")},2088:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Link")},6661:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/LoadingIndicator")},8607:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/highlight")},8296:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/textContrastClass")},9280:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/KeyboardNavigatable")},1821:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/Stream")},8443:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/classList")},9414:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extract")},5233:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extractText")},8805:(t,e,n)=>{"use strict";function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function a(t,e,n){return(e=function(t){var e=function(t){if("object"!=o(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,"string");if("object"!=o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==o(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}n.d(e,{A:()=>a})}},o={};function a(t){flarum.reg._webpack_runtimes["flarum-tags"]||=a;var e=o[t];if(void 0!==e)return e.exports;var r=o[t]={exports:{}};return n[t](r,r.exports,a),r.exports}a.m=n,a.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return a.d(e,{a:e}),e},a.d=(t,e)=>{for(var n in e)a.o(e,n)&&!a.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},a.f={},a.e=t=>Promise.all(Object.keys(a.f).reduce(((e,n)=>(a.f[n](t,e),e)),[])),a.u=t=>"common/components/TagSelectionModal.js",a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t={},e="module.exports:",a.l=(n,o,r,i)=>{if(t[n])t[n].push(o);else{var s,l;if(void 0!==r)for(var c=document.getElementsByTagName("script"),u=0;u{s.onerror=s.onload=null,clearTimeout(h);var a=t[n];if(delete t[n],s.parentNode&&s.parentNode.removeChild(s),a&&a.forEach((t=>t(o))),e)return e(o)},h=setTimeout(m.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=m.bind(null,s.onerror),s.onload=m.bind(null,s.onload),l&&document.head.appendChild(s)}},a.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;a.g.importScripts&&(t=a.g.location+"");var e=a.g.document;if(!t&&e&&(e.currentScript&&"SCRIPT"===e.currentScript.tagName.toUpperCase()&&(t=e.currentScript.src),!t)){var n=e.getElementsByTagName("script");if(n.length)for(var o=n.length-1;o>-1&&(!t||!/^http(s?):/.test(t));)t=n[o--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=t})(),a.f.compat=(t,e)=>{const n=a.l;a.l=flarum.reg.loadChunk.bind(flarum.reg,n)},(()=>{var t={884:0};a.f.j=(e,n)=>{var o=a.o(t,e)?t[e]:void 0;if(0!==o)if(o)n.push(o[2]);else{var r=new Promise(((n,a)=>o=t[e]=[n,a]));n.push(o[2]=r);var i=a.p+a.u(e),s=new Error;a.l(i,(n=>{if(a.o(t,e)&&(0!==(o=t[e])&&(t[e]=void 0),o)){var r=n&&("load"===n.type?"missing":n.type),i=n&&n.target&&n.target.src;s.message="Loading chunk "+e+" failed.\n("+r+": "+i+")",s.name="ChunkLoadError",s.type=r,s.request=i,o[1](s)}}),"chunk-"+e,e)}};var e=(e,n)=>{var o,r,[i,s,l]=n,c=0;if(i.some((e=>0!==t[e]))){for(o in s)a.o(s,o)&&(a.m[o]=s[o]);l&&l(a)}for(e&&e(n);c{"use strict";a.r(r),a.d(r,{extend:()=>n.X});var t=a(4085),e={};for(const n in t)"default"!==n&&(e[n]=()=>t[n]);a.d(r,e);var n=a(4400)})(),module.exports=r})(); //# sourceMappingURL=admin.js.map \ No newline at end of file diff --git a/extensions/tags/js/dist/admin.js.map b/extensions/tags/js/dist/admin.js.map index 957ec50d0..777ac91f0 100644 --- a/extensions/tags/js/dist/admin.js.map +++ b/extensions/tags/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"file":"admin.js","mappings":"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","sources":["webpack://@flarum/tags/webpack/runtime/load script","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/PermissionGrid')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/PermissionDropdown')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Dropdown')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/BasicsPage')\"","webpack://@flarum/tags/./src/admin/addTagsHomePageOption.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/SettingDropdown')\"","webpack://@flarum/tags/./src/common/helpers/tagsLabel.js","webpack://@flarum/tags/./src/admin/components/SelectTagsSettingComponent.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/FormGroup')\"","webpack://@flarum/tags/./src/common/states/TagListState.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/computed')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Model')\"","webpack://@flarum/tags/./src/common/models/Tag.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/query/IGambit')\"","webpack://@flarum/tags/./src/common/query/discussions/TagGambit.ts","webpack://@flarum/tags/./src/common/extend.ts","webpack://@flarum/tags/../../../node_modules/sortablejs/modular/sortable.esm.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/ExtensionPage')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/withAttr')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Form')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/FormSectionGroup')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/FormSection')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/ColorPreviewInput')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/string')\"","webpack://@flarum/tags/./src/admin/components/EditTagModal.tsx","webpack://@flarum/tags/./src/admin/components/TagsPage.js","webpack://@flarum/tags/./src/admin/extend.tsx","webpack://@flarum/tags/./src/admin/index.ts","webpack://@flarum/tags/./src/admin/addTagsPermissionScope.tsx","webpack://@flarum/tags/./src/admin/addTagChangePermission.js","webpack://@flarum/tags/./src/admin/addTagSelectionSettingComponent.tsx","webpack://@flarum/tags/./src/common/helpers/tagIcon.js","webpack://@flarum/tags/./src/common/helpers/tagLabel.js","webpack://@flarum/tags/./src/common/utils/sortTags.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Component')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/FormModal')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/highlight')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/textContrastClass')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/KeyboardNavigatable')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/Stream')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extract')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/tags/../../../node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/tags/../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/tags/../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/tags/../../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/tags/webpack/bootstrap","webpack://@flarum/tags/webpack/runtime/compat get default export","webpack://@flarum/tags/webpack/runtime/define property getters","webpack://@flarum/tags/webpack/runtime/ensure chunk","webpack://@flarum/tags/webpack/runtime/get javascript chunk filename","webpack://@flarum/tags/webpack/runtime/global","webpack://@flarum/tags/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/tags/webpack/runtime/make namespace object","webpack://@flarum/tags/webpack/runtime/publicPath","webpack://@flarum/tags/webpack/runtime/compat","webpack://@flarum/tags/webpack/runtime/jsonp chunk loading"],"sourcesContent":["var inProgress = {};\nvar dataWebpackPrefix = \"module.exports:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/PermissionGrid');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/PermissionDropdown');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Dropdown');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/BasicsPage');","import { extend } from 'flarum/common/extend';\nimport BasicsPage from 'flarum/admin/components/BasicsPage';\nexport default function () {\n extend(BasicsPage, 'homePageItems', items => {\n items.add('tags', {\n path: '/tags',\n label: app.translator.trans('flarum-tags.admin.basics.tags_label')\n });\n });\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/SettingDropdown');","import extract from 'flarum/common/utils/extract';\nimport tagLabel from './tagLabel';\nimport sortTags from '../utils/sortTags';\nimport classList from 'flarum/common/utils/classList';\nexport default function tagsLabel(tags, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n const children = [];\n const {\n link,\n ...otherAttrs\n } = attrs;\n otherAttrs.className = classList('TagsLabel', otherAttrs.className);\n if (tags) {\n sortTags(tags).forEach(tag => {\n if (tag || tags.length === 1) {\n children.push(tagLabel(tag, {\n link\n }));\n }\n });\n } else {\n children.push(tagLabel());\n }\n return m(\"span\", otherAttrs, children);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagsLabel', tagsLabel);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport tagsLabel from '../../common/helpers/tagsLabel';\nexport default class SelectTagsSettingComponent extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"tags\", []);\n _defineProperty(this, \"loaded\", false);\n }\n view() {\n const value = JSON.parse(this.attrs.settingValue() || '[]');\n if (!this.loaded) {\n app.tagList.load(['parent']).then(tags => {\n this.tags = tags.filter(tag => value.includes(tag.id()));\n this.loaded = true;\n m.redraw();\n });\n }\n return m(\"div\", {\n className: \"Form-group SelectTagsSettingComponent\"\n }, m(\"label\", null, this.attrs.label), this.attrs.help && m(\"p\", {\n className: \"helpText\"\n }, this.attrs.help), !this.loaded ? m(LoadingIndicator, {\n size: \"small\",\n display: \"inline\"\n }) : m(Button, {\n className: \"Button Button--text\",\n onclick: () => app.modal.show(() => import(/* webpackChunkName: 'common/components/TagSelectionModal', webpackMode: 'lazy-once' */ '../../common/components/TagSelectionModal'), {\n selectedTags: this.tags,\n onsubmit: tags => {\n this.tags = tags;\n this.attrs.settingValue(JSON.stringify(tags.map(tag => tag.id())));\n },\n ...this.attrs.options\n })\n }, !!this.tags.length ? tagsLabel(this.tags) : m(\"span\", {\n className: \"TagLabel untagged\"\n }, app.translator.trans('flarum-tags.admin.settings.button_text'))));\n }\n}\nflarum.reg.add('flarum-tags', 'admin/components/SelectTagsSettingComponent', SelectTagsSettingComponent);flarum.reg.addChunkModule('955', '671', 'flarum-tags', 'common/components/TagSelectionModal');\nflarum.reg.addChunkModule('955', '671', 'flarum-tags', 'forum/components/ToggleButton');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/FormGroup');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nexport default class TagListState {\n constructor() {\n _defineProperty(this, \"loadedIncludes\", void 0);\n }\n async load(includes) {\n if (includes === void 0) {\n includes = [];\n }\n if (!this.loadedIncludes) {\n return this.query(includes);\n }\n const unloadedIncludes = includes.filter(include => !this.loadedIncludes.has(include));\n if (unloadedIncludes.length === 0) {\n return Promise.resolve(app.store.all('tags'));\n }\n return this.query(unloadedIncludes);\n }\n async query(includes) {\n if (includes === void 0) {\n includes = [];\n }\n this.loadedIncludes ??= new Set();\n return app.store.find('tags', {\n include: includes.join(',')\n }).then(val => {\n const tags = Array.isArray(val) ? val : [val];\n includes.forEach(include => this.loadedIncludes.add(include));\n return tags;\n });\n }\n}\nflarum.reg.add('flarum-tags', 'common/states/TagListState', TagListState);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/computed');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Model');","import computed from 'flarum/common/utils/computed';\nimport Model from 'flarum/common/Model';\nexport default class Tag extends Model {\n name() {\n return Model.attribute('name').call(this);\n }\n slug() {\n return Model.attribute('slug').call(this);\n }\n description() {\n return Model.attribute('description').call(this);\n }\n color() {\n return Model.attribute('color').call(this);\n }\n backgroundUrl() {\n return Model.attribute('backgroundUrl').call(this);\n }\n backgroundMode() {\n return Model.attribute('backgroundMode').call(this);\n }\n icon() {\n return Model.attribute('icon').call(this);\n }\n position() {\n return Model.attribute('position').call(this);\n }\n parent() {\n return Model.hasOne('parent').call(this);\n }\n children() {\n return Model.hasMany('children').call(this);\n }\n defaultSort() {\n return Model.attribute('defaultSort').call(this);\n }\n isChild() {\n return Model.attribute('isChild').call(this);\n }\n isHidden() {\n return Model.attribute('isHidden').call(this);\n }\n isPrimary() {\n return Model.attribute('isPrimary').call(this);\n }\n discussionCount() {\n return Model.attribute('discussionCount').call(this);\n }\n lastPostedAt() {\n return Model.attribute('lastPostedAt', Model.transformDate).call(this);\n }\n lastPostedDiscussion() {\n return Model.hasOne('lastPostedDiscussion').call(this);\n }\n isRestricted() {\n return Model.attribute('isRestricted').call(this);\n }\n canStartDiscussion() {\n return Model.attribute('canStartDiscussion').call(this);\n }\n canAddToDiscussion() {\n return Model.attribute('canAddToDiscussion').call(this);\n }\n isPrimaryParent() {\n return computed('position', 'parent', (position, parent) => position !== null && parent === false).call(this);\n }\n}\nflarum.reg.add('flarum-tags', 'common/models/Tag', Tag);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/query/IGambit');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nimport { KeyValueGambit } from 'flarum/common/query/IGambit';\nexport default class TagGambit extends KeyValueGambit {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"predicates\", true);\n }\n key() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.key', {}, true);\n }\n hint() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.hint', {}, true);\n }\n filterKey() {\n return 'tag';\n }\n gambitValueToFilterValue(value) {\n return [value];\n }\n fromFilter(value, negate) {\n let gambits = [];\n if (Array.isArray(value)) {\n gambits = value.map(value => this.fromFilter(value.toString(), negate));\n } else {\n return `${negate ? '-' : ''}${this.key()}:${this.filterValueToGambitValue(value)}`;\n }\n return gambits.join(' ');\n }\n filterValueToGambitValue(value) {\n return value;\n }\n}\nflarum.reg.add('flarum-tags', 'common/query/discussions/TagGambit', TagGambit);","import Extend from 'flarum/common/extenders';\nimport Tag from './models/Tag';\nimport TagGambit from './query/discussions/TagGambit';\nexport default [new Extend.Store() //\n.add('tags', Tag), new Extend.Search() //\n.gambit('discussions', TagGambit)];","/**!\n * Sortable 1.15.3\n * @author\tRubaXa \n * @author\towenm \n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n return _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.15.3\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction matches( /**HTMLElement*/el, /**String*/selector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n return false;\n}\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\nfunction closest( /**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n return null;\n}\nvar R_SPACE = /\\s+/g;\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\nfunction css(el, prop, val) {\n var style = el && el.style;\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n } while (!selfOnly && (el = el.parentNode));\n }\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n return matrixFn && new matrixFn(appliedTransforms);\n}\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n return list;\n }\n return [];\n}\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\r\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\r\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\r\n * @param {[HTMLElement]} container The parent the element will be placed in\r\n * @return {Object} The boundingClientRect of el, with specified adjustments\r\n */\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode;\n\n // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect();\n\n // Set relative to edges of padding box of container\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n } while (container = container.parentNode);\n }\n }\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\r\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n\n /* jshint boss:true */\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n return false;\n}\n\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param {HTMLElement} el The parent element\r\n * @param {Number} childNum The index of the child\r\n * @param {Object} options Parent Sortable's options\r\n * @return {HTMLElement} The child at index childNum, or null if not found\r\n */\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n currentChild++;\n }\n i++;\n }\n return null;\n}\n\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param {HTMLElement} el Parent element\r\n * @param {selector} selector Any other elements that should be ignored\r\n * @return {HTMLElement} The last child, ignoring ghostEl\r\n */\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n return last || null;\n}\n\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param {HTMLElement} el\r\n * @param {selector} selector\r\n * @return {number}\r\n */\nfunction index(el, selector) {\n var index = 0;\n if (!el || !el.parentNode) {\n return -1;\n }\n\n /* jshint boss:true */\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n return index;\n}\n\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param {HTMLElement} el\r\n * @return {Array} Offsets in the format of [left, top]\r\n */\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n return [offsetLeft, offsetTop];\n}\n\n/**\r\n * Returns the index of the object within the given array\r\n * @param {Array} arr Array that may or may not hold the object\r\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number} The index of the object in the array, or -1\r\n */\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n return -1;\n}\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n } while (elem = elem.parentNode);\n return getWindowScrollingElement();\n}\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n return dst;\n}\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\nvar _throttleTimeout;\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\nfunction getChildContainingRectFromElement(container, options, ghostEl) {\n var rect = {};\n Array.from(container.children).forEach(function (child) {\n var _rect$left, _rect$top, _rect$right, _rect$bottom;\n if (!closest(child, options.draggable, container, false) || child.animated || child === ghostEl) return;\n var childRect = getRect(child);\n rect.left = Math.min((_rect$left = rect.left) !== null && _rect$left !== void 0 ? _rect$left : Infinity, childRect.left);\n rect.top = Math.min((_rect$top = rect.top) !== null && _rect$top !== void 0 ? _rect$top : Infinity, childRect.top);\n rect.right = Math.max((_rect$right = rect.right) !== null && _rect$right !== void 0 ? _rect$right : -Infinity, childRect.right);\n rect.bottom = Math.max((_rect$bottom = rect.bottom) !== null && _rect$bottom !== void 0 ? _rect$bottom : -Infinity, childRect.bottom);\n });\n rect.width = rect.right - rect.left;\n rect.height = rect.bottom - rect.top;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);\n\n // If animating: compensate for current animation\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n target.toRect = toRect;\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&\n // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n }\n\n // if fromRect != toRect: animate\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n if (!time) {\n time = _this.options.animation;\n }\n _this.animate(target, animatingRect, toRect, time);\n }\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\nfunction repaint(target) {\n return target.offsetWidth;\n}\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n this.eventCanceled = false;\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return;\n // Fire global events if it exists in this sortable\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n\n // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized;\n\n // Add default options from plugin\n _extends(defaults, initialized.defaults);\n });\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return;\n\n // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\n ghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n\n _silent = false,\n savedInputChecked = [];\n\n/** @const */\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\n supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return;\n // false when <= IE11\n if (IE11OrLess) {\n return false;\n }\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n }(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n },\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n },\n /**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\n */\n _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n },\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n var group = {};\n var originalGroup = options.group;\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n },\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n },\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n };\n\n// #1184 fix - Prevent click event on fallback if dragged but item not changed position\nif (documentExists && !ChromeForAndroid) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n if (nearest) {\n // Create imitation event\n var event = {};\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n nearest[expando]._onDragOver(event);\n }\n }\n};\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n\n/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n this.el = el; // root element\n this.options = options = _extends({}, options);\n\n // Export instance\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults);\n\n // Set default options\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n _prepareGroup(options);\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n // Setup drag mode\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n }\n\n // Bind events\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n sortables.push(this.el);\n\n // Restore sorting\n options.store && options.store.get && this.sort(options.store.get(this) || []);\n\n // Add animation state manager\n _extends(this, AnimationStateManager());\n}\nSortable.prototype = /** @lends Sortable.prototype */{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart( /** Event|TouchEvent */evt) {\n if (!evt.cancelable) return;\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n _saveInputCheckedState(el);\n\n // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n if (dragEl) {\n return;\n }\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n }\n\n // cancel dnd if original target is content editable\n if (originalTarget.isContentEditable) {\n return;\n }\n\n // Safari ignores further event handling after mousedown\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n target = closest(target, options.draggable, el, false);\n if (target && target.animated) {\n return;\n }\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n }\n\n // Get the index of the dragged element within its parent\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable);\n\n // Check filter\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n }\n\n // Prepare `dragstart`\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart( /** Event */evt, /** Touch */touch, /** HTMLElement */target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n _this._onDrop();\n return;\n }\n // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n _this._disableDelayedDragEvents();\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n }\n\n // Bind the events: dragstart/dragend\n _this._triggerDragStart(evt, touch);\n\n // Drag start event\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n });\n\n // Chosen item\n toggleClass(dragEl, options.chosenClass, true);\n };\n\n // Disable \"draggable\"\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop);\n\n // Make dragEl draggable (must be before delay for FireFox)\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n pluginEvent('delayStart', this, {\n evt: evt\n });\n\n // Delay is impossible for native DnD in Edge or IE\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( /** TouchEvent|PointerEvent **/e) {\n var touch = e.touches ? e.touches[0] : e;\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart( /** Event */evt, /** Touch */touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n awaitingDragStarted = false;\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n var options = this.options;\n\n // Apply effect\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost();\n\n // Drag start event\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n _hideGhostForTarget();\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n target = parent; // store last element\n }\n /* jshint boss:true */ while (parent = getParentOrHost(parent));\n }\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove( /**TouchEvent*/evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);\n\n // only set the status to dragging, when we are actually dragging\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n this._onDragStart(evt, true);\n }\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options;\n\n // Position absolutely\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl);\n\n // Set transform-origin\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart( /**Event*/evt, /**boolean*/fallback) {\n var _this = this;\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n pluginEvent('setupClone', this);\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.removeAttribute(\"id\");\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n this._hideClone();\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n }\n\n // #1143: IFrame support workaround\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n _this._hideClone();\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true);\n\n // Set proper drop events\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n on(document, 'drop', _this);\n\n // #1276 fix:\n css(dragEl, 'transform', 'translateZ(0)');\n }\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver( /**Event*/evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n if (_silent) return;\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n }\n\n // Capture animation state\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n _this.captureAnimationState();\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n }\n\n // Return invocation when dragEl is inserted (or completed)\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n }\n\n // Animation\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n }\n\n // Null lastTarget if it is not inside a previously swapped element\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n }\n\n // no bubbling and not fallback\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n\n // Do not detect for empty insert if already inserted\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n }\n\n // Call when dragEl has been inserted\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n ignoreNextClick = false;\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n if (revert) {\n parentEl = rootEl; // actualization\n capture();\n this._hideClone();\n dragOverEvent('revert');\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n return completed(true);\n }\n var elLastChild = lastChild(el, options.draggable);\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n }\n\n // if there is a last element, it is the target\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n if (target) {\n targetRect = getRect(target);\n }\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n if (firstChild === dragEl) {\n return completed(false);\n }\n target = firstChild;\n targetRect = getRect(target);\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n }\n // If dragEl is already beside target: Do not insert\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n }\n\n // Undo chrome's scroll adjustment (has no effect on other browsers)\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n parentEl = dragEl.parentNode; // actualization\n\n // must be done before animation\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n changed();\n return completed(true);\n }\n }\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop( /**Event*/evt) {\n var el = this.el,\n options = this.options;\n\n // Get the index of the dragged element within its parent\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode;\n\n // Get again after plugin event\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n if (Sortable.eventCanceled) {\n this._nulling();\n return;\n }\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n _cancelNextTick(this.cloneId);\n _cancelNextTick(this._dragStartId);\n\n // Unbind events\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n this._offMoveEvents();\n this._offUpEvents();\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n css(dragEl, 'transform', '');\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n _disableDraggable(dragEl);\n dragEl.style['will-change'] = '';\n\n // Remove classes\n // ghostClass is added in dragStarted\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n toggleClass(dragEl, this.options.chosenClass, false);\n\n // Drag stop event\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n // Remove event\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // drag from one list and drop into another\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // Save sorting\n this.save();\n }\n }\n }\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent( /**Event*/evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n break;\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n _globalDragOver(evt);\n }\n break;\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n for (; i < n; i++) {\n el = children[i];\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n return order;\n },\n /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n /**\r\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\n */\n option: function option(name, value) {\n var options = this.options;\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n /**\r\n * Destroy\r\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n }\n // Remove draggable attributes\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n this._onDrop();\n this._disableDelayedDragEvents();\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n return;\n }\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return;\n\n // show clone at dragEl or original position\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\nfunction _globalDragOver( /**Event*/evt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n evt.cancelable && evt.preventDefault();\n}\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal;\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n return retVal;\n}\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\nfunction _unsilent() {\n _silent = false;\n}\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX < childContainingRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < childContainingRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left;\n}\nfunction _ghostIsLast(evt, vertical, sortable) {\n var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX > childContainingRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > childContainingRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top;\n}\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n invert = invert || invertSwap;\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n return 0;\n}\n\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n while (i--) {\n sum += str.charCodeAt(i);\n }\n return sum.toString(36);\n}\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n}\n\n// Fixed #973:\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n}\n\n// Export utils\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild,\n expando: expando\n};\n\n/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\nSortable.get = function (element) {\n return element[expando];\n};\n\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\n */\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n};\n\n// Export\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n };\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt;\n\n // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback);\n\n // Listener for pointer element change\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval();\n // Detect for pointer elem change, emulating native DnD behaviour\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn;\n\n // New scroll root, set scrollEl\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n var layersOut = 0;\n var currentParent = scrollEl;\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n }\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\nfunction Revert() {}\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n this.sortable.animateAll();\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\nfunction Remove() {}\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\n multiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\n folding = false,\n // Folding any other time\n dragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n if (!sortable.options.avoidImplicitDeselect) {\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n }\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n dataTransfer.setData('Text', data);\n }\n };\n }\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n sortable._hideClone();\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n });\n\n // Sort multi-drag elements\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n\n sortable.captureAnimationState();\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n }\n\n // Remove all auxiliary multidrag items from el, if sorting enabled\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n initialFolding = false;\n // If leaving sort:false root, or already folding - Fold to new location\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute);\n\n // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n }\n\n // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n activeSortable._showClone(sortable);\n\n // Unfold animation for clones if showing from hidden\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children;\n\n // Multi-drag selection\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n\n // Modifier activated, select from last to dragEl\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvent: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n }\n }\n\n // Multi-drag drop\n if (dragStarted && this.isMultiDrag) {\n folding = false;\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect;\n\n // Prepare unfold animation\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n }\n\n // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n multiDragIndex++;\n });\n\n // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n if (update) {\n dispatchSortableEvent('update');\n dispatchSortableEvent('sort');\n }\n }\n }\n\n // Must be done after capturing individual rects (scroll bar)\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n multiDragSortable = toSortable;\n }\n\n // Remove clones if necessary\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return;\n\n // Only deselect if selection is in this sortable\n if (multiDragSortable !== this.sortable) return;\n\n // Only deselect if target is not item in this sortable\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return;\n\n // Only deselect if left click\n if (evt && evt.button !== 0) return;\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvent: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n multiDragSortable = sortable;\n }\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n });\n\n // multiDragElements will already be sorted if folding\n var newIndex;\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n return key;\n }\n }\n });\n}\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/ExtensionPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/withAttr');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Form');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/FormSectionGroup');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/FormSection');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/ColorPreviewInput');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/string');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Button from 'flarum/common/components/Button';\nimport ColorPreviewInput from 'flarum/common/components/ColorPreviewInput';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport { slug } from 'flarum/common/utils/string';\nimport Stream from 'flarum/common/utils/Stream';\nimport extractText from 'flarum/common/utils/extractText';\nimport Form from 'flarum/common/components/Form';\nimport tagLabel from '../../common/helpers/tagLabel';\n/**\n * The `EditTagModal` component shows a modal dialog which allows the user\n * to create or edit a tag.\n */\nexport default class EditTagModal extends FormModal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"tag\", void 0);\n _defineProperty(this, \"name\", void 0);\n _defineProperty(this, \"slug\", void 0);\n _defineProperty(this, \"description\", void 0);\n _defineProperty(this, \"color\", void 0);\n _defineProperty(this, \"icon\", void 0);\n _defineProperty(this, \"isHidden\", void 0);\n _defineProperty(this, \"isPrimary\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.tag = this.attrs.model || app.store.createRecord('tags');\n this.name = Stream(this.tag.name() || '');\n this.slug = Stream(this.tag.slug() || '');\n this.description = Stream(this.tag.description() || '');\n this.color = Stream(this.tag.color() || '');\n this.icon = Stream(this.tag.icon() || '');\n this.isHidden = Stream(this.tag.isHidden() || false);\n this.isPrimary = Stream(this.attrs.primary || false);\n }\n className() {\n return 'EditTagModal Modal--small';\n }\n title() {\n return this.name() ? tagLabel(app.store.createRecord('tags', {\n attributes: this.submitData()\n })) : app.translator.trans('flarum-tags.admin.edit_tag.title');\n }\n content() {\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(Form, null, this.fields().toArray()));\n }\n fields() {\n const items = new ItemList();\n items.add('name', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.name_label')), m(\"input\", {\n className: \"FormControl\",\n placeholder: app.translator.trans('flarum-tags.admin.edit_tag.name_placeholder'),\n value: this.name(),\n oninput: e => {\n const target = e.target;\n this.name(target.value);\n this.slug(slug(target.value));\n }\n })), 50);\n items.add('slug', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.slug_label')), m(\"input\", {\n className: \"FormControl\",\n bidi: this.slug\n })), 40);\n items.add('description', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.description_label')), m(\"textarea\", {\n className: \"FormControl\",\n bidi: this.description\n })), 30);\n items.add('color', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.color_label')), m(ColorPreviewInput, {\n className: \"FormControl\",\n placeholder: \"#aaaaaa\",\n bidi: this.color\n })), 20);\n items.add('icon', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.icon_label')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-tags.admin.edit_tag.icon_text', {\n a: m(\"a\", {\n href: app.refs.fontawesome,\n tabindex: \"-1\"\n })\n })), m(\"input\", {\n className: \"FormControl\",\n placeholder: \"fas fa-bolt\",\n bidi: this.icon\n })), 10);\n items.add('hidden', m(\"div\", {\n className: \"Form-group\"\n }, m(\"div\", null, m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"checkbox\",\n bidi: this.isHidden\n }), app.translator.trans('flarum-tags.admin.edit_tag.hide_label')))), 10);\n items.add('submit', m(\"div\", {\n className: \"Form-group Form-controls\"\n }, m(Button, {\n type: \"submit\",\n className: \"Button Button--primary EditTagModal-save\",\n loading: this.loading\n }, app.translator.trans('flarum-tags.admin.edit_tag.submit_button')), this.tag.exists && m(\"button\", {\n type: \"button\",\n className: \"Button EditTagModal-delete\",\n onclick: this.delete.bind(this)\n }, app.translator.trans('flarum-tags.admin.edit_tag.delete_tag_button'))), -10);\n return items;\n }\n submitData() {\n return {\n name: this.name(),\n slug: this.slug(),\n description: this.description(),\n color: this.color(),\n icon: this.icon(),\n isHidden: this.isHidden(),\n isPrimary: this.isPrimary()\n };\n }\n onsubmit(e) {\n e.preventDefault();\n this.loading = true;\n\n // Errors aren't passed to the modal onerror handler here.\n // This is done for better error visibility on smaller screen heights.\n this.tag.save(this.submitData()).then(() => this.hide(), () => this.loading = false);\n }\n delete() {\n if (confirm(extractText(app.translator.trans('flarum-tags.admin.edit_tag.delete_tag_confirmation')))) {\n const children = app.store.all('tags').filter(tag => tag.parent() === this.tag);\n this.tag.delete().then(() => {\n children.forEach(tag => tag.pushData({\n attributes: {\n isChild: false\n }\n }));\n m.redraw();\n });\n this.hide();\n }\n }\n}\nflarum.reg.add('flarum-tags', 'admin/components/EditTagModal', EditTagModal);","import sortable from 'sortablejs';\nimport app from 'flarum/admin/app';\nimport ExtensionPage from 'flarum/admin/components/ExtensionPage';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport withAttr from 'flarum/common/utils/withAttr';\nimport Form from 'flarum/common/components/Form';\nimport FormSectionGroup from 'flarum/admin/components/FormSectionGroup';\nimport FormSection from 'flarum/admin/components/FormSection';\nimport EditTagModal from './EditTagModal';\nimport tagIcon from '../../common/helpers/tagIcon';\nimport sortTags from '../../common/utils/sortTags';\nfunction tagItem(tag) {\n return m(\"li\", {\n \"data-id\": tag.id(),\n style: {\n color: tag.color()\n }\n }, m(\"div\", {\n className: \"TagListItem-info\"\n }, tagIcon(tag), m(\"span\", {\n className: \"TagListItem-name\"\n }, tag.name()), m(Button, {\n className: \"Button Button--link\",\n icon: \"fas fa-pencil-alt\",\n \"aria-label\": app.translator.trans('flarum-tags.admin.tags.edit_tag_label', {\n tag: tag.name()\n }),\n onclick: () => app.modal.show(EditTagModal, {\n model: tag\n })\n })), !tag.isChild() && tag.position() !== null && m(\"ol\", {\n className: \"TagListItem-children TagList\"\n }, sortTags(app.store.all('tags')).filter(child => child.parent() === tag).map(tagItem)));\n}\nexport default class TagsPage extends ExtensionPage {\n oninit(vnode) {\n super.oninit(vnode);\n\n // A regular redraw won't work here, because sortable has mucked around\n // with the DOM which will confuse Mithril's diffing algorithm. Instead\n // we force a full reconstruction of the DOM by changing the key, which\n // makes mithril completely re-render the component on redraw.\n this.forcedRefreshKey = 0;\n this.loading = true;\n app.tagList.load(['parent']).then(() => {\n this.loading = false;\n m.redraw();\n });\n }\n content() {\n if (this.loading) {\n return m(LoadingIndicator, null);\n }\n const minPrimaryTags = this.setting('flarum-tags.min_primary_tags', 0);\n const maxPrimaryTags = this.setting('flarum-tags.max_primary_tags', 0);\n const minSecondaryTags = this.setting('flarum-tags.min_secondary_tags', 0);\n const maxSecondaryTags = this.setting('flarum-tags.max_secondary_tags', 0);\n const tags = sortTags(app.store.all('tags').filter(tag => !tag.parent()));\n return m(\"div\", {\n className: \"TagsContent\"\n }, m(\"div\", {\n className: \"TagsContent-list\"\n }, m(\"div\", {\n className: \"container\",\n key: this.forcedRefreshKey,\n oncreate: this.onListOnCreate.bind(this)\n }, m(FormSectionGroup, null, m(FormSection, {\n className: \"TagGroup\",\n label: app.translator.trans('flarum-tags.admin.tags.primary_heading')\n }, m(\"ol\", {\n className: \"TagList TagList--primary\"\n }, tags.filter(tag => tag.position() !== null && !tag.isChild()).map(tagItem)), m(Button, {\n className: \"Button TagList-button\",\n icon: \"fas fa-plus\",\n onclick: () => app.modal.show(EditTagModal, {\n primary: true\n })\n }, app.translator.trans('flarum-tags.admin.tags.create_primary_tag_button'))), m(FormSection, {\n className: \"TagGroup TagGroup--secondary\",\n label: app.translator.trans('flarum-tags.admin.tags.secondary_heading')\n }, m(\"ul\", {\n className: \"TagList\"\n }, tags.filter(tag => tag.position() === null).sort((a, b) => a.name().localeCompare(b.name())).map(tagItem)), m(Button, {\n className: \"Button TagList-button\",\n icon: \"fas fa-plus\",\n onclick: () => app.modal.show(EditTagModal, {\n primary: false\n })\n }, app.translator.trans('flarum-tags.admin.tags.create_secondary_tag_button'))), m(FormSection, {\n label: app.translator.trans('flarum-tags.admin.tags.settings_heading')\n }, m(Form, null, m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.tag_settings.required_primary_heading')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-tags.admin.tag_settings.required_primary_text')), m(\"div\", {\n className: \"TagSettings-rangeInput\"\n }, m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: \"0\",\n value: minPrimaryTags(),\n oninput: withAttr('value', this.setMinTags.bind(this, minPrimaryTags, maxPrimaryTags))\n }), app.translator.trans('flarum-tags.admin.tag_settings.range_separator_text'), m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: minPrimaryTags(),\n bidi: maxPrimaryTags\n }))), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.tag_settings.required_secondary_heading')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-tags.admin.tag_settings.required_secondary_text')), m(\"div\", {\n className: \"TagSettings-rangeInput\"\n }, m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: \"0\",\n value: minSecondaryTags(),\n oninput: withAttr('value', this.setMinTags.bind(this, minSecondaryTags, maxSecondaryTags))\n }), app.translator.trans('flarum-tags.admin.tag_settings.range_separator_text'), m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: minSecondaryTags(),\n bidi: maxSecondaryTags\n }))), m(\"div\", {\n className: \"Form-group Form-controls\"\n }, this.submitButton())))), m(\"div\", {\n className: \"TagsContent-footer\"\n }, m(\"p\", null, app.translator.trans('flarum-tags.admin.tags.about_tags_text'))))));\n }\n onListOnCreate(vnode) {\n this.$('.TagList').get().map(e => {\n sortable.create(e, {\n group: 'tags',\n delay: 50,\n delayOnTouchOnly: true,\n touchStartThreshold: 5,\n animation: 150,\n swapThreshold: 0.65,\n dragClass: 'sortable-dragging',\n ghostClass: 'sortable-placeholder',\n onSort: e => this.onSortUpdate(e)\n });\n });\n }\n setMinTags(minTags, maxTags, value) {\n minTags(value);\n maxTags(Math.max(value, maxTags()));\n }\n onSortUpdate(e) {\n // If we've moved a tag from 'primary' to 'secondary', then we'll update\n // its attributes in our local store so that when we redraw the change\n // will be made.\n if (e.from instanceof HTMLOListElement && e.to instanceof HTMLUListElement) {\n app.store.getById('tags', e.item.getAttribute('data-id')).pushData({\n attributes: {\n position: null,\n isChild: false\n },\n relationships: {\n parent: null\n }\n });\n }\n\n // Construct an array of primary tag IDs and their children, in the same\n // order that they have been arranged in.\n const order = this.$('.TagList--primary > li').map(function () {\n return {\n id: $(this).data('id'),\n children: $(this).find('li').map(function () {\n return $(this).data('id');\n }).get()\n };\n }).get();\n\n // Now that we have an accurate representation of the order which the\n // primary tags are in, we will update the tag attributes in our local\n // store to reflect this order.\n order.forEach((tag, i) => {\n const parent = app.store.getById('tags', tag.id);\n parent.pushData({\n attributes: {\n position: i,\n isChild: false\n },\n relationships: {\n parent: null\n }\n });\n tag.children.forEach((child, j) => {\n app.store.getById('tags', child).pushData({\n attributes: {\n position: j,\n isChild: true\n },\n relationships: {\n parent\n }\n });\n });\n });\n app.request({\n url: app.forum.attribute('apiUrl') + '/tags/order',\n method: 'POST',\n body: {\n order\n }\n });\n this.forcedRefreshKey++;\n m.redraw();\n }\n}\nflarum.reg.add('flarum-tags', 'admin/components/TagsPage', TagsPage);","import Extend from 'flarum/common/extenders';\nimport commonExtend from '../common/extend';\nimport app from 'flarum/admin/app';\nimport TagsPage from './components/TagsPage';\nexport default [...commonExtend, new Extend.Admin().page(TagsPage).permission(() => ({\n icon: 'fas fa-tag',\n label: app.translator.trans('flarum-tags.admin.permissions.tag_discussions_label'),\n permission: 'discussion.tag'\n}), 'moderate', 95).permission(() => ({\n icon: 'fas fa-tags',\n label: app.translator.trans('flarum-tags.admin.permissions.bypass_tag_counts_label'),\n permission: 'bypassTagCounts'\n}), 'start', 89)];","import app from 'flarum/admin/app';\nimport addTagsPermissionScope from './addTagsPermissionScope';\nimport addTagsHomePageOption from './addTagsHomePageOption';\nimport addTagChangePermission from './addTagChangePermission';\nimport addTagSelectionSettingComponent from './addTagSelectionSettingComponent';\nimport TagListState from '../common/states/TagListState';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-tags', app => {\n app.tagList = new TagListState();\n addTagsPermissionScope();\n addTagsHomePageOption();\n addTagChangePermission();\n addTagSelectionSettingComponent();\n});\nimport './admin';","import app from 'flarum/admin/app';\nimport { extend, override } from 'flarum/common/extend';\nimport PermissionGrid from 'flarum/admin/components/PermissionGrid';\nimport PermissionDropdown from 'flarum/admin/components/PermissionDropdown';\nimport Dropdown from 'flarum/common/components/Dropdown';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport tagLabel from '../common/helpers/tagLabel';\nimport tagIcon from '../common/helpers/tagIcon';\nimport sortTags from '../common/utils/sortTags';\nexport default function () {\n extend(PermissionGrid.prototype, 'oninit', function () {\n this.loading = true;\n });\n extend(PermissionGrid.prototype, 'oncreate', function () {\n app.tagList.load().then(() => {\n this.loading = false;\n m.redraw();\n });\n });\n override(PermissionGrid.prototype, 'view', function (original, vnode) {\n if (this.loading) {\n return m(LoadingIndicator, null);\n }\n return original(vnode);\n });\n override(app, 'getRequiredPermissions', (original, permission) => {\n const tagPrefix = permission.match(/^tag\\d+\\./);\n if (tagPrefix) {\n const globalPermission = permission.substr(tagPrefix[0].length);\n const required = original(globalPermission);\n return required.map(required => tagPrefix[0] + required);\n }\n return original(permission);\n });\n extend(PermissionGrid.prototype, 'scopeItems', items => {\n sortTags(app.store.all('tags')).filter(tag => tag.isRestricted()).forEach(tag => items.add('tag' + tag.id(), {\n label: tagLabel(tag),\n onremove: () => tag.save({\n isRestricted: false\n }),\n render: item => {\n if ('setting' in item) return null;\n if (item.permission === 'viewForum' || item.permission === 'startDiscussion' || item.permission?.startsWith('discussion.') && item.tagScoped !== false || item.tagScoped) {\n return m(PermissionDropdown, {\n permission: `tag${tag.id()}.${item.permission}`,\n allowGuest: item.allowGuest\n });\n }\n return null;\n }\n }));\n });\n extend(PermissionGrid.prototype, 'scopeControlItems', items => {\n const tags = sortTags(app.store.all('tags').filter(tag => !tag.isRestricted()));\n if (tags.length) {\n items.add('tag', m(Dropdown, {\n className: \"Dropdown--restrictByTag\",\n buttonClassName: \"Button Button--link\",\n label: app.translator.trans('flarum-tags.admin.permissions.restrict_by_tag_heading'),\n icon: \"fas fa-plus\",\n caretIcon: null\n }, tags.map(tag => m(Button, {\n icon: tagIcon(tag, {\n className: 'Button-icon'\n }),\n onclick: () => tag.save({\n isRestricted: true\n })\n }, tag.name()))));\n }\n });\n}","import app from 'flarum/admin/app';\nimport { extend } from 'flarum/common/extend';\nimport PermissionGrid from 'flarum/admin/components/PermissionGrid';\nimport SettingDropdown from 'flarum/admin/components/SettingDropdown';\nexport default function () {\n extend(PermissionGrid.prototype, 'startItems', items => {\n items.add('allowTagChange', {\n icon: 'fas fa-tag',\n label: app.translator.trans('flarum-tags.admin.permissions.allow_edit_tags_label'),\n setting: () => {\n const minutes = parseInt(app.data.settings.allow_tag_change, 10);\n return m(SettingDropdown, {\n defaultLabel: minutes ? app.translator.trans('core.admin.permissions_controls.allow_some_minutes_button', {\n count: minutes\n }) : app.translator.trans('core.admin.permissions_controls.allow_indefinitely_button'),\n key: \"allow_tag_change\",\n options: [{\n value: '-1',\n label: app.translator.trans('core.admin.permissions_controls.allow_indefinitely_button')\n }, {\n value: '10',\n label: app.translator.trans('core.admin.permissions_controls.allow_ten_minutes_button')\n }, {\n value: 'reply',\n label: app.translator.trans('core.admin.permissions_controls.allow_until_reply_button')\n }]\n });\n }\n }, 90);\n });\n}","import { extend } from 'flarum/common/extend';\nimport SelectTagsSettingComponent from './components/SelectTagsSettingComponent';\nimport FormGroup from 'flarum/common/components/FormGroup';\nexport default function () {\n extend(FormGroup.prototype, 'customFieldComponents', function (items) {\n items.add('flarum-tags.select-tags', attrs => {\n return m(SelectTagsSettingComponent, Object.assign({}, attrs, {\n settingValue: attrs.bidi\n }));\n });\n });\n}","import classList from 'flarum/common/utils/classList';\nexport default function tagIcon(tag, attrs, settings) {\n if (attrs === void 0) {\n attrs = {};\n }\n if (settings === void 0) {\n settings = {};\n }\n const hasIcon = tag && tag.icon();\n const {\n useColor = true\n } = settings;\n attrs.className = classList([attrs.className, 'icon text-colored', hasIcon ? tag.icon() : 'TagIcon']);\n if (tag && useColor) {\n attrs.style = attrs.style || {};\n attrs.style['--color'] = tag.color();\n } else if (!tag) {\n attrs.className += ' untagged';\n }\n return hasIcon ? m(\"i\", attrs) : m(\"span\", attrs);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagIcon', tagIcon);","import extract from 'flarum/common/utils/extract';\nimport Link from 'flarum/common/components/Link';\nimport classList from 'flarum/common/utils/classList';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport tagIcon from './tagIcon';\nexport default function tagLabel(tag, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n attrs.style = attrs.style || {};\n attrs.className = 'TagLabel ' + (attrs.className || '');\n const link = extract(attrs, 'link');\n const tagText = tag ? tag.name() : app.translator.trans('flarum-tags.lib.deleted_tag_text');\n if (tag) {\n const color = tag.color();\n if (color) {\n attrs.style['--tag-bg'] = color;\n attrs.className = classList(attrs.className, 'colored', textContrastClass(color));\n }\n if (link) {\n attrs.title = tag.description() || '';\n attrs.href = app.route('tag', {\n tags: tag.slug()\n });\n }\n if (tag.isChild()) {\n attrs.className += ' TagLabel--child';\n }\n } else {\n attrs.className += ' untagged';\n }\n return m(link ? Link : 'span', attrs, m(\"span\", {\n className: \"TagLabel-text\"\n }, tag && tag.icon() && tagIcon(tag, {\n className: 'TagLabel-icon'\n }, {\n useColor: false\n }), m(\"span\", {\n className: \"TagLabel-name\"\n }, tagText)));\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagLabel', tagLabel);","export default function sortTags(tags) {\n return tags.slice(0).sort((a, b) => {\n const aPos = a.position();\n const bPos = b.position();\n\n // If they're both secondary tags, sort them by their discussions count,\n // descending.\n if (aPos === null && bPos === null) return b.discussionCount() - a.discussionCount();\n\n // If just one is a secondary tag, then the primary tag should\n // come first.\n if (bPos === null) return -1;\n if (aPos === null) return 1;\n\n // If we've made it this far, we know they're both primary tags. So we'll\n // need to see if they have parents.\n const aParent = a.parent();\n const bParent = b.parent();\n\n // If they both have the same parent, then their positions are local,\n // so we can compare them directly.\n if (aParent === bParent) return aPos - bPos;\n // If they are both child tags, then we will compare the positions of their\n // parents.\n else if (aParent && bParent) return aParent.position() - bParent.position();\n // If we are comparing a child tag with its parent, then we let the parent\n // come first. If we are comparing an unrelated parent/child, then we\n // compare both of the parents.\n else if (aParent) return aParent === b ? 1 : aParent.position() - bPos;else if (bParent) return bParent === a ? -1 : aPos - bParent.position();\n return 0;\n });\n}\nflarum.reg.add('flarum-tags', 'common/utils/sortTags', sortTags);","module.exports = flarum.reg.get('core', 'common/Component');","module.exports = flarum.reg.get('core', 'common/app');","module.exports = flarum.reg.get('core', 'common/components/Button');","module.exports = flarum.reg.get('core', 'common/components/FormModal');","module.exports = flarum.reg.get('core', 'common/components/Link');","module.exports = flarum.reg.get('core', 'common/components/LoadingIndicator');","module.exports = flarum.reg.get('core', 'common/helpers/highlight');","module.exports = flarum.reg.get('core', 'common/helpers/textContrastClass');","module.exports = flarum.reg.get('core', 'common/utils/KeyboardNavigatable');","module.exports = flarum.reg.get('core', 'common/utils/Stream');","module.exports = flarum.reg.get('core', 'common/utils/classList');","module.exports = flarum.reg.get('core', 'common/utils/extract');","module.exports = flarum.reg.get('core', 'common/utils/extractText');","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\tflarum.reg._webpack_runtimes[\"flarum-tags\"] ||= __webpack_require__;// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + \"common/components/TagSelectionModal\" + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.f.compat = (chunkId, promises) => {\n\n\tconst originalLoadChunk = __webpack_require__.l;\n\t__webpack_require__.l = flarum.reg.loadChunk.bind(flarum.reg, originalLoadChunk);\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t884: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkmodule_exports\"] = self[\"webpackChunkmodule_exports\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));"],"names":["inProgress","dataWebpackPrefix","flarum","reg","get","extend","items","add","path","label","app","translator","trans","tagsLabel","tags","attrs","children","link","otherAttrs","className","sortTags","forEach","tag","length","push","tagLabel","m","SelectTagsSettingComponent","constructor","super","arguments","this","view","value","JSON","parse","settingValue","loaded","load","then","filter","includes","id","redraw","help","onclick","show","selectedTags","onsubmit","stringify","map","options","size","display","addChunkModule","TagListState","loadedIncludes","query","unloadedIncludes","include","has","Promise","resolve","all","Set","find","join","val","Array","isArray","Tag","name","call","slug","description","color","backgroundUrl","backgroundMode","icon","position","parent","defaultSort","isChild","isHidden","isPrimary","discussionCount","lastPostedAt","lastPostedDiscussion","isRestricted","canStartDiscussion","canAddToDiscussion","isPrimaryParent","TagGambit","KeyValueGambit","key","hint","filterKey","gambitValueToFilterValue","fromFilter","negate","gambits","toString","filterValueToGambitValue","gambit","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","enumerable","apply","_objectSpread2","target","i","source","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_typeof","obj","Symbol","iterator","prototype","configurable","writable","_extends","assign","hasOwnProperty","userAgent","pattern","window","navigator","match","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","capture","passive","on","el","event","fn","addEventListener","off","removeEventListener","matches","selector","substring","msMatchesSelector","webkitMatchesSelector","_","getParentOrHost","host","document","nodeType","parentNode","closest","ctx","includeCTX","_throttleTimeout","R_SPACE","toggleClass","state","classList","replace","css","prop","style","defaultView","getComputedStyle","currentStyle","indexOf","matrix","selfOnly","appliedTransforms","transform","matrixFn","DOMMatrix","WebKitCSSMatrix","CSSMatrix","MSCSSMatrix","tagName","list","getElementsByTagName","n","getWindowScrollingElement","scrollingElement","documentElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","container","getBoundingClientRect","elRect","top","left","bottom","right","height","width","innerHeight","innerWidth","containerRect","parseInt","elMatrix","scaleX","a","scaleY","d","isScrolledPast","elSide","parentSide","getParentAutoScrollElement","elSideVal","parentSideVal","getChild","childNum","includeDragEl","currentChild","Sortable","ghost","dragged","draggable","lastChild","last","lastElementChild","previousElementSibling","index","nodeName","toUpperCase","clone","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","scrollLeft","scrollTop","includeSelf","elem","gotSelf","clientWidth","scrollWidth","clientHeight","scrollHeight","elemCSS","overflowX","overflowY","body","isRectEqual","rect1","rect2","Math","round","throttle","callback","ms","args","setTimeout","scrollBy","x","y","Polymer","$","jQuery","Zepto","dom","cloneNode","getChildContainingRectFromElement","ghostEl","rect","from","child","_rect$left","_rect$top","_rect$right","_rect$bottom","animated","childRect","min","Infinity","max","expando","Date","getTime","plugins","defaults","initializeByDefault","PluginManager","mount","plugin","option","p","pluginName","concat","pluginEvent","eventName","sortable","evt","_this","eventCanceled","cancel","eventNameGlobal","initializePlugins","initialized","modified","modifyOption","getEventProperties","eventProperties","modifiedValue","optionListeners","_excluded","_ref","undefined","originalEvent","data","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","_objectWithoutProperties","bind","dragEl","parentEl","rootEl","nextEl","lastDownEl","cloneEl","cloneHidden","dragStarted","moved","putSortable","activeSortable","active","oldIndex","oldDraggableIndex","newIndex","newDraggableIndex","hideGhostForTarget","_hideGhostForTarget","unhideGhostForTarget","_unhideGhostForTarget","cloneNowHidden","cloneNowShown","dispatchSortableEvent","_dispatchEvent","info","targetEl","toEl","fromEl","extraEventProperties","onName","charAt","substr","CustomEvent","createEvent","initEvent","bubbles","cancelable","to","item","pullMode","lastPutMode","allEventProperties","dispatchEvent","activeGroup","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","targetMoveDistance","ghostRelativeParent","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","createElement","supportCssPointerEvents","cssText","pointerEvents","_detectDirection","elCSS","elWidth","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","marginLeft","marginRight","secondChildWidth","flexDirection","gridTemplateColumns","split","touchingSideChild2","clear","_prepareGroup","toFn","pull","sameGroup","group","otherGroup","originalGroup","checkPull","checkPut","put","revertClone","preventDefault","stopPropagation","stopImmediatePropagation","nearestEmptyInsertDetectEvent","touches","nearest","clientX","clientY","some","threshold","emptyInsertThreshold","insideHorizontally","insideVertically","ret","_onDragOver","_checkOutsideTargetEl","_isOutsideThisEl","animationCallbackId","animationStates","sort","disabled","store","handle","test","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","direction","ghostClass","chosenClass","dragClass","ignore","preventOnFilter","animation","easing","setData","dataTransfer","textContent","dropBubble","dragoverBubble","dataIdAttr","delay","delayOnTouchOnly","touchStartThreshold","Number","devicePixelRatio","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","nativeDraggable","_onTapStart","captureAnimationState","slice","fromRect","thisAnimationDuration","childMatrix","f","e","addAnimationState","removeAnimationState","splice","arr","indexOfObject","animateAll","clearTimeout","animating","animationTime","time","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","sqrt","pow","calculateRealTime","animate","animationResetTimer","currentRect","duration","translateX","translateY","animatingX","animatingY","forRepaintDummy","offsetWidth","repaint","_onMove","dragRect","targetRect","willInsertAfter","retVal","onMoveFn","onMove","draggedRect","related","relatedRect","_disableDraggable","_unsilent","_generateId","str","src","href","sum","charCodeAt","_nextTick","_cancelNextTick","contains","_getDirection","type","touch","pointerType","originalTarget","shadowRoot","composedPath","root","inputs","idx","checked","_saveInputCheckedState","button","isContentEditable","criteria","trim","_prepareDragStart","dragStartFn","ownerDocument","nextSibling","_lastX","_lastY","_onDrop","_disableDelayedDragEvents","_triggerDragStart","_disableDelayedDrag","_delayedDragTouchMoveHandler","_dragStartTimer","abs","floor","_onTouchMove","_onDragStart","selection","empty","getSelection","removeAllRanges","err","_dragStarted","fallback","_appendGhost","_nulling","_emulateDragOver","elementFromPoint","ghostMatrix","relativeScrollOffset","dx","dy","b","c","cssMatrix","appendChild","removeAttribute","_hideClone","cloneId","insertBefore","_loopId","setInterval","effectAllowed","_dragStartId","revert","vertical","isOwner","canSort","fromSortable","completedFired","dragOverEvent","_ignoreWhileAnimating","completed","elLastChild","lastElRect","childContainingRect","_ghostIsLast","changed","firstElRect","_ghostIsFirst","firstChild","targetBeforeFirstSwap","sibling","differentLevel","differentRowCol","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_dragElInRowColumn","side1","scrolledPastTop","scrollBefore","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","_getSwapDirection","dragIndex","nextElementSibling","after","moveVector","extra","axis","insertion","_showClone","_offMoveEvents","_offUpEvents","clearInterval","removeChild","save","handleEvent","dropEffect","_globalDragOver","toArray","order","getAttribute","useAnimation","set","destroy","querySelectorAll","utils","is","dst","nextTick","cancelNextTick","detectDirection","element","_len","_key","create","version","scrollEl","scrollRootEl","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","autoScrolls","scrolling","clearAutoScrolls","autoScroll","pid","clearPointerElemChangedInterval","isFallback","scroll","scrollCustomFn","sens","scrollSensitivity","speed","scrollSpeed","scrollThisInstance","scrollFn","layersOut","currentParent","canScrollX","canScrollY","scrollPosX","scrollPosY","vx","vy","layer","scrollOffsetY","scrollOffsetX","bubbleScroll","drop","toSortable","changedTouches","onSpill","Revert","Remove","startIndex","dragStart","_ref2","_ref3","_ref4","parentSortable","AutoScroll","forceAutoScrollFallback","_handleAutoScroll","_handleFallbackAutoScroll","dragOverCompleted","dragOverBubble","nulling","ogElemScroller","newElem","EditTagModal","oninit","vnode","model","createRecord","primary","title","attributes","submitData","content","fields","placeholder","oninput","bidi","fontawesome","tabindex","loading","exists","delete","hide","confirm","pushData","tagItem","tagIcon","TagsPage","forcedRefreshKey","minPrimaryTags","setting","maxPrimaryTags","minSecondaryTags","maxSecondaryTags","oncreate","onListOnCreate","localeCompare","setMinTags","submitButton","onSort","onSortUpdate","minTags","maxTags","HTMLOListElement","HTMLUListElement","getById","relationships","j","url","attribute","method","page","permission","tagList","override","original","tagPrefix","required","onremove","render","startsWith","tagScoped","allowGuest","buttonClassName","caretIcon","addTagsHomePageOption","minutes","settings","allow_tag_change","defaultLabel","count","hasIcon","useColor","tagText","route","aPos","bPos","aParent","bParent","module","exports","o","r","t","toPrimitive","TypeError","String","toPropertyKey","__webpack_module_cache__","__webpack_require__","moduleId","_webpack_runtimes","cachedModule","__webpack_modules__","getter","__esModule","definition","chunkId","reduce","promises","u","g","globalThis","Function","l","done","script","needAttach","scripts","s","charset","timeout","nc","setAttribute","onScriptComplete","prev","onerror","onload","doneFns","head","toStringTag","scriptUrl","importScripts","location","currentScript","Error","compat","originalLoadChunk","loadChunk","installedChunks","installedChunkData","promise","reject","error","errorType","realSrc","message","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","chunkLoadingGlobal","self"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"admin.js","mappings":"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","sources":["webpack://@flarum/tags/webpack/runtime/load script","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/PermissionGrid')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/PermissionDropdown')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Dropdown')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/BasicsPage')\"","webpack://@flarum/tags/./src/admin/addTagsHomePageOption.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/SettingDropdown')\"","webpack://@flarum/tags/./src/common/helpers/tagsLabel.js","webpack://@flarum/tags/./src/admin/components/SelectTagsSettingComponent.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/FormGroup')\"","webpack://@flarum/tags/./src/common/states/TagListState.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/computed')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Model')\"","webpack://@flarum/tags/./src/common/models/Tag.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/query/IGambit')\"","webpack://@flarum/tags/./src/common/query/discussions/TagGambit.ts","webpack://@flarum/tags/./src/common/extend.ts","webpack://@flarum/tags/../../../node_modules/sortablejs/modular/sortable.esm.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/ExtensionPage')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/withAttr')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Form')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/FormSectionGroup')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'admin/components/FormSection')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/ColorPreviewInput')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/string')\"","webpack://@flarum/tags/./src/admin/components/EditTagModal.tsx","webpack://@flarum/tags/./src/admin/components/TagsPage.js","webpack://@flarum/tags/./src/admin/extend.tsx","webpack://@flarum/tags/./src/admin/index.ts","webpack://@flarum/tags/./src/admin/addTagsPermissionScope.tsx","webpack://@flarum/tags/./src/admin/addTagChangePermission.js","webpack://@flarum/tags/./src/admin/addTagSelectionSettingComponent.tsx","webpack://@flarum/tags/./src/common/helpers/tagIcon.js","webpack://@flarum/tags/./src/common/helpers/tagLabel.js","webpack://@flarum/tags/./src/common/utils/sortTags.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Component')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/FormModal')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/highlight')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/textContrastClass')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/KeyboardNavigatable')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/Stream')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extract')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/tags/../../../node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/tags/../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/tags/../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/tags/../../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/tags/webpack/bootstrap","webpack://@flarum/tags/webpack/runtime/compat get default export","webpack://@flarum/tags/webpack/runtime/define property getters","webpack://@flarum/tags/webpack/runtime/ensure chunk","webpack://@flarum/tags/webpack/runtime/get javascript chunk filename","webpack://@flarum/tags/webpack/runtime/global","webpack://@flarum/tags/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/tags/webpack/runtime/make namespace object","webpack://@flarum/tags/webpack/runtime/publicPath","webpack://@flarum/tags/webpack/runtime/compat","webpack://@flarum/tags/webpack/runtime/jsonp chunk loading"],"sourcesContent":["var inProgress = {};\nvar dataWebpackPrefix = \"module.exports:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/PermissionGrid');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/PermissionDropdown');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Dropdown');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/BasicsPage');","import { extend } from 'flarum/common/extend';\nimport BasicsPage from 'flarum/admin/components/BasicsPage';\nexport default function () {\n extend(BasicsPage, 'homePageItems', items => {\n items.add('tags', {\n path: '/tags',\n label: app.translator.trans('flarum-tags.admin.basics.tags_label')\n });\n });\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/SettingDropdown');","import extract from 'flarum/common/utils/extract';\nimport tagLabel from './tagLabel';\nimport sortTags from '../utils/sortTags';\nimport classList from 'flarum/common/utils/classList';\nexport default function tagsLabel(tags, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n const children = [];\n const {\n link,\n ...otherAttrs\n } = attrs;\n otherAttrs.className = classList('TagsLabel', otherAttrs.className);\n if (tags) {\n sortTags(tags).forEach(tag => {\n if (tag || tags.length === 1) {\n children.push(tagLabel(tag, {\n link\n }));\n }\n });\n } else {\n children.push(tagLabel());\n }\n return m(\"span\", otherAttrs, children);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagsLabel', tagsLabel);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport tagsLabel from '../../common/helpers/tagsLabel';\nexport default class SelectTagsSettingComponent extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"tags\", []);\n _defineProperty(this, \"loaded\", false);\n }\n view() {\n const value = JSON.parse(this.attrs.settingValue() || '[]');\n if (!this.loaded) {\n app.tagList.load(['parent']).then(tags => {\n this.tags = tags.filter(tag => value.includes(tag.id()));\n this.loaded = true;\n m.redraw();\n });\n }\n return m(\"div\", {\n className: \"Form-group SelectTagsSettingComponent\"\n }, m(\"label\", null, this.attrs.label), this.attrs.help && m(\"p\", {\n className: \"helpText\"\n }, this.attrs.help), !this.loaded ? m(LoadingIndicator, {\n size: \"small\",\n display: \"inline\"\n }) : m(Button, {\n className: \"Button Button--text\",\n onclick: () => app.modal.show(() => import(/* webpackChunkName: 'common/components/TagSelectionModal', webpackMode: 'lazy-once' */ '../../common/components/TagSelectionModal'), {\n selectedTags: this.tags,\n onsubmit: tags => {\n this.tags = tags;\n this.attrs.settingValue(JSON.stringify(tags.map(tag => tag.id())));\n },\n ...this.attrs.options\n })\n }, !!this.tags.length ? tagsLabel(this.tags) : m(\"span\", {\n className: \"TagLabel untagged\"\n }, app.translator.trans('flarum-tags.admin.settings.button_text'))));\n }\n}\nflarum.reg.add('flarum-tags', 'admin/components/SelectTagsSettingComponent', SelectTagsSettingComponent);flarum.reg.addChunkModule('955', '6671', 'flarum-tags', 'common/components/TagSelectionModal');\nflarum.reg.addChunkModule('955', '6671', 'flarum-tags', 'forum/components/ToggleButton');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/FormGroup');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nexport default class TagListState {\n constructor() {\n _defineProperty(this, \"loadedIncludes\", void 0);\n }\n async load(includes) {\n if (includes === void 0) {\n includes = [];\n }\n if (!this.loadedIncludes) {\n return this.query(includes);\n }\n const unloadedIncludes = includes.filter(include => !this.loadedIncludes.has(include));\n if (unloadedIncludes.length === 0) {\n return Promise.resolve(app.store.all('tags'));\n }\n return this.query(unloadedIncludes);\n }\n async query(includes) {\n if (includes === void 0) {\n includes = [];\n }\n this.loadedIncludes ??= new Set();\n return app.store.find('tags', {\n include: includes.join(',')\n }).then(val => {\n const tags = Array.isArray(val) ? val : [val];\n includes.forEach(include => this.loadedIncludes.add(include));\n return tags;\n });\n }\n}\nflarum.reg.add('flarum-tags', 'common/states/TagListState', TagListState);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/computed');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Model');","import computed from 'flarum/common/utils/computed';\nimport Model from 'flarum/common/Model';\nexport default class Tag extends Model {\n name() {\n return Model.attribute('name').call(this);\n }\n slug() {\n return Model.attribute('slug').call(this);\n }\n description() {\n return Model.attribute('description').call(this);\n }\n color() {\n return Model.attribute('color').call(this);\n }\n backgroundUrl() {\n return Model.attribute('backgroundUrl').call(this);\n }\n backgroundMode() {\n return Model.attribute('backgroundMode').call(this);\n }\n icon() {\n return Model.attribute('icon').call(this);\n }\n position() {\n return Model.attribute('position').call(this);\n }\n parent() {\n return Model.hasOne('parent').call(this);\n }\n children() {\n return Model.hasMany('children').call(this);\n }\n defaultSort() {\n return Model.attribute('defaultSort').call(this);\n }\n isChild() {\n return Model.attribute('isChild').call(this);\n }\n isHidden() {\n return Model.attribute('isHidden').call(this);\n }\n isPrimary() {\n return Model.attribute('isPrimary').call(this);\n }\n discussionCount() {\n return Model.attribute('discussionCount').call(this);\n }\n lastPostedAt() {\n return Model.attribute('lastPostedAt', Model.transformDate).call(this);\n }\n lastPostedDiscussion() {\n return Model.hasOne('lastPostedDiscussion').call(this);\n }\n isRestricted() {\n return Model.attribute('isRestricted').call(this);\n }\n canStartDiscussion() {\n return Model.attribute('canStartDiscussion').call(this);\n }\n canAddToDiscussion() {\n return Model.attribute('canAddToDiscussion').call(this);\n }\n isPrimaryParent() {\n return computed('position', 'parent', (position, parent) => position !== null && parent === false).call(this);\n }\n}\nflarum.reg.add('flarum-tags', 'common/models/Tag', Tag);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/query/IGambit');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nimport { KeyValueGambit } from 'flarum/common/query/IGambit';\nexport default class TagGambit extends KeyValueGambit {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"predicates\", true);\n }\n key() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.key', {}, true);\n }\n hint() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.hint', {}, true);\n }\n filterKey() {\n return 'tag';\n }\n gambitValueToFilterValue(value) {\n return [value];\n }\n fromFilter(value, negate) {\n let gambits = [];\n if (Array.isArray(value)) {\n gambits = value.map(value => this.fromFilter(value.toString(), negate));\n } else {\n return `${negate ? '-' : ''}${this.key()}:${this.filterValueToGambitValue(value)}`;\n }\n return gambits.join(' ');\n }\n filterValueToGambitValue(value) {\n return value;\n }\n}\nflarum.reg.add('flarum-tags', 'common/query/discussions/TagGambit', TagGambit);","import Extend from 'flarum/common/extenders';\nimport Tag from './models/Tag';\nimport TagGambit from './query/discussions/TagGambit';\nexport default [new Extend.Store() //\n.add('tags', Tag), new Extend.Search() //\n.gambit('discussions', TagGambit)];","/**!\n * Sortable 1.15.3\n * @author\tRubaXa \n * @author\towenm \n * @license MIT\n */\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n return target;\n}\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n return _typeof(obj);\n}\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nvar version = \"1.15.3\";\n\nfunction userAgent(pattern) {\n if (typeof window !== 'undefined' && window.navigator) {\n return !! /*@__PURE__*/navigator.userAgent.match(pattern);\n }\n}\nvar IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\\.|msie|iemobile|Windows Phone)/i);\nvar Edge = userAgent(/Edge/i);\nvar FireFox = userAgent(/firefox/i);\nvar Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i);\nvar IOS = userAgent(/iP(ad|od|hone)/i);\nvar ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i);\n\nvar captureMode = {\n capture: false,\n passive: false\n};\nfunction on(el, event, fn) {\n el.addEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction off(el, event, fn) {\n el.removeEventListener(event, fn, !IE11OrLess && captureMode);\n}\nfunction matches( /**HTMLElement*/el, /**String*/selector) {\n if (!selector) return;\n selector[0] === '>' && (selector = selector.substring(1));\n if (el) {\n try {\n if (el.matches) {\n return el.matches(selector);\n } else if (el.msMatchesSelector) {\n return el.msMatchesSelector(selector);\n } else if (el.webkitMatchesSelector) {\n return el.webkitMatchesSelector(selector);\n }\n } catch (_) {\n return false;\n }\n }\n return false;\n}\nfunction getParentOrHost(el) {\n return el.host && el !== document && el.host.nodeType ? el.host : el.parentNode;\n}\nfunction closest( /**HTMLElement*/el, /**String*/selector, /**HTMLElement*/ctx, includeCTX) {\n if (el) {\n ctx = ctx || document;\n do {\n if (selector != null && (selector[0] === '>' ? el.parentNode === ctx && matches(el, selector) : matches(el, selector)) || includeCTX && el === ctx) {\n return el;\n }\n if (el === ctx) break;\n /* jshint boss:true */\n } while (el = getParentOrHost(el));\n }\n return null;\n}\nvar R_SPACE = /\\s+/g;\nfunction toggleClass(el, name, state) {\n if (el && name) {\n if (el.classList) {\n el.classList[state ? 'add' : 'remove'](name);\n } else {\n var className = (' ' + el.className + ' ').replace(R_SPACE, ' ').replace(' ' + name + ' ', ' ');\n el.className = (className + (state ? ' ' + name : '')).replace(R_SPACE, ' ');\n }\n }\n}\nfunction css(el, prop, val) {\n var style = el && el.style;\n if (style) {\n if (val === void 0) {\n if (document.defaultView && document.defaultView.getComputedStyle) {\n val = document.defaultView.getComputedStyle(el, '');\n } else if (el.currentStyle) {\n val = el.currentStyle;\n }\n return prop === void 0 ? val : val[prop];\n } else {\n if (!(prop in style) && prop.indexOf('webkit') === -1) {\n prop = '-webkit-' + prop;\n }\n style[prop] = val + (typeof val === 'string' ? '' : 'px');\n }\n }\n}\nfunction matrix(el, selfOnly) {\n var appliedTransforms = '';\n if (typeof el === 'string') {\n appliedTransforms = el;\n } else {\n do {\n var transform = css(el, 'transform');\n if (transform && transform !== 'none') {\n appliedTransforms = transform + ' ' + appliedTransforms;\n }\n /* jshint boss:true */\n } while (!selfOnly && (el = el.parentNode));\n }\n var matrixFn = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;\n /*jshint -W056 */\n return matrixFn && new matrixFn(appliedTransforms);\n}\nfunction find(ctx, tagName, iterator) {\n if (ctx) {\n var list = ctx.getElementsByTagName(tagName),\n i = 0,\n n = list.length;\n if (iterator) {\n for (; i < n; i++) {\n iterator(list[i], i);\n }\n }\n return list;\n }\n return [];\n}\nfunction getWindowScrollingElement() {\n var scrollingElement = document.scrollingElement;\n if (scrollingElement) {\n return scrollingElement;\n } else {\n return document.documentElement;\n }\n}\n\n/**\r\n * Returns the \"bounding client rect\" of given element\r\n * @param {HTMLElement} el The element whose boundingClientRect is wanted\r\n * @param {[Boolean]} relativeToContainingBlock Whether the rect should be relative to the containing block of (including) the container\r\n * @param {[Boolean]} relativeToNonStaticParent Whether the rect should be relative to the relative parent of (including) the contaienr\r\n * @param {[Boolean]} undoScale Whether the container's scale() should be undone\r\n * @param {[HTMLElement]} container The parent the element will be placed in\r\n * @return {Object} The boundingClientRect of el, with specified adjustments\r\n */\nfunction getRect(el, relativeToContainingBlock, relativeToNonStaticParent, undoScale, container) {\n if (!el.getBoundingClientRect && el !== window) return;\n var elRect, top, left, bottom, right, height, width;\n if (el !== window && el.parentNode && el !== getWindowScrollingElement()) {\n elRect = el.getBoundingClientRect();\n top = elRect.top;\n left = elRect.left;\n bottom = elRect.bottom;\n right = elRect.right;\n height = elRect.height;\n width = elRect.width;\n } else {\n top = 0;\n left = 0;\n bottom = window.innerHeight;\n right = window.innerWidth;\n height = window.innerHeight;\n width = window.innerWidth;\n }\n if ((relativeToContainingBlock || relativeToNonStaticParent) && el !== window) {\n // Adjust for translate()\n container = container || el.parentNode;\n\n // solves #1123 (see: https://stackoverflow.com/a/37953806/6088312)\n // Not needed on <= IE11\n if (!IE11OrLess) {\n do {\n if (container && container.getBoundingClientRect && (css(container, 'transform') !== 'none' || relativeToNonStaticParent && css(container, 'position') !== 'static')) {\n var containerRect = container.getBoundingClientRect();\n\n // Set relative to edges of padding box of container\n top -= containerRect.top + parseInt(css(container, 'border-top-width'));\n left -= containerRect.left + parseInt(css(container, 'border-left-width'));\n bottom = top + elRect.height;\n right = left + elRect.width;\n break;\n }\n /* jshint boss:true */\n } while (container = container.parentNode);\n }\n }\n if (undoScale && el !== window) {\n // Adjust for scale()\n var elMatrix = matrix(container || el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d;\n if (elMatrix) {\n top /= scaleY;\n left /= scaleX;\n width /= scaleX;\n height /= scaleY;\n bottom = top + height;\n right = left + width;\n }\n }\n return {\n top: top,\n left: left,\n bottom: bottom,\n right: right,\n width: width,\n height: height\n };\n}\n\n/**\r\n * Checks if a side of an element is scrolled past a side of its parents\r\n * @param {HTMLElement} el The element who's side being scrolled out of view is in question\r\n * @param {String} elSide Side of the element in question ('top', 'left', 'right', 'bottom')\r\n * @param {String} parentSide Side of the parent in question ('top', 'left', 'right', 'bottom')\r\n * @return {HTMLElement} The parent scroll element that the el's side is scrolled past, or null if there is no such element\r\n */\nfunction isScrolledPast(el, elSide, parentSide) {\n var parent = getParentAutoScrollElement(el, true),\n elSideVal = getRect(el)[elSide];\n\n /* jshint boss:true */\n while (parent) {\n var parentSideVal = getRect(parent)[parentSide],\n visible = void 0;\n if (parentSide === 'top' || parentSide === 'left') {\n visible = elSideVal >= parentSideVal;\n } else {\n visible = elSideVal <= parentSideVal;\n }\n if (!visible) return parent;\n if (parent === getWindowScrollingElement()) break;\n parent = getParentAutoScrollElement(parent, false);\n }\n return false;\n}\n\n/**\r\n * Gets nth child of el, ignoring hidden children, sortable's elements (does not ignore clone if it's visible)\r\n * and non-draggable elements\r\n * @param {HTMLElement} el The parent element\r\n * @param {Number} childNum The index of the child\r\n * @param {Object} options Parent Sortable's options\r\n * @return {HTMLElement} The child at index childNum, or null if not found\r\n */\nfunction getChild(el, childNum, options, includeDragEl) {\n var currentChild = 0,\n i = 0,\n children = el.children;\n while (i < children.length) {\n if (children[i].style.display !== 'none' && children[i] !== Sortable.ghost && (includeDragEl || children[i] !== Sortable.dragged) && closest(children[i], options.draggable, el, false)) {\n if (currentChild === childNum) {\n return children[i];\n }\n currentChild++;\n }\n i++;\n }\n return null;\n}\n\n/**\r\n * Gets the last child in the el, ignoring ghostEl or invisible elements (clones)\r\n * @param {HTMLElement} el Parent element\r\n * @param {selector} selector Any other elements that should be ignored\r\n * @return {HTMLElement} The last child, ignoring ghostEl\r\n */\nfunction lastChild(el, selector) {\n var last = el.lastElementChild;\n while (last && (last === Sortable.ghost || css(last, 'display') === 'none' || selector && !matches(last, selector))) {\n last = last.previousElementSibling;\n }\n return last || null;\n}\n\n/**\r\n * Returns the index of an element within its parent for a selected set of\r\n * elements\r\n * @param {HTMLElement} el\r\n * @param {selector} selector\r\n * @return {number}\r\n */\nfunction index(el, selector) {\n var index = 0;\n if (!el || !el.parentNode) {\n return -1;\n }\n\n /* jshint boss:true */\n while (el = el.previousElementSibling) {\n if (el.nodeName.toUpperCase() !== 'TEMPLATE' && el !== Sortable.clone && (!selector || matches(el, selector))) {\n index++;\n }\n }\n return index;\n}\n\n/**\r\n * Returns the scroll offset of the given element, added with all the scroll offsets of parent elements.\r\n * The value is returned in real pixels.\r\n * @param {HTMLElement} el\r\n * @return {Array} Offsets in the format of [left, top]\r\n */\nfunction getRelativeScrollOffset(el) {\n var offsetLeft = 0,\n offsetTop = 0,\n winScroller = getWindowScrollingElement();\n if (el) {\n do {\n var elMatrix = matrix(el),\n scaleX = elMatrix.a,\n scaleY = elMatrix.d;\n offsetLeft += el.scrollLeft * scaleX;\n offsetTop += el.scrollTop * scaleY;\n } while (el !== winScroller && (el = el.parentNode));\n }\n return [offsetLeft, offsetTop];\n}\n\n/**\r\n * Returns the index of the object within the given array\r\n * @param {Array} arr Array that may or may not hold the object\r\n * @param {Object} obj An object that has a key-value pair unique to and identical to a key-value pair in the object you want to find\r\n * @return {Number} The index of the object in the array, or -1\r\n */\nfunction indexOfObject(arr, obj) {\n for (var i in arr) {\n if (!arr.hasOwnProperty(i)) continue;\n for (var key in obj) {\n if (obj.hasOwnProperty(key) && obj[key] === arr[i][key]) return Number(i);\n }\n }\n return -1;\n}\nfunction getParentAutoScrollElement(el, includeSelf) {\n // skip to window\n if (!el || !el.getBoundingClientRect) return getWindowScrollingElement();\n var elem = el;\n var gotSelf = false;\n do {\n // we don't need to get elem css if it isn't even overflowing in the first place (performance)\n if (elem.clientWidth < elem.scrollWidth || elem.clientHeight < elem.scrollHeight) {\n var elemCSS = css(elem);\n if (elem.clientWidth < elem.scrollWidth && (elemCSS.overflowX == 'auto' || elemCSS.overflowX == 'scroll') || elem.clientHeight < elem.scrollHeight && (elemCSS.overflowY == 'auto' || elemCSS.overflowY == 'scroll')) {\n if (!elem.getBoundingClientRect || elem === document.body) return getWindowScrollingElement();\n if (gotSelf || includeSelf) return elem;\n gotSelf = true;\n }\n }\n /* jshint boss:true */\n } while (elem = elem.parentNode);\n return getWindowScrollingElement();\n}\nfunction extend(dst, src) {\n if (dst && src) {\n for (var key in src) {\n if (src.hasOwnProperty(key)) {\n dst[key] = src[key];\n }\n }\n }\n return dst;\n}\nfunction isRectEqual(rect1, rect2) {\n return Math.round(rect1.top) === Math.round(rect2.top) && Math.round(rect1.left) === Math.round(rect2.left) && Math.round(rect1.height) === Math.round(rect2.height) && Math.round(rect1.width) === Math.round(rect2.width);\n}\nvar _throttleTimeout;\nfunction throttle(callback, ms) {\n return function () {\n if (!_throttleTimeout) {\n var args = arguments,\n _this = this;\n if (args.length === 1) {\n callback.call(_this, args[0]);\n } else {\n callback.apply(_this, args);\n }\n _throttleTimeout = setTimeout(function () {\n _throttleTimeout = void 0;\n }, ms);\n }\n };\n}\nfunction cancelThrottle() {\n clearTimeout(_throttleTimeout);\n _throttleTimeout = void 0;\n}\nfunction scrollBy(el, x, y) {\n el.scrollLeft += x;\n el.scrollTop += y;\n}\nfunction clone(el) {\n var Polymer = window.Polymer;\n var $ = window.jQuery || window.Zepto;\n if (Polymer && Polymer.dom) {\n return Polymer.dom(el).cloneNode(true);\n } else if ($) {\n return $(el).clone(true)[0];\n } else {\n return el.cloneNode(true);\n }\n}\nfunction setRect(el, rect) {\n css(el, 'position', 'absolute');\n css(el, 'top', rect.top);\n css(el, 'left', rect.left);\n css(el, 'width', rect.width);\n css(el, 'height', rect.height);\n}\nfunction unsetRect(el) {\n css(el, 'position', '');\n css(el, 'top', '');\n css(el, 'left', '');\n css(el, 'width', '');\n css(el, 'height', '');\n}\nfunction getChildContainingRectFromElement(container, options, ghostEl) {\n var rect = {};\n Array.from(container.children).forEach(function (child) {\n var _rect$left, _rect$top, _rect$right, _rect$bottom;\n if (!closest(child, options.draggable, container, false) || child.animated || child === ghostEl) return;\n var childRect = getRect(child);\n rect.left = Math.min((_rect$left = rect.left) !== null && _rect$left !== void 0 ? _rect$left : Infinity, childRect.left);\n rect.top = Math.min((_rect$top = rect.top) !== null && _rect$top !== void 0 ? _rect$top : Infinity, childRect.top);\n rect.right = Math.max((_rect$right = rect.right) !== null && _rect$right !== void 0 ? _rect$right : -Infinity, childRect.right);\n rect.bottom = Math.max((_rect$bottom = rect.bottom) !== null && _rect$bottom !== void 0 ? _rect$bottom : -Infinity, childRect.bottom);\n });\n rect.width = rect.right - rect.left;\n rect.height = rect.bottom - rect.top;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\nvar expando = 'Sortable' + new Date().getTime();\n\nfunction AnimationStateManager() {\n var animationStates = [],\n animationCallbackId;\n return {\n captureAnimationState: function captureAnimationState() {\n animationStates = [];\n if (!this.options.animation) return;\n var children = [].slice.call(this.el.children);\n children.forEach(function (child) {\n if (css(child, 'display') === 'none' || child === Sortable.ghost) return;\n animationStates.push({\n target: child,\n rect: getRect(child)\n });\n var fromRect = _objectSpread2({}, animationStates[animationStates.length - 1].rect);\n\n // If animating: compensate for current animation\n if (child.thisAnimationDuration) {\n var childMatrix = matrix(child, true);\n if (childMatrix) {\n fromRect.top -= childMatrix.f;\n fromRect.left -= childMatrix.e;\n }\n }\n child.fromRect = fromRect;\n });\n },\n addAnimationState: function addAnimationState(state) {\n animationStates.push(state);\n },\n removeAnimationState: function removeAnimationState(target) {\n animationStates.splice(indexOfObject(animationStates, {\n target: target\n }), 1);\n },\n animateAll: function animateAll(callback) {\n var _this = this;\n if (!this.options.animation) {\n clearTimeout(animationCallbackId);\n if (typeof callback === 'function') callback();\n return;\n }\n var animating = false,\n animationTime = 0;\n animationStates.forEach(function (state) {\n var time = 0,\n target = state.target,\n fromRect = target.fromRect,\n toRect = getRect(target),\n prevFromRect = target.prevFromRect,\n prevToRect = target.prevToRect,\n animatingRect = state.rect,\n targetMatrix = matrix(target, true);\n if (targetMatrix) {\n // Compensate for current animation\n toRect.top -= targetMatrix.f;\n toRect.left -= targetMatrix.e;\n }\n target.toRect = toRect;\n if (target.thisAnimationDuration) {\n // Could also check if animatingRect is between fromRect and toRect\n if (isRectEqual(prevFromRect, toRect) && !isRectEqual(fromRect, toRect) &&\n // Make sure animatingRect is on line between toRect & fromRect\n (animatingRect.top - toRect.top) / (animatingRect.left - toRect.left) === (fromRect.top - toRect.top) / (fromRect.left - toRect.left)) {\n // If returning to same place as started from animation and on same axis\n time = calculateRealTime(animatingRect, prevFromRect, prevToRect, _this.options);\n }\n }\n\n // if fromRect != toRect: animate\n if (!isRectEqual(toRect, fromRect)) {\n target.prevFromRect = fromRect;\n target.prevToRect = toRect;\n if (!time) {\n time = _this.options.animation;\n }\n _this.animate(target, animatingRect, toRect, time);\n }\n if (time) {\n animating = true;\n animationTime = Math.max(animationTime, time);\n clearTimeout(target.animationResetTimer);\n target.animationResetTimer = setTimeout(function () {\n target.animationTime = 0;\n target.prevFromRect = null;\n target.fromRect = null;\n target.prevToRect = null;\n target.thisAnimationDuration = null;\n }, time);\n target.thisAnimationDuration = time;\n }\n });\n clearTimeout(animationCallbackId);\n if (!animating) {\n if (typeof callback === 'function') callback();\n } else {\n animationCallbackId = setTimeout(function () {\n if (typeof callback === 'function') callback();\n }, animationTime);\n }\n animationStates = [];\n },\n animate: function animate(target, currentRect, toRect, duration) {\n if (duration) {\n css(target, 'transition', '');\n css(target, 'transform', '');\n var elMatrix = matrix(this.el),\n scaleX = elMatrix && elMatrix.a,\n scaleY = elMatrix && elMatrix.d,\n translateX = (currentRect.left - toRect.left) / (scaleX || 1),\n translateY = (currentRect.top - toRect.top) / (scaleY || 1);\n target.animatingX = !!translateX;\n target.animatingY = !!translateY;\n css(target, 'transform', 'translate3d(' + translateX + 'px,' + translateY + 'px,0)');\n this.forRepaintDummy = repaint(target); // repaint\n\n css(target, 'transition', 'transform ' + duration + 'ms' + (this.options.easing ? ' ' + this.options.easing : ''));\n css(target, 'transform', 'translate3d(0,0,0)');\n typeof target.animated === 'number' && clearTimeout(target.animated);\n target.animated = setTimeout(function () {\n css(target, 'transition', '');\n css(target, 'transform', '');\n target.animated = false;\n target.animatingX = false;\n target.animatingY = false;\n }, duration);\n }\n }\n };\n}\nfunction repaint(target) {\n return target.offsetWidth;\n}\nfunction calculateRealTime(animatingRect, fromRect, toRect, options) {\n return Math.sqrt(Math.pow(fromRect.top - animatingRect.top, 2) + Math.pow(fromRect.left - animatingRect.left, 2)) / Math.sqrt(Math.pow(fromRect.top - toRect.top, 2) + Math.pow(fromRect.left - toRect.left, 2)) * options.animation;\n}\n\nvar plugins = [];\nvar defaults = {\n initializeByDefault: true\n};\nvar PluginManager = {\n mount: function mount(plugin) {\n // Set default static properties\n for (var option in defaults) {\n if (defaults.hasOwnProperty(option) && !(option in plugin)) {\n plugin[option] = defaults[option];\n }\n }\n plugins.forEach(function (p) {\n if (p.pluginName === plugin.pluginName) {\n throw \"Sortable: Cannot mount plugin \".concat(plugin.pluginName, \" more than once\");\n }\n });\n plugins.push(plugin);\n },\n pluginEvent: function pluginEvent(eventName, sortable, evt) {\n var _this = this;\n this.eventCanceled = false;\n evt.cancel = function () {\n _this.eventCanceled = true;\n };\n var eventNameGlobal = eventName + 'Global';\n plugins.forEach(function (plugin) {\n if (!sortable[plugin.pluginName]) return;\n // Fire global events if it exists in this sortable\n if (sortable[plugin.pluginName][eventNameGlobal]) {\n sortable[plugin.pluginName][eventNameGlobal](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n\n // Only fire plugin event if plugin is enabled in this sortable,\n // and plugin has event defined\n if (sortable.options[plugin.pluginName] && sortable[plugin.pluginName][eventName]) {\n sortable[plugin.pluginName][eventName](_objectSpread2({\n sortable: sortable\n }, evt));\n }\n });\n },\n initializePlugins: function initializePlugins(sortable, el, defaults, options) {\n plugins.forEach(function (plugin) {\n var pluginName = plugin.pluginName;\n if (!sortable.options[pluginName] && !plugin.initializeByDefault) return;\n var initialized = new plugin(sortable, el, sortable.options);\n initialized.sortable = sortable;\n initialized.options = sortable.options;\n sortable[pluginName] = initialized;\n\n // Add default options from plugin\n _extends(defaults, initialized.defaults);\n });\n for (var option in sortable.options) {\n if (!sortable.options.hasOwnProperty(option)) continue;\n var modified = this.modifyOption(sortable, option, sortable.options[option]);\n if (typeof modified !== 'undefined') {\n sortable.options[option] = modified;\n }\n }\n },\n getEventProperties: function getEventProperties(name, sortable) {\n var eventProperties = {};\n plugins.forEach(function (plugin) {\n if (typeof plugin.eventProperties !== 'function') return;\n _extends(eventProperties, plugin.eventProperties.call(sortable[plugin.pluginName], name));\n });\n return eventProperties;\n },\n modifyOption: function modifyOption(sortable, name, value) {\n var modifiedValue;\n plugins.forEach(function (plugin) {\n // Plugin must exist on the Sortable\n if (!sortable[plugin.pluginName]) return;\n\n // If static option listener exists for this option, call in the context of the Sortable's instance of this plugin\n if (plugin.optionListeners && typeof plugin.optionListeners[name] === 'function') {\n modifiedValue = plugin.optionListeners[name].call(sortable[plugin.pluginName], value);\n }\n });\n return modifiedValue;\n }\n};\n\nfunction dispatchEvent(_ref) {\n var sortable = _ref.sortable,\n rootEl = _ref.rootEl,\n name = _ref.name,\n targetEl = _ref.targetEl,\n cloneEl = _ref.cloneEl,\n toEl = _ref.toEl,\n fromEl = _ref.fromEl,\n oldIndex = _ref.oldIndex,\n newIndex = _ref.newIndex,\n oldDraggableIndex = _ref.oldDraggableIndex,\n newDraggableIndex = _ref.newDraggableIndex,\n originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n extraEventProperties = _ref.extraEventProperties;\n sortable = sortable || rootEl && rootEl[expando];\n if (!sortable) return;\n var evt,\n options = sortable.options,\n onName = 'on' + name.charAt(0).toUpperCase() + name.substr(1);\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent(name, {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent(name, true, true);\n }\n evt.to = toEl || rootEl;\n evt.from = fromEl || rootEl;\n evt.item = targetEl || rootEl;\n evt.clone = cloneEl;\n evt.oldIndex = oldIndex;\n evt.newIndex = newIndex;\n evt.oldDraggableIndex = oldDraggableIndex;\n evt.newDraggableIndex = newDraggableIndex;\n evt.originalEvent = originalEvent;\n evt.pullMode = putSortable ? putSortable.lastPutMode : undefined;\n var allEventProperties = _objectSpread2(_objectSpread2({}, extraEventProperties), PluginManager.getEventProperties(name, sortable));\n for (var option in allEventProperties) {\n evt[option] = allEventProperties[option];\n }\n if (rootEl) {\n rootEl.dispatchEvent(evt);\n }\n if (options[onName]) {\n options[onName].call(sortable, evt);\n }\n}\n\nvar _excluded = [\"evt\"];\nvar pluginEvent = function pluginEvent(eventName, sortable) {\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n originalEvent = _ref.evt,\n data = _objectWithoutProperties(_ref, _excluded);\n PluginManager.pluginEvent.bind(Sortable)(eventName, sortable, _objectSpread2({\n dragEl: dragEl,\n parentEl: parentEl,\n ghostEl: ghostEl,\n rootEl: rootEl,\n nextEl: nextEl,\n lastDownEl: lastDownEl,\n cloneEl: cloneEl,\n cloneHidden: cloneHidden,\n dragStarted: moved,\n putSortable: putSortable,\n activeSortable: Sortable.active,\n originalEvent: originalEvent,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n hideGhostForTarget: _hideGhostForTarget,\n unhideGhostForTarget: _unhideGhostForTarget,\n cloneNowHidden: function cloneNowHidden() {\n cloneHidden = true;\n },\n cloneNowShown: function cloneNowShown() {\n cloneHidden = false;\n },\n dispatchSortableEvent: function dispatchSortableEvent(name) {\n _dispatchEvent({\n sortable: sortable,\n name: name,\n originalEvent: originalEvent\n });\n }\n }, data));\n};\nfunction _dispatchEvent(info) {\n dispatchEvent(_objectSpread2({\n putSortable: putSortable,\n cloneEl: cloneEl,\n targetEl: dragEl,\n rootEl: rootEl,\n oldIndex: oldIndex,\n oldDraggableIndex: oldDraggableIndex,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex\n }, info));\n}\nvar dragEl,\n parentEl,\n ghostEl,\n rootEl,\n nextEl,\n lastDownEl,\n cloneEl,\n cloneHidden,\n oldIndex,\n newIndex,\n oldDraggableIndex,\n newDraggableIndex,\n activeGroup,\n putSortable,\n awaitingDragStarted = false,\n ignoreNextClick = false,\n sortables = [],\n tapEvt,\n touchEvt,\n lastDx,\n lastDy,\n tapDistanceLeft,\n tapDistanceTop,\n moved,\n lastTarget,\n lastDirection,\n pastFirstInvertThresh = false,\n isCircumstantialInvert = false,\n targetMoveDistance,\n // For positioning ghost absolutely\n ghostRelativeParent,\n ghostRelativeParentInitialScroll = [],\n // (left, top)\n\n _silent = false,\n savedInputChecked = [];\n\n/** @const */\nvar documentExists = typeof document !== 'undefined',\n PositionGhostAbsolutely = IOS,\n CSSFloatProperty = Edge || IE11OrLess ? 'cssFloat' : 'float',\n // This will not pass for IE9, because IE9 DnD only works on anchors\n supportDraggable = documentExists && !ChromeForAndroid && !IOS && 'draggable' in document.createElement('div'),\n supportCssPointerEvents = function () {\n if (!documentExists) return;\n // false when <= IE11\n if (IE11OrLess) {\n return false;\n }\n var el = document.createElement('x');\n el.style.cssText = 'pointer-events:auto';\n return el.style.pointerEvents === 'auto';\n }(),\n _detectDirection = function _detectDirection(el, options) {\n var elCSS = css(el),\n elWidth = parseInt(elCSS.width) - parseInt(elCSS.paddingLeft) - parseInt(elCSS.paddingRight) - parseInt(elCSS.borderLeftWidth) - parseInt(elCSS.borderRightWidth),\n child1 = getChild(el, 0, options),\n child2 = getChild(el, 1, options),\n firstChildCSS = child1 && css(child1),\n secondChildCSS = child2 && css(child2),\n firstChildWidth = firstChildCSS && parseInt(firstChildCSS.marginLeft) + parseInt(firstChildCSS.marginRight) + getRect(child1).width,\n secondChildWidth = secondChildCSS && parseInt(secondChildCSS.marginLeft) + parseInt(secondChildCSS.marginRight) + getRect(child2).width;\n if (elCSS.display === 'flex') {\n return elCSS.flexDirection === 'column' || elCSS.flexDirection === 'column-reverse' ? 'vertical' : 'horizontal';\n }\n if (elCSS.display === 'grid') {\n return elCSS.gridTemplateColumns.split(' ').length <= 1 ? 'vertical' : 'horizontal';\n }\n if (child1 && firstChildCSS[\"float\"] && firstChildCSS[\"float\"] !== 'none') {\n var touchingSideChild2 = firstChildCSS[\"float\"] === 'left' ? 'left' : 'right';\n return child2 && (secondChildCSS.clear === 'both' || secondChildCSS.clear === touchingSideChild2) ? 'vertical' : 'horizontal';\n }\n return child1 && (firstChildCSS.display === 'block' || firstChildCSS.display === 'flex' || firstChildCSS.display === 'table' || firstChildCSS.display === 'grid' || firstChildWidth >= elWidth && elCSS[CSSFloatProperty] === 'none' || child2 && elCSS[CSSFloatProperty] === 'none' && firstChildWidth + secondChildWidth > elWidth) ? 'vertical' : 'horizontal';\n },\n _dragElInRowColumn = function _dragElInRowColumn(dragRect, targetRect, vertical) {\n var dragElS1Opp = vertical ? dragRect.left : dragRect.top,\n dragElS2Opp = vertical ? dragRect.right : dragRect.bottom,\n dragElOppLength = vertical ? dragRect.width : dragRect.height,\n targetS1Opp = vertical ? targetRect.left : targetRect.top,\n targetS2Opp = vertical ? targetRect.right : targetRect.bottom,\n targetOppLength = vertical ? targetRect.width : targetRect.height;\n return dragElS1Opp === targetS1Opp || dragElS2Opp === targetS2Opp || dragElS1Opp + dragElOppLength / 2 === targetS1Opp + targetOppLength / 2;\n },\n /**\r\n * Detects first nearest empty sortable to X and Y position using emptyInsertThreshold.\r\n * @param {Number} x X position\r\n * @param {Number} y Y position\r\n * @return {HTMLElement} Element of the first found nearest Sortable\r\n */\n _detectNearestEmptySortable = function _detectNearestEmptySortable(x, y) {\n var ret;\n sortables.some(function (sortable) {\n var threshold = sortable[expando].options.emptyInsertThreshold;\n if (!threshold || lastChild(sortable)) return;\n var rect = getRect(sortable),\n insideHorizontally = x >= rect.left - threshold && x <= rect.right + threshold,\n insideVertically = y >= rect.top - threshold && y <= rect.bottom + threshold;\n if (insideHorizontally && insideVertically) {\n return ret = sortable;\n }\n });\n return ret;\n },\n _prepareGroup = function _prepareGroup(options) {\n function toFn(value, pull) {\n return function (to, from, dragEl, evt) {\n var sameGroup = to.options.group.name && from.options.group.name && to.options.group.name === from.options.group.name;\n if (value == null && (pull || sameGroup)) {\n // Default pull value\n // Default pull and put value if same group\n return true;\n } else if (value == null || value === false) {\n return false;\n } else if (pull && value === 'clone') {\n return value;\n } else if (typeof value === 'function') {\n return toFn(value(to, from, dragEl, evt), pull)(to, from, dragEl, evt);\n } else {\n var otherGroup = (pull ? to : from).options.group.name;\n return value === true || typeof value === 'string' && value === otherGroup || value.join && value.indexOf(otherGroup) > -1;\n }\n };\n }\n var group = {};\n var originalGroup = options.group;\n if (!originalGroup || _typeof(originalGroup) != 'object') {\n originalGroup = {\n name: originalGroup\n };\n }\n group.name = originalGroup.name;\n group.checkPull = toFn(originalGroup.pull, true);\n group.checkPut = toFn(originalGroup.put);\n group.revertClone = originalGroup.revertClone;\n options.group = group;\n },\n _hideGhostForTarget = function _hideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', 'none');\n }\n },\n _unhideGhostForTarget = function _unhideGhostForTarget() {\n if (!supportCssPointerEvents && ghostEl) {\n css(ghostEl, 'display', '');\n }\n };\n\n// #1184 fix - Prevent click event on fallback if dragged but item not changed position\nif (documentExists && !ChromeForAndroid) {\n document.addEventListener('click', function (evt) {\n if (ignoreNextClick) {\n evt.preventDefault();\n evt.stopPropagation && evt.stopPropagation();\n evt.stopImmediatePropagation && evt.stopImmediatePropagation();\n ignoreNextClick = false;\n return false;\n }\n }, true);\n}\nvar nearestEmptyInsertDetectEvent = function nearestEmptyInsertDetectEvent(evt) {\n if (dragEl) {\n evt = evt.touches ? evt.touches[0] : evt;\n var nearest = _detectNearestEmptySortable(evt.clientX, evt.clientY);\n if (nearest) {\n // Create imitation event\n var event = {};\n for (var i in evt) {\n if (evt.hasOwnProperty(i)) {\n event[i] = evt[i];\n }\n }\n event.target = event.rootEl = nearest;\n event.preventDefault = void 0;\n event.stopPropagation = void 0;\n nearest[expando]._onDragOver(event);\n }\n }\n};\nvar _checkOutsideTargetEl = function _checkOutsideTargetEl(evt) {\n if (dragEl) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n }\n};\n\n/**\r\n * @class Sortable\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nfunction Sortable(el, options) {\n if (!(el && el.nodeType && el.nodeType === 1)) {\n throw \"Sortable: `el` must be an HTMLElement, not \".concat({}.toString.call(el));\n }\n this.el = el; // root element\n this.options = options = _extends({}, options);\n\n // Export instance\n el[expando] = this;\n var defaults = {\n group: null,\n sort: true,\n disabled: false,\n store: null,\n handle: null,\n draggable: /^[uo]l$/i.test(el.nodeName) ? '>li' : '>*',\n swapThreshold: 1,\n // percentage; 0 <= x <= 1\n invertSwap: false,\n // invert always\n invertedSwapThreshold: null,\n // will be set to same as swapThreshold if default\n removeCloneOnHide: true,\n direction: function direction() {\n return _detectDirection(el, this.options);\n },\n ghostClass: 'sortable-ghost',\n chosenClass: 'sortable-chosen',\n dragClass: 'sortable-drag',\n ignore: 'a, img',\n filter: null,\n preventOnFilter: true,\n animation: 0,\n easing: null,\n setData: function setData(dataTransfer, dragEl) {\n dataTransfer.setData('Text', dragEl.textContent);\n },\n dropBubble: false,\n dragoverBubble: false,\n dataIdAttr: 'data-id',\n delay: 0,\n delayOnTouchOnly: false,\n touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,\n forceFallback: false,\n fallbackClass: 'sortable-fallback',\n fallbackOnBody: false,\n fallbackTolerance: 0,\n fallbackOffset: {\n x: 0,\n y: 0\n },\n supportPointer: Sortable.supportPointer !== false && 'PointerEvent' in window && !Safari,\n emptyInsertThreshold: 5\n };\n PluginManager.initializePlugins(this, el, defaults);\n\n // Set default options\n for (var name in defaults) {\n !(name in options) && (options[name] = defaults[name]);\n }\n _prepareGroup(options);\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n\n // Setup drag mode\n this.nativeDraggable = options.forceFallback ? false : supportDraggable;\n if (this.nativeDraggable) {\n // Touch start threshold cannot be greater than the native dragstart threshold\n this.options.touchStartThreshold = 1;\n }\n\n // Bind events\n if (options.supportPointer) {\n on(el, 'pointerdown', this._onTapStart);\n } else {\n on(el, 'mousedown', this._onTapStart);\n on(el, 'touchstart', this._onTapStart);\n }\n if (this.nativeDraggable) {\n on(el, 'dragover', this);\n on(el, 'dragenter', this);\n }\n sortables.push(this.el);\n\n // Restore sorting\n options.store && options.store.get && this.sort(options.store.get(this) || []);\n\n // Add animation state manager\n _extends(this, AnimationStateManager());\n}\nSortable.prototype = /** @lends Sortable.prototype */{\n constructor: Sortable,\n _isOutsideThisEl: function _isOutsideThisEl(target) {\n if (!this.el.contains(target) && target !== this.el) {\n lastTarget = null;\n }\n },\n _getDirection: function _getDirection(evt, target) {\n return typeof this.options.direction === 'function' ? this.options.direction.call(this, evt, target, dragEl) : this.options.direction;\n },\n _onTapStart: function _onTapStart( /** Event|TouchEvent */evt) {\n if (!evt.cancelable) return;\n var _this = this,\n el = this.el,\n options = this.options,\n preventOnFilter = options.preventOnFilter,\n type = evt.type,\n touch = evt.touches && evt.touches[0] || evt.pointerType && evt.pointerType === 'touch' && evt,\n target = (touch || evt).target,\n originalTarget = evt.target.shadowRoot && (evt.path && evt.path[0] || evt.composedPath && evt.composedPath()[0]) || target,\n filter = options.filter;\n _saveInputCheckedState(el);\n\n // Don't trigger start event when an element is been dragged, otherwise the evt.oldindex always wrong when set option.group.\n if (dragEl) {\n return;\n }\n if (/mousedown|pointerdown/.test(type) && evt.button !== 0 || options.disabled) {\n return; // only left button and enabled\n }\n\n // cancel dnd if original target is content editable\n if (originalTarget.isContentEditable) {\n return;\n }\n\n // Safari ignores further event handling after mousedown\n if (!this.nativeDraggable && Safari && target && target.tagName.toUpperCase() === 'SELECT') {\n return;\n }\n target = closest(target, options.draggable, el, false);\n if (target && target.animated) {\n return;\n }\n if (lastDownEl === target) {\n // Ignoring duplicate `down`\n return;\n }\n\n // Get the index of the dragged element within its parent\n oldIndex = index(target);\n oldDraggableIndex = index(target, options.draggable);\n\n // Check filter\n if (typeof filter === 'function') {\n if (filter.call(this, evt, target, this)) {\n _dispatchEvent({\n sortable: _this,\n rootEl: originalTarget,\n name: 'filter',\n targetEl: target,\n toEl: el,\n fromEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n } else if (filter) {\n filter = filter.split(',').some(function (criteria) {\n criteria = closest(originalTarget, criteria.trim(), el, false);\n if (criteria) {\n _dispatchEvent({\n sortable: _this,\n rootEl: criteria,\n name: 'filter',\n targetEl: target,\n fromEl: el,\n toEl: el\n });\n pluginEvent('filter', _this, {\n evt: evt\n });\n return true;\n }\n });\n if (filter) {\n preventOnFilter && evt.cancelable && evt.preventDefault();\n return; // cancel dnd\n }\n }\n if (options.handle && !closest(originalTarget, options.handle, el, false)) {\n return;\n }\n\n // Prepare `dragstart`\n this._prepareDragStart(evt, touch, target);\n },\n _prepareDragStart: function _prepareDragStart( /** Event */evt, /** Touch */touch, /** HTMLElement */target) {\n var _this = this,\n el = _this.el,\n options = _this.options,\n ownerDocument = el.ownerDocument,\n dragStartFn;\n if (target && !dragEl && target.parentNode === el) {\n var dragRect = getRect(target);\n rootEl = el;\n dragEl = target;\n parentEl = dragEl.parentNode;\n nextEl = dragEl.nextSibling;\n lastDownEl = target;\n activeGroup = options.group;\n Sortable.dragged = dragEl;\n tapEvt = {\n target: dragEl,\n clientX: (touch || evt).clientX,\n clientY: (touch || evt).clientY\n };\n tapDistanceLeft = tapEvt.clientX - dragRect.left;\n tapDistanceTop = tapEvt.clientY - dragRect.top;\n this._lastX = (touch || evt).clientX;\n this._lastY = (touch || evt).clientY;\n dragEl.style['will-change'] = 'all';\n dragStartFn = function dragStartFn() {\n pluginEvent('delayEnded', _this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n _this._onDrop();\n return;\n }\n // Delayed drag has been triggered\n // we can re-enable the events: touchmove/mousemove\n _this._disableDelayedDragEvents();\n if (!FireFox && _this.nativeDraggable) {\n dragEl.draggable = true;\n }\n\n // Bind the events: dragstart/dragend\n _this._triggerDragStart(evt, touch);\n\n // Drag start event\n _dispatchEvent({\n sortable: _this,\n name: 'choose',\n originalEvent: evt\n });\n\n // Chosen item\n toggleClass(dragEl, options.chosenClass, true);\n };\n\n // Disable \"draggable\"\n options.ignore.split(',').forEach(function (criteria) {\n find(dragEl, criteria.trim(), _disableDraggable);\n });\n on(ownerDocument, 'dragover', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mousemove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'touchmove', nearestEmptyInsertDetectEvent);\n on(ownerDocument, 'mouseup', _this._onDrop);\n on(ownerDocument, 'touchend', _this._onDrop);\n on(ownerDocument, 'touchcancel', _this._onDrop);\n\n // Make dragEl draggable (must be before delay for FireFox)\n if (FireFox && this.nativeDraggable) {\n this.options.touchStartThreshold = 4;\n dragEl.draggable = true;\n }\n pluginEvent('delayStart', this, {\n evt: evt\n });\n\n // Delay is impossible for native DnD in Edge or IE\n if (options.delay && (!options.delayOnTouchOnly || touch) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n // If the user moves the pointer or let go the click or touch\n // before the delay has been reached:\n // disable the delayed drag\n on(ownerDocument, 'mouseup', _this._disableDelayedDrag);\n on(ownerDocument, 'touchend', _this._disableDelayedDrag);\n on(ownerDocument, 'touchcancel', _this._disableDelayedDrag);\n on(ownerDocument, 'mousemove', _this._delayedDragTouchMoveHandler);\n on(ownerDocument, 'touchmove', _this._delayedDragTouchMoveHandler);\n options.supportPointer && on(ownerDocument, 'pointermove', _this._delayedDragTouchMoveHandler);\n _this._dragStartTimer = setTimeout(dragStartFn, options.delay);\n } else {\n dragStartFn();\n }\n }\n },\n _delayedDragTouchMoveHandler: function _delayedDragTouchMoveHandler( /** TouchEvent|PointerEvent **/e) {\n var touch = e.touches ? e.touches[0] : e;\n if (Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1))) {\n this._disableDelayedDrag();\n }\n },\n _disableDelayedDrag: function _disableDelayedDrag() {\n dragEl && _disableDraggable(dragEl);\n clearTimeout(this._dragStartTimer);\n this._disableDelayedDragEvents();\n },\n _disableDelayedDragEvents: function _disableDelayedDragEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._disableDelayedDrag);\n off(ownerDocument, 'touchend', this._disableDelayedDrag);\n off(ownerDocument, 'touchcancel', this._disableDelayedDrag);\n off(ownerDocument, 'mousemove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'touchmove', this._delayedDragTouchMoveHandler);\n off(ownerDocument, 'pointermove', this._delayedDragTouchMoveHandler);\n },\n _triggerDragStart: function _triggerDragStart( /** Event */evt, /** Touch */touch) {\n touch = touch || evt.pointerType == 'touch' && evt;\n if (!this.nativeDraggable || touch) {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._onTouchMove);\n } else if (touch) {\n on(document, 'touchmove', this._onTouchMove);\n } else {\n on(document, 'mousemove', this._onTouchMove);\n }\n } else {\n on(dragEl, 'dragend', this);\n on(rootEl, 'dragstart', this._onDragStart);\n }\n try {\n if (document.selection) {\n // Timeout neccessary for IE9\n _nextTick(function () {\n document.selection.empty();\n });\n } else {\n window.getSelection().removeAllRanges();\n }\n } catch (err) {}\n },\n _dragStarted: function _dragStarted(fallback, evt) {\n awaitingDragStarted = false;\n if (rootEl && dragEl) {\n pluginEvent('dragStarted', this, {\n evt: evt\n });\n if (this.nativeDraggable) {\n on(document, 'dragover', _checkOutsideTargetEl);\n }\n var options = this.options;\n\n // Apply effect\n !fallback && toggleClass(dragEl, options.dragClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n Sortable.active = this;\n fallback && this._appendGhost();\n\n // Drag start event\n _dispatchEvent({\n sortable: this,\n name: 'start',\n originalEvent: evt\n });\n } else {\n this._nulling();\n }\n },\n _emulateDragOver: function _emulateDragOver() {\n if (touchEvt) {\n this._lastX = touchEvt.clientX;\n this._lastY = touchEvt.clientY;\n _hideGhostForTarget();\n var target = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n var parent = target;\n while (target && target.shadowRoot) {\n target = target.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY);\n if (target === parent) break;\n parent = target;\n }\n dragEl.parentNode[expando]._isOutsideThisEl(target);\n if (parent) {\n do {\n if (parent[expando]) {\n var inserted = void 0;\n inserted = parent[expando]._onDragOver({\n clientX: touchEvt.clientX,\n clientY: touchEvt.clientY,\n target: target,\n rootEl: parent\n });\n if (inserted && !this.options.dragoverBubble) {\n break;\n }\n }\n target = parent; // store last element\n }\n /* jshint boss:true */ while (parent = getParentOrHost(parent));\n }\n _unhideGhostForTarget();\n }\n },\n _onTouchMove: function _onTouchMove( /**TouchEvent*/evt) {\n if (tapEvt) {\n var options = this.options,\n fallbackTolerance = options.fallbackTolerance,\n fallbackOffset = options.fallbackOffset,\n touch = evt.touches ? evt.touches[0] : evt,\n ghostMatrix = ghostEl && matrix(ghostEl, true),\n scaleX = ghostEl && ghostMatrix && ghostMatrix.a,\n scaleY = ghostEl && ghostMatrix && ghostMatrix.d,\n relativeScrollOffset = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent),\n dx = (touch.clientX - tapEvt.clientX + fallbackOffset.x) / (scaleX || 1) + (relativeScrollOffset ? relativeScrollOffset[0] - ghostRelativeParentInitialScroll[0] : 0) / (scaleX || 1),\n dy = (touch.clientY - tapEvt.clientY + fallbackOffset.y) / (scaleY || 1) + (relativeScrollOffset ? relativeScrollOffset[1] - ghostRelativeParentInitialScroll[1] : 0) / (scaleY || 1);\n\n // only set the status to dragging, when we are actually dragging\n if (!Sortable.active && !awaitingDragStarted) {\n if (fallbackTolerance && Math.max(Math.abs(touch.clientX - this._lastX), Math.abs(touch.clientY - this._lastY)) < fallbackTolerance) {\n return;\n }\n this._onDragStart(evt, true);\n }\n if (ghostEl) {\n if (ghostMatrix) {\n ghostMatrix.e += dx - (lastDx || 0);\n ghostMatrix.f += dy - (lastDy || 0);\n } else {\n ghostMatrix = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: dx,\n f: dy\n };\n }\n var cssMatrix = \"matrix(\".concat(ghostMatrix.a, \",\").concat(ghostMatrix.b, \",\").concat(ghostMatrix.c, \",\").concat(ghostMatrix.d, \",\").concat(ghostMatrix.e, \",\").concat(ghostMatrix.f, \")\");\n css(ghostEl, 'webkitTransform', cssMatrix);\n css(ghostEl, 'mozTransform', cssMatrix);\n css(ghostEl, 'msTransform', cssMatrix);\n css(ghostEl, 'transform', cssMatrix);\n lastDx = dx;\n lastDy = dy;\n touchEvt = touch;\n }\n evt.cancelable && evt.preventDefault();\n }\n },\n _appendGhost: function _appendGhost() {\n // Bug if using scale(): https://stackoverflow.com/questions/2637058\n // Not being adjusted for\n if (!ghostEl) {\n var container = this.options.fallbackOnBody ? document.body : rootEl,\n rect = getRect(dragEl, true, PositionGhostAbsolutely, true, container),\n options = this.options;\n\n // Position absolutely\n if (PositionGhostAbsolutely) {\n // Get relatively positioned parent\n ghostRelativeParent = container;\n while (css(ghostRelativeParent, 'position') === 'static' && css(ghostRelativeParent, 'transform') === 'none' && ghostRelativeParent !== document) {\n ghostRelativeParent = ghostRelativeParent.parentNode;\n }\n if (ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement) {\n if (ghostRelativeParent === document) ghostRelativeParent = getWindowScrollingElement();\n rect.top += ghostRelativeParent.scrollTop;\n rect.left += ghostRelativeParent.scrollLeft;\n } else {\n ghostRelativeParent = getWindowScrollingElement();\n }\n ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);\n }\n ghostEl = dragEl.cloneNode(true);\n toggleClass(ghostEl, options.ghostClass, false);\n toggleClass(ghostEl, options.fallbackClass, true);\n toggleClass(ghostEl, options.dragClass, true);\n css(ghostEl, 'transition', '');\n css(ghostEl, 'transform', '');\n css(ghostEl, 'box-sizing', 'border-box');\n css(ghostEl, 'margin', 0);\n css(ghostEl, 'top', rect.top);\n css(ghostEl, 'left', rect.left);\n css(ghostEl, 'width', rect.width);\n css(ghostEl, 'height', rect.height);\n css(ghostEl, 'opacity', '0.8');\n css(ghostEl, 'position', PositionGhostAbsolutely ? 'absolute' : 'fixed');\n css(ghostEl, 'zIndex', '100000');\n css(ghostEl, 'pointerEvents', 'none');\n Sortable.ghost = ghostEl;\n container.appendChild(ghostEl);\n\n // Set transform-origin\n css(ghostEl, 'transform-origin', tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + '% ' + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + '%');\n }\n },\n _onDragStart: function _onDragStart( /**Event*/evt, /**boolean*/fallback) {\n var _this = this;\n var dataTransfer = evt.dataTransfer;\n var options = _this.options;\n pluginEvent('dragStart', this, {\n evt: evt\n });\n if (Sortable.eventCanceled) {\n this._onDrop();\n return;\n }\n pluginEvent('setupClone', this);\n if (!Sortable.eventCanceled) {\n cloneEl = clone(dragEl);\n cloneEl.removeAttribute(\"id\");\n cloneEl.draggable = false;\n cloneEl.style['will-change'] = '';\n this._hideClone();\n toggleClass(cloneEl, this.options.chosenClass, false);\n Sortable.clone = cloneEl;\n }\n\n // #1143: IFrame support workaround\n _this.cloneId = _nextTick(function () {\n pluginEvent('clone', _this);\n if (Sortable.eventCanceled) return;\n if (!_this.options.removeCloneOnHide) {\n rootEl.insertBefore(cloneEl, dragEl);\n }\n _this._hideClone();\n _dispatchEvent({\n sortable: _this,\n name: 'clone'\n });\n });\n !fallback && toggleClass(dragEl, options.dragClass, true);\n\n // Set proper drop events\n if (fallback) {\n ignoreNextClick = true;\n _this._loopId = setInterval(_this._emulateDragOver, 50);\n } else {\n // Undo what was set in _prepareDragStart before drag started\n off(document, 'mouseup', _this._onDrop);\n off(document, 'touchend', _this._onDrop);\n off(document, 'touchcancel', _this._onDrop);\n if (dataTransfer) {\n dataTransfer.effectAllowed = 'move';\n options.setData && options.setData.call(_this, dataTransfer, dragEl);\n }\n on(document, 'drop', _this);\n\n // #1276 fix:\n css(dragEl, 'transform', 'translateZ(0)');\n }\n awaitingDragStarted = true;\n _this._dragStartId = _nextTick(_this._dragStarted.bind(_this, fallback, evt));\n on(document, 'selectstart', _this);\n moved = true;\n if (Safari) {\n css(document.body, 'user-select', 'none');\n }\n },\n // Returns true - if no further action is needed (either inserted or another condition)\n _onDragOver: function _onDragOver( /**Event*/evt) {\n var el = this.el,\n target = evt.target,\n dragRect,\n targetRect,\n revert,\n options = this.options,\n group = options.group,\n activeSortable = Sortable.active,\n isOwner = activeGroup === group,\n canSort = options.sort,\n fromSortable = putSortable || activeSortable,\n vertical,\n _this = this,\n completedFired = false;\n if (_silent) return;\n function dragOverEvent(name, extra) {\n pluginEvent(name, _this, _objectSpread2({\n evt: evt,\n isOwner: isOwner,\n axis: vertical ? 'vertical' : 'horizontal',\n revert: revert,\n dragRect: dragRect,\n targetRect: targetRect,\n canSort: canSort,\n fromSortable: fromSortable,\n target: target,\n completed: completed,\n onMove: function onMove(target, after) {\n return _onMove(rootEl, el, dragEl, dragRect, target, getRect(target), evt, after);\n },\n changed: changed\n }, extra));\n }\n\n // Capture animation state\n function capture() {\n dragOverEvent('dragOverAnimationCapture');\n _this.captureAnimationState();\n if (_this !== fromSortable) {\n fromSortable.captureAnimationState();\n }\n }\n\n // Return invocation when dragEl is inserted (or completed)\n function completed(insertion) {\n dragOverEvent('dragOverCompleted', {\n insertion: insertion\n });\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n } else {\n activeSortable._showClone(_this);\n }\n if (_this !== fromSortable) {\n // Set ghost class to new sortable's ghost class\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : activeSortable.options.ghostClass, false);\n toggleClass(dragEl, options.ghostClass, true);\n }\n if (putSortable !== _this && _this !== Sortable.active) {\n putSortable = _this;\n } else if (_this === Sortable.active && putSortable) {\n putSortable = null;\n }\n\n // Animation\n if (fromSortable === _this) {\n _this._ignoreWhileAnimating = target;\n }\n _this.animateAll(function () {\n dragOverEvent('dragOverAnimationComplete');\n _this._ignoreWhileAnimating = null;\n });\n if (_this !== fromSortable) {\n fromSortable.animateAll();\n fromSortable._ignoreWhileAnimating = null;\n }\n }\n\n // Null lastTarget if it is not inside a previously swapped element\n if (target === dragEl && !dragEl.animated || target === el && !target.animated) {\n lastTarget = null;\n }\n\n // no bubbling and not fallback\n if (!options.dragoverBubble && !evt.rootEl && target !== document) {\n dragEl.parentNode[expando]._isOutsideThisEl(evt.target);\n\n // Do not detect for empty insert if already inserted\n !insertion && nearestEmptyInsertDetectEvent(evt);\n }\n !options.dragoverBubble && evt.stopPropagation && evt.stopPropagation();\n return completedFired = true;\n }\n\n // Call when dragEl has been inserted\n function changed() {\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n _dispatchEvent({\n sortable: _this,\n name: 'change',\n toEl: el,\n newIndex: newIndex,\n newDraggableIndex: newDraggableIndex,\n originalEvent: evt\n });\n }\n if (evt.preventDefault !== void 0) {\n evt.cancelable && evt.preventDefault();\n }\n target = closest(target, options.draggable, el, true);\n dragOverEvent('dragOver');\n if (Sortable.eventCanceled) return completedFired;\n if (dragEl.contains(evt.target) || target.animated && target.animatingX && target.animatingY || _this._ignoreWhileAnimating === target) {\n return completed(false);\n }\n ignoreNextClick = false;\n if (activeSortable && !options.disabled && (isOwner ? canSort || (revert = parentEl !== rootEl) // Reverting item into the original list\n : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, activeSortable, dragEl, evt)) && group.checkPut(this, activeSortable, dragEl, evt))) {\n vertical = this._getDirection(evt, target) === 'vertical';\n dragRect = getRect(dragEl);\n dragOverEvent('dragOverValid');\n if (Sortable.eventCanceled) return completedFired;\n if (revert) {\n parentEl = rootEl; // actualization\n capture();\n this._hideClone();\n dragOverEvent('revert');\n if (!Sortable.eventCanceled) {\n if (nextEl) {\n rootEl.insertBefore(dragEl, nextEl);\n } else {\n rootEl.appendChild(dragEl);\n }\n }\n return completed(true);\n }\n var elLastChild = lastChild(el, options.draggable);\n if (!elLastChild || _ghostIsLast(evt, vertical, this) && !elLastChild.animated) {\n // Insert to end of list\n\n // If already at end of list: Do not insert\n if (elLastChild === dragEl) {\n return completed(false);\n }\n\n // if there is a last element, it is the target\n if (elLastChild && el === evt.target) {\n target = elLastChild;\n }\n if (target) {\n targetRect = getRect(target);\n }\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, !!target) !== false) {\n capture();\n if (elLastChild && elLastChild.nextSibling) {\n // the last draggable element is not the last node\n el.insertBefore(dragEl, elLastChild.nextSibling);\n } else {\n el.appendChild(dragEl);\n }\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (elLastChild && _ghostIsFirst(evt, vertical, this)) {\n // Insert to start of list\n var firstChild = getChild(el, 0, options, true);\n if (firstChild === dragEl) {\n return completed(false);\n }\n target = firstChild;\n targetRect = getRect(target);\n if (_onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, false) !== false) {\n capture();\n el.insertBefore(dragEl, firstChild);\n parentEl = el; // actualization\n\n changed();\n return completed(true);\n }\n } else if (target.parentNode === el) {\n targetRect = getRect(target);\n var direction = 0,\n targetBeforeFirstSwap,\n differentLevel = dragEl.parentNode !== el,\n differentRowCol = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || dragRect, target.animated && target.toRect || targetRect, vertical),\n side1 = vertical ? 'top' : 'left',\n scrolledPastTop = isScrolledPast(target, 'top', 'top') || isScrolledPast(dragEl, 'top', 'top'),\n scrollBefore = scrolledPastTop ? scrolledPastTop.scrollTop : void 0;\n if (lastTarget !== target) {\n targetBeforeFirstSwap = targetRect[side1];\n pastFirstInvertThresh = false;\n isCircumstantialInvert = !differentRowCol && options.invertSwap || differentLevel;\n }\n direction = _getSwapDirection(evt, target, targetRect, vertical, differentRowCol ? 1 : options.swapThreshold, options.invertedSwapThreshold == null ? options.swapThreshold : options.invertedSwapThreshold, isCircumstantialInvert, lastTarget === target);\n var sibling;\n if (direction !== 0) {\n // Check if target is beside dragEl in respective direction (ignoring hidden elements)\n var dragIndex = index(dragEl);\n do {\n dragIndex -= direction;\n sibling = parentEl.children[dragIndex];\n } while (sibling && (css(sibling, 'display') === 'none' || sibling === ghostEl));\n }\n // If dragEl is already beside target: Do not insert\n if (direction === 0 || sibling === target) {\n return completed(false);\n }\n lastTarget = target;\n lastDirection = direction;\n var nextSibling = target.nextElementSibling,\n after = false;\n after = direction === 1;\n var moveVector = _onMove(rootEl, el, dragEl, dragRect, target, targetRect, evt, after);\n if (moveVector !== false) {\n if (moveVector === 1 || moveVector === -1) {\n after = moveVector === 1;\n }\n _silent = true;\n setTimeout(_unsilent, 30);\n capture();\n if (after && !nextSibling) {\n el.appendChild(dragEl);\n } else {\n target.parentNode.insertBefore(dragEl, after ? nextSibling : target);\n }\n\n // Undo chrome's scroll adjustment (has no effect on other browsers)\n if (scrolledPastTop) {\n scrollBy(scrolledPastTop, 0, scrollBefore - scrolledPastTop.scrollTop);\n }\n parentEl = dragEl.parentNode; // actualization\n\n // must be done before animation\n if (targetBeforeFirstSwap !== undefined && !isCircumstantialInvert) {\n targetMoveDistance = Math.abs(targetBeforeFirstSwap - getRect(target)[side1]);\n }\n changed();\n return completed(true);\n }\n }\n if (el.contains(dragEl)) {\n return completed(false);\n }\n }\n return false;\n },\n _ignoreWhileAnimating: null,\n _offMoveEvents: function _offMoveEvents() {\n off(document, 'mousemove', this._onTouchMove);\n off(document, 'touchmove', this._onTouchMove);\n off(document, 'pointermove', this._onTouchMove);\n off(document, 'dragover', nearestEmptyInsertDetectEvent);\n off(document, 'mousemove', nearestEmptyInsertDetectEvent);\n off(document, 'touchmove', nearestEmptyInsertDetectEvent);\n },\n _offUpEvents: function _offUpEvents() {\n var ownerDocument = this.el.ownerDocument;\n off(ownerDocument, 'mouseup', this._onDrop);\n off(ownerDocument, 'touchend', this._onDrop);\n off(ownerDocument, 'pointerup', this._onDrop);\n off(ownerDocument, 'touchcancel', this._onDrop);\n off(document, 'selectstart', this);\n },\n _onDrop: function _onDrop( /**Event*/evt) {\n var el = this.el,\n options = this.options;\n\n // Get the index of the dragged element within its parent\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n pluginEvent('drop', this, {\n evt: evt\n });\n parentEl = dragEl && dragEl.parentNode;\n\n // Get again after plugin event\n newIndex = index(dragEl);\n newDraggableIndex = index(dragEl, options.draggable);\n if (Sortable.eventCanceled) {\n this._nulling();\n return;\n }\n awaitingDragStarted = false;\n isCircumstantialInvert = false;\n pastFirstInvertThresh = false;\n clearInterval(this._loopId);\n clearTimeout(this._dragStartTimer);\n _cancelNextTick(this.cloneId);\n _cancelNextTick(this._dragStartId);\n\n // Unbind events\n if (this.nativeDraggable) {\n off(document, 'drop', this);\n off(el, 'dragstart', this._onDragStart);\n }\n this._offMoveEvents();\n this._offUpEvents();\n if (Safari) {\n css(document.body, 'user-select', '');\n }\n css(dragEl, 'transform', '');\n if (evt) {\n if (moved) {\n evt.cancelable && evt.preventDefault();\n !options.dropBubble && evt.stopPropagation();\n }\n ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl);\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n // Remove clone(s)\n cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl);\n }\n if (dragEl) {\n if (this.nativeDraggable) {\n off(dragEl, 'dragend', this);\n }\n _disableDraggable(dragEl);\n dragEl.style['will-change'] = '';\n\n // Remove classes\n // ghostClass is added in dragStarted\n if (moved && !awaitingDragStarted) {\n toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, false);\n }\n toggleClass(dragEl, this.options.chosenClass, false);\n\n // Drag stop event\n _dispatchEvent({\n sortable: this,\n name: 'unchoose',\n toEl: parentEl,\n newIndex: null,\n newDraggableIndex: null,\n originalEvent: evt\n });\n if (rootEl !== parentEl) {\n if (newIndex >= 0) {\n // Add event\n _dispatchEvent({\n rootEl: parentEl,\n name: 'add',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n\n // Remove event\n _dispatchEvent({\n sortable: this,\n name: 'remove',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // drag from one list and drop into another\n _dispatchEvent({\n rootEl: parentEl,\n name: 'sort',\n toEl: parentEl,\n fromEl: rootEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n putSortable && putSortable.save();\n } else {\n if (newIndex !== oldIndex) {\n if (newIndex >= 0) {\n // drag & drop within the same list\n _dispatchEvent({\n sortable: this,\n name: 'update',\n toEl: parentEl,\n originalEvent: evt\n });\n _dispatchEvent({\n sortable: this,\n name: 'sort',\n toEl: parentEl,\n originalEvent: evt\n });\n }\n }\n }\n if (Sortable.active) {\n /* jshint eqnull:true */\n if (newIndex == null || newIndex === -1) {\n newIndex = oldIndex;\n newDraggableIndex = oldDraggableIndex;\n }\n _dispatchEvent({\n sortable: this,\n name: 'end',\n toEl: parentEl,\n originalEvent: evt\n });\n\n // Save sorting\n this.save();\n }\n }\n }\n this._nulling();\n },\n _nulling: function _nulling() {\n pluginEvent('nulling', this);\n rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null;\n savedInputChecked.forEach(function (el) {\n el.checked = true;\n });\n savedInputChecked.length = lastDx = lastDy = 0;\n },\n handleEvent: function handleEvent( /**Event*/evt) {\n switch (evt.type) {\n case 'drop':\n case 'dragend':\n this._onDrop(evt);\n break;\n case 'dragenter':\n case 'dragover':\n if (dragEl) {\n this._onDragOver(evt);\n _globalDragOver(evt);\n }\n break;\n case 'selectstart':\n evt.preventDefault();\n break;\n }\n },\n /**\r\n * Serializes the item into an array of string.\r\n * @returns {String[]}\r\n */\n toArray: function toArray() {\n var order = [],\n el,\n children = this.el.children,\n i = 0,\n n = children.length,\n options = this.options;\n for (; i < n; i++) {\n el = children[i];\n if (closest(el, options.draggable, this.el, false)) {\n order.push(el.getAttribute(options.dataIdAttr) || _generateId(el));\n }\n }\n return order;\n },\n /**\r\n * Sorts the elements according to the array.\r\n * @param {String[]} order order of the items\r\n */\n sort: function sort(order, useAnimation) {\n var items = {},\n rootEl = this.el;\n this.toArray().forEach(function (id, i) {\n var el = rootEl.children[i];\n if (closest(el, this.options.draggable, rootEl, false)) {\n items[id] = el;\n }\n }, this);\n useAnimation && this.captureAnimationState();\n order.forEach(function (id) {\n if (items[id]) {\n rootEl.removeChild(items[id]);\n rootEl.appendChild(items[id]);\n }\n });\n useAnimation && this.animateAll();\n },\n /**\r\n * Save the current sorting\r\n */\n save: function save() {\n var store = this.options.store;\n store && store.set && store.set(this);\n },\n /**\r\n * For each element in the set, get the first element that matches the selector by testing the element itself and traversing up through its ancestors in the DOM tree.\r\n * @param {HTMLElement} el\r\n * @param {String} [selector] default: `options.draggable`\r\n * @returns {HTMLElement|null}\r\n */\n closest: function closest$1(el, selector) {\n return closest(el, selector || this.options.draggable, this.el, false);\n },\n /**\r\n * Set/get option\r\n * @param {string} name\r\n * @param {*} [value]\r\n * @returns {*}\r\n */\n option: function option(name, value) {\n var options = this.options;\n if (value === void 0) {\n return options[name];\n } else {\n var modifiedValue = PluginManager.modifyOption(this, name, value);\n if (typeof modifiedValue !== 'undefined') {\n options[name] = modifiedValue;\n } else {\n options[name] = value;\n }\n if (name === 'group') {\n _prepareGroup(options);\n }\n }\n },\n /**\r\n * Destroy\r\n */\n destroy: function destroy() {\n pluginEvent('destroy', this);\n var el = this.el;\n el[expando] = null;\n off(el, 'mousedown', this._onTapStart);\n off(el, 'touchstart', this._onTapStart);\n off(el, 'pointerdown', this._onTapStart);\n if (this.nativeDraggable) {\n off(el, 'dragover', this);\n off(el, 'dragenter', this);\n }\n // Remove draggable attributes\n Array.prototype.forEach.call(el.querySelectorAll('[draggable]'), function (el) {\n el.removeAttribute('draggable');\n });\n this._onDrop();\n this._disableDelayedDragEvents();\n sortables.splice(sortables.indexOf(this.el), 1);\n this.el = el = null;\n },\n _hideClone: function _hideClone() {\n if (!cloneHidden) {\n pluginEvent('hideClone', this);\n if (Sortable.eventCanceled) return;\n css(cloneEl, 'display', 'none');\n if (this.options.removeCloneOnHide && cloneEl.parentNode) {\n cloneEl.parentNode.removeChild(cloneEl);\n }\n cloneHidden = true;\n }\n },\n _showClone: function _showClone(putSortable) {\n if (putSortable.lastPutMode !== 'clone') {\n this._hideClone();\n return;\n }\n if (cloneHidden) {\n pluginEvent('showClone', this);\n if (Sortable.eventCanceled) return;\n\n // show clone at dragEl or original position\n if (dragEl.parentNode == rootEl && !this.options.group.revertClone) {\n rootEl.insertBefore(cloneEl, dragEl);\n } else if (nextEl) {\n rootEl.insertBefore(cloneEl, nextEl);\n } else {\n rootEl.appendChild(cloneEl);\n }\n if (this.options.group.revertClone) {\n this.animate(dragEl, cloneEl);\n }\n css(cloneEl, 'display', '');\n cloneHidden = false;\n }\n }\n};\nfunction _globalDragOver( /**Event*/evt) {\n if (evt.dataTransfer) {\n evt.dataTransfer.dropEffect = 'move';\n }\n evt.cancelable && evt.preventDefault();\n}\nfunction _onMove(fromEl, toEl, dragEl, dragRect, targetEl, targetRect, originalEvent, willInsertAfter) {\n var evt,\n sortable = fromEl[expando],\n onMoveFn = sortable.options.onMove,\n retVal;\n // Support for new CustomEvent feature\n if (window.CustomEvent && !IE11OrLess && !Edge) {\n evt = new CustomEvent('move', {\n bubbles: true,\n cancelable: true\n });\n } else {\n evt = document.createEvent('Event');\n evt.initEvent('move', true, true);\n }\n evt.to = toEl;\n evt.from = fromEl;\n evt.dragged = dragEl;\n evt.draggedRect = dragRect;\n evt.related = targetEl || toEl;\n evt.relatedRect = targetRect || getRect(toEl);\n evt.willInsertAfter = willInsertAfter;\n evt.originalEvent = originalEvent;\n fromEl.dispatchEvent(evt);\n if (onMoveFn) {\n retVal = onMoveFn.call(sortable, evt, originalEvent);\n }\n return retVal;\n}\nfunction _disableDraggable(el) {\n el.draggable = false;\n}\nfunction _unsilent() {\n _silent = false;\n}\nfunction _ghostIsFirst(evt, vertical, sortable) {\n var firstElRect = getRect(getChild(sortable.el, 0, sortable.options, true));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX < childContainingRect.left - spacer || evt.clientY < firstElRect.top && evt.clientX < firstElRect.right : evt.clientY < childContainingRect.top - spacer || evt.clientY < firstElRect.bottom && evt.clientX < firstElRect.left;\n}\nfunction _ghostIsLast(evt, vertical, sortable) {\n var lastElRect = getRect(lastChild(sortable.el, sortable.options.draggable));\n var childContainingRect = getChildContainingRectFromElement(sortable.el, sortable.options, ghostEl);\n var spacer = 10;\n return vertical ? evt.clientX > childContainingRect.right + spacer || evt.clientY > lastElRect.bottom && evt.clientX > lastElRect.left : evt.clientY > childContainingRect.bottom + spacer || evt.clientX > lastElRect.right && evt.clientY > lastElRect.top;\n}\nfunction _getSwapDirection(evt, target, targetRect, vertical, swapThreshold, invertedSwapThreshold, invertSwap, isLastTarget) {\n var mouseOnAxis = vertical ? evt.clientY : evt.clientX,\n targetLength = vertical ? targetRect.height : targetRect.width,\n targetS1 = vertical ? targetRect.top : targetRect.left,\n targetS2 = vertical ? targetRect.bottom : targetRect.right,\n invert = false;\n if (!invertSwap) {\n // Never invert or create dragEl shadow when target movemenet causes mouse to move past the end of regular swapThreshold\n if (isLastTarget && targetMoveDistance < targetLength * swapThreshold) {\n // multiplied only by swapThreshold because mouse will already be inside target by (1 - threshold) * targetLength / 2\n // check if past first invert threshold on side opposite of lastDirection\n if (!pastFirstInvertThresh && (lastDirection === 1 ? mouseOnAxis > targetS1 + targetLength * invertedSwapThreshold / 2 : mouseOnAxis < targetS2 - targetLength * invertedSwapThreshold / 2)) {\n // past first invert threshold, do not restrict inverted threshold to dragEl shadow\n pastFirstInvertThresh = true;\n }\n if (!pastFirstInvertThresh) {\n // dragEl shadow (target move distance shadow)\n if (lastDirection === 1 ? mouseOnAxis < targetS1 + targetMoveDistance // over dragEl shadow\n : mouseOnAxis > targetS2 - targetMoveDistance) {\n return -lastDirection;\n }\n } else {\n invert = true;\n }\n } else {\n // Regular\n if (mouseOnAxis > targetS1 + targetLength * (1 - swapThreshold) / 2 && mouseOnAxis < targetS2 - targetLength * (1 - swapThreshold) / 2) {\n return _getInsertDirection(target);\n }\n }\n }\n invert = invert || invertSwap;\n if (invert) {\n // Invert of regular\n if (mouseOnAxis < targetS1 + targetLength * invertedSwapThreshold / 2 || mouseOnAxis > targetS2 - targetLength * invertedSwapThreshold / 2) {\n return mouseOnAxis > targetS1 + targetLength / 2 ? 1 : -1;\n }\n }\n return 0;\n}\n\n/**\r\n * Gets the direction dragEl must be swapped relative to target in order to make it\r\n * seem that dragEl has been \"inserted\" into that element's position\r\n * @param {HTMLElement} target The target whose position dragEl is being inserted at\r\n * @return {Number} Direction dragEl must be swapped\r\n */\nfunction _getInsertDirection(target) {\n if (index(dragEl) < index(target)) {\n return 1;\n } else {\n return -1;\n }\n}\n\n/**\r\n * Generate id\r\n * @param {HTMLElement} el\r\n * @returns {String}\r\n * @private\r\n */\nfunction _generateId(el) {\n var str = el.tagName + el.className + el.src + el.href + el.textContent,\n i = str.length,\n sum = 0;\n while (i--) {\n sum += str.charCodeAt(i);\n }\n return sum.toString(36);\n}\nfunction _saveInputCheckedState(root) {\n savedInputChecked.length = 0;\n var inputs = root.getElementsByTagName('input');\n var idx = inputs.length;\n while (idx--) {\n var el = inputs[idx];\n el.checked && savedInputChecked.push(el);\n }\n}\nfunction _nextTick(fn) {\n return setTimeout(fn, 0);\n}\nfunction _cancelNextTick(id) {\n return clearTimeout(id);\n}\n\n// Fixed #973:\nif (documentExists) {\n on(document, 'touchmove', function (evt) {\n if ((Sortable.active || awaitingDragStarted) && evt.cancelable) {\n evt.preventDefault();\n }\n });\n}\n\n// Export utils\nSortable.utils = {\n on: on,\n off: off,\n css: css,\n find: find,\n is: function is(el, selector) {\n return !!closest(el, selector, el, false);\n },\n extend: extend,\n throttle: throttle,\n closest: closest,\n toggleClass: toggleClass,\n clone: clone,\n index: index,\n nextTick: _nextTick,\n cancelNextTick: _cancelNextTick,\n detectDirection: _detectDirection,\n getChild: getChild,\n expando: expando\n};\n\n/**\r\n * Get the Sortable instance of an element\r\n * @param {HTMLElement} element The element\r\n * @return {Sortable|undefined} The instance of Sortable\r\n */\nSortable.get = function (element) {\n return element[expando];\n};\n\n/**\r\n * Mount a plugin to Sortable\r\n * @param {...SortablePlugin|SortablePlugin[]} plugins Plugins being mounted\r\n */\nSortable.mount = function () {\n for (var _len = arguments.length, plugins = new Array(_len), _key = 0; _key < _len; _key++) {\n plugins[_key] = arguments[_key];\n }\n if (plugins[0].constructor === Array) plugins = plugins[0];\n plugins.forEach(function (plugin) {\n if (!plugin.prototype || !plugin.prototype.constructor) {\n throw \"Sortable: Mounted plugin must be a constructor function, not \".concat({}.toString.call(plugin));\n }\n if (plugin.utils) Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), plugin.utils);\n PluginManager.mount(plugin);\n });\n};\n\n/**\r\n * Create sortable instance\r\n * @param {HTMLElement} el\r\n * @param {Object} [options]\r\n */\nSortable.create = function (el, options) {\n return new Sortable(el, options);\n};\n\n// Export\nSortable.version = version;\n\nvar autoScrolls = [],\n scrollEl,\n scrollRootEl,\n scrolling = false,\n lastAutoScrollX,\n lastAutoScrollY,\n touchEvt$1,\n pointerElemChangedInterval;\nfunction AutoScrollPlugin() {\n function AutoScroll() {\n this.defaults = {\n scroll: true,\n forceAutoScrollFallback: false,\n scrollSensitivity: 30,\n scrollSpeed: 10,\n bubbleScroll: true\n };\n\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n }\n AutoScroll.prototype = {\n dragStarted: function dragStarted(_ref) {\n var originalEvent = _ref.originalEvent;\n if (this.sortable.nativeDraggable) {\n on(document, 'dragover', this._handleAutoScroll);\n } else {\n if (this.options.supportPointer) {\n on(document, 'pointermove', this._handleFallbackAutoScroll);\n } else if (originalEvent.touches) {\n on(document, 'touchmove', this._handleFallbackAutoScroll);\n } else {\n on(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref2) {\n var originalEvent = _ref2.originalEvent;\n // For when bubbling is canceled and using fallback (fallback 'touchmove' always reached)\n if (!this.options.dragOverBubble && !originalEvent.rootEl) {\n this._handleAutoScroll(originalEvent);\n }\n },\n drop: function drop() {\n if (this.sortable.nativeDraggable) {\n off(document, 'dragover', this._handleAutoScroll);\n } else {\n off(document, 'pointermove', this._handleFallbackAutoScroll);\n off(document, 'touchmove', this._handleFallbackAutoScroll);\n off(document, 'mousemove', this._handleFallbackAutoScroll);\n }\n clearPointerElemChangedInterval();\n clearAutoScrolls();\n cancelThrottle();\n },\n nulling: function nulling() {\n touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null;\n autoScrolls.length = 0;\n },\n _handleFallbackAutoScroll: function _handleFallbackAutoScroll(evt) {\n this._handleAutoScroll(evt, true);\n },\n _handleAutoScroll: function _handleAutoScroll(evt, fallback) {\n var _this = this;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n elem = document.elementFromPoint(x, y);\n touchEvt$1 = evt;\n\n // IE does not seem to have native autoscroll,\n // Edge's autoscroll seems too conditional,\n // MACOS Safari does not have autoscroll,\n // Firefox and Chrome are good\n if (fallback || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {\n autoScroll(evt, this.options, elem, fallback);\n\n // Listener for pointer element change\n var ogElemScroller = getParentAutoScrollElement(elem, true);\n if (scrolling && (!pointerElemChangedInterval || x !== lastAutoScrollX || y !== lastAutoScrollY)) {\n pointerElemChangedInterval && clearPointerElemChangedInterval();\n // Detect for pointer elem change, emulating native DnD behaviour\n pointerElemChangedInterval = setInterval(function () {\n var newElem = getParentAutoScrollElement(document.elementFromPoint(x, y), true);\n if (newElem !== ogElemScroller) {\n ogElemScroller = newElem;\n clearAutoScrolls();\n }\n autoScroll(evt, _this.options, newElem, fallback);\n }, 10);\n lastAutoScrollX = x;\n lastAutoScrollY = y;\n }\n } else {\n // if DnD is enabled (and browser has good autoscrolling), first autoscroll will already scroll, so get parent autoscroll of first autoscroll\n if (!this.options.bubbleScroll || getParentAutoScrollElement(elem, true) === getWindowScrollingElement()) {\n clearAutoScrolls();\n return;\n }\n autoScroll(evt, this.options, getParentAutoScrollElement(elem, false), false);\n }\n }\n };\n return _extends(AutoScroll, {\n pluginName: 'scroll',\n initializeByDefault: true\n });\n}\nfunction clearAutoScrolls() {\n autoScrolls.forEach(function (autoScroll) {\n clearInterval(autoScroll.pid);\n });\n autoScrolls = [];\n}\nfunction clearPointerElemChangedInterval() {\n clearInterval(pointerElemChangedInterval);\n}\nvar autoScroll = throttle(function (evt, options, rootEl, isFallback) {\n // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521\n if (!options.scroll) return;\n var x = (evt.touches ? evt.touches[0] : evt).clientX,\n y = (evt.touches ? evt.touches[0] : evt).clientY,\n sens = options.scrollSensitivity,\n speed = options.scrollSpeed,\n winScroller = getWindowScrollingElement();\n var scrollThisInstance = false,\n scrollCustomFn;\n\n // New scroll root, set scrollEl\n if (scrollRootEl !== rootEl) {\n scrollRootEl = rootEl;\n clearAutoScrolls();\n scrollEl = options.scroll;\n scrollCustomFn = options.scrollFn;\n if (scrollEl === true) {\n scrollEl = getParentAutoScrollElement(rootEl, true);\n }\n }\n var layersOut = 0;\n var currentParent = scrollEl;\n do {\n var el = currentParent,\n rect = getRect(el),\n top = rect.top,\n bottom = rect.bottom,\n left = rect.left,\n right = rect.right,\n width = rect.width,\n height = rect.height,\n canScrollX = void 0,\n canScrollY = void 0,\n scrollWidth = el.scrollWidth,\n scrollHeight = el.scrollHeight,\n elCSS = css(el),\n scrollPosX = el.scrollLeft,\n scrollPosY = el.scrollTop;\n if (el === winScroller) {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll' || elCSS.overflowX === 'visible');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll' || elCSS.overflowY === 'visible');\n } else {\n canScrollX = width < scrollWidth && (elCSS.overflowX === 'auto' || elCSS.overflowX === 'scroll');\n canScrollY = height < scrollHeight && (elCSS.overflowY === 'auto' || elCSS.overflowY === 'scroll');\n }\n var vx = canScrollX && (Math.abs(right - x) <= sens && scrollPosX + width < scrollWidth) - (Math.abs(left - x) <= sens && !!scrollPosX);\n var vy = canScrollY && (Math.abs(bottom - y) <= sens && scrollPosY + height < scrollHeight) - (Math.abs(top - y) <= sens && !!scrollPosY);\n if (!autoScrolls[layersOut]) {\n for (var i = 0; i <= layersOut; i++) {\n if (!autoScrolls[i]) {\n autoScrolls[i] = {};\n }\n }\n }\n if (autoScrolls[layersOut].vx != vx || autoScrolls[layersOut].vy != vy || autoScrolls[layersOut].el !== el) {\n autoScrolls[layersOut].el = el;\n autoScrolls[layersOut].vx = vx;\n autoScrolls[layersOut].vy = vy;\n clearInterval(autoScrolls[layersOut].pid);\n if (vx != 0 || vy != 0) {\n scrollThisInstance = true;\n /* jshint loopfunc:true */\n autoScrolls[layersOut].pid = setInterval(function () {\n // emulate drag over during autoscroll (fallback), emulating native DnD behaviour\n if (isFallback && this.layer === 0) {\n Sortable.active._onTouchMove(touchEvt$1); // To move ghost if it is positioned absolutely\n }\n var scrollOffsetY = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * speed : 0;\n var scrollOffsetX = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * speed : 0;\n if (typeof scrollCustomFn === 'function') {\n if (scrollCustomFn.call(Sortable.dragged.parentNode[expando], scrollOffsetX, scrollOffsetY, evt, touchEvt$1, autoScrolls[this.layer].el) !== 'continue') {\n return;\n }\n }\n scrollBy(autoScrolls[this.layer].el, scrollOffsetX, scrollOffsetY);\n }.bind({\n layer: layersOut\n }), 24);\n }\n }\n layersOut++;\n } while (options.bubbleScroll && currentParent !== winScroller && (currentParent = getParentAutoScrollElement(currentParent, false)));\n scrolling = scrollThisInstance; // in case another function catches scrolling as false in between when it is not\n}, 30);\n\nvar drop = function drop(_ref) {\n var originalEvent = _ref.originalEvent,\n putSortable = _ref.putSortable,\n dragEl = _ref.dragEl,\n activeSortable = _ref.activeSortable,\n dispatchSortableEvent = _ref.dispatchSortableEvent,\n hideGhostForTarget = _ref.hideGhostForTarget,\n unhideGhostForTarget = _ref.unhideGhostForTarget;\n if (!originalEvent) return;\n var toSortable = putSortable || activeSortable;\n hideGhostForTarget();\n var touch = originalEvent.changedTouches && originalEvent.changedTouches.length ? originalEvent.changedTouches[0] : originalEvent;\n var target = document.elementFromPoint(touch.clientX, touch.clientY);\n unhideGhostForTarget();\n if (toSortable && !toSortable.el.contains(target)) {\n dispatchSortableEvent('spill');\n this.onSpill({\n dragEl: dragEl,\n putSortable: putSortable\n });\n }\n};\nfunction Revert() {}\nRevert.prototype = {\n startIndex: null,\n dragStart: function dragStart(_ref2) {\n var oldDraggableIndex = _ref2.oldDraggableIndex;\n this.startIndex = oldDraggableIndex;\n },\n onSpill: function onSpill(_ref3) {\n var dragEl = _ref3.dragEl,\n putSortable = _ref3.putSortable;\n this.sortable.captureAnimationState();\n if (putSortable) {\n putSortable.captureAnimationState();\n }\n var nextSibling = getChild(this.sortable.el, this.startIndex, this.options);\n if (nextSibling) {\n this.sortable.el.insertBefore(dragEl, nextSibling);\n } else {\n this.sortable.el.appendChild(dragEl);\n }\n this.sortable.animateAll();\n if (putSortable) {\n putSortable.animateAll();\n }\n },\n drop: drop\n};\n_extends(Revert, {\n pluginName: 'revertOnSpill'\n});\nfunction Remove() {}\nRemove.prototype = {\n onSpill: function onSpill(_ref4) {\n var dragEl = _ref4.dragEl,\n putSortable = _ref4.putSortable;\n var parentSortable = putSortable || this.sortable;\n parentSortable.captureAnimationState();\n dragEl.parentNode && dragEl.parentNode.removeChild(dragEl);\n parentSortable.animateAll();\n },\n drop: drop\n};\n_extends(Remove, {\n pluginName: 'removeOnSpill'\n});\n\nvar lastSwapEl;\nfunction SwapPlugin() {\n function Swap() {\n this.defaults = {\n swapClass: 'sortable-swap-highlight'\n };\n }\n Swap.prototype = {\n dragStart: function dragStart(_ref) {\n var dragEl = _ref.dragEl;\n lastSwapEl = dragEl;\n },\n dragOverValid: function dragOverValid(_ref2) {\n var completed = _ref2.completed,\n target = _ref2.target,\n onMove = _ref2.onMove,\n activeSortable = _ref2.activeSortable,\n changed = _ref2.changed,\n cancel = _ref2.cancel;\n if (!activeSortable.options.swap) return;\n var el = this.sortable.el,\n options = this.options;\n if (target && target !== el) {\n var prevSwapEl = lastSwapEl;\n if (onMove(target) !== false) {\n toggleClass(target, options.swapClass, true);\n lastSwapEl = target;\n } else {\n lastSwapEl = null;\n }\n if (prevSwapEl && prevSwapEl !== lastSwapEl) {\n toggleClass(prevSwapEl, options.swapClass, false);\n }\n }\n changed();\n completed(true);\n cancel();\n },\n drop: function drop(_ref3) {\n var activeSortable = _ref3.activeSortable,\n putSortable = _ref3.putSortable,\n dragEl = _ref3.dragEl;\n var toSortable = putSortable || this.sortable;\n var options = this.options;\n lastSwapEl && toggleClass(lastSwapEl, options.swapClass, false);\n if (lastSwapEl && (options.swap || putSortable && putSortable.options.swap)) {\n if (dragEl !== lastSwapEl) {\n toSortable.captureAnimationState();\n if (toSortable !== activeSortable) activeSortable.captureAnimationState();\n swapNodes(dragEl, lastSwapEl);\n toSortable.animateAll();\n if (toSortable !== activeSortable) activeSortable.animateAll();\n }\n }\n },\n nulling: function nulling() {\n lastSwapEl = null;\n }\n };\n return _extends(Swap, {\n pluginName: 'swap',\n eventProperties: function eventProperties() {\n return {\n swapItem: lastSwapEl\n };\n }\n });\n}\nfunction swapNodes(n1, n2) {\n var p1 = n1.parentNode,\n p2 = n2.parentNode,\n i1,\n i2;\n if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) return;\n i1 = index(n1);\n i2 = index(n2);\n if (p1.isEqualNode(p2) && i1 < i2) {\n i2++;\n }\n p1.insertBefore(n2, p1.children[i1]);\n p2.insertBefore(n1, p2.children[i2]);\n}\n\nvar multiDragElements = [],\n multiDragClones = [],\n lastMultiDragSelect,\n // for selection with modifier key down (SHIFT)\n multiDragSortable,\n initialFolding = false,\n // Initial multi-drag fold when drag started\n folding = false,\n // Folding any other time\n dragStarted = false,\n dragEl$1,\n clonesFromRect,\n clonesHidden;\nfunction MultiDragPlugin() {\n function MultiDrag(sortable) {\n // Bind all private methods\n for (var fn in this) {\n if (fn.charAt(0) === '_' && typeof this[fn] === 'function') {\n this[fn] = this[fn].bind(this);\n }\n }\n if (!sortable.options.avoidImplicitDeselect) {\n if (sortable.options.supportPointer) {\n on(document, 'pointerup', this._deselectMultiDrag);\n } else {\n on(document, 'mouseup', this._deselectMultiDrag);\n on(document, 'touchend', this._deselectMultiDrag);\n }\n }\n on(document, 'keydown', this._checkKeyDown);\n on(document, 'keyup', this._checkKeyUp);\n this.defaults = {\n selectedClass: 'sortable-selected',\n multiDragKey: null,\n avoidImplicitDeselect: false,\n setData: function setData(dataTransfer, dragEl) {\n var data = '';\n if (multiDragElements.length && multiDragSortable === sortable) {\n multiDragElements.forEach(function (multiDragElement, i) {\n data += (!i ? '' : ', ') + multiDragElement.textContent;\n });\n } else {\n data = dragEl.textContent;\n }\n dataTransfer.setData('Text', data);\n }\n };\n }\n MultiDrag.prototype = {\n multiDragKeyDown: false,\n isMultiDrag: false,\n delayStartGlobal: function delayStartGlobal(_ref) {\n var dragged = _ref.dragEl;\n dragEl$1 = dragged;\n },\n delayEnded: function delayEnded() {\n this.isMultiDrag = ~multiDragElements.indexOf(dragEl$1);\n },\n setupClone: function setupClone(_ref2) {\n var sortable = _ref2.sortable,\n cancel = _ref2.cancel;\n if (!this.isMultiDrag) return;\n for (var i = 0; i < multiDragElements.length; i++) {\n multiDragClones.push(clone(multiDragElements[i]));\n multiDragClones[i].sortableIndex = multiDragElements[i].sortableIndex;\n multiDragClones[i].draggable = false;\n multiDragClones[i].style['will-change'] = '';\n toggleClass(multiDragClones[i], this.options.selectedClass, false);\n multiDragElements[i] === dragEl$1 && toggleClass(multiDragClones[i], this.options.chosenClass, false);\n }\n sortable._hideClone();\n cancel();\n },\n clone: function clone(_ref3) {\n var sortable = _ref3.sortable,\n rootEl = _ref3.rootEl,\n dispatchSortableEvent = _ref3.dispatchSortableEvent,\n cancel = _ref3.cancel;\n if (!this.isMultiDrag) return;\n if (!this.options.removeCloneOnHide) {\n if (multiDragElements.length && multiDragSortable === sortable) {\n insertMultiDragClones(true, rootEl);\n dispatchSortableEvent('clone');\n cancel();\n }\n }\n },\n showClone: function showClone(_ref4) {\n var cloneNowShown = _ref4.cloneNowShown,\n rootEl = _ref4.rootEl,\n cancel = _ref4.cancel;\n if (!this.isMultiDrag) return;\n insertMultiDragClones(false, rootEl);\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', '');\n });\n cloneNowShown();\n clonesHidden = false;\n cancel();\n },\n hideClone: function hideClone(_ref5) {\n var _this = this;\n var sortable = _ref5.sortable,\n cloneNowHidden = _ref5.cloneNowHidden,\n cancel = _ref5.cancel;\n if (!this.isMultiDrag) return;\n multiDragClones.forEach(function (clone) {\n css(clone, 'display', 'none');\n if (_this.options.removeCloneOnHide && clone.parentNode) {\n clone.parentNode.removeChild(clone);\n }\n });\n cloneNowHidden();\n clonesHidden = true;\n cancel();\n },\n dragStartGlobal: function dragStartGlobal(_ref6) {\n var sortable = _ref6.sortable;\n if (!this.isMultiDrag && multiDragSortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n }\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.sortableIndex = index(multiDragElement);\n });\n\n // Sort multi-drag elements\n multiDragElements = multiDragElements.sort(function (a, b) {\n return a.sortableIndex - b.sortableIndex;\n });\n dragStarted = true;\n },\n dragStarted: function dragStarted(_ref7) {\n var _this2 = this;\n var sortable = _ref7.sortable;\n if (!this.isMultiDrag) return;\n if (this.options.sort) {\n // Capture rects,\n // hide multi drag elements (by positioning them absolute),\n // set multi drag elements rects to dragRect,\n // show multi drag elements,\n // animate to rects,\n // unset rects & remove from DOM\n\n sortable.captureAnimationState();\n if (this.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n css(multiDragElement, 'position', 'absolute');\n });\n var dragRect = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRect);\n });\n folding = true;\n initialFolding = true;\n }\n }\n sortable.animateAll(function () {\n folding = false;\n initialFolding = false;\n if (_this2.options.animation) {\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n }\n\n // Remove all auxiliary multidrag items from el, if sorting enabled\n if (_this2.options.sort) {\n removeMultiDragElements();\n }\n });\n },\n dragOver: function dragOver(_ref8) {\n var target = _ref8.target,\n completed = _ref8.completed,\n cancel = _ref8.cancel;\n if (folding && ~multiDragElements.indexOf(target)) {\n completed(false);\n cancel();\n }\n },\n revert: function revert(_ref9) {\n var fromSortable = _ref9.fromSortable,\n rootEl = _ref9.rootEl,\n sortable = _ref9.sortable,\n dragRect = _ref9.dragRect;\n if (multiDragElements.length > 1) {\n // Setup unfold animation\n multiDragElements.forEach(function (multiDragElement) {\n sortable.addAnimationState({\n target: multiDragElement,\n rect: folding ? getRect(multiDragElement) : dragRect\n });\n unsetRect(multiDragElement);\n multiDragElement.fromRect = dragRect;\n fromSortable.removeAnimationState(multiDragElement);\n });\n folding = false;\n insertMultiDragElements(!this.options.removeCloneOnHide, rootEl);\n }\n },\n dragOverCompleted: function dragOverCompleted(_ref10) {\n var sortable = _ref10.sortable,\n isOwner = _ref10.isOwner,\n insertion = _ref10.insertion,\n activeSortable = _ref10.activeSortable,\n parentEl = _ref10.parentEl,\n putSortable = _ref10.putSortable;\n var options = this.options;\n if (insertion) {\n // Clones must be hidden before folding animation to capture dragRectAbsolute properly\n if (isOwner) {\n activeSortable._hideClone();\n }\n initialFolding = false;\n // If leaving sort:false root, or already folding - Fold to new location\n if (options.animation && multiDragElements.length > 1 && (folding || !isOwner && !activeSortable.options.sort && !putSortable)) {\n // Fold: Set all multi drag elements's rects to dragEl's rect when multi-drag elements are invisible\n var dragRectAbsolute = getRect(dragEl$1, false, true, true);\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n setRect(multiDragElement, dragRectAbsolute);\n\n // Move element(s) to end of parentEl so that it does not interfere with multi-drag clones insertion if they are inserted\n // while folding, and so that we can capture them again because old sortable will no longer be fromSortable\n parentEl.appendChild(multiDragElement);\n });\n folding = true;\n }\n\n // Clones must be shown (and check to remove multi drags) after folding when interfering multiDragElements are moved out\n if (!isOwner) {\n // Only remove if not folding (folding will remove them anyways)\n if (!folding) {\n removeMultiDragElements();\n }\n if (multiDragElements.length > 1) {\n var clonesHiddenBefore = clonesHidden;\n activeSortable._showClone(sortable);\n\n // Unfold animation for clones if showing from hidden\n if (activeSortable.options.animation && !clonesHidden && clonesHiddenBefore) {\n multiDragClones.forEach(function (clone) {\n activeSortable.addAnimationState({\n target: clone,\n rect: clonesFromRect\n });\n clone.fromRect = clonesFromRect;\n clone.thisAnimationDuration = null;\n });\n }\n } else {\n activeSortable._showClone(sortable);\n }\n }\n }\n },\n dragOverAnimationCapture: function dragOverAnimationCapture(_ref11) {\n var dragRect = _ref11.dragRect,\n isOwner = _ref11.isOwner,\n activeSortable = _ref11.activeSortable;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n });\n if (activeSortable.options.animation && !isOwner && activeSortable.multiDrag.isMultiDrag) {\n clonesFromRect = _extends({}, dragRect);\n var dragMatrix = matrix(dragEl$1, true);\n clonesFromRect.top -= dragMatrix.f;\n clonesFromRect.left -= dragMatrix.e;\n }\n },\n dragOverAnimationComplete: function dragOverAnimationComplete() {\n if (folding) {\n folding = false;\n removeMultiDragElements();\n }\n },\n drop: function drop(_ref12) {\n var evt = _ref12.originalEvent,\n rootEl = _ref12.rootEl,\n parentEl = _ref12.parentEl,\n sortable = _ref12.sortable,\n dispatchSortableEvent = _ref12.dispatchSortableEvent,\n oldIndex = _ref12.oldIndex,\n putSortable = _ref12.putSortable;\n var toSortable = putSortable || this.sortable;\n if (!evt) return;\n var options = this.options,\n children = parentEl.children;\n\n // Multi-drag selection\n if (!dragStarted) {\n if (options.multiDragKey && !this.multiDragKeyDown) {\n this._deselectMultiDrag();\n }\n toggleClass(dragEl$1, options.selectedClass, !~multiDragElements.indexOf(dragEl$1));\n if (!~multiDragElements.indexOf(dragEl$1)) {\n multiDragElements.push(dragEl$1);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n\n // Modifier activated, select from last to dragEl\n if (evt.shiftKey && lastMultiDragSelect && sortable.el.contains(lastMultiDragSelect)) {\n var lastIndex = index(lastMultiDragSelect),\n currentIndex = index(dragEl$1);\n if (~lastIndex && ~currentIndex && lastIndex !== currentIndex) {\n // Must include lastMultiDragSelect (select it), in case modified selection from no selection\n // (but previous selection existed)\n var n, i;\n if (currentIndex > lastIndex) {\n i = lastIndex;\n n = currentIndex;\n } else {\n i = currentIndex;\n n = lastIndex + 1;\n }\n for (; i < n; i++) {\n if (~multiDragElements.indexOf(children[i])) continue;\n toggleClass(children[i], options.selectedClass, true);\n multiDragElements.push(children[i]);\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'select',\n targetEl: children[i],\n originalEvent: evt\n });\n }\n }\n } else {\n lastMultiDragSelect = dragEl$1;\n }\n multiDragSortable = toSortable;\n } else {\n multiDragElements.splice(multiDragElements.indexOf(dragEl$1), 1);\n lastMultiDragSelect = null;\n dispatchEvent({\n sortable: sortable,\n rootEl: rootEl,\n name: 'deselect',\n targetEl: dragEl$1,\n originalEvent: evt\n });\n }\n }\n\n // Multi-drag drop\n if (dragStarted && this.isMultiDrag) {\n folding = false;\n // Do not \"unfold\" after around dragEl if reverted\n if ((parentEl[expando].options.sort || parentEl !== rootEl) && multiDragElements.length > 1) {\n var dragRect = getRect(dragEl$1),\n multiDragIndex = index(dragEl$1, ':not(.' + this.options.selectedClass + ')');\n if (!initialFolding && options.animation) dragEl$1.thisAnimationDuration = null;\n toSortable.captureAnimationState();\n if (!initialFolding) {\n if (options.animation) {\n dragEl$1.fromRect = dragRect;\n multiDragElements.forEach(function (multiDragElement) {\n multiDragElement.thisAnimationDuration = null;\n if (multiDragElement !== dragEl$1) {\n var rect = folding ? getRect(multiDragElement) : dragRect;\n multiDragElement.fromRect = rect;\n\n // Prepare unfold animation\n toSortable.addAnimationState({\n target: multiDragElement,\n rect: rect\n });\n }\n });\n }\n\n // Multi drag elements are not necessarily removed from the DOM on drop, so to reinsert\n // properly they must all be removed\n removeMultiDragElements();\n multiDragElements.forEach(function (multiDragElement) {\n if (children[multiDragIndex]) {\n parentEl.insertBefore(multiDragElement, children[multiDragIndex]);\n } else {\n parentEl.appendChild(multiDragElement);\n }\n multiDragIndex++;\n });\n\n // If initial folding is done, the elements may have changed position because they are now\n // unfolding around dragEl, even though dragEl may not have his index changed, so update event\n // must be fired here as Sortable will not.\n if (oldIndex === index(dragEl$1)) {\n var update = false;\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement.sortableIndex !== index(multiDragElement)) {\n update = true;\n return;\n }\n });\n if (update) {\n dispatchSortableEvent('update');\n dispatchSortableEvent('sort');\n }\n }\n }\n\n // Must be done after capturing individual rects (scroll bar)\n multiDragElements.forEach(function (multiDragElement) {\n unsetRect(multiDragElement);\n });\n toSortable.animateAll();\n }\n multiDragSortable = toSortable;\n }\n\n // Remove clones if necessary\n if (rootEl === parentEl || putSortable && putSortable.lastPutMode !== 'clone') {\n multiDragClones.forEach(function (clone) {\n clone.parentNode && clone.parentNode.removeChild(clone);\n });\n }\n },\n nullingGlobal: function nullingGlobal() {\n this.isMultiDrag = dragStarted = false;\n multiDragClones.length = 0;\n },\n destroyGlobal: function destroyGlobal() {\n this._deselectMultiDrag();\n off(document, 'pointerup', this._deselectMultiDrag);\n off(document, 'mouseup', this._deselectMultiDrag);\n off(document, 'touchend', this._deselectMultiDrag);\n off(document, 'keydown', this._checkKeyDown);\n off(document, 'keyup', this._checkKeyUp);\n },\n _deselectMultiDrag: function _deselectMultiDrag(evt) {\n if (typeof dragStarted !== \"undefined\" && dragStarted) return;\n\n // Only deselect if selection is in this sortable\n if (multiDragSortable !== this.sortable) return;\n\n // Only deselect if target is not item in this sortable\n if (evt && closest(evt.target, this.options.draggable, this.sortable.el, false)) return;\n\n // Only deselect if left click\n if (evt && evt.button !== 0) return;\n while (multiDragElements.length) {\n var el = multiDragElements[0];\n toggleClass(el, this.options.selectedClass, false);\n multiDragElements.shift();\n dispatchEvent({\n sortable: this.sortable,\n rootEl: this.sortable.el,\n name: 'deselect',\n targetEl: el,\n originalEvent: evt\n });\n }\n },\n _checkKeyDown: function _checkKeyDown(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = true;\n }\n },\n _checkKeyUp: function _checkKeyUp(evt) {\n if (evt.key === this.options.multiDragKey) {\n this.multiDragKeyDown = false;\n }\n }\n };\n return _extends(MultiDrag, {\n // Static methods & properties\n pluginName: 'multiDrag',\n utils: {\n /**\r\n * Selects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be selected\r\n */\n select: function select(el) {\n var sortable = el.parentNode[expando];\n if (!sortable || !sortable.options.multiDrag || ~multiDragElements.indexOf(el)) return;\n if (multiDragSortable && multiDragSortable !== sortable) {\n multiDragSortable.multiDrag._deselectMultiDrag();\n multiDragSortable = sortable;\n }\n toggleClass(el, sortable.options.selectedClass, true);\n multiDragElements.push(el);\n },\n /**\r\n * Deselects the provided multi-drag item\r\n * @param {HTMLElement} el The element to be deselected\r\n */\n deselect: function deselect(el) {\n var sortable = el.parentNode[expando],\n index = multiDragElements.indexOf(el);\n if (!sortable || !sortable.options.multiDrag || !~index) return;\n toggleClass(el, sortable.options.selectedClass, false);\n multiDragElements.splice(index, 1);\n }\n },\n eventProperties: function eventProperties() {\n var _this3 = this;\n var oldIndicies = [],\n newIndicies = [];\n multiDragElements.forEach(function (multiDragElement) {\n oldIndicies.push({\n multiDragElement: multiDragElement,\n index: multiDragElement.sortableIndex\n });\n\n // multiDragElements will already be sorted if folding\n var newIndex;\n if (folding && multiDragElement !== dragEl$1) {\n newIndex = -1;\n } else if (folding) {\n newIndex = index(multiDragElement, ':not(.' + _this3.options.selectedClass + ')');\n } else {\n newIndex = index(multiDragElement);\n }\n newIndicies.push({\n multiDragElement: multiDragElement,\n index: newIndex\n });\n });\n return {\n items: _toConsumableArray(multiDragElements),\n clones: [].concat(multiDragClones),\n oldIndicies: oldIndicies,\n newIndicies: newIndicies\n };\n },\n optionListeners: {\n multiDragKey: function multiDragKey(key) {\n key = key.toLowerCase();\n if (key === 'ctrl') {\n key = 'Control';\n } else if (key.length > 1) {\n key = key.charAt(0).toUpperCase() + key.substr(1);\n }\n return key;\n }\n }\n });\n}\nfunction insertMultiDragElements(clonesInserted, rootEl) {\n multiDragElements.forEach(function (multiDragElement, i) {\n var target = rootEl.children[multiDragElement.sortableIndex + (clonesInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(multiDragElement, target);\n } else {\n rootEl.appendChild(multiDragElement);\n }\n });\n}\n\n/**\r\n * Insert multi-drag clones\r\n * @param {[Boolean]} elementsInserted Whether the multi-drag elements are inserted\r\n * @param {HTMLElement} rootEl\r\n */\nfunction insertMultiDragClones(elementsInserted, rootEl) {\n multiDragClones.forEach(function (clone, i) {\n var target = rootEl.children[clone.sortableIndex + (elementsInserted ? Number(i) : 0)];\n if (target) {\n rootEl.insertBefore(clone, target);\n } else {\n rootEl.appendChild(clone);\n }\n });\n}\nfunction removeMultiDragElements() {\n multiDragElements.forEach(function (multiDragElement) {\n if (multiDragElement === dragEl$1) return;\n multiDragElement.parentNode && multiDragElement.parentNode.removeChild(multiDragElement);\n });\n}\n\nSortable.mount(new AutoScrollPlugin());\nSortable.mount(Remove, Revert);\n\nexport default Sortable;\nexport { MultiDragPlugin as MultiDrag, Sortable, SwapPlugin as Swap };\n","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/ExtensionPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/withAttr');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Form');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/FormSectionGroup');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/components/FormSection');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/ColorPreviewInput');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/string');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/admin/app';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Button from 'flarum/common/components/Button';\nimport ColorPreviewInput from 'flarum/common/components/ColorPreviewInput';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport { slug } from 'flarum/common/utils/string';\nimport Stream from 'flarum/common/utils/Stream';\nimport extractText from 'flarum/common/utils/extractText';\nimport Form from 'flarum/common/components/Form';\nimport tagLabel from '../../common/helpers/tagLabel';\n/**\n * The `EditTagModal` component shows a modal dialog which allows the user\n * to create or edit a tag.\n */\nexport default class EditTagModal extends FormModal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"tag\", void 0);\n _defineProperty(this, \"name\", void 0);\n _defineProperty(this, \"slug\", void 0);\n _defineProperty(this, \"description\", void 0);\n _defineProperty(this, \"color\", void 0);\n _defineProperty(this, \"icon\", void 0);\n _defineProperty(this, \"isHidden\", void 0);\n _defineProperty(this, \"isPrimary\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.tag = this.attrs.model || app.store.createRecord('tags');\n this.name = Stream(this.tag.name() || '');\n this.slug = Stream(this.tag.slug() || '');\n this.description = Stream(this.tag.description() || '');\n this.color = Stream(this.tag.color() || '');\n this.icon = Stream(this.tag.icon() || '');\n this.isHidden = Stream(this.tag.isHidden() || false);\n this.isPrimary = Stream(this.attrs.primary || false);\n }\n className() {\n return 'EditTagModal Modal--small';\n }\n title() {\n return this.name() ? tagLabel(app.store.createRecord('tags', {\n attributes: this.submitData()\n })) : app.translator.trans('flarum-tags.admin.edit_tag.title');\n }\n content() {\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(Form, null, this.fields().toArray()));\n }\n fields() {\n const items = new ItemList();\n items.add('name', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.name_label')), m(\"input\", {\n className: \"FormControl\",\n placeholder: app.translator.trans('flarum-tags.admin.edit_tag.name_placeholder'),\n value: this.name(),\n oninput: e => {\n const target = e.target;\n this.name(target.value);\n this.slug(slug(target.value));\n }\n })), 50);\n items.add('slug', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.slug_label')), m(\"input\", {\n className: \"FormControl\",\n bidi: this.slug\n })), 40);\n items.add('description', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.description_label')), m(\"textarea\", {\n className: \"FormControl\",\n bidi: this.description\n })), 30);\n items.add('color', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.color_label')), m(ColorPreviewInput, {\n className: \"FormControl\",\n placeholder: \"#aaaaaa\",\n bidi: this.color\n })), 20);\n items.add('icon', m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.edit_tag.icon_label')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-tags.admin.edit_tag.icon_text', {\n a: m(\"a\", {\n href: app.refs.fontawesome,\n tabindex: \"-1\"\n })\n })), m(\"input\", {\n className: \"FormControl\",\n placeholder: \"fas fa-bolt\",\n bidi: this.icon\n })), 10);\n items.add('hidden', m(\"div\", {\n className: \"Form-group\"\n }, m(\"div\", null, m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"checkbox\",\n bidi: this.isHidden\n }), app.translator.trans('flarum-tags.admin.edit_tag.hide_label')))), 10);\n items.add('submit', m(\"div\", {\n className: \"Form-group Form-controls\"\n }, m(Button, {\n type: \"submit\",\n className: \"Button Button--primary EditTagModal-save\",\n loading: this.loading\n }, app.translator.trans('flarum-tags.admin.edit_tag.submit_button')), this.tag.exists && m(\"button\", {\n type: \"button\",\n className: \"Button EditTagModal-delete\",\n onclick: this.delete.bind(this)\n }, app.translator.trans('flarum-tags.admin.edit_tag.delete_tag_button'))), -10);\n return items;\n }\n submitData() {\n return {\n name: this.name(),\n slug: this.slug(),\n description: this.description(),\n color: this.color(),\n icon: this.icon(),\n isHidden: this.isHidden(),\n isPrimary: this.isPrimary()\n };\n }\n onsubmit(e) {\n e.preventDefault();\n this.loading = true;\n\n // Errors aren't passed to the modal onerror handler here.\n // This is done for better error visibility on smaller screen heights.\n this.tag.save(this.submitData()).then(() => this.hide(), () => this.loading = false);\n }\n delete() {\n if (confirm(extractText(app.translator.trans('flarum-tags.admin.edit_tag.delete_tag_confirmation')))) {\n const children = app.store.all('tags').filter(tag => tag.parent() === this.tag);\n this.tag.delete().then(() => {\n children.forEach(tag => tag.pushData({\n attributes: {\n isChild: false\n }\n }));\n m.redraw();\n });\n this.hide();\n }\n }\n}\nflarum.reg.add('flarum-tags', 'admin/components/EditTagModal', EditTagModal);","import sortable from 'sortablejs';\nimport app from 'flarum/admin/app';\nimport ExtensionPage from 'flarum/admin/components/ExtensionPage';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport withAttr from 'flarum/common/utils/withAttr';\nimport Form from 'flarum/common/components/Form';\nimport FormSectionGroup from 'flarum/admin/components/FormSectionGroup';\nimport FormSection from 'flarum/admin/components/FormSection';\nimport EditTagModal from './EditTagModal';\nimport tagIcon from '../../common/helpers/tagIcon';\nimport sortTags from '../../common/utils/sortTags';\nfunction tagItem(tag) {\n return m(\"li\", {\n \"data-id\": tag.id(),\n style: {\n color: tag.color()\n }\n }, m(\"div\", {\n className: \"TagListItem-info\"\n }, tagIcon(tag), m(\"span\", {\n className: \"TagListItem-name\"\n }, tag.name()), m(Button, {\n className: \"Button Button--link\",\n icon: \"fas fa-pencil-alt\",\n \"aria-label\": app.translator.trans('flarum-tags.admin.tags.edit_tag_label', {\n tag: tag.name()\n }),\n onclick: () => app.modal.show(EditTagModal, {\n model: tag\n })\n })), !tag.isChild() && tag.position() !== null && m(\"ol\", {\n className: \"TagListItem-children TagList\"\n }, sortTags(app.store.all('tags')).filter(child => child.parent() === tag).map(tagItem)));\n}\nexport default class TagsPage extends ExtensionPage {\n oninit(vnode) {\n super.oninit(vnode);\n\n // A regular redraw won't work here, because sortable has mucked around\n // with the DOM which will confuse Mithril's diffing algorithm. Instead\n // we force a full reconstruction of the DOM by changing the key, which\n // makes mithril completely re-render the component on redraw.\n this.forcedRefreshKey = 0;\n this.loading = true;\n app.tagList.load(['parent']).then(() => {\n this.loading = false;\n m.redraw();\n });\n }\n content() {\n if (this.loading) {\n return m(LoadingIndicator, null);\n }\n const minPrimaryTags = this.setting('flarum-tags.min_primary_tags', 0);\n const maxPrimaryTags = this.setting('flarum-tags.max_primary_tags', 0);\n const minSecondaryTags = this.setting('flarum-tags.min_secondary_tags', 0);\n const maxSecondaryTags = this.setting('flarum-tags.max_secondary_tags', 0);\n const tags = sortTags(app.store.all('tags').filter(tag => !tag.parent()));\n return m(\"div\", {\n className: \"TagsContent\"\n }, m(\"div\", {\n className: \"TagsContent-list\"\n }, m(\"div\", {\n className: \"container\",\n key: this.forcedRefreshKey,\n oncreate: this.onListOnCreate.bind(this)\n }, m(FormSectionGroup, null, m(FormSection, {\n className: \"TagGroup\",\n label: app.translator.trans('flarum-tags.admin.tags.primary_heading')\n }, m(\"ol\", {\n className: \"TagList TagList--primary\"\n }, tags.filter(tag => tag.position() !== null && !tag.isChild()).map(tagItem)), m(Button, {\n className: \"Button TagList-button\",\n icon: \"fas fa-plus\",\n onclick: () => app.modal.show(EditTagModal, {\n primary: true\n })\n }, app.translator.trans('flarum-tags.admin.tags.create_primary_tag_button'))), m(FormSection, {\n className: \"TagGroup TagGroup--secondary\",\n label: app.translator.trans('flarum-tags.admin.tags.secondary_heading')\n }, m(\"ul\", {\n className: \"TagList\"\n }, tags.filter(tag => tag.position() === null).sort((a, b) => a.name().localeCompare(b.name())).map(tagItem)), m(Button, {\n className: \"Button TagList-button\",\n icon: \"fas fa-plus\",\n onclick: () => app.modal.show(EditTagModal, {\n primary: false\n })\n }, app.translator.trans('flarum-tags.admin.tags.create_secondary_tag_button'))), m(FormSection, {\n label: app.translator.trans('flarum-tags.admin.tags.settings_heading')\n }, m(Form, null, m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.tag_settings.required_primary_heading')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-tags.admin.tag_settings.required_primary_text')), m(\"div\", {\n className: \"TagSettings-rangeInput\"\n }, m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: \"0\",\n value: minPrimaryTags(),\n oninput: withAttr('value', this.setMinTags.bind(this, minPrimaryTags, maxPrimaryTags))\n }), app.translator.trans('flarum-tags.admin.tag_settings.range_separator_text'), m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: minPrimaryTags(),\n bidi: maxPrimaryTags\n }))), m(\"div\", {\n className: \"Form-group\"\n }, m(\"label\", null, app.translator.trans('flarum-tags.admin.tag_settings.required_secondary_heading')), m(\"div\", {\n className: \"helpText\"\n }, app.translator.trans('flarum-tags.admin.tag_settings.required_secondary_text')), m(\"div\", {\n className: \"TagSettings-rangeInput\"\n }, m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: \"0\",\n value: minSecondaryTags(),\n oninput: withAttr('value', this.setMinTags.bind(this, minSecondaryTags, maxSecondaryTags))\n }), app.translator.trans('flarum-tags.admin.tag_settings.range_separator_text'), m(\"input\", {\n className: \"FormControl\",\n type: \"number\",\n min: minSecondaryTags(),\n bidi: maxSecondaryTags\n }))), m(\"div\", {\n className: \"Form-group Form-controls\"\n }, this.submitButton())))), m(\"div\", {\n className: \"TagsContent-footer\"\n }, m(\"p\", null, app.translator.trans('flarum-tags.admin.tags.about_tags_text'))))));\n }\n onListOnCreate(vnode) {\n this.$('.TagList').get().map(e => {\n sortable.create(e, {\n group: 'tags',\n delay: 50,\n delayOnTouchOnly: true,\n touchStartThreshold: 5,\n animation: 150,\n swapThreshold: 0.65,\n dragClass: 'sortable-dragging',\n ghostClass: 'sortable-placeholder',\n onSort: e => this.onSortUpdate(e)\n });\n });\n }\n setMinTags(minTags, maxTags, value) {\n minTags(value);\n maxTags(Math.max(value, maxTags()));\n }\n onSortUpdate(e) {\n // If we've moved a tag from 'primary' to 'secondary', then we'll update\n // its attributes in our local store so that when we redraw the change\n // will be made.\n if (e.from instanceof HTMLOListElement && e.to instanceof HTMLUListElement) {\n app.store.getById('tags', e.item.getAttribute('data-id')).pushData({\n attributes: {\n position: null,\n isChild: false\n },\n relationships: {\n parent: null\n }\n });\n }\n\n // Construct an array of primary tag IDs and their children, in the same\n // order that they have been arranged in.\n const order = this.$('.TagList--primary > li').map(function () {\n return {\n id: $(this).data('id'),\n children: $(this).find('li').map(function () {\n return $(this).data('id');\n }).get()\n };\n }).get();\n\n // Now that we have an accurate representation of the order which the\n // primary tags are in, we will update the tag attributes in our local\n // store to reflect this order.\n order.forEach((tag, i) => {\n const parent = app.store.getById('tags', tag.id);\n parent.pushData({\n attributes: {\n position: i,\n isChild: false\n },\n relationships: {\n parent: null\n }\n });\n tag.children.forEach((child, j) => {\n app.store.getById('tags', child).pushData({\n attributes: {\n position: j,\n isChild: true\n },\n relationships: {\n parent\n }\n });\n });\n });\n app.request({\n url: app.forum.attribute('apiUrl') + '/tags/order',\n method: 'POST',\n body: {\n order\n }\n });\n this.forcedRefreshKey++;\n m.redraw();\n }\n}\nflarum.reg.add('flarum-tags', 'admin/components/TagsPage', TagsPage);","import Extend from 'flarum/common/extenders';\nimport commonExtend from '../common/extend';\nimport app from 'flarum/admin/app';\nimport TagsPage from './components/TagsPage';\nexport default [...commonExtend, new Extend.Admin().page(TagsPage).permission(() => ({\n icon: 'fas fa-tag',\n label: app.translator.trans('flarum-tags.admin.permissions.tag_discussions_label'),\n permission: 'discussion.tag'\n}), 'moderate', 95).permission(() => ({\n icon: 'fas fa-tags',\n label: app.translator.trans('flarum-tags.admin.permissions.bypass_tag_counts_label'),\n permission: 'bypassTagCounts'\n}), 'start', 89)];","import app from 'flarum/admin/app';\nimport addTagsPermissionScope from './addTagsPermissionScope';\nimport addTagsHomePageOption from './addTagsHomePageOption';\nimport addTagChangePermission from './addTagChangePermission';\nimport addTagSelectionSettingComponent from './addTagSelectionSettingComponent';\nimport TagListState from '../common/states/TagListState';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-tags', app => {\n app.tagList = new TagListState();\n addTagsPermissionScope();\n addTagsHomePageOption();\n addTagChangePermission();\n addTagSelectionSettingComponent();\n});\nimport './admin';","import app from 'flarum/admin/app';\nimport { extend, override } from 'flarum/common/extend';\nimport PermissionGrid from 'flarum/admin/components/PermissionGrid';\nimport PermissionDropdown from 'flarum/admin/components/PermissionDropdown';\nimport Dropdown from 'flarum/common/components/Dropdown';\nimport Button from 'flarum/common/components/Button';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport tagLabel from '../common/helpers/tagLabel';\nimport tagIcon from '../common/helpers/tagIcon';\nimport sortTags from '../common/utils/sortTags';\nexport default function () {\n extend(PermissionGrid.prototype, 'oninit', function () {\n this.loading = true;\n });\n extend(PermissionGrid.prototype, 'oncreate', function () {\n app.tagList.load().then(() => {\n this.loading = false;\n m.redraw();\n });\n });\n override(PermissionGrid.prototype, 'view', function (original, vnode) {\n if (this.loading) {\n return m(LoadingIndicator, null);\n }\n return original(vnode);\n });\n override(app, 'getRequiredPermissions', (original, permission) => {\n const tagPrefix = permission.match(/^tag\\d+\\./);\n if (tagPrefix) {\n const globalPermission = permission.substr(tagPrefix[0].length);\n const required = original(globalPermission);\n return required.map(required => tagPrefix[0] + required);\n }\n return original(permission);\n });\n extend(PermissionGrid.prototype, 'scopeItems', items => {\n sortTags(app.store.all('tags')).filter(tag => tag.isRestricted()).forEach(tag => items.add('tag' + tag.id(), {\n label: tagLabel(tag),\n onremove: () => tag.save({\n isRestricted: false\n }),\n render: item => {\n if ('setting' in item) return null;\n if (item.permission === 'viewForum' || item.permission === 'startDiscussion' || item.permission?.startsWith('discussion.') && item.tagScoped !== false || item.tagScoped) {\n return m(PermissionDropdown, {\n permission: `tag${tag.id()}.${item.permission}`,\n allowGuest: item.allowGuest\n });\n }\n return null;\n }\n }));\n });\n extend(PermissionGrid.prototype, 'scopeControlItems', items => {\n const tags = sortTags(app.store.all('tags').filter(tag => !tag.isRestricted()));\n if (tags.length) {\n items.add('tag', m(Dropdown, {\n className: \"Dropdown--restrictByTag\",\n buttonClassName: \"Button Button--link\",\n label: app.translator.trans('flarum-tags.admin.permissions.restrict_by_tag_heading'),\n icon: \"fas fa-plus\",\n caretIcon: null\n }, tags.map(tag => m(Button, {\n icon: tagIcon(tag, {\n className: 'Button-icon'\n }),\n onclick: () => tag.save({\n isRestricted: true\n })\n }, tag.name()))));\n }\n });\n}","import app from 'flarum/admin/app';\nimport { extend } from 'flarum/common/extend';\nimport PermissionGrid from 'flarum/admin/components/PermissionGrid';\nimport SettingDropdown from 'flarum/admin/components/SettingDropdown';\nexport default function () {\n extend(PermissionGrid.prototype, 'startItems', items => {\n items.add('allowTagChange', {\n icon: 'fas fa-tag',\n label: app.translator.trans('flarum-tags.admin.permissions.allow_edit_tags_label'),\n setting: () => {\n const minutes = parseInt(app.data.settings.allow_tag_change, 10);\n return m(SettingDropdown, {\n defaultLabel: minutes ? app.translator.trans('core.admin.permissions_controls.allow_some_minutes_button', {\n count: minutes\n }) : app.translator.trans('core.admin.permissions_controls.allow_indefinitely_button'),\n key: \"allow_tag_change\",\n options: [{\n value: '-1',\n label: app.translator.trans('core.admin.permissions_controls.allow_indefinitely_button')\n }, {\n value: '10',\n label: app.translator.trans('core.admin.permissions_controls.allow_ten_minutes_button')\n }, {\n value: 'reply',\n label: app.translator.trans('core.admin.permissions_controls.allow_until_reply_button')\n }]\n });\n }\n }, 90);\n });\n}","import { extend } from 'flarum/common/extend';\nimport SelectTagsSettingComponent from './components/SelectTagsSettingComponent';\nimport FormGroup from 'flarum/common/components/FormGroup';\nexport default function () {\n extend(FormGroup.prototype, 'customFieldComponents', function (items) {\n items.add('flarum-tags.select-tags', attrs => {\n return m(SelectTagsSettingComponent, Object.assign({}, attrs, {\n settingValue: attrs.bidi\n }));\n });\n });\n}","import classList from 'flarum/common/utils/classList';\nexport default function tagIcon(tag, attrs, settings) {\n if (attrs === void 0) {\n attrs = {};\n }\n if (settings === void 0) {\n settings = {};\n }\n const hasIcon = tag && tag.icon();\n const {\n useColor = true\n } = settings;\n attrs.className = classList([attrs.className, 'icon text-colored', hasIcon ? tag.icon() : 'TagIcon']);\n if (tag && useColor) {\n attrs.style = attrs.style || {};\n attrs.style['--color'] = tag.color();\n } else if (!tag) {\n attrs.className += ' untagged';\n }\n return hasIcon ? m(\"i\", attrs) : m(\"span\", attrs);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagIcon', tagIcon);","import extract from 'flarum/common/utils/extract';\nimport Link from 'flarum/common/components/Link';\nimport classList from 'flarum/common/utils/classList';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport tagIcon from './tagIcon';\nexport default function tagLabel(tag, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n attrs.style = attrs.style || {};\n attrs.className = 'TagLabel ' + (attrs.className || '');\n const link = extract(attrs, 'link');\n const tagText = tag ? tag.name() : app.translator.trans('flarum-tags.lib.deleted_tag_text');\n if (tag) {\n const color = tag.color();\n if (color) {\n attrs.style['--tag-bg'] = color;\n attrs.className = classList(attrs.className, 'colored', textContrastClass(color));\n }\n if (link) {\n attrs.title = tag.description() || '';\n attrs.href = app.route('tag', {\n tags: tag.slug()\n });\n }\n if (tag.isChild()) {\n attrs.className += ' TagLabel--child';\n }\n } else {\n attrs.className += ' untagged';\n }\n return m(link ? Link : 'span', attrs, m(\"span\", {\n className: \"TagLabel-text\"\n }, tag && tag.icon() && tagIcon(tag, {\n className: 'TagLabel-icon'\n }, {\n useColor: false\n }), m(\"span\", {\n className: \"TagLabel-name\"\n }, tagText)));\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagLabel', tagLabel);","export default function sortTags(tags) {\n return tags.slice(0).sort((a, b) => {\n const aPos = a.position();\n const bPos = b.position();\n\n // If they're both secondary tags, sort them by their discussions count,\n // descending.\n if (aPos === null && bPos === null) return b.discussionCount() - a.discussionCount();\n\n // If just one is a secondary tag, then the primary tag should\n // come first.\n if (bPos === null) return -1;\n if (aPos === null) return 1;\n\n // If we've made it this far, we know they're both primary tags. So we'll\n // need to see if they have parents.\n const aParent = a.parent();\n const bParent = b.parent();\n\n // If they both have the same parent, then their positions are local,\n // so we can compare them directly.\n if (aParent === bParent) return aPos - bPos;\n // If they are both child tags, then we will compare the positions of their\n // parents.\n else if (aParent && bParent) return aParent.position() - bParent.position();\n // If we are comparing a child tag with its parent, then we let the parent\n // come first. If we are comparing an unrelated parent/child, then we\n // compare both of the parents.\n else if (aParent) return aParent === b ? 1 : aParent.position() - bPos;else if (bParent) return bParent === a ? -1 : aPos - bParent.position();\n return 0;\n });\n}\nflarum.reg.add('flarum-tags', 'common/utils/sortTags', sortTags);","module.exports = flarum.reg.get('core', 'common/Component');","module.exports = flarum.reg.get('core', 'common/app');","module.exports = flarum.reg.get('core', 'common/components/Button');","module.exports = flarum.reg.get('core', 'common/components/FormModal');","module.exports = flarum.reg.get('core', 'common/components/Link');","module.exports = flarum.reg.get('core', 'common/components/LoadingIndicator');","module.exports = flarum.reg.get('core', 'common/helpers/highlight');","module.exports = flarum.reg.get('core', 'common/helpers/textContrastClass');","module.exports = flarum.reg.get('core', 'common/utils/KeyboardNavigatable');","module.exports = flarum.reg.get('core', 'common/utils/Stream');","module.exports = flarum.reg.get('core', 'common/utils/classList');","module.exports = flarum.reg.get('core', 'common/utils/extract');","module.exports = flarum.reg.get('core', 'common/utils/extractText');","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\tflarum.reg._webpack_runtimes[\"flarum-tags\"] ||= __webpack_require__;// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + \"common/components/TagSelectionModal\" + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.f.compat = (chunkId, promises) => {\n\n\tconst originalLoadChunk = __webpack_require__.l;\n\t__webpack_require__.l = flarum.reg.loadChunk.bind(flarum.reg, originalLoadChunk);\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t884: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkmodule_exports\"] = self[\"webpackChunkmodule_exports\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));"],"names":["inProgress","dataWebpackPrefix","flarum","reg","get","extend","items","add","path","label","app","translator","trans","tagsLabel","tags","attrs","children","link","otherAttrs","className","sortTags","forEach","tag","length","push","tagLabel","m","SelectTagsSettingComponent","constructor","super","arguments","this","view","value","JSON","parse","settingValue","loaded","load","then","filter","includes","id","redraw","help","onclick","show","selectedTags","onsubmit","stringify","map","options","size","display","addChunkModule","TagListState","loadedIncludes","query","unloadedIncludes","include","has","Promise","resolve","all","Set","find","join","val","Array","isArray","Tag","name","call","slug","description","color","backgroundUrl","backgroundMode","icon","position","parent","defaultSort","isChild","isHidden","isPrimary","discussionCount","lastPostedAt","lastPostedDiscussion","isRestricted","canStartDiscussion","canAddToDiscussion","isPrimaryParent","TagGambit","KeyValueGambit","key","hint","filterKey","gambitValueToFilterValue","fromFilter","negate","gambits","toString","filterValueToGambitValue","gambit","ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","enumerable","apply","_objectSpread2","target","i","source","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_typeof","obj","Symbol","iterator","prototype","configurable","writable","_extends","assign","hasOwnProperty","userAgent","pattern","window","navigator","match","IE11OrLess","Edge","FireFox","Safari","IOS","ChromeForAndroid","captureMode","capture","passive","on","el","event","fn","addEventListener","off","removeEventListener","matches","selector","substring","msMatchesSelector","webkitMatchesSelector","_","getParentOrHost","host","document","nodeType","parentNode","closest","ctx","includeCTX","_throttleTimeout","R_SPACE","toggleClass","state","classList","replace","css","prop","style","defaultView","getComputedStyle","currentStyle","indexOf","matrix","selfOnly","appliedTransforms","transform","matrixFn","DOMMatrix","WebKitCSSMatrix","CSSMatrix","MSCSSMatrix","tagName","list","getElementsByTagName","n","getWindowScrollingElement","scrollingElement","documentElement","getRect","relativeToContainingBlock","relativeToNonStaticParent","undoScale","container","getBoundingClientRect","elRect","top","left","bottom","right","height","width","innerHeight","innerWidth","containerRect","parseInt","elMatrix","scaleX","a","scaleY","d","isScrolledPast","elSide","parentSide","getParentAutoScrollElement","elSideVal","parentSideVal","getChild","childNum","includeDragEl","currentChild","Sortable","ghost","dragged","draggable","lastChild","last","lastElementChild","previousElementSibling","index","nodeName","toUpperCase","clone","getRelativeScrollOffset","offsetLeft","offsetTop","winScroller","scrollLeft","scrollTop","includeSelf","elem","gotSelf","clientWidth","scrollWidth","clientHeight","scrollHeight","elemCSS","overflowX","overflowY","body","isRectEqual","rect1","rect2","Math","round","throttle","callback","ms","args","setTimeout","scrollBy","x","y","Polymer","$","jQuery","Zepto","dom","cloneNode","getChildContainingRectFromElement","ghostEl","rect","from","child","_rect$left","_rect$top","_rect$right","_rect$bottom","animated","childRect","min","Infinity","max","expando","Date","getTime","plugins","defaults","initializeByDefault","PluginManager","mount","plugin","option","p","pluginName","concat","pluginEvent","eventName","sortable","evt","_this","eventCanceled","cancel","eventNameGlobal","initializePlugins","initialized","modified","modifyOption","getEventProperties","eventProperties","modifiedValue","optionListeners","_excluded","_ref","undefined","originalEvent","data","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","_objectWithoutProperties","bind","dragEl","parentEl","rootEl","nextEl","lastDownEl","cloneEl","cloneHidden","dragStarted","moved","putSortable","activeSortable","active","oldIndex","oldDraggableIndex","newIndex","newDraggableIndex","hideGhostForTarget","_hideGhostForTarget","unhideGhostForTarget","_unhideGhostForTarget","cloneNowHidden","cloneNowShown","dispatchSortableEvent","_dispatchEvent","info","targetEl","toEl","fromEl","extraEventProperties","onName","charAt","substr","CustomEvent","createEvent","initEvent","bubbles","cancelable","to","item","pullMode","lastPutMode","allEventProperties","dispatchEvent","activeGroup","tapEvt","touchEvt","lastDx","lastDy","tapDistanceLeft","tapDistanceTop","lastTarget","lastDirection","targetMoveDistance","ghostRelativeParent","awaitingDragStarted","ignoreNextClick","sortables","pastFirstInvertThresh","isCircumstantialInvert","ghostRelativeParentInitialScroll","_silent","savedInputChecked","documentExists","PositionGhostAbsolutely","CSSFloatProperty","supportDraggable","createElement","supportCssPointerEvents","cssText","pointerEvents","_detectDirection","elCSS","elWidth","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","child1","child2","firstChildCSS","secondChildCSS","firstChildWidth","marginLeft","marginRight","secondChildWidth","flexDirection","gridTemplateColumns","split","touchingSideChild2","clear","_prepareGroup","toFn","pull","sameGroup","group","otherGroup","originalGroup","checkPull","checkPut","put","revertClone","preventDefault","stopPropagation","stopImmediatePropagation","nearestEmptyInsertDetectEvent","touches","nearest","clientX","clientY","some","threshold","emptyInsertThreshold","insideHorizontally","insideVertically","ret","_onDragOver","_checkOutsideTargetEl","_isOutsideThisEl","animationCallbackId","animationStates","sort","disabled","store","handle","test","swapThreshold","invertSwap","invertedSwapThreshold","removeCloneOnHide","direction","ghostClass","chosenClass","dragClass","ignore","preventOnFilter","animation","easing","setData","dataTransfer","textContent","dropBubble","dragoverBubble","dataIdAttr","delay","delayOnTouchOnly","touchStartThreshold","Number","devicePixelRatio","forceFallback","fallbackClass","fallbackOnBody","fallbackTolerance","fallbackOffset","supportPointer","nativeDraggable","_onTapStart","captureAnimationState","slice","fromRect","thisAnimationDuration","childMatrix","f","e","addAnimationState","removeAnimationState","splice","arr","indexOfObject","animateAll","clearTimeout","animating","animationTime","time","toRect","prevFromRect","prevToRect","animatingRect","targetMatrix","sqrt","pow","calculateRealTime","animate","animationResetTimer","currentRect","duration","translateX","translateY","animatingX","animatingY","forRepaintDummy","offsetWidth","repaint","_onMove","dragRect","targetRect","willInsertAfter","retVal","onMoveFn","onMove","draggedRect","related","relatedRect","_disableDraggable","_unsilent","_generateId","str","src","href","sum","charCodeAt","_nextTick","_cancelNextTick","contains","_getDirection","type","touch","pointerType","originalTarget","shadowRoot","composedPath","root","inputs","idx","checked","_saveInputCheckedState","button","isContentEditable","criteria","trim","_prepareDragStart","dragStartFn","ownerDocument","nextSibling","_lastX","_lastY","_onDrop","_disableDelayedDragEvents","_triggerDragStart","_disableDelayedDrag","_delayedDragTouchMoveHandler","_dragStartTimer","abs","floor","_onTouchMove","_onDragStart","selection","empty","getSelection","removeAllRanges","err","_dragStarted","fallback","_appendGhost","_nulling","_emulateDragOver","elementFromPoint","ghostMatrix","relativeScrollOffset","dx","dy","b","c","cssMatrix","appendChild","removeAttribute","_hideClone","cloneId","insertBefore","_loopId","setInterval","effectAllowed","_dragStartId","revert","vertical","isOwner","canSort","fromSortable","completedFired","dragOverEvent","_ignoreWhileAnimating","completed","elLastChild","lastElRect","childContainingRect","_ghostIsLast","changed","firstElRect","_ghostIsFirst","firstChild","targetBeforeFirstSwap","sibling","differentLevel","differentRowCol","dragElS1Opp","dragElS2Opp","dragElOppLength","targetS1Opp","targetS2Opp","targetOppLength","_dragElInRowColumn","side1","scrolledPastTop","scrollBefore","isLastTarget","mouseOnAxis","targetLength","targetS1","targetS2","invert","_getInsertDirection","_getSwapDirection","dragIndex","nextElementSibling","after","moveVector","extra","axis","insertion","_showClone","_offMoveEvents","_offUpEvents","clearInterval","removeChild","save","handleEvent","dropEffect","_globalDragOver","toArray","order","getAttribute","useAnimation","set","destroy","querySelectorAll","utils","is","dst","nextTick","cancelNextTick","detectDirection","element","_len","_key","create","version","scrollEl","scrollRootEl","lastAutoScrollX","lastAutoScrollY","touchEvt$1","pointerElemChangedInterval","autoScrolls","scrolling","clearAutoScrolls","autoScroll","pid","clearPointerElemChangedInterval","isFallback","scroll","scrollCustomFn","sens","scrollSensitivity","speed","scrollSpeed","scrollThisInstance","scrollFn","layersOut","currentParent","canScrollX","canScrollY","scrollPosX","scrollPosY","vx","vy","layer","scrollOffsetY","scrollOffsetX","bubbleScroll","drop","toSortable","changedTouches","onSpill","Revert","Remove","startIndex","dragStart","_ref2","_ref3","_ref4","parentSortable","AutoScroll","forceAutoScrollFallback","_handleAutoScroll","_handleFallbackAutoScroll","dragOverCompleted","dragOverBubble","nulling","ogElemScroller","newElem","EditTagModal","oninit","vnode","model","createRecord","primary","title","attributes","submitData","content","fields","placeholder","oninput","bidi","fontawesome","tabindex","loading","exists","delete","hide","confirm","pushData","tagItem","tagIcon","TagsPage","forcedRefreshKey","minPrimaryTags","setting","maxPrimaryTags","minSecondaryTags","maxSecondaryTags","oncreate","onListOnCreate","localeCompare","setMinTags","submitButton","onSort","onSortUpdate","minTags","maxTags","HTMLOListElement","HTMLUListElement","getById","relationships","j","url","attribute","method","page","permission","tagList","override","original","tagPrefix","required","onremove","render","startsWith","tagScoped","allowGuest","buttonClassName","caretIcon","addTagsHomePageOption","minutes","settings","allow_tag_change","defaultLabel","count","hasIcon","useColor","tagText","route","aPos","bPos","aParent","bParent","module","exports","o","r","t","toPrimitive","TypeError","String","toPropertyKey","__webpack_module_cache__","__webpack_require__","moduleId","_webpack_runtimes","cachedModule","__webpack_modules__","getter","__esModule","definition","chunkId","reduce","promises","u","g","globalThis","Function","l","done","script","needAttach","scripts","s","charset","timeout","nc","setAttribute","onScriptComplete","prev","onerror","onload","doneFns","head","toStringTag","scriptUrl","importScripts","location","currentScript","Error","compat","originalLoadChunk","loadChunk","installedChunks","installedChunkData","promise","reject","error","errorType","realSrc","message","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","chunkLoadingGlobal","self"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/tags/js/dist/common/components/TagSelectionModal.js b/extensions/tags/js/dist/common/components/TagSelectionModal.js index 38126ce07..ea778c617 100644 --- a/extensions/tags/js/dist/common/components/TagSelectionModal.js +++ b/extensions/tags/js/dist/common/components/TagSelectionModal.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunkmodule_exports=self.webpackChunkmodule_exports||[]).push([[955],{671:(t,e,s)=>{s.r(e),s.d(e,{default:()=>S});var i=s(805),a=s(954),n=s.n(a),r=s(336),l=s.n(r),o=s(443),c=s.n(o),h=s(233),d=s.n(h),g=s(607),u=s.n(g),p=s(280),f=s.n(p),y=s(661),T=s.n(y),b=s(15),x=s.n(b),w=s(821),I=s.n(w),v=s(618),N=s(339),_=s(968),C=s(506);class S extends(x()){constructor(){super(...arguments),(0,i.A)(this,"loading",!0),(0,i.A)(this,"tags",void 0),(0,i.A)(this,"selected",[]),(0,i.A)(this,"bypassReqs",!1),(0,i.A)(this,"filter",I()("")),(0,i.A)(this,"focused",!1),(0,i.A)(this,"navigator",new(f())),(0,i.A)(this,"indexTag",void 0)}static initAttrs(t){super.initAttrs(t),t.title||=d()(n().translator.trans("flarum-tags.lib.tag_selection_modal.title")),t.canSelect||=()=>!0,t.allowResetting??=!0,t.limits={min:{total:t.limits?.min?.total??-1/0,primary:t.limits?.min?.primary??-1/0,secondary:t.limits?.min?.secondary??-1/0},max:{total:t.limits?.max?.total??1/0,primary:t.limits?.max?.primary??1/0,secondary:t.limits?.max?.secondary??1/0}},function(t){if(t.min.primary>t.max.primary)throw new Error("The minimum number of primary tags allowed cannot be more than the maximum number of primary tags allowed.");if(t.min.secondary>t.max.secondary)throw new Error("The minimum number of secondary tags allowed cannot be more than the maximum number of secondary tags allowed.");if(t.min.total>t.max.primary+t.max.secondary)throw new Error("The minimum number of tags allowed cannot be more than the maximum number of primary and secondary tags allowed together.");if(t.max.totalt.max.total)throw new Error("The minimum number of tags allowed cannot be more than the maximum number of tags allowed.")}(t.limits)}oninit(t){super.oninit(t),this.navigator.onUp((()=>this.setIndex(this.getCurrentNumericIndex()-1,!0))).onDown((()=>this.setIndex(this.getCurrentNumericIndex()+1,!0))).onSelect(this.select.bind(this)).onRemove((()=>this.selected.splice(this.selected.length-1,1))),n().tagList.load(["parent"]).then((t=>{this.loading=!1,this.attrs.selectableTags&&(t=this.attrs.selectableTags(t)),this.tags=(0,v.A)(t),this.attrs.selectedTags&&this.attrs.selectedTags.map(this.addTag.bind(this)),this.indexTag=t[0],m.redraw()}))}className(){return c()("TagSelectionModal Modal--simple",this.attrs.className)}title(){return this.attrs.title}lengthWithCJK(t){let e=0;for(const s of t)e+=/[\u4E00-\u9FFF\u3400-\u4DBF\uF900-\uFAFF]/.test(s)?2:1;return e}content(){if(this.loading||!this.tags)return m(T(),null);const t=this.filter().toLowerCase(),e=this.primaryCount(),s=this.secondaryCount(),i=this.getFilteredTags(),a=Math.max(this.lengthWithCJK(d()(this.getInstruction(e,s))),this.lengthWithCJK(this.filter()));return[m("div",{className:"Modal-body"},m("div",{className:"TagSelectionModal-form"},m("div",{className:"TagSelectionModal-form-input"},m("div",{className:"TagsInput FormControl "+(this.focused?"focus":""),onclick:()=>this.$(".TagsInput input").focus()},m("span",{className:"TagsInput-selected"},this.selected.map((t=>m("span",{className:"TagsInput-tag",onclick:()=>{this.removeTag(t),this.onready()}},(0,N.A)(t))))),m("input",{className:"FormControl",placeholder:d()(this.getInstruction(e,s)),bidi:this.filter,style:{width:a+"ch"},onkeydown:this.navigator.navigate.bind(this.navigator),onfocus:()=>this.focused=!0,onblur:()=>this.focused=!1}))),m("div",{className:"TagSelectionModal-form-submit App-primaryControl"},m(l(),{type:"submit",className:"Button Button--primary",disabled:!this.meetsRequirements(e,s),icon:"fas fa-check"},n().translator.trans("flarum-tags.lib.tag_selection_modal.submit_button"))))),m("div",{className:"Modal-footer"},m("ul",{className:"TagSelectionModal-list SelectTagList"},i.map((e=>m("li",{"data-index":e.id(),className:c()("SelectTagListItem",{pinned:null!==e.position(),child:!!e.parent(),colored:!!e.color(),selected:this.selected.includes(e),active:this.indexTag===e}),style:{color:e.color()},onmouseover:()=>this.indexTag=e,onclick:this.toggleTag.bind(this,e)},m("i",{className:"SelectTagListItem-icon"},(0,_.A)(e,{className:"SelectTagListItem-tagIcon"}),m("i",{className:"icon TagIcon fas fa-check SelectTagListItem-checkIcon"})),m("span",{className:"SelectTagListItem-name"},u()(e.name(),t)),e.description()?m("span",{className:"SelectTagListItem-description"},e.description()):"")))),this.attrs.limits.allowBypassing&&m("div",{className:"TagSelectionModal-controls"},m(C.A,{className:"Button",onclick:()=>this.bypassReqs=!this.bypassReqs,isToggled:this.bypassReqs},n().translator.trans("flarum-tags.lib.tag_selection_modal.bypass_requirements"))))]}getFilteredTags(){const t=this.filter().toLowerCase(),e=this.primaryCount(),s=this.secondaryCount();let i=this.tags;return this.attrs.requireParentTag&&(i=i.filter((t=>{const e=t.parent();return null!==e&&(!1===e||this.selected.includes(e))}))),this.bypassReqs||(this.selected.length>=this.attrs.limits.max.total?i=i.filter((t=>this.selected.includes(t))):(e>=this.attrs.limits.max.primary&&(i=i.filter((t=>!t.isPrimaryParent()||this.selected.includes(t)))),s>=this.attrs.limits.max.secondary&&(i=i.filter((t=>t.isPrimaryParent()||this.selected.includes(t)))))),t&&(i=i.filter((e=>e.name().toLowerCase().includes(t)))),this.indexTag&&i.includes(this.indexTag)||(this.indexTag=i[0]),i}primaryCount(){return this.selected.filter((t=>t.isPrimaryParent())).length}secondaryCount(){return this.selected.filter((t=>!t.isPrimaryParent())).length}meetsRequirements(t,e){return!!(this.bypassReqs||this.attrs.allowResetting&&0===this.selected.length)||!(this.selected.length=this.attrs.limits.min.primary&&e>=this.attrs.limits.min.secondary}addTag(t){if(t&&this.attrs.canSelect(t)){if(this.attrs.onSelect&&this.attrs.onSelect(t,this.selected),this.attrs.requireParentTag){const e=t.parent();e&&!this.selected.includes(e)&&this.selected.push(e)}this.selected.includes(t)||this.selected.push(t)}}removeTag(t){const e=this.selected.indexOf(t);-1!==e&&(this.selected.splice(e,1),this.attrs.requireParentTag&&this.selected.filter((e=>e.parent()===t)).forEach(this.removeTag.bind(this)),this.attrs.onDeselect&&this.attrs.onDeselect(t,this.selected))}toggleTag(t){this.tags&&(this.selected.includes(t)?this.removeTag(t):this.addTag(t),this.filter()&&(this.filter(""),this.indexTag=this.tags[0]),this.onready())}getInstruction(t,e){if(this.bypassReqs)return"";if(t li")}getCurrentNumericIndex(){return this.indexTag?this.selectableItems().index(this.getItem(this.indexTag)):-1}getItem(t){return this.selectableItems().filter(`[data-index="${t.id()}"]`)}setIndex(t,e){const s=this.selectableItems(),i=s.parent();t<0?t=s.length-1:t>=s.length&&(t=0);const a=s.eq(t);if(this.indexTag=n().store.getById("tags",a.attr("data-index")),m.redraw(),e&&this.indexTag){const t=i.scrollTop(),e=i.offset().top,s=e+i.outerHeight(),n=a.offset().top,r=n+a.outerHeight();let l;ns&&(l=t-s+r+parseInt(i.css("padding-bottom"),10)),void 0!==l&&i.stop(!0).animate({scrollTop:l},100)}}}flarum.reg.add("flarum-tags","common/components/TagSelectionModal",S)},506:(t,e,s)=>{s.d(e,{A:()=>c});var i=s(950),a=s.n(i),n=s(336),r=s.n(n),l=s(443),o=s.n(l);class c extends(a()){view(t){const{className:e,isToggled:s,...i}=this.attrs,a=s?"far fa-check-circle":"far fa-circle";return m(r(),Object.assign({},i,{icon:a,className:o()([e,s&&"Button--toggled"])}),t.children)}}flarum.reg.add("flarum-tags","forum/components/ToggleButton",c)}}]); +"use strict";(self.webpackChunkmodule_exports=self.webpackChunkmodule_exports||[]).push([[955],{6671:(t,e,s)=>{s.r(e),s.d(e,{default:()=>S});var i=s(8805),a=s(954),n=s.n(a),r=s(5336),l=s.n(r),o=s(8443),c=s.n(o),h=s(5233),d=s.n(h),g=s(8607),u=s.n(g),p=s(9280),f=s.n(p),y=s(6661),T=s.n(y),b=s(3015),x=s.n(b),w=s(1821),I=s.n(w),v=s(1618),N=s(339),_=s(8968),C=s(7506);class S extends(x()){constructor(){super(...arguments),(0,i.A)(this,"loading",!0),(0,i.A)(this,"tags",void 0),(0,i.A)(this,"selected",[]),(0,i.A)(this,"bypassReqs",!1),(0,i.A)(this,"filter",I()("")),(0,i.A)(this,"focused",!1),(0,i.A)(this,"navigator",new(f())),(0,i.A)(this,"indexTag",void 0)}static initAttrs(t){super.initAttrs(t),t.title||=d()(n().translator.trans("flarum-tags.lib.tag_selection_modal.title")),t.canSelect||=()=>!0,t.allowResetting??=!0,t.limits={min:{total:t.limits?.min?.total??-1/0,primary:t.limits?.min?.primary??-1/0,secondary:t.limits?.min?.secondary??-1/0},max:{total:t.limits?.max?.total??1/0,primary:t.limits?.max?.primary??1/0,secondary:t.limits?.max?.secondary??1/0}},function(t){if(t.min.primary>t.max.primary)throw new Error("The minimum number of primary tags allowed cannot be more than the maximum number of primary tags allowed.");if(t.min.secondary>t.max.secondary)throw new Error("The minimum number of secondary tags allowed cannot be more than the maximum number of secondary tags allowed.");if(t.min.total>t.max.primary+t.max.secondary)throw new Error("The minimum number of tags allowed cannot be more than the maximum number of primary and secondary tags allowed together.");if(t.max.totalt.max.total)throw new Error("The minimum number of tags allowed cannot be more than the maximum number of tags allowed.")}(t.limits)}oninit(t){super.oninit(t),this.navigator.onUp((()=>this.setIndex(this.getCurrentNumericIndex()-1,!0))).onDown((()=>this.setIndex(this.getCurrentNumericIndex()+1,!0))).onSelect(this.select.bind(this)).onRemove((()=>this.selected.splice(this.selected.length-1,1))),n().tagList.load(["parent"]).then((t=>{this.loading=!1,this.attrs.selectableTags&&(t=this.attrs.selectableTags(t)),this.tags=(0,v.A)(t),this.attrs.selectedTags&&this.attrs.selectedTags.map(this.addTag.bind(this)),this.indexTag=t[0],m.redraw()}))}className(){return c()("TagSelectionModal Modal--simple",this.attrs.className)}title(){return this.attrs.title}lengthWithCJK(t){let e=0;for(const s of t)e+=/[\u4E00-\u9FFF\u3400-\u4DBF\uF900-\uFAFF]/.test(s)?2:1;return e}content(){if(this.loading||!this.tags)return m(T(),null);const t=this.filter().toLowerCase(),e=this.primaryCount(),s=this.secondaryCount(),i=this.getFilteredTags(),a=Math.max(this.lengthWithCJK(d()(this.getInstruction(e,s))),this.lengthWithCJK(this.filter()));return[m("div",{className:"Modal-body"},m("div",{className:"TagSelectionModal-form"},m("div",{className:"TagSelectionModal-form-input"},m("div",{className:"TagsInput FormControl "+(this.focused?"focus":""),onclick:()=>this.$(".TagsInput input").focus()},m("span",{className:"TagsInput-selected"},this.selected.map((t=>m("span",{className:"TagsInput-tag",onclick:()=>{this.removeTag(t),this.onready()}},(0,N.A)(t))))),m("input",{className:"FormControl",placeholder:d()(this.getInstruction(e,s)),bidi:this.filter,style:{width:a+"ch"},onkeydown:this.navigator.navigate.bind(this.navigator),onfocus:()=>this.focused=!0,onblur:()=>this.focused=!1}))),m("div",{className:"TagSelectionModal-form-submit App-primaryControl"},m(l(),{type:"submit",className:"Button Button--primary",disabled:!this.meetsRequirements(e,s),icon:"fas fa-check"},n().translator.trans("flarum-tags.lib.tag_selection_modal.submit_button"))))),m("div",{className:"Modal-footer"},m("ul",{className:"TagSelectionModal-list SelectTagList"},i.map((e=>m("li",{"data-index":e.id(),className:c()("SelectTagListItem",{pinned:null!==e.position(),child:!!e.parent(),colored:!!e.color(),selected:this.selected.includes(e),active:this.indexTag===e}),style:{color:e.color()},onmouseover:()=>this.indexTag=e,onclick:this.toggleTag.bind(this,e)},m("i",{className:"SelectTagListItem-icon"},(0,_.A)(e,{className:"SelectTagListItem-tagIcon"}),m("i",{className:"icon TagIcon fas fa-check SelectTagListItem-checkIcon"})),m("span",{className:"SelectTagListItem-name"},u()(e.name(),t)),e.description()?m("span",{className:"SelectTagListItem-description"},e.description()):"")))),this.attrs.limits.allowBypassing&&m("div",{className:"TagSelectionModal-controls"},m(C.A,{className:"Button",onclick:()=>this.bypassReqs=!this.bypassReqs,isToggled:this.bypassReqs},n().translator.trans("flarum-tags.lib.tag_selection_modal.bypass_requirements"))))]}getFilteredTags(){const t=this.filter().toLowerCase(),e=this.primaryCount(),s=this.secondaryCount();let i=this.tags;return this.attrs.requireParentTag&&(i=i.filter((t=>{const e=t.parent();return null!==e&&(!1===e||this.selected.includes(e))}))),this.bypassReqs||(this.selected.length>=this.attrs.limits.max.total?i=i.filter((t=>this.selected.includes(t))):(e>=this.attrs.limits.max.primary&&(i=i.filter((t=>!t.isPrimaryParent()||this.selected.includes(t)))),s>=this.attrs.limits.max.secondary&&(i=i.filter((t=>t.isPrimaryParent()||this.selected.includes(t)))))),t&&(i=i.filter((e=>e.name().toLowerCase().includes(t)))),this.indexTag&&i.includes(this.indexTag)||(this.indexTag=i[0]),i}primaryCount(){return this.selected.filter((t=>t.isPrimaryParent())).length}secondaryCount(){return this.selected.filter((t=>!t.isPrimaryParent())).length}meetsRequirements(t,e){return!!(this.bypassReqs||this.attrs.allowResetting&&0===this.selected.length)||!(this.selected.length=this.attrs.limits.min.primary&&e>=this.attrs.limits.min.secondary}addTag(t){if(t&&this.attrs.canSelect(t)){if(this.attrs.onSelect&&this.attrs.onSelect(t,this.selected),this.attrs.requireParentTag){const e=t.parent();e&&!this.selected.includes(e)&&this.selected.push(e)}this.selected.includes(t)||this.selected.push(t)}}removeTag(t){const e=this.selected.indexOf(t);-1!==e&&(this.selected.splice(e,1),this.attrs.requireParentTag&&this.selected.filter((e=>e.parent()===t)).forEach(this.removeTag.bind(this)),this.attrs.onDeselect&&this.attrs.onDeselect(t,this.selected))}toggleTag(t){this.tags&&(this.selected.includes(t)?this.removeTag(t):this.addTag(t),this.filter()&&(this.filter(""),this.indexTag=this.tags[0]),this.onready())}getInstruction(t,e){if(this.bypassReqs)return"";if(t li")}getCurrentNumericIndex(){return this.indexTag?this.selectableItems().index(this.getItem(this.indexTag)):-1}getItem(t){return this.selectableItems().filter(`[data-index="${t.id()}"]`)}setIndex(t,e){const s=this.selectableItems(),i=s.parent();t<0?t=s.length-1:t>=s.length&&(t=0);const a=s.eq(t);if(this.indexTag=n().store.getById("tags",a.attr("data-index")),m.redraw(),e&&this.indexTag){const t=i.scrollTop(),e=i.offset().top,s=e+i.outerHeight(),n=a.offset().top,r=n+a.outerHeight();let l;ns&&(l=t-s+r+parseInt(i.css("padding-bottom"),10)),void 0!==l&&i.stop(!0).animate({scrollTop:l},100)}}}flarum.reg.add("flarum-tags","common/components/TagSelectionModal",S)},7506:(t,e,s)=>{s.d(e,{A:()=>c});var i=s(4950),a=s.n(i),n=s(5336),r=s.n(n),l=s(8443),o=s.n(l);class c extends(a()){view(t){const{className:e,isToggled:s,...i}=this.attrs,a=s?"far fa-check-circle":"far fa-circle";return m(r(),Object.assign({},i,{icon:a,className:o()([e,s&&"Button--toggled"])}),t.children)}}flarum.reg.add("flarum-tags","forum/components/ToggleButton",c)}}]); //# sourceMappingURL=TagSelectionModal.js.map \ No newline at end of file diff --git a/extensions/tags/js/dist/common/components/TagSelectionModal.js.map b/extensions/tags/js/dist/common/components/TagSelectionModal.js.map index e5c37941b..c7964487d 100644 --- a/extensions/tags/js/dist/common/components/TagSelectionModal.js.map +++ b/extensions/tags/js/dist/common/components/TagSelectionModal.js.map @@ -1 +1 @@ -{"version":3,"file":"common/components/TagSelectionModal.js","mappings":"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","sources":["webpack://@flarum/tags/./src/common/components/TagSelectionModal.tsx","webpack://@flarum/tags/./src/forum/components/ToggleButton.js"],"sourcesContent":["import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport highlight from 'flarum/common/helpers/highlight';\nimport KeyboardNavigatable from 'flarum/common/utils/KeyboardNavigatable';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Stream from 'flarum/common/utils/Stream';\nimport sortTags from '../utils/sortTags';\nimport tagLabel from '../helpers/tagLabel';\nimport tagIcon from '../helpers/tagIcon';\nimport ToggleButton from '../../forum/components/ToggleButton';\nexport default class TagSelectionModal extends FormModal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", true);\n _defineProperty(this, \"tags\", void 0);\n _defineProperty(this, \"selected\", []);\n _defineProperty(this, \"bypassReqs\", false);\n _defineProperty(this, \"filter\", Stream(''));\n _defineProperty(this, \"focused\", false);\n _defineProperty(this, \"navigator\", new KeyboardNavigatable());\n _defineProperty(this, \"indexTag\", void 0);\n }\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n\n // Default values for optional attributes.\n attrs.title ||= extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.title'));\n attrs.canSelect ||= () => true;\n attrs.allowResetting ??= true;\n attrs.limits = {\n min: {\n total: attrs.limits?.min?.total ?? -Infinity,\n primary: attrs.limits?.min?.primary ?? -Infinity,\n secondary: attrs.limits?.min?.secondary ?? -Infinity\n },\n max: {\n total: attrs.limits?.max?.total ?? Infinity,\n primary: attrs.limits?.max?.primary ?? Infinity,\n secondary: attrs.limits?.max?.secondary ?? Infinity\n }\n };\n\n // Prevent illogical limits from being provided.\n catchInvalidLimits(attrs.limits);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.navigator.onUp(() => this.setIndex(this.getCurrentNumericIndex() - 1, true)).onDown(() => this.setIndex(this.getCurrentNumericIndex() + 1, true)).onSelect(this.select.bind(this)).onRemove(() => this.selected.splice(this.selected.length - 1, 1));\n app.tagList.load(['parent']).then(tags => {\n this.loading = false;\n if (this.attrs.selectableTags) {\n tags = this.attrs.selectableTags(tags);\n }\n this.tags = sortTags(tags);\n if (this.attrs.selectedTags) {\n this.attrs.selectedTags.map(this.addTag.bind(this));\n }\n this.indexTag = tags[0];\n m.redraw();\n });\n }\n className() {\n return classList('TagSelectionModal Modal--simple', this.attrs.className);\n }\n title() {\n return this.attrs.title;\n }\n lengthWithCJK(text) {\n let length = 0;\n for (const char of text) {\n length += /[\\u4E00-\\u9FFF\\u3400-\\u4DBF\\uF900-\\uFAFF]/.test(char) ? 2 : 1;\n }\n return length;\n }\n content() {\n if (this.loading || !this.tags) {\n return m(LoadingIndicator, null);\n }\n const filter = this.filter().toLowerCase();\n const primaryCount = this.primaryCount();\n const secondaryCount = this.secondaryCount();\n const tags = this.getFilteredTags();\n\n // 1 CJK character's width equals to 2ch,\n // so we count 1 CJK character as 2 characters.\n const inputWidth = Math.max(this.lengthWithCJK(extractText(this.getInstruction(primaryCount, secondaryCount))), this.lengthWithCJK(this.filter()));\n return [m(\"div\", {\n className: \"Modal-body\"\n }, m(\"div\", {\n className: \"TagSelectionModal-form\"\n }, m(\"div\", {\n className: \"TagSelectionModal-form-input\"\n }, m(\"div\", {\n className: 'TagsInput FormControl ' + (this.focused ? 'focus' : ''),\n onclick: () => this.$('.TagsInput input').focus()\n }, m(\"span\", {\n className: \"TagsInput-selected\"\n }, this.selected.map(tag => m(\"span\", {\n className: \"TagsInput-tag\",\n onclick: () => {\n this.removeTag(tag);\n this.onready();\n }\n }, tagLabel(tag)))), m(\"input\", {\n className: \"FormControl\",\n placeholder: extractText(this.getInstruction(primaryCount, secondaryCount)),\n bidi: this.filter,\n style: {\n width: inputWidth + 'ch'\n },\n onkeydown: this.navigator.navigate.bind(this.navigator),\n onfocus: () => this.focused = true,\n onblur: () => this.focused = false\n }))), m(\"div\", {\n className: \"TagSelectionModal-form-submit App-primaryControl\"\n }, m(Button, {\n type: \"submit\",\n className: \"Button Button--primary\",\n disabled: !this.meetsRequirements(primaryCount, secondaryCount),\n icon: \"fas fa-check\"\n }, app.translator.trans('flarum-tags.lib.tag_selection_modal.submit_button'))))), m(\"div\", {\n className: \"Modal-footer\"\n }, m(\"ul\", {\n className: \"TagSelectionModal-list SelectTagList\"\n }, tags.map(tag => m(\"li\", {\n \"data-index\": tag.id(),\n className: classList('SelectTagListItem', {\n pinned: tag.position() !== null,\n child: !!tag.parent(),\n colored: !!tag.color(),\n selected: this.selected.includes(tag),\n active: this.indexTag === tag\n }),\n style: {\n color: tag.color()\n },\n onmouseover: () => this.indexTag = tag,\n onclick: this.toggleTag.bind(this, tag)\n }, m(\"i\", {\n className: \"SelectTagListItem-icon\"\n }, tagIcon(tag, {\n className: 'SelectTagListItem-tagIcon'\n }), m(\"i\", {\n className: \"icon TagIcon fas fa-check SelectTagListItem-checkIcon\"\n })), m(\"span\", {\n className: \"SelectTagListItem-name\"\n }, highlight(tag.name(), filter)), tag.description() ? m(\"span\", {\n className: \"SelectTagListItem-description\"\n }, tag.description()) : ''))), this.attrs.limits.allowBypassing && m(\"div\", {\n className: \"TagSelectionModal-controls\"\n }, m(ToggleButton, {\n className: \"Button\",\n onclick: () => this.bypassReqs = !this.bypassReqs,\n isToggled: this.bypassReqs\n }, app.translator.trans('flarum-tags.lib.tag_selection_modal.bypass_requirements'))))];\n }\n\n /**\n * Filters the available tags on every state change.\n */\n getFilteredTags() {\n const filter = this.filter().toLowerCase();\n const primaryCount = this.primaryCount();\n const secondaryCount = this.secondaryCount();\n let tags = this.tags;\n if (this.attrs.requireParentTag) {\n // Filter out all child tags whose parents have not been selected. This\n // makes it impossible to select a child if its parent hasn't been selected.\n tags = tags.filter(tag => {\n const parent = tag.parent();\n return parent !== null && (parent === false || this.selected.includes(parent));\n });\n }\n if (!this.bypassReqs) {\n // If we reached the total maximum number of tags, we can't select anymore.\n if (this.selected.length >= this.attrs.limits.max.total) {\n tags = tags.filter(tag => this.selected.includes(tag));\n }\n // If the number of selected primary/secondary tags is at the maximum, then\n // we'll filter out all other tags of that type.\n else {\n if (primaryCount >= this.attrs.limits.max.primary) {\n tags = tags.filter(tag => !tag.isPrimaryParent() || this.selected.includes(tag));\n }\n if (secondaryCount >= this.attrs.limits.max.secondary) {\n tags = tags.filter(tag => tag.isPrimaryParent() || this.selected.includes(tag));\n }\n }\n }\n\n // If the user has entered text in the filter input, then filter by tags\n // whose name matches what they've entered.\n if (filter) {\n tags = tags.filter(tag => tag.name().toLowerCase().includes(filter));\n }\n if (!this.indexTag || !tags.includes(this.indexTag)) this.indexTag = tags[0];\n return tags;\n }\n\n /**\n * Counts the number of selected primary tags.\n */\n primaryCount() {\n return this.selected.filter(tag => tag.isPrimaryParent()).length;\n }\n\n /**\n * Counts the number of selected secondary tags.\n */\n secondaryCount() {\n return this.selected.filter(tag => !tag.isPrimaryParent()).length;\n }\n\n /**\n * Validates the number of selected primary/secondary tags against the set min max limits.\n */\n meetsRequirements(primaryCount, secondaryCount) {\n if (this.bypassReqs || this.attrs.allowResetting && this.selected.length === 0) {\n return true;\n }\n if (this.selected.length < this.attrs.limits.min.total) {\n return false;\n }\n return primaryCount >= this.attrs.limits.min.primary && secondaryCount >= this.attrs.limits.min.secondary;\n }\n\n /**\n * Add the given tag to the list of selected tags.\n */\n addTag(tag) {\n if (!tag || !this.attrs.canSelect(tag)) return;\n if (this.attrs.onSelect) {\n this.attrs.onSelect(tag, this.selected);\n }\n\n // If this tag has a parent, we'll also need to add the parent tag to the\n // selected list if it's not already in there.\n if (this.attrs.requireParentTag) {\n const parent = tag.parent();\n if (parent && !this.selected.includes(parent)) {\n this.selected.push(parent);\n }\n }\n if (!this.selected.includes(tag)) {\n this.selected.push(tag);\n }\n }\n\n /**\n * Remove the given tag from the list of selected tags.\n */\n removeTag(tag) {\n const index = this.selected.indexOf(tag);\n if (index !== -1) {\n this.selected.splice(index, 1);\n\n // Look through the list of selected tags for any tags which have the tag\n // we just removed as their parent. We'll need to remove them too.\n if (this.attrs.requireParentTag) {\n this.selected.filter(t => t.parent() === tag).forEach(this.removeTag.bind(this));\n }\n if (this.attrs.onDeselect) {\n this.attrs.onDeselect(tag, this.selected);\n }\n }\n }\n toggleTag(tag) {\n // Won't happen, needed for type safety.\n if (!this.tags) return;\n if (this.selected.includes(tag)) {\n this.removeTag(tag);\n } else {\n this.addTag(tag);\n }\n if (this.filter()) {\n this.filter('');\n this.indexTag = this.tags[0];\n }\n this.onready();\n }\n\n /**\n * Gives human text instructions based on the current number of selected tags and set limits.\n */\n getInstruction(primaryCount, secondaryCount) {\n if (this.bypassReqs) {\n return '';\n }\n if (primaryCount < this.attrs.limits.min.primary) {\n const remaining = this.attrs.limits.min.primary - primaryCount;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_primary_placeholder', {\n count: remaining\n }));\n } else if (secondaryCount < this.attrs.limits.min.secondary) {\n const remaining = this.attrs.limits.min.secondary - secondaryCount;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_secondary_placeholder', {\n count: remaining\n }));\n } else if (this.selected.length < this.attrs.limits.min.total) {\n const remaining = this.attrs.limits.min.total - this.selected.length;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_tags_placeholder', {\n count: remaining\n }));\n }\n return '';\n }\n\n /**\n * Submit tag selection.\n */\n onsubmit(e) {\n e.preventDefault();\n if (this.attrs.onsubmit) this.attrs.onsubmit(this.selected);\n this.hide();\n }\n select(e) {\n // Ctrl + Enter submits the selection, just Enter completes the current entry\n if (e.metaKey || e.ctrlKey || this.indexTag && this.selected.includes(this.indexTag)) {\n if (this.selected.length) {\n // The DOM submit method doesn't emit a `submit event, so we\n // simulate a manual submission so our `onsubmit` logic is run.\n this.$('button[type=\"submit\"]').click();\n }\n } else if (this.indexTag) {\n this.getItem(this.indexTag)[0].dispatchEvent(new Event('click'));\n }\n }\n selectableItems() {\n return this.$('.TagSelectionModal-list > li');\n }\n getCurrentNumericIndex() {\n if (!this.indexTag) return -1;\n return this.selectableItems().index(this.getItem(this.indexTag));\n }\n getItem(selectedTag) {\n return this.selectableItems().filter(`[data-index=\"${selectedTag.id()}\"]`);\n }\n setIndex(index, scrollToItem) {\n const $items = this.selectableItems();\n const $dropdown = $items.parent();\n if (index < 0) {\n index = $items.length - 1;\n } else if (index >= $items.length) {\n index = 0;\n }\n const $item = $items.eq(index);\n this.indexTag = app.store.getById('tags', $item.attr('data-index'));\n m.redraw();\n if (scrollToItem && this.indexTag) {\n const dropdownScroll = $dropdown.scrollTop();\n const dropdownTop = $dropdown.offset().top;\n const dropdownBottom = dropdownTop + $dropdown.outerHeight();\n const itemTop = $item.offset().top;\n const itemBottom = itemTop + $item.outerHeight();\n let scrollTop;\n if (itemTop < dropdownTop) {\n scrollTop = dropdownScroll - dropdownTop + itemTop - parseInt($dropdown.css('padding-top'), 10);\n } else if (itemBottom > dropdownBottom) {\n scrollTop = dropdownScroll - dropdownBottom + itemBottom + parseInt($dropdown.css('padding-bottom'), 10);\n }\n if (typeof scrollTop !== 'undefined') {\n $dropdown.stop(true).animate({\n scrollTop\n }, 100);\n }\n }\n }\n}\n\n/**\n * Catch invalid limits provided to the tag selection modal.\n */\nfunction catchInvalidLimits(limits) {\n if (limits.min.primary > limits.max.primary) {\n throw new Error('The minimum number of primary tags allowed cannot be more than the maximum number of primary tags allowed.');\n }\n if (limits.min.secondary > limits.max.secondary) {\n throw new Error('The minimum number of secondary tags allowed cannot be more than the maximum number of secondary tags allowed.');\n }\n if (limits.min.total > limits.max.primary + limits.max.secondary) {\n throw new Error('The minimum number of tags allowed cannot be more than the maximum number of primary and secondary tags allowed together.');\n }\n if (limits.max.total < limits.min.primary + limits.min.secondary) {\n throw new Error('The maximum number of tags allowed cannot be less than the minimum number of primary and secondary tags allowed together.');\n }\n if (limits.min.total > limits.max.total) {\n throw new Error('The minimum number of tags allowed cannot be more than the maximum number of tags allowed.');\n }\n}\nflarum.reg.add('flarum-tags', 'common/components/TagSelectionModal', TagSelectionModal);","import Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\n\n/**\n * @TODO move to core\n */\nexport default class ToggleButton extends Component {\n view(vnode) {\n const {\n className,\n isToggled,\n ...attrs\n } = this.attrs;\n const icon = isToggled ? 'far fa-check-circle' : 'far fa-circle';\n return m(Button, Object.assign({}, attrs, {\n icon: icon,\n className: classList([className, isToggled && 'Button--toggled'])\n }), vnode.children);\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/ToggleButton', ToggleButton);"],"names":["TagSelectionModal","constructor","super","arguments","this","initAttrs","attrs","title","trans","canSelect","allowResetting","limits","min","total","primary","secondary","max","Infinity","Error","catchInvalidLimits","oninit","vnode","navigator","onUp","setIndex","getCurrentNumericIndex","onDown","onSelect","select","bind","onRemove","selected","splice","length","load","then","tags","loading","selectableTags","selectedTags","map","addTag","indexTag","m","redraw","className","lengthWithCJK","text","char","test","content","filter","toLowerCase","primaryCount","secondaryCount","getFilteredTags","inputWidth","Math","getInstruction","focused","onclick","$","focus","tag","removeTag","onready","placeholder","bidi","style","width","onkeydown","navigate","onfocus","onblur","type","disabled","meetsRequirements","icon","id","pinned","position","child","parent","colored","color","includes","active","onmouseover","toggleTag","name","description","allowBypassing","bypassReqs","isToggled","requireParentTag","isPrimaryParent","push","index","indexOf","t","forEach","onDeselect","remaining","count","onsubmit","e","preventDefault","hide","metaKey","ctrlKey","click","getItem","dispatchEvent","Event","selectableItems","selectedTag","scrollToItem","$items","$dropdown","$item","eq","getById","attr","dropdownScroll","scrollTop","dropdownTop","offset","top","dropdownBottom","outerHeight","itemTop","itemBottom","parseInt","css","stop","animate","flarum","reg","add","ToggleButton","view","Object","assign","children"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"common/components/TagSelectionModal.js","mappings":"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","sources":["webpack://@flarum/tags/./src/common/components/TagSelectionModal.tsx","webpack://@flarum/tags/./src/forum/components/ToggleButton.js"],"sourcesContent":["import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport highlight from 'flarum/common/helpers/highlight';\nimport KeyboardNavigatable from 'flarum/common/utils/KeyboardNavigatable';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Stream from 'flarum/common/utils/Stream';\nimport sortTags from '../utils/sortTags';\nimport tagLabel from '../helpers/tagLabel';\nimport tagIcon from '../helpers/tagIcon';\nimport ToggleButton from '../../forum/components/ToggleButton';\nexport default class TagSelectionModal extends FormModal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", true);\n _defineProperty(this, \"tags\", void 0);\n _defineProperty(this, \"selected\", []);\n _defineProperty(this, \"bypassReqs\", false);\n _defineProperty(this, \"filter\", Stream(''));\n _defineProperty(this, \"focused\", false);\n _defineProperty(this, \"navigator\", new KeyboardNavigatable());\n _defineProperty(this, \"indexTag\", void 0);\n }\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n\n // Default values for optional attributes.\n attrs.title ||= extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.title'));\n attrs.canSelect ||= () => true;\n attrs.allowResetting ??= true;\n attrs.limits = {\n min: {\n total: attrs.limits?.min?.total ?? -Infinity,\n primary: attrs.limits?.min?.primary ?? -Infinity,\n secondary: attrs.limits?.min?.secondary ?? -Infinity\n },\n max: {\n total: attrs.limits?.max?.total ?? Infinity,\n primary: attrs.limits?.max?.primary ?? Infinity,\n secondary: attrs.limits?.max?.secondary ?? Infinity\n }\n };\n\n // Prevent illogical limits from being provided.\n catchInvalidLimits(attrs.limits);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.navigator.onUp(() => this.setIndex(this.getCurrentNumericIndex() - 1, true)).onDown(() => this.setIndex(this.getCurrentNumericIndex() + 1, true)).onSelect(this.select.bind(this)).onRemove(() => this.selected.splice(this.selected.length - 1, 1));\n app.tagList.load(['parent']).then(tags => {\n this.loading = false;\n if (this.attrs.selectableTags) {\n tags = this.attrs.selectableTags(tags);\n }\n this.tags = sortTags(tags);\n if (this.attrs.selectedTags) {\n this.attrs.selectedTags.map(this.addTag.bind(this));\n }\n this.indexTag = tags[0];\n m.redraw();\n });\n }\n className() {\n return classList('TagSelectionModal Modal--simple', this.attrs.className);\n }\n title() {\n return this.attrs.title;\n }\n lengthWithCJK(text) {\n let length = 0;\n for (const char of text) {\n length += /[\\u4E00-\\u9FFF\\u3400-\\u4DBF\\uF900-\\uFAFF]/.test(char) ? 2 : 1;\n }\n return length;\n }\n content() {\n if (this.loading || !this.tags) {\n return m(LoadingIndicator, null);\n }\n const filter = this.filter().toLowerCase();\n const primaryCount = this.primaryCount();\n const secondaryCount = this.secondaryCount();\n const tags = this.getFilteredTags();\n\n // 1 CJK character's width equals to 2ch,\n // so we count 1 CJK character as 2 characters.\n const inputWidth = Math.max(this.lengthWithCJK(extractText(this.getInstruction(primaryCount, secondaryCount))), this.lengthWithCJK(this.filter()));\n return [m(\"div\", {\n className: \"Modal-body\"\n }, m(\"div\", {\n className: \"TagSelectionModal-form\"\n }, m(\"div\", {\n className: \"TagSelectionModal-form-input\"\n }, m(\"div\", {\n className: 'TagsInput FormControl ' + (this.focused ? 'focus' : ''),\n onclick: () => this.$('.TagsInput input').focus()\n }, m(\"span\", {\n className: \"TagsInput-selected\"\n }, this.selected.map(tag => m(\"span\", {\n className: \"TagsInput-tag\",\n onclick: () => {\n this.removeTag(tag);\n this.onready();\n }\n }, tagLabel(tag)))), m(\"input\", {\n className: \"FormControl\",\n placeholder: extractText(this.getInstruction(primaryCount, secondaryCount)),\n bidi: this.filter,\n style: {\n width: inputWidth + 'ch'\n },\n onkeydown: this.navigator.navigate.bind(this.navigator),\n onfocus: () => this.focused = true,\n onblur: () => this.focused = false\n }))), m(\"div\", {\n className: \"TagSelectionModal-form-submit App-primaryControl\"\n }, m(Button, {\n type: \"submit\",\n className: \"Button Button--primary\",\n disabled: !this.meetsRequirements(primaryCount, secondaryCount),\n icon: \"fas fa-check\"\n }, app.translator.trans('flarum-tags.lib.tag_selection_modal.submit_button'))))), m(\"div\", {\n className: \"Modal-footer\"\n }, m(\"ul\", {\n className: \"TagSelectionModal-list SelectTagList\"\n }, tags.map(tag => m(\"li\", {\n \"data-index\": tag.id(),\n className: classList('SelectTagListItem', {\n pinned: tag.position() !== null,\n child: !!tag.parent(),\n colored: !!tag.color(),\n selected: this.selected.includes(tag),\n active: this.indexTag === tag\n }),\n style: {\n color: tag.color()\n },\n onmouseover: () => this.indexTag = tag,\n onclick: this.toggleTag.bind(this, tag)\n }, m(\"i\", {\n className: \"SelectTagListItem-icon\"\n }, tagIcon(tag, {\n className: 'SelectTagListItem-tagIcon'\n }), m(\"i\", {\n className: \"icon TagIcon fas fa-check SelectTagListItem-checkIcon\"\n })), m(\"span\", {\n className: \"SelectTagListItem-name\"\n }, highlight(tag.name(), filter)), tag.description() ? m(\"span\", {\n className: \"SelectTagListItem-description\"\n }, tag.description()) : ''))), this.attrs.limits.allowBypassing && m(\"div\", {\n className: \"TagSelectionModal-controls\"\n }, m(ToggleButton, {\n className: \"Button\",\n onclick: () => this.bypassReqs = !this.bypassReqs,\n isToggled: this.bypassReqs\n }, app.translator.trans('flarum-tags.lib.tag_selection_modal.bypass_requirements'))))];\n }\n\n /**\n * Filters the available tags on every state change.\n */\n getFilteredTags() {\n const filter = this.filter().toLowerCase();\n const primaryCount = this.primaryCount();\n const secondaryCount = this.secondaryCount();\n let tags = this.tags;\n if (this.attrs.requireParentTag) {\n // Filter out all child tags whose parents have not been selected. This\n // makes it impossible to select a child if its parent hasn't been selected.\n tags = tags.filter(tag => {\n const parent = tag.parent();\n return parent !== null && (parent === false || this.selected.includes(parent));\n });\n }\n if (!this.bypassReqs) {\n // If we reached the total maximum number of tags, we can't select anymore.\n if (this.selected.length >= this.attrs.limits.max.total) {\n tags = tags.filter(tag => this.selected.includes(tag));\n }\n // If the number of selected primary/secondary tags is at the maximum, then\n // we'll filter out all other tags of that type.\n else {\n if (primaryCount >= this.attrs.limits.max.primary) {\n tags = tags.filter(tag => !tag.isPrimaryParent() || this.selected.includes(tag));\n }\n if (secondaryCount >= this.attrs.limits.max.secondary) {\n tags = tags.filter(tag => tag.isPrimaryParent() || this.selected.includes(tag));\n }\n }\n }\n\n // If the user has entered text in the filter input, then filter by tags\n // whose name matches what they've entered.\n if (filter) {\n tags = tags.filter(tag => tag.name().toLowerCase().includes(filter));\n }\n if (!this.indexTag || !tags.includes(this.indexTag)) this.indexTag = tags[0];\n return tags;\n }\n\n /**\n * Counts the number of selected primary tags.\n */\n primaryCount() {\n return this.selected.filter(tag => tag.isPrimaryParent()).length;\n }\n\n /**\n * Counts the number of selected secondary tags.\n */\n secondaryCount() {\n return this.selected.filter(tag => !tag.isPrimaryParent()).length;\n }\n\n /**\n * Validates the number of selected primary/secondary tags against the set min max limits.\n */\n meetsRequirements(primaryCount, secondaryCount) {\n if (this.bypassReqs || this.attrs.allowResetting && this.selected.length === 0) {\n return true;\n }\n if (this.selected.length < this.attrs.limits.min.total) {\n return false;\n }\n return primaryCount >= this.attrs.limits.min.primary && secondaryCount >= this.attrs.limits.min.secondary;\n }\n\n /**\n * Add the given tag to the list of selected tags.\n */\n addTag(tag) {\n if (!tag || !this.attrs.canSelect(tag)) return;\n if (this.attrs.onSelect) {\n this.attrs.onSelect(tag, this.selected);\n }\n\n // If this tag has a parent, we'll also need to add the parent tag to the\n // selected list if it's not already in there.\n if (this.attrs.requireParentTag) {\n const parent = tag.parent();\n if (parent && !this.selected.includes(parent)) {\n this.selected.push(parent);\n }\n }\n if (!this.selected.includes(tag)) {\n this.selected.push(tag);\n }\n }\n\n /**\n * Remove the given tag from the list of selected tags.\n */\n removeTag(tag) {\n const index = this.selected.indexOf(tag);\n if (index !== -1) {\n this.selected.splice(index, 1);\n\n // Look through the list of selected tags for any tags which have the tag\n // we just removed as their parent. We'll need to remove them too.\n if (this.attrs.requireParentTag) {\n this.selected.filter(t => t.parent() === tag).forEach(this.removeTag.bind(this));\n }\n if (this.attrs.onDeselect) {\n this.attrs.onDeselect(tag, this.selected);\n }\n }\n }\n toggleTag(tag) {\n // Won't happen, needed for type safety.\n if (!this.tags) return;\n if (this.selected.includes(tag)) {\n this.removeTag(tag);\n } else {\n this.addTag(tag);\n }\n if (this.filter()) {\n this.filter('');\n this.indexTag = this.tags[0];\n }\n this.onready();\n }\n\n /**\n * Gives human text instructions based on the current number of selected tags and set limits.\n */\n getInstruction(primaryCount, secondaryCount) {\n if (this.bypassReqs) {\n return '';\n }\n if (primaryCount < this.attrs.limits.min.primary) {\n const remaining = this.attrs.limits.min.primary - primaryCount;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_primary_placeholder', {\n count: remaining\n }));\n } else if (secondaryCount < this.attrs.limits.min.secondary) {\n const remaining = this.attrs.limits.min.secondary - secondaryCount;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_secondary_placeholder', {\n count: remaining\n }));\n } else if (this.selected.length < this.attrs.limits.min.total) {\n const remaining = this.attrs.limits.min.total - this.selected.length;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_tags_placeholder', {\n count: remaining\n }));\n }\n return '';\n }\n\n /**\n * Submit tag selection.\n */\n onsubmit(e) {\n e.preventDefault();\n if (this.attrs.onsubmit) this.attrs.onsubmit(this.selected);\n this.hide();\n }\n select(e) {\n // Ctrl + Enter submits the selection, just Enter completes the current entry\n if (e.metaKey || e.ctrlKey || this.indexTag && this.selected.includes(this.indexTag)) {\n if (this.selected.length) {\n // The DOM submit method doesn't emit a `submit event, so we\n // simulate a manual submission so our `onsubmit` logic is run.\n this.$('button[type=\"submit\"]').click();\n }\n } else if (this.indexTag) {\n this.getItem(this.indexTag)[0].dispatchEvent(new Event('click'));\n }\n }\n selectableItems() {\n return this.$('.TagSelectionModal-list > li');\n }\n getCurrentNumericIndex() {\n if (!this.indexTag) return -1;\n return this.selectableItems().index(this.getItem(this.indexTag));\n }\n getItem(selectedTag) {\n return this.selectableItems().filter(`[data-index=\"${selectedTag.id()}\"]`);\n }\n setIndex(index, scrollToItem) {\n const $items = this.selectableItems();\n const $dropdown = $items.parent();\n if (index < 0) {\n index = $items.length - 1;\n } else if (index >= $items.length) {\n index = 0;\n }\n const $item = $items.eq(index);\n this.indexTag = app.store.getById('tags', $item.attr('data-index'));\n m.redraw();\n if (scrollToItem && this.indexTag) {\n const dropdownScroll = $dropdown.scrollTop();\n const dropdownTop = $dropdown.offset().top;\n const dropdownBottom = dropdownTop + $dropdown.outerHeight();\n const itemTop = $item.offset().top;\n const itemBottom = itemTop + $item.outerHeight();\n let scrollTop;\n if (itemTop < dropdownTop) {\n scrollTop = dropdownScroll - dropdownTop + itemTop - parseInt($dropdown.css('padding-top'), 10);\n } else if (itemBottom > dropdownBottom) {\n scrollTop = dropdownScroll - dropdownBottom + itemBottom + parseInt($dropdown.css('padding-bottom'), 10);\n }\n if (typeof scrollTop !== 'undefined') {\n $dropdown.stop(true).animate({\n scrollTop\n }, 100);\n }\n }\n }\n}\n\n/**\n * Catch invalid limits provided to the tag selection modal.\n */\nfunction catchInvalidLimits(limits) {\n if (limits.min.primary > limits.max.primary) {\n throw new Error('The minimum number of primary tags allowed cannot be more than the maximum number of primary tags allowed.');\n }\n if (limits.min.secondary > limits.max.secondary) {\n throw new Error('The minimum number of secondary tags allowed cannot be more than the maximum number of secondary tags allowed.');\n }\n if (limits.min.total > limits.max.primary + limits.max.secondary) {\n throw new Error('The minimum number of tags allowed cannot be more than the maximum number of primary and secondary tags allowed together.');\n }\n if (limits.max.total < limits.min.primary + limits.min.secondary) {\n throw new Error('The maximum number of tags allowed cannot be less than the minimum number of primary and secondary tags allowed together.');\n }\n if (limits.min.total > limits.max.total) {\n throw new Error('The minimum number of tags allowed cannot be more than the maximum number of tags allowed.');\n }\n}\nflarum.reg.add('flarum-tags', 'common/components/TagSelectionModal', TagSelectionModal);","import Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\n\n/**\n * @TODO move to core\n */\nexport default class ToggleButton extends Component {\n view(vnode) {\n const {\n className,\n isToggled,\n ...attrs\n } = this.attrs;\n const icon = isToggled ? 'far fa-check-circle' : 'far fa-circle';\n return m(Button, Object.assign({}, attrs, {\n icon: icon,\n className: classList([className, isToggled && 'Button--toggled'])\n }), vnode.children);\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/ToggleButton', ToggleButton);"],"names":["TagSelectionModal","constructor","super","arguments","this","initAttrs","attrs","title","trans","canSelect","allowResetting","limits","min","total","primary","secondary","max","Infinity","Error","catchInvalidLimits","oninit","vnode","navigator","onUp","setIndex","getCurrentNumericIndex","onDown","onSelect","select","bind","onRemove","selected","splice","length","load","then","tags","loading","selectableTags","selectedTags","map","addTag","indexTag","m","redraw","className","lengthWithCJK","text","char","test","content","filter","toLowerCase","primaryCount","secondaryCount","getFilteredTags","inputWidth","Math","getInstruction","focused","onclick","$","focus","tag","removeTag","onready","placeholder","bidi","style","width","onkeydown","navigate","onfocus","onblur","type","disabled","meetsRequirements","icon","id","pinned","position","child","parent","colored","color","includes","active","onmouseover","toggleTag","name","description","allowBypassing","bypassReqs","isToggled","requireParentTag","isPrimaryParent","push","index","indexOf","t","forEach","onDeselect","remaining","count","onsubmit","e","preventDefault","hide","metaKey","ctrlKey","click","getItem","dispatchEvent","Event","selectableItems","selectedTag","scrollToItem","$items","$dropdown","$item","eq","getById","attr","dropdownScroll","scrollTop","dropdownTop","offset","top","dropdownBottom","outerHeight","itemTop","itemBottom","parseInt","css","stop","animate","flarum","reg","add","ToggleButton","view","Object","assign","children"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/tags/js/dist/forum.js b/extensions/tags/js/dist/forum.js index 4700ce7ab..ba31cc886 100644 --- a/extensions/tags/js/dist/forum.js +++ b/extensions/tags/js/dist/forum.js @@ -1,2 +1,2 @@ -(()=>{var t,e,s={968:(t,e,s)=>{"use strict";s.d(e,{A:()=>o});var r=s(443),a=s.n(r);function o(t,e,s){void 0===e&&(e={}),void 0===s&&(s={});const r=t&&t.icon(),{useColor:o=!0}=s;return e.className=a()([e.className,"icon text-colored",r?t.icon():"TagIcon"]),t&&o?(e.style=e.style||{},e.style["--color"]=t.color()):t||(e.className+=" untagged"),r?m("i",e):m("span",e)}flarum.reg.add("flarum-tags","common/helpers/tagIcon",o)},339:(t,e,s)=>{"use strict";s.d(e,{A:()=>g});var r=s(414),a=s.n(r),o=s(88),n=s.n(o),i=s(443),l=s.n(i),c=s(296),u=s.n(c),d=s(968);function g(t,e){void 0===e&&(e={}),e.style=e.style||{},e.className="TagLabel "+(e.className||"");const s=a()(e,"link"),r=t?t.name():app.translator.trans("flarum-tags.lib.deleted_tag_text");if(t){const r=t.color();r&&(e.style["--tag-bg"]=r,e.className=l()(e.className,"colored",u()(r))),s&&(e.title=t.description()||"",e.href=app.route("tag",{tags:t.slug()})),t.isChild()&&(e.className+=" TagLabel--child")}else e.className+=" untagged";return m(s?n():"span",e,m("span",{className:"TagLabel-text"},t&&t.icon()&&(0,d.A)(t,{className:"TagLabel-icon"},{useColor:!1}),m("span",{className:"TagLabel-name"},r)))}flarum.reg.add("flarum-tags","common/helpers/tagLabel",g)},85:()=>{},618:(t,e,s)=>{"use strict";function r(t){return t.slice(0).sort(((t,e)=>{const s=t.position(),r=e.position();if(null===s&&null===r)return e.discussionCount()-t.discussionCount();if(null===r)return-1;if(null===s)return 1;const a=t.parent(),o=e.parent();return a===o?s-r:a&&o?a.position()-o.position():a?a===e?1:a.position()-r:o?o===t?-1:s-o.position():0}))}s.d(e,{A:()=>r}),flarum.reg.add("flarum-tags","common/utils/sortTags",r)},319:(t,e,s)=>{"use strict";s.d(e,{X:()=>At});var r=s(488),a=s.n(r),o=s(805),n=s(954),i=s.n(n);class l{constructor(){(0,o.A)(this,"loadedIncludes",void 0)}async load(t){if(void 0===t&&(t=[]),!this.loadedIncludes)return this.query(t);const e=t.filter((t=>!this.loadedIncludes.has(t)));return 0===e.length?Promise.resolve(i().store.all("tags")):this.query(e)}async query(t){return void 0===t&&(t=[]),this.loadedIncludes??=new Set,i().store.find("tags",{include:t.join(",")}).then((e=>{const s=Array.isArray(e)?e:[e];return t.forEach((t=>this.loadedIncludes.add(t))),s}))}}flarum.reg.add("flarum-tags","common/states/TagListState",l);const c=flarum.reg.get("core","common/extend"),u=flarum.reg.get("core","forum/components/IndexSidebar");var d=s.n(u);const g=flarum.reg.get("core","common/components/Separator");var f=s.n(g);const p=flarum.reg.get("core","common/components/LinkButton");var h=s.n(p),b=s(88),v=s.n(b),T=s(443),y=s.n(T),x=s(968);class A extends(h()){view(t){const e=this.attrs.model,s=e&&e.description(),r=y()("TagLinkButton hasIcon",{child:e.isChild()},this.attrs.className);return m(v(),{className:r,href:this.attrs.route,style:e?{"--color":e.color()}:void 0,title:s||void 0},(0,x.A)(e,{className:"Button-icon"}),m("span",{className:"Button-label"},e?e.name():app.translator.trans("flarum-tags.forum.index.untagged_link")))}static initAttrs(t){super.initAttrs(t);const e=t.model;t.params.tags=e?e.slug():"untagged",t.route=app.route("tag",t.params)}}flarum.reg.add("flarum-tags","forum/components/TagLinkButton",A);const N=flarum.reg.get("core","common/components/Page");var w=s.n(N);const _=flarum.reg.get("core","forum/components/PageStructure");var C=s.n(_);const k=flarum.reg.get("core","forum/components/WelcomeHero");var P=s.n(k),S=s(661),D=s.n(S);const L=flarum.reg.get("core","common/utils/ItemList");var I=s.n(L);const M=flarum.reg.get("core","common/helpers/humanTime");var j=s.n(M),E=s(296),B=s.n(E),V=s(233),H=s.n(V),O=s(339),R=s(618);class q extends(w()){constructor(){super(...arguments),(0,o.A)(this,"tags",void 0),(0,o.A)(this,"loading",void 0)}oninit(t){super.oninit(t),a().history.push("tags",H()(a().translator.trans("flarum-tags.forum.header.back_to_tags_tooltip"))),a().current.set("noTagsList",!0),this.tags=[];const e=a().preloadedApiDocument();e?this.tags=(0,R.A)(e.filter((t=>!t.isChild()))):(this.loading=!0,a().tagList.load(["children","lastPostedDiscussion","parent"]).then((()=>{this.tags=(0,R.A)(a().store.all("tags").filter((t=>!t.isChild()))),this.loading=!1,m.redraw()})))}oncreate(t){super.oncreate(t),a().setTitle(H()(a().translator.trans("flarum-tags.forum.all_tags.meta_title_text"))),a().setTitleCount(0)}view(){return m(C(),{className:"TagsPage Page--vertical",hero:this.hero.bind(this),sidebar:this.sidebar.bind(this)},this.contentItems().toArray())}contentItems(){const t=new(I());if(this.loading)t.add("loading",m(D(),null));else{const e=this.tags.filter((t=>null!==t.position())),s=this.tags.filter((t=>null===t.position()));t.add("tagTiles",this.tagTileListView(e),100),s.length&&t.add("cloud",this.cloudView(s),10)}return t}hero(){return m(P(),null)}sidebar(){return m(d(),null)}tagTileListView(t){return m("ul",{className:"TagTiles"},t.map(this.tagTileView.bind(this)))}tagTileView(t){const e=t.lastPostedDiscussion(),s=(0,R.A)(t.children()||[]);return m("li",{className:y()("TagTile",{colored:t.color()},B()(t.color())),style:{"--tag-bg":t.color()}},m(v(),{className:"TagTile-info",href:a().route.tag(t)},m("div",{className:"TagTile-heading"},t.icon()&&(0,x.A)(t,{},{useColor:!1}),m("h3",{className:"TagTile-name"},t.name())),m("p",{className:"TagTile-description"},t.description()),!!s&&m("div",{className:"TagTile-children"},s.map((t=>[m(v(),{href:a().route.tag(t)},t.name())," "])))),e?m(v(),{className:"TagTile-lastPostedDiscussion",href:a().route.discussion(e,e.lastPostNumber())},m("span",{className:"TagTile-lastPostedDiscussion-title"},e.title()),j()(e.lastPostedAt())):m("span",{className:"TagTile-lastPostedDiscussion"}))}cloudView(t){return m("div",{className:"TagCloud"},t.map((t=>[(0,O.A)(t,{link:!0})," "])))}}flarum.reg.add("flarum-tags","forum/components/TagsPage",q);const $=flarum.reg.get("core","forum/components/IndexPage");var G=s.n($);const F=flarum.reg.get("core","forum/states/DiscussionListState");var K=s.n(F);const U=flarum.reg.get("core","forum/states/GlobalSearchState");var X=s.n(U),z=s(950),W=s.n(z);class J extends(W()){view(){const t=this.attrs.model,e=t.color();return m("header",{className:y()("Hero","TagHero",{"TagHero--colored":e,[B()(e)]:e}),style:e?{"--hero-bg":e}:void 0},m("div",{className:"container"},m("div",{className:"containerNarrow"},m("h1",{className:"Hero-title"},t.icon()&&(0,x.A)(t,{},{useColor:!1})," ",t.name()),m("div",{className:"Hero-subtitle"},t.description()))))}}flarum.reg.add("flarum-tags","forum/components/TagHero",J);const Q=t=>a().store.all("tags").find((e=>0===e.slug().localeCompare(t,void 0,{sensitivity:"base"}))),Y=flarum.reg.get("core","forum/components/DiscussionListItem");var Z=s.n(Y);const tt=flarum.reg.get("core","forum/components/DiscussionHero");var et=s.n(tt);function st(t,e){void 0===e&&(e={});const s=[],{link:r,...a}=e;return a.className=y()("TagsLabel",a.className),t?(0,R.A)(t).forEach((e=>{(e||1===t.length)&&s.push((0,O.A)(e,{link:r}))})):s.push((0,O.A)()),m("span",a,s)}s(414),flarum.reg.add("flarum-tags","common/helpers/tagsLabel",st);const rt=flarum.reg.get("core","forum/utils/DiscussionControls");var at=s.n(rt),ot=s(336),nt=s.n(ot);flarum.reg.addChunkModule("371","440","flarum-tags","forum/components/TagDiscussionModal"),flarum.reg.addChunkModule("371","440","flarum-tags","common/components/TagSelectionModal"),flarum.reg.addChunkModule("371","440","flarum-tags","forum/components/ToggleButton");var it=s(838);const lt=flarum.reg.get("core","common/extenders");var ct=s.n(lt);const ut=flarum.reg.get("core","common/models/Discussion");var mt=s.n(ut);const dt=flarum.reg.get("core","forum/components/EventPost");var gt=s.n(dt);class ft extends(gt()){static initAttrs(t){super.initAttrs(t);const e=t.post.content()[0],s=t.post.content()[1];function r(t,e){return t.filter((t=>-1===e.indexOf(t))).map((t=>app.store.getById("tags",t)))}t.tagsAdded=r(s,e),t.tagsRemoved=r(e,s)}icon(){return"fas fa-tag"}descriptionKey(){return this.attrs.tagsAdded.length?this.attrs.tagsRemoved.length?"flarum-tags.forum.post_stream.added_and_removed_tags_text":"flarum-tags.forum.post_stream.added_tags_text":"flarum-tags.forum.post_stream.removed_tags_text"}descriptionData(){const t={};return this.attrs.tagsAdded.length&&(t.tagsAdded=app.translator.trans("flarum-tags.forum.post_stream.tags_text",{tags:st(this.attrs.tagsAdded,{link:!0}),count:this.attrs.tagsAdded.length})),this.attrs.tagsRemoved.length&&(t.tagsRemoved=app.translator.trans("flarum-tags.forum.post_stream.tags_text",{tags:st(this.attrs.tagsRemoved,{link:!0}),count:this.attrs.tagsRemoved.length})),t}}flarum.reg.add("flarum-tags","forum/components/DiscussionTaggedPost",ft);const pt=flarum.reg.get("core","common/utils/computed");var ht=s.n(pt);const bt=flarum.reg.get("core","common/Model");var vt=s.n(bt);class Tt extends(vt()){name(){return vt().attribute("name").call(this)}slug(){return vt().attribute("slug").call(this)}description(){return vt().attribute("description").call(this)}color(){return vt().attribute("color").call(this)}backgroundUrl(){return vt().attribute("backgroundUrl").call(this)}backgroundMode(){return vt().attribute("backgroundMode").call(this)}icon(){return vt().attribute("icon").call(this)}position(){return vt().attribute("position").call(this)}parent(){return vt().hasOne("parent").call(this)}children(){return vt().hasMany("children").call(this)}defaultSort(){return vt().attribute("defaultSort").call(this)}isChild(){return vt().attribute("isChild").call(this)}isHidden(){return vt().attribute("isHidden").call(this)}isPrimary(){return vt().attribute("isPrimary").call(this)}discussionCount(){return vt().attribute("discussionCount").call(this)}lastPostedAt(){return vt().attribute("lastPostedAt",vt().transformDate).call(this)}lastPostedDiscussion(){return vt().hasOne("lastPostedDiscussion").call(this)}isRestricted(){return vt().attribute("isRestricted").call(this)}canStartDiscussion(){return vt().attribute("canStartDiscussion").call(this)}canAddToDiscussion(){return vt().attribute("canAddToDiscussion").call(this)}isPrimaryParent(){return ht()("position","parent",((t,e)=>null!==t&&!1===e)).call(this)}}flarum.reg.add("flarum-tags","common/models/Tag",Tt);const yt=flarum.reg.get("core","common/query/IGambit");class xt extends yt.KeyValueGambit{constructor(){super(...arguments),(0,o.A)(this,"predicates",!0)}key(){return i().translator.trans("flarum-tags.lib.gambits.discussions.tag.key",{},!0)}hint(){return i().translator.trans("flarum-tags.lib.gambits.discussions.tag.hint",{},!0)}filterKey(){return"tag"}gambitValueToFilterValue(t){return[t]}fromFilter(t,e){let s=[];return Array.isArray(t)?(s=t.map((t=>this.fromFilter(t.toString(),e))),s.join(" ")):`${e?"-":""}${this.key()}:${this.filterValueToGambitValue(t)}`}filterValueToGambitValue(t){return t}}flarum.reg.add("flarum-tags","common/query/discussions/TagGambit",xt);const At=[(new(ct().Store)).add("tags",Tt),(new(ct().Search)).gambit("discussions",xt),(new(ct().Routes)).add("tags","/tags",q).add("tag","/t/:tags",G()).helper("tag",(t=>a().route("tag",{tags:t.slug()}))),(new(ct().PostTypes)).add("discussionTagged",ft),new(ct().Model)(mt()).hasMany("tags").attribute("canTag")];a().initializers.add("flarum-tags",(()=>{a().tagList=new l,(0,c.extend)(d().prototype,"navItems",(function(t){if(t.add("tags",m(h(),{icon:"fas fa-th-large",href:a().route("tags")},a().translator.trans("flarum-tags.forum.index.tags_link")),-10),a().current.get("noTagsList"))return;t.add("separator",m(f(),null),-12);const e=a().search.state.stickyParams(),s=a().store.all("tags"),r=a().currentTag(),o=s=>{let a=r===s;!a&&r&&(a=r.parent()===s),t.add("tag"+s.id(),m(A,{model:s,params:e,active:a},s?.name()),-14)};(0,R.A)(s).filter((t=>null!==t.position()&&(!t.isChild()||r&&(t.parent()===r||t.parent()===r.parent())))).forEach(o);const n=s.filter((t=>null===t.position())).sort(((t,e)=>e.discussionCount()-t.discussionCount()));n.splice(0,3).forEach(o),n.length&&t.add("moreTags",m(h(),{href:a().route("tags")},a().translator.trans("flarum-tags.forum.index.more_link")),-16)})),a().currentTag=function(t){if(this.currentActiveTag&&!t)return this.currentActiveTag;const e=this.search.state.params().tags;let s=null;if(e&&(s=Q(e)),e&&!s||s&&!s.isChild()&&!s.children()){if(this.currentTagLoading)return;this.currentTagLoading=!0,this.store.find("tags",e,{include:"children,children.parent,parent"}).then((()=>{this.currentActiveTag=Q(e),m.redraw()})).finally((()=>{this.currentTagLoading=!1}))}if(s)return this.currentActiveTag=s,this.currentActiveTag;this.currentActiveTag=void 0},(0,c.extend)(G().prototype,"view",(function(t){a().currentTag(!0)})),(0,c.override)(G().prototype,"hero",(function(t){const e=a().currentTag();return e?m(J,{model:e}):t()})),(0,c.extend)(G().prototype,"view",(function(t){const e=a().currentTag();e&&(t.attrs.className+=" IndexPage--tag"+e.id())})),(0,c.extend)(G().prototype,"setTitle",(function(){const t=a().currentTag();t&&a().setTitle(t.name())})),(0,c.extend)(d().prototype,"items",(function(t){const e=a().currentTag();if(e){const s=e.color(),r=e.canStartDiscussion()||!a().session.user,o=t.get("newDiscussion");s&&(o.attrs.className=y()([o.attrs.className,"Button--tagColored",B()(s)]),o.attrs.style={"--color":s}),o.attrs.disabled=!r,o.children=a().translator.trans(r?"core.forum.index.start_discussion_button":"core.forum.index.cannot_start_discussion_button")}})),(0,c.extend)(X().prototype,"params",(function(t){t.tags=m.route.param("tags")})),(0,c.extend)(K().prototype,"requestParams",(function(t){"string"==typeof t.include?t.include=[t.include]:t.include?.push("tags","tags.parent"),this.params.tags&&(t.filter||={},t.filter.tag=this.params.tags)})),(0,c.extend)(Z().prototype,"infoItems",(function(t){const e=this.attrs.discussion.tags();e&&e.length&&t.add("tags",st(e),10)})),(0,c.extend)(et().prototype,"view",(function(t){const e=(0,R.A)(this.attrs.discussion.tags());if(e&&e.length){const s=e[0].color();s&&(t.attrs.style={"--hero-bg":s},t.attrs.className=y()(t.attrs.className,"DiscussionHero--colored",B()(s)))}})),(0,c.extend)(et().prototype,"items",(function(t){const e=this.attrs.discussion.tags();e&&e.length&&t.add("tags",st(e,{link:!0}),5)})),(0,c.extend)(at(),"moderationControls",(function(t,e){e.canTag()&&t.add("tags",m(nt(),{icon:"fas fa-tag",onclick:()=>app.modal.show((()=>s.e(371).then(s.bind(s,440))),{discussion:e})},app.translator.trans("flarum-tags.forum.discussion_controls.edit_tags_button")))})),(0,c.extend)(d().prototype,"newDiscussionAction",(function(t){const e=a().currentTag();if(e){const s=e.parent(),r=s?[s,e]:[e];t.then((t=>t.fields.tags=r))}else a().composer.fields.tags=[]})),(0,c.extend)("flarum/forum/components/DiscussionComposer","oninit",(function(){a().tagList.load(["parent"]).then((()=>m.redraw())),this.constructor.prototype.chooseTags=function(){(0,it.A)().length&&a().modal.show((()=>s.e(371).then(s.bind(s,440))),{selectedTags:(this.composer.fields.tags||[]).slice(0),onsubmit:t=>{this.composer.fields.tags=t,this.$("textarea").focus()}})}})),(0,c.extend)("flarum/forum/components/DiscussionComposer","headerItems",(function(t){const e=this.composer.fields.tags||[],s=(0,it.A)();t.add("tags",m(nt(),{className:y()(["DiscussionComposer-changeTags","Button Button--ua-reset",!s.length&&"disabled"]),onclick:this.chooseTags.bind(this)},e.length?st(e):m("span",{className:"TagLabel untagged"},a().translator.trans("flarum-tags.forum.composer_discussion.choose_tags_link"))),10)})),(0,c.override)("flarum/forum/components/DiscussionComposer","onsubmit",(function(t){const e=this.composer.fields.tags||[],r=e.filter((t=>null!==t.position()&&!t.isChild())),o=e.filter((t=>null===t.position())),n=(0,it.A)(),i=parseInt(a().forum.attribute("minPrimaryTags")),l=parseInt(a().forum.attribute("minSecondaryTags")),c=parseInt(a().forum.attribute("maxPrimaryTags")),u=parseInt(a().forum.attribute("maxSecondaryTags"));(!e.length&&0!==c&&0!==u||r.lengths.e(371).then(s.bind(s,440))),{selectedTags:e,onsubmit:e=>{this.composer.fields.tags=e,t()}}):t()})),(0,c.extend)("flarum/forum/components/DiscussionComposer","data",(function(t){t.relationships=t.relationships||{},t.relationships.tags=this.composer.fields.tags}))}))},838:(t,e,s)=>{"use strict";function r(t){let e=app.store.all("tags");if(t){const s=t.tags()||[];e=e.filter((t=>t.canAddToDiscussion()||s.includes(t)))}else e=e.filter((t=>t.canStartDiscussion()));return e}s.d(e,{A:()=>r}),flarum.reg.add("flarum-tags","forum/utils/getSelectableTags",r)},950:t=>{"use strict";t.exports=flarum.reg.get("core","common/Component")},954:t=>{"use strict";t.exports=flarum.reg.get("core","common/app")},336:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Button")},15:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/FormModal")},88:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Link")},661:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/LoadingIndicator")},607:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/highlight")},296:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/textContrastClass")},280:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/KeyboardNavigatable")},821:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/Stream")},443:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/classList")},414:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extract")},233:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extractText")},488:t=>{"use strict";t.exports=flarum.reg.get("core","forum/app")},137:t=>{"use strict";t.exports=flarum.reg.get("core","forum/components/DiscussionPage")},805:(t,e,s)=>{"use strict";function r(t){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function a(t,e,s){return(e=function(t){var e=function(t){if("object"!=r(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var s=e.call(t,"string");if("object"!=r(s))return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==r(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:s,enumerable:!0,configurable:!0,writable:!0}):t[e]=s,t}s.d(e,{A:()=>a})}},r={};function a(t){flarum.reg._webpack_runtimes["flarum-tags"]||=a;var e=r[t];if(void 0!==e)return e.exports;var o=r[t]={exports:{}};return s[t](o,o.exports,a),o.exports}a.m=s,a.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return a.d(e,{a:e}),e},a.d=(t,e)=>{for(var s in e)a.o(e,s)&&!a.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:e[s]})},a.f={},a.e=t=>Promise.all(Object.keys(a.f).reduce(((e,s)=>(a.f[s](t,e),e)),[])),a.u=t=>"forum/components/TagDiscussionModal.js",a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t={},e="module.exports:",a.l=(s,r,o,n)=>{if(t[s])t[s].push(r);else{var i,l;if(void 0!==o)for(var c=document.getElementsByTagName("script"),u=0;u{i.onerror=i.onload=null,clearTimeout(g);var a=t[s];if(delete t[s],i.parentNode&&i.parentNode.removeChild(i),a&&a.forEach((t=>t(r))),e)return e(r)},g=setTimeout(d.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=d.bind(null,i.onerror),i.onload=d.bind(null,i.onload),l&&document.head.appendChild(i)}},a.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;a.g.importScripts&&(t=a.g.location+"");var e=a.g.document;if(!t&&e&&(e.currentScript&&"SCRIPT"===e.currentScript.tagName.toUpperCase()&&(t=e.currentScript.src),!t)){var s=e.getElementsByTagName("script");if(s.length)for(var r=s.length-1;r>-1&&(!t||!/^http(s?):/.test(t));)t=s[r--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=t})(),a.f.compat=(t,e)=>{const s=a.l;a.l=flarum.reg.loadChunk.bind(flarum.reg,s)},(()=>{var t={170:0};a.f.j=(e,s)=>{var r=a.o(t,e)?t[e]:void 0;if(0!==r)if(r)s.push(r[2]);else{var o=new Promise(((s,a)=>r=t[e]=[s,a]));s.push(r[2]=o);var n=a.p+a.u(e),i=new Error;a.l(n,(s=>{if(a.o(t,e)&&(0!==(r=t[e])&&(t[e]=void 0),r)){var o=s&&("load"===s.type?"missing":s.type),n=s&&s.target&&s.target.src;i.message="Loading chunk "+e+" failed.\n("+o+": "+n+")",i.name="ChunkLoadError",i.type=o,i.request=n,r[1](i)}}),"chunk-"+e,e)}};var e=(e,s)=>{var r,o,[n,i,l]=s,c=0;if(n.some((e=>0!==t[e]))){for(r in i)a.o(i,r)&&(a.m[r]=i[r]);l&&l(a)}for(e&&e(s);c{"use strict";a.r(o),a.d(o,{extend:()=>s.X});var t=a(85),e={};for(const s in t)"default"!==s&&(e[s]=()=>t[s]);a.d(o,e);var s=a(319)})(),module.exports=o})(); +(()=>{var t,e,r={8968:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(8443),o=r.n(n);function a(t,e,r){void 0===e&&(e={}),void 0===r&&(r={});const n=t&&t.icon(),{useColor:a=!0}=r;return e.className=o()([e.className,"icon text-colored",n?t.icon():"TagIcon"]),t&&a?(e.style=e.style||{},e.style["--color"]=t.color()):t||(e.className+=" untagged"),n?m("i",e):m("span",e)}flarum.reg.add("flarum-tags","common/helpers/tagIcon",a)},339:(t,e,r)=>{"use strict";r.d(e,{A:()=>f});var n=r(9414),o=r.n(n),a=r(2088),s=r.n(a),i=r(8443),l=r.n(i),u=r(8296),c=r.n(u),d=r(8968);function f(t,e){void 0===e&&(e={}),e.style=e.style||{},e.className="TagLabel "+(e.className||"");const r=o()(e,"link"),n=t?t.name():app.translator.trans("flarum-tags.lib.deleted_tag_text");if(t){const n=t.color();n&&(e.style["--tag-bg"]=n,e.className=l()(e.className,"colored",c()(n))),r&&(e.title=t.description()||"",e.href=app.route("tag",{tags:t.slug()})),t.isChild()&&(e.className+=" TagLabel--child")}else e.className+=" untagged";return m(r?s():"span",e,m("span",{className:"TagLabel-text"},t&&t.icon()&&(0,d.A)(t,{className:"TagLabel-icon"},{useColor:!1}),m("span",{className:"TagLabel-name"},n)))}flarum.reg.add("flarum-tags","common/helpers/tagLabel",f)},4085:()=>{},1618:(t,e,r)=>{"use strict";function n(t){return t.slice(0).sort(((t,e)=>{const r=t.position(),n=e.position();if(null===r&&null===n)return e.discussionCount()-t.discussionCount();if(null===n)return-1;if(null===r)return 1;const o=t.parent(),a=e.parent();return o===a?r-n:o&&a?o.position()-a.position():o?o===e?1:o.position()-n:a?a===t?-1:r-a.position():0}))}r.d(e,{A:()=>n}),flarum.reg.add("flarum-tags","common/utils/sortTags",n)},4319:(t,e,r)=>{"use strict";r.d(e,{X:()=>Tt});var n=r(488),o=r.n(n),a=r(8805),s=r(954),i=r.n(s);class l{constructor(){(0,a.A)(this,"loadedIncludes",void 0)}async load(t){if(void 0===t&&(t=[]),!this.loadedIncludes)return this.query(t);const e=t.filter((t=>!this.loadedIncludes.has(t)));return 0===e.length?Promise.resolve(i().store.all("tags")):this.query(e)}async query(t){return void 0===t&&(t=[]),this.loadedIncludes??=new Set,i().store.find("tags",{include:t.join(",")}).then((e=>{const r=Array.isArray(e)?e:[e];return t.forEach((t=>this.loadedIncludes.add(t))),r}))}}flarum.reg.add("flarum-tags","common/states/TagListState",l);const u=flarum.reg.get("core","common/extend"),c=flarum.reg.get("core","forum/components/IndexSidebar");var d=r.n(c);const f=flarum.reg.get("core","common/components/Separator");var g=r.n(f);const p=flarum.reg.get("core","common/components/LinkButton");var h=r.n(p),v=r(2088),y=r.n(v),b=r(8443),w=r.n(b),x=r(8968);class T extends(h()){view(t){const e=this.attrs.model,r=e&&e.description(),n=w()("TagLinkButton hasIcon",{child:e.isChild()},this.attrs.className);return m(y(),{className:n,href:this.attrs.route,style:e?{"--color":e.color()}:void 0,title:r||void 0},(0,x.A)(e,{className:"Button-icon"}),m("span",{className:"Button-label"},e?e.name():app.translator.trans("flarum-tags.forum.index.untagged_link")))}static initAttrs(t){super.initAttrs(t);const e=t.model;t.params.tags=e?e.slug():"untagged",t.route=app.route("tag",t.params)}}flarum.reg.add("flarum-tags","forum/components/TagLinkButton",T);const k=flarum.reg.get("core","common/components/Page");var A=r.n(k);const S=flarum.reg.get("core","forum/components/PageStructure");var N=r.n(S);const C=flarum.reg.get("core","forum/components/WelcomeHero");var P=r.n(C),_=r(6661),L=r.n(_);const E=flarum.reg.get("core","common/utils/ItemList");var I=r.n(E);const D=flarum.reg.get("core","common/helpers/humanTime");var j=r.n(D),O=r(8296),z=r.n(O),R=r(5233),$=r.n(R),M=r(339),H=r(1618);class F extends(A()){constructor(){super(...arguments),(0,a.A)(this,"tags",void 0),(0,a.A)(this,"loading",void 0)}oninit(t){super.oninit(t),o().history.push("tags",$()(o().translator.trans("flarum-tags.forum.header.back_to_tags_tooltip"))),o().current.set("noTagsList",!0),this.tags=[];const e=o().preloadedApiDocument();e?this.tags=(0,H.A)(e.filter((t=>!t.isChild()))):(this.loading=!0,o().tagList.load(["children","lastPostedDiscussion","parent"]).then((()=>{this.tags=(0,H.A)(o().store.all("tags").filter((t=>!t.isChild()))),this.loading=!1,m.redraw()})))}oncreate(t){super.oncreate(t),o().setTitle($()(o().translator.trans("flarum-tags.forum.all_tags.meta_title_text"))),o().setTitleCount(0)}view(){return m(N(),{className:"TagsPage Page--vertical",hero:this.hero.bind(this),sidebar:this.sidebar.bind(this)},this.contentItems().toArray())}contentItems(){const t=new(I());if(this.loading)t.add("loading",m(L(),null));else{const e=this.tags.filter((t=>null!==t.position())),r=this.tags.filter((t=>null===t.position()));t.add("tagTiles",this.tagTileListView(e),100),r.length&&t.add("cloud",this.cloudView(r),10)}return t}hero(){return m(P(),null)}sidebar(){return m(d(),null)}tagTileListView(t){return m("ul",{className:"TagTiles"},t.map(this.tagTileView.bind(this)))}tagTileView(t){const e=t.lastPostedDiscussion(),r=(0,H.A)(t.children()||[]);return m("li",{className:w()("TagTile",{colored:t.color()},z()(t.color())),style:{"--tag-bg":t.color()}},m(y(),{className:"TagTile-info",href:o().route.tag(t)},m("div",{className:"TagTile-heading"},t.icon()&&(0,x.A)(t,{},{useColor:!1}),m("h3",{className:"TagTile-name"},t.name())),m("p",{className:"TagTile-description"},t.description()),!!r&&m("div",{className:"TagTile-children"},r.map((t=>[m(y(),{href:o().route.tag(t)},t.name())," "])))),e?m(y(),{className:"TagTile-lastPostedDiscussion",href:o().route.discussion(e,e.lastPostNumber())},m("span",{className:"TagTile-lastPostedDiscussion-title"},e.title()),j()(e.lastPostedAt())):m("span",{className:"TagTile-lastPostedDiscussion"}))}cloudView(t){return m("div",{className:"TagCloud"},t.map((t=>[(0,M.A)(t,{link:!0})," "])))}}flarum.reg.add("flarum-tags","forum/components/TagsPage",F);const q=flarum.reg.get("core","forum/components/IndexPage");var B=r.n(q);const V=flarum.reg.get("core","forum/states/DiscussionListState");var U=r.n(V);const K=flarum.reg.get("core","forum/states/GlobalSearchState");var G=r.n(K),J=r(4950),X=r.n(J);r(5099);class Q extends(X()){view(){const t=this.attrs.model.color();return m("header",{className:w()("Hero","TagHero",{"TagHero--colored":t,[z()(t)]:t}),style:t?{"--hero-bg":t}:void 0},m("div",{className:"container"},this.viewItems().toArray()))}viewItems(){const t=new(I());return t.add("content",m("div",{className:"containerNarrow"},this.contentItems().toArray()),80),t}contentItems(){const t=new(I()),e=this.attrs.model;return t.add("tag-title",m("h1",{className:"Hero-title"},e.icon()&&(0,x.A)(e,{},{useColor:!1})," ",e.name()),100),t.add("tag-subtitle",m("div",{className:"Hero-subtitle"},e.description()),90),t}}flarum.reg.add("flarum-tags","forum/components/TagHero",Q);const W=t=>o().store.all("tags").find((e=>0===e.slug().localeCompare(t,void 0,{sensitivity:"base"}))),Y=flarum.reg.get("core","forum/components/DiscussionListItem");var Z=r.n(Y);const tt=flarum.reg.get("core","forum/components/DiscussionHero");var et=r.n(tt);function rt(t,e){void 0===e&&(e={});const r=[],{link:n,...o}=e;return o.className=w()("TagsLabel",o.className),t?(0,H.A)(t).forEach((e=>{(e||1===t.length)&&r.push((0,M.A)(e,{link:n}))})):r.push((0,M.A)()),m("span",o,r)}r(9414),flarum.reg.add("flarum-tags","common/helpers/tagsLabel",rt);const nt=flarum.reg.get("core","forum/utils/DiscussionControls");var ot=r.n(nt),at=r(5336),st=r.n(at);flarum.reg.addChunkModule("371","2440","flarum-tags","forum/components/TagDiscussionModal"),flarum.reg.addChunkModule("371","2440","flarum-tags","common/components/TagSelectionModal"),flarum.reg.addChunkModule("371","2440","flarum-tags","forum/components/ToggleButton");var it=r(3838);const lt=flarum.reg.get("core","common/extenders");var ut=r.n(lt);const ct=flarum.reg.get("core","common/models/Discussion");var dt=r.n(ct);const ft=flarum.reg.get("core","forum/components/EventPost");var mt=r.n(ft);class gt extends(mt()){static initAttrs(t){super.initAttrs(t);const e=t.post.content()[0],r=t.post.content()[1];function n(t,e){return t.filter((t=>-1===e.indexOf(t))).map((t=>app.store.getById("tags",t)))}t.tagsAdded=n(r,e),t.tagsRemoved=n(e,r)}icon(){return"fas fa-tag"}descriptionKey(){return this.attrs.tagsAdded.length?this.attrs.tagsRemoved.length?"flarum-tags.forum.post_stream.added_and_removed_tags_text":"flarum-tags.forum.post_stream.added_tags_text":"flarum-tags.forum.post_stream.removed_tags_text"}descriptionData(){const t={};return this.attrs.tagsAdded.length&&(t.tagsAdded=app.translator.trans("flarum-tags.forum.post_stream.tags_text",{tags:rt(this.attrs.tagsAdded,{link:!0}),count:this.attrs.tagsAdded.length})),this.attrs.tagsRemoved.length&&(t.tagsRemoved=app.translator.trans("flarum-tags.forum.post_stream.tags_text",{tags:rt(this.attrs.tagsRemoved,{link:!0}),count:this.attrs.tagsRemoved.length})),t}}flarum.reg.add("flarum-tags","forum/components/DiscussionTaggedPost",gt);const pt=flarum.reg.get("core","common/utils/computed");var ht=r.n(pt);const vt=flarum.reg.get("core","common/Model");var yt=r.n(vt);class bt extends(yt()){name(){return yt().attribute("name").call(this)}slug(){return yt().attribute("slug").call(this)}description(){return yt().attribute("description").call(this)}color(){return yt().attribute("color").call(this)}backgroundUrl(){return yt().attribute("backgroundUrl").call(this)}backgroundMode(){return yt().attribute("backgroundMode").call(this)}icon(){return yt().attribute("icon").call(this)}position(){return yt().attribute("position").call(this)}parent(){return yt().hasOne("parent").call(this)}children(){return yt().hasMany("children").call(this)}defaultSort(){return yt().attribute("defaultSort").call(this)}isChild(){return yt().attribute("isChild").call(this)}isHidden(){return yt().attribute("isHidden").call(this)}isPrimary(){return yt().attribute("isPrimary").call(this)}discussionCount(){return yt().attribute("discussionCount").call(this)}lastPostedAt(){return yt().attribute("lastPostedAt",yt().transformDate).call(this)}lastPostedDiscussion(){return yt().hasOne("lastPostedDiscussion").call(this)}isRestricted(){return yt().attribute("isRestricted").call(this)}canStartDiscussion(){return yt().attribute("canStartDiscussion").call(this)}canAddToDiscussion(){return yt().attribute("canAddToDiscussion").call(this)}isPrimaryParent(){return ht()("position","parent",((t,e)=>null!==t&&!1===e)).call(this)}}flarum.reg.add("flarum-tags","common/models/Tag",bt);const wt=flarum.reg.get("core","common/query/IGambit");class xt extends wt.KeyValueGambit{constructor(){super(...arguments),(0,a.A)(this,"predicates",!0)}key(){return i().translator.trans("flarum-tags.lib.gambits.discussions.tag.key",{},!0)}hint(){return i().translator.trans("flarum-tags.lib.gambits.discussions.tag.hint",{},!0)}filterKey(){return"tag"}gambitValueToFilterValue(t){return[t]}fromFilter(t,e){let r=[];return Array.isArray(t)?(r=t.map((t=>this.fromFilter(t.toString(),e))),r.join(" ")):`${e?"-":""}${this.key()}:${this.filterValueToGambitValue(t)}`}filterValueToGambitValue(t){return t}}flarum.reg.add("flarum-tags","common/query/discussions/TagGambit",xt);const Tt=[(new(ut().Store)).add("tags",bt),(new(ut().Search)).gambit("discussions",xt),(new(ut().Routes)).add("tags","/tags",F).add("tag","/t/:tags",B()).helper("tag",(t=>o().route("tag",{tags:t.slug()}))),(new(ut().PostTypes)).add("discussionTagged",gt),new(ut().Model)(dt()).hasMany("tags").attribute("canTag")];o().initializers.add("flarum-tags",(()=>{o().tagList=new l,(0,u.extend)(d().prototype,"navItems",(function(t){if(t.add("tags",m(h(),{icon:"fas fa-th-large",href:o().route("tags")},o().translator.trans("flarum-tags.forum.index.tags_link")),-10),o().current.get("noTagsList"))return;t.add("separator",m(g(),null),-12);const e=o().search.state.stickyParams(),r=o().store.all("tags"),n=o().currentTag(),a=r=>{let o=n===r;!o&&n&&(o=n.parent()===r),t.add("tag"+r.id(),m(T,{model:r,params:e,active:o},r?.name()),-14)};(0,H.A)(r).filter((t=>null!==t.position()&&(!t.isChild()||n&&(t.parent()===n||t.parent()===n.parent())))).forEach(a);const s=r.filter((t=>null===t.position())).sort(((t,e)=>e.discussionCount()-t.discussionCount()));s.splice(0,3).forEach(a),s.length&&t.add("moreTags",m(h(),{href:o().route("tags")},o().translator.trans("flarum-tags.forum.index.more_link")),-16)})),o().currentTag=function(t){if(this.currentActiveTag&&!t)return this.currentActiveTag;const e=this.search.state.params().tags;let r=null;if(e&&(r=W(e)),e&&!r||r&&!r.isChild()&&!r.children()){if(this.currentTagLoading)return;this.currentTagLoading=!0,this.store.find("tags",e,{include:"children,children.parent,parent"}).then((()=>{this.currentActiveTag=W(e),m.redraw()})).finally((()=>{this.currentTagLoading=!1}))}if(r)return this.currentActiveTag=r,this.currentActiveTag;this.currentActiveTag=void 0},(0,u.extend)(B().prototype,"view",(function(t){o().currentTag(!0)})),(0,u.override)(B().prototype,"hero",(function(t){const e=o().currentTag();return e?m(Q,{model:e}):t()})),(0,u.extend)(B().prototype,"view",(function(t){const e=o().currentTag();e&&(t.attrs.className+=" IndexPage--tag"+e.id())})),(0,u.extend)(B().prototype,"setTitle",(function(){const t=o().currentTag();t&&o().setTitle(t.name())})),(0,u.extend)(d().prototype,"items",(function(t){const e=o().currentTag();if(e){const r=e.color(),n=e.canStartDiscussion()||!o().session.user,a=t.get("newDiscussion");r&&(a.attrs.className=w()([a.attrs.className,"Button--tagColored",z()(r)]),a.attrs.style={"--color":r}),a.attrs.disabled=!n,a.children=o().translator.trans(n?"core.forum.index.start_discussion_button":"core.forum.index.cannot_start_discussion_button")}})),(0,u.extend)(G().prototype,"params",(function(t){t.tags=m.route.param("tags")})),(0,u.extend)(U().prototype,"requestParams",(function(t){"string"==typeof t.include?t.include=[t.include]:t.include?.push("tags","tags.parent"),this.params.tags&&(t.filter||={},t.filter.tag=this.params.tags)})),(0,u.extend)(Z().prototype,"infoItems",(function(t){const e=this.attrs.discussion.tags();e&&e.length&&t.add("tags",rt(e),10)})),(0,u.extend)(et().prototype,"view",(function(t){const e=(0,H.A)(this.attrs.discussion.tags());if(e&&e.length){const r=e[0].color();r&&(t.attrs.style={"--hero-bg":r},t.attrs.className=w()(t.attrs.className,"DiscussionHero--colored",z()(r)))}})),(0,u.extend)(et().prototype,"items",(function(t){const e=this.attrs.discussion.tags();e&&e.length&&t.add("tags",rt(e,{link:!0}),5)})),(0,u.extend)(ot(),"moderationControls",(function(t,e){e.canTag()&&t.add("tags",m(st(),{icon:"fas fa-tag",onclick:()=>app.modal.show((()=>r.e(371).then(r.bind(r,2440))),{discussion:e})},app.translator.trans("flarum-tags.forum.discussion_controls.edit_tags_button")))})),(0,u.extend)(d().prototype,"newDiscussionAction",(function(t){const e=o().currentTag();if(e){const r=e.parent(),n=r?[r,e]:[e];t.then((t=>t.fields.tags=n))}else o().composer.fields.tags=[]})),(0,u.extend)("flarum/forum/components/DiscussionComposer","oninit",(function(){o().tagList.load(["parent"]).then((()=>m.redraw())),this.constructor.prototype.chooseTags=function(){(0,it.A)().length&&o().modal.show((()=>r.e(371).then(r.bind(r,2440))),{selectedTags:(this.composer.fields.tags||[]).slice(0),onsubmit:t=>{this.composer.fields.tags=t,this.$("textarea").focus()}})}})),(0,u.extend)("flarum/forum/components/DiscussionComposer","headerItems",(function(t){const e=this.composer.fields.tags||[],r=(0,it.A)();t.add("tags",m(st(),{className:w()(["DiscussionComposer-changeTags","Button Button--ua-reset",!r.length&&"disabled"]),onclick:this.chooseTags.bind(this)},e.length?rt(e):m("span",{className:"TagLabel untagged"},o().translator.trans("flarum-tags.forum.composer_discussion.choose_tags_link"))),10)})),(0,u.override)("flarum/forum/components/DiscussionComposer","onsubmit",(function(t){const e=this.composer.fields.tags||[],n=e.filter((t=>null!==t.position()&&!t.isChild())),a=e.filter((t=>null===t.position())),s=(0,it.A)(),i=parseInt(o().forum.attribute("minPrimaryTags")),l=parseInt(o().forum.attribute("minSecondaryTags")),u=parseInt(o().forum.attribute("maxPrimaryTags")),c=parseInt(o().forum.attribute("maxSecondaryTags"));(!e.length&&0!==u&&0!==c||n.lengthr.e(371).then(r.bind(r,2440))),{selectedTags:e,onsubmit:e=>{this.composer.fields.tags=e,t()}}):t()})),(0,u.extend)("flarum/forum/components/DiscussionComposer","data",(function(t){t.relationships=t.relationships||{},t.relationships.tags=this.composer.fields.tags}))}))},3838:(t,e,r)=>{"use strict";function n(t){let e=app.store.all("tags");if(t){const r=t.tags()||[];e=e.filter((t=>t.canAddToDiscussion()||r.includes(t)))}else e=e.filter((t=>t.canStartDiscussion()));return e}r.d(e,{A:()=>n}),flarum.reg.add("flarum-tags","forum/utils/getSelectableTags",n)},4117:(t,e,r)=>{"use strict";var n=r(4138);t.exports=function(t,e,r){var o=[],a=!1,s=-1;function i(){for(s=0;s=0&&(o.splice(a,2),a<=s&&(s-=2),t(e,[])),null!=r&&(o.push(e,r),t(e,n(r),l))},redraw:l}}},7635:(t,e,r)=>{"use strict";var n=r(4138),o=r(8281),a=r(1700),s=r(8015),i=r(5259),l=r(463),u=r(4716),c={};function d(t){try{return decodeURIComponent(t)}catch(e){return t}}t.exports=function(t,e){var r,f,m,g,p,h,v=null==t?null:"function"==typeof t.setImmediate?t.setImmediate:t.setTimeout,y=Promise.resolve(),b=!1,w=!1,x=0,T=c,k={onbeforeupdate:function(){return!(!(x=x?2:1)||c===T)},onremove:function(){t.removeEventListener("popstate",N,!1),t.removeEventListener("hashchange",S,!1)},view:function(){if(x&&c!==T){var t=[n(m,g.key,g)];return T&&(t=T.render(t[0])),t}}},A=P.SKIP={};function S(){b=!1;var n=t.location.hash;"#"!==P.prefix[0]&&(n=t.location.search+n,"?"!==P.prefix[0]&&"/"!==(n=t.location.pathname+n)[0]&&(n="/"+n));var o=n.concat().replace(/(?:%[a-f89][a-f0-9])+/gim,d).slice(P.prefix.length),a=s(o);function i(t){console.error(t),C(f,null,{replace:!0})}l(a.params,t.history.state),function t(n){for(;n{"use strict";var n=r(8281);n.trust=r(1990),n.fragment=r(1278),t.exports=n},5099:(t,e,r)=>{"use strict";var n=r(4818),o=r(202),a=r(8356),s=r(4609),i=function(){return n.apply(this,arguments)};i.m=n,i.trust=n.trust,i.fragment=n.fragment,i.Fragment="[",i.mount=a.mount,i.route=r(7358),i.render=r(711),i.redraw=a.redraw,i.request=o.request,i.parseQueryString=r(5698),i.buildQueryString=r(7705),i.parsePathname=r(8015),i.buildPathname=r(1700),i.vnode=r(4138),i.censor=r(4716),i.domFor=s.domFor,t.exports=i},8356:(t,e,r)=>{"use strict";var n=r(711);t.exports=r(4117)(n,"undefined"!=typeof requestAnimationFrame?requestAnimationFrame:null,"undefined"!=typeof console?console:null)},1700:(t,e,r)=>{"use strict";var n=r(7705),o=r(463);t.exports=function(t,e){if(/:([^\/\.-]+)(\.{3})?:/.test(t))throw new SyntaxError("Template parameter names must be separated by either a '/', '-', or '.'.");if(null==e)return t;var r=t.indexOf("?"),a=t.indexOf("#"),s=a<0?t.length:a,i=r<0?s:r,l=t.slice(0,i),u={};o(u,e);var c=l.replace(/:([^\/\.-]+)(\.{3})?/g,(function(t,r,n){return delete u[r],null==e[r]?t:n?e[r]:encodeURIComponent(String(e[r]))})),d=c.indexOf("?"),f=c.indexOf("#"),m=f<0?c.length:f,g=d<0?m:d,p=c.slice(0,g);r>=0&&(p+=t.slice(r,s)),d>=0&&(p+=(r<0?"?":"&")+c.slice(d,m));var h=n(u);return h&&(p+=(r<0&&d<0?"?":"&")+h),a>=0&&(p+=t.slice(a)),f>=0&&(p+=(a<0?"":"&")+c.slice(f)),p}},5259:(t,e,r)=>{"use strict";var n=r(8015);t.exports=function(t){var e=n(t),r=Object.keys(e.params),o=[],a=new RegExp("^"+e.path.replace(/:([^\/.-]+)(\.{3}|\.(?!\.)|-)?|[\\^$*+.()|\[\]{}]/g,(function(t,e,r){return null==e?"\\"+t:(o.push({k:e,r:"..."===r}),"..."===r?"(.*)":"."===r?"([^/]+)\\.":"([^/]+)"+(r||""))}))+"$");return function(t){for(var n=0;n{"use strict";var n=r(5698);t.exports=function(t){var e=t.indexOf("?"),r=t.indexOf("#"),o=r<0?t.length:r,a=e<0?o:e,s=t.slice(0,a).replace(/\/{2,}/g,"/");return s?"/"!==s[0]&&(s="/"+s):s="/",{path:s,params:e<0?{}:n(t.slice(e+1,o))}}},7705:t=>{"use strict";t.exports=function(t){if("[object Object]"!==Object.prototype.toString.call(t))return"";var e=[];for(var r in t)n(r,t[r]);return e.join("&");function n(t,r){if(Array.isArray(r))for(var o=0;o{"use strict";function e(t){try{return decodeURIComponent(t)}catch(e){return t}}t.exports=function(t){if(""===t||null==t)return{};"?"===t.charAt(0)&&(t=t.slice(1));for(var r=t.split("&"),n={},o={},a=0;a-1&&u.pop();for(var d=0;d{"use strict";t.exports=r(526)("undefined"!=typeof window?window:null)},4609:t=>{"use strict";var e=new WeakMap;t.exports={delayedRemoval:e,domFor:function(t,r){return void 0===r&&(r={}),function*(){var n=t.dom,o=t.domSize,a=r.generation;if(null!=n)do{var s=n.nextSibling;e.get(n)===a&&(yield n,o--),n=s}while(o)}()}}},1278:(t,e,r)=>{"use strict";var n=r(4138),o=r(6283);t.exports=function(){var t=o.apply(0,arguments);return t.tag="[",t.children=n.normalizeChildren(t.children),t}},8281:(t,e,r)=>{"use strict";var n=r(4138),o=r(6283),a=r(5170),s=/(?:(^|#|\.)([^#\.\[\]]+))|(\[(.+?)(?:\s*=\s*("|'|)((?:\\["'\]]|.)*?)\5)?\])/g,i={};t.exports=function(t){if(null==t||"string"!=typeof t&&"function"!=typeof t&&"function"!=typeof t.view)throw Error("The selector must be either a string or a component.");var e=o.apply(1,arguments);return"string"==typeof t&&(e.children=n.normalizeChildren(e.children),"["!==t)?function(t,e){var r=e.attrs,n=a.call(r,"class"),o=n?r.class:r.className;if(e.tag=t.tag,!function(t){for(var e in t)if(a.call(t,e))return!1;return!0}(t.attrs)){var s={};for(var i in r)a.call(r,i)&&(s[i]=r[i]);r=s}for(var i in t.attrs)a.call(t.attrs,i)&&"className"!==i&&!a.call(r,i)&&(r[i]=t.attrs[i]);return null==o&&null==t.attrs.className||(r.className=null!=o?null!=t.attrs.className?String(t.attrs.className)+" "+String(o):o:null!=t.attrs.className?t.attrs.className:null),n&&(r.class=null),e.attrs=r,e}(i[t]||function(t){for(var e,r="div",n=[],o={};e=s.exec(t);){var a=e[1],l=e[2];if(""===a&&""!==l)r=l;else if("#"===a)o.id=l;else if("."===a)n.push(l);else if("["===e[3][0]){var u=e[6];u&&(u=u.replace(/\\(["'])/g,"$1").replace(/\\\\/g,"\\")),"class"===e[4]?n.push(u):o[e[4]]=""===u?u:u||!0}}return n.length>0&&(o.className=n.join(" ")),i[t]={tag:r,attrs:o}}(t),e):(e.tag=t,e)}},6283:(t,e,r)=>{"use strict";var n=r(4138);t.exports=function(){var t,e=arguments[this],r=this+1;if(null==e?e={}:("object"!=typeof e||null!=e.tag||Array.isArray(e))&&(e={},r=this),arguments.length===r+1)t=arguments[r],Array.isArray(t)||(t=[t]);else for(t=[];r{"use strict";var n=r(4138),o=r(4609),a=o.delayedRemoval,s=o.domFor;t.exports=function(){var t,e,r={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"};function o(t){return t.ownerDocument}function i(t){return t.attrs&&t.attrs.xmlns||r[t.tag]}function l(t,e){if(t.state!==e)throw new Error("'vnode.state' must not be modified.")}function u(t){var e=t.state;try{return this.apply(e,arguments)}finally{l(t,e)}}function c(t){try{return o(t).activeElement}catch(t){return null}}function d(t,e,r,n,o,a,s){for(var i=r;i'+e.children+"",s=s.firstChild):s.innerHTML=e.children,e.dom=s.firstChild,e.domSize=s.childNodes.length;for(var i,l=o(t).createDocumentFragment();i=s.firstChild;)l.appendChild(i);x(t,l,n)}function p(t,e,r,n,o,a){if(e!==r&&(null!=e||null!=r))if(null==e||0===e.length)d(t,r,0,r.length,n,o,a);else if(null==r||0===r.length)k(t,e,0,e.length);else{var s=null!=e[0]&&null!=e[0].key,i=null!=r[0]&&null!=r[0].key,l=0,u=0;if(!s)for(;u=u&&S>=l&&(g=e[T],p=r[S],g.key===p.key);)g!==p&&h(t,g,p,n,o,a),null!=p.dom&&(o=p.dom),T--,S--;for(;T>=u&&S>=l&&(c=e[u],m=r[l],c.key===m.key);)u++,l++,c!==m&&h(t,c,m,n,b(e,u,o),a);for(;T>=u&&S>=l&&l!==S&&c.key===p.key&&g.key===m.key;)w(t,g,x=b(e,u,o)),g!==m&&h(t,g,m,n,x,a),++l<=--S&&w(t,c,o),c!==p&&h(t,c,p,n,o,a),null!=p.dom&&(o=p.dom),u++,g=e[--T],p=r[S],c=e[u],m=r[l];for(;T>=u&&S>=l&&g.key===p.key;)g!==p&&h(t,g,p,n,o,a),null!=p.dom&&(o=p.dom),S--,g=e[--T],p=r[S];if(l>S)k(t,e,u,T+1);else if(u>T)d(t,r,l,S+1,n,o,a);else{var N,C,P=o,_=S-l+1,L=new Array(_),E=0,I=0,D=2147483647,j=0;for(I=0;I<_;I++)L[I]=-1;for(I=S;I>=l;I--){null==N&&(N=v(e,u,T+1));var O=N[(p=r[I]).key];null!=O&&(D=O>>1)+(n>>>1)+(r&n&1);t[e[i]]0&&(y[o]=e[r-1]),e[r]=o)}}for(n=e[(r=e.length)-1];r-- >0;)e[r]=n,n=y[n];return y.length=0,e}(L),E=C.length-1,I=S;I>=l;I--)m=r[I],-1===L[I-l]?f(t,m,n,a,o):C[E]===I-l?E--:w(t,m,o),null!=m.dom&&(o=r[I].dom);else for(I=S;I>=l;I--)m=r[I],-1===L[I-l]&&f(t,m,n,a,o),null!=m.dom&&(o=r[I].dom)}}else{var z=e.lengthz&&k(t,e,l,e.length),r.length>z&&d(t,r,l,r.length,n,o,a)}}}function h(t,e,r,o,a,s){var l=e.tag;if(l===r.tag){if(r.state=e.state,r.events=e.events,function(t,e){do{var r;if(null!=t.attrs&&"function"==typeof t.attrs.onbeforeupdate&&void 0!==(r=u.call(t.attrs.onbeforeupdate,t,e))&&!r)break;if("string"!=typeof t.tag&&"function"==typeof t.state.onbeforeupdate&&void 0!==(r=u.call(t.state.onbeforeupdate,t,e))&&!r)break;return!1}while(0);return t.dom=e.dom,t.domSize=e.domSize,t.instance=e.instance,t.attrs=e.attrs,t.children=e.children,t.text=e.text,!0}(r,e))return;if("string"==typeof l)switch(null!=r.attrs&&M(r.attrs,r,o),l){case"#":!function(t,e){t.children.toString()!==e.children.toString()&&(t.dom.nodeValue=e.children),e.dom=t.dom}(e,r);break;case"<":!function(t,e,r,n,o){e.children!==r.children?(S(t,e,void 0),g(t,r,n,o)):(r.dom=e.dom,r.domSize=e.domSize)}(t,e,r,s,a);break;case"[":!function(t,e,r,n,o,a){p(t,e.children,r.children,n,o,a);var s=0,i=r.children;if(r.dom=null,null!=i){for(var l=0;l-1||null!=t.attrs&&t.attrs.is||"href"!==e&&"list"!==e&&"form"!==e&&"width"!==e&&"height"!==e)&&e in t.dom}var E,I=/[A-Z]/g;function D(t){return"-"+t.toLowerCase()}function j(t){return"-"===t[0]&&"-"===t[1]?t:"cssFloat"===t?"float":t.replace(I,D)}function O(t,e,r){if(e===r);else if(null==r)t.style="";else if("object"!=typeof r)t.style=r;else if(null==e||"object"!=typeof e)for(var n in t.style.cssText="",r)null!=(o=r[n])&&t.style.setProperty(j(n),String(o));else{for(var n in r){var o;null!=(o=r[n])&&(o=String(o))!==String(e[n])&&t.style.setProperty(j(n),o)}for(var n in e)null!=e[n]&&null==r[n]&&t.style.removeProperty(j(n))}}function z(){this._=t}function R(e,r,n){if(null!=e.events){if(e.events._=t,e.events[r]===n)return;null==n||"function"!=typeof n&&"object"!=typeof n?(null!=e.events[r]&&e.dom.removeEventListener(r.slice(2),e.events,!1),e.events[r]=void 0):(null==e.events[r]&&e.dom.addEventListener(r.slice(2),e.events,!1),e.events[r]=n)}else null==n||"function"!=typeof n&&"object"!=typeof n||(e.events=new z,e.dom.addEventListener(r.slice(2),e.events,!1),e.events[r]=n)}function $(t,e,r){"function"==typeof t.oninit&&u.call(t.oninit,e),"function"==typeof t.oncreate&&r.push(u.bind(t.oncreate,e))}function M(t,e,r){"function"==typeof t.onupdate&&r.push(u.bind(t.onupdate,e))}return z.prototype=Object.create(null),z.prototype.handleEvent=function(t){var e,r=this["on"+t.type];"function"==typeof r?e=r.call(t.currentTarget,t):"function"==typeof r.handleEvent&&r.handleEvent(t),this._&&!1!==t.redraw&&(0,this._)(),!1===e&&(t.preventDefault(),t.stopPropagation())},function(r,o,a){if(!r)throw new TypeError("DOM element being rendered to does not exist.");if(null!=E&&r.contains(E))throw new TypeError("Node is currently being rendered to and thus is locked.");var s=t,i=E,l=[],u=c(r),d=r.namespaceURI;E=r,t="function"==typeof a?a:void 0,e={};try{null==r.vnodes&&(r.textContent=""),o=n.normalizeChildren(Array.isArray(o)?o:[o]),p(r,r.vnodes,o,l,null,"http://www.w3.org/1999/xhtml"===d?void 0:d),r.vnodes=o,null!=u&&c(r)!==u&&"function"==typeof u.focus&&u.focus();for(var f=0;f{"use strict";var n=r(4138);t.exports=function(t){return null==t&&(t=""),n("<",void 0,void 0,t,void 0,void 0)}},4138:t=>{"use strict";function e(t,e,r,n,o,a){return{tag:t,key:e,attrs:r,children:n,text:o,dom:a,domSize:void 0,state:void 0,events:void 0,instance:void 0}}e.normalize=function(t){return Array.isArray(t)?e("[",void 0,void 0,e.normalizeChildren(t),void 0,void 0):null==t||"boolean"==typeof t?null:"object"==typeof t?t:e("#",void 0,void 0,String(t),void 0,void 0)},e.normalizeChildren=function(t){var r=[];if(t.length){for(var n=null!=t[0]&&null!=t[0].key,o=1;o{"use strict";var n=r(8356);t.exports=r(8572)("undefined"!=typeof window?window:null,n.redraw)},8572:(t,e,r)=>{"use strict";var n=r(1700),o=r(5170);t.exports=function(t,e){function r(t){return new Promise(t)}function a(t,e){for(var r in t.headers)if(o.call(t.headers,r)&&r.toLowerCase()===e)return!0;return!1}return r.prototype=Promise.prototype,r.__proto__=Promise,{request:function(s,i){"string"!=typeof s?(i=s,s=s.url):null==i&&(i={});var l=function(e,r){return new Promise((function(s,i){e=n(e,r.params);var l,u=null!=r.method?r.method.toUpperCase():"GET",c=r.body,d=(null==r.serialize||r.serialize===JSON.serialize)&&!(c instanceof t.FormData||c instanceof t.URLSearchParams),f=r.responseType||("function"==typeof r.extract?"":"json"),m=new t.XMLHttpRequest,g=!1,p=!1,h=m,v=m.abort;for(var y in m.abort=function(){g=!0,v.call(this)},m.open(u,e,!1!==r.async,"string"==typeof r.user?r.user:void 0,"string"==typeof r.password?r.password:void 0),d&&null!=c&&!a(r,"content-type")&&m.setRequestHeader("Content-Type","application/json; charset=utf-8"),"function"==typeof r.deserialize||a(r,"accept")||m.setRequestHeader("Accept","application/json, text/*"),r.withCredentials&&(m.withCredentials=r.withCredentials),r.timeout&&(m.timeout=r.timeout),m.responseType=f,r.headers)o.call(r.headers,y)&&m.setRequestHeader(y,r.headers[y]);m.onreadystatechange=function(t){if(!g&&4===t.target.readyState)try{var n,o=t.target.status>=200&&t.target.status<300||304===t.target.status||/^file:\/\//i.test(e),a=t.target.response;if("json"===f){if(!t.target.responseType&&"function"!=typeof r.extract)try{a=JSON.parse(t.target.responseText)}catch(t){a=null}}else f&&"text"!==f||null==a&&(a=t.target.responseText);if("function"==typeof r.extract?(a=r.extract(t.target,r),o=!0):"function"==typeof r.deserialize&&(a=r.deserialize(a)),o){if("function"==typeof r.type)if(Array.isArray(a))for(var l=0;l{"use strict";var n=r(8356);t.exports=r(7635)("undefined"!=typeof window?window:null,n)},463:(t,e,r)=>{"use strict";var n=r(5170);t.exports=Object.assign||function(t,e){for(var r in e)n.call(e,r)&&(t[r]=e[r])}},4716:(t,e,r)=>{"use strict";var n=r(5170),o=new RegExp("^(?:key|oninit|oncreate|onbeforeupdate|onupdate|onbeforeremove|onremove)$");t.exports=function(t,e){var r={};if(null!=e)for(var a in t)n.call(t,a)&&!o.test(a)&&e.indexOf(a)<0&&(r[a]=t[a]);else for(var a in t)n.call(t,a)&&!o.test(a)&&(r[a]=t[a]);return r}},5170:t=>{"use strict";t.exports={}.hasOwnProperty},4950:t=>{"use strict";t.exports=flarum.reg.get("core","common/Component")},954:t=>{"use strict";t.exports=flarum.reg.get("core","common/app")},5336:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Button")},3015:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/FormModal")},2088:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/Link")},6661:t=>{"use strict";t.exports=flarum.reg.get("core","common/components/LoadingIndicator")},8607:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/highlight")},8296:t=>{"use strict";t.exports=flarum.reg.get("core","common/helpers/textContrastClass")},9280:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/KeyboardNavigatable")},1821:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/Stream")},8443:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/classList")},9414:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extract")},5233:t=>{"use strict";t.exports=flarum.reg.get("core","common/utils/extractText")},488:t=>{"use strict";t.exports=flarum.reg.get("core","forum/app")},1137:t=>{"use strict";t.exports=flarum.reg.get("core","forum/components/DiscussionPage")},8805:(t,e,r)=>{"use strict";function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function o(t,e,r){return(e=function(t){var e=function(t){if("object"!=n(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,"string");if("object"!=n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==n(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}r.d(e,{A:()=>o})}},n={};function o(t){flarum.reg._webpack_runtimes["flarum-tags"]||=o;var e=n[t];if(void 0!==e)return e.exports;var a=n[t]={exports:{}};return r[t](a,a.exports,o),a.exports}o.m=r,o.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return o.d(e,{a:e}),e},o.d=(t,e)=>{for(var r in e)o.o(e,r)&&!o.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},o.f={},o.e=t=>Promise.all(Object.keys(o.f).reduce(((e,r)=>(o.f[r](t,e),e)),[])),o.u=t=>"forum/components/TagDiscussionModal.js",o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),o.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),t={},e="module.exports:",o.l=(r,n,a,s)=>{if(t[r])t[r].push(n);else{var i,l;if(void 0!==a)for(var u=document.getElementsByTagName("script"),c=0;c{i.onerror=i.onload=null,clearTimeout(m);var o=t[r];if(delete t[r],i.parentNode&&i.parentNode.removeChild(i),o&&o.forEach((t=>t(n))),e)return e(n)},m=setTimeout(f.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=f.bind(null,i.onerror),i.onload=f.bind(null,i.onload),l&&document.head.appendChild(i)}},o.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;o.g.importScripts&&(t=o.g.location+"");var e=o.g.document;if(!t&&e&&(e.currentScript&&"SCRIPT"===e.currentScript.tagName.toUpperCase()&&(t=e.currentScript.src),!t)){var r=e.getElementsByTagName("script");if(r.length)for(var n=r.length-1;n>-1&&(!t||!/^http(s?):/.test(t));)t=r[n--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=t})(),o.f.compat=(t,e)=>{const r=o.l;o.l=flarum.reg.loadChunk.bind(flarum.reg,r)},(()=>{var t={170:0};o.f.j=(e,r)=>{var n=o.o(t,e)?t[e]:void 0;if(0!==n)if(n)r.push(n[2]);else{var a=new Promise(((r,o)=>n=t[e]=[r,o]));r.push(n[2]=a);var s=o.p+o.u(e),i=new Error;o.l(s,(r=>{if(o.o(t,e)&&(0!==(n=t[e])&&(t[e]=void 0),n)){var a=r&&("load"===r.type?"missing":r.type),s=r&&r.target&&r.target.src;i.message="Loading chunk "+e+" failed.\n("+a+": "+s+")",i.name="ChunkLoadError",i.type=a,i.request=s,n[1](i)}}),"chunk-"+e,e)}};var e=(e,r)=>{var n,a,[s,i,l]=r,u=0;if(s.some((e=>0!==t[e]))){for(n in i)o.o(i,n)&&(o.m[n]=i[n]);l&&l(o)}for(e&&e(r);u{"use strict";o.r(a),o.d(a,{extend:()=>r.X});var t=o(4085),e={};for(const r in t)"default"!==r&&(e[r]=()=>t[r]);o.d(a,e);var r=o(4319)})(),module.exports=a})(); //# sourceMappingURL=forum.js.map \ No newline at end of file diff --git a/extensions/tags/js/dist/forum.js.map b/extensions/tags/js/dist/forum.js.map index 730277d4f..d894b6ca5 100644 --- a/extensions/tags/js/dist/forum.js.map +++ b/extensions/tags/js/dist/forum.js.map @@ -1 +1 @@ -{"version":3,"file":"forum.js","mappings":"UAAIA,EACAC,E,qECAW,SAASC,EAAQC,EAAKC,EAAOC,QAC5B,IAAVD,IACFA,EAAQ,CAAC,QAEM,IAAbC,IACFA,EAAW,CAAC,GAEd,MAAMC,EAAUH,GAAOA,EAAII,QACrB,SACJC,GAAW,GACTH,EAQJ,OAPAD,EAAMK,UAAY,IAAU,CAACL,EAAMK,UAAW,oBAAqBH,EAAUH,EAAII,OAAS,YACtFJ,GAAOK,GACTJ,EAAMM,MAAQN,EAAMM,OAAS,CAAC,EAC9BN,EAAMM,MAAM,WAAaP,EAAIQ,SACnBR,IACVC,EAAMK,WAAa,aAEdH,EAAUM,EAAE,IAAKR,GAASQ,EAAE,OAAQR,EAC7C,CACAS,OAAOC,IAAIC,IAAI,cAAe,yBAA0Bb,E,kIChBzC,SAASc,EAASb,EAAKC,QACtB,IAAVA,IACFA,EAAQ,CAAC,GAEXA,EAAMM,MAAQN,EAAMM,OAAS,CAAC,EAC9BN,EAAMK,UAAY,aAAeL,EAAMK,WAAa,IACpD,MAAMQ,EAAO,IAAQb,EAAO,QACtBc,EAAUf,EAAMA,EAAIgB,OAASC,IAAIC,WAAWC,MAAM,oCACxD,GAAInB,EAAK,CACP,MAAMQ,EAAQR,EAAIQ,QACdA,IACFP,EAAMM,MAAM,YAAcC,EAC1BP,EAAMK,UAAY,IAAUL,EAAMK,UAAW,UAAW,IAAkBE,KAExEM,IACFb,EAAMmB,MAAQpB,EAAIqB,eAAiB,GACnCpB,EAAMqB,KAAOL,IAAIM,MAAM,MAAO,CAC5BC,KAAMxB,EAAIyB,UAGVzB,EAAI0B,YACNzB,EAAMK,WAAa,mBAEvB,MACEL,EAAMK,WAAa,YAErB,OAAOG,EAAEK,EAAO,IAAO,OAAQb,EAAOQ,EAAE,OAAQ,CAC9CH,UAAW,iBACVN,GAAOA,EAAII,SAAU,OAAQJ,EAAK,CACnCM,UAAW,iBACV,CACDD,UAAU,IACRI,EAAE,OAAQ,CACZH,UAAW,iBACVS,IACL,CACAL,OAAOC,IAAIC,IAAI,cAAe,0BAA2BC,E,uCCzC1C,SAASc,EAASH,GAC/B,OAAOA,EAAKI,MAAM,GAAGC,MAAK,CAACC,EAAGC,KAC5B,MAAMC,EAAOF,EAAEG,WACTC,EAAOH,EAAEE,WAIf,GAAa,OAATD,GAA0B,OAATE,EAAe,OAAOH,EAAEI,kBAAoBL,EAAEK,kBAInE,GAAa,OAATD,EAAe,OAAQ,EAC3B,GAAa,OAATF,EAAe,OAAO,EAI1B,MAAMI,EAAUN,EAAEO,SACZC,EAAUP,EAAEM,SAIlB,OAAID,IAAYE,EAAgBN,EAAOE,EAG9BE,GAAWE,EAAgBF,EAAQH,WAAaK,EAAQL,WAIxDG,EAAgBA,IAAYL,EAAI,EAAIK,EAAQH,WAAaC,EAAcI,EAAgBA,IAAYR,GAAK,EAAIE,EAAOM,EAAQL,WAC7H,CAAC,GAEZ,C,iBACAvB,OAAOC,IAAIC,IAAI,cAAe,wBAAyBe,E,gGC9BxC,MAAMY,EACnB,WAAAC,IACE,OAAgBC,KAAM,sBAAkB,EAC1C,CACA,UAAMC,CAAKC,GAIT,QAHiB,IAAbA,IACFA,EAAW,KAERF,KAAKG,eACR,OAAOH,KAAKI,MAAMF,GAEpB,MAAMG,EAAmBH,EAASI,QAAOC,IAAYP,KAAKG,eAAeK,IAAID,KAC7E,OAAgC,IAA5BF,EAAiBI,OACZC,QAAQC,QAAQ,UAAUC,IAAI,SAEhCZ,KAAKI,MAAMC,EACpB,CACA,WAAMD,CAAMF,GAKV,YAJiB,IAAbA,IACFA,EAAW,IAEbF,KAAKG,iBAAmB,IAAIU,IACrB,UAAUC,KAAK,OAAQ,CAC5BP,QAASL,EAASa,KAAK,OACtBC,MAAKC,IACN,MAAMlC,EAAOmC,MAAMC,QAAQF,GAAOA,EAAM,CAACA,GAEzC,OADAf,EAASkB,SAAQb,GAAWP,KAAKG,eAAehC,IAAIoC,KAC7CxB,CAAI,GAEf,EAEFd,OAAOC,IAAIC,IAAI,cAAe,6BAA8B2B,GCjC5D,MAAM,EAA+B7B,OAAOC,IAAImD,IAAI,OAAQ,iBCAtD,EAA+BpD,OAAOC,IAAImD,IAAI,OAAQ,iC,aCA5D,MAAM,EAA+BpD,OAAOC,IAAImD,IAAI,OAAQ,+B,aCA5D,MAAM,EAA+BpD,OAAOC,IAAImD,IAAI,OAAQ,gC,yDCI7C,MAAMC,UAAsB,KACzC,IAAAC,CAAKC,GACH,MAAMjE,EAAMyC,KAAKxC,MAAMiE,MACjB7C,EAAcrB,GAAOA,EAAIqB,cACzBf,EAAY,IAAU,wBAAyB,CACnD6D,MAAOnE,EAAI0B,WACVe,KAAKxC,MAAMK,WACd,OAAOG,EAAE,IAAM,CACbH,UAAWA,EACXgB,KAAMmB,KAAKxC,MAAMsB,MACjBhB,MAAOP,EAAM,CACX,UAAWA,EAAIQ,cACb4D,EACJhD,MAAOC,QAAe+C,IACrB,EAAArE,EAAA,GAAQC,EAAK,CACdM,UAAW,gBACTG,EAAE,OAAQ,CACZH,UAAW,gBACVN,EAAMA,EAAIgB,OAASC,IAAIC,WAAWC,MAAM,0CAC7C,CACA,gBAAOkD,CAAUpE,GACfqE,MAAMD,UAAUpE,GAChB,MAAMD,EAAMC,EAAMiE,MAClBjE,EAAMsE,OAAO/C,KAAOxB,EAAMA,EAAIyB,OAAS,WACvCxB,EAAMsB,MAAQN,IAAIM,MAAM,MAAOtB,EAAMsE,OACvC,EAEF7D,OAAOC,IAAIC,IAAI,cAAe,iCAAkCmD,GC/BhE,MAAM,EAA+BrD,OAAOC,IAAImD,IAAI,OAAQ,0B,aCA5D,MAAM,EAA+BpD,OAAOC,IAAImD,IAAI,OAAQ,kC,aCA5D,MAAM,EAA+BpD,OAAOC,IAAImD,IAAI,OAAQ,gC,+BCA5D,MAAM,EAA+BpD,OAAOC,IAAImD,IAAI,OAAQ,yB,aCA5D,MAAM,EAA+BpD,OAAOC,IAAImD,IAAI,OAAQ,4B,mECgB7C,MAAMU,UAAiB,KACpC,WAAAhC,GACE8B,SAASG,YACT,OAAgBhC,KAAM,YAAQ,IAC9B,OAAgBA,KAAM,eAAW,EACnC,CACA,MAAAiC,CAAOT,GACLK,MAAMI,OAAOT,GACb,YAAYU,KAAK,OAAQ,IAAY,eAAexD,MAAM,mDAC1D,YAAYyD,IAAI,cAAc,GAC9BnC,KAAKjB,KAAO,GACZ,MAAMqD,EAAY,2BACdA,EACFpC,KAAKjB,MAAO,EAAAG,EAAA,GAASkD,EAAU9B,QAAO/C,IAAQA,EAAI0B,cAGpDe,KAAKqC,SAAU,EACf,YAAYpC,KAAK,CAAC,WAAY,uBAAwB,WAAWe,MAAK,KACpEhB,KAAKjB,MAAO,EAAAG,EAAA,GAAS,UAAU0B,IAAI,QAAQN,QAAO/C,IAAQA,EAAI0B,aAC9De,KAAKqC,SAAU,EACfrE,EAAEsE,QAAQ,IAEd,CACA,QAAAC,CAASf,GACPK,MAAMU,SAASf,GACf,aAAa,IAAY,eAAe9C,MAAM,gDAC9C,kBAAkB,EACpB,CACA,IAAA6C,GACE,OAAOvD,EAAE,IAAe,CACtBH,UAAW,0BACX2E,KAAMxC,KAAKwC,KAAKC,KAAKzC,MACrB0C,QAAS1C,KAAK0C,QAAQD,KAAKzC,OAC1BA,KAAK2C,eAAeC,UACzB,CACA,YAAAD,GACE,MAAME,EAAQ,IAAI,KAClB,GAAI7C,KAAKqC,QACPQ,EAAM1E,IAAI,UAAWH,EAAE,IAAkB,WACpC,CACL,MAAM8E,EAAS9C,KAAKjB,KAAKuB,QAAO/C,GAA0B,OAAnBA,EAAIiC,aACrCuD,EAAQ/C,KAAKjB,KAAKuB,QAAO/C,GAA0B,OAAnBA,EAAIiC,aAC1CqD,EAAM1E,IAAI,WAAY6B,KAAKgD,gBAAgBF,GAAS,KAChDC,EAAMtC,QACRoC,EAAM1E,IAAI,QAAS6B,KAAKiD,UAAUF,GAAQ,GAE9C,CACA,OAAOF,CACT,CACA,IAAAL,GACE,OAAOxE,EAAE,IAAa,KACxB,CACA,OAAA0E,GACE,OAAO1E,EAAE,IAAc,KACzB,CACA,eAAAgF,CAAgBF,GACd,OAAO9E,EAAE,KAAM,CACbH,UAAW,YACViF,EAAOI,IAAIlD,KAAKmD,YAAYV,KAAKzC,OACtC,CACA,WAAAmD,CAAY5F,GACV,MAAM6F,EAAuB7F,EAAI6F,uBAC3BC,GAAW,EAAAnE,EAAA,GAAS3B,EAAI8F,YAAc,IAC5C,OAAOrF,EAAE,KAAM,CACbH,UAAW,IAAU,UAAW,CAC9ByF,QAAS/F,EAAIQ,SACZ,IAAkBR,EAAIQ,UACzBD,MAAO,CACL,WAAYP,EAAIQ,UAEjBC,EAAE,IAAM,CACTH,UAAW,eACXgB,KAAM,UAAUtB,IAAIA,IACnBS,EAAE,MAAO,CACVH,UAAW,mBACVN,EAAII,SAAU,EAAAL,EAAA,GAAQC,EAAK,CAAC,EAAG,CAChCK,UAAU,IACRI,EAAE,KAAM,CACVH,UAAW,gBACVN,EAAIgB,SAAUP,EAAE,IAAK,CACtBH,UAAW,uBACVN,EAAIqB,iBAAkByE,GAAYrF,EAAE,MAAO,CAC5CH,UAAW,oBACVwF,EAASH,KAAIxB,GAAS,CAAC1D,EAAE,IAAM,CAChCa,KAAM,UAAUtB,IAAImE,IACnBA,EAAMnD,QAAS,SAAS6E,EAAuBpF,EAAE,IAAM,CACxDH,UAAW,+BACXgB,KAAM,UAAU0E,WAAWH,EAAsBA,EAAqBI,mBACrExF,EAAE,OAAQ,CACXH,UAAW,sCACVuF,EAAqBzE,SAAU,IAAUyE,EAAqBK,iBAAmBzF,EAAE,OAAQ,CAC5FH,UAAW,iCAEf,CACA,SAAAoF,CAAUF,GACR,OAAO/E,EAAE,MAAO,CACdH,UAAW,YACVkF,EAAMG,KAAI3F,GAAO,EAAC,EAAAa,EAAA,GAASb,EAAK,CACjCc,MAAM,IACJ,OACN,EAEFJ,OAAOC,IAAIC,IAAI,cAAe,4BAA6B4D,GCtH3D,MAAM,EAA+B9D,OAAOC,IAAImD,IAAI,OAAQ,8B,aCA5D,MAAM,EAA+BpD,OAAOC,IAAImD,IAAI,OAAQ,oC,aCA5D,MAAM,EAA+BpD,OAAOC,IAAImD,IAAI,OAAQ,kC,+BCI7C,MAAMqC,UAAgB,KACnC,IAAAnC,GACE,MAAMhE,EAAMyC,KAAKxC,MAAMiE,MACjB1D,EAAQR,EAAIQ,QAClB,OAAOC,EAAE,SAAU,CACjBH,UAAW,IAAU,OAAQ,UAAW,CACtC,mBAAoBE,EACpB,CAAC,IAAkBA,IAASA,IAE9BD,MAAOC,EAAQ,CACb,YAAaA,QACX4D,GACH3D,EAAE,MAAO,CACVH,UAAW,aACVG,EAAE,MAAO,CACVH,UAAW,mBACVG,EAAE,KAAM,CACTH,UAAW,cACVN,EAAII,SAAU,EAAAL,EAAA,GAAQC,EAAK,CAAC,EAAG,CAChCK,UAAU,IACR,IAAKL,EAAIgB,QAASP,EAAE,MAAO,CAC7BH,UAAW,iBACVN,EAAIqB,iBACT,EAEFX,OAAOC,IAAIC,IAAI,cAAe,2BAA4BuF,GCpB1D,MAAMC,EAAU3E,GAAQ,UAAU4B,IAAI,QAAQE,MAAKvD,GAE5C,IAFmDA,EAAIyB,OAAO4E,cAAc5E,OAAM2C,EAAW,CAClGkC,YAAa,WCVT,EAA+B5F,OAAOC,IAAImD,IAAI,OAAQ,uC,aCA5D,MAAM,GAA+BpD,OAAOC,IAAImD,IAAI,OAAQ,mC,eCI7C,SAASyC,GAAU/E,EAAMvB,QACxB,IAAVA,IACFA,EAAQ,CAAC,GAEX,MAAM6F,EAAW,IACX,KACJhF,KACG0F,GACDvG,EAaJ,OAZAuG,EAAWlG,UAAY,IAAU,YAAakG,EAAWlG,WACrDkB,GACF,EAAAG,EAAA,GAASH,GAAMqC,SAAQ7D,KACjBA,GAAuB,IAAhBwB,EAAK0B,SACd4C,EAASnB,MAAK,EAAA9D,EAAA,GAASb,EAAK,CAC1Bc,SAEJ,IAGFgF,EAASnB,MAAK,EAAA9D,EAAA,MAETJ,EAAE,OAAQ+F,EAAYV,EAC/B,C,OACApF,OAAOC,IAAIC,IAAI,cAAe,2BAA4B2F,IC3B1D,MAAM,GAA+B7F,OAAOC,IAAImD,IAAI,OAAQ,kC,oCCe3DpD,OAAOC,IAAI8F,eAAe,MAAO,MAAO,cAAe,uCACxD/F,OAAOC,IAAI8F,eAAe,MAAO,MAAO,cAAe,uCACvD/F,OAAOC,IAAI8F,eAAe,MAAO,MAAO,cAAe,iC,cCjBvD,MAAM,GAA+B/F,OAAOC,IAAImD,IAAI,OAAQ,oB,eCA5D,MAAM,GAA+BpD,OAAOC,IAAImD,IAAI,OAAQ,4B,eCA5D,MAAM,GAA+BpD,OAAOC,IAAImD,IAAI,OAAQ,8B,eCE7C,MAAM4C,WAA6B,MAChD,gBAAOrC,CAAUpE,GACfqE,MAAMD,UAAUpE,GAChB,MAAM0G,EAAU1G,EAAM2G,KAAKC,UAAU,GAC/BC,EAAU7G,EAAM2G,KAAKC,UAAU,GACrC,SAASE,EAASC,EAAOC,GACvB,OAAOD,EAAMjE,QAAO/C,IAA+B,IAAxBiH,EAAMC,QAAQlH,KAAa2F,KAAIwB,GAAMlG,IAAImG,MAAMC,QAAQ,OAAQF,IAC5F,CACAlH,EAAMqH,UAAYP,EAASD,EAASH,GACpC1G,EAAMsH,YAAcR,EAASJ,EAASG,EACxC,CACA,IAAA1G,GACE,MAAO,YACT,CACA,cAAAoH,GACE,OAAI/E,KAAKxC,MAAMqH,UAAUpE,OACnBT,KAAKxC,MAAMsH,YAAYrE,OAClB,4DAEF,gDAEF,iDACT,CACA,eAAAuE,GACE,MAAMC,EAAO,CAAC,EAiBd,OAhBIjF,KAAKxC,MAAMqH,UAAUpE,SACvBwE,EAAKJ,UAAYrG,IAAIC,WAAWC,MAAM,0CAA2C,CAC/EK,KAAM+E,GAAU9D,KAAKxC,MAAMqH,UAAW,CACpCxG,MAAM,IAER6G,MAAOlF,KAAKxC,MAAMqH,UAAUpE,UAG5BT,KAAKxC,MAAMsH,YAAYrE,SACzBwE,EAAKH,YAActG,IAAIC,WAAWC,MAAM,0CAA2C,CACjFK,KAAM+E,GAAU9D,KAAKxC,MAAMsH,YAAa,CACtCzG,MAAM,IAER6G,MAAOlF,KAAKxC,MAAMsH,YAAYrE,UAG3BwE,CACT,EAEFhH,OAAOC,IAAIC,IAAI,cAAe,wCAAyC8F,IC9CvE,MAAM,GAA+BhG,OAAOC,IAAImD,IAAI,OAAQ,yB,eCA5D,MAAM,GAA+BpD,OAAOC,IAAImD,IAAI,OAAQ,gB,eCE7C,MAAM8D,WAAY,MAC/B,IAAA5G,GACE,OAAO,eAAgB,QAAQ6G,KAAKpF,KACtC,CACA,IAAAhB,GACE,OAAO,eAAgB,QAAQoG,KAAKpF,KACtC,CACA,WAAApB,GACE,OAAO,eAAgB,eAAewG,KAAKpF,KAC7C,CACA,KAAAjC,GACE,OAAO,eAAgB,SAASqH,KAAKpF,KACvC,CACA,aAAAqF,GACE,OAAO,eAAgB,iBAAiBD,KAAKpF,KAC/C,CACA,cAAAsF,GACE,OAAO,eAAgB,kBAAkBF,KAAKpF,KAChD,CACA,IAAArC,GACE,OAAO,eAAgB,QAAQyH,KAAKpF,KACtC,CACA,QAAAR,GACE,OAAO,eAAgB,YAAY4F,KAAKpF,KAC1C,CACA,MAAAJ,GACE,OAAO,YAAa,UAAUwF,KAAKpF,KACrC,CACA,QAAAqD,GACE,OAAO,aAAc,YAAY+B,KAAKpF,KACxC,CACA,WAAAuF,GACE,OAAO,eAAgB,eAAeH,KAAKpF,KAC7C,CACA,OAAAf,GACE,OAAO,eAAgB,WAAWmG,KAAKpF,KACzC,CACA,QAAAwF,GACE,OAAO,eAAgB,YAAYJ,KAAKpF,KAC1C,CACA,SAAAyF,GACE,OAAO,eAAgB,aAAaL,KAAKpF,KAC3C,CACA,eAAAN,GACE,OAAO,eAAgB,mBAAmB0F,KAAKpF,KACjD,CACA,YAAAyD,GACE,OAAO,eAAgB,eAAgB,oBAAqB2B,KAAKpF,KACnE,CACA,oBAAAoD,GACE,OAAO,YAAa,wBAAwBgC,KAAKpF,KACnD,CACA,YAAA0F,GACE,OAAO,eAAgB,gBAAgBN,KAAKpF,KAC9C,CACA,kBAAA2F,GACE,OAAO,eAAgB,sBAAsBP,KAAKpF,KACpD,CACA,kBAAA4F,GACE,OAAO,eAAgB,sBAAsBR,KAAKpF,KACpD,CACA,eAAA6F,GACE,OAAO,KAAS,WAAY,UAAU,CAACrG,EAAUI,IAAwB,OAAbJ,IAAgC,IAAXI,IAAkBwF,KAAKpF,KAC1G,EAEF/B,OAAOC,IAAIC,IAAI,cAAe,oBAAqBgH,ICnEnD,MAAM,GAA+BlH,OAAOC,IAAImD,IAAI,OAAQ,wBCG7C,MAAMyE,WAAkB,GAAAC,eACrC,WAAAhG,GACE8B,SAASG,YACT,OAAgBhC,KAAM,cAAc,EACtC,CACA,GAAAgG,GACE,OAAO,eAAetH,MAAM,8CAA+C,CAAC,GAAG,EACjF,CACA,IAAAuH,GACE,OAAO,eAAevH,MAAM,+CAAgD,CAAC,GAAG,EAClF,CACA,SAAAwH,GACE,MAAO,KACT,CACA,wBAAAC,CAAyBC,GACvB,MAAO,CAACA,EACV,CACA,UAAAC,CAAWD,EAAOE,GAChB,IAAIC,EAAU,GACd,OAAIrF,MAAMC,QAAQiF,IAChBG,EAAUH,EAAMlD,KAAIkD,GAASpG,KAAKqG,WAAWD,EAAMI,WAAYF,KAI1DC,EAAQxF,KAAK,MAFX,GAAGuF,EAAS,IAAM,KAAKtG,KAAKgG,SAAShG,KAAKyG,yBAAyBL,IAG9E,CACA,wBAAAK,CAAyBL,GACvB,OAAOA,CACT,EAEFnI,OAAOC,IAAIC,IAAI,cAAe,qCAAsC2H,IC9BpE,MCIA,KDJgB,IAAI,aACnB3H,IAAI,OAAQgH,KAAM,IAAI,cACtBuB,OAAO,cAAeZ,KCEU,IAAI,cACpC3H,IAAI,OAAQ,QAAS4D,GACrB5D,IAAI,MAAO,WAAY,KACvBwI,OAAO,OAAOpJ,GAAO,UAAU,MAAO,CACrCwB,KAAMxB,EAAIyB,YACP,IAAI,iBACRb,IAAI,mBAAoB8F,IAAuB,IAAI,YAAa,MAChE2C,QAAQ,QACRC,UAAU,WCPX,iBAAiB1I,IAAI,eAAe,KAClC,YAAc,IAAI2B,GCElB,IAAAgH,QAAO,cAAwB,YAAY,SAAUjE,GAKnD,GAJAA,EAAM1E,IAAI,OAAQH,EAAE,IAAY,CAC9BL,KAAM,kBACNkB,KAAM,UAAU,SACf,eAAeH,MAAM,uCAAwC,IAC5D,YAAY2C,IAAI,cAAe,OACnCwB,EAAM1E,IAAI,YAAaH,EAAE,IAAW,OAAQ,IAC5C,MAAM8D,EAAS,WAAWiF,MAAMC,eAC1BjI,EAAO,UAAU6B,IAAI,QACrBqG,EAAa,iBACbC,EAAS3J,IACb,IAAI4J,EAASF,IAAe1J,GACvB4J,GAAUF,IACbE,EAASF,EAAWrH,WAAarC,GAQnCsF,EAAM1E,IAAI,MAAQZ,EAAImH,KAAM1G,EAAEsD,EAAe,CAC3CG,MAAOlE,EACPuE,OAAQA,EACRqF,OAAQA,GACP5J,GAAKgB,SAAU,GAAG,GAEvB,EAAAW,EAAA,GAASH,GAAMuB,QAAO/C,GAA0B,OAAnBA,EAAIiC,cAAyBjC,EAAI0B,WAAagI,IAAe1J,EAAIqC,WAAaqH,GAAc1J,EAAIqC,WAAaqH,EAAWrH,aAAYwB,QAAQ8F,GACzK,MAAME,EAAOrI,EAAKuB,QAAO/C,GAA0B,OAAnBA,EAAIiC,aAAqBJ,MAAK,CAACC,EAAGC,IAAMA,EAAEI,kBAAoBL,EAAEK,oBAChG0H,EAAKC,OAAO,EAAG,GAAGjG,QAAQ8F,GACtBE,EAAK3G,QACPoC,EAAM1E,IAAI,WAAYH,EAAE,IAAY,CAClCa,KAAM,UAAU,SACf,eAAeH,MAAM,uCAAwC,GAEpE,IlBjCA,eAAiB,SAAU4I,GACzB,GAAItH,KAAKuH,mBAAqBD,EAC5B,OAAOtH,KAAKuH,iBAEd,MAAMvI,EAAOgB,KAAKwH,OAAOT,MAAMjF,SAAS/C,KACxC,IAAIxB,EAAM,KAIV,GAHIyB,IACFzB,EAAMoG,EAAQ3E,IAEZA,IAASzB,GAAOA,IAAQA,EAAI0B,YAAc1B,EAAI8F,WAAY,CAC5D,GAAIrD,KAAKyH,kBACP,OAEFzH,KAAKyH,mBAAoB,EAMzBzH,KAAK2E,MAAM7D,KAAK,OAAQ9B,EAAM,CAC5BuB,QAAS,oCACRS,MAAK,KACNhB,KAAKuH,iBAAmB5D,EAAQ3E,GAChChB,EAAEsE,QAAQ,IACToF,SAAQ,KACT1H,KAAKyH,mBAAoB,CAAK,GAElC,CACA,GAAIlK,EAEF,OADAyC,KAAKuH,iBAAmBhK,EACjByC,KAAKuH,iBAEdvH,KAAKuH,sBAAmB5F,CAE1B,GACA,IAAAmF,QAAO,cAAqB,QAAQ,SAAUa,GAC5C,gBAAe,EACjB,KAGA,IAAAC,UAAS,cAAqB,QAAQ,SAAUC,GAC9C,MAAMtK,EAAM,iBACZ,OAAIA,EAAYS,EAAE0F,EAAS,CACzBjC,MAAOlE,IAEFsK,GACT,KACA,IAAAf,QAAO,cAAqB,QAAQ,SAAUa,GAC5C,MAAMpK,EAAM,iBACRA,IAAKoK,EAAKnK,MAAMK,WAAa,kBAAoBN,EAAImH,KAC3D,KACA,IAAAoC,QAAO,cAAqB,YAAY,WACtC,MAAMvJ,EAAM,iBACRA,GACF,aAAaA,EAAIgB,OAErB,KAIA,IAAAuI,QAAO,cAAwB,SAAS,SAAUjE,GAChD,MAAMtF,EAAM,iBACZ,GAAIA,EAAK,CACP,MAAMQ,EAAQR,EAAIQ,QACZ4H,EAAqBpI,EAAIoI,uBAAyB,YAAYmC,KAC9DC,EAAgBlF,EAAMxB,IAAI,iBAC5BtD,IACFgK,EAAcvK,MAAMK,UAAY,IAAU,CAACkK,EAAcvK,MAAMK,UAAW,qBAAsB,IAAkBE,KAClHgK,EAAcvK,MAAMM,MAAQ,CAC1B,UAAWC,IAGfgK,EAAcvK,MAAMwK,UAAYrC,EAChCoC,EAAc1E,SAAW,eAAe3E,MAAMiH,EAAqB,2CAA6C,kDAClH,CACF,KAIA,IAAAmB,QAAO,cAA6B,UAAU,SAAUhF,GACtDA,EAAO/C,KAAOf,EAAEc,MAAMmJ,MAAM,OAC9B,KAGA,IAAAnB,QAAO,cAA+B,iBAAiB,SAAUhF,GACjC,iBAAnBA,EAAOvB,QAChBuB,EAAOvB,QAAU,CAACuB,EAAOvB,SAEzBuB,EAAOvB,SAAS2B,KAAK,OAAQ,eAE3BlC,KAAK8B,OAAO/C,OACd+C,EAAOxB,SAAW,CAAC,EACnBwB,EAAOxB,OAAO/C,IAAMyC,KAAK8B,OAAO/C,KAEpC,KmBlGA,IAAA+H,QAAO,cAA8B,aAAa,SAAUjE,GAC1D,MAAM9D,EAAOiB,KAAKxC,MAAM+F,WAAWxE,OAC/BA,GAAQA,EAAK0B,QACfoC,EAAM1E,IAAI,OAAQ2F,GAAU/E,GAAO,GAEvC,KAGA,IAAA+H,QAAO,eAA0B,QAAQ,SAAUvF,GACjD,MAAMxC,GAAO,EAAAG,EAAA,GAASc,KAAKxC,MAAM+F,WAAWxE,QAC5C,GAAIA,GAAQA,EAAK0B,OAAQ,CACvB,MAAM1C,EAAQgB,EAAK,GAAGhB,QAClBA,IACFwD,EAAK/D,MAAMM,MAAQ,CACjB,YAAaC,GAEfwD,EAAK/D,MAAMK,UAAY,IAAU0D,EAAK/D,MAAMK,UAAW,0BAA2B,IAAkBE,IAExG,CACF,KAIA,IAAA+I,QAAO,eAA0B,SAAS,SAAUjE,GAClD,MAAM9D,EAAOiB,KAAKxC,MAAM+F,WAAWxE,OAC/BA,GAAQA,EAAK0B,QACfoC,EAAM1E,IAAI,OAAQ2F,GAAU/E,EAAM,CAChCV,MAAM,IACJ,EAER,KdlCA,IAAAyI,QAAO,KAAoB,sBAAsB,SAAUjE,EAAOU,GAC5DA,EAAW2E,UACbrF,EAAM1E,IAAI,OAAQH,EAAE,KAAQ,CAC1BL,KAAM,aACNwK,QAAS,IAAM3J,IAAI4J,MAAMC,MAAK,IAAM,8BAAmI,CACrK9E,gBAED/E,IAAIC,WAAWC,MAAM,2DAE5B,KeNA,IAAAoI,QAAO,cAAwB,uBAAuB,SAAUwB,GAE9D,MAAM/K,EAAM,iBACZ,GAAIA,EAAK,CACP,MAAMqC,EAASrC,EAAIqC,SACbb,EAAOa,EAAS,CAACA,EAAQrC,GAAO,CAACA,GACvC+K,EAAQtH,MAAKuH,GAAYA,EAASC,OAAOzJ,KAAOA,GAClD,MACE,aAAayJ,OAAOzJ,KAAO,EAE/B,KACA,IAAA+H,QAAO,6CAA8C,UAAU,WAC7D,YAAY7G,KAAK,CAAC,WAAWe,MAAK,IAAMhD,EAAEsE,WAG1CtC,KAAKD,YAAY0I,UAAUC,WAAa,YACf,EAAAC,GAAA,KACHlI,QACpB,UAAU4H,MAAK,IAAM,8BAAmI,CACtJO,cAAe5I,KAAKuI,SAASC,OAAOzJ,MAAQ,IAAII,MAAM,GACtD0J,SAAU9J,IACRiB,KAAKuI,SAASC,OAAOzJ,KAAOA,EAC5BiB,KAAK8I,EAAE,YAAYC,OAAO,GAGhC,CACF,KAIA,IAAAjC,QAAO,6CAA8C,eAAe,SAAUjE,GAC5E,MAAM9D,EAAOiB,KAAKuI,SAASC,OAAOzJ,MAAQ,GACpCiK,GAAiB,EAAAL,GAAA,KACvB9F,EAAM1E,IAAI,OAAQH,EAAE,KAAQ,CAC1BH,UAAW,IAAU,CAAC,gCAAiC,2BAA4BmL,EAAevI,QAAU,aAC5G0H,QAASnI,KAAK0I,WAAWjG,KAAKzC,OAC7BjB,EAAK0B,OAASqD,GAAU/E,GAAQf,EAAE,OAAQ,CAC3CH,UAAW,qBACV,eAAea,MAAM,4DAA6D,GACvF,KACA,IAAAkJ,UAAS,6CAA8C,YAAY,SAAUC,GAC3E,MAAMoB,EAAajJ,KAAKuI,SAASC,OAAOzJ,MAAQ,GAC1CmK,EAAoBD,EAAW3I,QAAO/C,GAA0B,OAAnBA,EAAIiC,aAAwBjC,EAAI0B,YAC7EkK,EAAsBF,EAAW3I,QAAO/C,GAA0B,OAAnBA,EAAIiC,aACnDwJ,GAAiB,EAAAL,GAAA,KACjBS,EAAiBC,SAAS,UAAUxC,UAAU,mBAC9CyC,EAAmBD,SAAS,UAAUxC,UAAU,qBAChD0C,EAAiBF,SAAS,UAAUxC,UAAU,mBAC9C2C,EAAmBH,SAAS,UAAUxC,UAAU,uBAChDoC,EAAWxI,QAA6B,IAAnB8I,GAA6C,IAArBC,GAA0BN,EAAkBzI,OAAS2I,GAAkBD,EAAoB1I,OAAS6I,IAAqBN,EAAevI,OACzL,UAAU4H,MAAK,IAAM,8BAAmI,CACtJO,aAAcK,EACdJ,SAAU9J,IACRiB,KAAKuI,SAASC,OAAOzJ,KAAOA,EAC5B8I,GAAU,IAIdA,GAEJ,KAGA,IAAAf,QAAO,6CAA8C,QAAQ,SAAU7B,GACrEA,EAAKwE,cAAgBxE,EAAKwE,eAAiB,CAAC,EAC5CxE,EAAKwE,cAAc1K,KAAOiB,KAAKuI,SAASC,OAAOzJ,IACjD,GH5DgB,G,6BIdH,SAAS4J,EAAkBpF,GACxC,IAAIxE,EAAOP,IAAImG,MAAM/D,IAAI,QACzB,GAAI2C,EAAY,CACd,MAAMmG,EAAiBnG,EAAWxE,QAAU,GAC5CA,EAAOA,EAAKuB,QAAO/C,GAAOA,EAAIqI,sBAAwB8D,EAAexJ,SAAS3C,IAChF,MACEwB,EAAOA,EAAKuB,QAAO/C,GAAOA,EAAIoI,uBAEhC,OAAO5G,CACT,C,iBACAd,OAAOC,IAAIC,IAAI,cAAe,gCAAiCwK,E,uBCV/DgB,EAAOC,QAAU3L,OAAOC,IAAImD,IAAI,OAAQ,mB,uBCAxCsI,EAAOC,QAAU3L,OAAOC,IAAImD,IAAI,OAAQ,a,uBCAxCsI,EAAOC,QAAU3L,OAAOC,IAAImD,IAAI,OAAQ,2B,sBCAxCsI,EAAOC,QAAU3L,OAAOC,IAAImD,IAAI,OAAQ,8B,sBCAxCsI,EAAOC,QAAU3L,OAAOC,IAAImD,IAAI,OAAQ,yB,uBCAxCsI,EAAOC,QAAU3L,OAAOC,IAAImD,IAAI,OAAQ,qC,uBCAxCsI,EAAOC,QAAU3L,OAAOC,IAAImD,IAAI,OAAQ,2B,uBCAxCsI,EAAOC,QAAU3L,OAAOC,IAAImD,IAAI,OAAQ,mC,uBCAxCsI,EAAOC,QAAU3L,OAAOC,IAAImD,IAAI,OAAQ,mC,uBCAxCsI,EAAOC,QAAU3L,OAAOC,IAAImD,IAAI,OAAQ,sB,uBCAxCsI,EAAOC,QAAU3L,OAAOC,IAAImD,IAAI,OAAQ,yB,uBCAxCsI,EAAOC,QAAU3L,OAAOC,IAAImD,IAAI,OAAQ,uB,uBCAxCsI,EAAOC,QAAU3L,OAAOC,IAAImD,IAAI,OAAQ,2B,uBCAxCsI,EAAOC,QAAU3L,OAAOC,IAAImD,IAAI,OAAQ,Y,uBCAxCsI,EAAOC,QAAU3L,OAAOC,IAAImD,IAAI,OAAQ,kC,6BCAxC,SAASwI,EAAQC,GAGf,OAAOD,EAAU,mBAAqBE,QAAU,iBAAmBA,OAAOC,SAAW,SAAUF,GAC7F,cAAcA,CAChB,EAAI,SAAUA,GACZ,OAAOA,GAAK,mBAAqBC,QAAUD,EAAE/J,cAAgBgK,QAAUD,IAAMC,OAAOtB,UAAY,gBAAkBqB,CACpH,EAAGD,EAAQC,EACb,CCPA,SAASG,EAAgBC,EAAGC,EAAGC,GAC7B,OAAQD,ECAV,SAAuBC,GACrB,IAAIC,ECFN,SAAqBD,GACnB,GAAI,UAAYP,EAAQO,KAAOA,EAAG,OAAOA,EACzC,IAAIF,EAAIE,EAAEL,OAAOO,aACjB,QAAI,IAAWJ,EAAG,CAChB,IAAIG,EAAIH,EAAE9E,KAAKgF,EAAGD,UAClB,GAAI,UAAYN,EAAQQ,GAAI,OAAOA,EACnC,MAAM,IAAIE,UAAU,+CACtB,CACA,OAAyBC,OAAiBJ,EAC5C,CDPUE,CAAYF,GACpB,MAAO,UAAYP,EAAQQ,GAAKA,EAAIA,EAAI,EAC1C,CDHcI,CAAcN,MAAOD,EAAIQ,OAAOC,eAAeT,EAAGC,EAAG,CAC/D/D,MAAOgE,EACPQ,YAAY,EACZC,cAAc,EACdC,UAAU,IACPZ,EAAEC,GAAKC,EAAGF,CACjB,C,mBGPIa,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAC5BhN,OAAOC,IAAIgN,kBAAkB,iBAAmBF,EAChD,IAAIG,EAAeJ,EAAyBE,GAC5C,QAAqBtJ,IAAjBwJ,EACH,OAAOA,EAAavB,QAGrB,IAAID,EAASoB,EAAyBE,GAAY,CAGjDrB,QAAS,CAAC,GAOX,OAHAwB,EAAoBH,GAAUtB,EAAQA,EAAOC,QAASoB,GAG/CrB,EAAOC,OACf,CAGAoB,EAAoBhN,EAAIoN,ECxBxBJ,EAAoBK,EAAK1B,IACxB,IAAI2B,EAAS3B,GAAUA,EAAO4B,WAC7B,IAAO5B,EAAiB,QACxB,IAAM,EAEP,OADAqB,EAAoBQ,EAAEF,EAAQ,CAAEjM,EAAGiM,IAC5BA,CAAM,ECLdN,EAAoBQ,EAAI,CAAC5B,EAAS6B,KACjC,IAAI,IAAIzF,KAAOyF,EACXT,EAAoBlB,EAAE2B,EAAYzF,KAASgF,EAAoBlB,EAAEF,EAAS5D,IAC5E0E,OAAOC,eAAef,EAAS5D,EAAK,CAAE4E,YAAY,EAAMvJ,IAAKoK,EAAWzF,IAE1E,ECNDgF,EAAoBU,EAAI,CAAC,EAGzBV,EAAoBd,EAAKyB,GACjBjL,QAAQE,IAAI8J,OAAOkB,KAAKZ,EAAoBU,GAAGG,QAAO,CAACC,EAAU9F,KACvEgF,EAAoBU,EAAE1F,GAAK2F,EAASG,GAC7BA,IACL,KCNJd,EAAoBe,EAAKJ,GAEjB,yCCHRX,EAAoBgB,EAAI,WACvB,GAA0B,iBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAOjM,MAAQ,IAAIkM,SAAS,cAAb,EAChB,CAAE,MAAOhC,GACR,GAAsB,iBAAXiC,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBnB,EAAoBlB,EAAI,CAACsC,EAAKC,IAAU3B,OAAOjC,UAAU6D,eAAelH,KAAKgH,EAAKC,GnEA9EjP,EAAa,CAAC,EACdC,EAAoB,kBAExB2N,EAAoBuB,EAAI,CAACC,EAAKC,EAAMzG,EAAK2F,KACxC,GAAGvO,EAAWoP,GAAQpP,EAAWoP,GAAKtK,KAAKuK,OAA3C,CACA,IAAIC,EAAQC,EACZ,QAAWhL,IAARqE,EAEF,IADA,IAAI4G,EAAUC,SAASC,qBAAqB,UACpCzC,EAAI,EAAGA,EAAIuC,EAAQnM,OAAQ4J,IAAK,CACvC,IAAI0C,EAAIH,EAAQvC,GAChB,GAAG0C,EAAEC,aAAa,QAAUR,GAAOO,EAAEC,aAAa,iBAAmB3P,EAAoB2I,EAAK,CAAE0G,EAASK,EAAG,KAAO,CACpH,CAEGL,IACHC,GAAa,GACbD,EAASG,SAASI,cAAc,WAEzBC,QAAU,QACjBR,EAAOS,QAAU,IACbnC,EAAoBoC,IACvBV,EAAOW,aAAa,QAASrC,EAAoBoC,IAElDV,EAAOW,aAAa,eAAgBhQ,EAAoB2I,GAExD0G,EAAOY,IAAMd,GAEdpP,EAAWoP,GAAO,CAACC,GACnB,IAAIc,EAAmB,CAACC,EAAMC,KAE7Bf,EAAOgB,QAAUhB,EAAOiB,OAAS,KACjCC,aAAaT,GACb,IAAIU,EAAUzQ,EAAWoP,GAIzB,UAHOpP,EAAWoP,GAClBE,EAAOoB,YAAcpB,EAAOoB,WAAWC,YAAYrB,GACnDmB,GAAWA,EAAQzM,SAAS4M,GAAQA,EAAGP,KACpCD,EAAM,OAAOA,EAAKC,EAAM,EAExBN,EAAUc,WAAWV,EAAiB9K,KAAK,UAAMd,EAAW,CAAEuM,KAAM,UAAWC,OAAQzB,IAAW,MACtGA,EAAOgB,QAAUH,EAAiB9K,KAAK,KAAMiK,EAAOgB,SACpDhB,EAAOiB,OAASJ,EAAiB9K,KAAK,KAAMiK,EAAOiB,QACnDhB,GAAcE,SAASuB,KAAKC,YAAY3B,EApCkB,CAoCX,EoEvChD1B,EAAoBb,EAAKP,IACH,oBAAXG,QAA0BA,OAAOuE,aAC1C5D,OAAOC,eAAef,EAASG,OAAOuE,YAAa,CAAElI,MAAO,WAE7DsE,OAAOC,eAAef,EAAS,aAAc,CAAExD,OAAO,GAAO,E,MCL9D,IAAImI,EACAvD,EAAoBgB,EAAEwC,gBAAeD,EAAYvD,EAAoBgB,EAAEyC,SAAW,IACtF,IAAI5B,EAAW7B,EAAoBgB,EAAEa,SACrC,IAAK0B,GAAa1B,IACbA,EAAS6B,eAAkE,WAAjD7B,EAAS6B,cAAcC,QAAQC,gBAC5DL,EAAY1B,EAAS6B,cAAcpB,MAC/BiB,GAAW,CACf,IAAI3B,EAAUC,EAASC,qBAAqB,UAC5C,GAAGF,EAAQnM,OAEV,IADA,IAAI4J,EAAIuC,EAAQnM,OAAS,EAClB4J,GAAK,KAAOkE,IAAc,aAAaM,KAAKN,KAAaA,EAAY3B,EAAQvC,KAAKiD,GAE3F,CAID,IAAKiB,EAAW,MAAM,IAAIO,MAAM,yDAChCP,EAAYA,EAAUQ,QAAQ,OAAQ,IAAIA,QAAQ,QAAS,IAAIA,QAAQ,YAAa,KACpF/D,EAAoBgE,EAAIT,C,KClBxBvD,EAAoBU,EAAEuD,OAAS,CAACtD,EAASG,KAExC,MAAMoD,EAAoBlE,EAAoBuB,EAC9CvB,EAAoBuB,EAAItO,OAAOC,IAAIiR,UAAU1M,KAAKxE,OAAOC,IAAKgR,EAAkB,E,MCEjF,IAAIE,EAAkB,CACrB,IAAK,GAGNpE,EAAoBU,EAAE2D,EAAI,CAAC1D,EAASG,KAElC,IAAIwD,EAAqBtE,EAAoBlB,EAAEsF,EAAiBzD,GAAWyD,EAAgBzD,QAAWhK,EACtG,GAA0B,IAAvB2N,EAGF,GAAGA,EACFxD,EAAS5J,KAAKoN,EAAmB,QAC3B,CAGL,IAAIhH,EAAU,IAAI5H,SAAQ,CAACC,EAAS4O,IAAYD,EAAqBF,EAAgBzD,GAAW,CAAChL,EAAS4O,KAC1GzD,EAAS5J,KAAKoN,EAAmB,GAAKhH,GAGtC,IAAIkE,EAAMxB,EAAoBgE,EAAIhE,EAAoBe,EAAEJ,GAEpD6D,EAAQ,IAAIV,MAgBhB9D,EAAoBuB,EAAEC,GAfFiB,IACnB,GAAGzC,EAAoBlB,EAAEsF,EAAiBzD,KAEf,KAD1B2D,EAAqBF,EAAgBzD,MACRyD,EAAgBzD,QAAWhK,GACrD2N,GAAoB,CACtB,IAAIG,EAAYhC,IAAyB,SAAfA,EAAMS,KAAkB,UAAYT,EAAMS,MAChEwB,EAAUjC,GAASA,EAAMU,QAAUV,EAAMU,OAAOb,IACpDkC,EAAMG,QAAU,iBAAmBhE,EAAU,cAAgB8D,EAAY,KAAOC,EAAU,IAC1FF,EAAMjR,KAAO,iBACbiR,EAAMtB,KAAOuB,EACbD,EAAMI,QAAUF,EAChBJ,EAAmB,GAAGE,EACvB,CACD,GAEwC,SAAW7D,EAASA,EAE/D,CACD,EAcF,IAAIkE,EAAuB,CAACC,EAA4B7K,KACvD,IAGIgG,EAAUU,GAHToE,EAAUC,EAAaC,GAAWhL,EAGhBoF,EAAI,EAC3B,GAAG0F,EAASG,MAAMxL,GAAgC,IAAxB0K,EAAgB1K,KAAa,CACtD,IAAIuG,KAAY+E,EACZhF,EAAoBlB,EAAEkG,EAAa/E,KACrCD,EAAoBhN,EAAEiN,GAAY+E,EAAY/E,IAG7CgF,GAAsBA,EAAQjF,EAClC,CAEA,IADG8E,GAA4BA,EAA2B7K,GACrDoF,EAAI0F,EAAStP,OAAQ4J,IACzBsB,EAAUoE,EAAS1F,GAChBW,EAAoBlB,EAAEsF,EAAiBzD,IAAYyD,EAAgBzD,IACrEyD,EAAgBzD,GAAS,KAE1ByD,EAAgBzD,GAAW,CAC5B,EAIGwE,EAAqBC,KAAiC,2BAAIA,KAAiC,4BAAK,GACpGD,EAAmB/O,QAAQyO,EAAqBpN,KAAK,KAAM,IAC3D0N,EAAmBjO,KAAO2N,EAAqBpN,KAAK,KAAM0N,EAAmBjO,KAAKO,KAAK0N,G","sources":["webpack://@flarum/tags/webpack/runtime/load script","webpack://@flarum/tags/./src/common/helpers/tagIcon.js","webpack://@flarum/tags/./src/common/helpers/tagLabel.js","webpack://@flarum/tags/./src/common/utils/sortTags.tsx","webpack://@flarum/tags/./src/common/states/TagListState.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/IndexSidebar')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Separator')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/LinkButton')\"","webpack://@flarum/tags/./src/forum/components/TagLinkButton.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Page')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/PageStructure')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/WelcomeHero')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/humanTime')\"","webpack://@flarum/tags/./src/forum/components/TagsPage.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/IndexPage')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/states/DiscussionListState')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/states/GlobalSearchState')\"","webpack://@flarum/tags/./src/forum/components/TagHero.js","webpack://@flarum/tags/./src/forum/addTagFilter.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/DiscussionListItem')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/DiscussionHero')\"","webpack://@flarum/tags/./src/common/helpers/tagsLabel.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/utils/DiscussionControls')\"","webpack://@flarum/tags/./src/forum/addTagControl.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/models/Discussion')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/EventPost')\"","webpack://@flarum/tags/./src/forum/components/DiscussionTaggedPost.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/computed')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Model')\"","webpack://@flarum/tags/./src/common/models/Tag.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/query/IGambit')\"","webpack://@flarum/tags/./src/common/query/discussions/TagGambit.ts","webpack://@flarum/tags/./src/common/extend.ts","webpack://@flarum/tags/./src/forum/extend.ts","webpack://@flarum/tags/./src/forum/index.ts","webpack://@flarum/tags/./src/forum/addTagList.js","webpack://@flarum/tags/./src/forum/addTagLabels.js","webpack://@flarum/tags/./src/forum/addTagComposer.js","webpack://@flarum/tags/./src/forum/utils/getSelectableTags.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Component')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/FormModal')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/highlight')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/textContrastClass')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/KeyboardNavigatable')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/Stream')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extract')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/DiscussionPage')\"","webpack://@flarum/tags/../../../node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/tags/../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/tags/../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/tags/../../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/tags/webpack/bootstrap","webpack://@flarum/tags/webpack/runtime/compat get default export","webpack://@flarum/tags/webpack/runtime/define property getters","webpack://@flarum/tags/webpack/runtime/ensure chunk","webpack://@flarum/tags/webpack/runtime/get javascript chunk filename","webpack://@flarum/tags/webpack/runtime/global","webpack://@flarum/tags/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/tags/webpack/runtime/make namespace object","webpack://@flarum/tags/webpack/runtime/publicPath","webpack://@flarum/tags/webpack/runtime/compat","webpack://@flarum/tags/webpack/runtime/jsonp chunk loading"],"sourcesContent":["var inProgress = {};\nvar dataWebpackPrefix = \"module.exports:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import classList from 'flarum/common/utils/classList';\nexport default function tagIcon(tag, attrs, settings) {\n if (attrs === void 0) {\n attrs = {};\n }\n if (settings === void 0) {\n settings = {};\n }\n const hasIcon = tag && tag.icon();\n const {\n useColor = true\n } = settings;\n attrs.className = classList([attrs.className, 'icon text-colored', hasIcon ? tag.icon() : 'TagIcon']);\n if (tag && useColor) {\n attrs.style = attrs.style || {};\n attrs.style['--color'] = tag.color();\n } else if (!tag) {\n attrs.className += ' untagged';\n }\n return hasIcon ? m(\"i\", attrs) : m(\"span\", attrs);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagIcon', tagIcon);","import extract from 'flarum/common/utils/extract';\nimport Link from 'flarum/common/components/Link';\nimport classList from 'flarum/common/utils/classList';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport tagIcon from './tagIcon';\nexport default function tagLabel(tag, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n attrs.style = attrs.style || {};\n attrs.className = 'TagLabel ' + (attrs.className || '');\n const link = extract(attrs, 'link');\n const tagText = tag ? tag.name() : app.translator.trans('flarum-tags.lib.deleted_tag_text');\n if (tag) {\n const color = tag.color();\n if (color) {\n attrs.style['--tag-bg'] = color;\n attrs.className = classList(attrs.className, 'colored', textContrastClass(color));\n }\n if (link) {\n attrs.title = tag.description() || '';\n attrs.href = app.route('tag', {\n tags: tag.slug()\n });\n }\n if (tag.isChild()) {\n attrs.className += ' TagLabel--child';\n }\n } else {\n attrs.className += ' untagged';\n }\n return m(link ? Link : 'span', attrs, m(\"span\", {\n className: \"TagLabel-text\"\n }, tag && tag.icon() && tagIcon(tag, {\n className: 'TagLabel-icon'\n }, {\n useColor: false\n }), m(\"span\", {\n className: \"TagLabel-name\"\n }, tagText)));\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagLabel', tagLabel);","export default function sortTags(tags) {\n return tags.slice(0).sort((a, b) => {\n const aPos = a.position();\n const bPos = b.position();\n\n // If they're both secondary tags, sort them by their discussions count,\n // descending.\n if (aPos === null && bPos === null) return b.discussionCount() - a.discussionCount();\n\n // If just one is a secondary tag, then the primary tag should\n // come first.\n if (bPos === null) return -1;\n if (aPos === null) return 1;\n\n // If we've made it this far, we know they're both primary tags. So we'll\n // need to see if they have parents.\n const aParent = a.parent();\n const bParent = b.parent();\n\n // If they both have the same parent, then their positions are local,\n // so we can compare them directly.\n if (aParent === bParent) return aPos - bPos;\n // If they are both child tags, then we will compare the positions of their\n // parents.\n else if (aParent && bParent) return aParent.position() - bParent.position();\n // If we are comparing a child tag with its parent, then we let the parent\n // come first. If we are comparing an unrelated parent/child, then we\n // compare both of the parents.\n else if (aParent) return aParent === b ? 1 : aParent.position() - bPos;else if (bParent) return bParent === a ? -1 : aPos - bParent.position();\n return 0;\n });\n}\nflarum.reg.add('flarum-tags', 'common/utils/sortTags', sortTags);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nexport default class TagListState {\n constructor() {\n _defineProperty(this, \"loadedIncludes\", void 0);\n }\n async load(includes) {\n if (includes === void 0) {\n includes = [];\n }\n if (!this.loadedIncludes) {\n return this.query(includes);\n }\n const unloadedIncludes = includes.filter(include => !this.loadedIncludes.has(include));\n if (unloadedIncludes.length === 0) {\n return Promise.resolve(app.store.all('tags'));\n }\n return this.query(unloadedIncludes);\n }\n async query(includes) {\n if (includes === void 0) {\n includes = [];\n }\n this.loadedIncludes ??= new Set();\n return app.store.find('tags', {\n include: includes.join(',')\n }).then(val => {\n const tags = Array.isArray(val) ? val : [val];\n includes.forEach(include => this.loadedIncludes.add(include));\n return tags;\n });\n }\n}\nflarum.reg.add('flarum-tags', 'common/states/TagListState', TagListState);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/IndexSidebar');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Separator');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/LinkButton');","import Link from 'flarum/common/components/Link';\nimport LinkButton from 'flarum/common/components/LinkButton';\nimport classList from 'flarum/common/utils/classList';\nimport tagIcon from '../../common/helpers/tagIcon';\nexport default class TagLinkButton extends LinkButton {\n view(vnode) {\n const tag = this.attrs.model;\n const description = tag && tag.description();\n const className = classList('TagLinkButton hasIcon', {\n child: tag.isChild()\n }, this.attrs.className);\n return m(Link, {\n className: className,\n href: this.attrs.route,\n style: tag ? {\n '--color': tag.color()\n } : undefined,\n title: description || undefined\n }, tagIcon(tag, {\n className: 'Button-icon'\n }), m(\"span\", {\n className: \"Button-label\"\n }, tag ? tag.name() : app.translator.trans('flarum-tags.forum.index.untagged_link')));\n }\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n const tag = attrs.model;\n attrs.params.tags = tag ? tag.slug() : 'untagged';\n attrs.route = app.route('tag', attrs.params);\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/TagLinkButton', TagLinkButton);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Page');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/PageStructure');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/WelcomeHero');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/humanTime');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/forum/app';\nimport Page from 'flarum/common/components/Page';\nimport PageStructure from 'flarum/forum/components/PageStructure';\nimport WelcomeHero from 'flarum/forum/components/WelcomeHero';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport Link from 'flarum/common/components/Link';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport humanTime from 'flarum/common/helpers/humanTime';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport tagIcon from '../../common/helpers/tagIcon';\nimport tagLabel from '../../common/helpers/tagLabel';\nimport sortTags from '../../common/utils/sortTags';\nexport default class TagsPage extends Page {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"tags\", void 0);\n _defineProperty(this, \"loading\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n app.history.push('tags', extractText(app.translator.trans('flarum-tags.forum.header.back_to_tags_tooltip')));\n app.current.set('noTagsList', true);\n this.tags = [];\n const preloaded = app.preloadedApiDocument();\n if (preloaded) {\n this.tags = sortTags(preloaded.filter(tag => !tag.isChild()));\n return;\n }\n this.loading = true;\n app.tagList.load(['children', 'lastPostedDiscussion', 'parent']).then(() => {\n this.tags = sortTags(app.store.all('tags').filter(tag => !tag.isChild()));\n this.loading = false;\n m.redraw();\n });\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n app.setTitle(extractText(app.translator.trans('flarum-tags.forum.all_tags.meta_title_text')));\n app.setTitleCount(0);\n }\n view() {\n return m(PageStructure, {\n className: \"TagsPage Page--vertical\",\n hero: this.hero.bind(this),\n sidebar: this.sidebar.bind(this)\n }, this.contentItems().toArray());\n }\n contentItems() {\n const items = new ItemList();\n if (this.loading) {\n items.add('loading', m(LoadingIndicator, null));\n } else {\n const pinned = this.tags.filter(tag => tag.position() !== null);\n const cloud = this.tags.filter(tag => tag.position() === null);\n items.add('tagTiles', this.tagTileListView(pinned), 100);\n if (cloud.length) {\n items.add('cloud', this.cloudView(cloud), 10);\n }\n }\n return items;\n }\n hero() {\n return m(WelcomeHero, null);\n }\n sidebar() {\n return m(IndexSidebar, null);\n }\n tagTileListView(pinned) {\n return m(\"ul\", {\n className: \"TagTiles\"\n }, pinned.map(this.tagTileView.bind(this)));\n }\n tagTileView(tag) {\n const lastPostedDiscussion = tag.lastPostedDiscussion();\n const children = sortTags(tag.children() || []);\n return m(\"li\", {\n className: classList('TagTile', {\n colored: tag.color()\n }, textContrastClass(tag.color())),\n style: {\n '--tag-bg': tag.color()\n }\n }, m(Link, {\n className: \"TagTile-info\",\n href: app.route.tag(tag)\n }, m(\"div\", {\n className: \"TagTile-heading\"\n }, tag.icon() && tagIcon(tag, {}, {\n useColor: false\n }), m(\"h3\", {\n className: \"TagTile-name\"\n }, tag.name())), m(\"p\", {\n className: \"TagTile-description\"\n }, tag.description()), !!children && m(\"div\", {\n className: \"TagTile-children\"\n }, children.map(child => [m(Link, {\n href: app.route.tag(child)\n }, child.name()), ' ']))), lastPostedDiscussion ? m(Link, {\n className: \"TagTile-lastPostedDiscussion\",\n href: app.route.discussion(lastPostedDiscussion, lastPostedDiscussion.lastPostNumber())\n }, m(\"span\", {\n className: \"TagTile-lastPostedDiscussion-title\"\n }, lastPostedDiscussion.title()), humanTime(lastPostedDiscussion.lastPostedAt())) : m(\"span\", {\n className: \"TagTile-lastPostedDiscussion\"\n }));\n }\n cloudView(cloud) {\n return m(\"div\", {\n className: \"TagCloud\"\n }, cloud.map(tag => [tagLabel(tag, {\n link: true\n }), ' ']));\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/TagsPage', TagsPage);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/IndexPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/states/DiscussionListState');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/states/GlobalSearchState');","import Component from 'flarum/common/Component';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport tagIcon from '../../common/helpers/tagIcon';\nimport classList from 'flarum/common/utils/classList';\nexport default class TagHero extends Component {\n view() {\n const tag = this.attrs.model;\n const color = tag.color();\n return m(\"header\", {\n className: classList('Hero', 'TagHero', {\n 'TagHero--colored': color,\n [textContrastClass(color)]: color\n }),\n style: color ? {\n '--hero-bg': color\n } : undefined\n }, m(\"div\", {\n className: \"container\"\n }, m(\"div\", {\n className: \"containerNarrow\"\n }, m(\"h1\", {\n className: \"Hero-title\"\n }, tag.icon() && tagIcon(tag, {}, {\n useColor: false\n }), \" \", tag.name()), m(\"div\", {\n className: \"Hero-subtitle\"\n }, tag.description()))));\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/TagHero', TagHero);","import app from 'flarum/forum/app';\nimport { extend, override } from 'flarum/common/extend';\nimport IndexPage from 'flarum/forum/components/IndexPage';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport DiscussionListState from 'flarum/forum/states/DiscussionListState';\nimport GlobalSearchState from 'flarum/forum/states/GlobalSearchState';\nimport classList from 'flarum/common/utils/classList';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport TagHero from './components/TagHero';\nconst findTag = slug => app.store.all('tags').find(tag => tag.slug().localeCompare(slug, undefined, {\n sensitivity: 'base'\n}) === 0);\nexport default function addTagFilter() {\n app.currentTag = function (reload) {\n if (this.currentActiveTag && !reload) {\n return this.currentActiveTag;\n }\n const slug = this.search.state.params().tags;\n let tag = null;\n if (slug) {\n tag = findTag(slug);\n }\n if (slug && !tag || tag && !tag.isChild() && !tag.children()) {\n if (this.currentTagLoading) {\n return;\n }\n this.currentTagLoading = true;\n\n // Unlike the backend, no need to fetch parent.children because if we're on\n // a child tag page, then either:\n // - We loaded in that child tag (and its siblings) in the API document\n // - We first navigated to the current tag's parent, which would have loaded in the current tag's siblings.\n this.store.find('tags', slug, {\n include: 'children,children.parent,parent'\n }).then(() => {\n this.currentActiveTag = findTag(slug);\n m.redraw();\n }).finally(() => {\n this.currentTagLoading = false;\n });\n }\n if (tag) {\n this.currentActiveTag = tag;\n return this.currentActiveTag;\n }\n this.currentActiveTag = undefined;\n return;\n };\n extend(IndexPage.prototype, 'view', function (vdom) {\n app.currentTag(true);\n });\n\n // If currently viewing a tag, insert a tag hero at the top of the view.\n override(IndexPage.prototype, 'hero', function (original) {\n const tag = app.currentTag();\n if (tag) return m(TagHero, {\n model: tag\n });\n return original();\n });\n extend(IndexPage.prototype, 'view', function (vdom) {\n const tag = app.currentTag();\n if (tag) vdom.attrs.className += ' IndexPage--tag' + tag.id();\n });\n extend(IndexPage.prototype, 'setTitle', function () {\n const tag = app.currentTag();\n if (tag) {\n app.setTitle(tag.name());\n }\n });\n\n // If currently viewing a tag, restyle the 'new discussion' button to use\n // the tag's color, and disable if the user isn't allowed to edit.\n extend(IndexSidebar.prototype, 'items', function (items) {\n const tag = app.currentTag();\n if (tag) {\n const color = tag.color();\n const canStartDiscussion = tag.canStartDiscussion() || !app.session.user;\n const newDiscussion = items.get('newDiscussion');\n if (color) {\n newDiscussion.attrs.className = classList([newDiscussion.attrs.className, 'Button--tagColored', textContrastClass(color)]);\n newDiscussion.attrs.style = {\n '--color': color\n };\n }\n newDiscussion.attrs.disabled = !canStartDiscussion;\n newDiscussion.children = app.translator.trans(canStartDiscussion ? 'core.forum.index.start_discussion_button' : 'core.forum.index.cannot_start_discussion_button');\n }\n });\n\n // Add a parameter for the global search state to pass on to the\n // DiscussionListState that will let us filter discussions by tag.\n extend(GlobalSearchState.prototype, 'params', function (params) {\n params.tags = m.route.param('tags');\n });\n\n // Translate that parameter into a gambit appended to the search query.\n extend(DiscussionListState.prototype, 'requestParams', function (params) {\n if (typeof params.include === 'string') {\n params.include = [params.include];\n } else {\n params.include?.push('tags', 'tags.parent');\n }\n if (this.params.tags) {\n params.filter ||= {};\n params.filter.tag = this.params.tags;\n }\n });\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/DiscussionListItem');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/DiscussionHero');","import extract from 'flarum/common/utils/extract';\nimport tagLabel from './tagLabel';\nimport sortTags from '../utils/sortTags';\nimport classList from 'flarum/common/utils/classList';\nexport default function tagsLabel(tags, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n const children = [];\n const {\n link,\n ...otherAttrs\n } = attrs;\n otherAttrs.className = classList('TagsLabel', otherAttrs.className);\n if (tags) {\n sortTags(tags).forEach(tag => {\n if (tag || tags.length === 1) {\n children.push(tagLabel(tag, {\n link\n }));\n }\n });\n } else {\n children.push(tagLabel());\n }\n return m(\"span\", otherAttrs, children);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagsLabel', tagsLabel);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/utils/DiscussionControls');","import { extend } from 'flarum/common/extend';\nimport DiscussionControls from 'flarum/forum/utils/DiscussionControls';\nimport Button from 'flarum/common/components/Button';\nexport default function addTagControl() {\n // Add a control allowing the discussion to be moved to another category.\n extend(DiscussionControls, 'moderationControls', function (items, discussion) {\n if (discussion.canTag()) {\n items.add('tags', m(Button, {\n icon: \"fas fa-tag\",\n onclick: () => app.modal.show(() => import(/* webpackChunkName: 'forum/components/TagDiscussionModal', webpackMode: 'lazy-once' */ './components/TagDiscussionModal'), {\n discussion\n })\n }, app.translator.trans('flarum-tags.forum.discussion_controls.edit_tags_button')));\n }\n });\n}flarum.reg.addChunkModule('371', '440', 'flarum-tags', 'forum/components/TagDiscussionModal');\nflarum.reg.addChunkModule('371', '440', 'flarum-tags', 'common/components/TagSelectionModal');\nflarum.reg.addChunkModule('371', '440', 'flarum-tags', 'forum/components/ToggleButton');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/models/Discussion');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/EventPost');","import EventPost from 'flarum/forum/components/EventPost';\nimport tagsLabel from '../../common/helpers/tagsLabel';\nexport default class DiscussionTaggedPost extends EventPost {\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n const oldTags = attrs.post.content()[0];\n const newTags = attrs.post.content()[1];\n function diffTags(tags1, tags2) {\n return tags1.filter(tag => tags2.indexOf(tag) === -1).map(id => app.store.getById('tags', id));\n }\n attrs.tagsAdded = diffTags(newTags, oldTags);\n attrs.tagsRemoved = diffTags(oldTags, newTags);\n }\n icon() {\n return 'fas fa-tag';\n }\n descriptionKey() {\n if (this.attrs.tagsAdded.length) {\n if (this.attrs.tagsRemoved.length) {\n return 'flarum-tags.forum.post_stream.added_and_removed_tags_text';\n }\n return 'flarum-tags.forum.post_stream.added_tags_text';\n }\n return 'flarum-tags.forum.post_stream.removed_tags_text';\n }\n descriptionData() {\n const data = {};\n if (this.attrs.tagsAdded.length) {\n data.tagsAdded = app.translator.trans('flarum-tags.forum.post_stream.tags_text', {\n tags: tagsLabel(this.attrs.tagsAdded, {\n link: true\n }),\n count: this.attrs.tagsAdded.length\n });\n }\n if (this.attrs.tagsRemoved.length) {\n data.tagsRemoved = app.translator.trans('flarum-tags.forum.post_stream.tags_text', {\n tags: tagsLabel(this.attrs.tagsRemoved, {\n link: true\n }),\n count: this.attrs.tagsRemoved.length\n });\n }\n return data;\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/DiscussionTaggedPost', DiscussionTaggedPost);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/computed');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Model');","import computed from 'flarum/common/utils/computed';\nimport Model from 'flarum/common/Model';\nexport default class Tag extends Model {\n name() {\n return Model.attribute('name').call(this);\n }\n slug() {\n return Model.attribute('slug').call(this);\n }\n description() {\n return Model.attribute('description').call(this);\n }\n color() {\n return Model.attribute('color').call(this);\n }\n backgroundUrl() {\n return Model.attribute('backgroundUrl').call(this);\n }\n backgroundMode() {\n return Model.attribute('backgroundMode').call(this);\n }\n icon() {\n return Model.attribute('icon').call(this);\n }\n position() {\n return Model.attribute('position').call(this);\n }\n parent() {\n return Model.hasOne('parent').call(this);\n }\n children() {\n return Model.hasMany('children').call(this);\n }\n defaultSort() {\n return Model.attribute('defaultSort').call(this);\n }\n isChild() {\n return Model.attribute('isChild').call(this);\n }\n isHidden() {\n return Model.attribute('isHidden').call(this);\n }\n isPrimary() {\n return Model.attribute('isPrimary').call(this);\n }\n discussionCount() {\n return Model.attribute('discussionCount').call(this);\n }\n lastPostedAt() {\n return Model.attribute('lastPostedAt', Model.transformDate).call(this);\n }\n lastPostedDiscussion() {\n return Model.hasOne('lastPostedDiscussion').call(this);\n }\n isRestricted() {\n return Model.attribute('isRestricted').call(this);\n }\n canStartDiscussion() {\n return Model.attribute('canStartDiscussion').call(this);\n }\n canAddToDiscussion() {\n return Model.attribute('canAddToDiscussion').call(this);\n }\n isPrimaryParent() {\n return computed('position', 'parent', (position, parent) => position !== null && parent === false).call(this);\n }\n}\nflarum.reg.add('flarum-tags', 'common/models/Tag', Tag);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/query/IGambit');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nimport { KeyValueGambit } from 'flarum/common/query/IGambit';\nexport default class TagGambit extends KeyValueGambit {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"predicates\", true);\n }\n key() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.key', {}, true);\n }\n hint() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.hint', {}, true);\n }\n filterKey() {\n return 'tag';\n }\n gambitValueToFilterValue(value) {\n return [value];\n }\n fromFilter(value, negate) {\n let gambits = [];\n if (Array.isArray(value)) {\n gambits = value.map(value => this.fromFilter(value.toString(), negate));\n } else {\n return `${negate ? '-' : ''}${this.key()}:${this.filterValueToGambitValue(value)}`;\n }\n return gambits.join(' ');\n }\n filterValueToGambitValue(value) {\n return value;\n }\n}\nflarum.reg.add('flarum-tags', 'common/query/discussions/TagGambit', TagGambit);","import Extend from 'flarum/common/extenders';\nimport Tag from './models/Tag';\nimport TagGambit from './query/discussions/TagGambit';\nexport default [new Extend.Store() //\n.add('tags', Tag), new Extend.Search() //\n.gambit('discussions', TagGambit)];","import app from 'flarum/forum/app';\nimport Extend from 'flarum/common/extenders';\nimport IndexPage from 'flarum/forum/components/IndexPage';\nimport Discussion from 'flarum/common/models/Discussion';\nimport DiscussionTaggedPost from './components/DiscussionTaggedPost';\nimport TagsPage from './components/TagsPage';\nimport commonExtend from '../common/extend';\nexport default [...commonExtend, new Extend.Routes() //\n.add('tags', '/tags', TagsPage) //\n.add('tag', '/t/:tags', IndexPage) //\n.helper('tag', tag => app.route('tag', {\n tags: tag.slug()\n})), new Extend.PostTypes() //\n.add('discussionTagged', DiscussionTaggedPost), new Extend.Model(Discussion) //\n.hasMany('tags') //\n.attribute('canTag')];","import app from 'flarum/forum/app';\nimport TagListState from '../common/states/TagListState';\nimport addTagList from './addTagList';\nimport addTagFilter from './addTagFilter';\nimport addTagLabels from './addTagLabels';\nimport addTagControl from './addTagControl';\nimport addTagComposer from './addTagComposer';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-tags', () => {\n app.tagList = new TagListState();\n addTagList();\n addTagFilter();\n addTagLabels();\n addTagControl();\n addTagComposer();\n});\nimport './forum';","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport Separator from 'flarum/common/components/Separator';\nimport LinkButton from 'flarum/common/components/LinkButton';\nimport TagLinkButton from './components/TagLinkButton';\nimport TagsPage from './components/TagsPage';\nimport sortTags from '../common/utils/sortTags';\nexport default function addTagList() {\n // Add a link to the tags page, as well as a list of all the tags,\n // to the index page's sidebar.\n extend(IndexSidebar.prototype, 'navItems', function (items) {\n items.add('tags', m(LinkButton, {\n icon: \"fas fa-th-large\",\n href: app.route('tags')\n }, app.translator.trans('flarum-tags.forum.index.tags_link')), -10);\n if (app.current.get('noTagsList')) return;\n items.add('separator', m(Separator, null), -12);\n const params = app.search.state.stickyParams();\n const tags = app.store.all('tags');\n const currentTag = app.currentTag();\n const addTag = tag => {\n let active = currentTag === tag;\n if (!active && currentTag) {\n active = currentTag.parent() === tag;\n }\n\n // tag.name() is passed here as children even though it isn't used directly\n // because when we need to get the active child in SelectDropdown, we need to\n // use its children to populate the dropdown. The problem here is that `view`\n // on TagLinkButton is only called AFTER SelectDropdown, so no children are available\n // for SelectDropdown to use at the time.\n items.add('tag' + tag.id(), m(TagLinkButton, {\n model: tag,\n params: params,\n active: active\n }, tag?.name()), -14);\n };\n sortTags(tags).filter(tag => tag.position() !== null && (!tag.isChild() || currentTag && (tag.parent() === currentTag || tag.parent() === currentTag.parent()))).forEach(addTag);\n const more = tags.filter(tag => tag.position() === null).sort((a, b) => b.discussionCount() - a.discussionCount());\n more.splice(0, 3).forEach(addTag);\n if (more.length) {\n items.add('moreTags', m(LinkButton, {\n href: app.route('tags')\n }, app.translator.trans('flarum-tags.forum.index.more_link')), -16);\n }\n });\n}","import { extend } from 'flarum/common/extend';\nimport DiscussionListItem from 'flarum/forum/components/DiscussionListItem';\nimport DiscussionHero from 'flarum/forum/components/DiscussionHero';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport classList from 'flarum/common/utils/classList';\nimport tagsLabel from '../common/helpers/tagsLabel';\nimport sortTags from '../common/utils/sortTags';\nexport default function addTagLabels() {\n // Add tag labels to each discussion in the discussion list.\n extend(DiscussionListItem.prototype, 'infoItems', function (items) {\n const tags = this.attrs.discussion.tags();\n if (tags && tags.length) {\n items.add('tags', tagsLabel(tags), 10);\n }\n });\n\n // Restyle a discussion's hero to use its first tag's color.\n extend(DiscussionHero.prototype, 'view', function (view) {\n const tags = sortTags(this.attrs.discussion.tags());\n if (tags && tags.length) {\n const color = tags[0].color();\n if (color) {\n view.attrs.style = {\n '--hero-bg': color\n };\n view.attrs.className = classList(view.attrs.className, 'DiscussionHero--colored', textContrastClass(color));\n }\n }\n });\n\n // Add a list of a discussion's tags to the discussion hero, displayed\n // before the title. Put the title on its own line.\n extend(DiscussionHero.prototype, 'items', function (items) {\n const tags = this.attrs.discussion.tags();\n if (tags && tags.length) {\n items.add('tags', tagsLabel(tags, {\n link: true\n }), 5);\n }\n });\n}","import app from 'flarum/forum/app';\nimport { extend, override } from 'flarum/common/extend';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport classList from 'flarum/common/utils/classList';\nimport Button from 'flarum/common/components/Button';\nimport tagsLabel from '../common/helpers/tagsLabel';\nimport getSelectableTags from './utils/getSelectableTags';\nexport default function addTagComposer() {\n extend(IndexSidebar.prototype, 'newDiscussionAction', function (promise) {\n // From `addTagFilter\n const tag = app.currentTag();\n if (tag) {\n const parent = tag.parent();\n const tags = parent ? [parent, tag] : [tag];\n promise.then(composer => composer.fields.tags = tags);\n } else {\n app.composer.fields.tags = [];\n }\n });\n extend('flarum/forum/components/DiscussionComposer', 'oninit', function () {\n app.tagList.load(['parent']).then(() => m.redraw());\n\n // Add tag-selection abilities to the discussion composer.\n this.constructor.prototype.chooseTags = function () {\n const selectableTags = getSelectableTags();\n if (!selectableTags.length) return;\n app.modal.show(() => import(/* webpackChunkName: 'forum/components/TagDiscussionModal', webpackMode: 'lazy-once' */ './components/TagDiscussionModal'), {\n selectedTags: (this.composer.fields.tags || []).slice(0),\n onsubmit: tags => {\n this.composer.fields.tags = tags;\n this.$('textarea').focus();\n }\n });\n };\n });\n\n // Add a tag-selection menu to the discussion composer's header, after the\n // title.\n extend('flarum/forum/components/DiscussionComposer', 'headerItems', function (items) {\n const tags = this.composer.fields.tags || [];\n const selectableTags = getSelectableTags();\n items.add('tags', m(Button, {\n className: classList(['DiscussionComposer-changeTags', 'Button Button--ua-reset', !selectableTags.length && 'disabled']),\n onclick: this.chooseTags.bind(this)\n }, tags.length ? tagsLabel(tags) : m(\"span\", {\n className: \"TagLabel untagged\"\n }, app.translator.trans('flarum-tags.forum.composer_discussion.choose_tags_link'))), 10);\n });\n override('flarum/forum/components/DiscussionComposer', 'onsubmit', function (original) {\n const chosenTags = this.composer.fields.tags || [];\n const chosenPrimaryTags = chosenTags.filter(tag => tag.position() !== null && !tag.isChild());\n const chosenSecondaryTags = chosenTags.filter(tag => tag.position() === null);\n const selectableTags = getSelectableTags();\n const minPrimaryTags = parseInt(app.forum.attribute('minPrimaryTags'));\n const minSecondaryTags = parseInt(app.forum.attribute('minSecondaryTags'));\n const maxPrimaryTags = parseInt(app.forum.attribute('maxPrimaryTags'));\n const maxSecondaryTags = parseInt(app.forum.attribute('maxSecondaryTags'));\n if ((!chosenTags.length && maxPrimaryTags !== 0 && maxSecondaryTags !== 0 || chosenPrimaryTags.length < minPrimaryTags || chosenSecondaryTags.length < minSecondaryTags) && selectableTags.length) {\n app.modal.show(() => import(/* webpackChunkName: 'forum/components/TagDiscussionModal', webpackMode: 'lazy-once' */ './components/TagDiscussionModal'), {\n selectedTags: chosenTags,\n onsubmit: tags => {\n this.composer.fields.tags = tags;\n original();\n }\n });\n } else {\n original();\n }\n });\n\n // Add the selected tags as data to submit to the server.\n extend('flarum/forum/components/DiscussionComposer', 'data', function (data) {\n data.relationships = data.relationships || {};\n data.relationships.tags = this.composer.fields.tags;\n });\n}","export default function getSelectableTags(discussion) {\n let tags = app.store.all('tags');\n if (discussion) {\n const discussionTags = discussion.tags() || [];\n tags = tags.filter(tag => tag.canAddToDiscussion() || discussionTags.includes(tag));\n } else {\n tags = tags.filter(tag => tag.canStartDiscussion());\n }\n return tags;\n}\nflarum.reg.add('flarum-tags', 'forum/utils/getSelectableTags', getSelectableTags);","module.exports = flarum.reg.get('core', 'common/Component');","module.exports = flarum.reg.get('core', 'common/app');","module.exports = flarum.reg.get('core', 'common/components/Button');","module.exports = flarum.reg.get('core', 'common/components/FormModal');","module.exports = flarum.reg.get('core', 'common/components/Link');","module.exports = flarum.reg.get('core', 'common/components/LoadingIndicator');","module.exports = flarum.reg.get('core', 'common/helpers/highlight');","module.exports = flarum.reg.get('core', 'common/helpers/textContrastClass');","module.exports = flarum.reg.get('core', 'common/utils/KeyboardNavigatable');","module.exports = flarum.reg.get('core', 'common/utils/Stream');","module.exports = flarum.reg.get('core', 'common/utils/classList');","module.exports = flarum.reg.get('core', 'common/utils/extract');","module.exports = flarum.reg.get('core', 'common/utils/extractText');","module.exports = flarum.reg.get('core', 'forum/app');","module.exports = flarum.reg.get('core', 'forum/components/DiscussionPage');","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\tflarum.reg._webpack_runtimes[\"flarum-tags\"] ||= __webpack_require__;// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + \"forum/components/TagDiscussionModal\" + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.f.compat = (chunkId, promises) => {\n\n\tconst originalLoadChunk = __webpack_require__.l;\n\t__webpack_require__.l = flarum.reg.loadChunk.bind(flarum.reg, originalLoadChunk);\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t170: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkmodule_exports\"] = self[\"webpackChunkmodule_exports\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));"],"names":["inProgress","dataWebpackPrefix","tagIcon","tag","attrs","settings","hasIcon","icon","useColor","className","style","color","m","flarum","reg","add","tagLabel","link","tagText","name","app","translator","trans","title","description","href","route","tags","slug","isChild","sortTags","slice","sort","a","b","aPos","position","bPos","discussionCount","aParent","parent","bParent","TagListState","constructor","this","load","includes","loadedIncludes","query","unloadedIncludes","filter","include","has","length","Promise","resolve","all","Set","find","join","then","val","Array","isArray","forEach","get","TagLinkButton","view","vnode","model","child","undefined","initAttrs","super","params","TagsPage","arguments","oninit","push","set","preloaded","loading","redraw","oncreate","hero","bind","sidebar","contentItems","toArray","items","pinned","cloud","tagTileListView","cloudView","map","tagTileView","lastPostedDiscussion","children","colored","discussion","lastPostNumber","lastPostedAt","TagHero","findTag","localeCompare","sensitivity","tagsLabel","otherAttrs","addChunkModule","DiscussionTaggedPost","oldTags","post","content","newTags","diffTags","tags1","tags2","indexOf","id","store","getById","tagsAdded","tagsRemoved","descriptionKey","descriptionData","data","count","Tag","call","backgroundUrl","backgroundMode","defaultSort","isHidden","isPrimary","isRestricted","canStartDiscussion","canAddToDiscussion","isPrimaryParent","TagGambit","KeyValueGambit","key","hint","filterKey","gambitValueToFilterValue","value","fromFilter","negate","gambits","toString","filterValueToGambitValue","gambit","helper","hasMany","attribute","extend","state","stickyParams","currentTag","addTag","active","more","splice","reload","currentActiveTag","search","currentTagLoading","finally","vdom","override","original","user","newDiscussion","disabled","param","canTag","onclick","modal","show","promise","composer","fields","prototype","chooseTags","getSelectableTags","selectedTags","onsubmit","$","focus","selectableTags","chosenTags","chosenPrimaryTags","chosenSecondaryTags","minPrimaryTags","parseInt","minSecondaryTags","maxPrimaryTags","maxSecondaryTags","relationships","discussionTags","module","exports","_typeof","o","Symbol","iterator","_defineProperty","e","r","t","i","toPrimitive","TypeError","String","toPropertyKey","Object","defineProperty","enumerable","configurable","writable","__webpack_module_cache__","__webpack_require__","moduleId","_webpack_runtimes","cachedModule","__webpack_modules__","n","getter","__esModule","d","definition","f","chunkId","keys","reduce","promises","u","g","globalThis","Function","window","obj","prop","hasOwnProperty","l","url","done","script","needAttach","scripts","document","getElementsByTagName","s","getAttribute","createElement","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","fn","setTimeout","type","target","head","appendChild","toStringTag","scriptUrl","importScripts","location","currentScript","tagName","toUpperCase","test","Error","replace","p","compat","originalLoadChunk","loadChunk","installedChunks","j","installedChunkData","reject","error","errorType","realSrc","message","request","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","some","chunkLoadingGlobal","self"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@flarum/tags/webpack/runtime/load script","webpack://@flarum/tags/./src/common/helpers/tagIcon.js","webpack://@flarum/tags/./src/common/helpers/tagLabel.js","webpack://@flarum/tags/./src/common/utils/sortTags.tsx","webpack://@flarum/tags/./src/common/states/TagListState.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/IndexSidebar')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Separator')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/LinkButton')\"","webpack://@flarum/tags/./src/forum/components/TagLinkButton.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Page')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/PageStructure')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/WelcomeHero')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/ItemList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/humanTime')\"","webpack://@flarum/tags/./src/forum/components/TagsPage.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/IndexPage')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/states/DiscussionListState')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/states/GlobalSearchState')\"","webpack://@flarum/tags/./src/forum/components/TagHero.js","webpack://@flarum/tags/./src/forum/addTagFilter.tsx","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/DiscussionListItem')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/DiscussionHero')\"","webpack://@flarum/tags/./src/common/helpers/tagsLabel.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/utils/DiscussionControls')\"","webpack://@flarum/tags/./src/forum/addTagControl.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/extenders')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/models/Discussion')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/EventPost')\"","webpack://@flarum/tags/./src/forum/components/DiscussionTaggedPost.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/computed')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Model')\"","webpack://@flarum/tags/./src/common/models/Tag.ts","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/query/IGambit')\"","webpack://@flarum/tags/./src/common/query/discussions/TagGambit.ts","webpack://@flarum/tags/./src/common/extend.ts","webpack://@flarum/tags/./src/forum/extend.ts","webpack://@flarum/tags/./src/forum/index.ts","webpack://@flarum/tags/./src/forum/addTagList.js","webpack://@flarum/tags/./src/forum/addTagLabels.js","webpack://@flarum/tags/./src/forum/addTagComposer.js","webpack://@flarum/tags/./src/forum/utils/getSelectableTags.ts","webpack://@flarum/tags/../../../node_modules/mithril/api/mount-redraw.js","webpack://@flarum/tags/../../../node_modules/mithril/api/router.js","webpack://@flarum/tags/../../../node_modules/mithril/hyperscript.js","webpack://@flarum/tags/../../../node_modules/mithril/index.js","webpack://@flarum/tags/../../../node_modules/mithril/mount-redraw.js","webpack://@flarum/tags/../../../node_modules/mithril/pathname/build.js","webpack://@flarum/tags/../../../node_modules/mithril/pathname/compileTemplate.js","webpack://@flarum/tags/../../../node_modules/mithril/pathname/parse.js","webpack://@flarum/tags/../../../node_modules/mithril/querystring/build.js","webpack://@flarum/tags/../../../node_modules/mithril/querystring/parse.js","webpack://@flarum/tags/../../../node_modules/mithril/render.js","webpack://@flarum/tags/../../../node_modules/mithril/render/domFor.js","webpack://@flarum/tags/../../../node_modules/mithril/render/fragment.js","webpack://@flarum/tags/../../../node_modules/mithril/render/hyperscript.js","webpack://@flarum/tags/../../../node_modules/mithril/render/hyperscriptVnode.js","webpack://@flarum/tags/../../../node_modules/mithril/render/render.js","webpack://@flarum/tags/../../../node_modules/mithril/render/trust.js","webpack://@flarum/tags/../../../node_modules/mithril/render/vnode.js","webpack://@flarum/tags/../../../node_modules/mithril/request.js","webpack://@flarum/tags/../../../node_modules/mithril/request/request.js","webpack://@flarum/tags/../../../node_modules/mithril/route.js","webpack://@flarum/tags/../../../node_modules/mithril/util/assign.js","webpack://@flarum/tags/../../../node_modules/mithril/util/censor.js","webpack://@flarum/tags/../../../node_modules/mithril/util/hasOwn.js","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/Component')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Button')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/FormModal')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/Link')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/components/LoadingIndicator')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/highlight')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/helpers/textContrastClass')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/KeyboardNavigatable')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/Stream')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/classList')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extract')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'common/utils/extractText')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/app')\"","webpack://@flarum/tags/external root \"flarum.reg.get('core', 'forum/components/DiscussionPage')\"","webpack://@flarum/tags/../../../node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/tags/../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/tags/../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/tags/../../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/tags/webpack/bootstrap","webpack://@flarum/tags/webpack/runtime/compat get default export","webpack://@flarum/tags/webpack/runtime/define property getters","webpack://@flarum/tags/webpack/runtime/ensure chunk","webpack://@flarum/tags/webpack/runtime/get javascript chunk filename","webpack://@flarum/tags/webpack/runtime/global","webpack://@flarum/tags/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/tags/webpack/runtime/make namespace object","webpack://@flarum/tags/webpack/runtime/publicPath","webpack://@flarum/tags/webpack/runtime/compat","webpack://@flarum/tags/webpack/runtime/jsonp chunk loading"],"sourcesContent":["var inProgress = {};\nvar dataWebpackPrefix = \"module.exports:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import classList from 'flarum/common/utils/classList';\nexport default function tagIcon(tag, attrs, settings) {\n if (attrs === void 0) {\n attrs = {};\n }\n if (settings === void 0) {\n settings = {};\n }\n const hasIcon = tag && tag.icon();\n const {\n useColor = true\n } = settings;\n attrs.className = classList([attrs.className, 'icon text-colored', hasIcon ? tag.icon() : 'TagIcon']);\n if (tag && useColor) {\n attrs.style = attrs.style || {};\n attrs.style['--color'] = tag.color();\n } else if (!tag) {\n attrs.className += ' untagged';\n }\n return hasIcon ? m(\"i\", attrs) : m(\"span\", attrs);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagIcon', tagIcon);","import extract from 'flarum/common/utils/extract';\nimport Link from 'flarum/common/components/Link';\nimport classList from 'flarum/common/utils/classList';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport tagIcon from './tagIcon';\nexport default function tagLabel(tag, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n attrs.style = attrs.style || {};\n attrs.className = 'TagLabel ' + (attrs.className || '');\n const link = extract(attrs, 'link');\n const tagText = tag ? tag.name() : app.translator.trans('flarum-tags.lib.deleted_tag_text');\n if (tag) {\n const color = tag.color();\n if (color) {\n attrs.style['--tag-bg'] = color;\n attrs.className = classList(attrs.className, 'colored', textContrastClass(color));\n }\n if (link) {\n attrs.title = tag.description() || '';\n attrs.href = app.route('tag', {\n tags: tag.slug()\n });\n }\n if (tag.isChild()) {\n attrs.className += ' TagLabel--child';\n }\n } else {\n attrs.className += ' untagged';\n }\n return m(link ? Link : 'span', attrs, m(\"span\", {\n className: \"TagLabel-text\"\n }, tag && tag.icon() && tagIcon(tag, {\n className: 'TagLabel-icon'\n }, {\n useColor: false\n }), m(\"span\", {\n className: \"TagLabel-name\"\n }, tagText)));\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagLabel', tagLabel);","export default function sortTags(tags) {\n return tags.slice(0).sort((a, b) => {\n const aPos = a.position();\n const bPos = b.position();\n\n // If they're both secondary tags, sort them by their discussions count,\n // descending.\n if (aPos === null && bPos === null) return b.discussionCount() - a.discussionCount();\n\n // If just one is a secondary tag, then the primary tag should\n // come first.\n if (bPos === null) return -1;\n if (aPos === null) return 1;\n\n // If we've made it this far, we know they're both primary tags. So we'll\n // need to see if they have parents.\n const aParent = a.parent();\n const bParent = b.parent();\n\n // If they both have the same parent, then their positions are local,\n // so we can compare them directly.\n if (aParent === bParent) return aPos - bPos;\n // If they are both child tags, then we will compare the positions of their\n // parents.\n else if (aParent && bParent) return aParent.position() - bParent.position();\n // If we are comparing a child tag with its parent, then we let the parent\n // come first. If we are comparing an unrelated parent/child, then we\n // compare both of the parents.\n else if (aParent) return aParent === b ? 1 : aParent.position() - bPos;else if (bParent) return bParent === a ? -1 : aPos - bParent.position();\n return 0;\n });\n}\nflarum.reg.add('flarum-tags', 'common/utils/sortTags', sortTags);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nexport default class TagListState {\n constructor() {\n _defineProperty(this, \"loadedIncludes\", void 0);\n }\n async load(includes) {\n if (includes === void 0) {\n includes = [];\n }\n if (!this.loadedIncludes) {\n return this.query(includes);\n }\n const unloadedIncludes = includes.filter(include => !this.loadedIncludes.has(include));\n if (unloadedIncludes.length === 0) {\n return Promise.resolve(app.store.all('tags'));\n }\n return this.query(unloadedIncludes);\n }\n async query(includes) {\n if (includes === void 0) {\n includes = [];\n }\n this.loadedIncludes ??= new Set();\n return app.store.find('tags', {\n include: includes.join(',')\n }).then(val => {\n const tags = Array.isArray(val) ? val : [val];\n includes.forEach(include => this.loadedIncludes.add(include));\n return tags;\n });\n }\n}\nflarum.reg.add('flarum-tags', 'common/states/TagListState', TagListState);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/IndexSidebar');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Separator');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/LinkButton');","import Link from 'flarum/common/components/Link';\nimport LinkButton from 'flarum/common/components/LinkButton';\nimport classList from 'flarum/common/utils/classList';\nimport tagIcon from '../../common/helpers/tagIcon';\nexport default class TagLinkButton extends LinkButton {\n view(vnode) {\n const tag = this.attrs.model;\n const description = tag && tag.description();\n const className = classList('TagLinkButton hasIcon', {\n child: tag.isChild()\n }, this.attrs.className);\n return m(Link, {\n className: className,\n href: this.attrs.route,\n style: tag ? {\n '--color': tag.color()\n } : undefined,\n title: description || undefined\n }, tagIcon(tag, {\n className: 'Button-icon'\n }), m(\"span\", {\n className: \"Button-label\"\n }, tag ? tag.name() : app.translator.trans('flarum-tags.forum.index.untagged_link')));\n }\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n const tag = attrs.model;\n attrs.params.tags = tag ? tag.slug() : 'untagged';\n attrs.route = app.route('tag', attrs.params);\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/TagLinkButton', TagLinkButton);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/components/Page');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/PageStructure');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/WelcomeHero');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/ItemList');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/helpers/humanTime');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/forum/app';\nimport Page from 'flarum/common/components/Page';\nimport PageStructure from 'flarum/forum/components/PageStructure';\nimport WelcomeHero from 'flarum/forum/components/WelcomeHero';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport Link from 'flarum/common/components/Link';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport humanTime from 'flarum/common/helpers/humanTime';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport tagIcon from '../../common/helpers/tagIcon';\nimport tagLabel from '../../common/helpers/tagLabel';\nimport sortTags from '../../common/utils/sortTags';\nexport default class TagsPage extends Page {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"tags\", void 0);\n _defineProperty(this, \"loading\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n app.history.push('tags', extractText(app.translator.trans('flarum-tags.forum.header.back_to_tags_tooltip')));\n app.current.set('noTagsList', true);\n this.tags = [];\n const preloaded = app.preloadedApiDocument();\n if (preloaded) {\n this.tags = sortTags(preloaded.filter(tag => !tag.isChild()));\n return;\n }\n this.loading = true;\n app.tagList.load(['children', 'lastPostedDiscussion', 'parent']).then(() => {\n this.tags = sortTags(app.store.all('tags').filter(tag => !tag.isChild()));\n this.loading = false;\n m.redraw();\n });\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n app.setTitle(extractText(app.translator.trans('flarum-tags.forum.all_tags.meta_title_text')));\n app.setTitleCount(0);\n }\n view() {\n return m(PageStructure, {\n className: \"TagsPage Page--vertical\",\n hero: this.hero.bind(this),\n sidebar: this.sidebar.bind(this)\n }, this.contentItems().toArray());\n }\n contentItems() {\n const items = new ItemList();\n if (this.loading) {\n items.add('loading', m(LoadingIndicator, null));\n } else {\n const pinned = this.tags.filter(tag => tag.position() !== null);\n const cloud = this.tags.filter(tag => tag.position() === null);\n items.add('tagTiles', this.tagTileListView(pinned), 100);\n if (cloud.length) {\n items.add('cloud', this.cloudView(cloud), 10);\n }\n }\n return items;\n }\n hero() {\n return m(WelcomeHero, null);\n }\n sidebar() {\n return m(IndexSidebar, null);\n }\n tagTileListView(pinned) {\n return m(\"ul\", {\n className: \"TagTiles\"\n }, pinned.map(this.tagTileView.bind(this)));\n }\n tagTileView(tag) {\n const lastPostedDiscussion = tag.lastPostedDiscussion();\n const children = sortTags(tag.children() || []);\n return m(\"li\", {\n className: classList('TagTile', {\n colored: tag.color()\n }, textContrastClass(tag.color())),\n style: {\n '--tag-bg': tag.color()\n }\n }, m(Link, {\n className: \"TagTile-info\",\n href: app.route.tag(tag)\n }, m(\"div\", {\n className: \"TagTile-heading\"\n }, tag.icon() && tagIcon(tag, {}, {\n useColor: false\n }), m(\"h3\", {\n className: \"TagTile-name\"\n }, tag.name())), m(\"p\", {\n className: \"TagTile-description\"\n }, tag.description()), !!children && m(\"div\", {\n className: \"TagTile-children\"\n }, children.map(child => [m(Link, {\n href: app.route.tag(child)\n }, child.name()), ' ']))), lastPostedDiscussion ? m(Link, {\n className: \"TagTile-lastPostedDiscussion\",\n href: app.route.discussion(lastPostedDiscussion, lastPostedDiscussion.lastPostNumber())\n }, m(\"span\", {\n className: \"TagTile-lastPostedDiscussion-title\"\n }, lastPostedDiscussion.title()), humanTime(lastPostedDiscussion.lastPostedAt())) : m(\"span\", {\n className: \"TagTile-lastPostedDiscussion\"\n }));\n }\n cloudView(cloud) {\n return m(\"div\", {\n className: \"TagCloud\"\n }, cloud.map(tag => [tagLabel(tag, {\n link: true\n }), ' ']));\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/TagsPage', TagsPage);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/IndexPage');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/states/DiscussionListState');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/states/GlobalSearchState');","import Component from 'flarum/common/Component';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport tagIcon from '../../common/helpers/tagIcon';\nimport classList from 'flarum/common/utils/classList';\nimport ItemList from 'flarum/common/utils/ItemList';\nimport Mithril from 'mithril';\nexport default class TagHero extends Component {\n view() {\n const tag = this.attrs.model;\n const color = tag.color();\n return m(\"header\", {\n className: classList('Hero', 'TagHero', {\n 'TagHero--colored': color,\n [textContrastClass(color)]: color\n }),\n style: color ? {\n '--hero-bg': color\n } : undefined\n }, m(\"div\", {\n className: \"container\"\n }, this.viewItems().toArray()));\n }\n\n /**\n * @returns {ItemList}\n */\n viewItems() {\n const items = new ItemList();\n items.add('content', m(\"div\", {\n className: \"containerNarrow\"\n }, this.contentItems().toArray()), 80);\n return items;\n }\n\n /**\n * @returns {ItemList}\n */\n contentItems() {\n const items = new ItemList();\n const tag = this.attrs.model;\n items.add('tag-title', m(\"h1\", {\n className: \"Hero-title\"\n }, tag.icon() && tagIcon(tag, {}, {\n useColor: false\n }), \" \", tag.name()), 100);\n items.add('tag-subtitle', m(\"div\", {\n className: \"Hero-subtitle\"\n }, tag.description()), 90);\n return items;\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/TagHero', TagHero);","import app from 'flarum/forum/app';\nimport { extend, override } from 'flarum/common/extend';\nimport IndexPage from 'flarum/forum/components/IndexPage';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport DiscussionListState from 'flarum/forum/states/DiscussionListState';\nimport GlobalSearchState from 'flarum/forum/states/GlobalSearchState';\nimport classList from 'flarum/common/utils/classList';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport TagHero from './components/TagHero';\nconst findTag = slug => app.store.all('tags').find(tag => tag.slug().localeCompare(slug, undefined, {\n sensitivity: 'base'\n}) === 0);\nexport default function addTagFilter() {\n app.currentTag = function (reload) {\n if (this.currentActiveTag && !reload) {\n return this.currentActiveTag;\n }\n const slug = this.search.state.params().tags;\n let tag = null;\n if (slug) {\n tag = findTag(slug);\n }\n if (slug && !tag || tag && !tag.isChild() && !tag.children()) {\n if (this.currentTagLoading) {\n return;\n }\n this.currentTagLoading = true;\n\n // Unlike the backend, no need to fetch parent.children because if we're on\n // a child tag page, then either:\n // - We loaded in that child tag (and its siblings) in the API document\n // - We first navigated to the current tag's parent, which would have loaded in the current tag's siblings.\n this.store.find('tags', slug, {\n include: 'children,children.parent,parent'\n }).then(() => {\n this.currentActiveTag = findTag(slug);\n m.redraw();\n }).finally(() => {\n this.currentTagLoading = false;\n });\n }\n if (tag) {\n this.currentActiveTag = tag;\n return this.currentActiveTag;\n }\n this.currentActiveTag = undefined;\n return;\n };\n extend(IndexPage.prototype, 'view', function (vdom) {\n app.currentTag(true);\n });\n\n // If currently viewing a tag, insert a tag hero at the top of the view.\n override(IndexPage.prototype, 'hero', function (original) {\n const tag = app.currentTag();\n if (tag) return m(TagHero, {\n model: tag\n });\n return original();\n });\n extend(IndexPage.prototype, 'view', function (vdom) {\n const tag = app.currentTag();\n if (tag) vdom.attrs.className += ' IndexPage--tag' + tag.id();\n });\n extend(IndexPage.prototype, 'setTitle', function () {\n const tag = app.currentTag();\n if (tag) {\n app.setTitle(tag.name());\n }\n });\n\n // If currently viewing a tag, restyle the 'new discussion' button to use\n // the tag's color, and disable if the user isn't allowed to edit.\n extend(IndexSidebar.prototype, 'items', function (items) {\n const tag = app.currentTag();\n if (tag) {\n const color = tag.color();\n const canStartDiscussion = tag.canStartDiscussion() || !app.session.user;\n const newDiscussion = items.get('newDiscussion');\n if (color) {\n newDiscussion.attrs.className = classList([newDiscussion.attrs.className, 'Button--tagColored', textContrastClass(color)]);\n newDiscussion.attrs.style = {\n '--color': color\n };\n }\n newDiscussion.attrs.disabled = !canStartDiscussion;\n newDiscussion.children = app.translator.trans(canStartDiscussion ? 'core.forum.index.start_discussion_button' : 'core.forum.index.cannot_start_discussion_button');\n }\n });\n\n // Add a parameter for the global search state to pass on to the\n // DiscussionListState that will let us filter discussions by tag.\n extend(GlobalSearchState.prototype, 'params', function (params) {\n params.tags = m.route.param('tags');\n });\n\n // Translate that parameter into a gambit appended to the search query.\n extend(DiscussionListState.prototype, 'requestParams', function (params) {\n if (typeof params.include === 'string') {\n params.include = [params.include];\n } else {\n params.include?.push('tags', 'tags.parent');\n }\n if (this.params.tags) {\n params.filter ||= {};\n params.filter.tag = this.params.tags;\n }\n });\n}","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/DiscussionListItem');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/DiscussionHero');","import extract from 'flarum/common/utils/extract';\nimport tagLabel from './tagLabel';\nimport sortTags from '../utils/sortTags';\nimport classList from 'flarum/common/utils/classList';\nexport default function tagsLabel(tags, attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n const children = [];\n const {\n link,\n ...otherAttrs\n } = attrs;\n otherAttrs.className = classList('TagsLabel', otherAttrs.className);\n if (tags) {\n sortTags(tags).forEach(tag => {\n if (tag || tags.length === 1) {\n children.push(tagLabel(tag, {\n link\n }));\n }\n });\n } else {\n children.push(tagLabel());\n }\n return m(\"span\", otherAttrs, children);\n}\nflarum.reg.add('flarum-tags', 'common/helpers/tagsLabel', tagsLabel);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/utils/DiscussionControls');","import { extend } from 'flarum/common/extend';\nimport DiscussionControls from 'flarum/forum/utils/DiscussionControls';\nimport Button from 'flarum/common/components/Button';\nexport default function addTagControl() {\n // Add a control allowing the discussion to be moved to another category.\n extend(DiscussionControls, 'moderationControls', function (items, discussion) {\n if (discussion.canTag()) {\n items.add('tags', m(Button, {\n icon: \"fas fa-tag\",\n onclick: () => app.modal.show(() => import(/* webpackChunkName: 'forum/components/TagDiscussionModal', webpackMode: 'lazy-once' */ './components/TagDiscussionModal'), {\n discussion\n })\n }, app.translator.trans('flarum-tags.forum.discussion_controls.edit_tags_button')));\n }\n });\n}flarum.reg.addChunkModule('371', '2440', 'flarum-tags', 'forum/components/TagDiscussionModal');\nflarum.reg.addChunkModule('371', '2440', 'flarum-tags', 'common/components/TagSelectionModal');\nflarum.reg.addChunkModule('371', '2440', 'flarum-tags', 'forum/components/ToggleButton');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extenders');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/models/Discussion');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/EventPost');","import EventPost from 'flarum/forum/components/EventPost';\nimport tagsLabel from '../../common/helpers/tagsLabel';\nexport default class DiscussionTaggedPost extends EventPost {\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n const oldTags = attrs.post.content()[0];\n const newTags = attrs.post.content()[1];\n function diffTags(tags1, tags2) {\n return tags1.filter(tag => tags2.indexOf(tag) === -1).map(id => app.store.getById('tags', id));\n }\n attrs.tagsAdded = diffTags(newTags, oldTags);\n attrs.tagsRemoved = diffTags(oldTags, newTags);\n }\n icon() {\n return 'fas fa-tag';\n }\n descriptionKey() {\n if (this.attrs.tagsAdded.length) {\n if (this.attrs.tagsRemoved.length) {\n return 'flarum-tags.forum.post_stream.added_and_removed_tags_text';\n }\n return 'flarum-tags.forum.post_stream.added_tags_text';\n }\n return 'flarum-tags.forum.post_stream.removed_tags_text';\n }\n descriptionData() {\n const data = {};\n if (this.attrs.tagsAdded.length) {\n data.tagsAdded = app.translator.trans('flarum-tags.forum.post_stream.tags_text', {\n tags: tagsLabel(this.attrs.tagsAdded, {\n link: true\n }),\n count: this.attrs.tagsAdded.length\n });\n }\n if (this.attrs.tagsRemoved.length) {\n data.tagsRemoved = app.translator.trans('flarum-tags.forum.post_stream.tags_text', {\n tags: tagsLabel(this.attrs.tagsRemoved, {\n link: true\n }),\n count: this.attrs.tagsRemoved.length\n });\n }\n return data;\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/DiscussionTaggedPost', DiscussionTaggedPost);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/utils/computed');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/Model');","import computed from 'flarum/common/utils/computed';\nimport Model from 'flarum/common/Model';\nexport default class Tag extends Model {\n name() {\n return Model.attribute('name').call(this);\n }\n slug() {\n return Model.attribute('slug').call(this);\n }\n description() {\n return Model.attribute('description').call(this);\n }\n color() {\n return Model.attribute('color').call(this);\n }\n backgroundUrl() {\n return Model.attribute('backgroundUrl').call(this);\n }\n backgroundMode() {\n return Model.attribute('backgroundMode').call(this);\n }\n icon() {\n return Model.attribute('icon').call(this);\n }\n position() {\n return Model.attribute('position').call(this);\n }\n parent() {\n return Model.hasOne('parent').call(this);\n }\n children() {\n return Model.hasMany('children').call(this);\n }\n defaultSort() {\n return Model.attribute('defaultSort').call(this);\n }\n isChild() {\n return Model.attribute('isChild').call(this);\n }\n isHidden() {\n return Model.attribute('isHidden').call(this);\n }\n isPrimary() {\n return Model.attribute('isPrimary').call(this);\n }\n discussionCount() {\n return Model.attribute('discussionCount').call(this);\n }\n lastPostedAt() {\n return Model.attribute('lastPostedAt', Model.transformDate).call(this);\n }\n lastPostedDiscussion() {\n return Model.hasOne('lastPostedDiscussion').call(this);\n }\n isRestricted() {\n return Model.attribute('isRestricted').call(this);\n }\n canStartDiscussion() {\n return Model.attribute('canStartDiscussion').call(this);\n }\n canAddToDiscussion() {\n return Model.attribute('canAddToDiscussion').call(this);\n }\n isPrimaryParent() {\n return computed('position', 'parent', (position, parent) => position !== null && parent === false).call(this);\n }\n}\nflarum.reg.add('flarum-tags', 'common/models/Tag', Tag);","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/query/IGambit');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nimport { KeyValueGambit } from 'flarum/common/query/IGambit';\nexport default class TagGambit extends KeyValueGambit {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"predicates\", true);\n }\n key() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.key', {}, true);\n }\n hint() {\n return app.translator.trans('flarum-tags.lib.gambits.discussions.tag.hint', {}, true);\n }\n filterKey() {\n return 'tag';\n }\n gambitValueToFilterValue(value) {\n return [value];\n }\n fromFilter(value, negate) {\n let gambits = [];\n if (Array.isArray(value)) {\n gambits = value.map(value => this.fromFilter(value.toString(), negate));\n } else {\n return `${negate ? '-' : ''}${this.key()}:${this.filterValueToGambitValue(value)}`;\n }\n return gambits.join(' ');\n }\n filterValueToGambitValue(value) {\n return value;\n }\n}\nflarum.reg.add('flarum-tags', 'common/query/discussions/TagGambit', TagGambit);","import Extend from 'flarum/common/extenders';\nimport Tag from './models/Tag';\nimport TagGambit from './query/discussions/TagGambit';\nexport default [new Extend.Store() //\n.add('tags', Tag), new Extend.Search() //\n.gambit('discussions', TagGambit)];","import app from 'flarum/forum/app';\nimport Extend from 'flarum/common/extenders';\nimport IndexPage from 'flarum/forum/components/IndexPage';\nimport Discussion from 'flarum/common/models/Discussion';\nimport DiscussionTaggedPost from './components/DiscussionTaggedPost';\nimport TagsPage from './components/TagsPage';\nimport commonExtend from '../common/extend';\nexport default [...commonExtend, new Extend.Routes() //\n.add('tags', '/tags', TagsPage) //\n.add('tag', '/t/:tags', IndexPage) //\n.helper('tag', tag => app.route('tag', {\n tags: tag.slug()\n})), new Extend.PostTypes() //\n.add('discussionTagged', DiscussionTaggedPost), new Extend.Model(Discussion) //\n.hasMany('tags') //\n.attribute('canTag')];","import app from 'flarum/forum/app';\nimport TagListState from '../common/states/TagListState';\nimport addTagList from './addTagList';\nimport addTagFilter from './addTagFilter';\nimport addTagLabels from './addTagLabels';\nimport addTagControl from './addTagControl';\nimport addTagComposer from './addTagComposer';\nexport { default as extend } from './extend';\napp.initializers.add('flarum-tags', () => {\n app.tagList = new TagListState();\n addTagList();\n addTagFilter();\n addTagLabels();\n addTagControl();\n addTagComposer();\n});\nimport './forum';","import app from 'flarum/forum/app';\nimport { extend } from 'flarum/common/extend';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport Separator from 'flarum/common/components/Separator';\nimport LinkButton from 'flarum/common/components/LinkButton';\nimport TagLinkButton from './components/TagLinkButton';\nimport TagsPage from './components/TagsPage';\nimport sortTags from '../common/utils/sortTags';\nexport default function addTagList() {\n // Add a link to the tags page, as well as a list of all the tags,\n // to the index page's sidebar.\n extend(IndexSidebar.prototype, 'navItems', function (items) {\n items.add('tags', m(LinkButton, {\n icon: \"fas fa-th-large\",\n href: app.route('tags')\n }, app.translator.trans('flarum-tags.forum.index.tags_link')), -10);\n if (app.current.get('noTagsList')) return;\n items.add('separator', m(Separator, null), -12);\n const params = app.search.state.stickyParams();\n const tags = app.store.all('tags');\n const currentTag = app.currentTag();\n const addTag = tag => {\n let active = currentTag === tag;\n if (!active && currentTag) {\n active = currentTag.parent() === tag;\n }\n\n // tag.name() is passed here as children even though it isn't used directly\n // because when we need to get the active child in SelectDropdown, we need to\n // use its children to populate the dropdown. The problem here is that `view`\n // on TagLinkButton is only called AFTER SelectDropdown, so no children are available\n // for SelectDropdown to use at the time.\n items.add('tag' + tag.id(), m(TagLinkButton, {\n model: tag,\n params: params,\n active: active\n }, tag?.name()), -14);\n };\n sortTags(tags).filter(tag => tag.position() !== null && (!tag.isChild() || currentTag && (tag.parent() === currentTag || tag.parent() === currentTag.parent()))).forEach(addTag);\n const more = tags.filter(tag => tag.position() === null).sort((a, b) => b.discussionCount() - a.discussionCount());\n more.splice(0, 3).forEach(addTag);\n if (more.length) {\n items.add('moreTags', m(LinkButton, {\n href: app.route('tags')\n }, app.translator.trans('flarum-tags.forum.index.more_link')), -16);\n }\n });\n}","import { extend } from 'flarum/common/extend';\nimport DiscussionListItem from 'flarum/forum/components/DiscussionListItem';\nimport DiscussionHero from 'flarum/forum/components/DiscussionHero';\nimport textContrastClass from 'flarum/common/helpers/textContrastClass';\nimport classList from 'flarum/common/utils/classList';\nimport tagsLabel from '../common/helpers/tagsLabel';\nimport sortTags from '../common/utils/sortTags';\nexport default function addTagLabels() {\n // Add tag labels to each discussion in the discussion list.\n extend(DiscussionListItem.prototype, 'infoItems', function (items) {\n const tags = this.attrs.discussion.tags();\n if (tags && tags.length) {\n items.add('tags', tagsLabel(tags), 10);\n }\n });\n\n // Restyle a discussion's hero to use its first tag's color.\n extend(DiscussionHero.prototype, 'view', function (view) {\n const tags = sortTags(this.attrs.discussion.tags());\n if (tags && tags.length) {\n const color = tags[0].color();\n if (color) {\n view.attrs.style = {\n '--hero-bg': color\n };\n view.attrs.className = classList(view.attrs.className, 'DiscussionHero--colored', textContrastClass(color));\n }\n }\n });\n\n // Add a list of a discussion's tags to the discussion hero, displayed\n // before the title. Put the title on its own line.\n extend(DiscussionHero.prototype, 'items', function (items) {\n const tags = this.attrs.discussion.tags();\n if (tags && tags.length) {\n items.add('tags', tagsLabel(tags, {\n link: true\n }), 5);\n }\n });\n}","import app from 'flarum/forum/app';\nimport { extend, override } from 'flarum/common/extend';\nimport IndexSidebar from 'flarum/forum/components/IndexSidebar';\nimport classList from 'flarum/common/utils/classList';\nimport Button from 'flarum/common/components/Button';\nimport tagsLabel from '../common/helpers/tagsLabel';\nimport getSelectableTags from './utils/getSelectableTags';\nexport default function addTagComposer() {\n extend(IndexSidebar.prototype, 'newDiscussionAction', function (promise) {\n // From `addTagFilter\n const tag = app.currentTag();\n if (tag) {\n const parent = tag.parent();\n const tags = parent ? [parent, tag] : [tag];\n promise.then(composer => composer.fields.tags = tags);\n } else {\n app.composer.fields.tags = [];\n }\n });\n extend('flarum/forum/components/DiscussionComposer', 'oninit', function () {\n app.tagList.load(['parent']).then(() => m.redraw());\n\n // Add tag-selection abilities to the discussion composer.\n this.constructor.prototype.chooseTags = function () {\n const selectableTags = getSelectableTags();\n if (!selectableTags.length) return;\n app.modal.show(() => import(/* webpackChunkName: 'forum/components/TagDiscussionModal', webpackMode: 'lazy-once' */ './components/TagDiscussionModal'), {\n selectedTags: (this.composer.fields.tags || []).slice(0),\n onsubmit: tags => {\n this.composer.fields.tags = tags;\n this.$('textarea').focus();\n }\n });\n };\n });\n\n // Add a tag-selection menu to the discussion composer's header, after the\n // title.\n extend('flarum/forum/components/DiscussionComposer', 'headerItems', function (items) {\n const tags = this.composer.fields.tags || [];\n const selectableTags = getSelectableTags();\n items.add('tags', m(Button, {\n className: classList(['DiscussionComposer-changeTags', 'Button Button--ua-reset', !selectableTags.length && 'disabled']),\n onclick: this.chooseTags.bind(this)\n }, tags.length ? tagsLabel(tags) : m(\"span\", {\n className: \"TagLabel untagged\"\n }, app.translator.trans('flarum-tags.forum.composer_discussion.choose_tags_link'))), 10);\n });\n override('flarum/forum/components/DiscussionComposer', 'onsubmit', function (original) {\n const chosenTags = this.composer.fields.tags || [];\n const chosenPrimaryTags = chosenTags.filter(tag => tag.position() !== null && !tag.isChild());\n const chosenSecondaryTags = chosenTags.filter(tag => tag.position() === null);\n const selectableTags = getSelectableTags();\n const minPrimaryTags = parseInt(app.forum.attribute('minPrimaryTags'));\n const minSecondaryTags = parseInt(app.forum.attribute('minSecondaryTags'));\n const maxPrimaryTags = parseInt(app.forum.attribute('maxPrimaryTags'));\n const maxSecondaryTags = parseInt(app.forum.attribute('maxSecondaryTags'));\n if ((!chosenTags.length && maxPrimaryTags !== 0 && maxSecondaryTags !== 0 || chosenPrimaryTags.length < minPrimaryTags || chosenSecondaryTags.length < minSecondaryTags) && selectableTags.length) {\n app.modal.show(() => import(/* webpackChunkName: 'forum/components/TagDiscussionModal', webpackMode: 'lazy-once' */ './components/TagDiscussionModal'), {\n selectedTags: chosenTags,\n onsubmit: tags => {\n this.composer.fields.tags = tags;\n original();\n }\n });\n } else {\n original();\n }\n });\n\n // Add the selected tags as data to submit to the server.\n extend('flarum/forum/components/DiscussionComposer', 'data', function (data) {\n data.relationships = data.relationships || {};\n data.relationships.tags = this.composer.fields.tags;\n });\n}","export default function getSelectableTags(discussion) {\n let tags = app.store.all('tags');\n if (discussion) {\n const discussionTags = discussion.tags() || [];\n tags = tags.filter(tag => tag.canAddToDiscussion() || discussionTags.includes(tag));\n } else {\n tags = tags.filter(tag => tag.canStartDiscussion());\n }\n return tags;\n}\nflarum.reg.add('flarum-tags', 'forum/utils/getSelectableTags', getSelectableTags);","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\n\nmodule.exports = function(render, schedule, console) {\n\tvar subscriptions = []\n\tvar pending = false\n\tvar offset = -1\n\n\tfunction sync() {\n\t\tfor (offset = 0; offset < subscriptions.length; offset += 2) {\n\t\t\ttry { render(subscriptions[offset], Vnode(subscriptions[offset + 1]), redraw) }\n\t\t\tcatch (e) { console.error(e) }\n\t\t}\n\t\toffset = -1\n\t}\n\n\tfunction redraw() {\n\t\tif (!pending) {\n\t\t\tpending = true\n\t\t\tschedule(function() {\n\t\t\t\tpending = false\n\t\t\t\tsync()\n\t\t\t})\n\t\t}\n\t}\n\n\tredraw.sync = sync\n\n\tfunction mount(root, component) {\n\t\tif (component != null && component.view == null && typeof component !== \"function\") {\n\t\t\tthrow new TypeError(\"m.mount expects a component, not a vnode.\")\n\t\t}\n\n\t\tvar index = subscriptions.indexOf(root)\n\t\tif (index >= 0) {\n\t\t\tsubscriptions.splice(index, 2)\n\t\t\tif (index <= offset) offset -= 2\n\t\t\trender(root, [])\n\t\t}\n\n\t\tif (component != null) {\n\t\t\tsubscriptions.push(root, component)\n\t\t\trender(root, Vnode(component), redraw)\n\t\t}\n\t}\n\n\treturn {mount: mount, redraw: redraw}\n}\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\nvar m = require(\"../render/hyperscript\")\n\nvar buildPathname = require(\"../pathname/build\")\nvar parsePathname = require(\"../pathname/parse\")\nvar compileTemplate = require(\"../pathname/compileTemplate\")\nvar assign = require(\"../util/assign\")\nvar censor = require(\"../util/censor\")\n\nvar sentinel = {}\n\nfunction decodeURIComponentSave(component) {\n\ttry {\n\t\treturn decodeURIComponent(component)\n\t} catch(e) {\n\t\treturn component\n\t}\n}\n\nmodule.exports = function($window, mountRedraw) {\n\tvar callAsync = $window == null\n\t\t// In case Mithril.js' loaded globally without the DOM, let's not break\n\t\t? null\n\t\t: typeof $window.setImmediate === \"function\" ? $window.setImmediate : $window.setTimeout\n\tvar p = Promise.resolve()\n\n\tvar scheduled = false\n\n\t// state === 0: init\n\t// state === 1: scheduled\n\t// state === 2: done\n\tvar ready = false\n\tvar state = 0\n\n\tvar compiled, fallbackRoute\n\n\tvar currentResolver = sentinel, component, attrs, currentPath, lastUpdate\n\n\tvar RouterRoot = {\n\t\tonbeforeupdate: function() {\n\t\t\tstate = state ? 2 : 1\n\t\t\treturn !(!state || sentinel === currentResolver)\n\t\t},\n\t\tonremove: function() {\n\t\t\t$window.removeEventListener(\"popstate\", fireAsync, false)\n\t\t\t$window.removeEventListener(\"hashchange\", resolveRoute, false)\n\t\t},\n\t\tview: function() {\n\t\t\tif (!state || sentinel === currentResolver) return\n\t\t\t// Wrap in a fragment to preserve existing key semantics\n\t\t\tvar vnode = [Vnode(component, attrs.key, attrs)]\n\t\t\tif (currentResolver) vnode = currentResolver.render(vnode[0])\n\t\t\treturn vnode\n\t\t},\n\t}\n\n\tvar SKIP = route.SKIP = {}\n\n\tfunction resolveRoute() {\n\t\tscheduled = false\n\t\t// Consider the pathname holistically. The prefix might even be invalid,\n\t\t// but that's not our problem.\n\t\tvar prefix = $window.location.hash\n\t\tif (route.prefix[0] !== \"#\") {\n\t\t\tprefix = $window.location.search + prefix\n\t\t\tif (route.prefix[0] !== \"?\") {\n\t\t\t\tprefix = $window.location.pathname + prefix\n\t\t\t\tif (prefix[0] !== \"/\") prefix = \"/\" + prefix\n\t\t\t}\n\t\t}\n\t\t// This seemingly useless `.concat()` speeds up the tests quite a bit,\n\t\t// since the representation is consistently a relatively poorly\n\t\t// optimized cons string.\n\t\tvar path = prefix.concat()\n\t\t\t.replace(/(?:%[a-f89][a-f0-9])+/gim, decodeURIComponentSave)\n\t\t\t.slice(route.prefix.length)\n\t\tvar data = parsePathname(path)\n\n\t\tassign(data.params, $window.history.state)\n\n\t\tfunction reject(e) {\n\t\t\tconsole.error(e)\n\t\t\tsetPath(fallbackRoute, null, {replace: true})\n\t\t}\n\n\t\tloop(0)\n\t\tfunction loop(i) {\n\t\t\t// state === 0: init\n\t\t\t// state === 1: scheduled\n\t\t\t// state === 2: done\n\t\t\tfor (; i < compiled.length; i++) {\n\t\t\t\tif (compiled[i].check(data)) {\n\t\t\t\t\tvar payload = compiled[i].component\n\t\t\t\t\tvar matchedRoute = compiled[i].route\n\t\t\t\t\tvar localComp = payload\n\t\t\t\t\tvar update = lastUpdate = function(comp) {\n\t\t\t\t\t\tif (update !== lastUpdate) return\n\t\t\t\t\t\tif (comp === SKIP) return loop(i + 1)\n\t\t\t\t\t\tcomponent = comp != null && (typeof comp.view === \"function\" || typeof comp === \"function\")? comp : \"div\"\n\t\t\t\t\t\tattrs = data.params, currentPath = path, lastUpdate = null\n\t\t\t\t\t\tcurrentResolver = payload.render ? payload : null\n\t\t\t\t\t\tif (state === 2) mountRedraw.redraw()\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tstate = 2\n\t\t\t\t\t\t\tmountRedraw.redraw.sync()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// There's no understating how much I *wish* I could\n\t\t\t\t\t// use `async`/`await` here...\n\t\t\t\t\tif (payload.view || typeof payload === \"function\") {\n\t\t\t\t\t\tpayload = {}\n\t\t\t\t\t\tupdate(localComp)\n\t\t\t\t\t}\n\t\t\t\t\telse if (payload.onmatch) {\n\t\t\t\t\t\tp.then(function () {\n\t\t\t\t\t\t\treturn payload.onmatch(data.params, path, matchedRoute)\n\t\t\t\t\t\t}).then(update, path === fallbackRoute ? null : reject)\n\t\t\t\t\t}\n\t\t\t\t\telse update(\"div\")\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (path === fallbackRoute) {\n\t\t\t\tthrow new Error(\"Could not resolve default route \" + fallbackRoute + \".\")\n\t\t\t}\n\t\t\tsetPath(fallbackRoute, null, {replace: true})\n\t\t}\n\t}\n\n\t// Set it unconditionally so `m.route.set` and `m.route.Link` both work,\n\t// even if neither `pushState` nor `hashchange` are supported. It's\n\t// cleared if `hashchange` is used, since that makes it automatically\n\t// async.\n\tfunction fireAsync() {\n\t\tif (!scheduled) {\n\t\t\tscheduled = true\n\t\t\t// TODO: just do `mountRedraw.redraw()` here and elide the timer\n\t\t\t// dependency. Note that this will muck with tests a *lot*, so it's\n\t\t\t// not as easy of a change as it sounds.\n\t\t\tcallAsync(resolveRoute)\n\t\t}\n\t}\n\n\tfunction setPath(path, data, options) {\n\t\tpath = buildPathname(path, data)\n\t\tif (ready) {\n\t\t\tfireAsync()\n\t\t\tvar state = options ? options.state : null\n\t\t\tvar title = options ? options.title : null\n\t\t\tif (options && options.replace) $window.history.replaceState(state, title, route.prefix + path)\n\t\t\telse $window.history.pushState(state, title, route.prefix + path)\n\t\t}\n\t\telse {\n\t\t\t$window.location.href = route.prefix + path\n\t\t}\n\t}\n\n\tfunction route(root, defaultRoute, routes) {\n\t\tif (!root) throw new TypeError(\"DOM element being rendered to does not exist.\")\n\n\t\tcompiled = Object.keys(routes).map(function(route) {\n\t\t\tif (route[0] !== \"/\") throw new SyntaxError(\"Routes must start with a '/'.\")\n\t\t\tif ((/:([^\\/\\.-]+)(\\.{3})?:/).test(route)) {\n\t\t\t\tthrow new SyntaxError(\"Route parameter names must be separated with either '/', '.', or '-'.\")\n\t\t\t}\n\t\t\treturn {\n\t\t\t\troute: route,\n\t\t\t\tcomponent: routes[route],\n\t\t\t\tcheck: compileTemplate(route),\n\t\t\t}\n\t\t})\n\t\tfallbackRoute = defaultRoute\n\t\tif (defaultRoute != null) {\n\t\t\tvar defaultData = parsePathname(defaultRoute)\n\n\t\t\tif (!compiled.some(function (i) { return i.check(defaultData) })) {\n\t\t\t\tthrow new ReferenceError(\"Default route doesn't match any known routes.\")\n\t\t\t}\n\t\t}\n\n\t\tif (typeof $window.history.pushState === \"function\") {\n\t\t\t$window.addEventListener(\"popstate\", fireAsync, false)\n\t\t} else if (route.prefix[0] === \"#\") {\n\t\t\t$window.addEventListener(\"hashchange\", resolveRoute, false)\n\t\t}\n\n\t\tready = true\n\t\tmountRedraw.mount(root, RouterRoot)\n\t\tresolveRoute()\n\t}\n\troute.set = function(path, data, options) {\n\t\tif (lastUpdate != null) {\n\t\t\toptions = options || {}\n\t\t\toptions.replace = true\n\t\t}\n\t\tlastUpdate = null\n\t\tsetPath(path, data, options)\n\t}\n\troute.get = function() {return currentPath}\n\troute.prefix = \"#!\"\n\troute.Link = {\n\t\tview: function(vnode) {\n\t\t\t// Omit the used parameters from the rendered element - they are\n\t\t\t// internal. Also, censor the various lifecycle methods.\n\t\t\t//\n\t\t\t// We don't strip the other parameters because for convenience we\n\t\t\t// let them be specified in the selector as well.\n\t\t\tvar child = m(\n\t\t\t\tvnode.attrs.selector || \"a\",\n\t\t\t\tcensor(vnode.attrs, [\"options\", \"params\", \"selector\", \"onclick\"]),\n\t\t\t\tvnode.children\n\t\t\t)\n\t\t\tvar options, onclick, href\n\n\t\t\t// Let's provide a *right* way to disable a route link, rather than\n\t\t\t// letting people screw up accessibility on accident.\n\t\t\t//\n\t\t\t// The attribute is coerced so users don't get surprised over\n\t\t\t// `disabled: 0` resulting in a button that's somehow routable\n\t\t\t// despite being visibly disabled.\n\t\t\tif (child.attrs.disabled = Boolean(child.attrs.disabled)) {\n\t\t\t\tchild.attrs.href = null\n\t\t\t\tchild.attrs[\"aria-disabled\"] = \"true\"\n\t\t\t\t// If you *really* do want add `onclick` on a disabled link, use\n\t\t\t\t// an `oncreate` hook to add it.\n\t\t\t} else {\n\t\t\t\toptions = vnode.attrs.options\n\t\t\t\tonclick = vnode.attrs.onclick\n\t\t\t\t// Easier to build it now to keep it isomorphic.\n\t\t\t\thref = buildPathname(child.attrs.href, vnode.attrs.params)\n\t\t\t\tchild.attrs.href = route.prefix + href\n\t\t\t\tchild.attrs.onclick = function(e) {\n\t\t\t\t\tvar result\n\t\t\t\t\tif (typeof onclick === \"function\") {\n\t\t\t\t\t\tresult = onclick.call(e.currentTarget, e)\n\t\t\t\t\t} else if (onclick == null || typeof onclick !== \"object\") {\n\t\t\t\t\t\t// do nothing\n\t\t\t\t\t} else if (typeof onclick.handleEvent === \"function\") {\n\t\t\t\t\t\tonclick.handleEvent(e)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Adapted from React Router's implementation:\n\t\t\t\t\t// https://github.com/ReactTraining/react-router/blob/520a0acd48ae1b066eb0b07d6d4d1790a1d02482/packages/react-router-dom/modules/Link.js\n\t\t\t\t\t//\n\t\t\t\t\t// Try to be flexible and intuitive in how we handle links.\n\t\t\t\t\t// Fun fact: links aren't as obvious to get right as you\n\t\t\t\t\t// would expect. There's a lot more valid ways to click a\n\t\t\t\t\t// link than this, and one might want to not simply click a\n\t\t\t\t\t// link, but right click or command-click it to copy the\n\t\t\t\t\t// link target, etc. Nope, this isn't just for blind people.\n\t\t\t\t\tif (\n\t\t\t\t\t\t// Skip if `onclick` prevented default\n\t\t\t\t\t\tresult !== false && !e.defaultPrevented &&\n\t\t\t\t\t\t// Ignore everything but left clicks\n\t\t\t\t\t\t(e.button === 0 || e.which === 0 || e.which === 1) &&\n\t\t\t\t\t\t// Let the browser handle `target=_blank`, etc.\n\t\t\t\t\t\t(!e.currentTarget.target || e.currentTarget.target === \"_self\") &&\n\t\t\t\t\t\t// No modifier keys\n\t\t\t\t\t\t!e.ctrlKey && !e.metaKey && !e.shiftKey && !e.altKey\n\t\t\t\t\t) {\n\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\te.redraw = false\n\t\t\t\t\t\troute.set(href, null, options)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn child\n\t\t},\n\t}\n\troute.param = function(key) {\n\t\treturn attrs && key != null ? attrs[key] : attrs\n\t}\n\n\treturn route\n}\n","\"use strict\"\n\nvar hyperscript = require(\"./render/hyperscript\")\n\nhyperscript.trust = require(\"./render/trust\")\nhyperscript.fragment = require(\"./render/fragment\")\n\nmodule.exports = hyperscript\n","\"use strict\"\n\nvar hyperscript = require(\"./hyperscript\")\nvar request = require(\"./request\")\nvar mountRedraw = require(\"./mount-redraw\")\nvar domFor = require(\"./render/domFor\")\n\nvar m = function m() { return hyperscript.apply(this, arguments) }\nm.m = hyperscript\nm.trust = hyperscript.trust\nm.fragment = hyperscript.fragment\nm.Fragment = \"[\"\nm.mount = mountRedraw.mount\nm.route = require(\"./route\")\nm.render = require(\"./render\")\nm.redraw = mountRedraw.redraw\nm.request = request.request\nm.parseQueryString = require(\"./querystring/parse\")\nm.buildQueryString = require(\"./querystring/build\")\nm.parsePathname = require(\"./pathname/parse\")\nm.buildPathname = require(\"./pathname/build\")\nm.vnode = require(\"./render/vnode\")\nm.censor = require(\"./util/censor\")\nm.domFor = domFor.domFor\n\nmodule.exports = m\n","\"use strict\"\n\nvar render = require(\"./render\")\n\nmodule.exports = require(\"./api/mount-redraw\")(render, typeof requestAnimationFrame !== \"undefined\" ? requestAnimationFrame : null, typeof console !== \"undefined\" ? console : null)\n","\"use strict\"\n\nvar buildQueryString = require(\"../querystring/build\")\nvar assign = require(\"../util/assign\")\n\n// Returns `path` from `template` + `params`\nmodule.exports = function(template, params) {\n\tif ((/:([^\\/\\.-]+)(\\.{3})?:/).test(template)) {\n\t\tthrow new SyntaxError(\"Template parameter names must be separated by either a '/', '-', or '.'.\")\n\t}\n\tif (params == null) return template\n\tvar queryIndex = template.indexOf(\"?\")\n\tvar hashIndex = template.indexOf(\"#\")\n\tvar queryEnd = hashIndex < 0 ? template.length : hashIndex\n\tvar pathEnd = queryIndex < 0 ? queryEnd : queryIndex\n\tvar path = template.slice(0, pathEnd)\n\tvar query = {}\n\n\tassign(query, params)\n\n\tvar resolved = path.replace(/:([^\\/\\.-]+)(\\.{3})?/g, function(m, key, variadic) {\n\t\tdelete query[key]\n\t\t// If no such parameter exists, don't interpolate it.\n\t\tif (params[key] == null) return m\n\t\t// Escape normal parameters, but not variadic ones.\n\t\treturn variadic ? params[key] : encodeURIComponent(String(params[key]))\n\t})\n\n\t// In case the template substitution adds new query/hash parameters.\n\tvar newQueryIndex = resolved.indexOf(\"?\")\n\tvar newHashIndex = resolved.indexOf(\"#\")\n\tvar newQueryEnd = newHashIndex < 0 ? resolved.length : newHashIndex\n\tvar newPathEnd = newQueryIndex < 0 ? newQueryEnd : newQueryIndex\n\tvar result = resolved.slice(0, newPathEnd)\n\n\tif (queryIndex >= 0) result += template.slice(queryIndex, queryEnd)\n\tif (newQueryIndex >= 0) result += (queryIndex < 0 ? \"?\" : \"&\") + resolved.slice(newQueryIndex, newQueryEnd)\n\tvar querystring = buildQueryString(query)\n\tif (querystring) result += (queryIndex < 0 && newQueryIndex < 0 ? \"?\" : \"&\") + querystring\n\tif (hashIndex >= 0) result += template.slice(hashIndex)\n\tif (newHashIndex >= 0) result += (hashIndex < 0 ? \"\" : \"&\") + resolved.slice(newHashIndex)\n\treturn result\n}\n","\"use strict\"\n\nvar parsePathname = require(\"./parse\")\n\n// Compiles a template into a function that takes a resolved path (without query\n// strings) and returns an object containing the template parameters with their\n// parsed values. This expects the input of the compiled template to be the\n// output of `parsePathname`. Note that it does *not* remove query parameters\n// specified in the template.\nmodule.exports = function(template) {\n\tvar templateData = parsePathname(template)\n\tvar templateKeys = Object.keys(templateData.params)\n\tvar keys = []\n\tvar regexp = new RegExp(\"^\" + templateData.path.replace(\n\t\t// I escape literal text so people can use things like `:file.:ext` or\n\t\t// `:lang-:locale` in routes. This is all merged into one pass so I\n\t\t// don't also accidentally escape `-` and make it harder to detect it to\n\t\t// ban it from template parameters.\n\t\t/:([^\\/.-]+)(\\.{3}|\\.(?!\\.)|-)?|[\\\\^$*+.()|\\[\\]{}]/g,\n\t\tfunction(m, key, extra) {\n\t\t\tif (key == null) return \"\\\\\" + m\n\t\t\tkeys.push({k: key, r: extra === \"...\"})\n\t\t\tif (extra === \"...\") return \"(.*)\"\n\t\t\tif (extra === \".\") return \"([^/]+)\\\\.\"\n\t\t\treturn \"([^/]+)\" + (extra || \"\")\n\t\t}\n\t) + \"$\")\n\treturn function(data) {\n\t\t// First, check the params. Usually, there isn't any, and it's just\n\t\t// checking a static set.\n\t\tfor (var i = 0; i < templateKeys.length; i++) {\n\t\t\tif (templateData.params[templateKeys[i]] !== data.params[templateKeys[i]]) return false\n\t\t}\n\t\t// If no interpolations exist, let's skip all the ceremony\n\t\tif (!keys.length) return regexp.test(data.path)\n\t\tvar values = regexp.exec(data.path)\n\t\tif (values == null) return false\n\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\tdata.params[keys[i].k] = keys[i].r ? values[i + 1] : decodeURIComponent(values[i + 1])\n\t\t}\n\t\treturn true\n\t}\n}\n","\"use strict\"\n\nvar parseQueryString = require(\"../querystring/parse\")\n\n// Returns `{path, params}` from `url`\nmodule.exports = function(url) {\n\tvar queryIndex = url.indexOf(\"?\")\n\tvar hashIndex = url.indexOf(\"#\")\n\tvar queryEnd = hashIndex < 0 ? url.length : hashIndex\n\tvar pathEnd = queryIndex < 0 ? queryEnd : queryIndex\n\tvar path = url.slice(0, pathEnd).replace(/\\/{2,}/g, \"/\")\n\n\tif (!path) path = \"/\"\n\telse {\n\t\tif (path[0] !== \"/\") path = \"/\" + path\n\t}\n\treturn {\n\t\tpath: path,\n\t\tparams: queryIndex < 0\n\t\t\t? {}\n\t\t\t: parseQueryString(url.slice(queryIndex + 1, queryEnd)),\n\t}\n}\n","\"use strict\"\n\nmodule.exports = function(object) {\n\tif (Object.prototype.toString.call(object) !== \"[object Object]\") return \"\"\n\n\tvar args = []\n\tfor (var key in object) {\n\t\tdestructure(key, object[key])\n\t}\n\n\treturn args.join(\"&\")\n\n\tfunction destructure(key, value) {\n\t\tif (Array.isArray(value)) {\n\t\t\tfor (var i = 0; i < value.length; i++) {\n\t\t\t\tdestructure(key + \"[\" + i + \"]\", value[i])\n\t\t\t}\n\t\t}\n\t\telse if (Object.prototype.toString.call(value) === \"[object Object]\") {\n\t\t\tfor (var i in value) {\n\t\t\t\tdestructure(key + \"[\" + i + \"]\", value[i])\n\t\t\t}\n\t\t}\n\t\telse args.push(encodeURIComponent(key) + (value != null && value !== \"\" ? \"=\" + encodeURIComponent(value) : \"\"))\n\t}\n}\n","\"use strict\"\n\nfunction decodeURIComponentSave(str) {\n\ttry {\n\t\treturn decodeURIComponent(str)\n\t} catch(err) {\n\t\treturn str\n\t}\n}\n\nmodule.exports = function(string) {\n\tif (string === \"\" || string == null) return {}\n\tif (string.charAt(0) === \"?\") string = string.slice(1)\n\n\tvar entries = string.split(\"&\"), counters = {}, data = {}\n\tfor (var i = 0; i < entries.length; i++) {\n\t\tvar entry = entries[i].split(\"=\")\n\t\tvar key = decodeURIComponentSave(entry[0])\n\t\tvar value = entry.length === 2 ? decodeURIComponentSave(entry[1]) : \"\"\n\n\t\tif (value === \"true\") value = true\n\t\telse if (value === \"false\") value = false\n\n\t\tvar levels = key.split(/\\]\\[?|\\[/)\n\t\tvar cursor = data\n\t\tif (key.indexOf(\"[\") > -1) levels.pop()\n\t\tfor (var j = 0; j < levels.length; j++) {\n\t\t\tvar level = levels[j], nextLevel = levels[j + 1]\n\t\t\tvar isNumber = nextLevel == \"\" || !isNaN(parseInt(nextLevel, 10))\n\t\t\tif (level === \"\") {\n\t\t\t\tvar key = levels.slice(0, j).join()\n\t\t\t\tif (counters[key] == null) {\n\t\t\t\t\tcounters[key] = Array.isArray(cursor) ? cursor.length : 0\n\t\t\t\t}\n\t\t\t\tlevel = counters[key]++\n\t\t\t}\n\t\t\t// Disallow direct prototype pollution\n\t\t\telse if (level === \"__proto__\") break\n\t\t\tif (j === levels.length - 1) cursor[level] = value\n\t\t\telse {\n\t\t\t\t// Read own properties exclusively to disallow indirect\n\t\t\t\t// prototype pollution\n\t\t\t\tvar desc = Object.getOwnPropertyDescriptor(cursor, level)\n\t\t\t\tif (desc != null) desc = desc.value\n\t\t\t\tif (desc == null) cursor[level] = desc = isNumber ? [] : {}\n\t\t\t\tcursor = desc\n\t\t\t}\n\t\t}\n\t}\n\treturn data\n}\n","\"use strict\"\n\nmodule.exports = require(\"./render/render\")(typeof window !== \"undefined\" ? window : null)\n","\"use strict\"\n\nvar delayedRemoval = new WeakMap\n\nfunction *domFor(vnode, object = {}) {\n\t// To avoid unintended mangling of the internal bundler,\n\t// parameter destructuring is not used here.\n\tvar dom = vnode.dom\n\tvar domSize = vnode.domSize\n\tvar generation = object.generation\n\tif (dom != null) do {\n\t\tvar nextSibling = dom.nextSibling\n\n\t\tif (delayedRemoval.get(dom) === generation) {\n\t\t\tyield dom\n\t\t\tdomSize--\n\t\t}\n\n\t\tdom = nextSibling\n\t}\n\twhile (domSize)\n}\n\nmodule.exports = {\n\tdelayedRemoval: delayedRemoval,\n\tdomFor: domFor,\n}\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\nvar hyperscriptVnode = require(\"./hyperscriptVnode\")\n\nmodule.exports = function() {\n\tvar vnode = hyperscriptVnode.apply(0, arguments)\n\n\tvnode.tag = \"[\"\n\tvnode.children = Vnode.normalizeChildren(vnode.children)\n\treturn vnode\n}\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\nvar hyperscriptVnode = require(\"./hyperscriptVnode\")\nvar hasOwn = require(\"../util/hasOwn\")\n\nvar selectorParser = /(?:(^|#|\\.)([^#\\.\\[\\]]+))|(\\[(.+?)(?:\\s*=\\s*(\"|'|)((?:\\\\[\"'\\]]|.)*?)\\5)?\\])/g\nvar selectorCache = {}\n\nfunction isEmpty(object) {\n\tfor (var key in object) if (hasOwn.call(object, key)) return false\n\treturn true\n}\n\nfunction compileSelector(selector) {\n\tvar match, tag = \"div\", classes = [], attrs = {}\n\twhile (match = selectorParser.exec(selector)) {\n\t\tvar type = match[1], value = match[2]\n\t\tif (type === \"\" && value !== \"\") tag = value\n\t\telse if (type === \"#\") attrs.id = value\n\t\telse if (type === \".\") classes.push(value)\n\t\telse if (match[3][0] === \"[\") {\n\t\t\tvar attrValue = match[6]\n\t\t\tif (attrValue) attrValue = attrValue.replace(/\\\\([\"'])/g, \"$1\").replace(/\\\\\\\\/g, \"\\\\\")\n\t\t\tif (match[4] === \"class\") classes.push(attrValue)\n\t\t\telse attrs[match[4]] = attrValue === \"\" ? attrValue : attrValue || true\n\t\t}\n\t}\n\tif (classes.length > 0) attrs.className = classes.join(\" \")\n\treturn selectorCache[selector] = {tag: tag, attrs: attrs}\n}\n\nfunction execSelector(state, vnode) {\n\tvar attrs = vnode.attrs\n\tvar hasClass = hasOwn.call(attrs, \"class\")\n\tvar className = hasClass ? attrs.class : attrs.className\n\n\tvnode.tag = state.tag\n\n\tif (!isEmpty(state.attrs)) {\n\t\tvar newAttrs = {}\n\n\t\tfor (var key in attrs) {\n\t\t\tif (hasOwn.call(attrs, key)) newAttrs[key] = attrs[key]\n\t\t}\n\n\t\tattrs = newAttrs\n\t}\n\n\tfor (var key in state.attrs) {\n\t\tif (hasOwn.call(state.attrs, key) && key !== \"className\" && !hasOwn.call(attrs, key)){\n\t\t\tattrs[key] = state.attrs[key]\n\t\t}\n\t}\n\tif (className != null || state.attrs.className != null) attrs.className =\n\t\tclassName != null\n\t\t\t? state.attrs.className != null\n\t\t\t\t? String(state.attrs.className) + \" \" + String(className)\n\t\t\t\t: className\n\t\t\t: state.attrs.className != null\n\t\t\t\t? state.attrs.className\n\t\t\t\t: null\n\n\tif (hasClass) attrs.class = null\n\n\tvnode.attrs = attrs\n\n\treturn vnode\n}\n\nfunction hyperscript(selector) {\n\tif (selector == null || typeof selector !== \"string\" && typeof selector !== \"function\" && typeof selector.view !== \"function\") {\n\t\tthrow Error(\"The selector must be either a string or a component.\");\n\t}\n\n\tvar vnode = hyperscriptVnode.apply(1, arguments)\n\n\tif (typeof selector === \"string\") {\n\t\tvnode.children = Vnode.normalizeChildren(vnode.children)\n\t\tif (selector !== \"[\") return execSelector(selectorCache[selector] || compileSelector(selector), vnode)\n\t}\n\n\tvnode.tag = selector\n\treturn vnode\n}\n\nmodule.exports = hyperscript\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\n\n// Call via `hyperscriptVnode.apply(startOffset, arguments)`\n//\n// The reason I do it this way, forwarding the arguments and passing the start\n// offset in `this`, is so I don't have to create a temporary array in a\n// performance-critical path.\n//\n// In native ES6, I'd instead add a final `...args` parameter to the\n// `hyperscript` and `fragment` factories and define this as\n// `hyperscriptVnode(...args)`, since modern engines do optimize that away. But\n// ES5 (what Mithril.js requires thanks to IE support) doesn't give me that luxury,\n// and engines aren't nearly intelligent enough to do either of these:\n//\n// 1. Elide the allocation for `[].slice.call(arguments, 1)` when it's passed to\n// another function only to be indexed.\n// 2. Elide an `arguments` allocation when it's passed to any function other\n// than `Function.prototype.apply` or `Reflect.apply`.\n//\n// In ES6, it'd probably look closer to this (I'd need to profile it, though):\n// module.exports = function(attrs, ...children) {\n// if (attrs == null || typeof attrs === \"object\" && attrs.tag == null && !Array.isArray(attrs)) {\n// if (children.length === 1 && Array.isArray(children[0])) children = children[0]\n// } else {\n// children = children.length === 0 && Array.isArray(attrs) ? attrs : [attrs, ...children]\n// attrs = undefined\n// }\n//\n// if (attrs == null) attrs = {}\n// return Vnode(\"\", attrs.key, attrs, children)\n// }\nmodule.exports = function() {\n\tvar attrs = arguments[this], start = this + 1, children\n\n\tif (attrs == null) {\n\t\tattrs = {}\n\t} else if (typeof attrs !== \"object\" || attrs.tag != null || Array.isArray(attrs)) {\n\t\tattrs = {}\n\t\tstart = this\n\t}\n\n\tif (arguments.length === start + 1) {\n\t\tchildren = arguments[start]\n\t\tif (!Array.isArray(children)) children = [children]\n\t} else {\n\t\tchildren = []\n\t\twhile (start < arguments.length) children.push(arguments[start++])\n\t}\n\n\treturn Vnode(\"\", attrs.key, attrs, children)\n}\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\nvar df = require(\"../render/domFor\")\nvar delayedRemoval = df.delayedRemoval\nvar domFor = df.domFor\n\nmodule.exports = function() {\n\tvar nameSpace = {\n\t\tsvg: \"http://www.w3.org/2000/svg\",\n\t\tmath: \"http://www.w3.org/1998/Math/MathML\"\n\t}\n\n\tvar currentRedraw\n\tvar currentRender\n\n\tfunction getDocument(dom) {\n\t\treturn dom.ownerDocument;\n\t}\n\n\tfunction getNameSpace(vnode) {\n\t\treturn vnode.attrs && vnode.attrs.xmlns || nameSpace[vnode.tag]\n\t}\n\n\t//sanity check to discourage people from doing `vnode.state = ...`\n\tfunction checkState(vnode, original) {\n\t\tif (vnode.state !== original) throw new Error(\"'vnode.state' must not be modified.\")\n\t}\n\n\t//Note: the hook is passed as the `this` argument to allow proxying the\n\t//arguments without requiring a full array allocation to do so. It also\n\t//takes advantage of the fact the current `vnode` is the first argument in\n\t//all lifecycle methods.\n\tfunction callHook(vnode) {\n\t\tvar original = vnode.state\n\t\ttry {\n\t\t\treturn this.apply(original, arguments)\n\t\t} finally {\n\t\t\tcheckState(vnode, original)\n\t\t}\n\t}\n\n\t// IE11 (at least) throws an UnspecifiedError when accessing document.activeElement when\n\t// inside an iframe. Catch and swallow this error, and heavy-handidly return null.\n\tfunction activeElement(dom) {\n\t\ttry {\n\t\t\treturn getDocument(dom).activeElement\n\t\t} catch (e) {\n\t\t\treturn null\n\t\t}\n\t}\n\t//create\n\tfunction createNodes(parent, vnodes, start, end, hooks, nextSibling, ns) {\n\t\tfor (var i = start; i < end; i++) {\n\t\t\tvar vnode = vnodes[i]\n\t\t\tif (vnode != null) {\n\t\t\t\tcreateNode(parent, vnode, hooks, ns, nextSibling)\n\t\t\t}\n\t\t}\n\t}\n\tfunction createNode(parent, vnode, hooks, ns, nextSibling) {\n\t\tvar tag = vnode.tag\n\t\tif (typeof tag === \"string\") {\n\t\t\tvnode.state = {}\n\t\t\tif (vnode.attrs != null) initLifecycle(vnode.attrs, vnode, hooks)\n\t\t\tswitch (tag) {\n\t\t\t\tcase \"#\": createText(parent, vnode, nextSibling); break\n\t\t\t\tcase \"<\": createHTML(parent, vnode, ns, nextSibling); break\n\t\t\t\tcase \"[\": createFragment(parent, vnode, hooks, ns, nextSibling); break\n\t\t\t\tdefault: createElement(parent, vnode, hooks, ns, nextSibling)\n\t\t\t}\n\t\t}\n\t\telse createComponent(parent, vnode, hooks, ns, nextSibling)\n\t}\n\tfunction createText(parent, vnode, nextSibling) {\n\t\tvnode.dom = getDocument(parent).createTextNode(vnode.children)\n\t\tinsertDOM(parent, vnode.dom, nextSibling)\n\t}\n\tvar possibleParents = {caption: \"table\", thead: \"table\", tbody: \"table\", tfoot: \"table\", tr: \"tbody\", th: \"tr\", td: \"tr\", colgroup: \"table\", col: \"colgroup\"}\n\tfunction createHTML(parent, vnode, ns, nextSibling) {\n\t\tvar match = vnode.children.match(/^\\s*?<(\\w+)/im) || []\n\t\t// not using the proper parent makes the child element(s) vanish.\n\t\t// var div = document.createElement(\"div\")\n\t\t// div.innerHTML = \"ij\"\n\t\t// console.log(div.innerHTML)\n\t\t// --> \"ij\", no in sight.\n\t\tvar temp = getDocument(parent).createElement(possibleParents[match[1]] || \"div\")\n\t\tif (ns === \"http://www.w3.org/2000/svg\") {\n\t\t\ttemp.innerHTML = \"\" + vnode.children + \"\"\n\t\t\ttemp = temp.firstChild\n\t\t} else {\n\t\t\ttemp.innerHTML = vnode.children\n\t\t}\n\t\tvnode.dom = temp.firstChild\n\t\tvnode.domSize = temp.childNodes.length\n\t\t// Capture nodes to remove, so we don't confuse them.\n\t\tvar fragment = getDocument(parent).createDocumentFragment()\n\t\tvar child\n\t\twhile (child = temp.firstChild) {\n\t\t\tfragment.appendChild(child)\n\t\t}\n\t\tinsertDOM(parent, fragment, nextSibling)\n\t}\n\tfunction createFragment(parent, vnode, hooks, ns, nextSibling) {\n\t\tvar fragment = getDocument(parent).createDocumentFragment()\n\t\tif (vnode.children != null) {\n\t\t\tvar children = vnode.children\n\t\t\tcreateNodes(fragment, children, 0, children.length, hooks, null, ns)\n\t\t}\n\t\tvnode.dom = fragment.firstChild\n\t\tvnode.domSize = fragment.childNodes.length\n\t\tinsertDOM(parent, fragment, nextSibling)\n\t}\n\tfunction createElement(parent, vnode, hooks, ns, nextSibling) {\n\t\tvar tag = vnode.tag\n\t\tvar attrs = vnode.attrs\n\t\tvar is = attrs && attrs.is\n\n\t\tns = getNameSpace(vnode) || ns\n\n\t\tvar element = ns ?\n\t\t\tis ? getDocument(parent).createElementNS(ns, tag, {is: is}) : getDocument(parent).createElementNS(ns, tag) :\n\t\t\tis ? getDocument(parent).createElement(tag, {is: is}) : getDocument(parent).createElement(tag)\n\t\tvnode.dom = element\n\n\t\tif (attrs != null) {\n\t\t\tsetAttrs(vnode, attrs, ns)\n\t\t}\n\n\t\tinsertDOM(parent, element, nextSibling)\n\n\t\tif (!maybeSetContentEditable(vnode)) {\n\t\t\tif (vnode.children != null) {\n\t\t\t\tvar children = vnode.children\n\t\t\t\tcreateNodes(element, children, 0, children.length, hooks, null, ns)\n\t\t\t\tif (vnode.tag === \"select\" && attrs != null) setLateSelectAttrs(vnode, attrs)\n\t\t\t}\n\t\t}\n\t}\n\tfunction initComponent(vnode, hooks) {\n\t\tvar sentinel\n\t\tif (typeof vnode.tag.view === \"function\") {\n\t\t\tvnode.state = Object.create(vnode.tag)\n\t\t\tsentinel = vnode.state.view\n\t\t\tif (sentinel.$$reentrantLock$$ != null) return\n\t\t\tsentinel.$$reentrantLock$$ = true\n\t\t} else {\n\t\t\tvnode.state = void 0\n\t\t\tsentinel = vnode.tag\n\t\t\tif (sentinel.$$reentrantLock$$ != null) return\n\t\t\tsentinel.$$reentrantLock$$ = true\n\t\t\tvnode.state = (vnode.tag.prototype != null && typeof vnode.tag.prototype.view === \"function\") ? new vnode.tag(vnode) : vnode.tag(vnode)\n\t\t}\n\t\tinitLifecycle(vnode.state, vnode, hooks)\n\t\tif (vnode.attrs != null) initLifecycle(vnode.attrs, vnode, hooks)\n\t\tvnode.instance = Vnode.normalize(callHook.call(vnode.state.view, vnode))\n\t\tif (vnode.instance === vnode) throw Error(\"A view cannot return the vnode it received as argument\")\n\t\tsentinel.$$reentrantLock$$ = null\n\t}\n\tfunction createComponent(parent, vnode, hooks, ns, nextSibling) {\n\t\tinitComponent(vnode, hooks)\n\t\tif (vnode.instance != null) {\n\t\t\tcreateNode(parent, vnode.instance, hooks, ns, nextSibling)\n\t\t\tvnode.dom = vnode.instance.dom\n\t\t\tvnode.domSize = vnode.dom != null ? vnode.instance.domSize : 0\n\t\t}\n\t\telse {\n\t\t\tvnode.domSize = 0\n\t\t}\n\t}\n\n\t//update\n\t/**\n\t * @param {Element|Fragment} parent - the parent element\n\t * @param {Vnode[] | null} old - the list of vnodes of the last `render()` call for\n\t * this part of the tree\n\t * @param {Vnode[] | null} vnodes - as above, but for the current `render()` call.\n\t * @param {Function[]} hooks - an accumulator of post-render hooks (oncreate/onupdate)\n\t * @param {Element | null} nextSibling - the next DOM node if we're dealing with a\n\t * fragment that is not the last item in its\n\t * parent\n\t * @param {'svg' | 'math' | String | null} ns) - the current XML namespace, if any\n\t * @returns void\n\t */\n\t// This function diffs and patches lists of vnodes, both keyed and unkeyed.\n\t//\n\t// We will:\n\t//\n\t// 1. describe its general structure\n\t// 2. focus on the diff algorithm optimizations\n\t// 3. discuss DOM node operations.\n\n\t// ## Overview:\n\t//\n\t// The updateNodes() function:\n\t// - deals with trivial cases\n\t// - determines whether the lists are keyed or unkeyed based on the first non-null node\n\t// of each list.\n\t// - diffs them and patches the DOM if needed (that's the brunt of the code)\n\t// - manages the leftovers: after diffing, are there:\n\t// - old nodes left to remove?\n\t// \t - new nodes to insert?\n\t// \t deal with them!\n\t//\n\t// The lists are only iterated over once, with an exception for the nodes in `old` that\n\t// are visited in the fourth part of the diff and in the `removeNodes` loop.\n\n\t// ## Diffing\n\t//\n\t// Reading https://github.com/localvoid/ivi/blob/ddc09d06abaef45248e6133f7040d00d3c6be853/packages/ivi/src/vdom/implementation.ts#L617-L837\n\t// may be good for context on longest increasing subsequence-based logic for moving nodes.\n\t//\n\t// In order to diff keyed lists, one has to\n\t//\n\t// 1) match nodes in both lists, per key, and update them accordingly\n\t// 2) create the nodes present in the new list, but absent in the old one\n\t// 3) remove the nodes present in the old list, but absent in the new one\n\t// 4) figure out what nodes in 1) to move in order to minimize the DOM operations.\n\t//\n\t// To achieve 1) one can create a dictionary of keys => index (for the old list), then iterate\n\t// over the new list and for each new vnode, find the corresponding vnode in the old list using\n\t// the map.\n\t// 2) is achieved in the same step: if a new node has no corresponding entry in the map, it is new\n\t// and must be created.\n\t// For the removals, we actually remove the nodes that have been updated from the old list.\n\t// The nodes that remain in that list after 1) and 2) have been performed can be safely removed.\n\t// The fourth step is a bit more complex and relies on the longest increasing subsequence (LIS)\n\t// algorithm.\n\t//\n\t// the longest increasing subsequence is the list of nodes that can remain in place. Imagine going\n\t// from `1,2,3,4,5` to `4,5,1,2,3` where the numbers are not necessarily the keys, but the indices\n\t// corresponding to the keyed nodes in the old list (keyed nodes `e,d,c,b,a` => `b,a,e,d,c` would\n\t// match the above lists, for example).\n\t//\n\t// In there are two increasing subsequences: `4,5` and `1,2,3`, the latter being the longest. We\n\t// can update those nodes without moving them, and only call `insertNode` on `4` and `5`.\n\t//\n\t// @localvoid adapted the algo to also support node deletions and insertions (the `lis` is actually\n\t// the longest increasing subsequence *of old nodes still present in the new list*).\n\t//\n\t// It is a general algorithm that is fireproof in all circumstances, but it requires the allocation\n\t// and the construction of a `key => oldIndex` map, and three arrays (one with `newIndex => oldIndex`,\n\t// the `LIS` and a temporary one to create the LIS).\n\t//\n\t// So we cheat where we can: if the tails of the lists are identical, they are guaranteed to be part of\n\t// the LIS and can be updated without moving them.\n\t//\n\t// If two nodes are swapped, they are guaranteed not to be part of the LIS, and must be moved (with\n\t// the exception of the last node if the list is fully reversed).\n\t//\n\t// ## Finding the next sibling.\n\t//\n\t// `updateNode()` and `createNode()` expect a nextSibling parameter to perform DOM operations.\n\t// When the list is being traversed top-down, at any index, the DOM nodes up to the previous\n\t// vnode reflect the content of the new list, whereas the rest of the DOM nodes reflect the old\n\t// list. The next sibling must be looked for in the old list using `getNextSibling(... oldStart + 1 ...)`.\n\t//\n\t// In the other scenarios (swaps, upwards traversal, map-based diff),\n\t// the new vnodes list is traversed upwards. The DOM nodes at the bottom of the list reflect the\n\t// bottom part of the new vnodes list, and we can use the `v.dom` value of the previous node\n\t// as the next sibling (cached in the `nextSibling` variable).\n\n\n\t// ## DOM node moves\n\t//\n\t// In most scenarios `updateNode()` and `createNode()` perform the DOM operations. However,\n\t// this is not the case if the node moved (second and fourth part of the diff algo). We move\n\t// the old DOM nodes before updateNode runs because it enables us to use the cached `nextSibling`\n\t// variable rather than fetching it using `getNextSibling()`.\n\n\tfunction updateNodes(parent, old, vnodes, hooks, nextSibling, ns) {\n\t\tif (old === vnodes || old == null && vnodes == null) return\n\t\telse if (old == null || old.length === 0) createNodes(parent, vnodes, 0, vnodes.length, hooks, nextSibling, ns)\n\t\telse if (vnodes == null || vnodes.length === 0) removeNodes(parent, old, 0, old.length)\n\t\telse {\n\t\t\tvar isOldKeyed = old[0] != null && old[0].key != null\n\t\t\tvar isKeyed = vnodes[0] != null && vnodes[0].key != null\n\t\t\tvar start = 0, oldStart = 0\n\t\t\tif (!isOldKeyed) while (oldStart < old.length && old[oldStart] == null) oldStart++\n\t\t\tif (!isKeyed) while (start < vnodes.length && vnodes[start] == null) start++\n\t\t\tif (isOldKeyed !== isKeyed) {\n\t\t\t\tremoveNodes(parent, old, oldStart, old.length)\n\t\t\t\tcreateNodes(parent, vnodes, start, vnodes.length, hooks, nextSibling, ns)\n\t\t\t} else if (!isKeyed) {\n\t\t\t\t// Don't index past the end of either list (causes deopts).\n\t\t\t\tvar commonLength = old.length < vnodes.length ? old.length : vnodes.length\n\t\t\t\t// Rewind if necessary to the first non-null index on either side.\n\t\t\t\t// We could alternatively either explicitly create or remove nodes when `start !== oldStart`\n\t\t\t\t// but that would be optimizing for sparse lists which are more rare than dense ones.\n\t\t\t\tstart = start < oldStart ? start : oldStart\n\t\t\t\tfor (; start < commonLength; start++) {\n\t\t\t\t\to = old[start]\n\t\t\t\t\tv = vnodes[start]\n\t\t\t\t\tif (o === v || o == null && v == null) continue\n\t\t\t\t\telse if (o == null) createNode(parent, v, hooks, ns, getNextSibling(old, start + 1, nextSibling))\n\t\t\t\t\telse if (v == null) removeNode(parent, o)\n\t\t\t\t\telse updateNode(parent, o, v, hooks, getNextSibling(old, start + 1, nextSibling), ns)\n\t\t\t\t}\n\t\t\t\tif (old.length > commonLength) removeNodes(parent, old, start, old.length)\n\t\t\t\tif (vnodes.length > commonLength) createNodes(parent, vnodes, start, vnodes.length, hooks, nextSibling, ns)\n\t\t\t} else {\n\t\t\t\t// keyed diff\n\t\t\t\tvar oldEnd = old.length - 1, end = vnodes.length - 1, map, o, v, oe, ve, topSibling\n\n\t\t\t\t// bottom-up\n\t\t\t\twhile (oldEnd >= oldStart && end >= start) {\n\t\t\t\t\toe = old[oldEnd]\n\t\t\t\t\tve = vnodes[end]\n\t\t\t\t\tif (oe.key !== ve.key) break\n\t\t\t\t\tif (oe !== ve) updateNode(parent, oe, ve, hooks, nextSibling, ns)\n\t\t\t\t\tif (ve.dom != null) nextSibling = ve.dom\n\t\t\t\t\toldEnd--, end--\n\t\t\t\t}\n\t\t\t\t// top-down\n\t\t\t\twhile (oldEnd >= oldStart && end >= start) {\n\t\t\t\t\to = old[oldStart]\n\t\t\t\t\tv = vnodes[start]\n\t\t\t\t\tif (o.key !== v.key) break\n\t\t\t\t\toldStart++, start++\n\t\t\t\t\tif (o !== v) updateNode(parent, o, v, hooks, getNextSibling(old, oldStart, nextSibling), ns)\n\t\t\t\t}\n\t\t\t\t// swaps and list reversals\n\t\t\t\twhile (oldEnd >= oldStart && end >= start) {\n\t\t\t\t\tif (start === end) break\n\t\t\t\t\tif (o.key !== ve.key || oe.key !== v.key) break\n\t\t\t\t\ttopSibling = getNextSibling(old, oldStart, nextSibling)\n\t\t\t\t\tmoveDOM(parent, oe, topSibling)\n\t\t\t\t\tif (oe !== v) updateNode(parent, oe, v, hooks, topSibling, ns)\n\t\t\t\t\tif (++start <= --end) moveDOM(parent, o, nextSibling)\n\t\t\t\t\tif (o !== ve) updateNode(parent, o, ve, hooks, nextSibling, ns)\n\t\t\t\t\tif (ve.dom != null) nextSibling = ve.dom\n\t\t\t\t\toldStart++; oldEnd--\n\t\t\t\t\toe = old[oldEnd]\n\t\t\t\t\tve = vnodes[end]\n\t\t\t\t\to = old[oldStart]\n\t\t\t\t\tv = vnodes[start]\n\t\t\t\t}\n\t\t\t\t// bottom up once again\n\t\t\t\twhile (oldEnd >= oldStart && end >= start) {\n\t\t\t\t\tif (oe.key !== ve.key) break\n\t\t\t\t\tif (oe !== ve) updateNode(parent, oe, ve, hooks, nextSibling, ns)\n\t\t\t\t\tif (ve.dom != null) nextSibling = ve.dom\n\t\t\t\t\toldEnd--, end--\n\t\t\t\t\toe = old[oldEnd]\n\t\t\t\t\tve = vnodes[end]\n\t\t\t\t}\n\t\t\t\tif (start > end) removeNodes(parent, old, oldStart, oldEnd + 1)\n\t\t\t\telse if (oldStart > oldEnd) createNodes(parent, vnodes, start, end + 1, hooks, nextSibling, ns)\n\t\t\t\telse {\n\t\t\t\t\t// inspired by ivi https://github.com/ivijs/ivi/ by Boris Kaul\n\t\t\t\t\tvar originalNextSibling = nextSibling, vnodesLength = end - start + 1, oldIndices = new Array(vnodesLength), li=0, i=0, pos = 2147483647, matched = 0, map, lisIndices\n\t\t\t\t\tfor (i = 0; i < vnodesLength; i++) oldIndices[i] = -1\n\t\t\t\t\tfor (i = end; i >= start; i--) {\n\t\t\t\t\t\tif (map == null) map = getKeyMap(old, oldStart, oldEnd + 1)\n\t\t\t\t\t\tve = vnodes[i]\n\t\t\t\t\t\tvar oldIndex = map[ve.key]\n\t\t\t\t\t\tif (oldIndex != null) {\n\t\t\t\t\t\t\tpos = (oldIndex < pos) ? oldIndex : -1 // becomes -1 if nodes were re-ordered\n\t\t\t\t\t\t\toldIndices[i-start] = oldIndex\n\t\t\t\t\t\t\toe = old[oldIndex]\n\t\t\t\t\t\t\told[oldIndex] = null\n\t\t\t\t\t\t\tif (oe !== ve) updateNode(parent, oe, ve, hooks, nextSibling, ns)\n\t\t\t\t\t\t\tif (ve.dom != null) nextSibling = ve.dom\n\t\t\t\t\t\t\tmatched++\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tnextSibling = originalNextSibling\n\t\t\t\t\tif (matched !== oldEnd - oldStart + 1) removeNodes(parent, old, oldStart, oldEnd + 1)\n\t\t\t\t\tif (matched === 0) createNodes(parent, vnodes, start, end + 1, hooks, nextSibling, ns)\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (pos === -1) {\n\t\t\t\t\t\t\t// the indices of the indices of the items that are part of the\n\t\t\t\t\t\t\t// longest increasing subsequence in the oldIndices list\n\t\t\t\t\t\t\tlisIndices = makeLisIndices(oldIndices)\n\t\t\t\t\t\t\tli = lisIndices.length - 1\n\t\t\t\t\t\t\tfor (i = end; i >= start; i--) {\n\t\t\t\t\t\t\t\tv = vnodes[i]\n\t\t\t\t\t\t\t\tif (oldIndices[i-start] === -1) createNode(parent, v, hooks, ns, nextSibling)\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tif (lisIndices[li] === i - start) li--\n\t\t\t\t\t\t\t\t\telse moveDOM(parent, v, nextSibling)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (v.dom != null) nextSibling = vnodes[i].dom\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfor (i = end; i >= start; i--) {\n\t\t\t\t\t\t\t\tv = vnodes[i]\n\t\t\t\t\t\t\t\tif (oldIndices[i-start] === -1) createNode(parent, v, hooks, ns, nextSibling)\n\t\t\t\t\t\t\t\tif (v.dom != null) nextSibling = vnodes[i].dom\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tfunction updateNode(parent, old, vnode, hooks, nextSibling, ns) {\n\t\tvar oldTag = old.tag, tag = vnode.tag\n\t\tif (oldTag === tag) {\n\t\t\tvnode.state = old.state\n\t\t\tvnode.events = old.events\n\t\t\tif (shouldNotUpdate(vnode, old)) return\n\t\t\tif (typeof oldTag === \"string\") {\n\t\t\t\tif (vnode.attrs != null) {\n\t\t\t\t\tupdateLifecycle(vnode.attrs, vnode, hooks)\n\t\t\t\t}\n\t\t\t\tswitch (oldTag) {\n\t\t\t\t\tcase \"#\": updateText(old, vnode); break\n\t\t\t\t\tcase \"<\": updateHTML(parent, old, vnode, ns, nextSibling); break\n\t\t\t\t\tcase \"[\": updateFragment(parent, old, vnode, hooks, nextSibling, ns); break\n\t\t\t\t\tdefault: updateElement(old, vnode, hooks, ns)\n\t\t\t\t}\n\t\t\t}\n\t\t\telse updateComponent(parent, old, vnode, hooks, nextSibling, ns)\n\t\t}\n\t\telse {\n\t\t\tremoveNode(parent, old)\n\t\t\tcreateNode(parent, vnode, hooks, ns, nextSibling)\n\t\t}\n\t}\n\tfunction updateText(old, vnode) {\n\t\tif (old.children.toString() !== vnode.children.toString()) {\n\t\t\told.dom.nodeValue = vnode.children\n\t\t}\n\t\tvnode.dom = old.dom\n\t}\n\tfunction updateHTML(parent, old, vnode, ns, nextSibling) {\n\t\tif (old.children !== vnode.children) {\n\t\t\tremoveDOM(parent, old, undefined)\n\t\t\tcreateHTML(parent, vnode, ns, nextSibling)\n\t\t}\n\t\telse {\n\t\t\tvnode.dom = old.dom\n\t\t\tvnode.domSize = old.domSize\n\t\t}\n\t}\n\tfunction updateFragment(parent, old, vnode, hooks, nextSibling, ns) {\n\t\tupdateNodes(parent, old.children, vnode.children, hooks, nextSibling, ns)\n\t\tvar domSize = 0, children = vnode.children\n\t\tvnode.dom = null\n\t\tif (children != null) {\n\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\tvar child = children[i]\n\t\t\t\tif (child != null && child.dom != null) {\n\t\t\t\t\tif (vnode.dom == null) vnode.dom = child.dom\n\t\t\t\t\tdomSize += child.domSize || 1\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (domSize !== 1) vnode.domSize = domSize\n\t\t}\n\t}\n\tfunction updateElement(old, vnode, hooks, ns) {\n\t\tvar element = vnode.dom = old.dom\n\t\tns = getNameSpace(vnode) || ns\n\n\t\tupdateAttrs(vnode, old.attrs, vnode.attrs, ns)\n\t\tif (!maybeSetContentEditable(vnode)) {\n\t\t\tupdateNodes(element, old.children, vnode.children, hooks, null, ns)\n\t\t}\n\t}\n\tfunction updateComponent(parent, old, vnode, hooks, nextSibling, ns) {\n\t\tvnode.instance = Vnode.normalize(callHook.call(vnode.state.view, vnode))\n\t\tif (vnode.instance === vnode) throw Error(\"A view cannot return the vnode it received as argument\")\n\t\tupdateLifecycle(vnode.state, vnode, hooks)\n\t\tif (vnode.attrs != null) updateLifecycle(vnode.attrs, vnode, hooks)\n\t\tif (vnode.instance != null) {\n\t\t\tif (old.instance == null) createNode(parent, vnode.instance, hooks, ns, nextSibling)\n\t\t\telse updateNode(parent, old.instance, vnode.instance, hooks, nextSibling, ns)\n\t\t\tvnode.dom = vnode.instance.dom\n\t\t\tvnode.domSize = vnode.instance.domSize\n\t\t}\n\t\telse if (old.instance != null) {\n\t\t\tremoveNode(parent, old.instance)\n\t\t\tvnode.dom = undefined\n\t\t\tvnode.domSize = 0\n\t\t}\n\t\telse {\n\t\t\tvnode.dom = old.dom\n\t\t\tvnode.domSize = old.domSize\n\t\t}\n\t}\n\tfunction getKeyMap(vnodes, start, end) {\n\t\tvar map = Object.create(null)\n\t\tfor (; start < end; start++) {\n\t\t\tvar vnode = vnodes[start]\n\t\t\tif (vnode != null) {\n\t\t\t\tvar key = vnode.key\n\t\t\t\tif (key != null) map[key] = start\n\t\t\t}\n\t\t}\n\t\treturn map\n\t}\n\t// Lifted from ivi https://github.com/ivijs/ivi/\n\t// takes a list of unique numbers (-1 is special and can\n\t// occur multiple times) and returns an array with the indices\n\t// of the items that are part of the longest increasing\n\t// subsequence\n\tvar lisTemp = []\n\tfunction makeLisIndices(a) {\n\t\tvar result = [0]\n\t\tvar u = 0, v = 0, i = 0\n\t\tvar il = lisTemp.length = a.length\n\t\tfor (var i = 0; i < il; i++) lisTemp[i] = a[i]\n\t\tfor (var i = 0; i < il; ++i) {\n\t\t\tif (a[i] === -1) continue\n\t\t\tvar j = result[result.length - 1]\n\t\t\tif (a[j] < a[i]) {\n\t\t\t\tlisTemp[i] = j\n\t\t\t\tresult.push(i)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tu = 0\n\t\t\tv = result.length - 1\n\t\t\twhile (u < v) {\n\t\t\t\t// Fast integer average without overflow.\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tvar c = (u >>> 1) + (v >>> 1) + (u & v & 1)\n\t\t\t\tif (a[result[c]] < a[i]) {\n\t\t\t\t\tu = c + 1\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tv = c\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (a[i] < a[result[u]]) {\n\t\t\t\tif (u > 0) lisTemp[i] = result[u - 1]\n\t\t\t\tresult[u] = i\n\t\t\t}\n\t\t}\n\t\tu = result.length\n\t\tv = result[u - 1]\n\t\twhile (u-- > 0) {\n\t\t\tresult[u] = v\n\t\t\tv = lisTemp[v]\n\t\t}\n\t\tlisTemp.length = 0\n\t\treturn result\n\t}\n\n\tfunction getNextSibling(vnodes, i, nextSibling) {\n\t\tfor (; i < vnodes.length; i++) {\n\t\t\tif (vnodes[i] != null && vnodes[i].dom != null) return vnodes[i].dom\n\t\t}\n\t\treturn nextSibling\n\t}\n\n\t// This handles fragments with zombie children (removed from vdom, but persisted in DOM through onbeforeremove)\n\tfunction moveDOM(parent, vnode, nextSibling) {\n\t\tif (vnode.dom != null) {\n\t\t\tvar target\n\t\t\tif (vnode.domSize == null) {\n\t\t\t\t// don't allocate for the common case\n\t\t\t\ttarget = vnode.dom\n\t\t\t} else {\n\t\t\t\ttarget = getDocument(parent).createDocumentFragment()\n\t\t\t\tfor (var dom of domFor(vnode)) target.appendChild(dom)\n\t\t\t}\n\t\t\tinsertDOM(parent, target, nextSibling)\n\t\t}\n\t}\n\n\tfunction insertDOM(parent, dom, nextSibling) {\n\t\tif (nextSibling != null) parent.insertBefore(dom, nextSibling)\n\t\telse parent.appendChild(dom)\n\t}\n\n\tfunction maybeSetContentEditable(vnode) {\n\t\tif (vnode.attrs == null || (\n\t\t\tvnode.attrs.contenteditable == null && // attribute\n\t\t\tvnode.attrs.contentEditable == null // property\n\t\t)) return false\n\t\tvar children = vnode.children\n\t\tif (children != null && children.length === 1 && children[0].tag === \"<\") {\n\t\t\tvar content = children[0].children\n\t\t\tif (vnode.dom.innerHTML !== content) vnode.dom.innerHTML = content\n\t\t}\n\t\telse if (children != null && children.length !== 0) throw new Error(\"Child node of a contenteditable must be trusted.\")\n\t\treturn true\n\t}\n\n\t//remove\n\tfunction removeNodes(parent, vnodes, start, end) {\n\t\tfor (var i = start; i < end; i++) {\n\t\t\tvar vnode = vnodes[i]\n\t\t\tif (vnode != null) removeNode(parent, vnode)\n\t\t}\n\t}\n\tfunction removeNode(parent, vnode) {\n\t\tvar mask = 0\n\t\tvar original = vnode.state\n\t\tvar stateResult, attrsResult\n\t\tif (typeof vnode.tag !== \"string\" && typeof vnode.state.onbeforeremove === \"function\") {\n\t\t\tvar result = callHook.call(vnode.state.onbeforeremove, vnode)\n\t\t\tif (result != null && typeof result.then === \"function\") {\n\t\t\t\tmask = 1\n\t\t\t\tstateResult = result\n\t\t\t}\n\t\t}\n\t\tif (vnode.attrs && typeof vnode.attrs.onbeforeremove === \"function\") {\n\t\t\tvar result = callHook.call(vnode.attrs.onbeforeremove, vnode)\n\t\t\tif (result != null && typeof result.then === \"function\") {\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tmask |= 2\n\t\t\t\tattrsResult = result\n\t\t\t}\n\t\t}\n\t\tcheckState(vnode, original)\n\t\tvar generation\n\t\t// If we can, try to fast-path it and avoid all the overhead of awaiting\n\t\tif (!mask) {\n\t\t\tonremove(vnode)\n\t\t\tremoveDOM(parent, vnode, generation)\n\t\t} else {\n\t\t\tgeneration = currentRender\n\t\t\tfor (var dom of domFor(vnode)) delayedRemoval.set(dom, generation)\n\t\t\tif (stateResult != null) {\n\t\t\t\tstateResult.finally(function () {\n\t\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\t\tif (mask & 1) {\n\t\t\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\t\t\tmask &= 2\n\t\t\t\t\t\tif (!mask) {\n\t\t\t\t\t\t\tcheckState(vnode, original)\n\t\t\t\t\t\t\tonremove(vnode)\n\t\t\t\t\t\t\tremoveDOM(parent, vnode, generation)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t\tif (attrsResult != null) {\n\t\t\t\tattrsResult.finally(function () {\n\t\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\t\tif (mask & 2) {\n\t\t\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\t\t\tmask &= 1\n\t\t\t\t\t\tif (!mask) {\n\t\t\t\t\t\t\tcheckState(vnode, original)\n\t\t\t\t\t\t\tonremove(vnode)\n\t\t\t\t\t\t\tremoveDOM(parent, vnode, generation)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\tfunction removeDOM(parent, vnode, generation) {\n\t\tif (vnode.dom == null) return\n\t\tif (vnode.domSize == null) {\n\t\t\t// don't allocate for the common case\n\t\t\tif (delayedRemoval.get(vnode.dom) === generation) parent.removeChild(vnode.dom)\n\t\t} else {\n\t\t\tfor (var dom of domFor(vnode, {generation})) parent.removeChild(dom)\n\t\t}\n\t}\n\n\tfunction onremove(vnode) {\n\t\tif (typeof vnode.tag !== \"string\" && typeof vnode.state.onremove === \"function\") callHook.call(vnode.state.onremove, vnode)\n\t\tif (vnode.attrs && typeof vnode.attrs.onremove === \"function\") callHook.call(vnode.attrs.onremove, vnode)\n\t\tif (typeof vnode.tag !== \"string\") {\n\t\t\tif (vnode.instance != null) onremove(vnode.instance)\n\t\t} else {\n\t\t\tvar children = vnode.children\n\t\t\tif (Array.isArray(children)) {\n\t\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\t\tvar child = children[i]\n\t\t\t\t\tif (child != null) onremove(child)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t//attrs\n\tfunction setAttrs(vnode, attrs, ns) {\n\t\t// If you assign an input type that is not supported by IE 11 with an assignment expression, an error will occur.\n\t\t//\n\t\t// Also, the DOM does things to inputs based on the value, so it needs set first.\n\t\t// See: https://github.com/MithrilJS/mithril.js/issues/2622\n\t\tif (vnode.tag === \"input\" && attrs.type != null) vnode.dom.setAttribute(\"type\", attrs.type)\n\t\tvar isFileInput = attrs != null && vnode.tag === \"input\" && attrs.type === \"file\"\n\t\tfor (var key in attrs) {\n\t\t\tsetAttr(vnode, key, null, attrs[key], ns, isFileInput)\n\t\t}\n\t}\n\tfunction setAttr(vnode, key, old, value, ns, isFileInput) {\n\t\tif (key === \"key\" || key === \"is\" || value == null || isLifecycleMethod(key) || (old === value && !isFormAttribute(vnode, key)) && typeof value !== \"object\" || key === \"type\" && vnode.tag === \"input\") return\n\t\tif (key[0] === \"o\" && key[1] === \"n\") return updateEvent(vnode, key, value)\n\t\tif (key.slice(0, 6) === \"xlink:\") vnode.dom.setAttributeNS(\"http://www.w3.org/1999/xlink\", key.slice(6), value)\n\t\telse if (key === \"style\") updateStyle(vnode.dom, old, value)\n\t\telse if (hasPropertyKey(vnode, key, ns)) {\n\t\t\tif (key === \"value\") {\n\t\t\t\t// Only do the coercion if we're actually going to check the value.\n\t\t\t\t/* eslint-disable no-implicit-coercion */\n\t\t\t\t//setting input[value] to same value by typing on focused element moves cursor to end in Chrome\n\t\t\t\t//setting input[type=file][value] to same value causes an error to be generated if it's non-empty\n\t\t\t\tif ((vnode.tag === \"input\" || vnode.tag === \"textarea\") && vnode.dom.value === \"\" + value && (isFileInput || vnode.dom === activeElement(vnode.dom))) return\n\t\t\t\t//setting select[value] to same value while having select open blinks select dropdown in Chrome\n\t\t\t\tif (vnode.tag === \"select\" && old !== null && vnode.dom.value === \"\" + value) return\n\t\t\t\t//setting option[value] to same value while having select open blinks select dropdown in Chrome\n\t\t\t\tif (vnode.tag === \"option\" && old !== null && vnode.dom.value === \"\" + value) return\n\t\t\t\t//setting input[type=file][value] to different value is an error if it's non-empty\n\t\t\t\t// Not ideal, but it at least works around the most common source of uncaught exceptions for now.\n\t\t\t\tif (isFileInput && \"\" + value !== \"\") { console.error(\"`value` is read-only on file inputs!\"); return }\n\t\t\t\t/* eslint-enable no-implicit-coercion */\n\t\t\t}\n\t\t\tvnode.dom[key] = value\n\t\t} else {\n\t\t\tif (typeof value === \"boolean\") {\n\t\t\t\tif (value) vnode.dom.setAttribute(key, \"\")\n\t\t\t\telse vnode.dom.removeAttribute(key)\n\t\t\t}\n\t\t\telse vnode.dom.setAttribute(key === \"className\" ? \"class\" : key, value)\n\t\t}\n\t}\n\tfunction removeAttr(vnode, key, old, ns) {\n\t\tif (key === \"key\" || key === \"is\" || old == null || isLifecycleMethod(key)) return\n\t\tif (key[0] === \"o\" && key[1] === \"n\") updateEvent(vnode, key, undefined)\n\t\telse if (key === \"style\") updateStyle(vnode.dom, old, null)\n\t\telse if (\n\t\t\thasPropertyKey(vnode, key, ns)\n\t\t\t&& key !== \"className\"\n\t\t\t&& key !== \"title\" // creates \"null\" as title\n\t\t\t&& !(key === \"value\" && (\n\t\t\t\tvnode.tag === \"option\"\n\t\t\t\t|| vnode.tag === \"select\" && vnode.dom.selectedIndex === -1 && vnode.dom === activeElement(vnode.dom)\n\t\t\t))\n\t\t\t&& !(vnode.tag === \"input\" && key === \"type\")\n\t\t) {\n\t\t\tvnode.dom[key] = null\n\t\t} else {\n\t\t\tvar nsLastIndex = key.indexOf(\":\")\n\t\t\tif (nsLastIndex !== -1) key = key.slice(nsLastIndex + 1)\n\t\t\tif (old !== false) vnode.dom.removeAttribute(key === \"className\" ? \"class\" : key)\n\t\t}\n\t}\n\tfunction setLateSelectAttrs(vnode, attrs) {\n\t\tif (\"value\" in attrs) {\n\t\t\tif(attrs.value === null) {\n\t\t\t\tif (vnode.dom.selectedIndex !== -1) vnode.dom.value = null\n\t\t\t} else {\n\t\t\t\tvar normalized = \"\" + attrs.value // eslint-disable-line no-implicit-coercion\n\t\t\t\tif (vnode.dom.value !== normalized || vnode.dom.selectedIndex === -1) {\n\t\t\t\t\tvnode.dom.value = normalized\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (\"selectedIndex\" in attrs) setAttr(vnode, \"selectedIndex\", null, attrs.selectedIndex, undefined)\n\t}\n\tfunction updateAttrs(vnode, old, attrs, ns) {\n\t\tif (old && old === attrs) {\n\t\t\tconsole.warn(\"Don't reuse attrs object, use new object for every redraw, this will throw in next major\")\n\t\t}\n\t\tif (attrs != null) {\n\t\t\t// If you assign an input type that is not supported by IE 11 with an assignment expression, an error will occur.\n\t\t\t//\n\t\t\t// Also, the DOM does things to inputs based on the value, so it needs set first.\n\t\t\t// See: https://github.com/MithrilJS/mithril.js/issues/2622\n\t\t\tif (vnode.tag === \"input\" && attrs.type != null) vnode.dom.setAttribute(\"type\", attrs.type)\n\t\t\tvar isFileInput = vnode.tag === \"input\" && attrs.type === \"file\"\n\t\t\tfor (var key in attrs) {\n\t\t\t\tsetAttr(vnode, key, old && old[key], attrs[key], ns, isFileInput)\n\t\t\t}\n\t\t}\n\t\tvar val\n\t\tif (old != null) {\n\t\t\tfor (var key in old) {\n\t\t\t\tif (((val = old[key]) != null) && (attrs == null || attrs[key] == null)) {\n\t\t\t\t\tremoveAttr(vnode, key, val, ns)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tfunction isFormAttribute(vnode, attr) {\n\t\treturn attr === \"value\" || attr === \"checked\" || attr === \"selectedIndex\" || attr === \"selected\" && vnode.dom === activeElement(vnode.dom) || vnode.tag === \"option\" && vnode.dom.parentNode === activeElement(vnode.dom)\n\t}\n\tfunction isLifecycleMethod(attr) {\n\t\treturn attr === \"oninit\" || attr === \"oncreate\" || attr === \"onupdate\" || attr === \"onremove\" || attr === \"onbeforeremove\" || attr === \"onbeforeupdate\"\n\t}\n\tfunction hasPropertyKey(vnode, key, ns) {\n\t\t// Filter out namespaced keys\n\t\treturn ns === undefined && (\n\t\t\t// If it's a custom element, just keep it.\n\t\t\tvnode.tag.indexOf(\"-\") > -1 || vnode.attrs != null && vnode.attrs.is ||\n\t\t\t// If it's a normal element, let's try to avoid a few browser bugs.\n\t\t\tkey !== \"href\" && key !== \"list\" && key !== \"form\" && key !== \"width\" && key !== \"height\"// && key !== \"type\"\n\t\t\t// Defer the property check until *after* we check everything.\n\t\t) && key in vnode.dom\n\t}\n\n\t//style\n\tvar uppercaseRegex = /[A-Z]/g\n\tfunction toLowerCase(capital) { return \"-\" + capital.toLowerCase() }\n\tfunction normalizeKey(key) {\n\t\treturn key[0] === \"-\" && key[1] === \"-\" ? key :\n\t\t\tkey === \"cssFloat\" ? \"float\" :\n\t\t\t\tkey.replace(uppercaseRegex, toLowerCase)\n\t}\n\tfunction updateStyle(element, old, style) {\n\t\tif (old === style) {\n\t\t\t// Styles are equivalent, do nothing.\n\t\t} else if (style == null) {\n\t\t\t// New style is missing, just clear it.\n\t\t\telement.style = \"\"\n\t\t} else if (typeof style !== \"object\") {\n\t\t\t// New style is a string, let engine deal with patching.\n\t\t\telement.style = style\n\t\t} else if (old == null || typeof old !== \"object\") {\n\t\t\t// `old` is missing or a string, `style` is an object.\n\t\t\telement.style.cssText = \"\"\n\t\t\t// Add new style properties\n\t\t\tfor (var key in style) {\n\t\t\t\tvar value = style[key]\n\t\t\t\tif (value != null) element.style.setProperty(normalizeKey(key), String(value))\n\t\t\t}\n\t\t} else {\n\t\t\t// Both old & new are (different) objects.\n\t\t\t// Update style properties that have changed\n\t\t\tfor (var key in style) {\n\t\t\t\tvar value = style[key]\n\t\t\t\tif (value != null && (value = String(value)) !== String(old[key])) {\n\t\t\t\t\telement.style.setProperty(normalizeKey(key), value)\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Remove style properties that no longer exist\n\t\t\tfor (var key in old) {\n\t\t\t\tif (old[key] != null && style[key] == null) {\n\t\t\t\t\telement.style.removeProperty(normalizeKey(key))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Here's an explanation of how this works:\n\t// 1. The event names are always (by design) prefixed by `on`.\n\t// 2. The EventListener interface accepts either a function or an object\n\t// with a `handleEvent` method.\n\t// 3. The object does not inherit from `Object.prototype`, to avoid\n\t// any potential interference with that (e.g. setters).\n\t// 4. The event name is remapped to the handler before calling it.\n\t// 5. In function-based event handlers, `ev.target === this`. We replicate\n\t// that below.\n\t// 6. In function-based event handlers, `return false` prevents the default\n\t// action and stops event propagation. We replicate that below.\n\tfunction EventDict() {\n\t\t// Save this, so the current redraw is correctly tracked.\n\t\tthis._ = currentRedraw\n\t}\n\tEventDict.prototype = Object.create(null)\n\tEventDict.prototype.handleEvent = function (ev) {\n\t\tvar handler = this[\"on\" + ev.type]\n\t\tvar result\n\t\tif (typeof handler === \"function\") result = handler.call(ev.currentTarget, ev)\n\t\telse if (typeof handler.handleEvent === \"function\") handler.handleEvent(ev)\n\t\tif (this._ && ev.redraw !== false) (0, this._)()\n\t\tif (result === false) {\n\t\t\tev.preventDefault()\n\t\t\tev.stopPropagation()\n\t\t}\n\t}\n\n\t//event\n\tfunction updateEvent(vnode, key, value) {\n\t\tif (vnode.events != null) {\n\t\t\tvnode.events._ = currentRedraw\n\t\t\tif (vnode.events[key] === value) return\n\t\t\tif (value != null && (typeof value === \"function\" || typeof value === \"object\")) {\n\t\t\t\tif (vnode.events[key] == null) vnode.dom.addEventListener(key.slice(2), vnode.events, false)\n\t\t\t\tvnode.events[key] = value\n\t\t\t} else {\n\t\t\t\tif (vnode.events[key] != null) vnode.dom.removeEventListener(key.slice(2), vnode.events, false)\n\t\t\t\tvnode.events[key] = undefined\n\t\t\t}\n\t\t} else if (value != null && (typeof value === \"function\" || typeof value === \"object\")) {\n\t\t\tvnode.events = new EventDict()\n\t\t\tvnode.dom.addEventListener(key.slice(2), vnode.events, false)\n\t\t\tvnode.events[key] = value\n\t\t}\n\t}\n\n\t//lifecycle\n\tfunction initLifecycle(source, vnode, hooks) {\n\t\tif (typeof source.oninit === \"function\") callHook.call(source.oninit, vnode)\n\t\tif (typeof source.oncreate === \"function\") hooks.push(callHook.bind(source.oncreate, vnode))\n\t}\n\tfunction updateLifecycle(source, vnode, hooks) {\n\t\tif (typeof source.onupdate === \"function\") hooks.push(callHook.bind(source.onupdate, vnode))\n\t}\n\tfunction shouldNotUpdate(vnode, old) {\n\t\tdo {\n\t\t\tif (vnode.attrs != null && typeof vnode.attrs.onbeforeupdate === \"function\") {\n\t\t\t\tvar force = callHook.call(vnode.attrs.onbeforeupdate, vnode, old)\n\t\t\t\tif (force !== undefined && !force) break\n\t\t\t}\n\t\t\tif (typeof vnode.tag !== \"string\" && typeof vnode.state.onbeforeupdate === \"function\") {\n\t\t\t\tvar force = callHook.call(vnode.state.onbeforeupdate, vnode, old)\n\t\t\t\tif (force !== undefined && !force) break\n\t\t\t}\n\t\t\treturn false\n\t\t} while (false); // eslint-disable-line no-constant-condition\n\t\tvnode.dom = old.dom\n\t\tvnode.domSize = old.domSize\n\t\tvnode.instance = old.instance\n\t\t// One would think having the actual latest attributes would be ideal,\n\t\t// but it doesn't let us properly diff based on our current internal\n\t\t// representation. We have to save not only the old DOM info, but also\n\t\t// the attributes used to create it, as we diff *that*, not against the\n\t\t// DOM directly (with a few exceptions in `setAttr`). And, of course, we\n\t\t// need to save the children and text as they are conceptually not\n\t\t// unlike special \"attributes\" internally.\n\t\tvnode.attrs = old.attrs\n\t\tvnode.children = old.children\n\t\tvnode.text = old.text\n\t\treturn true\n\t}\n\n\tvar currentDOM\n\n\treturn function(dom, vnodes, redraw) {\n\t\tif (!dom) throw new TypeError(\"DOM element being rendered to does not exist.\")\n\t\tif (currentDOM != null && dom.contains(currentDOM)) {\n\t\t\tthrow new TypeError(\"Node is currently being rendered to and thus is locked.\")\n\t\t}\n\t\tvar prevRedraw = currentRedraw\n\t\tvar prevDOM = currentDOM\n\t\tvar hooks = []\n\t\tvar active = activeElement(dom)\n\t\tvar namespace = dom.namespaceURI\n\n\t\tcurrentDOM = dom\n\t\tcurrentRedraw = typeof redraw === \"function\" ? redraw : undefined\n\t\tcurrentRender = {}\n\t\ttry {\n\t\t\t// First time rendering into a node clears it out\n\t\t\tif (dom.vnodes == null) dom.textContent = \"\"\n\t\t\tvnodes = Vnode.normalizeChildren(Array.isArray(vnodes) ? vnodes : [vnodes])\n\t\t\tupdateNodes(dom, dom.vnodes, vnodes, hooks, null, namespace === \"http://www.w3.org/1999/xhtml\" ? undefined : namespace)\n\t\t\tdom.vnodes = vnodes\n\t\t\t// `document.activeElement` can return null: https://html.spec.whatwg.org/multipage/interaction.html#dom-document-activeelement\n\t\t\tif (active != null && activeElement(dom) !== active && typeof active.focus === \"function\") active.focus()\n\t\t\tfor (var i = 0; i < hooks.length; i++) hooks[i]()\n\t\t} finally {\n\t\t\tcurrentRedraw = prevRedraw\n\t\t\tcurrentDOM = prevDOM\n\t\t}\n\t}\n}\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\n\nmodule.exports = function(html) {\n\tif (html == null) html = \"\"\n\treturn Vnode(\"<\", undefined, undefined, html, undefined, undefined)\n}\n","\"use strict\"\n\nfunction Vnode(tag, key, attrs, children, text, dom) {\n\treturn {tag: tag, key: key, attrs: attrs, children: children, text: text, dom: dom, domSize: undefined, state: undefined, events: undefined, instance: undefined}\n}\nVnode.normalize = function(node) {\n\tif (Array.isArray(node)) return Vnode(\"[\", undefined, undefined, Vnode.normalizeChildren(node), undefined, undefined)\n\tif (node == null || typeof node === \"boolean\") return null\n\tif (typeof node === \"object\") return node\n\treturn Vnode(\"#\", undefined, undefined, String(node), undefined, undefined)\n}\nVnode.normalizeChildren = function(input) {\n\tvar children = []\n\tif (input.length) {\n\t\tvar isKeyed = input[0] != null && input[0].key != null\n\t\t// Note: this is a *very* perf-sensitive check.\n\t\t// Fun fact: merging the loop like this is somehow faster than splitting\n\t\t// it, noticeably so.\n\t\tfor (var i = 1; i < input.length; i++) {\n\t\t\tif ((input[i] != null && input[i].key != null) !== isKeyed) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\tisKeyed && (input[i] != null || typeof input[i] === \"boolean\")\n\t\t\t\t\t\t? \"In fragments, vnodes must either all have keys or none have keys. You may wish to consider using an explicit keyed empty fragment, m.fragment({key: ...}), instead of a hole.\"\n\t\t\t\t\t\t: \"In fragments, vnodes must either all have keys or none have keys.\"\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\tfor (var i = 0; i < input.length; i++) {\n\t\t\tchildren[i] = Vnode.normalize(input[i])\n\t\t}\n\t}\n\treturn children\n}\n\nmodule.exports = Vnode\n","\"use strict\"\n\nvar mountRedraw = require(\"./mount-redraw\")\n\nmodule.exports = require(\"./request/request\")(typeof window !== \"undefined\" ? window : null, mountRedraw.redraw)\n","\"use strict\"\n\nvar buildPathname = require(\"../pathname/build\")\nvar hasOwn = require(\"../util/hasOwn\")\n\nmodule.exports = function($window, oncompletion) {\n\tfunction PromiseProxy(executor) {\n\t\treturn new Promise(executor)\n\t}\n\n\tfunction makeRequest(url, args) {\n\t\treturn new Promise(function(resolve, reject) {\n\t\t\turl = buildPathname(url, args.params)\n\t\t\tvar method = args.method != null ? args.method.toUpperCase() : \"GET\"\n\t\t\tvar body = args.body\n\t\t\tvar assumeJSON = (args.serialize == null || args.serialize === JSON.serialize) && !(body instanceof $window.FormData || body instanceof $window.URLSearchParams)\n\t\t\tvar responseType = args.responseType || (typeof args.extract === \"function\" ? \"\" : \"json\")\n\n\t\t\tvar xhr = new $window.XMLHttpRequest(), aborted = false, isTimeout = false\n\t\t\tvar original = xhr, replacedAbort\n\t\t\tvar abort = xhr.abort\n\n\t\t\txhr.abort = function() {\n\t\t\t\taborted = true\n\t\t\t\tabort.call(this)\n\t\t\t}\n\n\t\t\txhr.open(method, url, args.async !== false, typeof args.user === \"string\" ? args.user : undefined, typeof args.password === \"string\" ? args.password : undefined)\n\n\t\t\tif (assumeJSON && body != null && !hasHeader(args, \"content-type\")) {\n\t\t\t\txhr.setRequestHeader(\"Content-Type\", \"application/json; charset=utf-8\")\n\t\t\t}\n\t\t\tif (typeof args.deserialize !== \"function\" && !hasHeader(args, \"accept\")) {\n\t\t\t\txhr.setRequestHeader(\"Accept\", \"application/json, text/*\")\n\t\t\t}\n\t\t\tif (args.withCredentials) xhr.withCredentials = args.withCredentials\n\t\t\tif (args.timeout) xhr.timeout = args.timeout\n\t\t\txhr.responseType = responseType\n\n\t\t\tfor (var key in args.headers) {\n\t\t\t\tif (hasOwn.call(args.headers, key)) {\n\t\t\t\t\txhr.setRequestHeader(key, args.headers[key])\n\t\t\t\t}\n\t\t\t}\n\n\t\t\txhr.onreadystatechange = function(ev) {\n\t\t\t\t// Don't throw errors on xhr.abort().\n\t\t\t\tif (aborted) return\n\n\t\t\t\tif (ev.target.readyState === 4) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar success = (ev.target.status >= 200 && ev.target.status < 300) || ev.target.status === 304 || (/^file:\\/\\//i).test(url)\n\t\t\t\t\t\t// When the response type isn't \"\" or \"text\",\n\t\t\t\t\t\t// `xhr.responseText` is the wrong thing to use.\n\t\t\t\t\t\t// Browsers do the right thing and throw here, and we\n\t\t\t\t\t\t// should honor that and do the right thing by\n\t\t\t\t\t\t// preferring `xhr.response` where possible/practical.\n\t\t\t\t\t\tvar response = ev.target.response, message\n\n\t\t\t\t\t\tif (responseType === \"json\") {\n\t\t\t\t\t\t\t// For IE and Edge, which don't implement\n\t\t\t\t\t\t\t// `responseType: \"json\"`.\n\t\t\t\t\t\t\tif (!ev.target.responseType && typeof args.extract !== \"function\") {\n\t\t\t\t\t\t\t\t// Handle no-content which will not parse.\n\t\t\t\t\t\t\t\ttry { response = JSON.parse(ev.target.responseText) }\n\t\t\t\t\t\t\t\tcatch (e) { response = null }\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (!responseType || responseType === \"text\") {\n\t\t\t\t\t\t\t// Only use this default if it's text. If a parsed\n\t\t\t\t\t\t\t// document is needed on old IE and friends (all\n\t\t\t\t\t\t\t// unsupported), the user should use a custom\n\t\t\t\t\t\t\t// `config` instead. They're already using this at\n\t\t\t\t\t\t\t// their own risk.\n\t\t\t\t\t\t\tif (response == null) response = ev.target.responseText\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (typeof args.extract === \"function\") {\n\t\t\t\t\t\t\tresponse = args.extract(ev.target, args)\n\t\t\t\t\t\t\tsuccess = true\n\t\t\t\t\t\t} else if (typeof args.deserialize === \"function\") {\n\t\t\t\t\t\t\tresponse = args.deserialize(response)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (success) {\n\t\t\t\t\t\t\tif (typeof args.type === \"function\") {\n\t\t\t\t\t\t\t\tif (Array.isArray(response)) {\n\t\t\t\t\t\t\t\t\tfor (var i = 0; i < response.length; i++) {\n\t\t\t\t\t\t\t\t\t\tresponse[i] = new args.type(response[i])\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse response = new args.type(response)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tresolve(response)\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvar completeErrorResponse = function() {\n\t\t\t\t\t\t\t\ttry { message = ev.target.responseText }\n\t\t\t\t\t\t\t\tcatch (e) { message = response }\n\t\t\t\t\t\t\t\tvar error = new Error(message)\n\t\t\t\t\t\t\t\terror.code = ev.target.status\n\t\t\t\t\t\t\t\terror.response = response\n\t\t\t\t\t\t\t\treject(error)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (xhr.status === 0) {\n\t\t\t\t\t\t\t\t// Use setTimeout to push this code block onto the event queue\n\t\t\t\t\t\t\t\t// This allows `xhr.ontimeout` to run in the case that there is a timeout\n\t\t\t\t\t\t\t\t// Without this setTimeout, `xhr.ontimeout` doesn't have a chance to reject\n\t\t\t\t\t\t\t\t// as `xhr.onreadystatechange` will run before it\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tif (isTimeout) return\n\t\t\t\t\t\t\t\t\tcompleteErrorResponse()\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t} else completeErrorResponse()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcatch (e) {\n\t\t\t\t\t\treject(e)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\txhr.ontimeout = function (ev) {\n\t\t\t\tisTimeout = true\n\t\t\t\tvar error = new Error(\"Request timed out\")\n\t\t\t\terror.code = ev.target.status\n\t\t\t\treject(error)\n\t\t\t}\n\n\t\t\tif (typeof args.config === \"function\") {\n\t\t\t\txhr = args.config(xhr, args, url) || xhr\n\n\t\t\t\t// Propagate the `abort` to any replacement XHR as well.\n\t\t\t\tif (xhr !== original) {\n\t\t\t\t\treplacedAbort = xhr.abort\n\t\t\t\t\txhr.abort = function() {\n\t\t\t\t\t\taborted = true\n\t\t\t\t\t\treplacedAbort.call(this)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (body == null) xhr.send()\n\t\t\telse if (typeof args.serialize === \"function\") xhr.send(args.serialize(body))\n\t\t\telse if (body instanceof $window.FormData || body instanceof $window.URLSearchParams) xhr.send(body)\n\t\t\telse xhr.send(JSON.stringify(body))\n\t\t})\n\t}\n\n\t// In case the global Promise is some userland library's where they rely on\n\t// `foo instanceof this.constructor`, `this.constructor.resolve(value)`, or\n\t// similar. Let's *not* break them.\n\tPromiseProxy.prototype = Promise.prototype\n\tPromiseProxy.__proto__ = Promise // eslint-disable-line no-proto\n\n\tfunction hasHeader(args, name) {\n\t\tfor (var key in args.headers) {\n\t\t\tif (hasOwn.call(args.headers, key) && key.toLowerCase() === name) return true\n\t\t}\n\t\treturn false\n\t}\n\n\treturn {\n\t\trequest: function(url, args) {\n\t\t\tif (typeof url !== \"string\") { args = url; url = url.url }\n\t\t\telse if (args == null) args = {}\n\t\t\tvar promise = makeRequest(url, args)\n\t\t\tif (args.background === true) return promise\n\t\t\tvar count = 0\n\t\t\tfunction complete() {\n\t\t\t\tif (--count === 0 && typeof oncompletion === \"function\") oncompletion()\n\t\t\t}\n\n\t\t\treturn wrap(promise)\n\n\t\t\tfunction wrap(promise) {\n\t\t\t\tvar then = promise.then\n\t\t\t\t// Set the constructor, so engines know to not await or resolve\n\t\t\t\t// this as a native promise. At the time of writing, this is\n\t\t\t\t// only necessary for V8, but their behavior is the correct\n\t\t\t\t// behavior per spec. See this spec issue for more details:\n\t\t\t\t// https://github.com/tc39/ecma262/issues/1577. Also, see the\n\t\t\t\t// corresponding comment in `request/tests/test-request.js` for\n\t\t\t\t// a bit more background on the issue at hand.\n\t\t\t\tpromise.constructor = PromiseProxy\n\t\t\t\tpromise.then = function() {\n\t\t\t\t\tcount++\n\t\t\t\t\tvar next = then.apply(promise, arguments)\n\t\t\t\t\tnext.then(complete, function(e) {\n\t\t\t\t\t\tcomplete()\n\t\t\t\t\t\tif (count === 0) throw e\n\t\t\t\t\t})\n\t\t\t\t\treturn wrap(next)\n\t\t\t\t}\n\t\t\t\treturn promise\n\t\t\t}\n\t\t}\n\t}\n}\n","\"use strict\"\n\nvar mountRedraw = require(\"./mount-redraw\")\n\nmodule.exports = require(\"./api/router\")(typeof window !== \"undefined\" ? window : null, mountRedraw)\n","// This exists so I'm only saving it once.\n\"use strict\"\n\nvar hasOwn = require(\"./hasOwn\")\n\nmodule.exports = Object.assign || function(target, source) {\n\tfor (var key in source) {\n\t\tif (hasOwn.call(source, key)) target[key] = source[key]\n\t}\n}\n","\"use strict\"\n\n// Note: this is mildly perf-sensitive.\n//\n// It does *not* use `delete` - dynamic `delete`s usually cause objects to bail\n// out into dictionary mode and just generally cause a bunch of optimization\n// issues within engines.\n//\n// Ideally, I would've preferred to do this, if it weren't for the optimization\n// issues:\n//\n// ```js\n// const hasOwn = require(\"./hasOwn\")\n// const magic = [\n// \"key\", \"oninit\", \"oncreate\", \"onbeforeupdate\", \"onupdate\",\n// \"onbeforeremove\", \"onremove\",\n// ]\n// module.exports = (attrs, extras) => {\n// const result = Object.assign(Object.create(null), attrs)\n// for (const key of magic) delete result[key]\n// if (extras != null) for (const key of extras) delete result[key]\n// return result\n// }\n// ```\n\nvar hasOwn = require(\"./hasOwn\")\n// Words in RegExp literals are sometimes mangled incorrectly by the internal bundler, so use RegExp().\nvar magic = new RegExp(\"^(?:key|oninit|oncreate|onbeforeupdate|onupdate|onbeforeremove|onremove)$\")\n\nmodule.exports = function(attrs, extras) {\n\tvar result = {}\n\n\tif (extras != null) {\n\t\tfor (var key in attrs) {\n\t\t\tif (hasOwn.call(attrs, key) && !magic.test(key) && extras.indexOf(key) < 0) {\n\t\t\t\tresult[key] = attrs[key]\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfor (var key in attrs) {\n\t\t\tif (hasOwn.call(attrs, key) && !magic.test(key)) {\n\t\t\t\tresult[key] = attrs[key]\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result\n}\n","// This exists so I'm only saving it once.\n\"use strict\"\n\nmodule.exports = {}.hasOwnProperty\n","module.exports = flarum.reg.get('core', 'common/Component');","module.exports = flarum.reg.get('core', 'common/app');","module.exports = flarum.reg.get('core', 'common/components/Button');","module.exports = flarum.reg.get('core', 'common/components/FormModal');","module.exports = flarum.reg.get('core', 'common/components/Link');","module.exports = flarum.reg.get('core', 'common/components/LoadingIndicator');","module.exports = flarum.reg.get('core', 'common/helpers/highlight');","module.exports = flarum.reg.get('core', 'common/helpers/textContrastClass');","module.exports = flarum.reg.get('core', 'common/utils/KeyboardNavigatable');","module.exports = flarum.reg.get('core', 'common/utils/Stream');","module.exports = flarum.reg.get('core', 'common/utils/classList');","module.exports = flarum.reg.get('core', 'common/utils/extract');","module.exports = flarum.reg.get('core', 'common/utils/extractText');","module.exports = flarum.reg.get('core', 'forum/app');","module.exports = flarum.reg.get('core', 'forum/components/DiscussionPage');","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}\nexport { _typeof as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: !0,\n configurable: !0,\n writable: !0\n }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\tflarum.reg._webpack_runtimes[\"flarum-tags\"] ||= __webpack_require__;// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + \"forum/components/TagDiscussionModal\" + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.f.compat = (chunkId, promises) => {\n\n\tconst originalLoadChunk = __webpack_require__.l;\n\t__webpack_require__.l = flarum.reg.loadChunk.bind(flarum.reg, originalLoadChunk);\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t170: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkmodule_exports\"] = self[\"webpackChunkmodule_exports\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));"],"names":["inProgress","dataWebpackPrefix","tagIcon","tag","attrs","settings","hasIcon","icon","useColor","className","style","color","m","flarum","reg","add","tagLabel","link","tagText","name","app","translator","trans","title","description","href","route","tags","slug","isChild","sortTags","slice","sort","a","b","aPos","position","bPos","discussionCount","aParent","parent","bParent","TagListState","constructor","this","load","includes","loadedIncludes","query","unloadedIncludes","filter","include","has","length","Promise","resolve","all","Set","find","join","then","val","Array","isArray","forEach","get","TagLinkButton","view","vnode","model","child","undefined","initAttrs","super","params","TagsPage","arguments","oninit","push","set","preloaded","loading","redraw","oncreate","hero","bind","sidebar","contentItems","toArray","items","pinned","cloud","tagTileListView","cloudView","map","tagTileView","lastPostedDiscussion","children","colored","discussion","lastPostNumber","lastPostedAt","TagHero","viewItems","findTag","localeCompare","sensitivity","tagsLabel","otherAttrs","addChunkModule","DiscussionTaggedPost","oldTags","post","content","newTags","diffTags","tags1","tags2","indexOf","id","store","getById","tagsAdded","tagsRemoved","descriptionKey","descriptionData","data","count","Tag","call","backgroundUrl","backgroundMode","defaultSort","isHidden","isPrimary","isRestricted","canStartDiscussion","canAddToDiscussion","isPrimaryParent","TagGambit","KeyValueGambit","key","hint","filterKey","gambitValueToFilterValue","value","fromFilter","negate","gambits","toString","filterValueToGambitValue","gambit","helper","hasMany","attribute","extend","state","stickyParams","currentTag","addTag","active","more","splice","reload","currentActiveTag","search","currentTagLoading","finally","vdom","override","original","user","newDiscussion","disabled","param","canTag","onclick","modal","show","promise","composer","fields","prototype","chooseTags","getSelectableTags","selectedTags","onsubmit","$","focus","selectableTags","chosenTags","chosenPrimaryTags","chosenSecondaryTags","minPrimaryTags","parseInt","minSecondaryTags","maxPrimaryTags","maxSecondaryTags","relationships","discussionTags","Vnode","require","module","exports","render","schedule","console","subscriptions","pending","offset","sync","e","error","mount","root","component","TypeError","index","buildPathname","parsePathname","compileTemplate","assign","censor","sentinel","decodeURIComponentSave","decodeURIComponent","$window","mountRedraw","compiled","fallbackRoute","currentPath","lastUpdate","callAsync","setImmediate","setTimeout","p","scheduled","ready","currentResolver","RouterRoot","onbeforeupdate","onremove","removeEventListener","fireAsync","resolveRoute","SKIP","prefix","location","hash","pathname","path","concat","replace","reject","setPath","history","loop","i","check","payload","matchedRoute","localComp","update","comp","onmatch","Error","options","replaceState","pushState","defaultRoute","routes","Object","keys","SyntaxError","test","defaultData","some","ReferenceError","addEventListener","Link","selector","Boolean","result","currentTarget","handleEvent","defaultPrevented","button","which","target","ctrlKey","metaKey","shiftKey","altKey","preventDefault","hyperscript","trust","fragment","request","domFor","apply","Fragment","parseQueryString","buildQueryString","requestAnimationFrame","template","queryIndex","hashIndex","queryEnd","pathEnd","resolved","variadic","encodeURIComponent","String","newQueryIndex","newHashIndex","newQueryEnd","newPathEnd","querystring","templateData","templateKeys","regexp","RegExp","extra","k","r","values","exec","url","object","args","destructure","str","err","string","charAt","entries","split","counters","entry","levels","cursor","pop","j","level","nextLevel","isNumber","isNaN","desc","getOwnPropertyDescriptor","window","delayedRemoval","WeakMap","dom","domSize","generation","nextSibling","hyperscriptVnode","normalizeChildren","hasOwn","selectorParser","selectorCache","hasClass","class","isEmpty","newAttrs","execSelector","match","classes","type","attrValue","compileSelector","start","df","currentRedraw","currentRender","nameSpace","svg","math","getDocument","ownerDocument","getNameSpace","xmlns","checkState","callHook","activeElement","createNodes","vnodes","end","hooks","ns","createNode","initLifecycle","createTextNode","insertDOM","createText","createHTML","createDocumentFragment","firstChild","childNodes","createFragment","is","element","createElementNS","createElement","setAttribute","isFileInput","setAttr","setAttrs","maybeSetContentEditable","selectedIndex","normalized","setLateSelectAttrs","create","$$reentrantLock$$","instance","normalize","initComponent","createComponent","possibleParents","caption","thead","tbody","tfoot","tr","th","td","colgroup","col","temp","innerHTML","appendChild","updateNodes","old","removeNodes","isOldKeyed","isKeyed","oldStart","o","v","oe","ve","topSibling","oldEnd","updateNode","getNextSibling","moveDOM","lisIndices","originalNextSibling","vnodesLength","oldIndices","li","pos","matched","getKeyMap","oldIndex","u","il","lisTemp","c","makeLisIndices","commonLength","removeNode","oldTag","events","force","text","shouldNotUpdate","updateLifecycle","nodeValue","updateText","removeDOM","updateHTML","updateFragment","warn","removeAttr","updateAttrs","updateElement","updateComponent","insertBefore","contenteditable","contentEditable","stateResult","attrsResult","mask","onbeforeremove","removeChild","isLifecycleMethod","attr","parentNode","isFormAttribute","updateEvent","setAttributeNS","updateStyle","hasPropertyKey","removeAttribute","nsLastIndex","currentDOM","uppercaseRegex","toLowerCase","capital","normalizeKey","cssText","setProperty","removeProperty","EventDict","_","source","onupdate","ev","handler","stopPropagation","contains","prevRedraw","prevDOM","namespace","namespaceURI","textContent","html","node","input","oncompletion","PromiseProxy","executor","hasHeader","headers","__proto__","replacedAbort","method","toUpperCase","body","assumeJSON","serialize","JSON","FormData","URLSearchParams","responseType","extract","xhr","XMLHttpRequest","aborted","isTimeout","abort","open","async","password","setRequestHeader","deserialize","withCredentials","timeout","onreadystatechange","readyState","message","success","status","response","parse","responseText","completeErrorResponse","code","ontimeout","config","send","stringify","makeRequest","background","complete","wrap","next","magic","extras","hasOwnProperty","_typeof","Symbol","iterator","_defineProperty","t","toPrimitive","toPropertyKey","defineProperty","enumerable","configurable","writable","__webpack_module_cache__","__webpack_require__","moduleId","_webpack_runtimes","cachedModule","__webpack_modules__","n","getter","__esModule","d","definition","f","chunkId","reduce","promises","g","globalThis","Function","obj","prop","l","done","script","needAttach","scripts","document","getElementsByTagName","s","getAttribute","charset","nc","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","fn","head","toStringTag","scriptUrl","importScripts","currentScript","tagName","compat","originalLoadChunk","loadChunk","installedChunks","installedChunkData","errorType","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","chunkLoadingGlobal","self"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/tags/js/dist/forum/components/TagDiscussionModal.js b/extensions/tags/js/dist/forum/components/TagDiscussionModal.js index b72f82986..85a73a56f 100644 --- a/extensions/tags/js/dist/forum/components/TagDiscussionModal.js +++ b/extensions/tags/js/dist/forum/components/TagDiscussionModal.js @@ -1,2 +1,2 @@ -"use strict";(self.webpackChunkmodule_exports=self.webpackChunkmodule_exports||[]).push([[371],{440:(t,e,s)=>{s.r(e),s.d(e,{default:()=>L});var i=s(488),a=s.n(i),n=s(137),r=s.n(n),l=s(443),o=s.n(l),c=s(233),d=s.n(c),h=s(838),u=s(805),g=s(954),p=s.n(g),f=s(336),y=s.n(f),T=s(607),b=s.n(T),x=s(280),w=s.n(x),I=s(661),v=s.n(I),N=s(15),_=s.n(N),S=s(821),C=s.n(S),A=s(618),k=s(339),q=s(968),M=s(950),P=s.n(M);class R extends(P()){view(t){const{className:e,isToggled:s,...i}=this.attrs,a=s?"far fa-check-circle":"far fa-circle";return m(y(),Object.assign({},i,{icon:a,className:o()([e,s&&"Button--toggled"])}),t.children)}}flarum.reg.add("flarum-tags","forum/components/ToggleButton",R);class F extends(_()){constructor(){super(...arguments),(0,u.A)(this,"loading",!0),(0,u.A)(this,"tags",void 0),(0,u.A)(this,"selected",[]),(0,u.A)(this,"bypassReqs",!1),(0,u.A)(this,"filter",C()("")),(0,u.A)(this,"focused",!1),(0,u.A)(this,"navigator",new(w())),(0,u.A)(this,"indexTag",void 0)}static initAttrs(t){super.initAttrs(t),t.title||=d()(p().translator.trans("flarum-tags.lib.tag_selection_modal.title")),t.canSelect||=()=>!0,t.allowResetting??=!0,t.limits={min:{total:t.limits?.min?.total??-1/0,primary:t.limits?.min?.primary??-1/0,secondary:t.limits?.min?.secondary??-1/0},max:{total:t.limits?.max?.total??1/0,primary:t.limits?.max?.primary??1/0,secondary:t.limits?.max?.secondary??1/0}},function(t){if(t.min.primary>t.max.primary)throw new Error("The minimum number of primary tags allowed cannot be more than the maximum number of primary tags allowed.");if(t.min.secondary>t.max.secondary)throw new Error("The minimum number of secondary tags allowed cannot be more than the maximum number of secondary tags allowed.");if(t.min.total>t.max.primary+t.max.secondary)throw new Error("The minimum number of tags allowed cannot be more than the maximum number of primary and secondary tags allowed together.");if(t.max.totalt.max.total)throw new Error("The minimum number of tags allowed cannot be more than the maximum number of tags allowed.")}(t.limits)}oninit(t){super.oninit(t),this.navigator.onUp((()=>this.setIndex(this.getCurrentNumericIndex()-1,!0))).onDown((()=>this.setIndex(this.getCurrentNumericIndex()+1,!0))).onSelect(this.select.bind(this)).onRemove((()=>this.selected.splice(this.selected.length-1,1))),p().tagList.load(["parent"]).then((t=>{this.loading=!1,this.attrs.selectableTags&&(t=this.attrs.selectableTags(t)),this.tags=(0,A.A)(t),this.attrs.selectedTags&&this.attrs.selectedTags.map(this.addTag.bind(this)),this.indexTag=t[0],m.redraw()}))}className(){return o()("TagSelectionModal Modal--simple",this.attrs.className)}title(){return this.attrs.title}lengthWithCJK(t){let e=0;for(const s of t)e+=/[\u4E00-\u9FFF\u3400-\u4DBF\uF900-\uFAFF]/.test(s)?2:1;return e}content(){if(this.loading||!this.tags)return m(v(),null);const t=this.filter().toLowerCase(),e=this.primaryCount(),s=this.secondaryCount(),i=this.getFilteredTags(),a=Math.max(this.lengthWithCJK(d()(this.getInstruction(e,s))),this.lengthWithCJK(this.filter()));return[m("div",{className:"Modal-body"},m("div",{className:"TagSelectionModal-form"},m("div",{className:"TagSelectionModal-form-input"},m("div",{className:"TagsInput FormControl "+(this.focused?"focus":""),onclick:()=>this.$(".TagsInput input").focus()},m("span",{className:"TagsInput-selected"},this.selected.map((t=>m("span",{className:"TagsInput-tag",onclick:()=>{this.removeTag(t),this.onready()}},(0,k.A)(t))))),m("input",{className:"FormControl",placeholder:d()(this.getInstruction(e,s)),bidi:this.filter,style:{width:a+"ch"},onkeydown:this.navigator.navigate.bind(this.navigator),onfocus:()=>this.focused=!0,onblur:()=>this.focused=!1}))),m("div",{className:"TagSelectionModal-form-submit App-primaryControl"},m(y(),{type:"submit",className:"Button Button--primary",disabled:!this.meetsRequirements(e,s),icon:"fas fa-check"},p().translator.trans("flarum-tags.lib.tag_selection_modal.submit_button"))))),m("div",{className:"Modal-footer"},m("ul",{className:"TagSelectionModal-list SelectTagList"},i.map((e=>m("li",{"data-index":e.id(),className:o()("SelectTagListItem",{pinned:null!==e.position(),child:!!e.parent(),colored:!!e.color(),selected:this.selected.includes(e),active:this.indexTag===e}),style:{color:e.color()},onmouseover:()=>this.indexTag=e,onclick:this.toggleTag.bind(this,e)},m("i",{className:"SelectTagListItem-icon"},(0,q.A)(e,{className:"SelectTagListItem-tagIcon"}),m("i",{className:"icon TagIcon fas fa-check SelectTagListItem-checkIcon"})),m("span",{className:"SelectTagListItem-name"},b()(e.name(),t)),e.description()?m("span",{className:"SelectTagListItem-description"},e.description()):"")))),this.attrs.limits.allowBypassing&&m("div",{className:"TagSelectionModal-controls"},m(R,{className:"Button",onclick:()=>this.bypassReqs=!this.bypassReqs,isToggled:this.bypassReqs},p().translator.trans("flarum-tags.lib.tag_selection_modal.bypass_requirements"))))]}getFilteredTags(){const t=this.filter().toLowerCase(),e=this.primaryCount(),s=this.secondaryCount();let i=this.tags;return this.attrs.requireParentTag&&(i=i.filter((t=>{const e=t.parent();return null!==e&&(!1===e||this.selected.includes(e))}))),this.bypassReqs||(this.selected.length>=this.attrs.limits.max.total?i=i.filter((t=>this.selected.includes(t))):(e>=this.attrs.limits.max.primary&&(i=i.filter((t=>!t.isPrimaryParent()||this.selected.includes(t)))),s>=this.attrs.limits.max.secondary&&(i=i.filter((t=>t.isPrimaryParent()||this.selected.includes(t)))))),t&&(i=i.filter((e=>e.name().toLowerCase().includes(t)))),this.indexTag&&i.includes(this.indexTag)||(this.indexTag=i[0]),i}primaryCount(){return this.selected.filter((t=>t.isPrimaryParent())).length}secondaryCount(){return this.selected.filter((t=>!t.isPrimaryParent())).length}meetsRequirements(t,e){return!!(this.bypassReqs||this.attrs.allowResetting&&0===this.selected.length)||!(this.selected.length=this.attrs.limits.min.primary&&e>=this.attrs.limits.min.secondary}addTag(t){if(t&&this.attrs.canSelect(t)){if(this.attrs.onSelect&&this.attrs.onSelect(t,this.selected),this.attrs.requireParentTag){const e=t.parent();e&&!this.selected.includes(e)&&this.selected.push(e)}this.selected.includes(t)||this.selected.push(t)}}removeTag(t){const e=this.selected.indexOf(t);-1!==e&&(this.selected.splice(e,1),this.attrs.requireParentTag&&this.selected.filter((e=>e.parent()===t)).forEach(this.removeTag.bind(this)),this.attrs.onDeselect&&this.attrs.onDeselect(t,this.selected))}toggleTag(t){this.tags&&(this.selected.includes(t)?this.removeTag(t):this.addTag(t),this.filter()&&(this.filter(""),this.indexTag=this.tags[0]),this.onready())}getInstruction(t,e){if(this.bypassReqs)return"";if(t li")}getCurrentNumericIndex(){return this.indexTag?this.selectableItems().index(this.getItem(this.indexTag)):-1}getItem(t){return this.selectableItems().filter(`[data-index="${t.id()}"]`)}setIndex(t,e){const s=this.selectableItems(),i=s.parent();t<0?t=s.length-1:t>=s.length&&(t=0);const a=s.eq(t);if(this.indexTag=p().store.getById("tags",a.attr("data-index")),m.redraw(),e&&this.indexTag){const t=i.scrollTop(),e=i.offset().top,s=e+i.outerHeight(),n=a.offset().top,r=n+a.outerHeight();let l;ns&&(l=t-s+r+parseInt(i.css("padding-bottom"),10)),void 0!==l&&i.stop(!0).animate({scrollTop:l},100)}}}flarum.reg.add("flarum-tags","common/components/TagSelectionModal",F);class L extends F{static initAttrs(t){super.initAttrs(t);const e=t.discussion?a().translator.trans("flarum-tags.forum.choose_tags.edit_title",{title:m("em",null,t.discussion.title())}):a().translator.trans("flarum-tags.forum.choose_tags.title");t.className=o()(t.className,"TagDiscussionModal"),t.title=d()(e),t.allowResetting=!!a().forum.attribute("canBypassTagCounts"),t.limits={allowBypassing:t.allowResetting,max:{primary:a().forum.attribute("maxPrimaryTags"),secondary:a().forum.attribute("maxSecondaryTags")},min:{primary:a().forum.attribute("minPrimaryTags"),secondary:a().forum.attribute("minSecondaryTags")}},t.requireParentTag=!0,t.selectableTags=()=>(0,h.A)(t.discussion),t.selectedTags??=t.discussion?.tags()||[],t.canSelect=t=>t.canStartDiscussion();const s=t.onsubmit||null;t.onsubmit=function(e){const i=t.discussion;i&&i.save({relationships:{tags:e}}).then((()=>{a().current.matches(r())&&a().current.get("stream").update(),m.redraw()})),s&&s(e)}}}flarum.reg.add("flarum-tags","forum/components/TagDiscussionModal",L)}}]); +"use strict";(self.webpackChunkmodule_exports=self.webpackChunkmodule_exports||[]).push([[371],{2440:(t,e,s)=>{s.r(e),s.d(e,{default:()=>L});var i=s(488),a=s.n(i),n=s(1137),r=s.n(n),l=s(8443),o=s.n(l),c=s(5233),d=s.n(c),h=s(3838),u=s(8805),g=s(954),p=s.n(g),f=s(5336),y=s.n(f),T=s(8607),b=s.n(T),x=s(9280),w=s.n(x),I=s(6661),v=s.n(I),N=s(3015),_=s.n(N),S=s(1821),C=s.n(S),A=s(1618),k=s(339),q=s(8968),M=s(4950),P=s.n(M);class R extends(P()){view(t){const{className:e,isToggled:s,...i}=this.attrs,a=s?"far fa-check-circle":"far fa-circle";return m(y(),Object.assign({},i,{icon:a,className:o()([e,s&&"Button--toggled"])}),t.children)}}flarum.reg.add("flarum-tags","forum/components/ToggleButton",R);class F extends(_()){constructor(){super(...arguments),(0,u.A)(this,"loading",!0),(0,u.A)(this,"tags",void 0),(0,u.A)(this,"selected",[]),(0,u.A)(this,"bypassReqs",!1),(0,u.A)(this,"filter",C()("")),(0,u.A)(this,"focused",!1),(0,u.A)(this,"navigator",new(w())),(0,u.A)(this,"indexTag",void 0)}static initAttrs(t){super.initAttrs(t),t.title||=d()(p().translator.trans("flarum-tags.lib.tag_selection_modal.title")),t.canSelect||=()=>!0,t.allowResetting??=!0,t.limits={min:{total:t.limits?.min?.total??-1/0,primary:t.limits?.min?.primary??-1/0,secondary:t.limits?.min?.secondary??-1/0},max:{total:t.limits?.max?.total??1/0,primary:t.limits?.max?.primary??1/0,secondary:t.limits?.max?.secondary??1/0}},function(t){if(t.min.primary>t.max.primary)throw new Error("The minimum number of primary tags allowed cannot be more than the maximum number of primary tags allowed.");if(t.min.secondary>t.max.secondary)throw new Error("The minimum number of secondary tags allowed cannot be more than the maximum number of secondary tags allowed.");if(t.min.total>t.max.primary+t.max.secondary)throw new Error("The minimum number of tags allowed cannot be more than the maximum number of primary and secondary tags allowed together.");if(t.max.totalt.max.total)throw new Error("The minimum number of tags allowed cannot be more than the maximum number of tags allowed.")}(t.limits)}oninit(t){super.oninit(t),this.navigator.onUp((()=>this.setIndex(this.getCurrentNumericIndex()-1,!0))).onDown((()=>this.setIndex(this.getCurrentNumericIndex()+1,!0))).onSelect(this.select.bind(this)).onRemove((()=>this.selected.splice(this.selected.length-1,1))),p().tagList.load(["parent"]).then((t=>{this.loading=!1,this.attrs.selectableTags&&(t=this.attrs.selectableTags(t)),this.tags=(0,A.A)(t),this.attrs.selectedTags&&this.attrs.selectedTags.map(this.addTag.bind(this)),this.indexTag=t[0],m.redraw()}))}className(){return o()("TagSelectionModal Modal--simple",this.attrs.className)}title(){return this.attrs.title}lengthWithCJK(t){let e=0;for(const s of t)e+=/[\u4E00-\u9FFF\u3400-\u4DBF\uF900-\uFAFF]/.test(s)?2:1;return e}content(){if(this.loading||!this.tags)return m(v(),null);const t=this.filter().toLowerCase(),e=this.primaryCount(),s=this.secondaryCount(),i=this.getFilteredTags(),a=Math.max(this.lengthWithCJK(d()(this.getInstruction(e,s))),this.lengthWithCJK(this.filter()));return[m("div",{className:"Modal-body"},m("div",{className:"TagSelectionModal-form"},m("div",{className:"TagSelectionModal-form-input"},m("div",{className:"TagsInput FormControl "+(this.focused?"focus":""),onclick:()=>this.$(".TagsInput input").focus()},m("span",{className:"TagsInput-selected"},this.selected.map((t=>m("span",{className:"TagsInput-tag",onclick:()=>{this.removeTag(t),this.onready()}},(0,k.A)(t))))),m("input",{className:"FormControl",placeholder:d()(this.getInstruction(e,s)),bidi:this.filter,style:{width:a+"ch"},onkeydown:this.navigator.navigate.bind(this.navigator),onfocus:()=>this.focused=!0,onblur:()=>this.focused=!1}))),m("div",{className:"TagSelectionModal-form-submit App-primaryControl"},m(y(),{type:"submit",className:"Button Button--primary",disabled:!this.meetsRequirements(e,s),icon:"fas fa-check"},p().translator.trans("flarum-tags.lib.tag_selection_modal.submit_button"))))),m("div",{className:"Modal-footer"},m("ul",{className:"TagSelectionModal-list SelectTagList"},i.map((e=>m("li",{"data-index":e.id(),className:o()("SelectTagListItem",{pinned:null!==e.position(),child:!!e.parent(),colored:!!e.color(),selected:this.selected.includes(e),active:this.indexTag===e}),style:{color:e.color()},onmouseover:()=>this.indexTag=e,onclick:this.toggleTag.bind(this,e)},m("i",{className:"SelectTagListItem-icon"},(0,q.A)(e,{className:"SelectTagListItem-tagIcon"}),m("i",{className:"icon TagIcon fas fa-check SelectTagListItem-checkIcon"})),m("span",{className:"SelectTagListItem-name"},b()(e.name(),t)),e.description()?m("span",{className:"SelectTagListItem-description"},e.description()):"")))),this.attrs.limits.allowBypassing&&m("div",{className:"TagSelectionModal-controls"},m(R,{className:"Button",onclick:()=>this.bypassReqs=!this.bypassReqs,isToggled:this.bypassReqs},p().translator.trans("flarum-tags.lib.tag_selection_modal.bypass_requirements"))))]}getFilteredTags(){const t=this.filter().toLowerCase(),e=this.primaryCount(),s=this.secondaryCount();let i=this.tags;return this.attrs.requireParentTag&&(i=i.filter((t=>{const e=t.parent();return null!==e&&(!1===e||this.selected.includes(e))}))),this.bypassReqs||(this.selected.length>=this.attrs.limits.max.total?i=i.filter((t=>this.selected.includes(t))):(e>=this.attrs.limits.max.primary&&(i=i.filter((t=>!t.isPrimaryParent()||this.selected.includes(t)))),s>=this.attrs.limits.max.secondary&&(i=i.filter((t=>t.isPrimaryParent()||this.selected.includes(t)))))),t&&(i=i.filter((e=>e.name().toLowerCase().includes(t)))),this.indexTag&&i.includes(this.indexTag)||(this.indexTag=i[0]),i}primaryCount(){return this.selected.filter((t=>t.isPrimaryParent())).length}secondaryCount(){return this.selected.filter((t=>!t.isPrimaryParent())).length}meetsRequirements(t,e){return!!(this.bypassReqs||this.attrs.allowResetting&&0===this.selected.length)||!(this.selected.length=this.attrs.limits.min.primary&&e>=this.attrs.limits.min.secondary}addTag(t){if(t&&this.attrs.canSelect(t)){if(this.attrs.onSelect&&this.attrs.onSelect(t,this.selected),this.attrs.requireParentTag){const e=t.parent();e&&!this.selected.includes(e)&&this.selected.push(e)}this.selected.includes(t)||this.selected.push(t)}}removeTag(t){const e=this.selected.indexOf(t);-1!==e&&(this.selected.splice(e,1),this.attrs.requireParentTag&&this.selected.filter((e=>e.parent()===t)).forEach(this.removeTag.bind(this)),this.attrs.onDeselect&&this.attrs.onDeselect(t,this.selected))}toggleTag(t){this.tags&&(this.selected.includes(t)?this.removeTag(t):this.addTag(t),this.filter()&&(this.filter(""),this.indexTag=this.tags[0]),this.onready())}getInstruction(t,e){if(this.bypassReqs)return"";if(t li")}getCurrentNumericIndex(){return this.indexTag?this.selectableItems().index(this.getItem(this.indexTag)):-1}getItem(t){return this.selectableItems().filter(`[data-index="${t.id()}"]`)}setIndex(t,e){const s=this.selectableItems(),i=s.parent();t<0?t=s.length-1:t>=s.length&&(t=0);const a=s.eq(t);if(this.indexTag=p().store.getById("tags",a.attr("data-index")),m.redraw(),e&&this.indexTag){const t=i.scrollTop(),e=i.offset().top,s=e+i.outerHeight(),n=a.offset().top,r=n+a.outerHeight();let l;ns&&(l=t-s+r+parseInt(i.css("padding-bottom"),10)),void 0!==l&&i.stop(!0).animate({scrollTop:l},100)}}}flarum.reg.add("flarum-tags","common/components/TagSelectionModal",F);class L extends F{static initAttrs(t){super.initAttrs(t);const e=t.discussion?a().translator.trans("flarum-tags.forum.choose_tags.edit_title",{title:m("em",null,t.discussion.title())}):a().translator.trans("flarum-tags.forum.choose_tags.title");t.className=o()(t.className,"TagDiscussionModal"),t.title=d()(e),t.allowResetting=!!a().forum.attribute("canBypassTagCounts"),t.limits={allowBypassing:t.allowResetting,max:{primary:a().forum.attribute("maxPrimaryTags"),secondary:a().forum.attribute("maxSecondaryTags")},min:{primary:a().forum.attribute("minPrimaryTags"),secondary:a().forum.attribute("minSecondaryTags")}},t.requireParentTag=!0,t.selectableTags=()=>(0,h.A)(t.discussion),t.selectedTags??=t.discussion?.tags()||[],t.canSelect=t=>t.canStartDiscussion();const s=t.onsubmit||null;t.onsubmit=function(e){const i=t.discussion;i&&i.save({relationships:{tags:e}}).then((()=>{a().current.matches(r())&&a().current.get("stream").update(),m.redraw()})),s&&s(e)}}}flarum.reg.add("flarum-tags","forum/components/TagDiscussionModal",L)}}]); //# sourceMappingURL=TagDiscussionModal.js.map \ No newline at end of file diff --git a/extensions/tags/js/dist/forum/components/TagDiscussionModal.js.map b/extensions/tags/js/dist/forum/components/TagDiscussionModal.js.map index 06392535f..337095479 100644 --- a/extensions/tags/js/dist/forum/components/TagDiscussionModal.js.map +++ b/extensions/tags/js/dist/forum/components/TagDiscussionModal.js.map @@ -1 +1 @@ -{"version":3,"file":"forum/components/TagDiscussionModal.js","mappings":"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","sources":["webpack://@flarum/tags/./src/forum/components/ToggleButton.js","webpack://@flarum/tags/./src/common/components/TagSelectionModal.tsx","webpack://@flarum/tags/./src/forum/components/TagDiscussionModal.tsx"],"sourcesContent":["import Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\n\n/**\n * @TODO move to core\n */\nexport default class ToggleButton extends Component {\n view(vnode) {\n const {\n className,\n isToggled,\n ...attrs\n } = this.attrs;\n const icon = isToggled ? 'far fa-check-circle' : 'far fa-circle';\n return m(Button, Object.assign({}, attrs, {\n icon: icon,\n className: classList([className, isToggled && 'Button--toggled'])\n }), vnode.children);\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/ToggleButton', ToggleButton);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport highlight from 'flarum/common/helpers/highlight';\nimport KeyboardNavigatable from 'flarum/common/utils/KeyboardNavigatable';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Stream from 'flarum/common/utils/Stream';\nimport sortTags from '../utils/sortTags';\nimport tagLabel from '../helpers/tagLabel';\nimport tagIcon from '../helpers/tagIcon';\nimport ToggleButton from '../../forum/components/ToggleButton';\nexport default class TagSelectionModal extends FormModal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", true);\n _defineProperty(this, \"tags\", void 0);\n _defineProperty(this, \"selected\", []);\n _defineProperty(this, \"bypassReqs\", false);\n _defineProperty(this, \"filter\", Stream(''));\n _defineProperty(this, \"focused\", false);\n _defineProperty(this, \"navigator\", new KeyboardNavigatable());\n _defineProperty(this, \"indexTag\", void 0);\n }\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n\n // Default values for optional attributes.\n attrs.title ||= extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.title'));\n attrs.canSelect ||= () => true;\n attrs.allowResetting ??= true;\n attrs.limits = {\n min: {\n total: attrs.limits?.min?.total ?? -Infinity,\n primary: attrs.limits?.min?.primary ?? -Infinity,\n secondary: attrs.limits?.min?.secondary ?? -Infinity\n },\n max: {\n total: attrs.limits?.max?.total ?? Infinity,\n primary: attrs.limits?.max?.primary ?? Infinity,\n secondary: attrs.limits?.max?.secondary ?? Infinity\n }\n };\n\n // Prevent illogical limits from being provided.\n catchInvalidLimits(attrs.limits);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.navigator.onUp(() => this.setIndex(this.getCurrentNumericIndex() - 1, true)).onDown(() => this.setIndex(this.getCurrentNumericIndex() + 1, true)).onSelect(this.select.bind(this)).onRemove(() => this.selected.splice(this.selected.length - 1, 1));\n app.tagList.load(['parent']).then(tags => {\n this.loading = false;\n if (this.attrs.selectableTags) {\n tags = this.attrs.selectableTags(tags);\n }\n this.tags = sortTags(tags);\n if (this.attrs.selectedTags) {\n this.attrs.selectedTags.map(this.addTag.bind(this));\n }\n this.indexTag = tags[0];\n m.redraw();\n });\n }\n className() {\n return classList('TagSelectionModal Modal--simple', this.attrs.className);\n }\n title() {\n return this.attrs.title;\n }\n lengthWithCJK(text) {\n let length = 0;\n for (const char of text) {\n length += /[\\u4E00-\\u9FFF\\u3400-\\u4DBF\\uF900-\\uFAFF]/.test(char) ? 2 : 1;\n }\n return length;\n }\n content() {\n if (this.loading || !this.tags) {\n return m(LoadingIndicator, null);\n }\n const filter = this.filter().toLowerCase();\n const primaryCount = this.primaryCount();\n const secondaryCount = this.secondaryCount();\n const tags = this.getFilteredTags();\n\n // 1 CJK character's width equals to 2ch,\n // so we count 1 CJK character as 2 characters.\n const inputWidth = Math.max(this.lengthWithCJK(extractText(this.getInstruction(primaryCount, secondaryCount))), this.lengthWithCJK(this.filter()));\n return [m(\"div\", {\n className: \"Modal-body\"\n }, m(\"div\", {\n className: \"TagSelectionModal-form\"\n }, m(\"div\", {\n className: \"TagSelectionModal-form-input\"\n }, m(\"div\", {\n className: 'TagsInput FormControl ' + (this.focused ? 'focus' : ''),\n onclick: () => this.$('.TagsInput input').focus()\n }, m(\"span\", {\n className: \"TagsInput-selected\"\n }, this.selected.map(tag => m(\"span\", {\n className: \"TagsInput-tag\",\n onclick: () => {\n this.removeTag(tag);\n this.onready();\n }\n }, tagLabel(tag)))), m(\"input\", {\n className: \"FormControl\",\n placeholder: extractText(this.getInstruction(primaryCount, secondaryCount)),\n bidi: this.filter,\n style: {\n width: inputWidth + 'ch'\n },\n onkeydown: this.navigator.navigate.bind(this.navigator),\n onfocus: () => this.focused = true,\n onblur: () => this.focused = false\n }))), m(\"div\", {\n className: \"TagSelectionModal-form-submit App-primaryControl\"\n }, m(Button, {\n type: \"submit\",\n className: \"Button Button--primary\",\n disabled: !this.meetsRequirements(primaryCount, secondaryCount),\n icon: \"fas fa-check\"\n }, app.translator.trans('flarum-tags.lib.tag_selection_modal.submit_button'))))), m(\"div\", {\n className: \"Modal-footer\"\n }, m(\"ul\", {\n className: \"TagSelectionModal-list SelectTagList\"\n }, tags.map(tag => m(\"li\", {\n \"data-index\": tag.id(),\n className: classList('SelectTagListItem', {\n pinned: tag.position() !== null,\n child: !!tag.parent(),\n colored: !!tag.color(),\n selected: this.selected.includes(tag),\n active: this.indexTag === tag\n }),\n style: {\n color: tag.color()\n },\n onmouseover: () => this.indexTag = tag,\n onclick: this.toggleTag.bind(this, tag)\n }, m(\"i\", {\n className: \"SelectTagListItem-icon\"\n }, tagIcon(tag, {\n className: 'SelectTagListItem-tagIcon'\n }), m(\"i\", {\n className: \"icon TagIcon fas fa-check SelectTagListItem-checkIcon\"\n })), m(\"span\", {\n className: \"SelectTagListItem-name\"\n }, highlight(tag.name(), filter)), tag.description() ? m(\"span\", {\n className: \"SelectTagListItem-description\"\n }, tag.description()) : ''))), this.attrs.limits.allowBypassing && m(\"div\", {\n className: \"TagSelectionModal-controls\"\n }, m(ToggleButton, {\n className: \"Button\",\n onclick: () => this.bypassReqs = !this.bypassReqs,\n isToggled: this.bypassReqs\n }, app.translator.trans('flarum-tags.lib.tag_selection_modal.bypass_requirements'))))];\n }\n\n /**\n * Filters the available tags on every state change.\n */\n getFilteredTags() {\n const filter = this.filter().toLowerCase();\n const primaryCount = this.primaryCount();\n const secondaryCount = this.secondaryCount();\n let tags = this.tags;\n if (this.attrs.requireParentTag) {\n // Filter out all child tags whose parents have not been selected. This\n // makes it impossible to select a child if its parent hasn't been selected.\n tags = tags.filter(tag => {\n const parent = tag.parent();\n return parent !== null && (parent === false || this.selected.includes(parent));\n });\n }\n if (!this.bypassReqs) {\n // If we reached the total maximum number of tags, we can't select anymore.\n if (this.selected.length >= this.attrs.limits.max.total) {\n tags = tags.filter(tag => this.selected.includes(tag));\n }\n // If the number of selected primary/secondary tags is at the maximum, then\n // we'll filter out all other tags of that type.\n else {\n if (primaryCount >= this.attrs.limits.max.primary) {\n tags = tags.filter(tag => !tag.isPrimaryParent() || this.selected.includes(tag));\n }\n if (secondaryCount >= this.attrs.limits.max.secondary) {\n tags = tags.filter(tag => tag.isPrimaryParent() || this.selected.includes(tag));\n }\n }\n }\n\n // If the user has entered text in the filter input, then filter by tags\n // whose name matches what they've entered.\n if (filter) {\n tags = tags.filter(tag => tag.name().toLowerCase().includes(filter));\n }\n if (!this.indexTag || !tags.includes(this.indexTag)) this.indexTag = tags[0];\n return tags;\n }\n\n /**\n * Counts the number of selected primary tags.\n */\n primaryCount() {\n return this.selected.filter(tag => tag.isPrimaryParent()).length;\n }\n\n /**\n * Counts the number of selected secondary tags.\n */\n secondaryCount() {\n return this.selected.filter(tag => !tag.isPrimaryParent()).length;\n }\n\n /**\n * Validates the number of selected primary/secondary tags against the set min max limits.\n */\n meetsRequirements(primaryCount, secondaryCount) {\n if (this.bypassReqs || this.attrs.allowResetting && this.selected.length === 0) {\n return true;\n }\n if (this.selected.length < this.attrs.limits.min.total) {\n return false;\n }\n return primaryCount >= this.attrs.limits.min.primary && secondaryCount >= this.attrs.limits.min.secondary;\n }\n\n /**\n * Add the given tag to the list of selected tags.\n */\n addTag(tag) {\n if (!tag || !this.attrs.canSelect(tag)) return;\n if (this.attrs.onSelect) {\n this.attrs.onSelect(tag, this.selected);\n }\n\n // If this tag has a parent, we'll also need to add the parent tag to the\n // selected list if it's not already in there.\n if (this.attrs.requireParentTag) {\n const parent = tag.parent();\n if (parent && !this.selected.includes(parent)) {\n this.selected.push(parent);\n }\n }\n if (!this.selected.includes(tag)) {\n this.selected.push(tag);\n }\n }\n\n /**\n * Remove the given tag from the list of selected tags.\n */\n removeTag(tag) {\n const index = this.selected.indexOf(tag);\n if (index !== -1) {\n this.selected.splice(index, 1);\n\n // Look through the list of selected tags for any tags which have the tag\n // we just removed as their parent. We'll need to remove them too.\n if (this.attrs.requireParentTag) {\n this.selected.filter(t => t.parent() === tag).forEach(this.removeTag.bind(this));\n }\n if (this.attrs.onDeselect) {\n this.attrs.onDeselect(tag, this.selected);\n }\n }\n }\n toggleTag(tag) {\n // Won't happen, needed for type safety.\n if (!this.tags) return;\n if (this.selected.includes(tag)) {\n this.removeTag(tag);\n } else {\n this.addTag(tag);\n }\n if (this.filter()) {\n this.filter('');\n this.indexTag = this.tags[0];\n }\n this.onready();\n }\n\n /**\n * Gives human text instructions based on the current number of selected tags and set limits.\n */\n getInstruction(primaryCount, secondaryCount) {\n if (this.bypassReqs) {\n return '';\n }\n if (primaryCount < this.attrs.limits.min.primary) {\n const remaining = this.attrs.limits.min.primary - primaryCount;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_primary_placeholder', {\n count: remaining\n }));\n } else if (secondaryCount < this.attrs.limits.min.secondary) {\n const remaining = this.attrs.limits.min.secondary - secondaryCount;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_secondary_placeholder', {\n count: remaining\n }));\n } else if (this.selected.length < this.attrs.limits.min.total) {\n const remaining = this.attrs.limits.min.total - this.selected.length;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_tags_placeholder', {\n count: remaining\n }));\n }\n return '';\n }\n\n /**\n * Submit tag selection.\n */\n onsubmit(e) {\n e.preventDefault();\n if (this.attrs.onsubmit) this.attrs.onsubmit(this.selected);\n this.hide();\n }\n select(e) {\n // Ctrl + Enter submits the selection, just Enter completes the current entry\n if (e.metaKey || e.ctrlKey || this.indexTag && this.selected.includes(this.indexTag)) {\n if (this.selected.length) {\n // The DOM submit method doesn't emit a `submit event, so we\n // simulate a manual submission so our `onsubmit` logic is run.\n this.$('button[type=\"submit\"]').click();\n }\n } else if (this.indexTag) {\n this.getItem(this.indexTag)[0].dispatchEvent(new Event('click'));\n }\n }\n selectableItems() {\n return this.$('.TagSelectionModal-list > li');\n }\n getCurrentNumericIndex() {\n if (!this.indexTag) return -1;\n return this.selectableItems().index(this.getItem(this.indexTag));\n }\n getItem(selectedTag) {\n return this.selectableItems().filter(`[data-index=\"${selectedTag.id()}\"]`);\n }\n setIndex(index, scrollToItem) {\n const $items = this.selectableItems();\n const $dropdown = $items.parent();\n if (index < 0) {\n index = $items.length - 1;\n } else if (index >= $items.length) {\n index = 0;\n }\n const $item = $items.eq(index);\n this.indexTag = app.store.getById('tags', $item.attr('data-index'));\n m.redraw();\n if (scrollToItem && this.indexTag) {\n const dropdownScroll = $dropdown.scrollTop();\n const dropdownTop = $dropdown.offset().top;\n const dropdownBottom = dropdownTop + $dropdown.outerHeight();\n const itemTop = $item.offset().top;\n const itemBottom = itemTop + $item.outerHeight();\n let scrollTop;\n if (itemTop < dropdownTop) {\n scrollTop = dropdownScroll - dropdownTop + itemTop - parseInt($dropdown.css('padding-top'), 10);\n } else if (itemBottom > dropdownBottom) {\n scrollTop = dropdownScroll - dropdownBottom + itemBottom + parseInt($dropdown.css('padding-bottom'), 10);\n }\n if (typeof scrollTop !== 'undefined') {\n $dropdown.stop(true).animate({\n scrollTop\n }, 100);\n }\n }\n }\n}\n\n/**\n * Catch invalid limits provided to the tag selection modal.\n */\nfunction catchInvalidLimits(limits) {\n if (limits.min.primary > limits.max.primary) {\n throw new Error('The minimum number of primary tags allowed cannot be more than the maximum number of primary tags allowed.');\n }\n if (limits.min.secondary > limits.max.secondary) {\n throw new Error('The minimum number of secondary tags allowed cannot be more than the maximum number of secondary tags allowed.');\n }\n if (limits.min.total > limits.max.primary + limits.max.secondary) {\n throw new Error('The minimum number of tags allowed cannot be more than the maximum number of primary and secondary tags allowed together.');\n }\n if (limits.max.total < limits.min.primary + limits.min.secondary) {\n throw new Error('The maximum number of tags allowed cannot be less than the minimum number of primary and secondary tags allowed together.');\n }\n if (limits.min.total > limits.max.total) {\n throw new Error('The minimum number of tags allowed cannot be more than the maximum number of tags allowed.');\n }\n}\nflarum.reg.add('flarum-tags', 'common/components/TagSelectionModal', TagSelectionModal);","import app from 'flarum/forum/app';\nimport DiscussionPage from 'flarum/forum/components/DiscussionPage';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport getSelectableTags from '../utils/getSelectableTags';\nimport TagSelectionModal from '../../common/components/TagSelectionModal';\nexport default class TagDiscussionModal extends TagSelectionModal {\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n const title = attrs.discussion ? app.translator.trans('flarum-tags.forum.choose_tags.edit_title', {\n title: m(\"em\", null, attrs.discussion.title())\n }) : app.translator.trans('flarum-tags.forum.choose_tags.title');\n attrs.className = classList(attrs.className, 'TagDiscussionModal');\n attrs.title = extractText(title);\n attrs.allowResetting = !!app.forum.attribute('canBypassTagCounts');\n attrs.limits = {\n allowBypassing: attrs.allowResetting,\n max: {\n primary: app.forum.attribute('maxPrimaryTags'),\n secondary: app.forum.attribute('maxSecondaryTags')\n },\n min: {\n primary: app.forum.attribute('minPrimaryTags'),\n secondary: app.forum.attribute('minSecondaryTags')\n }\n };\n attrs.requireParentTag = true;\n attrs.selectableTags = () => getSelectableTags(attrs.discussion);\n attrs.selectedTags ??= attrs.discussion?.tags() || [];\n attrs.canSelect = tag => tag.canStartDiscussion();\n const suppliedOnsubmit = attrs.onsubmit || null;\n\n // Save changes.\n attrs.onsubmit = function (tags) {\n const discussion = attrs.discussion;\n if (discussion) {\n discussion.save({\n relationships: {\n tags\n }\n }).then(() => {\n if (app.current.matches(DiscussionPage)) {\n app.current.get('stream').update();\n }\n m.redraw();\n });\n }\n if (suppliedOnsubmit) suppliedOnsubmit(tags);\n };\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/TagDiscussionModal', TagDiscussionModal);"],"names":["ToggleButton","view","vnode","className","isToggled","attrs","this","icon","m","Object","assign","children","flarum","reg","add","TagSelectionModal","constructor","super","arguments","initAttrs","title","trans","canSelect","allowResetting","limits","min","total","primary","secondary","max","Infinity","Error","catchInvalidLimits","oninit","navigator","onUp","setIndex","getCurrentNumericIndex","onDown","onSelect","select","bind","onRemove","selected","splice","length","load","then","tags","loading","selectableTags","sortTags","selectedTags","map","addTag","indexTag","redraw","lengthWithCJK","text","char","test","content","filter","toLowerCase","primaryCount","secondaryCount","getFilteredTags","inputWidth","Math","getInstruction","focused","onclick","$","focus","tag","removeTag","onready","tagLabel","placeholder","bidi","style","width","onkeydown","navigate","onfocus","onblur","type","disabled","meetsRequirements","id","pinned","position","child","parent","colored","color","includes","active","onmouseover","toggleTag","tagIcon","name","description","allowBypassing","bypassReqs","requireParentTag","isPrimaryParent","push","index","indexOf","t","forEach","onDeselect","remaining","count","onsubmit","e","preventDefault","hide","metaKey","ctrlKey","click","getItem","dispatchEvent","Event","selectableItems","selectedTag","scrollToItem","$items","$dropdown","$item","eq","getById","attr","dropdownScroll","scrollTop","dropdownTop","offset","top","dropdownBottom","outerHeight","itemTop","itemBottom","parseInt","css","stop","animate","TagDiscussionModal","discussion","attribute","getSelectableTags","canStartDiscussion","suppliedOnsubmit","save","relationships","matches","get","update"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"forum/components/TagDiscussionModal.js","mappings":"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","sources":["webpack://@flarum/tags/./src/forum/components/ToggleButton.js","webpack://@flarum/tags/./src/common/components/TagSelectionModal.tsx","webpack://@flarum/tags/./src/forum/components/TagDiscussionModal.tsx"],"sourcesContent":["import Component from 'flarum/common/Component';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\n\n/**\n * @TODO move to core\n */\nexport default class ToggleButton extends Component {\n view(vnode) {\n const {\n className,\n isToggled,\n ...attrs\n } = this.attrs;\n const icon = isToggled ? 'far fa-check-circle' : 'far fa-circle';\n return m(Button, Object.assign({}, attrs, {\n icon: icon,\n className: classList([className, isToggled && 'Button--toggled'])\n }), vnode.children);\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/ToggleButton', ToggleButton);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from 'flarum/common/app';\nimport Button from 'flarum/common/components/Button';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport highlight from 'flarum/common/helpers/highlight';\nimport KeyboardNavigatable from 'flarum/common/utils/KeyboardNavigatable';\nimport LoadingIndicator from 'flarum/common/components/LoadingIndicator';\nimport FormModal from 'flarum/common/components/FormModal';\nimport Stream from 'flarum/common/utils/Stream';\nimport sortTags from '../utils/sortTags';\nimport tagLabel from '../helpers/tagLabel';\nimport tagIcon from '../helpers/tagIcon';\nimport ToggleButton from '../../forum/components/ToggleButton';\nexport default class TagSelectionModal extends FormModal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", true);\n _defineProperty(this, \"tags\", void 0);\n _defineProperty(this, \"selected\", []);\n _defineProperty(this, \"bypassReqs\", false);\n _defineProperty(this, \"filter\", Stream(''));\n _defineProperty(this, \"focused\", false);\n _defineProperty(this, \"navigator\", new KeyboardNavigatable());\n _defineProperty(this, \"indexTag\", void 0);\n }\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n\n // Default values for optional attributes.\n attrs.title ||= extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.title'));\n attrs.canSelect ||= () => true;\n attrs.allowResetting ??= true;\n attrs.limits = {\n min: {\n total: attrs.limits?.min?.total ?? -Infinity,\n primary: attrs.limits?.min?.primary ?? -Infinity,\n secondary: attrs.limits?.min?.secondary ?? -Infinity\n },\n max: {\n total: attrs.limits?.max?.total ?? Infinity,\n primary: attrs.limits?.max?.primary ?? Infinity,\n secondary: attrs.limits?.max?.secondary ?? Infinity\n }\n };\n\n // Prevent illogical limits from being provided.\n catchInvalidLimits(attrs.limits);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.navigator.onUp(() => this.setIndex(this.getCurrentNumericIndex() - 1, true)).onDown(() => this.setIndex(this.getCurrentNumericIndex() + 1, true)).onSelect(this.select.bind(this)).onRemove(() => this.selected.splice(this.selected.length - 1, 1));\n app.tagList.load(['parent']).then(tags => {\n this.loading = false;\n if (this.attrs.selectableTags) {\n tags = this.attrs.selectableTags(tags);\n }\n this.tags = sortTags(tags);\n if (this.attrs.selectedTags) {\n this.attrs.selectedTags.map(this.addTag.bind(this));\n }\n this.indexTag = tags[0];\n m.redraw();\n });\n }\n className() {\n return classList('TagSelectionModal Modal--simple', this.attrs.className);\n }\n title() {\n return this.attrs.title;\n }\n lengthWithCJK(text) {\n let length = 0;\n for (const char of text) {\n length += /[\\u4E00-\\u9FFF\\u3400-\\u4DBF\\uF900-\\uFAFF]/.test(char) ? 2 : 1;\n }\n return length;\n }\n content() {\n if (this.loading || !this.tags) {\n return m(LoadingIndicator, null);\n }\n const filter = this.filter().toLowerCase();\n const primaryCount = this.primaryCount();\n const secondaryCount = this.secondaryCount();\n const tags = this.getFilteredTags();\n\n // 1 CJK character's width equals to 2ch,\n // so we count 1 CJK character as 2 characters.\n const inputWidth = Math.max(this.lengthWithCJK(extractText(this.getInstruction(primaryCount, secondaryCount))), this.lengthWithCJK(this.filter()));\n return [m(\"div\", {\n className: \"Modal-body\"\n }, m(\"div\", {\n className: \"TagSelectionModal-form\"\n }, m(\"div\", {\n className: \"TagSelectionModal-form-input\"\n }, m(\"div\", {\n className: 'TagsInput FormControl ' + (this.focused ? 'focus' : ''),\n onclick: () => this.$('.TagsInput input').focus()\n }, m(\"span\", {\n className: \"TagsInput-selected\"\n }, this.selected.map(tag => m(\"span\", {\n className: \"TagsInput-tag\",\n onclick: () => {\n this.removeTag(tag);\n this.onready();\n }\n }, tagLabel(tag)))), m(\"input\", {\n className: \"FormControl\",\n placeholder: extractText(this.getInstruction(primaryCount, secondaryCount)),\n bidi: this.filter,\n style: {\n width: inputWidth + 'ch'\n },\n onkeydown: this.navigator.navigate.bind(this.navigator),\n onfocus: () => this.focused = true,\n onblur: () => this.focused = false\n }))), m(\"div\", {\n className: \"TagSelectionModal-form-submit App-primaryControl\"\n }, m(Button, {\n type: \"submit\",\n className: \"Button Button--primary\",\n disabled: !this.meetsRequirements(primaryCount, secondaryCount),\n icon: \"fas fa-check\"\n }, app.translator.trans('flarum-tags.lib.tag_selection_modal.submit_button'))))), m(\"div\", {\n className: \"Modal-footer\"\n }, m(\"ul\", {\n className: \"TagSelectionModal-list SelectTagList\"\n }, tags.map(tag => m(\"li\", {\n \"data-index\": tag.id(),\n className: classList('SelectTagListItem', {\n pinned: tag.position() !== null,\n child: !!tag.parent(),\n colored: !!tag.color(),\n selected: this.selected.includes(tag),\n active: this.indexTag === tag\n }),\n style: {\n color: tag.color()\n },\n onmouseover: () => this.indexTag = tag,\n onclick: this.toggleTag.bind(this, tag)\n }, m(\"i\", {\n className: \"SelectTagListItem-icon\"\n }, tagIcon(tag, {\n className: 'SelectTagListItem-tagIcon'\n }), m(\"i\", {\n className: \"icon TagIcon fas fa-check SelectTagListItem-checkIcon\"\n })), m(\"span\", {\n className: \"SelectTagListItem-name\"\n }, highlight(tag.name(), filter)), tag.description() ? m(\"span\", {\n className: \"SelectTagListItem-description\"\n }, tag.description()) : ''))), this.attrs.limits.allowBypassing && m(\"div\", {\n className: \"TagSelectionModal-controls\"\n }, m(ToggleButton, {\n className: \"Button\",\n onclick: () => this.bypassReqs = !this.bypassReqs,\n isToggled: this.bypassReqs\n }, app.translator.trans('flarum-tags.lib.tag_selection_modal.bypass_requirements'))))];\n }\n\n /**\n * Filters the available tags on every state change.\n */\n getFilteredTags() {\n const filter = this.filter().toLowerCase();\n const primaryCount = this.primaryCount();\n const secondaryCount = this.secondaryCount();\n let tags = this.tags;\n if (this.attrs.requireParentTag) {\n // Filter out all child tags whose parents have not been selected. This\n // makes it impossible to select a child if its parent hasn't been selected.\n tags = tags.filter(tag => {\n const parent = tag.parent();\n return parent !== null && (parent === false || this.selected.includes(parent));\n });\n }\n if (!this.bypassReqs) {\n // If we reached the total maximum number of tags, we can't select anymore.\n if (this.selected.length >= this.attrs.limits.max.total) {\n tags = tags.filter(tag => this.selected.includes(tag));\n }\n // If the number of selected primary/secondary tags is at the maximum, then\n // we'll filter out all other tags of that type.\n else {\n if (primaryCount >= this.attrs.limits.max.primary) {\n tags = tags.filter(tag => !tag.isPrimaryParent() || this.selected.includes(tag));\n }\n if (secondaryCount >= this.attrs.limits.max.secondary) {\n tags = tags.filter(tag => tag.isPrimaryParent() || this.selected.includes(tag));\n }\n }\n }\n\n // If the user has entered text in the filter input, then filter by tags\n // whose name matches what they've entered.\n if (filter) {\n tags = tags.filter(tag => tag.name().toLowerCase().includes(filter));\n }\n if (!this.indexTag || !tags.includes(this.indexTag)) this.indexTag = tags[0];\n return tags;\n }\n\n /**\n * Counts the number of selected primary tags.\n */\n primaryCount() {\n return this.selected.filter(tag => tag.isPrimaryParent()).length;\n }\n\n /**\n * Counts the number of selected secondary tags.\n */\n secondaryCount() {\n return this.selected.filter(tag => !tag.isPrimaryParent()).length;\n }\n\n /**\n * Validates the number of selected primary/secondary tags against the set min max limits.\n */\n meetsRequirements(primaryCount, secondaryCount) {\n if (this.bypassReqs || this.attrs.allowResetting && this.selected.length === 0) {\n return true;\n }\n if (this.selected.length < this.attrs.limits.min.total) {\n return false;\n }\n return primaryCount >= this.attrs.limits.min.primary && secondaryCount >= this.attrs.limits.min.secondary;\n }\n\n /**\n * Add the given tag to the list of selected tags.\n */\n addTag(tag) {\n if (!tag || !this.attrs.canSelect(tag)) return;\n if (this.attrs.onSelect) {\n this.attrs.onSelect(tag, this.selected);\n }\n\n // If this tag has a parent, we'll also need to add the parent tag to the\n // selected list if it's not already in there.\n if (this.attrs.requireParentTag) {\n const parent = tag.parent();\n if (parent && !this.selected.includes(parent)) {\n this.selected.push(parent);\n }\n }\n if (!this.selected.includes(tag)) {\n this.selected.push(tag);\n }\n }\n\n /**\n * Remove the given tag from the list of selected tags.\n */\n removeTag(tag) {\n const index = this.selected.indexOf(tag);\n if (index !== -1) {\n this.selected.splice(index, 1);\n\n // Look through the list of selected tags for any tags which have the tag\n // we just removed as their parent. We'll need to remove them too.\n if (this.attrs.requireParentTag) {\n this.selected.filter(t => t.parent() === tag).forEach(this.removeTag.bind(this));\n }\n if (this.attrs.onDeselect) {\n this.attrs.onDeselect(tag, this.selected);\n }\n }\n }\n toggleTag(tag) {\n // Won't happen, needed for type safety.\n if (!this.tags) return;\n if (this.selected.includes(tag)) {\n this.removeTag(tag);\n } else {\n this.addTag(tag);\n }\n if (this.filter()) {\n this.filter('');\n this.indexTag = this.tags[0];\n }\n this.onready();\n }\n\n /**\n * Gives human text instructions based on the current number of selected tags and set limits.\n */\n getInstruction(primaryCount, secondaryCount) {\n if (this.bypassReqs) {\n return '';\n }\n if (primaryCount < this.attrs.limits.min.primary) {\n const remaining = this.attrs.limits.min.primary - primaryCount;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_primary_placeholder', {\n count: remaining\n }));\n } else if (secondaryCount < this.attrs.limits.min.secondary) {\n const remaining = this.attrs.limits.min.secondary - secondaryCount;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_secondary_placeholder', {\n count: remaining\n }));\n } else if (this.selected.length < this.attrs.limits.min.total) {\n const remaining = this.attrs.limits.min.total - this.selected.length;\n return extractText(app.translator.trans('flarum-tags.lib.tag_selection_modal.choose_tags_placeholder', {\n count: remaining\n }));\n }\n return '';\n }\n\n /**\n * Submit tag selection.\n */\n onsubmit(e) {\n e.preventDefault();\n if (this.attrs.onsubmit) this.attrs.onsubmit(this.selected);\n this.hide();\n }\n select(e) {\n // Ctrl + Enter submits the selection, just Enter completes the current entry\n if (e.metaKey || e.ctrlKey || this.indexTag && this.selected.includes(this.indexTag)) {\n if (this.selected.length) {\n // The DOM submit method doesn't emit a `submit event, so we\n // simulate a manual submission so our `onsubmit` logic is run.\n this.$('button[type=\"submit\"]').click();\n }\n } else if (this.indexTag) {\n this.getItem(this.indexTag)[0].dispatchEvent(new Event('click'));\n }\n }\n selectableItems() {\n return this.$('.TagSelectionModal-list > li');\n }\n getCurrentNumericIndex() {\n if (!this.indexTag) return -1;\n return this.selectableItems().index(this.getItem(this.indexTag));\n }\n getItem(selectedTag) {\n return this.selectableItems().filter(`[data-index=\"${selectedTag.id()}\"]`);\n }\n setIndex(index, scrollToItem) {\n const $items = this.selectableItems();\n const $dropdown = $items.parent();\n if (index < 0) {\n index = $items.length - 1;\n } else if (index >= $items.length) {\n index = 0;\n }\n const $item = $items.eq(index);\n this.indexTag = app.store.getById('tags', $item.attr('data-index'));\n m.redraw();\n if (scrollToItem && this.indexTag) {\n const dropdownScroll = $dropdown.scrollTop();\n const dropdownTop = $dropdown.offset().top;\n const dropdownBottom = dropdownTop + $dropdown.outerHeight();\n const itemTop = $item.offset().top;\n const itemBottom = itemTop + $item.outerHeight();\n let scrollTop;\n if (itemTop < dropdownTop) {\n scrollTop = dropdownScroll - dropdownTop + itemTop - parseInt($dropdown.css('padding-top'), 10);\n } else if (itemBottom > dropdownBottom) {\n scrollTop = dropdownScroll - dropdownBottom + itemBottom + parseInt($dropdown.css('padding-bottom'), 10);\n }\n if (typeof scrollTop !== 'undefined') {\n $dropdown.stop(true).animate({\n scrollTop\n }, 100);\n }\n }\n }\n}\n\n/**\n * Catch invalid limits provided to the tag selection modal.\n */\nfunction catchInvalidLimits(limits) {\n if (limits.min.primary > limits.max.primary) {\n throw new Error('The minimum number of primary tags allowed cannot be more than the maximum number of primary tags allowed.');\n }\n if (limits.min.secondary > limits.max.secondary) {\n throw new Error('The minimum number of secondary tags allowed cannot be more than the maximum number of secondary tags allowed.');\n }\n if (limits.min.total > limits.max.primary + limits.max.secondary) {\n throw new Error('The minimum number of tags allowed cannot be more than the maximum number of primary and secondary tags allowed together.');\n }\n if (limits.max.total < limits.min.primary + limits.min.secondary) {\n throw new Error('The maximum number of tags allowed cannot be less than the minimum number of primary and secondary tags allowed together.');\n }\n if (limits.min.total > limits.max.total) {\n throw new Error('The minimum number of tags allowed cannot be more than the maximum number of tags allowed.');\n }\n}\nflarum.reg.add('flarum-tags', 'common/components/TagSelectionModal', TagSelectionModal);","import app from 'flarum/forum/app';\nimport DiscussionPage from 'flarum/forum/components/DiscussionPage';\nimport classList from 'flarum/common/utils/classList';\nimport extractText from 'flarum/common/utils/extractText';\nimport getSelectableTags from '../utils/getSelectableTags';\nimport TagSelectionModal from '../../common/components/TagSelectionModal';\nexport default class TagDiscussionModal extends TagSelectionModal {\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n const title = attrs.discussion ? app.translator.trans('flarum-tags.forum.choose_tags.edit_title', {\n title: m(\"em\", null, attrs.discussion.title())\n }) : app.translator.trans('flarum-tags.forum.choose_tags.title');\n attrs.className = classList(attrs.className, 'TagDiscussionModal');\n attrs.title = extractText(title);\n attrs.allowResetting = !!app.forum.attribute('canBypassTagCounts');\n attrs.limits = {\n allowBypassing: attrs.allowResetting,\n max: {\n primary: app.forum.attribute('maxPrimaryTags'),\n secondary: app.forum.attribute('maxSecondaryTags')\n },\n min: {\n primary: app.forum.attribute('minPrimaryTags'),\n secondary: app.forum.attribute('minSecondaryTags')\n }\n };\n attrs.requireParentTag = true;\n attrs.selectableTags = () => getSelectableTags(attrs.discussion);\n attrs.selectedTags ??= attrs.discussion?.tags() || [];\n attrs.canSelect = tag => tag.canStartDiscussion();\n const suppliedOnsubmit = attrs.onsubmit || null;\n\n // Save changes.\n attrs.onsubmit = function (tags) {\n const discussion = attrs.discussion;\n if (discussion) {\n discussion.save({\n relationships: {\n tags\n }\n }).then(() => {\n if (app.current.matches(DiscussionPage)) {\n app.current.get('stream').update();\n }\n m.redraw();\n });\n }\n if (suppliedOnsubmit) suppliedOnsubmit(tags);\n };\n }\n}\nflarum.reg.add('flarum-tags', 'forum/components/TagDiscussionModal', TagDiscussionModal);"],"names":["ToggleButton","view","vnode","className","isToggled","attrs","this","icon","m","Object","assign","children","flarum","reg","add","TagSelectionModal","constructor","super","arguments","initAttrs","title","trans","canSelect","allowResetting","limits","min","total","primary","secondary","max","Infinity","Error","catchInvalidLimits","oninit","navigator","onUp","setIndex","getCurrentNumericIndex","onDown","onSelect","select","bind","onRemove","selected","splice","length","load","then","tags","loading","selectableTags","sortTags","selectedTags","map","addTag","indexTag","redraw","lengthWithCJK","text","char","test","content","filter","toLowerCase","primaryCount","secondaryCount","getFilteredTags","inputWidth","Math","getInstruction","focused","onclick","$","focus","tag","removeTag","onready","tagLabel","placeholder","bidi","style","width","onkeydown","navigate","onfocus","onblur","type","disabled","meetsRequirements","id","pinned","position","child","parent","colored","color","includes","active","onmouseover","toggleTag","tagIcon","name","description","allowBypassing","bypassReqs","requireParentTag","isPrimaryParent","push","index","indexOf","t","forEach","onDeselect","remaining","count","onsubmit","e","preventDefault","hide","metaKey","ctrlKey","click","getItem","dispatchEvent","Event","selectableItems","selectedTag","scrollToItem","$items","$dropdown","$item","eq","getById","attr","dropdownScroll","scrollTop","dropdownTop","offset","top","dropdownBottom","outerHeight","itemTop","itemBottom","parseInt","css","stop","animate","TagDiscussionModal","discussion","attribute","getSelectableTags","canStartDiscussion","suppliedOnsubmit","save","relationships","matches","get","update"],"sourceRoot":""} \ No newline at end of file diff --git a/framework/core/js/dist-typings/forum/components/WelcomeHero.d.ts b/framework/core/js/dist-typings/forum/components/WelcomeHero.d.ts index 75cfe94f2..c7af7bc01 100644 --- a/framework/core/js/dist-typings/forum/components/WelcomeHero.d.ts +++ b/framework/core/js/dist-typings/forum/components/WelcomeHero.d.ts @@ -10,6 +10,8 @@ export interface IWelcomeHeroAttrs { export default class WelcomeHero extends Component { oninit(vnode: Mithril.Vnode): void; view(vnode: Mithril.Vnode): JSX.Element | null; + viewItems(): ItemList; + contentItems(): ItemList; /** * Hide the welcome hero. */ @@ -20,5 +22,4 @@ export default class WelcomeHero extends Component { * @returns if the welcome hero is hidden. */ isHidden(): boolean; - welcomeItems(): ItemList; } diff --git a/framework/core/js/dist/forum.js b/framework/core/js/dist/forum.js index f236c13dc..3b079b752 100644 --- a/framework/core/js/dist/forum.js +++ b/framework/core/js/dist/forum.js @@ -1,3 +1,3 @@ /*! For license information please see forum.js.LICENSE.txt */ -(()=>{var t,e,r={6997:(t,e,r)=>{"use strict";r.d(e,{A:()=>L});var n=r(8805),s=r(5114),o=r(6064),i=r(3092),a=r(1344),l=r(4519),c=r(7088),u=r(7141),d=r(3984),h=r(3957),f=r(4586),p=r(117),g=r(8781),v=r(6987),b=r(1810),A=r(2361),y=r(76),w=r(4022),x=r(281),k=r(5223),C=r(7390),N=r(2288),S=r(4583),T=r(3945),E=r(4944),M=r(2217),P=r(8286),D=r(2891),I=r(1467),_=r(2188);class L{constructor(){(0,n.A)(this,"forum",void 0),(0,n.A)(this,"routes",{}),(0,n.A)(this,"initializers",new o.A),(0,n.A)(this,"session",void 0),(0,n.A)(this,"translator",new u.A),(0,n.A)(this,"store",new d.A({"access-tokens":I.A,forums:x.A,users:k.A,discussions:C.A,posts:N.A,groups:S.A,notifications:T.A})),(0,n.A)(this,"search",void 0),(0,n.A)(this,"cache",{}),(0,n.A)(this,"booted",!1),(0,n.A)(this,"current",new E.A(null)),(0,n.A)(this,"previous",new E.A(null)),(0,n.A)(this,"modal",new M.A),(0,n.A)(this,"alerts",new P.A),(0,n.A)(this,"drawer",void 0),(0,n.A)(this,"history",null),(0,n.A)(this,"pane",null),(0,n.A)(this,"data",void 0),(0,n.A)(this,"allowUserColorScheme",void 0),(0,n.A)(this,"refs",{fontawesome:"https://fontawesome.com/v6/icons?o=r&m=free"}),(0,n.A)(this,"_title",""),(0,n.A)(this,"_titleCount",0),(0,n.A)(this,"requestErrorAlert",null),(0,n.A)(this,"initialRoute",void 0),(0,n.A)(this,"currentInitializerExtension",null),(0,n.A)(this,"handledErrors",[])}set title(t){this._title=t}get title(){return this._title}set titleCount(t){this._titleCount=t}get titleCount(){return this._titleCount}load(t){this.data=t,this.translator.setLocale(t.locale)}initialize(){const t=[];return this.initializers.toArray().forEach((e=>{this.currentInitializerExtension=e.itemName.includes("/")?e.itemName.replace(/(\/flarum-ext-)|(\/flarum-)/g,"-"):e.itemName;try{e(this)}catch(e){t.push((()=>(0,D.A)((0,p.A)(s.A.translator.trans("core.lib.error.extension_initialiation_failed_message",{extension:this.currentInitializerExtension})),`${this.currentInitializerExtension} failed to initialize`,e)))}})),t}boot(){const t=this.initialize();this.store.pushPayload({data:this.data.resources}),this.forum=this.store.getById("forums","1"),this.session=new h.A(this.store.getById("users",String(this.data.session.userId))??null,this.data.session.csrfToken),this.beforeMount(),this.mount(),this.initialRoute=window.location.href,t.forEach((t=>t()))}beforeMount(){}bootExtensions(t){Object.keys(t).forEach((e=>{const r=t[e];if(!r.extend)return;const n=r.extend.flat(1/0);for(const t of n)t.extend(this,{name:e,exports:r})}))}mount(t){void 0===t&&(t=""),m.mount(document.getElementById("modal"),{view:()=>m(a.A,{state:this.modal})}),m.mount(document.getElementById("alerts"),{view:()=>m(l.A,{state:this.alerts})}),this.drawer=new g.A,m.route(document.getElementById("content"),t+"/",(0,v.A)(this.routes,t));const e=document.getElementById("app"),r=document.querySelector(".App-header"),n=new A.A((t=>{const n=e.getBoundingClientRect().top+document.body.scrollTop;e.classList.toggle("affix",t>=n),e.classList.toggle("scrolled",t>n),r.classList.toggle("navbar-fixed-top",t>=n)}));n.start(),n.update(),document.body.classList.add("ontouchstart"in window?"touch":"no-touch"),this.initColorScheme(),(0,y.A)()}initColorScheme(t){void 0===t&&(t=null),t??=s.A.forum.attribute("colorScheme")??"auto",this.allowUserColorScheme="auto"===t;const e=this.session.user?.preferences()?.colorScheme;let r;this.allowUserColorScheme&&(r=e),r||=t,this.setColorScheme(r),this.allowUserColorScheme&&this.watchSystemColorSchemePreference((()=>{this.initColorScheme(t)}))}getSystemColorSchemePreference(){let t=window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light";return window.matchMedia("(prefers-contrast: more)").matches&&(t+="-hc"),t}watchSystemColorSchemePreference(t){window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",t),window.matchMedia("(prefers-contrast: more)").addEventListener("change",t)}setColorScheme(t){t===_.z.Auto&&(t=this.getSystemColorSchemePreference()),document.documentElement.setAttribute("data-theme",t)}setColoredHeader(t){document.documentElement.setAttribute("data-colored-header",t?"true":"false")}preloadedApiDocument(){if(this.data.apiDocument&&window.location.href===this.initialRoute){const t=((0,d.J)(this.data.apiDocument),this.store.pushPayload(this.data.apiDocument));return this.data.apiDocument=null,t}return null}screen(){return getComputedStyle(document.documentElement).getPropertyValue("--flarum-screen")}setTitle(t){this.title=t,this.updateTitle()}setTitleCount(t){this.titleCount=t,this.updateTitle()}updateTitle(){const t=this.titleCount?`(${this.titleCount}) `:"",e=m.route.get()===this.forum.attribute("basePath")+"/",r={pageTitle:this.title,forumName:this.forum.attribute("title"),pageNumber:1};let n=e||!this.title?(0,p.A)(s.A.translator.trans("core.lib.meta_titles.without_page_title",r)):(0,p.A)(s.A.translator.trans("core.lib.meta_titles.with_page_title",r));n=t+n;const o=new DOMParser;document.title=o.parseFromString(n,"text/html").body.innerText}transformRequestOptions(t){const{background:e,deserialize:r,modifyText:n,...o}={...t},i={background:e??!0,deserialize:r??(t=>t),...o};if((0,w.X)(i,"config",((t,e)=>{e.setRequestHeader("X-CSRF-Token",this.session.csrfToken)})),i.method&&!["GET","POST"].includes(i.method)){const t=i.method;(0,w.X)(i,"config",((e,r)=>{r.setRequestHeader("X-HTTP-Method-Override",t)})),i.method="POST"}return i.extract=t=>{let e;e=n?n(t.responseText):t.responseText;const r=t.status;if(r<200||r>299)throw new b.A(r,`${e}`,i,t);if(t.getResponseHeader){const e=t.getResponseHeader("X-CSRF-Token");e&&(s.A.session.csrfToken=e)}try{return""===e?null:JSON.parse(e)}catch(r){throw new b.A(500,`${e}`,i,t)}},i}request(t){const e=this.transformRequestOptions(t);return this.requestErrorAlert&&this.alerts.dismiss(this.requestErrorAlert),m.request(e).catch((e=>this.requestErrorCatch(e,t.errorHandler)))}requestErrorCatch(t,e){const r=t.response?.errors?.map((t=>decodeURI(t.detail??"")))??[];let n;switch(t.status){case 422:n=r.map((t=>[t,m("br",null)])).flat().slice(0,-1);break;case 401:case 403:n=s.A.translator.trans("core.lib.error.permission_denied_message");break;case 404:case 410:n=s.A.translator.trans("core.lib.error.not_found_message");break;case 413:n=s.A.translator.trans("core.lib.error.payload_too_large_message");break;case 429:n=s.A.translator.trans("core.lib.error.rate_limit_exceeded_message");break;default:const e=t.response?.errors?.[0]?.code;n="db_error"===e&&s.A.session.user?.isAdmin()?s.A.translator.trans("core.lib.error.db_error_message"):this.requestWasCrossOrigin(t)?s.A.translator.trans("core.lib.error.generic_cross_origin_message"):s.A.translator.trans("core.lib.error.generic_message")}const o=s.A.forum.attribute("debug");return t.alert={type:"error",content:n,controls:o&&[m(i.A,{className:"Button Button--link",onclick:this.showDebug.bind(this,t,r)},s.A.translator.trans("core.lib.debug_button"))]},e?e(t):this.requestErrorDefaultHandler(t,o,r),Promise.reject(t)}requestWasCrossOrigin(t){return new URL(t.options?.url,document.baseURI).origin!==window.location.origin}requestErrorDefaultHandler(t,e,r){if(!(t instanceof b.A))throw t;if(e&&t.xhr){const{method:e,url:n}=t.options,{status:s=""}=t.xhr;console.group(`${e} ${n} ${s}`),r.length?console.error(...r):console.error(t),console.groupEnd()}500===t.status&&e?s.A.modal.show(c.A,{error:t,formattedError:r}):t.alert&&(this.requestErrorAlert=this.alerts.show(t.alert,t.alert.content))}showDebug(t,e){null!==this.requestErrorAlert&&this.alerts.dismiss(this.requestErrorAlert),this.modal.show(c.A,{error:t,formattedError:e})}route(t,e){void 0===e&&(e={});const r=this.routes[t];if(!r)throw new Error(`Route '${t}' does not exist`);const n=r.path.replace(/:([^\/]+)/g,((t,r)=>`${(0,f.A)(e,r)}`));for(const t in e)e.hasOwnProperty(t)&&!e[t]&&delete e[t];const s=m.buildQueryString(e);return(""===m.route.prefix?this.forum.attribute("basePath"):"")+n+(s?"?"+s:"")}handleErrorOnce(t,e,r,n,s){this.handledErrors.some((t=>t.errorId===e))||(this.handledErrors.push({extension:t,errorId:e,error:s}),(0,D.A)(r,n,s))}}flarum.reg.add("core","common/Application",L)},5710:(t,e,r)=>{"use strict";r.d(e,{A:()=>s});var n=r(8805);class s{constructor(){(0,n.A)(this,"element",void 0),(0,n.A)(this,"attrs",void 0),(0,n.A)(this,"state",void 0)}oninit(t){this.setAttrs(t.attrs)}oncreate(t){this.element=t.dom}onbeforeupdate(t){this.setAttrs(t.attrs)}onupdate(t){}onbeforeremove(t){}onremove(t){}$(t){const e=$(this.element);return t?e.find(t):e}static component(t,e){void 0===t&&(t={}),void 0===e&&(e=null);const r={...t};return m(this,r,e)}setAttrs(t){if(void 0===t&&(t={}),this.constructor.initAttrs(t),t){if("children"in t)throw new Error(`[${this.constructor.name}] The "children" attribute of attrs should never be used. Either pass children in as the vnode children or rename the attribute`);if("tag"in t)throw new Error(`[${this.constructor.name}] You cannot use the "tag" attribute name with Mithril 2.`)}this.attrs=t}static initAttrs(t){}}flarum.reg.add("core","common/Component",s)},5420:(t,e,r)=>{"use strict";r.d(e,{A:()=>o});var n=r(8805),s=r(5114);class o{constructor(t,e){void 0===t&&(t={}),void 0===e&&(e=s.A.store),(0,n.A)(this,"data",{}),(0,n.A)(this,"freshness",new Date),(0,n.A)(this,"exists",!1),(0,n.A)(this,"store",void 0),this.data=t,this.store=e}id(){return"id"in this.data?this.data.id:void 0}attribute(t){return this.data?.attributes?.[t]}pushData(t){if("id"in t&&(this.data.id=t.id),"type"in t&&(this.data.type=t.type),"attributes"in t){this.data.attributes||={};for(const e in t.attributes){const r=t.attributes[e];r&&r instanceof o&&delete t.attributes[e]}Object.assign(this.data.attributes,t.attributes)}if("relationships"in t){const e=this.data.relationships??{};for(const r in t.relationships){const n=t.relationships[r];if(null===n){delete e[r],delete t.relationships[r];continue}let s;s=n instanceof o?{data:o.getIdentifier(n)}:n instanceof Array?{data:n.map(o.getIdentifier)}:n,t.relationships[r]=s,e[r]=s}this.data.relationships=e}return this.freshness=new Date,this}pushAttributes(t){this.pushData({attributes:t})}save(t,e){void 0===e&&(e={});const r={type:this.data.type,attributes:t};if("id"in this.data&&(r.id=this.data.id),t.relationships&&!("relationships"in this)){r.relationships={};for(const e in t.relationships){const n=t.relationships[e];null!==n&&(r.relationships[e]={data:n instanceof Array?n.map(o.getIdentifier):o.getIdentifier(n)})}delete t.relationships}const n=this.copyData();this.pushData(r);const i={data:r,meta:e.meta||void 0};return s.A.request({method:this.exists?"PATCH":"POST",url:s.A.forum.attribute("apiUrl")+this.apiEndpoint(),body:i,...e}).then((t=>this.store.pushPayload(t)),(t=>{throw this.pushData(n),m.redraw(),t}))}delete(t,e){return void 0===t&&(t={}),void 0===e&&(e={}),this.exists?s.A.request({method:"DELETE",url:s.A.forum.attribute("apiUrl")+this.apiEndpoint(),body:t,...e}).then((()=>{this.exists=!1,this.store.remove(this)})):Promise.resolve()}apiEndpoint(){return"/"+this.data.type+("id"in this.data?"/"+this.data.id:"")}copyData(){return JSON.parse(JSON.stringify(this.data))}rawRelationship(t){return this.data.relationships?.[t]?.data}static attribute(t,e){return function(){return e?e(this.attribute(t)):this.attribute(t)}}static hasOne(t){return function(){const e=this.data.relationships?.[t]?.data;if(e&&e instanceof Array)throw new Error(`Relationship ${t} on model ${this.data.type} is plural, so the hasOne method cannot be used to access it.`);return!!e&&this.store.getById(e.type,e.id)}}static hasMany(t){return function(){const e=this.data.relationships?.[t]?.data;if(e&&!(e instanceof Array))throw new Error(`Relationship ${t} on model ${this.data.type} is singular, so the hasMany method cannot be used to access it.`);return!!e&&e.map((t=>this.store.getById(t.type,t.id)))}}static transformDate(t){return null!=t?new Date(t):t}static getIdentifier(t){return t&&t.data&&"id"in t.data?{type:t.data.type,id:t.data.id}:null}}flarum.reg.add("core","common/Model",o)},3920:(t,e,r)=>{"use strict";r.d(e,{A:()=>f});var n=r(8805),s=r(5114),o=r(8631);class i extends o.px{key(){return s.A.translator.trans("core.lib.gambits.discussions.author.key",{},!0)}hint(){return s.A.translator.trans("core.lib.gambits.discussions.author.hint",{},!0)}filterKey(){return"author"}}flarum.reg.add("core","common/query/discussions/AuthorGambit",i);class a extends o.px{key(){return s.A.translator.trans("core.lib.gambits.discussions.created.key",{},!0)}hint(){return s.A.translator.trans("core.lib.gambits.discussions.created.hint",{},!0)}valuePattern(){return"(\\d{4}\\-\\d\\d\\-\\d\\d(?:\\.\\.(\\d{4}\\-\\d\\d\\-\\d\\d))?)"}filterKey(){return"created"}}flarum.reg.add("core","common/query/discussions/CreatedGambit",a);class l extends o.pm{key(){return s.A.translator.trans("core.lib.gambits.discussions.hidden.key",{},!0)}filterKey(){return"hidden"}enabled(){return!!s.A.session.user}}flarum.reg.add("core","common/query/discussions/HiddenGambit",l);class c extends o.pm{key(){return s.A.translator.trans("core.lib.gambits.discussions.unread.key",{},!0)}filterKey(){return"unread"}enabled(){return!!s.A.session.user}}flarum.reg.add("core","common/query/discussions/UnreadGambit",c);class u extends o.px{key(){return s.A.translator.trans("core.lib.gambits.users.email.key",{},!0)}hint(){return s.A.translator.trans("core.lib.gambits.users.email.hint",{},!0)}filterKey(){return"email"}enabled(){return!(!s.A.session.user||!s.A.forum.attribute("canEditUserCredentials"))}}flarum.reg.add("core","common/query/users/EmailGambit",u);class d extends o.px{key(){return s.A.translator.trans("core.lib.gambits.users.group.key",{},!0)}hint(){return s.A.translator.trans("core.lib.gambits.users.group.hint",{},!0)}filterKey(){return"group"}}flarum.reg.add("core","common/query/users/GroupGambit",d);class h extends o.px{key(){return s.A.translator.trans("core.lib.gambits.posts.discussion.key",{},!0)}hint(){return s.A.translator.trans("core.lib.gambits.posts.discussion.hint",{},!0)}filterKey(){return"discussion"}}flarum.reg.add("core","common/query/discussions/DiscussionGambit",h);class m{constructor(){(0,n.A)(this,"gambits",{discussions:[i,a,l,c],posts:[i,h],users:[u,d]})}apply(t,e){return e.q=this.match(t,e.q,((t,r,n)=>{const s=t.toFilter(r,n);Object.keys(s).forEach((r=>{r in e&&t.predicates&&Array.isArray(s[r])?e[r]=e[r].concat(s[r]):e[r]=s[r]}))})),e}match(t,e,r){const n=this.for(t).filter((t=>t.enabled()));if(0===n.length)return e;const s=e.split(" ");for(const t of n)for(const n of s){const s=new RegExp(`^(-?)${t.pattern()}$`,"i");let o=n.match(s);if(o){const s="-"===o[1];o.splice(1,1),r(t,o,s,n),e=e.replace(n,"")}}return e.trim().replace(/\s+/g," ")}from(t,e,r){const n=this.for(t);return 0===n.length||Object.keys(r).forEach((t=>{for(const s of n){const n="-"===t[0];n&&(t=t.substring(1)),s.filterKey()===t&&(e+=` ${s.fromFilter(r[t],n)}`)}})),e}for(t){return(this.gambits[t]||[]).map((t=>new t))}}flarum.reg.add("core","common/GambitManager",m);class f{constructor(t){(0,n.A)(this,"state",void 0),(0,n.A)(this,"gambits",new m),this.state=t}}(0,n.A)(f,"MIN_SEARCH_LEN",3),(0,n.A)(f,"SEARCH_DEBOUNCE_TIME_MS",250),flarum.reg.add("core","common/SearchManager",f)},3957:(t,e,r)=>{"use strict";r.d(e,{A:()=>o});var n=r(8805),s=r(5114);class o{constructor(t,e){(0,n.A)(this,"user",void 0),(0,n.A)(this,"csrfToken",void 0),this.user=t,this.csrfToken=e}login(t,e){return void 0===e&&(e={}),s.A.request({method:"POST",url:`${s.A.forum.attribute("baseUrl")}/login`,body:t,...e})}logout(){window.location.href=`${s.A.forum.attribute("baseUrl")}/logout?token=${this.csrfToken}`}}flarum.reg.add("core","common/Session",o)},3984:(t,e,r)=>{"use strict";r.d(e,{A:()=>i,J:()=>o});var n=r(8805),s=r(5114);function o(t){return Array.isArray(t.data)}class i{constructor(t){(0,n.A)(this,"data",{}),(0,n.A)(this,"models",void 0),this.models=t}pushPayload(t){t.included&&t.included.map(this.pushObject.bind(this));const e=t.data instanceof Array?t.data.map((t=>this.pushObject(t))):this.pushObject(t.data);return e.payload=t,e}pushObject(t){if(!this.models[t.type])return setTimeout((()=>{throw new Error(`Pushing object of type \`${t.type}\` not allowed, as type not yet registered in the store.`)})),null;const e=this.data[t.type]=this.data[t.type]||{},r=e[t.id],n=r?r.pushData(t):this.createRecord(t.type,t);return e[t.id]=n,n.exists=!0,n}async find(t,e,r,n){void 0===r&&(r={}),void 0===n&&(n={});let i=r,a=s.A.forum.attribute("apiUrl")+"/"+t;return e instanceof Array?a+="?filter[id]="+e.join(","):"object"==typeof e?i=e:e&&(a+="/"+e),"filter"in i&&i?.filter?.q&&(i.filter=s.A.search.gambits.apply(t,i.filter)),s.A.request({method:"GET",url:a,params:i,...n}).then((t=>(o(t),this.pushPayload(t))))}getById(t,e){return this.data?.[t]?.[e]}getBy(t,e,r){return this.all(t).filter((t=>t[e]()===r))[0]}all(t){const e=this.data[t];return e?Object.values(e):[]}remove(t){delete this.data[t.data.type][t.id()]}createRecord(t,e){return void 0===e&&(e={}),e.type=e.type||t,new this.models[t](e,this)}}flarum.reg.add("core","common/Store",i)},7141:(t,e,r)=>{"use strict";r.d(e,{A:()=>d});var n=r(8805),s=r(6445),o=r(4586),i=r(3083),a=r.n(i),l=r(4434),c=r(117),u=r(6064);class d{constructor(){(0,n.A)(this,"dateTimeFormats",new u.A),(0,n.A)(this,"formatter",a())}get translations(){return this.formatter.setup().translations[this.getLocale()]??{}}setLocale(t){this.formatter.setup({locale:t,translations:{[t]:this.formatter.setup().translations[t]??{}}})}getLocale(){return Array.isArray(this.formatter.setup().locale)?this.formatter.setup().locale[0]:this.formatter.setup().locale}addTranslations(t){const e=this.getLocale();this.formatter.setup({translations:{[e]:Object.assign(this.translations,t)}})}preprocessParameters(t,e){if("user"in t){const e=(0,o.A)(t,"user");t.username||(t.username=(0,s.A)(e))}const r=(e="string"==typeof e?e:e.message).match(/<(\w+)[^>]*>.*?<\/\1>/g),n=r?.map((t=>t.match(/^<(\w+)/)[1]))||[],i=this.autoProvidedTags();for(const e of n)!t[e]&&i.includes(e)&&(t[e]=t=>{let{children:r}=t;return m(e,r)});for(const e in t){const r=t[e];n.includes(e)&&"object"==typeof r&&r.attrs&&r.tag&&(t[e]=t=>{let{children:e}=t;return m(r.tag,r.attrs,e)})}return t}trans(t,e,r){void 0===e&&(e={}),void 0===r&&(r=!1);const n=this.preprocessTranslation(this.translations[t]);if(n){e=this.preprocessParameters(e,n),this.translations[t]=n;let s=this.formatter.rich({id:t,default:t},e);return s=s instanceof Array?s.map((t=>void 0===t?"{undefined}":t)):s,r?(0,c.A)(s):s}return(0,l.A)(`Missing translation for key: "${t}"`),t}formatDateTime(t,e){const r=this.dateTimeFormats.has(e)&&this.dateTimeFormats.get(e);if(r){const t=r.apply(this,[e]);if(t)return t}return t.format(this.preprocessTranslation(this.translations[e]))}preprocessTranslation(t){if(t)return(t="string"==typeof t?t:t.message).match(/<\w+ [^>]+>/g)?((0,l.A)(`Any HTML tags used within translations must be simple tags, without attributes.\nCaught in translation: \n\n"""\n${t}\n"""`),t.replace(/<(\w+)([^>]*)>/g,"<$1>")):t}autoProvidedTags(){return["strong","code","i","s","em","sup","sub"]}}flarum.reg.add("core","common/Translator",d)},5114:(t,e,r)=>{"use strict";r.d(e,{A:()=>o});const n=window,s=new Proxy({},{get:(t,e)=>Reflect.get(n.app,e,n.app),set:(t,e,r)=>Reflect.set(n.app,e,r,n.app)}),o=s;flarum.reg.add("core","common/app",s)},9924:(t,e,r)=>{"use strict";r.d(e,{A:()=>u});var n=r(5710),s=r(3092),o=r(5673),i=r(4586),a=r(4268),l=r(5114),c=r(7479);class u extends n.A{view(t){const e=Object.assign({},this.attrs),r=(0,i.A)(e,"type");e.className=(0,a.A)("Alert",`Alert--${r}`,e.className);const n=(0,i.A)(e,"title"),u=(0,i.A)(e,"icon"),d=(0,i.A)(e,"content")||t.children,h=(0,i.A)(e,"controls")||[],f=(0,i.A)(e,"dismissible"),p=(0,i.A)(e,"ondismiss"),g=[];return(f||void 0===f)&&g.push(m(s.A,{"aria-label":l.A.translator.trans("core.lib.alert.dismiss_a11y_label"),icon:"fas fa-times",className:"Button Button--link Button--icon Alert-dismiss",onclick:p})),m("div",e,m("div",{className:(0,a.A)("Alert-container",e.containerClassName)},m("div",{className:"Alert-content"},!!n&&m("div",{className:"Alert-title"},!!u&&m("span",{className:"Alert-title-icon"},m(c.A,{name:u})),m("span",{className:"Alert-title-text"},n)),m("span",{className:"Alert-body"},d)),m("ul",{className:"Alert-controls"},(0,o.A)(h.concat(g)))))}}flarum.reg.add("core","common/components/Alert",u)},4519:(t,e,r)=>{"use strict";r.d(e,{A:()=>s});var n=r(5710);class s extends n.A{oninit(t){super.oninit(t),this.state=this.attrs.state}view(){const t=this.state.getActiveAlerts();return m("div",{className:"AlertManager"},Object.keys(t).map(Number).map((e=>{const r=t[e],n="error"===r.attrs.type;return m("div",{className:"AlertManager-alert",role:"alert","aria-live":n?"assertive":"polite"},m(r.componentClass,Object.assign({},r.attrs,{ondismiss:this.state.dismiss.bind(this.state,e)}),r.children))})))}}flarum.reg.add("core","common/components/AlertManager",s)},7891:(t,e,r)=>{"use strict";r.d(e,{A:()=>o});var n=r(4268),s=r(5710);class o extends s.A{view(t){const{user:e,...r}=t.attrs;r.className=(0,n.A)("Avatar",r.className),r.loading??="lazy";let s="";const o="undefined"===r.title||r.title;if(o||delete r.title,e){const t=e.displayName()||"?",n=e.avatarUrl();if(o&&(r.title=r.title||t),n)return m("img",Object.assign({},r,{src:n,alt:""}));s=t.charAt(0).toUpperCase(),r.style=!window.testing&&{"--avatar-bg":e.color()}}return m("span",r,s)}}flarum.reg.add("core","common/components/Avatar",o)},367:(t,e,r)=>{"use strict";r.d(e,{A:()=>l});var n=r(4391),s=r(5710),o=r(4268),i=r(3288),a=r(7479);class l extends s.A{view(){const{type:t,icon:e,label:r,color:s,style:l={},...c}=this.attrs,u=(0,o.A)("Badge",[t&&`Badge--${t}`],c.className,(0,i.A)(s)),d=e?m(a.A,{name:e,className:"Badge-icon"}):m.trust(" "),h={...l};window.testing||(h["--badge-bg"]=s);const f={...c,className:u,style:h},p=m("div",f,d);return r?m(n.A,{text:r},p):p}}flarum.reg.add("core","common/components/Badge",l)},3092:(t,e,r)=>{"use strict";r.d(e,{A:()=>c});var n=r(5710),s=r(4434),o=r(4268),i=r(117),a=r(43),l=r(7479);class c extends n.A{view(t){let{type:e,"aria-label":r,icon:n,disabled:s,loading:a,className:l,class:c,helperText:u,...d}=this.attrs;e||="button","object"==typeof r&&(r=(0,i.A)(r)),(s||a)&&delete d.onclick,l=(0,o.A)(c,l,{hasIcon:n,disabled:s||a,loading:a,hasSubContent:!!this.getButtonSubContent()});const h={disabled:s,className:l,type:e,"aria-label":r,...d};return m("button",h,this.getButtonContent(t.children))}oncreate(t){super.oncreate(t);const{"aria-label":e}=this.attrs;this.view!==c.prototype.view||e||(0,i.A)(t.children)||this.element?.getAttribute?.("aria-label")||(0,s.A)('[Flarum Accessibility Warning] Button has no content and no accessible label. This means that screen-readers will not be able to interpret its meaning and just read "Button". Consider providing accessible text via the `aria-label` attribute. https://web.dev/button-name',this.element)}getButtonContent(t){const e=this.attrs.icon;return[e&&("string"==typeof e||!0===e?m(l.A,{name:e,className:"Button-icon"}):e),t&&m("span",{className:"Button-label"},m("span",{className:"Button-labelText"},t),this.getButtonSubContent()),this.attrs.loading&&m(a.A,{size:"small",display:"inline"})]}getButtonSubContent(){return this.attrs.helperText?m("span",{className:"Button-helperText"},this.attrs.helperText):null}}flarum.reg.add("core","common/components/Button",c)},5215:(t,e,r)=>{"use strict";r.d(e,{A:()=>l});var n=r(5710),s=r(43),o=r(4268),i=r(9024),a=r(7479);class l extends n.A{view(t){const e=(0,o.A)(["Checkbox",this.attrs.state?"on":"off",this.attrs.className,this.attrs.loading&&"loading",this.attrs.disabled&&"disabled"]);return m("label",{className:e},m("input",{type:"checkbox",checked:this.attrs.state,disabled:this.attrs.disabled,onchange:(0,i.A)("checked",this.onchange.bind(this))}),m("div",{className:"Checkbox-display","aria-hidden":"true"},this.getDisplay()),t.children)}getDisplay(){return this.attrs.loading?m(s.A,{display:"unset",size:"small"}):m(a.A,{name:this.attrs.state?"fas fa-check":"fas fa-times"})}onchange(t){this.attrs.onchange&&this.attrs.onchange(t,this)}}flarum.reg.add("core","common/components/Checkbox",l)},4511:(t,e,r)=>{"use strict";r.d(e,{A:()=>u});var n=r(8805),s=r(5114),o=r(5710),i=r(5673),a=r(117),l=r(4391),c=r(7479);class u extends o.A{constructor(){super(...arguments),(0,n.A)(this,"showing",!1)}static initAttrs(t){t.className||="",t.buttonClassName||="",t.menuClassName||="",t.label||="",t.caretIcon??="fas fa-caret-down",t.accessibleToggleLabel||=(0,a.A)(s.A.translator.trans("core.lib.dropdown.toggle_dropdown_accessible_label"))}view(t){const e=t.children?(0,i.A)(t.children):[],r=!this.attrs.lazyDraw||this.showing;return m("div",{className:"ButtonGroup Dropdown dropdown "+this.attrs.className+" itemCount"+e.length+(this.showing?" open":"")},this.getButton(t.children),r&&this.getMenu(e))}oncreate(t){super.oncreate(t),this.$().on("shown.bs.dropdown",(()=>{const{lazyDraw:t,onshow:e}=this.attrs;this.showing=!0,t&&m.redraw.sync(),"function"==typeof e&&e(),t||m.redraw();const r=this.$(".Dropdown-menu"),n=r.hasClass("Dropdown-menu--right"),s=r.offset()?.top??0,o=r.height()??0,i=$(window).scrollTop()??0,a=$(window).height()??0;r.removeClass("Dropdown-menu--top Dropdown-menu--right"),r.toggleClass("Dropdown-menu--top",s+o>i+a),(r.offset()?.top||0)<0&&r.removeClass("Dropdown-menu--top");const l=r.offset()?.left??0,c=r.width()??0,u=$(window).scrollLeft()??0,d=$(window).width()??0;r.toggleClass("Dropdown-menu--right",n||l+c>u+d)})),this.$().on("hidden.bs.dropdown",(()=>{this.showing=!1,this.attrs.onhide&&this.attrs.onhide(),m.redraw()}))}getButton(t){let e=m("button",Object.assign({className:"Dropdown-toggle "+this.attrs.buttonClassName,"aria-haspopup":"menu","aria-label":this.attrs.accessibleToggleLabel,"data-toggle":"dropdown",onclick:this.attrs.onclick},this.attrs.buttonAttrs),this.getButtonContent(t));return this.attrs.tooltip&&(e=m(l.A,{text:this.attrs.tooltip,position:"bottom"},e)),e}getButtonContent(t){return[this.attrs.icon?m(c.A,{name:this.attrs.icon,className:"Button-icon"}):"",m("span",{className:"Button-label"},m("span",{className:"Button-labelText"},this.attrs.label),this.getButtonSubContent()),this.attrs.caretIcon?m(c.A,{name:this.attrs.caretIcon,className:"Button-caret"}):""]}getButtonSubContent(){return this.attrs.helperText?m("span",{className:"Button-helperText"},this.attrs.helperText):null}getMenu(t){return m("ul",{className:"Dropdown-menu dropdown-menu "+this.attrs.menuClassName},t)}}flarum.reg.add("core","common/components/Dropdown",u)},592:(t,e,r)=>{"use strict";r.d(e,{A:()=>o});var n=r(5710),s=r(4268);class o extends n.A{view(t){return m("div",{className:(0,s.A)("FieldSet",this.attrs.className),role:"group","aria-label":this.attrs.label,"aria-disabled":!1},m("label",{className:"FieldSet-label","aria-hidden":"true"},this.attrs.label),this.attrs.description?m("div",{className:"FieldSet-description helpText"},this.attrs.description):null,m("div",{className:"FieldSet-items"},t.children))}}flarum.reg.add("core","common/components/FieldSet",o)},374:(t,e,r)=>{"use strict";r.d(e,{A:()=>o});var n=r(5710),s=r(4268);class o extends n.A{view(t){const{label:e,description:r,className:n,...o}=t.attrs;return m("div",Object.assign({className:(0,s.A)("Form",n)},o),(e||r)&&m("div",{className:"Form-header"},e&&m("label",null,e),r&&m("p",{className:"helpText"},r)),m("div",{className:"Form-body"},t.children))}}flarum.reg.add("core","common/components/Form",o)},2855:(t,e,r)=>{"use strict";r.d(e,{A:()=>s});var n=r(2849);class s extends n.A{wrapper(t){return m("form",{onsubmit:this.onsubmit.bind(this)},t)}onsubmit(t){}onready(){this.$().find("input, select, textarea").first().trigger("focus").trigger("select")}onerror(t){this.alertAttrs=t.alert,m.redraw(),422===t.status&&t.response?.errors?this.$("form [name="+t.response.errors[0].source.pointer.replace("/data/attributes/","")+"]").trigger("select"):this.onready()}}flarum.reg.add("core","common/components/FormModal",s)},3550:(t,e,r)=>{"use strict";r.d(e,{A:()=>s});var n=r(367);class s extends n.A{static initAttrs(t){super.initAttrs(t),t.group&&(t.icon=t.group.icon()||"",t.color=t.group.color()||"",t.label=void 0===t.label?t.group.nameSingular():t.label,t.type="group--"+t.group.id(),delete t.group)}}flarum.reg.add("core","common/components/GroupBadge",s)},4411:(t,e,r)=>{"use strict";r.d(e,{A:()=>i});var n=r(8805),s=r(5710),o=r(6064);class i extends s.A{constructor(){super(...arguments),(0,n.A)(this,"ip",void 0)}oninit(t){super.oninit(t),this.ip=this.attrs.ip||""}view(){return m("span",{className:"IPAddress"},this.viewItems().toArray())}viewItems(){const t=new o.A;return t.add("ip",m("span",{className:"IPAddress-value"},this.ip),100),t}}flarum.reg.add("core","common/components/IPAddress",i)},7479:(t,e,r)=>{"use strict";r.d(e,{A:()=>o});var n=r(4268),s=r(5710);class o extends s.A{view(t){const{name:e,...r}=t.attrs;return r.className=(0,n.A)("icon",e,r.className),m("i",Object.assign({"aria-hidden":"true"},r))}}flarum.reg.add("core","common/components/Icon",o)},4164:(t,e,r)=>{"use strict";r.d(e,{A:()=>i});var n=r(5710),s=r(7479),o=r(4268);class i extends n.A{view(t){const{icon:e,className:r,...n}=t.attrs;return m("div",Object.assign({className:(0,o.A)("InfoTile",r)},n),this.icon(),m("div",{className:"InfoTile-text"},t.children))}icon(){return this.attrs.iconElement?this.attrs.iconElement:this.attrs.icon?m(s.A,{name:(0,o.A)(this.attrs.icon,"InfoTile-icon")}):null}}flarum.reg.add("core","common/components/InfoTile",i)},7882:(t,e,r)=>{"use strict";r.d(e,{A:()=>c});var n=r(5114),s=r(5710),o=r(7479),i=r(43),a=r(4268),l=r(3092);class c extends s.A{oninit(t){super.oninit(t)}view(t){const{className:e,...r}=this.attrs.inputAttrs||{},s=this.attrs.value||this.attrs.stream?.()||"";return m("div",{className:(0,a.A)("Input",this.attrs.className,{"Input--withPrefix":this.attrs.prefixIcon,"Input--withClear":this.attrs.clearable})},this.attrs.prefixIcon&&m(o.A,{name:(0,a.A)(this.attrs.prefixIcon,"Input-prefix-icon")}),this.input({inputClassName:e,value:s,inputAttrs:r}),this.attrs.loading?m(i.A,{size:"small",display:"inline",containerClassName:"Button Button--icon Button--link"}):null,this.attrs.clearable&&s&&!this.attrs.loading?m(l.A,{className:"Input-clear Button Button--icon Button--link",onclick:this.clear.bind(this),"aria-label":this.attrs.clearLabel||n.A.translator.trans("core.lib.input.clear_button"),type:"button",icon:"fas fa-times-circle"}):null)}input(t){let{inputClassName:e,value:r,inputAttrs:n}=t;const s={className:(0,a.A)("FormControl",e),type:this.attrs.type||"text",value:r,oninput:t=>this.onchange?.(t.target.value),"aria-label":this.attrs.ariaLabel,placeholder:this.attrs.placeholder,readonly:this.attrs.readonly||void 0,disabled:this.attrs.disabled||void 0,...n};return this.attrs.renderInput?this.attrs.renderInput(s):m("input",s)}onchange(t){this.attrs.stream?this.attrs.stream(t):this.attrs.onchange?.(t)}clear(){this.onchange("")}}flarum.reg.add("core","common/components/Input",c)},43:(t,e,r)=>{"use strict";r.d(e,{A:()=>i});var n=r(5114),s=r(5710),o=r(4268);class i extends s.A{view(){const{display:t="block",size:e="medium",containerClassName:r,className:s,...i}=this.attrs,a=(0,o.A)("LoadingIndicator",s),l=(0,o.A)("LoadingIndicator-container","unset"!==t&&`LoadingIndicator-container--${t}`,e&&`LoadingIndicator-container--${e}`,r);return m("div",Object.assign({"aria-label":n.A.translator.trans("core.lib.loading_indicator.accessible_label"),role:"status"},i.containerAttrs,{"data-size":e,className:l}),m("div",Object.assign({"aria-hidden":"true",className:a},i)))}}flarum.reg.add("core","common/components/LoadingIndicator",i)},2849:(t,e,r)=>{"use strict";r.d(e,{A:()=>c});var n=r(8805),s=r(5114),o=r(5710),i=r(9924),a=r(3092),l=r(4268);class c extends o.A{constructor(){super(...arguments),(0,n.A)(this,"loading",!1),(0,n.A)(this,"alertAttrs",null)}static get dismissibleOptions(){return{viaCloseButton:this.isDismissibleViaCloseButton,viaEscKey:this.isDismissibleViaEscKey,viaBackdropClick:this.isDismissibleViaBackdropClick}}oncreate(t){super.oncreate(t),this.attrs.animateShow((()=>this.onready()))}onbeforeremove(t){if(super.onbeforeremove(t),!this.attrs.state.modal)return new Promise((t=>setTimeout(t,300)))}view(){return this.alertAttrs&&(this.alertAttrs.dismissible=!1),m("div",{className:(0,l.A)("Modal modal-dialog fade",this.className())},m("div",{className:"Modal-content"},this.dismissibleOptions.viaCloseButton&&m("div",{className:"Modal-close App-backControl"},m(a.A,{icon:"fas fa-times",onclick:()=>this.hide(),className:"Button Button--icon Button--link","aria-label":s.A.translator.trans("core.lib.modal.close")})),this.wrapper(this.inner())))}wrapper(t){return m("[",null,t)}inner(){return m("[",null,m("div",{className:"Modal-header"},m("h3",{className:"App-titleControl App-titleControl--text"},this.title())),!!this.alertAttrs&&m("div",{className:"Modal-alert"},m(i.A,this.alertAttrs)),this.content())}onready(){}hide(){this.attrs.animateHide()}loaded(){this.loading=!1,m.redraw()}get dismissibleOptions(){return this.constructor.dismissibleOptions}}(0,n.A)(c,"isDismissibleViaCloseButton",!0),(0,n.A)(c,"isDismissibleViaEscKey",!0),(0,n.A)(c,"isDismissibleViaBackdropClick",!0),flarum.reg.add("core","common/components/Modal",c)},1344:(t,e,r)=>{"use strict";r.d(e,{A:()=>l});var n=r(8805),s=r(5710),o=r(8720),i=r(4945),a=r(43);class l extends s.A{constructor(){super(...arguments),(0,n.A)(this,"focusTrap",void 0),(0,n.A)(this,"lastSetFocusTrap",void 0),(0,n.A)(this,"modalClosing",!1),(0,n.A)(this,"keyUpListener",null)}view(t){return m("[",null,this.attrs.state.modalList.map(((t,e)=>{const r=t?.componentClass;return m("div",{key:t.key,className:"ModalManager modal","data-modal-key":t.key,"data-modal-number":e,role:"dialog","aria-modal":"true",style:!window.testing&&{"--modal-number":e},"aria-hidden":this.attrs.state.modal!==t&&"true"},!!r&&[m(r,Object.assign({key:t.key},t.attrs,{animateShow:this.animateShow.bind(this),animateHide:this.animateHide.bind(this),state:this.attrs.state})),m("div",{key:t.key,className:"ModalManager-invisibleBackdrop",onclick:this.handlePossibleBackdropClick.bind(this)})])})),(this.attrs.state.backdropShown||this.attrs.state.loadingModal)&&m("div",{className:"Modal-backdrop backdrop",ontransitionend:this.onBackdropTransitionEnd.bind(this),"data-showing":!!this.attrs.state.modalList.length||this.attrs.state.loadingModal,style:!window.testing&&{"--modal-count":this.attrs.state.modalList.length+Number(this.attrs.state.loadingModal)}},this.attrs.state.loadingModal&&m(a.A,null)))}oncreate(t){super.oncreate(t),this.keyUpListener=this.handleEscPress.bind(this),document.body.addEventListener("keyup",this.keyUpListener)}onbeforeremove(t){super.onbeforeremove(t),this.keyUpListener&&document.body.removeEventListener("keyup",this.keyUpListener),this.keyUpListener=null}onupdate(t){super.onupdate(t),requestAnimationFrame((()=>{try{if(!this.attrs.state.isModalOpen())return document.getElementById("app")?.removeAttribute("aria-hidden"),this.focusTrap.deactivate?.(),void(0,i.qY)();document.getElementById("app")?.setAttribute("aria-hidden","true");const t=this.attrs.state.modal.key;this.focusTrap&&this.lastSetFocusTrap!==t&&(this.focusTrap.deactivate?.(),(0,i.qY)()),this.activeDialogElement&&this.lastSetFocusTrap!==t&&(this.focusTrap=(0,o.K)(this.activeDialogElement,{allowOutsideClick:!0}),this.focusTrap.activate?.(),this.activeDialogManagerElement&&(0,i.mh)(this.activeDialogManagerElement,{reserveScrollBarGap:!0})),this.lastSetFocusTrap=t}catch{}}))}get activeDialogElement(){return document.body.querySelector(`.ModalManager[data-modal-key="${this.attrs.state.modal?.key}"] .Modal`)}get activeDialogManagerElement(){return document.body.querySelector(`.ModalManager[data-modal-key="${this.attrs.state.modal?.key}"]`)}animateShow(t){void 0===t&&(t=()=>{}),this.attrs.state.modal&&(this.activeDialogElement?.addEventListener("transitionend",(()=>{t()}),{once:!0}),requestAnimationFrame((()=>{this.activeDialogElement?.classList.add("in")})))}animateHide(t){void 0===t&&(t=()=>{}),this.modalClosing||(this.modalClosing=!0,this.activeDialogElement?.addEventListener("transitionend",(()=>{this.modalClosing=!1,this.attrs.state.close(),t()}),{once:!0}),this.activeDialogElement?.classList.remove("in"),this.activeDialogElement?.classList.add("out"))}handleEscPress(t){if(!this.attrs.state.modal)return;const e=this.attrs.state.modal.componentClass.dismissibleOptions;"Escape"===t.key&&e.viaEscKey&&(t.preventDefault(),this.animateHide())}handlePossibleBackdropClick(t){this.attrs.state.modal&&this.attrs.state.modal.componentClass.dismissibleOptions.viaBackdropClick&&this.animateHide()}onBackdropTransitionEnd(t){"opacity"===t.propertyName&&null===t.currentTarget.getAttribute("data-showing")&&(this.attrs.state.backdropShown=!1,m.redraw())}}flarum.reg.add("core","common/components/ModalManager",l)},2162:(t,e,r)=>{"use strict";r.d(e,{A:()=>l});var n=r(5114),s=r(5710),o=r(3092),i=r(6909),a=r(4268);class l extends s.A{view(){const{history:t,pane:e}=n.A;return m("div",{className:(0,a.A)("Navigation ButtonGroup",this.attrs.className),onmouseenter:e&&e.show.bind(e),onmouseleave:e&&e.onmouseleave.bind(e)},t?.canGoBack()?[this.getBackButton(),this.getPaneButton()]:this.getDrawerButton())}getBackButton(){const{history:t}=n.A,e=t?.getPrevious();return m(i.A,{className:"Button Navigation-back Button--icon",href:t?.backUrl(),icon:"fas fa-chevron-left","aria-label":e?.title,onclick:e=>{e.shiftKey||e.ctrlKey||e.metaKey||2===e.which||(e.preventDefault(),t?.back())}})}getPaneButton(){const{pane:t}=n.A;return t&&t.active?m(o.A,{className:(0,a.A)("Button Button--icon Navigation-pin",{active:t.pinned}),onclick:t.togglePinned.bind(t),icon:"fas fa-thumbtack"}):null}getDrawerButton(){if(!this.attrs.drawer)return null;const{drawer:t}=n.A,e=n.A.session.user;return m(o.A,{className:(0,a.A)("Button Button--icon Navigation-drawer",{new:e?.newNotificationCount()}),onclick:e=>{e.stopPropagation(),t.show()},icon:"fas fa-bars","aria-label":n.A.translator.trans("core.lib.nav.drawer_button")})}}flarum.reg.add("core","common/components/Navigation",l)},9377:(t,e,r)=>{"use strict";r.d(e,{A:()=>a});var n=r(8805),s=r(5114),o=r(5710),i=r(4944);class a extends o.A{constructor(){super(...arguments),(0,n.A)(this,"bodyClass",""),(0,n.A)(this,"scrollTopOnCreate",!0),(0,n.A)(this,"useBrowserScrollRestoration",!0)}oninit(t){super.oninit(t),s.A.previous=s.A.current,s.A.current=new i.A(this.constructor,{routeName:this.attrs.routeName}),s.A.drawer.hide(),s.A.modal.close()}oncreate(t){super.oncreate(t),this.bodyClass&&$("#app").addClass(this.bodyClass),this.scrollTopOnCreate&&$(window).scrollTop(0),"scrollRestoration"in history&&(history.scrollRestoration=this.useBrowserScrollRestoration?"auto":"manual")}onremove(t){super.onremove(t),this.bodyClass&&$("#app").removeClass(this.bodyClass)}}flarum.reg.add("core","common/components/Page",a)},7088:(t,e,r)=>{"use strict";r.d(e,{A:()=>s});var n=r(2849);class s extends n.A{className(){return"RequestErrorModal Modal--large"}title(){return!!this.attrs.error.xhr&&`${this.attrs.error.xhr.status} ${this.attrs.error.xhr.statusText}`}content(){const{error:t,formattedError:e}=this.attrs;let r;return r=e.length?e.join("\n\n"):t.response?JSON.stringify(t.response,null,2):t.responseText,r?.includes("