make Prettier
This commit is contained in:
parent
ef34fefc39
commit
880da4d685
|
@ -0,0 +1,18 @@
|
||||||
|
{ "node": true
|
||||||
|
, "browser": true
|
||||||
|
, "jquery": true
|
||||||
|
, "globals": { "angular": true, "Promise": true }
|
||||||
|
|
||||||
|
, "indent": 2
|
||||||
|
, "onevar": true
|
||||||
|
, "laxcomma": true
|
||||||
|
, "laxbreak": true
|
||||||
|
, "curly": true
|
||||||
|
, "nonbsp": true
|
||||||
|
|
||||||
|
, "eqeqeq": true
|
||||||
|
, "immed": true
|
||||||
|
, "undef": true
|
||||||
|
, "unused": true
|
||||||
|
, "latedef": true
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"bracketSpacing": true,
|
||||||
|
"printWidth": 120,
|
||||||
|
"tabWidth": 4,
|
||||||
|
"trailingComma": "none",
|
||||||
|
"useTabs": false
|
||||||
|
}
|
|
@ -4,28 +4,33 @@
|
||||||
<title>Websock VPN Instrumentation</title>
|
<title>Websock VPN Instrumentation</title>
|
||||||
</head>
|
</head>
|
||||||
<body ng-app="vpnAdmin" ng-controller="vpnInstrumentationController">
|
<body ng-app="vpnAdmin" ng-controller="vpnInstrumentationController">
|
||||||
|
|
||||||
<div class="panel panel-default panel-primary">
|
<div class="panel panel-default panel-primary">
|
||||||
<div class="panel-heading">VPN Instrumentation</div>
|
<div class="panel-heading">VPN Instrumentation</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<div class="panel panel-default panel-info">
|
<div class="panel panel-default panel-info">
|
||||||
<div class="panel-heading">Control Plane</div>
|
<div class="panel-heading">Control Plane</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
|
<div class="row">
|
||||||
<div class="row"> <!-- Auth -->
|
<!-- Auth -->
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<span class="input-group-btn">
|
<span class="input-group-btn">
|
||||||
<button class="btn btn-default" type="button" ng-click="startWebSocket()">Start WebSocket</button>
|
<button class="btn btn-default" type="button" ng-click="startWebSocket()">
|
||||||
|
Start WebSocket
|
||||||
|
</button>
|
||||||
</span>
|
</span>
|
||||||
<button class="btn btn-default" type="button" ng-class="conn == false && 'btn-danger' || 'btn-success'">
|
<button
|
||||||
|
class="btn btn-default"
|
||||||
|
type="button"
|
||||||
|
ng-class="conn == false && 'btn-danger' || 'btn-success'"
|
||||||
|
>
|
||||||
{[{ conn == false && 'False' || 'True' }]}
|
{[{ conn == false && 'False' || 'True' }]}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<br>
|
<br />
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
|
@ -33,7 +38,7 @@
|
||||||
<span class="input-group-btn">
|
<span class="input-group-btn">
|
||||||
<button class="btn btn-default" type="button">Auth</button>
|
<button class="btn btn-default" type="button">Auth</button>
|
||||||
</span>
|
</span>
|
||||||
<input type="text" class="form-control" placeholder="Enter auth data here">
|
<input type="text" class="form-control" placeholder="Enter auth data here" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -51,20 +56,34 @@
|
||||||
|
|
||||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
|
||||||
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.min.js"></script>
|
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.min.js"></script>
|
||||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
|
<link
|
||||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
|
rel="stylesheet"
|
||||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
|
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
|
||||||
|
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
|
||||||
|
crossorigin="anonymous"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="stylesheet"
|
||||||
|
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css"
|
||||||
|
integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp"
|
||||||
|
crossorigin="anonymous"
|
||||||
|
/>
|
||||||
|
<script
|
||||||
|
src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"
|
||||||
|
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
|
||||||
|
crossorigin="anonymous"
|
||||||
|
></script>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
console.log("startup");
|
console.log("startup");
|
||||||
|
|
||||||
var vpnAdmin = angular.module('vpnAdmin',[]);
|
var vpnAdmin = angular.module("vpnAdmin", []);
|
||||||
vpnAdmin.config(function ($interpolateProvider) {
|
vpnAdmin.config(function ($interpolateProvider) {
|
||||||
console.log("vpnTest Config");
|
console.log("vpnTest Config");
|
||||||
$interpolateProvider.startSymbol('{[{');
|
$interpolateProvider.startSymbol("{[{");
|
||||||
$interpolateProvider.endSymbol('}]}');
|
$interpolateProvider.endSymbol("}]}");
|
||||||
});
|
});
|
||||||
vpnAdmin.controller('vpnInstrumentationController', function ($scope) {
|
vpnAdmin.controller("vpnInstrumentationController", function ($scope) {
|
||||||
console.log("vpnInstrumentationController startup");
|
console.log("vpnInstrumentationController startup");
|
||||||
|
|
||||||
$scope.log_elements = [];
|
$scope.log_elements = [];
|
||||||
|
@ -73,9 +92,9 @@ vpnAdmin.controller('vpnInstrumentationController', function ($scope) {
|
||||||
|
|
||||||
$scope.webSocketStatus = function () {
|
$scope.webSocketStatus = function () {
|
||||||
if ($scope.conn == false) {
|
if ($scope.conn == false) {
|
||||||
return ""
|
return "";
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
$scope.startWebSocket = function () {
|
$scope.startWebSocket = function () {
|
||||||
console.log("Start webSocket {{$}}");
|
console.log("Start webSocket {{$}}");
|
||||||
|
@ -84,27 +103,22 @@ vpnAdmin.controller('vpnInstrumentationController', function ($scope) {
|
||||||
$scope.append_log("Websocket opened");
|
$scope.append_log("Websocket opened");
|
||||||
$scope.conn.onclose = function (evt) {
|
$scope.conn.onclose = function (evt) {
|
||||||
$scope.append_log("Connection closed.");
|
$scope.append_log("Connection closed.");
|
||||||
}
|
};
|
||||||
$scope.conn.onmessage = function (evt) {
|
$scope.conn.onmessage = function (evt) {
|
||||||
$scope.append_log(evt.data)
|
$scope.append_log(evt.data);
|
||||||
}
|
};
|
||||||
}
|
} else {
|
||||||
else {
|
appendLog($("<div><b>Your browser does not support WebSockets.</b></div>"));
|
||||||
appendLog($("<div><b>Your browser does not support WebSockets.</b></div>"))
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.auth_click = function () {
|
$scope.auth_click = function () {
|
||||||
$scope.append_log($scope.auth_key)
|
$scope.append_log($scope.auth_key);
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.append_log = function (txt) {
|
$scope.append_log = function (txt) {
|
||||||
$scope.log_elements.push(txt)
|
$scope.log_elements.push(txt);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
</html>
|
</html>
|
|
@ -4,28 +4,33 @@
|
||||||
<title>Websock VPN Test Client</title>
|
<title>Websock VPN Test Client</title>
|
||||||
</head>
|
</head>
|
||||||
<body ng-app="vpnTest" ng-controller="vpnTestController">
|
<body ng-app="vpnTest" ng-controller="vpnTestController">
|
||||||
|
|
||||||
<div class="panel panel-default panel-primary">
|
<div class="panel panel-default panel-primary">
|
||||||
<div class="panel-heading">WebSocket Client Test</div>
|
<div class="panel-heading">WebSocket Client Test</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
<div class="panel panel-default panel-info">
|
<div class="panel panel-default panel-info">
|
||||||
<div class="panel-heading">Control Plane</div>
|
<div class="panel-heading">Control Plane</div>
|
||||||
<div class="panel-body">
|
<div class="panel-body">
|
||||||
|
<div class="row">
|
||||||
<div class="row"> <!-- Auth -->
|
<!-- Auth -->
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<span class="input-group-btn">
|
<span class="input-group-btn">
|
||||||
<button class="btn btn-default" type="button" ng-click="startWebSocket()">Start WebSocket</button>
|
<button class="btn btn-default" type="button" ng-click="startWebSocket()">
|
||||||
|
Start WebSocket
|
||||||
|
</button>
|
||||||
</span>
|
</span>
|
||||||
<button class="btn btn-default" type="button" ng-class="conn == false && 'btn-danger' || 'btn-success'">
|
<button
|
||||||
|
class="btn btn-default"
|
||||||
|
type="button"
|
||||||
|
ng-class="conn == false && 'btn-danger' || 'btn-success'"
|
||||||
|
>
|
||||||
{[{ conn == false && 'False' || 'True' }]}
|
{[{ conn == false && 'False' || 'True' }]}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<br>
|
<br />
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
|
@ -33,25 +38,30 @@
|
||||||
<span class="input-group-btn">
|
<span class="input-group-btn">
|
||||||
<button class="btn btn-default" type="button">Auth</button>
|
<button class="btn btn-default" type="button">Auth</button>
|
||||||
</span>
|
</span>
|
||||||
<input type="text" class="form-control" placeholder="Enter auth data here">
|
<input type="text" class="form-control" placeholder="Enter auth data here" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<br>
|
<br />
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<span class="input-group-btn">
|
<span class="input-group-btn">
|
||||||
<button class="btn btn-default" ng-click="send_click()" type="button">Send</button>
|
<button class="btn btn-default" ng-click="send_click()" type="button">
|
||||||
|
Send
|
||||||
|
</button>
|
||||||
</span>
|
</span>
|
||||||
<input ng-model="send_data" type="text" class="form-control" placeholder="Enter send data here">
|
<input
|
||||||
|
ng-model="send_data"
|
||||||
|
type="text"
|
||||||
|
class="form-control"
|
||||||
|
placeholder="Enter send data here"
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="panel panel-default panel-danger">
|
<div class="panel panel-default panel-danger">
|
||||||
|
@ -66,32 +76,46 @@
|
||||||
|
|
||||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
|
||||||
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.min.js"></script>
|
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.min.js"></script>
|
||||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
|
<link
|
||||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
|
rel="stylesheet"
|
||||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
|
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
|
||||||
|
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
|
||||||
|
crossorigin="anonymous"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="stylesheet"
|
||||||
|
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css"
|
||||||
|
integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp"
|
||||||
|
crossorigin="anonymous"
|
||||||
|
/>
|
||||||
|
<script
|
||||||
|
src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"
|
||||||
|
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
|
||||||
|
crossorigin="anonymous"
|
||||||
|
></script>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
console.log("startup");
|
console.log("startup");
|
||||||
|
|
||||||
var vpnTest = angular.module('vpnTest',[]);
|
var vpnTest = angular.module("vpnTest", []);
|
||||||
vpnTest.config(function ($interpolateProvider) {
|
vpnTest.config(function ($interpolateProvider) {
|
||||||
console.log("vpnTest Config");
|
console.log("vpnTest Config");
|
||||||
$interpolateProvider.startSymbol('{[{');
|
$interpolateProvider.startSymbol("{[{");
|
||||||
$interpolateProvider.endSymbol('}]}');
|
$interpolateProvider.endSymbol("}]}");
|
||||||
});
|
});
|
||||||
vpnTest.controller('vpnTestController', function ($scope) {
|
vpnTest.controller("vpnTestController", function ($scope) {
|
||||||
console.log("vpnTestController startup");
|
console.log("vpnTestController startup");
|
||||||
|
|
||||||
$scope.log_elements = [];
|
$scope.log_elements = [];
|
||||||
$scope.auth_key = "";
|
$scope.auth_key = "";
|
||||||
$scope.conn = false;
|
$scope.conn = false;
|
||||||
$scope.send_data = ""
|
$scope.send_data = "";
|
||||||
|
|
||||||
$scope.webSocketStatus = function () {
|
$scope.webSocketStatus = function () {
|
||||||
if ($scope.conn == false) {
|
if ($scope.conn == false) {
|
||||||
return ""
|
return "";
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
$scope.startWebSocket = function () {
|
$scope.startWebSocket = function () {
|
||||||
console.log("Start webSocket {{$}}");
|
console.log("Start webSocket {{$}}");
|
||||||
|
@ -100,33 +124,28 @@ vpnTest.controller('vpnTestController', function ($scope) {
|
||||||
$scope.append_log("Websocket opened");
|
$scope.append_log("Websocket opened");
|
||||||
$scope.conn.onclose = function (evt) {
|
$scope.conn.onclose = function (evt) {
|
||||||
$scope.append_log("Connection closed.");
|
$scope.append_log("Connection closed.");
|
||||||
}
|
};
|
||||||
$scope.conn.onmessage = function (evt) {
|
$scope.conn.onmessage = function (evt) {
|
||||||
console.log(evt.data)
|
console.log(evt.data);
|
||||||
$scope.append_log(evt.data)
|
$scope.append_log(evt.data);
|
||||||
}
|
};
|
||||||
}
|
} else {
|
||||||
else {
|
appendLog($("<div><b>Your browser does not support WebSockets.</b></div>"));
|
||||||
appendLog($("<div><b>Your browser does not support WebSockets.</b></div>"))
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.auth_click = function () {
|
$scope.auth_click = function () {
|
||||||
$scope.append_log($scope.auth_key)
|
$scope.append_log($scope.auth_key);
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.send_click = function () {
|
$scope.send_click = function () {
|
||||||
console.log("send_click")
|
console.log("send_click");
|
||||||
$scope.conn.send($scope.send_data)
|
$scope.conn.send($scope.send_data);
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.append_log = function (txt) {
|
$scope.append_log = function (txt) {
|
||||||
$scope.log_elements.push(txt)
|
$scope.log_elements.push(txt);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
<!doctype html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8" />
|
||||||
<title>Page Not Found</title>
|
<title>Page Not Found</title>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<style>
|
<style>
|
||||||
|
|
||||||
* {
|
* {
|
||||||
line-height: 1.2;
|
line-height: 1.2;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
@ -38,8 +37,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
@media only screen and (max-width: 280px) {
|
@media only screen and (max-width: 280px) {
|
||||||
|
body,
|
||||||
body, p {
|
p {
|
||||||
width: 95%;
|
width: 95%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,9 +46,7 @@
|
||||||
font-size: 1.5em;
|
font-size: 1.5em;
|
||||||
margin: 0 0 0.3em;
|
margin: 0 0 0.3em;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
|
@ -95,22 +95,6 @@ textarea {
|
||||||
Author's custom styles
|
Author's custom styles
|
||||||
========================================================================== */
|
========================================================================== */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ==========================================================================
|
/* ==========================================================================
|
||||||
Helper classes
|
Helper classes
|
||||||
========================================================================== */
|
========================================================================== */
|
||||||
|
@ -195,10 +179,7 @@ textarea {
|
||||||
/* Style adjustments for viewports that meet the condition */
|
/* Style adjustments for viewports that meet the condition */
|
||||||
}
|
}
|
||||||
|
|
||||||
@media print,
|
@media print, (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 1.25dppx), (min-resolution: 120dpi) {
|
||||||
(-webkit-min-device-pixel-ratio: 1.25),
|
|
||||||
(min-resolution: 1.25dppx),
|
|
||||||
(min-resolution: 120dpi) {
|
|
||||||
/* Style adjustments for high resolution devices */
|
/* Style adjustments for high resolution devices */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,23 +1,26 @@
|
||||||
<!doctype html>
|
<!DOCTYPE html>
|
||||||
<html class="no-js" lang="">
|
<html class="no-js" lang="">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8" />
|
||||||
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
<meta http-equiv="x-ua-compatible" content="ie=edge" />
|
||||||
<title></title>
|
<title></title>
|
||||||
<meta name="description" content="">
|
<meta name="description" content="" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
|
||||||
<link rel="apple-touch-icon" href="apple-touch-icon.png">
|
<link rel="apple-touch-icon" href="apple-touch-icon.png" />
|
||||||
<!-- Place favicon.ico in the root directory -->
|
<!-- Place favicon.ico in the root directory -->
|
||||||
|
|
||||||
<link rel="stylesheet" href="css/normalize.css">
|
<link rel="stylesheet" href="css/normalize.css" />
|
||||||
<link rel="stylesheet" href="css/main.css">
|
<link rel="stylesheet" href="css/main.css" />
|
||||||
<script src="js/vendor/modernizr-2.8.3.min.js"></script>
|
<script src="js/vendor/modernizr-2.8.3.min.js"></script>
|
||||||
<base href="/">
|
<base href="/" />
|
||||||
</head>
|
</head>
|
||||||
<body ng-app="rvpnApp">
|
<body ng-app="rvpnApp">
|
||||||
<!--[if lt IE 8]>
|
<!--[if lt IE 8]>
|
||||||
<p class="browserupgrade">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p>
|
<p class="browserupgrade">
|
||||||
|
You are using an <strong>outdated</strong> browser. Please
|
||||||
|
<a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.
|
||||||
|
</p>
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
|
|
||||||
<!-- Admin GUI Begins Here -->
|
<!-- Admin GUI Begins Here -->
|
||||||
|
@ -38,39 +41,57 @@
|
||||||
<li><a href="#">Help</a></li>
|
<li><a href="#">Help</a></li>
|
||||||
<li><a href="#">Login</a></li>
|
<li><a href="#">Login</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
</nav>
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<div ng-view></div>
|
<div ng-view></div>
|
||||||
|
|
||||||
|
|
||||||
<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
|
<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
|
||||||
<script>window.jQuery || document.write('<script src="admin/js/vendor/jquery-1.12.0.min.js"><\/script>')</script>
|
<script>
|
||||||
|
window.jQuery || document.write('<script src="admin/js/vendor/jquery-1.12.0.min.js"><\/script>');
|
||||||
|
</script>
|
||||||
<script src="admin/js/plugins.js"></script>
|
<script src="admin/js/plugins.js"></script>
|
||||||
<script src="admin/js/main.js"></script>
|
<script src="admin/js/main.js"></script>
|
||||||
|
|
||||||
<!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->
|
<!-- Google Analytics: change UA-XXXXX-X to be your site's ID. -->
|
||||||
<script>
|
<script>
|
||||||
(function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=
|
(function (b, o, i, l, e, r) {
|
||||||
function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;
|
b.GoogleAnalyticsObject = l;
|
||||||
e=o.createElement(i);r=o.getElementsByTagName(i)[0];
|
b[l] ||
|
||||||
e.src='https://www.google-analytics.com/analytics.js';
|
(b[l] = function () {
|
||||||
r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));
|
(b[l].q = b[l].q || []).push(arguments);
|
||||||
ga('create','UA-XXXXX-X','auto');ga('send','pageview');
|
});
|
||||||
|
b[l].l = +new Date();
|
||||||
|
e = o.createElement(i);
|
||||||
|
r = o.getElementsByTagName(i)[0];
|
||||||
|
e.src = "https://www.google-analytics.com/analytics.js";
|
||||||
|
r.parentNode.insertBefore(e, r);
|
||||||
|
})(window, document, "script", "ga");
|
||||||
|
ga("create", "UA-XXXXX-X", "auto");
|
||||||
|
ga("send", "pageview");
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
|
||||||
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.js"></script>
|
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.js"></script>
|
||||||
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular-route.js"></script>
|
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular-route.js"></script>
|
||||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
|
<link
|
||||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
|
rel="stylesheet"
|
||||||
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
|
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"
|
||||||
|
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u"
|
||||||
|
crossorigin="anonymous"
|
||||||
|
/>
|
||||||
|
<link
|
||||||
|
rel="stylesheet"
|
||||||
|
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css"
|
||||||
|
integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp"
|
||||||
|
crossorigin="anonymous"
|
||||||
|
/>
|
||||||
|
<script
|
||||||
|
src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"
|
||||||
|
integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
|
||||||
|
crossorigin="anonymous"
|
||||||
|
></script>
|
||||||
<script src="/admin/js/vendor/filter.js"></script>
|
<script src="/admin/js/vendor/filter.js"></script>
|
||||||
<script src="/admin/js/app.js"></script>
|
<script src="/admin/js/app.js"></script>
|
||||||
</html>
|
</html>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
console.log("app.sh startup")
|
console.log("app.sh startup");
|
||||||
|
|
||||||
var app = angular.module("rvpnApp", ["ngRoute", "angular-duration-format"]);
|
var app = angular.module("rvpnApp", ["ngRoute", "angular-duration-format"]);
|
||||||
|
|
||||||
|
@ -27,93 +27,92 @@ app.config(function($routeProvider, $locationProvider) {
|
||||||
$locationProvider.html5Mode(true);
|
$locationProvider.html5Mode(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
app.filter('bytes', function() {
|
app.filter("bytes", function () {
|
||||||
return function (bytes, precision) {
|
return function (bytes, precision) {
|
||||||
if (isNaN(parseFloat(bytes)) || !isFinite(bytes)) return '-';
|
if (isNaN(parseFloat(bytes)) || !isFinite(bytes)) return "-";
|
||||||
if (typeof precision === 'undefined') precision = 1;
|
if (typeof precision === "undefined") precision = 1;
|
||||||
var units = ['bytes', 'kB', 'MB', 'GB', 'TB', 'PB'],
|
var units = ["bytes", "kB", "MB", "GB", "TB", "PB"],
|
||||||
number = Math.floor(Math.log(bytes) / Math.log(1024));
|
number = Math.floor(Math.log(bytes) / Math.log(1024));
|
||||||
return (bytes / Math.pow(1024, Math.floor(number))).toFixed(precision) + ' ' + units[number];
|
return (bytes / Math.pow(1024, Math.floor(number))).toFixed(precision) + " " + units[number];
|
||||||
}
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
app.filter('hfcduration', function() {
|
app.filter("hfcduration", function () {
|
||||||
return function (duration, precision) {
|
return function (duration, precision) {
|
||||||
remain = duration
|
remain = duration;
|
||||||
duration_day = 24*60*60
|
duration_day = 24 * 60 * 60;
|
||||||
duration_hour = 60*60
|
duration_hour = 60 * 60;
|
||||||
duration_minute = 60
|
duration_minute = 60;
|
||||||
duration_str = ""
|
duration_str = "";
|
||||||
|
|
||||||
days = Math.floor(remain / duration_day)
|
days = Math.floor(remain / duration_day);
|
||||||
if (days > 0) {
|
if (days > 0) {
|
||||||
remain = remain - (days * duration_day)
|
remain = remain - days * duration_day;
|
||||||
duration_str = duration_str + days + 'd'
|
duration_str = duration_str + days + "d";
|
||||||
}
|
}
|
||||||
|
|
||||||
hours = Math.floor(remain / duration_hour)
|
hours = Math.floor(remain / duration_hour);
|
||||||
if (hours > 0) {
|
if (hours > 0) {
|
||||||
remain = remain - (hours * duration_hour)
|
remain = remain - hours * duration_hour;
|
||||||
duration_str = duration_str + hours + 'h'
|
duration_str = duration_str + hours + "h";
|
||||||
}
|
}
|
||||||
|
|
||||||
mins = Math.floor(remain / duration_minute)
|
mins = Math.floor(remain / duration_minute);
|
||||||
if (mins > 0) {
|
if (mins > 0) {
|
||||||
remain = remain - (mins * duration_minute)
|
remain = remain - mins * duration_minute;
|
||||||
duration_str = duration_str + mins + 'm'
|
duration_str = duration_str + mins + "m";
|
||||||
}
|
}
|
||||||
|
|
||||||
secs = Math.floor(remain)
|
secs = Math.floor(remain);
|
||||||
duration_str = duration_str + secs + 's'
|
duration_str = duration_str + secs + "s";
|
||||||
|
|
||||||
return (duration_str);
|
return duration_str;
|
||||||
}
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
app.controller('statusController', function ($scope, $http) {
|
app.controller("statusController", function ($scope, $http) {
|
||||||
console.log("statusController");
|
console.log("statusController");
|
||||||
$scope.status_search = "";
|
$scope.status_search = "";
|
||||||
|
|
||||||
var api = '/api/org.rootprojects.tunnel/status'
|
var api = "/api/org.rootprojects.tunnel/status";
|
||||||
|
|
||||||
$scope.updateView = function () {
|
$scope.updateView = function () {
|
||||||
$http.get(api).then(function (response) {
|
$http.get(api).then(function (response) {
|
||||||
console.log(response);
|
console.log(response);
|
||||||
data = response.data;
|
data = response.data;
|
||||||
if (data.error == 'ok' ){
|
if (data.error == "ok") {
|
||||||
$scope.status = data.result;
|
$scope.status = data.result;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
$scope.updateView()
|
|
||||||
|
|
||||||
|
$scope.updateView();
|
||||||
});
|
});
|
||||||
|
|
||||||
app.controller('serverController', function ($scope, $http) {
|
app.controller("serverController", function ($scope, $http) {
|
||||||
$scope.servers = [];
|
$scope.servers = [];
|
||||||
$scope.servers_search = "";
|
$scope.servers_search = "";
|
||||||
$scope.servers_trigger_details = [];
|
$scope.servers_trigger_details = [];
|
||||||
$scope.filtered
|
$scope.filtered;
|
||||||
|
|
||||||
var api = '/api/org.rootprojects.tunnel/servers'
|
var api = "/api/org.rootprojects.tunnel/servers";
|
||||||
|
|
||||||
$scope.updateView = function () {
|
$scope.updateView = function () {
|
||||||
$http.get(api).then(function (response) {
|
$http.get(api).then(function (response) {
|
||||||
//console.log(response);
|
//console.log(response);
|
||||||
data = response.data;
|
data = response.data;
|
||||||
if (data.error == 'ok' ){
|
if (data.error == "ok") {
|
||||||
$scope.servers = data.result.servers;
|
$scope.servers = data.result.servers;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
$scope.triggerDetail = function (id) {
|
$scope.triggerDetail = function (id) {
|
||||||
//console.log("triggerDetail ", id, $scope.servers_trigger_details[id])
|
//console.log("triggerDetail ", id, $scope.servers_trigger_details[id])
|
||||||
if ($scope.servers_trigger_details[id] == true) {
|
if ($scope.servers_trigger_details[id] == true) {
|
||||||
$scope.servers_trigger_details[id] = false;
|
$scope.servers_trigger_details[id] = false;
|
||||||
} else {
|
} else {
|
||||||
$scope.servers_trigger_details[id] = true
|
$scope.servers_trigger_details[id] = true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -122,11 +121,9 @@ app.controller('serverController', function ($scope, $http) {
|
||||||
if ($scope.servers_trigger_details[id] == true) {
|
if ($scope.servers_trigger_details[id] == true) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
return true
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.updateView()
|
$scope.updateView();
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -3,10 +3,30 @@
|
||||||
var method;
|
var method;
|
||||||
var noop = function () {};
|
var noop = function () {};
|
||||||
var methods = [
|
var methods = [
|
||||||
'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error',
|
"assert",
|
||||||
'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log',
|
"clear",
|
||||||
'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd',
|
"count",
|
||||||
'timeline', 'timelineEnd', 'timeStamp', 'trace', 'warn'
|
"debug",
|
||||||
|
"dir",
|
||||||
|
"dirxml",
|
||||||
|
"error",
|
||||||
|
"exception",
|
||||||
|
"group",
|
||||||
|
"groupCollapsed",
|
||||||
|
"groupEnd",
|
||||||
|
"info",
|
||||||
|
"log",
|
||||||
|
"markTimeline",
|
||||||
|
"profile",
|
||||||
|
"profileEnd",
|
||||||
|
"table",
|
||||||
|
"time",
|
||||||
|
"timeEnd",
|
||||||
|
"timeline",
|
||||||
|
"timelineEnd",
|
||||||
|
"timeStamp",
|
||||||
|
"trace",
|
||||||
|
"warn"
|
||||||
];
|
];
|
||||||
var length = methods.length;
|
var length = methods.length;
|
||||||
var console = (window.console = window.console || {});
|
var console = (window.console = window.console || {});
|
||||||
|
@ -19,6 +39,6 @@
|
||||||
console[method] = noop;
|
console[method] = noop;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}());
|
})();
|
||||||
|
|
||||||
// Place any jQuery/helper plugins in here.
|
// Place any jQuery/helper plugins in here.
|
||||||
|
|
|
@ -1,59 +1,67 @@
|
||||||
// ### filter.js >>
|
// ### filter.js >>
|
||||||
|
|
||||||
angular
|
angular.module("angular-duration-format.filter", []).filter("duration", function () {
|
||||||
.module('angular-duration-format.filter', [ ])
|
|
||||||
.filter('duration', function() {
|
|
||||||
var DURATION_FORMATS_SPLIT = /((?:[^ydhms']+)|(?:'(?:[^']|'')*')|(?:y+|d+|h+|m+|s+))(.*)/;
|
var DURATION_FORMATS_SPLIT = /((?:[^ydhms']+)|(?:'(?:[^']|'')*')|(?:y+|d+|h+|m+|s+))(.*)/;
|
||||||
var DURATION_FORMATS = {
|
var DURATION_FORMATS = {
|
||||||
y: { // years
|
y: {
|
||||||
|
// years
|
||||||
// "longer" years are not supported
|
// "longer" years are not supported
|
||||||
value: 365 * 24 * 60 * 60 * 1000,
|
value: 365 * 24 * 60 * 60 * 1000
|
||||||
},
|
},
|
||||||
yy: {
|
yy: {
|
||||||
value: 'y',
|
value: "y",
|
||||||
pad: 2,
|
pad: 2
|
||||||
},
|
},
|
||||||
d: { // days
|
d: {
|
||||||
value: 24 * 60 * 60 * 1000,
|
// days
|
||||||
|
value: 24 * 60 * 60 * 1000
|
||||||
},
|
},
|
||||||
dd: {
|
dd: {
|
||||||
value: 'd',
|
value: "d",
|
||||||
pad: 2,
|
pad: 2
|
||||||
},
|
},
|
||||||
h: { // hours
|
h: {
|
||||||
value: 60 * 60 * 1000,
|
// hours
|
||||||
|
value: 60 * 60 * 1000
|
||||||
},
|
},
|
||||||
hh: { // padded hours
|
hh: {
|
||||||
value: 'h',
|
// padded hours
|
||||||
pad: 2,
|
value: "h",
|
||||||
|
pad: 2
|
||||||
},
|
},
|
||||||
m: { // minutes
|
m: {
|
||||||
value: 60 * 1000,
|
// minutes
|
||||||
|
value: 60 * 1000
|
||||||
},
|
},
|
||||||
mm: { // padded minutes
|
mm: {
|
||||||
value: 'm',
|
// padded minutes
|
||||||
pad: 2,
|
value: "m",
|
||||||
|
pad: 2
|
||||||
},
|
},
|
||||||
s: { // seconds
|
s: {
|
||||||
value: 1000,
|
// seconds
|
||||||
|
value: 1000
|
||||||
},
|
},
|
||||||
ss: { // padded seconds
|
ss: {
|
||||||
value: 's',
|
// padded seconds
|
||||||
pad: 2,
|
value: "s",
|
||||||
|
pad: 2
|
||||||
},
|
},
|
||||||
sss: { // milliseconds
|
sss: {
|
||||||
value: 1,
|
// milliseconds
|
||||||
},
|
value: 1
|
||||||
ssss: { // padded milliseconds
|
|
||||||
value: 'sss',
|
|
||||||
pad: 4,
|
|
||||||
},
|
},
|
||||||
|
ssss: {
|
||||||
|
// padded milliseconds
|
||||||
|
value: "sss",
|
||||||
|
pad: 4
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
function _parseFormat(string) {
|
function _parseFormat(string) {
|
||||||
// @inspiration AngularJS date filter
|
// @inspiration AngularJS date filter
|
||||||
var parts = [];
|
var parts = [];
|
||||||
var format = string ? string.toString() : '';
|
var format = string ? string.toString() : "";
|
||||||
|
|
||||||
while (format) {
|
while (format) {
|
||||||
var match = DURATION_FORMATS_SPLIT.exec(format);
|
var match = DURATION_FORMATS_SPLIT.exec(format);
|
||||||
|
@ -73,31 +81,46 @@ angular
|
||||||
}
|
}
|
||||||
|
|
||||||
function _formatDuration(timestamp, format) {
|
function _formatDuration(timestamp, format) {
|
||||||
var text = '';
|
var text = "";
|
||||||
var values = {};
|
var values = {};
|
||||||
|
|
||||||
format.filter(function(format) { // filter only value parts of format
|
format
|
||||||
|
.filter(function (format) {
|
||||||
|
// filter only value parts of format
|
||||||
return DURATION_FORMATS.hasOwnProperty(format);
|
return DURATION_FORMATS.hasOwnProperty(format);
|
||||||
}).map(function(format) { // get formats with values only
|
})
|
||||||
|
.map(function (format) {
|
||||||
|
// get formats with values only
|
||||||
var config = DURATION_FORMATS[format];
|
var config = DURATION_FORMATS[format];
|
||||||
|
|
||||||
if (config.hasOwnProperty('pad')) {
|
if (config.hasOwnProperty("pad")) {
|
||||||
return config.value;
|
return config.value;
|
||||||
} else {
|
} else {
|
||||||
return format;
|
return format;
|
||||||
}
|
}
|
||||||
}).filter(function(format, index, arr) { // remove duplicates
|
})
|
||||||
return (arr.indexOf(format) === index);
|
.filter(function (format, index, arr) {
|
||||||
}).map(function(format) { // get format configurations with values
|
// remove duplicates
|
||||||
return angular.extend({
|
return arr.indexOf(format) === index;
|
||||||
name: format,
|
})
|
||||||
}, DURATION_FORMATS[format]);
|
.map(function (format) {
|
||||||
}).sort(function(a, b) { // sort formats descending by value
|
// get format configurations with values
|
||||||
|
return angular.extend(
|
||||||
|
{
|
||||||
|
name: format
|
||||||
|
},
|
||||||
|
DURATION_FORMATS[format]
|
||||||
|
);
|
||||||
|
})
|
||||||
|
.sort(function (a, b) {
|
||||||
|
// sort formats descending by value
|
||||||
return b.value - a.value;
|
return b.value - a.value;
|
||||||
}).forEach(function(format) { // create values for format parts
|
})
|
||||||
var value = values[format.name] = Math.floor(timestamp / format.value);
|
.forEach(function (format) {
|
||||||
|
// create values for format parts
|
||||||
|
var value = (values[format.name] = Math.floor(timestamp / format.value));
|
||||||
|
|
||||||
timestamp = timestamp - (value * format.value);
|
timestamp = timestamp - value * format.value;
|
||||||
});
|
});
|
||||||
|
|
||||||
format.forEach(function (part) {
|
format.forEach(function (part) {
|
||||||
|
@ -106,9 +129,11 @@ angular
|
||||||
if (format) {
|
if (format) {
|
||||||
var value = values[format.value];
|
var value = values[format.value];
|
||||||
|
|
||||||
text += (format.hasOwnProperty('pad') ? _padNumber(value, Math.max(format.pad, value.toString().length)) : values[part]);
|
text += format.hasOwnProperty("pad")
|
||||||
|
? _padNumber(value, Math.max(format.pad, value.toString().length))
|
||||||
|
: values[part];
|
||||||
} else {
|
} else {
|
||||||
text += part.replace(/(^'|'$)/g, '').replace(/''/g, '\'');
|
text += part.replace(/(^'|'$)/g, "").replace(/''/g, "'");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -116,14 +141,14 @@ angular
|
||||||
}
|
}
|
||||||
|
|
||||||
function _padNumber(number, len) {
|
function _padNumber(number, len) {
|
||||||
return ((new Array(len + 1)).join('0') + number).slice(-len);
|
return (new Array(len + 1).join("0") + number).slice(-len);
|
||||||
}
|
}
|
||||||
|
|
||||||
return function (value, format) {
|
return function (value, format) {
|
||||||
var parsedValue = parseFloat(value, 10);
|
var parsedValue = parseFloat(value, 10);
|
||||||
var parsedFormat = _parseFormat(format);
|
var parsedFormat = _parseFormat(format);
|
||||||
|
|
||||||
if (isNaN(parsedValue) || (parsedFormat.length === 0)) {
|
if (isNaN(parsedValue) || parsedFormat.length === 0) {
|
||||||
return value;
|
return value;
|
||||||
} else {
|
} else {
|
||||||
return _formatDuration(parsedValue, parsedFormat);
|
return _formatDuration(parsedValue, parsedFormat);
|
||||||
|
@ -131,18 +156,10 @@ angular
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
// ### << filter.js
|
// ### << filter.js
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ### main.js >>
|
// ### main.js >>
|
||||||
|
|
||||||
angular
|
angular.module("angular-duration-format", ["angular-duration-format.filter"]);
|
||||||
.module('angular-duration-format', [
|
|
||||||
'angular-duration-format.filter',
|
|
||||||
]);
|
|
||||||
|
|
||||||
|
|
||||||
// ### << main.js
|
// ### << main.js
|
||||||
|
|
||||||
|
|
|
@ -9,10 +9,15 @@
|
||||||
<form class="form-inline pull-right">
|
<form class="form-inline pull-right">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="search">Search:</label>
|
<label for="search">Search:</label>
|
||||||
<input type="text" class="form-control" id="search" data-ng-model="servers_search">
|
<input type="text" class="form-control" id="search" data-ng-model="servers_search" />
|
||||||
</div>
|
</div>
|
||||||
<button type="button" title="Refresh" class="btn btn-default" aria-label="Refresh">
|
<button type="button" title="Refresh" class="btn btn-default" aria-label="Refresh">
|
||||||
<span class="glyphicon glyphicon-refresh" title="Refresh" aria-hidden="false" ng-click="updateView()"></span>
|
<span
|
||||||
|
class="glyphicon glyphicon-refresh"
|
||||||
|
title="Refresh"
|
||||||
|
aria-hidden="false"
|
||||||
|
ng-click="updateView()"
|
||||||
|
></span>
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
@ -30,8 +35,9 @@
|
||||||
<th width="5%">Duration</th>
|
<th width="5%">Duration</th>
|
||||||
<th width="5%">State</th>
|
<th width="5%">State</th>
|
||||||
<th width="5%">Idle</th>
|
<th width="5%">Idle</th>
|
||||||
<th width="1%"><center><span class="glyphicon glyphicon-option-vertical" aria-hidden="true"></span></center></th>
|
<th width="1%">
|
||||||
|
<center><span class="glyphicon glyphicon-option-vertical" aria-hidden="true"></span></center>
|
||||||
|
</th>
|
||||||
|
|
||||||
<tr ng-repeat="s in servers | filter:servers_search | orderBy:'server_id'">
|
<tr ng-repeat="s in servers | filter:servers_search | orderBy:'server_id'">
|
||||||
<td>{{ s.server_id }}</td>
|
<td>{{ s.server_id }}</td>
|
||||||
|
@ -68,22 +74,25 @@
|
||||||
<td>{{ s.server_state }}</td>
|
<td>{{ s.server_state }}</td>
|
||||||
<td>{{ s.idle | hfcduration }}</td>
|
<td>{{ s.idle | hfcduration }}</td>
|
||||||
<td>
|
<td>
|
||||||
<span class="glyphicon glyphicon-zoom-in" title="Detail" aria-hidden="false" ng-click="triggerDetail(s.server_id)"></span>
|
<span
|
||||||
|
class="glyphicon glyphicon-zoom-in"
|
||||||
|
title="Detail"
|
||||||
|
aria-hidden="false"
|
||||||
|
ng-click="triggerDetail(s.server_id)"
|
||||||
|
></span>
|
||||||
<div ng-hide="checkDetail(s.server_id)">
|
<div ng-hide="checkDetail(s.server_id)">
|
||||||
 
|
 
|
||||||
<div ng-repeat="d in s.domains | orderBy:'domain_name'">
|
<div ng-repeat="d in s.domains | orderBy:'domain_name'">
|
||||||
<span class="glyphicon glyphicon-zoom-in" title="Detail" aria-hidden="false" ng-click="triggerDetail(s.server_id+d.domain_name)"></span>
|
<span
|
||||||
|
class="glyphicon glyphicon-zoom-in"
|
||||||
|
title="Detail"
|
||||||
|
aria-hidden="false"
|
||||||
|
ng-click="triggerDetail(s.server_id+d.domain_name)"
|
||||||
|
></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
|
@ -9,10 +9,15 @@
|
||||||
<form class="form-inline pull-right">
|
<form class="form-inline pull-right">
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="search">Search:</label>
|
<label for="search">Search:</label>
|
||||||
<input type="text" class="form-control" id="search" data-ng-model="servers_search">
|
<input type="text" class="form-control" id="search" data-ng-model="servers_search" />
|
||||||
</div>
|
</div>
|
||||||
<button type="button" title="Refresh" class="btn btn-default" aria-label="Refresh">
|
<button type="button" title="Refresh" class="btn btn-default" aria-label="Refresh">
|
||||||
<span class="glyphicon glyphicon-refresh" title="Refresh" aria-hidden="false" ng-click="updateView()"></span>
|
<span
|
||||||
|
class="glyphicon glyphicon-refresh"
|
||||||
|
title="Refresh"
|
||||||
|
aria-hidden="false"
|
||||||
|
ng-click="updateView()"
|
||||||
|
></span>
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
@ -38,9 +43,10 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-4"></div>
|
<div class="col-md-4"></div>
|
||||||
<div class="col-md-8">Deadtime: dwell:{{ status.dead_time.dwell}} idle:{{ status.dead_time.idle}} cancel:{{ status.dead_time.cancel_check}}</div>
|
<div class="col-md-8">
|
||||||
|
Deadtime: dwell:{{ status.dead_time.dwell}} idle:{{ status.dead_time.idle}} cancel:{{
|
||||||
|
status.dead_time.cancel_check}}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ docker-compose version 1.11.2, build dfed245
|
||||||
hcamacho@Hanks-MBP:rvpn-docker $ docker --version
|
hcamacho@Hanks-MBP:rvpn-docker $ docker --version
|
||||||
Docker version 17.03.0-ce, build 60ccb22
|
Docker version 17.03.0-ce, build 60ccb22
|
||||||
```
|
```
|
||||||
|
|
||||||
- checkout code into gopath
|
- checkout code into gopath
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
@ -87,6 +88,3 @@ rvpn_1 | INFO: genericlistener: 2017/03/04 18:13:02.270281 connection.go:242: W
|
||||||
```
|
```
|
||||||
|
|
||||||
The line "Connection Registration Accepted indicates a client WSS registered, was authenticated and registered its domains with the RVPN
|
The line "Connection Registration Accepted indicates a client WSS registered, was authenticated and registered its domains with the RVPN
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue