%PDF- %PDF-
Direktori : /home/vacivi36/ava/lib/yui/src/event/js/ |
Current File : /home/vacivi36/ava/lib/yui/src/event/js/event.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/>. /** * @module moodle-core-event */ var LOGNAME = 'moodle-core-event'; /** * List of published global JS events in Moodle. This is a collection * of global events that can be subscribed to, or fired from any plugin. * * @namespace M.core * @class event */ M.core = M.core || {}; var eventsConfigured = !!M.core.event; M.core.event = M.core.event || { /** * This event is triggered when a page has added dynamic nodes to a page * that should be processed by the filter system. An example is loading * user text that could have equations in it. MathJax can typeset the equations * but only if it is notified that there are new nodes in the page that need processing. * To trigger this event use M.core.Event.fire(M.core.Event.FILTER_CONTENT_UPDATED, {nodes: list}); * * @event "filter-content-updated" * @param nodes {Y.NodeList} List of nodes added to the DOM. */ FILTER_CONTENT_UPDATED: "filter-content-updated", /** * This event is triggered when an editor has recovered some draft text. * It can be used to determine let other sections know that they should reset their * form comparison for changes. * * @event "editor-content-restored" */ EDITOR_CONTENT_RESTORED: "editor-content-restored", /** * This event is triggered when an mform is about to be submitted via ajax. * * @event "form-submit-ajax" */ FORM_SUBMIT_AJAX: "form-submit-ajax" }; M.core.globalEvents = M.core.globalEvents || { /** * This event is triggered when form has an error * * @event "form_error" * @param formid {string} Id of form with error. * @param elementid {string} Id of element with error. */ FORM_ERROR: "form_error", /** * This event is triggered when the content of a block has changed * * @event "block_content_updated" * @param instanceid ID of the block instance that was updated */ BLOCK_CONTENT_UPDATED: "block_content_updated" }; if (!eventsConfigured) { var eventDefaultConfig = { emitFacade: true, defaultFn: function(e) { Y.log('Event fired: ' + e.type, 'debug', LOGNAME); }, preventedFn: function(e) { Y.log('Event prevented: ' + e.type, 'debug', LOGNAME); }, stoppedFn: function(e) { Y.log('Event stopped: ' + e.type, 'debug', LOGNAME); } }; // Publish events with a custom config here. // Publish all the events with a standard config. var key; for (key in M.core.event) { if (M.core.event.hasOwnProperty(key) && Y.getEvent(M.core.event[key]) === null) { Y.publish(M.core.event[key], eventDefaultConfig); } } // Publish global events. for (key in M.core.globalEvents) { // Make sure the key exists and that the event has not yet been published. Otherwise, skip publishing. if (M.core.globalEvents.hasOwnProperty(key) && Y.Global.getEvent(M.core.globalEvents[key]) === null) { Y.Global.publish(M.core.globalEvents[key], Y.merge(eventDefaultConfig, {broadcast: true})); Y.log('Global event published: ' + key, 'debug', LOGNAME); } } /** * Apply a callback when the DOM is modified and matchecs the supplied targetSelector. * * @method listen * @param {String} targetSelector The selector to apply * @param {Function} applyCallback The function to call on the found node */ var listenForMutation = function(targetSelector, applyCallback) { // Add a MutationObserver to check for new children to the tree. var newNodeObserver = new MutationObserver(function(mutationList) { mutationList.forEach(function(mutation) { mutation.addedNodes.forEach(function(node) { if (node instanceof Element && node.matches(targetSelector)) { applyCallback(node); } }); }); }); newNodeObserver.observe(document, {childList: true, subtree: true}); }; // YUI Custom Events do not bubble up the DOM, only up the inheritance path of custom classes. // We have to add a Node Observer to watch for new forms that may need to be watched in future. require(['core_form/events'], function(formEvents) { listenForMutation('form', function(form) { Y.one(form).on(M.core.event.FORM_SUBMIT_AJAX, function(e) { // Prevent cyclical calls. if (e && e.fallbackHandled) { return; } formEvents.notifyFormSubmittedByJavascript(form, window.skipValidation, true); }); }); }); }