░▒▓████████████████████████████████▓▒░ ░▒▓█ ▓▒░ ░▒▓█ ~ S W A M P ~ ▓▒░ ░▒▓█ ▓▒░ ░▒▓████████████████████████████████▓▒░
pplmvsvm
LOCATION:
/var/www/moodle/public/mod/subsection/mobileapp
☗ ROOT
↻ REFRESH
✎ CARVE FLESH
EDITING: init.js
// 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/>. /** * This file contains the JS code to support mod_subsection in versions of the app previous to 4.5. * * @copyright 2024 Dani Palou <dani@moodle.com> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ const context = this; /** * Open a subsection. */ const openSubsection = async(module, courseId, siteId) => { const customData = context.CoreTextUtilsProvider.parseJSON(module.customdata); const pageParams = { sectionId: customData.sectionid, }; if ( (!siteId || siteId === context.CoreSitesProvider.getCurrentSiteId()) && context.CoreCourseProvider.currentViewIsCourse(courseId) ) { context.CoreCourseProvider.selectCourseTab('', pageParams); } else { await context.CoreCourseHelperProvider.getAndOpenCourse(courseId, pageParams, siteId); } }; /** * Handler to support mod_subsection in a course. */ class SubsectionModuleHandler { constructor() { this.name = 'PluginModSubsection'; this.modName = 'subsection'; } isEnabled() { return true; } getData(module) { return { icon: context.CoreCourseProvider.getModuleIconSrc(module.modname, module.modicon), title: module.name, action: async(event, module, courseId) => { try { await openSubsection(module, courseId); } catch (error) { context.CoreDomUtilsProvider.showErrorModalDefault(error, 'Error opening subsection.'); } }, }; } } /** * Handler to support links to mod_subsection. */ class SubsectionLinkHandler extends this.CoreContentLinksHandlerBase { constructor() { super(); this.name = 'PluginModSubsection'; this.priority = 0; this.featureName = 'CoreCourseModuleDelegate_AddonModSubsection'; this.pattern = new RegExp('/mod/subsection/view.php.*([&?]id=\\d+)'); } getActions(siteIds, url, params, courseId) { return [{ action: async(siteId) => { const modal = await context.CoreDomUtilsProvider.showModalLoading(); const moduleId = Number(params.id); try { // Get the module. const module = await context.CoreCourseProvider.getModule(moduleId, courseId, undefined, true, false, siteId); await openSubsection(module, module.course, siteId); } catch (error) { context.CoreDomUtilsProvider.showErrorModalDefault(error, 'Error opening link.'); } finally { modal.dismiss(); } }, }]; } } this.CoreCourseModuleDelegate.registerHandler(new SubsectionModuleHandler()); this.CoreContentLinksDelegate.registerHandler(new SubsectionLinkHandler());
CANCEL
Name
Type
Size
Modified
Actions
↩ ..
DIR
—
—
📄 init.js
JS
3.5 KB
2026-02-11 01:44
EDIT
📄 styles.css
CSS
1.3 KB
2026-02-11 01:44
EDIT