HEX
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/8.0.30
System: Linux multiplicar 3.10.0-1160.102.1.el7.x86_64 #1 SMP Tue Oct 17 15:42:21 UTC 2023 x86_64
User: root (0)
PHP: 8.0.30
Disabled: NONE
Upload Files
File: /var/www/html/dls/mod/forum/amd/build/discussion_nested_v2.min.js.map
{"version":3,"file":"discussion_nested_v2.min.js","sources":["../src/discussion_nested_v2.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Module for viewing a discussion in nested v2 view.\n *\n * @module mod_Forum/discussion_nested_v2\n * @copyright  2019 Ryan Wyllie <ryan@moodle.com>\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport $ from 'jquery';\nimport AutoRows from 'core/auto_rows';\nimport CustomEvents from 'core/custom_interaction_events';\nimport Notification from 'core/notification';\nimport Templates from 'core/templates';\nimport Discussion from 'mod_forum/discussion';\nimport InPageReply from 'mod_forum/inpage_reply';\nimport LockToggle from 'mod_forum/lock_toggle';\nimport FavouriteToggle from 'mod_forum/favourite_toggle';\nimport Pin from 'mod_forum/pin_toggle';\nimport Selectors from 'mod_forum/selectors';\nimport Subscribe from 'mod_forum/subscription_toggle';\n\nconst ANIMATION_DURATION = 150;\n\n/**\n * Get the closest post container element from the given element.\n *\n * @param {Object} element jQuery element to search from\n * @return {Object} jQuery element\n */\nconst getPostContainer = (element) => {\n    return element.closest(Selectors.post.post);\n};\n\n/**\n * Get the closest post container element from the given element.\n *\n * @param {Object} element jQuery element to search from\n * @param {Number} id Id of the post to find.\n * @return {Object} jQuery element\n */\nconst getPostContainerById = (element, id) => {\n    return element.find(`${Selectors.post.post}[data-post-id=${id}]`);\n};\n\n/**\n * Get the parent post container elements from the given element.\n *\n * @param {Object} element jQuery element to search from\n * @return {Object} jQuery element\n */\nconst getParentPostContainers = (element) => {\n    return element.parents(Selectors.post.post);\n};\n\n/**\n * Get the post content container element from the post container element.\n *\n * @param {Object} postContainer jQuery element for the post container\n * @return {Object} jQuery element\n */\nconst getPostContentContainer = (postContainer) => {\n    return postContainer.children().not(Selectors.post.repliesContainer).find(Selectors.post.forumCoreContent);\n};\n\n/**\n * Get the in page reply container element from the post container element.\n *\n * @param {Object} postContainer jQuery element for the post container\n * @return {Object} jQuery element\n */\nconst getInPageReplyContainer = (postContainer) => {\n    return postContainer.children().filter(Selectors.post.inpageReplyContainer);\n};\n\n/**\n * Get the in page reply form element from the post container element.\n *\n * @param {Object} postContainer jQuery element for the post container\n * @return {Object} jQuery element\n */\nconst getInPageReplyForm = (postContainer) => {\n    return getInPageReplyContainer(postContainer).find(Selectors.post.inpageReplyContent);\n};\n\n/**\n * Get the in page reply create (reply) button element from the post container element.\n *\n * @param {Object} postContainer jQuery element for the post container\n * @return {Object} jQuery element\n */\nconst getInPageReplyCreateButton = (postContainer) => {\n    return getPostContentContainer(postContainer).find(Selectors.post.inpageReplyCreateButton);\n};\n\n/**\n * Get the replies visibility toggle container (show/hide replies button container) element\n * from the post container element.\n *\n * @param {Object} postContainer jQuery element for the post container\n * @return {Object} jQuery element\n */\nconst getRepliesVisibilityToggleContainer = (postContainer) => {\n    return postContainer.children(Selectors.post.repliesVisibilityToggleContainer);\n};\n\n/**\n * Get the replies container element from the post container element.\n *\n * @param {Object} postContainer jQuery element for the post container\n * @return {Object} jQuery element\n */\nconst getRepliesContainer = (postContainer) => {\n    return postContainer.children(Selectors.post.repliesContainer);\n};\n\n/**\n * Check if the post has any replies.\n *\n * @param {Object} postContainer jQuery element for the post container\n * @return {Bool}\n */\nconst hasReplies = (postContainer) => {\n    return getRepliesContainer(postContainer).children().length > 0;\n};\n\n/**\n * Get the show replies button element from the replies visibility toggle container element.\n *\n * @param {Object} replyVisibilityToggleContainer jQuery element for the toggle container\n * @return {Object} jQuery element\n */\nconst getShowRepliesButton = (replyVisibilityToggleContainer) => {\n    return replyVisibilityToggleContainer.find(Selectors.post.showReplies);\n};\n\n/**\n * Get the hide replies button element from the replies visibility toggle container element.\n *\n * @param {Object} replyVisibilityToggleContainer jQuery element for the toggle container\n * @return {Object} jQuery element\n */\nconst getHideRepliesButton = (replyVisibilityToggleContainer) => {\n    return replyVisibilityToggleContainer.find(Selectors.post.hideReplies);\n};\n\n/**\n * Check if the replies are visible.\n *\n * @param {Object} postContainer jQuery element for the post container\n * @return {Bool}\n */\nconst repliesVisible = (postContainer) => {\n    const repliesContainer = getRepliesContainer(postContainer);\n    return repliesContainer.is(':visible');\n};\n\n/**\n * Show the post replies.\n *\n * @param {Object} postContainer jQuery element for the post container\n * @param {Number|null} postIdToSee Id of the post to scroll into view (if any)\n */\nconst showReplies = (postContainer, postIdToSee = null) => {\n    const repliesContainer = getRepliesContainer(postContainer);\n    const replyVisibilityToggleContainer = getRepliesVisibilityToggleContainer(postContainer);\n    const showButton = getShowRepliesButton(replyVisibilityToggleContainer);\n    const hideButton = getHideRepliesButton(replyVisibilityToggleContainer);\n\n    showButton.addClass('hidden');\n    hideButton.removeClass('hidden');\n\n    repliesContainer.slideDown({\n        duration: ANIMATION_DURATION,\n        queue: false,\n        complete: () => {\n            if (postIdToSee) {\n                const postContainerToSee = getPostContainerById(repliesContainer, postIdToSee);\n                if (postContainerToSee.length) {\n                    postContainerToSee[0].scrollIntoView();\n                }\n            }\n        }\n    }).css('display', 'none').fadeIn(ANIMATION_DURATION);\n};\n\n/**\n * Hide the post replies.\n *\n * @param {Object} postContainer jQuery element for the post container\n */\nconst hideReplies = (postContainer) => {\n    const repliesContainer = getRepliesContainer(postContainer);\n    const replyVisibilityToggleContainer = getRepliesVisibilityToggleContainer(postContainer);\n    const showButton = getShowRepliesButton(replyVisibilityToggleContainer);\n    const hideButton = getHideRepliesButton(replyVisibilityToggleContainer);\n\n    showButton.removeClass('hidden');\n    hideButton.addClass('hidden');\n\n    repliesContainer.slideUp({\n        duration: ANIMATION_DURATION,\n        queue: false\n    }).fadeOut(ANIMATION_DURATION);\n};\n\n/** Variable to hold the showInPageReplyForm function after it's built. */\nlet showInPageReplyForm = null;\n\n/**\n * Build the showInPageReplyForm function with the given additional template context.\n *\n * @param {Object} additionalTemplateContext Additional render context for the in page reply template.\n * @return {Function}\n */\nconst buildShowInPageReplyFormFunction = (additionalTemplateContext) => {\n    /**\n     * Show the in page reply form in the given in page reply container. The form\n     * display will be animated.\n     *\n     * @param {Object} postContainer jQuery element for the post container\n     */\n    return async(postContainer) => {\n\n        const inPageReplyContainer = getInPageReplyContainer(postContainer);\n        const repliesVisibilityToggleContainer = getRepliesVisibilityToggleContainer(postContainer);\n        const inPageReplyCreateButton = getInPageReplyCreateButton(postContainer);\n\n        if (!hasInPageReplyForm(inPageReplyContainer)) {\n            try {\n                const html = await renderInPageReplyTemplate(additionalTemplateContext, inPageReplyCreateButton, postContainer);\n                Templates.appendNodeContents(inPageReplyContainer, html, '');\n            } catch (e) {\n                Notification.exception(e);\n            }\n\n            // Load formchangechecker module.\n            import('core/yui')\n                .then(Y => {\n                    return new Promise(resolve => {\n                        Y.use('moodle-core-formchangechecker', Y => {\n                            resolve(Y);\n                        });\n                    });\n                })\n                .then(Y => {\n                    M.core_formchangechecker.init({formid: Y.one(postContainer[0].querySelector('form')).generateID()});\n                    return Y;\n                })\n                .catch();\n        }\n\n        inPageReplyCreateButton.fadeOut(ANIMATION_DURATION, () => {\n            const inPageReplyForm = getInPageReplyForm(postContainer);\n            inPageReplyForm.slideDown({\n                duration: ANIMATION_DURATION,\n                queue: false,\n                complete: () => {\n                    inPageReplyForm.find('textarea').focus();\n                }\n            }).css('display', 'none').fadeIn(ANIMATION_DURATION);\n\n            if (repliesVisibilityToggleContainer.length && hasReplies(postContainer)) {\n                repliesVisibilityToggleContainer.fadeIn(ANIMATION_DURATION);\n                hideReplies(postContainer);\n            }\n        });\n    };\n};\n\n/**\n * Hide the in page reply form in the given in page reply container. The form\n * display will be animated.\n *\n * @param {Object} postContainer jQuery element for the post container\n * @param {Number|null} postIdToSee Id of the post to scroll into view (if any)\n */\nconst hideInPageReplyForm = (postContainer, postIdToSee = null) => {\n    const inPageReplyForm = getInPageReplyForm(postContainer);\n    const inPageReplyCreateButton = getInPageReplyCreateButton(postContainer);\n    const repliesVisibilityToggleContainer = getRepliesVisibilityToggleContainer(postContainer);\n\n    if (repliesVisibilityToggleContainer.length && hasReplies(postContainer)) {\n        repliesVisibilityToggleContainer.fadeOut(ANIMATION_DURATION);\n        if (!repliesVisible(postContainer)) {\n            showReplies(postContainer, postIdToSee);\n        }\n    }\n\n    inPageReplyForm.slideUp({\n        duration: ANIMATION_DURATION,\n        queue: false,\n        complete: () => {\n            inPageReplyCreateButton.fadeIn(ANIMATION_DURATION);\n        }\n    }).fadeOut(200);\n};\n\n/**\n * Check if the in page reply container contains the in page reply form.\n *\n * @param {Object} inPageReplyContainer jQuery element for the in page reply container\n * @return {Bool}\n */\nconst hasInPageReplyForm = (inPageReplyContainer) => {\n    return inPageReplyContainer.find(Selectors.post.inpageReplyContent).length > 0;\n};\n\n/**\n * Render the template to generate the in page reply form HTML.\n *\n * @param {Object} additionalTemplateContext Additional render context for the in page reply template\n * @param {Object} button jQuery element for the reply button that was clicked\n * @param {Object} postContainer jQuery element for the post container\n * @return {Object} jQuery promise\n */\nconst renderInPageReplyTemplate = (additionalTemplateContext, button, postContainer) => {\n    const postContentContainer = getPostContentContainer(postContainer);\n    const currentSubject = postContentContainer.find(Selectors.post.forumSubject).text();\n    const currentAuthorName = postContentContainer.find(Selectors.post.authorName).text();\n    const context = {\n        postid: postContainer.data('post-id'),\n        \"reply_url\": button.attr('data-href'),\n        sesskey: M.cfg.sesskey,\n        parentsubject: currentSubject,\n        parentauthorname: currentAuthorName,\n        canreplyprivately: button.data('can-reply-privately'),\n        postformat: InPageReply.CONTENT_FORMATS.MOODLE,\n        ...additionalTemplateContext\n    };\n\n    return Templates.render('mod_forum/inpage_reply_v2', context);\n};\n\n/**\n * Increment the total reply count in the show/hide replies buttons for the post.\n *\n * @param {Object} postContainer jQuery element for the post container\n */\nconst incrementTotalReplyCount = (postContainer) => {\n    getRepliesVisibilityToggleContainer(postContainer).find(Selectors.post.replyCount).each((index, element) => {\n        const currentCount = parseInt(element.innerText, 10);\n        element.innerText = currentCount + 1;\n    });\n};\n\n/**\n * Create all of the event listeners for the discussion.\n *\n * @param {Object} root jQuery element for the discussion container\n */\nconst registerEventListeners = (root) => {\n    CustomEvents.define(root, [CustomEvents.events.activate]);\n    // Auto expanding text area for in page reply.\n    AutoRows.init(root);\n\n    // Reply button is clicked.\n    root.on(CustomEvents.events.activate, Selectors.post.inpageReplyCreateButton, (e, data) => {\n        data.originalEvent.preventDefault();\n        const postContainer = getPostContainer($(e.currentTarget));\n        showInPageReplyForm(postContainer);\n    });\n\n    // Cancel in page reply button.\n    root.on(CustomEvents.events.activate, Selectors.post.inpageReplyCancelButton, (e, data) => {\n        data.originalEvent.preventDefault();\n        const postContainer = getPostContainer($(e.currentTarget));\n        hideInPageReplyForm(postContainer);\n    });\n\n    // Show replies button clicked.\n    root.on(CustomEvents.events.activate, Selectors.post.showReplies, (e, data) => {\n        data.originalEvent.preventDefault();\n        const postContainer = getPostContainer($(e.target));\n        showReplies(postContainer);\n    });\n\n    // Hide replies button clicked.\n    root.on(CustomEvents.events.activate, Selectors.post.hideReplies, (e, data) => {\n        data.originalEvent.preventDefault();\n        const postContainer = getPostContainer($(e.target));\n        hideReplies(postContainer);\n    });\n\n    // Post created with in page reply.\n    root.on(InPageReply.EVENTS.POST_CREATED, Selectors.post.inpageSubmitBtn, (e, newPostId) => {\n        const currentTarget = $(e.currentTarget);\n        const postContainer = getPostContainer(currentTarget);\n        const postContainers = getParentPostContainers(currentTarget);\n        hideInPageReplyForm(postContainer, newPostId);\n\n        postContainers.each((index, container) => {\n            incrementTotalReplyCount($(container));\n        });\n    });\n};\n\n/**\n * Initialise the javascript for the discussion in nested v2 display mode.\n *\n * @param {Object} root jQuery element for the discussion container\n * @param {Object} context Additional render context for the in page reply template\n */\nexport const init = (root, context) => {\n    // Build the showInPageReplyForm function with the additional render context.\n    showInPageReplyForm = buildShowInPageReplyFormFunction(context);\n    // Add discussion event listeners.\n    registerEventListeners(root);\n    // Initialise default discussion javascript (keyboard nav etc).\n    Discussion.init(root);\n    // Add in page reply javascript.\n    InPageReply.init(root);\n\n    // Initialise the settings menu javascript.\n    const discussionToolsContainer = root.find(Selectors.discussion.tools);\n    LockToggle.init(discussionToolsContainer, false);\n    FavouriteToggle.init(discussionToolsContainer, false, (toggleElement, response) => {\n        const newTargetState = response.userstate.favourited ? 0 : 1;\n        return toggleElement.data('targetstate', newTargetState);\n    });\n    Pin.init(discussionToolsContainer, false, (toggleElement, response) => {\n        const newTargetState = response.pinned ? 0 : 1;\n        return toggleElement.data('targetstate', newTargetState);\n    });\n    Subscribe.init(discussionToolsContainer, false, (toggleElement, response) => {\n        const newTargetState = response.userstate.subscribed ? 0 : 1;\n        toggleElement.data('targetstate', newTargetState);\n    });\n};\n"],"names":["getPostContainer","element","closest","Selectors","post","getPostContainerById","id","find","getPostContentContainer","postContainer","children","not","repliesContainer","forumCoreContent","getInPageReplyContainer","filter","inpageReplyContainer","getInPageReplyForm","inpageReplyContent","getInPageReplyCreateButton","inpageReplyCreateButton","getRepliesVisibilityToggleContainer","repliesVisibilityToggleContainer","getRepliesContainer","hasReplies","length","getShowRepliesButton","replyVisibilityToggleContainer","showReplies","getHideRepliesButton","hideReplies","repliesVisible","is","postIdToSee","showButton","hideButton","addClass","removeClass","slideDown","duration","queue","complete","postContainerToSee","scrollIntoView","css","fadeIn","slideUp","fadeOut","showInPageReplyForm","buildShowInPageReplyFormFunction","additionalTemplateContext","inPageReplyContainer","inPageReplyCreateButton","hasInPageReplyForm","renderInPageReplyTemplate","html","appendNodeContents","exception","then","Y","Promise","resolve","use","M","core_formchangechecker","init","formid","one","querySelector","generateID","catch","inPageReplyForm","focus","hideInPageReplyForm","button","postContentContainer","currentSubject","forumSubject","text","currentAuthorName","authorName","context","postid","data","attr","sesskey","cfg","parentsubject","parentauthorname","canreplyprivately","postformat","InPageReply","CONTENT_FORMATS","MOODLE","Templates","render","registerEventListeners","root","define","CustomEvents","events","activate","on","e","originalEvent","preventDefault","currentTarget","inpageReplyCancelButton","target","EVENTS","POST_CREATED","inpageSubmitBtn","newPostId","postContainers","parents","each","index","container","replyCount","currentCount","parseInt","innerText","incrementTotalReplyCount","discussionToolsContainer","discussion","tools","toggleElement","response","newTargetState","userstate","favourited","pinned","subscribed"],"mappings":"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"}