From 166b976f86faad434f239459f946dceef288a913 Mon Sep 17 00:00:00 2001 From: flarum-bot Date: Fri, 1 May 2020 09:59:24 +0000 Subject: [PATCH] Bundled output for commit 37e8469de7447f3ebfef6bf9b7fc0b17aac4cc57 [skip ci] --- extensions/tags/js/dist/admin.js.map | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/tags/js/dist/admin.js.map b/extensions/tags/js/dist/admin.js.map index 3bd538e18..85577841f 100644 --- a/extensions/tags/js/dist/admin.js.map +++ b/extensions/tags/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://@flarum/tags/webpack/bootstrap","webpack://@flarum/tags/external \"flarum.core.compat['Model']\"","webpack://@flarum/tags/external \"flarum.core.compat['extend']\"","webpack://@flarum/tags/./src/common/utils/sortTags.js","webpack://@flarum/tags/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@flarum/tags/./src/common/helpers/tagIcon.js","webpack://@flarum/tags/./src/common/helpers/tagLabel.js","webpack://@flarum/tags/./src/common/helpers/tagsLabel.js","webpack://@flarum/tags/external \"flarum.core.compat['components/Button']\"","webpack://@flarum/tags/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://@flarum/tags/./src/common/models/Tag.js","webpack://@flarum/tags/external \"flarum.core.compat['utils/extract']\"","webpack://@flarum/tags/external \"flarum.core.compat['utils/classList']\"","webpack://@flarum/tags/external \"flarum.core.compat['components/PermissionGrid']\"","webpack://@flarum/tags/external \"flarum.core.compat['utils/mixin']\"","webpack://@flarum/tags/external \"flarum.core.compat['utils/computed']\"","webpack://@flarum/tags/external \"flarum.core.compat['components/Page']\"","webpack://@flarum/tags/external \"flarum.core.compat['components/Modal']\"","webpack://@flarum/tags/./src/common/compat.js","webpack://@flarum/tags/external \"flarum.core\"","webpack://@flarum/tags/./src/admin/addTagsPermissionScope.js","webpack://@flarum/tags/./src/admin/addTagPermission.js","webpack://@flarum/tags/./node_modules/html5sortable/dist/html5sortable.es.js","webpack://@flarum/tags/./src/admin/components/EditTagModal.js","webpack://@flarum/tags/./src/admin/components/TagSettingsModal.js","webpack://@flarum/tags/./src/admin/components/TagsPage.js","webpack://@flarum/tags/./src/admin/addTagsPane.js","webpack://@flarum/tags/./src/admin/addTagsHomePageOption.js","webpack://@flarum/tags/./src/admin/addTagChangePermission.js","webpack://@flarum/tags/./src/admin/compat.js","webpack://@flarum/tags/./src/admin/index.js","webpack://@flarum/tags/external \"flarum.core.compat['components/PermissionDropdown']\"","webpack://@flarum/tags/external \"flarum.core.compat['components/Dropdown']\"","webpack://@flarum/tags/external \"flarum.core.compat['components/AdminNav']\"","webpack://@flarum/tags/external \"flarum.core.compat['components/AdminLinkButton']\"","webpack://@flarum/tags/external \"flarum.core.compat['utils/ItemList']\"","webpack://@flarum/tags/external \"flarum.core.compat['utils/string']\"","webpack://@flarum/tags/external \"flarum.core.compat['components/SettingsModal']\"","webpack://@flarum/tags/external \"flarum.core.compat['components/BasicsPage']\"","webpack://@flarum/tags/external \"flarum.core.compat['components/SettingDropdown']\"","webpack://@flarum/tags/./admin.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","flarum","core","compat","sortTags","tags","slice","sort","a","b","aPos","position","bPos","discussionCount","aParent","parent","bParent","_inheritsLoose","subClass","superClass","constructor","__proto__","tagIcon","tag","attrs","settings","hasIcon","icon","useColor","className","classList","style","color","backgroundColor","tagLabel","link","extract","tagText","app","translator","trans","title","description","href","route","slug","config","tagsLabel","children","forEach","length","push","_extends","assign","target","arguments","source","apply","this","Tag","mixin","Model","attribute","backgroundUrl","backgroundMode","hasOne","defaultSort","isChild","isHidden","lastPostedAt","transformDate","lastPostedDiscussion","isRestricted","canStartDiscussion","canAddToDiscussion","isPrimary","computed","override","original","permission","tagPrefix","match","substr","map","required","extend","PermissionGrid","items","store","all","filter","add","id","label","onremove","save","render","item","indexOf","PermissionDropdown","component","allowGuest","Dropdown","buttonClassName","caretIcon","Button","onclick","addData","element","undefined","h5s","data","_filter","nodes","selector","NodeList","HTMLCollection","Array","Error","from","nodeType","matches","stores","Map","Store","_config","_placeholder","_data","set","mergedConfig","entries","configurable","setConfig","has","getConfig","placeholder","HTMLElement","setData","getData","deleteData","delete","sortableElement","addEventListener","eventName","callback","removeEventListener","addAttribute","setAttribute","removeAttribute","_offset","parentElement","getClientRects","rect","left","window","pageXOffset","right","top","pageYOffset","bottom","_index","elementList","isInDom","parentNode","insertNode","referenceNode","newElement","insertBefore","nextElementSibling","insertAfter","_getElementHeight","getComputedStyle","int","parseInt","getPropertyValue","isNaN","reduce","sum","_getHandles","querySelector","shadowRoot","getEventTarget","event","composedPath","defaultDragImage","draggedElement","elementOffset","posX","pageX","posY","pageY","_listsConnected","destination","origin","isSortable","acceptFrom","split","sel","defaultConfiguration","connectWith","disableIEFix","copy","placeholderClass","draggingClass","hoverClass","debounce","throttleTime","maxItems","itemSerializer","containerSerializer","customDragImage","dragging","draggingHeight","originContainer","originIndex","originElementIndex","originItemsBeforeUpdate","previousContainer","destinationItemsBeforeUpdate","enableHoverClass","sortableContainer","enable","hoverClasses_1","fn","threshold","_this","lastEventTimestamp","args","_i","now","Date","_throttle","buttons","_a","_b","remove","_removeItemEvents","_removeSortableData","sortable","_removeItemData","findSortable","find","el","findDragElement","options","itemlist","ele","contains","_enableSortable","opts","handles","handle","document","createElement","dragDrop","sortableElements","method","String","querySelectorAll","test","customItemSerializer","customContainerSerializer","serializedItem","serializedContainer","serializedItems","node","html","outerHTML","index","container","itemCount","_serialize","configKey","console","warn","_reloadSortable","customPlaceholder","listItems","tempContainer","tagName","appendChild","innerHTML","includes","_makePlaceholder","e","stopImmediatePropagation","getAttribute","dragItem","Event","dataTransfer","setDragImage","dragImage","effectAllowed","draggedItem","ditem","cloneNode","display","oldDisplay","_getDragging","dispatchEvent","CustomEvent","detail","elementIndex","originalTarget","itemsBeforeUpdate","visiblePlaceholder","values","preventDefault","stopPropagation","originItems","destinationContainer","destinationItems","destinationElementIndex","destinationIndex","func","wait","timeout","debouncedDragOverEnter","forcePlaceholderSize","height","thisHeight","placeholderIndex","thisIndex","deadZone","offsetTop","placeAfter","offsetHeight","placeholders","clearTimeout","setTimeout","onDragOverEnter","dropEffect","concat","destroy","_destroySortable","disable","_disableSortable","__testing","EditTagModal","init","props","createRecord","prop","content","fields","toArray","ItemList","oninput","withAttr","tabindex","type","checked","onchange","loading","exists","submitData","onsubmit","then","hide","response","handleErrors","confirm","pushData","attributes","relationships","redraw","Modal","TagSettingsModal","setMinTags","minTags","maxTags","Math","max","form","minPrimaryTags","setting","maxPrimaryTags","minSecondaryTags","maxSecondaryTags","min","bidi","SettingsModal","tagItem","data-id","modal","show","child","TagsPage","view","localeCompare","$","onSortUpdate","HTMLOListElement","HTMLUListElement","getById","order","j","request","url","forum","strategy","Page","routes","path","extensionSettings","AdminNav","AdminLinkButton","BasicsPage","minutes","allow_tag_change","SettingDropdown","defaultLabel","transChoice","count","addTagsHomePageOption","addTagChangePermission","addTagsPane","addTagPermission","addTagsPermissionScope","initializers","models","tagsCompat"],"mappings":"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","file":"admin.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 49);\n","module.exports = flarum.core.compat['Model'];","module.exports = flarum.core.compat['extend'];","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)\n 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\n // If they are both child tags, then we will compare the positions of their\n // parents.\n else if (aParent && bParent)\n return aParent.position() - bParent.position();\n\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)\n return aParent === b ? 1 : aParent.position() - bPos;\n\n else if (bParent)\n return bParent === a ? -1 : aPos - bParent.position();\n\n return 0;\n });\n}\n","export default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n subClass.__proto__ = superClass;\n}","import classList from 'flarum/utils/classList';\n\nexport default function tagIcon(tag, attrs = {}, settings = {}) {\n const hasIcon = tag && tag.icon();\n const { useColor = true } = settings;\n\n attrs.className = classList([\n attrs.className,\n 'icon',\n hasIcon ? tag.icon() : 'TagIcon'\n ]);\n\n if (tag) {\n attrs.style = attrs.style || {};\n\n if (hasIcon) {\n attrs.style.color = useColor ? tag.color() : '';\n } else {\n attrs.style.backgroundColor = tag.color();\n }\n\n } else {\n attrs.className += ' untagged';\n }\n\n return hasIcon ? : ;\n}\n","import extract from 'flarum/utils/extract';\nimport tagIcon from './tagIcon';\n\nexport default function tagLabel(tag, attrs = {}) {\n attrs.style = attrs.style || {};\n attrs.className = 'TagLabel ' + (attrs.className || '');\n\n const link = extract(attrs, 'link');\n const tagText = tag ? tag.name() : app.translator.trans('flarum-tags.lib.deleted_tag_text');\n\n if (tag) {\n const color = tag.color();\n if (color) {\n attrs.style.backgroundColor = attrs.style.color = color;\n attrs.className += ' colored';\n }\n\n if (link) {\n attrs.title = tag.description() || '';\n attrs.href = app.route('tag', {tags: tag.slug()});\n attrs.config = m.route;\n }\n } else {\n attrs.className += ' untagged';\n }\n\n return (\n m((link ? 'a' : 'span'), attrs,\n \n {tag && tag.icon() && tagIcon(tag, {}, {useColor: false})} {tagText}\n \n )\n );\n}\n","import extract from 'flarum/utils/extract';\nimport tagLabel from './tagLabel';\nimport sortTags from '../utils/sortTags';\n\nexport default function tagsLabel(tags, attrs = {}) {\n const children = [];\n const link = extract(attrs, 'link');\n\n attrs.className = 'TagsLabel ' + (attrs.className || '');\n\n if (tags) {\n sortTags(tags).forEach(tag => {\n if (tag || tags.length === 1) {\n children.push(tagLabel(tag, {link}));\n }\n });\n } else {\n children.push(tagLabel());\n }\n\n return {children};\n}\n","module.exports = flarum.core.compat['components/Button'];","export default function _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}","import Model from 'flarum/Model';\nimport mixin from 'flarum/utils/mixin';\nimport computed from 'flarum/utils/computed';\n\nexport default class Tag extends mixin(Model, {\n name: Model.attribute('name'),\n slug: Model.attribute('slug'),\n description: Model.attribute('description'),\n\n color: Model.attribute('color'),\n backgroundUrl: Model.attribute('backgroundUrl'),\n backgroundMode: Model.attribute('backgroundMode'),\n icon: Model.attribute('icon'),\n\n position: Model.attribute('position'),\n parent: Model.hasOne('parent'),\n defaultSort: Model.attribute('defaultSort'),\n isChild: Model.attribute('isChild'),\n isHidden: Model.attribute('isHidden'),\n\n discussionCount: Model.attribute('discussionCount'),\n lastPostedAt: Model.attribute('lastPostedAt', Model.transformDate),\n lastPostedDiscussion: Model.hasOne('lastPostedDiscussion'),\n\n isRestricted: Model.attribute('isRestricted'),\n canStartDiscussion: Model.attribute('canStartDiscussion'),\n canAddToDiscussion: Model.attribute('canAddToDiscussion'),\n\n isPrimary: computed('position', 'parent', (position, parent) => position !== null && parent === false)\n}) {}\n","module.exports = flarum.core.compat['utils/extract'];","module.exports = flarum.core.compat['utils/classList'];","module.exports = flarum.core.compat['components/PermissionGrid'];","module.exports = flarum.core.compat['utils/mixin'];","module.exports = flarum.core.compat['utils/computed'];","module.exports = flarum.core.compat['components/Page'];","module.exports = flarum.core.compat['components/Modal'];","import sortTags from './utils/sortTags';\nimport Tag from './models/Tag';\nimport tagsLabel from './helpers/tagsLabel';\nimport tagIcon from './helpers/tagIcon';\nimport tagLabel from './helpers/tagLabel';\n\nexport default {\n 'tags/utils/sortTags': sortTags,\n 'tags/models/Tag': Tag,\n 'tags/helpers/tagsLabel': tagsLabel,\n 'tags/helpers/tagIcon': tagIcon,\n 'tags/helpers/tagLabel': tagLabel\n};\n","module.exports = flarum.core;","import { extend, override } from 'flarum/extend';\nimport PermissionGrid from 'flarum/components/PermissionGrid';\nimport PermissionDropdown from 'flarum/components/PermissionDropdown';\nimport Dropdown from 'flarum/components/Dropdown';\nimport Button from 'flarum/components/Button';\n\nimport tagLabel from '../common/helpers/tagLabel';\nimport tagIcon from '../common/helpers/tagIcon';\nimport sortTags from '../common/utils/sortTags';\n\nexport default function() {\n override(app, 'getRequiredPermissions', (original, permission) => {\n const tagPrefix = permission.match(/^tag\\d+\\./);\n\n if (tagPrefix) {\n const globalPermission = permission.substr(tagPrefix[0].length);\n\n const required = original(globalPermission);\n\n return required.map(required => tagPrefix[0] + required);\n }\n\n return original(permission);\n });\n\n extend(PermissionGrid.prototype, 'scopeItems', items => {\n sortTags(app.store.all('tags'))\n .filter(tag => tag.isRestricted())\n .forEach(tag => items.add('tag' + tag.id(), {\n label: tagLabel(tag),\n onremove: () => tag.save({isRestricted: false}),\n render: item => {\n if (item.permission === 'viewDiscussions'\n || item.permission === 'startDiscussion'\n || (item.permission && item.permission.indexOf('discussion.') === 0)) {\n return PermissionDropdown.component({\n permission: 'tag' + tag.id() + '.' + item.permission,\n allowGuest: item.allowGuest\n });\n }\n\n return '';\n }\n }));\n });\n\n extend(PermissionGrid.prototype, 'scopeControlItems', items => {\n const tags = sortTags(app.store.all('tags').filter(tag => !tag.isRestricted()));\n\n if (tags.length) {\n items.add('tag', Dropdown.component({\n className: 'Dropdown--restrictByTag',\n buttonClassName: 'Button Button--text',\n label: app.translator.trans('flarum-tags.admin.permissions.restrict_by_tag_heading'),\n icon: 'fas fa-plus',\n caretIcon: null,\n children: tags.map(tag => Button.component({\n icon: true,\n children: [tagIcon(tag, {className: 'Button-icon'}), ' ', tag.name()],\n onclick: () => tag.save({isRestricted: true})\n }))\n }));\n }\n });\n}\n","import { extend } from 'flarum/extend';\nimport PermissionGrid from 'flarum/components/PermissionGrid';\n\nexport default function() {\n extend(PermissionGrid.prototype, 'moderateItems', items => {\n items.add('tag', {\n icon: 'fas fa-tag',\n label: app.translator.trans('flarum-tags.admin.permissions.tag_discussions_label'),\n permission: 'discussion.tag'\n }, 95);\n });\n}\n","/*\n * HTML5Sortable package\n * https://github.com/lukasoppermann/html5sortable\n *\n * Maintained by Lukas Oppermann \n *\n * Released under the MIT license.\n */\n/**\n * Get or set data on element\n * @param {HTMLElement} element\n * @param {string} key\n * @param {any} value\n * @return {*}\n */\nfunction addData(element, key, value) {\n if (value === undefined) {\n return element && element.h5s && element.h5s.data && element.h5s.data[key];\n }\n else {\n element.h5s = element.h5s || {};\n element.h5s.data = element.h5s.data || {};\n element.h5s.data[key] = value;\n }\n}\n/**\n * Remove data from element\n * @param {HTMLElement} element\n */\nfunction removeData(element) {\n if (element.h5s) {\n delete element.h5s.data;\n }\n}\n\n/* eslint-env browser */\n/**\n * Filter only wanted nodes\n * @param {NodeList|HTMLCollection|Array} nodes\n * @param {String} selector\n * @returns {Array}\n */\nvar _filter = (function (nodes, selector) {\n if (!(nodes instanceof NodeList || nodes instanceof HTMLCollection || nodes instanceof Array)) {\n throw new Error('You must provide a nodeList/HTMLCollection/Array of elements to be filtered.');\n }\n if (typeof selector !== 'string') {\n return Array.from(nodes);\n }\n return Array.from(nodes).filter(function (item) { return item.nodeType === 1 && item.matches(selector); });\n});\n\n/* eslint-env browser */\nvar stores = new Map();\n/**\n * Stores data & configurations per Sortable\n * @param {Object} config\n */\nvar Store = /** @class */ (function () {\n function Store() {\n this._config = new Map(); // eslint-disable-line no-undef\n this._placeholder = undefined; // eslint-disable-line no-undef\n this._data = new Map(); // eslint-disable-line no-undef\n }\n Object.defineProperty(Store.prototype, \"config\", {\n /**\n * get the configuration map of a class instance\n * @method config\n * @return {object}\n */\n get: function () {\n // transform Map to object\n var config = {};\n this._config.forEach(function (value, key) {\n config[key] = value;\n });\n // return object\n return config;\n },\n /**\n * set the configuration of a class instance\n * @method config\n * @param {object} config object of configurations\n */\n set: function (config) {\n if (typeof config !== 'object') {\n throw new Error('You must provide a valid configuration object to the config setter.');\n }\n // combine config with default\n var mergedConfig = Object.assign({}, config);\n // add config to map\n this._config = new Map(Object.entries(mergedConfig));\n },\n enumerable: true,\n configurable: true\n });\n /**\n * set individual configuration of a class instance\n * @method setConfig\n * @param key valid configuration key\n * @param value any value\n * @return void\n */\n Store.prototype.setConfig = function (key, value) {\n if (!this._config.has(key)) {\n throw new Error(\"Trying to set invalid configuration item: \" + key);\n }\n // set config\n this._config.set(key, value);\n };\n /**\n * get an individual configuration of a class instance\n * @method getConfig\n * @param key valid configuration key\n * @return any configuration value\n */\n Store.prototype.getConfig = function (key) {\n if (!this._config.has(key)) {\n throw new Error(\"Invalid configuration item requested: \" + key);\n }\n return this._config.get(key);\n };\n Object.defineProperty(Store.prototype, \"placeholder\", {\n /**\n * get the placeholder for a class instance\n * @method placeholder\n * @return {HTMLElement|null}\n */\n get: function () {\n return this._placeholder;\n },\n /**\n * set the placeholder for a class instance\n * @method placeholder\n * @param {HTMLElement} placeholder\n * @return {void}\n */\n set: function (placeholder) {\n if (!(placeholder instanceof HTMLElement) && placeholder !== null) {\n throw new Error('A placeholder must be an html element or null.');\n }\n this._placeholder = placeholder;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * set an data entry\n * @method setData\n * @param {string} key\n * @param {any} value\n * @return {void}\n */\n Store.prototype.setData = function (key, value) {\n if (typeof key !== 'string') {\n throw new Error(\"The key must be a string.\");\n }\n this._data.set(key, value);\n };\n /**\n * get an data entry\n * @method getData\n * @param {string} key an existing key\n * @return {any}\n */\n Store.prototype.getData = function (key) {\n if (typeof key !== 'string') {\n throw new Error(\"The key must be a string.\");\n }\n return this._data.get(key);\n };\n /**\n * delete an data entry\n * @method deleteData\n * @param {string} key an existing key\n * @return {boolean}\n */\n Store.prototype.deleteData = function (key) {\n if (typeof key !== 'string') {\n throw new Error(\"The key must be a string.\");\n }\n return this._data.delete(key);\n };\n return Store;\n}());\n/**\n * @param {HTMLElement} sortableElement\n * @returns {Class: Store}\n */\nvar store = (function (sortableElement) {\n // if sortableElement is wrong type\n if (!(sortableElement instanceof HTMLElement)) {\n throw new Error('Please provide a sortable to the store function.');\n }\n // create new instance if not avilable\n if (!stores.has(sortableElement)) {\n stores.set(sortableElement, new Store());\n }\n // return instance\n return stores.get(sortableElement);\n});\n\n/**\n * @param {Array|HTMLElement} element\n * @param {Function} callback\n * @param {string} event\n */\nfunction addEventListener(element, eventName, callback) {\n if (element instanceof Array) {\n for (var i = 0; i < element.length; ++i) {\n addEventListener(element[i], eventName, callback);\n }\n return;\n }\n element.addEventListener(eventName, callback);\n store(element).setData(\"event\" + eventName, callback);\n}\n/**\n * @param {Array|HTMLElement} element\n * @param {string} eventName\n */\nfunction removeEventListener(element, eventName) {\n if (element instanceof Array) {\n for (var i = 0; i < element.length; ++i) {\n removeEventListener(element[i], eventName);\n }\n return;\n }\n element.removeEventListener(eventName, store(element).getData(\"event\" + eventName));\n store(element).deleteData(\"event\" + eventName);\n}\n\n/**\n * @param {Array|HTMLElement} element\n * @param {string} attribute\n * @param {string} value\n */\nfunction addAttribute(element, attribute, value) {\n if (element instanceof Array) {\n for (var i = 0; i < element.length; ++i) {\n addAttribute(element[i], attribute, value);\n }\n return;\n }\n element.setAttribute(attribute, value);\n}\n/**\n * @param {Array|HTMLElement} element\n * @param {string} attribute\n */\nfunction removeAttribute(element, attribute) {\n if (element instanceof Array) {\n for (var i = 0; i < element.length; ++i) {\n removeAttribute(element[i], attribute);\n }\n return;\n }\n element.removeAttribute(attribute);\n}\n\n/**\n * @param {HTMLElement} element\n * @returns {Object}\n */\nvar _offset = (function (element) {\n if (!element.parentElement || element.getClientRects().length === 0) {\n throw new Error('target element must be part of the dom');\n }\n var rect = element.getClientRects()[0];\n return {\n left: rect.left + window.pageXOffset,\n right: rect.right + window.pageXOffset,\n top: rect.top + window.pageYOffset,\n bottom: rect.bottom + window.pageYOffset\n };\n});\n\n/**\n * Creates and returns a new debounced version of the passed function which will postpone its execution until after wait milliseconds have elapsed\n * @param {Function} func to debounce\n * @param {number} time to wait before calling function with latest arguments, 0 - no debounce\n * @returns {function} - debounced function\n */\nvar _debounce = (function (func, wait) {\n if (wait === void 0) { wait = 0; }\n var timeout;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n clearTimeout(timeout);\n timeout = setTimeout(function () {\n func.apply(void 0, args);\n }, wait);\n };\n});\n\n/* eslint-env browser */\n/**\n * Get position of the element relatively to its sibling elements\n * @param {HTMLElement} element\n * @returns {number}\n */\nvar _index = (function (element, elementList) {\n if (!(element instanceof HTMLElement) || !(elementList instanceof NodeList || elementList instanceof HTMLCollection || elementList instanceof Array)) {\n throw new Error('You must provide an element and a list of elements.');\n }\n return Array.from(elementList).indexOf(element);\n});\n\n/* eslint-env browser */\n/**\n * Test whether element is in DOM\n * @param {HTMLElement} element\n * @returns {boolean}\n */\nvar isInDom = (function (element) {\n if (!(element instanceof HTMLElement)) {\n throw new Error('Element is not a node element.');\n }\n return element.parentNode !== null;\n});\n\n/* eslint-env browser */\n/**\n * Insert node before or after target\n * @param {HTMLElement} referenceNode - reference element\n * @param {HTMLElement} newElement - element to be inserted\n * @param {String} position - insert before or after reference element\n */\nvar insertNode = function (referenceNode, newElement, position) {\n if (!(referenceNode instanceof HTMLElement) || !(referenceNode.parentElement instanceof HTMLElement)) {\n throw new Error('target and element must be a node');\n }\n referenceNode.parentElement.insertBefore(newElement, (position === 'before' ? referenceNode : referenceNode.nextElementSibling));\n};\n/**\n * Insert before target\n * @param {HTMLElement} target\n * @param {HTMLElement} element\n */\nvar insertBefore = function (target, element) { return insertNode(target, element, 'before'); };\n/**\n * Insert after target\n * @param {HTMLElement} target\n * @param {HTMLElement} element\n */\nvar insertAfter = function (target, element) { return insertNode(target, element, 'after'); };\n\n/* eslint-env browser */\n/**\n * Filter only wanted nodes\n * @param {HTMLElement} sortableContainer\n * @param {Function} customSerializer\n * @returns {Array}\n */\nvar _serialize = (function (sortableContainer, customItemSerializer, customContainerSerializer) {\n if (customItemSerializer === void 0) { customItemSerializer = function (serializedItem, sortableContainer) { return serializedItem; }; }\n if (customContainerSerializer === void 0) { customContainerSerializer = function (serializedContainer) { return serializedContainer; }; }\n // check for valid sortableContainer\n if (!(sortableContainer instanceof HTMLElement) || !sortableContainer.isSortable === true) {\n throw new Error('You need to provide a sortableContainer to be serialized.');\n }\n // check for valid serializers\n if (typeof customItemSerializer !== 'function' || typeof customContainerSerializer !== 'function') {\n throw new Error('You need to provide a valid serializer for items and the container.');\n }\n // get options\n var options = addData(sortableContainer, 'opts');\n var item = options.items;\n // serialize container\n var items = _filter(sortableContainer.children, item);\n var serializedItems = items.map(function (item) {\n return {\n parent: sortableContainer,\n node: item,\n html: item.outerHTML,\n index: _index(item, items)\n };\n });\n // serialize container\n var container = {\n node: sortableContainer,\n itemCount: serializedItems.length\n };\n return {\n container: customContainerSerializer(container),\n items: serializedItems.map(function (item) { return customItemSerializer(item, sortableContainer); })\n };\n});\n\n/* eslint-env browser */\n/**\n * create a placeholder element\n * @param {HTMLElement} sortableElement a single sortable\n * @param {string|undefined} placeholder a string representing an html element\n * @param {string} placeholderClasses a string representing the classes that should be added to the placeholder\n */\nvar _makePlaceholder = (function (sortableElement, placeholder, placeholderClass) {\n var _a;\n if (placeholderClass === void 0) { placeholderClass = 'sortable-placeholder'; }\n if (!(sortableElement instanceof HTMLElement)) {\n throw new Error('You must provide a valid element as a sortable.');\n }\n // if placeholder is not an element\n if (!(placeholder instanceof HTMLElement) && placeholder !== undefined) {\n throw new Error('You must provide a valid element as a placeholder or set ot to undefined.');\n }\n // if no placeholder element is given\n if (placeholder === undefined) {\n if (['UL', 'OL'].includes(sortableElement.tagName)) {\n placeholder = document.createElement('li');\n }\n else if (['TABLE', 'TBODY'].includes(sortableElement.tagName)) {\n placeholder = document.createElement('tr');\n // set colspan to always all rows, otherwise the item can only be dropped in first column\n placeholder.innerHTML = '';\n }\n else {\n placeholder = document.createElement('div');\n }\n }\n // add classes to placeholder\n if (typeof placeholderClass === 'string') {\n (_a = placeholder.classList).add.apply(_a, placeholderClass.split(' '));\n }\n return placeholder;\n});\n\n/* eslint-env browser */\n/**\n * Get height of an element including padding\n * @param {HTMLElement} element an dom element\n */\nvar _getElementHeight = (function (element) {\n if (!(element instanceof HTMLElement)) {\n throw new Error('You must provide a valid dom element');\n }\n // get calculated style of element\n var style = window.getComputedStyle(element);\n // pick applicable properties, convert to int and reduce by adding\n return ['height', 'padding-top', 'padding-bottom']\n .map(function (key) {\n var int = parseInt(style.getPropertyValue(key), 10);\n return isNaN(int) ? 0 : int;\n })\n .reduce(function (sum, value) { return sum + value; });\n});\n\n/* eslint-env browser */\n/**\n * get handle or return item\n * @param {Array} items\n * @param {string} selector\n */\nvar _getHandles = (function (items, selector) {\n if (!(items instanceof Array)) {\n throw new Error('You must provide a Array of HTMLElements to be filtered.');\n }\n if (typeof selector !== 'string') {\n return items;\n }\n return items\n // remove items without handle from array\n .filter(function (item) {\n return item.querySelector(selector) instanceof HTMLElement ||\n (item.shadowRoot && item.shadowRoot.querySelector(selector) instanceof HTMLElement);\n })\n // replace item with handle in array\n .map(function (item) {\n return item.querySelector(selector) || (item.shadowRoot && item.shadowRoot.querySelector(selector));\n });\n});\n\n/**\n * @param {Event} event\n * @returns {HTMLElement}\n */\nvar getEventTarget = (function (event) {\n return (event.composedPath && event.composedPath()[0]) || event.target;\n});\n\n/* eslint-env browser */\n/**\n * defaultDragImage returns the current item as dragged image\n * @param {HTMLElement} draggedElement - the item that the user drags\n * @param {object} elementOffset - an object with the offsets top, left, right & bottom\n * @param {Event} event - the original drag event object\n * @return {object} with element, posX and posY properties\n */\nvar defaultDragImage = function (draggedElement, elementOffset, event) {\n return {\n element: draggedElement,\n posX: event.pageX - elementOffset.left,\n posY: event.pageY - elementOffset.top\n };\n};\n/**\n * attaches an element as the drag image to an event\n * @param {Event} event - the original drag event object\n * @param {HTMLElement} draggedElement - the item that the user drags\n * @param {Function} customDragImage - function to create a custom dragImage\n * @return void\n */\nvar setDragImage = (function (event, draggedElement, customDragImage) {\n // check if event is provided\n if (!(event instanceof Event)) {\n throw new Error('setDragImage requires a DragEvent as the first argument.');\n }\n // check if draggedElement is provided\n if (!(draggedElement instanceof HTMLElement)) {\n throw new Error('setDragImage requires the dragged element as the second argument.');\n }\n // set default function of none provided\n if (!customDragImage) {\n customDragImage = defaultDragImage;\n }\n // check if setDragImage method is available\n if (event.dataTransfer && event.dataTransfer.setDragImage) {\n // get the elements offset\n var elementOffset = _offset(draggedElement);\n // get the dragImage\n var dragImage = customDragImage(draggedElement, elementOffset, event);\n // check if custom function returns correct values\n if (!(dragImage.element instanceof HTMLElement) || typeof dragImage.posX !== 'number' || typeof dragImage.posY !== 'number') {\n throw new Error('The customDragImage function you provided must return and object with the properties element[string], posX[integer], posY[integer].');\n }\n // needs to be set for HTML5 drag & drop to work\n event.dataTransfer.effectAllowed = 'copyMove';\n // Firefox requires it to use the event target's id for the data\n event.dataTransfer.setData('text/plain', getEventTarget(event).id);\n // set the drag image on the event\n event.dataTransfer.setDragImage(dragImage.element, dragImage.posX, dragImage.posY);\n }\n});\n\n/**\n * Check if curList accepts items from destList\n * @param {sortable} destination the container an item is move to\n * @param {sortable} origin the container an item comes from\n */\nvar _listsConnected = (function (destination, origin) {\n // check if valid sortable\n if (destination.isSortable === true) {\n var acceptFrom = store(destination).getConfig('acceptFrom');\n // check if acceptFrom is valid\n if (acceptFrom !== null && acceptFrom !== false && typeof acceptFrom !== 'string') {\n throw new Error('HTML5Sortable: Wrong argument, \"acceptFrom\" must be \"null\", \"false\", or a valid selector string.');\n }\n if (acceptFrom !== null) {\n return acceptFrom !== false && acceptFrom.split(',').filter(function (sel) {\n return sel.length > 0 && origin.matches(sel);\n }).length > 0;\n }\n // drop in same list\n if (destination === origin) {\n return true;\n }\n // check if lists are connected with connectWith\n if (store(destination).getConfig('connectWith') !== undefined && store(destination).getConfig('connectWith') !== null) {\n return store(destination).getConfig('connectWith') === store(origin).getConfig('connectWith');\n }\n }\n return false;\n});\n\n/**\n * default configurations\n */\nvar defaultConfiguration = {\n items: null,\n // deprecated\n connectWith: null,\n // deprecated\n disableIEFix: null,\n acceptFrom: null,\n copy: false,\n placeholder: null,\n placeholderClass: 'sortable-placeholder',\n draggingClass: 'sortable-dragging',\n hoverClass: false,\n debounce: 0,\n throttleTime: 100,\n maxItems: 0,\n itemSerializer: undefined,\n containerSerializer: undefined,\n customDragImage: null\n};\n\n/**\n * make sure a function is only called once within the given amount of time\n * @param {Function} fn the function to throttle\n * @param {number} threshold time limit for throttling\n */\n// must use function to keep this context\nfunction _throttle (fn, threshold) {\n var _this = this;\n if (threshold === void 0) { threshold = 250; }\n // check function\n if (typeof fn !== 'function') {\n throw new Error('You must provide a function as the first argument for throttle.');\n }\n // check threshold\n if (typeof threshold !== 'number') {\n throw new Error('You must provide a number as the second argument for throttle.');\n }\n var lastEventTimestamp = null;\n return function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var now = Date.now();\n if (lastEventTimestamp === null || now - lastEventTimestamp >= threshold) {\n lastEventTimestamp = now;\n fn.apply(_this, args);\n }\n };\n}\n\n/* eslint-env browser */\n/**\n * enable or disable hoverClass on mouseenter/leave if container Items\n * @param {sortable} sortableContainer a valid sortableContainer\n * @param {boolean} enable enable or disable event\n */\n// export default (sortableContainer: sortable, enable: boolean) => {\nvar enableHoverClass = (function (sortableContainer, enable) {\n if (typeof store(sortableContainer).getConfig('hoverClass') === 'string') {\n var hoverClasses_1 = store(sortableContainer).getConfig('hoverClass').split(' ');\n // add class on hover\n if (enable === true) {\n addEventListener(sortableContainer, 'mousemove', _throttle(function (event) {\n // check of no mouse button was pressed when mousemove started == no drag\n if (event.buttons === 0) {\n _filter(sortableContainer.children, store(sortableContainer).getConfig('items')).forEach(function (item) {\n var _a, _b;\n if (item !== event.target) {\n (_a = item.classList).remove.apply(_a, hoverClasses_1);\n }\n else {\n (_b = item.classList).add.apply(_b, hoverClasses_1);\n }\n });\n }\n }, store(sortableContainer).getConfig('throttleTime')));\n // remove class on leave\n addEventListener(sortableContainer, 'mouseleave', function () {\n _filter(sortableContainer.children, store(sortableContainer).getConfig('items')).forEach(function (item) {\n var _a;\n (_a = item.classList).remove.apply(_a, hoverClasses_1);\n });\n });\n // remove events\n }\n else {\n removeEventListener(sortableContainer, 'mousemove');\n removeEventListener(sortableContainer, 'mouseleave');\n }\n }\n});\n\n/* eslint-env browser */\n/*\n * variables global to the plugin\n */\nvar dragging;\nvar draggingHeight;\n/*\n * Keeps track of the initialy selected list, where 'dragstart' event was triggered\n * It allows us to move the data in between individual Sortable List instances\n */\n// Origin List - data from before any item was changed\nvar originContainer;\nvar originIndex;\nvar originElementIndex;\nvar originItemsBeforeUpdate;\n// Previous Sortable Container - we dispatch as sortenter event when a\n// dragged item enters a sortableContainer for the first time\nvar previousContainer;\n// Destination List - data from before any item was changed\nvar destinationItemsBeforeUpdate;\n/**\n * remove event handlers from items\n * @param {Array|NodeList} items\n */\nvar _removeItemEvents = function (items) {\n removeEventListener(items, 'dragstart');\n removeEventListener(items, 'dragend');\n removeEventListener(items, 'dragover');\n removeEventListener(items, 'dragenter');\n removeEventListener(items, 'drop');\n removeEventListener(items, 'mouseenter');\n removeEventListener(items, 'mouseleave');\n};\n/**\n * _getDragging returns the current element to drag or\n * a copy of the element.\n * Is Copy Active for sortable\n * @param {HTMLElement} draggedItem - the item that the user drags\n * @param {HTMLElement} sortable a single sortable\n */\nvar _getDragging = function (draggedItem, sortable) {\n var ditem = draggedItem;\n if (store(sortable).getConfig('copy') === true) {\n ditem = draggedItem.cloneNode(true);\n addAttribute(ditem, 'aria-copied', 'true');\n draggedItem.parentElement.appendChild(ditem);\n ditem.style.display = 'none';\n ditem.oldDisplay = draggedItem.style.display;\n }\n return ditem;\n};\n/**\n * Remove data from sortable\n * @param {HTMLElement} sortable a single sortable\n */\nvar _removeSortableData = function (sortable) {\n removeData(sortable);\n removeAttribute(sortable, 'aria-dropeffect');\n};\n/**\n * Remove data from items\n * @param {Array|HTMLElement} items\n */\nvar _removeItemData = function (items) {\n removeAttribute(items, 'aria-grabbed');\n removeAttribute(items, 'aria-copied');\n removeAttribute(items, 'draggable');\n removeAttribute(items, 'role');\n};\n/**\n * find sortable from element. travels up parent element until found or null.\n * @param {HTMLElement} element a single sortable\n * @param {Event} event - the current event. We need to pass it to be able to\n * find Sortable whith shadowRoot (document fragment has no parent)\n */\nfunction findSortable(element, event) {\n if (event.composedPath) {\n return event.composedPath().find(function (el) { return el.isSortable; });\n }\n while (element.isSortable !== true) {\n element = element.parentElement;\n }\n return element;\n}\n/**\n * Dragging event is on the sortable element. finds the top child that\n * contains the element.\n * @param {HTMLElement} sortableElement a single sortable\n * @param {HTMLElement} element is that being dragged\n */\nfunction findDragElement(sortableElement, element) {\n var options = addData(sortableElement, 'opts');\n var items = _filter(sortableElement.children, options.items);\n var itemlist = items.filter(function (ele) {\n return ele.contains(element) || (ele.shadowRoot && ele.shadowRoot.contains(element));\n });\n return itemlist.length > 0 ? itemlist[0] : element;\n}\n/**\n * Destroy the sortable\n * @param {HTMLElement} sortableElement a single sortable\n */\nvar _destroySortable = function (sortableElement) {\n var opts = addData(sortableElement, 'opts') || {};\n var items = _filter(sortableElement.children, opts.items);\n var handles = _getHandles(items, opts.handle);\n // remove event handlers & data from sortable\n removeEventListener(sortableElement, 'dragover');\n removeEventListener(sortableElement, 'dragenter');\n removeEventListener(sortableElement, 'drop');\n // remove event data from sortable\n _removeSortableData(sortableElement);\n // remove event handlers & data from items\n removeEventListener(handles, 'mousedown');\n _removeItemEvents(items);\n _removeItemData(items);\n};\n/**\n * Enable the sortable\n * @param {HTMLElement} sortableElement a single sortable\n */\nvar _enableSortable = function (sortableElement) {\n var opts = addData(sortableElement, 'opts');\n var items = _filter(sortableElement.children, opts.items);\n var handles = _getHandles(items, opts.handle);\n addAttribute(sortableElement, 'aria-dropeffect', 'move');\n addData(sortableElement, '_disabled', 'false');\n addAttribute(handles, 'draggable', 'true');\n // @todo: remove this fix\n // IE FIX for ghost\n // can be disabled as it has the side effect that other events\n // (e.g. click) will be ignored\n if (opts.disableIEFix === false) {\n var spanEl = (document || window.document).createElement('span');\n if (typeof spanEl.dragDrop === 'function') {\n addEventListener(handles, 'mousedown', function () {\n if (items.indexOf(this) !== -1) {\n this.dragDrop();\n }\n else {\n var parent = this.parentElement;\n while (items.indexOf(parent) === -1) {\n parent = parent.parentElement;\n }\n parent.dragDrop();\n }\n });\n }\n }\n};\n/**\n * Disable the sortable\n * @param {HTMLElement} sortableElement a single sortable\n */\nvar _disableSortable = function (sortableElement) {\n var opts = addData(sortableElement, 'opts');\n var items = _filter(sortableElement.children, opts.items);\n var handles = _getHandles(items, opts.handle);\n addAttribute(sortableElement, 'aria-dropeffect', 'none');\n addData(sortableElement, '_disabled', 'true');\n addAttribute(handles, 'draggable', 'false');\n removeEventListener(handles, 'mousedown');\n};\n/**\n * Reload the sortable\n * @param {HTMLElement} sortableElement a single sortable\n * @description events need to be removed to not be double bound\n */\nvar _reloadSortable = function (sortableElement) {\n var opts = addData(sortableElement, 'opts');\n var items = _filter(sortableElement.children, opts.items);\n var handles = _getHandles(items, opts.handle);\n addData(sortableElement, '_disabled', 'false');\n // remove event handlers from items\n _removeItemEvents(items);\n removeEventListener(handles, 'mousedown');\n // remove event handlers from sortable\n removeEventListener(sortableElement, 'dragover');\n removeEventListener(sortableElement, 'dragenter');\n removeEventListener(sortableElement, 'drop');\n};\n/**\n * Public sortable object\n * @param {Array|NodeList} sortableElements\n * @param {object|string} options|method\n */\nfunction sortable(sortableElements, options) {\n // get method string to see if a method is called\n var method = String(options);\n options = options || {};\n // check if the user provided a selector instead of an element\n if (typeof sortableElements === 'string') {\n sortableElements = document.querySelectorAll(sortableElements);\n }\n // if the user provided an element, return it in an array to keep the return value consistant\n if (sortableElements instanceof HTMLElement) {\n sortableElements = [sortableElements];\n }\n sortableElements = Array.prototype.slice.call(sortableElements);\n if (/serialize/.test(method)) {\n return sortableElements.map(function (sortableContainer) {\n var opts = addData(sortableContainer, 'opts');\n return _serialize(sortableContainer, opts.itemSerializer, opts.containerSerializer);\n });\n }\n sortableElements.forEach(function (sortableElement) {\n if (/enable|disable|destroy/.test(method)) {\n return sortable[method](sortableElement);\n }\n // log deprecation\n ['connectWith', 'disableIEFix'].forEach(function (configKey) {\n if (options.hasOwnProperty(configKey) && options[configKey] !== null) {\n console.warn(\"HTML5Sortable: You are using the deprecated configuration \\\"\" + configKey + \"\\\". This will be removed in an upcoming version, make sure to migrate to the new options when updating.\");\n }\n });\n // merge options with default options\n options = Object.assign({}, defaultConfiguration, store(sortableElement).config, options);\n // init data store for sortable\n store(sortableElement).config = options;\n // set options on sortable\n addData(sortableElement, 'opts', options);\n // property to define as sortable\n sortableElement.isSortable = true;\n // reset sortable\n _reloadSortable(sortableElement);\n // initialize\n var listItems = _filter(sortableElement.children, options.items);\n // create element if user defined a placeholder element as a string\n var customPlaceholder;\n if (options.placeholder !== null && options.placeholder !== undefined) {\n var tempContainer = document.createElement(sortableElement.tagName);\n if (options.placeholder instanceof HTMLElement) {\n tempContainer.appendChild(options.placeholder);\n }\n else {\n tempContainer.innerHTML = options.placeholder;\n }\n customPlaceholder = tempContainer.children[0];\n }\n // add placeholder\n store(sortableElement).placeholder = _makePlaceholder(sortableElement, customPlaceholder, options.placeholderClass);\n addData(sortableElement, 'items', options.items);\n if (options.acceptFrom) {\n addData(sortableElement, 'acceptFrom', options.acceptFrom);\n }\n else if (options.connectWith) {\n addData(sortableElement, 'connectWith', options.connectWith);\n }\n _enableSortable(sortableElement);\n addAttribute(listItems, 'role', 'option');\n addAttribute(listItems, 'aria-grabbed', 'false');\n // enable hover class\n enableHoverClass(sortableElement, true);\n /*\n Handle drag events on draggable items\n Handle is set at the sortableElement level as it will bubble up\n from the item\n */\n addEventListener(sortableElement, 'dragstart', function (e) {\n // ignore dragstart events\n var target = getEventTarget(e);\n if (target.isSortable === true) {\n return;\n }\n e.stopImmediatePropagation();\n if ((options.handle && !target.matches(options.handle)) || target.getAttribute('draggable') === 'false') {\n return;\n }\n var sortableContainer = findSortable(target, e);\n var dragItem = findDragElement(sortableContainer, target);\n // grab values\n originItemsBeforeUpdate = _filter(sortableContainer.children, options.items);\n originIndex = originItemsBeforeUpdate.indexOf(dragItem);\n originElementIndex = _index(dragItem, sortableContainer.children);\n originContainer = sortableContainer;\n // add transparent clone or other ghost to cursor\n setDragImage(e, dragItem, options.customDragImage);\n // cache selsection & add attr for dragging\n draggingHeight = _getElementHeight(dragItem);\n dragItem.classList.add(options.draggingClass);\n dragging = _getDragging(dragItem, sortableContainer);\n addAttribute(dragging, 'aria-grabbed', 'true');\n // dispatch sortstart event on each element in group\n sortableContainer.dispatchEvent(new CustomEvent('sortstart', {\n detail: {\n origin: {\n elementIndex: originElementIndex,\n index: originIndex,\n container: originContainer\n },\n item: dragging,\n originalTarget: target\n }\n }));\n });\n /*\n We are capturing targetSortable before modifications with 'dragenter' event\n */\n addEventListener(sortableElement, 'dragenter', function (e) {\n var target = getEventTarget(e);\n var sortableContainer = findSortable(target, e);\n if (sortableContainer && sortableContainer !== previousContainer) {\n destinationItemsBeforeUpdate = _filter(sortableContainer.children, addData(sortableContainer, 'items'))\n .filter(function (item) { return item !== store(sortableElement).placeholder; });\n sortableContainer.dispatchEvent(new CustomEvent('sortenter', {\n detail: {\n origin: {\n elementIndex: originElementIndex,\n index: originIndex,\n container: originContainer\n },\n destination: {\n container: sortableContainer,\n itemsBeforeUpdate: destinationItemsBeforeUpdate\n },\n item: dragging,\n originalTarget: target\n }\n }));\n }\n previousContainer = sortableContainer;\n });\n /*\n * Dragend Event - https://developer.mozilla.org/en-US/docs/Web/Events/dragend\n * Fires each time dragEvent end, or ESC pressed\n * We are using it to clean up any draggable elements and placeholders\n */\n addEventListener(sortableElement, 'dragend', function (e) {\n if (!dragging) {\n return;\n }\n dragging.classList.remove(options.draggingClass);\n addAttribute(dragging, 'aria-grabbed', 'false');\n if (dragging.getAttribute('aria-copied') === 'true' && addData(dragging, 'dropped') !== 'true') {\n dragging.remove();\n }\n dragging.style.display = dragging.oldDisplay;\n delete dragging.oldDisplay;\n var visiblePlaceholder = Array.from(stores.values()).map(function (data) { return data.placeholder; })\n .filter(function (placeholder) { return placeholder instanceof HTMLElement; })\n .filter(isInDom)[0];\n if (visiblePlaceholder) {\n visiblePlaceholder.remove();\n }\n // dispatch sortstart event on each element in group\n sortableElement.dispatchEvent(new CustomEvent('sortstop', {\n detail: {\n origin: {\n elementIndex: originElementIndex,\n index: originIndex,\n container: originContainer\n },\n item: dragging\n }\n }));\n previousContainer = null;\n dragging = null;\n draggingHeight = null;\n });\n /*\n * Drop Event - https://developer.mozilla.org/en-US/docs/Web/Events/drop\n * Fires when valid drop target area is hit\n */\n addEventListener(sortableElement, 'drop', function (e) {\n if (!_listsConnected(sortableElement, dragging.parentElement)) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n addData(dragging, 'dropped', 'true');\n // get the one placeholder that is currently visible\n var visiblePlaceholder = Array.from(stores.values()).map(function (data) {\n return data.placeholder;\n })\n // filter only HTMLElements\n .filter(function (placeholder) { return placeholder instanceof HTMLElement; })\n // filter only elements in DOM\n .filter(isInDom)[0];\n // attach element after placeholder\n insertAfter(visiblePlaceholder, dragging);\n // remove placeholder from dom\n visiblePlaceholder.remove();\n /*\n * Fires Custom Event - 'sortstop'\n */\n sortableElement.dispatchEvent(new CustomEvent('sortstop', {\n detail: {\n origin: {\n elementIndex: originElementIndex,\n index: originIndex,\n container: originContainer\n },\n item: dragging\n }\n }));\n var placeholder = store(sortableElement).placeholder;\n var originItems = _filter(originContainer.children, options.items)\n .filter(function (item) { return item !== placeholder; });\n var destinationContainer = this.isSortable === true ? this : this.parentElement;\n var destinationItems = _filter(destinationContainer.children, addData(destinationContainer, 'items'))\n .filter(function (item) { return item !== placeholder; });\n var destinationElementIndex = _index(dragging, Array.from(dragging.parentElement.children)\n .filter(function (item) { return item !== placeholder; }));\n var destinationIndex = _index(dragging, destinationItems);\n /*\n * When a list item changed container lists or index within a list\n * Fires Custom Event - 'sortupdate'\n */\n if (originElementIndex !== destinationElementIndex || originContainer !== destinationContainer) {\n sortableElement.dispatchEvent(new CustomEvent('sortupdate', {\n detail: {\n origin: {\n elementIndex: originElementIndex,\n index: originIndex,\n container: originContainer,\n itemsBeforeUpdate: originItemsBeforeUpdate,\n items: originItems\n },\n destination: {\n index: destinationIndex,\n elementIndex: destinationElementIndex,\n container: destinationContainer,\n itemsBeforeUpdate: destinationItemsBeforeUpdate,\n items: destinationItems\n },\n item: dragging\n }\n }));\n }\n });\n var debouncedDragOverEnter = _debounce(function (sortableElement, element, pageY) {\n if (!dragging) {\n return;\n }\n // set placeholder height if forcePlaceholderSize option is set\n if (options.forcePlaceholderSize) {\n store(sortableElement).placeholder.style.height = draggingHeight + 'px';\n }\n // if element the draggedItem is dragged onto is within the array of all elements in list\n // (not only items, but also disabled, etc.)\n if (Array.from(sortableElement.children).indexOf(element) > -1) {\n var thisHeight = _getElementHeight(element);\n var placeholderIndex = _index(store(sortableElement).placeholder, element.parentElement.children);\n var thisIndex = _index(element, element.parentElement.children);\n // Check if `element` is bigger than the draggable. If it is, we have to define a dead zone to prevent flickering\n if (thisHeight > draggingHeight) {\n // Dead zone?\n var deadZone = thisHeight - draggingHeight;\n var offsetTop = _offset(element).top;\n if (placeholderIndex < thisIndex && pageY < offsetTop) {\n return;\n }\n if (placeholderIndex > thisIndex &&\n pageY > offsetTop + thisHeight - deadZone) {\n return;\n }\n }\n if (dragging.oldDisplay === undefined) {\n dragging.oldDisplay = dragging.style.display;\n }\n if (dragging.style.display !== 'none') {\n dragging.style.display = 'none';\n }\n // To avoid flicker, determine where to position the placeholder\n // based on where the mouse pointer is relative to the elements\n // vertical center.\n var placeAfter = false;\n try {\n var elementMiddle = _offset(element).top + element.offsetHeight / 2;\n placeAfter = pageY >= elementMiddle;\n }\n catch (e) {\n placeAfter = placeholderIndex < thisIndex;\n }\n if (placeAfter) {\n insertAfter(element, store(sortableElement).placeholder);\n }\n else {\n insertBefore(element, store(sortableElement).placeholder);\n }\n // get placeholders from all stores & remove all but current one\n Array.from(stores.values())\n // remove empty values\n .filter(function (data) { return data.placeholder !== undefined; })\n // foreach placeholder in array if outside of current sorableContainer -> remove from DOM\n .forEach(function (data) {\n if (data.placeholder !== store(sortableElement).placeholder) {\n data.placeholder.remove();\n }\n });\n }\n else {\n // get all placeholders from store\n var placeholders = Array.from(stores.values())\n .filter(function (data) { return data.placeholder !== undefined; })\n .map(function (data) {\n return data.placeholder;\n });\n // check if element is not in placeholders\n if (placeholders.indexOf(element) === -1 && sortableElement === element && !_filter(element.children, options.items).length) {\n placeholders.forEach(function (element) { return element.remove(); });\n element.appendChild(store(sortableElement).placeholder);\n }\n }\n }, options.debounce);\n // Handle dragover and dragenter events on draggable items\n var onDragOverEnter = function (e) {\n var element = e.target;\n var sortableElement = element.isSortable === true ? element : findSortable(element, e);\n element = findDragElement(sortableElement, element);\n if (!dragging || !_listsConnected(sortableElement, dragging.parentElement) || addData(sortableElement, '_disabled') === 'true') {\n return;\n }\n var options = addData(sortableElement, 'opts');\n if (parseInt(options.maxItems) && _filter(sortableElement.children, addData(sortableElement, 'items')).length >= parseInt(options.maxItems) && dragging.parentElement !== sortableElement) {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n e.dataTransfer.dropEffect = store(sortableElement).getConfig('copy') === true ? 'copy' : 'move';\n debouncedDragOverEnter(sortableElement, element, e.pageY);\n };\n addEventListener(listItems.concat(sortableElement), 'dragover', onDragOverEnter);\n addEventListener(listItems.concat(sortableElement), 'dragenter', onDragOverEnter);\n });\n return sortableElements;\n}\nsortable.destroy = function (sortableElement) {\n _destroySortable(sortableElement);\n};\nsortable.enable = function (sortableElement) {\n _enableSortable(sortableElement);\n};\nsortable.disable = function (sortableElement) {\n _disableSortable(sortableElement);\n};\n/* START.TESTS_ONLY */\nsortable.__testing = {\n // add internal methods here for testing purposes\n _data: addData,\n _removeItemEvents: _removeItemEvents,\n _removeItemData: _removeItemData,\n _removeSortableData: _removeSortableData\n};\n\nexport default sortable;\n","import Modal from 'flarum/components/Modal';\nimport Button from 'flarum/components/Button';\nimport ItemList from 'flarum/utils/ItemList';\nimport { slug } from 'flarum/utils/string';\n\nimport tagLabel from '../../common/helpers/tagLabel';\n\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 Modal {\n init() {\n super.init();\n\n this.tag = this.props.tag || app.store.createRecord('tags');\n\n this.name = m.prop(this.tag.name() || '');\n this.slug = m.prop(this.tag.slug() || '');\n this.description = m.prop(this.tag.description() || '');\n this.color = m.prop(this.tag.color() || '');\n this.icon = m.prop(this.tag.icon() || '');\n this.isHidden = m.prop(this.tag.isHidden() || false);\n }\n\n className() {\n return 'EditTagModal Modal--small';\n }\n\n title() {\n return this.name()\n ? tagLabel({\n name: this.name,\n color: this.color,\n icon: this.icon,\n })\n : app.translator.trans('flarum-tags.admin.edit_tag.title');\n }\n\n content() {\n return (\n
\n
\n {this.fields().toArray()}\n
\n
\n );\n }\n\n fields() {\n const items = new ItemList();\n\n items.add('name',
\n \n {\n this.name(e.target.value);\n this.slug(slug(e.target.value));\n }}/>\n
, 50);\n\n items.add('slug',
\n \n \n
, 40);\n\n items.add('description',
\n \n