(function() { "use strict"; var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; window.PreziPlayer = (function() { PreziPlayer.API_VERSION = 1; PreziPlayer.CURRENT_STEP = 'currentStep'; PreziPlayer.CURRENT_ANIMATION_STEP = 'currentAnimationStep'; PreziPlayer.CURRENT_OBJECT = 'currentObject'; PreziPlayer.STATUS_LOADING = 'loading'; PreziPlayer.STATUS_READY = 'ready'; PreziPlayer.STATUS_CONTENT_READY = 'contentready'; PreziPlayer.EVENT_CURRENT_STEP = "currentStepChange"; PreziPlayer.EVENT_CURRENT_ANIMATION_STEP = "currentAnimationStepChange"; PreziPlayer.EVENT_CURRENT_OBJECT = "currentObjectChange"; PreziPlayer.EVENT_STATUS = "statusChange"; PreziPlayer.EVENT_PLAYING = "isAutoPlayingChange"; PreziPlayer.EVENT_IS_MOVING = "isMovingChange"; PreziPlayer.domain = "https://prezi.com"; PreziPlayer.path = "/player/"; PreziPlayer.players = {}; PreziPlayer.binded_methods = ['changesHandler']; PreziPlayer.createMultiplePlayers = function(optionArray){ for(var i=0; i<optionArray.length; i++) { var optionSet = optionArray[i]; new PreziPlayer(optionSet.id, optionSet); }; }; PreziPlayer.messageReceived = function(event){ var message, item, player; try { message = JSON.parse(event.data); } catch (e) {} if (message.id && (player = PreziPlayer.players[message.id])){ if (player.options.debug === true) { if (console && console.log) console.log('received', message); } if (message.type === "changes"){ player.changesHandler(message); } for (var i=0; i<player.callbacks.length; i++) { item = player.callbacks[i]; if (item && message.type === item.event){ item.callback(message); } } } }; function PreziPlayer(id, options) { var params, paramString = "", _this = this; if (PreziPlayer.players[id]){ PreziPlayer.players[id].destroy(); } for(var i=0; i<PreziPlayer.binded_methods.length; i++) { var method_name = PreziPlayer.binded_methods[i]; _this[method_name] = __bind(_this[method_name], _this); }; options = options || {}; this.options = options; this.values = {'status': PreziPlayer.STATUS_LOADING}; this.values[PreziPlayer.CURRENT_STEP] = 0; this.values[PreziPlayer.CURRENT_ANIMATION_STEP] = 0; this.values[PreziPlayer.CURRENT_OBJECT] = null; this.callbacks = []; this.id = id; this.embedTo = document.getElementById(id); if (!this.embedTo) { throw "The element id is not available."; } this.iframe = document.createElement('iframe'); params = [ { name: 'oid', value: options.preziId }, { name: 'explorable', value: options.explorable ? 1 : 0 }, { name: 'controls', value: options.controls ? 1 : 0 } ]; for(var i=0; i<params.length; i++) { var param = params[i]; paramString += (i===0 ? "?" : "&") + param.name + "=" + param.value; }; this.iframe.src = PreziPlayer.domain + PreziPlayer.path + paramString; this.iframe.frameBorder = 0; this.iframe.scrolling = "no"; this.iframe.width = options.width || 640; this.iframe.height = options.height || 480; this.embedTo.innerHTML = ''; // JITSI: IN CASE SOMETHING GOES WRONG. try { this.embedTo.appendChild(this.iframe); } catch (err) { console.log("CATCH ERROR"); } // JITSI: Increase interval from 200 to 500, which fixes prezi // crashes for us. this.initPollInterval = setInterval(function(){ _this.sendMessage({'action': 'init'}); }, 500); PreziPlayer.players[id] = this; } PreziPlayer.prototype.changesHandler = function(message) { var key, value, j, item; if (this.initPollInterval) { clearInterval(this.initPollInterval); this.initPollInterval = false; } for (key in message.data) { if (message.data.hasOwnProperty(key)){ value = message.data[key]; this.values[key] = value; for (j=0; j<this.callbacks.length; j++) { item = this.callbacks[j]; if (item && item.event === key + "Change"){ item.callback({type: item.event, value: value}); } } } } }; PreziPlayer.prototype.destroy = function() { if (this.initPollInterval) { clearInterval(this.initPollInterval); this.initPollInterval = false; } this.embedTo.innerHTML = ''; }; PreziPlayer.prototype.sendMessage = function(message) { if (this.options.debug === true) { if (console && console.log) console.log('sent', message); } message.version = PreziPlayer.API_VERSION; message.id = this.id; return this.iframe.contentWindow.postMessage(JSON.stringify(message), '*'); }; PreziPlayer.prototype.nextStep = /* nextStep is DEPRECATED */ PreziPlayer.prototype.flyToNextStep = function() { return this.sendMessage({ 'action': 'present', 'data': ['moveToNextStep'] }); }; PreziPlayer.prototype.previousStep = /* previousStep is DEPRECATED */ PreziPlayer.prototype.flyToPreviousStep = function() { return this.sendMessage({ 'action': 'present', 'data': ['moveToPrevStep'] }); }; PreziPlayer.prototype.toStep = /* toStep is DEPRECATED */ PreziPlayer.prototype.flyToStep = function(step, animation_step) { var obj = this; // check animation_step if (animation_step > 0 && obj.values.animationCountOnSteps && obj.values.animationCountOnSteps[step] <= animation_step) { animation_step = obj.values.animationCountOnSteps[step]; } // jump to animation steps by calling flyToNextStep() function doAnimationSteps() { if (obj.values.isMoving == true) { setTimeout(doAnimationSteps, 100); // wait until the flight ends return; } while (animation_step-- > 0) { obj.flyToNextStep(); // do the animation steps } } setTimeout(doAnimationSteps, 200); // 200ms is the internal "reporting" time // jump to the step return this.sendMessage({ 'action': 'present', 'data': ['moveToStep', step] }); }; PreziPlayer.prototype.toObject = /* toObject is DEPRECATED */ PreziPlayer.prototype.flyToObject = function(objectId) { return this.sendMessage({ 'action': 'present', 'data': ['moveToObject', objectId] }); }; PreziPlayer.prototype.play = function(defaultDelay) { return this.sendMessage({ 'action': 'present', 'data': ['startAutoPlay', defaultDelay] }); }; PreziPlayer.prototype.stop = function() { return this.sendMessage({ 'action': 'present', 'data': ['stopAutoPlay'] }); }; PreziPlayer.prototype.pause = function(defaultDelay) { return this.sendMessage({ 'action': 'present', 'data': ['pauseAutoPlay', defaultDelay] }); }; PreziPlayer.prototype.getCurrentStep = function() { return this.values.currentStep; }; PreziPlayer.prototype.getCurrentAnimationStep = function() { return this.values.currentAnimationStep; }; PreziPlayer.prototype.getCurrentObject = function() { return this.values.currentObject; }; PreziPlayer.prototype.getStatus = function() { return this.values.status; }; PreziPlayer.prototype.isPlaying = function() { return this.values.isAutoPlaying; }; PreziPlayer.prototype.getStepCount = function() { return this.values.stepCount; }; PreziPlayer.prototype.getAnimationCountOnSteps = function() { return this.values.animationCountOnSteps; }; PreziPlayer.prototype.getTitle = function() { return this.values.title; }; PreziPlayer.prototype.setDimensions = function(dims) { for (var parameter in dims) { this.iframe[parameter] = dims[parameter]; } } PreziPlayer.prototype.getDimensions = function() { return { width: parseInt(this.iframe.width, 10), height: parseInt(this.iframe.height, 10) } } PreziPlayer.prototype.on = function(event, callback) { this.callbacks.push({ event: event, callback: callback }); }; PreziPlayer.prototype.off = function(event, callback) { var j, item; if (event === undefined) { this.callbacks = []; } j = this.callbacks.length; while (j--) { item = this.callbacks[j]; if (item && item.event === event && (callback === undefined || item.callback === callback)){ this.callbacks.splice(j, 1); } } }; if (window.addEventListener) { window.addEventListener('message', PreziPlayer.messageReceived, false); } else { window.attachEvent('onmessage', PreziPlayer.messageReceived); } return PreziPlayer; })(); })();