Proyectos de Subversion Moodle

Rev

Autoría | Ultima modificación | Ver Log |

{"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 * Add search filtering of available language packs\n *\n * @module      tool_langimport/search\n * @copyright   2021 Paul Holden <paulh@moodle.com>\n * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport Pending from 'core/pending';\nimport {debounce} from 'core/utils';\n\nconst SELECTORS = {\n    AVAILABLE_LANG_SELECT: 'select',\n    AVAILABLE_LANG_SEARCH: '[data-action=\"search\"]',\n};\n\nconst DEBOUNCE_TIMER = 250;\n\n/**\n * Initialize module\n *\n * @param {Element} form\n */\nexport const init = form => {\n    const availableLangsElement = form.querySelector(SELECTORS.AVAILABLE_LANG_SELECT);\n\n    const availableLangsFilter = (event) => {\n        const pendingPromise = new Pending('tool_langimport/search:filter');\n\n        // Remove existing options.\n        availableLangsElement.querySelectorAll('option').forEach((option) => {\n            option.remove();\n        });\n\n        // Filter for matching languages.\n        const searchTerm = event.target.value.toLowerCase();\n        const availableLanguages = JSON.parse(availableLangsElement.dataset.availableLanguages);\n        const filteredLanguages = Object.keys(availableLanguages).reduce((matches, langcode) => {\n            if (availableLanguages[langcode].toLowerCase().includes(searchTerm)) {\n                matches[langcode] = availableLanguages[langcode];\n            }\n            return matches;\n        }, []);\n\n        // Re-create filtered options.\n        Object.entries(filteredLanguages).forEach(([langcode, langname]) => {\n            const option = document.createElement('option');\n            option.value = langcode;\n            option.innerText = langname;\n            availableLangsElement.append(option);\n        });\n\n        pendingPromise.resolve();\n    };\n\n    // Cache initial available language options.\n    const availableLanguages = {};\n    availableLangsElement.querySelectorAll('option').forEach((option) => {\n        availableLanguages[option.value] = option.text;\n    });\n    availableLangsElement.dataset.availableLanguages = JSON.stringify(availableLanguages);\n\n    // Register event listeners on the search element.\n    const availableLangsSearch = form.querySelector(SELECTORS.AVAILABLE_LANG_SEARCH);\n    availableLangsSearch.addEventListener('keydown', (event) => {\n        if (event.key === 'Enter') {\n            event.preventDefault();\n        }\n    });\n\n    // Debounce the event listener to allow the user to finish typing.\n    const availableLangsSearchDebounce = debounce(availableLangsFilter, DEBOUNCE_TIMER);\n    availableLangsSearch.addEventListener('keyup', (event) => {\n        const pendingPromise = new Pending('tool_langimport/search:keyup');\n\n        availableLangsSearchDebounce(event);\n        setTimeout(() => {\n            pendingPromise.resolve();\n        }, DEBOUNCE_TIMER);\n    });\n};\n"],"names":["SELECTORS","form","availableLangsElement","querySelector","availableLanguages","querySelectorAll","forEach","option","value","text","dataset","JSON","stringify","availableLangsSearch","addEventListener","event","key","preventDefault","availableLangsSearchDebounce","pendingPromise","Pending","remove","searchTerm","target","toLowerCase","parse","filteredLanguages","Object","keys","reduce","matches","langcode","includes","entries","_ref","langname","document","createElement","innerText","append","resolve","setTimeout"],"mappings":";;;;;;;kJA0BMA,gCACqB,SADrBA,gCAEqB,uCAUPC,aACVC,sBAAwBD,KAAKE,cAAcH,iCAgC3CI,mBAAqB,GAC3BF,sBAAsBG,iBAAiB,UAAUC,SAASC,SACtDH,mBAAmBG,OAAOC,OAASD,OAAOE,QAE9CP,sBAAsBQ,QAAQN,mBAAqBO,KAAKC,UAAUR,0BAG5DS,qBAAuBZ,KAAKE,cAAcH,iCAChDa,qBAAqBC,iBAAiB,WAAYC,QAC5B,UAAdA,MAAMC,KACND,MAAME,0BAKRC,8BAA+B,oBA7CPH,cACpBI,eAAiB,IAAIC,iBAAQ,iCAGnClB,sBAAsBG,iBAAiB,UAAUC,SAASC,SACtDA,OAAOc,kBAILC,WAAaP,MAAMQ,OAAOf,MAAMgB,cAChCpB,mBAAqBO,KAAKc,MAAMvB,sBAAsBQ,QAAQN,oBAC9DsB,kBAAoBC,OAAOC,KAAKxB,oBAAoByB,QAAO,CAACC,QAASC,YACnE3B,mBAAmB2B,UAAUP,cAAcQ,SAASV,cACpDQ,QAAQC,UAAY3B,mBAAmB2B,WAEpCD,UACR,IAGHH,OAAOM,QAAQP,mBAAmBpB,SAAQ4B,WAAEH,SAAUI,qBAC5C5B,OAAS6B,SAASC,cAAc,UACtC9B,OAAOC,MAAQuB,SACfxB,OAAO+B,UAAYH,SACnBjC,sBAAsBqC,OAAOhC,WAGjCY,eAAeqB,YApCA,KAwDnB3B,qBAAqBC,iBAAiB,SAAUC,cACtCI,eAAiB,IAAIC,iBAAQ,gCAEnCF,6BAA6BH,OAC7B0B,YAAW,KACPtB,eAAeqB,YA7DJ"}