AutorÃa | Ultima modificación | Ver Log |
// 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/>.define([], function() {/*** When embedded the communicator helps talk to the parent page.* This is a copy of the H5P.communicator, which we need to communicate in this context*/var H5PEmbedCommunicator = function() {this._actionHandlers = {};this.registerEventListeners();};/** @type {Object} Maps actions to functions. */H5PEmbedCommunicator.prototype._actionHandlers = {};/*** Register action listener.** @param {string} action What you are waiting for* @param {function} handler What you want done*/H5PEmbedCommunicator.prototype.on = function(action, handler) {this._actionHandlers[action] = handler;};/*** Send a message to the all mighty father.** @param {string} action* @param {Object} [data] payload*/H5PEmbedCommunicator.prototype.send = function(action, data) {if (data === undefined) {data = {};}data.context = 'h5p';data.action = action;// Parent origin can be anything.window.parent.postMessage(data, '*');};/*** Register event listeners for the communicator.** @method registerEventListeners*/H5PEmbedCommunicator.prototype.registerEventListeners = function() {var self = this;// Register message listener.window.addEventListener('message', function receiveMessage(event) {if (window.parent !== event.source || event.data.context !== 'h5p') {return; // Only handle messages from parent and in the correct context.}if (self._actionHandlers[event.data.action] !== undefined) {self._actionHandlers[event.data.action](event.data);}}, false);};return new H5PEmbedCommunicator();});