Files
Zos/Skills/@be/be/node_modules/jibo-tunable/lib/jibo-tunable-client.js

160 lines
6.0 KiB
JavaScript

(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.jiboTunableClient = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
/**
* @fileOverview
*
* Created on 5/21/16.
* @author Siggi Orn <siggi@jibo.com>
*/
"use strict";
exports.ReqType = {
INIT: 'INIT',
NEW_FIELD: 'NEW_FIELD',
PLAY: 'PLAY',
PLAYING: 'PLAYING',
DONE_PLAYING: 'DONE_PLAYING',
VALUE_UPDATE: 'VALUE_UPDATE',
};
var gui;
var Client = (function () {
function Client(port) {
var _this = this;
this.wsHandlers = new Map();
this.folders = new Map();
// Setup gui for first time
if (!gui) {
gui = new dat.GUI({ autoPlace: false });
var container = document.getElementById('gui-container');
container.appendChild(gui.domElement);
gui.width = 400;
}
this.ws = new WebSocket('ws://' + window.location.hostname + ':' + port);
// When the connection is open, send some data to the server
this.ws.onopen = function () {
var msg = {
type: exports.ReqType.INIT,
data: ''
};
_this.sendWS(msg);
};
this.ws.onclose = function (ev) {
console.log('WebSocket closed: ', ev);
_this.cleanup();
};
// Log errors
this.ws.onerror = function (error) {
console.error('WebSocket Error: ', error);
_this.cleanup();
};
// Log messages from the server
this.ws.onmessage = function (incoming) {
console.log('Got WS message: ' + incoming.data);
var msg = JSON.parse(incoming.data);
var handler = _this.wsHandlers.get(msg.type);
if (handler) {
var resp = handler(msg.data);
if (resp) {
_this.sendWS(resp);
}
}
};
this.addWsHandler(exports.ReqType.VALUE_UPDATE, function (data) {
var folder = _this.folders.get(data.folderName);
if (!folder) {
throw new Error("No folder of name '" + data.folderName + "'");
}
folder.obj[data.fieldName] = data.value;
// Update display value of all children of folder
folder.gui.__controllers.forEach(function (c) {
c.updateDisplay();
});
});
/**
* Install handler for new fields
*/
this.addWsHandler(exports.ReqType.NEW_FIELD, function (data) {
var folderName = data.folderName;
var fieldName = data.fieldName;
var folder = _this.folders.get(folderName);
if (!folder) {
folder = {
obj: {},
gui: gui.addFolder(folderName)
};
_this.folders.set(folderName, folder);
}
folder.gui.open();
folder.obj[fieldName] = data.field._current;
var el;
var type = data.field.type;
if (type === 'string') {
el = folder.gui.add(folder.obj, fieldName, data.field.options);
}
else if (type === 'boolean') {
el = folder.gui.add(folder.obj, fieldName);
}
else if (type === 'number') {
el = folder.gui.add(folder.obj, fieldName, data.field.min, data.field.max);
el.step(data.field.step);
}
else if (type === 'button') {
folder.obj[fieldName] = function () {
//let a = arguments;
//debugger;
//this.sendWS({
// type: ReqType.VALUE_UPDATE,
// data: {
// folderName,
// fieldName,
// value: true
// }
//});
};
el = folder.gui.add(folder.obj, fieldName);
}
else {
throw new Error("Can't handle field of type '" + data.field.type + "'");
}
_this.addChangeListener(el, folderName, fieldName);
});
}
Client.prototype.sendWS = function (msg) {
this.ws.send(JSON.stringify(msg));
};
Client.prototype.addWsHandler = function (type, handler) {
this.wsHandlers.set(type, handler);
};
Client.prototype.addChangeListener = function (el, folderName, fieldName) {
var _this = this;
el.onChange(function (value) {
_this.sendWS({
type: exports.ReqType.VALUE_UPDATE,
data: {
folderName: folderName,
fieldName: fieldName,
value: value,
}
});
});
};
Client.prototype.cleanup = function () {
if (gui) {
this.folders.forEach(function (folder, key) {
var clone = folder.gui.__controllers.slice(0);
clone.forEach(function (fCon) { return folder.gui.remove(fCon); });
});
}
this.folders.clear();
gui.destroy();
gui = undefined;
};
return Client;
}());
exports.Client = Client;
var root = window || global;
root.Client = Client;
},{}]},{},[1])(1)
});
//# sourceMappingURL=jibo-tunable-client.js.map