Warning: file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/monara/public_html/test.athavaneng.com/themes.php on line 99

Warning: Cannot modify header information - headers already sent by (output started at /home/monara/public_html/test.athavaneng.com/themes.php:1) in /home/monara/public_html/test.athavaneng.com/themes.php on line 226

Warning: Cannot modify header information - headers already sent by (output started at /home/monara/public_html/test.athavaneng.com/themes.php:1) in /home/monara/public_html/test.athavaneng.com/themes.php on line 227

Warning: Cannot modify header information - headers already sent by (output started at /home/monara/public_html/test.athavaneng.com/themes.php:1) in /home/monara/public_html/test.athavaneng.com/themes.php on line 228

Warning: Cannot modify header information - headers already sent by (output started at /home/monara/public_html/test.athavaneng.com/themes.php:1) in /home/monara/public_html/test.athavaneng.com/themes.php on line 229

Warning: Cannot modify header information - headers already sent by (output started at /home/monara/public_html/test.athavaneng.com/themes.php:1) in /home/monara/public_html/test.athavaneng.com/themes.php on line 230

Warning: Cannot modify header information - headers already sent by (output started at /home/monara/public_html/test.athavaneng.com/themes.php:1) in /home/monara/public_html/test.athavaneng.com/themes.php on line 231
// 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 . /** * Add search filtering of available language packs * * @module tool_langimport/search * @copyright 2021 Paul Holden * @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 = { AVAILABLE_LANG_SELECT: 'select', AVAILABLE_LANG_SEARCH: '[data-action="search"]', }; const DEBOUNCE_TIMER = 250; /** * Initialize module * * @param {Element} form */ const init = (form) => { const availableLangsElement = form.querySelector(SELECTORS.AVAILABLE_LANG_SELECT); const availableLangsFilter = (event) => { const pendingPromise = new Pending('tool_langimport/search:filter'); // Remove existing options. availableLangsElement.querySelectorAll('option').forEach((option) => { option.remove(); }); // Filter for matching languages. const searchTerm = event.target.value.toLowerCase(); const availableLanguages = JSON.parse(availableLangsElement.dataset.availableLanguages); const filteredLanguages = Object.keys(availableLanguages).reduce((matches, langcode) => { if (availableLanguages[langcode].toLowerCase().includes(searchTerm)) { matches[langcode] = availableLanguages[langcode]; } return matches; }, []); // Re-create filtered options. Object.entries(filteredLanguages).forEach(([langcode, langname]) => { const option = document.createElement('option'); option.value = langcode; option.innerText = langname; availableLangsElement.append(option); }); pendingPromise.resolve(); }; // Cache initial available language options. const availableLanguages = {}; availableLangsElement.querySelectorAll('option').forEach((option) => { availableLanguages[option.value] = option.text; }); availableLangsElement.dataset.availableLanguages = JSON.stringify(availableLanguages); // Register event listeners on the search element. const availableLangsSearch = form.querySelector(SELECTORS.AVAILABLE_LANG_SEARCH); availableLangsSearch.addEventListener('keydown', (event) => { if (event.key === 'Enter') { event.preventDefault(); } }); // Debounce the event listener to allow the user to finish typing. availableLangsSearch.addEventListener('keyup', (event) => { const pendingPromise = new Pending('tool_langimport/search:keyup'); debounce(availableLangsFilter, DEBOUNCE_TIMER)(event); setTimeout(() => { pendingPromise.resolve(); }, DEBOUNCE_TIMER); }); }; export default { init: init, };