MDL-66893 mod_forum: update navigation bar in grader UI
[moodle.git] / mod / forum / amd / build / grades / grader.min.js.map
1 {"version":3,"sources":["../../src/grades/grader.js"],"names":["templateNames","contentRegion","getContentForUserIdFunction","cmid","userid","Repository","getDiscussionByUserID","then","context","discussions","map","discussionPostMapper","Templates","render","catch","Notification","exception","getUsersForCmidFunction","CourseRepository","getUsersFromCourseModuleID","users","findGradableNode","node","closest","Selectors","gradableItem","discussion","parentMap","Map","posts","parentposts","forEach","post","set","id","userPosts","userposts","subject","readonly","starter","parentid","parent","get","html","rating","name","launchWholeForumGrading","rootNode","data","dataset","Grader","getGradingPanelFunctions","contextid","gradingComponent","gradingComponentSubtype","gradableItemtype","gradingPanelFunctions","launch","getter","setter","groupid","initialUserId","initialuserid","moduleName","courseName","courseUrl","courseId","registerLaunchListeners","document","addEventListener","e","target","matches","Error","gradableItems","wholeForum","preventDefault"],"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 * This module will tie together all of the different calls the gradable module will make.\n *\n * @module     mod_forum/grades/grader\n * @package    mod_forum\n * @copyright  2019 Andrew Nicols <andrew@nicols.co.uk>\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport * as Selectors from './grader/selectors';\nimport Repository from 'mod_forum/repository';\nimport Templates from 'core/templates';\nimport * as Grader from '../local/grades/grader';\nimport Notification from 'core/notification';\nimport CourseRepository from 'core_course/repository';\nimport {relativeUrl} from 'core/url';\n\nconst templateNames = {\n    contentRegion: 'mod_forum/grades/grader/discussion/posts',\n};\n\n/**\n * Curried function with CMID set, this is then used in unified grader as a fetch a users content.\n *\n * @param {Number} cmid\n * @return {Function}\n */\nconst getContentForUserIdFunction = (cmid) => (userid) => {\n    /**\n     * Given the parent function is called with the second param set execute the partially executed function.\n     *\n     * @param {Number} userid\n     */\n    return Repository.getDiscussionByUserID(userid, cmid)\n        .then(context => {\n            // Rebuild the returned data for the template.\n            context.discussions = context.discussions.map(discussionPostMapper);\n\n            return Templates.render(templateNames.contentRegion, context);\n        })\n        .catch(Notification.exception);\n};\n\n/**\n * Curried function with CMID set, this is then used in unified grader as a fetch users call.\n * The function curried fetches all users in a course for a given CMID.\n *\n * @param {Number} cmid\n * @return {Array} Array of users for a given context.\n */\nconst getUsersForCmidFunction = (cmid) => async() => {\n    const context = await CourseRepository.getUsersFromCourseModuleID(cmid);\n\n    return context.users;\n};\n\n\nconst findGradableNode = node => node.closest(Selectors.gradableItem);\n\n/**\n * For a discussion we need to manipulate it's posts to hide certain UI elements.\n *\n * @param {Object} discussion\n * @return {Array} name, id, posts\n */\nconst discussionPostMapper = (discussion) => {\n    // Map postid => post.\n    const parentMap = new Map();\n    discussion.posts.parentposts.forEach(post => parentMap.set(post.id, post));\n    const userPosts = discussion.posts.userposts.map(post => {\n        post.subject = null;\n        post.readonly = true;\n        post.starter = !post.parentid;\n        post.parent = parentMap.get(post.parentid);\n        post.html.rating = null;\n\n        return post;\n    });\n\n    return {\n        id: discussion.id,\n        name: discussion.name,\n        posts: userPosts,\n    };\n};\n\n/**\n * Launch the Grader.\n *\n * @param {HTMLElement} rootNode the root HTML element describing what is to be graded\n */\nconst launchWholeForumGrading = async(rootNode) => {\n    const data = rootNode.dataset;\n    const gradingPanelFunctions = await Grader.getGradingPanelFunctions(\n        'mod_forum',\n        data.contextid,\n        data.gradingComponent,\n        data.gradingComponentSubtype,\n        data.gradableItemtype\n    );\n\n    await Grader.launch(\n        getUsersForCmidFunction(data.cmid),\n        getContentForUserIdFunction(data.cmid),\n        gradingPanelFunctions.getter,\n        gradingPanelFunctions.setter,\n        {\n            groupid: data.groupid,\n            initialUserId: data.initialuserid,\n            moduleName: data.name,\n            courseName: data.courseName,\n            courseUrl: relativeUrl('/course/view.php', {id: data.courseId})\n        }\n    );\n};\n\n/**\n * Register listeners to launch the grading panel.\n */\nexport const registerLaunchListeners = () => {\n    document.addEventListener('click', async(e) => {\n        if (e.target.matches(Selectors.launch)) {\n            const rootNode = findGradableNode(e.target);\n\n            if (!rootNode) {\n                throw Error('Unable to find a gradable item');\n            }\n\n            if (rootNode.matches(Selectors.gradableItems.wholeForum)) {\n                // Note: The preventDefault must be before any async function calls because the function becomes async\n                // at that point and the default action is implemented.\n                e.preventDefault();\n                try {\n                    await launchWholeForumGrading(rootNode);\n                } catch (error) {\n                    Notification.exception(error);\n                }\n            } else {\n                throw Error('Unable to find a valid gradable item');\n            }\n        }\n    });\n};\n"],"file":"grader.min.js"}