{"version":3,"file":"js/decidim_comments-4dfbec90f7380ba7cb92.js","mappings":"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","sources":["webpack://decidim-development-app/../usr/local/bundle/bundler/gems/decidim-d961f2dc6233/decidim-core/app/packs/src/decidim/change_report_form_behavior.js","webpack://decidim-development-app/../usr/local/bundle/bundler/gems/decidim-d961f2dc6233/decidim-comments/app/packs/src/decidim/comments/comments.component.js","webpack://decidim-development-app/../usr/local/bundle/bundler/gems/decidim-d961f2dc6233/decidim-comments/app/packs/src/decidim/comments/comments.js"],"sourcesContent":["/**\n * These set of functions aims to change the behavior of the report modal forms\n * so that when checking various checkboxes, to change the label of the button\n * to either report or hide.\n * Given the behavior is similar for report content and report user, we have the\n * functionality grouped in one single function.\n * It is important to note that the report user modal has a checkbox that allows\n * the admin to block the user in the report user modal.\n */\n\n/**\n * @param {DomElement} input The checkbox that is being checked\n * @return {Void} Nothing\n */\nconst changeLabel = function (input) {\n let submit = input.closest(\"form\").querySelector(\"button[type=submit]\");\n\n if (submit.querySelector(\"span\") !== null) {\n submit = submit.querySelector(\"span\");\n }\n if (input.checked === true) {\n submit.innerHTML = input.dataset.labelAction;\n } else {\n submit.innerHTML = input.dataset.labelReport;\n }\n}\n\n/**\n * @param {Object} container The form handling the report.\n * @return {Void} Nothing\n */\nexport default function changeReportFormBehavior(container) {\n container.querySelectorAll(\"[data-hide=true]\").forEach((checkbox) => {\n checkbox.addEventListener(\"change\", (event) => {\n changeLabel(event.target);\n });\n });\n container.querySelectorAll(\"[data-block=true]\").forEach((checkbox) => {\n checkbox.addEventListener(\"change\", (event) => {\n changeLabel(event.target);\n let blockAndHide = event.target.closest(\"form\").querySelector(\"#block_and_hide\");\n blockAndHide.classList.toggle(\"invisible\");\n });\n });\n}\n","/* eslint id-length: [\"error\", { \"exceptions\": [\"$\"] }] */\n/* eslint max-lines: [\"error\", {\"max\": 350, \"skipBlankLines\": true}] */\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 changeReportFormBehavior from \"src/decidim/change_report_form_behavior\"\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 }\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 $(\".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.addClass(\"comment-reply\");\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 document.querySelectorAll(\".new_report\").forEach((container) => changeReportFormBehavior(container))\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\n this._initializeComments($container);\n document.dispatchEvent(new CustomEvent(\"comments:loaded\", { detail: {commentsIds: [this.lastCommentId] }}));\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 $(\"textarea\", $add).each((_i, text) => {\n const $text = $(text);\n // Reset textarea content\n $text.val(\"\")\n // Update characterCounter component\n const characterCounter = $text.data(\"remaining-characters-counter\");\n if (characterCounter) {\n characterCounter.handleInput();\n characterCounter.updateStatus();\n }\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 // From here, the rest of properties are optional\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\", this.$element);\n $(\"> .comments\", $container).addClass(\"hidden\");\n $(\"> .loading-comments\", $container).removeClass(\"hidden\");\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 CommentsComponent from \"src/decidim/comments/comments.component\"\n\nwindow.Decidim.CommentsComponent = CommentsComponent;\n\nconst commentsInitializer = () => {\n // Mount comments component\n $(\"[data-decidim-comments]\").each((_i, el) => {\n const $el = $(el);\n let comments = $(el).data(\"comments\");\n if (!comments) {\n comments = new CommentsComponent($el, $el.data(\"decidim-comments\"));\n }\n comments.mountComponent();\n $(el).data(\"comments\", comments);\n });\n}\n\n// If no jQuery is used the Tribute feature used in comments to autocomplete\n// mentions stops working\n$(() => commentsInitializer());\n"],"names":["changeLabel","input","submit","closest","querySelector","checked","innerHTML","dataset","labelAction","labelReport","$","window","CommentsComponent","$element","config","_classCallCheck","this","commentableGid","commentsUrl","rootDepth","order","lastCommentId","pollingInterval","singleComment","toggleTranslations","id","attr","_getUID","mounted","key","value","_this","length","_initializeComments","prop","_fetchComments","_this2","_stopPolling","off","each","_i","el","removeEventListener","_onTextInput","threadHtml","fromCurrentUser","arguments","undefined","$parent","$comment","$threads","_addComment","_finalizeCommentCreation","commentId","replyHtml","concat","$replies","addClass","Date","setUTCMilliseconds","Math","floor","random","_this3","$add","$form","$opinionButtons","$text","on","_onToggleOpinion","document","trigger","get","querySelectorAll","forEach","container","checkbox","addEventListener","event","target","classList","toggle","changeReportFormBehavior","$target","$container","parseInt","data","append","dispatchEvent","CustomEvent","detail","commentsIds","text","val","characterCounter","handleInput","updateStatus","_pollComments","_this4","pollTimeout","setTimeout","_this5","successCallback","Rails","ajax","url","type","URLSearchParams","_objectSpread","success","clearTimeout","removeClass","_setLoading","ev","$btn","is","parents","$selectedState","$alignment","$submit","removeAttr","Decidim","$el","comments","mountComponent"],"sourceRoot":""}