Changeset View
Changeset View
Standalone View
Standalone View
webroot/rsrc/js/core/Fullscreen.js
- This file was added.
| /** | |||||
| * @requires javelin-install | |||||
| * javelin-dom | |||||
| * javelin-stratcom | |||||
| * javelin-util | |||||
| * @provides phabricator-fullscreen | |||||
| * @javelin | |||||
| */ | |||||
| JX.install('Fullscreen', { | |||||
| statics: { | |||||
| _element: null, | |||||
| _installed: false, | |||||
| isAvailable: function() { | |||||
| var self = JX.Fullscreen; | |||||
| return !!self._getStartFunction(document.documentElement); | |||||
| }, | |||||
| isFullscreen: function() { | |||||
| var self = JX.Fullscreen; | |||||
| return !!self._element; | |||||
| }, | |||||
| startFullscreen: function(node) { | |||||
| var self = JX.Fullscreen; | |||||
| if (!self.isAvailable()) { | |||||
| return; | |||||
| } | |||||
| if (self._element) { | |||||
| return; | |||||
| } | |||||
| if (!self._installed) { | |||||
| self._install(); | |||||
| self._installed = true; | |||||
| } | |||||
| self._element = node; | |||||
| JX.DOM.alterClass(self._element, 'jx-fullscreen', true); | |||||
| self._getStartFunction(node)(); | |||||
| }, | |||||
| stopFullscreen: function() { | |||||
| var self = JX.Fullscreen; | |||||
| if (!self._element) { | |||||
| return; | |||||
| } | |||||
| JX.DOM.alterClass(self._element, 'jx-fullscreen', false); | |||||
| self._element = null; | |||||
| var fn = document.exitFullscreen || | |||||
| document.msExitFullscreen || | |||||
| document.mozCancelFullScreen || | |||||
| document.webkitRequestFullscreen; | |||||
| fn.call(document); | |||||
| }, | |||||
| _install: function() { | |||||
| var self = JX.Fullscreen; | |||||
| JX.Stratcom.listen('keydown', null, self._onkey); | |||||
| }, | |||||
| _getStartFunction: function(node) { | |||||
| var fn = node.requestFullscreen || | |||||
| node.msRequestFullscreen || | |||||
| node.mozRequestFullScreen || | |||||
| node.webkitRequestFullscreen; | |||||
| if (!fn) { | |||||
| return null; | |||||
| } | |||||
| return JX.bind(node, fn); | |||||
| }, | |||||
| _onkey: function(e) { | |||||
| var self = JX.Fullscreen; | |||||
| if (!self.isFullscreen()) { | |||||
| return; | |||||
| } | |||||
| if (e.getSpecialKey() != 'esc') { | |||||
| return; | |||||
| } | |||||
| self.stopFullscreen(); | |||||
| e.kill(); | |||||
| } | |||||
| } | |||||
| }); | |||||