Mini Shell

Direktori : /var/www/vhosts/ccp.ac.th/backup_full/httpdocs/moodle/theme/learnr/amd/src/
Upload File :
Current File : /var/www/vhosts/ccp.ac.th/backup_full/httpdocs/moodle/theme/learnr/amd/src/offcanvas.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/>.

/**
 * Theme LearnR - JS code off-canvas
 *
 * @module     theme_learnr/offcanvas
 * @copyright  2022 bdecent gmbh <https://bdecent.de>
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */

define(['jquery', 'theme_boost/drawers', 'core/modal'], function($, Drawers, Modal) {

    let modalBackdrop = null;

    /**
     * Helper function to get the OffCanvas backdrop and add an EventListener which closes
     * the drawer as soon as the user clicks on the backdrop.
     *
     * @returns {object}
     */
    const getDrawerBackdrop = function() {
        if (!modalBackdrop) {
             modalBackdrop = Modal.prototype.getBackdrop().then(backdrop => {
                backdrop.getAttachmentPoint().get(0).addEventListener('click', e => {
                    e.preventDefault();
                    var currentDrawer = Drawers.getDrawerInstanceForNode(
                        document.getElementById('theme_learnr-drawers-offcanvas')
                    );
                    currentDrawer.closeDrawer(false);
                    backdrop.hide();
                });
                return backdrop;
            })
            .catch();
        }
        return modalBackdrop;
    };

    /**
     * Used this listener to hide the off canvas drawer from the page.
     */
    function initOffcanvasBackdrop() {
        // Add EventListener for showing a drawer.
        document.addEventListener(Drawers.eventTypes.drawerShown, function(e) {
            // If the drawer which is shown is _not_ the offcanvas drawer, return.
            if (e.target.id != 'theme_learnr-drawers-offcanvas') {
                return null;
            }

            // Get the drawer's backdrop and show it.
            getDrawerBackdrop().then(backdrop => {
                backdrop.show();
                return backdrop;
            })
            .catch();

            return true;
        });

        // Add EventListener for hiding a drawer.
        document.addEventListener(Drawers.eventTypes.drawerHide, function(e) {
            // If the drawer which is hidden is _not_ the offcanvas drawer, return.
            if (e.target.id != 'theme_learnr-drawers-offcanvas') {
                return null;
            }

            getDrawerBackdrop().then(backdrop => {
                backdrop.hide();
                return backdrop;
            })
            .catch();

            return true;
        });
    }

    return {
        init: function() {
            initOffcanvasBackdrop();
        }
    };
});

Zerion Mini Shell 1.0