// This THREEx helper makes it easy to handle the fullscreen API // * it hides the prefix for each browser // * it hides the little discrepencies of the various vendor API // * at the time of this writing (nov 2011) it is available in // [firefox nightly](http://blog.pearce.org.nz/2011/11/firefoxs-html-full-screen-api-enabled.html), // [webkit nightly](http://peter.sh/2011/01/javascript-full-screen-api-navigation-timing-and-repeating-css-gradients/) and // [chrome stable](http://updates.html5rocks.com/2011/10/Let-Your-Content-Do-the-Talking-Fullscreen-API). // // # Code // /** @namespace */ var THREEx = THREEx || {}; THREEx.FullScreen = THREEx.FullScreen || {}; /** * test if it is possible to have fullscreen * * @returns {Boolean} true if fullscreen API is available, false otherwise */ THREEx.FullScreen.available = function () { return this._hasWebkitFullScreen || this._hasMozFullScreen; } /** * test if fullscreen is currently activated * * @returns {Boolean} true if fullscreen is currently activated, false otherwise */ THREEx.FullScreen.activated = function () { if (this._hasWebkitFullScreen) { return document.webkitIsFullScreen; } else if (this._hasMozFullScreen) { return document.mozFullScreen; } else { console.assert(false); } } /** * Request fullscreen on a given element * @param {DomElement} element to make fullscreen. optional. default to document.body */ THREEx.FullScreen.request = function (element) { element = element || document.body; if (this._hasWebkitFullScreen) { element.webkitRequestFullScreen(); } else if (this._hasMozFullScreen) { element.mozRequestFullScreen(); } else { console.assert(false); } } /** * Cancel fullscreen */ THREEx.FullScreen.cancel = function () { if (this._hasWebkitFullScreen) { document.webkitCancelFullScreen(); } else if (this._hasMozFullScreen) { document.mozCancelFullScreen(); } else { console.assert(false); } } // internal functions to know which fullscreen API implementation is available THREEx.FullScreen._hasWebkitFullScreen = 'webkitCancelFullScreen' in document ? true : false; THREEx.FullScreen._hasMozFullScreen = 'mozCancelFullScreen' in document ? true : false; /** * Bind a key to renderer screenshot * usage: THREEx.FullScreen.bindKey({ charCode : 'a'.charCodeAt(0) }); */ THREEx.FullScreen.bindKey = function (opts) { opts = opts || {}; var charCode = opts.charCode || 'f'.charCodeAt(0); var dblclick = opts.dblclick !== undefined ? opts.dblclick : false; var element = opts.element var toggle = function () { if (THREEx.FullScreen.activated()) { THREEx.FullScreen.cancel(); } else { THREEx.FullScreen.request(element); } } var onKeyPress = function (event) { if (event.which !== charCode) return; toggle(); }.bind(this); document.addEventListener('keypress', onKeyPress, false); dblclick && document.addEventListener('dblclick', toggle, false); return { unbind: function () { document.removeEventListener('keypress', onKeyPress, false); dblclick && document.removeEventListener('dblclick', toggle, false); } }; }