| Server IP : 165.22.154.248 / Your IP : 216.73.217.0 [ Web Server : Apache/2.4.29 (Ubuntu) System : Linux droplet-integra 4.15.0-197-generic #208-Ubuntu SMP Tue Nov 1 17:23:37 UTC 2022 x86_64 User : www-data ( 33) PHP Version : 7.2.24-0ubuntu0.18.04.15 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals, Domains : 1 Domains MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/avanza-lms.old.bak9874115/lib/amd/src/ |
Upload File : |
// 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/>.
/**
* A module to help with toggle select/deselect all.
*
* @module core/checkbox-toggleall
* @copyright 2019 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
define(['jquery', 'core/pubsub'], function($, PubSub) {
var registered = false;
var events = {
checkboxToggled: 'core/checkbox-toggleall:checkboxToggled',
};
var getAllCheckboxes = function(root, toggleGroup) {
return root.find('[data-action="toggle"][data-togglegroup="' + toggleGroup + '"]');
};
var getAllSlaveCheckboxes = function(root, toggleGroup) {
return getAllCheckboxes(root, toggleGroup).filter('[data-toggle="slave"]');
};
var getControlCheckboxes = function(root, toggleGroup) {
return getAllCheckboxes(root, toggleGroup).filter('[data-toggle="master"]');
};
var toggleSlavesFromMasters = function(e) {
var root = e.data.root;
var target = $(e.target);
var toggleGroupName = target.data('togglegroup');
var targetState = target.is(':checked');
var slaves = getAllSlaveCheckboxes(root, toggleGroupName);
var checkedSlaves = slaves.filter(':checked');
setMasterStates(root, toggleGroupName, targetState);
// Set the slave checkboxes from the masters.
slaves.prop('checked', targetState);
PubSub.publish(events.checkboxToggled, {
root: root,
toggleGroupName: toggleGroupName,
slaves: slaves,
checkedSlaves: checkedSlaves,
anyChecked: targetState,
});
};
var toggleMastersFromSlaves = function(e) {
var root = e.data.root;
var target = $(e.target);
var toggleGroupName = target.data('togglegroup');
var slaves = getAllSlaveCheckboxes(root, toggleGroupName);
var checkedSlaves = slaves.filter(':checked');
var targetState = (slaves.length === checkedSlaves.length);
setMasterStates(root, toggleGroupName, targetState);
PubSub.publish(events.checkboxToggled, {
root: root,
toggleGroupName: toggleGroupName,
slaves: slaves,
checkedSlaves: checkedSlaves,
anyChecked: !!checkedSlaves.length,
});
};
var setMasterStates = function(root, toggleGroupName, targetState) {
// Set the master checkboxes value and ARIA labels..
var masters = getControlCheckboxes(root, toggleGroupName);
masters.prop('checked', targetState);
masters.each(function(i, masterCheckbox) {
masterCheckbox = $(masterCheckbox);
var masterLabel = root.find('[for="' + masterCheckbox.attr('id') + '"]');
var targetString;
if (masterLabel.length) {
if (targetState) {
targetString = masterCheckbox.data('toggle-deselectall');
} else {
targetString = masterCheckbox.data('toggle-selectall');
}
if (masterLabel.html() !== targetString) {
masterLabel.html(targetString);
}
}
});
};
var registerListeners = function() {
if (!registered) {
registered = true;
var root = $(document.body);
root.on('change', '[data-action="toggle"][data-toggle="master"]', {root: root}, toggleSlavesFromMasters);
root.on('change', '[data-action="toggle"][data-toggle="slave"]', {root: root}, toggleMastersFromSlaves);
}
};
return {
init: function() {
registerListeners();
},
events: events,
};
});