UNPKG

node-red-contrib-leap-motion

Version:

Node-Red nodes for leap motion

146 lines (110 loc) 4.71 kB
var Dialog = module.exports = function(message, options){ this.options = (options || {}); this.message = message; this.createElement(); }; Dialog.prototype.createElement = function(){ this.element = document.createElement('div'); this.element.className = "leapjs-dialog"; this.element.style.position = "fixed"; this.element.style.top = '8px'; this.element.style.left = 0; this.element.style.right = 0; this.element.style.textAlign = 'center'; this.element.style.zIndex = 1000; var dialog = document.createElement('div'); this.element.appendChild(dialog); dialog.style.className = "leapjs-dialog"; dialog.style.display = "inline-block"; dialog.style.margin = "auto"; dialog.style.padding = "8px"; dialog.style.color = "#222"; dialog.style.background = "#eee"; dialog.style.borderRadius = "4px"; dialog.style.border = "1px solid #999"; dialog.style.textAlign = "left"; dialog.style.cursor = "pointer"; dialog.style.whiteSpace = "nowrap"; dialog.style.transition = "box-shadow 1s linear"; dialog.innerHTML = this.message; if (this.options.onclick){ dialog.addEventListener('click', this.options.onclick); } if (this.options.onmouseover){ dialog.addEventListener('mouseover', this.options.onmouseover); } if (this.options.onmouseout){ dialog.addEventListener('mouseout', this.options.onmouseout); } if (this.options.onmousemove){ dialog.addEventListener('mousemove', this.options.onmousemove); } }; Dialog.prototype.show = function(){ document.body.appendChild(this.element); return this; }; Dialog.prototype.hide = function(){ document.body.removeChild(this.element); return this; }; // Shows a DOM dialog box with links to developer.leapmotion.com to upgrade // This will work whether or not the Leap is plugged in, // As long as it is called after a call to .connect() and the 'ready' event has fired. Dialog.warnOutOfDate = function(params){ params || (params = {}); var url = "http://developer.leapmotion.com?"; params.returnTo = window.location.href; for (var key in params){ url += key + '=' + encodeURIComponent(params[key]) + '&'; } var dialog, onclick = function(event){ if (event.target.id != 'leapjs-decline-upgrade'){ var popup = window.open(url, '_blank', 'height=800,width=1000,location=1,menubar=1,resizable=1,status=1,toolbar=1,scrollbars=1' ); if (window.focus) {popup.focus()} } dialog.hide(); return true; }, message = "This site requires Leap Motion Tracking V2." + "<button id='leapjs-accept-upgrade' style='color: #444; transition: box-shadow 100ms linear; cursor: pointer; vertical-align: baseline; margin-left: 16px;'>Upgrade</button>" + "<button id='leapjs-decline-upgrade' style='color: #444; transition: box-shadow 100ms linear; cursor: pointer; vertical-align: baseline; margin-left: 8px; '>Not Now</button>"; dialog = new Dialog(message, { onclick: onclick, onmousemove: function(e){ if (e.target == document.getElementById('leapjs-decline-upgrade')){ document.getElementById('leapjs-decline-upgrade').style.color = '#000'; document.getElementById('leapjs-decline-upgrade').style.boxShadow = '0px 0px 2px #5daa00'; document.getElementById('leapjs-accept-upgrade').style.color = '#444'; document.getElementById('leapjs-accept-upgrade').style.boxShadow = 'none'; }else{ document.getElementById('leapjs-accept-upgrade').style.color = '#000'; document.getElementById('leapjs-accept-upgrade').style.boxShadow = '0px 0px 2px #5daa00'; document.getElementById('leapjs-decline-upgrade').style.color = '#444'; document.getElementById('leapjs-decline-upgrade').style.boxShadow = 'none'; } }, onmouseout: function(){ document.getElementById('leapjs-decline-upgrade').style.color = '#444'; document.getElementById('leapjs-decline-upgrade').style.boxShadow = 'none'; document.getElementById('leapjs-accept-upgrade').style.color = '#444'; document.getElementById('leapjs-accept-upgrade').style.boxShadow = 'none'; } } ); return dialog.show(); }; // Tracks whether we've warned for lack of bones API. This will be shown only for early private-beta members. Dialog.hasWarnedBones = false; Dialog.warnBones = function(){ if (this.hasWarnedBones) return; this.hasWarnedBones = true; console.warn("Your Leap Service is out of date"); if ( !(typeof(process) !== 'undefined' && process.versions && process.versions.node) ){ this.warnOutOfDate({reason: 'bones'}); } }