diff --git a/dist/container.js b/dist/container.js index 5903e1c..f64b4d2 100644 --- a/dist/container.js +++ b/dist/container.js @@ -1502,6 +1502,7 @@ this.client.on( { loading: onLoading.bind(this), + progress: onProgress.bind(this), loadDone: onLoadDone.bind(this), // @deprecated use 'loaded' instead loaded: onLoadDone.bind(this), endGame: onEndGame.bind(this), @@ -1542,13 +1543,29 @@ var onLoading = function() { /** - * Event when a application start loading, first even received + * Event when a application start loading, first event received * from the Application. * @event opening */ this.trigger('opening'); }; + /** + * The game preload is progressing + * @method onProgress + * @private + * @param {Event} event Bellhop event + */ + var onProgress = function(event) + { + /** + * Event listing how many assets have loaded as the application loads. + * @event progress + * @param {Number} percentage The amount loaded from 0 to 1 + */ + this.trigger('progress', event.data); + }; + /** * Reset the mutes for audio and captions * @method onLoadDone @@ -2500,6 +2517,14 @@ */ this._isManualPause = false; + /** + * If the current application is paused + * @property {Boolean} _disablePause + * @private + * @default false + */ + this._disablePause = false; + /** * If the current application is paused * @property {Boolean} _paused @@ -2517,33 +2542,36 @@ { set: function(paused) { - this._paused = paused; - - if (this.client) + if (!this._disablePause) { - this.client.send('pause', paused); - } - /** - * Fired when the pause state is toggled - * @event pause - * @param {boolean} paused If the application is now paused - */ - /** - * Fired when the application resumes from a paused state - * @event resumed - */ - /** - * Fired when the application becomes paused - * @event paused - */ - this.trigger(paused ? 'paused' : 'resumed'); - this.trigger('pause', paused); + this._paused = paused; - // Set the pause button state - if (this.pauseButton) - { - this.pauseButton.removeClass('unpaused paused') - .addClass(paused ? 'paused' : 'unpaused'); + if (this.client) + { + this.client.send('pause', paused); + } + /** + * Fired when the pause state is toggled + * @event pause + * @param {boolean} paused If the application is now paused + */ + /** + * Fired when the application resumes from a paused state + * @event resumed + */ + /** + * Fired when the application becomes paused + * @event paused + */ + this.trigger(paused ? 'paused' : 'resumed'); + this.trigger('pause', paused); + + // Set the pause button state + if (this.pauseButton) + { + this.pauseButton.removeClass('unpaused paused') + .addClass(paused ? 'paused' : 'unpaused'); + } } }, get: function() @@ -2551,6 +2579,12 @@ return this._paused; } }); + + this.on('features', function(features) + { + if (features.disablePause) this._disablePause = true; + } + .bind(this)); }; /** diff --git a/dist/container.min.js b/dist/container.min.js index 5eff990..ea5321a 100644 --- a/dist/container.min.js +++ b/dist/container.min.js @@ -1,2 +1,2 @@ /*! SpringRoll Container 0.5.3 */ -!function(){"use strict";!function(a,b,c){a.merge=function(b,c){b&&"object"==typeof b||(b={});for(var d in c)if(c.hasOwnProperty(d)){var e=c[d];if("object"==typeof e&&a.isPlain(e)){b[d]=a.merge(b[d],e);continue}b[d]=e}for(var f=2,g=arguments.length;g>f;f++)a.merge(b,arguments[f]);return b},a.isPlain=function(a){var d,e=b.hasOwnProperty;if(!a||"object"!=typeof a||a.nodeType||a===window)return!1;try{if(a.constructor&&!e.call(a,"constructor")&&!e.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(f){return!1}if(b.ownLast)for(d in a)return e.call(a,d);for(d in a);return d===c||e.call(a,d)},a.prototype.clone||a.defineProperty(a.prototype,"clone",{enumerable:!1,writable:!0,value:function(){var a={},b=this;for(var c in b)a[c]=b[c];return a}})}(Object,{}),function(a){"extend"in a||(a.extend=function(b,c){if(c){"string"==typeof c&&(c=a.include(c));var d=c.prototype;b.prototype=Object.create(d),b.prototype.__parent=d}return b.prototype.constructor=b,b.extend=function(c){return a.extend(c,b)},b.prototype})}(window),function(a,b){if(!("include"in a)){var c=function(c,d){var e=c.split("."),f=a,g="";d=d!==b?!!d:!0;for(var h=0,i=e.length;i>h;h++){if(g=e[h],!f[g]){if(!d)return null;throw"Unable to include '"+c+"'"}f=f[g]}return f};a.include=c}}(window),function(a,b){if(!("mixin"in a)){var c=function(c,d){if("string"==typeof d&&(d=a.include(d)),!d.prototype)throw"no mixin prototype";var e=d.prototype;for(var f in e){var g=b.getOwnPropertyDescriptor(e,f);g?b.defineProperty(c,f,g):c[f]=e[f]}return d.apply(c,Array.prototype.slice.call(arguments,2)),c};a.mixin=c}}(window,Object),function(a){if(!("namespace"in a)){var b=function(b){for(var c=b.split("."),d=a,e="",f=0,g=c.length;g>f;f++)e=c[f],d[e]=d[e]||{},d=d[e];return d};a.namespace=b}}(window),function(a){function b(a,b){return a._priority-b._priority}function c(a){if(null===a)return"null";var b=typeof a;return"object"===b||"function"===b?Object.prototype.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase()||"object":b}var d=function(){this._listeners=[],this._destroyed=!1},e=extend(d);Object.defineProperty(e,"destroyed",{enumerable:!0,get:function(){return this._destroyed}}),e.trigger=function(b){if(!this._destroyed&&this._listeners[b]!==a){var c,d=this._listeners[b].slice();arguments.length>1&&(c=Array.prototype.slice.call(arguments,1));for(var e=d.length-1;e>=0;--e){var f=d[e];f._eventDispatcherOnce&&(delete f._eventDispatcherOnce,this.off(b,f)),f.apply(this,c)}}},e.once=function(a,b,c){return this.on(a,b,c,!0)},e.on=function(a,d,e,f){if(!this._destroyed){if("object"===c(a))for(var g in a)a.hasOwnProperty(g)&&this.on(g,a[g],e,f);else if("function"===c(d))for(var h,i=a.split(" "),j=null,k=0,l=i.length;l>k;k++)j=i[k],h=this._listeners[j],h||(h=this._listeners[j]=[]),f&&(d._eventDispatcherOnce=!0),d._priority=parseInt(e)||0,-1===h.indexOf(d)&&(h.push(d),h.length>1&&h.sort(b));else if(Array.isArray(d))for(var m=0,n=d.length;n>m;m++)this.on(a,d[m],e,f);return this}},e.off=function(b,c){if(!this._destroyed){if(b===a)this._listeners=[];else if(Array.isArray(c))for(var d=0,e=c.length;e>d;d++)this.off(b,c[d]);else for(var f,g,h=b.split(" "),i=null,j=0,k=h.length;k>j;j++)i=h[j],f=this._listeners[i],f&&(c===a?f.length=0:(g=f.indexOf(c),-1!==g&&f.splice(g,1)));return this}},e.has=function(a,b){if(!a)return!1;var c=this._listeners[a];return c?b?c.indexOf(b)>=0:c.length>0:!1},e.destroy=function(){this._destroyed=!0,this._listeners=null},namespace("springroll").EventDispatcher=d}(),function(a,b,c){var d=function(a,d){this._onFocus=a,this._onBlur=d,this._enabled=!1,(f||b.onfocusin!==c)&&(this._onToggle=function(){b.hidden||b.webkitHidden||b.msHidden||b.mozHidden?this._onBlur():this._onFocus()}.bind(this),this.enabled=!0)},e=extend(d),f=null;b.hidden!==c?f="visibilitychange":b.mozHidden!==c?f="mozvisibilitychange":b.msHidden!==c?f="msvisibilitychange":b.webkitHidden!==c&&(f="webkitvisibilitychange");var g=!f&&b.onfocusin!==c;Object.defineProperty(e,"enabled",{get:function(){return this._enabled},set:function(c){c=!!c,this._enabled!=c&&(this._enabled=c,a.removeEventListener("pagehide",this._onBlur),a.removeEventListener("pageshow",this._onFocus),a.removeEventListener("blur",this._onBlur),a.removeEventListener("focus",this._onFocus),a.removeEventListener("visibilitychange",this._onToggle),b.removeEventListener(f,this._onToggle,!1),g&&(b.removeEventListener("focusin",this._onFocus),b.removeEventListener("focusout",this._onBlur)),c&&(b.addEventListener(f,this._onToggle,!1),a.addEventListener("pagehide",this._onBlur),a.addEventListener("pageshow",this._onFocus),a.addEventListener("blur",this._onBlur),a.addEventListener("focus",this._onFocus),a.addEventListener("visibilitychange",this._onToggle,!1),g&&(b.addEventListener("focusin",this._onFocus),b.addEventListener("focusout",this._onBlur))))}}),e.destroy=function(){f&&this._onToggle&&(this.enabled=!1,this._onToggle=null,this._onFocus=null,this._onBlur=null)},namespace("springroll").PageVisibility=d}(window,document),function(a){var b={},c=window.Storage!==a,d=-1;if(c)try{localStorage.setItem("LS_TEST","test"),localStorage.removeItem("LS_TEST")}catch(e){c=!1}b.remove=function(a){c?(localStorage.removeItem(a),sessionStorage.removeItem(a)):b.write(a,"",d)},b.write=function(a,b,e){if(c)e?sessionStorage.setItem(a,JSON.stringify(b)):localStorage.setItem(a,JSON.stringify(b));else{var f;f=e?e!==d?"":"; expires=Thu, 01 Jan 1970 00:00:00 GMT":"; expires="+new Date(2147483646e3).toGMTString(),document.cookie=a+"="+escape(JSON.stringify(b))+f+"; path=/"}},b.read=function(a){if(c){var d=localStorage.getItem(a)||sessionStorage.getItem(a);return d?JSON.parse(d,b.reviver):null}var e,f,g=a+"=",h=document.cookie.split(";"),i=0;for(i=0,f=h.length;f>i;i++){for(e=h[i];" "==e.charAt(0);)e=e.substring(1,e.length);if(0===e.indexOf(g))return JSON.parse(unescape(e.substring(g.length,e.length)),b.reviver)}return null},b.reviver=function(a,b){if(b&&"string"==typeof b.__classname){var c=include(b.__classname,!1);if(c){var d=new c;if(d.fromJSON)return d.fromJSON(b),d}}return b},namespace("springroll").SavedData=b}(),function(){var a=include("springroll.SavedData"),b=function(){},c=extend(b);c.remove=function(b,c){a.remove(b),c()},c.write=function(b,c,d){a.write(b,c),d()},c.read=function(b,c){c(a.read(b))},namespace("springroll").SavedDataHandler=b}(),function(a){var b=(include("springroll.Debug",!1),{});b.flash=function(){var b=!1;try{var c=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");c&&(b=!0)}catch(d){navigator.mimeTypes&&navigator.mimeTypes["application/x-shockwave-flash"]!==a&&navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin&&(b=!0)}return b}(),b.webgl=function(){var a=document.createElement("canvas");return"supportsContext"in a?a.supportsContext("webgl")||a.supportsContext("experimental-webgl"):!!window.WebGLRenderingContext}(),b.canvas=function(){var a=document.createElement("canvas");return!(!a.getContext||!a.getContext("2d"))}(),b.webaudio=function(){return"webkitAudioContext"in window||"AudioContext"in window}(),b.websockets=function(){return"WebSocket"in window||"MozWebSocket"in window}(),b.geolocation=function(){return"geolocation"in navigator}(),b.webworkers=function(){return!!window.Worker}(),b.touch=function(){return!!("ontouchstart"in window||navigator.msPointerEnabled&&navigator.msMaxTouchPoints>0||navigator.pointerEnabled&&navigator.maxTouchPoints>0)}(),b.basic=function(){return b.canvas?b.webaudio||b.flash?null:"Browser does not support WebAudio or Flash audio":"Browser does not support canvas"},b.test=function(c){var d=b.basic();if(d)return d;var e=c.features,f=c.ui,g=c.sizes;for(var h in e)if(b[h]!==a&&e[h]&&!b[h])return"Browser does not support "+h;if(!f.touch&&b.touch)return"Game does not support touch input";if(!f.mouse&&!b.touch)return"Game does not support mouse input";var i=Math.max(window.screen.width,window.screen.height);return!g.xsmall&&480>i?"Game doesn't support extra small screens":!g.small&&768>i?"Game doesn't support small screens":!g.medium&&992>i?"Game doesn't support medium screens":!g.large&&1200>i?"Game doesn't support large screens":!g.xlarge&&i>=1200?"Game doesn't support extra large screens":null},namespace("springroll").Features=b}(),function(a,b){var c=include("springroll.EventDispatcher"),d=include("springroll.Features"),e=include("Bellhop"),f=include("jQuery"),g=function(a,b){c.call(this),this.options=b||{},this.name="springroll.Container",this.main=f(a),this.dom=this.main[0],this.client=null,this.release=null,this.loaded=!1,this.loading=!1,this._onCloseFailed=this._onCloseFailed.bind(this);for(var d=g._plugins,e=0;e=0;c--)b[c].closed.call(this);this.destroyClient(),this.loaded=!1,this.loading=!1,this.main.attr("src","").removeClass("loading"),a&&(this.off("localError",this._onCloseFailed),this.trigger("closed"))},i.close=function(){if(this.loading||this.loaded){for(var a=g._plugins,b=a.length-1;b>=0;b--)a[b].close.call(this);this.trigger("close"),this.once("localError",this._onCloseFailed),this.client.send("close")}else this.reset()},i._onCloseFailed=function(){this.reset()},i.destroy=function(){this.reset(),h.destroy.call(this);for(var a=g._plugins,b=a.length-1;b>=0;b--)a[b].teardown.call(this);this.main=null,this.options=null,this.dom=null},namespace("springroll").Container=g}(document),function(){var a,b=function(b){a||(a=include("springroll.Container")),this.priority=b||0,this.setup=function(){},this.open=function(){},this.opened=function(){},this.close=function(){},this.closed=function(){},this.teardown=function(){},a._plugins.push(this),a._plugins.sort(function(a,b){return b.priority-a.priority})};namespace("springroll").ContainerPlugin=b}(),function(){var a=springroll.SavedData,b=new springroll.ContainerPlugin(100);b.setup=function(){this.sendMutes=!0,this._setMuteProp=function(b,c,d){c.removeClass("unmuted muted").addClass(d?"muted":"unmuted"),a.write(b,d),this.client&&this.sendMutes&&this.client.send(b,d)},this._disableButton=function(a){a.removeClass("enabled").addClass("disabled")}},b.teardown=function(){delete this._disableButton,delete this._setMuteProp,delete this.sendMutes}}(),function(){var a=include("springroll.SavedData"),b=new springroll.ContainerPlugin(70),c="captionsStyles",d={size:"md",background:"black-semi",color:"white",edge:"none",font:"arial",align:"top"},e="captionsMuted";b.setup=function(){this._captionsStyles=Object.merge({},d,a.read(c)||{}),this.captionsButton=$(this.options.captionsButton).click(function(){this.captionsMuted=!this.captionsMuted}.bind(this)),Object.defineProperty(this,e,{set:function(a){this._captionsMuted=a,this._setMuteProp(e,this.captionsButton,a)},get:function(){return this._captionsMuted}}),this.setCaptionsStyles=function(b,d){"object"==typeof b?Object.merge(this._captionsStyles,b||{}):"string"==typeof b&&(this._captionsStyles[b]=d),b=this._captionsStyles,a.write(c,b),this.client&&this.client.send(c,b)},this.getCaptionsStyles=function(a){var b=this._captionsStyles;return a?b[a]:b},this.clearCaptionsStyles=function(){this._captionsStyles=Object.merge({},d),this.setCaptionsStyles()},this.on("features",function(a){this.captionsButton.hide(),a.captions&&this.captionsButton.show()}),null===a.read(e)&&(this.captionsMuted=!0)},b.opened=function(){this.captionsButton.removeClass("disabled"),this.captionsMuted=!!a.read(e),this.setCaptionsStyles(a.read(c))},b.close=function(){this._disableButton(this.captionsButton)},b.teardown=function(){this.captionsButton.off("click"),delete this.captionsButton,delete this._captionsStyles,delete this.getCaptionsStyles,delete this.setCaptionsStyles,delete this.clearCaptionsStyles,delete this._captionsMuted}}(),function(){var a=new springroll.ContainerPlugin(90);a.open=function(){this._onFeatures=b.bind(this),this.client.on("features",this._onFeatures)},a.close=function(){this.client.off("features",this._onFeatures),delete this._onFeatures};var b=function(a){this.trigger("features",a.data)}}(),function(){var a=include("springroll.PageVisibility"),b=new springroll.ContainerPlugin(90);b.setup=function(){this.options=$.extend({pauseFocusSelector:".pause-on-focus"},this.options),this._pageVisibility=new a(f.bind(this),g.bind(this)),this._appBlurred=!1,this._keepFocus=!1,this._containerBlurred=!1,this._focusTimer=null,this._onDocClick=c.bind(this),$(document).on("focus click",this._onDocClick),this.focus=function(){this.dom.contentWindow.focus()},this.blur=function(){this.dom.contentWindow.blur()},this.manageFocus=function(){this._keepFocus&&this.blur(),this._focusTimer&&clearTimeout(this._focusTimer),this._focusTimer=setTimeout(function(){this._focusTimer=null,this._isManualPause||(this.paused=this._containerBlurred&&this._appBlurred,this._keepFocus&&!this._containerBlurred&&this._appBlurred&&this.focus())}.bind(this),100)};var b=this;$(this.options.pauseFocusSelector).on("focus",function(){b._isManualPause=b.paused=!0,$(this).one("blur",function(){b._isManualPause=b.paused=!1,b.focus()})})};var c=function(a){if(this.loaded){var b;b=a.originalEvent.explicitOriginalTarget?$(a.originalEvent.explicitOriginalTarget):$(a.target),b.filter(this.options.pauseFocusSelector).length||this.focus()}},d=function(a){this._keepFocus=!!a.data,this.manageFocus()},e=function(a){this._appBlurred=!a.data,this.manageFocus()},f=function(a){this._containerBlurred=!1,this.manageFocus()},g=function(a){this._containerBlurred=this._appBlurred=!0,this.manageFocus()};b.open=function(){this.client.on({focus:e.bind(this),keepFocus:d.bind(this)})},b.opened=function(){this.focus()},b.close=function(){this._focusTimer&&clearTimeout(this._focusTimer)},b.teardown=function(){$(this.options.pauseFocusSelector).off("focus"),$(document).off("focus click",this._onDocClick),delete this._onDocClick,this._pageVisibility&&(this._pageVisibility.destroy(),delete this._pageVisibility),delete this.focus,delete this.blur,delete this.manageFocus,delete this._appBlurred,delete this._focusTimer,delete this._keepFocus,delete this._containerBlurred}}(),function(){var a=new springroll.ContainerPlugin(50);a.setup=function(){this.helpButton=$(this.options.helpButton).click(function(){this.paused||this.helpButton.hasClass("disabled")||this.client.send("playHelp")}.bind(this)),this.on("pause",function(a){a&&!this.helpButton.hasClass("disabled")?(this.helpButton.data("paused",!0),this.helpEnabled=!1):this.helpButton.data("paused")&&(this.helpButton.removeData("paused"),this.helpEnabled=!0)}),Object.defineProperty(this,"helpEnabled",{set:function(a){this._helpEnabled=a,this.helpButton.removeClass("disabled enabled").addClass(a?"enabled":"disabled"),this.trigger("helpEnabled",a)},get:function(){return this._helpEnabled}}),this.on("features",function(a){this.helpButton.hide(),a.hints&&this.helpButton.show()}.bind(this))},a.open=function(){this.client.on("helpEnabled",function(a){this.helpEnabled=!!a.data}.bind(this))},a.close=function(){this.client.off("helpEnabled"),this.helpEnabled=!1},a.teardown=function(){this.helpButton.off("click"),delete this.helpButton,delete this._helpEnabled}}(),function(){var a=new springroll.ContainerPlugin(80);a.setup=function(){this.pauseButton=$(this.options.pauseButton).click(b.bind(this)),this._isManualPause=!1,this._paused=!1,Object.defineProperty(this,"paused",{set:function(a){this._paused=a,this.client&&this.client.send("pause",a),this.trigger(a?"paused":"resumed"),this.trigger("pause",a),this.pauseButton&&this.pauseButton.removeClass("unpaused paused").addClass(a?"paused":"unpaused")},get:function(){return this._paused}})};var b=function(){this.paused=!this.paused,this._isManualPause=this.paused};a.opened=function(){this.pauseButton.removeClass("disabled"),this.paused=this._paused},a.close=function(){this._disableButton(this.pauseButton),this.paused=!1},a.teardown=function(){this.pauseButton.off("click"),delete this.pauseButton,delete this._isManualPause,delete this._paused}}(),function(){var a=include("jQuery"),b=include("springroll.Features"),c=new springroll.ContainerPlugin(30);c.setup=function(){this.release=null,this.openRemote=function(c,d,e){"boolean"==typeof d&&(d={singlePlay:singlePlay,playOptions:e}),d=a.extend({query:"",playOptions:null,singlePlay:!1},d),this.release=null,a.getJSON(c,function(a){if(!this._destroyed){if(!a.success)return this.trigger("remoteError",a.error);var c=a.data,e=b.test(c.capabilities);if(e)return this.trigger("unsupported",e);this.release=c,this._internalOpen(c.url+d.query,d)}}.bind(this)).fail(function(){return this._destroyed?void 0:this.trigger("remoteFailed")}.bind(this))}},c.teardown=function(){delete this.openRemote,delete this.release}}(),function(){var a=include("springroll.SavedData"),b=new springroll.ContainerPlugin(60),c="soundMuted",d="musicMuted",e="voMuted",f="sfxMuted";b.setup=function(){this.soundButton=$(this.options.soundButton).click(g.bind(this)),this.musicButton=$(this.options.musicButton).click(h.bind(this)),this.sfxButton=$(this.options.sfxButton).click(j.bind(this)),this.voButton=$(this.options.voButton).click(i.bind(this)),this._checkSoundMute=function(){this.soundMuted=this.sfxMuted&&this.voMuted&&this.musicMuted},Object.defineProperty(this,c,{set:function(a){this._soundMuted=a,this._setMuteProp(c,this.soundButton,a)},get:function(){return this._soundMuted}}),Object.defineProperty(this,e,{set:function(a){this._voMuted=a,this._setMuteProp(e,this.voButton,a)},get:function(){return this._voMuted}}),Object.defineProperty(this,d,{set:function(a){this._musicMuted=a,this._setMuteProp(d,this.musicButton,a)},get:function(){return this._musicMuted}}),Object.defineProperty(this,f,{set:function(a){this._sfxMuted=a,this._setMuteProp(f,this.sfxButton,a)},get:function(){return this._sfxMuted}}),null===a.read(c)&&(this.soundMuted=!1),this.on("features",function(a){this.voButton.hide(),this.musicButton.hide(),this.soundButton.hide(),this.sfxButton.hide(),a.vo&&this.voButton.show(),a.music&&this.musicButton.show(),a.sound&&this.soundButton.show(),a.sfxButton&&this.sfxButton.show()}.bind(this))};var g=function(){var a=!this.soundMuted;this.soundMuted=a,this.musicMuted=a,this.voMuted=a,this.sfxMuted=a},h=function(){this.musicMuted=!this.musicMuted,this._checkSoundMute()},i=function(){this.voMuted=!this.voMuted,this._checkSoundMute()},j=function(){this.sfxMuted=!this.sfxMuted,this._checkSoundMute()};b.open=function(){},b.opened=function(){this.soundButton.removeClass("disabled"),this.sfxButton.removeClass("disabled"),this.voButton.removeClass("disabled"),this.musicButton.removeClass("disabled"),this.soundMuted=!!a.read(c),this.musicMuted=!!a.read(d),this.sfxMuted=!!a.read(f),this.voMuted=!!a.read(e)},b.close=function(){this._disableButton(this.soundButton),this._disableButton(this.musicButton),this._disableButton(this.voButton),this._disableButton(this.sfxButton)},b.teardown=function(){this.voButton.off("click"),this.sfxButton.off("click"),this.musicButton.off("click"),this.soundButton.off("click"),delete this.voButton,delete this.sfxButton,delete this.musicButton,delete this.soundButton,delete this._checkSoundMute}}(),function(){var a=include("springroll.SavedDataHandler"),b=new springroll.ContainerPlugin(40);b.setup=function(){this.userDataHandler=new a},b.open=function(){this.client.on({userDataRemove:c.bind(this),userDataRead:d.bind(this),userDataWrite:e.bind(this)})};var c=function(a){var b=this.client;this.userDataHandler.remove(a.data,function(){b.send(a.type)})},d=function(a){var b=this.client;this.userDataHandler.read(a.data,function(c){b.send(a.type,c)})},e=function(a){var b=a.data,c=this.client;this.userDataHandler.write(b.name,b.value,function(){c.send(a.type)})};b.teardown=function(){this.userDataHandler=null}}();}(); \ No newline at end of file +!function(){"use strict";!function(a,b,c){a.merge=function(b,c){b&&"object"==typeof b||(b={});for(var d in c)if(c.hasOwnProperty(d)){var e=c[d];if("object"==typeof e&&a.isPlain(e)){b[d]=a.merge(b[d],e);continue}b[d]=e}for(var f=2,g=arguments.length;g>f;f++)a.merge(b,arguments[f]);return b},a.isPlain=function(a){var d,e=b.hasOwnProperty;if(!a||"object"!=typeof a||a.nodeType||a===window)return!1;try{if(a.constructor&&!e.call(a,"constructor")&&!e.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(f){return!1}if(b.ownLast)for(d in a)return e.call(a,d);for(d in a);return d===c||e.call(a,d)},a.prototype.clone||a.defineProperty(a.prototype,"clone",{enumerable:!1,writable:!0,value:function(){var a={},b=this;for(var c in b)a[c]=b[c];return a}})}(Object,{}),function(a){"extend"in a||(a.extend=function(b,c){if(c){"string"==typeof c&&(c=a.include(c));var d=c.prototype;b.prototype=Object.create(d),b.prototype.__parent=d}return b.prototype.constructor=b,b.extend=function(c){return a.extend(c,b)},b.prototype})}(window),function(a,b){if(!("include"in a)){var c=function(c,d){var e=c.split("."),f=a,g="";d=d!==b?!!d:!0;for(var h=0,i=e.length;i>h;h++){if(g=e[h],!f[g]){if(!d)return null;throw"Unable to include '"+c+"'"}f=f[g]}return f};a.include=c}}(window),function(a,b){if(!("mixin"in a)){var c=function(c,d){if("string"==typeof d&&(d=a.include(d)),!d.prototype)throw"no mixin prototype";var e=d.prototype;for(var f in e){var g=b.getOwnPropertyDescriptor(e,f);g?b.defineProperty(c,f,g):c[f]=e[f]}return d.apply(c,Array.prototype.slice.call(arguments,2)),c};a.mixin=c}}(window,Object),function(a){if(!("namespace"in a)){var b=function(b){for(var c=b.split("."),d=a,e="",f=0,g=c.length;g>f;f++)e=c[f],d[e]=d[e]||{},d=d[e];return d};a.namespace=b}}(window),function(a){function b(a,b){return a._priority-b._priority}function c(a){if(null===a)return"null";var b=typeof a;return"object"===b||"function"===b?Object.prototype.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase()||"object":b}var d=function(){this._listeners=[],this._destroyed=!1},e=extend(d);Object.defineProperty(e,"destroyed",{enumerable:!0,get:function(){return this._destroyed}}),e.trigger=function(b){if(!this._destroyed&&this._listeners[b]!==a){var c,d=this._listeners[b].slice();arguments.length>1&&(c=Array.prototype.slice.call(arguments,1));for(var e=d.length-1;e>=0;--e){var f=d[e];f._eventDispatcherOnce&&(delete f._eventDispatcherOnce,this.off(b,f)),f.apply(this,c)}}},e.once=function(a,b,c){return this.on(a,b,c,!0)},e.on=function(a,d,e,f){if(!this._destroyed){if("object"===c(a))for(var g in a)a.hasOwnProperty(g)&&this.on(g,a[g],e,f);else if("function"===c(d))for(var h,i=a.split(" "),j=null,k=0,l=i.length;l>k;k++)j=i[k],h=this._listeners[j],h||(h=this._listeners[j]=[]),f&&(d._eventDispatcherOnce=!0),d._priority=parseInt(e)||0,-1===h.indexOf(d)&&(h.push(d),h.length>1&&h.sort(b));else if(Array.isArray(d))for(var m=0,n=d.length;n>m;m++)this.on(a,d[m],e,f);return this}},e.off=function(b,c){if(!this._destroyed){if(b===a)this._listeners=[];else if(Array.isArray(c))for(var d=0,e=c.length;e>d;d++)this.off(b,c[d]);else for(var f,g,h=b.split(" "),i=null,j=0,k=h.length;k>j;j++)i=h[j],f=this._listeners[i],f&&(c===a?f.length=0:(g=f.indexOf(c),-1!==g&&f.splice(g,1)));return this}},e.has=function(a,b){if(!a)return!1;var c=this._listeners[a];return c?b?c.indexOf(b)>=0:c.length>0:!1},e.destroy=function(){this._destroyed=!0,this._listeners=null},namespace("springroll").EventDispatcher=d}(),function(a,b,c){var d=function(a,d){this._onFocus=a,this._onBlur=d,this._enabled=!1,(f||b.onfocusin!==c)&&(this._onToggle=function(){b.hidden||b.webkitHidden||b.msHidden||b.mozHidden?this._onBlur():this._onFocus()}.bind(this),this.enabled=!0)},e=extend(d),f=null;b.hidden!==c?f="visibilitychange":b.mozHidden!==c?f="mozvisibilitychange":b.msHidden!==c?f="msvisibilitychange":b.webkitHidden!==c&&(f="webkitvisibilitychange");var g=!f&&b.onfocusin!==c;Object.defineProperty(e,"enabled",{get:function(){return this._enabled},set:function(c){c=!!c,this._enabled!=c&&(this._enabled=c,a.removeEventListener("pagehide",this._onBlur),a.removeEventListener("pageshow",this._onFocus),a.removeEventListener("blur",this._onBlur),a.removeEventListener("focus",this._onFocus),a.removeEventListener("visibilitychange",this._onToggle),b.removeEventListener(f,this._onToggle,!1),g&&(b.removeEventListener("focusin",this._onFocus),b.removeEventListener("focusout",this._onBlur)),c&&(b.addEventListener(f,this._onToggle,!1),a.addEventListener("pagehide",this._onBlur),a.addEventListener("pageshow",this._onFocus),a.addEventListener("blur",this._onBlur),a.addEventListener("focus",this._onFocus),a.addEventListener("visibilitychange",this._onToggle,!1),g&&(b.addEventListener("focusin",this._onFocus),b.addEventListener("focusout",this._onBlur))))}}),e.destroy=function(){f&&this._onToggle&&(this.enabled=!1,this._onToggle=null,this._onFocus=null,this._onBlur=null)},namespace("springroll").PageVisibility=d}(window,document),function(a){var b={},c=window.Storage!==a,d=-1;if(c)try{localStorage.setItem("LS_TEST","test"),localStorage.removeItem("LS_TEST")}catch(e){c=!1}b.remove=function(a){c?(localStorage.removeItem(a),sessionStorage.removeItem(a)):b.write(a,"",d)},b.write=function(a,b,e){if(c)e?sessionStorage.setItem(a,JSON.stringify(b)):localStorage.setItem(a,JSON.stringify(b));else{var f;f=e?e!==d?"":"; expires=Thu, 01 Jan 1970 00:00:00 GMT":"; expires="+new Date(2147483646e3).toGMTString(),document.cookie=a+"="+escape(JSON.stringify(b))+f+"; path=/"}},b.read=function(a){if(c){var d=localStorage.getItem(a)||sessionStorage.getItem(a);return d?JSON.parse(d,b.reviver):null}var e,f,g=a+"=",h=document.cookie.split(";"),i=0;for(i=0,f=h.length;f>i;i++){for(e=h[i];" "==e.charAt(0);)e=e.substring(1,e.length);if(0===e.indexOf(g))return JSON.parse(unescape(e.substring(g.length,e.length)),b.reviver)}return null},b.reviver=function(a,b){if(b&&"string"==typeof b.__classname){var c=include(b.__classname,!1);if(c){var d=new c;if(d.fromJSON)return d.fromJSON(b),d}}return b},namespace("springroll").SavedData=b}(),function(){var a=include("springroll.SavedData"),b=function(){},c=extend(b);c.remove=function(b,c){a.remove(b),c()},c.write=function(b,c,d){a.write(b,c),d()},c.read=function(b,c){c(a.read(b))},namespace("springroll").SavedDataHandler=b}(),function(a){var b=(include("springroll.Debug",!1),{});b.flash=function(){var b=!1;try{var c=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");c&&(b=!0)}catch(d){navigator.mimeTypes&&navigator.mimeTypes["application/x-shockwave-flash"]!==a&&navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin&&(b=!0)}return b}(),b.webgl=function(){var a=document.createElement("canvas");return"supportsContext"in a?a.supportsContext("webgl")||a.supportsContext("experimental-webgl"):!!window.WebGLRenderingContext}(),b.canvas=function(){var a=document.createElement("canvas");return!(!a.getContext||!a.getContext("2d"))}(),b.webaudio=function(){return"webkitAudioContext"in window||"AudioContext"in window}(),b.websockets=function(){return"WebSocket"in window||"MozWebSocket"in window}(),b.geolocation=function(){return"geolocation"in navigator}(),b.webworkers=function(){return!!window.Worker}(),b.touch=function(){return!!("ontouchstart"in window||navigator.msPointerEnabled&&navigator.msMaxTouchPoints>0||navigator.pointerEnabled&&navigator.maxTouchPoints>0)}(),b.basic=function(){return b.canvas?b.webaudio||b.flash?null:"Browser does not support WebAudio or Flash audio":"Browser does not support canvas"},b.test=function(c){var d=b.basic();if(d)return d;var e=c.features,f=c.ui,g=c.sizes;for(var h in e)if(b[h]!==a&&e[h]&&!b[h])return"Browser does not support "+h;if(!f.touch&&b.touch)return"Game does not support touch input";if(!f.mouse&&!b.touch)return"Game does not support mouse input";var i=Math.max(window.screen.width,window.screen.height);return!g.xsmall&&480>i?"Game doesn't support extra small screens":!g.small&&768>i?"Game doesn't support small screens":!g.medium&&992>i?"Game doesn't support medium screens":!g.large&&1200>i?"Game doesn't support large screens":!g.xlarge&&i>=1200?"Game doesn't support extra large screens":null},namespace("springroll").Features=b}(),function(a,b){var c=include("springroll.EventDispatcher"),d=include("springroll.Features"),e=include("Bellhop"),f=include("jQuery"),g=function(a,b){c.call(this),this.options=b||{},this.name="springroll.Container",this.main=f(a),this.dom=this.main[0],this.client=null,this.release=null,this.loaded=!1,this.loading=!1,this._onCloseFailed=this._onCloseFailed.bind(this);for(var d=g._plugins,e=0;e=0;c--)b[c].closed.call(this);this.destroyClient(),this.loaded=!1,this.loading=!1,this.main.attr("src","").removeClass("loading"),a&&(this.off("localError",this._onCloseFailed),this.trigger("closed"))},i.close=function(){if(this.loading||this.loaded){for(var a=g._plugins,b=a.length-1;b>=0;b--)a[b].close.call(this);this.trigger("close"),this.once("localError",this._onCloseFailed),this.client.send("close")}else this.reset()},i._onCloseFailed=function(){this.reset()},i.destroy=function(){this.reset(),h.destroy.call(this);for(var a=g._plugins,b=a.length-1;b>=0;b--)a[b].teardown.call(this);this.main=null,this.options=null,this.dom=null},namespace("springroll").Container=g}(document),function(){var a,b=function(b){a||(a=include("springroll.Container")),this.priority=b||0,this.setup=function(){},this.open=function(){},this.opened=function(){},this.close=function(){},this.closed=function(){},this.teardown=function(){},a._plugins.push(this),a._plugins.sort(function(a,b){return b.priority-a.priority})};namespace("springroll").ContainerPlugin=b}(),function(){var a=springroll.SavedData,b=new springroll.ContainerPlugin(100);b.setup=function(){this.sendMutes=!0,this._setMuteProp=function(b,c,d){c.removeClass("unmuted muted").addClass(d?"muted":"unmuted"),a.write(b,d),this.client&&this.sendMutes&&this.client.send(b,d)},this._disableButton=function(a){a.removeClass("enabled").addClass("disabled")}},b.teardown=function(){delete this._disableButton,delete this._setMuteProp,delete this.sendMutes}}(),function(){var a=include("springroll.SavedData"),b=new springroll.ContainerPlugin(70),c="captionsStyles",d={size:"md",background:"black-semi",color:"white",edge:"none",font:"arial",align:"top"},e="captionsMuted";b.setup=function(){this._captionsStyles=Object.merge({},d,a.read(c)||{}),this.captionsButton=$(this.options.captionsButton).click(function(){this.captionsMuted=!this.captionsMuted}.bind(this)),Object.defineProperty(this,e,{set:function(a){this._captionsMuted=a,this._setMuteProp(e,this.captionsButton,a)},get:function(){return this._captionsMuted}}),this.setCaptionsStyles=function(b,d){"object"==typeof b?Object.merge(this._captionsStyles,b||{}):"string"==typeof b&&(this._captionsStyles[b]=d),b=this._captionsStyles,a.write(c,b),this.client&&this.client.send(c,b)},this.getCaptionsStyles=function(a){var b=this._captionsStyles;return a?b[a]:b},this.clearCaptionsStyles=function(){this._captionsStyles=Object.merge({},d),this.setCaptionsStyles()},this.on("features",function(a){this.captionsButton.hide(),a.captions&&this.captionsButton.show()}),null===a.read(e)&&(this.captionsMuted=!0)},b.opened=function(){this.captionsButton.removeClass("disabled"),this.captionsMuted=!!a.read(e),this.setCaptionsStyles(a.read(c))},b.close=function(){this._disableButton(this.captionsButton)},b.teardown=function(){this.captionsButton.off("click"),delete this.captionsButton,delete this._captionsStyles,delete this.getCaptionsStyles,delete this.setCaptionsStyles,delete this.clearCaptionsStyles,delete this._captionsMuted}}(),function(){var a=new springroll.ContainerPlugin(90);a.open=function(){this._onFeatures=b.bind(this),this.client.on("features",this._onFeatures)},a.close=function(){this.client.off("features",this._onFeatures),delete this._onFeatures};var b=function(a){this.trigger("features",a.data)}}(),function(){var a=include("springroll.PageVisibility"),b=new springroll.ContainerPlugin(90);b.setup=function(){this.options=$.extend({pauseFocusSelector:".pause-on-focus"},this.options),this._pageVisibility=new a(f.bind(this),g.bind(this)),this._appBlurred=!1,this._keepFocus=!1,this._containerBlurred=!1,this._focusTimer=null,this._onDocClick=c.bind(this),$(document).on("focus click",this._onDocClick),this.focus=function(){this.dom.contentWindow.focus()},this.blur=function(){this.dom.contentWindow.blur()},this.manageFocus=function(){this._keepFocus&&this.blur(),this._focusTimer&&clearTimeout(this._focusTimer),this._focusTimer=setTimeout(function(){this._focusTimer=null,this._isManualPause||(this.paused=this._containerBlurred&&this._appBlurred,this._keepFocus&&!this._containerBlurred&&this._appBlurred&&this.focus())}.bind(this),100)};var b=this;$(this.options.pauseFocusSelector).on("focus",function(){b._isManualPause=b.paused=!0,$(this).one("blur",function(){b._isManualPause=b.paused=!1,b.focus()})})};var c=function(a){if(this.loaded){var b;b=a.originalEvent.explicitOriginalTarget?$(a.originalEvent.explicitOriginalTarget):$(a.target),b.filter(this.options.pauseFocusSelector).length||this.focus()}},d=function(a){this._keepFocus=!!a.data,this.manageFocus()},e=function(a){this._appBlurred=!a.data,this.manageFocus()},f=function(a){this._containerBlurred=!1,this.manageFocus()},g=function(a){this._containerBlurred=this._appBlurred=!0,this.manageFocus()};b.open=function(){this.client.on({focus:e.bind(this),keepFocus:d.bind(this)})},b.opened=function(){this.focus()},b.close=function(){this._focusTimer&&clearTimeout(this._focusTimer)},b.teardown=function(){$(this.options.pauseFocusSelector).off("focus"),$(document).off("focus click",this._onDocClick),delete this._onDocClick,this._pageVisibility&&(this._pageVisibility.destroy(),delete this._pageVisibility),delete this.focus,delete this.blur,delete this.manageFocus,delete this._appBlurred,delete this._focusTimer,delete this._keepFocus,delete this._containerBlurred}}(),function(){var a=new springroll.ContainerPlugin(50);a.setup=function(){this.helpButton=$(this.options.helpButton).click(function(){this.paused||this.helpButton.hasClass("disabled")||this.client.send("playHelp")}.bind(this)),this.on("pause",function(a){a&&!this.helpButton.hasClass("disabled")?(this.helpButton.data("paused",!0),this.helpEnabled=!1):this.helpButton.data("paused")&&(this.helpButton.removeData("paused"),this.helpEnabled=!0)}),Object.defineProperty(this,"helpEnabled",{set:function(a){this._helpEnabled=a,this.helpButton.removeClass("disabled enabled").addClass(a?"enabled":"disabled"),this.trigger("helpEnabled",a)},get:function(){return this._helpEnabled}}),this.on("features",function(a){this.helpButton.hide(),a.hints&&this.helpButton.show()}.bind(this))},a.open=function(){this.client.on("helpEnabled",function(a){this.helpEnabled=!!a.data}.bind(this))},a.close=function(){this.client.off("helpEnabled"),this.helpEnabled=!1},a.teardown=function(){this.helpButton.off("click"),delete this.helpButton,delete this._helpEnabled}}(),function(){var a=new springroll.ContainerPlugin(80);a.setup=function(){this.pauseButton=$(this.options.pauseButton).click(b.bind(this)),this._isManualPause=!1,this._disablePause=!1,this._paused=!1,Object.defineProperty(this,"paused",{set:function(a){this._disablePause||(this._paused=a,this.client&&this.client.send("pause",a),this.trigger(a?"paused":"resumed"),this.trigger("pause",a),this.pauseButton&&this.pauseButton.removeClass("unpaused paused").addClass(a?"paused":"unpaused"))},get:function(){return this._paused}}),this.on("features",function(a){a.disablePause&&(this._disablePause=!0)}.bind(this))};var b=function(){this.paused=!this.paused,this._isManualPause=this.paused};a.opened=function(){this.pauseButton.removeClass("disabled"),this.paused=this._paused},a.close=function(){this._disableButton(this.pauseButton),this.paused=!1},a.teardown=function(){this.pauseButton.off("click"),delete this.pauseButton,delete this._isManualPause,delete this._paused}}(),function(){var a=include("jQuery"),b=include("springroll.Features"),c=new springroll.ContainerPlugin(30);c.setup=function(){this.release=null,this.openRemote=function(c,d,e){"boolean"==typeof d&&(d={singlePlay:singlePlay,playOptions:e}),d=a.extend({query:"",playOptions:null,singlePlay:!1},d),this.release=null,a.getJSON(c,function(a){if(!this._destroyed){if(!a.success)return this.trigger("remoteError",a.error);var c=a.data,e=b.test(c.capabilities);if(e)return this.trigger("unsupported",e);this.release=c,this._internalOpen(c.url+d.query,d)}}.bind(this)).fail(function(){return this._destroyed?void 0:this.trigger("remoteFailed")}.bind(this))}},c.teardown=function(){delete this.openRemote,delete this.release}}(),function(){var a=include("springroll.SavedData"),b=new springroll.ContainerPlugin(60),c="soundMuted",d="musicMuted",e="voMuted",f="sfxMuted";b.setup=function(){this.soundButton=$(this.options.soundButton).click(g.bind(this)),this.musicButton=$(this.options.musicButton).click(h.bind(this)),this.sfxButton=$(this.options.sfxButton).click(j.bind(this)),this.voButton=$(this.options.voButton).click(i.bind(this)),this._checkSoundMute=function(){this.soundMuted=this.sfxMuted&&this.voMuted&&this.musicMuted},Object.defineProperty(this,c,{set:function(a){this._soundMuted=a,this._setMuteProp(c,this.soundButton,a)},get:function(){return this._soundMuted}}),Object.defineProperty(this,e,{set:function(a){this._voMuted=a,this._setMuteProp(e,this.voButton,a)},get:function(){return this._voMuted}}),Object.defineProperty(this,d,{set:function(a){this._musicMuted=a,this._setMuteProp(d,this.musicButton,a)},get:function(){return this._musicMuted}}),Object.defineProperty(this,f,{set:function(a){this._sfxMuted=a,this._setMuteProp(f,this.sfxButton,a)},get:function(){return this._sfxMuted}}),null===a.read(c)&&(this.soundMuted=!1),this.on("features",function(a){this.voButton.hide(),this.musicButton.hide(),this.soundButton.hide(),this.sfxButton.hide(),a.vo&&this.voButton.show(),a.music&&this.musicButton.show(),a.sound&&this.soundButton.show(),a.sfxButton&&this.sfxButton.show()}.bind(this))};var g=function(){var a=!this.soundMuted;this.soundMuted=a,this.musicMuted=a,this.voMuted=a,this.sfxMuted=a},h=function(){this.musicMuted=!this.musicMuted,this._checkSoundMute()},i=function(){this.voMuted=!this.voMuted,this._checkSoundMute()},j=function(){this.sfxMuted=!this.sfxMuted,this._checkSoundMute()};b.open=function(){},b.opened=function(){this.soundButton.removeClass("disabled"),this.sfxButton.removeClass("disabled"),this.voButton.removeClass("disabled"),this.musicButton.removeClass("disabled"),this.soundMuted=!!a.read(c),this.musicMuted=!!a.read(d),this.sfxMuted=!!a.read(f),this.voMuted=!!a.read(e)},b.close=function(){this._disableButton(this.soundButton),this._disableButton(this.musicButton),this._disableButton(this.voButton),this._disableButton(this.sfxButton)},b.teardown=function(){this.voButton.off("click"),this.sfxButton.off("click"),this.musicButton.off("click"),this.soundButton.off("click"),delete this.voButton,delete this.sfxButton,delete this.musicButton,delete this.soundButton,delete this._checkSoundMute}}(),function(){var a=include("springroll.SavedDataHandler"),b=new springroll.ContainerPlugin(40);b.setup=function(){this.userDataHandler=new a},b.open=function(){this.client.on({userDataRemove:c.bind(this),userDataRead:d.bind(this),userDataWrite:e.bind(this)})};var c=function(a){var b=this.client;this.userDataHandler.remove(a.data,function(){b.send(a.type)})},d=function(a){var b=this.client;this.userDataHandler.read(a.data,function(c){b.send(a.type,c)})},e=function(a){var b=a.data,c=this.client;this.userDataHandler.write(b.name,b.value,function(){c.send(a.type)})};b.teardown=function(){this.userDataHandler=null}}();}(); \ No newline at end of file diff --git a/src/container/plugins/FeaturesPlugin.js b/src/container/plugins/FeaturesPlugin.js index 5559281..3c888ed 100644 --- a/src/container/plugins/FeaturesPlugin.js +++ b/src/container/plugins/FeaturesPlugin.js @@ -32,6 +32,7 @@ * @param {Boolean} data.sfx If SFX context is supported * @param {Boolean} data.captions If captions is supported * @param {Boolean} data.hints If hinting is supported + * @param {Boolean} data.disablePause If pause is disabled for debugging */ this.trigger('features', event.data); }; diff --git a/src/container/plugins/PausePlugin.js b/src/container/plugins/PausePlugin.js index 8587bcb..7a1a2d7 100644 --- a/src/container/plugins/PausePlugin.js +++ b/src/container/plugins/PausePlugin.js @@ -26,6 +26,14 @@ */ this._isManualPause = false; + /** + * If the current application is paused + * @property {Boolean} _disablePause + * @private + * @default false + */ + this._disablePause = false; + /** * If the current application is paused * @property {Boolean} _paused @@ -43,33 +51,36 @@ { set: function(paused) { - this._paused = paused; - - if (this.client) + if (!this._disablePause) { - this.client.send('pause', paused); - } - /** - * Fired when the pause state is toggled - * @event pause - * @param {boolean} paused If the application is now paused - */ - /** - * Fired when the application resumes from a paused state - * @event resumed - */ - /** - * Fired when the application becomes paused - * @event paused - */ - this.trigger(paused ? 'paused' : 'resumed'); - this.trigger('pause', paused); + this._paused = paused; - // Set the pause button state - if (this.pauseButton) - { - this.pauseButton.removeClass('unpaused paused') - .addClass(paused ? 'paused' : 'unpaused'); + if (this.client) + { + this.client.send('pause', paused); + } + /** + * Fired when the pause state is toggled + * @event pause + * @param {boolean} paused If the application is now paused + */ + /** + * Fired when the application resumes from a paused state + * @event resumed + */ + /** + * Fired when the application becomes paused + * @event paused + */ + this.trigger(paused ? 'paused' : 'resumed'); + this.trigger('pause', paused); + + // Set the pause button state + if (this.pauseButton) + { + this.pauseButton.removeClass('unpaused paused') + .addClass(paused ? 'paused' : 'unpaused'); + } } }, get: function() @@ -77,6 +88,12 @@ return this._paused; } }); + + this.on('features', function(features) + { + if (features.disablePause) this._disablePause = true; + } + .bind(this)); }; /**