__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
// 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/>.
/**
* Prefetch module to help lazily load content for use on the current page.
*
* @module core/prefetch
* @copyright 2020 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*
* @example <caption>Pre-fetching a set of strings to use later</caption>
*
* import prefetch from 'core/prefetch';
*
* // A single string prefetch.
* prefetch.prefetchString('error', 'cannotfindteacher');
*
* // Prefetch multiple strings in the same component.
* prefetch.prefetchStrings('core', [
* 'yes',
* 'no',
* ]);
*
* // Use the strings.
* import {getString, getStrings} from 'core/str';
* getString('cannotfindteacher', 'error')
* .then(str => {
* window.console.log(str); // Cannot find teacher
* })
* .catch();
* getStrings([
* {
* key: 'cannotfindteacher',
* component: 'error',
* },
* {
* key: 'yes',
* component: 'core',
* },
* {
* key: 'no',
* component: 'core',
* },
* ])
* .then((cannotFindTeacher, yes, no) => {
* window.console.log(cannotFindTeacher); // Cannot find teacher
* window.console.log(yes); // Yes
* window.console.log(no); // No
* })
* .catch();
*/
import Config from 'core/config';
// Keep track of whether the initial prefetch has occurred.
let initialPrefetchComplete = false;
// Prefetch templates.
let templateList = [];
// Prefetch strings.
let stringList = {};
let prefetchTimer;
/**
* Fetch all queued items in the queue.
*
* Should only be called via processQueue.
* @private
*/
const fetchQueue = () => {
// Prefetch templates.
if (templateList) {
const templatesToLoad = templateList.slice();
templateList = [];
import('core/templates')
.then(Templates => Templates.prefetchTemplates(templatesToLoad))
.catch();
}
// Prefetch strings.
const mappedStringsToFetch = stringList;
stringList = {};
const stringsToFetch = [];
Object.keys(mappedStringsToFetch).forEach(component => {
stringsToFetch.push(...mappedStringsToFetch[component].map(key => {
return {component, key};
}));
});
if (stringsToFetch) {
import('core/str')
.then(Str => Str.get_strings(stringsToFetch))
.catch();
}
};
/**
* Process the prefetch queues as required.
*
* The initial call will queue the first fetch after a delay.
* Subsequent fetches are immediate.
*
* @private
*/
const processQueue = () => {
if (prefetchTimer) {
// There is a live prefetch timer. The initial prefetch has been scheduled but is not complete.
return;
}
// The initial prefetch has compelted. Just queue as normal.
if (initialPrefetchComplete) {
fetchQueue();
return;
}
// Queue the initial prefetch in a short while.
prefetchTimer = setTimeout(() => {
initialPrefetchComplete = true;
prefetchTimer = null;
// Ensure that the icon system is loaded.
// This can be quite slow and delay UI interactions if it is loaded on demand.
import(Config.iconsystemmodule)
.then(IconSystem => {
const iconSystem = new IconSystem();
prefetchTemplate(iconSystem.getTemplateName());
return iconSystem;
})
.then(iconSystem => {
fetchQueue();
iconSystem.init();
return;
})
.catch();
}, 500);
};
/**
* Add a set of templates to the prefetch queue.
*
* @param {Array} templatesNames A list of the template names to fetch
* @static
*/
const prefetchTemplates = templatesNames => {
templateList = templateList.concat(templatesNames);
processQueue();
};
/**
* Add a single template to the prefetch queue.
*
* @param {String} templateName The template names to fetch
* @static
*/
const prefetchTemplate = templateName => {
prefetchTemplates([templateName]);
};
/**
* Add a set of strings from the same component to the prefetch queue.
*
* @param {String} component The component that all of the strings belongs to
* @param {String[]} keys An array of string identifiers.
* @static
*/
const prefetchStrings = (component, keys) => {
if (!stringList[component]) {
stringList[component] = [];
}
stringList[component] = stringList[component].concat(keys);
processQueue();
};
/**
* Add a single string to the prefetch queue.
*
* @param {String} component The component that the string belongs to
* @param {String} key The string identifier
* @static
*/
const prefetchString = (component, key) => {
if (!stringList[component]) {
stringList[component] = [];
}
stringList[component].push(key);
processQueue();
};
// Prefetch some commonly-used templates.
prefetchTemplates([].concat(
['core/loading'],
['core/modal'],
['core/modal_backdrop'],
));
// And some commonly used strings.
prefetchStrings('core', [
'cancel',
'closebuttontitle',
'loading',
'savechanges',
]);
prefetchStrings('core_form', [
'showless',
'showmore',
]);
export default {
prefetchTemplate,
prefetchTemplates,
prefetchString,
prefetchStrings,
};
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| bulkactions | Folder | 0777 |
|
|
| check | Folder | 0777 |
|
|
| comboboxsearch | Folder | 0777 |
|
|
| datafilter | Folder | 0777 |
|
|
| emoji | Folder | 0777 |
|
|
| local | Folder | 0777 |
|
|
| moodlenet | Folder | 0777 |
|
|
| adapter.js | File | 123.08 KB | 0777 |
|
| addblockmodal.js | File | 4.34 KB | 0777 |
|
| ajax.js | File | 11.97 KB | 0777 |
|
| aria.js | File | 1011 B | 0777 |
|
| auto_rows.js | File | 3.46 KB | 0777 |
|
| autoscroll.js | File | 6.49 KB | 0777 |
|
| backoff_timer.js | File | 4.98 KB | 0777 |
|
| chart_axis.js | File | 7.39 KB | 0777 |
|
| chart_bar.js | File | 3.08 KB | 0777 |
|
| chart_base.js | File | 11.36 KB | 0777 |
|
| chart_builder.js | File | 1.65 KB | 0777 |
|
| chart_line.js | File | 2.08 KB | 0777 |
|
| chart_output.js | File | 1.08 KB | 0777 |
|
| chart_output_base.js | File | 2.03 KB | 0777 |
|
| chart_output_chartjs.js | File | 11.5 KB | 0777 |
|
| chart_output_htmltable.js | File | 3.3 KB | 0777 |
|
| chart_pie.js | File | 3.03 KB | 0777 |
|
| chart_series.js | File | 8.35 KB | 0777 |
|
| chartjs-lazy.js | File | 497.88 KB | 0777 |
|
| chartjs.js | File | 913 B | 0777 |
|
| checkbox-toggleall.js | File | 12.78 KB | 0777 |
|
| config.js | File | 978 B | 0777 |
|
| copy_to_clipboard.js | File | 7.38 KB | 0777 |
|
| custom_interaction_events.js | File | 22.18 KB | 0777 |
|
| datafilter.js | File | 17.92 KB | 0777 |
|
| dragdrop.js | File | 12.92 KB | 0777 |
|
| drawer.js | File | 3.49 KB | 0777 |
|
| drawer_events.js | File | 967 B | 0777 |
|
| dropzone.js | File | 5.71 KB | 0777 |
|
| dynamic_tabs.js | File | 6.67 KB | 0777 |
|
| edit_switch.js | File | 3.45 KB | 0777 |
|
| event.js | File | 2.53 KB | 0777 |
|
| event_dispatcher.js | File | 2.79 KB | 0777 |
|
| fetch.js | File | 9.4 KB | 0777 |
|
| first.js | File | 1.33 KB | 0777 |
|
| form-autocomplete.js | File | 53.74 KB | 0777 |
|
| form-cohort-selector.js | File | 2.5 KB | 0777 |
|
| form-course-selector.js | File | 3.77 KB | 0777 |
|
| fragment.js | File | 5.03 KB | 0777 |
|
| fullscreen.js | File | 1.62 KB | 0777 |
|
| icon_system.js | File | 3.39 KB | 0777 |
|
| icon_system_fontawesome.js | File | 5.35 KB | 0777 |
|
| icon_system_standard.js | File | 1.96 KB | 0777 |
|
| inplace_editable.js | File | 16.82 KB | 0777 |
|
| key_codes.js | File | 1.34 KB | 0777 |
|
| loadingicon.js | File | 3.88 KB | 0777 |
|
| localstorage.js | File | 2.24 KB | 0777 |
|
| log.js | File | 1.74 KB | 0777 |
|
| loglevel.js | File | 12.38 KB | 0777 |
|
| menu_navigation.js | File | 9.2 KB | 0777 |
|
| modal.js | File | 36.33 KB | 0777 |
|
| modal_backdrop.js | File | 4.17 KB | 0777 |
|
| modal_cancel.js | File | 1.6 KB | 0777 |
|
| modal_copy_to_clipboard.js | File | 3.75 KB | 0777 |
|
| modal_delete_cancel.js | File | 2.36 KB | 0777 |
|
| modal_events.js | File | 1.28 KB | 0777 |
|
| modal_factory.js | File | 5.91 KB | 0777 |
|
| modal_registry.js | File | 2.26 KB | 0777 |
|
| modal_save_cancel.js | File | 2.34 KB | 0777 |
|
| moremenu.js | File | 10.3 KB | 0777 |
|
| mustache.js | File | 28.75 KB | 0777 |
|
| network.js | File | 9.66 KB | 0777 |
|
| normalise.js | File | 2.43 KB | 0777 |
|
| notification.js | File | 11.57 KB | 0777 |
|
| page_global.js | File | 5.38 KB | 0777 |
|
| paged_content.js | File | 2.87 KB | 0777 |
|
| paged_content_events.js | File | 1.17 KB | 0777 |
|
| paged_content_factory.js | File | 20.61 KB | 0777 |
|
| paged_content_pages.js | File | 11.75 KB | 0777 |
|
| paged_content_paging_bar.js | File | 20.36 KB | 0777 |
|
| paged_content_paging_bar_limit_selector.js | File | 2.36 KB | 0777 |
|
| paged_content_paging_dropdown.js | File | 7.36 KB | 0777 |
|
| pagehelpers.js | File | 5.38 KB | 0777 |
|
| pending.js | File | 4.46 KB | 0777 |
|
| permissionmanager.js | File | 9.77 KB | 0777 |
|
| popover_region_controller.js | File | 13.16 KB | 0777 |
|
| popper.js | File | 79.2 KB | 0777 |
|
| popper2.js | File | 61.59 KB | 0777 |
|
| prefetch.js | File | 5.82 KB | 0777 |
|
| process_monitor.js | File | 3.55 KB | 0777 |
|
| pubsub.js | File | 2.17 KB | 0777 |
|
| reactive.js | File | 1.38 KB | 0777 |
|
| scroll_manager.js | File | 5.5 KB | 0777 |
|
| sessionstorage.js | File | 2.22 KB | 0777 |
|
| showhidesettings.js | File | 11.82 KB | 0777 |
|
| showmore.js | File | 1.83 KB | 0777 |
|
| sortable_list.js | File | 29.62 KB | 0777 |
|
| sticky-footer.js | File | 3.16 KB | 0777 |
|
| storage_validation.js | File | 1.36 KB | 0777 |
|
| storagewrapper.js | File | 5.36 KB | 0777 |
|
| stored_progress.js | File | 3.15 KB | 0777 |
|
| str.js | File | 10.01 KB | 0777 |
|
| tag.js | File | 15.02 KB | 0777 |
|
| templates.js | File | 10.83 KB | 0777 |
|
| toast.js | File | 4.26 KB | 0777 |
|
| togglesensitive.js | File | 5.15 KB | 0777 |
|
| tooltip.js | File | 4.09 KB | 0777 |
|
| tree.js | File | 18.39 KB | 0777 |
|
| truncate.js | File | 6.56 KB | 0777 |
|
| url.js | File | 3.65 KB | 0777 |
|
| user_date.js | File | 9.27 KB | 0777 |
|
| userfeedback.js | File | 2.91 KB | 0777 |
|
| usermenu.js | File | 5.13 KB | 0777 |
|
| utility.js | File | 7.5 KB | 0777 |
|
| utils.js | File | 4.83 KB | 0777 |
|
| yui.js | File | 1.13 KB | 0777 |
|