weekly release 4.0dev
[moodle.git] / mod / forum / amd / build / discussion_nested_v2.min.js.map
1 {"version":3,"sources":["../src/discussion_nested_v2.js"],"names":["getPostContainer","element","closest","Selectors","post","getPostContainerById","id","find","getParentPostContainers","parents","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","Templates","appendNodeContents","Notification","exception","inPageReplyForm","focus","hideInPageReplyForm","button","postContentContainer","currentSubject","forumSubject","text","currentAuthorName","authorName","context","postid","data","attr","sesskey","M","cfg","parentsubject","parentauthorname","canreplyprivately","postformat","InPageReply","CONTENT_FORMATS","MOODLE","render","incrementTotalReplyCount","replyCount","each","index","currentCount","parseInt","innerText","registerEventListeners","root","CustomEvents","define","events","activate","AutoRows","init","on","e","originalEvent","preventDefault","currentTarget","inpageReplyCancelButton","target","EVENTS","POST_CREATED","inpageSubmitBtn","newPostId","postContainers","container","Discussion","discussionToolsContainer","discussion","tools","LockToggle","FavouriteToggle","toggleElement","response","newTargetState","userstate","favourited","Pin","pinned","Subscribe","subscribed"],"mappings":"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","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 * @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\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"],"file":"discussion_nested_v2.min.js"}