Sindbad~EG File Manager

Current Path : /var/www/html/universidad.bristol.com.py/grade/report/grader/amd/build/
Upload File :
Current File : /var/www/html/universidad.bristol.com.py/grade/report/grader/amd/build/search.min.js.map

{"version":3,"file":"search.min.js","sources":["../src/search.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 * Allow the user to search for learners within the grader report.\n * Have to basically search twice on the dataset to avoid passing around massive csv params whilst allowing debouncing.\n *\n * @module    gradereport_grader/search\n * @copyright 2023 Mathew May <mathew.solutions>\n * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport GradebookSearchClass from 'gradereport_grader/search/search_class';\nimport * as Repository from 'gradereport_grader/search/repository';\nimport {get_strings as getStrings} from 'core/str';\nimport Url from 'core/url';\nimport {renderForPromise, replaceNodeContents} from 'core/templates';\n\n// Define our standard lookups.\nconst selectors = {\n    component: '.user-search',\n    courseid: '[data-region=\"courseid\"]',\n    resetPageButton: '[data-action=\"resetpage\"]',\n};\nconst component = document.querySelector(selectors.component);\nconst courseID = component.querySelector(selectors.courseid).dataset.courseid;\nconst bannedFilterFields = ['profileimageurlsmall', 'profileimageurl', 'id', 'link', 'matchingField', 'matchingFieldName'];\n\nexport default class UserSearch extends GradebookSearchClass {\n\n    // A map of user profile field names that is human-readable.\n    profilestringmap = null;\n\n    constructor() {\n        super();\n    }\n\n    static init() {\n        return new UserSearch();\n    }\n\n    /**\n     * The overall div that contains the searching widget.\n     *\n     * @returns {string}\n     */\n    setComponentSelector() {\n        return '.user-search';\n    }\n\n    /**\n     * The dropdown div that contains the searching widget result space.\n     *\n     * @returns {string}\n     */\n    setDropdownSelector() {\n        return '.usersearchdropdown';\n    }\n\n    /**\n     * The triggering div that contains the searching widget.\n     *\n     * @returns {string}\n     */\n    setTriggerSelector() {\n        return '.usersearchwidget';\n    }\n\n    /**\n     * Build the content then replace the node.\n     */\n    async renderDropdown() {\n        const {html, js} = await renderForPromise('gradereport_grader/search/resultset', {\n            users: this.getMatchedResults().slice(0, 5),\n            hasusers: this.getMatchedResults().length > 0,\n            matches: this.getMatchedResults().length,\n            showing: this.getMatchedResults().slice(0, 5).length,\n            searchterm: this.getSearchTerm(),\n            selectall: this.selectAllResultsLink(),\n        });\n        replaceNodeContents(this.getHTMLElements().searchDropdown, html, js);\n    }\n\n    /**\n     * Get the data we will be searching against in this component.\n     *\n     * @returns {Promise<*>}\n     */\n    fetchDataset() {\n        return Repository.userFetch(courseID).then((r) => r.users);\n    }\n\n    /**\n     * Dictate to the search component how and what we want to match upon.\n     *\n     * @param {Array} filterableData\n     * @returns {Array} The users that match the given criteria.\n     */\n    async filterDataset(filterableData) {\n        return filterableData.filter((user) => Object.keys(user).some((key) => {\n            if (user[key] === \"\" || bannedFilterFields.includes(key)) {\n                return false;\n            }\n            return user[key].toString().toLowerCase().includes(this.getPreppedSearchTerm());\n        }));\n    }\n\n    /**\n     * Given we have a subset of the dataset, set the field that we matched upon to inform the end user.\n     *\n     * @returns {Array} The results with the matched fields inserted.\n     */\n    async filterMatchDataset() {\n        const stringMap = await this.getStringMap();\n        this.setMatchedResults(\n            this.getMatchedResults().map((user) => {\n                for (const [key, value] of Object.entries(user)) {\n                    const valueString = value.toString().toLowerCase();\n                    if (!valueString.includes(this.getPreppedSearchTerm())) {\n                        continue;\n                    }\n                    // Ensure we have a good string, otherwise fallback to the key.\n                    user.matchingFieldName = stringMap.get(key) ?? key;\n                    user.matchingField = valueString.replace(\n                        this.getPreppedSearchTerm(),\n                        `<span class=\"font-weight-bold\">${this.getSearchTerm()}</span>`\n                    );\n                    user.matchingField = `${user.matchingField} (${user.email})`;\n                    user.link = this.selectOneLink(user.id);\n                    break;\n                }\n                return user;\n            })\n        );\n    }\n\n    /**\n     * The handler for when a user interacts with the component.\n     *\n     * @param {MouseEvent} e The triggering event that we are working with.\n     */\n    clickHandler(e) {\n        super.clickHandler(e);\n        if (e.target === this.getHTMLElements().currentViewAll && e.button === 0) {\n            window.location = this.selectAllResultsLink();\n        }\n        if (e.target.closest(selectors.resetPageButton)) {\n            window.location = e.target.closest(selectors.resetPageButton).href;\n        }\n    }\n\n    /**\n     * The handler for when a user presses a key within the component.\n     *\n     * @param {KeyboardEvent} e The triggering event that we are working with.\n     */\n    keyHandler(e) {\n        super.keyHandler(e);\n\n        if (e.target === this.getHTMLElements().currentViewAll && (e.key === 'Enter' || e.key === 'Space')) {\n            window.location = this.selectAllResultsLink();\n        }\n\n        // Switch the key presses to handle keyboard nav.\n        switch (e.key) {\n            case 'Enter':\n            case ' ':\n                if (document.activeElement === this.getHTMLElements().searchInput) {\n                    if (e.key === ' ') {\n                        break;\n                    } else {\n                        window.location = this.selectAllResultsLink();\n                        break;\n                    }\n                }\n                if (document.activeElement === this.getHTMLElements().clearSearchButton) {\n                    this.closeSearch(true);\n                    break;\n                }\n                if (e.target.closest(selectors.resetPageButton)) {\n                    window.location = e.target.closest(selectors.resetPageButton).href;\n                    break;\n                }\n                if (e.target.closest('.dropdown-item')) {\n                    e.preventDefault();\n                    window.location = e.target.closest('.dropdown-item').href;\n                    break;\n                }\n                break;\n            case 'Escape':\n                this.toggleDropdown();\n                this.searchInput.focus({preventScroll: true});\n                break;\n            case 'Tab':\n                // If the current focus is on clear search, then check if viewall exists then around tab to it.\n                if (e.target.closest(this.selectors.clearSearch)) {\n                    if (this.currentViewAll && !e.shiftKey) {\n                        e.preventDefault();\n                        this.currentViewAll.focus({preventScroll: true});\n                    } else {\n                        this.closeSearch();\n                    }\n                }\n                break;\n        }\n    }\n\n    /**\n     * Build up the view all link.\n     *\n     * @returns {string|*}\n     */\n    selectAllResultsLink() {\n        return Url.relativeUrl('/grade/report/grader/index.php', {\n            id: courseID,\n            searchvalue: this.getSearchTerm()\n        }, false);\n    }\n\n    /**\n     * Build up the view all link that is dedicated to a particular result.\n     *\n     * @param {Number} userID The ID of the user selected.\n     * @returns {string|*}\n     */\n    selectOneLink(userID) {\n        return Url.relativeUrl('/grade/report/grader/index.php', {\n            id: courseID,\n            searchvalue: this.getSearchTerm(),\n            userid: userID,\n            }, false);\n    }\n\n    /**\n     * Given the set of profile fields we can possibly search, fetch their strings,\n     * so we can report to screen readers the field that matched.\n     *\n     * @returns {Promise<void>}\n     */\n    getStringMap() {\n        if (!this.profilestringmap) {\n            const requiredStrings = [\n                'username',\n                'firstname',\n                'lastname',\n                'email',\n                'city',\n                'country',\n                'department',\n                'institution',\n                'idnumber',\n                'phone1',\n                'phone2',\n            ];\n            this.profilestringmap = getStrings(requiredStrings.map((key) => ({key})))\n                .then((stringArray) => new Map(\n                    requiredStrings.map((key, index) => ([key, stringArray[index]]))\n                ));\n        }\n        return this.profilestringmap;\n    }\n}\n"],"names":["selectors","courseID","document","querySelector","dataset","courseid","bannedFilterFields","UserSearch","GradebookSearchClass","constructor","setComponentSelector","setDropdownSelector","setTriggerSelector","html","js","users","this","getMatchedResults","slice","hasusers","length","matches","showing","searchterm","getSearchTerm","selectall","selectAllResultsLink","getHTMLElements","searchDropdown","fetchDataset","Repository","userFetch","then","r","filterableData","filter","user","Object","keys","some","key","includes","toString","toLowerCase","getPreppedSearchTerm","stringMap","getStringMap","setMatchedResults","map","value","entries","valueString","matchingFieldName","get","matchingField","replace","email","link","selectOneLink","id","clickHandler","e","target","currentViewAll","button","window","location","closest","href","keyHandler","activeElement","searchInput","clearSearchButton","closeSearch","preventDefault","toggleDropdown","focus","preventScroll","clearSearch","shiftKey","Url","relativeUrl","searchvalue","userID","userid","profilestringmap","requiredStrings","stringArray","Map","index"],"mappings":"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"}

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists