first commit

This commit is contained in:
CHIEFSOFT\ameye
2024-09-30 18:11:26 -04:00
commit e592ca6823
27270 changed files with 5002257 additions and 0 deletions
+10
View File
@@ -0,0 +1,10 @@
define("tool_capability/search",["exports","core/pending","core/utils"],(function(_exports,_pending,_utils){var obj;
/**
* Add search filtering of capabilities
*
* @module tool_capability/search
* @copyright 2023 Paul Holden <paulh@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_pending=(obj=_pending)&&obj.__esModule?obj:{default:obj};const Selectors_capabilityOverviewForm="#capability-overview-form",Selectors_capabilitySelect='[data-search="capability"]',Selectors_capabilitySearch='[data-action="search"]';_exports.init=()=>{const capabilityOverviewForm=document.querySelector(Selectors_capabilityOverviewForm);if(!capabilityOverviewForm)return;const capabilitySelect=capabilityOverviewForm.querySelector(Selectors_capabilitySelect),capabilitySearch=capabilityOverviewForm.querySelector(Selectors_capabilitySearch),capabilitySelectFilter=searchTerm=>{const pendingPromise=new _pending.default("tool_capability/search:filter");let capabilitySelected=[];capabilitySelect.querySelectorAll("option").forEach((option=>{option.selected&&capabilitySelected.push(option.value),option.remove()}));const availableCapabilities=JSON.parse(capabilitySelect.dataset.availableCapabilities),filteredCapabilities=Object.keys(availableCapabilities).reduce(((matches,capability)=>(availableCapabilities[capability].toLowerCase().includes(searchTerm)&&(matches[capability]=availableCapabilities[capability]),matches)),[]);Object.entries(filteredCapabilities).forEach((_ref=>{let[capability,capabilityText]=_ref;const option=document.createElement("option");option.value=capability,option.innerText=capabilityText,option.selected=capabilitySelected.indexOf(capability)>-1,capabilitySelect.append(option)})),pendingPromise.resolve()},availableCapabilities={};capabilitySelect.querySelectorAll("option").forEach((option=>{availableCapabilities[option.value]=option.text})),capabilitySelect.dataset.availableCapabilities=JSON.stringify(availableCapabilities);const capabilitySearchDebounce=(0,_utils.debounce)(capabilitySelectFilter,250);capabilitySearch.addEventListener("keyup",(event=>{const pendingPromise=new _pending.default("tool_capability/search:keyup");capabilitySearchDebounce(event.target.value.toLowerCase()),setTimeout((()=>{pendingPromise.resolve()}),250)})),""!==capabilitySearch.value&&capabilitySelectFilter(capabilitySearch.value.toLowerCase())}}));
//# sourceMappingURL=search.min.js.map
File diff suppressed because one or more lines are too long
+102
View File
@@ -0,0 +1,102 @@
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Add search filtering of capabilities
*
* @module tool_capability/search
* @copyright 2023 Paul Holden <paulh@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
import Pending from 'core/pending';
import {debounce} from 'core/utils';
const Selectors = {
capabilityOverviewForm: '#capability-overview-form',
capabilitySelect: '[data-search="capability"]',
capabilitySearch: '[data-action="search"]',
};
const debounceTimer = 250;
/**
* Initialize module
*/
export const init = () => {
const capabilityOverviewForm = document.querySelector(Selectors.capabilityOverviewForm);
if (!capabilityOverviewForm) {
return;
}
const capabilitySelect = capabilityOverviewForm.querySelector(Selectors.capabilitySelect);
const capabilitySearch = capabilityOverviewForm.querySelector(Selectors.capabilitySearch);
const capabilitySelectFilter = searchTerm => {
const pendingPromise = new Pending('tool_capability/search:filter');
// Remove existing options, remembering which were previously selected.
let capabilitySelected = [];
capabilitySelect.querySelectorAll('option').forEach(option => {
if (option.selected) {
capabilitySelected.push(option.value);
}
option.remove();
});
// Filter for matching capabilities.
const availableCapabilities = JSON.parse(capabilitySelect.dataset.availableCapabilities);
const filteredCapabilities = Object.keys(availableCapabilities).reduce((matches, capability) => {
if (availableCapabilities[capability].toLowerCase().includes(searchTerm)) {
matches[capability] = availableCapabilities[capability];
}
return matches;
}, []);
// Re-create filtered options.
Object.entries(filteredCapabilities).forEach(([capability, capabilityText]) => {
const option = document.createElement('option');
option.value = capability;
option.innerText = capabilityText;
option.selected = capabilitySelected.indexOf(capability) > -1;
capabilitySelect.append(option);
});
pendingPromise.resolve();
};
// Cache initial capability options.
const availableCapabilities = {};
capabilitySelect.querySelectorAll('option').forEach(option => {
availableCapabilities[option.value] = option.text;
});
capabilitySelect.dataset.availableCapabilities = JSON.stringify(availableCapabilities);
// Debounce the event listener on the search element to allow user to finish typing.
const capabilitySearchDebounce = debounce(capabilitySelectFilter, debounceTimer);
capabilitySearch.addEventListener('keyup', event => {
const pendingPromise = new Pending('tool_capability/search:keyup');
capabilitySearchDebounce(event.target.value.toLowerCase());
setTimeout(() => {
pendingPromise.resolve();
}, debounceTimer);
});
// Ensure filter is applied on form load.
if (capabilitySearch.value !== '') {
capabilitySelectFilter(capabilitySearch.value.toLowerCase());
}
};