{"version":3,"file":"js/decidim_core-63564efa0d696f17ade5.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/append_after_action_to_modals.js","webpack://app/./app/packs/src/decidim/user_registrations.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/input_multiple_mentions.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/input_character_counter.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/dropdowns_menus.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/icon.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/external_link.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/external_domain_warning.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/form_validator.js","webpack://app/../usr/local/bundle/gems/decidim-comments-0.27.3/app/packs/src/decidim/comments/comments.component.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/input_emoji.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/dialog_mode.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/focus_guard.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/index.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/back_to_list.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/clipboard.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/append_elements.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/form_remote.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/conferences.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/results_listing.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/impersonation.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/data_consent/consent_manager.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/data_consent/index.js","webpack://app/./app/packs/src/decidim/decidim_application.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/entrypoints/decidim_core.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/account_form.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/append_redirect_url_to_modals.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/callout.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/conversations.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/diff_mode_dropdown.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/floating_help.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/form_attachments.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/history.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/identity_selector_dialog.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/input_autojump.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/notifications.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/represent_user_group.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/responsive_horizontal_tabs.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/security/selfxss_warning.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/start_conversation_dialog.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/tooltip_keep_on_hover.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/vendor/modernizr.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/app/packs/src/decidim/vendor/social-share-button.js","webpack://app/../usr/local/bundle/gems/decidim-core-0.27.3/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\"./FCboutons-10.png\": 87310,\n\t\"./FCboutons-10@2x.png\": 25708,\n\t\"./decidim/cc-by-sa--inv.svg\": 47027,\n\t\"./decidim/cc-by-sa.svg\": 55974,\n\t\"./decidim/decidim-logo-mobile--inv.svg\": 22604,\n\t\"./decidim/decidim-logo-mobile.svg\": 99151,\n\t\"./decidim/decidim-logo.svg\": 69349,\n\t\"./france-connect-logo-mono.svg\": 22407,\n\t\"./france-connect-logo.svg\": 95321,\n\t\"./logo.png\": 3077,\n\t\"./republique.png\": 76769\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;","/* eslint-disable multiline-ternary, no-ternary */\n\n/*\n * Triggered when adding data-after-action to a link or button\n *\n * This is used to add an after action after sign in.\n *\n * When a button or link trigger a login modal we capture\n * the event and inject the after action to be done \n * after sign in (the after_action 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-after-action attribute the action to be done. \n * If any of this is missing no code will be injected.\n */\n$(() => {\n const removeAfterActionParameter = (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 afterAction = $(event.target).data(\"afterAction\");\n\n if (target && afterAction) {\n $(\"\").\n attr(\"id\", \"after_action\").\n attr(\"name\", \"after_action\").\n attr(\"value\", afterAction).\n appendTo(`${target} form`);\n\n $(`${target} a`).attr(\"href\", (index, href) => {\n const querystring = jQuery.param({\"after_action\": afterAction});\n return href + (href.match(/\\?/) ? \"&\" : \"?\") + querystring;\n });\n }\n });\n\n $(document).on(\"closed.zf.reveal\", (event) => {\n $(\"#after_action\", event.target).remove();\n $(\"a\", event.target).attr(\"href\", (index, href) => {\n if (href && href.indexOf(\"after_action\") !== -1) {\n return removeAfterActionParameter(href, \"after_action\");\n }\n\n return href;\n });\n });\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 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});","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(\"/api\", {\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 = 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 select from \"select\";\n\n/**\n * This provides functionality to add clipboard copy functionality to buttons\n * on the page. The element to be copied from has to be defined for the button\n * using a `data` attribute and the target element has to be a form input.\n *\n * Usage:\n * 1. Create the button:\n * \n *\n * 2. Make sure the target element exists on the page:\n * \n *\n * Options through data attributes:\n * - `data-clipboard-copy` = The jQuery selector for the target input element\n * where text will be copied from.\n * - `data-clipboard-copy-label` = The label that will be shown in the button\n * after a succesful copy.\n * - `data-clipboard-copy-message` = The text that will be announced to screen\n * readers after a successful copy.\n */\n\n// How long the \"copied\" text is shown in the copy element after successful\n// copy.\nconst CLIPBOARD_COPY_TIMEOUT = 5000;\n\n$(() => {\n $(document).on(\"click\", \"[data-clipboard-copy]\", (ev) => {\n const $el = $(ev.target);\n if (!$el.data(\"clipboard-copy\") || $el.data(\"clipboard-copy\").length < 1) {\n return;\n }\n\n const $input = $($el.data(\"clipboard-copy\"));\n if ($input.length < 1 || !$input.is(\"input, textarea, select\")) {\n return;\n }\n\n // Get the available text to clipboard.\n const selectedText = select($input[0]);\n if (!selectedText || selectedText.length < 1) {\n return;\n }\n\n // Move the selected text to clipboard.\n const $temp = $(``).css({\n width: 1,\n height: 1\n });\n $el.after($temp);\n $temp.select();\n\n const copyDone = () => {\n $temp.remove();\n $el.focus();\n };\n try {\n // document.execCommand is deprecated but the Clipboard API is not\n // supported by IE (which unfortunately is still a thing).\n if (!document.execCommand(\"copy\")) {\n return;\n }\n } catch (err) {\n copyDone();\n return;\n }\n copyDone();\n\n // Change the label to indicate the copying was successful.\n const label = $el.data(\"clipboard-copy-label\");\n if (label) {\n let to = $el.data(\"clipboard-copy-label-timeout\");\n if (to) {\n clearTimeout(to);\n }\n\n if (!$el.data(\"clipboard-copy-label-original\")) {\n $el.data(\"clipboard-copy-label-original\", $el.html());\n }\n\n $el.html(label);\n to = setTimeout(() => {\n $el.html($el.data(\"clipboard-copy-label-original\"));\n $el.removeData(\"clipboard-copy-label-original\");\n $el.removeData(\"clipboard-copy-label-timeout\");\n }, CLIPBOARD_COPY_TIMEOUT);\n $el.data(\"clipboard-copy-label-timeout\", to)\n }\n\n // Alert the screen reader what just happened (the link was copied).\n let message = $el.data(\"clipboard-copy-message\");\n if (message) {\n let $msg = $el.data(\"clipboard-message-element\");\n if ($msg) {\n if ($msg.html() === message) {\n // Try to hint the screen reader to re-read the text in the message\n // element.\n message += \" \";\n }\n } else {\n $msg = $('
    ');\n $el.after($msg);\n $el.data(\"clipboard-message-element\", $msg);\n }\n\n // Add the non breaking space always to content to try to force the\n // screen reader to reannounce the added text.\n $msg.html(message);\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","// This file is compiled inside Decidim core pack. Code can be added here and will be executed\n// as part of that pack\n\nimport \"src/decidim/append_after_action_to_modals\"\n\n// Load images\nrequire.context(\"../../images\", true)\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","/* 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","var map = {\n\t\"./decidim/avatar-multiuser.png\": 5661,\n\t\"./decidim/brands/google.svg\": 26582,\n\t\"./decidim/cc-badge.png\": 51071,\n\t\"./decidim/decidim-logo.svg\": 8290,\n\t\"./decidim/default-avatar.svg\": 20565,\n\t\"./decidim/gamification/badges/decidim_gamification_badges_followers.svg\": 48352,\n\t\"./decidim/icons.svg\": 32699,\n\t\"./decidim/pattern.png\": 30283,\n\t\"./decidim/placeholder.jpg\": 90340,\n\t\"./decidim/vendor/leaflet/layers-2x.png\": 22349,\n\t\"./decidim/vendor/leaflet/layers.png\": 88875,\n\t\"./decidim/vendor/leaflet/marker-icon-2x.png\": 25426,\n\t\"./decidim/vendor/leaflet/marker-icon.png\": 96948,\n\t\"./decidim/vendor/leaflet/marker-shadow.png\": 83964,\n\t\"./decidim/vendor/social-share-button/delicious.svg\": 70659,\n\t\"./decidim/vendor/social-share-button/douban.svg\": 73610,\n\t\"./decidim/vendor/social-share-button/email.svg\": 50084,\n\t\"./decidim/vendor/social-share-button/facebook.svg\": 4250,\n\t\"./decidim/vendor/social-share-button/google_bookmark.svg\": 91985,\n\t\"./decidim/vendor/social-share-button/google_plus.svg\": 91562,\n\t\"./decidim/vendor/social-share-button/hacker_news.svg\": 58524,\n\t\"./decidim/vendor/social-share-button/linkedin.svg\": 12045,\n\t\"./decidim/vendor/social-share-button/odnoklassniki.svg\": 48771,\n\t\"./decidim/vendor/social-share-button/pinterest.svg\": 85393,\n\t\"./decidim/vendor/social-share-button/qq.svg\": 54689,\n\t\"./decidim/vendor/social-share-button/reddit.svg\": 35217,\n\t\"./decidim/vendor/social-share-button/telegram.svg\": 45483,\n\t\"./decidim/vendor/social-share-button/tumblr.svg\": 31312,\n\t\"./decidim/vendor/social-share-button/twitter.svg\": 83614,\n\t\"./decidim/vendor/social-share-button/vkontakte.svg\": 39666,\n\t\"./decidim/vendor/social-share-button/wechat.svg\": 62458,\n\t\"./decidim/vendor/social-share-button/weibo.svg\": 91183,\n\t\"./decidim/vendor/social-share-button/whatsapp.svg\": 38415,\n\t\"./decidim/vendor/social-share-button/xing.svg\": 1174\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 = 41117;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/decidim-packs/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2835: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkapp\"] = self[\"webpackChunkapp\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [2415,4461,6690,2619,4705,6781,5490,7697,822], function() { return __webpack_require__(39712); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","$","document","on","event","target","data","afterAction","attr","appendTo","index","href","querystring","jQuery","param","match","remove","indexOf","url","parameter","urlParts","split","length","urlBase","shift","queryString","join","prefix","encodeURIComponent","parts","lastIndexOf","splice","removeAfterActionParameter","$userRegistrationForm","$userGroupFields","find","inputSelector","setGroupFieldsVisibility","value","hide","show","val","updateSubmitButton","$fieldContainer","$selectedItems","$form","closest","$submitButton","children","prop","messages","window","Decidim","config","get","mentionsModal","$searchInput","selected","options","iconsPath","removeLabel","removeRecipient","emptyFocusElement","querySelector","createElement","tabIndex","className","before","autoComplete","AutoComplete","dataMatchKeys","dataSource","query","callback","post","then","response","users","dataFilter","list","filter","item","includes","modifyResult","element","html","avatarUrl","name","nickname","directMessagesEnabled","addClass","append","directMessagesDisabled","membersCount","selection","detail","label","replace","setInput","push","evt","parentNode","tagName","focusElement","nextElementSibling","previousElementSibling","identifier","focus","COUNT_KEY","DEFAULT_MESSAGES","charactersAtLeast","one","other","charactersLeft","MESSAGES","InputCharacterCounter","input","this","$input","$target","minCharacters","parseInt","maxCharacters","describeByCounter","announceThreshold","Math","floor","announceEveryThreshold","targetId","random","toString","substr","parent","is","after","$srTarget","$userInput","Quill","setTimeout","_this","editor","siblings","root","initialize","updateInputLength","previousInputLength","inputLength","bindEvents","setDescribedBy","active","removeAttr","_this2","handleInput","updateStatus","updateScreenReaderStatus","addEventListener","getLength","checkScreenReaderUpdate","currentLength","getInputLength","srLength","getInputDirection","announcedAt","showMessages","message","remaining","dispatchEvent","CustomEvent","text","getMessages","getScreenReaderLength","extend","createCharacterCounter","each","_i","elem","DEFAULT_ATTRIBUTES","role","EXCLUDE_CLASSES","EXCLUDE_ANCESTOR_CLASSES","EXCLUDE_REL","externalLink","ExternalLink","link","$link","setup","some","cls","hasClass","parents","rel","hasAttribute","spacer","trim","generateElement","content","generateIcon","generateScreenReaderLabel","iconKey","attributes","iconAttributes","title","ariaLabel","Reflect","deleteProperty","htmlAttributes","forEach","key","newKey","ucw","toLowerCase","elHtml","$el","prepend","icon","updateExternalDomainLinks","whitelist","location","pathname","domain","_n","externalHref","correctErrors","FormValidator","form","handleError","announceFormError","$announce","el","_ev","trigger","CommentsComponent","$element","commentableGid","commentsUrl","rootDepth","order","lastCommentId","pollingInterval","singleComment","toggleTranslations","_getUID","mounted","_initializeComments","_fetchComments","_onInitOrder","_stopPolling","off","removeEventListener","_onTextInput","threadHtml","fromCurrentUser","$parent","$comment","$threads","_addComment","_finalizeCommentCreation","commentId","replyHtml","$replies","removeClass","Date","setUTCMilliseconds","$add","$opinionButtons","$text","_this3","_onToggleOpinion","$container","foundation","characterCounter","_pollComments","pollTimeout","_this4","successCallback","Rails","type","URLSearchParams","success","_this5","clearTimeout","_setLoading","ev","$btn","$selectedState","$alignment","$submit","addInputEmoji","containers","querySelectorAll","picker","EmojiButton","position","rootElement","parentElement","body","zIndex","reveal","style","overflowY","wrapper","btnContainer","btn","innerHTML","insertBefore","appendChild","handlerPicker","togglePicker","removeAttribute","setAttribute","emoji","Event","focusGuardClass","focusableNodes","focusableDisableableNodes","FocusGuard","container","guardedElement","Keyboard","enable","guards","guard","dataset","startGuard","createFocusGuard","endGuard","handleContainerFocus","visibleNodes","Array","from","isVisible","ind","isFocusGuard","isFocusable","blur","offsetWidth","offsetHeight","classList","contains","nodeName","getAttribute","tabindex","isNaN","Configuration","DataPicker","theDataPicker","focusGuard","dialog","$dialog","$title","$visibleReveal","trap","disable","svg4everybody","preventDefault","formDatePicker","_idx","createQuillEditor","comments","mountComponent","FormFilterComponent","links","sessionStorage","filteredParams","JSON","parse","getItem","backToListLink","selectedText","select","$temp","css","width","height","copyDone","execCommand","err","to","removeData","$msg","appendAround","matches","submit","disabled","apply","Foundation","hover","top","scrollTop","initializeListingOptionsMenu","containerSelector","pushState","registerCallback","callbackName","$targetMenu","dataAttribute","linkText","urlParameter","$impersonationWarning","endsAt","dayjs","exitInterval","setInterval","diff","diffInMinutes","round","reload","clearInterval","ConsentManager","modal","categories","cookieName","cookie","Cookies","warningElement","updateState","newState","state","stringify","host","sameSite","expires","secure","protocol","updateModalSelections","triggerState","script","consent","activeScript","src","replaceChild","allAccepted","original","childNodes","childNode","nodeType","Node","COMMENT_NODE","newElement","nodeValue","firstElementChild","createComment","outerHTML","cloned","cloneNode","triggerJavaScripts","triggerIframes","triggerWarnings","every","category","categoryEl","categoryInput","checked","essential","_toConsumableArray","manager","disabledIframes","iframe","initDisabledIframes","categoryButton","categoryDescription","add","acceptAllButton","rejectAllButton","saveSettingsButton","acceptAll","rejectAll","saveSettings","initModal","dialogWrapper","settingsButton","display","initDialog","require","morphdom","editUserForm","passwordChange","passwordFields","togglePasswordFieldValidators","enabled","field","initializeAccountForm","$deleteAccountForm","$deleteAccountModalForm","$openModalButton","$modal","reasonValue","error","console","stopPropagation","initializeDeleteAccount","redirectUrl","removeUrlParameter","$callout","ready","scrollTo","offset","behavior","$allDiffViews","$selected","$visibleDiffViewsId","not","first","slice","$visibleDiffViews","localStorage","getDismissedHelpers","serialized","dismissedHelpers","_index","setItem","addDismissedHelper","callbacks","callbackId","unregisterCallback","history","replaceState","onpopstate","isTrusted","hasOwnProperty","button","identitiesUrl","userIdentitiesDialog","click","ajax","done","liTag","method","urlDataAttr","dataType","$inputs","selectionStart","selectionEnd","originalEvent","jumpNext","maxLength","next","keyCode","jumpPrev","prev","$notificationsBellIcon","$wrapper","$section","$noNotificationsText","$pagination","emptyNotifications","$item","fadeOut","$checkbox","toggle","$responsiveTabBlock","innerWidth","toggleClass","process","allMessages","selfxssWarning","log","description","addUsersConversationDialog","n","s","_typeof","t","f","l","_version","_config","classPrefix","enableClasses","enableJSClass","usePrefixes","_q","addTest","fn","addAsyncTest","Modernizr","prototype","r","documentElement","c","a","i","aliases","Boolean","baseVal","RegExp","u","SocialShareButton","openUrl","left","screen","opt","open","share","path","params","site","appkey","img","via","desc","ga","GoogleAnalyticsObject","hashtags","viaStr","SocialShareWeChatButton","qrcode","decodeURIComponent","header","footer","getTumblrExtra","cutomData","source","quote","whatsappAppUrl","__webpack_module_cache__","moduleId","cachedModule","undefined","loaded","__webpack_modules__","call","m","O","result","chunkIds","priority","notFulfilled","Infinity","fulfilled","j","getter","__esModule","d","definition","defineProperty","enumerable","g","globalThis","Function","obj","nmd","paths","p","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","self","bind","__webpack_exports__"],"sourceRoot":""}