UNPKG

leapjs

Version:

JavaScript client for the Leap Motion Controller

70 lines (58 loc) 2.35 kB
var BaseConnection = module.exports = require('./base') , _ = require('underscore'); var BrowserConnection = module.exports = function(opts) { BaseConnection.call(this, opts); var connection = this; this.on('ready', function() { connection.startFocusLoop(); }) this.on('disconnect', function() { connection.stopFocusLoop(); }) } _.extend(BrowserConnection.prototype, BaseConnection.prototype); BrowserConnection.prototype.setupSocket = function() { var connection = this; var socket = new WebSocket(this.getUrl()); socket.onopen = function() { connection.handleOpen(); }; socket.onclose = function(data) { connection.handleClose(data['code'], data['reason']); }; socket.onmessage = function(message) { connection.handleData(message.data) }; return socket; } BrowserConnection.prototype.startFocusLoop = function() { if (this.focusDetectorTimer) return; var connection = this; var propertyName = null; if (typeof document.hidden !== "undefined") { propertyName = "hidden"; } else if (typeof document.mozHidden !== "undefined") { propertyName = "mozHidden"; } else if (typeof document.msHidden !== "undefined") { propertyName = "msHidden"; } else if (typeof document.webkitHidden !== "undefined") { propertyName = "webkitHidden"; } else { propertyName = undefined; } if (connection.windowVisible === undefined) { connection.windowVisible = propertyName === undefined ? true : document[propertyName] === false; } var focusListener = window.addEventListener('focus', function(e) { connection.windowVisible = true; updateFocusState(); }); var blurListener = window.addEventListener('blur', function(e) { connection.windowVisible = false; updateFocusState(); }); this.on('disconnect', function() { window.removeEventListener('focus', focusListener); window.removeEventListener('blur', blurListener); }); var updateFocusState = function() { var isVisible = propertyName === undefined ? true : document[propertyName] === false; connection.reportFocus(isVisible && connection.windowVisible); } this.focusDetectorTimer = setInterval(updateFocusState, 100); } BrowserConnection.prototype.stopFocusLoop = function() { if (!this.focusDetectorTimer) return; clearTimeout(this.focusDetectorTimer); delete this.focusDetectorTimer; }