Sindbad~EG File Manager

Current Path : /var/www/html/atlasseguros.sumar.com.py/group/amd/build/comboboxsearch/
Upload File :
Current File : /var/www/html/atlasseguros.sumar.com.py/group/amd/build/comboboxsearch/group.min.js.map

{"version":3,"file":"group.min.js","sources":["../../src/comboboxsearch/group.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 groups.\n *\n * @module    core_group/comboboxsearch/group\n * @copyright 2023 Mathew May <mathew.solutions>\n * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport search_combobox from 'core/comboboxsearch/search_combobox';\nimport {groupFetch} from 'core_group/comboboxsearch/repository';\nimport {renderForPromise, replaceNodeContents} from 'core/templates';\nimport {debounce} from 'core/utils';\nimport Notification from 'core/notification';\n\nexport default class GroupSearch extends search_combobox {\n\n    courseID;\n    bannedFilterFields = ['id', 'link', 'groupimageurl'];\n\n    constructor() {\n        super();\n        this.selectors = {...this.selectors,\n            courseid: '[data-region=\"courseid\"]',\n            placeholder: '.groupsearchdropdown [data-region=\"searchplaceholder\"]',\n        };\n        const component = document.querySelector(this.componentSelector());\n        this.courseID = component.querySelector(this.selectors.courseid).dataset.courseid;\n        this.renderDefault().catch(Notification.exception);\n    }\n\n    static init() {\n        return new GroupSearch();\n    }\n\n    /**\n     * The overall div that contains the searching widget.\n     *\n     * @returns {string}\n     */\n    componentSelector() {\n        return '.group-search';\n    }\n\n    /**\n     * The dropdown div that contains the searching widget result space.\n     *\n     * @returns {string}\n     */\n    dropdownSelector() {\n        return '.groupsearchdropdown';\n    }\n\n    /**\n     * The triggering div that contains the searching widget.\n     *\n     * @returns {string}\n     */\n    triggerSelector() {\n        return '.groupsearchwidget';\n    }\n\n    /**\n     * Build the content then replace the node.\n     */\n    async renderDropdown() {\n        const {html, js} = await renderForPromise('core_group/comboboxsearch/resultset', {\n            groups: this.getMatchedResults(),\n            hasresults: this.getMatchedResults().length > 0,\n            searchterm: this.getSearchTerm(),\n        });\n        replaceNodeContents(this.selectors.placeholder, html, js);\n    }\n\n    /**\n     * Build the content then replace the node by default we want our form to exist.\n     */\n    async renderDefault() {\n        this.setMatchedResults(await this.filterDataset(await this.getDataset()));\n        this.filterMatchDataset();\n\n        await this.renderDropdown();\n\n        this.updateNodes();\n        this.registerInputEvents();\n\n        // Add a small BS listener so that we can set the focus correctly on open.\n        this.$component.on('shown.bs.dropdown', () => {\n            this.searchInput.focus({preventScroll: true});\n        });\n    }\n\n    /**\n     * Get the data we will be searching against in this component.\n     *\n     * @returns {Promise<*>}\n     */\n    async fetchDataset() {\n        return await groupFetch(this.courseID).then((r) => r.groups);\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        // Sometimes we just want to show everything.\n        if (this.getPreppedSearchTerm() === '') {\n            return filterableData;\n        }\n        return filterableData.filter((group) => Object.keys(group).some((key) => {\n            if (group[key] === \"\" || this.bannedFilterFields.includes(key)) {\n                return false;\n            }\n            return group[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    filterMatchDataset() {\n        this.setMatchedResults(\n            this.getMatchedResults().map((group) => {\n                return {\n                    id: group.id,\n                    name: group.name,\n                    link: this.selectOneLink(group.id),\n                    groupimageurl: group.groupimageurl,\n                };\n            })\n        );\n    }\n\n    /**\n     * Handle any keyboard inputs.\n     */\n    registerInputEvents() {\n        // Register & handle the text input.\n        this.searchInput.addEventListener('input', debounce(async() => {\n            this.setSearchTerms(this.searchInput.value);\n            // We can also require a set amount of input before search.\n            if (this.searchInput.value === '') {\n                // Hide the \"clear\" search button in the search bar.\n                this.clearSearchButton.classList.add('d-none');\n            } else {\n                // Display the \"clear\" search button in the search bar.\n                this.clearSearchButton.classList.remove('d-none');\n            }\n            // User has given something for us to filter against.\n            await this.filterrenderpipe();\n        }, 300));\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    async clickHandler(e) {\n        if (e.target.closest(this.selectors.dropdown)) {\n            // Forcibly prevent BS events so that we can control the open and close.\n            // Really needed because by default input elements cant trigger a dropdown.\n            e.stopImmediatePropagation();\n        }\n        this.clearSearchButton.addEventListener('click', async() => {\n            this.searchInput.value = '';\n            this.setSearchTerms(this.searchInput.value);\n            await this.filterrenderpipe();\n        });\n        // Prevent normal key presses activating this.\n        if (e.target.closest('.dropdown-item') && e.button === 0) {\n            window.location = e.target.closest('.dropdown-item').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        // Switch the key presses to handle keyboard nav.\n        switch (e.key) {\n            case 'Tab':\n                if (e.target.closest(this.selectors.input)) {\n                    e.preventDefault();\n                    this.clearSearchButton.focus({preventScroll: true});\n                }\n                break;\n            case 'Escape':\n                if (document.activeElement.getAttribute('role') === 'option') {\n                    e.stopPropagation();\n                    this.searchInput.focus({preventScroll: true});\n                } else if (e.target.closest(this.selectors.input)) {\n                    const trigger = this.component.querySelector(this.selectors.trigger);\n                    trigger.focus({preventScroll: true});\n                }\n                break;\n        }\n    }\n\n    /**\n     * Override the input event listener for the text input area.\n     */\n    registerInputHandlers() {\n        // Register & handle the text input.\n        this.searchInput.addEventListener('input', debounce(() => {\n            this.setSearchTerms(this.searchInput.value);\n            // We can also require a set amount of input before search.\n            if (this.getSearchTerm() === '') {\n                // Hide the \"clear\" search button in the search bar.\n                this.clearSearchButton.classList.add('d-none');\n            } else {\n                // Display the \"clear\" search button in the search bar.\n                this.clearSearchButton.classList.remove('d-none');\n            }\n        }, 300));\n    }\n\n    /**\n     * Build up the view all link that is dedicated to a particular result.\n     *\n     * @param {Number} groupID The ID of the group selected.\n     */\n    selectOneLink(groupID) {\n        throw new Error(`selectOneLink(${groupID}) must be implemented in ${this.constructor.name}`);\n    }\n}\n"],"names":["GroupSearch","search_combobox","constructor","selectors","this","courseid","placeholder","component","document","querySelector","componentSelector","courseID","dataset","renderDefault","catch","Notification","exception","dropdownSelector","triggerSelector","html","js","groups","getMatchedResults","hasresults","length","searchterm","getSearchTerm","setMatchedResults","filterDataset","getDataset","filterMatchDataset","renderDropdown","updateNodes","registerInputEvents","$component","on","searchInput","focus","preventScroll","then","r","filterableData","getPreppedSearchTerm","filter","group","Object","keys","some","key","bannedFilterFields","includes","toString","toLowerCase","map","id","name","link","selectOneLink","groupimageurl","addEventListener","async","setSearchTerms","value","clearSearchButton","classList","add","remove","filterrenderpipe","e","target","closest","dropdown","stopImmediatePropagation","button","window","location","href","keyHandler","input","preventDefault","activeElement","getAttribute","stopPropagation","trigger","registerInputHandlers","groupID","Error"],"mappings":"+rBA4BqBA,oBAAoBC,yBAKrCC,wGAFqB,CAAC,KAAM,OAAQ,uBAI3BC,UAAY,IAAIC,KAAKD,UACtBE,SAAU,2BACVC,YAAa,gEAEXC,UAAYC,SAASC,cAAcL,KAAKM,0BACzCC,SAAWJ,UAAUE,cAAcL,KAAKD,UAAUE,UAAUO,QAAQP,cACpEQ,gBAAgBC,MAAMC,sBAAaC,gCAIjC,IAAIhB,YAQfU,0BACW,gBAQXO,yBACW,uBAQXC,wBACW,kDAODC,KAACA,KAADC,GAAOA,UAAY,+BAAiB,sCAAuC,CAC7EC,OAAQjB,KAAKkB,oBACbC,WAAYnB,KAAKkB,oBAAoBE,OAAS,EAC9CC,WAAYrB,KAAKsB,qDAEDtB,KAAKD,UAAUG,YAAaa,KAAMC,+BAOjDO,wBAAwBvB,KAAKwB,oBAAoBxB,KAAKyB,oBACtDC,2BAEC1B,KAAK2B,sBAENC,mBACAC,2BAGAC,WAAWC,GAAG,qBAAqB,UAC/BC,YAAYC,MAAM,CAACC,eAAe,yCAU9B,0BAAWlC,KAAKO,UAAU4B,MAAMC,GAAMA,EAAEnB,6BASrCoB,sBAEoB,KAAhCrC,KAAKsC,uBACED,eAEJA,eAAeE,QAAQC,OAAUC,OAAOC,KAAKF,OAAOG,MAAMC,KAC1C,KAAfJ,MAAMI,OAAe5C,KAAK6C,mBAAmBC,SAASF,MAGnDJ,MAAMI,KAAKG,WAAWC,cAAcF,SAAS9C,KAAKsC,4BAOjEZ,0BACSH,kBACDvB,KAAKkB,oBAAoB+B,KAAKT,QACnB,CACHU,GAAIV,MAAMU,GACVC,KAAMX,MAAMW,KACZC,KAAMpD,KAAKqD,cAAcb,MAAMU,IAC/BI,cAAed,MAAMc,mBASrCzB,2BAESG,YAAYuB,iBAAiB,SAAS,oBAASC,eAC3CC,eAAezD,KAAKgC,YAAY0B,OAEN,KAA3B1D,KAAKgC,YAAY0B,WAEZC,kBAAkBC,UAAUC,IAAI,eAGhCF,kBAAkBC,UAAUE,OAAO,gBAGtC9D,KAAK+D,qBACZ,yBAQYC,GACXA,EAAEC,OAAOC,QAAQlE,KAAKD,UAAUoE,WAGhCH,EAAEI,gCAEDT,kBAAkBJ,iBAAiB,SAASC,eACxCxB,YAAY0B,MAAQ,QACpBD,eAAezD,KAAKgC,YAAY0B,aAC/B1D,KAAK+D,sBAGXC,EAAEC,OAAOC,QAAQ,mBAAkC,IAAbF,EAAEK,SACxCC,OAAOC,SAAWP,EAAEC,OAAOC,QAAQ,kBAAkBM,MAS7DC,WAAWT,gBACDS,WAAWT,GAETA,EAAEpB,SACD,MACGoB,EAAEC,OAAOC,QAAQlE,KAAKD,UAAU2E,SAChCV,EAAEW,sBACGhB,kBAAkB1B,MAAM,CAACC,eAAe,eAGhD,YACmD,WAAhD9B,SAASwE,cAAcC,aAAa,QACpCb,EAAEc,uBACG9C,YAAYC,MAAM,CAACC,eAAe,SACpC,GAAI8B,EAAEC,OAAOC,QAAQlE,KAAKD,UAAU2E,OAAQ,CAC/B1E,KAAKG,UAAUE,cAAcL,KAAKD,UAAUgF,SACpD9C,MAAM,CAACC,eAAe,MAS9C8C,6BAEShD,YAAYuB,iBAAiB,SAAS,oBAAS,UAC3CE,eAAezD,KAAKgC,YAAY0B,OAER,KAAzB1D,KAAKsB,qBAEAqC,kBAAkBC,UAAUC,IAAI,eAGhCF,kBAAkBC,UAAUE,OAAO,YAE7C,MAQPT,cAAc4B,eACJ,IAAIC,8BAAuBD,4CAAmCjF,KAAKF,YAAYqD"}

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