node-red-contrib-leap-motion
Version:
Node-Red nodes for leap motion
146 lines (110 loc) • 4.71 kB
JavaScript
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'});
}
}