reorganize, build dockerfiles for ledserver and html-controller
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
FROM nginx:stable-alpine
|
||||
|
||||
RUN apk add --update nodejs nodejs-npm
|
||||
|
||||
COPY . /usr/share/nginx/html
|
||||
|
||||
RUN cd /usr/share/nginx/html && npm install
|
||||
Executable
BIN
Binary file not shown.
|
After Width: | Height: | Size: 361 KiB |
@@ -0,0 +1,85 @@
|
||||
<html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body ng-app="stripApp" ng-controller="stripCtrl" >
|
||||
{{data}}
|
||||
<div class="col-12" ng-repeat="led in data" style="border-style: solid;display: table">
|
||||
<div ng-repeat="(key, value) in led" style="width: 60px; height: 60px; background: {{key}}; display: table-cell;">
|
||||
{{value}}
|
||||
</div>
|
||||
</div>
|
||||
<script src="node_modules/angular/angular.min.js"></script>
|
||||
<script src="node_modules/reconnecting-websocket/dist/reconnecting-websocket-iife.min.js"></script>
|
||||
<script>
|
||||
var app = angular.module('stripApp',[]);
|
||||
app.factory('socket', [function() {
|
||||
var stack = [];
|
||||
var onmessageDefer;
|
||||
var host = "localhost"
|
||||
if (window.location.hostname != ""){
|
||||
host = window.location.hostname
|
||||
}
|
||||
var socket = {
|
||||
ws: new ReconnectingWebSocket("ws://"+host+":8001", null, {debug: false, reconnectInterval: 2000}),
|
||||
send: function(data) {
|
||||
if (socket.ws.readyState == 1) {
|
||||
socket.ws.send(data);
|
||||
} else {
|
||||
stack.push(data);
|
||||
}
|
||||
},
|
||||
onmessage: function(callback) {
|
||||
if (socket.ws.readyState == 1) {
|
||||
socket.ws.onmessage = callback;
|
||||
} else {
|
||||
onmessageDefer = callback;
|
||||
}
|
||||
}
|
||||
};
|
||||
socket.ws.onopen = function(event) {
|
||||
for (i in stack) {
|
||||
socket.ws.send(stack[i]);
|
||||
}
|
||||
stack = [];
|
||||
if (onmessageDefer) {
|
||||
socket.ws.onmessage = onmessageDefer;
|
||||
onmessageDefer = null;
|
||||
}
|
||||
};
|
||||
return socket;
|
||||
}]);
|
||||
|
||||
app.controller('stripCtrl', ['$scope', 'socket', function($scope, socket) {
|
||||
|
||||
$scope.connected = false;
|
||||
$scope.data = {}
|
||||
|
||||
socket.ws.addEventListener('close',function(event) {
|
||||
$scope.$apply(function(){
|
||||
$scope.connected = false
|
||||
});
|
||||
});
|
||||
socket.ws.addEventListener('open',function(event) {
|
||||
$scope.$apply(function(){
|
||||
socket.send(
|
||||
JSON.stringify({
|
||||
'register_client_type': 1,
|
||||
'client_name': "htmlstrip",
|
||||
})
|
||||
);
|
||||
$scope.connected = true
|
||||
});
|
||||
});
|
||||
|
||||
socket.onmessage(function(event) {
|
||||
$scope.$apply(function(){
|
||||
console.log(event.data)
|
||||
json = JSON.parse(event.data)
|
||||
$scope.data = json
|
||||
});
|
||||
});
|
||||
}]);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,428 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>LED-Server :: KJ-intern</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<!-- Font Awesome -->
|
||||
<link rel="stylesheet" href="node_modules/font-awesome/css/font-awesome.min.css">
|
||||
<!-- Bootstrap core CSS -->
|
||||
<link href="node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
<!-- Material Design Bootstrap -->
|
||||
<link href="node_modules/bootstrap-material-design/dist/css/bootstrap-material-design.min.css" rel="stylesheet">
|
||||
<link href="node_modules/jquery-wheelcolorpicker/css/wheelcolorpicker.css" rel="stylesheet">
|
||||
|
||||
<link href="node_modules/jquery-minicolors/jquery.minicolors.css" rel="stylesheet">
|
||||
|
||||
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="node_modules/html5shiv.min.js/html5shiv.min.js"></script>
|
||||
<script src="node_modules/respond.min.js/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
<style>
|
||||
.text-nowrap {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.dimmScreen
|
||||
{
|
||||
position:fixed;
|
||||
padding:0;
|
||||
margin:0;
|
||||
|
||||
top:0;
|
||||
left:0;
|
||||
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background:rgba(0, 0, 0, 0.5);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body ng-app="LED-WebFrontend" ng-controller="LED-ServerCtrl" >
|
||||
<div style="height: 100vh">
|
||||
<div class="container">
|
||||
<!-- Not Connected -->
|
||||
<div class="row dimmScreen ng-show justify-content-center" ng-hide="connected">
|
||||
<div class=" col-md-6 ">
|
||||
<div class="row">
|
||||
<div class="col-12 mt-3" >
|
||||
<div class="card " >
|
||||
<!-- Card content -->
|
||||
<div class="card-body justify-content-center">
|
||||
<!-- Title -->
|
||||
<h4 class="card-title infinite animated headShake text-center"><strong>Verbindung wird hergestellt...</strong></h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row ng-hide" ng-show="connected">
|
||||
<!--Left Col-->
|
||||
<div class="col-md-6 mt-3">
|
||||
<div class="row">
|
||||
<div class="col-12 mt-3" >
|
||||
<div class="card " >
|
||||
<!-- Card content -->
|
||||
<div class="card-body ">
|
||||
<!-- Title -->
|
||||
<h4 class="card-title"><strong>Neuen Effekt starten</strong></h4>
|
||||
<form id="startNewEffectThread">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="form-group row">
|
||||
<label for="newEffectThread" class="col-sm-3 col-form-label"> Select Effect: </label><br>
|
||||
<select ng-change="newEffectThread.params=[]" name="newEffectThread" class="form-control col-sm-7 " id="newEffectThread" ng-model="newEffectThread.effect" ng-options="effect.index as effect.name for effect in effects" ></select>
|
||||
</div>
|
||||
<div class="newEffectThreadDesc">{{effects[newEffectThread.effect].desc}}</div>
|
||||
|
||||
</div>
|
||||
<div class="col-12" ng-repeat="effectParam in effects[newEffectThread.effect].effectParams">
|
||||
|
||||
<input ng-if="effectParam.type=='colorpicker'"
|
||||
minicolors="colorpickerconfig"
|
||||
class="form-control"
|
||||
type="text"
|
||||
ng-init="
|
||||
newEffectThreadParamColorPicker[effectParam.index]=rgbToHex(
|
||||
effectParam.options[0][2],
|
||||
effectParam.options[1][2],
|
||||
effectParam.options[2][2]
|
||||
);
|
||||
newEffectThread.params[effectParam.index] = {};
|
||||
newEffectThread.params[effectParam.index][0] = hexToRgb(newEffectThreadParamColorPicker[effectParam.index]).r;
|
||||
newEffectThread.params[effectParam.index][1] = hexToRgb(newEffectThreadParamColorPicker[effectParam.index]).g;
|
||||
newEffectThread.params[effectParam.index][2] = hexToRgb(newEffectThreadParamColorPicker[effectParam.index]).b
|
||||
"
|
||||
ng-change="
|
||||
newEffectThread.params[effectParam.index][0] = hexToRgb(newEffectThreadParamColorPicker[effectParam.index]).r;
|
||||
newEffectThread.params[effectParam.index][1] = hexToRgb(newEffectThreadParamColorPicker[effectParam.index]).g;
|
||||
newEffectThread.params[effectParam.index][2] = hexToRgb(newEffectThreadParamColorPicker[effectParam.index]).b"
|
||||
ng-model="newEffectThreadParamColorPicker[effectParam.index]"
|
||||
>
|
||||
|
||||
<mdb-range-input ng-if="effectParam.type=='slider'"
|
||||
default="true"
|
||||
id="range"
|
||||
min="{{effectParam.options[0][0]}}"
|
||||
ng-value="effectParam.options[0][2]"
|
||||
ng-model="newEffectThread.params[effectParam.index][0]"
|
||||
max="{{effectParam.options[0][1]}}">
|
||||
</mdb-range-input>
|
||||
|
||||
{{effectParam}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-7 mt-3">
|
||||
<div class="row">
|
||||
<div class="col" ng-repeat="rgbStrip in rgbStrips">
|
||||
<!-- Material unchecked -->
|
||||
<div class="form-check" >
|
||||
<input type="checkbox" class="form-check-input" id="newEffectThreadRGBStrips{{rgbStrip.index}}" name="newEffectThreadRGBStrips[]" ng-model="newEffectThread.rgbStrips[rgbStrip.index]"/>
|
||||
<label class="form-check-label text-nowrap" for="newEffectThreadRGBStrips{{rgbStrip.index}}">{{rgbStrip.name}}</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-5 mt-3">
|
||||
<!-- Provides extra visual weight and identifies the primary action in a set of buttons -->
|
||||
<a href="#" ng-click="startEffect(newEffectThread.effect,newEffectThread.rgbStrips,newEffectThread.params)" class="btn btn-primary float-right">Anwenden</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--Debug!-->
|
||||
<div class="col-12 mt-3" ng-show="false">
|
||||
<div class="card " >
|
||||
<!-- Card content -->
|
||||
<div class="card-body ">
|
||||
<pre>{{rgbStrips | json}}{{effects | json}}{{effectThreads | json}}{{newEffectThread | json}}</pre>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!--/Left Col-->
|
||||
<!--Right Col-->
|
||||
<div class="col-md-6 mt-3">
|
||||
<div class="row" >
|
||||
<form name="moveRGBStripToEffectThreadForm">
|
||||
<div class="col-md-12 mt-3" ng-repeat="effectThread in effectThreads" >
|
||||
<div class="card" >
|
||||
<!-- Card content -->
|
||||
<div class="card-body ">
|
||||
|
||||
<!-- Title -->
|
||||
<h4 class="card-title"><strong>{{ effectThread.name }}</strong></h4>
|
||||
<!-- Text -->
|
||||
<p class="card-text">{{ effectThread.desc }}</p>
|
||||
<div class="row">
|
||||
<div class="col-12" ng-repeat="effectParam in effectThread.effectParams">
|
||||
<input ng-if="effectParam.type=='colorpicker'"
|
||||
minicolors="colorpickerconfig"
|
||||
class="form-control"
|
||||
type="text"
|
||||
ng-init="
|
||||
effectThreadParamColorPicker[effectThread.index][effectParam.index]=rgbToHex(
|
||||
effectParam.values[0],
|
||||
effectParam.values[1],
|
||||
effectParam.values[2]
|
||||
);
|
||||
effectThreadParamColorPicker[effectThread.index].params[effectParam.index] = {};
|
||||
effectThreadParamColorPicker[effectThread.index].params[effectParam.index][0] = hexToRgb(effectThreadParamColorPicker[effectThread.index][effectParam.index]).r;
|
||||
effectThreadParamColorPicker[effectThread.index].params[effectParam.index][1] = hexToRgb(effectThreadParamColorPicker[effectThread.index][effectParam.index]).g;
|
||||
effectThreadParamColorPicker[effectThread.index].params[effectParam.index][2] = hexToRgb(effectThreadParamColorPicker[effectThread.index][effectParam.index]).b
|
||||
"
|
||||
ng-change="
|
||||
effectThreadParamColorPicker[effectThread.index].params[effectParam.index][0] = hexToRgb(effectThreadParamColorPicker[effectThread.index][effectParam.index]).r;
|
||||
effectThreadParamColorPicker[effectThread.index].params[effectParam.index][1] = hexToRgb(effectThreadParamColorPicker[effectThread.index][effectParam.index]).g;
|
||||
effectThreadParamColorPicker[effectThread.index].params[effectParam.index][2] = hexToRgb(effectThreadParamColorPicker[effectThread.index][effectParam.index]).b;
|
||||
effectThreadChangeEffectParam(effectThread.index,effectThreadParamColorPicker[effectThread.index].params)
|
||||
"
|
||||
|
||||
ng-model="effectThreadParamColorPicker[effectThread.index][effectParam.index]"
|
||||
>
|
||||
{{effectParam.values}}
|
||||
|
||||
<!--
|
||||
<input ng-if="effectParam.type=='colorpicker'"
|
||||
minicolors="colorpickerconfig"
|
||||
id="color-input"
|
||||
class="form-control"
|
||||
type="text"
|
||||
ng-init="effectThreadParamColorPicker[effectThread.index][effectParam.index]=rgbToHex(effectParam.values[0][2],effectParam.values[1][2],effectParam.values[2][2]);"
|
||||
ng-change="effectThreadChangeEffectParam(effectThread.index,{0: {0: hexToRgb(effectThreadParamColorPicker[effectThread.index][effectParam.index]).r,1: hexToRgb(effectThreadParamColorPicker[effectThread.index][effectParam.index]).g, 2: hexToRgb(effectThreadParamColorPicker[effectThread.index][effectParam.index]).b}})"
|
||||
ng-model="effectThreadParamColorPicker[effectThread.index][effectParam.index]"
|
||||
>-->
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col" ng-repeat="rgbStrip in rgbStrips">
|
||||
<!-- Material unchecked -->
|
||||
<div class="form-check" >
|
||||
<input type="radio" ng-checked="isRGBStripActive(rgbStrip,effectThread.activeRGBStips)" ng-change="moveRGBStripToEffectThread(rgbStrip.index,effectThread.index)" class="form-check-input" id="{{ effectThread.name }}EffectThreadRGBStrip{{rgbStrip.index}}" ng-model="moveRGBStripToEffectThreadModel[rgbStrip.index]" name="{{rgbStrip.index}}" value="{{effect.index}}">
|
||||
<label class="form-check-label text-nowrap" for="{{ effectThread.name }}EffectThreadRGBStrip{{rgbStrip.index}}">{{rgbStrip.name}}</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p class="card-text">{{effectThread.dump}}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<!--/Right Col-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- SCRIPTS -->
|
||||
<!-- JQuery -->
|
||||
<script type="text/javascript" src="node_modules/jquery/dist/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="node_modules/jquery-wheelcolorpicker/jquery.wheelcolorpicker-3.0.5.min.js"></script>
|
||||
<script type="text/javascript" src="node_modules/jquery-minicolors/jquery.minicolors.min.js"></script>
|
||||
<!-- Bootstrap tooltips -->
|
||||
<script type="text/javascript" src="node_modules/popper.js/dist/umd/popper.min.js"></script>
|
||||
<script type="text/javascript" src="node_modules/popper.js/dist/umd/popper-utils.min.js"></script>
|
||||
<!-- Bootstrap core JavaScript-->
|
||||
<script type="text/javascript" src="node_modules/bootstrap/dist/js/bootstrap.min.js"></script>
|
||||
<!-- MDB core JavaScript -->
|
||||
<script type="text/javascript" src="node_modules/bootstrap-material-design/dist/js/bootstrap-material-design.min.js"></script>
|
||||
<script src="node_modules/angular/angular.min.js"></script>
|
||||
<script type="text/javascript" src="node_modules/angular-minicolors/angular-minicolors.js"></script>
|
||||
<script src="node_modules/reconnecting-websocket/dist/reconnecting-websocket-iife.min.js"></script>
|
||||
<script>
|
||||
var app = angular.module('LED-WebFrontend',['minicolors']);
|
||||
app.factory('socket', [function() {
|
||||
var stack = [];
|
||||
var onmessageDefer;
|
||||
var host = "localhost"
|
||||
if (window.location.hostname != ""){
|
||||
host = window.location.hostname
|
||||
}
|
||||
var socket = {
|
||||
ws: new ReconnectingWebSocket("ws://"+host+":8001", null, {debug: false, reconnectInterval: 2000}),
|
||||
send: function(data) {
|
||||
if (socket.ws.readyState == 1) {
|
||||
socket.ws.send(data);
|
||||
} else {
|
||||
stack.push(data);
|
||||
}
|
||||
},
|
||||
onmessage: function(callback) {
|
||||
if (socket.ws.readyState == 1) {
|
||||
socket.ws.onmessage = callback;
|
||||
} else {
|
||||
onmessageDefer = callback;
|
||||
}
|
||||
}
|
||||
};
|
||||
socket.ws.onopen = function(event) {
|
||||
for (i in stack) {
|
||||
socket.ws.send(stack[i]);
|
||||
}
|
||||
stack = [];
|
||||
if (onmessageDefer) {
|
||||
socket.ws.onmessage = onmessageDefer;
|
||||
onmessageDefer = null;
|
||||
}
|
||||
};
|
||||
return socket;
|
||||
}]);
|
||||
|
||||
app.controller('LED-ServerCtrl', ['$scope', 'socket', function($scope, socket) {
|
||||
|
||||
$scope.connected = false;
|
||||
|
||||
$scope.rgbStrips = {};
|
||||
$scope.effects = {};
|
||||
$scope.effectThreads = {};
|
||||
|
||||
$scope.newEffectThreadParamColorPicker = {}
|
||||
$scope.newEffectThread = {}
|
||||
$scope.newEffectThread.params = {};
|
||||
$scope.newEffectThread.rgbStrips = {};
|
||||
|
||||
|
||||
$scope.colorpickerconfig = {
|
||||
// control: 'saturation',
|
||||
control: 'hue',
|
||||
// control: 'brightness',
|
||||
// control: 'wheel',
|
||||
theme: 'bootstrap',
|
||||
inline: true,
|
||||
position: 'top left'
|
||||
};
|
||||
|
||||
socket.ws.addEventListener('close',function(event) {
|
||||
$scope.$apply(function(){
|
||||
$scope.connected = false
|
||||
});
|
||||
});
|
||||
socket.ws.addEventListener('open',function(event) {
|
||||
$scope.$apply(function(){
|
||||
socket.send(
|
||||
JSON.stringify({
|
||||
'register_client_type': 0
|
||||
})
|
||||
);
|
||||
$scope.connected = true
|
||||
});
|
||||
});
|
||||
|
||||
socket.onmessage(function(event) {
|
||||
$scope.$apply(function(){
|
||||
json = JSON.parse(event.data)
|
||||
console.log("Message: ",json)
|
||||
//remove strips from startEffect that may not exist anymore
|
||||
if(json.hasOwnProperty('rgbStrips')){
|
||||
jQuery.each($scope.newEffectThread.rgbStrips,function(key,value){
|
||||
if (!(key in json.rgbStrips)){
|
||||
delete $scope.newEffectThread.rgbStrips[key];
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
if(json.hasOwnProperty('effects') && json.hasOwnProperty('rgbStrips')){
|
||||
//$("#startNewEffectThread")[0].reset();
|
||||
//$("#newEffectThread").removeAttr("selected");
|
||||
|
||||
//$scope.effects = {}
|
||||
$scope.effects = json.effects
|
||||
//$scope.rgbStrips = {}
|
||||
$scope.rgbStrips = json.rgbStrips
|
||||
}
|
||||
if(json.hasOwnProperty('effectThreads')){
|
||||
$scope.effectThreads = {}
|
||||
$scope.effectThreads = json.effectThreads
|
||||
$scope.moveRGBStripToEffectThreadModel = {}
|
||||
|
||||
$scope.moveRGBStripToEffectThreadForm.$setUntouched();
|
||||
$scope.moveRGBStripToEffectThreadForm.$setPristine();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$scope.isRGBStripActive=function(rgbStrip, activeRGBStrips) {
|
||||
rval = false;
|
||||
jQuery.each(
|
||||
activeRGBStrips, function() {
|
||||
if(this.index == rgbStrip.index){
|
||||
rval = true;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
return rval;
|
||||
};
|
||||
|
||||
$scope.moveRGBStripToEffectThread = function(rgbStripIndex,effectThreadIndex){
|
||||
socket.send(
|
||||
JSON.stringify({
|
||||
'moveRGBStripToEffectThread': {
|
||||
'rgbStrip': rgbStripIndex,
|
||||
'effectThread': effectThreadIndex
|
||||
}
|
||||
})
|
||||
);
|
||||
};
|
||||
|
||||
$scope.effectThreadChangeEffectParam = function(effectThreadIndex,params){
|
||||
console.log(params)
|
||||
socket.send(
|
||||
JSON.stringify({
|
||||
'effectThreadChangeEffectParam': {
|
||||
'params': Object.entries(params),
|
||||
'effectThread': effectThreadIndex
|
||||
}
|
||||
})
|
||||
);
|
||||
};
|
||||
|
||||
$scope.startEffect = function(effectIndex,rgbStrips,params){
|
||||
console.log(params)
|
||||
socket.send(
|
||||
JSON.stringify({
|
||||
'startEffect': {
|
||||
'rgbStrips': Object.entries(rgbStrips),
|
||||
'effect': effectIndex,
|
||||
'params': Object.entries(params)
|
||||
}
|
||||
})
|
||||
);
|
||||
};
|
||||
|
||||
$scope.changeEffectThreadParameters = function(effectThreadIndex,paramIndex,values){
|
||||
|
||||
}
|
||||
|
||||
//https://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb
|
||||
$scope.hexToRgb = function(hex) {
|
||||
// Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF")
|
||||
var shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i;
|
||||
hex = hex.replace(shorthandRegex, function(m, r, g, b) {
|
||||
return r + r + g + g + b + b;
|
||||
});
|
||||
|
||||
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
|
||||
return result ? {
|
||||
r: parseInt(result[1], 16),
|
||||
g: parseInt(result[2], 16),
|
||||
b: parseInt(result[3], 16)
|
||||
} : null;
|
||||
}
|
||||
|
||||
$scope.rgbToHex = function rgbToHex(r, g, b) {
|
||||
return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
|
||||
}
|
||||
|
||||
}]);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
+621
@@ -0,0 +1,621 @@
|
||||
{
|
||||
"name": "ledserver_html_controller",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
"abs": {
|
||||
"version": "1.3.13",
|
||||
"resolved": "https://registry.npmjs.org/abs/-/abs-1.3.13.tgz",
|
||||
"integrity": "sha512-VgsJF4AZDoxLwTRx+TlZ6gpHfSaRUcg1Vhyruqxzpr6lTmh3JMO9667AHAVUGHUD3Li9QqjX2WaTXR6pkGFU+Q==",
|
||||
"requires": {
|
||||
"ul": "^5.0.0"
|
||||
}
|
||||
},
|
||||
"angular": {
|
||||
"version": "1.7.8",
|
||||
"resolved": "https://registry.npmjs.org/angular/-/angular-1.7.8.tgz",
|
||||
"integrity": "sha512-wtef/y4COxM7ZVhddd7JtAAhyYObq9YXKar9tsW7558BImeVYteJiTxCKeJOL45lJ/+7B4wrAC49j8gTFYEthg=="
|
||||
},
|
||||
"angular-minicolors": {
|
||||
"version": "0.0.11",
|
||||
"resolved": "https://registry.npmjs.org/angular-minicolors/-/angular-minicolors-0.0.11.tgz",
|
||||
"integrity": "sha512-DszxeGrkJMR5lFLJV82qrM/r9WJkRPPVATk9koybUoStesjrNVvUb0P1pw9uTGfCZsdFC3vvzWSZ0nFIq1nnbw=="
|
||||
},
|
||||
"bootstrap": {
|
||||
"version": "4.3.1",
|
||||
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.3.1.tgz",
|
||||
"integrity": "sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag=="
|
||||
},
|
||||
"bootstrap-material-design": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/bootstrap-material-design/-/bootstrap-material-design-4.1.1.tgz",
|
||||
"integrity": "sha1-h0M9sL9k1qCvsPX6qoYGE0ydJtI="
|
||||
},
|
||||
"capture-stack-trace": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz",
|
||||
"integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw=="
|
||||
},
|
||||
"core-util-is": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
||||
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
|
||||
},
|
||||
"create-error-class": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
|
||||
"integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
|
||||
"requires": {
|
||||
"capture-stack-trace": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"deep-extend": {
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
|
||||
"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
|
||||
},
|
||||
"deffy": {
|
||||
"version": "2.2.3",
|
||||
"resolved": "https://registry.npmjs.org/deffy/-/deffy-2.2.3.tgz",
|
||||
"integrity": "sha512-c5JD8Z6V1aBWVzn1+aELL97R1pHCwEjXeU3hZXdigkZkxb9vhgFP162kAxGXl992TtAg0btwQyx7d54CqcQaXQ==",
|
||||
"requires": {
|
||||
"typpy": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"duplexer2": {
|
||||
"version": "0.1.4",
|
||||
"resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",
|
||||
"integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",
|
||||
"requires": {
|
||||
"readable-stream": "^2.0.2"
|
||||
}
|
||||
},
|
||||
"err": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/err/-/err-1.1.1.tgz",
|
||||
"integrity": "sha1-65KOLhGjFmSPeCgz0PlyWLpDwvg=",
|
||||
"requires": {
|
||||
"typpy": "^2.2.0"
|
||||
}
|
||||
},
|
||||
"error-ex": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
|
||||
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
|
||||
"requires": {
|
||||
"is-arrayish": "^0.2.1"
|
||||
}
|
||||
},
|
||||
"exec-limiter": {
|
||||
"version": "3.2.12",
|
||||
"resolved": "https://registry.npmjs.org/exec-limiter/-/exec-limiter-3.2.12.tgz",
|
||||
"integrity": "sha512-2Bj2X3UmPQHIPtYkDW5epEHn1aTtGxP30x8Be6IzXzQzyuavlOdKI4wT56iEt9UUfvI421AHAHHnV+lBIvCcVA==",
|
||||
"requires": {
|
||||
"limit-it": "^3.0.0",
|
||||
"typpy": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"font-awesome": {
|
||||
"version": "4.7.0",
|
||||
"resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz",
|
||||
"integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM="
|
||||
},
|
||||
"function.name": {
|
||||
"version": "1.0.12",
|
||||
"resolved": "https://registry.npmjs.org/function.name/-/function.name-1.0.12.tgz",
|
||||
"integrity": "sha512-C7Tu+rAFrWW5RjXqtKtXp2xOdCujq+4i8ZH3w0uz/xrYHBwXZrPt96x8cDAEHrIjeyEv/Jm6iDGyqupbaVQTlw==",
|
||||
"requires": {
|
||||
"noop6": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"git-package-json": {
|
||||
"version": "1.4.9",
|
||||
"resolved": "https://registry.npmjs.org/git-package-json/-/git-package-json-1.4.9.tgz",
|
||||
"integrity": "sha512-F88a40RBqCS6S7layrE4LIhX5TIVYyUJRYxZjAPPLfCZu9zf0R5B3l3wIY8A7hFb3xAU6Df/AHVMoBQ9SaR1Jw==",
|
||||
"requires": {
|
||||
"deffy": "^2.2.1",
|
||||
"err": "^1.1.1",
|
||||
"gry": "^5.0.0",
|
||||
"normalize-package-data": "^2.3.5",
|
||||
"oargv": "^3.4.1",
|
||||
"one-by-one": "^3.1.0",
|
||||
"r-json": "^1.2.1",
|
||||
"r-package-json": "^1.0.0",
|
||||
"tmp": "0.0.28"
|
||||
}
|
||||
},
|
||||
"git-source": {
|
||||
"version": "1.1.9",
|
||||
"resolved": "https://registry.npmjs.org/git-source/-/git-source-1.1.9.tgz",
|
||||
"integrity": "sha512-LRWKxFrt1lIrEAdRMrCk9sGbEYQdf3TwDe9pEwR8DMau+2dljQjqqwITJqhYIbA0TkFaxatOXzLhBWW89ZMO7w==",
|
||||
"requires": {
|
||||
"git-url-parse": "^5.0.1"
|
||||
}
|
||||
},
|
||||
"git-up": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/git-up/-/git-up-1.2.1.tgz",
|
||||
"integrity": "sha1-JkSAoAax2EJhrB/gmjpRacV+oZ0=",
|
||||
"requires": {
|
||||
"is-ssh": "^1.0.0",
|
||||
"parse-url": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"git-url-parse": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-5.0.1.tgz",
|
||||
"integrity": "sha1-/j15xnRq4FBIz6UIyB553du6OEM=",
|
||||
"requires": {
|
||||
"git-up": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"got": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz",
|
||||
"integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=",
|
||||
"requires": {
|
||||
"create-error-class": "^3.0.1",
|
||||
"duplexer2": "^0.1.4",
|
||||
"is-redirect": "^1.0.0",
|
||||
"is-retry-allowed": "^1.0.0",
|
||||
"is-stream": "^1.0.0",
|
||||
"lowercase-keys": "^1.0.0",
|
||||
"node-status-codes": "^1.0.0",
|
||||
"object-assign": "^4.0.1",
|
||||
"parse-json": "^2.1.0",
|
||||
"pinkie-promise": "^2.0.0",
|
||||
"read-all-stream": "^3.0.0",
|
||||
"readable-stream": "^2.0.5",
|
||||
"timed-out": "^3.0.0",
|
||||
"unzip-response": "^1.0.2",
|
||||
"url-parse-lax": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"gry": {
|
||||
"version": "5.0.8",
|
||||
"resolved": "https://registry.npmjs.org/gry/-/gry-5.0.8.tgz",
|
||||
"integrity": "sha512-meq9ZjYVpLzZh3ojhTg7IMad9grGsx6rUUKHLqPnhLXzJkRQvEL2U3tQpS5/WentYTtHtxkT3Ew/mb10D6F6/g==",
|
||||
"requires": {
|
||||
"abs": "^1.2.1",
|
||||
"exec-limiter": "^3.0.0",
|
||||
"one-by-one": "^3.0.0",
|
||||
"ul": "^5.0.0"
|
||||
}
|
||||
},
|
||||
"hosted-git-info": {
|
||||
"version": "2.7.1",
|
||||
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
|
||||
"integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w=="
|
||||
},
|
||||
"html5shiv.min.js": {
|
||||
"version": "3.7.2",
|
||||
"resolved": "https://registry.npmjs.org/html5shiv.min.js/-/html5shiv.min.js-3.7.2.tgz",
|
||||
"integrity": "sha1-9xUoo6IMndS5hdc4u4vFAqqiyb0="
|
||||
},
|
||||
"inherits": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
|
||||
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
|
||||
},
|
||||
"ini": {
|
||||
"version": "1.3.5",
|
||||
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
|
||||
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
|
||||
},
|
||||
"is-arrayish": {
|
||||
"version": "0.2.1",
|
||||
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
|
||||
"integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
|
||||
},
|
||||
"is-redirect": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
|
||||
"integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ="
|
||||
},
|
||||
"is-retry-allowed": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
|
||||
"integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ="
|
||||
},
|
||||
"is-ssh": {
|
||||
"version": "1.3.1",
|
||||
"resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.1.tgz",
|
||||
"integrity": "sha512-0eRIASHZt1E68/ixClI8bp2YK2wmBPVWEismTs6M+M099jKgrzl/3E976zIbImSIob48N2/XGe9y7ZiYdImSlg==",
|
||||
"requires": {
|
||||
"protocols": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"is-stream": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
|
||||
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
|
||||
},
|
||||
"isarray": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
||||
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
|
||||
},
|
||||
"iterate-object": {
|
||||
"version": "1.3.3",
|
||||
"resolved": "https://registry.npmjs.org/iterate-object/-/iterate-object-1.3.3.tgz",
|
||||
"integrity": "sha512-DximWbkke36cnrSfNJv6bgcB2QOMV9PRD2FiowwzCoMsh8RupFLdbNIzWe+cVDWT+NIMNJgGlB1dGxP6kpzGtA=="
|
||||
},
|
||||
"jquery": {
|
||||
"version": "3.4.0",
|
||||
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.0.tgz",
|
||||
"integrity": "sha512-ggRCXln9zEqv6OqAGXFEcshF5dSBvCkzj6Gm2gzuR5fWawaX8t7cxKVkkygKODrDAzKdoYw3l/e3pm3vlT4IbQ=="
|
||||
},
|
||||
"jquery-minicolors": {
|
||||
"version": "2.1.10",
|
||||
"resolved": "https://registry.npmjs.org/jquery-minicolors/-/jquery-minicolors-2.1.10.tgz",
|
||||
"integrity": "sha1-sp7qVB2aMrTiaSMWj7LBYnGGc3k=",
|
||||
"requires": {
|
||||
"jquery": ">= 1.7.x"
|
||||
}
|
||||
},
|
||||
"jquery-wheelcolorpicker": {
|
||||
"version": "3.0.5",
|
||||
"resolved": "https://registry.npmjs.org/jquery-wheelcolorpicker/-/jquery-wheelcolorpicker-3.0.5.tgz",
|
||||
"integrity": "sha1-lUpjIjUUOSViXOr3g7Rbr6VXsP8=",
|
||||
"requires": {
|
||||
"jquery": ">=1.7"
|
||||
}
|
||||
},
|
||||
"limit-it": {
|
||||
"version": "3.2.9",
|
||||
"resolved": "https://registry.npmjs.org/limit-it/-/limit-it-3.2.9.tgz",
|
||||
"integrity": "sha512-3cAf+D47VdMrrzLpV3wIyEHoAACc7FonHMz+I8onocXdnWD2zBeicse851NZ9TUeCEyuBM35Cx82mpdx1WLm2A==",
|
||||
"requires": {
|
||||
"typpy": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"lowercase-keys": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
|
||||
"integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA=="
|
||||
},
|
||||
"minimist": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
|
||||
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
|
||||
},
|
||||
"node-status-codes": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz",
|
||||
"integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8="
|
||||
},
|
||||
"noop6": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/noop6/-/noop6-1.0.8.tgz",
|
||||
"integrity": "sha512-+Al5csMVc40I8xRfJsyBcN1IbpyvebOuQmMfxdw+AL6ECELey12ANgNTRhMfTwNIDU4W9W0g8EHLcsb3+3qPFA=="
|
||||
},
|
||||
"normalize-package-data": {
|
||||
"version": "2.5.0",
|
||||
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
|
||||
"integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
|
||||
"requires": {
|
||||
"hosted-git-info": "^2.1.4",
|
||||
"resolve": "^1.10.0",
|
||||
"semver": "2 || 3 || 4 || 5",
|
||||
"validate-npm-package-license": "^3.0.1"
|
||||
}
|
||||
},
|
||||
"oargv": {
|
||||
"version": "3.4.9",
|
||||
"resolved": "https://registry.npmjs.org/oargv/-/oargv-3.4.9.tgz",
|
||||
"integrity": "sha512-24Eatdf7OGezTAU0Yw3HaoO9x+GTFnmBkuFHfWEQtVsIKbD7VMHhyIlDMtxxUxfZKPBPHYsTo8UgGwKr4ySewA==",
|
||||
"requires": {
|
||||
"iterate-object": "^1.1.0",
|
||||
"ul": "^5.0.0"
|
||||
}
|
||||
},
|
||||
"obj-def": {
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/obj-def/-/obj-def-1.0.7.tgz",
|
||||
"integrity": "sha512-ahx1PnGDpovRglgczxsKtoYhPhrhYEG1rs3WklAHMTk29DyStqsrGDVISOIGZLF+ewK4m5CFZNuZXIXRQwZUMg==",
|
||||
"requires": {
|
||||
"deffy": "^2.2.2"
|
||||
}
|
||||
},
|
||||
"object-assign": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
|
||||
},
|
||||
"one-by-one": {
|
||||
"version": "3.2.7",
|
||||
"resolved": "https://registry.npmjs.org/one-by-one/-/one-by-one-3.2.7.tgz",
|
||||
"integrity": "sha512-EFE5hyHMGPcesACi1tT6HRmMK23Q74ujX2gjhfGD9qMkz7CxD1AJd5TmBHIEEzuL7h7hKwWh9n9hJ5ClQJnO/Q==",
|
||||
"requires": {
|
||||
"obj-def": "^1.0.0",
|
||||
"sliced": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"os-tmpdir": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
|
||||
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
|
||||
},
|
||||
"package-json": {
|
||||
"version": "2.4.0",
|
||||
"resolved": "https://registry.npmjs.org/package-json/-/package-json-2.4.0.tgz",
|
||||
"integrity": "sha1-DRW9Z9HLvduyyiIv8u24a8sxqLs=",
|
||||
"requires": {
|
||||
"got": "^5.0.0",
|
||||
"registry-auth-token": "^3.0.1",
|
||||
"registry-url": "^3.0.3",
|
||||
"semver": "^5.1.0"
|
||||
}
|
||||
},
|
||||
"package-json-path": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/package-json-path/-/package-json-path-1.0.8.tgz",
|
||||
"integrity": "sha512-8OCXvm2TmEYoWC7e9AswLC0eoKY3RGbkupbiWa2vaTFaH4vEE3Kr+oeefLVm/7N4me2gYh5SjQYsdwAZLkL87g==",
|
||||
"requires": {
|
||||
"abs": "^1.2.1"
|
||||
}
|
||||
},
|
||||
"package.json": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/package.json/-/package.json-2.0.1.tgz",
|
||||
"integrity": "sha1-+IYFnSpJ7QduZIg2ldc7K0bSHW0=",
|
||||
"requires": {
|
||||
"git-package-json": "^1.4.0",
|
||||
"git-source": "^1.1.0",
|
||||
"package-json": "^2.3.1"
|
||||
}
|
||||
},
|
||||
"parse-json": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
|
||||
"integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
|
||||
"requires": {
|
||||
"error-ex": "^1.2.0"
|
||||
}
|
||||
},
|
||||
"parse-url": {
|
||||
"version": "1.3.11",
|
||||
"resolved": "https://registry.npmjs.org/parse-url/-/parse-url-1.3.11.tgz",
|
||||
"integrity": "sha1-V8FUKKuKiSsfQ4aWRccR0OFEtVQ=",
|
||||
"requires": {
|
||||
"is-ssh": "^1.3.0",
|
||||
"protocols": "^1.4.0"
|
||||
}
|
||||
},
|
||||
"path-parse": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
|
||||
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
|
||||
},
|
||||
"pinkie": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
|
||||
"integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA="
|
||||
},
|
||||
"pinkie-promise": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
|
||||
"integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
|
||||
"requires": {
|
||||
"pinkie": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"popper.js": {
|
||||
"version": "1.15.0",
|
||||
"resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.15.0.tgz",
|
||||
"integrity": "sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA=="
|
||||
},
|
||||
"prepend-http": {
|
||||
"version": "1.0.4",
|
||||
"resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
|
||||
"integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw="
|
||||
},
|
||||
"process-nextick-args": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
|
||||
"integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw=="
|
||||
},
|
||||
"protocols": {
|
||||
"version": "1.4.7",
|
||||
"resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.7.tgz",
|
||||
"integrity": "sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg=="
|
||||
},
|
||||
"r-json": {
|
||||
"version": "1.2.9",
|
||||
"resolved": "https://registry.npmjs.org/r-json/-/r-json-1.2.9.tgz",
|
||||
"integrity": "sha512-E5u25XBE7PpZmH5XwtthAmNvSLMTygDQMpcPtCTUBdvwPaqgIYJrxlRQJhG55Sgz7uC0Tuyh5nqNrsDT3uiefA=="
|
||||
},
|
||||
"r-package-json": {
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/r-package-json/-/r-package-json-1.0.8.tgz",
|
||||
"integrity": "sha512-y+dKPLBYKcNMY8pNy+m8YLUqeGsEhhOu0wrqfu1yr8yGX+08CzMq2uUV5GSkGA21GcaIyt6lQAiSoD+DFf3/ag==",
|
||||
"requires": {
|
||||
"package-json-path": "^1.0.0",
|
||||
"r-json": "^1.2.1"
|
||||
}
|
||||
},
|
||||
"rc": {
|
||||
"version": "1.2.8",
|
||||
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
|
||||
"integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
|
||||
"requires": {
|
||||
"deep-extend": "^0.6.0",
|
||||
"ini": "~1.3.0",
|
||||
"minimist": "^1.2.0",
|
||||
"strip-json-comments": "~2.0.1"
|
||||
}
|
||||
},
|
||||
"read-all-stream": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz",
|
||||
"integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=",
|
||||
"requires": {
|
||||
"pinkie-promise": "^2.0.0",
|
||||
"readable-stream": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "2.3.6",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
|
||||
"integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
|
||||
"requires": {
|
||||
"core-util-is": "~1.0.0",
|
||||
"inherits": "~2.0.3",
|
||||
"isarray": "~1.0.0",
|
||||
"process-nextick-args": "~2.0.0",
|
||||
"safe-buffer": "~5.1.1",
|
||||
"string_decoder": "~1.1.1",
|
||||
"util-deprecate": "~1.0.1"
|
||||
}
|
||||
},
|
||||
"reconnecting-websocket": {
|
||||
"version": "4.1.10",
|
||||
"resolved": "https://registry.npmjs.org/reconnecting-websocket/-/reconnecting-websocket-4.1.10.tgz",
|
||||
"integrity": "sha512-x6vgqa8q9KRuJyFkOvBKH1TfyTmN5OWQUf1MIsblfOSY29VE+iI9cKqmIuPvg9TO/hUBxdmUIVutDkcdbqFwZg=="
|
||||
},
|
||||
"registry-auth-token": {
|
||||
"version": "3.4.0",
|
||||
"resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz",
|
||||
"integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==",
|
||||
"requires": {
|
||||
"rc": "^1.1.6",
|
||||
"safe-buffer": "^5.0.1"
|
||||
}
|
||||
},
|
||||
"registry-url": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
|
||||
"integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
|
||||
"requires": {
|
||||
"rc": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"resolve": {
|
||||
"version": "1.10.1",
|
||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz",
|
||||
"integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==",
|
||||
"requires": {
|
||||
"path-parse": "^1.0.6"
|
||||
}
|
||||
},
|
||||
"respond.min.js": {
|
||||
"version": "1.4.2",
|
||||
"resolved": "https://registry.npmjs.org/respond.min.js/-/respond.min.js-1.4.2.tgz",
|
||||
"integrity": "sha1-2rtdJBfiMZexbzOLRv8+s4PoABk="
|
||||
},
|
||||
"safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
||||
},
|
||||
"semver": {
|
||||
"version": "5.7.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
|
||||
"integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA=="
|
||||
},
|
||||
"sliced": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
|
||||
"integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E="
|
||||
},
|
||||
"spdx-correct": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
|
||||
"integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
|
||||
"requires": {
|
||||
"spdx-expression-parse": "^3.0.0",
|
||||
"spdx-license-ids": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"spdx-exceptions": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
|
||||
"integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA=="
|
||||
},
|
||||
"spdx-expression-parse": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
|
||||
"integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
|
||||
"requires": {
|
||||
"spdx-exceptions": "^2.1.0",
|
||||
"spdx-license-ids": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"spdx-license-ids": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz",
|
||||
"integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA=="
|
||||
},
|
||||
"string_decoder": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
|
||||
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
|
||||
"requires": {
|
||||
"safe-buffer": "~5.1.0"
|
||||
}
|
||||
},
|
||||
"strip-json-comments": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
|
||||
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
|
||||
},
|
||||
"timed-out": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz",
|
||||
"integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc="
|
||||
},
|
||||
"tmp": {
|
||||
"version": "0.0.28",
|
||||
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz",
|
||||
"integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=",
|
||||
"requires": {
|
||||
"os-tmpdir": "~1.0.1"
|
||||
}
|
||||
},
|
||||
"typpy": {
|
||||
"version": "2.3.11",
|
||||
"resolved": "https://registry.npmjs.org/typpy/-/typpy-2.3.11.tgz",
|
||||
"integrity": "sha512-Jh/fykZSaxeKO0ceMAs6agki9T5TNA9kiIR6fzKbvafKpIw8UlNlHhzuqKyi5lfJJ5VojJOx9tooIbyy7vHV/g==",
|
||||
"requires": {
|
||||
"function.name": "^1.0.3"
|
||||
}
|
||||
},
|
||||
"ul": {
|
||||
"version": "5.2.14",
|
||||
"resolved": "https://registry.npmjs.org/ul/-/ul-5.2.14.tgz",
|
||||
"integrity": "sha512-VaIRQZ5nkEd8VtI3OYo5qNbhHQuBtPtu5k5GrYaKCmcP1H+FkuWtS+XFTSU1oz5GiuAg2FJL5ka8ufr9zdm8eg==",
|
||||
"requires": {
|
||||
"deffy": "^2.2.2",
|
||||
"typpy": "^2.3.4"
|
||||
}
|
||||
},
|
||||
"unzip-response": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz",
|
||||
"integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4="
|
||||
},
|
||||
"url-parse-lax": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
|
||||
"integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
|
||||
"requires": {
|
||||
"prepend-http": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"util-deprecate": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
|
||||
},
|
||||
"validate-npm-package-license": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
|
||||
"integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
|
||||
"requires": {
|
||||
"spdx-correct": "^3.0.0",
|
||||
"spdx-expression-parse": "^3.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"name": "ledserver_html_controller",
|
||||
"description": "HTML Websocket Controller for LED-Server",
|
||||
"version": "1.0.0",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/dezeyer/LED-Server.git"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"angular": "1.7.8",
|
||||
"angular-minicolors": "0.0.11",
|
||||
"bootstrap-material-design": "4.1.1",
|
||||
"jquery-minicolors": "2.1.10",
|
||||
"jquery-wheelcolorpicker": "3.0.5",
|
||||
"package.json": "^2.0.1",
|
||||
"font-awesome": "4.7.0",
|
||||
"reconnecting-websocket": "4.1.10",
|
||||
"popper.js": "1.15.0",
|
||||
"html5shiv.min.js": "3.7.2",
|
||||
"respond.min.js": "1.4.2",
|
||||
"bootstrap": "4.3.1"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user