{"version":3,"file":"js/decidim_core-d1e505f741ca62de2656.js","mappings":"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","sources":["webpack://app/webpack/runtime/chunk loaded","webpack://app/./app/packs/images/ sync ^\\.\\/.*$","webpack://app/./app/packs/src/decidim/decidim_application.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/input_multiple_mentions.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/input_character_counter.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/dropdowns_menus.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/icon.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/external_link.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/external_domain_warning.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/form_validator.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-comments/app/packs/src/decidim/comments/comments.component.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/input_emoji.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/dialog_mode.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/focus_guard.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/index.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/back_to_list.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/append_elements.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/form_remote.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/conferences.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/results_listing.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/impersonation.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/data_consent/consent_manager.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/data_consent/index.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/entrypoints/decidim_core.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/account_form.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/append_redirect_url_to_modals.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/callout.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/conversations.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/diff_mode_dropdown.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/floating_help.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/form_attachments.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/history.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/identity_selector_dialog.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/input_autojump.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/notifications.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/represent_user_group.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/responsive_horizontal_tabs.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/security/selfxss_warning.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/start_conversation_dialog.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/tooltip_keep_on_hover.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/user_registrations.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/vendor/modernizr.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/src/decidim/vendor/social-share-button.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-module-decidim_awesome-c4b0c7d76f58/app/packs/src/decidim/decidim_awesome/editors/editor.js","webpack://app/../usr/local/bundle/bundler/gems/decidim-a8779971800f/decidim-core/app/packs/images/ sync ^\\.\\/.*$","webpack://app/webpack/bootstrap","webpack://app/webpack/runtime/compat get default export","webpack://app/webpack/runtime/define property getters","webpack://app/webpack/runtime/global","webpack://app/webpack/runtime/hasOwnProperty shorthand","webpack://app/webpack/runtime/node module decorator","webpack://app/webpack/runtime/publicPath","webpack://app/webpack/runtime/jsonp chunk loading","webpack://app/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var map = {\n\t\"./bullet.png\": 39957\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 48999;","// This file is compiled inside Decidim core pack. Code can be added here and will be executed\n// as part of that pack\n\n// Load images\nrequire.context(\"../../images\", true)\n","import AutoComplete from \"src/decidim/autocomplete\";\n\nconst updateSubmitButton = ($fieldContainer, $selectedItems) => {\n const $form = $fieldContainer.closest(\"form\");\n if ($form.length < 1) {\n return;\n }\n\n const $submitButton = $form.find(\"button[type='submit']\");\n if ($selectedItems.children().length === 0) {\n $submitButton.prop(\"disabled\", true);\n } else {\n $submitButton.prop(\"disabled\", false);\n }\n}\n\n$(() => {\n const $fieldContainer = $(\".multiple-mentions\");\n if ($fieldContainer.length < 1) {\n return;\n }\n\n const allMessages = window.Decidim.config.get(\"messages\");\n const messages = allMessages.mentionsModal || {};\n\n const $searchInput = $(\"input\", $fieldContainer);\n const $selectedItems = $(`ul.${$searchInput.data().selected}`);\n const options = $fieldContainer.data();\n let selected = [];\n const iconsPath = window.Decidim.config.get(\"icons_path\");\n const removeLabel = messages.removeRecipient || \"Remove recipient %name%\";\n\n let emptyFocusElement = $fieldContainer[0].querySelector(\".empty-list\");\n if (!emptyFocusElement) {\n emptyFocusElement = document.createElement(\"div\");\n emptyFocusElement.tabIndex = \"-1\";\n emptyFocusElement.className = \"empty-list\";\n $selectedItems.before(emptyFocusElement);\n }\n\n updateSubmitButton($fieldContainer, $selectedItems);\n const autoComplete = new AutoComplete($searchInput[0], {\n dataMatchKeys: [\"name\", \"nickname\"],\n dataSource: (query, callback) => {\n $.post(window.Decidim.config.get(\"api_path\"), {\n \"query\": `\n {\n users(filter:{wildcard:\"${query}\",excludeIds:[]})\n {\n id,nickname,name,avatarUrl,__typename,...on UserGroup{membersCount},...on User{\n directMessagesEnabled\n }\n }\n }`\n }).then((response) => {\n callback(response.data.users);\n });\n },\n dataFilter: (list) => {\n return list.filter(\n (item) => !selected.includes(item.value.id)\n );\n },\n modifyResult: (element, value) => {\n $(element).html(`\n \"${value.name}\"\n ${value.nickname}\n ${value.name}\n `);\n if (value.directMessagesEnabled === \"false\") {\n $(element).addClass(\"disabled\");\n $(element).append(`${$searchInput.data().directMessagesDisabled}`);\n }\n if (value.membersCount) {\n $(element).append(`${value.membersCount}x `);\n }\n }\n });\n\n $searchInput.on(\"selection\", (event) => {\n const feedback = event.detail;\n const selection = feedback.selection;\n const id = selection.value.id;\n if (selected.length >= 9 || selection.value.directMessagesEnabled === \"false\") {\n return;\n }\n\n const label = removeLabel.replace(\"%name%\", selection.value.name);\n $selectedItems.append(`\n
  • \n \n \"${selection.value.name}\"\n ${selection.value.name}\n \n
  • \n `);\n\n autoComplete.setInput(\"\");\n selected.push(id);\n updateSubmitButton($fieldContainer, $selectedItems);\n\n $selectedItems.find(`*[data-remove=\"${id}\"]`).on(\"keypress click\", (evt) => {\n const target = evt.target.parentNode;\n if (target.tagName === \"LI\") {\n const focusElement = target.nextElementSibling || target.previousElementSibling || emptyFocusElement;\n\n selected = selected.filter((identifier) => identifier !== id);\n target.remove();\n\n updateSubmitButton($fieldContainer, $selectedItems);\n focusElement.focus();\n }\n })\n })\n})\n","/* eslint max-lines: [\"error\", {\"max\": 350, \"skipBlankLines\": true}] */\n\nconst COUNT_KEY = \"%count%\";\n// How often SR announces the message in relation to maximum characters. E.g.\n// if max characters is 1000, screen reader announces the remaining characters\n// every 100 (= 0.1 * 1000) characters. This will be \"floored\" to the closest\n// 100 if the maximum characters > 100. E.g. if max characters is 5500, the\n// threshold is 500 (= Math.floor(550 / 100) * 100). With 100 or less\n// characters, this ratio is omitted and the announce threshold is always set to\n// 10.\nconst SR_ANNOUNCE_THRESHOLD_RATIO = 0.1;\n// The number of characters left after which every keystroke will be announced.\nconst SR_ANNOUNCE_EVERY_THRESHOLD = 10;\nconst DEFAULT_MESSAGES = {\n charactersAtLeast: {\n one: `at least ${COUNT_KEY} character`,\n other: `at least ${COUNT_KEY} characters`\n },\n charactersLeft: {\n one: `${COUNT_KEY} character left`,\n other: `${COUNT_KEY} characters left`\n }\n};\nlet MESSAGES = DEFAULT_MESSAGES;\n\nexport default class InputCharacterCounter {\n static configureMessages(messages) {\n MESSAGES = $.extend(DEFAULT_MESSAGES, messages);\n }\n\n constructor(input) {\n this.$input = input;\n this.$target = $(this.$input.data(\"remaining-characters\"));\n this.minCharacters = parseInt(this.$input.attr(\"minlength\"), 10);\n this.maxCharacters = parseInt(this.$input.attr(\"maxlength\"), 10);\n this.describeByCounter = this.$input.attr(\"type\") !== \"hidden\" && typeof this.$input.attr(\"aria-describedby\") === \"undefined\";\n\n // Define the closest length for the input \"gaps\" defined by the threshold.\n if (this.maxCharacters > 10) {\n if (this.maxCharacters > 100) {\n this.announceThreshold = Math.floor(this.maxCharacters * SR_ANNOUNCE_THRESHOLD_RATIO);\n } else {\n this.announceThreshold = 10;\n }\n\n // The number of characters left after which every keystroke will be announced.\n this.announceEveryThreshold = SR_ANNOUNCE_EVERY_THRESHOLD;\n } else {\n this.announceThreshold = 1;\n this.announceEveryThreshold = 1;\n }\n\n let targetId = this.$target.attr(\"id\");\n if (typeof targetId === \"undefined\") {\n if (this.$input.attr(\"id\") && this.$input.attr(\"id\").length > 0) {\n targetId = `${this.$input.attr(\"id\")}_characters`;\n } else {\n targetId = `characters_${Math.random().toString(36).substr(2, 9)}`;\n }\n }\n\n if (this.$target.length > 0) {\n this.$target.attr(\"id\", targetId)\n } else {\n this.$target = $(``)\n\n // If input is a hidden for WYSIWYG editor add it at the end\n if (this.$input.parent().is(\".editor\")) {\n this.$input.parent().after(this.$target);\n }\n // Prefix and suffix columns are wrapped in columns, so put the\n // character counter before that.\n else if (\n this.$input.parent().is(\".columns\") &&\n this.$input.parent().parent().is(\".row\")\n ) {\n this.$input.parent().parent().after(this.$target);\n } else {\n this.$input.after(this.$target);\n }\n }\n\n if (this.$target.length > 0 && (this.maxCharacters > 0 || this.minCharacters > 0)) {\n // Create the screen reader target element. We don't want to constantly\n // announce every change to screen reader, only occasionally.\n this.$srTarget = $(\n ``\n );\n this.$target.before(this.$srTarget);\n this.$target.attr(\"aria-hidden\", \"true\");\n\n this.$userInput = this.$input;\n\n // In WYSIWYG editors (Quill) we need to find the active editor from the\n // DOM node. Quill has the experimental \"find\" method that should work\n // fine in this case\n if (Quill && this.$input.parent().is(\".editor\")) {\n // Wait until the next javascript loop so Quill editors are created\n setTimeout(() => {\n this.editor = Quill.find(this.$input.siblings(\".editor-container\")[0]);\n this.$userInput = $(this.editor.root);\n this.initialize();\n });\n } else {\n this.initialize();\n }\n }\n }\n\n initialize() {\n this.updateInputLength();\n this.previousInputLength = this.inputLength;\n\n this.bindEvents();\n this.setDescribedBy(true);\n }\n\n setDescribedBy(active) {\n if (!this.describeByCounter) {\n return;\n }\n\n if (active) {\n this.$userInput.attr(\"aria-describedby\", this.$srTarget.attr(\"id\"));\n } else {\n this.$userInput.removeAttr(\"aria-describedby\");\n }\n }\n\n bindEvents() {\n if (this.editor) {\n this.editor.on(\"text-change\", () => {\n this.handleInput();\n });\n } else {\n this.$userInput.on(\"input\", () => {\n this.handleInput();\n });\n }\n\n this.$userInput.on(\"keyup\", () => {\n this.updateStatus();\n });\n this.$userInput.on(\"focus\", () => {\n this.updateScreenReaderStatus();\n });\n this.$userInput.on(\"blur\", () => {\n this.updateScreenReaderStatus();\n this.setDescribedBy(true);\n });\n if (this.$userInput.get(0) !== null) {\n this.$userInput.get(0).addEventListener(\"emoji.added\", () => {\n this.updateStatus();\n });\n }\n this.updateStatus();\n this.updateScreenReaderStatus();\n }\n\n getInputLength() {\n return this.inputLength;\n }\n\n updateInputLength() {\n this.previousInputLength = this.inputLength;\n if (this.editor) {\n this.inputLength = this.editor.getLength();\n } else {\n this.inputLength = this.$input.val().length;\n }\n }\n\n handleInput() {\n this.updateInputLength();\n this.checkScreenReaderUpdate();\n // If the input is \"described by\" the character counter, some screen\n // readers (NVDA) announce the status twice when it is updated. By\n // removing the aria-describedby attribute while the user is typing makes\n // the screen reader announce the status only once.\n this.setDescribedBy(false);\n }\n\n /**\n * This compares the current inputLength to the previous value and decides\n * whether the user is currently adding or deleting characters from the view.\n *\n * @returns {String} The input direction either \"ins\" for insert or \"del\" for\n * delete.\n */\n getInputDirection() {\n if (this.inputLength < this.previousInputLength) {\n return \"del\";\n }\n\n return \"ins\";\n }\n\n getScreenReaderLength() {\n const currentLength = this.getInputLength();\n if (this.maxCharacters < 10) {\n return currentLength;\n } else if (this.maxCharacters - currentLength <= this.announceEveryThreshold) {\n return currentLength;\n }\n\n const srLength = currentLength - currentLength % this.announceThreshold;\n\n // Prevent the screen reader telling too many characters left if the user\n // deletes a characters. This can cause confusing experience e.g. when the\n // user is closing the maximum amount of characters, so if the previous\n // announcement was \"10 characters left\" and the user removes one character,\n // the screen reader would announce \"100 characters left\" next time (when\n // they actually have only 11 characters left). Similar when they are\n // deleting a character at 900 characters, the screen reader would announce\n // \"1000 characters left\" even when they only have 901 characters left.\n if (this.getInputDirection() === \"del\") {\n // The first branch makes sure that if the SR length matches the actual\n // length, it will be always announced.\n if (srLength === currentLength) {\n return srLength;\n // The second branch checks that if we are at the final threshold, we\n // should not announce \"0 characters left\" when the user deletes more than\n // the \"announce after every stroke\" limit (this.announceEveryThreshold).\n } else if (this.maxCharacters - srLength === this.announceThreshold) {\n return this.announcedAt || currentLength;\n // The third branch checks that when deleting characters, we should\n // announce the next threshold to get accurate annoucement. E.g. when we\n // have 750 characters left and the user deletes 100 characters at once,\n // we should announce \"700 characters left\" after that deletion.\n } else if (srLength < currentLength) {\n return srLength + this.announceThreshold;\n }\n // This fixes an issue in the following situation:\n // 1. 750 characters left\n // 2. Delete 100 characters in a row\n // 3. SR: \"800 characters left\" (actual 850)\n // 4. Type one additional character\n // 5. Without this, SR would announce \"900 characters left\" = confusing\n } else if (srLength < this.announcedAt) {\n return this.announcedAt;\n }\n\n return srLength;\n }\n\n getMessages(currentLength = null) {\n const showMessages = [];\n let inputLength = currentLength;\n if (inputLength === null) {\n inputLength = this.getInputLength()\n }\n\n if (this.minCharacters > 0) {\n let message = MESSAGES.charactersAtLeast.other;\n if (this.minCharacters === 1) {\n message = MESSAGES.charactersAtLeast.one;\n }\n showMessages.push(message.replace(COUNT_KEY, this.minCharacters));\n }\n\n if (this.maxCharacters > 0) {\n const remaining = this.maxCharacters - inputLength;\n let message = MESSAGES.charactersLeft.other;\n if (remaining === 1) {\n message = MESSAGES.charactersLeft.one;\n }\n this.$input[0].dispatchEvent(\n new CustomEvent(\"characterCounter\", {detail: {remaining: remaining}})\n );\n showMessages.push(message.replace(COUNT_KEY, remaining));\n }\n\n return showMessages;\n }\n\n updateStatus() {\n this.$target.text(this.getMessages().join(\", \"));\n }\n\n checkScreenReaderUpdate() {\n if (this.maxCharacters < 1) {\n return;\n }\n\n const currentLength = this.getScreenReaderLength();\n if (currentLength === this.announcedAt) {\n return;\n }\n\n this.announcedAt = currentLength;\n this.updateScreenReaderStatus(currentLength);\n }\n\n updateScreenReaderStatus(currentLength = null) {\n this.$srTarget.text(this.getMessages(currentLength).join(\", \"));\n }\n}\n\nconst createCharacterCounter = ($input) => {\n if (typeof $input !== \"undefined\" && $input.length) {\n $input.data(\"remaining-characters-counter\", new InputCharacterCounter($input));\n }\n}\n\n$(() => {\n $(\"input[type='text'], textarea, .editor>input[type='hidden']\").each((_i, elem) => {\n const $input = $(elem);\n\n if (!$input.is(\"[minlength]\") && !$input.is(\"[maxlength]\")) {\n return;\n }\n\n createCharacterCounter($input);\n });\n});\n\nexport {InputCharacterCounter, createCharacterCounter};\n","/* eslint-disable require-jsdoc */\n\n// This will apply some fixes for the Foundation dropdown menu element\n// according to W3C instructions at:\n// https://www.w3.org/TR/wai-aria-practices/examples/menu-button/menu-button-links.html\n//\n// NOTE:\n// This needs to run AFTER Foundation has been initialized because those\n// initializers will affect the drop down menu elements.\nexport default function fixDropdownMenus() {\n $(\"[data-dropdown-menu]\").each((_i, element) => {\n // This will break navigation on macOS VoiceOver app since it will let the\n // user to focus on the li element instead of the element where we\n // actually need the focus to be in.\n $(\"li.is-dropdown-submenu-parent\", element).removeAttr(\"aria-haspopup\").removeAttr(\"aria-label\");\n $(\"li.is-dropdown-submenu-parent > a:first\", element).removeAttr(\"aria-label\");\n // Foundation marks the wrong role for the submenu elements\n $(\"ul.is-dropdown-submenu\", element).attr(\"role\", \"menu\");\n })\n}\n\n// Ensure the first element is always focused when a dropdown is opened as\n// this would not always happen when using a screen reader. If this is not\n// done, the screen reader will stay quiet when the menu opens which can lead\n// to the blind user not understanding the menu has opened.\n$(() => {\n $(\"[data-dropdown-menu]\").on(\"show.zf.dropdownMenu\", (_i, element) => {\n $(\"li:first > a\", element).focus();\n });\n})\n","const DEFAULT_ATTRIBUTES = {\n role: \"img\",\n \"aria-hidden\": \"true\"\n};\n\n/**\n * Generates a Decidim icon element and returns it as a string.\n * @param {String} iconKey - the key of the icon to be generated\n * @param {Object} attributes - extra attributes to define for the icon SVG\n * @param {int} wait - number of milliseconds to wait before executing the function.\n * @private\n * @returns {Void} - Returns nothing.\n */\nexport default function icon(iconKey, attributes = {}) {\n const iconAttributes = $.extend(DEFAULT_ATTRIBUTES, attributes);\n const title = iconAttributes.title || iconAttributes.ariaLabel;\n Reflect.deleteProperty(iconAttributes, \"title\");\n\n const htmlAttributes = {\n \"class\": `icon icon--${iconKey}`\n };\n Object.keys(iconAttributes).forEach((key) => {\n // Convert the key to dash-format.\n const newKey = key.replace(/([A-Z])/g, (ucw) => `-${ucw[0].toLowerCase()}`);\n if (typeof htmlAttributes[key] === \"undefined\") {\n htmlAttributes[newKey] = iconAttributes[key];\n } else {\n htmlAttributes[newKey] = `${htmlAttributes[newKey]} ${iconAttributes[key]}`;\n }\n });\n\n const iconsPath = window.Decidim.config.get(\"icons_path\");\n const elHtml = ``;\n const $el = $(elHtml);\n if (title) {\n $el.prepend(`${title}`);\n } else {\n // This keeps accessibility audit tools happy\n $el.prepend(`${iconKey}`);\n // Force hidden if title is not defined\n htmlAttributes[\"aria-hidden\"] = \"true\";\n }\n $el.attr(htmlAttributes);\n\n return $(\"
    \").append($el).html();\n}\n","import icon from \"src/decidim/icon\"\n\nconst EXCLUDE_CLASSES = [\n \"card--list__data__icon\",\n \"footer-social__icon\",\n \"logo-cityhall\"\n];\nconst EXCLUDE_ANCESTOR_CLASSES = [\n \"editor-container\"\n]\nconst EXCLUDE_REL = [\"license\", \"decidim\"];\n\nconst DEFAULT_MESSAGES = {\n externalLink: \"External link\"\n};\nlet MESSAGES = DEFAULT_MESSAGES;\n\nexport default class ExternalLink {\n static configureMessages(messages) {\n MESSAGES = $.extend(DEFAULT_MESSAGES, messages);\n }\n\n constructor(link) {\n this.$link = link;\n\n this.setup();\n }\n\n setup() {\n if (EXCLUDE_CLASSES.some((cls) => this.$link.hasClass(cls))) {\n return;\n }\n if (EXCLUDE_ANCESTOR_CLASSES.some((cls) => this.$link.parents().hasClass(cls))) {\n return;\n }\n if (\n EXCLUDE_REL.some((rel) => {\n const linkRels = `${this.$link.attr(\"rel\")}`.split(\" \");\n return linkRels.indexOf(rel) > -1;\n })\n ) {\n return;\n }\n\n let $target = this.$link;\n if (this.$link[0].hasAttribute(\"data-external-link-target\")) {\n $target = $(this.$link.data(\"external-link-target\"), this.$link);\n if ($target.length < 1) {\n $target = this.$link;\n }\n }\n\n $target.addClass(\"external-link-container\");\n let spacer = \" \";\n if (this.$link[0].hasAttribute(\"data-external-link-spacer\")) {\n spacer = this.$link.data(\"external-link-spacer\");\n } else if ($target.text().trim().length < 1) {\n // Fixes image links extra space\n spacer = \"\";\n }\n\n $target.append(`${spacer}${this.generateElement()}`);\n }\n\n generateElement() {\n let content = `${this.generateIcon()}${this.generateScreenReaderLabel()}`;\n\n return `${content}`;\n }\n\n generateIcon() {\n return icon(\"external-link\");\n }\n\n generateScreenReaderLabel() {\n return `(${MESSAGES.externalLink})`;\n }\n}\n","/* eslint-disable require-jsdoc */\n\nexport default function updateExternalDomainLinks($target) {\n const whitelist = window.Decidim.config.get(\"external_domain_whitelist\")\n\n if (window.location.pathname === \"/link\") {\n return;\n }\n\n $(\"a\", $target).filter((_i, link) => {\n const $link = $(link);\n if (!$link[0].hasAttribute(\"href\") || $link.parents(\".editor-container\").length > 0) {\n return false;\n }\n\n const parts = $link.attr(\"href\").match(/^(([a-z]+):)?\\/\\/([^/:]+)(:[0-9]*)?(\\/.*)?$/) || null;\n if (!parts) {\n return false;\n }\n\n const domain = parts[3].replace(/^www\\./, \"\")\n if (whitelist.includes(domain)) {\n return false;\n }\n\n return true;\n }).each((_n, link) => {\n const $link = $(link);\n const externalHref = `/link?external_url=${encodeURIComponent($link.attr(\"href\"))}`;\n $link.attr(\"href\", externalHref)\n $link.attr(\"data-remote\", true)\n });\n}\n","const DEFAULT_MESSAGES = {\n correctErrors: \"There are errors on the form, please correct them.\"\n};\nlet MESSAGES = DEFAULT_MESSAGES;\n\nexport default class FormValidator {\n static configureMessages(messages) {\n MESSAGES = $.extend(DEFAULT_MESSAGES, messages);\n }\n\n constructor(form) {\n this.$form = form;\n\n this.$form.on(\"form-error.decidim\", () => {\n this.handleError();\n });\n }\n\n handleError() {\n this.announceFormError();\n\n $(\".is-invalid-input:first\", this.$form).focus();\n }\n\n /**\n * This announces immediately to the screen reader that there are errors on\n * the form that need to be fixed. Does not work on all screen readers but\n * works e.g. in Windows+Firefox+NVDA and macOS+Safari+VoiceOver\n * combinations.\n *\n * @returns {undefined}\n */\n announceFormError() {\n let $announce = $(\".sr-announce\", this.$form);\n if ($announce.length > 0) {\n $announce.remove();\n }\n $announce = $(\"
    \");\n $announce.attr(\"class\", \"sr-announce show-for-sr\");\n $announce.attr(\"aria-live\", \"assertive\");\n this.$form.prepend($announce);\n\n setTimeout(() => {\n $announce.text(MESSAGES.correctErrors);\n }, 100);\n }\n}\n\n$(() => {\n $(\"form\").each((_i, el) => {\n $(el).data(\"form-validator\", new FormValidator($(el)));\n });\n $(document).on(\"forminvalid.zf.abide\", function(_ev, form) {\n form.trigger(\"form-error.decidim\");\n })\n});\n","/* eslint id-length: [\"error\", { \"exceptions\": [\"$\"] }] */\n/* eslint max-lines: [\"error\", {\"max\": 350, \"skipBlankLines\": true}] */\n\n\n/**\n * A plain Javascript component that handles the comments.\n *\n * @class\n * @augments Component\n */\n\n// This is necessary for testing purposes\nconst $ = window.$;\n\nimport Rails from \"@rails/ujs\";\n\nimport { createCharacterCounter } from \"src/decidim/input_character_counter\"\nimport ExternalLink from \"src/decidim/external_link\"\nimport updateExternalDomainLinks from \"src/decidim/external_domain_warning\"\n\nexport default class CommentsComponent {\n constructor($element, config) {\n this.$element = $element;\n this.commentableGid = config.commentableGid;\n this.commentsUrl = config.commentsUrl;\n this.rootDepth = config.rootDepth;\n this.order = config.order;\n this.lastCommentId = config.lastCommentId;\n this.pollingInterval = config.pollingInterval || 15000;\n this.singleComment = config.singleComment;\n this.toggleTranslations = config.toggleTranslations;\n this.id = this.$element.attr(\"id\") || this._getUID();\n this.mounted = false;\n }\n\n /**\n * Handles the logic for mounting the component\n * @public\n * @returns {Void} - Returns nothing\n */\n mountComponent() {\n if (this.$element.length > 0 && !this.mounted) {\n this.mounted = true;\n this._initializeComments(this.$element);\n if (!this.singleComment) {\n $(\".add-comment textarea\", this.$element).prop(\"disabled\", true);\n this._fetchComments(() => {\n $(\".add-comment textarea\", this.$element).prop(\"disabled\", false);\n });\n }\n\n $(\".order-by__dropdown .is-submenu-item a\", this.$element).on(\"click.decidim-comments\", () => this._onInitOrder());\n }\n }\n\n /**\n * Handles the logic for unmounting the component\n * @public\n * @returns {Void} - Returns nothing\n */\n unmountComponent() {\n if (this.mounted) {\n this.mounted = false;\n this._stopPolling();\n\n $(\".add-comment .opinion-toggle .button\", this.$element).off(\"click.decidim-comments\");\n $(\".add-comment textarea\", this.$element).off(\"input.decidim-comments\");\n $(\".order-by__dropdown .is-submenu-item a\", this.$element).off(\"click.decidim-comments\");\n $(\".add-comment form\", this.$element).off(\"submit.decidim-comments\");\n $(\".add-comment textarea\", this.$element).each((_i, el) => el.removeEventListener(\"emoji.added\", this._onTextInput));\n }\n }\n\n /**\n * Adds a new thread to the comments section.\n * @public\n * @param {String} threadHtml - The HTML content for the thread.\n * @param {Boolean} fromCurrentUser - A boolean indicating whether the user\n * herself was the author of the new thread. Defaults to false.\n * @returns {Void} - Returns nothing\n */\n addThread(threadHtml, fromCurrentUser = false) {\n const $parent = $(\".comments:first\", this.$element);\n const $comment = $(threadHtml);\n const $threads = $(\".comment-threads\", this.$element);\n this._addComment($threads, $comment);\n this._finalizeCommentCreation($parent, fromCurrentUser);\n }\n\n /**\n * Adds a new reply to an existing comment.\n * @public\n * @param {Number} commentId - The ID of the comment for which to add the\n * reply to.\n * @param {String} replyHtml - The HTML content for the reply.\n * @param {Boolean} fromCurrentUser - A boolean indicating whether the user\n * herself was the author of the new reply. Defaults to false.\n * @returns {Void} - Returns nothing\n */\n addReply(commentId, replyHtml, fromCurrentUser = false) {\n const $parent = $(`#comment_${commentId}`);\n const $comment = $(replyHtml);\n const $replies = $(`#comment-${commentId}-replies`);\n this._addComment($replies, $comment);\n $replies.siblings(\".comment__additionalreply\").removeClass(\"hide\");\n this._finalizeCommentCreation($parent, fromCurrentUser);\n }\n\n /**\n * Generates a unique identifier for the form.\n * @private\n * @returns {String} - Returns a unique identifier\n */\n _getUID() {\n return `comments-${new Date().setUTCMilliseconds()}-${Math.floor(Math.random() * 10000000)}`;\n }\n\n /**\n * Initializes the comments for the given parent element.\n * @private\n * @param {jQuery} $parent The parent element to initialize.\n * @returns {Void} - Returns nothing\n */\n _initializeComments($parent) {\n $(\".add-comment\", $parent).each((_i, el) => {\n const $add = $(el);\n const $form = $(\"form\", $add);\n const $opinionButtons = $(\".opinion-toggle .button\", $add);\n const $text = $(\"textarea\", $form);\n\n $opinionButtons.on(\"click.decidim-comments\", this._onToggleOpinion);\n $text.on(\"input.decidim-comments\", this._onTextInput);\n\n $(document).trigger(\"attach-mentions-element\", [$text.get(0)]);\n\n $form.on(\"submit.decidim-comments\", () => {\n const $submit = $(\"button[type='submit']\", $form);\n\n $submit.attr(\"disabled\", \"disabled\");\n this._stopPolling();\n });\n\n if ($text.length && $text.get(0) !== null) {\n // Attach event to the DOM node, instead of the jQuery object\n $text.get(0).addEventListener(\"emoji.added\", this._onTextInput);\n }\n });\n }\n\n /**\n * Adds the given comment element to the given target element and\n * initializes it.\n * @private\n * @param {jQuery} $target - The target element to add the comment to.\n * @param {jQuery} $container - The comment container element to add.\n * @returns {Void} - Returns nothing\n */\n _addComment($target, $container) {\n let $comment = $(\".comment\", $container);\n if ($comment.length < 1) {\n // In case of a reply\n $comment = $container;\n }\n this.lastCommentId = parseInt($comment.data(\"comment-id\"), 10);\n\n $target.append($container);\n $container.foundation();\n this._initializeComments($container);\n createCharacterCounter($(\".add-comment textarea\", $container));\n $container.find('a[target=\"_blank\"]').each((_i, elem) => {\n const $link = $(elem);\n $link.data(\"external-link\", new ExternalLink($link));\n });\n updateExternalDomainLinks($container)\n }\n\n /**\n * Finalizes the new comment creation after the comment adding finishes\n * successfully.\n * @private\n * @param {jQuery} $parent - The parent comment element to finalize.\n * @param {Boolean} fromCurrentUser - A boolean indicating whether the user\n * herself was the author of the new comment.\n * @returns {Void} - Returns nothing\n */\n _finalizeCommentCreation($parent, fromCurrentUser) {\n if (fromCurrentUser) {\n const $add = $(\"> .add-comment\", $parent);\n const $text = $(\"textarea\", $add);\n const characterCounter = $text.data(\"remaining-characters-counter\");\n $text.val(\"\");\n if (characterCounter) {\n characterCounter.updateStatus();\n }\n if (!$add.parent().is(\".comments\")) {\n $add.addClass(\"hide\");\n }\n }\n\n // Restart the polling\n this._pollComments();\n }\n\n /**\n * Sets a timeout to poll new comments.\n * @private\n * @returns {Void} - Returns nothing\n */\n _pollComments() {\n this._stopPolling();\n\n this.pollTimeout = setTimeout(() => {\n this._fetchComments();\n }, this.pollingInterval);\n }\n\n /**\n * Sends an ajax request based on current\n * params to get comments for the component\n * @private\n * @param {Function} successCallback A callback that is called after a\n * successful fetch\n * @returns {Void} - Returns nothing\n */\n _fetchComments(successCallback = null) {\n Rails.ajax({\n url: this.commentsUrl,\n type: \"GET\",\n data: new URLSearchParams({\n \"commentable_gid\": this.commentableGid,\n \"root_depth\": this.rootDepth,\n \"order\": this.order,\n \"after\": this.lastCommentId,\n ...(this.toggleTranslations && { \"toggle_translations\": this.toggleTranslations }),\n ...(this.lastCommentId && { \"after\": this.lastCommentId })\n }),\n success: () => {\n if (successCallback) {\n successCallback();\n }\n this._pollComments();\n }\n });\n }\n\n /**\n * Stops polling for new comments.\n * @private\n * @returns {Void} - Returns nothing\n */\n _stopPolling() {\n if (this.pollTimeout) {\n clearTimeout(this.pollTimeout);\n }\n }\n\n /**\n * Sets the loading comments element visible in the view.\n * @private\n * @returns {Void} - Returns nothing\n */\n _setLoading() {\n const $container = $(\"> .comments-container\", this.$element);\n $(\"> .comments\", $container).addClass(\"hide\");\n $(\"> .loading-comments\", $container).removeClass(\"hide\");\n }\n\n /**\n * Event listener for the ordering links.\n * @private\n * @returns {Void} - Returns nothing\n */\n _onInitOrder() {\n this._stopPolling();\n this._setLoading();\n }\n\n /**\n * Event listener for the opinion toggle buttons.\n * @private\n * @param {Event} ev - The event object.\n * @returns {Void} - Returns nothing\n */\n _onToggleOpinion(ev) {\n let $btn = $(ev.target);\n if (!$btn.is(\".button\")) {\n $btn = $btn.parents(\".button\");\n }\n\n const $add = $btn.closest(\".add-comment\");\n const $form = $(\"form\", $add);\n const $opinionButtons = $(\".opinion-toggle .button\", $add);\n const $selectedState = $(\".opinion-toggle .selected-state\", $add);\n const $alignment = $(\".alignment-input\", $form);\n\n $opinionButtons.removeClass(\"is-active\").attr(\"aria-pressed\", \"false\");\n $btn.addClass(\"is-active\").attr(\"aria-pressed\", \"true\");\n\n if ($btn.is(\".opinion-toggle--ok\")) {\n $alignment.val(1);\n } else if ($btn.is(\".opinion-toggle--meh\")) {\n $alignment.val(0);\n } else if ($btn.is(\".opinion-toggle--ko\")) {\n $alignment.val(-1);\n }\n\n // Announce the selected state for the screen reader\n $selectedState.text($btn.data(\"selected-label\"));\n }\n\n /**\n * Event listener for the comment field text input.\n * @private\n * @param {Event} ev - The event object.\n * @returns {Void} - Returns nothing\n */\n _onTextInput(ev) {\n const $text = $(ev.target);\n const $add = $text.closest(\".add-comment\");\n const $form = $(\"form\", $add);\n const $submit = $(\"button[type='submit']\", $form);\n\n if ($text.val().length > 0) {\n $submit.removeAttr(\"disabled\");\n } else {\n $submit.attr(\"disabled\", \"disabled\");\n }\n }\n}\n","import {EmojiButton} from \"@joeattardi/emoji-button\";\n\n// eslint-disable-next-line require-jsdoc\nexport default function addInputEmoji() {\n const containers = document.querySelectorAll(\"[data-input-emoji]\");\n\n if (containers.length) {\n containers.forEach((elem) => {\n const picker = new EmojiButton({\n position: \"bottom-end\",\n rootElement: elem.closest(\"form\")?.parentElement || document.body,\n zIndex: 2000\n });\n\n // if the selector is inside a modal window\n // this allows shows the emoji menu uncut\n const reveal = elem.closest(\"[data-reveal]\")\n if (reveal) {\n reveal.style.overflowY = \"unset\"\n }\n\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"emoji__container\"\n const btnContainer = document.createElement(\"div\");\n btnContainer.className = \"emoji__trigger\"\n const btn = document.createElement(\"div\");\n btn.className = \"emoji__button\"\n btn.innerHTML = ''\n\n const parent = elem.parentNode;\n parent.insertBefore(wrapper, elem);\n wrapper.appendChild(elem);\n wrapper.appendChild(btnContainer);\n btnContainer.appendChild(btn);\n\n // The form errors need to be in the same container with the field they\n // belong to for Foundation Abide to show them automatically.\n parent.querySelectorAll(\".form-error\").forEach((el) => wrapper.appendChild(el));\n\n let handlerPicker = function () {\n picker.togglePicker(btnContainer);\n }\n\n btnContainer.addEventListener(\"click\", handlerPicker);\n\n elem.addEventListener(\"characterCounter\", (event) => {\n if (event.detail.remaining >= 4) {\n btnContainer.addEventListener(\"click\", handlerPicker);\n btnContainer.removeAttribute(\"style\");\n } else {\n btnContainer.removeEventListener(\"click\", handlerPicker);\n btnContainer.setAttribute(\"style\", \"color:lightgrey\");\n }\n });\n\n\n picker.on(\"emoji\", ({emoji}) => {\n elem.value += ` ${emoji} `\n\n const event = new Event(\"emoji.added\");\n elem.dispatchEvent(event);\n });\n })\n }\n};\n","/**\n * A method to enable the dialog mode for the given dialog(s).\n *\n * This should be called when the dialog is opened. It implements two things for\n * the dialog:\n * 1. It places the focus to the title element making sure the screen reader\n * focuses in the correct position of the document. Otherwise some screen\n * readers continue reading outside of the document.\n * 2. Document \"tab guards\" that force the keyboard focus within the modal when\n * the user is using keyboard or keyboard emulating devices for browsing the\n * document.\n *\n * The \"tab guards\" are added at the top and bottom of the document to keep the\n * user's focus within the dialog if they accidentally or intentionally place\n * the focus outside of the document, e.g. in different window or in the browser\n * address bar. They guard the focus on both sides of the document returning\n * focus back to the first or last focusable element within the dialog.\n *\n * @param {jQuery} $dialogs The jQuery element(s) to apply the mode for.\n * @return {Void} Nothing\n */\nexport default ($dialogs) => {\n $dialogs.each((_i, dialog) => {\n const $dialog = $(dialog);\n\n const $container = $(\"body\");\n const $title = $(\".reveal__title:first\", $dialog);\n\n if ($title.length > 0) {\n // Focus on the title to make the screen reader to start reading the\n // content within the modal.\n $title.attr(\"tabindex\", $title.attr(\"tabindex\") || -1);\n $title.trigger(\"focus\");\n }\n\n // Once the final modal closes, disable the focus guarding\n $dialog.off(\"closed.zf.reveal.focusguard\").on(\"closed.zf.reveal.focusguard\", () => {\n $dialog.off(\"closed.zf.reveal.focusguard\");\n\n // After the last dialog is closed, the tab guards should be removed.\n // This is done when the focus guard is disabled. If there is still a\n // visible reveal item in the DOM, make that the currently \"guarded\"\n // element. Note that there may be multiple dialogs open on top of each\n // other at the same time.\n const $visibleReveal = $(\".reveal:visible:last\", $container);\n if ($visibleReveal.length > 0) {\n window.focusGuard.trap($visibleReveal[0]);\n } else {\n window.focusGuard.disable();\n }\n });\n\n window.focusGuard.trap(dialog);\n });\n};\n","import { Keyboard } from \"foundation-sites\"\n\nconst focusGuardClass = \"focusguard\";\nconst focusableNodes = [\"A\", \"IFRAME\", \"OBJECT\", \"EMBED\"];\nconst focusableDisableableNodes = [\"BUTTON\", \"INPUT\", \"TEXTAREA\", \"SELECT\"];\n\nexport default class FocusGuard {\n constructor(container) {\n this.container = container;\n this.guardedElement = null;\n }\n\n trap(element) {\n if (this.guardedElement) {\n Keyboard.releaseFocus($(this.guardedElement));\n }\n\n this.enable();\n this.guardedElement = element;\n\n // Call the release focus first so that we don't accidentally add the\n // keyboard trap twice. Note that the Foundation methods expect the elements\n // to be jQuery elements which is why we pass them through jQuery.\n Keyboard.releaseFocus($(element));\n Keyboard.trapFocus($(element));\n }\n\n enable() {\n // Check if the guards already exists due to some other dialog\n const guards = this.container.querySelectorAll(`:scope > .${focusGuardClass}`);\n if (guards.length > 0) {\n // Make sure the guards are the first and last element as there have\n // been changes in the DOM.\n guards.forEach((guard) => {\n if (guard.dataset.position === \"start\") {\n this.container.prepend(guard);\n } else {\n this.container.append(guard);\n }\n })\n\n return;\n }\n\n // Add guards at the start and end of the document and attach their focus\n // listeners\n const startGuard = this.createFocusGuard(\"start\");\n const endGuard = this.createFocusGuard(\"end\");\n\n this.container.prepend(startGuard);\n this.container.append(endGuard);\n\n startGuard.addEventListener(\"focus\", () => this.handleContainerFocus(startGuard));\n endGuard.addEventListener(\"focus\", () => this.handleContainerFocus(endGuard));\n }\n\n disable() {\n const guards = this.container.querySelectorAll(`:scope > .${focusGuardClass}`);\n guards.forEach((guard) => guard.remove());\n\n if (this.guardedElement) {\n // Note that the Foundation methods expect the elements to be jQuery\n // elements which is why we pass them through jQuery.\n Keyboard.releaseFocus($(this.guardedElement));\n this.guardedElement = null;\n }\n }\n\n createFocusGuard(position) {\n const guard = document.createElement(\"div\");\n guard.className = focusGuardClass;\n guard.dataset.position = position;\n guard.tabIndex = 0;\n guard.setAttribute(\"aria-hidden\", \"true\");\n\n return guard;\n };\n\n handleContainerFocus(guard) {\n if (!this.guardedElement) {\n guard.blur();\n return;\n }\n\n const visibleNodes = Array.from(this.guardedElement.querySelectorAll(\"*\")).filter((item) => {\n return this.isVisible(item);\n });\n\n let target = null;\n if (guard.dataset.position === \"start\") {\n // Focus at the start guard, so focus the first focusable element after that\n for (let ind = 0; ind < visibleNodes.length; ind += 1) {\n if (!this.isFocusGuard(visibleNodes[ind]) && this.isFocusable(visibleNodes[ind])) {\n target = visibleNodes[ind];\n break;\n }\n }\n } else {\n // Focus at the end guard, so focus the first focusable element after that\n for (let ind = visibleNodes.length - 1; ind >= 0; ind -= 1) {\n if (!this.isFocusGuard(visibleNodes[ind]) && this.isFocusable(visibleNodes[ind])) {\n target = visibleNodes[ind];\n break;\n }\n }\n }\n\n if (target) {\n target.focus();\n } else {\n // If no focusable element was found, blur the guard focus\n guard.blur();\n }\n };\n\n isVisible(element) {\n return element.offsetWidth > 0 || element.offsetHeight > 0;\n }\n\n isFocusGuard(element) {\n return element.classList.contains(focusGuardClass);\n }\n\n isFocusable(element) {\n if (focusableNodes.indexOf(element.nodeName) > -1) {\n return true;\n }\n if (focusableDisableableNodes.indexOf(element.nodeName) > -1 || element.getAttribute(\"contenteditable\")) {\n if (element.getAttribute(\"disabled\")) {\n return false;\n }\n return true;\n }\n\n const tabindex = parseInt(element.getAttribute(\"tabindex\"), 10);\n if (!isNaN(tabindex) && tabindex >= 0) {\n return true;\n }\n\n return false;\n }\n}\n","/* eslint-disable no-invalid-this */\n\nimport svg4everybody from \"svg4everybody\"\nimport formDatePicker from \"src/decidim/form_datepicker\"\nimport fixDropdownMenus from \"src/decidim/dropdowns_menus\"\nimport createQuillEditor from \"src/decidim/editor\"\nimport Configuration from \"src/decidim/configuration\"\nimport ExternalLink from \"src/decidim/external_link\"\nimport updateExternalDomainLinks from \"src/decidim/external_domain_warning\"\nimport InputCharacterCounter from \"src/decidim/input_character_counter\"\nimport FormValidator from \"src/decidim/form_validator\"\nimport CommentsComponent from \"src/decidim/comments/comments.component\"\nimport DataPicker from \"src/decidim/data_picker\"\nimport FormFilterComponent from \"src/decidim/form_filter\"\nimport addInputEmoji from \"src/decidim/input_emoji\"\nimport dialogMode from \"src/decidim/dialog_mode\"\nimport FocusGuard from \"src/decidim/focus_guard\"\nimport backToListLink from \"src/decidim/back_to_list\"\n\nwindow.Decidim = window.Decidim || {};\nwindow.Decidim.config = new Configuration()\nwindow.Decidim.ExternalLink = ExternalLink;\nwindow.Decidim.InputCharacterCounter = InputCharacterCounter;\nwindow.Decidim.FormValidator = FormValidator;\nwindow.Decidim.DataPicker = DataPicker;\nwindow.Decidim.CommentsComponent = CommentsComponent;\nwindow.Decidim.addInputEmoji = addInputEmoji;\n\n$(() => {\n window.theDataPicker = new DataPicker($(\".data-picker\"));\n window.focusGuard = new FocusGuard(document.querySelector(\"body\"));\n\n $(document).foundation();\n $(document).on(\"open.zf.reveal\", (ev) => {\n dialogMode($(ev.target));\n });\n\n // Trap the focus within the mobile menu if the user enters it. This is an\n // accessibility feature forcing the focus within the offcanvas container\n // which holds the mobile menu.\n $(\"#offCanvas\").on(\"openedEnd.zf.offCanvas\", (ev) => {\n ev.target.querySelector(\".main-nav a\").focus();\n window.focusGuard.trap(ev.target);\n }).on(\"closed.zf.offCanvas\", () => {\n window.focusGuard.disable();\n });\n\n fixDropdownMenus();\n\n svg4everybody();\n\n // Prevent data-open buttons e.g. from submitting the underlying form in\n // authorized action buttons.\n $(\"[data-open]\").on(\"click\", (event) => {\n event.preventDefault();\n });\n\n formDatePicker();\n\n $(\".editor-container\").each((_idx, container) => {\n createQuillEditor(container);\n });\n\n $('a[target=\"_blank\"]').each((_i, elem) => {\n const $link = $(elem);\n $link.data(\"external-link\", new ExternalLink($link));\n });\n\n // Mount comments component\n $(\"[data-decidim-comments]\").each((_i, el) => {\n const $el = $(el);\n const comments = new CommentsComponent($el, $el.data(\"decidim-comments\"));\n comments.mountComponent();\n $(el).data(\"comments\", comments);\n });\n\n $(\"form.new_filter\").each(function () {\n const formFilter = new FormFilterComponent($(this));\n\n formFilter.mountComponent();\n })\n\n updateExternalDomainLinks($(\"body\"))\n\n addInputEmoji()\n\n backToListLink(document.querySelectorAll(\".js-back-to-list\"));\n});\n","/**\n * Changes \"Back to list\" links to the one saved in sessionStorage API\n * To apply this to a link, at least one element must have the class \"js-back-to-list\".\n * For this to work it needs the filteredParams in SessionStorage, that's saved on FormFilterComponent.\n * @param {NodeList} links - Hyperlinks elements that point to the filters page that will use the fitererd params\n * @returns {void}\n */\nexport default function backToListLink(links) {\n\n if (!links) {\n return;\n }\n\n if (!window.sessionStorage) {\n return;\n }\n\n const filteredParams = JSON.parse(sessionStorage.getItem(\"filteredParams\")) || {};\n links.forEach((link) => {\n const href = link.getAttribute(\"href\");\n if (filteredParams[href]) {\n link.setAttribute(\"href\", filteredParams[href]);\n }\n });\n\n}\n","import \"@zeitiger/appendaround\"\n\n$(() => {\n let $appendableElements = $(\".js-append\");\n $appendableElements.appendAround();\n})\n","import Rails from \"@rails/ujs\";\n\n// Make the remote form submit buttons disabled when the form is being\n// submitted to avoid multiple submits.\ndocument.addEventListener(\"ajax:beforeSend\", (ev) => {\n if (!ev.target.matches(\"form[data-remote]\")) {\n return;\n }\n\n ev.target.querySelectorAll(\"[type=submit]\").forEach((submit) => {\n submit.disabled = true;\n });\n});\ndocument.addEventListener(\"ajax:complete\", (ev) => {\n if (!ev.target.matches(\"form[data-remote]\")) {\n return;\n }\n\n ev.target.querySelectorAll(\"[type=submit]\").forEach((submit) => {\n submit.disabled = false;\n });\n});\n\n// The forms that are attached to Foundation Abide do not work properly with\n// Rails UJS Ajax forms that have the `data-remote` attribute attached to\n// them. The reason is that in case Foundation Abide sees the form as valid,\n// it will submit it normally bypassing the Rails UJS functionality.\n// The submit events happens through jQuery in Foundation Abide which is why\n// we need to bind the event with jQuery.\n$(document).on(\"submit\", \"form[data-remote][data-abide]\", (ev) => {\n ev.preventDefault();\n\n if (ev.target.querySelectorAll(\"[data-invalid]\").length > 0) {\n return;\n }\n\n Reflect.apply(Rails.handleRemote, ev.target, [ev]);\n});\n","/* eslint-disable no-invalid-this */\n\nimport Foundation from \"foundation-sites\"\n\n$(() => {\n // True if small devices\n if (!Foundation.MediaQuery.atLeast(\"medium\")) {\n const $speaker = $(\".js-conference\")\n\n $speaker.hover(function () {\n const top = $(window).scrollTop() + ($(window).height() * 0.1)\n $(this).find(\".js-bio\").css(\"top\", top)\n })\n }\n});\n","import { pushState, registerCallback } from \"src/decidim/history\"\n\nconst initializeListingOptionsMenu = (options) => {\n $(document).on(\"click\", `${options.containerSelector} a`, (event) => {\n const $target = $(event.target);\n\n $target.parents(\".menu\").find(\"a:first\").text($target.text());\n\n pushState($target.attr(\"href\"));\n })\n\n registerCallback(options.callbackName, () => {\n const url = window.location.toString();\n const match = url.match(/${options.urlParameter}=([^&]*)/);\n const $targetMenu = $(`${options.containerSelector} .menu`);\n let value = $targetMenu.find(\".menu a:first\").data(options.dataAttribute);\n\n if (match) {\n value = match[1];\n }\n\n const linkText = $targetMenu.find(`.menu a[data-${options.dataAttribute}=\"${value}\"]`).text();\n\n $targetMenu.find(\"a:first\").text(linkText);\n });\n};\n\n$(() => {\n initializeListingOptionsMenu({\n containerSelector: \".order-by\",\n callbackName: \"orders\",\n urlParameter: \"order\",\n dataAttribute: \"order\"\n });\n initializeListingOptionsMenu({\n containerSelector: \".results-per-page\",\n callbackName: \"results_per_page\",\n urlParameter: \"per_page\",\n dataAttribute: \"per-page-option\"\n });\n});\n","import dayjs from \"dayjs\"\n\n$(() => {\n const $impersonationWarning = $(\".impersonation-warning\");\n if ($impersonationWarning.length) {\n const endsAt = dayjs($impersonationWarning.data(\"session-ends-at\"));\n const exitInterval = setInterval(() => {\n const diff = (endsAt - dayjs()) / 60000;\n const diffInMinutes = Math.round(diff);\n $impersonationWarning.find(\".minutes\").html(diffInMinutes);\n\n if (diff <= 0) {\n window.location.reload();\n }\n }, 1000);\n\n // Prevent reload when page is already unloading, otherwise it may cause infinite reloads.\n window.addEventListener(\"beforeunload\", () => {\n clearInterval(exitInterval);\n return;\n });\n }\n});\n","import Cookies from \"js-cookie\";\n\nclass ConsentManager {\n // Options should contain the following keys:\n // - modal - HTML element of the data consent modal (e.g. \"
    Foo bar
    \")\n // - categories - Available data consent categories (e.g. [\"essential\", \"preferences\", \"analytics\", \"marketing\"])\n // - cookieName - Name of the cookie saved in the browser (e.g. \"decidim-consent\")\n // - warningElement - HTML element to be shown when user has not given the necessary data consent to display the content.\n constructor(options) {\n this.modal = options.modal;\n this.categories = options.categories;\n this.cookieName = options.cookieName;\n this.cookie = Cookies.get(this.cookieName);\n this.warningElement = options.warningElement;\n if (this.cookie) {\n this.updateState(JSON.parse(this.cookie));\n } else {\n this.updateState({});\n }\n }\n\n updateState(newState) {\n this.state = newState;\n Cookies.set(this.cookieName, JSON.stringify(this.state), {\n domain: document.location.host.split(\":\")[0],\n sameSite: \"Lax\",\n expires: 365,\n secure: window.location.protocol === \"https:\"\n });\n this.updateModalSelections();\n this.triggerState();\n }\n\n triggerJavaScripts() {\n document.querySelectorAll(\"script[type='text/plain'][data-consent]\").forEach((script) => {\n if (this.state[script.dataset.consent]) {\n const activeScript = document.createElement(\"script\");\n if (script.src.length > 0) {\n activeScript.src = script.src;\n } else {\n activeScript.innerHTML = script.innerHTML;\n }\n script.parentNode.replaceChild(activeScript, script);\n }\n });\n\n const event = new CustomEvent(\"dataconsent\", { detail: this.state });\n document.dispatchEvent(event);\n }\n\n triggerIframes() {\n if (this.allAccepted()) {\n document.querySelectorAll(\".disabled-iframe\").forEach((original) => {\n if (original.childNodes && original.childNodes.length) {\n const content = Array.from(original.childNodes).find((childNode) => {\n return childNode.nodeType === Node.COMMENT_NODE;\n });\n if (!content) {\n return;\n }\n const newElement = document.createElement(\"div\");\n newElement.innerHTML = content.nodeValue;\n original.parentNode.replaceChild(newElement.firstElementChild, original);\n }\n });\n } else {\n document.querySelectorAll(\"iframe\").forEach((original) => {\n const newElement = document.createElement(\"div\");\n newElement.className = \"disabled-iframe\";\n newElement.appendChild(document.createComment(`${original.outerHTML}`));\n original.parentNode.replaceChild(newElement, original);\n });\n }\n }\n\n triggerWarnings() {\n document.querySelectorAll(\".disabled-iframe\").forEach((original) => {\n if (original.querySelector(\".dataconsent-warning\")) {\n return;\n }\n\n let cloned = this.warningElement.cloneNode(true);\n cloned.classList.remove(\"hide\");\n original.appendChild(cloned);\n });\n }\n\n triggerState() {\n this.triggerJavaScripts();\n this.triggerIframes();\n this.triggerWarnings();\n }\n\n allAccepted() {\n return this.categories.every((category) => {\n return this.state[category] === true;\n });\n }\n\n updateModalSelections() {\n const categoryElements = this.modal.querySelectorAll(\".category-wrapper\");\n\n categoryElements.forEach((categoryEl) => {\n const categoryInput = categoryEl.querySelector(\"input\");\n if (this.state && this.state[categoryInput.name]) {\n categoryInput.checked = true;\n } else if (!categoryInput.disabled) {\n categoryInput.checked = false;\n }\n });\n }\n\n saveSettings(newState) {\n this.updateState(newState);\n }\n\n acceptAll() {\n const newState = {};\n this.categories.forEach((category) => {\n newState[category] = true;\n });\n this.updateState(newState);\n }\n\n rejectAll() {\n this.updateState({\n essential: true\n });\n }\n\n getState() {\n return this.state;\n }\n}\n\nexport default ConsentManager\n","import ConsentManager from \"src/decidim/data_consent/consent_manager\";\n\nconst initDialog = (manager) => {\n if (Object.keys(manager.state).length > 0) {\n return;\n }\n const dialogWrapper = document.querySelector(\"#dc-dialog-wrapper\");\n dialogWrapper.classList.remove(\"hide\");\n\n const acceptAllButton = dialogWrapper.querySelector(\"#dc-dialog-accept\");\n const rejectAllButton = dialogWrapper.querySelector(\"#dc-dialog-reject\");\n const settingsButton = dialogWrapper.querySelector(\"#dc-dialog-settings\");\n\n acceptAllButton.addEventListener(\"click\", () => {\n manager.acceptAll();\n dialogWrapper.style.display = \"none\";\n });\n\n rejectAllButton.addEventListener(\"click\", () => {\n manager.rejectAll();\n dialogWrapper.style.display = \"none\";\n });\n\n settingsButton.addEventListener(\"click\", () => {\n dialogWrapper.style.display = \"none\";\n });\n}\n\nconst initModal = (manager) => {\n const categoryElements = manager.modal.querySelectorAll(\".category-wrapper\");\n\n categoryElements.forEach((categoryEl) => {\n const categoryButton = categoryEl.querySelector(\".dc-title\");\n const categoryDescription = categoryEl.querySelector(\".dc-description\");\n categoryButton.addEventListener(\"click\", () => {\n const hidden = categoryDescription.classList.contains(\"hide\");\n if (hidden) {\n categoryButton.classList.add(\"open\");\n categoryDescription.classList.remove(\"hide\");\n } else {\n categoryButton.classList.remove(\"open\");\n categoryDescription.classList.add(\"hide\");\n }\n })\n })\n\n const acceptAllButton = manager.modal.querySelector(\"#dc-modal-accept\");\n const rejectAllButton = manager.modal.querySelector(\"#dc-modal-reject\");\n const saveSettingsButton = manager.modal.querySelector(\"#dc-modal-save\");\n\n acceptAllButton.addEventListener(\"click\", () => {\n manager.acceptAll();\n })\n\n rejectAllButton.addEventListener(\"click\", () => {\n manager.rejectAll();\n })\n\n saveSettingsButton.addEventListener(\"click\", () => {\n let newState = {};\n manager.categories.forEach((category) => {\n const accepted = manager.modal.querySelector(`input[name='${category}']`).checked;\n if (accepted) {\n newState[category] = true;\n }\n })\n manager.saveSettings(newState);\n })\n}\n\nconst initDisabledIframes = (manager) => {\n const disabledIframes = document.querySelectorAll(\".disabled-iframe\")\n if (manager.allAccepted()) {\n disabledIframes.forEach((elem) => {\n const iframe = document.createElement(\"iframe\")\n iframe.setAttribute(\"src\", elem.getAttribute(\"src\"));\n iframe.className = elem.classList.toString();\n iframe.setAttribute(\"allowfullscreen\", elem.getAttribute(\"allowfullscreen\"));\n iframe.setAttribute(\"frameborder\", elem.getAttribute(\"frameborder\"));\n elem.parentElement.appendChild(iframe);\n elem.remove();\n })\n }\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n const modal = document.querySelector(\"#dc-modal\");\n if (!modal) {\n return;\n }\n\n const categories = [...modal.querySelectorAll(\".category-wrapper\")].map((el) => el.dataset.id)\n const manager = new ConsentManager({\n modal: modal,\n categories: categories,\n cookieName: window.Decidim.config.get(\"consent_cookie_name\"),\n warningElement: document.querySelector(\".dataconsent-warning\")\n });\n\n initDisabledIframes(manager);\n initModal(manager, categories);\n initDialog(manager);\n});\n","/* eslint no-unused-vars: 0 */\n/* eslint id-length: [\"error\", { \"exceptions\": [\"$\"] }] */\n\nimport $ from \"jquery\"\nimport Quill from \"quill\"\nimport Rails from \"@rails/ujs\"\n\nimport \"core-js/stable\";\nimport \"regenerator-runtime/runtime\";\nimport morphdom from \"morphdom\"\n// Export variable to make it available in .js.erb templates\nwindow.morphdom = morphdom\nimport \"src/decidim/vendor/foundation-datepicker\"\nimport \"src/decidim/foundation_datepicker_locales\"\nimport \"src/decidim/vendor/modernizr\"\nimport \"src/decidim/vendor/social-share-button\"\n\nimport \"src/decidim/input_tags\"\nimport \"src/decidim/input_hashtags\"\nimport \"src/decidim/input_mentions\"\nimport \"src/decidim/input_multiple_mentions\"\nimport \"src/decidim/input_character_counter\"\nimport \"src/decidim/input_autojump\"\nimport \"src/decidim/index\"\nimport \"src/decidim/history\"\nimport \"src/decidim/callout\"\nimport \"src/decidim/clipboard\"\nimport \"src/decidim/append_elements\"\nimport \"src/decidim/user_registrations\"\nimport \"src/decidim/account_form\"\nimport \"src/decidim/data_picker\"\nimport \"src/decidim/dropdowns_menus\"\nimport \"src/decidim/append_redirect_url_to_modals\"\nimport \"src/decidim/form_attachments\"\nimport \"src/decidim/form_validator\"\nimport \"src/decidim/form_remote\"\nimport \"src/decidim/ajax_modals\"\nimport \"src/decidim/conferences\"\nimport \"src/decidim/tooltip_keep_on_hover\"\nimport \"src/decidim/diff_mode_dropdown\"\nimport \"src/decidim/conversations\"\nimport \"src/decidim/delayed\"\nimport \"src/decidim/icon\"\nimport \"src/decidim/vizzs\"\nimport \"src/decidim/responsive_horizontal_tabs\"\nimport \"src/decidim/security/selfxss_warning\"\nimport \"src/decidim/session_timeouter\"\nimport \"src/decidim/configuration\"\nimport \"src/decidim/floating_help\"\nimport \"src/decidim/confirm\"\nimport \"src/decidim/comments/comments\"\nimport \"src/decidim/results_listing\"\nimport \"src/decidim/represent_user_group\"\nimport \"src/decidim/impersonation\"\nimport \"src/decidim/start_conversation_dialog\"\nimport \"src/decidim/notifications\"\nimport \"src/decidim/identity_selector_dialog\"\nimport \"src/decidim/gallery\"\nimport \"src/decidim/direct_uploads/upload_field\"\nimport \"src/decidim/back_to_list\"\nimport \"src/decidim/data_consent\"\n\n// CSS\nimport \"entrypoints/decidim_core.scss\"\n\n// Import from the Rails instance application\nimport \"src/decidim/decidim_application\"\n\n// Images\nrequire.context(\"../images\", true)\n\n// This needs to be loaded after confirm dialog to bind properly\nRails.start()\n","/**\n * Initializes the edit account form to control the password field elements\n * which should only be required when they are visible.\n *\n * @returns {void}\n */\nconst initializeAccountForm = () => {\n const editUserForm = document.querySelector(\"form.edit_user\");\n if (!editUserForm) {\n return;\n }\n\n const passwordChange = editUserForm.querySelector(\"#passwordChange\");\n if (!passwordChange) {\n return;\n }\n\n const passwordFields = passwordChange.querySelectorAll(\"input[type='password']\");\n if (passwordFields.length < 1) {\n return;\n }\n\n // Foundation uses jQuery so these have to be bound using jQuery and the\n // attribute value needs to be set through jQuery.\n const togglePasswordFieldValidators = (enabled) => {\n $(passwordFields).attr(\"required\", enabled);\n\n if (!enabled) {\n passwordFields.forEach((field) => (field.value = \"\"));\n }\n }\n\n $(passwordChange).on(\"on.zf.toggler\", () => {\n togglePasswordFieldValidators(true);\n });\n $(passwordChange).on(\"off.zf.toggler\", () => {\n togglePasswordFieldValidators(false);\n });\n togglePasswordFieldValidators(false);\n};\n\n/**\n * Since the delete account has a modal to confirm it we need to copy the content of the\n * reason field to the hidden field in the form inside the modal.\n *\n * @return {void}\n */\nconst initializeDeleteAccount = () => {\n const $deleteAccountForm = $(\".delete-account\");\n const $deleteAccountModalForm = $(\".delete-account-modal\");\n\n if ($deleteAccountForm.length < 1) {\n return;\n }\n\n const $openModalButton = $(\".open-modal-button\");\n const $modal = $(\"#deleteConfirm\");\n\n $openModalButton.on(\"click\", (event) => {\n try {\n const reasonValue = $deleteAccountForm.find(\"textarea#delete_account_delete_reason\").val();\n $deleteAccountModalForm.find(\"input#delete_account_delete_reason\").val(reasonValue);\n $modal.foundation(\"open\");\n } catch (error) {\n console.error(error); // eslint-disable-line no-console\n }\n\n event.preventDefault();\n event.stopPropagation();\n return false;\n });\n};\n\n$(() => {\n initializeAccountForm();\n initializeDeleteAccount();\n});\n","/* eslint-disable multiline-ternary, no-ternary */\n\n/*\n *\n * This is used to make sure users are redirected to\n * the expected URL after sign in.\n *\n * When a button or link trigger a login modal we capture\n * the event and inject the URL where the user should\n * be redirected after sign in (the redirect_url param).\n *\n * The code is injected to any form or link in the modal\n * and when the modal is closed we remove the injected\n * code.\n *\n * In order for this to work the button or link must have\n * a data-open attribute with the ID of the modal to open\n * and a data-redirect-url attribute with the URL to redirect\n * the user. If any of this is missing no code will be\n * injected.\n *\n */\n$(() => {\n const removeUrlParameter = (url, parameter) => {\n const urlParts = url.split(\"?\");\n\n if (urlParts.length >= 2) {\n // Get first part, and remove from array\n const urlBase = urlParts.shift();\n\n // Join it back up\n const queryString = urlParts.join(\"?\");\n\n const prefix = `${encodeURIComponent(parameter)}=`;\n const parts = queryString.split(/[&;]/g);\n\n // Reverse iteration as may be destructive\n for (let index = parts.length - 1; index >= 0; index -= 1) {\n // Idiom for string.startsWith\n if (parts[index].lastIndexOf(prefix, 0) !== -1) {\n parts.splice(index, 1);\n }\n }\n\n if (parts.length === 0) {\n return urlBase;\n }\n\n return `${urlBase}?${parts.join(\"&\")}`;\n }\n\n return url;\n }\n\n $(document).on(\"click.zf.trigger\", (event) => {\n const target = `#${$(event.target).data(\"open\")}`;\n const redirectUrl = $(event.target).data(\"redirectUrl\");\n\n if (target && redirectUrl) {\n $(\"\").\n attr(\"id\", \"redirect_url\").\n attr(\"name\", \"redirect_url\").\n attr(\"value\", redirectUrl).\n appendTo(`${target} form`);\n\n $(`${target} a`).attr(\"href\", (index, href) => {\n const querystring = jQuery.param({\"redirect_url\": redirectUrl});\n return href + (href.match(/\\?/) ? \"&\" : \"?\") + querystring;\n });\n }\n });\n\n $(document).on(\"closed.zf.reveal\", (event) => {\n $(\"#redirect_url\", event.target).remove();\n $(\"a\", event.target).attr(\"href\", (index, href) => {\n if (href && href.indexOf(\"redirect_url\") !== -1) {\n return removeUrlParameter(href, \"redirect_url\");\n }\n\n return href;\n });\n });\n});\n","/**\n * Improves the accessibility of the callout messages for screen readers. Not\n * all screen readers would announce the callout alert contents after the page\n * reload without this.\n */\n\n$(() => {\n const $callout = $('.callout[role=\"alert\"]:first');\n if ($callout.length > 0) {\n setTimeout(() => {\n // The content insertion is to try to hint some of the screen readers\n // that the alert content has changed and needs to be announced.\n $callout.attr(\"tabindex\", \"0\").focus().html(`${$callout.html()} `);\n }, 500);\n }\n});\n","/**\n * Scroll smoothly to the last message automatically when the page is fully loaded.\n * To apply this to a page, at least one element must have the class \"scroll-to-last-message\".\n * @returns {void}\n */\nconst scrollToLastMessage = function() {\n if ($(\".scroll-to-last-message\").length > 0) {\n window.scrollTo({\n top: $(\".conversation-chat:last-child\").offset().top,\n behavior: \"smooth\"\n });\n }\n}\n\n$(document).ready(() => {\n scrollToLastMessage();\n});\n","$(() => {\n const $allDiffViews = $(\".row.diff_view\");\n\n $(document).on(\"click\", \".diff-view-by a.diff-view-mode\", (event) => {\n event.preventDefault();\n const $target = $(event.target)\n let type = \"escaped\";\n const $selected = $target.parents(\".is-dropdown-submenu-parent\").find(\"#diff-view-selected\");\n if ($selected.text().trim() === $target.text().trim()) {\n return;\n }\n\n $selected.text($target.text());\n\n if ($target.attr(\"id\") === \"diff-view-unified\") {\n if ($(\".row.diff_view_split_escaped\").hasClass(\"hide\")) {\n type = \"unescaped\";\n }\n\n $allDiffViews.addClass(\"hide\");\n $(`.row.diff_view_unified_${type}`).removeClass(\"hide\");\n }\n if ($target.attr(\"id\") === \"diff-view-split\") {\n if ($(\".row.diff_view_unified_escaped\").hasClass(\"hide\")) {\n type = \"unescaped\";\n }\n\n $allDiffViews.addClass(\"hide\");\n $(`.row.diff_view_split_${type}`).removeClass(\"hide\");\n }\n })\n\n $(document).on(\"click\", \".diff-view-by a.diff-view-html\", (event) => {\n event.preventDefault();\n const $target = $(event.target);\n $target.parents(\".is-dropdown-submenu-parent\").find(\"#diff-view-html-selected\").text($target.text());\n const $visibleDiffViewsId = $allDiffViews.not(\".hide\").first().attr(\"id\").split(\"_\").slice(1, -1).join(\"_\");\n const $visibleDiffViews = $allDiffViews.filter(`[id*=${$visibleDiffViewsId}]`)\n\n if ($target.attr(\"id\") === \"diff-view-escaped-html\") {\n $visibleDiffViews.filter(\"[id$=_unescaped]\").addClass(\"hide\");\n $visibleDiffViews.filter(\"[id$=_escaped]\").removeClass(\"hide\");\n }\n if ($target.attr(\"id\") === \"diff-view-unescaped-html\") {\n $visibleDiffViews.filter(\"[id$=_escaped]\").addClass(\"hide\");\n $visibleDiffViews.filter(\"[id$=_unescaped]\").removeClass(\"hide\");\n }\n })\n});\n","$(function() {\n if (!window.localStorage) {\n return;\n }\n\n let getDismissedHelpers = () => {\n let serialized = localStorage.getItem(\"dismissedHelpers\");\n if (!serialized) {\n return [];\n }\n\n return serialized.split(\",\");\n };\n\n let addDismissedHelper = (id) => {\n let dismissedHelpers = getDismissedHelpers();\n\n if (!dismissedHelpers.includes(id)) {\n localStorage.setItem(\n \"dismissedHelpers\",\n [...dismissedHelpers, id].join(\",\")\n );\n }\n };\n\n let dismissedHelpers = getDismissedHelpers();\n\n $(\".floating-helper-container\").each((_index, elem) => {\n let id = $(elem).data(\"help-id\");\n\n $(\n \".floating-helper__trigger, .floating-helper__content-close\",\n elem\n ).on(\"click\", (ev) => {\n ev.preventDefault();\n });\n\n if (!dismissedHelpers.includes(id)) {\n $(\".floating-helper\", elem).foundation(\"toggle\");\n $(\".floating-helper__wrapper\", elem).foundation(\"toggle\");\n\n $(\".floating-helper\", elem).on(\"off.zf.toggler\", () => {\n addDismissedHelper(id);\n });\n }\n });\n});\n","$(() => {\n $(\"form .attachments_container\").on(\"closed.zf.callout\", (event) => {\n $(event.target).remove();\n });\n});\n","/* eslint-disable require-jsdoc */\n/* eslint-disable no-prototype-builtins, no-restricted-syntax, no-param-reassign */\n\nlet callbacks = {};\n\nexport default function registerCallback(callbackId, callback) {\n callbacks[callbackId] = callback;\n}\n\nconst unregisterCallback = (callbackId) => {\n callbacks[callbackId] = null;\n}\n\nconst pushState = (url, state = null) => {\n if (window.history) {\n window.history.pushState(state, null, url);\n }\n};\n\nconst replaceState = (url, state = null) => {\n if (window.history) {\n window.history.replaceState(state, null, url);\n }\n};\n\nconst state = () => {\n if (window.history) {\n return window.history.state;\n }\n return null;\n};\n\nwindow.onpopstate = (event) => {\n // Ensure the event is caused by user action\n if (event.isTrusted) {\n for (let callbackId in callbacks) {\n if (callbacks.hasOwnProperty(callbackId)) {\n callbacks[callbackId](event.state);\n }\n }\n }\n}\n\nexport { registerCallback, unregisterCallback, pushState, replaceState, state };\n","/**\n * Makes the #select-identity-button to open a popup for the user to\n * select with which identity they want to perform an action.\n *\n */\n$(() => {\n let button = $(\"#select-identity-button\"),\n identitiesUrl = null,\n userIdentitiesDialog = $(\"#user-identities\");\n\n if (userIdentitiesDialog.length) {\n identitiesUrl = userIdentitiesDialog.data(\"reveal-identities-url\");\n\n button.click(function () {\n $.ajax(identitiesUrl).done(function(response) {\n userIdentitiesDialog.html(response).foundation(\"open\");\n button.trigger(\"ajax:success\")\n });\n });\n }\n});\n\n\n/**\n * Manage the identity selector for endorsements.\n *\n */\n$(() => {\n $(\"#select-identity-button\").on(\"ajax:success\", function() {\n // once reveal popup has been rendered register event callbacks\n $(\"#user-identities ul.reveal__list li\").each(function(index, elem) {\n let liTag = $(elem)\n liTag.on(\"click\", function() {\n let method = liTag.data(\"method\"),\n urlDataAttr = null;\n if (method === \"POST\") {\n urlDataAttr = \"create_url\";\n } else {\n urlDataAttr = \"destroy_url\";\n }\n $.ajax({\n url: liTag.data(urlDataAttr),\n method: method,\n dataType: \"script\",\n success: function() {\n if (liTag.hasClass(\"selected\")) {\n liTag.removeClass(\"selected\")\n liTag.find(\".icon--circle-check\").addClass(\"invisible\")\n liTag.data(\"method\", \"POST\")\n } else {\n liTag.addClass(\"selected\")\n liTag.find(\".icon--circle-check\").removeClass(\"invisible\")\n liTag.data(\"method\", \"DELETE\")\n }\n }\n })\n })\n });\n });\n})\n","$(() => {\n const $inputs = $(\"input[data-autojump]\");\n const DELETE_KEY_CODE = 8;\n\n // Initialize\n $inputs.on(\"keydown\", (event) => {\n // Don't do anything if there is selected text\n if (event.target.selectionStart !== event.target.selectionEnd) {\n return;\n }\n\n if (event.originalEvent.key.length === 1 && event.target.dataset.jumpNext) {\n if (\n event.target.value.length ===\n parseInt(event.target.dataset.maxLength, 10)\n ) {\n event.preventDefault();\n setTimeout(() => {\n const next = $(event.target.dataset.jumpNext);\n next.val(event.originalEvent.key);\n next.trigger(\"focus\");\n }, 1);\n }\n } else if (\n event.originalEvent.keyCode === DELETE_KEY_CODE &&\n event.target.dataset.jumpPrev\n ) {\n if (event.target.value.length === 0) {\n event.preventDefault();\n setTimeout(() => {\n const prev = $(event.target.dataset.jumpPrev);\n prev.val(prev.val().slice(0, -1));\n prev.trigger(\"focus\");\n }, 1);\n }\n }\n });\n});\n","$(() => {\n const $notificationsBellIcon = $(\".title-bar .topbar__notifications\");\n const $wrapper = $(\".wrapper\");\n const $section = $wrapper.find(\"#notifications\");\n const $noNotificationsText = $(\".empty-notifications\");\n const $pagination = $wrapper.find(\"ul.pagination\");\n const FADEOUT_TIME = 500;\n\n const anyNotifications = () => $wrapper.find(\".card--widget\").length > 0;\n const emptyNotifications = () => {\n if (!anyNotifications()) {\n $section.remove();\n $noNotificationsText.removeClass(\"hide\");\n }\n };\n\n $section.on(\"click\", \".mark-as-read-button\", (event) => {\n const $item = $(event.target).parents(\".card--widget\");\n $item.fadeOut(FADEOUT_TIME, () => {\n $item.remove();\n emptyNotifications();\n });\n });\n\n $wrapper.on(\"click\", \".mark-all-as-read-button\", () => {\n $section.fadeOut(FADEOUT_TIME, () => {\n $pagination.remove();\n $notificationsBellIcon.removeClass(\"is-active\");\n $wrapper.find(\".card--widget\").remove();\n emptyNotifications();\n });\n });\n\n emptyNotifications();\n});\n","$(() => {\n const $checkbox = $(\".represent-user-group\").find(\"input#user_group\");\n const $userGroupFields = $(\".user-group-fields\");\n\n $checkbox.click(() => {\n const $select = $userGroupFields.find(\"select\");\n\n if (!$select.val()) {\n $userGroupFields.toggle();\n }\n\n if ($userGroupFields.is(\":visible\")) {\n $checkbox.prop(\"checked\", true);\n } else {\n $checkbox.prop(\"checked\", false);\n }\n });\n});\n","$(() => {\n const $responsiveTabBlock = $(\".responsive-tab-block\");\n\n $responsiveTabBlock.click((event) => {\n if (event.target.closest(\".is-active\") !== null) {\n event.preventDefault();\n if (window.innerWidth <= 639) {\n $responsiveTabBlock.toggleClass(\"expanded\");\n }\n }\n });\n});\n","/* eslint-disable no-console, no-process-env, no-undef */\n\n$(() => {\n if (!console) {\n return;\n }\n\n if (process.env.NODE_ENV === \"development\") {\n return;\n }\n\n const allMessages = window.Decidim.config.get(\"messages\");\n if (!allMessages) {\n return;\n }\n const messages = allMessages.selfxssWarning;\n\n console.log(`%c${messages.title}`, \"color:#f00;font-weight:bold;font-size:50px;\");\n console.log(`%c${messages.description}`, \"font-size:24px;\");\n});\n","$(() => {\n let addUsersConversationDialog = $(\"#user-conversations-add-modal\"),\n button = $(\"#start-conversation-dialog-button\");\n\n /* eslint no-unused-vars: 0 */\n if (addUsersConversationDialog.length) {\n let refreshUrl = addUsersConversationDialog.data(\"refresh-url\");\n\n button.click(function () {\n addUsersConversationDialog.foundation(\"open\");\n });\n }\n});\n","/* eslint-disable no-invalid-this */\n\n$(() => {\n\n // Foundation requires plugins to be initializated\n setTimeout(function() {\n\n const $tooltips = $(\".tooltip\")\n\n $tooltips.\n on(\"mouseover\", function() {\n $(`[data-keep-on-hover='true'][data-toggle='${this.id}']`).foundation(\"show\");\n }).\n on(\"mouseout\", function() {\n $(`[data-keep-on-hover='true'][data-toggle='${this.id}']`).foundation(\"hide\");\n })\n }, 0);\n});\n","$(() => {\n const $userRegistrationForm = $(\"#register-form\");\n const $userGroupFields = $userRegistrationForm.find(\".user-group-fields\");\n const inputSelector = 'input[name=\"user[sign_up_as]\"]';\n const newsletterSelector = 'input[type=\"checkbox\"][name=\"user[newsletter]\"]';\n const $newsletterModal = $(\"#sign-up-newsletter-modal\");\n\n\n const setGroupFieldsVisibility = (value) => {\n if (value === \"user\") {\n $userGroupFields.hide();\n } else {\n $userGroupFields.show();\n }\n }\n\n const checkNewsletter = (check) => {\n $userRegistrationForm.find(newsletterSelector).prop(\"checked\", check);\n $newsletterModal.data(\"continue\", true);\n $newsletterModal.foundation(\"close\");\n $userRegistrationForm.submit();\n }\n\n setGroupFieldsVisibility($userRegistrationForm.find(`${inputSelector}:checked`).val());\n\n $userRegistrationForm.on(\"change\", inputSelector, (event) => {\n const value = event.target.value;\n\n setGroupFieldsVisibility(value);\n });\n\n $userRegistrationForm.on(\"submit\", (event) => {\n const newsletterChecked = $userRegistrationForm.find(newsletterSelector);\n if (!$newsletterModal.data(\"continue\")) {\n if (!newsletterChecked.prop(\"checked\")) {\n event.preventDefault();\n $newsletterModal.foundation(\"open\");\n }\n }\n });\n\n $newsletterModal.find(\".check-newsletter\").on(\"click\", (event) => {\n checkNewsletter($(event.target).data(\"check\"));\n });\n});\n","/* eslint-disable */\n\n/*! modernizr 3.3.1 (Custom Build) | MIT *\n * https://modernizr.com/download/?-setclasses !*/\n!function(n,e,s){function o(n,e){return typeof n===e}function a(){var n,e,s,a,i,l,r;for(var c in f)if(f.hasOwnProperty(c)){if(n=[],e=f[c],e.name&&(n.push(e.name.toLowerCase()),e.options&&e.options.aliases&&e.options.aliases.length))for(s=0;s - The MIT license\n * Originally copied fom https://github.com/huacnlee/social-share-button\n * Transformed from Coffescript to Javascipt with decaffeintate\n *\n * We've copied itlocally so it works with webpacker\n *\n * decaffeinate suggestions:\n * DS102: Remove unnecessary code created because of implicit returns\n * DS205: Consider reworking code to avoid use of IIFEs\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\nwindow.SocialShareButton = {\n openUrl(url, width, height) {\n if (width === null) {\n width = 640;\n }\n if (height === null) {\n height = 480;\n }\n const left = (screen.width / 2) - (width / 2);\n const top = (screen.height * 0.3) - (height / 2);\n const opt = `width=${width},height=${height},left=${left},top=${top},menubar=no,status=no,location=no`;\n window.open(url, \"popup\", opt);\n return false;\n },\n\n share(el) {\n if (el.getAttribute === null) {\n el = document.querySelector(el);\n }\n\n const site = el.getAttribute(\"data-site\");\n const appkey = el.getAttribute(\"data-appkey\") || \"\";\n const $parent = el.parentNode;\n let title = encodeURIComponent(el.getAttribute(`data-${site}-title`) || $parent.getAttribute(\"data-title\") || \"\");\n const img = encodeURIComponent($parent.getAttribute(\"data-img\") || \"\");\n let url = encodeURIComponent($parent.getAttribute(\"data-url\") || \"\");\n const via = encodeURIComponent($parent.getAttribute(\"data-via\") || \"\");\n const desc = encodeURIComponent($parent.getAttribute(\"data-desc\") || \" \");\n\n // tracking click events if google analytics enabled\n const ga = window[window.GoogleAnalyticsObject || \"ga\"];\n if (typeof ga === \"function\") {\n ga(\"send\", \"event\", \"Social Share Button\", \"click\", site);\n }\n\n if (url.length === 0) {\n url = encodeURIComponent(location.href);\n }\n switch (site) {\n case \"email\":\n location.href = `mailto:?subject=${title}&body=${url}`;\n break;\n case \"weibo\":\n this.openUrl(`http://service.weibo.com/share/share.php?url=${url}&type=3&pic=${img}&title=${title}&appkey=${appkey}`, 620, 370);\n break;\n case \"twitter\": {\n let hashtags = encodeURIComponent(el.getAttribute(`data-${site}-hashtags`) || $parent.getAttribute(\"data-hashtags\") || \"\");\n let viaStr = \"\";\n if (via.length > 0) {\n viaStr = `&via=${via}`;\n }\n this.openUrl(`https://twitter.com/intent/tweet?url=${url}&text=${title}&hashtags=${hashtags}${viaStr}`, 650, 300);\n break;\n }\n case \"douban\":\n this.openUrl(`http://shuo.douban.com/!service/share?href=${url}&name=${title}&image=${img}&sel=${desc}`, 770, 470);\n break;\n case \"facebook\":\n this.openUrl(`http://www.facebook.com/sharer/sharer.php?u=${url}`, 555, 400);\n break;\n case \"qq\":\n this.openUrl(`http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url=${url}&title=${title}&pics=${img}&summary=${desc}&site=${appkey}`);\n break;\n case \"google_bookmark\":\n this.openUrl(`https://www.google.com/bookmarks/mark?op=edit&output=popup&bkmk=${url}&title=${title}`);\n break;\n case \"delicious\":\n this.openUrl(`https://del.icio.us/save?url=${url}&title=${title}&jump=yes&pic=${img}`);\n break;\n case \"pinterest\":\n this.openUrl(`http://www.pinterest.com/pin/create/button/?url=${url}&media=${img}&description=${title}`);\n break;\n case \"linkedin\":\n this.openUrl(`https://www.linkedin.com/shareArticle?mini=true&url=${url}&title=${title}&summary=${desc}`);\n break;\n case \"xing\":\n this.openUrl(`https://www.xing.com/spi/shares/new?url=${url}`);\n break;\n case \"vkontakte\":\n this.openUrl(`http://vk.com/share.php?url=${url}&title=${title}&image=${img}`);\n break;\n case \"odnoklassniki\":\n this.openUrl(`https://connect.ok.ru/offer?url=${url}&title=${title}&description=${desc}&imageUrl=${img}`);\n break;\n case \"wechat\":\n if (!window.SocialShareWeChatButton) {\n throw new Error(\"You should require social-share-button/wechat to your application.js\");\n }\n window.SocialShareWeChatButton.qrcode({\n url: decodeURIComponent(url),\n header: el.getAttribute(\"title\"),\n footer: el.getAttribute(\"data-wechat-footer\")\n });\n break;\n\n case \"tumblr\": {\n let getTumblrExtra = (param) => {\n const cutomData = el.getAttribute(`data-${param}`);\n if (cutomData) {\n return encodeURIComponent(cutomData);\n }\n };\n\n let tumblrParams = () => {\n const path = getTumblrExtra(\"type\") || \"link\";\n\n const params = (() => {\n switch (path) {\n case \"text\": {\n title = getTumblrExtra(\"title\") || title;\n return `title=${title}`;\n }\n case \"photo\": {\n title = getTumblrExtra(\"caption\") || title;\n let source = getTumblrExtra(\"source\") || img;\n return `caption=${title}&source=${source}`;\n }\n case \"quote\": {\n let quote = getTumblrExtra(\"quote\") || title;\n let source = getTumblrExtra(\"source\") || \"\";\n return `quote=${quote}&source=${source}`;\n }\n // actually, it's a link clause\n default: {\n title = getTumblrExtra(\"title\") || title;\n url = getTumblrExtra(\"url\") || url;\n return `name=${title}&url=${url}`;\n }} })();\n\n return `/${path}?${params}`;\n };\n\n this.openUrl(`http://www.tumblr.com/share${tumblrParams()}`);\n break;\n }\n case \"reddit\":\n this.openUrl(`http://www.reddit.com/submit?url=${url}&newwindow=1`, 555, 400);\n break;\n case \"hacker_news\":\n this.openUrl(`http://news.ycombinator.com/submitlink?u=${url}&t=${title}`, 770, 500);\n break;\n case \"telegram\":\n this.openUrl(`https://telegram.me/share/url?text=${title}&url=${url}`);\n break;\n case \"whatsapp_app\": {\n let whatsappAppUrl = `whatsapp://send?text=${title}%0A${url}`;\n window.open(whatsappAppUrl, \"_top\");\n break;\n }\n case \"whatsapp_web\":\n this.openUrl(`https://web.whatsapp.com/send?text=${title}%0A${url}`);\n break;\n }\n return false;\n }\n};\n","/* eslint-disable require-jsdoc, func-style */\n\n/*\n* Since version 0.25 we follow a different strategy and opt to destroy and override completely the original editor\n* That's because editors are instantiated directly instead of creating a global function to instantiate them\n*/\n\nimport lineBreakButtonHandler from \"src/decidim/editor/linebreak_module\"\nimport InscrybMDE from \"inscrybmde\"\nimport Europa from \"europa\"\nimport \"inline-attachment/src/inline-attachment\";\nimport \"inline-attachment/src/codemirror-4.inline-attachment\";\nimport \"inline-attachment/src/jquery.inline-attachment\";\nimport hljs from \"highlight.js\";\nimport \"highlight.js/styles/github.css\";\nimport \"src/decidim/editor/clipboard_override\"\nimport \"src/decidim/vendor/image-resize.min\"\nimport \"src/decidim/vendor/image-upload.min\"\nimport { marked } from \"marked\";\n\nconst DecidimAwesome = window.DecidimAwesome || {};\nconst quillFormats = [\"bold\", \"italic\", \"link\", \"underline\", \"header\", \"list\", \"video\", \"image\", \"alt\", \"break\", \"width\", \"style\", \"code\", \"blockquote\", \"indent\"];\n\n// A tricky way to destroy the quill editor\nexport function destroyQuillEditor(container) {\n if (container) {\n const content = $(container).find(\".ql-editor\").html();\n $(container).html(content);\n $(container).siblings(\".ql-toolbar\").remove();\n $(container).find(\"*[class*='ql-']\").removeClass((index, className) => (className.match(/(^|\\s)ql-\\S+/g) || []).join(\" \"));\n $(container).removeClass((index, className) => (className.match(/(^|\\s)ql-\\S+/g) || []).join(\" \"));\n if ($(container).next().is(\"p.help-text\")) {\n $(container).next().remove();\n }\n }\n else {\n console.error(`editor [${container}] not exists`);\n }\n}\n\nexport function createQuillEditor(container) {\n const toolbar = $(container).data(\"toolbar\");\n const disabled = $(container).data(\"disabled\");\n const allowedEmptyContentSelector = \"iframe,img\";\n\n let quillToolbar = [\n [\"bold\", \"italic\", \"underline\", \"linebreak\"],\n [{ list: \"ordered\" }, { list: \"bullet\" }],\n [\"link\", \"clean\"],\n [\"code\", \"blockquote\"],\n [{ \"indent\": \"-1\"}, { \"indent\": \"+1\" }]\n ];\n\n let addImage = false;\n\n if (toolbar === \"full\") {\n quillToolbar = [\n [{ header: [2, 3, 4, 5, 6, false] }],\n ...quillToolbar\n ];\n if (DecidimAwesome.allow_images_in_full_editor) {\n quillToolbar.push([\"video\", \"image\"]);\n addImage = true;\n } else {\n quillToolbar.push([\"video\"]);\n }\n } else if (toolbar === \"basic\") {\n if (DecidimAwesome.allow_images_in_small_editor) {\n quillToolbar.push([\"video\", \"image\"]);\n addImage = true;\n } else {\n quillToolbar.push([\"video\"]);\n }\n } else if (DecidimAwesome.allow_images_in_small_editor) {\n quillToolbar.push([\"image\"]);\n addImage = true;\n }\n\n let modules = {\n linebreak: {},\n toolbar: {\n container: quillToolbar,\n handlers: {\n \"linebreak\": lineBreakButtonHandler\n }\n }\n };\n\n const $input = $(container).siblings('input[type=\"hidden\"]');\n container.innerHTML = $input.val() || \"\";\n const token = $('meta[name=\"csrf-token\"]').attr(\"content\");\n if (addImage) {\n modules.imageResize = {\n modules: [\"Resize\", \"DisplaySize\"]\n }\n modules.imageUpload = {\n url: DecidimAwesome.editor_uploader_path,\n method: \"POST\",\n name: \"image\",\n withCredentials: false,\n headers: { \"X-CSRF-Token\": token },\n callbackOK: (serverResponse, next) => {\n $(\"div.ql-toolbar\").last().removeClass(\"editor-loading\")\n next(serverResponse.url);\n },\n callbackKO: (serverError) => {\n $(\"div.ql-toolbar\").last().removeClass(\"editor-loading\")\n let msg = serverError && serverError.body;\n try {\n msg = JSON.parse(msg).message;\n } catch (evt) { console.error(\"Parsing error\", evt); }\n console.error(`Image upload error: ${msg}`);\n let $p = $(`

    ${msg}

    `);\n $(container).after($p)\n setTimeout(() => {\n $p.fadeOut(1000, () => {\n $p.destroy();\n });\n }, 3000);\n },\n checkBeforeSend: (file, next) => {\n $(\"div.ql-toolbar\").last().addClass(\"editor-loading\")\n next(file);\n }\n }\n }\n const quill = new Quill(container, {\n modules: modules,\n formats: quillFormats,\n theme: \"snow\"\n });\n\n if (disabled) {\n quill.disable();\n }\n\n quill.on(\"text-change\", () => {\n const text = quill.getText();\n\n // Triggers CustomEvent with the cursor position\n // It is required in input_mentions.js\n let event = new CustomEvent(\"quill-position\", {\n detail: quill.getSelection()\n });\n container.dispatchEvent(event);\n\n if ((text === \"\\n\" || text === \"\\n\\n\") && quill.root.querySelectorAll(allowedEmptyContentSelector).length === 0) {\n $input.val(\"\");\n } else {\n const emptyParagraph = \"


    \";\n const cleanHTML = quill.root.innerHTML.replace(\n new RegExp(`^${emptyParagraph}|${emptyParagraph}$`, \"g\"),\n \"\"\n );\n $input.val(cleanHTML);\n }\n });\n // After editor is ready, linebreak_module deletes two extraneous new lines\n quill.emitter.emit(\"editor-ready\");\n\n if (addImage) {\n const text = $(container).data(\"dragAndDropHelpText\") || DecidimAwesome.texts.drag_and_drop_image;\n $(container).after(`

    ${text}

    `);\n }\n\n // After editor is ready, linebreak_module deletes two extraneous new lines\n quill.emitter.emit(\"editor-ready\");\n\n return quill;\n}\n\nexport function createMarkdownEditor(container) {\n const text = DecidimAwesome.texts.drag_and_drop_image;\n const token = $('meta[name=\"csrf-token\"]').attr(\"content\");\n const $input = $(container).siblings('input[type=\"hidden\"]');\n const $faker = $('